@colijnit/transaction 12.1.136 → 12.1.138
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/bundles/colijnit-transaction.umd.js +7268 -6997
- package/bundles/colijnit-transaction.umd.js.map +1 -1
- package/colijnit-transaction.d.ts +287 -287
- package/colijnit-transaction.metadata.json +1 -1
- package/esm2015/colijnit-transaction.js +288 -288
- package/esm2015/lib/component/core/base/components/characteristic-answer/characteristic-answer.component.js +6 -8
- package/esm2015/lib/component/core/base/components/warehouse/warehouse.component.js +7 -9
- package/esm2015/lib/component/core/base/transaction-filter-popup-base.component.js +2 -2
- package/esm2015/lib/component/shopping-cart-preview/shopping-cart-preview.module.js +11 -9
- package/esm2015/lib/component/transaction-header-fields/transaction-header-deposit-amount.component.js +4 -1
- package/esm2015/lib/component/transaction-header-fields/transaction-header-deposit-percentage.component.js +4 -1
- package/esm2015/lib/component/transaction-header-fields/transaction-header-discount-amount.component.js +4 -1
- package/esm2015/lib/component/transaction-header-fields/transaction-header-discount-percentage.component.js +4 -1
- package/esm2015/lib/component/transaction-header-fields/transaction-header-discount-transaction-total.component.js +4 -1
- package/esm2015/lib/component/transaction-line/transaction-purchase-line/transaction-purchase-line-base.component.js +4 -1
- package/esm2015/lib/component/transaction-line/transaction-purchase-line/transaction-purchase-line.component.js +2 -2
- package/esm2015/lib/component/transaction-line-fields/transaction-line-discount-amount.component.js +4 -1
- package/esm2015/lib/component/transaction-line-fields/transaction-line-line-discount.component.js +4 -1
- package/esm2015/lib/component/transaction-line-fields/transaction-line-quantum-discount.component.js +4 -1
- package/esm2015/lib/component/transaction-line-fields/transaction-line-special-discount.component.js +4 -1
- package/esm2015/lib/component/transaction-line-fields/transaction-line-supplier-button.component.js +10 -4
- package/esm2015/lib/component/transaction-line-fields/transaction-line-warehouse-button.component.js +2 -2
- package/esm2015/lib/component/transaction-search/transaction-filter-content/purchase-order-filter-content/transaction-purchase-order-filter-content-order/transaction-purchase-order-filter-content-order.component.js +17 -1
- package/esm2015/lib/component/transaction-search/transaction-filter-content/sales-order-filter-content/transaction-sales-order-filter-content-order/transaction-sales-order-filter-content-order.component.js +17 -1
- package/esm2015/lib/service/transaction-base.service.js +9 -1
- package/esm2015/lib/service/transaction-connector-adapter.service.js +41 -1
- package/esm2015/lib/service/transaction-connector.service.js +19 -1
- package/esm2015/lib/service/transaction.service.js +10 -1
- package/esm2015/lib/transaction-version.js +3 -3
- package/fesm2015/colijnit-transaction.js +9918 -9782
- package/fesm2015/colijnit-transaction.js.map +1 -1
- package/lib/component/core/base/components/characteristic-answer/characteristic-answer.component.d.ts +4 -4
- package/lib/component/core/base/components/warehouse/warehouse.component.d.ts +5 -5
- package/lib/component/transaction-line/transaction-purchase-line/transaction-purchase-line-base.component.d.ts +1 -0
- package/lib/component/transaction-line-fields/transaction-line-supplier-button.component.d.ts +1 -1
- package/lib/component/transaction-search/transaction-filter-content/purchase-order-filter-content/transaction-purchase-order-filter-content-order/transaction-purchase-order-filter-content-order.component.d.ts +6 -0
- package/lib/component/transaction-search/transaction-filter-content/sales-order-filter-content/transaction-sales-order-filter-content-order/transaction-sales-order-filter-content-order.component.d.ts +6 -0
- package/lib/service/transaction-base.service.d.ts +1 -0
- package/lib/service/transaction-connector-adapter.service.d.ts +4 -0
- package/lib/service/transaction-connector.service.d.ts +4 -0
- package/lib/service/transaction.service.d.ts +11 -7
- package/package.json +4 -4
|
@@ -60,6 +60,7 @@ import { BusinessObjectFactory } from '@colijnit/ioneconnector/build/service/bus
|
|
|
60
60
|
import { CoDocument } from '@colijnit/mainapi/build/model/co-document';
|
|
61
61
|
import { CashDrawer } from '@colijnit/transactionapi/build/model/cash-drawer.bo';
|
|
62
62
|
import { AmountToPay } from '@colijnit/transactionapi/build/model/amount-to-pay';
|
|
63
|
+
import { WorkFlowStatus } from "@colijnit/transactionapi/build/model/workflow-status.bo";
|
|
63
64
|
import * as i0 from "@angular/core";
|
|
64
65
|
import * as i1 from "./options.service";
|
|
65
66
|
import * as i2 from "../cache/service/select-multiple-cache.service";
|
|
@@ -155,6 +156,18 @@ export class TransactionConnectorAdapterService {
|
|
|
155
156
|
}
|
|
156
157
|
});
|
|
157
158
|
}
|
|
159
|
+
getWorkFlowStatuses(transactionKind) {
|
|
160
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
161
|
+
const result = yield this.connector.getWorkFlowStatuses(transactionKind);
|
|
162
|
+
if (result.validationResult && result.validationResult.success) {
|
|
163
|
+
return this._boFactory.makeBOArrayFromRawBackendDataArray(WorkFlowStatus, result.resultObjects);
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
this._handleExceptionFromResponse(result);
|
|
167
|
+
return [];
|
|
168
|
+
}
|
|
169
|
+
});
|
|
170
|
+
}
|
|
158
171
|
getCountry(countryCode) {
|
|
159
172
|
return __awaiter(this, void 0, void 0, function* () {
|
|
160
173
|
const countries = yield this.getCountries();
|
|
@@ -246,6 +259,18 @@ export class TransactionConnectorAdapterService {
|
|
|
246
259
|
}
|
|
247
260
|
});
|
|
248
261
|
}
|
|
262
|
+
getWebSessionSalesOrder() {
|
|
263
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
264
|
+
const result = yield this.connector.getWebSessionSalesOrder();
|
|
265
|
+
if (result.validationResult && result.validationResult.success) {
|
|
266
|
+
return this._boFactory.makeWithRawBackendData(TransactionInfoResponse, result.resultObject);
|
|
267
|
+
}
|
|
268
|
+
else {
|
|
269
|
+
this._handleExceptionFromResponse(result);
|
|
270
|
+
return null;
|
|
271
|
+
}
|
|
272
|
+
});
|
|
273
|
+
}
|
|
249
274
|
deleteTransactionByUuId(uuid) {
|
|
250
275
|
return __awaiter(this, void 0, void 0, function* () {
|
|
251
276
|
const result = yield this.connector.deleteTransactionByUuId(uuid);
|
|
@@ -736,6 +761,21 @@ export class TransactionConnectorAdapterService {
|
|
|
736
761
|
});
|
|
737
762
|
});
|
|
738
763
|
}
|
|
764
|
+
addWebSessionTransactionLine(articleNumber, quantity) {
|
|
765
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
766
|
+
return new Promise((resolve, reject) => {
|
|
767
|
+
return this.connector.addWebSessionTransactionLine(articleNumber, quantity).then((result) => {
|
|
768
|
+
if (result.validationResult && result.validationResult.success) {
|
|
769
|
+
resolve(this._boFactory.makeWithRawBackendData(TransactionInfoResponse, result.resultObject));
|
|
770
|
+
}
|
|
771
|
+
else {
|
|
772
|
+
this._handleExceptionFromResponse(result);
|
|
773
|
+
reject(null);
|
|
774
|
+
}
|
|
775
|
+
});
|
|
776
|
+
});
|
|
777
|
+
});
|
|
778
|
+
}
|
|
739
779
|
addTransactionLine(uuid, articleNo, quantity, aboveLineNr, belowLineNr) {
|
|
740
780
|
return __awaiter(this, void 0, void 0, function* () {
|
|
741
781
|
return new Promise((resolve, reject) => {
|
|
@@ -2577,4 +2617,4 @@ TransactionConnectorAdapterService.ctorParameters = () => [
|
|
|
2577
2617
|
{ type: SelectMultipleParameterizedCacheService },
|
|
2578
2618
|
{ type: ErrorService }
|
|
2579
2619
|
];
|
|
2580
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24tY29ubmVjdG9yLWFkYXB0ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RyYW5zYWN0aW9uL3NyYy9saWIvc2VydmljZS90cmFuc2FjdGlvbi1jb25uZWN0b3ItYWRhcHRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxtREFBbUQsQ0FBQztBQUM1RSxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSxtRUFBbUUsQ0FBQztBQUUxRyxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0saURBQWlELENBQUM7QUFFeEUsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLHlEQUF5RCxDQUFDO0FBQ3ZGLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSx5REFBeUQsQ0FBQztBQUN2RixPQUFPLEVBQUMsa0NBQWtDLEVBQUMsTUFBTSw4RUFBOEUsQ0FBQztBQUVoSSxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSwwREFBMEQsQ0FBQztBQUMzRixPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sNENBQTRDLENBQUM7QUFDdkUsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQ3BELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSx3REFBd0QsQ0FBQztBQUNyRixPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSwrREFBK0QsQ0FBQztBQUNsRyxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLG9EQUFvRCxDQUFDO0FBR2hGLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxpREFBaUQsQ0FBQztBQUMxRSxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sMENBQTBDLENB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LEVBQUUsTUFBTTthQUNuQjs7O1lBNUdPLGNBQWM7WUF1QmQsMEJBQTBCO1lBQzFCLHVDQUF1QztZQUN2QyxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtNYXJrZXRpbmd9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9tYXJrZXRpbmcuYm8nO1xyXG5pbXBvcnQge1RyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlfSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvdHJhbnNhY3Rpb24taW5mby1yZXNwb25zZS5ibyc7XHJcbmltcG9ydCB7VHJhbnNhY3Rpb25LaW5kfSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvZW51bS90cmFuc2FjdGlvbi1raW5kLmVudW0nO1xyXG5pbXBvcnQge0NvdW50cnl9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9jb3VudHJ5LmJvJztcclxuaW1wb3J0IHtTZXF1ZW5jZU5hbWV9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9lbnVtL3NlcXVlbmNlLW5hbWUuZW51bSc7XHJcbmltcG9ydCB7RGVsaXZlcnlNZXRob2R9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9kZWxpdmVyeS1tZXRob2QuYm8nO1xyXG5pbXBvcnQge0RlbGl2ZXJ5T3B0aW9ufSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvZGVsaXZlcnktb3B0aW9uLmJvJztcclxuaW1wb3J0IHtHZXRQb3N0YWxDb2RlUmV0cmlldmFsT3V0cHV0UGFyYW1zfSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvZ2V0LXBvc3RhbC1jb2RlLXJldHJpZXZhbC1vdXRwdXQtcGFyYW1zJztcclxuaW1wb3J0IHtUcmFuc2FjdGlvbkFydGljbGVXYXJlaG91c2V9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC90cmFuc2FjdGlvbi1hcnRpY2xlLXdhcmVob3VzZS5ibyc7XHJcbmltcG9ydCB7QXJ0aWNsZUZ1bGxPYmplY3R9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9hcnRpY2xlLWZ1bGwtb2JqZWN0JztcclxuaW1wb3J0IHtUcmFuc2FjdGlvbn0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL3RyYW5zYWN0aW9uJztcclxuaW1wb3J0IHtTdGFuZGFyZFRleHR9IGZyb20gJy4uL21vZGVsL3N0YW5kYXJkLXRleHQnO1xyXG5pbXBvcnQge0N1c3RvbWVyR3JvdXB9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9jdXN0b21lci1ncm91cC5ibyc7XHJcbmltcG9ydCB7VHJhbnNhY3Rpb25MaW5lSW5mb30gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3RyYW5zYWN0aW9uLWxpbmUtaW5mby5ibyc7XHJcbmltcG9ydCB7T3B0aW9uc1NlcnZpY2V9IGZyb20gJy4vb3B0aW9ucy5zZXJ2aWNlJztcclxuaW1wb3J0IHtDYXNoUmVnaXN0ZXJ9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9jYXNoLXJlZ2lzdGVyJztcclxuaW1wb3J0IHtDaGFuZ2VMaW5lU2VxdWVuY2VSZXF1ZXN0fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvY2hhbmdlLWxpbmUtc2VxdWVuY2UtcmVxdWVzdCc7XHJcbmltcG9ydCB7UmVzb2x2ZUxpbmVQZW5kaW5nUmVhc29uUmVxdWVzdH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3Jlc29sdmUtcGVuZGluZy1yZWFzb24tcmVxdWVzdC5ibyc7XHJcbmltcG9ydCB7UHJpY2VMaXN0fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvcHJpY2UtbGlzdCc7XHJcbmltcG9ydCB7VmF0fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvdmF0JztcclxuaW1wb3J0IHtEaXNjb3VudFR5cGV9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9lbnVtL2Rpc2NvdW50LXR5cGUuZW51bSc7XHJcbmltcG9ydCB7VHJhbnNhY3Rpb25TZWFyY2hWaWV3UmVxdWVzdH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3RyYW5zYWN0aW9uLXNlYXJjaC12aWV3LXJlcXVlc3QnO1xyXG5pbXBvcnQge1RyYW5zYWN0aW9uU2VhcmNoVmlld30gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3RyYW5zYWN0aW9uLXNlYXJjaC12aWV3LmJvJztcclxuaW1wb3J0IHtPbkhvbGRDb2RlfSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvb24taG9sZC1jb2RlLmJvJztcclxuaW1wb3J0IHtXYXJlaG91c2V9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC93YXJlaG91c2UuYm8nO1xyXG5pbXBvcnQge0NvZGVEZXNjcmlwdGlvbn0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2NvZGUtZGVzY3JpcHRpb24nO1xyXG5pbXBvcnQge1JlY2VpdmVHb29kc0ZvclB1cmNoYXNlT3JkZXJSZXF1ZXN0fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvcmVjZWl2ZS1nb29kcy1mb3ItcHVyY2hhc2Utb3JkZXItcmVxdWVzdC5ibyc7XHJcbmltcG9ydCB7XHJcbiAgUmVjZWl2ZUdvb2RzRm9yUHVyY2hhc2VPcmRlckNvcnJlY3Rpb25SZXF1ZXN0XHJcbn0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3JlY2VpdmUtZ29vZHMtZm9yLXB1cmNoYXNlLW9yZGVyLWNvcnJlY3Rpb24tcmVxdWVzdC5ibyc7XHJcbmltcG9ydCB7UGF5bWVudE1ldGhvZH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3BheW1lbnQtbWV0aG9kLmJvJztcclxuaW1wb3J0IHtHZXRQdXJjaGFzZVBvcnRhbExpbmV9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9nZXQtcHVyY2hhc2UtcG9ydGFsLWxpbmUnO1xyXG5pbXBvcnQge1B1cmNoYXNlUG9ydGFsTGluZX0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3B1cmNoYXNlLXBvcnRhbC1saW5lLmJvJztcclxuaW1wb3J0IHtDcmVhdGVQYXltZW50TGlua1Jlc3VsdH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2NyZWF0ZS1wYXltZW50LWxpbmstcmVzdWx0LmJvJztcclxuaW1wb3J0IHtUcmFuc2FjdGlvblNlYXJjaFJlc3VsdH0gZnJvbSAnLi4vbW9kZWwvdHJhbnNhY3Rpb24tc2VhcmNoLXJlc3VsdCc7XHJcbmltcG9ydCB7UmVzb2x2ZUhlYWRlclBlbmRpbmdSZWFzb25SZXF1ZXN0fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvcmVzb2x2ZS1oZWFkZXItcGVuZGluZy1yZWFzb24tcmVxdWVzdC5ibyc7XHJcbmltcG9ydCB7UGF5bWVudExpbmtTdGF0dXN9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9wYXltZW50LWxpbmstc3RhdHVzLmJvJztcclxuaW1wb3J0IHtTZWxlY3RNdWx0aXBsZUNhY2hlU2VydmljZX0gZnJvbSAnLi4vY2FjaGUvc2VydmljZS9zZWxlY3QtbXVsdGlwbGUtY2FjaGUuc2VydmljZSc7XHJcbmltcG9ydCB7U2VsZWN0TXVsdGlwbGVQYXJhbWV0ZXJpemVkQ2FjaGVTZXJ2aWNlfSBmcm9tICcuLi9jYWNoZS9zZXJ2aWNlL3NlbGVjdC1tdWx0aXBsZS1wYXJhbWV0ZXJpemVkLWNhY2hlLnNlcnZpY2UnO1xyXG5pbXBvcnQge0Vycm9yU2VydmljZX0gZnJvbSAnLi9lcnJvci5zZXJ2aWNlJztcclxuaW1wb3J0IHtHZXRQdXJjaGFzZU9yZGVyQ29uZmlybWF0aW9ufSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvZ2V0LXB1cmNoYXNlLW9yZGVyLWNvbmZpcm1hdGlvbic7XHJcbmltcG9ydCB7VHJhbnNhY3Rpb25Mb2NrUmVzdWx0fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvdHJhbnNhY3Rpb24tbG9jay1yZXN1bHQuYm8nO1xyXG5pbXBvcnQge1ByaXZhY3lTZXR0aW5nfSBmcm9tICdAY29saWpuaXQvbWFpbmFwaS9idWlsZC9tb2RlbC9wcml2YWN5LXNldHRpbmcuYm8nO1xyXG5pbXBvcnQge0RhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhfSBmcm9tICdAY29saWpuaXQvaW9uZWNvbm5lY3Rvci9idWlsZC9tb2RlbC9kYXRhLXNlcnZpY2UtcmVzcG9uc2UtZGF0YSc7XHJcbmltcG9ydCB7UmVsYXRpb25Qcml2YWN5U2V0dGluZ30gZnJvbSAnQGNvbGlqbml0L3JlbGF0aW9uYXBpL2J1aWxkL21vZGVsL3JlbGF0aW9uLXByaXZhY3ktc2V0dGluZy5ibyc7XHJcbmltcG9ydCB7SW1hZ2VVdGlsc30gZnJvbSAnQGNvbGlqbml0L2lvbmVjb25uZWN0b3IvYnVpbGQvdXRpbHMvaW1hZ2UtdXRpbHMnO1xyXG5pbXBvcnQge0NvRG9tYWluVmFsdWV9IGZyb20gJ0Bjb2xpam5pdC9tYWluYXBpL2J1aWxkL21vZGVsL2NvLWRvbWFpbi12YWx1ZS5ibyc7XHJcbmltcG9ydCB7VGFnfSBmcm9tICdAY29saWpuaXQvbWFpbmFwaS9idWlsZC9tb2RlbC90YWcnO1xyXG5pbXBvcnQge1NhbGVzUGVyc29ufSBmcm9tICdAY29saWpuaXQvcmVsYXRpb25hcGkvYnVpbGQvbW9kZWwvc2FsZXMtcGVyc29uLmJvJztcclxuaW1wb3J0IHtTdG9ja1N0aWNrZXJzUHJpbnRMYXlvdXRzfSBmcm9tICdAY29saWpuaXQvc2hhcmVkYXBpL2J1aWxkL21vZGVsL3JlcG9ydC9zdG9jay1zdGlja2Vycy1wcmludC1sYXlvdXRzLmJvJztcclxuaW1wb3J0IHtTaGFyZWRhcGl9IGZyb20gJ0Bjb2xpam5pdC9zaGFyZWRhcGkvYnVpbGQvc2hhcmVkYXBpJztcclxuaW1wb3J0IHtBdmFpbGFibGVTdG9ja30gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2F2YWlsYWJsZS1zdG9jay5ibyc7XHJcbmltcG9ydCB7QWxsb2NhdGVHb29kc0ZvclNhbGVzT3JkZXJSZXF1ZXN0fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvYWxsb2NhdGUtZ29vZHMtZm9yLXNhbGVzLW9yZGVyLXJlcXVlc3QnO1xyXG5pbXBvcnQge1xyXG4gIEFsbG9jYXRlR29vZHNGb3JTYWxlc09yZGVyQ29ycmVjdGlvblJlcXVlc3RcclxufSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvYWxsb2NhdGUtZ29vZHMtZm9yLXNhbGVzLW9yZGVyLWNvcnJlY3Rpb24tcmVxdWVzdCc7XHJcbmltcG9ydCB7UmVwb3J0TGF5b3V0U2VsZWN0aW9uRW1haWx9IGZyb20gJ0Bjb2xpam5pdC9tYWluYXBpL2J1aWxkL21vZGVsL3JlcG9ydC1sYXlvdXQtc2VsZWN0aW9uLWVtYWlsLmJvJztcclxuaW1wb3J0IHtSZXBvcnRMYXlvdXRTZWxlY3Rpb25QcmludH0gZnJvbSAnQGNvbGlqbml0L21haW5hcGkvYnVpbGQvbW9kZWwvcmVwb3J0LWxheW91dC1zZWxlY3Rpb24tcHJpbnQuYm8nO1xyXG5pbXBvcnQge0NyZWF0ZVNhbGVzT3JkZXJSZXF1ZXN0fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvY3JlYXRlLXNhbGVzLW9yZGVyLXJlcXVlc3QnO1xyXG5pbXBvcnQge0NyZWF0ZUNhc2hSZWdpc3Rlck9yZGVyUmVxdWVzdH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2NyZWF0ZS1jYXNoLXJlZ2lzdGVyLW9yZGVyLXJlcXVlc3QnO1xyXG5pbXBvcnQge0NyZWF0ZVB1cmNoYXNlT3JkZXJSZXF1ZXN0fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvY3JlYXRlLXB1cmNoYXNlLW9yZGVyLXJlcXVlc3QnO1xyXG5pbXBvcnQge0NyZWF0ZVNlcnZpY2VPcmRlclJlcXVlc3R9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9jcmVhdGUtc2VydmljZS1vcmRlci1yZXF1ZXN0JztcclxuaW1wb3J0IHtDcmVhdGVTYWxlc1F1b3RhdGlvblJlcXVlc3R9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9jcmVhdGUtc2FsZXMtcXVvdGF0aW9uLXJlcXVlc3QnO1xyXG5pbXBvcnQge1B1cmNoYXNlQWR2aWNlTGluZX0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3B1cmNoYXNlLWFkdmljZS1saW5lLmJvJztcclxuaW1wb3J0IHtQdXJjaGFzZUFkdmljZUZpbHRlcnN9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9wdXJjaGFzZS1hZHZpY2UtZmlsdGVycyc7XHJcbmltcG9ydCB7RW1haWxEZWxpdmVyeU5vdGVSZXF1ZXN0fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvZW1haWwtZGVsaXZlcnktbm90ZS1yZXF1ZXN0JztcclxuaW1wb3J0IHtQZGZEZWxpdmVyeU5vdGVSZXF1ZXN0fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvcGRmLWRlbGl2ZXJ5LW5vdGUtcmVxdWVzdCc7XHJcbmltcG9ydCB7UHJpbnREZWxpdmVyeU5vdGVSZXF1ZXN0fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvcHJpbnQtZGVsaXZlcnktbm90ZS1yZXF1ZXN0JztcclxuaW1wb3J0IHtUcmFuc2FjdGlvbkRlcG9zaXRQYXltZW50SW5mb30gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3RyYW5zYWN0aW9uLWRlcG9zaXQtcGF5bWVudC1pbmZvLmJvJztcclxuaW1wb3J0IHtUcmFuc2FjdGlvbkluZm9IaXN0b3J5fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvdHJhbnNhY3Rpb24taW5mby1oaXN0b3J5LmJvJztcclxuaW1wb3J0IHtQcmludEludm9pY2VSZXF1ZXN0fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvcHJpbnQtaW52b2ljZS1yZXF1ZXN0JztcclxuaW1wb3J0IHtQZGZJbnZvaWNlUmVxdWVzdH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3BkZi1pbnZvaWNlLXJlcXVlc3QnO1xyXG5pbXBvcnQge0VtYWlsSW52b2ljZVJlcXVlc3R9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9lbWFpbC1pbnZvaWNlLXJlcXVlc3QnO1xyXG5pbXBvcnQge1JlZlRyYW5zYWN0aW9ufSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvcmVmLXRyYW5zYWN0aW9uLmJvJztcclxuaW1wb3J0IHtNYWluQXBpfSBmcm9tICdAY29saWpuaXQvbWFpbmFwaSc7XHJcbmltcG9ydCB7VGFnVHJlZUl0ZW19IGZyb20gJ0Bjb2xpam5pdC9tYWluYXBpL2J1aWxkL21vZGVsL3RhZy10cmVlLWl0ZW0uYm8nO1xyXG5pbXBvcnQge0ludGVybmFsUGFyYW19IGZyb20gJ0Bjb2xpam5pdC9tYWluYXBpL2J1aWxkL2VudW0vaW50ZXJuYWwtcGFyYW0uZW51bSc7XHJcbmltcG9ydCB7R29vZHNBbGxvY2F0aW9uSGlzdG9yeX0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2dvb2RzLWFsbG9jYXRpb24taGlzdG9yeS5ibyc7XHJcbmltcG9ydCB7R29vZHNSZWNlaXB0SGlzdG9yeX0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2dvb2RzLXJlY2VpcHQtaGlzdG9yeS5ibyc7XHJcbmltcG9ydCB7TGF5b3V0Q29kZX0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL2VudW0vbGF5b3V0LWNvZGUuZW51bSc7XHJcbmltcG9ydCB7SGlzdG9yaWNSZXBvcnR9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9oaXN0b3JpYy1yZXBvcnQuYm8nO1xyXG5pbXBvcnQge1ByaW50ZXJ9IGZyb20gJ0Bjb2xpam5pdC9tYWluYXBpL2J1aWxkL21vZGVsL3ByaW50ZXIuYm8nO1xyXG5pbXBvcnQge0N1cnJlbmN5fSBmcm9tICdAY29saWpuaXQvbWFpbmFwaS9idWlsZC9tb2RlbC9jdXJyZW5jeS5ibyc7XHJcbmltcG9ydCB7UGF5bWVudENvbmRpdGlvbn0gZnJvbSAnQGNvbGlqbml0L21haW5hcGkvYnVpbGQvbW9kZWwvcGF5bWVudC1jb25kaXRpb24uYm8nO1xyXG5pbXBvcnQge1BzcFRyYW5zYWN0aW9uU3RhdHVzfSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvcHNwLXRyYW5zYWN0aW9uLXN0YXR1cy5ibyc7XHJcbmltcG9ydCB7R29vZHNUb0JlUGlja2VkRm9yT3JkZXJSZXF1ZXN0fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvZ29vZHMtdG8tYmUtcGlja2VkLWZvci1vcmRlci1yZXF1ZXN0JztcclxuaW1wb3J0IHtXYXJlaG91c2VTdG9ja0luZm99IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC93YXJlaG91c2Utc3RvY2staW5mby5ibyc7XHJcbmltcG9ydCB7R29vZHNUb0JlUGlja2VkSGlzdG9yeX0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2dvb2RzLXRvLWJlLXBpY2tlZC1oaXN0b3J5JztcclxuaW1wb3J0IHtHb29kc1BpY2tlZEhpc3Rvcnl9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9nb29kcy1waWNrZWQtaGlzdG9yeSc7XHJcbmltcG9ydCB7UGRmSGlzdG9yaWNEZWxpdmVyeU5vdGVSZXF1ZXN0fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvcGRmLWhpc3RvcmljLWRlbGl2ZXJ5LW5vdGUtcmVxdWVzdCc7XHJcbmltcG9ydCB7RW1haWxIaXN0b3JpY0RlbGl2ZXJ5Tm90ZVJlcXVlc3R9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9lbWFpbC1oaXN0b3JpYy1kZWxpdmVyeS1ub3RlLXJlcXVlc3QnO1xyXG5pbXBvcnQge1ByaW50SGlzdG9yaWNEZWxpdmVyeU5vdGVSZXF1ZXN0fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvcHJpbnQtaGlzdG9yaWMtZGVsaXZlcnktbm90ZS1yZXF1ZXN0JztcclxuaW1wb3J0IHtQcmludEhpc3RvcmljT3JkZXJDb25maXJtYXRpb25SZXF1ZXN0fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvcHJpbnQtaGlzdG9yaWMtb3JkZXItY29uZmlybWF0aW9uLXJlcXVlc3QnO1xyXG5pbXBvcnQge0VtYWlsSGlzdG9yaWNPcmRlckNvbmZpcm1hdGlvblJlcXVlc3R9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9lbWFpbC1oaXN0b3JpYy1vcmRlci1jb25maXJtYXRpb24tcmVxdWVzdCc7XHJcbmltcG9ydCB7UGRmSGlzdG9yaWNJbnZvaWNlUmVxdWVzdH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3BkZi1oaXN0b3JpYy1pbnZvaWNlLXJlcXVlc3QnO1xyXG5pbXBvcnQge1ByaW50SGlzdG9yaWNJbnZvaWNlUmVxdWVzdH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3ByaW50LWhpc3RvcmljLWludm9pY2UtcmVxdWVzdCc7XHJcbmltcG9ydCB7RW1haWxIaXN0b3JpY0ludm9pY2VSZXF1ZXN0fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvZW1haWwtaGlzdG9yaWMtaW52b2ljZS1yZXF1ZXN0JztcclxuaW1wb3J0IHtQcmludFB1cmNoYXNlT3JkZXJSZXF1ZXN0fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvcHJpbnQtcHVyY2hhc2Utb3JkZXItcmVxdWVzdCc7XHJcbmltcG9ydCB7UGRmUHVyY2hhc2VPcmRlclJlcXVlc3R9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9wZGYtcHVyY2hhc2Utb3JkZXItcmVxdWVzdCc7XHJcbmltcG9ydCB7UHJpbnRPcmRlckNvbmZpcm1hdGlvblJlcXVlc3R9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9wcmludC1vcmRlci1jb25maXJtYXRpb24tcmVxdWVzdCc7XHJcbmltcG9ydCB7UGRmT3JkZXJDb25maXJtYXRpb25SZXF1ZXN0fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvcGRmLW9yZGVyLWNvbmZpcm1hdGlvbi1yZXF1ZXN0JztcclxuaW1wb3J0IHtFbWFpbE9yZGVyQ29uZmlybWF0aW9uUmVxdWVzdH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2VtYWlsLW9yZGVyLWNvbmZpcm1hdGlvbi1yZXF1ZXN0JztcclxuaW1wb3J0IHtFbWFpbFB1cmNoYXNlT3JkZXJSZXF1ZXN0fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvZW1haWwtcHVyY2hhc2Utb3JkZXItcmVxdWVzdCc7XHJcbmltcG9ydCB7T2JqZWN0Q29uZmlndXJhdGlvbn0gZnJvbSAnQGNvbGlqbml0L2lvbmVjb25uZWN0b3IvYnVpbGQvbW9kZWwvb2JqZWN0LWNvbmZpZ3VyYXRpb24nO1xyXG5pbXBvcnQge0J1c2luZXNzT2JqZWN0RmFjdG9yeX0gZnJvbSAnQGNvbGlqbml0L2lvbmVjb25uZWN0b3IvYnVpbGQvc2VydmljZS9idXNpbmVzcy1vYmplY3QtZmFjdG9yeSc7XHJcbmltcG9ydCB7Q29Eb2N1bWVudH0gZnJvbSAnQGNvbGlqbml0L21haW5hcGkvYnVpbGQvbW9kZWwvY28tZG9jdW1lbnQnO1xyXG5pbXBvcnQge0dvb2RzUGlja2VkUmVxdWVzdH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2dvb2RzLXBpY2tlZC1yZXF1ZXN0JztcclxuaW1wb3J0IHtEZWxldGVHb29kc1BpY2tlZEZvck9yZGVyUmVxdWVzdH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2RlbGV0ZS1nb29kcy1waWNrZWQtZm9yLW9yZGVyLXJlcXVlc3QnO1xyXG5pbXBvcnQge0RlbGV0ZUdvb2RzVG9CZVBpY2tlZEZvck9yZGVyUmVxdWVzdH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2RlbGV0ZS1nb29kcy10by1iZS1waWNrZWQtZm9yLW9yZGVyLXJlcXVlc3QnO1xyXG5pbXBvcnQge0Nhc2hEcmF3ZXJzUmVxdWVzdH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2Nhc2gtZHJhd2Vycy1yZXF1ZXN0JztcclxuaW1wb3J0IHtDYXNoRHJhd2VyfSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvY2FzaC1kcmF3ZXIuYm8nO1xyXG5pbXBvcnQge1ByaW50UG9zUmVjZWlwdFJlcXVlc3R9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9wcmludC1wb3MtcmVjZWlwdC1yZXF1ZXN0JztcclxuaW1wb3J0IHtQcmludEhpc3RvcmljUG9zUmVjZWlwdFJlcXVlc3R9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9wcmludC1oaXN0b3JpYy1wb3MtcmVjZWlwdC1yZXF1ZXN0JztcclxuaW1wb3J0IHtFbWFpbFBvc1JlY2VpcHRSZXF1ZXN0fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvZW1haWwtcG9zLXJlY2VpcHQtcmVxdWVzdCc7XHJcbmltcG9ydCB7RW1haWxIaXN0b3JpY1Bvc1JlY2VpcHRSZXF1ZXN0fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvZW1haWwtaGlzdG9yaWMtcG9zLXJlY2VpcHQtcmVxdWVzdCc7XHJcbmltcG9ydCB7RG9QYXltZW50UmVxdWVzdH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2RvLXBheW1lbnQtcmVxdWVzdCc7XHJcbmltcG9ydCB7Q2FsY3VsYXRlQW1vdW50VG9QYXlSZXF1ZXN0fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvY2FsY3VsYXRlLWFtb3VudC10by1wYXktcmVxdWVzdCc7XHJcbmltcG9ydCB7QW1vdW50VG9QYXl9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9hbW91bnQtdG8tcGF5JztcclxuaW1wb3J0IHtUYWdDYXRlZ29yeX0gZnJvbSAnQGNvbGlqbml0L21haW5hcGkvYnVpbGQvZW51bS90YWItY2F0ZWdvcnkuZW51bSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogXCJyb290XCJcclxufSlcclxuZXhwb3J0IGNsYXNzIFRyYW5zYWN0aW9uQ29ubmVjdG9yQWRhcHRlclNlcnZpY2Uge1xyXG4gIHB1YmxpYyBjb25uZWN0b3I6IFRyYW5zYWN0aW9uO1xyXG4gIHB1YmxpYyBzaGFyZWRDb25uZWN0b3I6IFNoYXJlZGFwaTtcclxuICBwdWJsaWMgbWFpbkNvbm5lY3RvcjogTWFpbkFwaTtcclxuXHJcbiAgcHJpdmF0ZSBfYm9GYWN0b3J5OiBCdXNpbmVzc09iamVjdEZhY3RvcnkgPSBuZXcgQnVzaW5lc3NPYmplY3RGYWN0b3J5KCk7XHJcbiAgcHJpdmF0ZSBfaW50ZXJuYWxQYXJhbWV0ZXJDYWNoZTogTWFwPEludGVybmFsUGFyYW0sIGJvb2xlYW4+ID0gbmV3IE1hcDxJbnRlcm5hbFBhcmFtLCBib29sZWFuPigpO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgX29wdGlvbnNTZXJ2aWNlOiBPcHRpb25zU2VydmljZSxcclxuICAgIHByaXZhdGUgX3NlbGVjdE11bHRpcGxlQ2FjaGVTZXJ2aWNlOiBTZWxlY3RNdWx0aXBsZUNhY2hlU2VydmljZSxcclxuICAgIHByaXZhdGUgX3NlbGVjdE11bHRpcGxlUGFyYW1ldGVyaXplZENhY2hlU2VydmljZTogU2VsZWN0TXVsdGlwbGVQYXJhbWV0ZXJpemVkQ2FjaGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfZXJyb3JTZXJ2aWNlOiBFcnJvclNlcnZpY2VcclxuICApIHt9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBjb25uZWN0KCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5jb25uZWN0b3IgPSBuZXcgVHJhbnNhY3Rpb24odGhpcy5fb3B0aW9uc1NlcnZpY2Uub3B0aW9ucyk7XHJcbiAgICBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jb25uZWN0KCk7XHJcbiAgICB0aGlzLnNoYXJlZENvbm5lY3RvciA9IG5ldyBTaGFyZWRhcGkodGhpcy5fb3B0aW9uc1NlcnZpY2Uub3B0aW9ucyk7XHJcbiAgICB0aGlzLm1haW5Db25uZWN0b3IgPSBuZXcgTWFpbkFwaSh0aGlzLl9vcHRpb25zU2VydmljZS5vcHRpb25zKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRBcnRpY2xlRnVsbE9iamVjdChnb29kSWQ6IG51bWJlcik6IFByb21pc2U8QXJ0aWNsZUZ1bGxPYmplY3Q+IHtcclxuICAgIGNvbnN0IHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRBcnRpY2xlRnVsbE9iamVjdChnb29kSWQpO1xyXG4gICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKEFydGljbGVGdWxsT2JqZWN0LCByZXN1bHQucmVzdWx0T2JqZWN0KSBhcyB1bmtub3duIGFzIEFydGljbGVGdWxsT2JqZWN0O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3VsdCk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldEdvb2RJZEZyb21BcnRpY2xlTnIoYXJ0aWNsZU5yOiBzdHJpbmcpOiBQcm9taXNlPG51bWJlcj4ge1xyXG4gICAgY29uc3QgcmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldEdvb2RJZEZyb21BcnRpY2xlTnIoYXJ0aWNsZU5yKTtcclxuICAgIGlmIChyZXN1bHQudmFsaWRhdGlvblJlc3VsdCAmJiByZXN1bHQudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiByZXN1bHQucmVzdWx0T2JqZWN0O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3VsdCk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldFNpbmdsZUltYWdlKG5vZGVJZDogbnVtYmVyIHwgc3RyaW5nLCBwdWJsaWNhdGlvbjogbnVtYmVyLCBpbmNsdWRlTWltZXR5cGU6IGJvb2xlYW4sIHRodW1iOiBib29sZWFuKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgIGNvbnN0IHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRTaW5nbGVJbWFnZShub2RlSWQsIHB1YmxpY2F0aW9uLCBpbmNsdWRlTWltZXR5cGUsIHRodW1iKTtcclxuICAgIGlmIChyZXN1bHQudmFsaWRhdGlvblJlc3VsdCAmJiByZXN1bHQudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIGlmIChyZXN1bHQucmVzdWx0T2JqZWN0ICYmIHJlc3VsdC5yZXN1bHRPYmplY3QuZmlsZVBhdGggIT09IG51bGwgJiYgcmVzdWx0LnJlc3VsdE9iamVjdC5maWxlUGF0aCAhPT0gdW5kZWZpbmVkICYmIHJlc3VsdC5yZXN1bHRPYmplY3QuZmlsZVBhdGggIT09IFwiXCIpIHtcclxuICAgICAgICByZXR1cm4gSW1hZ2VVdGlscy5nZXRGaXhlZEltYWdlRmlsZXBhdGhVcmwocmVzdWx0LnJlc3VsdE9iamVjdC5maWxlUGF0aCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKHJlc3VsdC5yZXN1bHRPYmplY3QpIHtcclxuICAgICAgICAgIGlmIChpbmNsdWRlTWltZXR5cGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIEltYWdlVXRpbHMuZ2V0RG9jQm9keVdpdGhNaW1lVHlwZURlZmluaXRpb24ocmVzdWx0LnJlc3VsdE9iamVjdC5maWxlTmFtZSxcclxuICAgICAgICAgICAgICB0aHVtYiA/IHJlc3VsdC5yZXN1bHRPYmplY3QudGh1bWJuYWlsQm9keSA6IHJlc3VsdC5yZXN1bHRPYmplY3QuZG9jdW1lbnRCb2R5KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiB0aHVtYiA/IHJlc3VsdC5yZXN1bHRPYmplY3QudGh1bWJuYWlsQm9keSA6IHJlc3VsdC5yZXN1bHRPYmplY3QuZG9jdW1lbnRCb2R5O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHsgLy8gbm8gaW1hZ2VcclxuICAgICAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3VsdCk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldENvdW50cmllcygpOiBQcm9taXNlPENvdW50cnlbXT4ge1xyXG4gICAgY29uc3QgcmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldENvdW50cmllcygpO1xyXG4gICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2JvRmFjdG9yeS5tYWtlQk9BcnJheUZyb21SYXdCYWNrZW5kRGF0YUFycmF5KENvdW50cnksIHJlc3VsdC5yZXN1bHRPYmplY3RzKSBhcyB1bmtub3duIGFzIENvdW50cnlbXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXN1bHQpO1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0Q3VzdG9tZXJHcm91cHMoKTogUHJvbWlzZTxDdXN0b21lckdyb3VwW10+IHtcclxuICAgIGNvbnN0IHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRDdXN0b21lckdyb3VwcygpO1xyXG4gICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2JvRmFjdG9yeS5tYWtlQk9BcnJheUZyb21SYXdCYWNrZW5kRGF0YUFycmF5KEN1c3RvbWVyR3JvdXAsIHJlc3VsdC5yZXN1bHRPYmplY3RzKSBhcyB1bmtub3duIGFzIEN1c3RvbWVyR3JvdXBbXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXN1bHQpO1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0Q291bnRyeShjb3VudHJ5Q29kZTogc3RyaW5nKTogUHJvbWlzZTxDb3VudHJ5PiB7XHJcbiAgICBjb25zdCBjb3VudHJpZXM6IENvdW50cnlbXSA9IGF3YWl0IHRoaXMuZ2V0Q291bnRyaWVzKCk7XHJcbiAgICByZXR1cm4gY291bnRyaWVzLmZpbmQoY291bnRyeSA9PiBjb3VudHJ5LmNvZGUgPT09IGNvdW50cnlDb2RlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRQcml2YWN5U2V0dGluZ3MoKTogUHJvbWlzZTxQcml2YWN5U2V0dGluZ1tdPiB7XHJcbiAgICBjb25zdCByZXN1bHQ6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0UHJpdmFjeVNldHRpbmdzKCk7XHJcbiAgICBpZiAocmVzdWx0LnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzdWx0LnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gdGhpcy5fYm9GYWN0b3J5Lm1ha2VCT0FycmF5RnJvbVJhd0JhY2tlbmREYXRhQXJyYXkoUHJpdmFjeVNldHRpbmcsIHJlc3VsdC5yZXN1bHRPYmplY3RzKSBhcyB1bmtub3duIGFzIFByaXZhY3lTZXR0aW5nW107XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzdWx0KTtcclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldFJlbGF0aW9uUHJpdmFjeVNldHRpbmdzKCk6IFByb21pc2U8UmVsYXRpb25Qcml2YWN5U2V0dGluZ1tdPiB7XHJcbiAgICBjb25zdCBwcml2YWN5U2V0dGluZ3M6IFJlbGF0aW9uUHJpdmFjeVNldHRpbmdbXSA9IFtdO1xyXG5cclxuICAgIGNvbnN0IGJhc2VQcml2YWN5U2V0dGluZ3M6IFByaXZhY3lTZXR0aW5nW10gPSBhd2FpdCB0aGlzLmdldFByaXZhY3lTZXR0aW5ncygpO1xyXG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMCwgbGVuOiBudW1iZXIgPSBiYXNlUHJpdmFjeVNldHRpbmdzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IGJhc2VQcml2U2V0dGluZzogUHJpdmFjeVNldHRpbmcgPSBiYXNlUHJpdmFjeVNldHRpbmdzW2ldO1xyXG4gICAgICBjb25zdCBuZXdSZWxQcml2U2V0OiBSZWxhdGlvblByaXZhY3lTZXR0aW5nID0gPFJlbGF0aW9uUHJpdmFjeVNldHRpbmc+PHVua25vd24+dGhpcy5fYm9GYWN0b3J5Lmluc3RhbnRpYXRlTmV3Qm8oUmVsYXRpb25Qcml2YWN5U2V0dGluZyk7XHJcbiAgICAgIG5ld1JlbFByaXZTZXQuYXBwbHlCYXNlUHJpdmFjeVNldHRpbmdWYWx1ZXMoYmFzZVByaXZTZXR0aW5nKTtcclxuICAgICAgcHJpdmFjeVNldHRpbmdzLnB1c2gobmV3UmVsUHJpdlNldCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcHJpdmFjeVNldHRpbmdzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldE1hcmtldGluZ0NvZGVzKCk6IFByb21pc2U8TWFya2V0aW5nW10+IHtcclxuICAgIGNvbnN0IHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRNYXJrZXRpbmdDb2RlcygpO1xyXG4gICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2JvRmFjdG9yeS5tYWtlQk9BcnJheUZyb21SYXdCYWNrZW5kRGF0YUFycmF5KE1hcmtldGluZywgcmVzdWx0LnJlc3VsdE9iamVjdHMpIGFzIHVua25vd24gYXMgTWFya2V0aW5nW107XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzdWx0KTtcclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldEFydGljbGVCb3VuZFRleHRMaW5lc09mQXJ0aWNsZUxpbmUoYXJ0aWNsZUxpbmVVdWlkOiBzdHJpbmcpOiBQcm9taXNlPFRyYW5zYWN0aW9uTGluZUluZm9bXT4ge1xyXG4gICAgY29uc3QgcmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldEFydGljbGVCb3VuZFRleHRMaW5lc09mQXJ0aWNsZUxpbmUoYXJ0aWNsZUxpbmVVdWlkKTtcclxuICAgIGlmIChyZXN1bHQudmFsaWRhdGlvblJlc3VsdCAmJiByZXN1bHQudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiA8VHJhbnNhY3Rpb25MaW5lSW5mb1tdPjx1bmtub3duPnRoaXMuX2JvRmFjdG9yeS5tYWtlQk9BcnJheUZyb21SYXdCYWNrZW5kRGF0YUFycmF5KFRyYW5zYWN0aW9uTGluZUluZm8sIHJlc3VsdC5yZXN1bHRPYmplY3QpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3VsdCk7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRUcmFuc2FjdGlvbkJ5TnJBbmRLaW5kKGtpbmQ6IFRyYW5zYWN0aW9uS2luZCwgdHJhbnNhY3Rpb25ObzogbnVtYmVyKTogUHJvbWlzZTxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT4ge1xyXG4gICAgY29uc3QgcmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldFRyYW5zYWN0aW9uQnlOckFuZEtpbmQoa2luZCwgdHJhbnNhY3Rpb25Obyk7XHJcbiAgICBpZiAocmVzdWx0LnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzdWx0LnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gdGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UsIHJlc3VsdC5yZXN1bHRPYmplY3QpIGFzIHVua25vd24gYXMgVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzdWx0KTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0VHJhbnNhY3Rpb25CeUlkKHRyYW5zYWN0aW9uSWQ6IG51bWJlcik6IFByb21pc2U8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+IHtcclxuICAgIGNvbnN0IHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRUcmFuc2FjdGlvbkJ5SWQodHJhbnNhY3Rpb25JZCk7XHJcbiAgICBpZiAocmVzdWx0LnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzdWx0LnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gdGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UsIHJlc3VsdC5yZXN1bHRPYmplY3QpIGFzIHVua25vd24gYXMgVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzdWx0KTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0UmVmcmVzaGVkVHJhbnNhY3Rpb25Gcm9tRGF0YWJhc2UodHJhbnNhY3Rpb25JZDogbnVtYmVyKTogUHJvbWlzZTxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT4ge1xyXG4gICAgY29uc3QgcmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldFJlZnJlc2hlZFRyYW5zYWN0aW9uRnJvbURhdGFiYXNlKHRyYW5zYWN0aW9uSWQpO1xyXG4gICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlLCByZXN1bHQucmVzdWx0T2JqZWN0KSBhcyB1bmtub3duIGFzIFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3VsdCk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGRlbGV0ZVRyYW5zYWN0aW9uQnlVdUlkKHV1aWQ6IHN0cmluZyk6IFByb21pc2U8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+IHtcclxuICAgIGNvbnN0IHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5kZWxldGVUcmFuc2FjdGlvbkJ5VXVJZCh1dWlkKTtcclxuICAgIGlmIChyZXN1bHQudmFsaWRhdGlvblJlc3VsdCAmJiByZXN1bHQudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShUcmFuc2FjdGlvbkluZm9SZXNwb25zZSwgcmVzdWx0LnJlc3VsdE9iamVjdCkgYXMgdW5rbm93biBhcyBUcmFuc2FjdGlvbkluZm9SZXNwb25zZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXN1bHQpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBsb2NrVHJhbnNhY3Rpb25CeUlkKHRyYW5zYWN0aW9uSWQ6IG51bWJlciwgdmVyc2lvbjogbnVtYmVyKTogUHJvbWlzZTxUcmFuc2FjdGlvbkxvY2tSZXN1bHQ+IHtcclxuICAgIGNvbnN0IHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5sb2NrVHJhbnNhY3Rpb25CeVRyYW5zSWQodHJhbnNhY3Rpb25JZCwgdmVyc2lvbik7XHJcbiAgICBpZiAocmVzdWx0LnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzdWx0LnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gdGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoVHJhbnNhY3Rpb25Mb2NrUmVzdWx0LCByZXN1bHQucmVzdWx0T2JqZWN0KSBhcyB1bmtub3duIGFzIFRyYW5zYWN0aW9uTG9ja1Jlc3VsdDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXN1bHQpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRDYXNoUmVnaXN0ZXJzKGJyYW5jaD86IHN0cmluZywgZ3JvdXA/OiBudW1iZXIpOiBQcm9taXNlPENhc2hSZWdpc3RlcltdPiB7XHJcbiAgICBjb25zdCByZXN1bHQ6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0Q2FzaFJlZ2lzdGVyKGJyYW5jaCwgZ3JvdXApO1xyXG4gICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2JvRmFjdG9yeS5tYWtlQk9BcnJheUZyb21SYXdCYWNrZW5kRGF0YUFycmF5KENhc2hSZWdpc3RlciwgcmVzdWx0LnJlc3VsdE9iamVjdHMpIGFzIHVua25vd24gYXMgQ2FzaFJlZ2lzdGVyW107XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzdWx0KTtcclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldENhc2hEcmF3ZXJzKGNhc2hEcmF3ZXJzUmVxdWVzdDogQ2FzaERyYXdlcnNSZXF1ZXN0KTogUHJvbWlzZTxDYXNoRHJhd2VyW10+IHtcclxuICAgIGNvbnN0IHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRDYXNoRHJhd2VycyhjYXNoRHJhd2Vyc1JlcXVlc3QpO1xyXG4gICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2JvRmFjdG9yeS5tYWtlQk9BcnJheUZyb21SYXdCYWNrZW5kRGF0YUFycmF5KENhc2hEcmF3ZXIsIHJlc3VsdC5yZXN1bHRPYmplY3RzKSBhcyB1bmtub3duIGFzIENhc2hEcmF3ZXJbXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXN1bHQpO1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0UHJpY2VMaXN0cyhjb2RlPzogc3RyaW5nKTogUHJvbWlzZTxQcmljZUxpc3RbXT4ge1xyXG4gICAgY29uc3QgcmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldFByaWNlTGlzdHMoY29kZSk7XHJcbiAgICBpZiAocmVzdWx0LnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzdWx0LnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gdGhpcy5fYm9GYWN0b3J5Lm1ha2VCT0FycmF5RnJvbVJhd0JhY2tlbmREYXRhQXJyYXkoUHJpY2VMaXN0LCByZXN1bHQucmVzdWx0T2JqZWN0cykgYXMgdW5rbm93biBhcyBQcmljZUxpc3RbXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXN1bHQpO1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0VmF0TGlzdChvbmx5VmFsaWQ6IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8VmF0W10+IHtcclxuICAgIGNvbnN0IHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRWYXRMaXN0KG9ubHlWYWxpZCk7XHJcbiAgICBpZiAocmVzdWx0LnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzdWx0LnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gdGhpcy5fYm9GYWN0b3J5Lm1ha2VCT0FycmF5RnJvbVJhd0JhY2tlbmREYXRhQXJyYXkoVmF0LCByZXN1bHQucmVzdWx0T2JqZWN0cykgYXMgdW5rbm93biBhcyBWYXRbXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXN1bHQpO1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0VHJhbnNWYXRDb2Rlcyh0eXBlOiBzdHJpbmcsIGRhdGU6IERhdGUpOiBQcm9taXNlPFZhdFtdPiB7XHJcbiAgICBjb25zdCByZXN1bHQ6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0VHJhbnNWYXRDb2Rlcyh0eXBlLCBkYXRlKTtcclxuICAgIGlmIChyZXN1bHQudmFsaWRhdGlvblJlc3VsdCAmJiByZXN1bHQudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9ib0ZhY3RvcnkubWFrZUJPQXJyYXlGcm9tUmF3QmFja2VuZERhdGFBcnJheShWYXQsIHJlc3VsdC5yZXN1bHRPYmplY3RzKSBhcyB1bmtub3duIGFzIFZhdFtdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3VsdCk7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBzZWFyY2hUcmFuc2FjdGlvbnMocmVxdWVzdDogVHJhbnNhY3Rpb25TZWFyY2hWaWV3UmVxdWVzdCk6IFByb21pc2U8VHJhbnNhY3Rpb25TZWFyY2hSZXN1bHQ+IHtcclxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jb25uZWN0b3Iuc2VhcmNoVHJhbnNhY3Rpb25zKHJlcXVlc3QpO1xyXG4gICAgaWYgKHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIGNvbnN0IHJlc3VsdDogVHJhbnNhY3Rpb25TZWFyY2hSZXN1bHQgPSBuZXcgVHJhbnNhY3Rpb25TZWFyY2hSZXN1bHQoKTtcclxuICAgICAgcmVzdWx0LmNvdW50ID0gKHJlc3BvbnNlLnBhZ2luZ1BhcmFtZXRlcnMgYXMgYW55KS5yZXN1bHRDb3VudDsgLy8gdG9kbzogZml4IHByb3BlcnR5IGluIGFwaVxyXG4gICAgICByZXN1bHQudHJhbnNhY3Rpb25zID0gPHVua25vd24+dGhpcy5fYm9GYWN0b3J5Lm1ha2VCT0FycmF5RnJvbVJhd0JhY2tlbmREYXRhQXJyYXkoVHJhbnNhY3Rpb25TZWFyY2hWaWV3LCByZXNwb25zZS5yZXN1bHRPYmplY3RzKSBhcyBUcmFuc2FjdGlvblNlYXJjaFZpZXdbXTtcclxuICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldFNlcXVlbmNlVmFsdWUoc2VxdWVuY2VOYW1lOiBTZXF1ZW5jZU5hbWUpOiBQcm9taXNlPG51bWJlcj4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlOiBGdW5jdGlvbiwgcmVqZWN0OiBGdW5jdGlvbikgPT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuZ2V0U2VxdWVuY2VWYWx1ZShzZXF1ZW5jZU5hbWUpLnRoZW4oKHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEpID0+IHtcclxuICAgICAgICBpZiAocmVzdWx0LnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzdWx0LnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICAgICAgcmVzb2x2ZShyZXN1bHQucmVzdWx0T2JqZWN0KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3VsdCk7XHJcbiAgICAgICAgICByZWplY3QobnVsbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldERlbGl2ZXJ5TWV0aG9kcygpOiBQcm9taXNlPERlbGl2ZXJ5TWV0aG9kW10+IHtcclxuICAgIGNvbnN0IHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXREZWxpdmVyeU1ldGhvZHMoKTtcclxuICAgIGlmIChyZXN1bHQudmFsaWRhdGlvblJlc3VsdCAmJiByZXN1bHQudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9ib0ZhY3RvcnkubWFrZUJPQXJyYXlGcm9tUmF3QmFja2VuZERhdGFBcnJheShEZWxpdmVyeU1ldGhvZCwgcmVzdWx0LnJlc3VsdE9iamVjdHMpIGFzIHVua25vd24gYXMgRGVsaXZlcnlNZXRob2RbXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXN1bHQpO1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0RGVsaXZlcnlPcHRpb25zKCk6IFByb21pc2U8RGVsaXZlcnlPcHRpb25bXT4ge1xyXG4gICAgY29uc3QgcmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldERlbGl2ZXJ5T3B0aW9ucygpO1xyXG4gICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2JvRmFjdG9yeS5tYWtlQk9BcnJheUZyb21SYXdCYWNrZW5kRGF0YUFycmF5KERlbGl2ZXJ5T3B0aW9uLCByZXN1bHQucmVzdWx0T2JqZWN0cykgYXMgdW5rbm93biBhcyBEZWxpdmVyeU9wdGlvbltdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3VsdCk7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRQb3N0YWxDb2RlUmV0cmlldmFsKHBvc3RjYWxDb2RlOiBzdHJpbmcsIGhvdXNlTm86IHN0cmluZyk6IFByb21pc2U8R2V0UG9zdGFsQ29kZVJldHJpZXZhbE91dHB1dFBhcmFtcz4ge1xyXG4gICAgY29uc3QgcmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldFBvc3RhbENvZGVSZXRyaWV2YWwocG9zdGNhbENvZGUsIGhvdXNlTm8pO1xyXG4gICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgICBjb25zdCBvdXRwdXRQYXJhbXM6IEdldFBvc3RhbENvZGVSZXRyaWV2YWxPdXRwdXRQYXJhbXMgPSBuZXcgR2V0UG9zdGFsQ29kZVJldHJpZXZhbE91dHB1dFBhcmFtcygpO1xyXG4gICAgICAgIG91dHB1dFBhcmFtcy5jaXR5ID0gcmVzdWx0LnJlc3VsdE9iamVjdC5jaXR5O1xyXG4gICAgICAgIG91dHB1dFBhcmFtcy5zdHJlZXQgPSByZXN1bHQucmVzdWx0T2JqZWN0LnN0cmVldDtcclxuICAgICAgICBvdXRwdXRQYXJhbXMuc3RhdHVzID0gcmVzdWx0LnJlc3VsdE9iamVjdC5zdGF0dXM7XHJcbiAgICAgICAgb3V0cHV0UGFyYW1zLm5ldE51bWJlciA9IHJlc3VsdC5yZXN1bHRPYmplY3QubmV0TnVtYmVyO1xyXG4gICAgICAgIHJldHVybiBvdXRwdXRQYXJhbXM7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3VsdCk7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRDb21taXNzaW9uQ29kZXMobGFuZ3VhZ2VDb2RlOiBzdHJpbmcpOiBQcm9taXNlPENvRG9tYWluVmFsdWVbXT4ge1xyXG4gICAgY29uc3QgcmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldENvbW1pc3Npb25Db2RlcyhsYW5ndWFnZUNvZGUpO1xyXG4gICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2JvRmFjdG9yeS5tYWtlQk9BcnJheUZyb21SYXdCYWNrZW5kRGF0YUFycmF5KENvRG9tYWluVmFsdWUsIHJlc3VsdC5yZXN1bHRPYmplY3RzKSBhcyB1bmtub3duIGFzIENvRG9tYWluVmFsdWVbXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXN1bHQpO1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0SW5PdXRDb2xsZWN0aW9uKGxhbmd1YWdlQ29kZTogc3RyaW5nKTogUHJvbWlzZTxDb0RvbWFpblZhbHVlW10+IHtcclxuICAgIGNvbnN0IHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRJbk91dENvbGxlY3Rpb24obGFuZ3VhZ2VDb2RlKTtcclxuICAgIGlmIChyZXN1bHQudmFsaWRhdGlvblJlc3VsdCAmJiByZXN1bHQudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9ib0ZhY3RvcnkubWFrZUJPQXJyYXlGcm9tUmF3QmFja2VuZERhdGFBcnJheShDb0RvbWFpblZhbHVlLCByZXN1bHQucmVzdWx0T2JqZWN0cykgYXMgdW5rbm93biBhcyBDb0RvbWFpblZhbHVlW107XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzdWx0KTtcclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldFRyYW5zYWN0aW9uQXJ0aWNsZVdhcmVob3VzZXMoZ29vZElkOiBudW1iZXIpOiBQcm9taXNlPFRyYW5zYWN0aW9uQXJ0aWNsZVdhcmVob3VzZVtdPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKSA9PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5nZXRUcmFuc2FjdGlvbkFydGljbGVXYXJlaG91c2VzKGdvb2RJZCkudGhlbigocmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXN1bHQudmFsaWRhdGlvblJlc3VsdCAmJiByZXN1bHQudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgICAgICByZXNvbHZlKDxUcmFuc2FjdGlvbkFydGljbGVXYXJlaG91c2VbXT5yZXN1bHQucmVzdWx0T2JqZWN0cyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXN1bHQpO1xyXG4gICAgICAgICAgcmVqZWN0KFtdKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0VGV4dFR5cGVzKGxhbmd1YWdlQ29kZTogc3RyaW5nKTogUHJvbWlzZTxDb0RvbWFpblZhbHVlW10+IHtcclxuICAgIGNvbnN0IHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRUZXh0VHlwZXMobGFuZ3VhZ2VDb2RlKTtcclxuICAgIGlmIChyZXN1bHQudmFsaWRhdGlvblJlc3VsdCAmJiByZXN1bHQudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIGNvbnN0IHRleHRzOiBDb0RvbWFpblZhbHVlW10gPSA8Q29Eb21haW5WYWx1ZVtdPjx1bmtub3duPnRoaXMuX2JvRmFjdG9yeS5tYWtlQk9BcnJheUZyb21SYXdCYWNrZW5kRGF0YUFycmF5KENvRG9tYWluVmFsdWUsIHJlc3VsdC5yZXN1bHRPYmplY3RzKTtcclxuICAgICAgdGV4dHMuc29ydCgoYSwgYikgPT4gYS5zZXF1ZW5jZSA+IGIuc2VxdWVuY2UgPyAxIDogLTEpO1xyXG4gICAgICByZXR1cm4gdGV4dHM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzdWx0KTtcclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldFN0YW5kYXJkVGV4dHMobGFuZ3VhZ2VDb2RlOiBzdHJpbmcpOiBQcm9taXNlPFN0YW5kYXJkVGV4dFtdPiB7XHJcbiAgICBjb25zdCByZXN1bHQ6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0U3RhbmRhcmRUZXh0cyhsYW5ndWFnZUNvZGUpO1xyXG4gICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2JvRmFjdG9yeS5tYWtlQk9BcnJheUZyb21SYXdCYWNrZW5kRGF0YUFycmF5KFN0YW5kYXJkVGV4dCwgcmVzdWx0LnJlc3VsdE9iamVjdCkgYXMgdW5rbm93biBhcyBTdGFuZGFyZFRleHRbXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXN1bHQpO1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0U2FsZXNQZXJzb25zKGRhdGU/OiBEYXRlKTogUHJvbWlzZTxTYWxlc1BlcnNvbltdPiB7XHJcbiAgICBjb25zdCByZXN1bHQ6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0U2FsZXNQZXJzb25zKGRhdGUpO1xyXG4gICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2JvRmFjdG9yeS5tYWtlQk9BcnJheUZyb21SYXdCYWNrZW5kRGF0YUFycmF5KFNhbGVzUGVyc29uLCByZXN1bHQucmVzdWx0T2JqZWN0cykgYXMgdW5rbm93biBhcyBTYWxlc1BlcnNvbltdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3VsdCk7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRUYWdzKGNhdGVnb3J5OiBudW1iZXIpOiBQcm9taXNlPFRhZ1tdPiB7XHJcbiAgICBjb25zdCByZXN1bHQ6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0VGFncyhjYXRlZ29yeSk7XHJcbiAgICBpZiAocmVzdWx0LnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzdWx0LnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gdGhpcy5fYm9GYWN0b3J5Lm1ha2VCT0FycmF5RnJvbVJhd0JhY2tlbmREYXRhQXJyYXkoVGFnLCByZXN1bHQucmVzdWx0T2JqZWN0cykgYXMgdW5rbm93biBhcyBUYWdbXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXN1bHQpO1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0T25Ib2xkQ29kZXMoKTogUHJvbWlzZTxPbkhvbGRDb2RlW10+IHtcclxuICAgIGNvbnN0IHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRPbkhvbGRDb2RlcygpO1xyXG4gICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2JvRmFjdG9yeS5tYWtlQk9BcnJheUZyb21SYXdCYWNrZW5kRGF0YUFycmF5KE9uSG9sZENvZGUsIHJlc3VsdC5yZXN1bHRPYmplY3RzKSBhcyB1bmtub3duIGFzIE9uSG9sZENvZGVbXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXN1bHQpO1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0V2FyZWhvdXNlcyhicmFuY2hOcj86IHN0cmluZyk6IFByb21pc2U8V2FyZWhvdXNlW10+IHtcclxuICAgIGNvbnN0IHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRXYXJlaG91c2VzKGJyYW5jaE5yKTtcclxuICAgIGlmIChyZXN1bHQudmFsaWRhdGlvblJlc3VsdCAmJiByZXN1bHQudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9ib0ZhY3RvcnkubWFrZUJPQXJyYXlGcm9tUmF3QmFja2VuZERhdGFBcnJheShXYXJlaG91c2UsIHJlc3VsdC5yZXN1bHRPYmplY3RzKSBhcyB1bmtub3duIGFzIFdhcmVob3VzZVtdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3VsdCk7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRXYXJlaG91c2VTdG9ja0luZm9CeUdvb2RBbmRCcmFuY2goZ29vZElkOiBudW1iZXIsIGJyYW5jaE5yOiBzdHJpbmcpOiBQcm9taXNlPFdhcmVob3VzZVN0b2NrSW5mb1tdPiB7XHJcbiAgICBjb25zdCByZXN1bHQ6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0V2FyZWhvdXNlU3RvY2tJbmZvQnlHb29kQW5kQnJhbmNoKGdvb2RJZCwgYnJhbmNoTnIpO1xyXG4gICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2JvRmFjdG9yeS5tYWtlQk9BcnJheUZyb21SYXdCYWNrZW5kRGF0YUFycmF5KFdhcmVob3VzZVN0b2NrSW5mbywgcmVzdWx0LnJlc3VsdE9iamVjdCkgYXMgdW5rbm93biBhcyBXYXJlaG91c2VTdG9ja0luZm9bXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXN1bHQpO1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0SGlzdG9yaWNTdGF0ZVZhbHVlcygpOiBQcm9taXNlPENvZGVEZXNjcmlwdGlvbltdPiB7XHJcbiAgICBjb25zdCByZXN1bHQ6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0SGlzdG9yaWNTdGF0ZVZhbHVlcygpO1xyXG4gICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2JvRmFjdG9yeS5tYWtlQk9BcnJheUZyb21SYXdCYWNrZW5kRGF0YUFycmF5KENvZGVEZXNjcmlwdGlvbiwgcmVzdWx0LnJlc3VsdE9iamVjdHMpIGFzIHVua25vd24gYXMgQ29kZURlc2NyaXB0aW9uW107XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzdWx0KTtcclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldFBheW1lbnRNZXRob2RzRm9yU2FsZXNPcmRlcihicmFuY2hOcjogc3RyaW5nKTogUHJvbWlzZTxQYXltZW50TWV0aG9kW10+IHtcclxuICAgIGNvbnN0IHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRQYXltZW50TWV0aG9kc0ZvclNhbGVzT3JkZXIoYnJhbmNoTnIpO1xyXG4gICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2JvRmFjdG9yeS5tYWtlQk9BcnJheUZyb21SYXdCYWNrZW5kRGF0YUFycmF5KFBheW1lbnRNZXRob2QsIHJlc3VsdC5yZXN1bHRPYmplY3QpIGFzIHVua25vd24gYXMgUGF5bWVudE1ldGhvZFtdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3VsdCk7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRQYXltZW50TWV0aG9kc0ZvckNhc2hSZWdpc3RlcihicmFuY2hOcjogc3RyaW5nKTogUHJvbWlzZTxQYXltZW50TWV0aG9kW10+IHtcclxuICAgIGNvbnN0IHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRQYXltZW50TWV0aG9kc0ZvckNhc2hSZWdpc3RlcihicmFuY2hOcik7XHJcbiAgICBpZiAocmVzdWx0LnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzdWx0LnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gdGhpcy5fYm9GYWN0b3J5Lm1ha2VCT0FycmF5RnJvbVJhd0JhY2tlbmREYXRhQXJyYXkoUGF5bWVudE1ldGhvZCwgcmVzdWx0LnJlc3VsdE9iamVjdCkgYXMgdW5rbm93biBhcyBQYXltZW50TWV0aG9kW107XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzdWx0KTtcclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGNvbW1pdCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pID0+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmNvbW1pdCgpLnRoZW4oKHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEpID0+IHtcclxuICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICByZXNvbHZlKHRydWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzdWx0KTtcclxuICAgICAgICAgIHJlamVjdChudWxsKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcm9sbGJhY2soKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKSA9PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5yb2xsYmFjaygpLnRoZW4oKHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEpID0+IHtcclxuICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICByZXNvbHZlKHRydWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzdWx0KTtcclxuICAgICAgICAgIHJlamVjdChudWxsKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY3JlYXRlVHJhbnNhY3Rpb24oa2luZDogVHJhbnNhY3Rpb25LaW5kLCBicmFuY2hOcjogc3RyaW5nKTogUHJvbWlzZTxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlOiBGdW5jdGlvbiwgcmVqZWN0OiBGdW5jdGlvbikgPT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuY3JlYXRlVHJhbnNhY3Rpb24oa2luZCwgYnJhbmNoTnIpLnRoZW4oKHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEpID0+IHtcclxuICAgICAgICBpZiAocmVzdWx0LnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzdWx0LnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICAgICAgcmVzb2x2ZSh0aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShUcmFuc2FjdGlvbkluZm9SZXNwb25zZSwgcmVzdWx0LnJlc3VsdE9iamVjdCkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzdWx0KTtcclxuICAgICAgICAgIHJlamVjdChudWxsKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgY3JlYXRlU2FsZXNPcmRlcihyZXF1ZXN0OiBDcmVhdGVTYWxlc09yZGVyUmVxdWVzdCk6IFByb21pc2U8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pID0+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmNyZWF0ZVNhbGVzT3JkZXIocmVxdWVzdCkudGhlbigocmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXN1bHQudmFsaWRhdGlvblJlc3VsdCAmJiByZXN1bHQudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgICAgICByZXNvbHZlKHRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlLCByZXN1bHQucmVzdWx0T2JqZWN0KSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXN1bHQpO1xyXG4gICAgICAgICAgcmVqZWN0KG51bGwpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBjcmVhdGVDYXNoUmVnaXN0ZXJPcmRlcihyZXF1ZXN0OiBDcmVhdGVDYXNoUmVnaXN0ZXJPcmRlclJlcXVlc3QpOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKSA9PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5jcmVhdGVDYXNoUmVnaXN0ZXJPcmRlcihyZXF1ZXN0KS50aGVuKChyZXN1bHQ6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgICAgIHJlc29sdmUodGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UsIHJlc3VsdC5yZXN1bHRPYmplY3QpKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3VsdCk7XHJcbiAgICAgICAgICByZWplY3QobnVsbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGNyZWF0ZVB1cmNoYXNlT3JkZXIocmVxdWVzdDogQ3JlYXRlUHVyY2hhc2VPcmRlclJlcXVlc3QpOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKSA9PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5jcmVhdGVQdXJjaGFzZU9yZGVyKHJlcXVlc3QpLnRoZW4oKHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEpID0+IHtcclxuICAgICAgICBpZiAocmVzdWx0LnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzdWx0LnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICAgICAgcmVzb2x2ZSh0aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShUcmFuc2FjdGlvbkluZm9SZXNwb25zZSwgcmVzdWx0LnJlc3VsdE9iamVjdCkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzdWx0KTtcclxuICAgICAgICAgIHJlamVjdChudWxsKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgY3JlYXRlU2VydmljZU9yZGVyKHJlcXVlc3Q6IENyZWF0ZVNlcnZpY2VPcmRlclJlcXVlc3QpOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKSA9PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5jcmVhdGVTZXJ2aWNlT3JkZXIocmVxdWVzdCkudGhlbigocmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXN1bHQudmFsaWRhdGlvblJlc3VsdCAmJiByZXN1bHQudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgICAgICByZXNvbHZlKHRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlLCByZXN1bHQucmVzdWx0T2JqZWN0KSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXN1bHQpO1xyXG4gICAgICAgICAgcmVqZWN0KG51bGwpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBjcmVhdGVTYWxlc1F1b3RhdGlvbihyZXF1ZXN0OiBDcmVhdGVTYWxlc1F1b3RhdGlvblJlcXVlc3QpOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKSA9PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5jcmVhdGVTYWxlc1F1b3RhdGlvbihyZXF1ZXN0KS50aGVuKChyZXN1bHQ6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgICAgIHJlc29sdmUodGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UsIHJlc3VsdC5yZXN1bHRPYmplY3QpKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3VsdCk7XHJcbiAgICAgICAgICByZWplY3QobnVsbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcblxyXG4gIHB1YmxpYyBzYXZlVHJhbnNhY3Rpb24odXVpZDogc3RyaW5nKTogUHJvbWlzZTxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlOiBGdW5jdGlvbiwgcmVqZWN0OiBGdW5jdGlvbikgPT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5jb25uZWN0b3Iuc2F2ZVRyYW5zYWN0aW9uKHV1aWQpLnRoZW4oKHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEpID0+IHtcclxuICAgICAgICBpZiAocmVzdWx0LnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzdWx0LnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICAgICAgcmVzb2x2ZSh0aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShUcmFuc2FjdGlvbkluZm9SZXNwb25zZSwgcmVzdWx0LnJlc3VsdE9iamVjdCkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzdWx0KTtcclxuICAgICAgICAgIHJlamVjdChudWxsKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgc2V0UmVsYXRpb25CeVVzZXIodXVpZDogc3RyaW5nLCB1c2VybmFtZTogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKSA9PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5zZXRSZWxhdGlvbkJ5VXNlcih1dWlkLCB1c2VybmFtZSwgcGFzc3dvcmQpLnRoZW4oKHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEpID0+IHtcclxuICAgICAgICBpZiAocmVzdWx0LnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzdWx0LnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICAgICAgcmVzb2x2ZShyZXN1bHQudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3VsdCk7XHJcbiAgICAgICAgICByZWplY3QoZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyByZXNvbHZlUGVuZGluZ0hlYWRlclJlYXNvbihwZW5kaW5nSGVhZGVyVmFsdWVzOiBSZXNvbHZlSGVhZGVyUGVuZGluZ1JlYXNvblJlcXVlc3QpOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKSA9PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5yZXNvbHZlUGVuZGluZ0hlYWRlclJlYXNvbihwZW5kaW5nSGVhZGVyVmFsdWVzKS50aGVuKChyZXN1bHQ6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgICAgIHJlc29sdmUodGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UsIHJlc3VsdC5yZXN1bHRPYmplY3QpKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3VsdCk7XHJcbiAgICAgICAgICByZWplY3QobnVsbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHJlc29sdmVQZW5kaW5nTGluZVJlYXNvbihwZW5kaW5nTGluZVZhbHVlczogUmVzb2x2ZUxpbmVQZW5kaW5nUmVhc29uUmVxdWVzdCk6IFByb21pc2U8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pID0+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLnJlc29sdmVQZW5kaW5nTGluZVJlYXNvbihwZW5kaW5nTGluZVZhbHVlcykudGhlbigocmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXN1bHQudmFsaWRhdGlvblJlc3VsdCAmJiByZXN1bHQudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgICAgICByZXNvbHZlKHRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlLCByZXN1bHQucmVzdWx0T2JqZWN0KSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXN1bHQpO1xyXG4gICAgICAgICAgcmVqZWN0KG51bGwpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBhZGRUcmFuc2FjdGlvbkxpbmUodXVpZDogc3RyaW5nLCBhcnRpY2xlTm86IHN0cmluZywgcXVhbnRpdHk6IG51bWJlciwgYWJvdmVMaW5lTnI6IG51bWJlciwgYmVsb3dMaW5lTnI6IG51bWJlcik6IFByb21pc2U8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pID0+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmFkZFRyYW5zYWN0aW9uTGluZSh1dWlkLCBhcnRpY2xlTm8sIHF1YW50aXR5LCBhYm92ZUxpbmVOciwgYmVsb3dMaW5lTnIpLnRoZW4oKHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEpID0+IHtcclxuICAgICAgICBpZiAocmVzdWx0LnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzdWx0LnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICAgICAgcmVzb2x2ZSh0aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShUcmFuc2FjdGlvbkluZm9SZXNwb25zZSwgcmVzdWx0LnJlc3VsdE9iamVjdCkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzdWx0KTtcclxuICAgICAgICAgIHJlamVjdChudWxsKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgYWRkVGV4dExpbmVUb1RyYW5zYWN0aW9uKHV1aWQ6IHN0cmluZywgc2hvd09uRG9jdW1lbnRzOiBudW1iZXIsIHRleHQ6IHN0cmluZywgYW1vdW50OiBudW1iZXIsIGFydGljbGVCb3VuZDogYm9vbGVhbiwgcmVmQXJ0aWNsZUxpbmVOcjogbnVtYmVyLCBhYm92ZUxpbmVOcj86IG51bWJlciwgYmVsb3dMaW5lTnI/OiBudW1iZXIpOlxyXG4gICAgUHJvbWlzZTxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlOiBGdW5jdGlvbiwgcmVqZWN0OiBGdW5jdGlvbikgPT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuYWRkVGV4dExpbmVUb1RyYW5zYWN0aW9uKHV1aWQsIHNob3dPbkRvY3VtZW50cywgdGV4dCwgYW1vdW50LCBhcnRpY2xlQm91bmQsIHJlZkFydGljbGVMaW5lTnIsIGFib3ZlTGluZU5yLCBiZWxvd0xpbmVOcikudGhlbigocmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXN1bHQudmFsaWRhdGlvblJlc3VsdCAmJiByZXN1bHQudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgICAgICByZXNvbHZlKHRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlLCByZXN1bHQucmVzdWx0T2JqZWN0KSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXN1bHQpO1xyXG4gICAgICAgICAgcmVqZWN0KG51bGwpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVUZXh0TGluZSh1dWlkOiBzdHJpbmcsIGxpbmVVdWlkOiBzdHJpbmcsIHNob3dPbkRvY3VtZW50czogbnVtYmVyLCB0ZXh0OiBzdHJpbmcpOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKSA9PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci51cGRhdGVUZXh0TGluZSh1dWlkLCBsaW5lVXVpZCwgc2hvd09uRG9jdW1lbnRzLCB0ZXh0KS50aGVuKChyZXN1bHQ6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgICAgIHJlc29sdmUodGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UsIHJlc3VsdC5yZXN1bHRPYmplY3QpKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3VsdCk7XHJcbiAgICAgICAgICByZWplY3QobnVsbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGFkZFJlbGF0aW9uVG9UcmFuc2FjdGlvbih1dWlkOiBzdHJpbmcsIHJlbGF0aW9uSWQ6IG51bWJlcik6IFByb21pc2U8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pID0+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmFkZFJlbGF0aW9uVG9UcmFuc2FjdGlvbih1dWlkLCByZWxhdGlvbklkKS50aGVuKChyZXN1bHQ6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgICAgIHJlc29sdmUodGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UsIHJlc3VsdC5yZXN1bHRPYmplY3QpKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3VsdCk7XHJcbiAgICAgICAgICByZWplY3QobnVsbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGNoYW5nZUxpbmVTZXF1ZW5jZSh1dWlkOiBzdHJpbmcsIGxpbmVVdWlkOiBzdHJpbmcsIGFib3ZlTGluZU5yPzogbnVtYmVyLCBiZWxvd0xpbmVOcj86IG51bWJlcik6XHJcbiAgICBQcm9taXNlPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKSA9PiB7XHJcbiAgICAgIGNvbnN0IHJlcXVlc3Q6IENoYW5nZUxpbmVTZXF1ZW5jZVJlcXVlc3QgPSB7XHJcbiAgICAgICAgdHJhbnNhY3Rpb25VdWlkOiB1dWlkLFxyXG4gICAgICAgIGxpbmVVdWlkOiBsaW5lVXVpZCxcclxuICAgICAgICBhYm92ZUxpbmVOcjogYWJvdmVMaW5lTnIsXHJcbiAgICAgICAgYmVsb3dMaW5lTnI6IGJlbG93TGluZU5yXHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmNoYW5nZUxpbmVTZXF1ZW5jZShyZXF1ZXN0KS50aGVuKChyZXN1bHQ6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgICAgIHJlc29sdmUodGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UsIHJlc3VsdC5yZXN1bHRPYmplY3QpKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3VsdCk7XHJcbiAgICAgICAgICByZWplY3QobnVsbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGNhbmNlbEFkZFRyYW5zYWN0aW9uTGluZShsaW5lVXVpZDogc3RyaW5nKTogUHJvbWlzZTxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlOiBGdW5jdGlvbiwgcmVqZWN0OiBGdW5jdGlvbikgPT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuY2FuY2VsQWRkVHJhbnNhY3Rpb25MaW5lKGxpbmVVdWlkKS50aGVuKChyZXN1bHQ6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgICAgIHJlc29sdmUodGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UsIHJlc3VsdC5yZXN1bHRPYmplY3QpKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3VsdCk7XHJcbiAgICAgICAgICByZWplY3QobnVsbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBkZWxldGVUcmFuc2FjdGlvbkxpbmUodXVpZDogc3RyaW5nLCBsaW5lVXVpZDogc3RyaW5nKTogUHJvbWlzZTxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlOiBGdW5jdGlvbiwgcmVqZWN0OiBGdW5jdGlvbikgPT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuZGVsZXRlVHJhbnNhY3Rpb25MaW5lKHV1aWQsIGxpbmVVdWlkKS50aGVuKChyZXN1bHQ6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgICAgIHJlc29sdmUodGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UsIHJlc3VsdC5yZXN1bHRPYmplY3QpKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3VsdCk7XHJcbiAgICAgICAgICByZWplY3QobnVsbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcblxyXG4gIHB1YmxpYyBhc3luYyBjaGFuZ2VUcmFuc2FjdGlvbkxpbmVRdWFudGl0eSh1dWlkOiBzdHJpbmcsIGxpbmVVdWlkOiBzdHJpbmcsIG5ld1F1YW50aXR5OiBudW1iZXIpOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKSA9PiB7XHJcbiAgICAgIGNvbnN0IHJlcXVlc3QgPSB7XHJcbiAgICAgICAgdHJhbnNhY3Rpb25VdWlkOiB1dWlkLFxyXG4gICAgICAgIGxpbmVVdWlkOiBsaW5lVXVpZCxcclxuICAgICAgICBuZXdRdWFudGl0eTogbmV3UXVhbnRpdHlcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuY2hhbmdlVHJhbnNhY3Rpb25MaW5lUXVhbnRpdHkocmVxdWVzdCkudGhlbigocmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXN1bHQudmFsaWRhdGlvblJlc3VsdCAmJiByZXN1bHQudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgICAgICByZXNvbHZlKHRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlLCByZXN1bHQucmVzdWx0T2JqZWN0KSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXN1bHQpO1xyXG4gICAgICAgICAgcmVqZWN0KG51bGwpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBjaGFuZ2VUcmFuc2FjdGlvbkxpbmVDb21taXNzaW9uQ29kZSh1dWlkOiBzdHJpbmcsIGxpbmVVdWlkOiBzdHJpbmcsIGNvZGU6IHN0cmluZyk6IFByb21pc2U8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+IHtcclxuICAgIGNvbnN0IHJlcXVlc3QgPSB7XHJcbiAgICAgIHRyYW5zYWN0aW9uVXVpZDogdXVpZCxcclxuICAgICAgbGluZVV1aWQ6IGxpbmVVdWlkLFxyXG4gICAgICBuZXdDb21taXNzaW9uQ29kZTogY29kZVxyXG4gICAgfTtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZVRyYW5zYWN0aW9uTGluZUNvbW1pc3Npb25Db2RlKHJlcXVlc3QpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiA8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+PHVua25vd24+dGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UsIHJlc3BvbnNlLnJlc3VsdE9iamVjdCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBjaGFuZ2VUcmFuc2FjdGlvbkxpbmVTdXBwbGllcih1dWlkOiBzdHJpbmcsIGxpbmVVdWlkOiBzdHJpbmcsIGlkOiBudW1iZXIpOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPiB7XHJcbiAgICBjb25zdCByZXF1ZXN0ID0ge1xyXG4gICAgICB0cmFuc2FjdGlvblV1aWQ6IHV1aWQsXHJcbiAgICAgIGxpbmVVdWlkOiBsaW5lVXVpZCxcclxuICAgICAgbmV3U3VwcGxpZXJJZDogaWRcclxuICAgIH07XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VUcmFuc2FjdGlvbkxpbmVTdXBwbGllcihyZXF1ZXN0KTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPjx1bmtub3duPnRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlLCByZXNwb25zZS5yZXN1bHRPYmplY3QpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgY2hhbmdlVHJhbnNhY3Rpb25MaW5lV2FyZWhvdXNlKHV1aWQ6IHN0cmluZywgbGluZVV1aWQ6IHN0cmluZywgd2FyZWhvdXNlTnVtYmVyOiBudW1iZXIpOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPiB7XHJcbiAgICBjb25zdCByZXF1ZXN0ID0ge1xyXG4gICAgICB0cmFuc2FjdGlvblV1aWQ6IHV1aWQsXHJcbiAgICAgIGxpbmVVdWlkOiBsaW5lVXVpZCxcclxuICAgICAgbmV3V2FyZWhvdXNlTnI6IHdhcmVob3VzZU51bWJlclxyXG4gICAgfTtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZVRyYW5zYWN0aW9uTGluZVdhcmVob3VzZShyZXF1ZXN0KTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPjx1bmtub3duPnRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlLCByZXNwb25zZS5yZXN1bHRPYmplY3QpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgY2hhbmdlVHJhbnNhY3Rpb25MaW5lUHJpY2UodXVpZDogc3RyaW5nLCBsaW5lVXVpZDogc3RyaW5nLCBwcmljZTogbnVtYmVyKTogUHJvbWlzZTxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT4ge1xyXG4gICAgY29uc3QgcmVxdWVzdCA9IHtcclxuICAgICAgdHJhbnNhY3Rpb25VdWlkOiB1dWlkLFxyXG4gICAgICBsaW5lVXVpZDogbGluZVV1aWQsXHJcbiAgICAgIG5ld1ByaWNlOiBwcmljZVxyXG4gICAgfTtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZVRyYW5zYWN0aW9uTGluZVByaWNlKHJlcXVlc3QpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiA8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+PHVua25vd24+dGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UsIHJlc3BvbnNlLnJlc3VsdE9iamVjdCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBjaGFuZ2VUcmFuc2FjdGlvbkxpbmVQcmljZUxpc3QodXVpZDogc3RyaW5nLCBsaW5lVXVpZDogc3RyaW5nLCBwcmljZUxpc3Q6IHN0cmluZyk6IFByb21pc2U8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+IHtcclxuICAgIGNvbnN0IHJlcXVlc3QgPSB7XHJcbiAgICAgIHRyYW5zYWN0aW9uVXVpZDogdXVpZCxcclxuICAgICAgbGluZVV1aWQ6IGxpbmVVdWlkLFxyXG4gICAgICBuZXdQcmljZUxpc3RDb2RlOiBwcmljZUxpc3RcclxuICAgIH07XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VUcmFuc2FjdGlvbkxpbmVQcmljZUxpc3QocmVxdWVzdCk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIDxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT48dW5rbm93bj50aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShUcmFuc2FjdGlvbkluZm9SZXNwb25zZSwgcmVzcG9uc2UucmVzdWx0T2JqZWN0KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGNoYW5nZVRyYW5zYWN0aW9uTGluZVZhdCh1dWlkOiBzdHJpbmcsIGxpbmVVdWlkOiBzdHJpbmcsIGlkOiBudW1iZXIpOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPiB7XHJcbiAgICBjb25zdCByZXF1ZXN0ID0ge1xyXG4gICAgICB0cmFuc2FjdGlvblV1aWQ6IHV1aWQsXHJcbiAgICAgIGxpbmVVdWlkOiBsaW5lVXVpZCxcclxuICAgICAgbmV3VmF0SWQ6IGlkXHJcbiAgICB9O1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlVHJhbnNhY3Rpb25MaW5lVmF0KHJlcXVlc3QpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiA8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+PHVua25vd24+dGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UsIHJlc3BvbnNlLnJlc3VsdE9iamVjdCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBjaGFuZ2VUcmFuc2FjdGlvbkxpbmVMaW5lRGlzY291bnQodXVpZDogc3RyaW5nLCBsaW5lVXVpZDogc3RyaW5nLCB0eXBlOiBEaXNjb3VudFR5cGUsIGRpc2NvdW50OiBudW1iZXIsIHJlYXNvbjogc3RyaW5nLCBjb2RlOiBzdHJpbmcpOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPiB7XHJcbiAgICBjb25zdCByZXF1ZXN0ID0ge1xyXG4gICAgICB0cmFuc2FjdGlvblV1aWQ6IHV1aWQsXHJcbiAgICAgIGxpbmVVdWlkOiBsaW5lVXVpZCxcclxuICAgICAgZGlzY291bnRUeXBlOiB0eXBlLFxyXG4gICAgICBuZXdEaXNjb3VudDogZGlzY291bnQsXHJcbiAgICAgIG5ld0Rpc2NvdW50UmVhc29uOiByZWFzb24sXHJcbiAgICAgIG5ld0Rpc2NvdW50Q29kZTogY29kZVxyXG4gICAgfTtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZVRyYW5zYWN0aW9uTGluZURpc2NvdW50KHJlcXVlc3QpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiA8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+PHVua25vd24+dGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UsIHJlc3BvbnNlLnJlc3VsdE9iamVjdCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBjaGFuZ2VUcmFuc2FjdGlvbkxpbmVEcm9wU2hpcG1lbnQodXVpZDogc3RyaW5nLCBsaW5lVXVpZDogc3RyaW5nLCBuZXdEcm9wU2hpcG1lbnQ6IGJvb2xlYW4pOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPiB7XHJcbiAgICBjb25zdCByZXF1ZXN0ID0ge1xyXG4gICAgICB0cmFuc2FjdGlvblV1aWQ6IHV1aWQsXHJcbiAgICAgIGxpbmVVdWlkOiBsaW5lVXVpZCxcclxuICAgICAgbmV3RHJvcFNoaXBtZW50OiBuZXdEcm9wU2hpcG1lbnRcclxuICAgIH07XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VMaW5lRHJvcFNoaXBtZW50KHJlcXVlc3QpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiA8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+PHVua25vd24+dGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UsIHJlc3BvbnNlLnJlc3VsdE9iamVjdCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBjaGFuZ2VUcmFuc2FjdGlvbkxpbmVEZWxpdmVyeU1ldGhvZCh1dWlkOiBzdHJpbmcsIGxpbmVVdWlkOiBzdHJpbmcsIG1ldGhvZDogc3RyaW5nKTogUHJvbWlzZTxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT4ge1xyXG4gICAgY29uc3QgcmVxdWVzdCA9IHtcclxuICAgICAgdHJhbnNhY3Rpb25VdWlkOiB1dWlkLFxyXG4gICAgICBsaW5lVXVpZDogbGluZVV1aWQsXHJcbiAgICAgIG5ld0RlbGl2ZXJ5TWV0aG9kQ29kZTogbWV0aG9kXHJcbiAgICB9O1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlVHJhbnNhY3Rpb25MaW5lRGVsaXZlcnlNZXRob2QocmVxdWVzdCk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIDxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT48dW5rbm93bj50aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShUcmFuc2FjdGlvbkluZm9SZXNwb25zZSwgcmVzcG9uc2UucmVzdWx0T2JqZWN0KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGNoYW5nZVRyYW5zYWN0aW9uTGluZURlbGl2ZXJ5RGF0ZSh1dWlkOiBzdHJpbmcsIGxpbmVVdWlkOiBzdHJpbmcsIGRhdGU6IERhdGUpOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPiB7XHJcbiAgICBjb25zdCByZXF1ZXN0ID0ge1xyXG4gICAgICB0cmFuc2FjdGlvblV1aWQ6IHV1aWQsXHJcbiAgICAgIGxpbmVVdWlkOiBsaW5lVXVpZCxcclxuICAgICAgbmV3RGVsaXZlcnlEYXRlOiBkYXRlXHJcbiAgICB9O1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlVHJhbnNhY3Rpb25MaW5lRGVsaXZlcnlEYXRlKHJlcXVlc3QpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiA8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+PHVua25vd24+dGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UsIHJlc3BvbnNlLnJlc3VsdE9iamVjdCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBjaGFuZ2VUcmFuc2FjdGlvbkxpbmVBc3NlbWJseVRpbWUodXVpZDogc3RyaW5nLCBsaW5lVXVpZDogc3RyaW5nLCB0aW1lOiBudW1iZXIpOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPiB7XHJcbiAgICBjb25zdCByZXF1ZXN0ID0ge1xyXG4gICAgICB0cmFuc2FjdGlvblV1aWQ6IHV1aWQsXHJcbiAgICAgIGxpbmVVdWlkOiBsaW5lVXVpZCxcclxuICAgICAgbmV3QXNzZW1ibHlUaW1lOiB0aW1lXHJcbiAgICB9O1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlVHJhbnNhY3Rpb25MaW5lQXNzZW1ibHlUaW1lKHJlcXVlc3QpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiA8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+PHVua25vd24+dGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UsIHJlc3BvbnNlLnJlc3VsdE9iamVjdCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBjaGFuZ2VUcmFuc2FjdGlvbkxpbmVFZGl0VGltZSh1dWlkOiBzdHJpbmcsIGxpbmVVdWlkOiBzdHJpbmcsIHRpbWU6IG51bWJlcik6IFByb21pc2U8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+IHtcclxuICAgIGNvbnN0IHJlcXVlc3QgPSB7XHJcbiAgICAgIHRyYW5zYWN0aW9uVXVpZDogdXVpZCxcclxuICAgICAgbGluZVV1aWQ6IGxpbmVVdWlkLFxyXG4gICAgICBuZXdFZGl0VGltZTogdGltZVxyXG4gICAgfTtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZVRyYW5zYWN0aW9uTGluZUVkaXRUaW1lKHJlcXVlc3QpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiA8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+PHVua25vd24+dGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UsIHJlc3BvbnNlLnJlc3VsdE9iamVjdCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBjaGFuZ2VUcmFuc2FjdGlvbkxpbmVTdXBwbGllckFydGljbGVOdW1iZXIodXVpZDogc3RyaW5nLCBsaW5lVXVpZDogc3RyaW5nLCBhcnRpY2xlTnVtYmVyOiBzdHJpbmcpOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPiB7XHJcbiAgICBjb25zdCByZXF1ZXN0ID0ge1xyXG4gICAgICB0cmFuc2FjdGlvblV1aWQ6IHV1aWQsXHJcbiAgICAgIGxpbmVVdWlkOiBsaW5lVXVpZCxcclxuICAgICAgbmV3U3VwcGxpZXJBcnRpY2xlTnVtYmVyOiBhcnRpY2xlTnVtYmVyXHJcbiAgICB9O1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlVHJhbnNhY3Rpb25MaW5lU3VwcGxpZXJBcnRpY2xlTnVtYmVyKHJlcXVlc3QpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiA8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+PHVua25vd24+dGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UsIHJlc3BvbnNlLnJlc3VsdE9iamVjdCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBjaGFuZ2VUcmFuc2FjdGlvbkxpbmVSZWZlcmVuY2UodXVpZDogc3RyaW5nLCBsaW5lVXVpZDogc3RyaW5nLCByZWZlcmVuY2U6IHN0cmluZyk6IFByb21pc2U8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+IHtcclxuICAgIGNvbnN0IHJlcXVlc3QgPSB7XHJcbiAgICAgIHRyYW5zYWN0aW9uVXVpZDogdXVpZCxcclxuICAgICAgbGluZVV1aWQ6IGxpbmVVdWlkLFxyXG4gICAgICBuZXdSZWZlcmVuY2U6IHJlZmVyZW5jZVxyXG4gICAgfTtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZVRyYW5zYWN0aW9uTGluZVJlZmVyZW5jZShyZXF1ZXN0KTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPjx1bmtub3duPnRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlLCByZXNwb25zZS5yZXN1bHRPYmplY3QpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgY2hhbmdlVHJhbnNhY3Rpb25MaW5lR29vZERlc2NyaXB0aW9uKHV1aWQ6IHN0cmluZywgbGluZVV1aWQ6IHN0cmluZywgZ29vZERlc2NyaXB0aW9uOiBzdHJpbmcpOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPiB7XHJcbiAgICBjb25zdCByZXF1ZXN0ID0ge1xyXG4gICAgICB0cmFuc2FjdGlvblV1aWQ6IHV1aWQsXHJcbiAgICAgIGxpbmVVdWlkOiBsaW5lVXVpZCxcclxuICAgICAgbmV3R29vZERlc2NyaXB0aW9uOiBnb29kRGVzY3JpcHRpb25cclxuICAgIH07XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VUcmFuc2FjdGlvbkxpbmVHb29kRGVzY3JpcHRpb24ocmVxdWVzdCk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIDxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT48dW5rbm93bj50aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShUcmFuc2FjdGlvbkluZm9SZXNwb25zZSwgcmVzcG9uc2UucmVzdWx0T2JqZWN0KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGNoYW5nZUhlYWRlclRyYW5zYWN0aW9uRGVmaW5pdGl2ZSh1dWlkOiBzdHJpbmcsIGRlZmluaXRpdmU6IGJvb2xlYW4pOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPiB7XHJcbiAgICBjb25zdCByZXF1ZXN0ID0ge1xyXG4gICAgICB0cmFuc2FjdGlvblV1aWQ6IHV1aWQsXHJcbiAgICAgIG5ld1RyYW5zYWN0aW9uRGVmaW5pdGl2ZTogZGVmaW5pdGl2ZVxyXG4gICAgfTtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZUhlYWRlclRyYW5zYWN0aW9uRGVmaW5pdGl2ZShyZXF1ZXN0KTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPjx1bmtub3duPnRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlLCByZXNwb25zZS5yZXN1bHRPYmplY3QpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgY2hhbmdlSGVhZGVyRGVsaXZlcnlBZGRyZXNzKHV1aWQ6IHN0cmluZywgbmV3TmF3TnI6IG51bWJlcik6IFByb21pc2U8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+IHtcclxuICAgIGNvbnN0IHJlcXVlc3QgPSB7XHJcbiAgICAgIHRyYW5zYWN0aW9uVXVpZDogdXVpZCxcclxuICAgICAgbmV3VHJhbnNhY3Rpb25BZGRyZXNzTmF3TnI6IG5ld05hd05yXHJcbiAgICB9O1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlSGVhZGVyVHJhbnNhY3Rpb25BZGRyZXNzKHJlcXVlc3QpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiA8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+PHVua25vd24+dGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UsIHJlc3BvbnNlLnJlc3VsdE9iamVjdCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBjaGFuZ2VIZWFkZXJJbnZvaWNlQWRkcmVzcyh1dWlkOiBzdHJpbmcsIG5ld05hd05yOiBudW1iZXIpOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPiB7XHJcbiAgICBjb25zdCByZXF1ZXN0ID0ge1xyXG4gICAgICB0cmFuc2FjdGlvblV1aWQ6IHV1aWQsXHJcbiAgICAgIG5ld0ludm9pY2VBZGRyZXNzTmF3TnI6IG5ld05hd05yXHJcbiAgICB9O1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlSGVhZGVySW52b2ljZUFkZHJlc3MocmVxdWVzdCk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIDxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT48dW5rbm93bj50aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShUcmFuc2FjdGlvbkluZm9SZXNwb25zZSwgcmVzcG9uc2UucmVzdWx0T2JqZWN0KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGNoYW5nZUhlYWRlclRyYW5zYWN0aW9uRGVsaXZlcnlEYXRlKHV1aWQ6IHN0cmluZywgZGF0ZTogRGF0ZSk6IFByb21pc2U8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+IHtcclxuICAgIGNvbnN0IHJlcXVlc3QgPSB7XHJcbiAgICAgIHRyYW5zYWN0aW9uVXVpZDogdXVpZCxcclxuICAgICAgbmV3RGVsaXZlcnlEYXRlOiBkYXRlXHJcbiAgICB9O1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlSGVhZGVyRGVsaXZlcnlEYXRlKHJlcXVlc3QpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiA8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+PHVua25vd24+dGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UsIHJlc3BvbnNlLnJlc3VsdE9iamVjdCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBjaGFuZ2VIZWFkZXJUcmFuc2FjdGlvbkRlbGl2ZXJ5RGF0ZURlZmluaXRpdmUodXVpZDogc3RyaW5nLCBkZWZpbml0aXZlOiBib29sZWFuKTogUHJvbWlzZTxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT4ge1xyXG4gICAgY29uc3QgcmVxdWVzdCA9IHtcclxuICAgICAgdHJhbnNhY3Rpb25VdWlkOiB1dWlkLFxyXG4gICAgICBuZXdEZWxpdmVyeURhdGVEZWZpbml0aXZlOiBkZWZpbml0aXZlXHJcbiAgICB9O1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlSGVhZGVyRGVsaXZlcnlEYXRlRGVmaW5pdGl2ZShyZXF1ZXN0KTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPjx1bmtub3duPnRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlLCByZXNwb25zZS5yZXN1bHRPYmplY3QpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgY2hhbmdlSGVhZGVyVHJhbnNhY3Rpb25SZW1hcmsodXVpZDogc3RyaW5nLCByZW1hcms6IHN0cmluZyk6IFByb21pc2U8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+IHtcclxuICAgIGNvbnN0IHJlcXVlc3QgPSB7XHJcbiAgICAgIHRyYW5zYWN0aW9uVXVpZDogdXVpZCxcclxuICAgICAgbmV3UmVtYXJrczogcmVtYXJrXHJcbiAgICB9O1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlSGVhZGVyUmVtYXJrcyhyZXF1ZXN0KTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPjx1bmtub3duPnRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlLCByZXNwb25zZS5yZXN1bHRPYmplY3QpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgY2hhbmdlSGVhZGVyVHJhbnNhY3Rpb25SZWZlcmVuY2UodXVpZDogc3RyaW5nLCByZWZlcmVuY2U6IHN0cmluZyk6IFByb21pc2U8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+IHtcclxuICAgIGNvbnN0IHJlcXVlc3QgPSB7XHJcbiAgICAgIHRyYW5zYWN0aW9uVXVpZDogdXVpZCxcclxuICAgICAgbmV3T3duUmVmZXJlbmNlOiByZWZlcmVuY2VcclxuICAgIH07XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VIZWFkZXJPd25SZWZlcmVuY2UocmVxdWVzdCk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIDxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT48dW5rbm93bj50aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShUcmFuc2FjdGlvbkluZm9SZXNwb25zZSwgcmVzcG9uc2UucmVzdWx0T2JqZWN0KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGNoYW5nZUhlYWRlclRyYW5zYWN0aW9uUmVsYXRpb25SZWZlcmVuY2UodXVpZDogc3RyaW5nLCByZWZlcmVuY2U6IHN0cmluZyk6IFByb21pc2U8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+IHtcclxuICAgIGNvbnN0IHJlcXVlc3QgPSB7XHJcbiAgICAgIHRyYW5zYWN0aW9uVXVpZDogdXVpZCxcclxuICAgICAgbmV3UmVsYXRpb25SZWZlcmVuY2U6IHJlZmVyZW5jZVxyXG4gICAgfTtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZUhlYWRlclJlbGF0aW9uUmVmZXJlbmNlKHJlcXVlc3QpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiA8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+PHVua25vd24+dGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UsIHJlc3BvbnNlLnJlc3VsdE9iamVjdCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBjaGFuZ2VIZWFkZXJEZXBvc2l0UGVyY2VudGFnZSh1dWlkOiBzdHJpbmcsIGFtb3VudDogbnVtYmVyKTogUHJvbWlzZTxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT4ge1xyXG4gICAgY29uc3QgcmVxdWVzdCA9IHtcclxuICAgICAgdHJhbnNhY3Rpb25VdWlkOiB1dWlkLFxyXG4gICAgICBuZXdEZXBvc2l0UGVyY2VudGFnZTogYW1vdW50XHJcbiAgICB9O1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlSGVhZGVyRGVwb3NpdFBlcmNlbnRhZ2UocmVxdWVzdCk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIDxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT48dW5rbm93bj50aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShUcmFuc2FjdGlvbkluZm9SZXNwb25zZSwgcmVzcG9uc2UucmVzdWx0T2JqZWN0KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGNoYW5nZUhlYWRlckRlcG9zaXRBbW91bnQodXVpZDogc3RyaW5nLCBhbW91bnQ6IG51bWJlcik6IFByb21pc2U8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+IHtcclxuICAgIGNvbnN0IHJlcXVlc3QgPSB7XHJcbiAgICAgIHRyYW5zYWN0aW9uVXVpZDogdXVpZCxcclxuICAgICAgbmV3RGVwb3NpdEFtb3VudDogYW1vdW50XHJcbiAgICB9O1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlSGVhZGVyRGVwb3NpdEFtb3VudChyZXF1ZXN0KTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPjx1bmtub3duPnRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlLCByZXNwb25zZS5yZXN1bHRPYmplY3QpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgY2hhbmdlSGVhZGVyVHJhbnNhY3Rpb25QcmVmZXJyZWREZWxpdmVyeURhdGUodXVpZDogc3RyaW5nLCBkYXRlOiBEYXRlKTogUHJvbWlzZTxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT4ge1xyXG4gICAgY29uc3QgcmVxdWVzdCA9IHtcclxuICAgICAgdHJhbnNhY3Rpb25VdWlkOiB1dWlkLFxyXG4gICAgICBuZXdQcmVmZXJyZWREZWxpdmVyeURhdGU6IGRhdGUsXHJcbiAgICAgIG5ld1ByZWZlcnJlZERlbGl2ZXJ5RGF0ZU9wdGlvbjogXCJcIlxyXG4gICAgfTtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZUhlYWRlclByZWZlcnJlZERlbGl2ZXJ5RGF0ZShyZXF1ZXN0KTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPjx1bmtub3duPnRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlLCByZXNwb25zZS5yZXN1bHRPYmplY3QpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgY2hhbmdlSGVhZGVyVHJhbnNhY3Rpb25EZWxpdmVyeU1ldGhvZCh1dWlkOiBzdHJpbmcsIG1ldGhvZDogc3RyaW5nKTogUHJvbWlzZTxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT4ge1xyXG4gICAgY29uc3QgcmVxdWVzdCA9IHtcclxuICAgICAgdHJhbnNhY3Rpb25VdWlkOiB1dWlkLFxyXG4gICAgICBuZXdEZWxpdmVyeU1ldGhvZENvZGU6IG1ldGhvZFxyXG4gICAgfTtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZUhlYWRlckRlbGl2ZXJ5TWV0aG9kKHJlcXVlc3QpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiA8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+PHVua25vd24+dGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UsIHJlc3BvbnNlLnJlc3VsdE9iamVjdCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBjaGFuZ2VIZWFkZXJUcmFuc2FjdGlvbkRlbGl2ZXJ5T3B0aW9ucyh1dWlkOiBzdHJpbmcsIG9wdGlvbnM6IHN0cmluZ1tdKTogUHJvbWlzZTxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT4ge1xyXG4gICAgY29uc3QgcmVxdWVzdCA9IHtcclxuICAgICAgdHJhbnNhY3Rpb25VdWlkOiB1dWlkLFxyXG4gICAgICBuZXdEZWxpdmVyeU9wdGlvbnM6IG9wdGlvbnNcclxuICAgIH07XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VIZWFkZXJEZWxpdmVyeU9wdGlvbnMocmVxdWVzdCk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIDxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT48dW5rbm93bj50aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShUcmFuc2FjdGlvbkluZm9SZXNwb25zZSwgcmVzcG9uc2UucmVzdWx0T2JqZWN0KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGNoYW5nZUhlYWRlclRyYW5zYWN0aW9uUGFydGlhbERlbGl2ZXJ5KHV1aWQ6IHN0cmluZywgYWxsb3dQYXJ0aWFsOiBib29sZWFuKTogUHJvbWlzZTxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT4ge1xyXG4gICAgY29uc3QgcmVxdWVzdCA9IHtcclxuICAgICAgdHJhbnNhY3Rpb25VdWlkOiB1dWlkLFxyXG4gICAgICBuZXdQYXJ0aWFsRGVsaXZlcnlBbGxvd2VkOiBhbGxvd1BhcnRpYWxcclxuICAgIH07XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VIZWFkZXJQYXJ0aWFsRGVsaXZlcnlBbGxvd2VkKHJlcXVlc3QpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiA8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+PHVua25vd24+dGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UsIHJlc3BvbnNlLnJlc3VsdE9iamVjdCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBjaGFuZ2VIZWFkZXJUcmFuc2FjdGlvbkJyYW5jaCh1dWlkOiBzdHJpbmcsIGJyYW5jaDogbnVtYmVyKTogUHJvbWlzZTxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT4ge1xyXG4gICAgY29uc3QgcmVxdWVzdCA9IHtcclxuICAgICAgdHJhbnNhY3Rpb25VdWlkOiB1dWlkLFxyXG4gICAgICBuZXdCcmFuY2hJZDogYnJhbmNoXHJcbiAgICB9O1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlSGVhZGVyQnJhbmNoKHJlcXVlc3QpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiA8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+PHVua25vd24+dGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UsIHJlc3BvbnNlLnJlc3VsdE9iamVjdCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcbiAgcHVibGljIGFzeW5jIGNoYW5nZUhlYWRlclRyYW5zYWN0aW9uT25Ib2xkQ29kZXModXVpZDogc3RyaW5nLCBjb2Rlczogc3RyaW5nW10pOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPiB7XHJcbiAgICBjb25zdCByZXF1ZXN0ID0ge1xyXG4gICAgICB0cmFuc2FjdGlvblV1aWQ6IHV1aWQsXHJcbiAgICAgIG5ld09uSG9sZENvZGVzOiBjb2Rlc1xyXG4gICAgfTtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZUhlYWRlck9uSG9sZENvZGVzKHJlcXVlc3QpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiA8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+PHVua25vd24+dGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UsIHJlc3BvbnNlLnJlc3VsdE9iamVjdCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBjaGFuZ2VIZWFkZXJUcmFuc2FjdGlvbkRpdmlkZUV2ZW5seSh1dWlkOiBzdHJpbmcsIGRpdmlkZUV2ZW5seTogYm9vbGVhbik6IFByb21pc2U8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+IHtcclxuICAgIGNvbnN0IHJlcXVlc3QgPSB7XHJcbiAgICAgIHRyYW5zYWN0aW9uVXVpZDogdXVpZCxcclxuICAgICAgbmV3RGl2aWRlRXZlbmx5OiBkaXZpZGVFdmVubHlcclxuICAgIH07XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VIZWFkZXJTZXREaXZpZGVFdmVubHkocmVxdWVzdCk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIDxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT48dW5rbm93bj50aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShUcmFuc2FjdGlvbkluZm9SZXNwb25zZSwgcmVzcG9uc2UucmVzdWx0T2JqZWN0KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIHB1YmxpYyBhc3luYyBjaGFuZ2VIZWFkZXJUcmFuc2FjdGlvbkFtb3VudFRvU2V0dGxlKHV1aWQ6IHN0cmluZywgYW1vdW50VG9TZXR0bGU6IG51bWJlcik6IFByb21pc2U8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+IHtcclxuICAgIGNvbnN0IHJlcXVlc3QgPSB7XHJcbiAgICAgIHRyYW5zYWN0aW9uVXVpZDogdXVpZCxcclxuICAgICAgbmV3QW1vdW50VG9TZXR0bGU6IGFtb3VudFRvU2V0dGxlXHJcbiAgICB9O1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlSGVhZGVyU2V0QW1vdW50VG9TZXR0bGUocmVxdWVzdCk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIDxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT48dW5rbm93bj50aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShUcmFuc2FjdGlvbkluZm9SZXNwb25zZSwgcmVzcG9uc2UucmVzdWx0T2JqZWN0KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGNoYW5nZUhlYWRlclRyYW5zYWN0aW9uUHJpY2VLaW5kKHV1aWQ6IHN0cmluZywgcHJpY2VLaW5kOiBzdHJpbmcpOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPiB7XHJcbiAgICBjb25zdCByZXF1ZXN0ID0ge1xyXG4gICAgICB0cmFuc2FjdGlvblV1aWQ6IHV1aWQsXHJcbiAgICAgIG5ld1ByaWNlS2luZDogcHJpY2VLaW5kXHJcbiAgICB9O1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlSGVhZGVyUHJpY2VLaW5kKHJlcXVlc3QpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiA8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+PHVua25vd24+dGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UsIHJlc3BvbnNlLnJlc3VsdE9iamVjdCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBjaGFuZ2VIZWFkZXJUcmFuc2FjdGlvbkFkbUNvb3JkaW5hdG9yKHV1aWQ6IHN0cmluZywgcmVsYXRpb246IG51bWJlcik6IFByb21pc2U8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+IHtcclxuICAgIGNvbnN0IHJlcXVlc3QgPSB7XHJcbiAgICAgIHRyYW5zYWN0aW9uVXVpZDogdXVpZCxcclxuICAgICAgbmV3QWRtQ29vcmRpbmF0b3I6IHJlbGF0aW9uXHJcbiAgICB9O1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlSGVhZGVyQWRtQ29vcmRpbmF0b3IocmVxdWVzdCk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIDxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT48dW5rbm93bj50aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShUcmFuc2FjdGlvbkluZm9SZXNwb25zZSwgcmVzcG9uc2UucmVzdWx0T2JqZWN0KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGNoYW5nZUhlYWRlclRyYW5zYWN0aW9uTWFya2V0aW5nKHV1aWQ6IHN0cmluZywgY29kZTogc3RyaW5nKTogUHJvbWlzZTxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT4ge1xyXG4gICAgY29uc3QgcmVxdWVzdCA9IHtcclxuICAgICAgdHJhbnNhY3Rpb25VdWlkOiB1dWlkLFxyXG4gICAgICBuZXdNYXJrZXRpbmdDb2RlOiBjb2RlXHJcbiAgICB9O1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlSGVhZGVyTWFya2V0aW5nQ29kZShyZXF1ZXN0KTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPjx1bmtub3duPnRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlLCByZXNwb25zZS5yZXN1bHRPYmplY3QpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgY2hhbmdlSGVhZGVyVHJhbnNhY3Rpb25EaXNjb3VudCh1dWlkOiBzdHJpbmcsIHR5cGU6IERpc2NvdW50VHlwZSwgYW1vdW50OiBudW1iZXIpOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPiB7XHJcbiAgICBjb25zdCByZXF1ZXN0ID0ge1xyXG4gICAgICB0cmFuc2FjdGlvblV1aWQ6IHV1aWQsXHJcbiAgICAgIG9yZGVyRGlzY291bnRUeXBlOiB0eXBlLFxyXG4gICAgICBkaXNjb3VudFZhbHVlOiBhbW91bnRcclxuICAgIH07XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5zZXRUcmFuc2FjdGlvbkRpc2NvdW50cyhyZXF1ZXN0KTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPjx1bmtub3duPnRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlLCByZXNwb25zZS5yZXN1bHRPYmplY3QpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgY2hhbmdlSGVhZGVyVHJhbnNhY3Rpb25EZXBvc2l0QW1vdW50KHV1aWQ6IHN0cmluZywgYW1vdW50OiBudW1iZXIpOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPiB7XHJcbiAgICBjb25zdCByZXF1ZXN0ID0ge1xyXG4gICAgICB0cmFuc2FjdGlvblV1aWQ6IHV1aWQsXHJcbiAgICAgIG5ld0RlcG9zaXRBbW91bnQ6IGFtb3VudFxyXG4gICAgfTtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZUhlYWRlckRlcG9zaXRBbW91bnQocmVxdWVzdCk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIDxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT48dW5rbm93bj50aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShUcmFuc2FjdGlvbkluZm9SZXNwb25zZSwgcmVzcG9uc2UucmVzdWx0T2JqZWN0KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGNoYW5nZVRyYW5zYWN0aW9uTGluZUNvbGxlY3Rpb25Db2RlKHV1aWQ6IHN0cmluZywgbGluZVV1aWQ6IHN0cmluZywgY29kZTogc3RyaW5nKTogUHJvbWlzZTxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT4ge1xyXG4gICAgY29uc3QgcmVxdWVzdCA9IHtcclxuICAgICAgdHJhbnNhY3Rpb25VdWlkOiB1dWlkLFxyXG4gICAgICBsaW5lVXVpZDogbGluZVV1aWQsXHJcbiAgICAgIG5ld0NvbGxlY3Rpb25Db2RlOiBjb2RlXHJcbiAgICB9O1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlVHJhbnNhY3Rpb25MaW5lQ29sbGVjdGlvbkNvZGUocmVxdWVzdCk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIDxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT48dW5rbm93bj50aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShUcmFuc2FjdGlvbkluZm9SZXNwb25zZSwgcmVzcG9uc2UucmVzdWx0T2JqZWN0KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHJlZ2lzdGVyU2FsZXNPcmRlclBheW1lbnQoXHJcbiAgICB1dWlkOiBzdHJpbmcsIGFtb3VudDogbnVtYmVyLCBjdXJyZW5jeUlkOiBudW1iZXIsIHBheW1lbnRNZXRob2Q6IHN0cmluZywgY2FzaFJlZ2lzdGVyR3JvdXBJZDogbnVtYmVyXHJcbiAgKTogUHJvbWlzZTxEYXRhU2VydmljZVJlc3BvbnNlRGF0YT4ge1xyXG4gICAgY29uc3QgcmVxdWVzdCA9IHtcclxuICAgICAgdHJhbnNVVUlEOiB1dWlkLFxyXG4gICAgICBhbW91bnQ6IGFtb3VudCxcclxuICAgICAgY3VycmVuY3lJZDogY3VycmVuY3lJZCxcclxuICAgICAgcGF5bWVudE1ldGhvZENvZGU6IHBheW1lbnRNZXRob2QsXHJcbiAgICAgIGNhc2hSZWdpc3Rlckdyb3VwSWQ6IGNhc2hSZWdpc3Rlckdyb3VwSWRcclxuICAgIH07XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5yZWdpc3RlclNhbGVzT3JkZXJQYXltZW50KHJlcXVlc3QpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGNyZWF0ZUlvbmVQYXltZW50TGlua0FuZFFSQ29kZSh1dWlkOiBzdHJpbmcsIGFtb3VudDogbnVtYmVyLCBwYXltZW50TWV0aG9kQ29kZTogc3RyaW5nKTogUHJvbWlzZTxDcmVhdGVQYXltZW50TGlua1Jlc3VsdD4ge1xyXG4gICAgY29uc3QgcmVxdWVzdCA9IHtcclxuICAgICAgdHJhbnNVVUlEOiB1dWlkLFxyXG4gICAgICBhbW91bnQ6IGFtb3VudCxcclxuICAgICAgcGF5bWVudE1ldGhvZENvZGU6IHBheW1lbnRNZXRob2RDb2RlXHJcbiAgICB9O1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY3JlYXRlSW9uZVBheW1lbnRMaW5rQW5kUVJDb2RlKHJlcXVlc3QpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShDcmVhdGVQYXltZW50TGlua1Jlc3VsdCwgcmVzcG9uc2UucmVzdWx0T2JqZWN0KSBhcyB1bmtub3duIGFzIENyZWF0ZVBheW1lbnRMaW5rUmVzdWx0O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZG9QaW5QYXltZW50KHRyYW5zSWQ6IG51bWJlciwgcGF5bWVudE1ldGhvZENvZGU6IHN0cmluZywgY2FzaFJlZ2lzdGVyTnI6IG51bWJlciwgY2FzaFJlZ2lzdGVyR3JvdXBJZDogbnVtYmVyLCBhbW91bnQ6IG51bWJlcik6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5kb1BpblBheW1lbnQodHJhbnNJZCwgcGF5bWVudE1ldGhvZENvZGUsIGNhc2hSZWdpc3Rlck5yLCBjYXNoUmVnaXN0ZXJHcm91cElkLCBhbW91bnQpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiByZXNwb25zZS5yZXN1bHRPYmplY3Q7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBkb1BheW1lbnQoZG9QYXltZW50UmVxdWVzdDogRG9QYXltZW50UmVxdWVzdCk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5kb1BheW1lbnQoZG9QYXltZW50UmVxdWVzdCk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIHJlc3BvbnNlLnJlc3VsdE9iamVjdDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldFBheW1lbnRMaW5rU3RhdHVzKHBheW1lbnRMaW5rVVVJRDogc3RyaW5nKTogUHJvbWlzZTxQYXltZW50TGlua1N0YXR1cz4ge1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0UGF5bWVudExpbmtTdGF0dXMocGF5bWVudExpbmtVVUlEKTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gdGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoUGF5bWVudExpbmtTdGF0dXMsIHJlc3BvbnNlLnJlc3VsdE9iamVjdCkgYXMgdW5rbm93biBhcyBQYXltZW50TGlua1N0YXR1cztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldFBzcFRyYW5zYWN0aW9uU3RhdHVzKHBzcFRyYW5zYWN0aW9uVXVpZDogc3RyaW5nKTogUHJvbWlzZTxQc3BUcmFuc2FjdGlvblN0YXR1cz4ge1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0UHNwVHJhbnNhY3Rpb25TdGF0dXMocHNwVHJhbnNhY3Rpb25VdWlkKTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gdGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoUHNwVHJhbnNhY3Rpb25TdGF0dXMsIHJlc3BvbnNlLnJlc3VsdE9iamVjdCkgYXMgdW5rbm93biBhcyBQc3BUcmFuc2FjdGlvblN0YXR1cztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldERlcG9zaXRQYXltZW50SW5mbyh1dWlkOiBzdHJpbmcpOiBQcm9taXNlPFRyYW5zYWN0aW9uRGVwb3NpdFBheW1lbnRJbmZvPiB7XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXREZXBvc2l0UGF5bWVudEluZm8odXVpZCk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKFRyYW5zYWN0aW9uRGVwb3NpdFBheW1lbnRJbmZvLCByZXNwb25zZS5yZXN1bHRPYmplY3QpIGFzIHVua25vd24gYXMgVHJhbnNhY3Rpb25EZXBvc2l0UGF5bWVudEluZm87XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBjYWxjdWxhdGVBbW91bnRUb1BheShjYWxjdWxhdGVBbW91bnRUb1BheVJlcXVlc3Q6IENhbGN1bGF0ZUFtb3VudFRvUGF5UmVxdWVzdCk6IFByb21pc2U8QW1vdW50VG9QYXk+IHtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNhbGN1bGF0ZUFtb3VudFRvUGF5KGNhbGN1bGF0ZUFtb3VudFRvUGF5UmVxdWVzdCk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKEFtb3VudFRvUGF5LCByZXNwb25zZS5yZXN1bHRPYmplY3QpIGFzIHVua25vd24gYXMgQW1vdW50VG9QYXk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRHb29kc1JlY2VpcHRIaXN0b3J5KHRyYW5zSWQ6IG51bWJlciwgbGluZU5yOiBudW1iZXIpOiBQcm9taXNlPEdvb2RzUmVjZWlwdEhpc3Rvcnk+IHtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldEdvb2RzUmVjZWlwdEhpc3RvcnkodHJhbnNJZCwgbGluZU5yKTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gPEdvb2RzUmVjZWlwdEhpc3Rvcnk+PHVua25vd24+dGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoR29vZHNSZWNlaXB0SGlzdG9yeSwgcmVzcG9uc2UucmVzdWx0T2JqZWN0KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHJlY2VpdmVHb29kc0ZvclB1cmNoYXNlT3JkZXIocmVxdWVzdDogUmVjZWl2ZUdvb2RzRm9yUHVyY2hhc2VPcmRlclJlcXVlc3QpOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPiB7XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5yZWNlaXZlR29vZHNGb3JQdXJjaGFzZU9yZGVyKHJlcXVlc3QpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiA8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+PHVua25vd24+dGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UsIHJlc3BvbnNlLnJlc3VsdE9iamVjdCk7XHJcblxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgcmVjZWl2ZUdvb2RzRm9yUHVyY2hhc2VPcmRlckNvcnJlY3Rpb24ocmVxdWVzdDogUmVjZWl2ZUdvb2RzRm9yUHVyY2hhc2VPcmRlckNvcnJlY3Rpb25SZXF1ZXN0KTogUHJvbWlzZTxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT4ge1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IucmVjZWl2ZUdvb2RzRm9yUHVyY2hhc2VPcmRlckNvcnJlY3Rpb24ocmVxdWVzdCk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIDxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT48dW5rbm93bj50aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShUcmFuc2FjdGlvbkluZm9SZXNwb25zZSwgcmVzcG9uc2UucmVzdWx0T2JqZWN0KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldFB1cmNoYXNlUG9ydGFsTGluZXMocmVxdWVzdDogR2V0UHVyY2hhc2VQb3J0YWxMaW5lKTogUHJvbWlzZTxQdXJjaGFzZVBvcnRhbExpbmVbXT4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlOiBGdW5jdGlvbiwgcmVqZWN0OiBGdW5jdGlvbikgPT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuZ2V0UHVyY2hhc2VQb3J0YWxMaW5lcyhyZXF1ZXN0KS50aGVuKChyZXN1bHQ6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgICAgIGlmIChyZXN1bHQucmVzdWx0T2JqZWN0cykge1xyXG4gICAgICAgICAgICByZXNvbHZlKHRoaXMuX2JvRmFjdG9yeS5tYWtlQk9BcnJheUZyb21SYXdCYWNrZW5kRGF0YUFycmF5KFB1cmNoYXNlUG9ydGFsTGluZSwgcmVzdWx0LnJlc3VsdE9iamVjdHMpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3VsdCk7XHJcbiAgICAgICAgICByZWplY3QobnVsbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHVwZGF0ZVB1cmNoYXNlUG9ydGFsTGluZXMocHVyY2hhc2VQb3J0YWxMaW5lOiBQdXJjaGFzZVBvcnRhbExpbmUpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGNvbnN0IHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci51cGRhdGVQdXJjaGFzZVBvcnRhbExpbmVzKHB1cmNoYXNlUG9ydGFsTGluZSk7XHJcbiAgICBpZiAocmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzdWx0KTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHB1cmNoYXNlT3JkZXJDb25maXJtYXRpb24ocHVyY2hhc2VPcmRlckNvbmZpcm1hdGlvbjogR2V0UHVyY2hhc2VPcmRlckNvbmZpcm1hdGlvbik6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgY29uc3QgcmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldFB1cmNoYXNlT3JkZXJDb25maXJtYXRpb24ocHVyY2hhc2VPcmRlckNvbmZpcm1hdGlvbik7XHJcbiAgICBpZiAocmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzdWx0KTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGxvY2tQdXJjaGFzZVBvcnRhbExpbmVzKHRyYW5zSWRQdXJjaGFzZTogbnVtYmVyLCBsaW5lSWQ6IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlOiBGdW5jdGlvbiwgcmVqZWN0OiBGdW5jdGlvbikgPT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IubG9ja1B1cmNoYXNlUG9ydGFsTGluZXModHJhbnNJZFB1cmNoYXNlLCBsaW5lSWQpLnRoZW4oYXN5bmMgKHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEpID0+IHtcclxuICAgICAgICBpZiAocmVzdWx0LnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzdWx0LnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmVqZWN0KHJlc3VsdC52YWxpZGF0aW9uTWVzc2FnZXNBc1N0cmluZyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldFN0b2NrU3RpY2tlclRlbXBsYXRlcyhkYXRhOiBTdG9ja1N0aWNrZXJzUHJpbnRMYXlvdXRzKTogUHJvbWlzZTxTdG9ja1N0aWNrZXJzUHJpbnRMYXlvdXRzW10+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pID0+IHtcclxuICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICByZXR1cm4gdGhpcy5zaGFyZWRDb25uZWN0b3IuZ2V0U3RvY2tTdGlja2VyUHJpbnRMYXlvdXRzKGRhdGEpLnRoZW4oKHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEpID0+IHtcclxuICAgICAgICBpZiAocmVzdWx0LnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzdWx0LnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICAgICAgaWYgKHJlc3VsdC5yZXN1bHRPYmplY3QpIHtcclxuICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLl9ib0ZhY3RvcnkubWFrZUJPQXJyYXlGcm9tUmF3QmFja2VuZERhdGFBcnJheShTdG9ja1N0aWNrZXJzUHJpbnRMYXlvdXRzLCByZXN1bHQucmVzdWx0T2JqZWN0KSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJlamVjdChyZXN1bHQudmFsaWRhdGlvbk1lc3NhZ2VzQXNTdHJpbmcpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZW5lcmF0ZUNvbW1pc3Npb25PcmRlcnModHJhbnNJZDogbnVtYmVyLCBvbmx5R2VuZXJhdGVGb3JEaXJlY3RTZWxsU3VwcGxpZXJzOiBib29sZWFuKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKSA9PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5nZW5lcmF0ZUNvbW1pc3Npb25PcmRlcnModHJhbnNJZCwgb25seUdlbmVyYXRlRm9yRGlyZWN0U2VsbFN1cHBsaWVycykudGhlbihhc3luYyAocmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXN1bHQudmFsaWRhdGlvblJlc3VsdCAmJiByZXN1bHQudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgICAgICByZXNvbHZlKHRydWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZWplY3QocmVzdWx0LnZhbGlkYXRpb25NZXNzYWdlc0FzU3RyaW5nKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0QXZhaWxhYmxlU3RvY2tHcm91cGVkQnlXTEJTQnlUcmFuc0lkTGluZU5yKHRyYW5zSWQ6IG51bWJlciwgbGluZU5yOiBudW1iZXIpOiBQcm9taXNlPEF2YWlsYWJsZVN0b2NrW10+IHtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldEF2YWlsYWJsZVN0b2NrR3JvdXBlZEJ5V0xCU0J5VHJhbnNJZExpbmVOcih0cmFuc0lkLCBsaW5lTnIpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiA8QXZhaWxhYmxlU3RvY2tbXT48dW5rbm93bj50aGlzLl9ib0ZhY3RvcnkubWFrZUJPQXJyYXlGcm9tUmF3QmFja2VuZERhdGFBcnJheShBdmFpbGFibGVTdG9jaywgcmVzcG9uc2UucmVzdWx0T2JqZWN0KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGFsbG9jYXRlR29vZHNGb3JTYWxlc09yZGVyKHJlcXVlc3Q6IEFsbG9jYXRlR29vZHNGb3JTYWxlc09yZGVyUmVxdWVzdCk6IFByb21pc2U8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+IHtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmFsbG9jYXRlR29vZHNGb3JTYWxlc09yZGVyKHJlcXVlc3QpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiA8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+PHVua25vd24+dGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UsIHJlc3BvbnNlLnJlc3VsdE9iamVjdCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBhbGxvY2F0ZUdvb2RzRm9yU2FsZXNPcmRlckNvcnJlY3Rpb24ocmVxdWVzdDogQWxsb2NhdGVHb29kc0ZvclNhbGVzT3JkZXJDb3JyZWN0aW9uUmVxdWVzdCk6IFByb21pc2U8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+IHtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmFsbG9jYXRlR29vZHNGb3JTYWxlc09yZGVyQ29ycmVjdGlvbihyZXF1ZXN0KTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPjx1bmtub3duPnRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlLCByZXNwb25zZS5yZXN1bHRPYmplY3QpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0R29vZHNBbGxvY2F0aW9uSGlzdG9yeSh0cmFuc0lkOiBudW1iZXIsIGxpbmVOcjogbnVtYmVyKTogUHJvbWlzZTxHb29kc0FsbG9jYXRpb25IaXN0b3J5PiB7XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRHb29kc0FsbG9jYXRpb25IaXN0b3J5KHRyYW5zSWQsIGxpbmVOcik7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UucmVzdWx0T2JqZWN0KSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShHb29kc0FsbG9jYXRpb25IaXN0b3J5LCByZXNwb25zZS5yZXN1bHRPYmplY3QpIGFzIHVua25vd24gYXMgR29vZHNBbGxvY2F0aW9uSGlzdG9yeTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldEdvb2RzVG9CZVBpY2tlZEhpc3RvcnkodHJhbnNJZDogbnVtYmVyLCBsaW5lTnI6IG51bWJlcik6IFByb21pc2U8R29vZHNUb0JlUGlja2VkSGlzdG9yeT4ge1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0R29vZHNUb0JlUGlja2VkSGlzdG9yeSh0cmFuc0lkLCBsaW5lTnIpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnJlc3VsdE9iamVjdCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoR29vZHNUb0JlUGlja2VkSGlzdG9yeSwgcmVzcG9uc2UucmVzdWx0T2JqZWN0KSBhcyB1bmtub3duIGFzIEdvb2RzVG9CZVBpY2tlZEhpc3Rvcnk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRHb29kc1BpY2tlZEhpc3RvcnkodHJhbnNJZDogbnVtYmVyLCBsaW5lTnI6IG51bWJlcik6IFByb21pc2U8R29vZHNQaWNrZWRIaXN0b3J5PiB7XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRHb29kc1BpY2tlZEhpc3RvcnkodHJhbnNJZCwgbGluZU5yKTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5yZXN1bHRPYmplY3QpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKEdvb2RzUGlja2VkSGlzdG9yeSwgcmVzcG9uc2UucmVzdWx0T2JqZWN0KSBhcyB1bmtub3duIGFzIEdvb2RzUGlja2VkSGlzdG9yeTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGRlbGV0ZUdvb2RzUGlja2VkKGRlbGV0ZUdvb2RzUGlja2VkRm9yT3JkZXJSZXF1ZXN0OiBEZWxldGVHb29kc1BpY2tlZEZvck9yZGVyUmVxdWVzdCk6IFByb21pc2U8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+IHtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmRlbGV0ZUdvb2RzUGlja2VkKGRlbGV0ZUdvb2RzUGlja2VkRm9yT3JkZXJSZXF1ZXN0KTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gcmVzcG9uc2UucmVzdWx0T2JqZWN0O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZGVsZXRlR29vZHNUb0JlUGlja2VkKGRlbGV0ZUdvb2RzVG9CZVBpY2tlZEZvck9yZGVyUmVxdWVzdDogRGVsZXRlR29vZHNUb0JlUGlja2VkRm9yT3JkZXJSZXF1ZXN0KTogUHJvbWlzZTxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT4ge1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZGVsZXRlR29vZHNUb0JlUGlja2VkKGRlbGV0ZUdvb2RzVG9CZVBpY2tlZEZvck9yZGVyUmVxdWVzdCk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIHJlc3BvbnNlLnJlc3VsdE9iamVjdDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHNldEdvb2RzVG9CZVBpY2tlZEZvclNhbGVzT3JkZXIocmVxdWVzdDogR29vZHNUb0JlUGlja2VkRm9yT3JkZXJSZXF1ZXN0KTogUHJvbWlzZTxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT4ge1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3Iuc2V0R29vZHNUb0JlUGlja2VkRm9yT3JkZXIocmVxdWVzdCk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIDxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT48dW5rbm93bj50aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShUcmFuc2FjdGlvbkluZm9SZXNwb25zZSwgcmVzcG9uc2UucmVzdWx0T2JqZWN0KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHNldEdvb2RzUGlja2VkRm9yT3JkZXIocmVxdWVzdDogR29vZHNQaWNrZWRSZXF1ZXN0KTogUHJvbWlzZTxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT4ge1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3Iuc2V0R29vZHNQaWNrZWRGb3JPcmRlcihyZXF1ZXN0KTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPjx1bmtub3duPnRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlLCByZXNwb25zZS5yZXN1bHRPYmplY3QpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0T3JkZXJDb25maXJtYXRpb25FbWFpbExheW91dHModHJhbnNhY3Rpb25VVUlEOiBzdHJpbmcpOiBQcm9taXNlPFJlcG9ydExheW91dFNlbGVjdGlvbkVtYWlsW10+IHtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldE9yZGVyQ29uZmlybWF0aW9uRW1haWxMYXlvdXRzKHRyYW5zYWN0aW9uVVVJRCk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIDxSZXBvcnRMYXlvdXRTZWxlY3Rpb25FbWFpbFtdPjx1bmtub3duPnRoaXMuX2JvRmFjdG9yeS5tYWtlQk9BcnJheUZyb21SYXdCYWNrZW5kRGF0YUFycmF5KFJlcG9ydExheW91dFNlbGVjdGlvbkVtYWlsLCByZXNwb25zZS5yZXN1bHRPYmplY3QpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0T3JkZXJDb25maXJtYXRpb25QcmludExheW91dHModHJhbnNhY3Rpb25VVUlEOiBzdHJpbmcpOiBQcm9taXNlPFJlcG9ydExheW91dFNlbGVjdGlvblByaW50W10+IHtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldE9yZGVyQ29uZmlybWF0aW9uUHJpbnRMYXlvdXRzKHRyYW5zYWN0aW9uVVVJRCk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIDxSZXBvcnRMYXlvdXRTZWxlY3Rpb25QcmludFtdPjx1bmtub3duPnRoaXMuX2JvRmFjdG9yeS5tYWtlQk9BcnJheUZyb21SYXdCYWNrZW5kRGF0YUFycmF5KFJlcG9ydExheW91dFNlbGVjdGlvblByaW50LCByZXNwb25zZS5yZXN1bHRPYmplY3QpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0T3JkZXJDb25maXJtYXRpb25EZWZhdWx0U2VuZE1ldGhvZChyZWxhdGlvbklkOiBudW1iZXIpOiBQcm9taXNlPG51bWJlcj4ge1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0T3JkZXJDb25maXJtYXRpb25EZWZhdWx0U2VuZE1ldGhvZChyZWxhdGlvbklkKTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gcmVzcG9uc2UucmVzdWx0T2JqZWN0O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgcHJpbnRPcmRlckNvbmZpcm1hdGlvbihyZXF1ZXN0OiBQcmludE9yZGVyQ29uZmlybWF0aW9uUmVxdWVzdCk6IFByb21pc2U8Q29Eb2N1bWVudCB8IGJvb2xlYW4+IHtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLnByaW50T3JkZXJDb25maXJtYXRpb24ocmVxdWVzdCk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgaWYgKHJlcXVlc3QucGFya0ZvckRpZ2l0YWxTaWduYXR1cmUpIHtcclxuICAgICAgICByZXR1cm4gPENvRG9jdW1lbnQ+PHVua25vd24+dGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoQ29Eb2N1bWVudCwgcmVzcG9uc2UucmVzdWx0T2JqZWN0KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgcHJpbnRIaXN0b3JpY09yZGVyQ29uZmlybWF0aW9uKHJlcXVlc3Q6IFByaW50SGlzdG9yaWNPcmRlckNvbmZpcm1hdGlvblJlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLnByaW50SGlzdG9yaWNPcmRlckNvbmZpcm1hdGlvbihyZXF1ZXN0KTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gcmVzcG9uc2UucmVzdWx0T2JqZWN0O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZW1haWxPcmRlckNvbmZpcm1hdGlvbihyZXF1ZXN0OiBFbWFpbE9yZGVyQ29uZmlybWF0aW9uUmVxdWVzdCk6IFByb21pc2U8Q29Eb2N1bWVudCB8IGJvb2xlYW4+IHtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmVtYWlsT3JkZXJDb25maXJtYXRpb24ocmVxdWVzdCk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgaWYgKHJlcXVlc3QucGFya0ZvckRpZ2l0YWxTaWduYXR1cmUpIHtcclxuICAgICAgICByZXR1cm4gPENvRG9jdW1lbnQ+PHVua25vd24+dGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoQ29Eb2N1bWVudCwgcmVzcG9uc2UucmVzdWx0T2JqZWN0KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZW1haWxIaXN0b3JpY09yZGVyQ29uZmlybWF0aW9uKHJlcXVlc3Q6IEVtYWlsSGlzdG9yaWNPcmRlckNvbmZpcm1hdGlvblJlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmVtYWlsSGlzdG9yaWNPcmRlckNvbmZpcm1hdGlvbihyZXF1ZXN0KTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gcmVzcG9uc2UucmVzdWx0T2JqZWN0O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgcGRmT3JkZXJDb25maXJtYXRpb24ocmVxdWVzdDogUGRmT3JkZXJDb25maXJtYXRpb25SZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5wZGZPcmRlckNvbmZpcm1hdGlvbihyZXF1ZXN0KTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gcmVzcG9uc2UucmVzdWx0T2JqZWN0O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgcHJpbnRQdXJjaGFzZU9yZGVyKHJlcXVlc3Q6IFByaW50UHVyY2hhc2VPcmRlclJlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLnByaW50UHVyY2hhc2VPcmRlcihyZXF1ZXN0KTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gcmVzcG9uc2UucmVzdWx0T2JqZWN0O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZW1haWxQdXJjaGFzZU9yZGVyKHJlcXVlc3Q6IEVtYWlsUHVyY2hhc2VPcmRlclJlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmVtYWlsUHVyY2hhc2VPcmRlcihyZXF1ZXN0KTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gcmVzcG9uc2UucmVzdWx0T2JqZWN0O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgcGRmUHVyY2hhc2VPcmRlcihyZXF1ZXN0OiBQZGZQdXJjaGFzZU9yZGVyUmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IucGRmUHVyY2hhc2VPcmRlcihyZXF1ZXN0KTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gcmVzcG9uc2UucmVzdWx0T2JqZWN0O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0UHVyY2hhc2VPcmRlckVtYWlsTGF5b3V0cyh0cmFuc2FjdGlvblVVSUQ6IHN0cmluZyk6IFByb21pc2U8UmVwb3J0TGF5b3V0U2VsZWN0aW9uRW1haWxbXT4ge1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0UHVyY2hhc2VPcmRlckVtYWlsTGF5b3V0cyh0cmFuc2FjdGlvblVVSUQpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiA8UmVwb3J0TGF5b3V0U2VsZWN0aW9uRW1haWxbXT48dW5rbm93bj50aGlzLl9ib0ZhY3RvcnkubWFrZUJPQXJyYXlGcm9tUmF3QmFja2VuZERhdGFBcnJheShSZXBvcnRMYXlvdXRTZWxlY3Rpb25FbWFpbCwgcmVzcG9uc2UucmVzdWx0T2JqZWN0KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldFB1cmNoYXNlT3JkZXJQcmludExheW91dHModHJhbnNhY3Rpb25VVUlEOiBzdHJpbmcpOiBQcm9taXNlPFJlcG9ydExheW91dFNlbGVjdGlvblByaW50W10+IHtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldFB1cmNoYXNlT3JkZXJQcmludExheW91dHModHJhbnNhY3Rpb25VVUlEKTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gPFJlcG9ydExheW91dFNlbGVjdGlvblByaW50W10+PHVua25vd24+dGhpcy5fYm9GYWN0b3J5Lm1ha2VCT0FycmF5RnJvbVJhd0JhY2tlbmREYXRhQXJyYXkoUmVwb3J0TGF5b3V0U2VsZWN0aW9uUHJpbnQsIHJlc3BvbnNlLnJlc3VsdE9iamVjdCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXREZWZhdWx0RW1haWxBZGRyZXNzTGlzdEZvck9yZGVyQ29uZmlybWF0aW9uKHRyYW5zYWN0aW9uVVVJRCk6IFByb21pc2U8c3RyaW5nW10+IHtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldERlZmF1bHRFbWFpbEFkZHJlc3NMaXN0Rm9yT3JkZXJDb25maXJtYXRpb24odHJhbnNhY3Rpb25VVUlEKTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gcmVzcG9uc2UucmVzdWx0T2JqZWN0O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0UHVyY2hhc2VPcmRlckRlZmF1bHRTZW5kTWV0aG9kKHJlbGF0aW9uSWQ6IG51bWJlcik6IFByb21pc2U8bnVtYmVyPiB7XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRQdXJjaGFzZU9yZGVyRGVmYXVsdFNlbmRNZXRob2QocmVsYXRpb25JZCk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIHJlc3BvbnNlLnJlc3VsdE9iamVjdDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdlbmVyYXRlQW5kU2VuZFB1cmNoYXNlT3JkZXJzRm9yU2FsZXNPcmRlcih0cmFuc2FjdGlvbklkOiBudW1iZXIsIGxpbmVOdW1iZXJzOiBudW1iZXJbXSk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2VuZXJhdGVBbmRTZW5kUHVyY2hhc2VPcmRlcnNGb3JTYWxlc09yZGVyKHRyYW5zYWN0aW9uSWQsIGxpbmVOdW1iZXJzKTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRQdXJjaGFzZUFkdmljZUxpbmVzKGZpbHRlcnM6IFB1cmNoYXNlQWR2aWNlRmlsdGVycywgZ29vZElkPzogbnVtYmVyKTogUHJvbWlzZTxQdXJjaGFzZUFkdmljZUxpbmVbXT4ge1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0UHVyY2hhc2VBZHZpY2VMaW5lcyhmaWx0ZXJzLCBnb29kSWQpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiA8UHVyY2hhc2VBZHZpY2VMaW5lW10+PHVua25vd24+dGhpcy5fYm9GYWN0b3J5Lm1ha2VCT0FycmF5RnJvbVJhd0JhY2tlbmREYXRhQXJyYXkoUHVyY2hhc2VBZHZpY2VMaW5lLCByZXNwb25zZS5yZXN1bHRPYmplY3RzKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdlbmVyYXRlQW5kU2VuZFB1cmNoYXNlT3JkZXJzKHB1cmNoYXNlQWR2aWNlTGluZXM6IFB1cmNoYXNlQWR2aWNlTGluZVtdKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZW5lcmF0ZUFuZFNlbmRQdXJjaGFzZU9yZGVycyhwdXJjaGFzZUFkdmljZUxpbmVzKTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGVtYWlsRGVsaXZlcnlOb3RlKGVtYWlsRGVsaXZlcnlOb3RlUmVxdWVzdDogRW1haWxEZWxpdmVyeU5vdGVSZXF1ZXN0KTogUHJvbWlzZTxDb0RvY3VtZW50IHwgYm9vbGVhbj4ge1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZW1haWxEZWxpdmVyeU5vdGUoZW1haWxEZWxpdmVyeU5vdGVSZXF1ZXN0KTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICBpZiAoZW1haWxEZWxpdmVyeU5vdGVSZXF1ZXN0LnBhcmtGb3JEaWdpdGFsU2lnbmF0dXJlKSB7XHJcbiAgICAgICAgcmV0dXJuIDxDb0RvY3VtZW50Pjx1bmtub3duPnRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKENvRG9jdW1lbnQsIHJlc3BvbnNlLnJlc3VsdE9iamVjdCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGVtYWlsSGlzdG9yaWNEZWxpdmVyeU5vdGUoZW1haWxIaXN0b3JpY0RlbGl2ZXJ5Tm90ZVJlcXVlc3Q6IEVtYWlsSGlzdG9yaWNEZWxpdmVyeU5vdGVSZXF1ZXN0KTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5lbWFpbEhpc3RvcmljRGVsaXZlcnlOb3RlKGVtYWlsSGlzdG9yaWNEZWxpdmVyeU5vdGVSZXF1ZXN0KTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHBkZkRlbGl2ZXJ5Tm90ZShwZGZEZWxpdmVyeU5vdGVSZXF1ZXN0OiBQZGZEZWxpdmVyeU5vdGVSZXF1ZXN0KTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5wZGZEZWxpdmVyeU5vdGUocGRmRGVsaXZlcnlOb3RlUmVxdWVzdCk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBwZGZIaXN0b3JpY0RlbGl2ZXJ5Tm90ZShwZGZIaXN0b3JpY0RlbGl2ZXJ5Tm90ZVJlcXVlc3Q6IFBkZkhpc3RvcmljRGVsaXZlcnlOb3RlUmVxdWVzdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IucGRmSGlzdG9yaWNEZWxpdmVyeU5vdGUocGRmSGlzdG9yaWNEZWxpdmVyeU5vdGVSZXF1ZXN0KTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHByaW50RGVsaXZlcnlOb3RlKHByaW50RGVsaXZlcnlOb3RlUmVxdWVzdDogUHJpbnREZWxpdmVyeU5vdGVSZXF1ZXN0KTogUHJvbWlzZTxDb0RvY3VtZW50IHwgYm9vbGVhbj4ge1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IucHJpbnREZWxpdmVyeU5vdGUocHJpbnREZWxpdmVyeU5vdGVSZXF1ZXN0KTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICBpZiAocHJpbnREZWxpdmVyeU5vdGVSZXF1ZXN0LnBhcmtGb3JEaWdpdGFsU2lnbmF0dXJlKSB7XHJcbiAgICAgICAgcmV0dXJuIDxDb0RvY3VtZW50Pjx1bmtub3duPnRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKENvRG9jdW1lbnQsIHJlc3BvbnNlLnJlc3VsdE9iamVjdCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHByaW50SGlzdG9yaWNEZWxpdmVyeU5vdGUocHJpbnRIaXN0b3JpY0RlbGl2ZXJ5Tm90ZVJlcXVlc3Q6IFByaW50SGlzdG9yaWNEZWxpdmVyeU5vdGVSZXF1ZXN0KTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5wcmludEhpc3RvcmljRGVsaXZlcnlOb3RlKHByaW50SGlzdG9yaWNEZWxpdmVyeU5vdGVSZXF1ZXN0KTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldERlbGl2ZXJ5Tm90ZURlZmF1bHRTZW5kTWV0aG9kKHJlbGF0aW9uSWQ6IG51bWJlcik6IFByb21pc2U8bnVtYmVyPiB7XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXREZWxpdmVyeU5vdGVEZWZhdWx0U2VuZE1ldGhvZChyZWxhdGlvbklkKTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gcmVzcG9uc2UucmVzdWx0T2JqZWN0O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0RGVsaXZlcnlOb3RlRW1haWxMYXlvdXRzKHRyYW5zYWN0aW9uVVVJRDogc3RyaW5nKTogUHJvbWlzZTxSZXBvcnRMYXlvdXRTZWxlY3Rpb25FbWFpbFtdPiB7XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXREZWxpdmVyeU5vdGVFbWFpbExheW91dHModHJhbnNhY3Rpb25VVUlEKTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gPFJlcG9ydExheW91dFNlbGVjdGlvbkVtYWlsW10+PHVua25vd24+dGhpcy5fYm9GYWN0b3J5Lm1ha2VCT0FycmF5RnJvbVJhd0JhY2tlbmREYXRhQXJyYXkoUmVwb3J0TGF5b3V0U2VsZWN0aW9uRW1haWwsIHJlc3BvbnNlLnJlc3VsdE9iamVjdCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0RGVsaXZlcnlOb3RlUHJpbnRMYXlvdXRzKHRyYW5zYWN0aW9uVVVJRDogc3RyaW5nKTogUHJvbWlzZTxSZXBvcnRMYXlvdXRTZWxlY3Rpb25QcmludFtdPiB7XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXREZWxpdmVyeU5vdGVQcmludExheW91dHModHJhbnNhY3Rpb25VVUlEKTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gPFJlcG9ydExheW91dFNlbGVjdGlvblByaW50W10+PHVua25vd24+dGhpcy5fYm9GYWN0b3J5Lm1ha2VCT0FycmF5RnJvbVJhd0JhY2tlbmREYXRhQXJyYXkoUmVwb3J0TGF5b3V0U2VsZWN0aW9uUHJpbnQsIHJlc3BvbnNlLnJlc3VsdE9iamVjdCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0RGVmYXVsdEVtYWlsQWRkcmVzc0xpc3RGb3JJbnZvaWNlKHRyYW5zYWN0aW9uVVVJRCk6IFByb21pc2U8c3RyaW5nW10+IHtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldERlZmF1bHRFbWFpbEFkZHJlc3NMaXN0Rm9ySW52b2ljZSh0cmFuc2FjdGlvblVVSUQpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiByZXNwb25zZS5yZXN1bHRPYmplY3Q7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBlbWFpbEludm9pY2UoZW1haWxJbnZvaWNlUmVxdWVzdDogRW1haWxJbnZvaWNlUmVxdWVzdCk6IFByb21pc2U8Q29Eb2N1bWVudCB8IGJvb2xlYW4+IHtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmVtYWlsSW52b2ljZShlbWFpbEludm9pY2VSZXF1ZXN0KTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICBpZiAoZW1haWxJbnZvaWNlUmVxdWVzdC5wYXJrRm9yRGlnaXRhbFNpZ25hdHVyZSkge1xyXG4gICAgICAgIHJldHVybiA8Q29Eb2N1bWVudD48dW5rbm93bj50aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShDb0RvY3VtZW50LCByZXNwb25zZS5yZXN1bHRPYmplY3QpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBlbWFpbEhpc3RvcmljSW52b2ljZShlbWFpbEhpc3RvcmljSW52b2ljZVJlcXVlc3Q6IEVtYWlsSGlzdG9yaWNJbnZvaWNlUmVxdWVzdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZW1haWxIaXN0b3JpY0ludm9pY2UoZW1haWxIaXN0b3JpY0ludm9pY2VSZXF1ZXN0KTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHBkZkludm9pY2UocGRmSW52b2ljZVJlcXVlc3Q6IFBkZkludm9pY2VSZXF1ZXN0KTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5wZGZJbnZvaWNlKHBkZkludm9pY2VSZXF1ZXN0KTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHBkZkhpc3RvcmljSW52b2ljZShwZGZIaXN0b3JpY0ludm9pY2VSZXF1ZXN0OiBQZGZIaXN0b3JpY0ludm9pY2VSZXF1ZXN0KTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5wZGZIaXN0b3JpY0ludm9pY2UocGRmSGlzdG9yaWNJbnZvaWNlUmVxdWVzdCk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBwcmludEludm9pY2UocHJpbnRJbnZvaWNlUmVxdWVzdDogUHJpbnRJbnZvaWNlUmVxdWVzdCk6IFByb21pc2U8Q29Eb2N1bWVudCB8IGJvb2xlYW4+IHtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLnByaW50SW52b2ljZShwcmludEludm9pY2VSZXF1ZXN0KTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICBpZiAocHJpbnRJbnZvaWNlUmVxdWVzdC5wYXJrRm9yRGlnaXRhbFNpZ25hdHVyZSkge1xyXG4gICAgICAgIHJldHVybiA8Q29Eb2N1bWVudD48dW5rbm93bj50aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShDb0RvY3VtZW50LCByZXNwb25zZS5yZXN1bHRPYmplY3QpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBwcmludEhpc3RvcmljSW52b2ljZShwcmludEhpc3RvcmljSW52b2ljZVJlcXVlc3Q6IFByaW50SGlzdG9yaWNJbnZvaWNlUmVxdWVzdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IucHJpbnRIaXN0b3JpY0ludm9pY2UocHJpbnRIaXN0b3JpY0ludm9pY2VSZXF1ZXN0KTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gcHVibGljIGFzeW5jIGdldEludm9pY2VEZWZhdWx0U2VuZE1ldGhvZChyZWxhdGlvbklkOiBudW1iZXIpOiBQcm9taXNlPG51bWJlcj4ge1xyXG4gIC8vICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0SW52b2ljZURlZmF1bHRTZW5kTWV0aG9kKHJlbGF0aW9uSWQpO1xyXG4gIC8vICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgLy8gICAgIHJldHVybiByZXNwb25zZS5yZXN1bHRPYmplY3Q7XHJcbiAgLy8gICB9IGVsc2Uge1xyXG4gIC8vICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gIC8vICAgICByZXR1cm4gbnVsbDtcclxuICAvLyAgIH1cclxuICAvLyB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBwcmludFBvc1JlY2VpcHQocHJpbnRQb3NSZWNlaXB0UmVxdWVzdDogUHJpbnRQb3NSZWNlaXB0UmVxdWVzdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IucHJpbnRQb3NSZWNlaXB0KHByaW50UG9zUmVjZWlwdFJlcXVlc3QpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgcHJpbnRIaXN0b3JpY1Bvc1JlY2VpcHQocHJpbnRIaXN0b3JpY1Bvc1JlY2VpcHRSZXF1ZXN0OiBQcmludEhpc3RvcmljUG9zUmVjZWlwdFJlcXVlc3QpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLnByaW50SGlzdG9yaWNQb3NSZWNlaXB0KHByaW50SGlzdG9yaWNQb3NSZWNlaXB0UmVxdWVzdCk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBlbWFpbFBvc1JlY2VpcHQoZW1haWxQb3NSZWNlaXB0UmVxdWVzdDogRW1haWxQb3NSZWNlaXB0UmVxdWVzdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZW1haWxQb3NSZWNlaXB0KGVtYWlsUG9zUmVjZWlwdFJlcXVlc3QpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZW1haWxIaXN0b3JpY1Bvc1JlY2VpcHQoZW1haWxIaXN0b3JpY1Bvc1JlY2VpcHRSZXF1ZXN0OiBFbWFpbEhpc3RvcmljUG9zUmVjZWlwdFJlcXVlc3QpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmVtYWlsSGlzdG9yaWNQb3NSZWNlaXB0KGVtYWlsSGlzdG9yaWNQb3NSZWNlaXB0UmVxdWVzdCk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRQb3NSZWNlaXB0RW1haWxMYXlvdXRzKHRyYW5zYWN0aW9uVVVJRDogc3RyaW5nKTogUHJvbWlzZTxSZXBvcnRMYXlvdXRTZWxlY3Rpb25FbWFpbFtdPiB7XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRQb3NSZWNlaXB0RW1haWxMYXlvdXRzKHRyYW5zYWN0aW9uVVVJRCk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIDxSZXBvcnRMYXlvdXRTZWxlY3Rpb25FbWFpbFtdPjx1bmtub3duPnRoaXMuX2JvRmFjdG9yeS5tYWtlQk9BcnJheUZyb21SYXdCYWNrZW5kRGF0YUFycmF5KFJlcG9ydExheW91dFNlbGVjdGlvbkVtYWlsLCByZXNwb25zZS5yZXN1bHRPYmplY3QpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0UG9zUmVjZWlwdFByaW50TGF5b3V0cyh0cmFuc2FjdGlvblVVSUQ6IHN0cmluZyk6IFByb21pc2U8UmVwb3J0TGF5b3V0U2VsZWN0aW9uUHJpbnRbXT4ge1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0UG9zUmVjZWlwdFByaW50TGF5b3V0cyh0cmFuc2FjdGlvblVVSUQpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiA8UmVwb3J0TGF5b3V0U2VsZWN0aW9uUHJpbnRbXT48dW5rbm93bj50aGlzLl9ib0ZhY3RvcnkubWFrZUJPQXJyYXlGcm9tUmF3QmFja2VuZERhdGFBcnJheShSZXBvcnRMYXlvdXRTZWxlY3Rpb25QcmludCwgcmVzcG9uc2UucmVzdWx0T2JqZWN0KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldEludm9pY2VFbWFpbExheW91dHModHJhbnNhY3Rpb25VVUlEOiBzdHJpbmcpOiBQcm9taXNlPFJlcG9ydExheW91dFNlbGVjdGlvbkVtYWlsW10+IHtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldEludm9pY2VFbWFpbExheW91dHModHJhbnNhY3Rpb25VVUlEKTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gPFJlcG9ydExheW91dFNlbGVjdGlvbkVtYWlsW10+PHVua25vd24+dGhpcy5fYm9GYWN0b3J5Lm1ha2VCT0FycmF5RnJvbVJhd0JhY2tlbmREYXRhQXJyYXkoUmVwb3J0TGF5b3V0U2VsZWN0aW9uRW1haWwsIHJlc3BvbnNlLnJlc3VsdE9iamVjdCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0SW52b2ljZVByaW50TGF5b3V0cyh0cmFuc2FjdGlvblVVSUQ6IHN0cmluZyk6IFByb21pc2U8UmVwb3J0TGF5b3V0U2VsZWN0aW9uUHJpbnRbXT4ge1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0SW52b2ljZVByaW50TGF5b3V0cyh0cmFuc2FjdGlvblVVSUQpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiA8UmVwb3J0TGF5b3V0U2VsZWN0aW9uUHJpbnRbXT48dW5rbm93bj50aGlzLl9ib0ZhY3RvcnkubWFrZUJPQXJyYXlGcm9tUmF3QmFja2VuZERhdGFBcnJheShSZXBvcnRMYXlvdXRTZWxlY3Rpb25QcmludCwgcmVzcG9uc2UucmVzdWx0T2JqZWN0KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRQcmludGVycygpOiBQcm9taXNlPFByaW50ZXJbXT4ge1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5tYWluQ29ubmVjdG9yLmxpc3RBbGxQcmludGVycygpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiA8UHJpbnRlcltdPjx1bmtub3duPnRoaXMuX2JvRmFjdG9yeS5tYWtlQk9BcnJheUZyb21SYXdCYWNrZW5kRGF0YUFycmF5KFByaW50ZXIsIHJlc3BvbnNlLnJlc3VsdE9iamVjdCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0Q3VycmVuY2llcyhhY3RpdmU6IGJvb2xlYW4gPSB0cnVlKTogUHJvbWlzZTxDdXJyZW5jeVtdPiB7XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLm1haW5Db25uZWN0b3IuZ2V0Q3VycmVuY2llcyhhY3RpdmUpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiA8Q3VycmVuY3lbXT48dW5rbm93bj50aGlzLl9ib0ZhY3RvcnkubWFrZUJPQXJyYXlGcm9tUmF3QmFja2VuZERhdGFBcnJheShDdXJyZW5jeSwgcmVzcG9uc2UucmVzdWx0T2JqZWN0cyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0UGF5bWVudENvbmRpdGlvbnMobmFtZT86IHN0cmluZyk6IFByb21pc2U8UGF5bWVudENvbmRpdGlvbltdPiB7XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLm1haW5Db25uZWN0b3IuZ2V0UGF5bWVudENvbmRpdGlvbnMobmFtZSk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIDxQYXltZW50Q29uZGl0aW9uW10+PHVua25vd24+dGhpcy5fYm9GYWN0b3J5Lm1ha2VCT0FycmF5RnJvbVJhd0JhY2tlbmREYXRhQXJyYXkoUGF5bWVudENvbmRpdGlvbiwgcmVzcG9uc2UucmVzdWx0T2JqZWN0cyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0Sm9pbmVkVGFncyh0YWJsZTogc3RyaW5nLCBrZXk6IHN0cmluZyk6IFByb21pc2U8VGFnVHJlZUl0ZW1bXT4ge1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5tYWluQ29ubmVjdG9yLmdldEpvaW5lZFRhZ3ModGFibGUsIGtleSk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIDxUYWdUcmVlSXRlbVtdPjx1bmtub3duPnRoaXMuX2JvRmFjdG9yeS5tYWtlQk9BcnJheUZyb21SYXdCYWNrZW5kRGF0YUFycmF5KFRhZ1RyZWVJdGVtLCByZXNwb25zZS5yZXN1bHRPYmplY3QpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIG1lcmdlSm9pbmVkVGFncyh0YWJsZTogc3RyaW5nLCBrZXk6IHN0cmluZywgdGFnczogVGFnVHJlZUl0ZW1bXSk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5tYWluQ29ubmVjdG9yLm1lcmdlSm9pbmVkVGFncyh0YWJsZSwga2V5LCB0YWdzKTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldFRhZ3NGdWxsVHJlZShjYXRlZ29yeTogVGFnQ2F0ZWdvcnksIGluY2x1ZGVUYWdzOiBib29sZWFuKTogUHJvbWlzZTxUYWdUcmVlSXRlbVtdPiB7XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLm1haW5Db25uZWN0b3IuZ2V0VGFnc0Z1bGxUcmVlKGNhdGVnb3J5LCBpbmNsdWRlVGFncyk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIDxUYWdUcmVlSXRlbVtdPjx1bmtub3duPnRoaXMuX2JvRmFjdG9yeS5tYWtlQk9BcnJheUZyb21SYXdCYWNrZW5kRGF0YUFycmF5KFRhZ1RyZWVJdGVtLCByZXNwb25zZS5yZXN1bHRPYmplY3RzKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRUcmFuc2FjdGlvbkluZm8odHJhbnNJZDogbnVtYmVyLCBsaW5lTnI6IG51bWJlcik6IFByb21pc2U8VHJhbnNhY3Rpb25JbmZvSGlzdG9yeVtdPiB7XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRUcmFuc2FjdGlvbkluZm8odHJhbnNJZCwgbGluZU5yKTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gPFRyYW5zYWN0aW9uSW5mb0hpc3RvcnlbXT48dW5rbm93bj50aGlzLl9ib0ZhY3RvcnkubWFrZUJPQXJyYXlGcm9tUmF3QmFja2VuZERhdGFBcnJheShUcmFuc2FjdGlvbkluZm9IaXN0b3J5LCByZXNwb25zZS5yZXN1bHRPYmplY3RzKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRSZWZUcmFuc2FjdGlvbnModHJhbnNJZDogbnVtYmVyKTogUHJvbWlzZTxSZWZUcmFuc2FjdGlvbltdPiB7XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRSZWZUcmFuc2FjdGlvbnModHJhbnNJZCk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIDxSZWZUcmFuc2FjdGlvbltdPjx1bmtub3duPnRoaXMuX2JvRmFjdG9yeS5tYWtlQk9BcnJheUZyb21SYXdCYWNrZW5kRGF0YUFycmF5KFJlZlRyYW5zYWN0aW9uLCByZXNwb25zZS5yZXN1bHRPYmplY3QpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldEludGVybmFsUGFyYW1ldGVyVmFsdWUocGFyYW06IEludGVybmFsUGFyYW0pOiBQcm9taXNlPEludGVybmFsUGFyYW0+IHtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMubWFpbkNvbm5lY3Rvci5nZXRJbnRlcm5hbFBhcmFtZXRlclZhbHVlKHBhcmFtKTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gcmVzcG9uc2UucmVzdWx0T2JqZWN0O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0T2JqZWN0Q29uZmlndXJhdGlvbihzY3JlZW5DZmdNb2R1bGU6IHN0cmluZywgcGFyYW1zPzogc3RyaW5nIHwgc3RyaW5nW10sIGluc2VydE1vZGU/OiBib29sZWFuKTogUHJvbWlzZTxPYmplY3RDb25maWd1cmF0aW9uW10+IHtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMubWFpbkNvbm5lY3Rvci5nZXRPYmplY3RDb25maWd1cmF0aW9ucyhzY3JlZW5DZmdNb2R1bGUsIHBhcmFtcywgaW5zZXJ0TW9kZSk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIDxPYmplY3RDb25maWd1cmF0aW9uW10+PHVua25vd24+dGhpcy5fYm9GYWN0b3J5Lm1ha2VCT0FycmF5RnJvbVJhd0JhY2tlbmREYXRhQXJyYXkoT2JqZWN0Q29uZmlndXJhdGlvbiwgcmVzcG9uc2UucmVzdWx0T2JqZWN0cyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRIaXN0b3JpY0RvY3VtZW50cyh0cmFuc0lkOiBudW1iZXIsIGRvY3VtZW50Q29kZTogTGF5b3V0Q29kZSk6IFByb21pc2U8SGlzdG9yaWNSZXBvcnRbXT4ge1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0SGlzdG9yaWNEb2N1bWVudHModHJhbnNJZCwgZG9jdW1lbnRDb2RlKTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gPEhpc3RvcmljUmVwb3J0W10+PHVua25vd24+dGhpcy5fYm9GYWN0b3J5Lm1ha2VCT0FycmF5RnJvbVJhd0JhY2tlbmREYXRhQXJyYXkoSGlzdG9yaWNSZXBvcnQsIHJlc3BvbnNlLnJlc3VsdE9iamVjdHMpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0UGFja2FnZVN0aWNrZXJQcmludExheW91dHMoKTogUHJvbWlzZTxSZXBvcnRMYXlvdXRTZWxlY3Rpb25QcmludFtdPiB7XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLm1haW5Db25uZWN0b3IuZ2V0UGFja2FnZVN0aWNrZXJQcmludExheW91dHMoKTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gPFJlcG9ydExheW91dFNlbGVjdGlvblByaW50W10+PHVua25vd24+dGhpcy5fYm9GYWN0b3J5Lm1ha2VCT0FycmF5RnJvbVJhd0JhY2tlbmREYXRhQXJyYXkoUmVwb3J0TGF5b3V0U2VsZWN0aW9uUHJpbnQsIHJlc3BvbnNlLnJlc3VsdE9iamVjdCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgcHJvY2Vzc1Bvc1RyYW5zYWN0aW9uQnlVdWlkKHV1aWQ6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IucHJvY2Vzc1Bvc1RyYW5zYWN0aW9uQnlVdWlkKHV1aWQpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEpOiB2b2lkIHtcclxuICAgIHRoaXMuX2Vycm9yU2VydmljZS5zaG93VmFsaWRhdGlvbkVycm9yKHJlc3VsdCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
2620
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24tY29ubmVjdG9yLWFkYXB0ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RyYW5zYWN0aW9uL3NyYy9saWIvc2VydmljZS90cmFuc2FjdGlvbi1jb25uZWN0b3ItYWRhcHRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxtREFBbUQsQ0FBQztBQUM1RSxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSxtRUFBbUUsQ0FBQztBQUUxRyxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0saURBQWlELENBQUM7QUFFeEUsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLHlEQUF5RCxDQUFDO0FBQ3ZGLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSx5REFBeUQsQ0FBQztBQUN2RixPQUFPLEVBQUMsa0NBQWtDLEVBQUMsTUFBTSw4RUFBOEUsQ0FBQztBQUVoSSxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSwwREFBMEQsQ0FBQztBQUMzRixPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sNENBQTRDLENBQUM7QUFDdkUsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQ3BELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSx3REFBd0QsQ0FBQztBQUNyRixPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSwrREFBK0QsQ0FBQztBQUNsRyxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLG9EQUFvRCxDQUFDO0FBR2hGLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxpREFBaUQsQ0FBQztBQUMxRSxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sMENBQTBDLENB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SUFBSSxRQUFRLElBQUksUUFBUSxDQUFDLGdCQUFnQixJQUFJLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUU7Z0JBQzlFLE9BQU8sSUFBSSxDQUFDO2FBQ2I7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLDRCQUE0QixDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUM1QyxPQUFPLEtBQUssQ0FBQzthQUNkO1FBQ0gsQ0FBQztLQUFBO0lBRU8sNEJBQTRCLENBQUMsTUFBK0I7UUFDbEUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNqRCxDQUFDOzs7O1lBbnBFRixVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkI7OztZQTdHTyxjQUFjO1lBdUJkLDBCQUEwQjtZQUMxQix1Q0FBdUM7WUFDdkMsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7TWFya2V0aW5nfSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvbWFya2V0aW5nLmJvJztcclxuaW1wb3J0IHtUcmFuc2FjdGlvbkluZm9SZXNwb25zZX0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3RyYW5zYWN0aW9uLWluZm8tcmVzcG9uc2UuYm8nO1xyXG5pbXBvcnQge1RyYW5zYWN0aW9uS2luZH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL2VudW0vdHJhbnNhY3Rpb24ta2luZC5lbnVtJztcclxuaW1wb3J0IHtDb3VudHJ5fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvY291bnRyeS5ibyc7XHJcbmltcG9ydCB7U2VxdWVuY2VOYW1lfSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvZW51bS9zZXF1ZW5jZS1uYW1lLmVudW0nO1xyXG5pbXBvcnQge0RlbGl2ZXJ5TWV0aG9kfSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvZGVsaXZlcnktbWV0aG9kLmJvJztcclxuaW1wb3J0IHtEZWxpdmVyeU9wdGlvbn0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2RlbGl2ZXJ5LW9wdGlvbi5ibyc7XHJcbmltcG9ydCB7R2V0UG9zdGFsQ29kZVJldHJpZXZhbE91dHB1dFBhcmFtc30gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2dldC1wb3N0YWwtY29kZS1yZXRyaWV2YWwtb3V0cHV0LXBhcmFtcyc7XHJcbmltcG9ydCB7VHJhbnNhY3Rpb25BcnRpY2xlV2FyZWhvdXNlfSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvdHJhbnNhY3Rpb24tYXJ0aWNsZS13YXJlaG91c2UuYm8nO1xyXG5pbXBvcnQge0FydGljbGVGdWxsT2JqZWN0fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvYXJ0aWNsZS1mdWxsLW9iamVjdCc7XHJcbmltcG9ydCB7VHJhbnNhY3Rpb259IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC90cmFuc2FjdGlvbic7XHJcbmltcG9ydCB7U3RhbmRhcmRUZXh0fSBmcm9tICcuLi9tb2RlbC9zdGFuZGFyZC10ZXh0JztcclxuaW1wb3J0IHtDdXN0b21lckdyb3VwfSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvY3VzdG9tZXItZ3JvdXAuYm8nO1xyXG5pbXBvcnQge1RyYW5zYWN0aW9uTGluZUluZm99IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC90cmFuc2FjdGlvbi1saW5lLWluZm8uYm8nO1xyXG5pbXBvcnQge09wdGlvbnNTZXJ2aWNlfSBmcm9tICcuL29wdGlvbnMuc2VydmljZSc7XHJcbmltcG9ydCB7Q2FzaFJlZ2lzdGVyfSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvY2FzaC1yZWdpc3Rlcic7XHJcbmltcG9ydCB7Q2hhbmdlTGluZVNlcXVlbmNlUmVxdWVzdH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2NoYW5nZS1saW5lLXNlcXVlbmNlLXJlcXVlc3QnO1xyXG5pbXBvcnQge1Jlc29sdmVMaW5lUGVuZGluZ1JlYXNvblJlcXVlc3R9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9yZXNvbHZlLXBlbmRpbmctcmVhc29uLXJlcXVlc3QuYm8nO1xyXG5pbXBvcnQge1ByaWNlTGlzdH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3ByaWNlLWxpc3QnO1xyXG5pbXBvcnQge1ZhdH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3ZhdCc7XHJcbmltcG9ydCB7RGlzY291bnRUeXBlfSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvZW51bS9kaXNjb3VudC10eXBlLmVudW0nO1xyXG5pbXBvcnQge1RyYW5zYWN0aW9uU2VhcmNoVmlld1JlcXVlc3R9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC90cmFuc2FjdGlvbi1zZWFyY2gtdmlldy1yZXF1ZXN0JztcclxuaW1wb3J0IHtUcmFuc2FjdGlvblNlYXJjaFZpZXd9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC90cmFuc2FjdGlvbi1zZWFyY2gtdmlldy5ibyc7XHJcbmltcG9ydCB7T25Ib2xkQ29kZX0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL29uLWhvbGQtY29kZS5ibyc7XHJcbmltcG9ydCB7V2FyZWhvdXNlfSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvd2FyZWhvdXNlLmJvJztcclxuaW1wb3J0IHtDb2RlRGVzY3JpcHRpb259IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9jb2RlLWRlc2NyaXB0aW9uJztcclxuaW1wb3J0IHtSZWNlaXZlR29vZHNGb3JQdXJjaGFzZU9yZGVyUmVxdWVzdH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3JlY2VpdmUtZ29vZHMtZm9yLXB1cmNoYXNlLW9yZGVyLXJlcXVlc3QuYm8nO1xyXG5pbXBvcnQge1xyXG4gICAgUmVjZWl2ZUdvb2RzRm9yUHVyY2hhc2VPcmRlckNvcnJlY3Rpb25SZXF1ZXN0XHJcbn0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3JlY2VpdmUtZ29vZHMtZm9yLXB1cmNoYXNlLW9yZGVyLWNvcnJlY3Rpb24tcmVxdWVzdC5ibyc7XHJcbmltcG9ydCB7UGF5bWVudE1ldGhvZH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3BheW1lbnQtbWV0aG9kLmJvJztcclxuaW1wb3J0IHtHZXRQdXJjaGFzZVBvcnRhbExpbmV9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9nZXQtcHVyY2hhc2UtcG9ydGFsLWxpbmUnO1xyXG5pbXBvcnQge1B1cmNoYXNlUG9ydGFsTGluZX0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3B1cmNoYXNlLXBvcnRhbC1saW5lLmJvJztcclxuaW1wb3J0IHtDcmVhdGVQYXltZW50TGlua1Jlc3VsdH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2NyZWF0ZS1wYXltZW50LWxpbmstcmVzdWx0LmJvJztcclxuaW1wb3J0IHtUcmFuc2FjdGlvblNlYXJjaFJlc3VsdH0gZnJvbSAnLi4vbW9kZWwvdHJhbnNhY3Rpb24tc2VhcmNoLXJlc3VsdCc7XHJcbmltcG9ydCB7UmVzb2x2ZUhlYWRlclBlbmRpbmdSZWFzb25SZXF1ZXN0fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvcmVzb2x2ZS1oZWFkZXItcGVuZGluZy1yZWFzb24tcmVxdWVzdC5ibyc7XHJcbmltcG9ydCB7UGF5bWVudExpbmtTdGF0dXN9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9wYXltZW50LWxpbmstc3RhdHVzLmJvJztcclxuaW1wb3J0IHtTZWxlY3RNdWx0aXBsZUNhY2hlU2VydmljZX0gZnJvbSAnLi4vY2FjaGUvc2VydmljZS9zZWxlY3QtbXVsdGlwbGUtY2FjaGUuc2VydmljZSc7XHJcbmltcG9ydCB7U2VsZWN0TXVsdGlwbGVQYXJhbWV0ZXJpemVkQ2FjaGVTZXJ2aWNlfSBmcm9tICcuLi9jYWNoZS9zZXJ2aWNlL3NlbGVjdC1tdWx0aXBsZS1wYXJhbWV0ZXJpemVkLWNhY2hlLnNlcnZpY2UnO1xyXG5pbXBvcnQge0Vycm9yU2VydmljZX0gZnJvbSAnLi9lcnJvci5zZXJ2aWNlJztcclxuaW1wb3J0IHtHZXRQdXJjaGFzZU9yZGVyQ29uZmlybWF0aW9ufSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvZ2V0LXB1cmNoYXNlLW9yZGVyLWNvbmZpcm1hdGlvbic7XHJcbmltcG9ydCB7VHJhbnNhY3Rpb25Mb2NrUmVzdWx0fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvdHJhbnNhY3Rpb24tbG9jay1yZXN1bHQuYm8nO1xyXG5pbXBvcnQge1ByaXZhY3lTZXR0aW5nfSBmcm9tICdAY29saWpuaXQvbWFpbmFwaS9idWlsZC9tb2RlbC9wcml2YWN5LXNldHRpbmcuYm8nO1xyXG5pbXBvcnQge0RhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhfSBmcm9tICdAY29saWpuaXQvaW9uZWNvbm5lY3Rvci9idWlsZC9tb2RlbC9kYXRhLXNlcnZpY2UtcmVzcG9uc2UtZGF0YSc7XHJcbmltcG9ydCB7UmVsYXRpb25Qcml2YWN5U2V0dGluZ30gZnJvbSAnQGNvbGlqbml0L3JlbGF0aW9uYXBpL2J1aWxkL21vZGVsL3JlbGF0aW9uLXByaXZhY3ktc2V0dGluZy5ibyc7XHJcbmltcG9ydCB7SW1hZ2VVdGlsc30gZnJvbSAnQGNvbGlqbml0L2lvbmVjb25uZWN0b3IvYnVpbGQvdXRpbHMvaW1hZ2UtdXRpbHMnO1xyXG5pbXBvcnQge0NvRG9tYWluVmFsdWV9IGZyb20gJ0Bjb2xpam5pdC9tYWluYXBpL2J1aWxkL21vZGVsL2NvLWRvbWFpbi12YWx1ZS5ibyc7XHJcbmltcG9ydCB7VGFnfSBmcm9tICdAY29saWpuaXQvbWFpbmFwaS9idWlsZC9tb2RlbC90YWcnO1xyXG5pbXBvcnQge1NhbGVzUGVyc29ufSBmcm9tICdAY29saWpuaXQvcmVsYXRpb25hcGkvYnVpbGQvbW9kZWwvc2FsZXMtcGVyc29uLmJvJztcclxuaW1wb3J0IHtTdG9ja1N0aWNrZXJzUHJpbnRMYXlvdXRzfSBmcm9tICdAY29saWpuaXQvc2hhcmVkYXBpL2J1aWxkL21vZGVsL3JlcG9ydC9zdG9jay1zdGlja2Vycy1wcmludC1sYXlvdXRzLmJvJztcclxuaW1wb3J0IHtTaGFyZWRhcGl9IGZyb20gJ0Bjb2xpam5pdC9zaGFyZWRhcGkvYnVpbGQvc2hhcmVkYXBpJztcclxuaW1wb3J0IHtBdmFpbGFibGVTdG9ja30gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2F2YWlsYWJsZS1zdG9jay5ibyc7XHJcbmltcG9ydCB7QWxsb2NhdGVHb29kc0ZvclNhbGVzT3JkZXJSZXF1ZXN0fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvYWxsb2NhdGUtZ29vZHMtZm9yLXNhbGVzLW9yZGVyLXJlcXVlc3QnO1xyXG5pbXBvcnQge1xyXG4gICAgQWxsb2NhdGVHb29kc0ZvclNhbGVzT3JkZXJDb3JyZWN0aW9uUmVxdWVzdFxyXG59IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9hbGxvY2F0ZS1nb29kcy1mb3Itc2FsZXMtb3JkZXItY29ycmVjdGlvbi1yZXF1ZXN0JztcclxuaW1wb3J0IHtSZXBvcnRMYXlvdXRTZWxlY3Rpb25FbWFpbH0gZnJvbSAnQGNvbGlqbml0L21haW5hcGkvYnVpbGQvbW9kZWwvcmVwb3J0LWxheW91dC1zZWxlY3Rpb24tZW1haWwuYm8nO1xyXG5pbXBvcnQge1JlcG9ydExheW91dFNlbGVjdGlvblByaW50fSBmcm9tICdAY29saWpuaXQvbWFpbmFwaS9idWlsZC9tb2RlbC9yZXBvcnQtbGF5b3V0LXNlbGVjdGlvbi1wcmludC5ibyc7XHJcbmltcG9ydCB7Q3JlYXRlU2FsZXNPcmRlclJlcXVlc3R9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9jcmVhdGUtc2FsZXMtb3JkZXItcmVxdWVzdCc7XHJcbmltcG9ydCB7Q3JlYXRlQ2FzaFJlZ2lzdGVyT3JkZXJSZXF1ZXN0fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvY3JlYXRlLWNhc2gtcmVnaXN0ZXItb3JkZXItcmVxdWVzdCc7XHJcbmltcG9ydCB7Q3JlYXRlUHVyY2hhc2VPcmRlclJlcXVlc3R9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9jcmVhdGUtcHVyY2hhc2Utb3JkZXItcmVxdWVzdCc7XHJcbmltcG9ydCB7Q3JlYXRlU2VydmljZU9yZGVyUmVxdWVzdH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2NyZWF0ZS1zZXJ2aWNlLW9yZGVyLXJlcXVlc3QnO1xyXG5pbXBvcnQge0NyZWF0ZVNhbGVzUXVvdGF0aW9uUmVxdWVzdH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2NyZWF0ZS1zYWxlcy1xdW90YXRpb24tcmVxdWVzdCc7XHJcbmltcG9ydCB7UHVyY2hhc2VBZHZpY2VMaW5lfSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvcHVyY2hhc2UtYWR2aWNlLWxpbmUuYm8nO1xyXG5pbXBvcnQge1B1cmNoYXNlQWR2aWNlRmlsdGVyc30gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3B1cmNoYXNlLWFkdmljZS1maWx0ZXJzJztcclxuaW1wb3J0IHtFbWFpbERlbGl2ZXJ5Tm90ZVJlcXVlc3R9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9lbWFpbC1kZWxpdmVyeS1ub3RlLXJlcXVlc3QnO1xyXG5pbXBvcnQge1BkZkRlbGl2ZXJ5Tm90ZVJlcXVlc3R9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9wZGYtZGVsaXZlcnktbm90ZS1yZXF1ZXN0JztcclxuaW1wb3J0IHtQcmludERlbGl2ZXJ5Tm90ZVJlcXVlc3R9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9wcmludC1kZWxpdmVyeS1ub3RlLXJlcXVlc3QnO1xyXG5pbXBvcnQge1RyYW5zYWN0aW9uRGVwb3NpdFBheW1lbnRJbmZvfSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvdHJhbnNhY3Rpb24tZGVwb3NpdC1wYXltZW50LWluZm8uYm8nO1xyXG5pbXBvcnQge1RyYW5zYWN0aW9uSW5mb0hpc3Rvcnl9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC90cmFuc2FjdGlvbi1pbmZvLWhpc3RvcnkuYm8nO1xyXG5pbXBvcnQge1ByaW50SW52b2ljZVJlcXVlc3R9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9wcmludC1pbnZvaWNlLXJlcXVlc3QnO1xyXG5pbXBvcnQge1BkZkludm9pY2VSZXF1ZXN0fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvcGRmLWludm9pY2UtcmVxdWVzdCc7XHJcbmltcG9ydCB7RW1haWxJbnZvaWNlUmVxdWVzdH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2VtYWlsLWludm9pY2UtcmVxdWVzdCc7XHJcbmltcG9ydCB7UmVmVHJhbnNhY3Rpb259IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9yZWYtdHJhbnNhY3Rpb24uYm8nO1xyXG5pbXBvcnQge01haW5BcGl9IGZyb20gJ0Bjb2xpam5pdC9tYWluYXBpJztcclxuaW1wb3J0IHtUYWdUcmVlSXRlbX0gZnJvbSAnQGNvbGlqbml0L21haW5hcGkvYnVpbGQvbW9kZWwvdGFnLXRyZWUtaXRlbS5ibyc7XHJcbmltcG9ydCB7SW50ZXJuYWxQYXJhbX0gZnJvbSAnQGNvbGlqbml0L21haW5hcGkvYnVpbGQvZW51bS9pbnRlcm5hbC1wYXJhbS5lbnVtJztcclxuaW1wb3J0IHtHb29kc0FsbG9jYXRpb25IaXN0b3J5fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvZ29vZHMtYWxsb2NhdGlvbi1oaXN0b3J5LmJvJztcclxuaW1wb3J0IHtHb29kc1JlY2VpcHRIaXN0b3J5fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvZ29vZHMtcmVjZWlwdC1oaXN0b3J5LmJvJztcclxuaW1wb3J0IHtMYXlvdXRDb2RlfSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvZW51bS9sYXlvdXQtY29kZS5lbnVtJztcclxuaW1wb3J0IHtIaXN0b3JpY1JlcG9ydH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2hpc3RvcmljLXJlcG9ydC5ibyc7XHJcbmltcG9ydCB7UHJpbnRlcn0gZnJvbSAnQGNvbGlqbml0L21haW5hcGkvYnVpbGQvbW9kZWwvcHJpbnRlci5ibyc7XHJcbmltcG9ydCB7Q3VycmVuY3l9IGZyb20gJ0Bjb2xpam5pdC9tYWluYXBpL2J1aWxkL21vZGVsL2N1cnJlbmN5LmJvJztcclxuaW1wb3J0IHtQYXltZW50Q29uZGl0aW9ufSBmcm9tICdAY29saWpuaXQvbWFpbmFwaS9idWlsZC9tb2RlbC9wYXltZW50LWNvbmRpdGlvbi5ibyc7XHJcbmltcG9ydCB7UHNwVHJhbnNhY3Rpb25TdGF0dXN9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9wc3AtdHJhbnNhY3Rpb24tc3RhdHVzLmJvJztcclxuaW1wb3J0IHtHb29kc1RvQmVQaWNrZWRGb3JPcmRlclJlcXVlc3R9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9nb29kcy10by1iZS1waWNrZWQtZm9yLW9yZGVyLXJlcXVlc3QnO1xyXG5pbXBvcnQge1dhcmVob3VzZVN0b2NrSW5mb30gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3dhcmVob3VzZS1zdG9jay1pbmZvLmJvJztcclxuaW1wb3J0IHtHb29kc1RvQmVQaWNrZWRIaXN0b3J5fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvZ29vZHMtdG8tYmUtcGlja2VkLWhpc3RvcnknO1xyXG5pbXBvcnQge0dvb2RzUGlja2VkSGlzdG9yeX0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2dvb2RzLXBpY2tlZC1oaXN0b3J5JztcclxuaW1wb3J0IHtQZGZIaXN0b3JpY0RlbGl2ZXJ5Tm90ZVJlcXVlc3R9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9wZGYtaGlzdG9yaWMtZGVsaXZlcnktbm90ZS1yZXF1ZXN0JztcclxuaW1wb3J0IHtFbWFpbEhpc3RvcmljRGVsaXZlcnlOb3RlUmVxdWVzdH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2VtYWlsLWhpc3RvcmljLWRlbGl2ZXJ5LW5vdGUtcmVxdWVzdCc7XHJcbmltcG9ydCB7UHJpbnRIaXN0b3JpY0RlbGl2ZXJ5Tm90ZVJlcXVlc3R9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9wcmludC1oaXN0b3JpYy1kZWxpdmVyeS1ub3RlLXJlcXVlc3QnO1xyXG5pbXBvcnQge1ByaW50SGlzdG9yaWNPcmRlckNvbmZpcm1hdGlvblJlcXVlc3R9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9wcmludC1oaXN0b3JpYy1vcmRlci1jb25maXJtYXRpb24tcmVxdWVzdCc7XHJcbmltcG9ydCB7RW1haWxIaXN0b3JpY09yZGVyQ29uZmlybWF0aW9uUmVxdWVzdH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2VtYWlsLWhpc3RvcmljLW9yZGVyLWNvbmZpcm1hdGlvbi1yZXF1ZXN0JztcclxuaW1wb3J0IHtQZGZIaXN0b3JpY0ludm9pY2VSZXF1ZXN0fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvcGRmLWhpc3RvcmljLWludm9pY2UtcmVxdWVzdCc7XHJcbmltcG9ydCB7UHJpbnRIaXN0b3JpY0ludm9pY2VSZXF1ZXN0fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvcHJpbnQtaGlzdG9yaWMtaW52b2ljZS1yZXF1ZXN0JztcclxuaW1wb3J0IHtFbWFpbEhpc3RvcmljSW52b2ljZVJlcXVlc3R9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9lbWFpbC1oaXN0b3JpYy1pbnZvaWNlLXJlcXVlc3QnO1xyXG5pbXBvcnQge1ByaW50UHVyY2hhc2VPcmRlclJlcXVlc3R9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9wcmludC1wdXJjaGFzZS1vcmRlci1yZXF1ZXN0JztcclxuaW1wb3J0IHtQZGZQdXJjaGFzZU9yZGVyUmVxdWVzdH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3BkZi1wdXJjaGFzZS1vcmRlci1yZXF1ZXN0JztcclxuaW1wb3J0IHtQcmludE9yZGVyQ29uZmlybWF0aW9uUmVxdWVzdH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3ByaW50LW9yZGVyLWNvbmZpcm1hdGlvbi1yZXF1ZXN0JztcclxuaW1wb3J0IHtQZGZPcmRlckNvbmZpcm1hdGlvblJlcXVlc3R9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9wZGYtb3JkZXItY29uZmlybWF0aW9uLXJlcXVlc3QnO1xyXG5pbXBvcnQge0VtYWlsT3JkZXJDb25maXJtYXRpb25SZXF1ZXN0fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvZW1haWwtb3JkZXItY29uZmlybWF0aW9uLXJlcXVlc3QnO1xyXG5pbXBvcnQge0VtYWlsUHVyY2hhc2VPcmRlclJlcXVlc3R9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9lbWFpbC1wdXJjaGFzZS1vcmRlci1yZXF1ZXN0JztcclxuaW1wb3J0IHtPYmplY3RDb25maWd1cmF0aW9ufSBmcm9tICdAY29saWpuaXQvaW9uZWNvbm5lY3Rvci9idWlsZC9tb2RlbC9vYmplY3QtY29uZmlndXJhdGlvbic7XHJcbmltcG9ydCB7QnVzaW5lc3NPYmplY3RGYWN0b3J5fSBmcm9tICdAY29saWpuaXQvaW9uZWNvbm5lY3Rvci9idWlsZC9zZXJ2aWNlL2J1c2luZXNzLW9iamVjdC1mYWN0b3J5JztcclxuaW1wb3J0IHtDb0RvY3VtZW50fSBmcm9tICdAY29saWpuaXQvbWFpbmFwaS9idWlsZC9tb2RlbC9jby1kb2N1bWVudCc7XHJcbmltcG9ydCB7R29vZHNQaWNrZWRSZXF1ZXN0fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvZ29vZHMtcGlja2VkLXJlcXVlc3QnO1xyXG5pbXBvcnQge0RlbGV0ZUdvb2RzUGlja2VkRm9yT3JkZXJSZXF1ZXN0fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvZGVsZXRlLWdvb2RzLXBpY2tlZC1mb3Itb3JkZXItcmVxdWVzdCc7XHJcbmltcG9ydCB7RGVsZXRlR29vZHNUb0JlUGlja2VkRm9yT3JkZXJSZXF1ZXN0fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvZGVsZXRlLWdvb2RzLXRvLWJlLXBpY2tlZC1mb3Itb3JkZXItcmVxdWVzdCc7XHJcbmltcG9ydCB7Q2FzaERyYXdlcnNSZXF1ZXN0fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvY2FzaC1kcmF3ZXJzLXJlcXVlc3QnO1xyXG5pbXBvcnQge0Nhc2hEcmF3ZXJ9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9jYXNoLWRyYXdlci5ibyc7XHJcbmltcG9ydCB7UHJpbnRQb3NSZWNlaXB0UmVxdWVzdH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3ByaW50LXBvcy1yZWNlaXB0LXJlcXVlc3QnO1xyXG5pbXBvcnQge1ByaW50SGlzdG9yaWNQb3NSZWNlaXB0UmVxdWVzdH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3ByaW50LWhpc3RvcmljLXBvcy1yZWNlaXB0LXJlcXVlc3QnO1xyXG5pbXBvcnQge0VtYWlsUG9zUmVjZWlwdFJlcXVlc3R9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9lbWFpbC1wb3MtcmVjZWlwdC1yZXF1ZXN0JztcclxuaW1wb3J0IHtFbWFpbEhpc3RvcmljUG9zUmVjZWlwdFJlcXVlc3R9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9lbWFpbC1oaXN0b3JpYy1wb3MtcmVjZWlwdC1yZXF1ZXN0JztcclxuaW1wb3J0IHtEb1BheW1lbnRSZXF1ZXN0fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvZG8tcGF5bWVudC1yZXF1ZXN0JztcclxuaW1wb3J0IHtDYWxjdWxhdGVBbW91bnRUb1BheVJlcXVlc3R9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9jYWxjdWxhdGUtYW1vdW50LXRvLXBheS1yZXF1ZXN0JztcclxuaW1wb3J0IHtBbW91bnRUb1BheX0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2Ftb3VudC10by1wYXknO1xyXG5pbXBvcnQge1RhZ0NhdGVnb3J5fSBmcm9tICdAY29saWpuaXQvbWFpbmFwaS9idWlsZC9lbnVtL3RhYi1jYXRlZ29yeS5lbnVtJztcclxuaW1wb3J0IHtXb3JrRmxvd1N0YXR1c30gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC93b3JrZmxvdy1zdGF0dXMuYm9cIjtcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiBcInJvb3RcIlxyXG59KVxyXG5leHBvcnQgY2xhc3MgVHJhbnNhY3Rpb25Db25uZWN0b3JBZGFwdGVyU2VydmljZSB7XHJcbiAgcHVibGljIGNvbm5lY3RvcjogVHJhbnNhY3Rpb247XHJcbiAgcHVibGljIHNoYXJlZENvbm5lY3RvcjogU2hhcmVkYXBpO1xyXG4gIHB1YmxpYyBtYWluQ29ubmVjdG9yOiBNYWluQXBpO1xyXG5cclxuICBwcml2YXRlIF9ib0ZhY3Rvcnk6IEJ1c2luZXNzT2JqZWN0RmFjdG9yeSA9IG5ldyBCdXNpbmVzc09iamVjdEZhY3RvcnkoKTtcclxuICBwcml2YXRlIF9pbnRlcm5hbFBhcmFtZXRlckNhY2hlOiBNYXA8SW50ZXJuYWxQYXJhbSwgYm9vbGVhbj4gPSBuZXcgTWFwPEludGVybmFsUGFyYW0sIGJvb2xlYW4+KCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBfb3B0aW9uc1NlcnZpY2U6IE9wdGlvbnNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfc2VsZWN0TXVsdGlwbGVDYWNoZVNlcnZpY2U6IFNlbGVjdE11bHRpcGxlQ2FjaGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfc2VsZWN0TXVsdGlwbGVQYXJhbWV0ZXJpemVkQ2FjaGVTZXJ2aWNlOiBTZWxlY3RNdWx0aXBsZVBhcmFtZXRlcml6ZWRDYWNoZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9lcnJvclNlcnZpY2U6IEVycm9yU2VydmljZVxyXG4gICkge31cclxuXHJcbiAgcHVibGljIGFzeW5jIGNvbm5lY3QoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLmNvbm5lY3RvciA9IG5ldyBUcmFuc2FjdGlvbih0aGlzLl9vcHRpb25zU2VydmljZS5vcHRpb25zKTtcclxuICAgIGF3YWl0IHRoaXMuY29ubmVjdG9yLmNvbm5lY3QoKTtcclxuICAgIHRoaXMuc2hhcmVkQ29ubmVjdG9yID0gbmV3IFNoYXJlZGFwaSh0aGlzLl9vcHRpb25zU2VydmljZS5vcHRpb25zKTtcclxuICAgIHRoaXMubWFpbkNvbm5lY3RvciA9IG5ldyBNYWluQXBpKHRoaXMuX29wdGlvbnNTZXJ2aWNlLm9wdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldEFydGljbGVGdWxsT2JqZWN0KGdvb2RJZDogbnVtYmVyKTogUHJvbWlzZTxBcnRpY2xlRnVsbE9iamVjdD4ge1xyXG4gICAgY29uc3QgcmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldEFydGljbGVGdWxsT2JqZWN0KGdvb2RJZCk7XHJcbiAgICBpZiAocmVzdWx0LnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzdWx0LnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gdGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoQXJ0aWNsZUZ1bGxPYmplY3QsIHJlc3VsdC5yZXN1bHRPYmplY3QpIGFzIHVua25vd24gYXMgQXJ0aWNsZUZ1bGxPYmplY3Q7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzdWx0KTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0R29vZElkRnJvbUFydGljbGVOcihhcnRpY2xlTnI6IHN0cmluZyk6IFByb21pc2U8bnVtYmVyPiB7XHJcbiAgICBjb25zdCByZXN1bHQ6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0R29vZElkRnJvbUFydGljbGVOcihhcnRpY2xlTnIpO1xyXG4gICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIHJlc3VsdC5yZXN1bHRPYmplY3Q7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzdWx0KTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0U2luZ2xlSW1hZ2Uobm9kZUlkOiBudW1iZXIgfCBzdHJpbmcsIHB1YmxpY2F0aW9uOiBudW1iZXIsIGluY2x1ZGVNaW1ldHlwZTogYm9vbGVhbiwgdGh1bWI6IGJvb2xlYW4pOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgY29uc3QgcmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldFNpbmdsZUltYWdlKG5vZGVJZCwgcHVibGljYXRpb24sIGluY2x1ZGVNaW1ldHlwZSwgdGh1bWIpO1xyXG4gICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgaWYgKHJlc3VsdC5yZXN1bHRPYmplY3QgJiYgcmVzdWx0LnJlc3VsdE9iamVjdC5maWxlUGF0aCAhPT0gbnVsbCAmJiByZXN1bHQucmVzdWx0T2JqZWN0LmZpbGVQYXRoICE9PSB1bmRlZmluZWQgJiYgcmVzdWx0LnJlc3VsdE9iamVjdC5maWxlUGF0aCAhPT0gXCJcIikge1xyXG4gICAgICAgIHJldHVybiBJbWFnZVV0aWxzLmdldEZpeGVkSW1hZ2VGaWxlcGF0aFVybChyZXN1bHQucmVzdWx0T2JqZWN0LmZpbGVQYXRoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAocmVzdWx0LnJlc3VsdE9iamVjdCkge1xyXG4gICAgICAgICAgaWYgKGluY2x1ZGVNaW1ldHlwZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gSW1hZ2VVdGlscy5nZXREb2NCb2R5V2l0aE1pbWVUeXBlRGVmaW5pdGlvbihyZXN1bHQucmVzdWx0T2JqZWN0LmZpbGVOYW1lLFxyXG4gICAgICAgICAgICAgIHRodW1iID8gcmVzdWx0LnJlc3VsdE9iamVjdC50aHVtYm5haWxCb2R5IDogcmVzdWx0LnJlc3VsdE9iamVjdC5kb2N1bWVudEJvZHkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHRodW1iID8gcmVzdWx0LnJlc3VsdE9iamVjdC50aHVtYm5haWxCb2R5IDogcmVzdWx0LnJlc3VsdE9iamVjdC5kb2N1bWVudEJvZHk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgeyAvLyBubyBpbWFnZVxyXG4gICAgICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzdWx0KTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0Q291bnRyaWVzKCk6IFByb21pc2U8Q291bnRyeVtdPiB7XHJcbiAgICBjb25zdCByZXN1bHQ6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0Q291bnRyaWVzKCk7XHJcbiAgICBpZiAocmVzdWx0LnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzdWx0LnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gdGhpcy5fYm9GYWN0b3J5Lm1ha2VCT0FycmF5RnJvbVJhd0JhY2tlbmREYXRhQXJyYXkoQ291bnRyeSwgcmVzdWx0LnJlc3VsdE9iamVjdHMpIGFzIHVua25vd24gYXMgQ291bnRyeVtdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3VsdCk7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRDdXN0b21lckdyb3VwcygpOiBQcm9taXNlPEN1c3RvbWVyR3JvdXBbXT4ge1xyXG4gICAgY29uc3QgcmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldEN1c3RvbWVyR3JvdXBzKCk7XHJcbiAgICBpZiAocmVzdWx0LnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzdWx0LnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gdGhpcy5fYm9GYWN0b3J5Lm1ha2VCT0FycmF5RnJvbVJhd0JhY2tlbmREYXRhQXJyYXkoQ3VzdG9tZXJHcm91cCwgcmVzdWx0LnJlc3VsdE9iamVjdHMpIGFzIHVua25vd24gYXMgQ3VzdG9tZXJHcm91cFtdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3VsdCk7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRXb3JrRmxvd1N0YXR1c2VzKHRyYW5zYWN0aW9uS2luZDogVHJhbnNhY3Rpb25LaW5kKTogUHJvbWlzZTxXb3JrRmxvd1N0YXR1c1tdPiB7XHJcbiAgICBjb25zdCByZXN1bHQ6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0V29ya0Zsb3dTdGF0dXNlcyh0cmFuc2FjdGlvbktpbmQpO1xyXG4gICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2JvRmFjdG9yeS5tYWtlQk9BcnJheUZyb21SYXdCYWNrZW5kRGF0YUFycmF5KFdvcmtGbG93U3RhdHVzLCByZXN1bHQucmVzdWx0T2JqZWN0cykgYXMgdW5rbm93biBhcyBXb3JrRmxvd1N0YXR1c1tdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3VsdCk7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRDb3VudHJ5KGNvdW50cnlDb2RlOiBzdHJpbmcpOiBQcm9taXNlPENvdW50cnk+IHtcclxuICAgIGNvbnN0IGNvdW50cmllczogQ291bnRyeVtdID0gYXdhaXQgdGhpcy5nZXRDb3VudHJpZXMoKTtcclxuICAgIHJldHVybiBjb3VudHJpZXMuZmluZChjb3VudHJ5ID0+IGNvdW50cnkuY29kZSA9PT0gY291bnRyeUNvZGUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldFByaXZhY3lTZXR0aW5ncygpOiBQcm9taXNlPFByaXZhY3lTZXR0aW5nW10+IHtcclxuICAgIGNvbnN0IHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRQcml2YWN5U2V0dGluZ3MoKTtcclxuICAgIGlmIChyZXN1bHQudmFsaWRhdGlvblJlc3VsdCAmJiByZXN1bHQudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9ib0ZhY3RvcnkubWFrZUJPQXJyYXlGcm9tUmF3QmFja2VuZERhdGFBcnJheShQcml2YWN5U2V0dGluZywgcmVzdWx0LnJlc3VsdE9iamVjdHMpIGFzIHVua25vd24gYXMgUHJpdmFjeVNldHRpbmdbXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXN1bHQpO1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0UmVsYXRpb25Qcml2YWN5U2V0dGluZ3MoKTogUHJvbWlzZTxSZWxhdGlvblByaXZhY3lTZXR0aW5nW10+IHtcclxuICAgIGNvbnN0IHByaXZhY3lTZXR0aW5nczogUmVsYXRpb25Qcml2YWN5U2V0dGluZ1tdID0gW107XHJcblxyXG4gICAgY29uc3QgYmFzZVByaXZhY3lTZXR0aW5nczogUHJpdmFjeVNldHRpbmdbXSA9IGF3YWl0IHRoaXMuZ2V0UHJpdmFjeVNldHRpbmdzKCk7XHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwLCBsZW46IG51bWJlciA9IGJhc2VQcml2YWN5U2V0dGluZ3MubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgY29uc3QgYmFzZVByaXZTZXR0aW5nOiBQcml2YWN5U2V0dGluZyA9IGJhc2VQcml2YWN5U2V0dGluZ3NbaV07XHJcbiAgICAgIGNvbnN0IG5ld1JlbFByaXZTZXQ6IFJlbGF0aW9uUHJpdmFjeVNldHRpbmcgPSA8UmVsYXRpb25Qcml2YWN5U2V0dGluZz48dW5rbm93bj50aGlzLl9ib0ZhY3RvcnkuaW5zdGFudGlhdGVOZXdCbyhSZWxhdGlvblByaXZhY3lTZXR0aW5nKTtcclxuICAgICAgbmV3UmVsUHJpdlNldC5hcHBseUJhc2VQcml2YWN5U2V0dGluZ1ZhbHVlcyhiYXNlUHJpdlNldHRpbmcpO1xyXG4gICAgICBwcml2YWN5U2V0dGluZ3MucHVzaChuZXdSZWxQcml2U2V0KTtcclxuICAgIH1cclxuICAgIHJldHVybiBwcml2YWN5U2V0dGluZ3M7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0TWFya2V0aW5nQ29kZXMoKTogUHJvbWlzZTxNYXJrZXRpbmdbXT4ge1xyXG4gICAgY29uc3QgcmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldE1hcmtldGluZ0NvZGVzKCk7XHJcbiAgICBpZiAocmVzdWx0LnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzdWx0LnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gdGhpcy5fYm9GYWN0b3J5Lm1ha2VCT0FycmF5RnJvbVJhd0JhY2tlbmREYXRhQXJyYXkoTWFya2V0aW5nLCByZXN1bHQucmVzdWx0T2JqZWN0cykgYXMgdW5rbm93biBhcyBNYXJrZXRpbmdbXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXN1bHQpO1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0QXJ0aWNsZUJvdW5kVGV4dExpbmVzT2ZBcnRpY2xlTGluZShhcnRpY2xlTGluZVV1aWQ6IHN0cmluZyk6IFByb21pc2U8VHJhbnNhY3Rpb25MaW5lSW5mb1tdPiB7XHJcbiAgICBjb25zdCByZXN1bHQ6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0QXJ0aWNsZUJvdW5kVGV4dExpbmVzT2ZBcnRpY2xlTGluZShhcnRpY2xlTGluZVV1aWQpO1xyXG4gICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIDxUcmFuc2FjdGlvbkxpbmVJbmZvW10+PHVua25vd24+dGhpcy5fYm9GYWN0b3J5Lm1ha2VCT0FycmF5RnJvbVJhd0JhY2tlbmREYXRhQXJyYXkoVHJhbnNhY3Rpb25MaW5lSW5mbywgcmVzdWx0LnJlc3VsdE9iamVjdCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzdWx0KTtcclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldFRyYW5zYWN0aW9uQnlOckFuZEtpbmQoa2luZDogVHJhbnNhY3Rpb25LaW5kLCB0cmFuc2FjdGlvbk5vOiBudW1iZXIpOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPiB7XHJcbiAgICBjb25zdCByZXN1bHQ6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0VHJhbnNhY3Rpb25CeU5yQW5kS2luZChraW5kLCB0cmFuc2FjdGlvbk5vKTtcclxuICAgIGlmIChyZXN1bHQudmFsaWRhdGlvblJlc3VsdCAmJiByZXN1bHQudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShUcmFuc2FjdGlvbkluZm9SZXNwb25zZSwgcmVzdWx0LnJlc3VsdE9iamVjdCkgYXMgdW5rbm93biBhcyBUcmFuc2FjdGlvbkluZm9SZXNwb25zZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXN1bHQpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRUcmFuc2FjdGlvbkJ5SWQodHJhbnNhY3Rpb25JZDogbnVtYmVyKTogUHJvbWlzZTxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT4ge1xyXG4gICAgY29uc3QgcmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldFRyYW5zYWN0aW9uQnlJZCh0cmFuc2FjdGlvbklkKTtcclxuICAgIGlmIChyZXN1bHQudmFsaWRhdGlvblJlc3VsdCAmJiByZXN1bHQudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShUcmFuc2FjdGlvbkluZm9SZXNwb25zZSwgcmVzdWx0LnJlc3VsdE9iamVjdCkgYXMgdW5rbm93biBhcyBUcmFuc2FjdGlvbkluZm9SZXNwb25zZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXN1bHQpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRSZWZyZXNoZWRUcmFuc2FjdGlvbkZyb21EYXRhYmFzZSh0cmFuc2FjdGlvbklkOiBudW1iZXIpOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPiB7XHJcbiAgICBjb25zdCByZXN1bHQ6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0UmVmcmVzaGVkVHJhbnNhY3Rpb25Gcm9tRGF0YWJhc2UodHJhbnNhY3Rpb25JZCk7XHJcbiAgICBpZiAocmVzdWx0LnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzdWx0LnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gdGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UsIHJlc3VsdC5yZXN1bHRPYmplY3QpIGFzIHVua25vd24gYXMgVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzdWx0KTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0V2ViU2Vzc2lvblNhbGVzT3JkZXIoKTogUHJvbWlzZTxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT4ge1xyXG4gICAgY29uc3QgcmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldFdlYlNlc3Npb25TYWxlc09yZGVyKCk7XHJcbiAgICBpZiAocmVzdWx0LnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzdWx0LnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gdGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UsIHJlc3VsdC5yZXN1bHRPYmplY3QpIGFzIHVua25vd24gYXMgVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzdWx0KTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZGVsZXRlVHJhbnNhY3Rpb25CeVV1SWQodXVpZDogc3RyaW5nKTogUHJvbWlzZTxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT4ge1xyXG4gICAgY29uc3QgcmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmRlbGV0ZVRyYW5zYWN0aW9uQnlVdUlkKHV1aWQpO1xyXG4gICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlLCByZXN1bHQucmVzdWx0T2JqZWN0KSBhcyB1bmtub3duIGFzIFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3VsdCk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGxvY2tUcmFuc2FjdGlvbkJ5SWQodHJhbnNhY3Rpb25JZDogbnVtYmVyLCB2ZXJzaW9uOiBudW1iZXIpOiBQcm9taXNlPFRyYW5zYWN0aW9uTG9ja1Jlc3VsdD4ge1xyXG4gICAgY29uc3QgcmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmxvY2tUcmFuc2FjdGlvbkJ5VHJhbnNJZCh0cmFuc2FjdGlvbklkLCB2ZXJzaW9uKTtcclxuICAgIGlmIChyZXN1bHQudmFsaWRhdGlvblJlc3VsdCAmJiByZXN1bHQudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShUcmFuc2FjdGlvbkxvY2tSZXN1bHQsIHJlc3VsdC5yZXN1bHRPYmplY3QpIGFzIHVua25vd24gYXMgVHJhbnNhY3Rpb25Mb2NrUmVzdWx0O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3VsdCk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldENhc2hSZWdpc3RlcnMoYnJhbmNoPzogc3RyaW5nLCBncm91cD86IG51bWJlcik6IFByb21pc2U8Q2FzaFJlZ2lzdGVyW10+IHtcclxuICAgIGNvbnN0IHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRDYXNoUmVnaXN0ZXIoYnJhbmNoLCBncm91cCk7XHJcbiAgICBpZiAocmVzdWx0LnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzdWx0LnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gdGhpcy5fYm9GYWN0b3J5Lm1ha2VCT0FycmF5RnJvbVJhd0JhY2tlbmREYXRhQXJyYXkoQ2FzaFJlZ2lzdGVyLCByZXN1bHQucmVzdWx0T2JqZWN0cykgYXMgdW5rbm93biBhcyBDYXNoUmVnaXN0ZXJbXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXN1bHQpO1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0Q2FzaERyYXdlcnMoY2FzaERyYXdlcnNSZXF1ZXN0OiBDYXNoRHJhd2Vyc1JlcXVlc3QpOiBQcm9taXNlPENhc2hEcmF3ZXJbXT4ge1xyXG4gICAgY29uc3QgcmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldENhc2hEcmF3ZXJzKGNhc2hEcmF3ZXJzUmVxdWVzdCk7XHJcbiAgICBpZiAocmVzdWx0LnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzdWx0LnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gdGhpcy5fYm9GYWN0b3J5Lm1ha2VCT0FycmF5RnJvbVJhd0JhY2tlbmREYXRhQXJyYXkoQ2FzaERyYXdlciwgcmVzdWx0LnJlc3VsdE9iamVjdHMpIGFzIHVua25vd24gYXMgQ2FzaERyYXdlcltdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3VsdCk7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRQcmljZUxpc3RzKGNvZGU/OiBzdHJpbmcpOiBQcm9taXNlPFByaWNlTGlzdFtdPiB7XHJcbiAgICBjb25zdCByZXN1bHQ6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0UHJpY2VMaXN0cyhjb2RlKTtcclxuICAgIGlmIChyZXN1bHQudmFsaWRhdGlvblJlc3VsdCAmJiByZXN1bHQudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9ib0ZhY3RvcnkubWFrZUJPQXJyYXlGcm9tUmF3QmFja2VuZERhdGFBcnJheShQcmljZUxpc3QsIHJlc3VsdC5yZXN1bHRPYmplY3RzKSBhcyB1bmtub3duIGFzIFByaWNlTGlzdFtdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3VsdCk7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRWYXRMaXN0KG9ubHlWYWxpZDogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTxWYXRbXT4ge1xyXG4gICAgY29uc3QgcmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldFZhdExpc3Qob25seVZhbGlkKTtcclxuICAgIGlmIChyZXN1bHQudmFsaWRhdGlvblJlc3VsdCAmJiByZXN1bHQudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9ib0ZhY3RvcnkubWFrZUJPQXJyYXlGcm9tUmF3QmFja2VuZERhdGFBcnJheShWYXQsIHJlc3VsdC5yZXN1bHRPYmplY3RzKSBhcyB1bmtub3duIGFzIFZhdFtdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3VsdCk7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRUcmFuc1ZhdENvZGVzKHR5cGU6IHN0cmluZywgZGF0ZTogRGF0ZSk6IFByb21pc2U8VmF0W10+IHtcclxuICAgIGNvbnN0IHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRUcmFuc1ZhdENvZGVzKHR5cGUsIGRhdGUpO1xyXG4gICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2JvRmFjdG9yeS5tYWtlQk9BcnJheUZyb21SYXdCYWNrZW5kRGF0YUFycmF5KFZhdCwgcmVzdWx0LnJlc3VsdE9iamVjdHMpIGFzIHVua25vd24gYXMgVmF0W107XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzdWx0KTtcclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHNlYXJjaFRyYW5zYWN0aW9ucyhyZXF1ZXN0OiBUcmFuc2FjdGlvblNlYXJjaFZpZXdSZXF1ZXN0KTogUHJvbWlzZTxUcmFuc2FjdGlvblNlYXJjaFJlc3VsdD4ge1xyXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5zZWFyY2hUcmFuc2FjdGlvbnMocmVxdWVzdCk7XHJcbiAgICBpZiAocmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgY29uc3QgcmVzdWx0OiBUcmFuc2FjdGlvblNlYXJjaFJlc3VsdCA9IG5ldyBUcmFuc2FjdGlvblNlYXJjaFJlc3VsdCgpO1xyXG4gICAgICByZXN1bHQuY291bnQgPSAocmVzcG9uc2UucGFnaW5nUGFyYW1ldGVycyBhcyBhbnkpLnJlc3VsdENvdW50OyAvLyB0b2RvOiBmaXggcHJvcGVydHkgaW4gYXBpXHJcbiAgICAgIHJlc3VsdC50cmFuc2FjdGlvbnMgPSA8dW5rbm93bj50aGlzLl9ib0ZhY3RvcnkubWFrZUJPQXJyYXlGcm9tUmF3QmFja2VuZERhdGFBcnJheShUcmFuc2FjdGlvblNlYXJjaFZpZXcsIHJlc3BvbnNlLnJlc3VsdE9iamVjdHMpIGFzIFRyYW5zYWN0aW9uU2VhcmNoVmlld1tdO1xyXG4gICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0U2VxdWVuY2VWYWx1ZShzZXF1ZW5jZU5hbWU6IFNlcXVlbmNlTmFtZSk6IFByb21pc2U8bnVtYmVyPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKSA9PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5nZXRTZXF1ZW5jZVZhbHVlKHNlcXVlbmNlTmFtZSkudGhlbigocmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXN1bHQudmFsaWRhdGlvblJlc3VsdCAmJiByZXN1bHQudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgICAgICByZXNvbHZlKHJlc3VsdC5yZXN1bHRPYmplY3QpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzdWx0KTtcclxuICAgICAgICAgIHJlamVjdChudWxsKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0RGVsaXZlcnlNZXRob2RzKCk6IFByb21pc2U8RGVsaXZlcnlNZXRob2RbXT4ge1xyXG4gICAgY29uc3QgcmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldERlbGl2ZXJ5TWV0aG9kcygpO1xyXG4gICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2JvRmFjdG9yeS5tYWtlQk9BcnJheUZyb21SYXdCYWNrZW5kRGF0YUFycmF5KERlbGl2ZXJ5TWV0aG9kLCByZXN1bHQucmVzdWx0T2JqZWN0cykgYXMgdW5rbm93biBhcyBEZWxpdmVyeU1ldGhvZFtdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3VsdCk7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXREZWxpdmVyeU9wdGlvbnMoKTogUHJvbWlzZTxEZWxpdmVyeU9wdGlvbltdPiB7XHJcbiAgICBjb25zdCByZXN1bHQ6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0RGVsaXZlcnlPcHRpb25zKCk7XHJcbiAgICBpZiAocmVzdWx0LnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzdWx0LnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gdGhpcy5fYm9GYWN0b3J5Lm1ha2VCT0FycmF5RnJvbVJhd0JhY2tlbmREYXRhQXJyYXkoRGVsaXZlcnlPcHRpb24sIHJlc3VsdC5yZXN1bHRPYmplY3RzKSBhcyB1bmtub3duIGFzIERlbGl2ZXJ5T3B0aW9uW107XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzdWx0KTtcclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldFBvc3RhbENvZGVSZXRyaWV2YWwocG9zdGNhbENvZGU6IHN0cmluZywgaG91c2VObzogc3RyaW5nKTogUHJvbWlzZTxHZXRQb3N0YWxDb2RlUmV0cmlldmFsT3V0cHV0UGFyYW1zPiB7XHJcbiAgICBjb25zdCByZXN1bHQ6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0UG9zdGFsQ29kZVJldHJpZXZhbChwb3N0Y2FsQ29kZSwgaG91c2VObyk7XHJcbiAgICBpZiAocmVzdWx0LnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzdWx0LnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICBpZiAocmVzdWx0LnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzdWx0LnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICAgIGNvbnN0IG91dHB1dFBhcmFtczogR2V0UG9zdGFsQ29kZVJldHJpZXZhbE91dHB1dFBhcmFtcyA9IG5ldyBHZXRQb3N0YWxDb2RlUmV0cmlldmFsT3V0cHV0UGFyYW1zKCk7XHJcbiAgICAgICAgb3V0cHV0UGFyYW1zLmNpdHkgPSByZXN1bHQucmVzdWx0T2JqZWN0LmNpdHk7XHJcbiAgICAgICAgb3V0cHV0UGFyYW1zLnN0cmVldCA9IHJlc3VsdC5yZXN1bHRPYmplY3Quc3RyZWV0O1xyXG4gICAgICAgIG91dHB1dFBhcmFtcy5zdGF0dXMgPSByZXN1bHQucmVzdWx0T2JqZWN0LnN0YXR1cztcclxuICAgICAgICBvdXRwdXRQYXJhbXMubmV0TnVtYmVyID0gcmVzdWx0LnJlc3VsdE9iamVjdC5uZXROdW1iZXI7XHJcbiAgICAgICAgcmV0dXJuIG91dHB1dFBhcmFtcztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzdWx0KTtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldENvbW1pc3Npb25Db2RlcyhsYW5ndWFnZUNvZGU6IHN0cmluZyk6IFByb21pc2U8Q29Eb21haW5WYWx1ZVtdPiB7XHJcbiAgICBjb25zdCByZXN1bHQ6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0Q29tbWlzc2lvbkNvZGVzKGxhbmd1YWdlQ29kZSk7XHJcbiAgICBpZiAocmVzdWx0LnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzdWx0LnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gdGhpcy5fYm9GYWN0b3J5Lm1ha2VCT0FycmF5RnJvbVJhd0JhY2tlbmREYXRhQXJyYXkoQ29Eb21haW5WYWx1ZSwgcmVzdWx0LnJlc3VsdE9iamVjdHMpIGFzIHVua25vd24gYXMgQ29Eb21haW5WYWx1ZVtdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3VsdCk7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRJbk91dENvbGxlY3Rpb24obGFuZ3VhZ2VDb2RlOiBzdHJpbmcpOiBQcm9taXNlPENvRG9tYWluVmFsdWVbXT4ge1xyXG4gICAgY29uc3QgcmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldEluT3V0Q29sbGVjdGlvbihsYW5ndWFnZUNvZGUpO1xyXG4gICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2JvRmFjdG9yeS5tYWtlQk9BcnJheUZyb21SYXdCYWNrZW5kRGF0YUFycmF5KENvRG9tYWluVmFsdWUsIHJlc3VsdC5yZXN1bHRPYmplY3RzKSBhcyB1bmtub3duIGFzIENvRG9tYWluVmFsdWVbXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXN1bHQpO1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0VHJhbnNhY3Rpb25BcnRpY2xlV2FyZWhvdXNlcyhnb29kSWQ6IG51bWJlcik6IFByb21pc2U8VHJhbnNhY3Rpb25BcnRpY2xlV2FyZWhvdXNlW10+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pID0+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmdldFRyYW5zYWN0aW9uQXJ0aWNsZVdhcmVob3VzZXMoZ29vZElkKS50aGVuKChyZXN1bHQ6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgICAgIHJlc29sdmUoPFRyYW5zYWN0aW9uQXJ0aWNsZVdhcmVob3VzZVtdPnJlc3VsdC5yZXN1bHRPYmplY3RzKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3VsdCk7XHJcbiAgICAgICAgICByZWplY3QoW10pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRUZXh0VHlwZXMobGFuZ3VhZ2VDb2RlOiBzdHJpbmcpOiBQcm9taXNlPENvRG9tYWluVmFsdWVbXT4ge1xyXG4gICAgY29uc3QgcmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldFRleHRUeXBlcyhsYW5ndWFnZUNvZGUpO1xyXG4gICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgY29uc3QgdGV4dHM6IENvRG9tYWluVmFsdWVbXSA9IDxDb0RvbWFpblZhbHVlW10+PHVua25vd24+dGhpcy5fYm9GYWN0b3J5Lm1ha2VCT0FycmF5RnJvbVJhd0JhY2tlbmREYXRhQXJyYXkoQ29Eb21haW5WYWx1ZSwgcmVzdWx0LnJlc3VsdE9iamVjdHMpO1xyXG4gICAgICB0ZXh0cy5zb3J0KChhLCBiKSA9PiBhLnNlcXVlbmNlID4gYi5zZXF1ZW5jZSA/IDEgOiAtMSk7XHJcbiAgICAgIHJldHVybiB0ZXh0cztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXN1bHQpO1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0U3RhbmRhcmRUZXh0cyhsYW5ndWFnZUNvZGU6IHN0cmluZyk6IFByb21pc2U8U3RhbmRhcmRUZXh0W10+IHtcclxuICAgIGNvbnN0IHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRTdGFuZGFyZFRleHRzKGxhbmd1YWdlQ29kZSk7XHJcbiAgICBpZiAocmVzdWx0LnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzdWx0LnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gdGhpcy5fYm9GYWN0b3J5Lm1ha2VCT0FycmF5RnJvbVJhd0JhY2tlbmREYXRhQXJyYXkoU3RhbmRhcmRUZXh0LCByZXN1bHQucmVzdWx0T2JqZWN0KSBhcyB1bmtub3duIGFzIFN0YW5kYXJkVGV4dFtdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3VsdCk7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRTYWxlc1BlcnNvbnMoZGF0ZT86IERhdGUpOiBQcm9taXNlPFNhbGVzUGVyc29uW10+IHtcclxuICAgIGNvbnN0IHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRTYWxlc1BlcnNvbnMoZGF0ZSk7XHJcbiAgICBpZiAocmVzdWx0LnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzdWx0LnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gdGhpcy5fYm9GYWN0b3J5Lm1ha2VCT0FycmF5RnJvbVJhd0JhY2tlbmREYXRhQXJyYXkoU2FsZXNQZXJzb24sIHJlc3VsdC5yZXN1bHRPYmplY3RzKSBhcyB1bmtub3duIGFzIFNhbGVzUGVyc29uW107XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzdWx0KTtcclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldFRhZ3MoY2F0ZWdvcnk6IG51bWJlcik6IFByb21pc2U8VGFnW10+IHtcclxuICAgIGNvbnN0IHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRUYWdzKGNhdGVnb3J5KTtcclxuICAgIGlmIChyZXN1bHQudmFsaWRhdGlvblJlc3VsdCAmJiByZXN1bHQudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9ib0ZhY3RvcnkubWFrZUJPQXJyYXlGcm9tUmF3QmFja2VuZERhdGFBcnJheShUYWcsIHJlc3VsdC5yZXN1bHRPYmplY3RzKSBhcyB1bmtub3duIGFzIFRhZ1tdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3VsdCk7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRPbkhvbGRDb2RlcygpOiBQcm9taXNlPE9uSG9sZENvZGVbXT4ge1xyXG4gICAgY29uc3QgcmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldE9uSG9sZENvZGVzKCk7XHJcbiAgICBpZiAocmVzdWx0LnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzdWx0LnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gdGhpcy5fYm9GYWN0b3J5Lm1ha2VCT0FycmF5RnJvbVJhd0JhY2tlbmREYXRhQXJyYXkoT25Ib2xkQ29kZSwgcmVzdWx0LnJlc3VsdE9iamVjdHMpIGFzIHVua25vd24gYXMgT25Ib2xkQ29kZVtdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3VsdCk7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRXYXJlaG91c2VzKGJyYW5jaE5yPzogc3RyaW5nKTogUHJvbWlzZTxXYXJlaG91c2VbXT4ge1xyXG4gICAgY29uc3QgcmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldFdhcmVob3VzZXMoYnJhbmNoTnIpO1xyXG4gICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2JvRmFjdG9yeS5tYWtlQk9BcnJheUZyb21SYXdCYWNrZW5kRGF0YUFycmF5KFdhcmVob3VzZSwgcmVzdWx0LnJlc3VsdE9iamVjdHMpIGFzIHVua25vd24gYXMgV2FyZWhvdXNlW107XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzdWx0KTtcclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldFdhcmVob3VzZVN0b2NrSW5mb0J5R29vZEFuZEJyYW5jaChnb29kSWQ6IG51bWJlciwgYnJhbmNoTnI6IHN0cmluZyk6IFByb21pc2U8V2FyZWhvdXNlU3RvY2tJbmZvW10+IHtcclxuICAgIGNvbnN0IHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRXYXJlaG91c2VTdG9ja0luZm9CeUdvb2RBbmRCcmFuY2goZ29vZElkLCBicmFuY2hOcik7XHJcbiAgICBpZiAocmVzdWx0LnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzdWx0LnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gdGhpcy5fYm9GYWN0b3J5Lm1ha2VCT0FycmF5RnJvbVJhd0JhY2tlbmREYXRhQXJyYXkoV2FyZWhvdXNlU3RvY2tJbmZvLCByZXN1bHQucmVzdWx0T2JqZWN0KSBhcyB1bmtub3duIGFzIFdhcmVob3VzZVN0b2NrSW5mb1tdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3VsdCk7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRIaXN0b3JpY1N0YXRlVmFsdWVzKCk6IFByb21pc2U8Q29kZURlc2NyaXB0aW9uW10+IHtcclxuICAgIGNvbnN0IHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRIaXN0b3JpY1N0YXRlVmFsdWVzKCk7XHJcbiAgICBpZiAocmVzdWx0LnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzdWx0LnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gdGhpcy5fYm9GYWN0b3J5Lm1ha2VCT0FycmF5RnJvbVJhd0JhY2tlbmREYXRhQXJyYXkoQ29kZURlc2NyaXB0aW9uLCByZXN1bHQucmVzdWx0T2JqZWN0cykgYXMgdW5rbm93biBhcyBDb2RlRGVzY3JpcHRpb25bXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXN1bHQpO1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0UGF5bWVudE1ldGhvZHNGb3JTYWxlc09yZGVyKGJyYW5jaE5yOiBzdHJpbmcpOiBQcm9taXNlPFBheW1lbnRNZXRob2RbXT4ge1xyXG4gICAgY29uc3QgcmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldFBheW1lbnRNZXRob2RzRm9yU2FsZXNPcmRlcihicmFuY2hOcik7XHJcbiAgICBpZiAocmVzdWx0LnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzdWx0LnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gdGhpcy5fYm9GYWN0b3J5Lm1ha2VCT0FycmF5RnJvbVJhd0JhY2tlbmREYXRhQXJyYXkoUGF5bWVudE1ldGhvZCwgcmVzdWx0LnJlc3VsdE9iamVjdCkgYXMgdW5rbm93biBhcyBQYXltZW50TWV0aG9kW107XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzdWx0KTtcclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldFBheW1lbnRNZXRob2RzRm9yQ2FzaFJlZ2lzdGVyKGJyYW5jaE5yOiBzdHJpbmcpOiBQcm9taXNlPFBheW1lbnRNZXRob2RbXT4ge1xyXG4gICAgY29uc3QgcmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldFBheW1lbnRNZXRob2RzRm9yQ2FzaFJlZ2lzdGVyKGJyYW5jaE5yKTtcclxuICAgIGlmIChyZXN1bHQudmFsaWRhdGlvblJlc3VsdCAmJiByZXN1bHQudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9ib0ZhY3RvcnkubWFrZUJPQXJyYXlGcm9tUmF3QmFja2VuZERhdGFBcnJheShQYXltZW50TWV0aG9kLCByZXN1bHQucmVzdWx0T2JqZWN0KSBhcyB1bmtub3duIGFzIFBheW1lbnRNZXRob2RbXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXN1bHQpO1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY29tbWl0KCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlOiBGdW5jdGlvbiwgcmVqZWN0OiBGdW5jdGlvbikgPT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuY29tbWl0KCkudGhlbigocmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXN1bHQpO1xyXG4gICAgICAgICAgcmVqZWN0KG51bGwpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByb2xsYmFjaygpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pID0+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLnJvbGxiYWNrKCkudGhlbigocmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXN1bHQpO1xyXG4gICAgICAgICAgcmVqZWN0KG51bGwpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjcmVhdGVUcmFuc2FjdGlvbihraW5kOiBUcmFuc2FjdGlvbktpbmQsIGJyYW5jaE5yOiBzdHJpbmcpOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKSA9PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5jcmVhdGVUcmFuc2FjdGlvbihraW5kLCBicmFuY2hOcikudGhlbigocmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXN1bHQudmFsaWRhdGlvblJlc3VsdCAmJiByZXN1bHQudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgICAgICByZXNvbHZlKHRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlLCByZXN1bHQucmVzdWx0T2JqZWN0KSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXN1bHQpO1xyXG4gICAgICAgICAgcmVqZWN0KG51bGwpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBjcmVhdGVTYWxlc09yZGVyKHJlcXVlc3Q6IENyZWF0ZVNhbGVzT3JkZXJSZXF1ZXN0KTogUHJvbWlzZTxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlOiBGdW5jdGlvbiwgcmVqZWN0OiBGdW5jdGlvbikgPT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuY3JlYXRlU2FsZXNPcmRlcihyZXF1ZXN0KS50aGVuKChyZXN1bHQ6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgICAgIHJlc29sdmUodGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UsIHJlc3VsdC5yZXN1bHRPYmplY3QpKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3VsdCk7XHJcbiAgICAgICAgICByZWplY3QobnVsbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGNyZWF0ZUNhc2hSZWdpc3Rlck9yZGVyKHJlcXVlc3Q6IENyZWF0ZUNhc2hSZWdpc3Rlck9yZGVyUmVxdWVzdCk6IFByb21pc2U8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pID0+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmNyZWF0ZUNhc2hSZWdpc3Rlck9yZGVyKHJlcXVlc3QpLnRoZW4oKHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEpID0+IHtcclxuICAgICAgICBpZiAocmVzdWx0LnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzdWx0LnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICAgICAgcmVzb2x2ZSh0aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShUcmFuc2FjdGlvbkluZm9SZXNwb25zZSwgcmVzdWx0LnJlc3VsdE9iamVjdCkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzdWx0KTtcclxuICAgICAgICAgIHJlamVjdChudWxsKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgY3JlYXRlUHVyY2hhc2VPcmRlcihyZXF1ZXN0OiBDcmVhdGVQdXJjaGFzZU9yZGVyUmVxdWVzdCk6IFByb21pc2U8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pID0+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmNyZWF0ZVB1cmNoYXNlT3JkZXIocmVxdWVzdCkudGhlbigocmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXN1bHQudmFsaWRhdGlvblJlc3VsdCAmJiByZXN1bHQudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgICAgICByZXNvbHZlKHRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlLCByZXN1bHQucmVzdWx0T2JqZWN0KSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXN1bHQpO1xyXG4gICAgICAgICAgcmVqZWN0KG51bGwpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBjcmVhdGVTZXJ2aWNlT3JkZXIocmVxdWVzdDogQ3JlYXRlU2VydmljZU9yZGVyUmVxdWVzdCk6IFByb21pc2U8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pID0+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmNyZWF0ZVNlcnZpY2VPcmRlcihyZXF1ZXN0KS50aGVuKChyZXN1bHQ6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgICAgIHJlc29sdmUodGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UsIHJlc3VsdC5yZXN1bHRPYmplY3QpKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3VsdCk7XHJcbiAgICAgICAgICByZWplY3QobnVsbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGNyZWF0ZVNhbGVzUXVvdGF0aW9uKHJlcXVlc3Q6IENyZWF0ZVNhbGVzUXVvdGF0aW9uUmVxdWVzdCk6IFByb21pc2U8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pID0+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmNyZWF0ZVNhbGVzUXVvdGF0aW9uKHJlcXVlc3QpLnRoZW4oKHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEpID0+IHtcclxuICAgICAgICBpZiAocmVzdWx0LnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzdWx0LnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICAgICAgcmVzb2x2ZSh0aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShUcmFuc2FjdGlvbkluZm9SZXNwb25zZSwgcmVzdWx0LnJlc3VsdE9iamVjdCkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzdWx0KTtcclxuICAgICAgICAgIHJlamVjdChudWxsKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgcHVibGljIHNhdmVUcmFuc2FjdGlvbih1dWlkOiBzdHJpbmcpOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKSA9PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5zYXZlVHJhbnNhY3Rpb24odXVpZCkudGhlbigocmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXN1bHQudmFsaWRhdGlvblJlc3VsdCAmJiByZXN1bHQudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgICAgICByZXNvbHZlKHRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlLCByZXN1bHQucmVzdWx0T2JqZWN0KSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXN1bHQpO1xyXG4gICAgICAgICAgcmVqZWN0KG51bGwpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBzZXRSZWxhdGlvbkJ5VXNlcih1dWlkOiBzdHJpbmcsIHVzZXJuYW1lOiBzdHJpbmcsIHBhc3N3b3JkOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pID0+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLnNldFJlbGF0aW9uQnlVc2VyKHV1aWQsIHVzZXJuYW1lLCBwYXNzd29yZCkudGhlbigocmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXN1bHQudmFsaWRhdGlvblJlc3VsdCAmJiByZXN1bHQudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgICAgICByZXNvbHZlKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzdWx0KTtcclxuICAgICAgICAgIHJlamVjdChmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHJlc29sdmVQZW5kaW5nSGVhZGVyUmVhc29uKHBlbmRpbmdIZWFkZXJWYWx1ZXM6IFJlc29sdmVIZWFkZXJQZW5kaW5nUmVhc29uUmVxdWVzdCk6IFByb21pc2U8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pID0+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLnJlc29sdmVQZW5kaW5nSGVhZGVyUmVhc29uKHBlbmRpbmdIZWFkZXJWYWx1ZXMpLnRoZW4oKHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEpID0+IHtcclxuICAgICAgICBpZiAocmVzdWx0LnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzdWx0LnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICAgICAgcmVzb2x2ZSh0aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShUcmFuc2FjdGlvbkluZm9SZXNwb25zZSwgcmVzdWx0LnJlc3VsdE9iamVjdCkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzdWx0KTtcclxuICAgICAgICAgIHJlamVjdChudWxsKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgcmVzb2x2ZVBlbmRpbmdMaW5lUmVhc29uKHBlbmRpbmdMaW5lVmFsdWVzOiBSZXNvbHZlTGluZVBlbmRpbmdSZWFzb25SZXF1ZXN0KTogUHJvbWlzZTxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlOiBGdW5jdGlvbiwgcmVqZWN0OiBGdW5jdGlvbikgPT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IucmVzb2x2ZVBlbmRpbmdMaW5lUmVhc29uKHBlbmRpbmdMaW5lVmFsdWVzKS50aGVuKChyZXN1bHQ6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgICAgIHJlc29sdmUodGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UsIHJlc3VsdC5yZXN1bHRPYmplY3QpKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3VsdCk7XHJcbiAgICAgICAgICByZWplY3QobnVsbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGFkZFdlYlNlc3Npb25UcmFuc2FjdGlvbkxpbmUoYXJ0aWNsZU51bWJlcjogc3RyaW5nLCBxdWFudGl0eTogbnVtYmVyKTogUHJvbWlzZTxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlOiBGdW5jdGlvbiwgcmVqZWN0OiBGdW5jdGlvbikgPT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuYWRkV2ViU2Vzc2lvblRyYW5zYWN0aW9uTGluZShhcnRpY2xlTnVtYmVyLCBxdWFudGl0eSkudGhlbigocmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXN1bHQudmFsaWRhdGlvblJlc3VsdCAmJiByZXN1bHQudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgICAgICByZXNvbHZlKHRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlLCByZXN1bHQucmVzdWx0T2JqZWN0KSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXN1bHQpO1xyXG4gICAgICAgICAgcmVqZWN0KG51bGwpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBhZGRUcmFuc2FjdGlvbkxpbmUodXVpZDogc3RyaW5nLCBhcnRpY2xlTm86IHN0cmluZywgcXVhbnRpdHk6IG51bWJlciwgYWJvdmVMaW5lTnI6IG51bWJlciwgYmVsb3dMaW5lTnI6IG51bWJlcik6IFByb21pc2U8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pID0+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmFkZFRyYW5zYWN0aW9uTGluZSh1dWlkLCBhcnRpY2xlTm8sIHF1YW50aXR5LCBhYm92ZUxpbmVOciwgYmVsb3dMaW5lTnIpLnRoZW4oKHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEpID0+IHtcclxuICAgICAgICBpZiAocmVzdWx0LnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzdWx0LnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICAgICAgcmVzb2x2ZSh0aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShUcmFuc2FjdGlvbkluZm9SZXNwb25zZSwgcmVzdWx0LnJlc3VsdE9iamVjdCkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzdWx0KTtcclxuICAgICAgICAgIHJlamVjdChudWxsKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgYWRkVGV4dExpbmVUb1RyYW5zYWN0aW9uKHV1aWQ6IHN0cmluZywgc2hvd09uRG9jdW1lbnRzOiBudW1iZXIsIHRleHQ6IHN0cmluZywgYW1vdW50OiBudW1iZXIsIGFydGljbGVCb3VuZDogYm9vbGVhbiwgcmVmQXJ0aWNsZUxpbmVOcjogbnVtYmVyLCBhYm92ZUxpbmVOcj86IG51bWJlciwgYmVsb3dMaW5lTnI/OiBudW1iZXIpOlxyXG4gICAgUHJvbWlzZTxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlOiBGdW5jdGlvbiwgcmVqZWN0OiBGdW5jdGlvbikgPT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuYWRkVGV4dExpbmVUb1RyYW5zYWN0aW9uKHV1aWQsIHNob3dPbkRvY3VtZW50cywgdGV4dCwgYW1vdW50LCBhcnRpY2xlQm91bmQsIHJlZkFydGljbGVMaW5lTnIsIGFib3ZlTGluZU5yLCBiZWxvd0xpbmVOcikudGhlbigocmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXN1bHQudmFsaWRhdGlvblJlc3VsdCAmJiByZXN1bHQudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgICAgICByZXNvbHZlKHRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlLCByZXN1bHQucmVzdWx0T2JqZWN0KSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXN1bHQpO1xyXG4gICAgICAgICAgcmVqZWN0KG51bGwpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVUZXh0TGluZSh1dWlkOiBzdHJpbmcsIGxpbmVVdWlkOiBzdHJpbmcsIHNob3dPbkRvY3VtZW50czogbnVtYmVyLCB0ZXh0OiBzdHJpbmcpOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKSA9PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci51cGRhdGVUZXh0TGluZSh1dWlkLCBsaW5lVXVpZCwgc2hvd09uRG9jdW1lbnRzLCB0ZXh0KS50aGVuKChyZXN1bHQ6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgICAgIHJlc29sdmUodGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UsIHJlc3VsdC5yZXN1bHRPYmplY3QpKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3VsdCk7XHJcbiAgICAgICAgICByZWplY3QobnVsbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGFkZFJlbGF0aW9uVG9UcmFuc2FjdGlvbih1dWlkOiBzdHJpbmcsIHJlbGF0aW9uSWQ6IG51bWJlcik6IFByb21pc2U8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pID0+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmFkZFJlbGF0aW9uVG9UcmFuc2FjdGlvbih1dWlkLCByZWxhdGlvbklkKS50aGVuKChyZXN1bHQ6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgICAgIHJlc29sdmUodGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UsIHJlc3VsdC5yZXN1bHRPYmplY3QpKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3VsdCk7XHJcbiAgICAgICAgICByZWplY3QobnVsbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGNoYW5nZUxpbmVTZXF1ZW5jZSh1dWlkOiBzdHJpbmcsIGxpbmVVdWlkOiBzdHJpbmcsIGFib3ZlTGluZU5yPzogbnVtYmVyLCBiZWxvd0xpbmVOcj86IG51bWJlcik6XHJcbiAgICBQcm9taXNlPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKSA9PiB7XHJcbiAgICAgIGNvbnN0IHJlcXVlc3Q6IENoYW5nZUxpbmVTZXF1ZW5jZVJlcXVlc3QgPSB7XHJcbiAgICAgICAgdHJhbnNhY3Rpb25VdWlkOiB1dWlkLFxyXG4gICAgICAgIGxpbmVVdWlkOiBsaW5lVXVpZCxcclxuICAgICAgICBhYm92ZUxpbmVOcjogYWJvdmVMaW5lTnIsXHJcbiAgICAgICAgYmVsb3dMaW5lTnI6IGJlbG93TGluZU5yXHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmNoYW5nZUxpbmVTZXF1ZW5jZShyZXF1ZXN0KS50aGVuKChyZXN1bHQ6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgICAgIHJlc29sdmUodGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UsIHJlc3VsdC5yZXN1bHRPYmplY3QpKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3VsdCk7XHJcbiAgICAgICAgICByZWplY3QobnVsbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGNhbmNlbEFkZFRyYW5zYWN0aW9uTGluZShsaW5lVXVpZDogc3RyaW5nKTogUHJvbWlzZTxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlOiBGdW5jdGlvbiwgcmVqZWN0OiBGdW5jdGlvbikgPT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuY2FuY2VsQWRkVHJhbnNhY3Rpb25MaW5lKGxpbmVVdWlkKS50aGVuKChyZXN1bHQ6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgICAgIHJlc29sdmUodGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UsIHJlc3VsdC5yZXN1bHRPYmplY3QpKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3VsdCk7XHJcbiAgICAgICAgICByZWplY3QobnVsbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBkZWxldGVUcmFuc2FjdGlvbkxpbmUodXVpZDogc3RyaW5nLCBsaW5lVXVpZDogc3RyaW5nKTogUHJvbWlzZTxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlOiBGdW5jdGlvbiwgcmVqZWN0OiBGdW5jdGlvbikgPT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuZGVsZXRlVHJhbnNhY3Rpb25MaW5lKHV1aWQsIGxpbmVVdWlkKS50aGVuKChyZXN1bHQ6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgICAgIHJlc29sdmUodGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UsIHJlc3VsdC5yZXN1bHRPYmplY3QpKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3VsdCk7XHJcbiAgICAgICAgICByZWplY3QobnVsbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcblxyXG4gIHB1YmxpYyBhc3luYyBjaGFuZ2VUcmFuc2FjdGlvbkxpbmVRdWFudGl0eSh1dWlkOiBzdHJpbmcsIGxpbmVVdWlkOiBzdHJpbmcsIG5ld1F1YW50aXR5OiBudW1iZXIpOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKSA9PiB7XHJcbiAgICAgIGNvbnN0IHJlcXVlc3QgPSB7XHJcbiAgICAgICAgdHJhbnNhY3Rpb25VdWlkOiB1dWlkLFxyXG4gICAgICAgIGxpbmVVdWlkOiBsaW5lVXVpZCxcclxuICAgICAgICBuZXdRdWFudGl0eTogbmV3UXVhbnRpdHlcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuY2hhbmdlVHJhbnNhY3Rpb25MaW5lUXVhbnRpdHkocmVxdWVzdCkudGhlbigocmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXN1bHQudmFsaWRhdGlvblJlc3VsdCAmJiByZXN1bHQudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgICAgICByZXNvbHZlKHRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlLCByZXN1bHQucmVzdWx0T2JqZWN0KSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXN1bHQpO1xyXG4gICAgICAgICAgcmVqZWN0KG51bGwpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBjaGFuZ2VUcmFuc2FjdGlvbkxpbmVDb21taXNzaW9uQ29kZSh1dWlkOiBzdHJpbmcsIGxpbmVVdWlkOiBzdHJpbmcsIGNvZGU6IHN0cmluZyk6IFByb21pc2U8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+IHtcclxuICAgIGNvbnN0IHJlcXVlc3QgPSB7XHJcbiAgICAgIHRyYW5zYWN0aW9uVXVpZDogdXVpZCxcclxuICAgICAgbGluZVV1aWQ6IGxpbmVVdWlkLFxyXG4gICAgICBuZXdDb21taXNzaW9uQ29kZTogY29kZVxyXG4gICAgfTtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZVRyYW5zYWN0aW9uTGluZUNvbW1pc3Npb25Db2RlKHJlcXVlc3QpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiA8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+PHVua25vd24+dGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UsIHJlc3BvbnNlLnJlc3VsdE9iamVjdCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBjaGFuZ2VUcmFuc2FjdGlvbkxpbmVTdXBwbGllcih1dWlkOiBzdHJpbmcsIGxpbmVVdWlkOiBzdHJpbmcsIGlkOiBudW1iZXIpOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPiB7XHJcbiAgICBjb25zdCByZXF1ZXN0ID0ge1xyXG4gICAgICB0cmFuc2FjdGlvblV1aWQ6IHV1aWQsXHJcbiAgICAgIGxpbmVVdWlkOiBsaW5lVXVpZCxcclxuICAgICAgbmV3U3VwcGxpZXJJZDogaWRcclxuICAgIH07XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VUcmFuc2FjdGlvbkxpbmVTdXBwbGllcihyZXF1ZXN0KTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPjx1bmtub3duPnRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlLCByZXNwb25zZS5yZXN1bHRPYmplY3QpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgY2hhbmdlVHJhbnNhY3Rpb25MaW5lV2FyZWhvdXNlKHV1aWQ6IHN0cmluZywgbGluZVV1aWQ6IHN0cmluZywgd2FyZWhvdXNlTnVtYmVyOiBudW1iZXIpOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPiB7XHJcbiAgICBjb25zdCByZXF1ZXN0ID0ge1xyXG4gICAgICB0cmFuc2FjdGlvblV1aWQ6IHV1aWQsXHJcbiAgICAgIGxpbmVVdWlkOiBsaW5lVXVpZCxcclxuICAgICAgbmV3V2FyZWhvdXNlTnI6IHdhcmVob3VzZU51bWJlclxyXG4gICAgfTtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZVRyYW5zYWN0aW9uTGluZVdhcmVob3VzZShyZXF1ZXN0KTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPjx1bmtub3duPnRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlLCByZXNwb25zZS5yZXN1bHRPYmplY3QpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgY2hhbmdlVHJhbnNhY3Rpb25MaW5lUHJpY2UodXVpZDogc3RyaW5nLCBsaW5lVXVpZDogc3RyaW5nLCBwcmljZTogbnVtYmVyKTogUHJvbWlzZTxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT4ge1xyXG4gICAgY29uc3QgcmVxdWVzdCA9IHtcclxuICAgICAgdHJhbnNhY3Rpb25VdWlkOiB1dWlkLFxyXG4gICAgICBsaW5lVXVpZDogbGluZVV1aWQsXHJcbiAgICAgIG5ld1ByaWNlOiBwcmljZVxyXG4gICAgfTtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZVRyYW5zYWN0aW9uTGluZVByaWNlKHJlcXVlc3QpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiA8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+PHVua25vd24+dGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UsIHJlc3BvbnNlLnJlc3VsdE9iamVjdCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBjaGFuZ2VUcmFuc2FjdGlvbkxpbmVQcmljZUxpc3QodXVpZDogc3RyaW5nLCBsaW5lVXVpZDogc3RyaW5nLCBwcmljZUxpc3Q6IHN0cmluZyk6IFByb21pc2U8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+IHtcclxuICAgIGNvbnN0IHJlcXVlc3QgPSB7XHJcbiAgICAgIHRyYW5zYWN0aW9uVXVpZDogdXVpZCxcclxuICAgICAgbGluZVV1aWQ6IGxpbmVVdWlkLFxyXG4gICAgICBuZXdQcmljZUxpc3RDb2RlOiBwcmljZUxpc3RcclxuICAgIH07XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VUcmFuc2FjdGlvbkxpbmVQcmljZUxpc3QocmVxdWVzdCk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIDxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT48dW5rbm93bj50aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShUcmFuc2FjdGlvbkluZm9SZXNwb25zZSwgcmVzcG9uc2UucmVzdWx0T2JqZWN0KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGNoYW5nZVRyYW5zYWN0aW9uTGluZVZhdCh1dWlkOiBzdHJpbmcsIGxpbmVVdWlkOiBzdHJpbmcsIGlkOiBudW1iZXIpOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPiB7XHJcbiAgICBjb25zdCByZXF1ZXN0ID0ge1xyXG4gICAgICB0cmFuc2FjdGlvblV1aWQ6IHV1aWQsXHJcbiAgICAgIGxpbmVVdWlkOiBsaW5lVXVpZCxcclxuICAgICAgbmV3VmF0SWQ6IGlkXHJcbiAgICB9O1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlVHJhbnNhY3Rpb25MaW5lVmF0KHJlcXVlc3QpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiA8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+PHVua25vd24+dGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UsIHJlc3BvbnNlLnJlc3VsdE9iamVjdCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBjaGFuZ2VUcmFuc2FjdGlvbkxpbmVMaW5lRGlzY291bnQodXVpZDogc3RyaW5nLCBsaW5lVXVpZDogc3RyaW5nLCB0eXBlOiBEaXNjb3VudFR5cGUsIGRpc2NvdW50OiBudW1iZXIsIHJlYXNvbjogc3RyaW5nLCBjb2RlOiBzdHJpbmcpOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPiB7XHJcbiAgICBjb25zdCByZXF1ZXN0ID0ge1xyXG4gICAgICB0cmFuc2FjdGlvblV1aWQ6IHV1aWQsXHJcbiAgICAgIGxpbmVVdWlkOiBsaW5lVXVpZCxcclxuICAgICAgZGlzY291bnRUeXBlOiB0eXBlLFxyXG4gICAgICBuZXdEaXNjb3VudDogZGlzY291bnQsXHJcbiAgICAgIG5ld0Rpc2NvdW50UmVhc29uOiByZWFzb24sXHJcbiAgICAgIG5ld0Rpc2NvdW50Q29kZTogY29kZVxyXG4gICAgfTtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZVRyYW5zYWN0aW9uTGluZURpc2NvdW50KHJlcXVlc3QpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiA8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+PHVua25vd24+dGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UsIHJlc3BvbnNlLnJlc3VsdE9iamVjdCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBjaGFuZ2VUcmFuc2FjdGlvbkxpbmVEcm9wU2hpcG1lbnQodXVpZDogc3RyaW5nLCBsaW5lVXVpZDogc3RyaW5nLCBuZXdEcm9wU2hpcG1lbnQ6IGJvb2xlYW4pOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPiB7XHJcbiAgICBjb25zdCByZXF1ZXN0ID0ge1xyXG4gICAgICB0cmFuc2FjdGlvblV1aWQ6IHV1aWQsXHJcbiAgICAgIGxpbmVVdWlkOiBsaW5lVXVpZCxcclxuICAgICAgbmV3RHJvcFNoaXBtZW50OiBuZXdEcm9wU2hpcG1lbnRcclxuICAgIH07XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VMaW5lRHJvcFNoaXBtZW50KHJlcXVlc3QpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiA8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+PHVua25vd24+dGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UsIHJlc3BvbnNlLnJlc3VsdE9iamVjdCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBjaGFuZ2VUcmFuc2FjdGlvbkxpbmVEZWxpdmVyeU1ldGhvZCh1dWlkOiBzdHJpbmcsIGxpbmVVdWlkOiBzdHJpbmcsIG1ldGhvZDogc3RyaW5nKTogUHJvbWlzZTxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT4ge1xyXG4gICAgY29uc3QgcmVxdWVzdCA9IHtcclxuICAgICAgdHJhbnNhY3Rpb25VdWlkOiB1dWlkLFxyXG4gICAgICBsaW5lVXVpZDogbGluZVV1aWQsXHJcbiAgICAgIG5ld0RlbGl2ZXJ5TWV0aG9kQ29kZTogbWV0aG9kXHJcbiAgICB9O1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlVHJhbnNhY3Rpb25MaW5lRGVsaXZlcnlNZXRob2QocmVxdWVzdCk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIDxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT48dW5rbm93bj50aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShUcmFuc2FjdGlvbkluZm9SZXNwb25zZSwgcmVzcG9uc2UucmVzdWx0T2JqZWN0KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGNoYW5nZVRyYW5zYWN0aW9uTGluZURlbGl2ZXJ5RGF0ZSh1dWlkOiBzdHJpbmcsIGxpbmVVdWlkOiBzdHJpbmcsIGRhdGU6IERhdGUpOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPiB7XHJcbiAgICBjb25zdCByZXF1ZXN0ID0ge1xyXG4gICAgICB0cmFuc2FjdGlvblV1aWQ6IHV1aWQsXHJcbiAgICAgIGxpbmVVdWlkOiBsaW5lVXVpZCxcclxuICAgICAgbmV3RGVsaXZlcnlEYXRlOiBkYXRlXHJcbiAgICB9O1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlVHJhbnNhY3Rpb25MaW5lRGVsaXZlcnlEYXRlKHJlcXVlc3QpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiA8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+PHVua25vd24+dGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UsIHJlc3BvbnNlLnJlc3VsdE9iamVjdCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBjaGFuZ2VUcmFuc2FjdGlvbkxpbmVBc3NlbWJseVRpbWUodXVpZDogc3RyaW5nLCBsaW5lVXVpZDogc3RyaW5nLCB0aW1lOiBudW1iZXIpOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPiB7XHJcbiAgICBjb25zdCByZXF1ZXN0ID0ge1xyXG4gICAgICB0cmFuc2FjdGlvblV1aWQ6IHV1aWQsXHJcbiAgICAgIGxpbmVVdWlkOiBsaW5lVXVpZCxcclxuICAgICAgbmV3QXNzZW1ibHlUaW1lOiB0aW1lXHJcbiAgICB9O1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlVHJhbnNhY3Rpb25MaW5lQXNzZW1ibHlUaW1lKHJlcXVlc3QpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiA8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+PHVua25vd24+dGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UsIHJlc3BvbnNlLnJlc3VsdE9iamVjdCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBjaGFuZ2VUcmFuc2FjdGlvbkxpbmVFZGl0VGltZSh1dWlkOiBzdHJpbmcsIGxpbmVVdWlkOiBzdHJpbmcsIHRpbWU6IG51bWJlcik6IFByb21pc2U8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+IHtcclxuICAgIGNvbnN0IHJlcXVlc3QgPSB7XHJcbiAgICAgIHRyYW5zYWN0aW9uVXVpZDogdXVpZCxcclxuICAgICAgbGluZVV1aWQ6IGxpbmVVdWlkLFxyXG4gICAgICBuZXdFZGl0VGltZTogdGltZVxyXG4gICAgfTtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZVRyYW5zYWN0aW9uTGluZUVkaXRUaW1lKHJlcXVlc3QpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiA8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+PHVua25vd24+dGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UsIHJlc3BvbnNlLnJlc3VsdE9iamVjdCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBjaGFuZ2VUcmFuc2FjdGlvbkxpbmVTdXBwbGllckFydGljbGVOdW1iZXIodXVpZDogc3RyaW5nLCBsaW5lVXVpZDogc3RyaW5nLCBhcnRpY2xlTnVtYmVyOiBzdHJpbmcpOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPiB7XHJcbiAgICBjb25zdCByZXF1ZXN0ID0ge1xyXG4gICAgICB0cmFuc2FjdGlvblV1aWQ6IHV1aWQsXHJcbiAgICAgIGxpbmVVdWlkOiBsaW5lVXVpZCxcclxuICAgICAgbmV3U3VwcGxpZXJBcnRpY2xlTnVtYmVyOiBhcnRpY2xlTnVtYmVyXHJcbiAgICB9O1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlVHJhbnNhY3Rpb25MaW5lU3VwcGxpZXJBcnRpY2xlTnVtYmVyKHJlcXVlc3QpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiA8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+PHVua25vd24+dGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UsIHJlc3BvbnNlLnJlc3VsdE9iamVjdCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBjaGFuZ2VUcmFuc2FjdGlvbkxpbmVSZWZlcmVuY2UodXVpZDogc3RyaW5nLCBsaW5lVXVpZDogc3RyaW5nLCByZWZlcmVuY2U6IHN0cmluZyk6IFByb21pc2U8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+IHtcclxuICAgIGNvbnN0IHJlcXVlc3QgPSB7XHJcbiAgICAgIHRyYW5zYWN0aW9uVXVpZDogdXVpZCxcclxuICAgICAgbGluZVV1aWQ6IGxpbmVVdWlkLFxyXG4gICAgICBuZXdSZWZlcmVuY2U6IHJlZmVyZW5jZVxyXG4gICAgfTtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZVRyYW5zYWN0aW9uTGluZVJlZmVyZW5jZShyZXF1ZXN0KTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPjx1bmtub3duPnRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlLCByZXNwb25zZS5yZXN1bHRPYmplY3QpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgY2hhbmdlVHJhbnNhY3Rpb25MaW5lR29vZERlc2NyaXB0aW9uKHV1aWQ6IHN0cmluZywgbGluZVV1aWQ6IHN0cmluZywgZ29vZERlc2NyaXB0aW9uOiBzdHJpbmcpOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPiB7XHJcbiAgICBjb25zdCByZXF1ZXN0ID0ge1xyXG4gICAgICB0cmFuc2FjdGlvblV1aWQ6IHV1aWQsXHJcbiAgICAgIGxpbmVVdWlkOiBsaW5lVXVpZCxcclxuICAgICAgbmV3R29vZERlc2NyaXB0aW9uOiBnb29kRGVzY3JpcHRpb25cclxuICAgIH07XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VUcmFuc2FjdGlvbkxpbmVHb29kRGVzY3JpcHRpb24ocmVxdWVzdCk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIDxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT48dW5rbm93bj50aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShUcmFuc2FjdGlvbkluZm9SZXNwb25zZSwgcmVzcG9uc2UucmVzdWx0T2JqZWN0KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGNoYW5nZUhlYWRlclRyYW5zYWN0aW9uRGVmaW5pdGl2ZSh1dWlkOiBzdHJpbmcsIGRlZmluaXRpdmU6IGJvb2xlYW4pOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPiB7XHJcbiAgICBjb25zdCByZXF1ZXN0ID0ge1xyXG4gICAgICB0cmFuc2FjdGlvblV1aWQ6IHV1aWQsXHJcbiAgICAgIG5ld1RyYW5zYWN0aW9uRGVmaW5pdGl2ZTogZGVmaW5pdGl2ZVxyXG4gICAgfTtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZUhlYWRlclRyYW5zYWN0aW9uRGVmaW5pdGl2ZShyZXF1ZXN0KTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPjx1bmtub3duPnRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlLCByZXNwb25zZS5yZXN1bHRPYmplY3QpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgY2hhbmdlSGVhZGVyRGVsaXZlcnlBZGRyZXNzKHV1aWQ6IHN0cmluZywgbmV3TmF3TnI6IG51bWJlcik6IFByb21pc2U8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+IHtcclxuICAgIGNvbnN0IHJlcXVlc3QgPSB7XHJcbiAgICAgIHRyYW5zYWN0aW9uVXVpZDogdXVpZCxcclxuICAgICAgbmV3VHJhbnNhY3Rpb25BZGRyZXNzTmF3TnI6IG5ld05hd05yXHJcbiAgICB9O1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlSGVhZGVyVHJhbnNhY3Rpb25BZGRyZXNzKHJlcXVlc3QpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiA8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+PHVua25vd24+dGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UsIHJlc3BvbnNlLnJlc3VsdE9iamVjdCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBjaGFuZ2VIZWFkZXJJbnZvaWNlQWRkcmVzcyh1dWlkOiBzdHJpbmcsIG5ld05hd05yOiBudW1iZXIpOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPiB7XHJcbiAgICBjb25zdCByZXF1ZXN0ID0ge1xyXG4gICAgICB0cmFuc2FjdGlvblV1aWQ6IHV1aWQsXHJcbiAgICAgIG5ld0ludm9pY2VBZGRyZXNzTmF3TnI6IG5ld05hd05yXHJcbiAgICB9O1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlSGVhZGVySW52b2ljZUFkZHJlc3MocmVxdWVzdCk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIDxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT48dW5rbm93bj50aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShUcmFuc2FjdGlvbkluZm9SZXNwb25zZSwgcmVzcG9uc2UucmVzdWx0T2JqZWN0KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGNoYW5nZUhlYWRlclRyYW5zYWN0aW9uRGVsaXZlcnlEYXRlKHV1aWQ6IHN0cmluZywgZGF0ZTogRGF0ZSk6IFByb21pc2U8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+IHtcclxuICAgIGNvbnN0IHJlcXVlc3QgPSB7XHJcbiAgICAgIHRyYW5zYWN0aW9uVXVpZDogdXVpZCxcclxuICAgICAgbmV3RGVsaXZlcnlEYXRlOiBkYXRlXHJcbiAgICB9O1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlSGVhZGVyRGVsaXZlcnlEYXRlKHJlcXVlc3QpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiA8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+PHVua25vd24+dGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UsIHJlc3BvbnNlLnJlc3VsdE9iamVjdCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBjaGFuZ2VIZWFkZXJUcmFuc2FjdGlvbkRlbGl2ZXJ5RGF0ZURlZmluaXRpdmUodXVpZDogc3RyaW5nLCBkZWZpbml0aXZlOiBib29sZWFuKTogUHJvbWlzZTxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT4ge1xyXG4gICAgY29uc3QgcmVxdWVzdCA9IHtcclxuICAgICAgdHJhbnNhY3Rpb25VdWlkOiB1dWlkLFxyXG4gICAgICBuZXdEZWxpdmVyeURhdGVEZWZpbml0aXZlOiBkZWZpbml0aXZlXHJcbiAgICB9O1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlSGVhZGVyRGVsaXZlcnlEYXRlRGVmaW5pdGl2ZShyZXF1ZXN0KTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPjx1bmtub3duPnRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlLCByZXNwb25zZS5yZXN1bHRPYmplY3QpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgY2hhbmdlSGVhZGVyVHJhbnNhY3Rpb25SZW1hcmsodXVpZDogc3RyaW5nLCByZW1hcms6IHN0cmluZyk6IFByb21pc2U8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+IHtcclxuICAgIGNvbnN0IHJlcXVlc3QgPSB7XHJcbiAgICAgIHRyYW5zYWN0aW9uVXVpZDogdXVpZCxcclxuICAgICAgbmV3UmVtYXJrczogcmVtYXJrXHJcbiAgICB9O1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlSGVhZGVyUmVtYXJrcyhyZXF1ZXN0KTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPjx1bmtub3duPnRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlLCByZXNwb25zZS5yZXN1bHRPYmplY3QpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgY2hhbmdlSGVhZGVyVHJhbnNhY3Rpb25SZWZlcmVuY2UodXVpZDogc3RyaW5nLCByZWZlcmVuY2U6IHN0cmluZyk6IFByb21pc2U8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+IHtcclxuICAgIGNvbnN0IHJlcXVlc3QgPSB7XHJcbiAgICAgIHRyYW5zYWN0aW9uVXVpZDogdXVpZCxcclxuICAgICAgbmV3T3duUmVmZXJlbmNlOiByZWZlcmVuY2VcclxuICAgIH07XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VIZWFkZXJPd25SZWZlcmVuY2UocmVxdWVzdCk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIDxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT48dW5rbm93bj50aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShUcmFuc2FjdGlvbkluZm9SZXNwb25zZSwgcmVzcG9uc2UucmVzdWx0T2JqZWN0KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGNoYW5nZUhlYWRlclRyYW5zYWN0aW9uUmVsYXRpb25SZWZlcmVuY2UodXVpZDogc3RyaW5nLCByZWZlcmVuY2U6IHN0cmluZyk6IFByb21pc2U8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+IHtcclxuICAgIGNvbnN0IHJlcXVlc3QgPSB7XHJcbiAgICAgIHRyYW5zYWN0aW9uVXVpZDogdXVpZCxcclxuICAgICAgbmV3UmVsYXRpb25SZWZlcmVuY2U6IHJlZmVyZW5jZVxyXG4gICAgfTtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZUhlYWRlclJlbGF0aW9uUmVmZXJlbmNlKHJlcXVlc3QpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiA8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+PHVua25vd24+dGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UsIHJlc3BvbnNlLnJlc3VsdE9iamVjdCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBjaGFuZ2VIZWFkZXJEZXBvc2l0UGVyY2VudGFnZSh1dWlkOiBzdHJpbmcsIGFtb3VudDogbnVtYmVyKTogUHJvbWlzZTxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT4ge1xyXG4gICAgY29uc3QgcmVxdWVzdCA9IHtcclxuICAgICAgdHJhbnNhY3Rpb25VdWlkOiB1dWlkLFxyXG4gICAgICBuZXdEZXBvc2l0UGVyY2VudGFnZTogYW1vdW50XHJcbiAgICB9O1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlSGVhZGVyRGVwb3NpdFBlcmNlbnRhZ2UocmVxdWVzdCk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIDxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT48dW5rbm93bj50aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShUcmFuc2FjdGlvbkluZm9SZXNwb25zZSwgcmVzcG9uc2UucmVzdWx0T2JqZWN0KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGNoYW5nZUhlYWRlckRlcG9zaXRBbW91bnQodXVpZDogc3RyaW5nLCBhbW91bnQ6IG51bWJlcik6IFByb21pc2U8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+IHtcclxuICAgIGNvbnN0IHJlcXVlc3QgPSB7XHJcbiAgICAgIHRyYW5zYWN0aW9uVXVpZDogdXVpZCxcclxuICAgICAgbmV3RGVwb3NpdEFtb3VudDogYW1vdW50XHJcbiAgICB9O1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlSGVhZGVyRGVwb3NpdEFtb3VudChyZXF1ZXN0KTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPjx1bmtub3duPnRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlLCByZXNwb25zZS5yZXN1bHRPYmplY3QpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgY2hhbmdlSGVhZGVyVHJhbnNhY3Rpb25QcmVmZXJyZWREZWxpdmVyeURhdGUodXVpZDogc3RyaW5nLCBkYXRlOiBEYXRlKTogUHJvbWlzZTxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT4ge1xyXG4gICAgY29uc3QgcmVxdWVzdCA9IHtcclxuICAgICAgdHJhbnNhY3Rpb25VdWlkOiB1dWlkLFxyXG4gICAgICBuZXdQcmVmZXJyZWREZWxpdmVyeURhdGU6IGRhdGUsXHJcbiAgICAgIG5ld1ByZWZlcnJlZERlbGl2ZXJ5RGF0ZU9wdGlvbjogXCJcIlxyXG4gICAgfTtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZUhlYWRlclByZWZlcnJlZERlbGl2ZXJ5RGF0ZShyZXF1ZXN0KTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPjx1bmtub3duPnRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlLCByZXNwb25zZS5yZXN1bHRPYmplY3QpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgY2hhbmdlSGVhZGVyVHJhbnNhY3Rpb25EZWxpdmVyeU1ldGhvZCh1dWlkOiBzdHJpbmcsIG1ldGhvZDogc3RyaW5nKTogUHJvbWlzZTxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT4ge1xyXG4gICAgY29uc3QgcmVxdWVzdCA9IHtcclxuICAgICAgdHJhbnNhY3Rpb25VdWlkOiB1dWlkLFxyXG4gICAgICBuZXdEZWxpdmVyeU1ldGhvZENvZGU6IG1ldGhvZFxyXG4gICAgfTtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZUhlYWRlckRlbGl2ZXJ5TWV0aG9kKHJlcXVlc3QpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiA8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+PHVua25vd24+dGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UsIHJlc3BvbnNlLnJlc3VsdE9iamVjdCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBjaGFuZ2VIZWFkZXJUcmFuc2FjdGlvbkRlbGl2ZXJ5T3B0aW9ucyh1dWlkOiBzdHJpbmcsIG9wdGlvbnM6IHN0cmluZ1tdKTogUHJvbWlzZTxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT4ge1xyXG4gICAgY29uc3QgcmVxdWVzdCA9IHtcclxuICAgICAgdHJhbnNhY3Rpb25VdWlkOiB1dWlkLFxyXG4gICAgICBuZXdEZWxpdmVyeU9wdGlvbnM6IG9wdGlvbnNcclxuICAgIH07XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VIZWFkZXJEZWxpdmVyeU9wdGlvbnMocmVxdWVzdCk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIDxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT48dW5rbm93bj50aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShUcmFuc2FjdGlvbkluZm9SZXNwb25zZSwgcmVzcG9uc2UucmVzdWx0T2JqZWN0KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGNoYW5nZUhlYWRlclRyYW5zYWN0aW9uUGFydGlhbERlbGl2ZXJ5KHV1aWQ6IHN0cmluZywgYWxsb3dQYXJ0aWFsOiBib29sZWFuKTogUHJvbWlzZTxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT4ge1xyXG4gICAgY29uc3QgcmVxdWVzdCA9IHtcclxuICAgICAgdHJhbnNhY3Rpb25VdWlkOiB1dWlkLFxyXG4gICAgICBuZXdQYXJ0aWFsRGVsaXZlcnlBbGxvd2VkOiBhbGxvd1BhcnRpYWxcclxuICAgIH07XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VIZWFkZXJQYXJ0aWFsRGVsaXZlcnlBbGxvd2VkKHJlcXVlc3QpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiA8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+PHVua25vd24+dGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UsIHJlc3BvbnNlLnJlc3VsdE9iamVjdCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBjaGFuZ2VIZWFkZXJUcmFuc2FjdGlvbkJyYW5jaCh1dWlkOiBzdHJpbmcsIGJyYW5jaDogbnVtYmVyKTogUHJvbWlzZTxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT4ge1xyXG4gICAgY29uc3QgcmVxdWVzdCA9IHtcclxuICAgICAgdHJhbnNhY3Rpb25VdWlkOiB1dWlkLFxyXG4gICAgICBuZXdCcmFuY2hJZDogYnJhbmNoXHJcbiAgICB9O1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlSGVhZGVyQnJhbmNoKHJlcXVlc3QpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiA8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+PHVua25vd24+dGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UsIHJlc3BvbnNlLnJlc3VsdE9iamVjdCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcbiAgcHVibGljIGFzeW5jIGNoYW5nZUhlYWRlclRyYW5zYWN0aW9uT25Ib2xkQ29kZXModXVpZDogc3RyaW5nLCBjb2Rlczogc3RyaW5nW10pOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPiB7XHJcbiAgICBjb25zdCByZXF1ZXN0ID0ge1xyXG4gICAgICB0cmFuc2FjdGlvblV1aWQ6IHV1aWQsXHJcbiAgICAgIG5ld09uSG9sZENvZGVzOiBjb2Rlc1xyXG4gICAgfTtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZUhlYWRlck9uSG9sZENvZGVzKHJlcXVlc3QpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiA8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+PHVua25vd24+dGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UsIHJlc3BvbnNlLnJlc3VsdE9iamVjdCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBjaGFuZ2VIZWFkZXJUcmFuc2FjdGlvbkRpdmlkZUV2ZW5seSh1dWlkOiBzdHJpbmcsIGRpdmlkZUV2ZW5seTogYm9vbGVhbik6IFByb21pc2U8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+IHtcclxuICAgIGNvbnN0IHJlcXVlc3QgPSB7XHJcbiAgICAgIHRyYW5zYWN0aW9uVXVpZDogdXVpZCxcclxuICAgICAgbmV3RGl2aWRlRXZlbmx5OiBkaXZpZGVFdmVubHlcclxuICAgIH07XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VIZWFkZXJTZXREaXZpZGVFdmVubHkocmVxdWVzdCk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIDxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT48dW5rbm93bj50aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShUcmFuc2FjdGlvbkluZm9SZXNwb25zZSwgcmVzcG9uc2UucmVzdWx0T2JqZWN0KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIHB1YmxpYyBhc3luYyBjaGFuZ2VIZWFkZXJUcmFuc2FjdGlvbkFtb3VudFRvU2V0dGxlKHV1aWQ6IHN0cmluZywgYW1vdW50VG9TZXR0bGU6IG51bWJlcik6IFByb21pc2U8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+IHtcclxuICAgIGNvbnN0IHJlcXVlc3QgPSB7XHJcbiAgICAgIHRyYW5zYWN0aW9uVXVpZDogdXVpZCxcclxuICAgICAgbmV3QW1vdW50VG9TZXR0bGU6IGFtb3VudFRvU2V0dGxlXHJcbiAgICB9O1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlSGVhZGVyU2V0QW1vdW50VG9TZXR0bGUocmVxdWVzdCk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIDxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT48dW5rbm93bj50aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShUcmFuc2FjdGlvbkluZm9SZXNwb25zZSwgcmVzcG9uc2UucmVzdWx0T2JqZWN0KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGNoYW5nZUhlYWRlclRyYW5zYWN0aW9uUHJpY2VLaW5kKHV1aWQ6IHN0cmluZywgcHJpY2VLaW5kOiBzdHJpbmcpOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPiB7XHJcbiAgICBjb25zdCByZXF1ZXN0ID0ge1xyXG4gICAgICB0cmFuc2FjdGlvblV1aWQ6IHV1aWQsXHJcbiAgICAgIG5ld1ByaWNlS2luZDogcHJpY2VLaW5kXHJcbiAgICB9O1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlSGVhZGVyUHJpY2VLaW5kKHJlcXVlc3QpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiA8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+PHVua25vd24+dGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UsIHJlc3BvbnNlLnJlc3VsdE9iamVjdCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBjaGFuZ2VIZWFkZXJUcmFuc2FjdGlvbkFkbUNvb3JkaW5hdG9yKHV1aWQ6IHN0cmluZywgcmVsYXRpb246IG51bWJlcik6IFByb21pc2U8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+IHtcclxuICAgIGNvbnN0IHJlcXVlc3QgPSB7XHJcbiAgICAgIHRyYW5zYWN0aW9uVXVpZDogdXVpZCxcclxuICAgICAgbmV3QWRtQ29vcmRpbmF0b3I6IHJlbGF0aW9uXHJcbiAgICB9O1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlSGVhZGVyQWRtQ29vcmRpbmF0b3IocmVxdWVzdCk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIDxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT48dW5rbm93bj50aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShUcmFuc2FjdGlvbkluZm9SZXNwb25zZSwgcmVzcG9uc2UucmVzdWx0T2JqZWN0KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGNoYW5nZUhlYWRlclRyYW5zYWN0aW9uTWFya2V0aW5nKHV1aWQ6IHN0cmluZywgY29kZTogc3RyaW5nKTogUHJvbWlzZTxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT4ge1xyXG4gICAgY29uc3QgcmVxdWVzdCA9IHtcclxuICAgICAgdHJhbnNhY3Rpb25VdWlkOiB1dWlkLFxyXG4gICAgICBuZXdNYXJrZXRpbmdDb2RlOiBjb2RlXHJcbiAgICB9O1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlSGVhZGVyTWFya2V0aW5nQ29kZShyZXF1ZXN0KTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPjx1bmtub3duPnRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlLCByZXNwb25zZS5yZXN1bHRPYmplY3QpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgY2hhbmdlSGVhZGVyVHJhbnNhY3Rpb25EaXNjb3VudCh1dWlkOiBzdHJpbmcsIHR5cGU6IERpc2NvdW50VHlwZSwgYW1vdW50OiBudW1iZXIpOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPiB7XHJcbiAgICBjb25zdCByZXF1ZXN0ID0ge1xyXG4gICAgICB0cmFuc2FjdGlvblV1aWQ6IHV1aWQsXHJcbiAgICAgIG9yZGVyRGlzY291bnRUeXBlOiB0eXBlLFxyXG4gICAgICBkaXNjb3VudFZhbHVlOiBhbW91bnRcclxuICAgIH07XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5zZXRUcmFuc2FjdGlvbkRpc2NvdW50cyhyZXF1ZXN0KTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPjx1bmtub3duPnRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlLCByZXNwb25zZS5yZXN1bHRPYmplY3QpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgY2hhbmdlSGVhZGVyVHJhbnNhY3Rpb25EZXBvc2l0QW1vdW50KHV1aWQ6IHN0cmluZywgYW1vdW50OiBudW1iZXIpOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPiB7XHJcbiAgICBjb25zdCByZXF1ZXN0ID0ge1xyXG4gICAgICB0cmFuc2FjdGlvblV1aWQ6IHV1aWQsXHJcbiAgICAgIG5ld0RlcG9zaXRBbW91bnQ6IGFtb3VudFxyXG4gICAgfTtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZUhlYWRlckRlcG9zaXRBbW91bnQocmVxdWVzdCk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIDxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT48dW5rbm93bj50aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShUcmFuc2FjdGlvbkluZm9SZXNwb25zZSwgcmVzcG9uc2UucmVzdWx0T2JqZWN0KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGNoYW5nZVRyYW5zYWN0aW9uTGluZUNvbGxlY3Rpb25Db2RlKHV1aWQ6IHN0cmluZywgbGluZVV1aWQ6IHN0cmluZywgY29kZTogc3RyaW5nKTogUHJvbWlzZTxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT4ge1xyXG4gICAgY29uc3QgcmVxdWVzdCA9IHtcclxuICAgICAgdHJhbnNhY3Rpb25VdWlkOiB1dWlkLFxyXG4gICAgICBsaW5lVXVpZDogbGluZVV1aWQsXHJcbiAgICAgIG5ld0NvbGxlY3Rpb25Db2RlOiBjb2RlXHJcbiAgICB9O1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlVHJhbnNhY3Rpb25MaW5lQ29sbGVjdGlvbkNvZGUocmVxdWVzdCk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIDxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT48dW5rbm93bj50aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShUcmFuc2FjdGlvbkluZm9SZXNwb25zZSwgcmVzcG9uc2UucmVzdWx0T2JqZWN0KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHJlZ2lzdGVyU2FsZXNPcmRlclBheW1lbnQoXHJcbiAgICB1dWlkOiBzdHJpbmcsIGFtb3VudDogbnVtYmVyLCBjdXJyZW5jeUlkOiBudW1iZXIsIHBheW1lbnRNZXRob2Q6IHN0cmluZywgY2FzaFJlZ2lzdGVyR3JvdXBJZDogbnVtYmVyXHJcbiAgKTogUHJvbWlzZTxEYXRhU2VydmljZVJlc3BvbnNlRGF0YT4ge1xyXG4gICAgY29uc3QgcmVxdWVzdCA9IHtcclxuICAgICAgdHJhbnNVVUlEOiB1dWlkLFxyXG4gICAgICBhbW91bnQ6IGFtb3VudCxcclxuICAgICAgY3VycmVuY3lJZDogY3VycmVuY3lJZCxcclxuICAgICAgcGF5bWVudE1ldGhvZENvZGU6IHBheW1lbnRNZXRob2QsXHJcbiAgICAgIGNhc2hSZWdpc3Rlckdyb3VwSWQ6IGNhc2hSZWdpc3Rlckdyb3VwSWRcclxuICAgIH07XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5yZWdpc3RlclNhbGVzT3JkZXJQYXltZW50KHJlcXVlc3QpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGNyZWF0ZUlvbmVQYXltZW50TGlua0FuZFFSQ29kZSh1dWlkOiBzdHJpbmcsIGFtb3VudDogbnVtYmVyLCBwYXltZW50TWV0aG9kQ29kZTogc3RyaW5nKTogUHJvbWlzZTxDcmVhdGVQYXltZW50TGlua1Jlc3VsdD4ge1xyXG4gICAgY29uc3QgcmVxdWVzdCA9IHtcclxuICAgICAgdHJhbnNVVUlEOiB1dWlkLFxyXG4gICAgICBhbW91bnQ6IGFtb3VudCxcclxuICAgICAgcGF5bWVudE1ldGhvZENvZGU6IHBheW1lbnRNZXRob2RDb2RlXHJcbiAgICB9O1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY3JlYXRlSW9uZVBheW1lbnRMaW5rQW5kUVJDb2RlKHJlcXVlc3QpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShDcmVhdGVQYXltZW50TGlua1Jlc3VsdCwgcmVzcG9uc2UucmVzdWx0T2JqZWN0KSBhcyB1bmtub3duIGFzIENyZWF0ZVBheW1lbnRMaW5rUmVzdWx0O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZG9QaW5QYXltZW50KHRyYW5zSWQ6IG51bWJlciwgcGF5bWVudE1ldGhvZENvZGU6IHN0cmluZywgY2FzaFJlZ2lzdGVyTnI6IG51bWJlciwgY2FzaFJlZ2lzdGVyR3JvdXBJZDogbnVtYmVyLCBhbW91bnQ6IG51bWJlcik6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5kb1BpblBheW1lbnQodHJhbnNJZCwgcGF5bWVudE1ldGhvZENvZGUsIGNhc2hSZWdpc3Rlck5yLCBjYXNoUmVnaXN0ZXJHcm91cElkLCBhbW91bnQpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiByZXNwb25zZS5yZXN1bHRPYmplY3Q7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBkb1BheW1lbnQoZG9QYXltZW50UmVxdWVzdDogRG9QYXltZW50UmVxdWVzdCk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5kb1BheW1lbnQoZG9QYXltZW50UmVxdWVzdCk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIHJlc3BvbnNlLnJlc3VsdE9iamVjdDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldFBheW1lbnRMaW5rU3RhdHVzKHBheW1lbnRMaW5rVVVJRDogc3RyaW5nKTogUHJvbWlzZTxQYXltZW50TGlua1N0YXR1cz4ge1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0UGF5bWVudExpbmtTdGF0dXMocGF5bWVudExpbmtVVUlEKTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gdGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoUGF5bWVudExpbmtTdGF0dXMsIHJlc3BvbnNlLnJlc3VsdE9iamVjdCkgYXMgdW5rbm93biBhcyBQYXltZW50TGlua1N0YXR1cztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldFBzcFRyYW5zYWN0aW9uU3RhdHVzKHBzcFRyYW5zYWN0aW9uVXVpZDogc3RyaW5nKTogUHJvbWlzZTxQc3BUcmFuc2FjdGlvblN0YXR1cz4ge1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0UHNwVHJhbnNhY3Rpb25TdGF0dXMocHNwVHJhbnNhY3Rpb25VdWlkKTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gdGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoUHNwVHJhbnNhY3Rpb25TdGF0dXMsIHJlc3BvbnNlLnJlc3VsdE9iamVjdCkgYXMgdW5rbm93biBhcyBQc3BUcmFuc2FjdGlvblN0YXR1cztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldERlcG9zaXRQYXltZW50SW5mbyh1dWlkOiBzdHJpbmcpOiBQcm9taXNlPFRyYW5zYWN0aW9uRGVwb3NpdFBheW1lbnRJbmZvPiB7XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXREZXBvc2l0UGF5bWVudEluZm8odXVpZCk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKFRyYW5zYWN0aW9uRGVwb3NpdFBheW1lbnRJbmZvLCByZXNwb25zZS5yZXN1bHRPYmplY3QpIGFzIHVua25vd24gYXMgVHJhbnNhY3Rpb25EZXBvc2l0UGF5bWVudEluZm87XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBjYWxjdWxhdGVBbW91bnRUb1BheShjYWxjdWxhdGVBbW91bnRUb1BheVJlcXVlc3Q6IENhbGN1bGF0ZUFtb3VudFRvUGF5UmVxdWVzdCk6IFByb21pc2U8QW1vdW50VG9QYXk+IHtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNhbGN1bGF0ZUFtb3VudFRvUGF5KGNhbGN1bGF0ZUFtb3VudFRvUGF5UmVxdWVzdCk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKEFtb3VudFRvUGF5LCByZXNwb25zZS5yZXN1bHRPYmplY3QpIGFzIHVua25vd24gYXMgQW1vdW50VG9QYXk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRHb29kc1JlY2VpcHRIaXN0b3J5KHRyYW5zSWQ6IG51bWJlciwgbGluZU5yOiBudW1iZXIpOiBQcm9taXNlPEdvb2RzUmVjZWlwdEhpc3Rvcnk+IHtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldEdvb2RzUmVjZWlwdEhpc3RvcnkodHJhbnNJZCwgbGluZU5yKTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gPEdvb2RzUmVjZWlwdEhpc3Rvcnk+PHVua25vd24+dGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoR29vZHNSZWNlaXB0SGlzdG9yeSwgcmVzcG9uc2UucmVzdWx0T2JqZWN0KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHJlY2VpdmVHb29kc0ZvclB1cmNoYXNlT3JkZXIocmVxdWVzdDogUmVjZWl2ZUdvb2RzRm9yUHVyY2hhc2VPcmRlclJlcXVlc3QpOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPiB7XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5yZWNlaXZlR29vZHNGb3JQdXJjaGFzZU9yZGVyKHJlcXVlc3QpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiA8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+PHVua25vd24+dGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UsIHJlc3BvbnNlLnJlc3VsdE9iamVjdCk7XHJcblxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgcmVjZWl2ZUdvb2RzRm9yUHVyY2hhc2VPcmRlckNvcnJlY3Rpb24ocmVxdWVzdDogUmVjZWl2ZUdvb2RzRm9yUHVyY2hhc2VPcmRlckNvcnJlY3Rpb25SZXF1ZXN0KTogUHJvbWlzZTxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT4ge1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IucmVjZWl2ZUdvb2RzRm9yUHVyY2hhc2VPcmRlckNvcnJlY3Rpb24ocmVxdWVzdCk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIDxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT48dW5rbm93bj50aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShUcmFuc2FjdGlvbkluZm9SZXNwb25zZSwgcmVzcG9uc2UucmVzdWx0T2JqZWN0KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldFB1cmNoYXNlUG9ydGFsTGluZXMocmVxdWVzdDogR2V0UHVyY2hhc2VQb3J0YWxMaW5lKTogUHJvbWlzZTxQdXJjaGFzZVBvcnRhbExpbmVbXT4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlOiBGdW5jdGlvbiwgcmVqZWN0OiBGdW5jdGlvbikgPT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuZ2V0UHVyY2hhc2VQb3J0YWxMaW5lcyhyZXF1ZXN0KS50aGVuKChyZXN1bHQ6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgICAgIGlmIChyZXN1bHQucmVzdWx0T2JqZWN0cykge1xyXG4gICAgICAgICAgICByZXNvbHZlKHRoaXMuX2JvRmFjdG9yeS5tYWtlQk9BcnJheUZyb21SYXdCYWNrZW5kRGF0YUFycmF5KFB1cmNoYXNlUG9ydGFsTGluZSwgcmVzdWx0LnJlc3VsdE9iamVjdHMpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3VsdCk7XHJcbiAgICAgICAgICByZWplY3QobnVsbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHVwZGF0ZVB1cmNoYXNlUG9ydGFsTGluZXMocHVyY2hhc2VQb3J0YWxMaW5lOiBQdXJjaGFzZVBvcnRhbExpbmUpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGNvbnN0IHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci51cGRhdGVQdXJjaGFzZVBvcnRhbExpbmVzKHB1cmNoYXNlUG9ydGFsTGluZSk7XHJcbiAgICBpZiAocmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzdWx0KTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHB1cmNoYXNlT3JkZXJDb25maXJtYXRpb24ocHVyY2hhc2VPcmRlckNvbmZpcm1hdGlvbjogR2V0UHVyY2hhc2VPcmRlckNvbmZpcm1hdGlvbik6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgY29uc3QgcmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldFB1cmNoYXNlT3JkZXJDb25maXJtYXRpb24ocHVyY2hhc2VPcmRlckNvbmZpcm1hdGlvbik7XHJcbiAgICBpZiAocmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzdWx0KTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGxvY2tQdXJjaGFzZVBvcnRhbExpbmVzKHRyYW5zSWRQdXJjaGFzZTogbnVtYmVyLCBsaW5lSWQ6IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlOiBGdW5jdGlvbiwgcmVqZWN0OiBGdW5jdGlvbikgPT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IubG9ja1B1cmNoYXNlUG9ydGFsTGluZXModHJhbnNJZFB1cmNoYXNlLCBsaW5lSWQpLnRoZW4oYXN5bmMgKHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEpID0+IHtcclxuICAgICAgICBpZiAocmVzdWx0LnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzdWx0LnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmVqZWN0KHJlc3VsdC52YWxpZGF0aW9uTWVzc2FnZXNBc1N0cmluZyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldFN0b2NrU3RpY2tlclRlbXBsYXRlcyhkYXRhOiBTdG9ja1N0aWNrZXJzUHJpbnRMYXlvdXRzKTogUHJvbWlzZTxTdG9ja1N0aWNrZXJzUHJpbnRMYXlvdXRzW10+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pID0+IHtcclxuICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICByZXR1cm4gdGhpcy5zaGFyZWRDb25uZWN0b3IuZ2V0U3RvY2tTdGlja2VyUHJpbnRMYXlvdXRzKGRhdGEpLnRoZW4oKHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEpID0+IHtcclxuICAgICAgICBpZiAocmVzdWx0LnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzdWx0LnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICAgICAgaWYgKHJlc3VsdC5yZXN1bHRPYmplY3QpIHtcclxuICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLl9ib0ZhY3RvcnkubWFrZUJPQXJyYXlGcm9tUmF3QmFja2VuZERhdGFBcnJheShTdG9ja1N0aWNrZXJzUHJpbnRMYXlvdXRzLCByZXN1bHQucmVzdWx0T2JqZWN0KSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJlamVjdChyZXN1bHQudmFsaWRhdGlvbk1lc3NhZ2VzQXNTdHJpbmcpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZW5lcmF0ZUNvbW1pc3Npb25PcmRlcnModHJhbnNJZDogbnVtYmVyLCBvbmx5R2VuZXJhdGVGb3JEaXJlY3RTZWxsU3VwcGxpZXJzOiBib29sZWFuKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKSA9PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5nZW5lcmF0ZUNvbW1pc3Npb25PcmRlcnModHJhbnNJZCwgb25seUdlbmVyYXRlRm9yRGlyZWN0U2VsbFN1cHBsaWVycykudGhlbihhc3luYyAocmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXN1bHQudmFsaWRhdGlvblJlc3VsdCAmJiByZXN1bHQudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgICAgICByZXNvbHZlKHRydWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZWplY3QocmVzdWx0LnZhbGlkYXRpb25NZXNzYWdlc0FzU3RyaW5nKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0QXZhaWxhYmxlU3RvY2tHcm91cGVkQnlXTEJTQnlUcmFuc0lkTGluZU5yKHRyYW5zSWQ6IG51bWJlciwgbGluZU5yOiBudW1iZXIpOiBQcm9taXNlPEF2YWlsYWJsZVN0b2NrW10+IHtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldEF2YWlsYWJsZVN0b2NrR3JvdXBlZEJ5V0xCU0J5VHJhbnNJZExpbmVOcih0cmFuc0lkLCBsaW5lTnIpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiA8QXZhaWxhYmxlU3RvY2tbXT48dW5rbm93bj50aGlzLl9ib0ZhY3RvcnkubWFrZUJPQXJyYXlGcm9tUmF3QmFja2VuZERhdGFBcnJheShBdmFpbGFibGVTdG9jaywgcmVzcG9uc2UucmVzdWx0T2JqZWN0KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGFsbG9jYXRlR29vZHNGb3JTYWxlc09yZGVyKHJlcXVlc3Q6IEFsbG9jYXRlR29vZHNGb3JTYWxlc09yZGVyUmVxdWVzdCk6IFByb21pc2U8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+IHtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmFsbG9jYXRlR29vZHNGb3JTYWxlc09yZGVyKHJlcXVlc3QpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiA8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+PHVua25vd24+dGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UsIHJlc3BvbnNlLnJlc3VsdE9iamVjdCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBhbGxvY2F0ZUdvb2RzRm9yU2FsZXNPcmRlckNvcnJlY3Rpb24ocmVxdWVzdDogQWxsb2NhdGVHb29kc0ZvclNhbGVzT3JkZXJDb3JyZWN0aW9uUmVxdWVzdCk6IFByb21pc2U8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+IHtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmFsbG9jYXRlR29vZHNGb3JTYWxlc09yZGVyQ29ycmVjdGlvbihyZXF1ZXN0KTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPjx1bmtub3duPnRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlLCByZXNwb25zZS5yZXN1bHRPYmplY3QpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0R29vZHNBbGxvY2F0aW9uSGlzdG9yeSh0cmFuc0lkOiBudW1iZXIsIGxpbmVOcjogbnVtYmVyKTogUHJvbWlzZTxHb29kc0FsbG9jYXRpb25IaXN0b3J5PiB7XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRHb29kc0FsbG9jYXRpb25IaXN0b3J5KHRyYW5zSWQsIGxpbmVOcik7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UucmVzdWx0T2JqZWN0KSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShHb29kc0FsbG9jYXRpb25IaXN0b3J5LCByZXNwb25zZS5yZXN1bHRPYmplY3QpIGFzIHVua25vd24gYXMgR29vZHNBbGxvY2F0aW9uSGlzdG9yeTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldEdvb2RzVG9CZVBpY2tlZEhpc3RvcnkodHJhbnNJZDogbnVtYmVyLCBsaW5lTnI6IG51bWJlcik6IFByb21pc2U8R29vZHNUb0JlUGlja2VkSGlzdG9yeT4ge1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0R29vZHNUb0JlUGlja2VkSGlzdG9yeSh0cmFuc0lkLCBsaW5lTnIpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnJlc3VsdE9iamVjdCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoR29vZHNUb0JlUGlja2VkSGlzdG9yeSwgcmVzcG9uc2UucmVzdWx0T2JqZWN0KSBhcyB1bmtub3duIGFzIEdvb2RzVG9CZVBpY2tlZEhpc3Rvcnk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRHb29kc1BpY2tlZEhpc3RvcnkodHJhbnNJZDogbnVtYmVyLCBsaW5lTnI6IG51bWJlcik6IFByb21pc2U8R29vZHNQaWNrZWRIaXN0b3J5PiB7XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRHb29kc1BpY2tlZEhpc3RvcnkodHJhbnNJZCwgbGluZU5yKTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5yZXN1bHRPYmplY3QpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKEdvb2RzUGlja2VkSGlzdG9yeSwgcmVzcG9uc2UucmVzdWx0T2JqZWN0KSBhcyB1bmtub3duIGFzIEdvb2RzUGlja2VkSGlzdG9yeTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGRlbGV0ZUdvb2RzUGlja2VkKGRlbGV0ZUdvb2RzUGlja2VkRm9yT3JkZXJSZXF1ZXN0OiBEZWxldGVHb29kc1BpY2tlZEZvck9yZGVyUmVxdWVzdCk6IFByb21pc2U8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+IHtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmRlbGV0ZUdvb2RzUGlja2VkKGRlbGV0ZUdvb2RzUGlja2VkRm9yT3JkZXJSZXF1ZXN0KTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gcmVzcG9uc2UucmVzdWx0T2JqZWN0O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZGVsZXRlR29vZHNUb0JlUGlja2VkKGRlbGV0ZUdvb2RzVG9CZVBpY2tlZEZvck9yZGVyUmVxdWVzdDogRGVsZXRlR29vZHNUb0JlUGlja2VkRm9yT3JkZXJSZXF1ZXN0KTogUHJvbWlzZTxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT4ge1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZGVsZXRlR29vZHNUb0JlUGlja2VkKGRlbGV0ZUdvb2RzVG9CZVBpY2tlZEZvck9yZGVyUmVxdWVzdCk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIHJlc3BvbnNlLnJlc3VsdE9iamVjdDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHNldEdvb2RzVG9CZVBpY2tlZEZvclNhbGVzT3JkZXIocmVxdWVzdDogR29vZHNUb0JlUGlja2VkRm9yT3JkZXJSZXF1ZXN0KTogUHJvbWlzZTxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT4ge1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3Iuc2V0R29vZHNUb0JlUGlja2VkRm9yT3JkZXIocmVxdWVzdCk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIDxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT48dW5rbm93bj50aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShUcmFuc2FjdGlvbkluZm9SZXNwb25zZSwgcmVzcG9uc2UucmVzdWx0T2JqZWN0KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHNldEdvb2RzUGlja2VkRm9yT3JkZXIocmVxdWVzdDogR29vZHNQaWNrZWRSZXF1ZXN0KTogUHJvbWlzZTxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT4ge1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3Iuc2V0R29vZHNQaWNrZWRGb3JPcmRlcihyZXF1ZXN0KTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPjx1bmtub3duPnRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlLCByZXNwb25zZS5yZXN1bHRPYmplY3QpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0T3JkZXJDb25maXJtYXRpb25FbWFpbExheW91dHModHJhbnNhY3Rpb25VVUlEOiBzdHJpbmcpOiBQcm9taXNlPFJlcG9ydExheW91dFNlbGVjdGlvbkVtYWlsW10+IHtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldE9yZGVyQ29uZmlybWF0aW9uRW1haWxMYXlvdXRzKHRyYW5zYWN0aW9uVVVJRCk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIDxSZXBvcnRMYXlvdXRTZWxlY3Rpb25FbWFpbFtdPjx1bmtub3duPnRoaXMuX2JvRmFjdG9yeS5tYWtlQk9BcnJheUZyb21SYXdCYWNrZW5kRGF0YUFycmF5KFJlcG9ydExheW91dFNlbGVjdGlvbkVtYWlsLCByZXNwb25zZS5yZXN1bHRPYmplY3QpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0T3JkZXJDb25maXJtYXRpb25QcmludExheW91dHModHJhbnNhY3Rpb25VVUlEOiBzdHJpbmcpOiBQcm9taXNlPFJlcG9ydExheW91dFNlbGVjdGlvblByaW50W10+IHtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldE9yZGVyQ29uZmlybWF0aW9uUHJpbnRMYXlvdXRzKHRyYW5zYWN0aW9uVVVJRCk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIDxSZXBvcnRMYXlvdXRTZWxlY3Rpb25QcmludFtdPjx1bmtub3duPnRoaXMuX2JvRmFjdG9yeS5tYWtlQk9BcnJheUZyb21SYXdCYWNrZW5kRGF0YUFycmF5KFJlcG9ydExheW91dFNlbGVjdGlvblByaW50LCByZXNwb25zZS5yZXN1bHRPYmplY3QpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0T3JkZXJDb25maXJtYXRpb25EZWZhdWx0U2VuZE1ldGhvZChyZWxhdGlvbklkOiBudW1iZXIpOiBQcm9taXNlPG51bWJlcj4ge1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0T3JkZXJDb25maXJtYXRpb25EZWZhdWx0U2VuZE1ldGhvZChyZWxhdGlvbklkKTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gcmVzcG9uc2UucmVzdWx0T2JqZWN0O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgcHJpbnRPcmRlckNvbmZpcm1hdGlvbihyZXF1ZXN0OiBQcmludE9yZGVyQ29uZmlybWF0aW9uUmVxdWVzdCk6IFByb21pc2U8Q29Eb2N1bWVudCB8IGJvb2xlYW4+IHtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLnByaW50T3JkZXJDb25maXJtYXRpb24ocmVxdWVzdCk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgaWYgKHJlcXVlc3QucGFya0ZvckRpZ2l0YWxTaWduYXR1cmUpIHtcclxuICAgICAgICByZXR1cm4gPENvRG9jdW1lbnQ+PHVua25vd24+dGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoQ29Eb2N1bWVudCwgcmVzcG9uc2UucmVzdWx0T2JqZWN0KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgcHJpbnRIaXN0b3JpY09yZGVyQ29uZmlybWF0aW9uKHJlcXVlc3Q6IFByaW50SGlzdG9yaWNPcmRlckNvbmZpcm1hdGlvblJlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLnByaW50SGlzdG9yaWNPcmRlckNvbmZpcm1hdGlvbihyZXF1ZXN0KTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gcmVzcG9uc2UucmVzdWx0T2JqZWN0O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZW1haWxPcmRlckNvbmZpcm1hdGlvbihyZXF1ZXN0OiBFbWFpbE9yZGVyQ29uZmlybWF0aW9uUmVxdWVzdCk6IFByb21pc2U8Q29Eb2N1bWVudCB8IGJvb2xlYW4+IHtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmVtYWlsT3JkZXJDb25maXJtYXRpb24ocmVxdWVzdCk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgaWYgKHJlcXVlc3QucGFya0ZvckRpZ2l0YWxTaWduYXR1cmUpIHtcclxuICAgICAgICByZXR1cm4gPENvRG9jdW1lbnQ+PHVua25vd24+dGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoQ29Eb2N1bWVudCwgcmVzcG9uc2UucmVzdWx0T2JqZWN0KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZW1haWxIaXN0b3JpY09yZGVyQ29uZmlybWF0aW9uKHJlcXVlc3Q6IEVtYWlsSGlzdG9yaWNPcmRlckNvbmZpcm1hdGlvblJlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmVtYWlsSGlzdG9yaWNPcmRlckNvbmZpcm1hdGlvbihyZXF1ZXN0KTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gcmVzcG9uc2UucmVzdWx0T2JqZWN0O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgcGRmT3JkZXJDb25maXJtYXRpb24ocmVxdWVzdDogUGRmT3JkZXJDb25maXJtYXRpb25SZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5wZGZPcmRlckNvbmZpcm1hdGlvbihyZXF1ZXN0KTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gcmVzcG9uc2UucmVzdWx0T2JqZWN0O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgcHJpbnRQdXJjaGFzZU9yZGVyKHJlcXVlc3Q6IFByaW50UHVyY2hhc2VPcmRlclJlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLnByaW50UHVyY2hhc2VPcmRlcihyZXF1ZXN0KTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gcmVzcG9uc2UucmVzdWx0T2JqZWN0O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZW1haWxQdXJjaGFzZU9yZGVyKHJlcXVlc3Q6IEVtYWlsUHVyY2hhc2VPcmRlclJlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmVtYWlsUHVyY2hhc2VPcmRlcihyZXF1ZXN0KTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gcmVzcG9uc2UucmVzdWx0T2JqZWN0O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgcGRmUHVyY2hhc2VPcmRlcihyZXF1ZXN0OiBQZGZQdXJjaGFzZU9yZGVyUmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IucGRmUHVyY2hhc2VPcmRlcihyZXF1ZXN0KTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gcmVzcG9uc2UucmVzdWx0T2JqZWN0O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0UHVyY2hhc2VPcmRlckVtYWlsTGF5b3V0cyh0cmFuc2FjdGlvblVVSUQ6IHN0cmluZyk6IFByb21pc2U8UmVwb3J0TGF5b3V0U2VsZWN0aW9uRW1haWxbXT4ge1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0UHVyY2hhc2VPcmRlckVtYWlsTGF5b3V0cyh0cmFuc2FjdGlvblVVSUQpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiA8UmVwb3J0TGF5b3V0U2VsZWN0aW9uRW1haWxbXT48dW5rbm93bj50aGlzLl9ib0ZhY3RvcnkubWFrZUJPQXJyYXlGcm9tUmF3QmFja2VuZERhdGFBcnJheShSZXBvcnRMYXlvdXRTZWxlY3Rpb25FbWFpbCwgcmVzcG9uc2UucmVzdWx0T2JqZWN0KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldFB1cmNoYXNlT3JkZXJQcmludExheW91dHModHJhbnNhY3Rpb25VVUlEOiBzdHJpbmcpOiBQcm9taXNlPFJlcG9ydExheW91dFNlbGVjdGlvblByaW50W10+IHtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldFB1cmNoYXNlT3JkZXJQcmludExheW91dHModHJhbnNhY3Rpb25VVUlEKTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gPFJlcG9ydExheW91dFNlbGVjdGlvblByaW50W10+PHVua25vd24+dGhpcy5fYm9GYWN0b3J5Lm1ha2VCT0FycmF5RnJvbVJhd0JhY2tlbmREYXRhQXJyYXkoUmVwb3J0TGF5b3V0U2VsZWN0aW9uUHJpbnQsIHJlc3BvbnNlLnJlc3VsdE9iamVjdCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXREZWZhdWx0RW1haWxBZGRyZXNzTGlzdEZvck9yZGVyQ29uZmlybWF0aW9uKHRyYW5zYWN0aW9uVVVJRCk6IFByb21pc2U8c3RyaW5nW10+IHtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldERlZmF1bHRFbWFpbEFkZHJlc3NMaXN0Rm9yT3JkZXJDb25maXJtYXRpb24odHJhbnNhY3Rpb25VVUlEKTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gcmVzcG9uc2UucmVzdWx0T2JqZWN0O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0UHVyY2hhc2VPcmRlckRlZmF1bHRTZW5kTWV0aG9kKHJlbGF0aW9uSWQ6IG51bWJlcik6IFByb21pc2U8bnVtYmVyPiB7XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRQdXJjaGFzZU9yZGVyRGVmYXVsdFNlbmRNZXRob2QocmVsYXRpb25JZCk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIHJlc3BvbnNlLnJlc3VsdE9iamVjdDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdlbmVyYXRlQW5kU2VuZFB1cmNoYXNlT3JkZXJzRm9yU2FsZXNPcmRlcih0cmFuc2FjdGlvbklkOiBudW1iZXIsIGxpbmVOdW1iZXJzOiBudW1iZXJbXSk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2VuZXJhdGVBbmRTZW5kUHVyY2hhc2VPcmRlcnNGb3JTYWxlc09yZGVyKHRyYW5zYWN0aW9uSWQsIGxpbmVOdW1iZXJzKTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRQdXJjaGFzZUFkdmljZUxpbmVzKGZpbHRlcnM6IFB1cmNoYXNlQWR2aWNlRmlsdGVycywgZ29vZElkPzogbnVtYmVyKTogUHJvbWlzZTxQdXJjaGFzZUFkdmljZUxpbmVbXT4ge1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0UHVyY2hhc2VBZHZpY2VMaW5lcyhmaWx0ZXJzLCBnb29kSWQpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiA8UHVyY2hhc2VBZHZpY2VMaW5lW10+PHVua25vd24+dGhpcy5fYm9GYWN0b3J5Lm1ha2VCT0FycmF5RnJvbVJhd0JhY2tlbmREYXRhQXJyYXkoUHVyY2hhc2VBZHZpY2VMaW5lLCByZXNwb25zZS5yZXN1bHRPYmplY3RzKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdlbmVyYXRlQW5kU2VuZFB1cmNoYXNlT3JkZXJzKHB1cmNoYXNlQWR2aWNlTGluZXM6IFB1cmNoYXNlQWR2aWNlTGluZVtdKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZW5lcmF0ZUFuZFNlbmRQdXJjaGFzZU9yZGVycyhwdXJjaGFzZUFkdmljZUxpbmVzKTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGVtYWlsRGVsaXZlcnlOb3RlKGVtYWlsRGVsaXZlcnlOb3RlUmVxdWVzdDogRW1haWxEZWxpdmVyeU5vdGVSZXF1ZXN0KTogUHJvbWlzZTxDb0RvY3VtZW50IHwgYm9vbGVhbj4ge1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZW1haWxEZWxpdmVyeU5vdGUoZW1haWxEZWxpdmVyeU5vdGVSZXF1ZXN0KTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICBpZiAoZW1haWxEZWxpdmVyeU5vdGVSZXF1ZXN0LnBhcmtGb3JEaWdpdGFsU2lnbmF0dXJlKSB7XHJcbiAgICAgICAgcmV0dXJuIDxDb0RvY3VtZW50Pjx1bmtub3duPnRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKENvRG9jdW1lbnQsIHJlc3BvbnNlLnJlc3VsdE9iamVjdCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGVtYWlsSGlzdG9yaWNEZWxpdmVyeU5vdGUoZW1haWxIaXN0b3JpY0RlbGl2ZXJ5Tm90ZVJlcXVlc3Q6IEVtYWlsSGlzdG9yaWNEZWxpdmVyeU5vdGVSZXF1ZXN0KTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5lbWFpbEhpc3RvcmljRGVsaXZlcnlOb3RlKGVtYWlsSGlzdG9yaWNEZWxpdmVyeU5vdGVSZXF1ZXN0KTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHBkZkRlbGl2ZXJ5Tm90ZShwZGZEZWxpdmVyeU5vdGVSZXF1ZXN0OiBQZGZEZWxpdmVyeU5vdGVSZXF1ZXN0KTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5wZGZEZWxpdmVyeU5vdGUocGRmRGVsaXZlcnlOb3RlUmVxdWVzdCk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBwZGZIaXN0b3JpY0RlbGl2ZXJ5Tm90ZShwZGZIaXN0b3JpY0RlbGl2ZXJ5Tm90ZVJlcXVlc3Q6IFBkZkhpc3RvcmljRGVsaXZlcnlOb3RlUmVxdWVzdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IucGRmSGlzdG9yaWNEZWxpdmVyeU5vdGUocGRmSGlzdG9yaWNEZWxpdmVyeU5vdGVSZXF1ZXN0KTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHByaW50RGVsaXZlcnlOb3RlKHByaW50RGVsaXZlcnlOb3RlUmVxdWVzdDogUHJpbnREZWxpdmVyeU5vdGVSZXF1ZXN0KTogUHJvbWlzZTxDb0RvY3VtZW50IHwgYm9vbGVhbj4ge1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IucHJpbnREZWxpdmVyeU5vdGUocHJpbnREZWxpdmVyeU5vdGVSZXF1ZXN0KTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICBpZiAocHJpbnREZWxpdmVyeU5vdGVSZXF1ZXN0LnBhcmtGb3JEaWdpdGFsU2lnbmF0dXJlKSB7XHJcbiAgICAgICAgcmV0dXJuIDxDb0RvY3VtZW50Pjx1bmtub3duPnRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKENvRG9jdW1lbnQsIHJlc3BvbnNlLnJlc3VsdE9iamVjdCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHByaW50SGlzdG9yaWNEZWxpdmVyeU5vdGUocHJpbnRIaXN0b3JpY0RlbGl2ZXJ5Tm90ZVJlcXVlc3Q6IFByaW50SGlzdG9yaWNEZWxpdmVyeU5vdGVSZXF1ZXN0KTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5wcmludEhpc3RvcmljRGVsaXZlcnlOb3RlKHByaW50SGlzdG9yaWNEZWxpdmVyeU5vdGVSZXF1ZXN0KTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldERlbGl2ZXJ5Tm90ZURlZmF1bHRTZW5kTWV0aG9kKHJlbGF0aW9uSWQ6IG51bWJlcik6IFByb21pc2U8bnVtYmVyPiB7XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXREZWxpdmVyeU5vdGVEZWZhdWx0U2VuZE1ldGhvZChyZWxhdGlvbklkKTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gcmVzcG9uc2UucmVzdWx0T2JqZWN0O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0RGVsaXZlcnlOb3RlRW1haWxMYXlvdXRzKHRyYW5zYWN0aW9uVVVJRDogc3RyaW5nKTogUHJvbWlzZTxSZXBvcnRMYXlvdXRTZWxlY3Rpb25FbWFpbFtdPiB7XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXREZWxpdmVyeU5vdGVFbWFpbExheW91dHModHJhbnNhY3Rpb25VVUlEKTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gPFJlcG9ydExheW91dFNlbGVjdGlvbkVtYWlsW10+PHVua25vd24+dGhpcy5fYm9GYWN0b3J5Lm1ha2VCT0FycmF5RnJvbVJhd0JhY2tlbmREYXRhQXJyYXkoUmVwb3J0TGF5b3V0U2VsZWN0aW9uRW1haWwsIHJlc3BvbnNlLnJlc3VsdE9iamVjdCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0RGVsaXZlcnlOb3RlUHJpbnRMYXlvdXRzKHRyYW5zYWN0aW9uVVVJRDogc3RyaW5nKTogUHJvbWlzZTxSZXBvcnRMYXlvdXRTZWxlY3Rpb25QcmludFtdPiB7XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXREZWxpdmVyeU5vdGVQcmludExheW91dHModHJhbnNhY3Rpb25VVUlEKTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gPFJlcG9ydExheW91dFNlbGVjdGlvblByaW50W10+PHVua25vd24+dGhpcy5fYm9GYWN0b3J5Lm1ha2VCT0FycmF5RnJvbVJhd0JhY2tlbmREYXRhQXJyYXkoUmVwb3J0TGF5b3V0U2VsZWN0aW9uUHJpbnQsIHJlc3BvbnNlLnJlc3VsdE9iamVjdCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0RGVmYXVsdEVtYWlsQWRkcmVzc0xpc3RGb3JJbnZvaWNlKHRyYW5zYWN0aW9uVVVJRCk6IFByb21pc2U8c3RyaW5nW10+IHtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldERlZmF1bHRFbWFpbEFkZHJlc3NMaXN0Rm9ySW52b2ljZSh0cmFuc2FjdGlvblVVSUQpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiByZXNwb25zZS5yZXN1bHRPYmplY3Q7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBlbWFpbEludm9pY2UoZW1haWxJbnZvaWNlUmVxdWVzdDogRW1haWxJbnZvaWNlUmVxdWVzdCk6IFByb21pc2U8Q29Eb2N1bWVudCB8IGJvb2xlYW4+IHtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmVtYWlsSW52b2ljZShlbWFpbEludm9pY2VSZXF1ZXN0KTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICBpZiAoZW1haWxJbnZvaWNlUmVxdWVzdC5wYXJrRm9yRGlnaXRhbFNpZ25hdHVyZSkge1xyXG4gICAgICAgIHJldHVybiA8Q29Eb2N1bWVudD48dW5rbm93bj50aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShDb0RvY3VtZW50LCByZXNwb25zZS5yZXN1bHRPYmplY3QpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBlbWFpbEhpc3RvcmljSW52b2ljZShlbWFpbEhpc3RvcmljSW52b2ljZVJlcXVlc3Q6IEVtYWlsSGlzdG9yaWNJbnZvaWNlUmVxdWVzdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZW1haWxIaXN0b3JpY0ludm9pY2UoZW1haWxIaXN0b3JpY0ludm9pY2VSZXF1ZXN0KTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHBkZkludm9pY2UocGRmSW52b2ljZVJlcXVlc3Q6IFBkZkludm9pY2VSZXF1ZXN0KTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5wZGZJbnZvaWNlKHBkZkludm9pY2VSZXF1ZXN0KTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHBkZkhpc3RvcmljSW52b2ljZShwZGZIaXN0b3JpY0ludm9pY2VSZXF1ZXN0OiBQZGZIaXN0b3JpY0ludm9pY2VSZXF1ZXN0KTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5wZGZIaXN0b3JpY0ludm9pY2UocGRmSGlzdG9yaWNJbnZvaWNlUmVxdWVzdCk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBwcmludEludm9pY2UocHJpbnRJbnZvaWNlUmVxdWVzdDogUHJpbnRJbnZvaWNlUmVxdWVzdCk6IFByb21pc2U8Q29Eb2N1bWVudCB8IGJvb2xlYW4+IHtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLnByaW50SW52b2ljZShwcmludEludm9pY2VSZXF1ZXN0KTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICBpZiAocHJpbnRJbnZvaWNlUmVxdWVzdC5wYXJrRm9yRGlnaXRhbFNpZ25hdHVyZSkge1xyXG4gICAgICAgIHJldHVybiA8Q29Eb2N1bWVudD48dW5rbm93bj50aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShDb0RvY3VtZW50LCByZXNwb25zZS5yZXN1bHRPYmplY3QpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBwcmludEhpc3RvcmljSW52b2ljZShwcmludEhpc3RvcmljSW52b2ljZVJlcXVlc3Q6IFByaW50SGlzdG9yaWNJbnZvaWNlUmVxdWVzdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IucHJpbnRIaXN0b3JpY0ludm9pY2UocHJpbnRIaXN0b3JpY0ludm9pY2VSZXF1ZXN0KTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gcHVibGljIGFzeW5jIGdldEludm9pY2VEZWZhdWx0U2VuZE1ldGhvZChyZWxhdGlvbklkOiBudW1iZXIpOiBQcm9taXNlPG51bWJlcj4ge1xyXG4gIC8vICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0SW52b2ljZURlZmF1bHRTZW5kTWV0aG9kKHJlbGF0aW9uSWQpO1xyXG4gIC8vICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgLy8gICAgIHJldHVybiByZXNwb25zZS5yZXN1bHRPYmplY3Q7XHJcbiAgLy8gICB9IGVsc2Uge1xyXG4gIC8vICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gIC8vICAgICByZXR1cm4gbnVsbDtcclxuICAvLyAgIH1cclxuICAvLyB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBwcmludFBvc1JlY2VpcHQocHJpbnRQb3NSZWNlaXB0UmVxdWVzdDogUHJpbnRQb3NSZWNlaXB0UmVxdWVzdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IucHJpbnRQb3NSZWNlaXB0KHByaW50UG9zUmVjZWlwdFJlcXVlc3QpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgcHJpbnRIaXN0b3JpY1Bvc1JlY2VpcHQocHJpbnRIaXN0b3JpY1Bvc1JlY2VpcHRSZXF1ZXN0OiBQcmludEhpc3RvcmljUG9zUmVjZWlwdFJlcXVlc3QpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLnByaW50SGlzdG9yaWNQb3NSZWNlaXB0KHByaW50SGlzdG9yaWNQb3NSZWNlaXB0UmVxdWVzdCk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBlbWFpbFBvc1JlY2VpcHQoZW1haWxQb3NSZWNlaXB0UmVxdWVzdDogRW1haWxQb3NSZWNlaXB0UmVxdWVzdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZW1haWxQb3NSZWNlaXB0KGVtYWlsUG9zUmVjZWlwdFJlcXVlc3QpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZW1haWxIaXN0b3JpY1Bvc1JlY2VpcHQoZW1haWxIaXN0b3JpY1Bvc1JlY2VpcHRSZXF1ZXN0OiBFbWFpbEhpc3RvcmljUG9zUmVjZWlwdFJlcXVlc3QpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmVtYWlsSGlzdG9yaWNQb3NSZWNlaXB0KGVtYWlsSGlzdG9yaWNQb3NSZWNlaXB0UmVxdWVzdCk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRQb3NSZWNlaXB0RW1haWxMYXlvdXRzKHRyYW5zYWN0aW9uVVVJRDogc3RyaW5nKTogUHJvbWlzZTxSZXBvcnRMYXlvdXRTZWxlY3Rpb25FbWFpbFtdPiB7XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRQb3NSZWNlaXB0RW1haWxMYXlvdXRzKHRyYW5zYWN0aW9uVVVJRCk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIDxSZXBvcnRMYXlvdXRTZWxlY3Rpb25FbWFpbFtdPjx1bmtub3duPnRoaXMuX2JvRmFjdG9yeS5tYWtlQk9BcnJheUZyb21SYXdCYWNrZW5kRGF0YUFycmF5KFJlcG9ydExheW91dFNlbGVjdGlvbkVtYWlsLCByZXNwb25zZS5yZXN1bHRPYmplY3QpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0UG9zUmVjZWlwdFByaW50TGF5b3V0cyh0cmFuc2FjdGlvblVVSUQ6IHN0cmluZyk6IFByb21pc2U8UmVwb3J0TGF5b3V0U2VsZWN0aW9uUHJpbnRbXT4ge1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0UG9zUmVjZWlwdFByaW50TGF5b3V0cyh0cmFuc2FjdGlvblVVSUQpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiA8UmVwb3J0TGF5b3V0U2VsZWN0aW9uUHJpbnRbXT48dW5rbm93bj50aGlzLl9ib0ZhY3RvcnkubWFrZUJPQXJyYXlGcm9tUmF3QmFja2VuZERhdGFBcnJheShSZXBvcnRMYXlvdXRTZWxlY3Rpb25QcmludCwgcmVzcG9uc2UucmVzdWx0T2JqZWN0KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldEludm9pY2VFbWFpbExheW91dHModHJhbnNhY3Rpb25VVUlEOiBzdHJpbmcpOiBQcm9taXNlPFJlcG9ydExheW91dFNlbGVjdGlvbkVtYWlsW10+IHtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldEludm9pY2VFbWFpbExheW91dHModHJhbnNhY3Rpb25VVUlEKTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gPFJlcG9ydExheW91dFNlbGVjdGlvbkVtYWlsW10+PHVua25vd24+dGhpcy5fYm9GYWN0b3J5Lm1ha2VCT0FycmF5RnJvbVJhd0JhY2tlbmREYXRhQXJyYXkoUmVwb3J0TGF5b3V0U2VsZWN0aW9uRW1haWwsIHJlc3BvbnNlLnJlc3VsdE9iamVjdCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0SW52b2ljZVByaW50TGF5b3V0cyh0cmFuc2FjdGlvblVVSUQ6IHN0cmluZyk6IFByb21pc2U8UmVwb3J0TGF5b3V0U2VsZWN0aW9uUHJpbnRbXT4ge1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0SW52b2ljZVByaW50TGF5b3V0cyh0cmFuc2FjdGlvblVVSUQpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiA8UmVwb3J0TGF5b3V0U2VsZWN0aW9uUHJpbnRbXT48dW5rbm93bj50aGlzLl9ib0ZhY3RvcnkubWFrZUJPQXJyYXlGcm9tUmF3QmFja2VuZERhdGFBcnJheShSZXBvcnRMYXlvdXRTZWxlY3Rpb25QcmludCwgcmVzcG9uc2UucmVzdWx0T2JqZWN0KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRQcmludGVycygpOiBQcm9taXNlPFByaW50ZXJbXT4ge1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5tYWluQ29ubmVjdG9yLmxpc3RBbGxQcmludGVycygpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiA8UHJpbnRlcltdPjx1bmtub3duPnRoaXMuX2JvRmFjdG9yeS5tYWtlQk9BcnJheUZyb21SYXdCYWNrZW5kRGF0YUFycmF5KFByaW50ZXIsIHJlc3BvbnNlLnJlc3VsdE9iamVjdCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0Q3VycmVuY2llcyhhY3RpdmU6IGJvb2xlYW4gPSB0cnVlKTogUHJvbWlzZTxDdXJyZW5jeVtdPiB7XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLm1haW5Db25uZWN0b3IuZ2V0Q3VycmVuY2llcyhhY3RpdmUpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiA8Q3VycmVuY3lbXT48dW5rbm93bj50aGlzLl9ib0ZhY3RvcnkubWFrZUJPQXJyYXlGcm9tUmF3QmFja2VuZERhdGFBcnJheShDdXJyZW5jeSwgcmVzcG9uc2UucmVzdWx0T2JqZWN0cyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0UGF5bWVudENvbmRpdGlvbnMobmFtZT86IHN0cmluZyk6IFByb21pc2U8UGF5bWVudENvbmRpdGlvbltdPiB7XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLm1haW5Db25uZWN0b3IuZ2V0UGF5bWVudENvbmRpdGlvbnMobmFtZSk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIDxQYXltZW50Q29uZGl0aW9uW10+PHVua25vd24+dGhpcy5fYm9GYWN0b3J5Lm1ha2VCT0FycmF5RnJvbVJhd0JhY2tlbmREYXRhQXJyYXkoUGF5bWVudENvbmRpdGlvbiwgcmVzcG9uc2UucmVzdWx0T2JqZWN0cyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0Sm9pbmVkVGFncyh0YWJsZTogc3RyaW5nLCBrZXk6IHN0cmluZyk6IFByb21pc2U8VGFnVHJlZUl0ZW1bXT4ge1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5tYWluQ29ubmVjdG9yLmdldEpvaW5lZFRhZ3ModGFibGUsIGtleSk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIDxUYWdUcmVlSXRlbVtdPjx1bmtub3duPnRoaXMuX2JvRmFjdG9yeS5tYWtlQk9BcnJheUZyb21SYXdCYWNrZW5kRGF0YUFycmF5KFRhZ1RyZWVJdGVtLCByZXNwb25zZS5yZXN1bHRPYmplY3QpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIG1lcmdlSm9pbmVkVGFncyh0YWJsZTogc3RyaW5nLCBrZXk6IHN0cmluZywgdGFnczogVGFnVHJlZUl0ZW1bXSk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5tYWluQ29ubmVjdG9yLm1lcmdlSm9pbmVkVGFncyh0YWJsZSwga2V5LCB0YWdzKTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldFRhZ3NGdWxsVHJlZShjYXRlZ29yeTogVGFnQ2F0ZWdvcnksIGluY2x1ZGVUYWdzOiBib29sZWFuKTogUHJvbWlzZTxUYWdUcmVlSXRlbVtdPiB7XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLm1haW5Db25uZWN0b3IuZ2V0VGFnc0Z1bGxUcmVlKGNhdGVnb3J5LCBpbmNsdWRlVGFncyk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIDxUYWdUcmVlSXRlbVtdPjx1bmtub3duPnRoaXMuX2JvRmFjdG9yeS5tYWtlQk9BcnJheUZyb21SYXdCYWNrZW5kRGF0YUFycmF5KFRhZ1RyZWVJdGVtLCByZXNwb25zZS5yZXN1bHRPYmplY3RzKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRUcmFuc2FjdGlvbkluZm8odHJhbnNJZDogbnVtYmVyLCBsaW5lTnI6IG51bWJlcik6IFByb21pc2U8VHJhbnNhY3Rpb25JbmZvSGlzdG9yeVtdPiB7XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRUcmFuc2FjdGlvbkluZm8odHJhbnNJZCwgbGluZU5yKTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gPFRyYW5zYWN0aW9uSW5mb0hpc3RvcnlbXT48dW5rbm93bj50aGlzLl9ib0ZhY3RvcnkubWFrZUJPQXJyYXlGcm9tUmF3QmFja2VuZERhdGFBcnJheShUcmFuc2FjdGlvbkluZm9IaXN0b3J5LCByZXNwb25zZS5yZXN1bHRPYmplY3RzKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRSZWZUcmFuc2FjdGlvbnModHJhbnNJZDogbnVtYmVyKTogUHJvbWlzZTxSZWZUcmFuc2FjdGlvbltdPiB7XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRSZWZUcmFuc2FjdGlvbnModHJhbnNJZCk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIDxSZWZUcmFuc2FjdGlvbltdPjx1bmtub3duPnRoaXMuX2JvRmFjdG9yeS5tYWtlQk9BcnJheUZyb21SYXdCYWNrZW5kRGF0YUFycmF5KFJlZlRyYW5zYWN0aW9uLCByZXNwb25zZS5yZXN1bHRPYmplY3QpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldEludGVybmFsUGFyYW1ldGVyVmFsdWUocGFyYW06IEludGVybmFsUGFyYW0pOiBQcm9taXNlPEludGVybmFsUGFyYW0+IHtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMubWFpbkNvbm5lY3Rvci5nZXRJbnRlcm5hbFBhcmFtZXRlclZhbHVlKHBhcmFtKTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gcmVzcG9uc2UucmVzdWx0T2JqZWN0O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0T2JqZWN0Q29uZmlndXJhdGlvbihzY3JlZW5DZmdNb2R1bGU6IHN0cmluZywgcGFyYW1zPzogc3RyaW5nIHwgc3RyaW5nW10sIGluc2VydE1vZGU/OiBib29sZWFuKTogUHJvbWlzZTxPYmplY3RDb25maWd1cmF0aW9uW10+IHtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMubWFpbkNvbm5lY3Rvci5nZXRPYmplY3RDb25maWd1cmF0aW9ucyhzY3JlZW5DZmdNb2R1bGUsIHBhcmFtcywgaW5zZXJ0TW9kZSk7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIDxPYmplY3RDb25maWd1cmF0aW9uW10+PHVua25vd24+dGhpcy5fYm9GYWN0b3J5Lm1ha2VCT0FycmF5RnJvbVJhd0JhY2tlbmREYXRhQXJyYXkoT2JqZWN0Q29uZmlndXJhdGlvbiwgcmVzcG9uc2UucmVzdWx0T2JqZWN0cyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRIaXN0b3JpY0RvY3VtZW50cyh0cmFuc0lkOiBudW1iZXIsIGRvY3VtZW50Q29kZTogTGF5b3V0Q29kZSk6IFByb21pc2U8SGlzdG9yaWNSZXBvcnRbXT4ge1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0SGlzdG9yaWNEb2N1bWVudHModHJhbnNJZCwgZG9jdW1lbnRDb2RlKTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gPEhpc3RvcmljUmVwb3J0W10+PHVua25vd24+dGhpcy5fYm9GYWN0b3J5Lm1ha2VCT0FycmF5RnJvbVJhd0JhY2tlbmREYXRhQXJyYXkoSGlzdG9yaWNSZXBvcnQsIHJlc3BvbnNlLnJlc3VsdE9iamVjdHMpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0UGFja2FnZVN0aWNrZXJQcmludExheW91dHMoKTogUHJvbWlzZTxSZXBvcnRMYXlvdXRTZWxlY3Rpb25QcmludFtdPiB7XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLm1haW5Db25uZWN0b3IuZ2V0UGFja2FnZVN0aWNrZXJQcmludExheW91dHMoKTtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICByZXR1cm4gPFJlcG9ydExheW91dFNlbGVjdGlvblByaW50W10+PHVua25vd24+dGhpcy5fYm9GYWN0b3J5Lm1ha2VCT0FycmF5RnJvbVJhd0JhY2tlbmREYXRhQXJyYXkoUmVwb3J0TGF5b3V0U2VsZWN0aW9uUHJpbnQsIHJlc3BvbnNlLnJlc3VsdE9iamVjdCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgcHJvY2Vzc1Bvc1RyYW5zYWN0aW9uQnlVdWlkKHV1aWQ6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IucHJvY2Vzc1Bvc1RyYW5zYWN0aW9uQnlVdWlkKHV1aWQpO1xyXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaGFuZGxlRXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEpOiB2b2lkIHtcclxuICAgIHRoaXMuX2Vycm9yU2VydmljZS5zaG93VmFsaWRhdGlvbkVycm9yKHJlc3VsdCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|