igniteui-angular 12.3.3 → 12.3.4
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/igniteui-angular.umd.js +47 -41
- package/bundles/igniteui-angular.umd.js.map +1 -1
- package/esm2015/lib/combo/combo.common.js +4 -1
- package/esm2015/lib/grids/cell.component.js +5 -3
- package/esm2015/lib/grids/columns/column-group.component.js +1 -5
- package/esm2015/lib/grids/common/pipes.js +18 -13
- package/esm2015/lib/grids/grid/grid.component.js +6 -15
- package/esm2015/lib/grids/grid-base.directive.js +21 -13
- package/fesm2015/igniteui-angular.js +49 -44
- package/fesm2015/igniteui-angular.js.map +1 -1
- package/igniteui-angular.metadata.json +1 -1
- package/lib/grids/grid/grid.component.d.ts +4 -10
- package/lib/grids/grid-base.directive.d.ts +2 -0
- package/package.json +1 -1
|
@@ -236,18 +236,23 @@ export class IgxGridRowPinningPipe {
|
|
|
236
236
|
}
|
|
237
237
|
transform(collection, id, isPinned = false, _pipeTrigger) {
|
|
238
238
|
const grid = this.gridAPI.grid;
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
grid.
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
239
|
+
const inner = () => {
|
|
240
|
+
if (grid.hasPinnedRecords && isPinned) {
|
|
241
|
+
const result = collection.filter(rec => !grid.isSummaryRow(rec) && grid.isRecordPinned(rec));
|
|
242
|
+
result.sort((rec1, rec2) => grid.getInitialPinnedIndex(rec1) - grid.getInitialPinnedIndex(rec2));
|
|
243
|
+
return result;
|
|
244
|
+
}
|
|
245
|
+
grid.unpinnedRecords = collection;
|
|
246
|
+
if (!grid.hasPinnedRecords) {
|
|
247
|
+
grid.pinnedRecords = [];
|
|
248
|
+
return isPinned ? [] : collection;
|
|
249
|
+
}
|
|
250
|
+
return collection.map((rec) => !grid.isSummaryRow(rec) &&
|
|
251
|
+
grid.isRecordPinned(rec) ? { recordRef: rec, ghostRecord: true } : rec);
|
|
252
|
+
};
|
|
253
|
+
const r = inner();
|
|
254
|
+
grid.buildDataView();
|
|
255
|
+
return r;
|
|
251
256
|
}
|
|
252
257
|
}
|
|
253
258
|
IgxGridRowPinningPipe.decorators = [
|
|
@@ -435,4 +440,4 @@ export class IgxHeaderGroupStylePipe {
|
|
|
435
440
|
IgxHeaderGroupStylePipe.decorators = [
|
|
436
441
|
{ type: Pipe, args: [{ name: 'igxHeaderGroupStyle' },] }
|
|
437
442
|
];
|
|
438
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvY29tbW9uL3BpcGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVwRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDM0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBR2pFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUM3QyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUN2RixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBVWhEOzs7R0FHRztBQUlILE1BQU0sT0FBTywyQkFBMkI7SUFFN0IsU0FBUyxDQUFDLFVBQW1CLEVBQUUsQ0FBTSxFQUFFLElBQVMsRUFBRSxLQUFhLEVBQUUsS0FBYSxFQUFFLEVBQVU7UUFDN0YsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNiLE9BQU8sRUFBRSxDQUFDO1NBQ2I7UUFFRCxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFFbEIsS0FBSyxNQUFNLFFBQVEsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQzVDLE1BQU0sZUFBZSxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM3QyxNQUFNLEtBQUssR0FBRyxPQUFPLGVBQWUsS0FBSyxVQUFVLENBQUMsQ0FBQztnQkFDakQsZUFBZSxDQUFDLElBQUksRUFBRSxL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QixFQUFFOztBQVNyQyxNQUFNLE9BQU8sdUJBQXVCO0lBRXpCLFNBQVMsQ0FBQyxNQUErQixFQUFFLE1BQTBCLEVBQUUsQ0FBUztRQUNuRixNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFFZixJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1QsT0FBTyxHQUFHLENBQUM7U0FDZDtRQUVELEtBQUssTUFBTSxJQUFJLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNwQyxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDekIsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLE9BQU8sR0FBRyxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7U0FDN0Q7UUFFRCxPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7OztZQWhCSixJQUFJLFNBQUMsRUFBRSxJQUFJLEVBQUUscUJBQXFCLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtLCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEdyaWRCYXNlQVBJU2VydmljZSB9IGZyb20gJy4uL2FwaS5zZXJ2aWNlJztcbmltcG9ydCB7IElneEdyaWRCYXNlRGlyZWN0aXZlIH0gZnJvbSAnLi4vZ3JpZC1iYXNlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBEYXRhVXRpbCB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9kYXRhLXV0aWwnO1xuaW1wb3J0IHsgY2xvbmVBcnJheSwgcmVzb2x2ZU5lc3RlZFBhdGggfSBmcm9tICcuLi8uLi9jb3JlL3V0aWxzJztcbmltcG9ydCB7IEdyaWRUeXBlIH0gZnJvbSAnLi9ncmlkLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJZ3hDb2x1bW5Db21wb25lbnQgfSBmcm9tICcuLi9jb2x1bW5zL2NvbHVtbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29sdW1uRGlzcGxheU9yZGVyIH0gZnJvbSAnLi9lbnVtcyc7XG5pbXBvcnQgeyBJZ3hDb2x1bW5BY3Rpb25zQ29tcG9uZW50IH0gZnJvbSAnLi4vY29sdW1uLWFjdGlvbnMvY29sdW1uLWFjdGlvbnMuY29tcG9uZW50JztcbmltcG9ydCB7IElneEFkZFJvdyB9IGZyb20gJy4vY3J1ZC5zZXJ2aWNlJztcbmltcG9ydCB7IElneEdyaWRSb3cgfSBmcm9tICcuLi9ncmlkLXB1YmxpYy1yb3cnO1xuaW1wb3J0IHsgSWd4VHJlZUdyaWRSb3dDb21wb25lbnQgfSBmcm9tICcuLi90cmVlLWdyaWQvdHJlZS1ncmlkLXJvdy5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4R3JpZFJvd0NvbXBvbmVudCB9IGZyb20gJy4uL2dyaWQvZ3JpZC1yb3cuY29tcG9uZW50JztcbmltcG9ydCB7IElneEhpZXJhcmNoaWNhbFJvd0NvbXBvbmVudCB9IGZyb20gJy4uL2hpZXJhcmNoaWNhbC1ncmlkL2hpZXJhcmNoaWNhbC1yb3cuY29tcG9uZW50JztcbmltcG9ydCB7IElneFN1bW1hcnlPcGVyYW5kLCBJZ3hTdW1tYXJ5UmVzdWx0IH0gZnJvbSAnLi4vc3VtbWFyaWVzL2dyaWQtc3VtbWFyeSc7XG5cbmludGVyZmFjZSBDU1NQcm9wIHtcbiAgICBbcHJvcDogc3RyaW5nXTogYW55O1xufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqIEBpbnRlcm5hbFxuICovXG5AUGlwZSh7XG4gICAgbmFtZTogJ2lneENlbGxTdHlsZUNsYXNzZXMnXG59KVxuZXhwb3J0IGNsYXNzIElneEdyaWRDZWxsU3R5bGVDbGFzc2VzUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuXG4gICAgcHVibGljIHRyYW5zZm9ybShjc3NDbGFzc2VzOiBDU1NQcm9wLCBfOiBhbnksIGRhdGE6IGFueSwgZmllbGQ6IHN0cmluZywgaW5kZXg6IG51bWJlciwgX186IG51bWJlcik6IHN0cmluZyB7XG4gICAgICAgIGlmICghY3NzQ2xhc3Nlcykge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XG5cbiAgICAgICAgZm9yIChjb25zdCBjc3NDbGFzcyBvZiBPYmplY3Qua2V5cyhjc3NDbGFzc2VzKSkge1xuICAgICAgICAgICAgY29uc3QgY2FsbGJhY2tPclZhbHVlID0gY3NzQ2xhc3Nlc1tjc3NDbGFzc107XG4gICAgICAgICAgICBjb25zdCBhcHBseSA9IHR5cGVvZiBjYWxsYmFja09yVmFsdWUgPT09ICdmdW5jdGlvbicgP1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrT3JWYWx1ZShkYXRhLCBmaWVsZCwgcmVzb2x2ZU5lc3RlZFBhdGgoZGF0YSwgZmllbGQpLCBpbmRleCkgOiBjYWxsYmFja09yVmFsdWU7XG4gICAgICAgICAgICBpZiAoYXBwbHkpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChjc3NDbGFzcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0LmpvaW4oJyAnKTtcbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICogQGludGVybmFsXG4gKi9cbkBQaXBlKHtcbiAgICBuYW1lOiAnaWd4Q2VsbFN0eWxlcydcbn0pXG5leHBvcnQgY2xhc3MgSWd4R3JpZENlbGxTdHlsZXNQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG5cbiAgICBwdWJsaWMgdHJhbnNmb3JtKHN0eWxlczogQ1NTUHJvcCwgXzogYW55LCBkYXRhOiBhbnksIGZpZWxkOiBzdHJpbmcsIGluZGV4OiBudW1iZXIsIF9fOiBudW1iZXIpOiBDU1NQcm9wIHtcbiAgICAgICAgY29uc3QgY3NzID0ge307XG4gICAgICAgIGlmICghc3R5bGVzKSB7XG4gICAgICAgICAgICByZXR1cm4gY3NzO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBwcm9wIG9mIE9iamVjdC5rZXlzKHN0eWxlcykpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IHN0eWxlc1twcm9wXTtcbiAgICAgICAgICAgIGNzc1twcm9wXSA9IHR5cGVvZiByZXMgPT09ICdmdW5jdGlvbicgPyByZXMoZGF0YSwgZmllbGQsIHJlc29sdmVOZXN0ZWRQYXRoKGRhdGEsIGZpZWxkKSwgaW5kZXgpIDogcmVzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNzcztcbiAgICB9XG59XG5cbnR5cGUgX1Jvd1R5cGUgPSBJZ3hHcmlkUm93Q29tcG9uZW50IHwgSWd4VHJlZUdyaWRSb3dDb21wb25lbnQgfCBJZ3hIaWVyYXJjaGljYWxSb3dDb21wb25lbnQ7XG5cbi8qKlxuICogQGhpZGRlblxuICogQGludGVybmFsXG4gKi9cbkBQaXBlKHsgbmFtZTogJ2lneEdyaWRSb3dDbGFzc2VzJyB9KVxuZXhwb3J0IGNsYXNzIElneEdyaWRSb3dDbGFzc2VzUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICAgIHB1YmxpYyByb3c6IElneEdyaWRSb3c7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGdyaWRBUEk6IEdyaWRCYXNlQVBJU2VydmljZTxJZ3hHcmlkQmFzZURpcmVjdGl2ZSAmIEdyaWRUeXBlPikge1xuICAgICAgICB0aGlzLnJvdyA9IG5ldyBJZ3hHcmlkUm93KHRoaXMuZ3JpZEFQSS5ncmlkIGFzIGFueSwgLTEsIHt9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdHJhbnNmb3JtKFxuICAgICAgICBjc3NDbGFzc2VzOiBDU1NQcm9wLFxuICAgICAgICByb3c6IF9Sb3dUeXBlLFxuICAgICAgICBlZGl0TW9kZTogYm9vbGVhbixcbiAgICAgICAgc2VsZWN0ZWQ6IGJvb2xlYW4sXG4gICAgICAgIGRpcnR5OiBib29sZWFuLFxuICAgICAgICBkZWxldGVkOiBib29sZWFuLFxuICAgICAgICBkcmFnZ2luZzogYm9vbGVhbixcbiAgICAgICAgaW5kZXg6IG51bWJlcixcbiAgICAgICAgbXJsOiBib29sZWFuLFxuICAgICAgICBmaWx0ZXJlZE91dDogYm9vbGVhbixcbiAgICAgICAgXzogbnVtYmVyXG4gICAgKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBTZXQoWydpZ3gtZ3JpZF9fdHInLCBpbmRleCAlIDIgPyByb3cuZ3JpZC5ldmVuUm93Q1NTIDogcm93LmdyaWQub2RkUm93Q1NTXSk7XG4gICAgICAgIGNvbnN0IG1hcHBpbmcgPSBbXG4gICAgICAgICAgICBbc2VsZWN0ZWQsICdpZ3gtZ3JpZF9fdHItLXNlbGVjdGVkJ10sXG4gICAgICAgICAgICBbZWRpdE1vZGUsICdpZ3gtZ3JpZF9fdHItLWVkaXQnXSxcbiAgICAgICAgICAgIFtkaXJ0eSwgJ2lneC1ncmlkX190ci0tZWRpdGVkJ10sXG4gICAgICAgICAgICBbZGVsZXRlZCwgJ2lneC1ncmlkX190ci0tZGVsZXRlZCddLFxuICAgICAgICAgICAgW2RyYWdnaW5nLCAnaWd4LWdyaWRfX3RyLS1kcmFnJ10sXG4gICAgICAgICAgICBbbXJsLCAnaWd4LWdyaWRfX3RyLS1tcmwnXSxcbiAgICAgICAgICAgIC8vIFRyZWUgZ3JpZCBvbmx5XG4gICAgICAgICAgICBbZmlsdGVyZWRPdXQsICdpZ3gtZ3JpZF9fdHItLWZpbHRlcmVkJ11cbiAgICAgICAgXTtcblxuICAgICAgICBmb3IgKGNvbnN0IFtzdGF0ZSwgX2NsYXNzXSBvZiBtYXBwaW5nKSB7XG4gICAgICAgICAgICBpZiAoc3RhdGUpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuYWRkKF9jbGFzcyBhcyBzdHJpbmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBjc3NDbGFzcyBvZiBPYmplY3Qua2V5cyhjc3NDbGFzc2VzID8/IHt9KSkge1xuICAgICAgICAgICAgY29uc3QgY2FsbGJhY2tPclZhbHVlID0gY3NzQ2xhc3Nlc1tjc3NDbGFzc107XG4gICAgICAgICAgICB0aGlzLnJvdy5pbmRleCA9IGluZGV4O1xuICAgICAgICAgICAgKHRoaXMucm93IGFzIGFueSkuX2RhdGEgPSByb3cucm93RGF0YTtcbiAgICAgICAgICAgIGNvbnN0IGFwcGx5ID0gdHlwZW9mIGNhbGxiYWNrT3JWYWx1ZSA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrT3JWYWx1ZSh0aGlzLnJvdykgOiBjYWxsYmFja09yVmFsdWU7XG4gICAgICAgICAgICBpZiAoYXBwbHkpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuYWRkKGNzc0NsYXNzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKiBAaW50ZXJuYWxcbiAqL1xuQFBpcGUoeyBuYW1lOiAnaWd4R3JpZFJvd1N0eWxlcycgfSlcbmV4cG9ydCBjbGFzcyBJZ3hHcmlkUm93U3R5bGVzUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBncmlkQVBJOiBHcmlkQmFzZUFQSVNlcnZpY2U8SWd4R3JpZEJhc2VEaXJlY3RpdmUgJiBHcmlkVHlwZT4pIHsgfVxuXG4gICAgcHVibGljIHRyYW5zZm9ybShzdHlsZXM6IENTU1Byb3AsIHJvd0RhdGE6IGFueSwgaW5kZXg6IG51bWJlciwgX186IG51bWJlcik6IENTU1Byb3Age1xuICAgICAgICBjb25zdCBjc3MgPSB7fTtcbiAgICAgICAgaWYgKCFzdHlsZXMpIHtcbiAgICAgICAgICAgIHJldHVybiBjc3M7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBwcm9wIG9mIE9iamVjdC5rZXlzKHN0eWxlcykpIHtcbiAgICAgICAgICAgIGNvbnN0IGNiID0gc3R5bGVzW3Byb3BdO1xuICAgICAgICAgICAgY29uc3Qgcm93ID0gbmV3IElneEdyaWRSb3coKHRoaXMuZ3JpZEFQSS5ncmlkIGFzIGFueSksIGluZGV4LCByb3dEYXRhKTtcbiAgICAgICAgICAgIGNzc1twcm9wXSA9IHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJyA/IGNiKHJvdykgOiBjYjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3NzO1xuICAgIH1cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKiBAaW50ZXJuYWxcbiAqL1xuQFBpcGUoe1xuICAgIG5hbWU6ICdpZ3hOb3RHcm91cGVkJ1xufSlcbmV4cG9ydCBjbGFzcyBJZ3hHcmlkTm90R3JvdXBlZFBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcblxuICAgIHB1YmxpYyB0cmFuc2Zvcm0odmFsdWU6IGFueVtdKTogYW55W10ge1xuICAgICAgICByZXR1cm4gdmFsdWUuZmlsdGVyKGl0ZW0gPT4gIWl0ZW0uY29sdW1uR3JvdXApO1xuICAgIH1cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKiBAaW50ZXJuYWxcbiAqL1xuQFBpcGUoe1xuICAgIG5hbWU6ICdpZ3hUb3BMZXZlbCdcbn0pXG5leHBvcnQgY2xhc3MgSWd4R3JpZFRvcExldmVsQ29sdW1ucyBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuXG4gICAgcHVibGljIHRyYW5zZm9ybSh2YWx1ZTogYW55W10pOiBhbnlbXSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS5maWx0ZXIoaXRlbSA9PiBpdGVtLmxldmVsID09PSAwKTtcbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICogQGludGVybmFsXG4gKi9cbkBQaXBlKHtcbiAgICBuYW1lOiAnZmlsdGVyQ29uZGl0aW9uJyxcbiAgICBwdXJlOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIElneEdyaWRGaWx0ZXJDb25kaXRpb25QaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG5cbiAgICBwdWJsaWMgdHJhbnNmb3JtKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdmFsdWUuc3BsaXQoLyg/PVtBLVpdKS8pLmpvaW4oJyAnKTtcbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICogQGludGVybmFsXG4gKi9cbkBQaXBlKHtcbiAgICBuYW1lOiAnZ3JpZFRyYW5zYWN0aW9uJyxcbiAgICBwdXJlOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIElneEdyaWRUcmFuc2FjdGlvblBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZ3JpZEFQSTogR3JpZEJhc2VBUElTZXJ2aWNlPElneEdyaWRCYXNlRGlyZWN0aXZlICYgR3JpZFR5cGU+KSB7IH1cblxuICAgIHB1YmxpYyB0cmFuc2Zvcm0oY29sbGVjdGlvbjogYW55W10sIF9pZDogc3RyaW5nLCBfcGlwZVRyaWdnZXI6IG51bWJlcikge1xuICAgICAgICBjb25zdCBncmlkOiBJZ3hHcmlkQmFzZURpcmVjdGl2ZSA9IHRoaXMuZ3JpZEFQSS5ncmlkO1xuXG4gICAgICAgIGlmIChncmlkLnRyYW5zYWN0aW9ucy5lbmFibGVkKSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBEYXRhVXRpbC5tZXJnZVRyYW5zYWN0aW9ucyhcbiAgICAgICAgICAgICAgICBjbG9uZUFycmF5KGNvbGxlY3Rpb24pLFxuICAgICAgICAgICAgICAgIGdyaWQudHJhbnNhY3Rpb25zLmdldEFnZ3JlZ2F0ZWRDaGFuZ2VzKHRydWUpLFxuICAgICAgICAgICAgICAgIGdyaWQucHJpbWFyeUtleSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb2xsZWN0aW9uO1xuICAgIH1cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKiBAaW50ZXJuYWxcbiAqL1xuQFBpcGUoe1xuICAgIG5hbWU6ICdwYWdpbmF0b3JPcHRpb25zJyxcbiAgICBwdXJlOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBJZ3hHcmlkUGFnaW5hdG9yT3B0aW9uc1BpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgICBwdWJsaWMgdHJhbnNmb3JtKHZhbHVlczogQXJyYXk8bnVtYmVyPikge1xuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbShuZXcgU2V0KFsuLi52YWx1ZXNdKSkuc29ydCgoYSwgYikgPT4gYSAtIGIpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKiBAaW50ZXJuYWxcbiAqL1xuQFBpcGUoe1xuICAgIG5hbWU6ICd2aXNpYmxlQ29sdW1ucycsXG4gICAgcHVyZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hIYXNWaXNpYmxlQ29sdW1uc1BpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgICBwdWJsaWMgdHJhbnNmb3JtKHZhbHVlczogYW55W10sIGhhc1Zpc2libGVDb2x1bW5zKSB7XG4gICAgICAgIGlmICghKHZhbHVlcyAmJiB2YWx1ZXMubGVuZ3RoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlcztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaGFzVmlzaWJsZUNvbHVtbnMgPyB2YWx1ZXMgOiBbXTtcbiAgICB9XG5cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbkBQaXBlKHtcbiAgICBuYW1lOiAnZ3JpZFJvd1Bpbm5pbmcnLFxuICAgIHB1cmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgSWd4R3JpZFJvd1Bpbm5pbmdQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGdyaWRBUEk6IEdyaWRCYXNlQVBJU2VydmljZTxJZ3hHcmlkQmFzZURpcmVjdGl2ZSAmIEdyaWRUeXBlPikgeyB9XG5cbiAgICBwdWJsaWMgdHJhbnNmb3JtKGNvbGxlY3Rpb246IGFueVtdLCBpZDogc3RyaW5nLCBpc1Bpbm5lZCA9IGZhbHNlLCBfcGlwZVRyaWdnZXI6IG51bWJlcikge1xuICAgICAgICBjb25zdCBncmlkID0gdGhpcy5ncmlkQVBJLmdyaWQ7XG5cbiAgICAgICAgaWYgKGdyaWQuaGFzUGlubmVkUmVjb3JkcyAmJiBpc1Bpbm5lZCkge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gY29sbGVjdGlvbi5maWx0ZXIocmVjID0+ICFncmlkLmlzU3VtbWFyeVJvdyhyZWMpICYmIGdyaWQuaXNSZWNvcmRQaW5uZWQocmVjKSk7XG4gICAgICAgICAgICByZXN1bHQuc29ydCgocmVjMSwgcmVjMikgPT4gZ3JpZC5nZXRJbml0aWFsUGlubmVkSW5kZXgocmVjMSkgLSBncmlkLmdldEluaXRpYWxQaW5uZWRJbmRleChyZWMyKSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG5cbiAgICAgICAgZ3JpZC51bnBpbm5lZFJlY29yZHMgPSBjb2xsZWN0aW9uO1xuICAgICAgICBpZiAoIWdyaWQuaGFzUGlubmVkUmVjb3Jkcykge1xuICAgICAgICAgICAgZ3JpZC5waW5uZWRSZWNvcmRzID0gW107XG4gICAgICAgICAgICByZXR1cm4gaXNQaW5uZWQgPyBbXSA6IGNvbGxlY3Rpb247XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29sbGVjdGlvbi5tYXAoKHJlYykgPT4gIWdyaWQuaXNTdW1tYXJ5Um93KHJlYykgJiZcbiAgICAgICAgICAgIGdyaWQuaXNSZWNvcmRQaW5uZWQocmVjKSA/IHsgcmVjb3JkUmVmOiByZWMsIGdob3N0UmVjb3JkOiB0cnVlIH0gOiByZWMpO1xuICAgIH1cbn1cblxuQFBpcGUoe1xuICAgIG5hbWU6ICdjb2x1bW5BY3Rpb25FbmFibGVkJyxcbiAgICBwdXJlOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIElneENvbHVtbkFjdGlvbkVuYWJsZWRQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG5cbiAgICBjb25zdHJ1Y3RvcihASW5qZWN0KElneENvbHVtbkFjdGlvbnNDb21wb25lbnQpIHByb3RlY3RlZCBjb2x1bW5BY3Rpb25zOiBJZ3hDb2x1bW5BY3Rpb25zQ29tcG9uZW50KSB7IH1cblxuICAgIHB1YmxpYyB0cmFuc2Zvcm0oXG4gICAgICAgIGNvbGxlY3Rpb246IElneENvbHVtbkNvbXBvbmVudFtdLFxuICAgICAgICBhY3Rpb25GaWx0ZXI6ICh2YWx1ZTogSWd4Q29sdW1uQ29tcG9uZW50LCBpbmRleDogbnVtYmVyLCBhcnJheTogSWd4Q29sdW1uQ29tcG9uZW50W10pID0+IGJvb2xlYW4sXG4gICAgICAgIF9waXBlVHJpZ2dlcjogbnVtYmVyXG4gICAgKTogSWd4Q29sdW1uQ29tcG9uZW50W10ge1xuICAgICAgICBpZiAoIWNvbGxlY3Rpb24pIHtcbiAgICAgICAgICAgIHJldHVybiBjb2xsZWN0aW9uO1xuICAgICAgICB9XG4gICAgICAgIGxldCBjb3B5ID0gY29sbGVjdGlvbi5zbGljZSgwKTtcbiAgICAgICAgaWYgKGNvcHkubGVuZ3RoICYmIGNvcHlbMF0uZ3JpZC5oYXNDb2x1bW5MYXlvdXRzKSB7XG4gICAgICAgICAgICBjb3B5ID0gY29weS5maWx0ZXIoYyA9PiBjLmNvbHVtbkxheW91dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFjdGlvbkZpbHRlcikge1xuICAgICAgICAgICAgY29weSA9IGNvcHkuZmlsdGVyKGFjdGlvbkZpbHRlcik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gUHJlc2VydmUgdGhlIGFjdGlvbmFibGUgY29sbGVjdGlvbiBmb3IgdXNlIGluIHRoZSBjb21wb25lbnRcbiAgICAgICAgdGhpcy5jb2x1bW5BY3Rpb25zLmFjdGlvbmFibGVDb2x1bW5zID0gY29weTtcbiAgICAgICAgcmV0dXJuIGNvcHk7XG4gICAgfVxufVxuXG5AUGlwZSh7XG4gICAgbmFtZTogJ2ZpbHRlckFjdGlvbkNvbHVtbnMnLFxuICAgIHB1cmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgSWd4RmlsdGVyQWN0aW9uQ29sdW1uc1BpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcblxuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoSWd4Q29sdW1uQWN0aW9uc0NvbXBvbmVudCkgcHJvdGVjdGVkIGNvbHVtbkFjdGlvbnM6IElneENvbHVtbkFjdGlvbnNDb21wb25lbnQpIHsgfVxuXG4gICAgcHVibGljIHRyYW5zZm9ybShjb2xsZWN0aW9uOiBJZ3hDb2x1bW5Db21wb25lbnRbXSwgZmlsdGVyQ3JpdGVyaWE6IHN0cmluZywgX3BpcGVUcmlnZ2VyOiBudW1iZXIpOiBJZ3hDb2x1bW5Db21wb25lbnRbXSB7XG4gICAgICAgIGlmICghY29sbGVjdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb247XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGNvcHkgPSBjb2xsZWN0aW9uLnNsaWNlKDApO1xuICAgICAgICBpZiAoZmlsdGVyQ3JpdGVyaWEgJiYgZmlsdGVyQ3JpdGVyaWEubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyRnVuYyA9IChjKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyVGV4dCA9IGMuaGVhZGVyIHx8IGMuZmllbGQ7XG4gICAgICAgICAgICAgICAgaWYgKCFmaWx0ZXJUZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZpbHRlclRleHQudG9Mb2NhbGVMb3dlckNhc2UoKS5pbmRleE9mKGZpbHRlckNyaXRlcmlhLnRvTG9jYWxlTG93ZXJDYXNlKCkpID49IDAgfHxcbiAgICAgICAgICAgICAgICAgICAgKGMuY2hpbGRyZW4/LnNvbWUoZmlsdGVyRnVuYykgPz8gZmFsc2UpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvcHkgPSBjb2xsZWN0aW9uLmZpbHRlcihmaWx0ZXJGdW5jKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBQcmVzZXJ2ZSB0aGUgZmlsdGVyZWQgY29sbGVjdGlvbiBmb3IgdXNlIGluIHRoZSBjb21wb25lbnRcbiAgICAgICAgdGhpcy5jb2x1bW5BY3Rpb25zLmZpbHRlcmVkQ29sdW1ucyA9IGNvcHk7XG4gICAgICAgIHJldHVybiBjb3B5O1xuICAgIH1cbn1cblxuQFBpcGUoe1xuICAgIG5hbWU6ICdzb3J0QWN0aW9uQ29sdW1ucycsXG4gICAgcHVyZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hTb3J0QWN0aW9uQ29sdW1uc1BpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcblxuICAgIHB1YmxpYyB0cmFuc2Zvcm0oY29sbGVjdGlvbjogSWd4Q29sdW1uQ29tcG9uZW50W10sIGRpc3BsYXlPcmRlcjogQ29sdW1uRGlzcGxheU9yZGVyLCBfcGlwZVRyaWdnZXI6IG51bWJlcik6IElneENvbHVtbkNvbXBvbmVudFtdIHtcbiAgICAgICAgaWYgKGRpc3BsYXlPcmRlciA9PT0gQ29sdW1uRGlzcGxheU9yZGVyLkFscGhhYmV0aWNhbCkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb24uc29ydCgoYSwgYikgPT4gKGEuaGVhZGVyIHx8IGEuZmllbGQpLmxvY2FsZUNvbXBhcmUoYi5oZWFkZXIgfHwgYi5maWVsZCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb2xsZWN0aW9uO1xuICAgIH1cbn1cblxuQFBpcGUoeyBuYW1lOiAnZGF0YU1hcHBlcicgfSlcbmV4cG9ydCBjbGFzcyBJZ3hHcmlkRGF0YU1hcHBlclBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcblxuICAgIHB1YmxpYyB0cmFuc2Zvcm0oZGF0YTogYW55W10sIGZpZWxkOiBzdHJpbmcsIF86IG51bWJlciwgdmFsOiBhbnksIGlzTmVzdGVkUGF0aDogYm9vbGVhbikge1xuICAgICAgICByZXR1cm4gaXNOZXN0ZWRQYXRoID8gcmVzb2x2ZU5lc3RlZFBhdGgoZGF0YSwgZmllbGQpIDogdmFsO1xuICAgIH1cbn1cblxuQFBpcGUoeyBuYW1lOiAnaWd4U3RyaW5nUmVwbGFjZScgfSlcbmV4cG9ydCBjbGFzcyBJZ3hTdHJpbmdSZXBsYWNlUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuXG4gICAgcHVibGljIHRyYW5zZm9ybSh2YWx1ZTogc3RyaW5nLCBzZWFyY2g6IHN0cmluZyB8IFJlZ0V4cCwgcmVwbGFjZW1lbnQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKHNlYXJjaCwgcmVwbGFjZW1lbnQpO1xuICAgIH1cbn1cblxuQFBpcGUoeyBuYW1lOiAndHJhbnNhY3Rpb25TdGF0ZScgfSlcbmV4cG9ydCBjbGFzcyBJZ3hHcmlkVHJhbnNhY3Rpb25TdGF0ZVBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcblxuICAgIHB1YmxpYyB0cmFuc2Zvcm0ocm93X2lkOiBhbnksIGZpZWxkOiBzdHJpbmcsIHJvd0VkaXRhYmxlOiBib29sZWFuLCB0cmFuc2FjdGlvbnM6IGFueSwgXzogYW55LCBfXzogYW55LCBfX186IGFueSkge1xuICAgICAgICBpZiAocm93RWRpdGFibGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHJvd0N1cnJlbnRTdGF0ZSA9IHRyYW5zYWN0aW9ucy5nZXRBZ2dyZWdhdGVkVmFsdWUocm93X2lkLCBmYWxzZSk7XG4gICAgICAgICAgICBpZiAocm93Q3VycmVudFN0YXRlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSByZXNvbHZlTmVzdGVkUGF0aChyb3dDdXJyZW50U3RhdGUsIGZpZWxkKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gdHJhbnNhY3Rpb25zLmdldFN0YXRlKHJvd19pZCk7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHJlc29sdmVOZXN0ZWRQYXRoKHRyYW5zYWN0aW9uPy52YWx1ZSA/PyB7fSwgZmllbGQpO1xuICAgICAgICAgICAgcmV0dXJuIHRyYW5zYWN0aW9uICYmIHRyYW5zYWN0aW9uLnZhbHVlICYmICh2YWx1ZSB8fCB2YWx1ZSA9PT0gMCB8fCB2YWx1ZSA9PT0gZmFsc2UpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5AUGlwZSh7IG5hbWU6ICdjb2x1bW5Gb3JtYXR0ZXInIH0pXG5leHBvcnQgY2xhc3MgSWd4Q29sdW1uRm9ybWF0dGVyUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuXG4gICAgcHVibGljIHRyYW5zZm9ybSh2YWx1ZTogYW55LCBmb3JtYXR0ZXI6ICh2OiBhbnksIGRhdGE6IGFueSkgPT4gYW55LCByb3dEYXRhOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIGZvcm1hdHRlcih2YWx1ZSwgcm93RGF0YSk7XG4gICAgfVxufVxuXG5AUGlwZSh7IG5hbWU6ICdzdW1tYXJ5Rm9ybWF0dGVyJyB9KVxuZXhwb3J0IGNsYXNzIElneFN1bW1hcnlGb3JtYXR0ZXJQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG5cbiAgICBwdWJsaWMgdHJhbnNmb3JtKHN1bW1hcnlSZXN1bHQ6IElneFN1bW1hcnlSZXN1bHQsIHN1bW1hcnlPcGVyYW5kOiBJZ3hTdW1tYXJ5T3BlcmFuZCxcbiAgICAgICAgc3VtbWFyeUZvcm1hdHRlcjogKHM6IElneFN1bW1hcnlSZXN1bHQsIG86IElneFN1bW1hcnlPcGVyYW5kKSA9PiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIHN1bW1hcnlGb3JtYXR0ZXIoc3VtbWFyeVJlc3VsdCwgc3VtbWFyeU9wZXJhbmQpO1xuICAgIH1cbn1cblxuQFBpcGUoeyBuYW1lOiAnZ3JpZEFkZFJvdycgfSlcbmV4cG9ydCBjbGFzcyBJZ3hHcmlkQWRkUm93UGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBncmlkQVBJOiBHcmlkQmFzZUFQSVNlcnZpY2U8SWd4R3JpZEJhc2VEaXJlY3RpdmUgJiBHcmlkVHlwZT4pIHsgfVxuXG4gICAgcHVibGljIHRyYW5zZm9ybShjb2xsZWN0aW9uOiBhbnksIGlzUGlubmVkID0gZmFsc2UsIF9waXBlVHJpZ2dlcjogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGdyaWQgPSB0aGlzLmdyaWRBUEkuZ3JpZDtcbiAgICAgICAgaWYgKCFncmlkLnJvd0VkaXRhYmxlIHx8ICFncmlkLmNydWRTZXJ2aWNlLnJvdyB8fCBncmlkLmNydWRTZXJ2aWNlLnJvdy5nZXRDbGFzc05hbWUoKSAhPT0gSWd4QWRkUm93Lm5hbWUgfHxcbiAgICAgICAgICAgICFncmlkLmdyaWRBUEkuY3J1ZFNlcnZpY2UuYWRkUm93UGFyZW50IHx8IGlzUGlubmVkICE9PSBncmlkLmdyaWRBUEkuY3J1ZFNlcnZpY2UuYWRkUm93UGFyZW50LmlzUGlubmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gY29sbGVjdGlvbjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb3B5ID0gY29sbGVjdGlvbi5zbGljZSgwKTtcbiAgICAgICAgY29uc3QgcmVjID0gKGdyaWQuY3J1ZFNlcnZpY2Uucm93IGFzIElneEFkZFJvdykucmVjb3JkUmVmO1xuICAgICAgICBjb3B5LnNwbGljZShncmlkLmNydWRTZXJ2aWNlLnJvdy5pbmRleCwgMCwgcmVjKTtcbiAgICAgICAgcmV0dXJuIGNvcHk7XG4gICAgfVxufVxuXG5AUGlwZSh7IG5hbWU6ICdpZ3hIZWFkZXJHcm91cFdpZHRoJyB9KVxuZXhwb3J0IGNsYXNzIElneEhlYWRlckdyb3VwV2lkdGhQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG5cbiAgICBwdWJsaWMgdHJhbnNmb3JtKHdpZHRoOiBhbnksIG1pbldpZHRoOiBhbnksIGhhc0xheW91dDogYm9vbGVhbikge1xuICAgICAgICByZXR1cm4gaGFzTGF5b3V0ID8gJycgOiBgJHtNYXRoLm1heChwYXJzZUZsb2F0KHdpZHRoKSwgbWluV2lkdGgpfXB4YDtcbiAgICB9XG59XG5cbkBQaXBlKHsgbmFtZTogJ2lneEhlYWRlckdyb3VwU3R5bGUnIH0pXG5leHBvcnQgY2xhc3MgSWd4SGVhZGVyR3JvdXBTdHlsZVBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcblxuICAgIHB1YmxpYyB0cmFuc2Zvcm0oc3R5bGVzOiB7IFtwcm9wOiBzdHJpbmddOiBhbnkgfSwgY29sdW1uOiBJZ3hDb2x1bW5Db21wb25lbnQsIF86IG51bWJlcik6IHsgW3Byb3A6IHN0cmluZ106IGFueSB9IHtcbiAgICAgICAgY29uc3QgY3NzID0ge307XG5cbiAgICAgICAgaWYgKCFzdHlsZXMpIHtcbiAgICAgICAgICAgIHJldHVybiBjc3M7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IHByb3Agb2YgT2JqZWN0LmtleXMoc3R5bGVzKSkge1xuICAgICAgICAgICAgY29uc3QgcmVzID0gc3R5bGVzW3Byb3BdO1xuICAgICAgICAgICAgY3NzW3Byb3BdID0gdHlwZW9mIHJlcyA9PT0gJ2Z1bmN0aW9uJyA/IHJlcyhjb2x1bW4pIDogcmVzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNzcztcbiAgICB9XG59XG4iXX0=
|
|
443
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvY29tbW9uL3BpcGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVwRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDM0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBR2pFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUM3QyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUN2RixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBVWhEOzs7R0FHRztBQUlILE1BQU0sT0FBTywyQkFBMkI7SUFFN0IsU0FBUyxDQUFDLFVBQW1CLEVBQUUsQ0FBTSxFQUFFLElBQVMsRUFBRSxLQUFhLEVBQUUsS0FBYSxFQUFFLEVBQVU7UUFDN0YsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNiLE9BQU8sRUFBRSxDQUFDO1NBQ2I7UUFFRCxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFFbEIsS0FBSyxNQUFNLFFBQVEsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQzVDLE1BQU0sZUFBZSxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM3QyxNQUFNLEtBQUssR0FBRyxPQUFPLGVBQWUsS0FBSyxVQUFVLENBQUMsQ0FBQztnQkFDakQsZUFBZSxDQUFDLElBQUksRUFBRSxL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RUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUM7SUFDekUsQ0FBQzs7O1lBTEosSUFBSSxTQUFDLEVBQUUsSUFBSSxFQUFFLHFCQUFxQixFQUFFOztBQVNyQyxNQUFNLE9BQU8sdUJBQXVCO0lBRXpCLFNBQVMsQ0FBQyxNQUErQixFQUFFLE1BQTBCLEVBQUUsQ0FBUztRQUNuRixNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFFZixJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1QsT0FBTyxHQUFHLENBQUM7U0FDZDtRQUVELEtBQUssTUFBTSxJQUFJLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNwQyxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDekIsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLE9BQU8sR0FBRyxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7U0FDN0Q7UUFFRCxPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7OztZQWhCSixJQUFJLFNBQUMsRUFBRSxJQUFJLEVBQUUscUJBQXFCLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtLCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEdyaWRCYXNlQVBJU2VydmljZSB9IGZyb20gJy4uL2FwaS5zZXJ2aWNlJztcbmltcG9ydCB7IElneEdyaWRCYXNlRGlyZWN0aXZlIH0gZnJvbSAnLi4vZ3JpZC1iYXNlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBEYXRhVXRpbCB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9kYXRhLXV0aWwnO1xuaW1wb3J0IHsgY2xvbmVBcnJheSwgcmVzb2x2ZU5lc3RlZFBhdGggfSBmcm9tICcuLi8uLi9jb3JlL3V0aWxzJztcbmltcG9ydCB7IEdyaWRUeXBlIH0gZnJvbSAnLi9ncmlkLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJZ3hDb2x1bW5Db21wb25lbnQgfSBmcm9tICcuLi9jb2x1bW5zL2NvbHVtbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29sdW1uRGlzcGxheU9yZGVyIH0gZnJvbSAnLi9lbnVtcyc7XG5pbXBvcnQgeyBJZ3hDb2x1bW5BY3Rpb25zQ29tcG9uZW50IH0gZnJvbSAnLi4vY29sdW1uLWFjdGlvbnMvY29sdW1uLWFjdGlvbnMuY29tcG9uZW50JztcbmltcG9ydCB7IElneEFkZFJvdyB9IGZyb20gJy4vY3J1ZC5zZXJ2aWNlJztcbmltcG9ydCB7IElneEdyaWRSb3cgfSBmcm9tICcuLi9ncmlkLXB1YmxpYy1yb3cnO1xuaW1wb3J0IHsgSWd4VHJlZUdyaWRSb3dDb21wb25lbnQgfSBmcm9tICcuLi90cmVlLWdyaWQvdHJlZS1ncmlkLXJvdy5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4R3JpZFJvd0NvbXBvbmVudCB9IGZyb20gJy4uL2dyaWQvZ3JpZC1yb3cuY29tcG9uZW50JztcbmltcG9ydCB7IElneEhpZXJhcmNoaWNhbFJvd0NvbXBvbmVudCB9IGZyb20gJy4uL2hpZXJhcmNoaWNhbC1ncmlkL2hpZXJhcmNoaWNhbC1yb3cuY29tcG9uZW50JztcbmltcG9ydCB7IElneFN1bW1hcnlPcGVyYW5kLCBJZ3hTdW1tYXJ5UmVzdWx0IH0gZnJvbSAnLi4vc3VtbWFyaWVzL2dyaWQtc3VtbWFyeSc7XG5cbmludGVyZmFjZSBDU1NQcm9wIHtcbiAgICBbcHJvcDogc3RyaW5nXTogYW55O1xufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqIEBpbnRlcm5hbFxuICovXG5AUGlwZSh7XG4gICAgbmFtZTogJ2lneENlbGxTdHlsZUNsYXNzZXMnXG59KVxuZXhwb3J0IGNsYXNzIElneEdyaWRDZWxsU3R5bGVDbGFzc2VzUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuXG4gICAgcHVibGljIHRyYW5zZm9ybShjc3NDbGFzc2VzOiBDU1NQcm9wLCBfOiBhbnksIGRhdGE6IGFueSwgZmllbGQ6IHN0cmluZywgaW5kZXg6IG51bWJlciwgX186IG51bWJlcik6IHN0cmluZyB7XG4gICAgICAgIGlmICghY3NzQ2xhc3Nlcykge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XG5cbiAgICAgICAgZm9yIChjb25zdCBjc3NDbGFzcyBvZiBPYmplY3Qua2V5cyhjc3NDbGFzc2VzKSkge1xuICAgICAgICAgICAgY29uc3QgY2FsbGJhY2tPclZhbHVlID0gY3NzQ2xhc3Nlc1tjc3NDbGFzc107XG4gICAgICAgICAgICBjb25zdCBhcHBseSA9IHR5cGVvZiBjYWxsYmFja09yVmFsdWUgPT09ICdmdW5jdGlvbicgP1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrT3JWYWx1ZShkYXRhLCBmaWVsZCwgcmVzb2x2ZU5lc3RlZFBhdGgoZGF0YSwgZmllbGQpLCBpbmRleCkgOiBjYWxsYmFja09yVmFsdWU7XG4gICAgICAgICAgICBpZiAoYXBwbHkpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChjc3NDbGFzcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0LmpvaW4oJyAnKTtcbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICogQGludGVybmFsXG4gKi9cbkBQaXBlKHtcbiAgICBuYW1lOiAnaWd4Q2VsbFN0eWxlcydcbn0pXG5leHBvcnQgY2xhc3MgSWd4R3JpZENlbGxTdHlsZXNQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG5cbiAgICBwdWJsaWMgdHJhbnNmb3JtKHN0eWxlczogQ1NTUHJvcCwgXzogYW55LCBkYXRhOiBhbnksIGZpZWxkOiBzdHJpbmcsIGluZGV4OiBudW1iZXIsIF9fOiBudW1iZXIpOiBDU1NQcm9wIHtcbiAgICAgICAgY29uc3QgY3NzID0ge307XG4gICAgICAgIGlmICghc3R5bGVzKSB7XG4gICAgICAgICAgICByZXR1cm4gY3NzO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBwcm9wIG9mIE9iamVjdC5rZXlzKHN0eWxlcykpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IHN0eWxlc1twcm9wXTtcbiAgICAgICAgICAgIGNzc1twcm9wXSA9IHR5cGVvZiByZXMgPT09ICdmdW5jdGlvbicgPyByZXMoZGF0YSwgZmllbGQsIHJlc29sdmVOZXN0ZWRQYXRoKGRhdGEsIGZpZWxkKSwgaW5kZXgpIDogcmVzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNzcztcbiAgICB9XG59XG5cbnR5cGUgX1Jvd1R5cGUgPSBJZ3hHcmlkUm93Q29tcG9uZW50IHwgSWd4VHJlZUdyaWRSb3dDb21wb25lbnQgfCBJZ3hIaWVyYXJjaGljYWxSb3dDb21wb25lbnQ7XG5cbi8qKlxuICogQGhpZGRlblxuICogQGludGVybmFsXG4gKi9cbkBQaXBlKHsgbmFtZTogJ2lneEdyaWRSb3dDbGFzc2VzJyB9KVxuZXhwb3J0IGNsYXNzIElneEdyaWRSb3dDbGFzc2VzUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICAgIHB1YmxpYyByb3c6IElneEdyaWRSb3c7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGdyaWRBUEk6IEdyaWRCYXNlQVBJU2VydmljZTxJZ3hHcmlkQmFzZURpcmVjdGl2ZSAmIEdyaWRUeXBlPikge1xuICAgICAgICB0aGlzLnJvdyA9IG5ldyBJZ3hHcmlkUm93KHRoaXMuZ3JpZEFQSS5ncmlkIGFzIGFueSwgLTEsIHt9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdHJhbnNmb3JtKFxuICAgICAgICBjc3NDbGFzc2VzOiBDU1NQcm9wLFxuICAgICAgICByb3c6IF9Sb3dUeXBlLFxuICAgICAgICBlZGl0TW9kZTogYm9vbGVhbixcbiAgICAgICAgc2VsZWN0ZWQ6IGJvb2xlYW4sXG4gICAgICAgIGRpcnR5OiBib29sZWFuLFxuICAgICAgICBkZWxldGVkOiBib29sZWFuLFxuICAgICAgICBkcmFnZ2luZzogYm9vbGVhbixcbiAgICAgICAgaW5kZXg6IG51bWJlcixcbiAgICAgICAgbXJsOiBib29sZWFuLFxuICAgICAgICBmaWx0ZXJlZE91dDogYm9vbGVhbixcbiAgICAgICAgXzogbnVtYmVyXG4gICAgKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBTZXQoWydpZ3gtZ3JpZF9fdHInLCBpbmRleCAlIDIgPyByb3cuZ3JpZC5ldmVuUm93Q1NTIDogcm93LmdyaWQub2RkUm93Q1NTXSk7XG4gICAgICAgIGNvbnN0IG1hcHBpbmcgPSBbXG4gICAgICAgICAgICBbc2VsZWN0ZWQsICdpZ3gtZ3JpZF9fdHItLXNlbGVjdGVkJ10sXG4gICAgICAgICAgICBbZWRpdE1vZGUsICdpZ3gtZ3JpZF9fdHItLWVkaXQnXSxcbiAgICAgICAgICAgIFtkaXJ0eSwgJ2lneC1ncmlkX190ci0tZWRpdGVkJ10sXG4gICAgICAgICAgICBbZGVsZXRlZCwgJ2lneC1ncmlkX190ci0tZGVsZXRlZCddLFxuICAgICAgICAgICAgW2RyYWdnaW5nLCAnaWd4LWdyaWRfX3RyLS1kcmFnJ10sXG4gICAgICAgICAgICBbbXJsLCAnaWd4LWdyaWRfX3RyLS1tcmwnXSxcbiAgICAgICAgICAgIC8vIFRyZWUgZ3JpZCBvbmx5XG4gICAgICAgICAgICBbZmlsdGVyZWRPdXQsICdpZ3gtZ3JpZF9fdHItLWZpbHRlcmVkJ11cbiAgICAgICAgXTtcblxuICAgICAgICBmb3IgKGNvbnN0IFtzdGF0ZSwgX2NsYXNzXSBvZiBtYXBwaW5nKSB7XG4gICAgICAgICAgICBpZiAoc3RhdGUpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuYWRkKF9jbGFzcyBhcyBzdHJpbmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBjc3NDbGFzcyBvZiBPYmplY3Qua2V5cyhjc3NDbGFzc2VzID8/IHt9KSkge1xuICAgICAgICAgICAgY29uc3QgY2FsbGJhY2tPclZhbHVlID0gY3NzQ2xhc3Nlc1tjc3NDbGFzc107XG4gICAgICAgICAgICB0aGlzLnJvdy5pbmRleCA9IGluZGV4O1xuICAgICAgICAgICAgKHRoaXMucm93IGFzIGFueSkuX2RhdGEgPSByb3cucm93RGF0YTtcbiAgICAgICAgICAgIGNvbnN0IGFwcGx5ID0gdHlwZW9mIGNhbGxiYWNrT3JWYWx1ZSA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrT3JWYWx1ZSh0aGlzLnJvdykgOiBjYWxsYmFja09yVmFsdWU7XG4gICAgICAgICAgICBpZiAoYXBwbHkpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuYWRkKGNzc0NsYXNzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKiBAaW50ZXJuYWxcbiAqL1xuQFBpcGUoeyBuYW1lOiAnaWd4R3JpZFJvd1N0eWxlcycgfSlcbmV4cG9ydCBjbGFzcyBJZ3hHcmlkUm93U3R5bGVzUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBncmlkQVBJOiBHcmlkQmFzZUFQSVNlcnZpY2U8SWd4R3JpZEJhc2VEaXJlY3RpdmUgJiBHcmlkVHlwZT4pIHsgfVxuXG4gICAgcHVibGljIHRyYW5zZm9ybShzdHlsZXM6IENTU1Byb3AsIHJvd0RhdGE6IGFueSwgaW5kZXg6IG51bWJlciwgX186IG51bWJlcik6IENTU1Byb3Age1xuICAgICAgICBjb25zdCBjc3MgPSB7fTtcbiAgICAgICAgaWYgKCFzdHlsZXMpIHtcbiAgICAgICAgICAgIHJldHVybiBjc3M7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBwcm9wIG9mIE9iamVjdC5rZXlzKHN0eWxlcykpIHtcbiAgICAgICAgICAgIGNvbnN0IGNiID0gc3R5bGVzW3Byb3BdO1xuICAgICAgICAgICAgY29uc3Qgcm93ID0gbmV3IElneEdyaWRSb3coKHRoaXMuZ3JpZEFQSS5ncmlkIGFzIGFueSksIGluZGV4LCByb3dEYXRhKTtcbiAgICAgICAgICAgIGNzc1twcm9wXSA9IHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJyA/IGNiKHJvdykgOiBjYjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3NzO1xuICAgIH1cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKiBAaW50ZXJuYWxcbiAqL1xuQFBpcGUoe1xuICAgIG5hbWU6ICdpZ3hOb3RHcm91cGVkJ1xufSlcbmV4cG9ydCBjbGFzcyBJZ3hHcmlkTm90R3JvdXBlZFBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcblxuICAgIHB1YmxpYyB0cmFuc2Zvcm0odmFsdWU6IGFueVtdKTogYW55W10ge1xuICAgICAgICByZXR1cm4gdmFsdWUuZmlsdGVyKGl0ZW0gPT4gIWl0ZW0uY29sdW1uR3JvdXApO1xuICAgIH1cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKiBAaW50ZXJuYWxcbiAqL1xuQFBpcGUoe1xuICAgIG5hbWU6ICdpZ3hUb3BMZXZlbCdcbn0pXG5leHBvcnQgY2xhc3MgSWd4R3JpZFRvcExldmVsQ29sdW1ucyBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuXG4gICAgcHVibGljIHRyYW5zZm9ybSh2YWx1ZTogYW55W10pOiBhbnlbXSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS5maWx0ZXIoaXRlbSA9PiBpdGVtLmxldmVsID09PSAwKTtcbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICogQGludGVybmFsXG4gKi9cbkBQaXBlKHtcbiAgICBuYW1lOiAnZmlsdGVyQ29uZGl0aW9uJyxcbiAgICBwdXJlOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIElneEdyaWRGaWx0ZXJDb25kaXRpb25QaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG5cbiAgICBwdWJsaWMgdHJhbnNmb3JtKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdmFsdWUuc3BsaXQoLyg/PVtBLVpdKS8pLmpvaW4oJyAnKTtcbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICogQGludGVybmFsXG4gKi9cbkBQaXBlKHtcbiAgICBuYW1lOiAnZ3JpZFRyYW5zYWN0aW9uJyxcbiAgICBwdXJlOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIElneEdyaWRUcmFuc2FjdGlvblBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZ3JpZEFQSTogR3JpZEJhc2VBUElTZXJ2aWNlPElneEdyaWRCYXNlRGlyZWN0aXZlICYgR3JpZFR5cGU+KSB7IH1cblxuICAgIHB1YmxpYyB0cmFuc2Zvcm0oY29sbGVjdGlvbjogYW55W10sIF9pZDogc3RyaW5nLCBfcGlwZVRyaWdnZXI6IG51bWJlcikge1xuICAgICAgICBjb25zdCBncmlkOiBJZ3hHcmlkQmFzZURpcmVjdGl2ZSA9IHRoaXMuZ3JpZEFQSS5ncmlkO1xuXG4gICAgICAgIGlmIChncmlkLnRyYW5zYWN0aW9ucy5lbmFibGVkKSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBEYXRhVXRpbC5tZXJnZVRyYW5zYWN0aW9ucyhcbiAgICAgICAgICAgICAgICBjbG9uZUFycmF5KGNvbGxlY3Rpb24pLFxuICAgICAgICAgICAgICAgIGdyaWQudHJhbnNhY3Rpb25zLmdldEFnZ3JlZ2F0ZWRDaGFuZ2VzKHRydWUpLFxuICAgICAgICAgICAgICAgIGdyaWQucHJpbWFyeUtleSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb2xsZWN0aW9uO1xuICAgIH1cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKiBAaW50ZXJuYWxcbiAqL1xuQFBpcGUoe1xuICAgIG5hbWU6ICdwYWdpbmF0b3JPcHRpb25zJyxcbiAgICBwdXJlOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBJZ3hHcmlkUGFnaW5hdG9yT3B0aW9uc1BpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgICBwdWJsaWMgdHJhbnNmb3JtKHZhbHVlczogQXJyYXk8bnVtYmVyPikge1xuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbShuZXcgU2V0KFsuLi52YWx1ZXNdKSkuc29ydCgoYSwgYikgPT4gYSAtIGIpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKiBAaW50ZXJuYWxcbiAqL1xuQFBpcGUoe1xuICAgIG5hbWU6ICd2aXNpYmxlQ29sdW1ucycsXG4gICAgcHVyZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hIYXNWaXNpYmxlQ29sdW1uc1BpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgICBwdWJsaWMgdHJhbnNmb3JtKHZhbHVlczogYW55W10sIGhhc1Zpc2libGVDb2x1bW5zKSB7XG4gICAgICAgIGlmICghKHZhbHVlcyAmJiB2YWx1ZXMubGVuZ3RoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlcztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaGFzVmlzaWJsZUNvbHVtbnMgPyB2YWx1ZXMgOiBbXTtcbiAgICB9XG5cbn1cblxuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuQFBpcGUoe1xuICAgIG5hbWU6ICdncmlkUm93UGlubmluZycsXG4gICAgcHVyZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hHcmlkUm93UGlubmluZ1BpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZ3JpZEFQSTogR3JpZEJhc2VBUElTZXJ2aWNlPElneEdyaWRCYXNlRGlyZWN0aXZlICYgR3JpZFR5cGU+KSB7IH1cblxuICAgIHB1YmxpYyB0cmFuc2Zvcm0oY29sbGVjdGlvbjogYW55W10sIGlkOiBzdHJpbmcsIGlzUGlubmVkID0gZmFsc2UsIF9waXBlVHJpZ2dlcjogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGdyaWQgPSB0aGlzLmdyaWRBUEkuZ3JpZDtcblxuICAgICAgICBjb25zdCBpbm5lciA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmIChncmlkLmhhc1Bpbm5lZFJlY29yZHMgJiYgaXNQaW5uZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBjb2xsZWN0aW9uLmZpbHRlcihyZWMgPT4gIWdyaWQuaXNTdW1tYXJ5Um93KHJlYykgJiYgZ3JpZC5pc1JlY29yZFBpbm5lZChyZWMpKTtcbiAgICAgICAgICAgICAgICByZXN1bHQuc29ydCgocmVjMSwgcmVjMikgPT4gZ3JpZC5nZXRJbml0aWFsUGlubmVkSW5kZXgocmVjMSkgLSBncmlkLmdldEluaXRpYWxQaW5uZWRJbmRleChyZWMyKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ3JpZC51bnBpbm5lZFJlY29yZHMgPSBjb2xsZWN0aW9uO1xuICAgICAgICAgICAgaWYgKCFncmlkLmhhc1Bpbm5lZFJlY29yZHMpIHtcbiAgICAgICAgICAgICAgICBncmlkLnBpbm5lZFJlY29yZHMgPSBbXTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNQaW5uZWQgPyBbXSA6IGNvbGxlY3Rpb247XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBjb2xsZWN0aW9uLm1hcCgocmVjKSA9PiAhZ3JpZC5pc1N1bW1hcnlSb3cocmVjKSAmJlxuICAgICAgICAgICAgICAgIGdyaWQuaXNSZWNvcmRQaW5uZWQocmVjKSA/IHsgcmVjb3JkUmVmOiByZWMsIGdob3N0UmVjb3JkOiB0cnVlIH0gOiByZWMpO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCByID0gaW5uZXIoKTtcbiAgICAgICAgKGdyaWQgYXMgYW55KS5idWlsZERhdGFWaWV3KCk7XG4gICAgICAgIHJldHVybiByO1xuICAgIH1cbn1cblxuQFBpcGUoe1xuICAgIG5hbWU6ICdjb2x1bW5BY3Rpb25FbmFibGVkJyxcbiAgICBwdXJlOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIElneENvbHVtbkFjdGlvbkVuYWJsZWRQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG5cbiAgICBjb25zdHJ1Y3RvcihASW5qZWN0KElneENvbHVtbkFjdGlvbnNDb21wb25lbnQpIHByb3RlY3RlZCBjb2x1bW5BY3Rpb25zOiBJZ3hDb2x1bW5BY3Rpb25zQ29tcG9uZW50KSB7IH1cblxuICAgIHB1YmxpYyB0cmFuc2Zvcm0oXG4gICAgICAgIGNvbGxlY3Rpb246IElneENvbHVtbkNvbXBvbmVudFtdLFxuICAgICAgICBhY3Rpb25GaWx0ZXI6ICh2YWx1ZTogSWd4Q29sdW1uQ29tcG9uZW50LCBpbmRleDogbnVtYmVyLCBhcnJheTogSWd4Q29sdW1uQ29tcG9uZW50W10pID0+IGJvb2xlYW4sXG4gICAgICAgIF9waXBlVHJpZ2dlcjogbnVtYmVyXG4gICAgKTogSWd4Q29sdW1uQ29tcG9uZW50W10ge1xuICAgICAgICBpZiAoIWNvbGxlY3Rpb24pIHtcbiAgICAgICAgICAgIHJldHVybiBjb2xsZWN0aW9uO1xuICAgICAgICB9XG4gICAgICAgIGxldCBjb3B5ID0gY29sbGVjdGlvbi5zbGljZSgwKTtcbiAgICAgICAgaWYgKGNvcHkubGVuZ3RoICYmIGNvcHlbMF0uZ3JpZC5oYXNDb2x1bW5MYXlvdXRzKSB7XG4gICAgICAgICAgICBjb3B5ID0gY29weS5maWx0ZXIoYyA9PiBjLmNvbHVtbkxheW91dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFjdGlvbkZpbHRlcikge1xuICAgICAgICAgICAgY29weSA9IGNvcHkuZmlsdGVyKGFjdGlvbkZpbHRlcik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gUHJlc2VydmUgdGhlIGFjdGlvbmFibGUgY29sbGVjdGlvbiBmb3IgdXNlIGluIHRoZSBjb21wb25lbnRcbiAgICAgICAgdGhpcy5jb2x1bW5BY3Rpb25zLmFjdGlvbmFibGVDb2x1bW5zID0gY29weTtcbiAgICAgICAgcmV0dXJuIGNvcHk7XG4gICAgfVxufVxuXG5AUGlwZSh7XG4gICAgbmFtZTogJ2ZpbHRlckFjdGlvbkNvbHVtbnMnLFxuICAgIHB1cmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgSWd4RmlsdGVyQWN0aW9uQ29sdW1uc1BpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcblxuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoSWd4Q29sdW1uQWN0aW9uc0NvbXBvbmVudCkgcHJvdGVjdGVkIGNvbHVtbkFjdGlvbnM6IElneENvbHVtbkFjdGlvbnNDb21wb25lbnQpIHsgfVxuXG4gICAgcHVibGljIHRyYW5zZm9ybShjb2xsZWN0aW9uOiBJZ3hDb2x1bW5Db21wb25lbnRbXSwgZmlsdGVyQ3JpdGVyaWE6IHN0cmluZywgX3BpcGVUcmlnZ2VyOiBudW1iZXIpOiBJZ3hDb2x1bW5Db21wb25lbnRbXSB7XG4gICAgICAgIGlmICghY29sbGVjdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb247XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGNvcHkgPSBjb2xsZWN0aW9uLnNsaWNlKDApO1xuICAgICAgICBpZiAoZmlsdGVyQ3JpdGVyaWEgJiYgZmlsdGVyQ3JpdGVyaWEubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyRnVuYyA9IChjKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyVGV4dCA9IGMuaGVhZGVyIHx8IGMuZmllbGQ7XG4gICAgICAgICAgICAgICAgaWYgKCFmaWx0ZXJUZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZpbHRlclRleHQudG9Mb2NhbGVMb3dlckNhc2UoKS5pbmRleE9mKGZpbHRlckNyaXRlcmlhLnRvTG9jYWxlTG93ZXJDYXNlKCkpID49IDAgfHxcbiAgICAgICAgICAgICAgICAgICAgKGMuY2hpbGRyZW4/LnNvbWUoZmlsdGVyRnVuYykgPz8gZmFsc2UpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvcHkgPSBjb2xsZWN0aW9uLmZpbHRlcihmaWx0ZXJGdW5jKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBQcmVzZXJ2ZSB0aGUgZmlsdGVyZWQgY29sbGVjdGlvbiBmb3IgdXNlIGluIHRoZSBjb21wb25lbnRcbiAgICAgICAgdGhpcy5jb2x1bW5BY3Rpb25zLmZpbHRlcmVkQ29sdW1ucyA9IGNvcHk7XG4gICAgICAgIHJldHVybiBjb3B5O1xuICAgIH1cbn1cblxuQFBpcGUoe1xuICAgIG5hbWU6ICdzb3J0QWN0aW9uQ29sdW1ucycsXG4gICAgcHVyZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hTb3J0QWN0aW9uQ29sdW1uc1BpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcblxuICAgIHB1YmxpYyB0cmFuc2Zvcm0oY29sbGVjdGlvbjogSWd4Q29sdW1uQ29tcG9uZW50W10sIGRpc3BsYXlPcmRlcjogQ29sdW1uRGlzcGxheU9yZGVyLCBfcGlwZVRyaWdnZXI6IG51bWJlcik6IElneENvbHVtbkNvbXBvbmVudFtdIHtcbiAgICAgICAgaWYgKGRpc3BsYXlPcmRlciA9PT0gQ29sdW1uRGlzcGxheU9yZGVyLkFscGhhYmV0aWNhbCkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb24uc29ydCgoYSwgYikgPT4gKGEuaGVhZGVyIHx8IGEuZmllbGQpLmxvY2FsZUNvbXBhcmUoYi5oZWFkZXIgfHwgYi5maWVsZCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb2xsZWN0aW9uO1xuICAgIH1cbn1cblxuQFBpcGUoeyBuYW1lOiAnZGF0YU1hcHBlcicgfSlcbmV4cG9ydCBjbGFzcyBJZ3hHcmlkRGF0YU1hcHBlclBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcblxuICAgIHB1YmxpYyB0cmFuc2Zvcm0oZGF0YTogYW55W10sIGZpZWxkOiBzdHJpbmcsIF86IG51bWJlciwgdmFsOiBhbnksIGlzTmVzdGVkUGF0aDogYm9vbGVhbikge1xuICAgICAgICByZXR1cm4gaXNOZXN0ZWRQYXRoID8gcmVzb2x2ZU5lc3RlZFBhdGgoZGF0YSwgZmllbGQpIDogdmFsO1xuICAgIH1cbn1cblxuQFBpcGUoeyBuYW1lOiAnaWd4U3RyaW5nUmVwbGFjZScgfSlcbmV4cG9ydCBjbGFzcyBJZ3hTdHJpbmdSZXBsYWNlUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuXG4gICAgcHVibGljIHRyYW5zZm9ybSh2YWx1ZTogc3RyaW5nLCBzZWFyY2g6IHN0cmluZyB8IFJlZ0V4cCwgcmVwbGFjZW1lbnQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKHNlYXJjaCwgcmVwbGFjZW1lbnQpO1xuICAgIH1cbn1cblxuQFBpcGUoeyBuYW1lOiAndHJhbnNhY3Rpb25TdGF0ZScgfSlcbmV4cG9ydCBjbGFzcyBJZ3hHcmlkVHJhbnNhY3Rpb25TdGF0ZVBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcblxuICAgIHB1YmxpYyB0cmFuc2Zvcm0ocm93X2lkOiBhbnksIGZpZWxkOiBzdHJpbmcsIHJvd0VkaXRhYmxlOiBib29sZWFuLCB0cmFuc2FjdGlvbnM6IGFueSwgXzogYW55LCBfXzogYW55LCBfX186IGFueSkge1xuICAgICAgICBpZiAocm93RWRpdGFibGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHJvd0N1cnJlbnRTdGF0ZSA9IHRyYW5zYWN0aW9ucy5nZXRBZ2dyZWdhdGVkVmFsdWUocm93X2lkLCBmYWxzZSk7XG4gICAgICAgICAgICBpZiAocm93Q3VycmVudFN0YXRlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSByZXNvbHZlTmVzdGVkUGF0aChyb3dDdXJyZW50U3RhdGUsIGZpZWxkKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gdHJhbnNhY3Rpb25zLmdldFN0YXRlKHJvd19pZCk7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHJlc29sdmVOZXN0ZWRQYXRoKHRyYW5zYWN0aW9uPy52YWx1ZSA/PyB7fSwgZmllbGQpO1xuICAgICAgICAgICAgcmV0dXJuIHRyYW5zYWN0aW9uICYmIHRyYW5zYWN0aW9uLnZhbHVlICYmICh2YWx1ZSB8fCB2YWx1ZSA9PT0gMCB8fCB2YWx1ZSA9PT0gZmFsc2UpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5AUGlwZSh7IG5hbWU6ICdjb2x1bW5Gb3JtYXR0ZXInIH0pXG5leHBvcnQgY2xhc3MgSWd4Q29sdW1uRm9ybWF0dGVyUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuXG4gICAgcHVibGljIHRyYW5zZm9ybSh2YWx1ZTogYW55LCBmb3JtYXR0ZXI6ICh2OiBhbnksIGRhdGE6IGFueSkgPT4gYW55LCByb3dEYXRhOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIGZvcm1hdHRlcih2YWx1ZSwgcm93RGF0YSk7XG4gICAgfVxufVxuXG5AUGlwZSh7IG5hbWU6ICdzdW1tYXJ5Rm9ybWF0dGVyJyB9KVxuZXhwb3J0IGNsYXNzIElneFN1bW1hcnlGb3JtYXR0ZXJQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG5cbiAgICBwdWJsaWMgdHJhbnNmb3JtKHN1bW1hcnlSZXN1bHQ6IElneFN1bW1hcnlSZXN1bHQsIHN1bW1hcnlPcGVyYW5kOiBJZ3hTdW1tYXJ5T3BlcmFuZCxcbiAgICAgICAgc3VtbWFyeUZvcm1hdHRlcjogKHM6IElneFN1bW1hcnlSZXN1bHQsIG86IElneFN1bW1hcnlPcGVyYW5kKSA9PiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIHN1bW1hcnlGb3JtYXR0ZXIoc3VtbWFyeVJlc3VsdCwgc3VtbWFyeU9wZXJhbmQpO1xuICAgIH1cbn1cblxuQFBpcGUoeyBuYW1lOiAnZ3JpZEFkZFJvdycgfSlcbmV4cG9ydCBjbGFzcyBJZ3hHcmlkQWRkUm93UGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBncmlkQVBJOiBHcmlkQmFzZUFQSVNlcnZpY2U8SWd4R3JpZEJhc2VEaXJlY3RpdmUgJiBHcmlkVHlwZT4pIHsgfVxuXG4gICAgcHVibGljIHRyYW5zZm9ybShjb2xsZWN0aW9uOiBhbnksIGlzUGlubmVkID0gZmFsc2UsIF9waXBlVHJpZ2dlcjogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGdyaWQgPSB0aGlzLmdyaWRBUEkuZ3JpZDtcbiAgICAgICAgaWYgKCFncmlkLnJvd0VkaXRhYmxlIHx8ICFncmlkLmNydWRTZXJ2aWNlLnJvdyB8fCBncmlkLmNydWRTZXJ2aWNlLnJvdy5nZXRDbGFzc05hbWUoKSAhPT0gSWd4QWRkUm93Lm5hbWUgfHxcbiAgICAgICAgICAgICFncmlkLmdyaWRBUEkuY3J1ZFNlcnZpY2UuYWRkUm93UGFyZW50IHx8IGlzUGlubmVkICE9PSBncmlkLmdyaWRBUEkuY3J1ZFNlcnZpY2UuYWRkUm93UGFyZW50LmlzUGlubmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gY29sbGVjdGlvbjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb3B5ID0gY29sbGVjdGlvbi5zbGljZSgwKTtcbiAgICAgICAgY29uc3QgcmVjID0gKGdyaWQuY3J1ZFNlcnZpY2Uucm93IGFzIElneEFkZFJvdykucmVjb3JkUmVmO1xuICAgICAgICBjb3B5LnNwbGljZShncmlkLmNydWRTZXJ2aWNlLnJvdy5pbmRleCwgMCwgcmVjKTtcbiAgICAgICAgcmV0dXJuIGNvcHk7XG4gICAgfVxufVxuXG5AUGlwZSh7IG5hbWU6ICdpZ3hIZWFkZXJHcm91cFdpZHRoJyB9KVxuZXhwb3J0IGNsYXNzIElneEhlYWRlckdyb3VwV2lkdGhQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG5cbiAgICBwdWJsaWMgdHJhbnNmb3JtKHdpZHRoOiBhbnksIG1pbldpZHRoOiBhbnksIGhhc0xheW91dDogYm9vbGVhbikge1xuICAgICAgICByZXR1cm4gaGFzTGF5b3V0ID8gJycgOiBgJHtNYXRoLm1heChwYXJzZUZsb2F0KHdpZHRoKSwgbWluV2lkdGgpfXB4YDtcbiAgICB9XG59XG5cbkBQaXBlKHsgbmFtZTogJ2lneEhlYWRlckdyb3VwU3R5bGUnIH0pXG5leHBvcnQgY2xhc3MgSWd4SGVhZGVyR3JvdXBTdHlsZVBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcblxuICAgIHB1YmxpYyB0cmFuc2Zvcm0oc3R5bGVzOiB7IFtwcm9wOiBzdHJpbmddOiBhbnkgfSwgY29sdW1uOiBJZ3hDb2x1bW5Db21wb25lbnQsIF86IG51bWJlcik6IHsgW3Byb3A6IHN0cmluZ106IGFueSB9IHtcbiAgICAgICAgY29uc3QgY3NzID0ge307XG5cbiAgICAgICAgaWYgKCFzdHlsZXMpIHtcbiAgICAgICAgICAgIHJldHVybiBjc3M7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IHByb3Agb2YgT2JqZWN0LmtleXMoc3R5bGVzKSkge1xuICAgICAgICAgICAgY29uc3QgcmVzID0gc3R5bGVzW3Byb3BdO1xuICAgICAgICAgICAgY3NzW3Byb3BdID0gdHlwZW9mIHJlcyA9PT0gJ2Z1bmN0aW9uJyA/IHJlcyhjb2x1bW4pIDogcmVzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNzcztcbiAgICB9XG59XG4iXX0=
|