sigesp 1.0.9-20240524 → 1.0.10-20240526
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/esm2020/lib/core/models/SNO/MDefinicionNomina.model.mjs +4 -2
- package/esm2020/lib/sigesp.service.mjs +7 -5
- package/fesm2015/sigesp.mjs +9 -5
- package/fesm2015/sigesp.mjs.map +1 -1
- package/fesm2020/sigesp.mjs +9 -5
- package/fesm2020/sigesp.mjs.map +1 -1
- package/lib/sigesp.service.d.ts +5 -3
- package/package.json +1 -1
|
@@ -1566,16 +1566,18 @@ export class SigespService {
|
|
|
1566
1566
|
}
|
|
1567
1567
|
/**
|
|
1568
1568
|
*
|
|
1569
|
-
* @param tipo ['default', 'uno', 'cargos'] dafault:Todas las nominas, uno: una nomina,
|
|
1570
|
-
*
|
|
1569
|
+
* @param tipo ['default', 'uno', 'cargos','linea'] dafault:Todas las nominas, uno: una nomina,
|
|
1570
|
+
* 'cargos': nominas por cargos, 'linea': nominas activas por lineas
|
|
1571
|
+
* @param id : Para los tipo: uno y cargos el id es idNomina. Para linea: id es el idEnterprise
|
|
1571
1572
|
* @returns array()
|
|
1572
1573
|
* @description Obtiene las nominas registradas
|
|
1573
1574
|
* @return Observable<IResponse>
|
|
1574
1575
|
* @date 20-10-21
|
|
1576
|
+
* @actualizado 26-05-2024
|
|
1575
1577
|
*
|
|
1576
1578
|
*/
|
|
1577
|
-
getNomina(tipo, id) {
|
|
1578
|
-
return this.http.get(`${this.URL}/dao/sno/definicion_nomina_dao.php?tipo=${tipo}&id=${id}`, { headers: this.getHttpHeaders() }).pipe(
|
|
1579
|
+
getNomina(tipo, id, act) {
|
|
1580
|
+
return this.http.get(`${this.URL}/dao/sno/definicion_nomina_dao.php?tipo=${tipo}&id=${id}`, { headers: this.getHttpHeaders() }).pipe(map((res) => {
|
|
1579
1581
|
if (res.success) {
|
|
1580
1582
|
res.data = res.data.map(e => new MDefinicionNomina(e));
|
|
1581
1583
|
}
|
|
@@ -2047,4 +2049,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
2047
2049
|
providedIn: 'root'
|
|
2048
2050
|
}]
|
|
2049
2051
|
}], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.MatDialog }, { type: i3.ToastrService }]; } });
|
|
2050
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnZXNwLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zaWdlc3Avc3JjL2xpYi9zaWdlc3Auc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDNUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDbEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDeEQsT0FBTyxFQUFpQyxXQUFXLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUVqRixPQUFPLEVBQWMsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNqRSxPQUFPLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFckUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saURBQWlELENBQUM7QUFDcEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDL0UsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDbkYsT0FBTyxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUV4RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUU3RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFB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QUFHLElBQUUsR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLElBQUssS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLElBQUssS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLElBQUssS0FBSyxDQUFDLE9BQU8sSUFBRSxFQUFFO2VBQy9HLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRyxJQUFLLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRyxJQUFJLEtBQUssQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFLLEtBQUssQ0FBQyxPQUFPLElBQUksRUFBRSxJQUFLLEtBQUssQ0FBQyxPQUFPLElBQUksRUFBRSxFQUFHO1lBQzlHLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDSDs7Ozs7O09BTUc7SUFDTSxRQUFRLENBQUMsS0FBVztRQUN6QixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLElBQUssS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHO2VBQzVHLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFFLEdBQUcsSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFFLEdBQUcsSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFFLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO2VBQzdHLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRyxJQUFNLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRyxJQUFLLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRyxJQUFHLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRztlQUMxRyxLQUFLLENBQUMsR0FBRyxJQUFFLEdBQUcsSUFBTSxLQUFLLENBQUMsR0FBRyxJQUFFLEdBQUcsSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFFLEdBQUcsSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFFLEdBQUcsSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFFLEdBQUcsSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFFLEdBQUc7ZUFDMUcsS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLElBQUcsS0FBSyxDQUFDLE9BQU8sSUFBRSxJQUFJLElBQUssS0FBSyxDQUFDLE9BQU8sSUFBRSxHQUFHLElBQUcsS0FBSyxDQUFDLE9BQU8sSUFBRSxHQUFHO2VBQ2xHLEtBQUssQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFLLEtBQUssQ0FBQyxPQUFPLElBQUksRUFBRSxJQUFLLEtBQUssQ0FBQyxPQUFPLElBQUksRUFBRSxFQUFFO1lBQ3ZFLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRDs7Ozs7S0FLQztJQUNPLFFBQVEsQ0FBQyxLQUFXO1FBQzFCLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFFLEdBQUcsSUFBSyxLQUFLLENBQUMsR0FBRyxJQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLENBQUMsSUFBSyxLQUFLLENBQUMsR0FBRyxJQUFFLEdBQUcsSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFFLEdBQUc7ZUFDOUcsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRyxJ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QyxFQUFFLENBQUMsSUFBSSxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQzNEO1lBQ0QsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQzs7MEdBdm1GWSxhQUFhOzhHQUFiLGFBQWEsY0FGWixNQUFNOzJGQUVQLGFBQWE7a0JBSHpCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTVByZWZpam8gfSBmcm9tICcuL2NvcmUvbW9kZWxzL0NGRy9NUHJlZmlqby5tb2RlbCc7XHJcbmltcG9ydCB7IE1FbnRlcnByaXNlIH0gZnJvbSAnLi9jb3JlL21vZGVscy9DRkcvRW50ZXJwcmlzZS5tb2RlbCc7XHJcbmltcG9ydCB7IE1QZXJzb25hbE5vbWluYSB9IGZyb20gJy4vY29yZS9tb2RlbHMvU05PL01QZXJzb25hbE5vbWluYS5tb2RlbCc7XHJcbmltcG9ydCB7IE1Ib2phVGllbXBvIH0gZnJvbSAnLi9jb3JlL21vZGVscy9TTk8vTUhvamFUaWVtcG8ubW9kZWwnO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1Vc3VhcmlvIH0gZnJvbSAnLi9jb3JlL21vZGVscy9TU1MvdXNlci5tb2RlbCc7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBFcnJvclJlc3BvbnNlLCBIdHRwSGVhZGVyc30gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBJUmVxdWVzdCB9IGZyb20gJy4vY29yZS9pbnRlcmZhY2VzL1JlcXVlc3QnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IE1Qcm92ZWVkb3IgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1JQQy9wcm92ZWVkb3Jlcy5tb2RlbCc7XHJcbmltcG9ydCB7IG1hcCwgY2F0Y2hFcnJvciwgcmV0cnkgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IE1Vc3VhcmlvUHJlZmlqbyB9IGZyb20gJy4vY29yZS9tb2RlbHMvQ0ZHL3VzZXJQcmVmaXgubW9kZWwnO1xyXG5pbXBvcnQgeyBJQ2F0YWxvZ28sIGZpbHRlckRhdGEgfSBmcm9tICcuL2NvcmUvaW50ZXJmYWNlcy9DYXRhbG9nbyc7XHJcbmltcG9ydCB7IENhdGFsb2dvQ29tcG9uZW50IH0gZnJvbSAnLi9zaGFyZWQvY29tcG9uZW50cy9jYXRhbG9nby9jYXRhbG9nby5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBNQ3VlbnRhUHJlc3VwdWVzdG8gfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NQRy9jdWVudGFQcmVzdXB1ZXN0by5tb2RlbCc7XHJcbmltcG9ydCB7IE1DdWVudGFJbnN0aXR1Y2lvbmFsIH0gZnJvbSAnLi9jb3JlL21vZGVscy9TQ0cvY3VlbnRhSW5zdGl0dWNpb25hbC5tb2RlbCc7XHJcbmltcG9ydCB7IE1Nb25lZGEsIE1Nb25lZGFDb25maWcgfSBmcm9tICcuL2NvcmUvbW9kZWxzL0NGRy9tb25lZGEubW9kZWwnO1xyXG5pbXBvcnQgeyBUb2FzdHJTZXJ2aWNlIH0gZnJvbSAnbmd4LXRvYXN0cic7XHJcbmltcG9ydCB7IE1VbmlkYWRUcmlidXRhcmlhIH0gZnJvbSAnLi9jb3JlL21vZGVscy9TVEIvdW5pZGFkVHJpYnV0YXJpYS5tb2RlbCc7XHJcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgVW50eXBlZEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQ29uZmlybUNvbXBvbmVudCB9IGZyb20gJy4vc2hhcmVkL2NvbXBvbmVudHMvY29uZmlybS9jb25maXJtLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE1Db25maWd1cmFjaW9uU0NHIH0gZnJvbSAnLi9jb3JlL21vZGVscy9TQ0cvY29uZmlndXJhY2lvblNDRy5tb2RlbCc7XHJcbmltcG9ydCB7IE1QbGFuVW5pY29DdWVudGEgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NDRy9wbGFuVW5pY29DdWVudGEubW9kZWwnO1xyXG5pbXBvcnQgeyBJQ29uZXhpb24gfSBmcm9tICcuL2NvcmUvaW50ZXJmYWNlcy9Vc3VhcmlvJztcclxuaW1wb3J0IHsgVGFibGVTZWxlY3RDb21wb25lbnQgfSBmcm9tICcuL3NoYXJlZC9jb21wb25lbnRzL3RhYmxlLXNlbGVjdC90YWJsZS1zZWxlY3QuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTUNvbmZpZ3VyYXRpb25TUEcgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NQRy9jb25maWd1cmF0aW9uU1BHLm1vZGVsJztcclxuaW1wb3J0IHsgTUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYU9uZSwgTUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYVR3bywgTUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYVRocmVlLCBNRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhRm91ciwgTUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYUZpdmVDb21wbGV0ZSwgTUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYUZpdmUsIE1Fc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFUaHJlZUNvbXBsZXRlLCBNQWxsU3RydWN0dXJlIH0gZnJvbSAnLi9jb3JlL21vZGVscy9TUEcvZXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhLm1vZGVsJztcclxuaW1wb3J0IHsgSUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYU9uZSwgSUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYVR3bywgSUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYVRocmVlLCBJRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhRm91ciwgSUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYUZpdmVDb21wbGV0ZSwgSUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYUZpdmUgfSBmcm9tICcuL2NvcmUvaW50ZXJmYWNlcy9Fc3RydWN0dXJhUHJlc3VwdWVzdGFyaWEnO1xyXG5pbXBvcnQgeyBNQ2VudHJvQ29zdG8sIE1Vc3VhcmlvQ2VudHJvQ29zdG8gfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NDRy9jZW50cm9Db3N0by5tb2RlbCc7XHJcbmltcG9ydCB7IE1GdWVudGVGaW5hbmNpYW1pZW50byB9IGZyb20gJy4vY29yZS9tb2RlbHMvU1BHL2Z1ZW50ZUZpbmFuY2lhbWllbnRvLm1vZGVsJztcclxuaW1wb3J0IHsgTUN1ZW50YUVncmVzb3MgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NQRy9leHBlbnNpdmVBY2NvdW50Lm1vZGVsJztcclxuaW1wb3J0IHsgQ2F0YWxvZ29Fc3RydWN0dXJhc0NvbXBvbmVudCB9IGZyb20gJy4vc2hhcmVkL2NvbXBvbmVudHMvY2F0YWxvZ28tZXN0cnVjdHVyYXMvY2F0YWxvZ28tZXN0cnVjdHVyYXMuY29tcG9uZW50JztcclxuaW1wb3J0IHsgSVVwZGF0ZURpc3RyaWJ1dGlvbiwgSVVwZGF0ZURpc3RyaWJ1dGlvbjIsIElVcGRhdGVEaXN0cmlidXRpb25JbmdyZXNvcywgSVVwZGF0ZURpc3RyaWJ1dGlvbkluZ3Jlc29zMiB9IGZyb20gJy4vY29yZS9pbnRlcmZhY2VzL0N1ZW50YUVncmVzb3MnO1xyXG5pbXBvcnQgeyBDYXRhbG9nb0RvYmxlSW5wdXRDb21wb25lbnQgfSBmcm9tICcuL3NoYXJlZC9jb21wb25lbnRzL2NhdGFsb2dvLWRvYmxlLWlucHV0L2NhdGFsb2dvLWRvYmxlLWlucHV0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE1TaXN0ZW1hLCBNVXN1YXJpb1Npc3RlbWEgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NTUy9zaXN0ZW1hJztcclxuaW1wb3J0IHsgSUNvbXByb2JhbnRlUHJlc3VwdWVzdGFyaW9FZ3Jlc29zLCBJQ29tcHJvYmFudGVQcmVzdXB1ZXN0YXJpb0luZ3Jlc29zIH0gZnJvbSAnLi9jb3JlL2ludGVyZmFjZXMvQ29tcHJvYmFudGVQcmVzdXB1ZXN0YXJpbyc7XHJcbmltcG9ydCB7IE1Db21wcm9iYW50ZVByZXN1cHVlc3RhcmlvRWdyZXNvcywgTUNvbXByb2JhbnRlUHJlc3VwdWVzdGFyaW9JbmdyZXNvcyB9IGZyb20gJy4vY29yZS9tb2RlbHMvU1BHL2NvbXByb2JhbnRlUHJlc3VwdWVzdGFyaW8ubW9kZWwnO1xyXG5pbXBvcnQgeyBNQ3VlbnRhSW5ncmVzb3MgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NDRy9JbmNvbWVBY2NvdW50JztcclxuaW1wb3J0IHsgTUluY29tZVN0cnVjdHVyZUFjY291bnQgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NQRy9pbmNvbWVTdHJ1Y3R1cmVBY2NvdW50Lm1vZGVsJztcclxuaW1wb3J0IHsgTU9yZ2FuaXphdGlvblR5cGUgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NQRy9vcmdhbml6YXRpb25UeXBlLm1vZGVsJztcclxuaW1wb3J0IHsgTVNwZWNpYWx0eSB9IGZyb20gJy4vY29yZS9tb2RlbHMvUlBDL3NwZWNpYWx0eS5tb2RlbCc7XHJcbmltcG9ydCB7IE1Eb2N1bWVudCB9IGZyb20gJy4vY29yZS9tb2RlbHMvUlBDL2RvY3VtZW50Lm1vZGVsJztcclxuaW1wb3J0IHsgTUNsYXNpZmljYXRpb24gfSBmcm9tICcuL2NvcmUvbW9kZWxzL1JQQy9jbGFzaWZpY2F0aW9uLm1vZGVsJztcclxuaW1wb3J0IHsgTUNvdW50cnksIE1TdGF0ZSwgTU11bmljaXBhbGl0eSwgTVBhcmlzaCwgTUNpdHksIE1Db21tdW5pdHkgfSBmcm9tICcuL2NvcmUvbW9kZWxzL0NGRy9sb2NhdGlvbnMubW9kZWwnO1xyXG5pbXBvcnQgeyBNUHJvdmlkZXJCZW5lZmljaWFyeSB9IGZyb20gJy4vY29yZS9tb2RlbHMvUlBDL3Byb3ZpZGVyQmVuZWZpY2lhcnkubW9kZWwnO1xyXG5pbXBvcnQgeyBNU2lnZWNvZkJhbmssIE1CYW5rLCBNQmFua0FjY291bnRUeXBlLCBNQWdlbmNpYUJhbmNvLCBNQ3VlbnRhQmFuY28gfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NDQi9iYW5rLm1vZGVsJztcclxuaW1wb3J0IHsgSVJlc3BvbnNlIH0gZnJvbSAnLi9jb3JlL2ludGVyZmFjZXMvUmVzcG9uc2UnO1xyXG5pbXBvcnQgeyBNQ29uZmlndXJhdGlvblJQQyB9IGZyb20gJy4vY29yZS9tb2RlbHMvUlBDL2NvbmZpZ3VyYWNpb25SUEMubW9kZWwnO1xyXG5pbXBvcnQgeyBNQ29uZmlnU09DIH0gZnJvbSAnLi9jb3JlL21vZGVscy9TT0MvY29uZmlndXJhY2lvblNPQy5tb2RlbCc7XHJcbmltcG9ydCB7IE1EZWR1Y3Rpb25UeXBlIH0gZnJvbSAnLi9jb3JlL21vZGVscy9TVEIvZGVkdWN0aW9uVHlwZS5tb2RlbCc7XHJcbmltcG9ydCB7IE1DYXJnbyB9IGZyb20gJy4vY29yZS9tb2RlbHMvU09DL2NoYXJnZS5tb2RlbCc7XHJcbmltcG9ydCB7IE1Db25jZXB0b1JldGVuY2lvbiwgTURlZHVjdGlvbiB9IGZyb20gJy4vY29yZS9tb2RlbHMvU1RCL2RlZHVjdGlvbi5tb2RlbCc7XHJcbmltcG9ydCB7IE1Db25maWdTU1MgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NTUy9zZWN1cml0eUNvbmZpZ3VyYXRpb24ubW9kZWwnO1xyXG5pbXBvcnQgeyBNQWRtaW5pc3RyYXRpdmVVbml0IH0gZnJvbSAnLi9jb3JlL21vZGVscy9TUEcvYWRtaW5pc3RyYXRpdmVVbml0Lm1vZGVsJztcclxuaW1wb3J0IHsgTUNvbXBvbmVudCB9IGZyb20gJy4vY29yZS9tb2RlbHMvU1NTL2NvbXBvbmVudC5tb2RlbCc7XHJcbmltcG9ydCB7IE1Mb2cgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NTUy9sb2cubW9kZWwnO1xyXG5pbXBvcnQgeyBNU2VydmljZUNoYXJnZSB9IGZyb20gJy4vY29yZS9tb2RlbHMvU09DL3NlcnZpY2VDaGFyZ2UubW9kZWwnO1xyXG5pbXBvcnQgeyBNRW1wcmVzYSB9IGZyb20gJy4vY29yZS9tb2RlbHMvQ0ZHL0VtcHJlc2EubW9kZWwnO1xyXG5pbXBvcnQgeyBNQ29uY2VwdG9zQ1hQIH0gZnJvbSAnLi9jb3JlL21vZGVscy9DWFAvTUNvbmNlcHRvc0NYUC5tb2RlbCc7XHJcbmltcG9ydCB7IE1UaXBvRG9jdW1lbnRvQ1hQIH0gZnJvbSAnLi9jb3JlL21vZGVscy9DWFAvTVRpcG9Eb2N1bWVudG9DWFAubW9kZWwnO1xyXG5pbXBvcnQgeyBNQ29uZmlndXJhY2lvblNOTyB9IGZyb20gJy4vY29yZS9tb2RlbHMvU05PL01Db25maWd1cmFjaW9uU05PLm1vZGVsJztcclxuaW1wb3J0IHsgTURlZmluaWNpb25Ob21pbmEgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NOTy9NRGVmaW5pY2lvbk5vbWluYS5tb2RlbCc7XHJcbmltcG9ydCB7IE1Bc2lnbmFjaW9uQ2FyZ28gfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NOTy9NQXNpZ25hY2lvbkNhcmdvLm1vZGVsJztcclxuaW1wb3J0IHsgTU5vbWluYVNpbXBsZSB9IGZyb20gJy4vY29yZS9tb2RlbHMvU05PL01Ob21pbmFTaW1wbGUubW9kZWwnO1xyXG5pbXBvcnQgeyBNUGVyc29uYWwgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NOTy9NUGVyc29uYWwubW9kZWwnO1xyXG5pbXBvcnQgeyBNRW50cmFkYVN1bWluaXN0cm9zIH0gZnJvbSAnLi9jb3JlL21vZGVscy9TSVYvTUVudHJhZGFTdW1pbmlzdHJvLm1vZGVsJztcclxuaW1wb3J0IFN3YWwgZnJvbSAnc3dlZXRhbGVydDInXHJcbmltcG9ydCAqIGFzIENyeXB0b0pTIGZyb20gJ2NyeXB0by1qcyc7IFxyXG5pbXBvcnQgeyBNU25vTG9nIH0gZnJvbSAnLi9jb3JlL21vZGVscy9TTk8vTUF1ZGl0b3JpYS5tb2RlbCc7XHJcbmltcG9ydCB7IE1UaXBvRGVwb3NpdG9zIH0gZnJvbSAnLi9jb3JlL21vZGVscy9TSVYvTVRpcG9EZXBvc2l0b3MubW9kZWwnO1xyXG5pbXBvcnQgeyBNQ29tdW5pZGFkIH0gZnJvbSAnLi9jb3JlL21vZGVscy9DRkcvY29tdW5pZGFkLm1vZGVsJztcclxuaW1wb3J0IHsgTUV4Y2hhbmdlUmF0ZSB9IGZyb20gJy4vY29yZS9tb2RlbHMvQ0ZHL1Rhc2FDYW1iaW8ubW9kZWwnO1xyXG5pbXBvcnQgeyBNQ2FyZ29zQWRpY2lvbmFsZXN9IGZyb20gJy4vY29yZS9tb2RlbHMvU1RCL01DYXJnb3NBZGljaW9uYWxlcyc7XHJcbmltcG9ydCB7IE1DbGllbnQgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NGVi9NQ2xpZW50ZU1vZGVsJztcclxuXHJcbiAgXHJcbiAgQEluamVjdGFibGUoe1xyXG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbiAgfSlcclxuICBleHBvcnQgY2xhc3MgU2lnZXNwU2VydmljZSB7XHJcblxyXG4gICAgcHVibGljIHVzdWFyaW9BY3Rpdm86IE1Vc3VhcmlvID0gbnVsbDtcclxuICAgIHB1YmxpYyBVUkw6IHN0cmluZztcclxuICAgIHB1YmxpYyBjdXJyZW50Q29tcG9uZW50OiBNQ29tcG9uZW50ID0gbnVsbDtcclxuICAgIHB1YmxpYyB1c2VyTWVudSAgPSBudWxsOyBcclxuICAgIHB1YmxpYyBpcF9hZHJlc3MgPSAnMTI3LjAuMC4xJztcclxuICAgIC8vIHB1YmxpYyBVUkw6IHN0cmluZyA9IFwiaHR0cDovLzE5Mi4xNjguMS42Ny9zaWdlc3BfcGhwXCI7XHJcbiAgICAvLyB1c3VhcmlvQWN0aXZvOiBNVXN1YXJpbyA9IHtcclxuICAgIC8vICAgY29uZXhpb25EQjoge1xyXG4gICAgLy8gICAgIGJhc2VEZURhdG9zOiBcImRiX3NpZ2VzcF9kZW1vdjNcIixcclxuICAgIC8vICAgICBnZXN0b3I6IFwicG9zdGdyZXNcIixcclxuICAgIC8vICAgICBsb2dpbjogXCJwb3N0Z3Jlc1wiLFxyXG4gICAgLy8gICAgIG5vbWJyZTogXCJTSUdFU1AgQy5BLCBzZXJ2aWRvciA4NSAoU0UgUFVFREUgVVNBUilcIixcclxuICAgIC8vICAgICBwYXNzd29yZDogXCJhZG1pbnNpZ2VzcFwiLFxyXG4gICAgLy8gICAgIHB1ZXJ0bzogXCI1NDMyXCIsXHJcbiAgICAvLyAgICAgc2Vydmlkb3I6IFwiMTkyLjE2OC4xLjY3XCIsXHJcbiAgICAvLyAgIH0sXHJcbiAgICAvLyAgIGVtcHJlc2E6IHtcclxuICAgIC8vICAgICBpZDogMSxcclxuICAgIC8vICAgICBwZXJpb2RvRmlzY2FsOiBcIjIwMTktMDEtMDFcIixcclxuICAgIC8vICAgICB0aXR1bG86IFwiU0lHRVNQIEMuQS5cIlxyXG4gICAgLy8gICB9LFxyXG4gICAgLy8gICBub21icmU6IFwiU0lHRVNQXCIsXHJcbiAgICAvLyAgIHRva2VuOiBcImV5SjBlWEFpT2lKS1YxUWlMQ0poYkdjaU9pSklVek00TkNKOS5leUp3WVhOemQyOXlaRjkxYzNVaU9pSXhNak0wTlRZM09DSXNJbWxrWDJWdGNISmxjMkVpT2lJeElpd2lkR2wwWlcxd0lqb2lVMGxIUlZOUUlFTXVRUzRpTENKd1pYSm1hWE5qWVd3aU9pSXlNREU1TFRBeExUQXhJaXdpYkY5MWMzVmhjbWx2SWpvaVUwbEhSVk5RSWl3aWMyVnlkbWxrYjNJaU9pSXhPVEl1TVRZNExqRXVOamNpTENKd2RXVnlkRzhpT2lJMU5ETXlJaXdpWW1GelpXUmxaR0YwYjNNaU9pSmtZbDl6YVdkbGMzQmZaR1Z0YjNZeklpd2liRzluYVc0aU9pSndiM04wWjNKbGN5SXNJbkJoYzNOM2IzSmtJam9pWVdSdGFXNXphV2RsYzNBaWZRLlBJU0JTZnVlUkFkc1dzSjFBYUdjVkNnVy0yYUprZ3R2TGRzVzBCZ281bHR5WW93RDhveV9ucUs1c2pFMlVSR2tcIlxyXG4gICAgLy8gfVxyXG4gICAgLy8gcHJvY2VkZTogc3RyaW5nID0gJ1NDR0NNUCc7XHJcbiAgICAvLyBjb2RzaXM6IHN0cmluZyA9ICdTQ0cnO1xyXG5cclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsIHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2csIHByaXZhdGUgdG9hc3Q6IFRvYXN0clNlcnZpY2UpIHsgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFZhbGlkYSBxdWUgc2VsbyBzZSBlc2NyaWJhbiBndWlvbmVzIHkgOVxyXG4gICAgICogQHBhcmFtIGV2ZW50XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvbmx5R3Vpb25lc0FuZE5pbmUoZXZlbnQ6IGFueSkge1xyXG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAnLScgfHwgZXZlbnQua2V5ID09PSAnOScpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgIFxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBBY3R1YWxpemEgZWwgbW9uY21wIGRlIHNpZ2VzcF9jb21wcm9iYW50ZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdXBkYXRlQ29tcHJvYmFudGVBbW91bnQoYW1vdW50OiBudW1iZXIsIGlkQ29tcHJvYmFudGU6IG51bWJlcik6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucHV0PGFueT4oYCR7dGhpcy5VUkx9L2Rhby9zaWdlc3AvY29tcHJvYmFudGVfZGFvLnBocD9tb250bz10cnVlYCwge1xyXG4gICAgICAgIG1vbmNtcDogYW1vdW50LFxyXG4gICAgICAgIGlkX2NvbXByb2JhbnRlOiBpZENvbXByb2JhbnRlXHJcbiAgICAgIH0sIHtcclxuICAgICAgICBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKClcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQWN0dWFsaXphIGVsIGNvbXByb2JhbnRlIHByc3VwdWVzdGFyaW8gZGUgRWdyZXNvc1xyXG4gICAgICogQHBhcmFtIGNvbXByb2JhbnRlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB1cGRhdGVDb21wcm9iYW50ZVByZXN1cHVlc3RhcmlvRWdyZXNvcyhjb21wcm9iYW50ZTogSUNvbXByb2JhbnRlUHJlc3VwdWVzdGFyaW9FZ3Jlc29zKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8YW55PihgJHt0aGlzLlVSTH0vZGFvL3NwZy9jb21wcm9iYW50ZV9wcmVzdXB1ZXN0YXJpb19lZ3Jlc29zX2Rhby5waHBgLFxyXG4gICAgICB7IC4uLmNvbXByb2JhbnRlLCBpZDogY29tcHJvYmFudGUuaWRfZHRfc3BnY21wIH0sIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgZWwgY29tcHJvYmFudGUgcHJlc3VwdWVzdGFyaW8gZGUgRWdyZXNvc1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0Q29tcHJvYmFudGVQcmVzdXB1ZXN0YXJpb0VncmVzb3MoKTogT2JzZXJ2YWJsZTxNQ29tcHJvYmFudGVQcmVzdXB1ZXN0YXJpb0VncmVzb3NbXT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxNQ29tcHJvYmFudGVQcmVzdXB1ZXN0YXJpb0VncmVzb3NbXT4oYCR7dGhpcy5VUkx9L2Rhby9zcGcvY29tcHJvYmFudGVfcHJlc3VwdWVzdGFyaW9fZWdyZXNvc19kYW8ucGhwYCwge1xyXG4gICAgICAgIGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKVxyXG4gICAgICB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHJlcy5kYXRhLm1hcChlbGVtZW50ID0+IG5ldyBNQ29tcHJvYmFudGVQcmVzdXB1ZXN0YXJpb0VncmVzb3MoZWxlbWVudCkpKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEFjdHVhbGl6YSBlbCBjb21wcm9iYW50ZSBwcnN1cHVlc3RhcmlvIGRlIEluZ3Jlc29zXHJcbiAgICAgKiBAcGFyYW0gY29tcHJvYmFudGVcclxuICAgICAqL1xyXG4gICAgcHVibGljIHVwZGF0ZUNvbXByb2JhbnRlUHJlc3VwdWVzdGFyaW9JbmdyZXNvcyhjb21wcm9iYW50ZTogSUNvbXByb2JhbnRlUHJlc3VwdWVzdGFyaW9JbmdyZXNvcyk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucHV0PGFueT4oYCR7dGhpcy5VUkx9L2Rhby9zcGcvY29tcHJvYmFudGVfcHJlc3VwdWVzdGFyaW9fZWdyZXNvc19kYW8ucGhwYCxcclxuICAgICAgeyAuLi5jb21wcm9iYW50ZSwgaWQ6IGNvbXByb2JhbnRlLmlkX2R0X3NwaWNtcCB9LCB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGVsIGNvbXByb2JhbnRlIHByZXN1cHVlc3RhcmlvIGRlIEluZ3Jlc29zXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRDb21wcm9iYW50ZVByZXN1cHVlc3RhcmlvSW5ncmVzb3MoKTogT2JzZXJ2YWJsZTxNQ29tcHJvYmFudGVQcmVzdXB1ZXN0YXJpb0luZ3Jlc29zW10+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TUNvbXByb2JhbnRlUHJlc3VwdWVzdGFyaW9JbmdyZXNvc1tdPihgJHt0aGlzLlVSTH0vZGFvL3NwaS9jb21wcm9iYW50ZV9wcmVzdXB1ZXN0YXJpb19pbmdyZXNvc19kYW8ucGhwYCwge1xyXG4gICAgICAgIGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKVxyXG4gICAgICB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHJlcy5kYXRhLm1hcChlbGVtZW50ID0+IG5ldyBNQ29tcHJvYmFudGVQcmVzdXB1ZXN0YXJpb0luZ3Jlc29zKGVsZW1lbnQpKSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBBY3R1YWxpemEgbGEgZGlzdHJpYnVjacOzbiBkZSBsYSBjdWVudGEgZGUgZWdyZXNvXHJcbiAgICAgKiBAcGFyYW0gZGlzdHJpYnV0aW9uXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB1cGRhdGVEaXN0cmlidXRpb25FeHBlbnNlQWNjb3VudChkaXN0cmlidXRpb246IElVcGRhdGVEaXN0cmlidXRpb24pOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnB1dChgJHt0aGlzLlVSTH0vZGFvL3NwZy9jdWVudGFzX2VncmVzb3NfZGFvLnBocGAsIGRpc3RyaWJ1dGlvbixcclxuICAgICAge2hlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKX0pO1xyXG4gICAgfVxyXG5cclxuICAgICAgIC8qKlxyXG4gICAgICogQEFjdHVhbGl6YSBsYSBkaXN0cmlidWNpw7NuIGRlIGxhIGN1ZW50YSBkZSBlZ3Jlc29cclxuICAgICAqIEBwYXJhbSBkaXN0cmlidXRpb25cclxuICAgICAqL1xyXG4gICAgICAgcHVibGljIHVwZGF0ZURpc3RyaWJ1dGlvbkV4cGVuc2VBY2NvdW50MihkaXN0cmlidXRpb246IElVcGRhdGVEaXN0cmlidXRpb24yW10pOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucHV0KGAke3RoaXMuVVJMfS9kYW8vc3BnL2N1ZW50YXNfZWdyZXNvc19kYW8ucGhwYCwgZGlzdHJpYnV0aW9uLFxyXG4gICAgICAgIHtoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCl9KTtcclxuICAgICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQEFjdHVhbGl6YSBsYSBkaXN0cmlidWNpw7NuIGRlIGxhIGN1ZW50YSBkZSBJbmdyZXNvXHJcbiAgICAgKiBAcGFyYW0gZGlzdHJpYnV0aW9uXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB1cGRhdGVEaXN0cmlidXRpb25JbmNvbWVBY2NvdW50KGRpc3RyaWJ1dGlvbjogSVVwZGF0ZURpc3RyaWJ1dGlvbkluZ3Jlc29zKTogT2JzZXJ2YWJsZTxJUmVzcG9uc2U+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3NwaS9jdWVudGFzX2luZ3Jlc29zX2Rhby5waHBgLCBkaXN0cmlidXRpb24sXHJcbiAgICAgIHtoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCl9KVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3Mpe1xyXG4gICAgICAgICAgICByZXMuZGF0YSA9IG5ldyBNQ3VlbnRhSW5ncmVzb3MocmVzLmRhdGEpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGVEaXN0cmlidXRpb25JbmNvbWVBY2NvdW50MihkaXN0cmlidXRpb246IElVcGRhdGVEaXN0cmlidXRpb25JbmdyZXNvczJbXSk6IE9ic2VydmFibGU8SVJlc3BvbnNlPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucHV0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zcGkvY3VlbnRhc19pbmdyZXNvc19kYW8ucGhwYCwgZGlzdHJpYnV0aW9uLFxyXG4gICAgICB7aGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpfSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKXtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSBuZXcgTUN1ZW50YUluZ3Jlc29zKHJlcy5kYXRhKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBBY3R1YWxpemEgbGEgZGlzdHJpYnVjacOzbiBkZSBsYSBjdWVudGEgZGUgSW5ncmVzbyBkZSBFc3RydWN0dXJhXHJcbiAgICAgKiBAcGFyYW0gZGlzdHJpYnV0aW9uXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB1cGRhdGVEaXN0cmlidXRpb25JbmNvbWVTdHJ1Y3R1cmVBY2NvdW50KGRpc3RyaWJ1dGlvbjogSVVwZGF0ZURpc3RyaWJ1dGlvbkluZ3Jlc29zLCBsZXZlbDogbnVtYmVyKTogT2JzZXJ2YWJsZTxJUmVzcG9uc2U+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3NwaS9jdWVudGFfZXN0cnVjdHVyYV9pbmdyZXNvc19kYW8ucGhwYCwgZGlzdHJpYnV0aW9uLFxyXG4gICAgICB7aGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpfSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKXtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSBuZXcgTUluY29tZVN0cnVjdHVyZUFjY291bnQocmVzLmRhdGEsIGxldmVsKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhcyBjdWVudGFzIHBvciBuaXZlbCBkZSBsYXMgY3VlbmF0cyBkZSBlZ3Jlc29zXHJcbiAgICAgKiBAcGFyYW0gbGV2ZWwgTsO6bWVybyBkZSBuaXZlbGVzIGRlIGxhIGNvbmZpZ3VyYWNpw7NuXHJcbiAgICAgKiBAcGFyYW0gaWQgaWQgZGVsIG5pdmVsIDMgbyA1IHF1ZSBzZSB2YSBhIGJ1c2NhclxyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPE1DdWVudGFFZ3Jlc29zW10+XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRFeHBlbnNlQWNjb3VudHNGb3JMZXZlbChsZXZlbDogbnVtYmVyLCBpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxNQ3VlbnRhRWdyZXNvc1tdPntcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TUN1ZW50YUVncmVzb3NbXT4oYCR7dGhpcy5VUkx9L2Rhby9zcGcvY3VlbnRhc19lZ3Jlc29zX2Rhby5waHA/bGV2ZWw9JHtsZXZlbH0maWQ9JHtpZH1gLFxyXG4gICAgICB7aGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpfSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXM6YW55KSA9PiByZXMuZGF0YS5tYXAoZWxlbWVudCA9PiBuZXcgTUN1ZW50YUVncmVzb3MoZWxlbWVudCkpKVxyXG4gICAgICApXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQWJyZSBlbCBjYXTDoWxvZ28gZGUgZXN0cnVjdHVyYSBwcmVzdXB1ZXNhcmlhXHJcbiAgICAgKiBAcGFyYW0gZGF0YSBEYXRhIHF1ZSBzZSB2YSBhIG1vc3RyYXJcclxuICAgICAqIEBwYXJhbSBjb25maWd1cmF0aW9uIENvbmZpZ3VyYWNpw7NuIGRlIGxhIGVzdHJ1Y3R1cmFcclxuICAgICAqIEByZXR1cm4gUHJvbWlzZTxhbnk+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb3BlbkNhdGFsb2dvRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhKGRhdGE6IGFueVtdLCBjb25maWd1cmF0aW9uOiBNQ29uZmlndXJhdGlvblNQRyk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgIGNvbnN0IGNhdGFsb2dvID0gdGhpcy5kaWFsb2cub3BlbihDYXRhbG9nb0VzdHJ1Y3R1cmFzQ29tcG9uZW50LCB7XHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgZGF0YSxcclxuICAgICAgICAgIGNvbmZpZ3VyYXRpb25cclxuICAgICAgICB9LFxyXG4gICAgICAgIHdpZHRoOiAnMTAwMHB4JyxcclxuICAgICAgICBtYXhIZWlnaHQ6ICc5MHZoJ1xyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIGNhdGFsb2dvLmFmdGVyQ2xvc2VkKCkudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYXMgY3VlbnRhcyBkZSBlZ3Jlc29zXHJcbiAgICAgKiBAcGFyYW0gb25seUF2YWlsYWJsZVxyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPE1DdWVudGFFZ3Jlc29zW10+XHJcbiAgICAgKi9cclxuICAgICBwdWJsaWMgZ2V0RXhwZW5zZUFjY291bnRzKG9ubHlBdmFpbGFibGU6IGJvb2xlYW4gPSBmYWxzZSk6IE9ic2VydmFibGU8TUN1ZW50YUVncmVzb3NbXT57XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE1DdWVudGFFZ3Jlc29zW10+KGAke3RoaXMuVVJMfS9kYW8vc3BnL2N1ZW50YXNfZWdyZXNvc19kYW8ucGhwJHtcclxuICAgICAgICBvbmx5QXZhaWxhYmxlID8gJz9hdmFpbGFibGU9dHJ1ZScgOiAnJ1xyXG4gICAgICB9YCwge2hlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKX0pXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzOmFueSkgPT4gcmVzLmRhdGEubWFwKGVsZW1lbnQgPT4gbmV3IE1DdWVudGFFZ3Jlc29zKGVsZW1lbnQpKSlcclxuICAgICAgKVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgdG9kYXMgbGFzIGVzdHJ1Y3R1cmFzIHByZXN1cHVldHNhcmlhcyBkZSBsYXMgNSB0YWJsYXNcclxuICAgICAqIEByZXR1cm4gUHJvbWlzZTxNQWxsU3RydWN0dXJlPlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldEFsbEJ1ZGdldFN0cnVjdHVyZSgpOiBQcm9taXNlPE1BbGxTdHJ1Y3R1cmU+IHtcclxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICB0aGlzLmdldEJ1ZGdldFN0cnVjdHVyZU9uZSgpLnN1YnNjcmliZShzdHJ1Y3R1cmVPbmUgPT4ge1xyXG4gICAgICAgICAgdGhpcy5nZXRCdWRnZXRTdHJ1Y3R1cmVUd29BbGwoKS5zdWJzY3JpYmUoc3RydWN0dXJlVHdvID0+IHtcclxuICAgICAgICAgICAgdGhpcy5nZXRCdWRnZXRTdHJ1Y3R1cmVUaHJlZSgpLnN1YnNjcmliZShzdHJ1Y3R1cmVUaHJlZSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5nZXRCdWRnZXRTdHJ1Y3R1cmVGb3VyKCkuc3Vic2NyaWJlKHN0cnVjdHVyZUZvdXIgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRCdWRnZXRTdHJ1Y3R1cmVGaXZlQnlJZEVwNCgpLnN1YnNjcmliZShzdHJ1Y3R1cmVGaXZlID0+IHtcclxuICAgICAgICAgICAgICAgICAgcmVzb2x2ZShuZXcgTUFsbFN0cnVjdHVyZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlT25lLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZVR3byxcclxuICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVUaHJlZSxcclxuICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVGb3VyLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZUZpdmVcclxuICAgICAgICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYSBlc3RydWN0dXJhIGNvbXBsZXRhIGRlcGVuZGllbmRvIGRlIGxhIGNvbmZpZ3VyYWNpw7NuXHJcbiAgICAgKiBAcmV0dXJuIFByb21pc2U8YW55W10+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICogQHR5cGU9IHt9XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhc3luYyBnZXRCdWRnZXRTdHJ1Y3R1cmVDb21wbGV0ZShuaXZlbDpudW1iZXIsdGlwbz86c3RyaW5nKTogUHJvbWlzZTxhbnlbXT4ge1xyXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUpID0+IHtcclxuICAgICAgICBsZXQgZGF0YSA9IFtdO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuZ2V0QnVkZ2V0U3RydWN0dXJlRml2ZShuaXZlbCx0aXBvKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgICAgIGRhdGEucHVzaCguLi5yZXN1bHQpXHJcbiAgICAgICAgfSlcclxuICAgICAgICAvLyBhd2FpdCB0aGlzLmdldEJ1ZGdldFN0cnVjdHVyZVRocmVlQ29tcGxldGUoMykuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgLy8gICBkYXRhLnB1c2goLi4ucmVzdWx0KVxyXG4gICAgICAgIC8vIH0pXHJcblxyXG4gICAgICAgIGF3YWl0IHJlc29sdmUoZGF0YSk7XHJcblxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBFbGltaW5hIHVuYSBvIHZhcmlhcyBlc3RydWN0dXJhcyBwcmVzdXB1ZXN0YXJpYXNcclxuICAgICAqIEBwYXJhbSBpZFN0cnVjdHVyZXMgSWQgZGUgbGFzIGVzdHJ1Y3R1cmFzIHByZXN1cHVlc3RhcmlhcyA1IHF1ZSB2YW4gYSBzZXIgZWxpbWluYWRhc1xyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPGFueT5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBkZWxldGVCdWRnZXRTdHJ1Y3R1cmVGaXZlKGlkU3RydWN0dXJlczogYW55W10pOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3QoJ2RlbGV0ZScsIGAke3RoaXMuVVJMfS9kYW8vc3BnL2VzdHJ1Y3R1cmFfcHJlc3VwdWVzdGFyaWE1X2Rhby5waHBgLFxyXG4gICAgICB7IGJvZHk6IGlkU3RydWN0dXJlcywgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEFjdHVhbGl6YSB1bmEgbyB2YXJpYXMgZXN0cnVjdHVyYXMgNFxyXG4gICAgICogQHBhcmFtIHN0cnVjdHVyZXMgRXN0cnVjdHVyYXMgcHJlc3VwdWVzdGFyaWFzIHF1ZSB2YW4gYSBzZXIgYWN0dWFsaXphZGFzXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8YW55PlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIHVwZGF0ZUJ1ZGdldFN0cnVjdHVyZUZpdmUoc3RydWN0dXJlczogSUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYUZpdmVbXSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucHV0KGAke3RoaXMuVVJMfS9kYW8vc3BnL2VzdHJ1Y3R1cmFfcHJlc3VwdWVzdGFyaWE1X2Rhby5waHBgLCBzdHJ1Y3R1cmVzLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBBZ3JlZ2EgdW5hIG8gdmFyaWFzIGVzdHJ1Y3R1cmFzIHByZXN1cHVlc3RhcmlhcyA0XHJcbiAgICAgKiBAcGFyYW0gc3RydWN0dXJlcyBMYXMgZXN0cnVjdHVyYXMgcXVlIHZhbiBhIHNlciByZWdpc3RyYWRhc1xyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPGFueT5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzZXRCdWRnZXRTdHJ1Y3R1cmVGaXZlKHN0cnVjdHVyZXM6IElFc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFGaXZlW10pOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5VUkx9L2Rhby9zcGcvZXN0cnVjdHVyYV9wcmVzdXB1ZXN0YXJpYTVfZGFvLnBocGAsIHN0cnVjdHVyZXMsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgdG9kYSBsYSBlc3RydWN0dXJhIHByZXN1cHVlc3RhcmlhIDVcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxNRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhRml2ZVtdPlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqIEBwYXJhbXMgdGlwbzpcInNzc1wiIFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0QnVkZ2V0U3RydWN0dXJlRml2ZShsZXZlbDogbnVtYmVyID0gbnVsbCwgdGlwbzpzdHJpbmc9JycpOiBPYnNlcnZhYmxlPE1Fc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFGaXZlQ29tcGxldGVbXT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxNRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhRml2ZUNvbXBsZXRlW10+KFxyXG4gICAgICAgIGAke3RoaXMuVVJMfS9kYW8vc3BnL2VzdHJ1Y3R1cmFfcHJlc3VwdWVzdGFyaWE1X2Rhby5waHA/Y29tcGxldGU9dHJ1ZSZ0aXBvPSR7dGlwb31gLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKCAgICAgICBcclxuICAgICAgICBtYXAoKHJlc3A6IGFueSkgPT4gcmVzcC5kYXRhLm1hcChlID0+IG5ldyBNRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhRml2ZUNvbXBsZXRlKGUsIGxldmVsKSkpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYSBlc3RydWN0dXJhIHByZXN1cHVlc3RhcmlhIDUgcG9yIGVsIElkIGRlIGxhIGVzdHJ1Y3R1cmEgNFxyXG4gICAgICogQHBhcmFtIGlkRXA0IGlkIGRlIGxhIGVzdHJ1Y3R1cmEgcHJlc3VwdWVzdGFyaWEgNFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0QnVkZ2V0U3RydWN0dXJlRml2ZUJ5SWRFcDQoaWRFcDQ/OiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueVtdPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueVtdPihcclxuICAgICAgICBgJHt0aGlzLlVSTH0vZGFvL3NwZy9lc3RydWN0dXJhX3ByZXN1cHVlc3RhcmlhNV9kYW8ucGhwJHtpZEVwNCA/IGA/aWRfZXA0PSR7aWRFcDR9YCA6ICcnfWAsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXNwOiBhbnkpID0+IHJlc3AuZGF0YS5tYXAoZWxlbWVudCA9PiBuZXcgTUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYUZpdmUoZWxlbWVudCkpKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEVsaW1pbmEgdW5hIG8gdmFyaWFzIGVzdHJ1Y3R1cmFzIHByZXN1cHVlc3Rhcmlhc1xyXG4gICAgICogQHBhcmFtIGlkU3RydWN0dXJlcyBJZCBkZSBsYXMgZXN0cnVjdHVyYXMgcHJlc3VwdWVzdGFyaWFzIDMgcXVlIHZhbmEgIHNlciBlbGltaW5hZGFzXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8YW55PlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGRlbGV0ZUJ1ZGdldFN0cnVjdHVyZUZvdXIoaWRTdHJ1Y3R1cmVzOiBhbnlbXSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdCgnZGVsZXRlJywgYCR7dGhpcy5VUkx9L2Rhby9zcGcvZXN0cnVjdHVyYV9wcmVzdXB1ZXN0YXJpYTRfZGFvLnBocGAsXHJcbiAgICAgIHsgYm9keTogaWRTdHJ1Y3R1cmVzLCBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQWN0dWFsaXphIHVuYSBvIHZhcmlhcyBlc3RydWN0dXJhcyA0XHJcbiAgICAgKiBAcGFyYW0gc3RydWN0dXJlcyBFc3RydWN0dXJhcyBwcmVzdXB1ZXN0YXJpYXMgcXVlIHZhbiBhIHNlciBhY3R1YWxpemFkYXNcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxhbnk+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdXBkYXRlQnVkZ2V0U3RydWN0dXJlRm91cihzdHJ1Y3R1cmVzOiBJRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhRm91cltdKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoYCR7dGhpcy5VUkx9L2Rhby9zcGcvZXN0cnVjdHVyYV9wcmVzdXB1ZXN0YXJpYTRfZGFvLnBocGAsIHN0cnVjdHVyZXMsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEFncmVnYSB1bmEgbyB2YXJpYXMgZXN0cnVjdHVyYXMgcHJlc3VwdWVzdGFyaWFzIDRcclxuICAgICAqIEBwYXJhbSBzdHJ1Y3R1cmVzIExhcyBlc3RydWN0dXJhcyBxdWUgdmFuIGEgc2VyIHJlZ2lzdHJhZGFzXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8YW55PlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIHNldEJ1ZGdldFN0cnVjdHVyZUZvdXIoc3RydWN0dXJlczogSUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYUZvdXJbXSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLlVSTH0vZGFvL3NwZy9lc3RydWN0dXJhX3ByZXN1cHVlc3RhcmlhNF9kYW8ucGhwYCwgc3RydWN0dXJlcyxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYXMgZXN0cnVjdHVyYXMgcHJlc3VwdWVzdGFyaWFzIDRcclxuICAgICAqIEBwYXJhbSBpZEVwMyBJZCBkZSBsYSBlc3RydWN0dXJhIHByZXN1cHVlc3RhcmlhIDNcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxNRXN0cnVjdHVyYXByZXN1cHVlc3RhcmlhW10+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0QnVkZ2V0U3RydWN0dXJlRm91cihpZEVwMz86IHN0cmluZyk6IE9ic2VydmFibGU8TUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYUZvdXJbXT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxNRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhRm91cltdPihcclxuICAgICAgICBgJHt0aGlzLlVSTH0vZGFvL3NwZy9lc3RydWN0dXJhX3ByZXN1cHVlc3RhcmlhNF9kYW8ucGhwJHtpZEVwMyA/IGA/aWRfZXAzPSR7aWRFcDN9YCA6ICcnfWAsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXNwOiBhbnkpID0+IHJlc3AuZGF0YS5tYXAoZWxlbWVudCA9PiBuZXcgTUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYUZvdXIoZWxlbWVudCkpKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEVsaW1pbmEgdW5hIG8gdmFyaWFzIGVzdHJ1Y3R1cmFzIHByZXN1cHVlc3Rhcmlhc1xyXG4gICAgICogQHBhcmFtIGlkU3RydWN0dXJlcyBJZCBkZSBsYXMgZXN0cnVjdHVyYXMgcHJlc3VwdWVzdGFyaWFzIDMgcXVlIHZhbmEgIHNlciBlbGltaW5hZGFzXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8YW55PlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGRlbGV0ZUJ1ZGdldFN0cnVjdHVyZVRocmVlKGlkU3RydWN0dXJlczogYW55W10pOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3QoJ2RlbGV0ZScsIGAke3RoaXMuVVJMfS9kYW8vc3BnL2VzdHJ1Y3R1cmFfcHJlc3VwdWVzdGFyaWEzX2Rhby5waHBgLFxyXG4gICAgICB7IGJvZHk6IGlkU3RydWN0dXJlcywgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEFjdHVhbGl6YSB1bmEgbyB2YXJpYXMgZXN0cnVjdHVyYXMgM1xyXG4gICAgICogQHBhcmFtIHN0cnVjdHVyZXMgRXN0cnVjdHVyYXMgcHJlc3VwdWVzdGFyaWFzIHF1ZSB2YW4gYSBzZXIgYWN0dWFsaXphZGFzXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8YW55PlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIHVwZGF0ZUJ1ZGdldFN0cnVjdHVyZVRocmVlKHN0cnVjdHVyZXM6IElFc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFUaHJlZVtdKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoYCR7dGhpcy5VUkx9L2Rhby9zcGcvZXN0cnVjdHVyYV9wcmVzdXB1ZXN0YXJpYTNfZGFvLnBocGAsIHN0cnVjdHVyZXMsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEFncmVnYSB1bmEgbyB2YXJpYXMgZXN0cnVjdHVyYXMgcHJlc3VwdWVzdGFyaWFzIDNcclxuICAgICAqIEBwYXJhbSBzdHJ1Y3R1cmVzIExhcyBlc3RydWN0dXJhcyBxdWUgdmFuIGEgc2VyIHJlZ2lzdHJhZGFzXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8YW55PlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIHNldEJ1ZGdldFN0cnVjdHVyZVRocmVlKHN0cnVjdHVyZXM6IElFc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFUaHJlZVtdKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuVVJMfS9kYW8vc3BnL2VzdHJ1Y3R1cmFfcHJlc3VwdWVzdGFyaWEzX2Rhby5waHBgLCBzdHJ1Y3R1cmVzLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBTZSB0cmFlIGxhIGVzdHJ1Y3R1cmEgcHJlc3VwdWVzdGFyaWEgY29tcGxldGEgaGFzdGEgZWwgbml2ZWwgM1xyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPGFueVtdPlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldEJ1ZGdldFN0cnVjdHVyZVRocmVlQ29tcGxldGUobGV2ZWw6IG51bWJlcik6IE9ic2VydmFibGU8TUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYUZpdmVDb21wbGV0ZVtdPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE1Fc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFGaXZlQ29tcGxldGVbXT4oXHJcbiAgICAgICAgYCR7dGhpcy5VUkx9L2Rhby9zcGcvZXN0cnVjdHVyYV9wcmVzdXB1ZXN0YXJpYTNfZGFvLnBocD9jb21wbGV0ZT10cnVlYCxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlc3A6IGFueSkgPT4gcmVzcC5kYXRhLm1hcChlbGVtZW50ID0+IG5ldyBNRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhRml2ZUNvbXBsZXRlKGVsZW1lbnQsIGxldmVsKSkpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYXMgZXN0cnVjdHVyYXMgcHJlc3VwdWVzdGFyaWFzIDNcclxuICAgICAqIEBwYXJhbSBpZEVwMiBJZCBkZSBsYSBlc3RydWN0dXJhIHByZXN1cHVlc3RhcmlhIDJcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxNRXN0cnVjdHVyYXByZXN1cHVlc3RhcmlhW10+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0QnVkZ2V0U3RydWN0dXJlVGhyZWUoaWRFcDI/OiBzdHJpbmcpOiBPYnNlcnZhYmxlPE1Fc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFUaHJlZVtdPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE1Fc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFUaHJlZVtdPihcclxuICAgICAgICBgJHt0aGlzLlVSTH0vZGFvL3NwZy9lc3RydWN0dXJhX3ByZXN1cHVlc3RhcmlhM19kYW8ucGhwJHtpZEVwMiA/IGA/aWRfZXAyPSR7aWRFcDJ9YCA6ICcnfWAsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXNwOiBhbnkpID0+IHJlc3AuZGF0YS5tYXAoZWxlbWVudCA9PiBuZXcgTUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYVRocmVlKGVsZW1lbnQpKSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBFbGltaW5hIHVuYSBvIHZhcmlhcyBlc3RydWN0dXJhcyBwcmVzdXB1ZXN0YXJpYXMgdW5vXHJcbiAgICAgKiBAcGFyYW0gaWRTdHJ1Y3R1cmVzIElkIGRlIGxhIG8gbGFzIGVzdHJ1Y3R1cmFzIHByZXN1cHVlc3RhcmlhcyBxdWUgdmFuIGEgc2VyIGVsaW1pbmFkYXNcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxhbnk+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZGVsZXRlQnVkZ2V0U3RydWN0dXJlVHdvKGlkU3RydWN0dXJlczogYW55W10pOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3QoJ2RlbGV0ZScsIGAke3RoaXMuVVJMfS9kYW8vc3BnL2VzdHJ1Y3R1cmFfcHJlc3VwdWVzdGFyaWEyX2Rhby5waHBgLFxyXG4gICAgICB7IGJvZHk6IGlkU3RydWN0dXJlcywgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEFjdHVhbGl6YSB1bmEgZXN0cnVjdHVyYSBwcmVzdXB1ZXN0YXJpYSBkb3NcclxuICAgICAqIEBwYXJhbSBzdHJ1Y3R1cmUgRXN0cnVjdHVyYSBwcmVzdXB1ZXN0YXJpYSB1bm8gcXVlIHNlIHZhIGEgYWN0dWFsaXphclxyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPGFueT5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHVwZGF0ZUJ1ZGdldFN0cnVjdHVyZVR3byhzdHJ1Y3R1cmU6IElFc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFUd29bXSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucHV0KGAke3RoaXMuVVJMfS9kYW8vc3BnL2VzdHJ1Y3R1cmFfcHJlc3VwdWVzdGFyaWEyX2Rhby5waHBgLCBzdHJ1Y3R1cmUsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFJlZ2lzdHJhIGxhcyBlc3RydWN0dXJhcyBwcmVzdXB1ZXN0cmlhcyBkb3MgZW4gbGEgYmFzZSBkZSBkYXRvc1xyXG4gICAgICogQHBhcmFtIGJ1ZGdldFN0cnVjdHVyZXMgQXJyYXkgZGUgZXN0cnVjdHVyYXMgcHJlc3VwdWVzdGFyaWEgcXVlIHNlIHZhbiBhIHJlZ2lzdHJhclxyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPGFueT5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzZXRCdWRnZXRTdHJ1Y3R1cmVUd28oYnVkZ2V0U3RydWN0dXJlczogSUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYVR3b1tdKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuVVJMfS9kYW8vc3BnL2VzdHJ1Y3R1cmFfcHJlc3VwdWVzdGFyaWEyX2Rhby5waHBgLFxyXG4gICAgICBidWRnZXRTdHJ1Y3R1cmVzLCB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbGEgZXN0cnVjdHVyYSBwcmVzdXB1ZXN0YXJpYVxyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPE1Fc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFbXT5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRCdWRnZXRTdHJ1Y3R1cmVUd28oaWRFcDE6IHN0cmluZyk6IE9ic2VydmFibGU8TUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYVR3b1tdPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE1Fc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFUd29bXT4oYCR7dGhpcy5VUkx9L2Rhby9zcGcvZXN0cnVjdHVyYV9wcmVzdXB1ZXN0YXJpYTJfZGFvLnBocD9pZF9lcDE9JHtpZEVwMX1gLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgoKHJlc3A6IGFueSkgPT4gcmVzcC5kYXRhLm1hcChlbGVtZW50ID0+IG5ldyBNRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhVHdvKGVsZW1lbnQpKSkpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYSBlc3RydWN0dXJhIHByZXN1cHVlc3RhcmlhXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8TUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYVtdPlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldEJ1ZGdldFN0cnVjdHVyZVR3b0FsbCgpOiBPYnNlcnZhYmxlPE1Fc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFUd29bXT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxNRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhVHdvW10+KGAke3RoaXMuVVJMfS9kYW8vc3BnL2VzdHJ1Y3R1cmFfcHJlc3VwdWVzdGFyaWEyX2Rhby5waHBgLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgoKHJlc3A6IGFueSkgPT4gcmVzcC5kYXRhLm1hcChlbGVtZW50ID0+IG5ldyBNRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhVHdvKGVsZW1lbnQpKSkpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gRWxpbWluYSB1bmEgbyB2YXJpYXMgZXN0cnVjdHVyYXMgcHJlc3VwdWVzdGFyaWFzIHVub1xyXG4gICAgICogQHBhcmFtIGlkU3RydWN0dXJlcyBJZCBkZSBsYSBvIGxhcyBlc3RydWN0dXJhcyBwcmVzdXB1ZXN0YXJpYXMgcXVlIHZhbiBhIHNlciBlbGltaW5hZGFzXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8YW55PlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGRlbGV0ZUJ1ZGdldFN0cnVjdHVyZU9uZShpZFN0cnVjdHVyZXM6IGFueVtdKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0KCdkZWxldGUnLCBgJHt0aGlzLlVSTH0vZGFvL3NwZy9lc3RydWN0dXJhX3ByZXN1cHVlc3RhcmlhMV9kYW8ucGhwYCxcclxuICAgICAgeyBib2R5OiBpZFN0cnVjdHVyZXMsIGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBBY3R1YWxpemEgdW5hIGVzdHJ1Y3R1cmEgcHJlc3VwdWVzdGFyaWEgdW5vXHJcbiAgICAgKiBAcGFyYW0gc3RydWN0dXJlIEVzdHJ1Y3R1cmEgcHJlc3VwdWVzdGFyaWEgdW5vIHF1ZSBzZSB2YSBhIGFjdHVhbGl6YXJcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxhbnk+XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB1cGRhdGVCdWRnZXRTdHJ1Y3R1cmVPbmUoc3RydWN0dXJlOiBJRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhT25lW10pOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnB1dChgJHt0aGlzLlVSTH0vZGFvL3NwZy9lc3RydWN0dXJhX3ByZXN1cHVlc3RhcmlhMV9kYW8ucGhwYCwgc3RydWN0dXJlLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBSZWdpc3RyYSBsYXMgZXN0cnVjdHVyYXMgcHJlc3VwdWVzdHJpYXMgZW4gbGEgYmFzZSBkZSBkYXRvc1xyXG4gICAgICogQHBhcmFtIGJ1ZGdldFN0cnVjdHVyZXMgQXJyYXkgZGUgZXN0cnVjdHVyYXMgcHJlc3VwdWVzdGFyaWEgcXVlIHMgZXZhbiBhIHJlZ2lzdHJhclxyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPGFueT5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzZXRCdWRnZXRTdHJ1Y3R1cmVPbmUoYnVkZ2V0U3RydWN0dXJlczogSUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYU9uZVtdKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuVVJMfS9kYW8vc3BnL2VzdHJ1Y3R1cmFfcHJlc3VwdWVzdGFyaWExX2Rhby5waHBgLFxyXG4gICAgICBidWRnZXRTdHJ1Y3R1cmVzLCB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbGEgZXN0cnVjdHVyYSBwcmVzdXB1ZXN0YXJpYVxyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPE1Fc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFbXT5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRCdWRnZXRTdHJ1Y3R1cmVPbmUoKTogT2JzZXJ2YWJsZTxNRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhT25lW10+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxNRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhT25lW10+KGAke3RoaXMuVVJMfS9kYW8vc3BnL2VzdHJ1Y3R1cmFfcHJlc3VwdWVzdGFyaWExX2Rhby5waHBgLFxyXG4gICAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgICAgbWFwKCgocmVzcDogYW55KSA9PiByZXNwLmRhdGEubWFwKGVsZW1lbnQgPT4gbmV3IE1Fc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFPbmUoZWxlbWVudCkpKSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbGFzIGNvbmZpZ3VyYWNpb25lcyBkZSBsYSBlc3RydWN0dXJhIHByZXN1cHVlc3RhcmlhXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8TUNvbmZpZ3VyYXRpb25TUEdbXT5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRDb25maWd1cmF0aW9uU1BHKCk6IE9ic2VydmFibGU8TUNvbmZpZ3VyYXRpb25TUEc+IHtcclxuXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE1Db25maWd1cmF0aW9uU1BHPihgJHt0aGlzLlVSTH0vZGFvL3NwZy9lc3RydWN0dXJhX3ByZXN1cHVlc3RhcmlhX2NvbmZpZ19kYW8ucGhwYCxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlc3A6IGFueSkgPT4gbmV3IE1Db25maWd1cmF0aW9uU1BHKHJlc3AuZGF0YVswXSkpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhcyBjb25maWd1cmFjaW9uZXMgZGUgbG9zIHByb3ZlZWRvcmVzXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8TUNvbmZpZ3VyYXRpb25SUENbXT5cclxuICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRDb25maWd1cmF0aW9uUlBDKCk6IE9ic2VydmFibGU8SVJlc3BvbnNlPiB7XHJcblxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxNQ29uZmlndXJhdGlvblJQQz4oYCR7dGhpcy5VUkx9L2Rhby9ycGMvcHJvdmVlZG9yX2NvbmZpZ19kYW8ucGhwYCxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlc3A6IElSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlc3Auc3VjY2Vzcykge1xyXG4gICAgICAgICAgICByZXNwLmRhdGEgPSBuZXcgTUNvbmZpZ3VyYXRpb25SUEMocmVzcC5kYXRhKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlc3BcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbGFzIE1Db25maWd1cmFjaW9uU05PIGRlIGxhIG5vbWluYVxyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPE1Db25maWd1cmFjaW9uU05PW10+XHJcbiAgICAgKiBAZGF0ZSAyNy0wNy0yMDIxXHJcbiAgICAgKi9cclxuICAgICBwdWJsaWMgZ2V0Q29uZmlndXJhdGlvblNOTygpOiBPYnNlcnZhYmxlPElSZXNwb25zZT4ge1xyXG5cclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3Nuby9jb25maWd1cmFjaW9uX2Rhby5waHA/dGlwbz0keydjb25maWd1cmFjaW9uJ31gLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzcDogSVJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzcC5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIGlmKHJlc3AuZGF0YSAhPW51bGwpe1xyXG4gICAgICAgICAgICAgIHJlc3AuZGF0YSA9IHJlc3AuZGF0YS5tYXAoZSA9PiBuZXcgTUNvbmZpZ3VyYWNpb25TTk8oZSkpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHJlc3AuZGF0YT1bXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlc3BcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBwdWJsaWMgZGF0ZVRvU3RyaW5nKGRhdGU6IERhdGUpOiBzdHJpbmd7XHJcbiAgICAgIHJldHVybiBgJHtkYXRlLmdldEZ1bGxZZWFyKCl9LSR7XHJcbiAgICAgICAgZGF0ZS5nZXRNb250aCgpICsgMSA+PSAxMCA/IGRhdGUuZ2V0TW9udGgoKSArIDEgOiBgMCR7ZGF0ZS5nZXRNb250aCgpICsgMX1gXHJcbiAgICAgIH0tJHtcclxuICAgICAgICBkYXRlLmdldERhdGUoKSA+PSAxMCA/IGRhdGUuZ2V0RGF0ZSgpIDogYDAke2RhdGUuZ2V0RGF0ZSgpfWBcclxuICAgICAgfWBcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhcyBjb25maWd1cmFjaW9uZXMgZGUgU2VndXJpZGFkXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQGF1dGhvciBDYXJsb3MgQWxib3Jub3pcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldENvbmZpZ1NTUygpOiBPYnNlcnZhYmxlPElSZXNwb25zZT4ge1xyXG5cclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3Nzcy9zZWd1cmlkYWRfY29uZmlnX2Rhby5waHBgLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzcDogSVJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzcC5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJlc3AuZGF0YSA9IG5ldyBNQ29uZmlnU1NTKHJlc3AuZGF0YSlcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXNwXHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0Q29tcG9uZW50cyhzeXN0ZW1Db2RlOiBzdHJpbmcgPSBudWxsLCBwZXJtaXQ6IGJvb2xlYW4pOiBPYnNlcnZhYmxlPElSZXNwb25zZT57XHJcblxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KFxyXG4gICAgICAgIGAke3RoaXMuVVJMfS9kYW8vc3NzL2NvbXBvbmVudGVzX2Rhby5waHA/JHtzeXN0ZW1Db2RlID8gYGNvZHNpcz0ke3N5c3RlbUNvZGV9JHtcclxuICAgICAgICAgIHBlcm1pdCA/IGAmcGVybWl0PXRydWVgIDogJydcclxuICAgICAgICB9YCA6ICcnfWAsXHJcbiAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfVxyXG4gICAgICApLnBpcGUoXHJcbiAgXHJcbiAgICAgICAgbWFwKHJlcyA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTUNvbXBvbmVudChlKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgIClcclxuICBcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhcyBmdWVudGVzIGRlIGZpbmFuY2lhbWllbnRvXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8TUZ1ZW50ZUZpbmFuY2lhbWllbnRvW10+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0RnVlbnRlRmluYW5jaWFtaWVudG8oKTogT2JzZXJ2YWJsZTxNRnVlbnRlRmluYW5jaWFtaWVudG9bXT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxNRnVlbnRlRmluYW5jaWFtaWVudG9bXT4oYCR7dGhpcy5VUkx9L2Rhby9zcGcvZnVlbnRlX2ZpbmFuY2lhbWllbnRvX2Rhby5waHBgLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzcDogYW55KSA9PiByZXNwLmRhdGEubWFwKGVsZW1lbnQgPT4gbmV3IE1GdWVudGVGaW5hbmNpYW1pZW50byhlbGVtZW50KSkpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsb3MgY2VudHJvcyBkZSBjb3N0b1xyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPE1DZW50cm9Db3N0b1tdPlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqIEBwYXJhbSBpZDppZHVzdXJpbyBvIGlkIGRlbCBlY250cm8gZGUgY29zdG9cclxuICAgICAqIG1vZGlmaWNhZG8gMjgtMTItMjAyMlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0Q2VudHJvQ29zdG8odGlwbzogJ2FsbCd8J29uZSd8J3VzZXInfCdlbnRlcic9IG51bGwsIGlkPzpzdHJpbmcpOiBPYnNlcnZhYmxlPE1DZW50cm9Db3N0b1tdPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zY2cvY2VudHJvX2Nvc3RvX2Rhby5waHA/dGlwbz0ke3RpcG99JmlkPSR7aWR9YCxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlc3A6IGFueSkgPT4gcmVzcC5kYXRhLm1hcChlbGVtZW50ID0+IG5ldyBNQ2VudHJvQ29zdG8oZWxlbWVudCkpKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxvcyBjZW50cm9zIGRlIGNvc3RvXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQGF1dGhvciBDYXJsb3MgQWxib3Jub3pcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldENvc3RDZW50ZXJzKCk6IE9ic2VydmFibGU8SVJlc3BvbnNlPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zY2cvY2VudHJvX2Nvc3RvX2Rhby5waHBgLCBcclxuICAgICAge2hlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKX1cclxuICAgICAgKS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzOiBJUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlbGVtZW50ID0+IG5ldyBNQ2VudHJvQ29zdG8oZWxlbWVudCkpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmVzXHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0VXNlckNvc3RDZW50ZXJzKGNvZGlnbzpzdHJpbmcpOiBPYnNlcnZhYmxlPElSZXNwb25zZT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vc2NnL2NlbnRyb19jb3N0b191c3VhcmlvX2Rhby5waHA/Y29kaWdvPSR7Y29kaWdvfWAsIFxyXG4gICAgICB7aGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpfVxyXG4gICAgICApLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXM6IElSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGVsZW1lbnQgPT4gbmV3IE1Vc3VhcmlvQ2VudHJvQ29zdG8oZWxlbWVudCkpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmVzXHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQWJyZSBlbCBkaWFsb2cgZGUgY2hlY2trc1xyXG4gICAgICogQHBhcmFtIGNvbHVtbnMgQ29sdW1uYXMgcXVlIHZhIGEgdGVuZXIgbGEgdGFibGFcclxuICAgICAqIEBwYXJhbSB0aXRsZSBUw610dWxvIGRlIGxhIG1vZGFsXHJcbiAgICAgKiBAcGFyYW0gZGF0YVNvdXJjZSBEYXRhIHF1ZSBzIGV2YSBhIG1vc3RyYXIgZW4gbGEgdGFibGFcclxuICAgICAqL1xyXG4gICAgcHVibGljIG9wZW5EaWFsb2dNdWx0aVNlbGVjdChcclxuICAgICAgLy8gY29sdW1uczogc3RyaW5nW10sIFxyXG4gICAgICAvLyB0aXRsZTogc3RyaW5nLCBcclxuICAgICAgLy8gZGF0YVNvdXJjZTogYW55W10sXHJcbiAgICAgIC8vIGNvbHVtbk5hbWVzPzogc3RyaW5nW11cclxuICAgICAgY29sdW1uczogc3RyaW5nW10sIFxyXG4gICAgICB0aXRsZTogc3RyaW5nLCBcclxuICAgICAgZGF0YVNvdXJjZTogYW55W10sIFxyXG4gICAgICBjb2x1bW5OYW1lczogc3RyaW5nW10gPSBudWxsLCBcclxuICAgICAgd2lkdGg6IHN0cmluZyA9ICcxMDAwcHgnLFxyXG4gICAgICBvcHRpb25zOiB7XHJcbiAgICAgICAgaGFzQmFja2Ryb3A/OiBib29sZWFuLFxyXG4gICAgICAgIGRpc2FibGVDbG9zZT86IGJvb2xlYW4sXHJcbiAgICAgICAvLyBkaXNhYmxlTWFzdGVyVG9nZ2xlPzogYm9vbGVhblxyXG4gICAgICB9ID0ge1xyXG4gICAgICAgIGRpc2FibGVDbG9zZTogZmFsc2UsIFxyXG4gICAgICAgIGhhc0JhY2tkcm9wOiBmYWxzZSwgXHJcbiAgICAgIC8vICBkaXNhYmxlTWFzdGVyVG9nZ2xlOiBmYWxzZVxyXG4gICAgICB9XHJcbiAgICApOiBQcm9taXNlPGFueVtdPiB7XHJcbiAgICAgIGxldCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFRhYmxlU2VsZWN0Q29tcG9uZW50LCB7XHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgdGl0bGU6IHRpdGxlLFxyXG4gICAgICAgICAgY29sdW1uczogY29sdW1ucyxcclxuICAgICAgICAgIGRhdGFTb3VyY2U6IGRhdGFTb3VyY2UsXHJcbiAgICAgICAgICBjb2x1bW5OYW1lcyxcclxuICAgICAgICAgLy8gZGlzYWJsZU1hc3RlclRvZ2dsZTogb3B0aW9ucy5kaXNhYmxlTWFzdGVyVG9nZ2xlXHJcbiAgICAgICAgfSxcclxuICAgICAgICB3aWR0aDogd2lkdGgsXHJcbiAgICAgICAgbWF4SGVpZ2h0OiAnOTB2aCcsXHJcbiAgICAgICAgaGFzQmFja2Ryb3A6IG9wdGlvbnMuaGFzQmFja2Ryb3AsXHJcbiAgICAgICAgZGlzYWJsZUNsb3NlOiBvcHRpb25zLmRpc2FibGVDbG9zZVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHJldHVybiBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS50b1Byb21pc2UoKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEFicmUgZWwgZGlhbG9nIGRlIGxhcyBjb211bmlkYWRlc1xyXG4gICAgICogQHJldHVybiBQcm9taXNlPE1QbGFuVW5pY29DdWVudGE+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYXN5bmMgb3BlbkRpYWxvZ1BsYW5Vbmljb0N1ZW50YXMoKTogUHJvbWlzZTxNUGxhblVuaWNvQ3VlbnRhPiB7XHJcbiAgICAgIGxldCBwbGFuZXM6IE1QbGFuVW5pY29DdWVudGFbXSA9IGF3YWl0IHRoaXMuZ2V0TGlzdGFkb1BMYW5Vbmljb0N1ZW50YXMoKS50b1Byb21pc2UoKTtcclxuICAgICAgbGV0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oQ2F0YWxvZ29Db21wb25lbnQsIHtcclxuICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICBjb2x1bW5zOiBbJ2N1ZW50YScsICdkZW5vbWluYWNpb24nXSxcclxuICAgICAgICAgIGNvbHVtbk5hbWVzOiBbJ2N1ZW50YScsICdkZW5vbWluYWNpw7NuJ10sXHJcbiAgICAgICAgICB0aXRsZTogJ0NhdMOhbG9nbyBkZSBQbGFuIGRlIEN1ZW50YXMgR8OpbmVyYWwnLFxyXG4gICAgICAgICAgZGF0YVNvdXJjZTogcGxhbmVzXHJcbiAgICAgICAgfSBhcyBJQ2F0YWxvZ28sXHJcbiAgICAgICAgd2lkdGg6ICcxMDAwcHgnLFxyXG4gICAgICAgIG1heEhlaWdodDogJzkwdmgnXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBlbCBsaXN0YWRvIGRlbCBwbGFuIMO6bmljbyBkZSBjdWVudGFzXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8TXBsYW5Vbmljb0N1ZW50YVtdPlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldExpc3RhZG9QTGFuVW5pY29DdWVudGFzKCk6IE9ic2VydmFibGU8TVBsYW5Vbmljb0N1ZW50YVtdPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE1QbGFuVW5pY29DdWVudGFbXT4oYCR7dGhpcy5VUkx9L2Rhby9zY2cvcGxhbl91bmljb19kYW8ucGhwYCxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlc3A6IGFueSkgPT4gcmVzcC5kYXRhLm1hcChlbGVtZW50ID0+IG5ldyBNUGxhblVuaWNvQ3VlbnRhKGVsZW1lbnQpKSlcclxuICAgICAgKVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbGEgY29uZmlndXJhY2nDs24gZGUgU0NHXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8TUNvbmZpZ3VyYWNpb25TQ0dbXT5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKiBAbW9kaWZpdCAyNS0wNy0yMDIxXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRDb25maWd1cmF0aW9uU0NHKCk6IE9ic2VydmFibGU8TUNvbmZpZ3VyYWNpb25TQ0dbXT4geyAgICAgIFxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxNQ29uZmlndXJhY2lvblNDR1tdPihgJHt0aGlzLlVSTH0vZGFvL3NjZy9jb25maWd1cmFjaW9uX2NvbnRhYmlsaWRhZF9kYW8ucGhwYCxcclxuICAgICAge2hlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKX1cclxuICAgICAgKS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzcDogYW55KSA9PiByZXNwLmRhdGEubWFwKGVsZW1lbnQgPT4gbmV3IE1Db25maWd1cmFjaW9uU0NHKGVsZW1lbnQpKSlcclxuICAgICAgKVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEFicmUgdW4gZGlhbG9nIGRlIGNvbmZpcm1hY2nDs25cclxuICAgICAqIEBwYXJhbSB0aXRsZSBUw610dWxvIGRlIGxhIG1vZGFsIGRlIGNvbmZpcm1cclxuICAgICAqIEBwYXJhbSBtZXNzYWdlIE1lbnNhamUgKG9wY2lvbmFsKSBwYXJhIGVsIHVzdXNhcmlvXHJcbiAgICAgKiBAcmV0dXJuIFByb21pc2U8Ym9vbGVhbj5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvcGVuRGlhbG9nQ29uZmlybSh0aXRsZTogc3RyaW5nLCBtZXNzYWdlPzogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgIGxldCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKENvbmZpcm1Db21wb25lbnQsIHtcclxuICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICB0aXRsZTogdGl0bGUsXHJcbiAgICAgICAgICBtZXNzYWdlOiAobWVzc2FnZSkgPyBtZXNzYWdlIDogbnVsbFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgd2lkdGg6ICcxMDAwcHgnLFxyXG4gICAgICAgIG1heEhlaWdodDogJzkwdmgnXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgcmV0dXJuIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIENvbnZpZXJ0ZSBlbCBjb250ZW5pZG8gZGUgdW4gQWJzdHJhY3RDb250cm9sIGVuIG1hecO6c2N1bGEgKFVzYXIgZW4gZXZlbnRvIGtleXVwKVxyXG4gICAgICogQHBhcmFtIGZvcm1Hcm91cCBGb3JtdWxhcmlvIGTDs25kZSBzZSB2YSBhIGJ1c2NhciBlbCBBYnN0cmFjdENvbnRyb2xcclxuICAgICAqIEBwYXJhbSBuYW1lIE5vbWJyZSBkZWwgQWJzdHJhY3RDb250cm9sXHJcbiAgICAgKiBAcmV0dXJuIHZvaWRcclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBjaGFuZ2VUb1VwcGVyQ2FzZShmb3JtR3JvdXA6IFVudHlwZWRGb3JtR3JvdXAsIG5hbWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICB0aGlzLmdldEFic3RyYWN0Q29udHJvbChmb3JtR3JvdXAsIG5hbWUpLnNldFZhbHVlKHRoaXMuZ2V0QWJzdHJhY3RDb250cm9sKGZvcm1Hcm91cCwgbmFtZSkudmFsdWUudG9VcHBlckNhc2UoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBlbCBBYnN0cmFjdENvbnRyb2wgZGUgdW4gZm9ybXVsYXJpb1xyXG4gICAgICogQHBhcmFtIGZvcm1Hcm91cCBGb3JtdWxhcmlvIGRvbmRlIHNlIHZhIGEgYnVzY2FyIGVsIEFic3RyYWN0Q29udHJvbFxyXG4gICAgICogQHBhcmFtIG5hbWUgTm9tYnJlIGRlbCBBYnN0cmFjdENvbnRyb2xcclxuICAgICAqIEByZXR1cm4gQWJzdHJhY3RDb250cm9sXHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0QWJzdHJhY3RDb250cm9sKGZvcm1Hcm91cDogVW50eXBlZEZvcm1Hcm91cCwgbmFtZTogc3RyaW5nKTogQWJzdHJhY3RDb250cm9sIHtcclxuICAgICAgcmV0dXJuIGZvcm1Hcm91cC5nZXQobmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gUHJldmllbmUgcXVlIHNlIGVzY3JpYmFuIGxldHJhcyBlbiBlbCBpbnB1dCAoVXNhciBlbiBrZXlwcmVzcylcclxuICAgICAqIEBwYXJhbSBldmVudCBFdmVudG8gZGVsIHRlY2xhZG9cclxuICAgICAqIEByZXR1cm4gYm9vbGVhblxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqIEBtb2RpZmljYWRvIGNvbW8gb25seU51bWVybyBwYXJhIGNvcnJlZ2lyIGNvZGlnbywgdXNhciBjdXJyZW5jeS1pbnB1dCBzaSBxdWllcmUgdXNhciBkZWNpbWFsZXMgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvbmx5RGVjaW1hbChldmVudD86IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghaXNOYU4oK2V2ZW50LmtleSkgJiYgZXZlbnQua2V5Q29kZSAhPSAzMikge1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTsgICAgICBcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBQcmV2aWVuZSBxdWUgc2UgZXNjcmliYW4gbGV0cmFzIGVuIGVsIGlucHV0IChVc2FyIGVuIGtleXByZXNzKVxyXG4gICAgICogQHBhcmFtIGV2ZW50IEV2ZW50byBkZWwgdGVjbGFkb1xyXG4gICAgICogQHJldHVybiBib29sZWFuXHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb25seU51bWJlcnMoZXZlbnQ/OiBhbnkpOiBib29sZWFuIHtcclxuICAgICAgLy8gY29uc29sZS5sb2coZXZlbnQpO1xyXG4gICAgICBpZiAoIWlzTmFOKCtldmVudC5rZXkpICYmIGV2ZW50LmtleUNvZGUgIT0gMzIpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEFjZXB0YSBzb2xvIG51bWVybywgZGVsZXRlIHkgYmFja3NwYWNlXHJcbiAgICAgKiBAcGFyYW0gZXZlbnQgRXZlbnRvIGRlbCB0ZWNsYWRvXHJcbiAgICAgKiBAcmV0dXJuIGJvb2xlYW5cclxuICAgICAqIEBhdXRob3IgRGltYWx5IENyZXNwb1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb25seU51bWJlcnMyKGV2ZW50PzogYW55KTogYm9vbGVhbiB7XHJcbiAgICAgIGlmICghaXNOYU4oK2V2ZW50LmtleSkgIHx8IGV2ZW50LmtleUNvZGUgPT0gOCB8fCBldmVudC5rZXlDb2RlID09IDQ2KSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBBY2VwdGEgc29sbyBudW1lcm8sZ3Vpb25lcywgcGFyZW50ZXNpcyxlc3BhY2lvc1xyXG4gICAgICogQHBhcmFtIGV2ZW50IEV2ZW50byBkZWwgdGVjbGFkb1xyXG4gICAgICogQHJldHVybiBib29sZWFuXHJcbiAgICAgKiBAYXV0aG9yIERpbWFseSBDcmVzcG9cclxuICAgICAqL1xyXG4gICAgIHB1YmxpYyB0eXBlTnVtYmVyc0h5cGhlbihldmVudD86IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgICBpZiAoIWlzTmFOKCtldmVudC5rZXkpIHx8IGV2ZW50LmtleUNvZGUgPT0gOCB8fCAgZXZlbnQua2V5Q29kZSA9PSAzMiAgfHwgZXZlbnQua2V5Q29kZSA9PSA0NiBcclxuICAgICAgfHwgZXZlbnQua2V5Q29kZSA9PSA1OCB8fCBldmVudC5rZXlDb2RlID09IDU3IHx8IGV2ZW50LmtleUNvZGUgPT0gMTg5KSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBQZXJtaXRlIChhLXogQS1aIMOhLcO6IMOxw5Egw7zDnCAnLC4pIHF1ZSBzZSBlc2NyaWJhbiBudW1lcm9zIGVuIGVsIGlucHV0IChVc2FyIGVuIGtleXByZXNzKVxyXG4gICAgICogQHBhcmFtIGV2ZW50IEV2ZW50byBkZWwgdGVjbGFkb1xyXG4gICAgICogQHJldHVybiBib29sZWFuXHJcbiAgICAgKiBAZGF0ZSAxNC0wNS0yMDIyXHJcbiAgICAgKiBcclxuICAgICAqL1xyXG4gICAgICBwdWJsaWMgdHlwZU5hbWUoZXZlbnQ/OiBhbnkpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoKGV2ZW50LmtleT49J2EnICYmIGV2ZW50LmtleTw9J3onKSAgfHwgKGV2ZW50LmtleT49J0EnICYmIGV2ZW50LmtleTw9J1onKSB8fCAgZXZlbnQua2V5PT1cIsOxXCIgfHwgIGV2ZW50LmtleT09XCLDkVwiIFxyXG4gICAgICAgICAgfHwgKGV2ZW50LmtleT49J8OhJyAmJiBldmVudC5rZXk8PSfDuicpIHx8IGV2ZW50LmtleT49J8O8JyAgfHwgZXZlbnQua2V5Pj0nw5wnICB8fCBldmVudC5rZXk9PVwiJ1wiICB8fCBldmVudC5rZXlDb2RlPT0zMiBcclxuICAgICAgICAgIHx8ICBldmVudC5rZXk9PVwiLlwiIHx8ICBldmVudC5rZXk9PVwiLFwiIHx8IGV2ZW50LmtleUNvZGUgPT0gOCB8fCAgZXZlbnQua2V5Q29kZSA9PSAzMiAgfHwgZXZlbnQua2V5Q29kZSA9PSA0NiAgKXtcclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFBlcm1pdGUgKDAtOSBhLXogQS1aIMOhLcO6IMOxw5Egw7zDnCAnLC4tXy86KCklI8K6JiTigqzCo8KlKSBxdWUgc2UgZXNjcmliYW4gIGVuIGVsIGlucHV0IChVc2FyIGVuIGtleXByZXNzKVxyXG4gICAgICogQHBhcmFtIGV2ZW50IEV2ZW50byBkZWwgdGVjbGFkb1xyXG4gICAgICogQHJldHVybiBib29sZWFuXHJcbiAgICAgKiBAZGF0ZSAxNC0wNS0yMDIyXHJcbiAgICAgKiBcclxuICAgICAqL1xyXG4gICAgICBwdWJsaWMgdHlwZVRleHQoZXZlbnQ/OiBhbnkpOiBib29sZWFuIHsgICAgICBcclxuICAgICAgICBpZiAoKGV2ZW50LmtleT49J2EnICAmJiBldmVudC5rZXk8PSd6JykgfHwgKGV2ZW50LmtleT49J0EnICYmIGV2ZW50LmtleTw9J1onKSB8fCBldmVudC5rZXk9PVwiw7FcIiB8fCBldmVudC5rZXk9PVwiw5FcIiBcclxuICAgICAgICAgIHx8IChldmVudC5rZXk+PSfDoScgJiYgZXZlbnQua2V5PD0nw7onKSB8fCBldmVudC5rZXk9PSfDvCcgfHwgZXZlbnQua2V5PT0nw5wnIHx8IGV2ZW50LmtleT09XCInXCIgfHwgaXNOYU4oK2V2ZW50LmtleSkgXHJcbiAgICAgICAgICB8fCBldmVudC5rZXk9PVwiLlwiICB8fCAgZXZlbnQua2V5PT1cIixcIiB8fCBldmVudC5rZXk9PVwiJlwiIHx8ICBldmVudC5rZXk9PVwiX1wifHwgZXZlbnQua2V5PT1cIi1cIiB8fCBldmVudC5rZXk9PVwiI1wiXHJcbiAgICAgICAgICB8fCBldmVudC5rZXk9PVwiwrpcIiAgfHwgIGV2ZW50LmtleT09XCIkXCIgfHwgZXZlbnQua2V5PT1cIihcIiB8fCBldmVudC5rZXk9PVwiKVwiIHx8IGV2ZW50LmtleT09XCIlXCIgfHwgZXZlbnQua2V5PT0nICdcclxuICAgICAgICAgIHx8IGV2ZW50LmtleT09JzonICB8fGV2ZW50LmtleT09Jy8nfHwgZXZlbnQua2V5Q29kZT09ODM2NCB8fCAgZXZlbnQua2V5Q29kZT09MTY1IHx8ZXZlbnQua2V5Q29kZT09MTYzIFxyXG4gICAgICAgICAgfHwgZXZlbnQua2V5Q29kZSA9PSA4IHx8ICBldmVudC5rZXlDb2RlID09IDMyICB8fCBldmVudC5rZXlDb2RlID09IDQ2ICl7XHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9ICAgICAgICBcclxuICAgICAgICByZXR1cm4gZmFsc2U7ICAgICAgXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFBlcm1pdGUgKDAtOSBhLXogQS1aIMOxw5EgLi1fKSBxdWUgc2UgZXNjcmliYW4gIGVuIGVsIGlucHV0IChVc2FyIGVuIGtleXByZXNzKVxyXG4gICAgICogQHBhcmFtIGV2ZW50IEV2ZW50byBkZWwgdGVjbGFkb1xyXG4gICAgICogQHJldHVybiBib29sZWFuXHJcbiAgICAgKiBAZGF0ZSAxNC0wNS0yMDIyXHJcbiAgICAgKi9cclxuICAgICAgIHB1YmxpYyB0eXBlQ29kZShldmVudD86IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICgoZXZlbnQua2V5Pj0nYScgICYmIGV2ZW50LmtleTw9J3onKSB8fCAoZXZlbnQua2V5Pj0nQScgJiYgZXZlbnQua2V5PD0nWicpICB8fCBldmVudC5rZXk9PVwiw7FcIiB8fCBldmVudC5rZXk9PVwiw5FcIiBcclxuICAgICAgICAgIHx8aXNOYU4oK2V2ZW50LmtleSkgfHwgZXZlbnQua2V5PT1cIi5cIiB8fCAgZXZlbnQua2V5PT1cIl9cIiB8fCBldmVudC5rZXk9PVwiLVwiIHx8IGV2ZW50LmtleUNvZGUgPT0gOCB8fCAgZXZlbnQua2V5Q29kZSA9PSAzMiAgfHwgZXZlbnQua2V5Q29kZSA9PSA0NiApe1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfSAgICAgICAgXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlOyAgICAgIFxyXG4gICAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQWJyZSBlbCBkaWFsb2cgZGUgbGFzIGNvbXVuaWRhZGVzXHJcbiAgICAgKiBAcmV0dXJuIFByb21pc2U8TUNvbXVuaWRhZD5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhc3luYyBvcGVuRGlhbG9nVW5pZGFkZXNUcmlidXRhcmlhcygpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICBsZXQgdWRUcmlidXRhcmlhczogTVVuaWRhZFRyaWJ1dGFyaWFbXSA9IGF3YWl0IHRoaXMuZ2V0VW5pZGFkZXNUcmlidXRhcmlhcygpLnRvUHJvbWlzZSgpO1xyXG4gICAgICBsZXQgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihDYXRhbG9nb0NvbXBvbmVudCwge1xyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgIGNvbHVtbnM6IFsnYcOxbycsICducm9fZGVjcmV0bycsICdmZWNoYV9kZWNyZXRvJywgJ2VudHJhZGFfdmlkZW5jaWEnLCAncHVibGljYWNpb25fZ2FjZXRhJywgJ25yb19nYWNldGEnLCAndmFsb3J1dCddLFxyXG4gICAgICAgICAgdGl0bGU6ICdDYXTDoWxvZ28gZGUgVW5pZGFkZXMgVHJpYnV0YXJpYXMnLFxyXG4gICAgICAgICAgZGF0YVNvdXJjZTogdWRUcmlidXRhcmlhc1xyXG4gICAgICAgIH0gYXMgSUNhdGFsb2dvLFxyXG4gICAgICAgIHdpZHRoOiAnMTAwMHgnLFxyXG4gICAgICAgIG1heEhlaWdodDogJzkwdmgnXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYXMgdW5pZGFkZXMgdHJpYnV0YXJpYXNcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxhbnk+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0VW5pZGFkZXNUcmlidXRhcmlhcygpOiBPYnNlcnZhYmxlPE1VbmlkYWRUcmlidXRhcmlhW10+IHtcclxuICAgICAgY29uc3QgcmVxdWVzdDogSVJlcXVlc3QgPSB7XHJcbiAgICAgICAgb3BlcmFjaW9uOiAnb2J0ZW5lckRhdGEnLFxyXG4gICAgICAgIHNpZ2VzcF9jb25leGlvbjoge1xyXG4gICAgICAgICAgc2Vydmlkb3I6IHRoaXMuVVJMLFxyXG4gICAgICAgICAgdXN1YXJpbzogdGhpcy51c3VhcmlvQWN0aXZvLmdldEludGVyZmFjZSgpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxNVW5pZGFkVHJpYnV0YXJpYVtdPihgJHt0aGlzLlVSTH0vZGFvL2NmZy91bmR0cmlidXRhcmlhX2Rhby5waHBgLCByZXF1ZXN0KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzcDogYW55W10pID0+IHJlc3AubWFwKGVsZW1lbnQgPT4gbmV3IE1VbmlkYWRUcmlidXRhcmlhKGVsZW1lbnQpKSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBBYnJlIHVuYSBtb2RhbCBnw6luZXJpY2FcclxuICAgICAqIEBwYXJhbSBjb2x1bW5zIENvbHVtbmFzIHF1ZSB2YSBhIHRlbmVyIGxhIHRhYmxhXHJcbiAgICAgKiBAcGFyYW0gdGl0bGUgVMOtdHVsbyBkZWwgZGlhbG9nXHJcbiAgICAgKiBAcGFyYW0gZGF0YVNvdXJjZSBEYXRhIHF1ZSBzZSB2YSBhIG1vc3RyYXIgZW4gbGEgdGFibGFcclxuICAgICAqIEByZXR1cm4gUHJvbWlzZTxhbnk+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYXN5bmMgb3BlbkNhdGFsb2dvR2VuZXJpY28oXHJcbiAgICAgIGNvbHVtbnM6IHN0cmluZ1tdLCBcclxuICAgICAgdGl0bGU6IHN0cmluZywgXHJcbiAgICAgIGRhdGFTb3VyY2U6IGFueVtdLCBcclxuICAgICAgY29sdW1uTmFtZXM6IHN0cmluZ1tdID0gbnVsbCwgXHJcbiAgICAgIHdpZHRoOiBzdHJpbmcgPSAnMTAwMHB4JyxcclxuICAgICAgb3B0aW9uczoge1xyXG4gICAgICAgIGhhc0JhY2tkcm9wPzogYm9vbGVhbixcclxuICAgICAgICBkaXNhYmxlQ2xvc2U/OiBib29sZWFuXHJcbiAgICAgIH0gPSB7ZGlzYWJsZUNsb3NlOiBmYWxzZSwgaGFzQmFja2Ryb3A6IGZhbHNlfVxyXG4gICAgKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgbGV0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oQ2F0YWxvZ29Db21wb25lbnQsIHtcclxuICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICBjb2x1bW5zLFxyXG4gICAgICAgICAgdGl0bGUsXHJcbiAgICAgICAgICBkYXRhU291cmNlLFxyXG4gICAgICAgICAgY29sdW1uTmFtZXNcclxuICAgICAgICB9IGFzIElDYXRhbG9nbyxcclxuICAgICAgICB3aWR0aDogd2lkdGgsXHJcbiAgICAgICAgbWF4SGVpZ2h0OiAnOTB2aCcsXHJcbiAgICAgICAgaGFzQmFja2Ryb3A6IG9wdGlvbnMuaGFzQmFja2Ryb3AgPyBvcHRpb25zLmhhc0JhY2tkcm9wIDogZmFsc2UsXHJcbiAgICAgICAgZGlzYWJsZUNsb3NlOiBvcHRpb25zLmRpc2FibGVDbG9zZSA/IG9wdGlvbnMuZGlzYWJsZUNsb3NlIDogZmFsc2UsXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQWJyZSB1bmEgbW9kYWwgZ8OpbmVyaWNhIGNvbiAyIGlucHV0c1xyXG4gICAgICogQHBhcmFtIGNvbHVtbnMgQ29sdW1uYXMgcXVlIHZhIGEgdGVuZXIgbGEgdGFibGFcclxuICAgICAqIEBwYXJhbSB0aXRsZSBUw610dWxvIGRlbCBkaWFsb2dcclxuICAgICAqIEBwYXJhbSBkYXRhU291cmNlIERhdGEgcXVlIHNlIHZhIGEgbW9zdHJhciBlbiBsYSB0YWJsYVxyXG4gICAgICogQHJldHVybiBQcm9taXNlPGFueT5cclxuICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhc3luYyBvcGVuQ2F0YWxvZ29Eb3NJbnB1dHMoXHJcbiAgICAgIGNvbHVtbnM6IHN0cmluZ1tdLFxyXG4gICAgICB0aXRsZTogc3RyaW5nLCBcclxuICAgICAgZGF0YVNvdXJjZTogYW55W10sIFxyXG4gICAgICBmaWx0ZXJEYXRhOiBmaWx0ZXJEYXRhW10sXHJcbiAgICAgIGNvbHVtbk5hbWVzOiBzdHJpbmdbXSA9IG51bGwsXHJcbiAgICAgIHdpZHRoOiBzdHJpbmcgPSBcIjEwMDBweFwiXHJcbiAgICApOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICBsZXQgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihDYXRhbG9nb0RvYmxlSW5wdXRDb21wb25lbnQsIHtcclxuICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICBjb2x1bW5zLFxyXG4gICAgICAgICAgdGl0bGUsXHJcbiAgICAgICAgICBkYXRhU291cmNlLFxyXG4gICAgICAgICAgY29sdW1uTmFtZXMsXHJcbiAgICAgICAgICBmaWx0ZXJEYXRhXHJcbiAgICAgICAgfSBhcyBJQ2F0YWxvZ28sXHJcbiAgICAgICAgd2lkdGg6IHdpZHRoLFxyXG4gICAgICAgIG1heEhlaWdodDogJzkwdmgnXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQWJyZSBlbCBkaWFsb2cgZGUgbGFzIGNvbXVuaWRhZGVzXHJcbiAgICAgKiBAcmV0dXJuIFByb21pc2U8TUNvbXVuaWRhZD5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhc3luYyBvcGVuRGlhbG9nQ29tdW5pZGFkKCk6IFByb21pc2U8TUNvbXVuaWRhZD4ge1xyXG4gICAgICBsZXQgY29tdW5pZGFkZXM6IE1Db211bmlkYWRbXSA9IGF3YWl0IHRoaXMuZ2V0Q29tdW5pZGFkZXMoKS50b1Byb21pc2UoKTtcclxuICAgICAgbGV0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oQ2F0YWxvZ29Db21wb25lbnQsIHtcclxuICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICBjb2x1bW5zOiBbJ3ByZWZpam8nLCAncGFpcycsICdlc3RhZG8nLCAnbXVuaWNpcGlvJywgJ3BhcnJvcXVpYScsICdjb2RpZ28nLCAnY29tdW5pZGFkJ10sXHJcbiAgICAgICAgICB0aXRsZTogJ0NhdMOhbG9nbyBkZSBDb211bmlkYWRlcycsXHJcbiAgICAgICAgICBkYXRhU291cmNlOiBjb211bmlkYWRlc1xyXG4gICAgICAgIH0gYXMgSUNhdGFsb2dvLFxyXG4gICAgICAgIHdpZHRoOiAnMTAwMHB4JyxcclxuICAgICAgICBtYXhIZWlnaHQ6ICc5MHZoJ1xyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbGFzIGNvbXVuaWRhZGVzXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8TUNvbXVuaWRhZFtdPlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldENvbXVuaWRhZGVzKCk6IE9ic2VydmFibGU8TUNvbXVuaWRhZFtdPiB7XHJcbiAgICAgIGNvbnN0IHJlcXVlc3Q6IElSZXF1ZXN0ID0ge1xyXG4gICAgICAgIG9wZXJhY2lvbjogJ29idGVuZXJEYXRhJyxcclxuICAgICAgICBzaWdlc3BfY29uZXhpb246IHtcclxuICAgICAgICAgIHNlcnZpZG9yOiB0aGlzLlVSTCxcclxuICAgICAgICAgIHVzdWFyaW86IHRoaXMudXN1YXJpb0FjdGl2by5nZXRJbnRlcmZhY2UoKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8TUNvbXVuaWRhZFtdPihgJHt0aGlzLlVSTH0vZGFvL2NmZy9jb211bmlkYWRlc19kYW8ucGhwYCwgcmVxdWVzdCkucGlwZSggICAgIFxyXG4gICAgICAgIG1hcCgocmVzcDogYW55W10pID0+IHJlc3AubWFwKGVsZW1lbnQgPT4gbmV3IE1Db211bmlkYWQoZWxlbWVudCkpKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEFicmUgZWwgZGlhbG9nIGRlIGxhcyBsYXMgbW9uZWRhc1xyXG4gICAgICogQHJldHVybiBQcm9taXNlPE1Nb25lZGE+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYXN5bmMgb3BlbkRpYWxvZ01vbmVkYXMoKTogUHJvbWlzZTxNTW9uZWRhPiB7XHJcbiAgICAgIGxldCBjb2luczogTU1vbmVkYVtdID0gYXdhaXQgdGhpcy5nZXRNb25lZGFzKCd0b2RhcycpLnRvUHJvbWlzZSgpO1xyXG4gICAgICBsZXQgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihDYXRhbG9nb0NvbXBvbmVudCwge1xyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgIGNvbHVtbnM6IFsnY29kaWdvJywgJ2Rlbm9taW5hY2lvbicsICdjb2RpZ29Jc28nLCAnc2ltYm9sbyddLFxyXG4gICAgICAgICAgdGl0bGU6ICdDYXTDoWxvZ28gZGUgTW9uZWRhcycsXHJcbiAgICAgICAgICBjb2x1bW5OYW1lczogWydjw7NkaWdvJywgJ2Rlbm9taW5hY2nDs24nLCAnaXNvJywgJ3NpbWJvbG8nXSxcclxuICAgICAgICAgIGRhdGFTb3VyY2U6IGNvaW5zXHJcbiAgICAgICAgfSBhcyBJQ2F0YWxvZ28sXHJcbiAgICAgICAgd2lkdGg6ICcxMDAwcHgnLFxyXG4gICAgICAgIG1heEhlaWdodDogJzkwdmgnXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhcyBtb25lZGFzXHJcbiAgICogQHJldHVybiBPYnNlcnZhYmxlPE1Nb25lZGFbXT5cclxuICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAqIGFjdHVhbGl6YWRvIDQtMTItMjAyMlxyXG4gICAqIEBwYXJhbSB0aXBvIDpzdHJpbmcgeyd0b2RhcycsJ3VubycsJ2FjdHVhbH1cclxuICAgKiBAcGFyYW0gaWQgOiBudW1iZXJcclxuICAgKiBAcmV0dXJucyBcclxuICAgKi8gXHJcbiAgICBcclxuICAgIFxyXG4gICAgcHVibGljIGdldE1vbmVkYXModGlwbzpzdHJpbmcsaWQ/Om51bWJlcik6IE9ic2VydmFibGU8TU1vbmVkYVtdPiB7ICAgICBcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TU1vbmVkYVtdPihgJHt0aGlzLlVSTH0vZGFvL2NmZy9tb25lZGFfZGFvLnBocD90aXBvPSR7dGlwb30maWQ9JHtpZH1gLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKX0pLnBpcGUoICAgICAgXHJcbiAgICAgICAgbWFwKChyZXNwOiBhbnkpID0+IHJlc3AuZGF0YS5tYXAoZWxlbWVudCA9PiBuZXcgTU1vbmVkYShlbGVtZW50KSkpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQERlc2NyaXB0aW9uOiBPYnRpZW5lIGxhIHRhc2EgZGUgY2FtYmlvIGFzb2NpYWRhcyBhIHVubyBvIHZhcmlhcyBtb25lZGFzXHJcbiAgICAgKiBAcGFyYW0gdGlwbyBzdHJpbmdcclxuICAgICAqIEBwYXJhbSBpZCBjb2RpZ28gbW9uZWRhXHJcbiAgICAgKiBAcmV0dXJucyBhcnJheS9udWxsXHJcbiAgICAgKiBAdGlwbzphbGwtPnRvZGFzLCAobW9uZWRhLT51bmEgbW9uZWRhIGlkLT5pZCBkZSBtb25lZGEpXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRDdXJyZW5jeUV4Y2hhbmdlUmF0ZSh0aXBvOiAnYWxsJ3wgJ21vbmVkYSc9IG51bGwsIGlkPzpudW1iZXIpOiBPYnNlcnZhYmxlPE1FeGNoYW5nZVJhdGVbXT4geyAgICAgXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE1FeGNoYW5nZVJhdGVbXT4oYCR7dGhpcy5VUkx9L2Rhby9jZmcvdGFzYV9jYW1iaW9fZGFvLnBocD90aXBvPSR7dGlwb30maWQ9JHtpZH1gLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKX0pLnBpcGUoICAgICAgICBcclxuICAgICAgICBtYXAoKHJlc3A6IGFueSkgPT4gcmVzcC5kYXRhLm1hcChlbGVtZW50ID0+IG5ldyBNRXhjaGFuZ2VSYXRlKGVsZW1lbnQpKSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcblxyXG5cclxuICBcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBBYnJlIGVsIGRpYWxvZyBkZSBsYXMgbGFzIGN1ZW50YXMgY29udGFibGVzIChDdWVudGFzIEluc3RpdHVjaW9uYWxlcylcclxuICAgICAqIEByZXR1cm4gUHJvbWlzZTxNY3VlbnRhSW5zdGl0dWNpb25hbD5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhc3luYyBvcGVuRGlhbG9nQ3VlbnRhc0luc3RpdHVjaW9uYWxlcygpOiBQcm9taXNlPE1DdWVudGFJbnN0aXR1Y2lvbmFsPiB7XHJcbiAgICAgIGxldCBhY2NvdW50czogTUN1ZW50YUluc3RpdHVjaW9uYWxbXSA9IGF3YWl0IHRoaXMuZ2V0Q3VlbnRhc0luc3RpdHVjaW9uYWxlcygpLnRvUHJvbWlzZSgpO1xyXG4gICAgICBsZXQgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihDYXRhbG9nb0NvbXBvbmVudCwge1xyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgIGNvbHVtbnM6IFsnY3VlbnRhJywgJ2Rlbm9taW5hY2lvbiddLFxyXG4gICAgICAgICAgY29sdW1uTmFtZXM6IFsnY3VlbnRhJywgJ2Rlbm9taW5hY2nDs24nXSxcclxuICAgICAgICAgIHRpdGxlOiAnQ2F0w6Fsb2dvIGRlIHBsYW4gZGUgY3VlbnRhIGluc3RpdHVjaW9uYWwnLFxyXG4gICAgICAgICAgZGF0YVNvdXJjZTogYWNjb3VudHNcclxuICAgICAgICB9IGFzIElDYXRhbG9nbyxcclxuICAgICAgICB3aWR0aDogJzEwMDBweCcsXHJcbiAgICAgICAgbWF4SGVpZ2h0OiAnOTB2aCdcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhcyBjdWVudGFzIGNvbnRhYmxlcyAoQ3VlbnRhcyBJbnN0aXR1Y2lvbmFsZXMpXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8TUN1ZW50YUluc3RpdHVjaW9uYWxbXT5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRDdWVudGFzSW5zdGl0dWNpb25hbGVzKGludmVudG9yeT86IGJvb2xlYW4pOiBPYnNlcnZhYmxlPE1DdWVudGFJbnN0aXR1Y2lvbmFsW10+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TUN1ZW50YUluc3RpdHVjaW9uYWxbXT4oYCR7dGhpcy5VUkx9L2Rhby9zY2cvY3VlbnRhc19kYW8ucGhwJHsoaW52ZW50b3J5KSA/ICc/aW52ZW50b3J5PXRydWUnIDogJyd9YCxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlc3A6IGFueSkgPT4gcmVzcC5kYXRhLm1hcChlbGVtZW50ID0+IG5ldyBNQ3VlbnRhSW5zdGl0dWNpb25hbChlbGVtZW50KSkpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQWJyZSBlbCBkaWFsb2cgZGUgbGFzIGN1ZW50YXMgZGUgcHJlc3VwdWVzdG8gKFJlY3Vyc29zIHkgRWdyZXNvcylcclxuICAgICAqIEByZXR1cm4gUHJvbWlzZTxNQ3VlbnRhUHJlc3VwdWVzdG8+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYXN5bmMgb3BlbkRpYWxvZ0N1ZW50YXNQcmVzdXB1ZXN0bygpOiBQcm9taXNlPE1DdWVudGFQcmVzdXB1ZXN0bz4ge1xyXG4gICAgICBsZXQgYWNjb3VudHM6IE1DdWVudGFQcmVzdXB1ZXN0b1tdID0gYXdhaXQgdGhpcy5nZXRDdWVudGFzUHJlc3VwdWVzdG8oKS50b1Byb21pc2UoKTtcclxuICAgICAgbGV0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oQ2F0YWxvZ29Db21wb25lbnQsIHtcclxuICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICBjb2x1bW5OYW1lczogWydjdWVudGEnLCAnZGVub21pbmFjacOzbiddLFxyXG4gICAgICAgICAgY29sdW1uczogWydjdWVudGEnLCAnZGVub21pbmFjaW9uJ10sXHJcbiAgICAgICAgICB0aXRsZTogJ0NhdMOhbG9nbyBkZSBDdWVudGFzIGRlIFByZXN1cHVlc3RvJyxcclxuICAgICAgICAgIGRhdGFTb3VyY2U6IGFjY291bnRzXHJcbiAgICAgICAgfSBhcyBJQ2F0YWxvZ28sXHJcbiAgICAgICAgd2lkdGg6ICcxMDAwcHgnLFxyXG4gICAgICAgIG1heEhlaWdodDogJzkwdmgnXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYXMgY3VlbnRhcyBkZSByZWN1cnNvcyB5IGVncmVzb3NcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxNQ3VlbnRhUHJlc3VwdWVzdG8+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0Q3VlbnRhc1ByZXN1cHVlc3RvKGZpbHRlcj86c3RyaW5nKTogT2JzZXJ2YWJsZTxNQ3VlbnRhUHJlc3VwdWVzdG9bXT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxNQ3VlbnRhUHJlc3VwdWVzdG8+KGAke3RoaXMuVVJMfS9kYW8vc2NnL3BsYW5fdW5pY29fY3VlbnRhc19kYW8ucGhwP2ZpbHRlcj0ke2ZpbHRlcn1gLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKCBtYXAoKHJlczogYW55KSA9PiByZXMuZGF0YS5tYXAoZWxlbWVudCA9PiBuZXcgTUN1ZW50YVByZXN1cHVlc3RvKGVsZW1lbnQpKSkpO1xyXG4gICAgfVxyXG5cclxuICAgXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBBYnJlIGVsIGPDoXRhbG9nbyBkZSBjdWVudGFzIGRlIGxhIHRhYmxhIFwic2NnX3BsYW5fdW5pY29fcmVcIlxyXG4gICAgICogQHJldHVybnMgUHJvbWlzZTxNQ3VlbnRhUHJlc3VwdWVzdG8+XHJcbiAgICAgKiBAYXV0aG9yIENhcmxvcyBBbGJvcm5velxyXG4gICAgICogQHBhcmFtcyBmaWx0cm86IEluZGljYSBiYWpvIHF1ZSBwYXJhbWV0cm9zIHNlIHZhIGEgZmlsdHJhciBlbCBjYXRhbG9nb1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYXN5bmMgb3BlbkNhdGFsb2dvQ3VlbnRhc1ByZXN1c3B1ZXN0byhcclxuICAgICAgdGl0dWxvOiBzdHJpbmcsXHJcbiAgICAgIGZpbHRybzogZmlsdHJvQ3VlbnRhc1ByZXN1cHVlc3RvID0gbnVsbCxcclxuICAgICAgYW5jaG86IHN0cmluZyA9ICcxMDAwcHgnXHJcbiAgICApOiBQcm9taXNlPE1DdWVudGFQcmVzdXB1ZXN0bz4ge1xyXG4gICAgICBsZXQgY3VlbnRhczogTUN1ZW50YVByZXN1cHVlc3RvW10gPSBbXTtcclxuXHJcbiAgICAgIGF3YWl0IHRoaXMuZ2V0Q3VlbnRhc1ByZXN1cHVlc3RvKCkudG9Qcm9taXNlKCkudGhlbigocmVzKSA9PiB7XHJcbiAgICAgICAgY3VlbnRhcyA9IHJlcztcclxuICAgICAgICBpZiAoZmlsdHJvKSB7XHJcbiAgICAgICAgICBpZiAoZmlsdHJvLmVzdGFkbykge1xyXG4gICAgICAgICAgICBjdWVudGFzID0gY3VlbnRhcy5maWx0ZXIoYyA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGMuc3RhdHVzID09IGZpbHRyby5lc3RhZG9cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChmaWx0cm8udGlwbykge1xyXG4gICAgICAgICAgICBjdWVudGFzID0gY3VlbnRhcy5maWx0ZXIoYyA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGMudGlwbyA9PSBmaWx0cm8udGlwb1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjdWVudGFzID0gY3VlbnRhcy5tYXAoZSA9PiB7XHJcbiAgICAgICAgICBlWydwcm92U3RhdHVzJ10gPSBlLnN0YXR1cyA9PSBcIkNcIiA/IFwiTW92aW1pZW50b3NcIiA6IFwiVG90YWxpemFkb3JhXCJcclxuICAgICAgICAgIGVbJ3Byb3ZUeXBlJ10gPSBlLnN0YXR1cyA9PSBcIlJcIiA/IFwiUmVjdXJzb3NcIiA6IFwiSW5ncmVzb3NcIlxyXG4gICAgICAgICAgcmV0dXJuIGVcclxuICAgICAgICB9KVxyXG4gICAgICB9KVxyXG4gICAgICByZXR1cm4gdGhpcy5vcGVuQ2F0YWxvZ29HZW5lcmljbyhcclxuICAgICAgICBbXCJjdWVudGFcIixcImRlbm9taW5hY2lvblwiLFwicHJvdlN0YXR1c1wiLFwicHJvdlR5cGVcIl0sXHJcbiAgICAgICAgdGl0dWxvLFxyXG4gICAgICAgIGN1ZW50YXMsXHJcbiAgICAgICAgW1wiQ3VlbnRhXCIsXCJEZW5vbWluYWNpw7NuXCIsXCJFc3RhZG9cIixcIlRpcG9cIl0sXHJcbiAgICAgICAgYW5jaG9cclxuICAgICAgKVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEFicmUgZWwgY8OhdGFsb2dvIGRlIGN1ZW50YXMgZGUgbGEgdGFibGEgXCJzcGdfY3VlbnRhc1wiXHJcbiAgICAgKiBAcmV0dXJucyBQcm9taXNlPE1DdWVudGFFZ3Jlc29zPlxyXG4gICAgICogQGF1dGhvciBDYXJsb3MgQWxib3Jub3pcclxuICAgICAqIEBwYXJhbXMgcHJlc3VwdWVzdG86IEluZGljYSBzaSBzZSBhIHRyYWJhamFyIGNvbiBlc3RydWN0dXJhIGRlIHByZXN1cHVlc3RvIG8gbm9cclxuICAgICAqL1xyXG4gICAgcHVibGljIGFzeW5jIG9wZW5DYXRhbG9nb0N1ZW50YXNFZ3Jlc28oXHJcbiAgICAgIHRpdHVsbzogc3RyaW5nLFxyXG4gICAgICBwcmVzdXB1ZXN0bzogYm9vbGVhbiA9IHRydWUsXHJcbiAgICAgIGFuY2hvOiBzdHJpbmcgPSBcIjEwMDBweFwiXHJcbiAgICApOiBQcm9taXNlPE1DdWVudGFFZ3Jlc29zPntcclxuICAgICAgbGV0IGN1ZW50YXM6IE1DdWVudGFFZ3Jlc29zW10gPSBbXTtcclxuICAgICAgYXdhaXQgdGhpcy5nZXRFeHBlbnNlQWNjb3VudHMoKS50b1Byb21pc2UoKS50aGVuKHJlcyA9PiB7XHJcbiAgICAgICAgY3VlbnRhcyA9IHJlc1xyXG4gICAgICAgIGN1ZW50YXMgPSBjdWVudGFzLmZpbHRlcihlID0+IHtcclxuICAgICAgICAgIHJldHVybiBlLnN0YXR1cyA9PSBcIkNcIlxyXG4gICAgICAgIH0pLm1hcChlID0+IHtcclxuICAgICAgICAgIGVbJ3Byb3ZTdGF0dXMnXSA9IGUuc3RhdHVzID09IFwiQ1wiID8gXCJNb3ZpbWllbnRvc1wiIDogXCJUb3RhbGl6YWRvcmFcIlxyXG4gICAgICAgICAgcmV0dXJuIGU7XHJcbiAgICAgICAgfSlcclxuICAgICAgfSlcclxuICAgICAgaWYgKHByZXN1cHVlc3RvKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMub3BlbkNhdGFsb2dvRG9zSW5wdXRzKFxyXG4gICAgICAgICAgW1wiY3VlbnRhXCIsXCJkZW5vbWluYWNpb25cIixcImVzdHJ1Y3R1cmFcIixcInByb3ZTdGF0dXNcIl0sXHJcbiAgICAgICAgICB0aXR1bG8sXHJcbiAgICAgICAgICBjdWVudGFzLFxyXG4gICAgICAgICAgW3tcclxuICAgICAgICAgICAgcGxhY2Vob2xkZXI6IFwiQ3VlbnRhXCIsXHJcbiAgICAgICAgICAgIHByb3BlcnR5OiBcImN1ZW50YVwiXHJcbiAgICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBcIkVzdHJ1Y3R1cmFcIixcclxuICAgICAgICAgICAgcHJvcGVydHk6IFwiZXN0cnVjdHVyYVwiXHJcbiAgICAgICAgICB9XSxcclxuICAgICAgICAgIFtcIkN1ZW50YVwiLCBcIkRlbm9taW5hY2nDs25cIiwgXCJFc3RydWN0dXJhXCIsIFwiRXN0YWRvXCJdLFxyXG4gICAgICAgICAgYW5jaG9cclxuICAgICAgICApXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbGV0IGZpbHRlcmVkQWNjb3VudHM6IE1DdWVudGFFZ3Jlc29zW10gPSBbXTtcclxuICAgICAgICBjdWVudGFzLmZvckVhY2goYyA9PiB7XHJcbiAgICAgICAgICBpZiAoIWZpbHRlcmVkQWNjb3VudHMuZmluZChlID0+IGUuY3VlbnRhID09IGMuY3VlbnRhKSkge1xyXG4gICAgICAgICAgICBmaWx0ZXJlZEFjY291bnRzLnB1c2goYylcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgIHJldHVybiB0aGlzLm9wZW5DYXRhbG9nb0dlbmVyaWNvKFxyXG4gICAgICAgICAgW1wiY3VlbnRhXCIsXCJkZW5vbWluYWNpb25cIixcInByb3ZTdGF0dXNcIl0sXHJcbiAgICAgICAgICB0aXR1bG8sXHJcbiAgICAgICAgICBmaWx0ZXJlZEFjY291bnRzLFxyXG4gICAgICAgICAgW1wiQ3VlbnRhXCIsIFwiRGVub21pbmFjacOzblwiLCBcIkVzdGFkb1wiXSxcclxuICAgICAgICAgIGFuY2hvXHJcbiAgICAgICAgKVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQWJyZSBlbCBjw6F0YWxvZ28gZGUgY3VlbnRhcyBkZSBsYSB0YWJsYSBcInNwaV9jdWVudGFzXCJcclxuICAgICAqIEByZXR1cm5zIFByb21pc2U8TUN1ZW50YUluZ3Jlc29zPlxyXG4gICAgICogQGF1dGhvciBDYXJsb3MgQWxib3Jub3pcclxuICAgICAqIEBwYXJhbXMgcHJlc3VwdWVzdG86IEluZGljYSBzaSBzZSBhIHRyYWJhamFyIGNvbiBlc3RydWN0dXJhIGRlIHByZXN1cHVlc3RvIG8gbm9cclxuICAgICAqL1xyXG4gICAgcHVibGljIGFzeW5jIG9wZW5DYXRhbG9nb0N1ZW50YXNJbmdyZXNvKFxyXG4gICAgICB0aXR1bG86IHN0cmluZyxcclxuICAgICAgcHJlc3VwdWVzdG86IGJvb2xlYW4gPSB0cnVlLFxyXG4gICAgICBhbmNobzogc3RyaW5nID0gXCIxMDAwcHhcIlxyXG4gICAgKTogUHJvbWlzZTxNQ3VlbnRhSW5ncmVzb3M+e1xyXG4gICAgICBsZXQgY3VlbnRhczogTUN1ZW50YUluZ3Jlc29zW10gPSBbXTtcclxuICAgICAgYXdhaXQgdGhpcy5nZXRJbmNvbWVBY2NvdW50cygpLnRvUHJvbWlzZSgpLnRoZW4oKHJlczogSVJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgY3VlbnRhcyA9IHJlcy5kYXRhXHJcbiAgICAgICAgY3VlbnRhcyA9IGN1ZW50YXMuZmlsdGVyKGUgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIGUuZXN0YWRvID09IFwiQ1wiXHJcbiAgICAgICAgfSkubWFwKGUgPT4ge1xyXG4gICAgICAgICAgZVsncHJvdlN0YXR1cyddID0gZS5lc3RhZG8gPT0gXCJDXCIgPyBcIk1vdmltaWVudG9zXCIgOiBcIlRvdGFsaXphZG9yYVwiXHJcbiAgICAgICAgICByZXR1cm4gZTtcclxuICAgICAgICB9KVxyXG4gICAgICB9KVxyXG4gICAgICBpZiAocHJlc3VwdWVzdG8pIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5vcGVuQ2F0YWxvZ29Eb3NJbnB1dHMoXHJcbiAgICAgICAgICBbXCJjdWVudGFcIixcImRlbm9taW5hY2lvblwiLFwiZXN0cnVjdHVyYVwiLFwicHJvdlN0YXR1c1wiXSxcclxuICAgICAgICAgIHRpdHVsbyxcclxuICAgICAgICAgIGN1ZW50YXMsXHJcbiAgICAgICAgICBbe1xyXG4gICAgICAgICAgICBwbGFjZWhvbGRlcjogXCJDdWVudGFcIixcclxuICAgICAgICAgICAgcHJvcGVydHk6IFwiY3VlbnRhXCJcclxuICAgICAgICAgIH0sIHtcclxuICAgICAgICAgICAgcGxhY2Vob2xkZXI6IFwiRXN0cnVjdHVyYVwiLFxyXG4gICAgICAgICAgICBwcm9wZXJ0eTogXCJlc3RydWN0dXJhXCJcclxuICAgICAgICAgIH1dLFxyXG4gICAgICAgICAgW1wiQ3VlbnRhXCIsIFwiRGVub21pbmFjacOzblwiLCBcIkVzdHJ1Y3R1cmFcIiwgXCJFc3RhZG9cIl0sXHJcbiAgICAgICAgICBhbmNob1xyXG4gICAgICAgIClcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsZXQgZmlsdGVyZWRBY2NvdW50czogTUN1ZW50YUluZ3Jlc29zW10gPSBbXTtcclxuICAgICAgICBjdWVudGFzLmZvckVhY2goYyA9PiB7XHJcbiAgICAgICAgICBpZiAoIWZpbHRlcmVkQWNjb3VudHMuZmluZChlID0+IGUuY3VlbnRhID09IGMuY3VlbnRhKSkge1xyXG4gICAgICAgICAgICBmaWx0ZXJlZEFjY291bnRzLnB1c2goYylcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgIHJldHVybiB0aGlzLm9wZW5DYXRhbG9nb0dlbmVyaWNvKFxyXG4gICAgICAgICAgW1wiY3VlbnRhXCIsXCJkZW5vbWluYWNpb25cIixcInByb3ZTdGF0dXNcIl0sXHJcbiAgICAgICAgICB0aXR1bG8sXHJcbiAgICAgICAgICBmaWx0ZXJlZEFjY291bnRzLFxyXG4gICAgICAgICAgW1wiQ3VlbnRhXCIsIFwiRGVub21pbmFjacOzblwiLCBcIkVzdGFkb1wiXSxcclxuICAgICAgICAgIGFuY2hvXHJcbiAgICAgICAgKVxyXG4gICAgICB9XHJcbiAgICB9ICAgIFxyXG5cclxuICAgIHB1YmxpYyBnZXRVbmlkYWRBZG1pbmlzdHJhdGl2YSh0aXBvPzpzdHJpbmcsZT86bnVtYmVyKXtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5VUkx9L2Rhby9zcGcvdW5pZGFkX2FkbWluaXN0cmF0aXZhX2Rhby5waHA/dGlwbz0ke3RpcG99JmU9JHtlfWAsXHJcbiAgICAgIHtoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCl9KVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlczphbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNQWRtaW5pc3RyYXRpdmVVbml0KGUpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgfSkgXHJcbiAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICAvKiogXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsb3MgY2FyZ29zIGRlIHNlcnZpY2lvc1xyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPElSZXNwb25zZT5cclxuICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRTZXJ2aWNlQ2hhcmdlcyhzZXJ2aWNlSWQ6bnVtYmVyID0gbnVsbCk6IE9ic2VydmFibGU8SVJlc3BvbnNlPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zb2Mvc2VydmljaW9fY2FyZ29fZGFvLnBocCR7XHJcbiAgICAgICAgc2VydmljZUlkID8gYD9zZXJ2aWNlX2lkPSR7c2VydmljZUlkfWAgOiAnJ1xyXG4gICAgICB9YCxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTVNlcnZpY2VDaGFyZ2UoZSkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgICAvKiogXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsb3MgcGFpc2VzXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8TUNvdW50cnk+XHJcbiAgICAgKiBAYXV0aG9yIENhcmxvcyBBbGJvcm5velxyXG4gICAgICogQG1vZGlmaWVkIDEwLTAxLTIwMjJcclxuICAgICAqIEBwYXJhbSBjb2RpZ286IENvZGlnbyBkZWwgcGFpc1xyXG5cclxuICAgICAqL1xyXG4gICAgICBwdWJsaWMgZ2V0Q291bnRyaWVzKGNvZGlnbz86c3RyaW5nKTogT2JzZXJ2YWJsZTxNQ291bnRyeVtdPiB7XHJcbiAgICAgICAgXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TUNvdW50cnk+KGAke3RoaXMuVVJMfS9kYW8vY2ZnL3BhaXNlc19kYW8ucGhwP2NvZGlnbz0ke2NvZGlnb31gLFxyXG4gICAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgICAgbWFwKChyZXM6IGFueSkgPT4gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1Db3VudHJ5KGUpKSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsb3MgZXN0YWRvc1xyXG4gICAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8TVN0YXRlPlxyXG4gICAgICAgKiBAYXV0aG9yIENhcmxvcyBBbGJvcm5velxyXG4gICAgICAgKiBAbW9kaWZpY2FkbyA0LTEyLTIwMjJcclxuICAgICAgICogQHBhcmFtIGNvZGlnbzogQ29kaWdvIGRlbCBwYWlzXHJcbiAgICAgICAqL1xyXG4gICAgICBwdWJsaWMgZ2V0U3RhdGVzKGNvZGlnbz86c3RyaW5nKTogT2JzZXJ2YWJsZTxNU3RhdGVbXT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE1TdGF0ZT4oYCR7dGhpcy5VUkx9L2Rhby9jZmcvZXN0YWRvc19kYW8ucGhwP2NvZGlnbz0ke2NvZGlnb31gLFxyXG4gICAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgICAgbWFwKChyZXM6IGFueSkgPT4gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1TdGF0ZShlKSkpXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gIFxyXG4gICAgICAvKipcclxuICAgICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbG9zIG11bmljaXBpb3NcclxuICAgICAgICogQHJldHVybiBPYnNlcnZhYmxlPE1NdW5pY2lwYWxpdHk+XHJcbiAgICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgICAqIEBtb2RpZmljYWRvIDEwLTAxLTIwMjJcclxuICAgICAgICogQHBhcmFtIHBhaXM6IENvZGlnbyBkZWwgcGFpcyAsXHJcbiAgICAgICAqIEBwYXJhbSBlc3RhZG86IENvZGlnbyBkZWwgZXN0YWRvXHJcbiAgICAgICAqIEBhY3R1YWxpemFkbyA0LTEyLTIwMjJcclxuICAgICAgICovXHJcbiAgICAgIHB1YmxpYyBnZXRNdW5pY2lwYWxpdGllcyhwYWlzPzpzdHJpbmcsZXN0YWRvPzpzdHJpbmcpOiBPYnNlcnZhYmxlPE1NdW5pY2lwYWxpdHlbXT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE1NdW5pY2lwYWxpdHk+KGAke3RoaXMuVVJMfS9kYW8vY2ZnL211bmljaXBpb3NfZGFvLnBocD9wYWlzPSR7cGFpc30mZXN0YWRvPSR7ZXN0YWRvfWAsXHJcbiAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgICBtYXAoKHJlczogYW55KSA9PiByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTU11bmljaXBhbGl0eShlKSkpXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gIFxyXG4gICAgICAvKipcclxuICAgICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbGFzIHBhcnJvcXVpYXMgXHJcbiAgICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxNUGFyaXNoPlxyXG4gICAgICAgKiBAYXV0aG9yIENhcmxvcyBBbGJvcm5velxyXG4gICAgICAgKiBAbW9kaWZpY2FkbyAxMC0wMS0yMDIyXHJcbiAgICAgICAqIEBwYXJhbSBwYWlzOiBDb2RpZ28gZGVsIHBhaXNcclxuICAgICAgICogQHBhcmFtIGVzdGFkbzogQ29kaWdvIGRlbCBlc3RhZG9cclxuICAgICAgICogQHBhcmFtIG11bmljaXBpbzpjb2RpZ28gTXVuaWNpcGlvXHJcbiAgICAgICAqIEBhY3R1YWxpemFkbyA0LTEyLTIwMjJcclxuXHJcbiAgICAgICAqL1xyXG4gICAgICBwdWJsaWMgZ2V0UGFyaXNoZXMocGFpcz86c3RyaW5nLGVzdGFkbz86c3RyaW5nLG11bmljaXBpbz86c3RyaW5nKTogT2JzZXJ2YWJsZTxNUGFyaXNoW10+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxNUGFyaXNoPihgJHt0aGlzLlVSTH0vZGFvL2NmZy9wYXJyb3F1aWFzX2Rhby5waHA/cGFpcz0ke3BhaXN9JmVzdGFkbz0ke2VzdGFkb30mbXVuaWNpcGlvPSR7bXVuaWNpcGlvfWAsXHJcbiAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgICBtYXAoKHJlczogYW55KSA9PiByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTVBhcmlzaChlKSkpXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gIFxyXG4gICAgICAvKipcclxuICAgICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbGFzIGNpdWRhZGVzXHJcbiAgICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxNUGFyaXNoPlxyXG4gICAgICAgKiBAYXV0aG9yIENhcmxvcyBBbGJvcm5velxyXG4gICAgICAgKiBAbW9kaWZpY2FkbyAxMC0wMS0yMDIyXHJcbiAgICAgICAqIEBwYXJhbSBwYWlzOiBDb2RpZ28gZGVsIHBhaXNcclxuICAgICAgICogQHBhcmFtIGVzdGFkbzogQ29kaWdvIGRlbCBlc3RhZG9cclxuXHJcblxyXG4gICAgICAgKi9cclxuICAgICAgICBwdWJsaWMgZ2V0Q2l0eShwYWlzPzpzdHJpbmcsZXN0YWRvPzpzdHJpbmcpOiBPYnNlcnZhYmxlPE1DaXR5W10+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxNQ2l0eT4oYCR7dGhpcy5VUkx9L2Rhby9jZmcvY2l1ZGFkZXNfZGFvLnBocD9wYWlzPSR7cGFpc30mZXN0YWRvPSR7ZXN0YWRvfWAsXHJcbiAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgICBtYXAoKHJlczogYW55KSA9PiByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTUNpdHkoZSkpKVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8qKlxyXG4gICAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYXMgY2l1ZGFkZXNcclxuICAgICAgICogQHJldHVybiBPYnNlcnZhYmxlPE1QYXJpc2g+XHJcbiAgICAgICAqIEBhdXRob3IgRGltYWx5IENyZXNwb1xyXG4gICAgICAgKiBAbW9kaWZpY2FkbyAxMC0wMS0yMDIyXHJcbiAgICAgICAqIEBwYXJhbSBwYWlzOiBDb2RpZ28gZGVsIHBhaXNcclxuXHJcbiAgICAgICAqL1xyXG4gICAgICAgIHB1YmxpYyBnZXRDb21tdW5pdGllcyhwYWlzPzpzdHJpbmcsZXN0YWRvPzpzdHJpbmcsIG11bmljaXBpbz86c3RyaW5nLHBhcnJvcXVpYT86c3RyaW5nKTogT2JzZXJ2YWJsZTxNQ29tbXVuaXR5W10+IHtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE1Db21tdW5pdHk+KGAke3RoaXMuVVJMfS9kYW8vY2ZnL2NvbXVuaWRhZGVzX2Rhby5waHA/cGFpcz0ke3BhaXN9JmVzdGFkbz0ke2VzdGFkb30mbXVuaWNpcGlvPSR7bXVuaWNpcGlvfSZwYXJyb3F1aWE9JHtwYXJyb3F1aWF9YCxcclxuICAgICAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICAgICAgbWFwKChyZXM6IGFueSkgPT4gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1Db21tdW5pdHkoZSkpKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxvcyBzaXN0ZW1hcyBhY3RpdmFzXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8TVNpc3RlbWE+XHJcbiAgICAgKiBAYXV0aG9yIENhcmxvcyBBbGJvcm5velxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0U2lzdGVtYXMoKTogT2JzZXJ2YWJsZTxNU2lzdGVtYVtdPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE1TaXN0ZW1hPihgJHt0aGlzLlVSTH0vZGFvL3Nzcy9zaXN0ZW1hc19kYW8ucGhwYCxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTVNpc3RlbWEoZSkpKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbGEgbW9uZWRhIGFjdHVhbFxyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPElSZXNwb25zZT5cclxuICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgKiBAYWN0dWFsaXphZG86IDQtMTItMjAyMjJcclxuICAgICAqIEBwYXJhbXMgaWQ6IGlkIGRlIGxhIG1vbmVkYSxcclxuICAgICAqIEBwYXJhbXMgdGlwbzogdG9kYXMtPm9idGllbmUgdG9kYXMgbGFzIG1vbmVkYSwgKHVuby0+IG9idGllbmUgdW5hIG1vbmVkYSArIGlkKVxyXG4gICAgICogKG1vbjpmb3JtYXRvIHBhcmEgaW5wdXRDdXJyZW5jeSArIGlkIClcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldEN1cnJlbnRDdXJyZW5jeSh0aXBvOid0b2Rhcyd8J3Vubyd8J21vbic9bnVsbCxpZD86bnVtYmVyKTogT2JzZXJ2YWJsZTxJUmVzcG9uc2U+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL2NmZy9tb25lZGFfZGFvLnBocD90aXBvPSR7dGlwb30maWQ9JHtpZH1gLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICByZXMuZGF0YSA9IG5ldyBNTW9uZWRhQ29uZmlnKHJlcy5kYXRhKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYSBsaW5lYSBlbXByZXNhXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQGF1dGhvciBEaW1hbHkgQ3Jlc3BvXHJcbiAgICAgKiBAYWN0dWFsaXphZG86IDUtMTItMjAyMjJcclxuICAgICAqL1xyXG4gICAgICAgICBwdWJsaWMgZ2V0RW50ZXJwcmlzZSh0aXBvOidsaW5lYScgfCdwcm9jZXNvJ3wnZGVmYXVsdCc9bnVsbCAsaWQ/Om51bWJlcik6IE9ic2VydmFibGU8SVJlc3BvbnNlPiB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vY2ZnL2VudGVycHJpc2VfZGFvLnBocD90aXBvPSR7dGlwb31gLFxyXG4gICAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNRW50ZXJwcmlzZShlKSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgIFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbG9zIHRpcG9zIGRlIG9yZ2FuaXphY2lvblxyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPElSZXNwb25zZT5cclxuICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRPcmdhbml6YXRpb25UeXBlcygpOiBPYnNlcnZhYmxlPElSZXNwb25zZT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vcnBjL3RpcG9fb3JnYW5pemFjaW9uX2Rhby5waHBgLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNT3JnYW5pemF0aW9uVHlwZShlKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsb3MgdGlwb3MgZGUgb3JnYW5pemFjaW9uXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQGF1dGhvciBDYXJsb3MgQWxib3Jub3pcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldFNwZWNpYWx0aWVzKCk6IE9ic2VydmFibGU8SVJlc3BvbnNlPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9ycGMvZXNwZWNpYWxpZGFkX2Rhby5waHBgLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNU3BlY2lhbHR5KGUpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxvcyBkb2N1bWVudG9zXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQGF1dGhvciBDYXJsb3MgQWxib3Jub3pcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldERvY3VtZW50cygpOiBPYnNlcnZhYmxlPElSZXNwb25zZT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vcnBjL2RvY3VtZW50b19kYW8ucGhwYCxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTURvY3VtZW50KGUpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhcyBjbGFzaWZpY2FjaW9uZXNcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxJUmVzcG9uc2U+XHJcbiAgICAgKiBAYXV0aG9yIENhcmxvcyBBbGJvcm5velxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0Q2xhc2lmaWNhdGlvbnMoKTogT2JzZXJ2YWJsZTxJUmVzcG9uc2U+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3JwYy9jbGFzaWZpY2FjaW9uX2Rhby5waHBgLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNQ2xhc2lmaWNhdGlvbihlKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBlbCBwcmVmaWpvIGRlIGxvcyB1c3Vhcmlvc1xyXG4gICAgICogQHBhcmFtIHByb2NlZGUgRGUgcXVlIG3Ds2R1bG8gcHJvY2VkZVxyXG4gICAgICogQHBhcmFtIGNvZHNpcyBDw7NkaWdvIGRlbCBzaXN0ZW1hXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8TVVzdWFyaW9QcmVmaWpvW10+XHJcbiAgICAgKiBAYXV0aG9yIENhcmxvcyBBbGJvcm5velxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0VXNlclByZWZpeChmaWx0ZXI6ICdkZXRhaWwnID0gbnVsbCwgY29kZTogc3RyaW5nID0gbnVsbCk6IE9ic2VydmFibGU8SVJlc3BvbnNlPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9jZmcvY29udHJvbF9udW1lcm9fZGFvLnBocCR7XHJcbiAgICAgICAgZmlsdGVyID8gYD9maWx0ZXI9JHtmaWx0ZXJ9JmNvZGU9JHtjb2RlfWAgOiAnJ1xyXG4gICAgICB9YCxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTVVzdWFyaW9QcmVmaWpvKGUpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsb3MgcGVmaWpvXHJcbiAgICAgKiBAcGFyYW0gcHJvY2VkZSBEZSBxdWUgbcOzZHVsbyBwcm9jZWRlXHJcbiAgICAgKiBAcGFyYW0gY29kc2lzIEPDs2RpZ28gZGVsIHNpc3RlbWFcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxNVXN1YXJpb1ByZWZpam9bXT5cclxuICAgICAqIEBhdXRob3IgRGltYWx5Q3Jlc3BvIDE3LTEyLTIwMjJcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldFByZWZpeChmaWx0ZXI6ICdhbGwnIHwgJ29uZScgPSBudWxsLCBjb2RlOiBzdHJpbmcgPSBudWxsKTogT2JzZXJ2YWJsZTxJUmVzcG9uc2U+IHtcclxuXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9jZmcvY29udHJvbF9udW1lcm9fZGFvLnBocCR7XHJcbiAgICAgICAgZmlsdGVyID8gYD9maWx0ZXI9JHtmaWx0ZXJ9JmNvZGU9JHtjb2RlfWAgOiAnJ1xyXG4gICAgICB9YCxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTVByZWZpam8oZSkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEFicmUgZWwgZGlhbG9nIHBhcmEgYnVzY2FyIGxvcyBwcm92ZWVkb3Jlc1xyXG4gICAgICogQHJldHVybiBQcm9taXNlPE1Qcm92ZWVkb3I+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYXN5bmMgb3BlbkRpYWxvZ1Byb3ZlZWRvcmVzKCk6IFByb21pc2U8TVByb3ZlZWRvcj4ge1xyXG4gICAgICBsZXQgcHJvdmVlZG9yZXM6IE1Qcm92ZWVkb3JbXSA9IGF3YWl0IHRoaXMuZ2V0UHJvdmVlZG9yZXMoKS50b1Byb21pc2UoKTtcclxuICAgICAgbGV0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oQ2F0YWxvZ29Db21wb25lbnQsIHtcclxuICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICBjb2x1bW5zOiBbJ3RpcG8nLCAncmlmJywgJ25vbWJyZSddLFxyXG4gICAgICAgICAgdGl0bGU6ICdDYXTDoWxvZ28gZGUgUHJvdmVlZG9yZXMgeSBCZW5lZmljaWFyaW9zJyxcclxuICAgICAgICAgIGRhdGFTb3VyY2U6IHByb3ZlZWRvcmVzXHJcbiAgICAgICAgfSBhcyBJQ2F0YWxvZ28sXHJcbiAgICAgICAgd2lkdGg6ICc0NTBweCcsXHJcbiAgICAgICAgbWF4SGVpZ2h0OiAnOTB2aCdcclxuICAgICAgfSk7XHJcblxyXG4gICAgICByZXR1cm4gZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsb3MgcHJvdmVlZG9yZXNcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxNUHJvdmVlZG9yW10+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0UHJvdmVlZG9yZXMoKTogT2JzZXJ2YWJsZTxNUHJvdmVlZG9yW10+IHtcclxuICAgICAgbGV0IHJlcXVlc3Q6IElSZXF1ZXN0ID0ge1xyXG4gICAgICAgIG9wZXJhY2lvbjogJ29idGVuZXJEYXRhJyxcclxuICAgICAgICBzaWdlc3BfY29uZXhpb246IHtcclxuICAgICAgICAgIHNlcnZpZG9yOiB0aGlzLlVSTCxcclxuICAgICAgICAgIHVzdWFyaW86IHRoaXMudXN1YXJpb0FjdGl2by5nZXRJbnRlcmZhY2UoKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8TVByb3ZlZWRvcltdPihgJHt0aGlzLlVSTH0vZGFvL3JwYy9wcm92ZWVkb3JfYmVuZWZpY2lhcmlvX2Rhby5waHBgLCByZXF1ZXN0KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHJlcy5tYXAoZWxlbWVudCA9PiBuZXcgTVByb3ZlZWRvcihlbGVtZW50KSkpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsb3MgcHJvdmVlZG9yZXMgeSBiZW5lZmljaWFyaW9zXHJcbiAgICAgKiBATm90ZSBTaSBxdWllcmUgc29sbyBsb3MgZGF0b3MgYmFzaWNvcyB1c2UgbG9zIHBhcmFtZXRyb3MgKCdTJywnUCcsJ04nKVxyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPElSZXNwb25zZT5cclxuICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgKiBAdHlwZSA9eydQJywnQicsJ1MnfVxyXG4gICAgICogQGRlc3RpbmF0aW9uID17J1AnLCdCJywnQycsJ0EnLCdOJ33iiYh7UHJvdmVlZG9yLEJlbmVmaWNpYXJpbyxDb250YXRpc3RhLEFtYm9zLE5pbmd1bm99XHJcbiAgICAgKiBAYWNjb3VudCA9eydTJywnTid9IHBhcmEgdHJhZXIgbGFzIGN1ZW50YXMgYmFuY2FyaWFzIGRlbCBwcm92ZWVkb3IgcG9yIGRlZmVjdG8gZXN0YSBlbiBOXHJcbiAgICAgKiBAbW9kaWZpY2FkbyAxNy0wNy0yMDIzXHJcbiAgICAgKi9cclxuXHJcbiAgICBwdWJsaWMgZ2V0UHJvdmlkZXJzQW5kQmVuZWZpY2lhcmllcyh0eXBlOiBzdHJpbmcgPSdkZWZhdWx0JywgZGVzdGluYXRpb246c3RyaW5nPW51bGwsIGFjY291bnQ6c3RyaW5nPSdOJyk6IE9ic2VydmFibGU8SVJlc3BvbnNlPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9ycGMvcHJvdmVlZG9yX2JlbmVmaWNpYXJpb19kYW8ucGhwJHt0eXBlID8gYD9wcm92aWRlcl90eXBlPSR7dHlwZX1gICA6ICcnfSZkZXN0aW5hdGlvbj0ke2Rlc3RpbmF0aW9ufSZhY2NvdW50PSR7YWNjb3VudH1gLCBcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTVByb3ZpZGVyQmVuZWZpY2lhcnkoZSkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIHVuIFVzdWFyaW8gc2VndW4gc3UgSURcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxJUmVzcG9uc2U+XHJcbiAgICAgKiBAYXV0aG9yIENhcmxvcyBBbGJvcm5velxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0VXNlckJ5SWQoaWQ6IG51bWJlcik6IE9ic2VydmFibGU8SVJlc3BvbnNlPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zc3MvdXN1YXJpb19kYW8ucGhwP2lkPSR7aWR9YCwgXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJlcy5kYXRhID0gbmV3IE1Vc3VhcmlvKHJlcy5kYXRhKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxvcyBiYW5jb3NcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxJUmVzcG9uc2U+XHJcbiAgICAgKiBAYXV0aG9yIENhcmxvcyBBbGJvcm5velxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0QmFua3MoaWRFbnRlcnByaXNlPzpudW1iZXIpOiBPYnNlcnZhYmxlPElSZXNwb25zZT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vc2NiL2JhbmNvX2Rhby5waHA/ZT0ke2lkRW50ZXJwcmlzZX1gLCBcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTUJhbmsoZSkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbG9zIHRpcG9zIGRlIGN1ZW50YSBiYW5jYXJpYXNcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxJUmVzcG9uc2U+XHJcbiAgICAgKiBAYXV0aG9yIENhcmxvcyBBbGJvcm5velxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0QmFua0FjY291bnRUeXBlcygpOiBPYnNlcnZhYmxlPElSZXNwb25zZT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vc2NiL2JhbmNvX3RpcG9fY3VlbnRhX2Rhby5waHBgLCBcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTUJhbmtBY2NvdW50VHlwZShlKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIG9idGllbmUgbGFzIGN1ZW50YSBzZWd1biBlbCBpZFxyXG4gICAgICogQHBhcmFtIHRpcG8geydiYW5jbycsICdkZWZhdWx0J31cclxuICAgICAqIEBwYXJhbSBpZCBwYXJhIGxhIG9wY2lvbiBiYW5jbyB1c2FyIGlkPWlkQmFuY28sIG9wY2lvbiBkZWZhdWxmIGlkPWlkRW50ZXJwcmlzZVxyXG4gICAgICogQHJldHVybnMgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRBbGxCYW5rQWNjb3VudCh0aXBvOnN0cmluZyxpZDpudW1iZXIpeyAgICAgICAgXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuVVJMfS9kYW8vc2NiL2N1ZW50YV9iYW5jb19kYW8ucGhwP3RpcG89JHt0aXBvfSZlPSR7aWR9YCxcclxuICAgICAge2hlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKX0pXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzOmFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGVsZW1lbnQgPT4gbmV3IE1DdWVudGFCYW5jbyhlbGVtZW50KSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXMuZGF0YSA9IFtdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlc1xyXG4gICAgICAgIH0pIFxyXG4gICAgICApXHJcbiAgICB9IFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbG9zIGJhbmNvcyBzaWdlY29mXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQGF1dGhvciBDYXJsb3MgQWxib3Jub3pcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldFNpZ2Vjb2ZCYW5rcygpOiBPYnNlcnZhYmxlPElSZXNwb25zZT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vc2lnZXNwL2JhbmNvX3NpZ2Vjb2ZfZGFvLnBocGAsIFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNU2lnZWNvZkJhbmsoZSkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbGEgY29uZmlndXJhY2lvbiBkZSBTT0NcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxJUmVzcG9uc2U+XHJcbiAgICAgKiBAYXV0aG9yIENhcmxvcyBBbGJvcm5velxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0Q29uZmlnU09DKCk6IE9ic2VydmFibGU8SVJlc3BvbnNlPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zb2MvY29uZmlndXJhY2lvbl9kYW8ucGhwYCwgXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJlcy5kYXRhID0gbmV3IE1Db25maWdTT0MocmVzLmRhdGEpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbG9zIHRpcG9zIGRlIGRlZHVjY2lvblxyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPElSZXNwb25zZT5cclxuICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXREZWR1Y3Rpb25UeXBlcygpOiBPYnNlcnZhYmxlPElSZXNwb25zZT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vc3RiL3RpcG9fZGVkdWNjaW9uX2Rhby5waHBgLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNRGVkdWN0aW9uVHlwZShlKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEluY29tZUFjY291bnRzKG9ubHlBdmFpbGFibGU6IGJvb2xlYW4gPSBmYWxzZSk6IE9ic2VydmFibGU8YW55PntcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5VUkx9L2Rhby9zcGkvY3VlbnRhc19pbmdyZXNvc19kYW8ucGhwJHtcclxuICAgICAgICBvbmx5QXZhaWxhYmxlID8gJz9hdmFpbGFibGU9dHJ1ZScgOiAnJ1xyXG4gICAgICB9YCwge2hlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKX0pLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXM6YW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTUN1ZW50YUluZ3Jlc29zKGUpKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldENoYXJnZXMoKXtcclxuXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oXHJcbiAgICAgICAgYCR7dGhpcy5VUkx9L2Rhby9zdGIvY2FyZ29zX2Rhby5waHBgLCBcclxuICAgICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9XHJcbiAgICAgICkucGlwZShcclxuICAgICAgICBtYXAoKHJlczogSVJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTUNhcmdvKGUpKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApXHJcbiAgXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldERlZHVjdGlvbnMoKXtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihcclxuICAgICAgICBgJHt0aGlzLlVSTH0vZGFvL3N0Yi9kZWR1Y2Npb25lc19kYW8ucGhwYCwgXHJcbiAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfVxyXG4gICAgICApLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXM6IElSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1EZWR1Y3Rpb24oZSkpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICkgIFxyXG4gICAgfVxyXG5cclxuICAgIC8qKiBcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhIGxvcyBkYXRvcyBkZSBFbXByZXNhXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQGF1dGhvciBEaW1hbHkgQ3Jlc3BvXHJcbiAgICAgKiBcclxuICAgICAqL1xyXG4gICAgIHB1YmxpYyBnZXRDb21wYW55KHRpcG8/OnN0cmluZyxpZD86bnVtYmVyKTogT2JzZXJ2YWJsZTxJUmVzcG9uc2U+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL2NmZy9lbXByZXNhc19kYW8ucGhwP3RpcG89JHt0aXBvfSZpZD0ke2lkfWAsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoICAgICAgICBcclxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTUVtcHJlc2EoZSkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgICAvKiogXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsb3MgdGlwb3MgZGUgZG9jdW1lbnRvcyByZWdpc3RyYWRvcyBlbiBDWFBcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxJUmVzcG9uc2U+XHJcbiAgICAgKiBAYXV0aG9yIERpbWFseSBDcmVzcG9cclxuICAgICAqIEBkYXRlIDIwLTA3LTIwMjFcclxuICAgICAqL1xyXG4gICAgICBwdWJsaWMgZ2V0VGlwb3NEb2N1bWV0b3MoKTogT2JzZXJ2YWJsZTxJUmVzcG9uc2U+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vY3hwL3RpcG9fZG9jdW1lbnRvX2Rhby5waHA/b3BlcmFjaW9uPSR7J2J1c2Nhcid9JmV4aXN0ZW49JHsnZXhpc3Rlbid9YCxcclxuICAgICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNVGlwb0RvY3VtZW50b0NYUChlKSk7ICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcblxyXG4gICAgIC8qKlxyXG4gICAgICAqIEBwYXJhbSBnZXQgdG9tYSBsb3MgdmFsb3JlczogWyBpZE9yZGVuQ29tcHJhICwncmVjZXBjaW9uJywnZXhpc3RlbicsJ2NvZGlnbycsICdvcmRlbmVzU09DJywgJ29wJywgJ2FydCcgXVxyXG4gICAgICAqIEBwYXJhbSBuIGNvZGlnbyBEb2N1bWVudG8gT3JkZW4sIHNlIHVzYSBwYXJhIG9idGVuZXIgbG9zIGRldGFsbGVzIGRlIGxhIG9yZGVuIGRlIGNvbXByYSwgZXMgb2JsaWdhdG9yaW8gYWwgY29tYmluYXIgY29uIGxhIG9wY2lvbiBnZXQ6IGlkT3JkZW5Db21wcmFcclxuICAgICAgKiBAZGVzY3JpcHRpb24gJ3JlY2VwY2lvbic6IE9idGluZSBsYXMgb3JkZW5lcyBkZSBzdW1pbmlzdHJvLFxyXG4gICAgICAqIGV4aXN0ZSB5IGNvZGlnbzogT2J0aWVuZSBsb3MgY29kaWdvcyByZWdpc3RyYWRvcywgXHJcbiAgICAgICogb3JkZW5lc1NPQzogb2J0aWVuZSBsYXMgb3JkZW5lcyBkZSBjb21wcmEsXHJcbiAgICAgICogb3A6IG9idGllbmUgbGFzIG9yZGVuZXMgcGVuZGllbnRlc1xyXG4gICAgICAqIGFydDogb2J0aWVuZSBsb3MgYXJ0aWN1bG9zIFxyXG4gICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxJUmVzcG9uc2U+XHJcbiAgICAgICogQGRhdGUgMy0xMC0yMDIxXHJcbiAgICAgICogQHJldHVybnMgXHJcbiAgICAgICovXHJcbiAgICAgICBwdWJsaWMgZ2V0RW50cmFkYVN1bWluaXN0cm9zKGdldDphbnksIG4/OnN0cmluZyk6IE9ic2VydmFibGU8SVJlc3BvbnNlPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3Npdi9lbnRyYWRhX3N1bWluaXN0cm9fZGFvLnBocD9nZXQ9JHtnZXR9Jm49JHtufWAsXHJcbiAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXMuc3VjY2VzcykgeyAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1FbnRyYWRhU3VtaW5pc3Ryb3MoZSkpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgLyoqIFxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbG9zIHRpcG9zIGRlIGRvY3VtZW50b3MgcmVnaXN0cmFkb3MgZW4gQ1hQXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQGF1dGhvciBEaW1hbHkgQ3Jlc3BvXHJcbiAgICAgKiBAZGF0ZSAyMC0wNy0yMDIxXHJcbiAgICAgKi9cclxuXHJcbiAgICAgIHB1YmxpYyBnZXRDb25jZXB0b3NDeFAoKXtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vY3hwL2NvbmNlcHRvX2Rhby5waHA/b3BlcmFjaW9uPSR7J2J1c2Nhcid9YCxcclxuICAgICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNQ29uY2VwdG9zQ1hQKGUpKTsgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICAvKiogXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsb3MgbG9zIGNvbmNlcHRvcyBSZXRlbmNpb24gSVNSTFxyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPElSZXNwb25zZT5cclxuICAgICAqIEBhdXRob3IgRGltYWx5IENyZXNwb1xyXG4gICAgICogQGRhdGUgMjYtMDctMjAyMVxyXG4gICAgICovXHJcblxyXG4gICAgICAgIHB1YmxpYyBnZXRDb25jZXB0b3NSZXRlbmNpb24oKXtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zdGIvZGVkdWNjaW9uZXNfZGFvLnBocD9jb2RlPSR7J2NvbmNlcHRvcyd9YCxcclxuICAgICAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChyZXMuc3VjY2VzcykgeyAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNQ29uY2VwdG9SZXRlbmNpb24oZSkpOyAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgLyoqIFxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbGEgY29uZmlndXJhY2nDs24gZGUgUlJISCB5IGRlIFNOT1xyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPElSZXNwb25zZT5cclxuICAgICAqIEBhdXRob3IgRGltYWx5IENyZXNwb1xyXG4gICAgICovXHJcbiAgICAgIHB1YmxpYyBvYnRlbmVyQ29uZmlndXJhY2lvblNOTygpe1xyXG4gICAgICBcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vc25vL2NvbmZpZ3VyYWNpb25fZGFvLnBocD90aXBvPSR7J2NvbmZpZ3VyYWNpb24nfWAsXHJcbiAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXMuc3VjY2VzcykgeyBcclxuICAgICAgICAgICAgICAgIGlmIChyZXMuZGF0YS5sZW5ndGg+MCl7XHJcbiAgICAgICAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1Db25maWd1cmFjaW9uU05PKGUpKTsgIFxyXG4gICAgICAgICAgICAgICAgfSAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgICAgICAgIFxyXG4gICAgICB9XHJcblxyXG4gICAgIC8qKlxyXG4gICAgICAqIFxyXG4gICAgICAqIEBwYXJhbSB0aXBvIFsnZGVmYXVsdCcsICd1bm8nLCAnY2FyZ29zJ10gZGFmYXVsdDpUb2RhcyBsYXMgbm9taW5hcywgdW5vOiB1bmEgbm9taW5hLCAnY2FyZ29zJzogbm9taW5hcyBwb3IgY2FyZ29zXHJcbiAgICAgICogQHBhcmFtIGlkIDppZCBkZSBsYSBub21pbmEuIENhbXBvIHJlcXVlcmlkbyBwYXJhIHVubyB5IGNhcmdvc1xyXG4gICAgICAqIEByZXR1cm5zIGFycmF5KCkgICAgICBcclxuICAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYXMgbm9taW5hcyByZWdpc3RyYWRhc1xyXG4gICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxJUmVzcG9uc2U+XHJcbiAgICAgICogQGRhdGUgMjAtMTAtMjFcclxuICAgICAgKlxyXG4gICAgICovICAgICBcclxuXHJcbiAgICAgICBwdWJsaWMgZ2V0Tm9taW5hKHRpcG86c3RyaW5nLGlkPzpudW1iZXIpe1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zbm8vZGVmaW5pY2lvbl9ub21pbmFfZGFvLnBocD90aXBvPSR7dGlwb30maWQ9JHtpZH1gLFxyXG4gICAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHsgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1EZWZpbmljaW9uTm9taW5hKGUpKTsgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuXHJcbiAgIC8qKlxyXG4gICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsb3MgY2FyZ29zIGRlIGxhcyBub21pbmFcclxuICAgICogQHBhcmFtIHRpcG8gWydjb2RpZ28nLCdkZWZhdWx0J10gLT5jb2RpZ286IG9idGllbmUgZWwgcHJveGltbyBjb2RpZ28uIC0+ZGVmYXVsdDogb2J0aWVuZSB0b2RvcyBsb3MgY2FyZ29zIGRlIGxhIG5vbWluYVxyXG4gICAgKiBAcGFyYW0gaWQgaWQgZGUgbGEgbm9taW5hXHJcbiAgICAqIEByZXR1cm5zIGFycmF5KClcclxuICAgICovXHJcbiAgICAgIHB1YmxpYyBnZXRDYXJnb3NOb21pbmEodGlwbzpzdHJpbmcsaWQ/Om51bWJlcil7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3Nuby9hc2lnbmFjaW9uX2Nhcmdvc19kYW8ucGhwP3RpcG89JHt0aXBvfSZpZD0ke2lkfWAsXHJcbiAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXMuc3VjY2VzcykgeyAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTUFzaWduYWNpb25DYXJnbyhlKSk7ICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICB9ICBcclxuICAgICAgXHJcbiAgICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgdW4gcGVyc29uYWwgZGUgbGEgbsOzbWluYVxyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPElSZXNwb25zZT5cclxuICAgICAqIEBhdXRob3IgRGltYWx5IENyZXNwb1xyXG4gICAgICovXHJcbiAgICAgICBwdWJsaWMgZ2V0UGVyc29uYWxTUkgodGlwbzpzdHJpbmcsaWQ/Om51bWJlcil7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3Nuby9wZXJzb25hbF9kYW8ucGhwP3RpcG89JHt0aXBvfSZpZD0ke2lkfWAsXHJcbiAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXMuc3VjY2VzcykgeyAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTVBlcnNvbmFsKGUpKTsgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0gXHJcblxyXG4gICAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhcyBhZ2VuY2lhIGRlIGJhbmNvXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQGF1dGhvciBEaW1hbHkgQ3Jlc3BvXHJcbiAgICAgKi9cclxuICAgICAgIHB1YmxpYyBnZXRBZ2VuY2lhQmFuY28odGlwbzpzdHJpbmcsaWQ/Om51bWJlcil7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3NjYi9hZ2VuY2lhX2Rhby5waHA/Y29kZT0ke3RpcG99JmlkPSR7aWR9YCxcclxuICAgICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNQWdlbmNpYUJhbmNvKGUpKTsgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0gXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYSBob2phcyBkZSB0aWVtcG9cclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxJUmVzcG9uc2U+XHJcbiAgICAgKiBAYXV0aG9yIERpbWFseSBDcmVzcG9cclxuICAgICAqL1xyXG4gICAgICAgICAgIHB1YmxpYyBnZXRIb2phVGllbXBvKHRpcG86c3RyaW5nLGlkUGVyc29uYWw/Om51bWJlcixpZE5vbWluYT86bnVtYmVyKXtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3Nuby9ob2phX3RpZW1wb19kYW8ucGhwP2lkUGVyc29uYWw9JHtpZFBlcnNvbmFsfSZpZE5vbWluYT0ke2lkTm9taW5hfWAsXHJcbiAgICAgICAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTUhvamFUaWVtcG8oZSkpOyAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9ICAgICAgICAgXHJcbiAgICAgICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsb3MgY2xpZW50ZXMgXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQGF1dGhvciBEaW1hbHkgQ3Jlc3BvXHJcbiAgICAgKiBAdGlwbyBbYmFzaWNvLGNvZGlnbyxjZWR1bGFdXHJcbiAgICAgKiBcclxuICAgICAqL1xyXG5cclxuICAgIHB1YmxpYyBnZXRDbGllbnRlKHRpcG86IHN0cmluZyA9J2RlZmF1bHQnLCBpZDpudW1iZXI9MCwgY29kaWdvOnN0cmluZz0nJywgY2VkdWxhOnN0cmluZz0nJyk6IE9ic2VydmFibGU8SVJlc3BvbnNlPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zZnYvY2xpZW50X2Rhby5waHA/dGlwbz0ke3RpcG99JmlkPSR7aWR9JmNvZGlnbz0ke2NvZGlnb30mY2VkcmlmY2xpPSR7Y2VkdWxhfWAsIFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKCAgICAgICBcclxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTUNsaWVudChlKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gVmFsaWRhIHNpIGxhIGZlY2hhIGVzdGEgZGVudHJvIGRlbCBwZXJpb2RvIGZpc2NhbCB5IGVsIG1lcyBlc3RhIGFiaWVydG8gbyBjZXJyYWRvXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQGF1dGhvciBEaW1hbHkgQ3Jlc3BvXHJcbiAgICAgKiBAYXV0aG9yIDExLTEwLTIwMjNcclxuICAgICAqL1xyXG4gICAgICAgcHVibGljIGdldFZhbGlkYXJQZXJpb2RvKGZlY2hhOnN0cmluZywgcGVyaW9kb0Zpc2NhbDpzdHJpbmcpe1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zY2cvY29uZmlndXJhY2lvbl9jb250YWJpbGlkYWRfZGFvLnBocD9mZWNoYT0ke2ZlY2hhfSZwZXJpb2RvPSR7cGVyaW9kb0Zpc2NhbH1gLFxyXG4gICAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUobWFwKChyZXM6IGFueSkgPT4geyByZXR1cm4gcmVzO30pKTtcclxuICAgICAgfSBcclxuICAgICAgXHJcblxyXG4gICAgXHJcbiAgXHJcblxyXG5cclxuICAgIHB1YmxpYyB1c2VySGFzUmlnaHRzKGNvbHVtbjonYWRtaW5pc3RyYWRvcicgfCAnaW5zZXJ0YXInIHwgJ2FjdHVhbGl6YXInIHwgJ2NvbnN1bHRhcicgXHJcbiAgICB8ICdlbGltaW5hcicgfCAnYW51bGFyJyB8J2Rlc2NhcmdhcicgfCAnZWplY3V0YXJfX3Byb2Nlc2FyXycgfCAnaW1wcmltaXInIFxyXG4gICAgfCAnZW52aWFyX19jb3JyZW9fJyB8ICd2aXNpYmxlJyl7XHJcblxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KFxyXG4gICAgICAgIGAke3RoaXMuVVJMfS9kYW8vc3NzL2RlcmVjaG9zX3VzdWFyaW9fZGFvLnBocD9pZENvbXBvbmVudD0ke1xyXG4gICAgICAgICAgdGhpcy5jdXJyZW50Q29tcG9uZW50LmlkXHJcbiAgICAgICAgfSZjb2x1bW49JHtjb2x1bW59YCwgXHJcbiAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfVxyXG4gICAgICApXHJcblxyXG4gICAgfVxyXG5cclxuICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0b3JuYSBsb3MgaGVhZGVycyBwYXJhIGhhY2VyIGxhcyBwZXRpY2lvbmVzXHJcbiAgICAgKiBAcGFyYW1zIHR5cGU6IFRpcG8gTUlNRSBwZXJtaXRpZG8gcG9yIGRlZmVjdG8gc2UgdG9tYSBhcHBsaWNhdGlvbi9qc29uXHJcbiAgICAgKiBAcmV0dXJuIEh0dHBIZWFkZXJzXHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICogQGRhdGUtdXBkYXRlOiAxNS0wNi0yMDIyIFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0SHR0cEhlYWRlcnModHlwZT86c3RyaW5nKTogSHR0cEhlYWRlcnMgeyBcclxuICAgICAgIXR5cGU/IHR5cGU9J2FwcGxpY2F0aW9uL2pzb24nOicnOyAgICAgIFxyXG4gICAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHtcclxuICAgICAgICAnQ29udGVudC1UeXBlJzogdHlwZSxcclxuICAgICAgICAnQXV0aG9yaXphdGlvbic6IGAke3RoaXMudXN1YXJpb0FjdGl2by50b2tlbn1gXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gaGVhZGVycztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGVsIHNlcnZpZG9yIGd1YXJkYWRvIGVuIGVsIHNlc3Npb25TdG9yYWdlXHJcbiAgICAgKiBAcmV0dXJuIHN0cmluZ1xyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldFNlcnZlcigpOiBzdHJpbmcge1xyXG4gICAgICByZXR1cm4gdGhpcy5VUkw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBlbCB1c3VhcmlvIGd1YXJkYWRvIGVuIGVsIHNlc3Npb25TdG9yYWdlXHJcbiAgICAgKiBAcmV0dXJuIE1Vc3VhcmlvXHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYXN5bmMgZ2V0VXNlcigpIHtcclxuICAgICAgbGV0IGNvbmV4aW9uOiBJQ29uZXhpb24gPSBhd2FpdCAoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgndXNlcicpKSA/IEpTT04ucGFyc2UoYXRvYihzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCd1c2VyJykpKSA6IG51bGw7XHJcbiAgICAgIC8vY29uc29sZS5sb2coY29uZXhpb24pXHJcbiAgICAgIC8vIGRlYnVnZ2VyXHJcbiAgICAgIGlmIChjb25leGlvbikge1xyXG4gICAgICAgIHRoaXMudXN1YXJpb0FjdGl2byA9IG5ldyBNVXN1YXJpbyhjb25leGlvbi51c3VhcmlvKTtcclxuICAgICAgICB0aGlzLlVSTCA9IGNvbmV4aW9uLnNlcnZpZG9yO1xyXG4gICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE11ZXN0cmEgdW4gdG9hc3QgZGUgc3VjY2Vzc1xyXG4gICAgICogQHBhcmFtIG1lc3NhZ2UgTWVuc2FqZSBxdWUgc2UgdmEgYSBtb3N0cmFyXHJcbiAgICAgKiBAcmV0dXJuIHZvaWRcclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzaG93VG9hc3RTdWNjZXNzKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICB0aGlzLnRvYXN0LnN1Y2Nlc3MobWVzc2FnZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gTXVlc3RyYSB1biB0b2FzdCBkZSBlcnJvclxyXG4gICAgICogQHBhcmFtIG1lc3NhZ2UgTWVuc2FqZSBxdWUgc2UgdmEgYSBtb3N0cmFyXHJcbiAgICAgKiBAcmV0dXJuIHZvaWRcclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzaG93VG9hc3RFcnJvcihtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgdGhpcy50b2FzdC5lcnJvcihtZXNzYWdlKTtcclxuICAgIH1cclxuXHJcbiAgICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE11ZXN0cmEgdW4gc3dlZXRhbGVydDIgZGUgw6l4aXRvXHJcbiAgICAgKiBAcGFyYW0gbWVzc2FnZSBNZW5zYWplIHF1ZSBzZSB2YSBhIG1vc3RyYXJcclxuICAgICAqIEByZXR1cm4gdm9pZFxyXG4gICAgICogQGRhdGUgMjItMTEtMjAyMVxyXG4gICAgICovXHJcbiAgICAgICBwdWJsaWMgc2hvd1RvYXN0U3VjY2Vzc1N3YWwobWVzc2FnZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgU3dhbC5maXJlKHtcclxuICAgICAgICAgIGljb246ICdzdWNjZXNzJyxcclxuICAgICAgICAgIHRpdGxlOiAnw4l4aXRvJyxcclxuICAgICAgICAgIHRleHQ6IG1lc3NhZ2UsICBcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcblxyXG4gICAgICBcclxuXHJcbiAgICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gTXVlc3RyYSB1biBzd2VldGFsZXJ0MiBkZSBlcnJvclxyXG4gICAgICogQHBhcmFtIG1lc3NhZ2UgTWVuc2FqZSBxdWUgc2UgdmEgYSBtb3N0cmFyXHJcbiAgICAgKiBAcmV0dXJuIHZvaWRcclxuICAgICAqIEBkYXRlIDIyLTExLTIwMjFcclxuICAgICAqL1xyXG4gICAgcHVibGljIHNob3dUb2FzdEVycm9yU3dhbChtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgU3dhbC5maXJlKHtcclxuICAgICAgICBpY29uOiAnZXJyb3InLFxyXG4gICAgICAgIHRpdGxlOiAnwqFFcnJvciEnLFxyXG4gICAgICAgIHRleHQ6IG1lc3NhZ2UsICBcclxuICAgICAgICAgICAgIFxyXG4gICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEd1YXJkYSBlbCB1c3VhcmlvIGxvZ3VlYWRvIGVuIGVsIFNlc3Npb25TdG9yYWdlXHJcbiAgICAgKiBAcGFyYW0gdXNlciBVc3VhcmlvIHF1ZSBzZSB2YSBhIGd1YXJkYXIgZW4gZWwgU2Vzc2lvblN0b3JhZ2VcclxuICAgICAqIEByZXR1cm4gdm9pZFxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIHNhdmVVc2VyKGRhdGE6IElDb25leGlvbik6IHZvaWQge1xyXG4gICAgICB0aGlzLnVzdWFyaW9BY3Rpdm8gPSBuZXcgTVVzdWFyaW8oZGF0YS51c3VhcmlvKTtcclxuICAgICAgdGhpcy5VUkwgPSBkYXRhLnNlcnZpZG9yO1xyXG4gICAgICBsZXQgZW5jcnlwdGVkVXNlcjogc3RyaW5nID0gYnRvYShKU09OLnN0cmluZ2lmeShkYXRhKSk7XHJcbiAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ3VzZXInLCBlbmNyeXB0ZWRVc2VyKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBTZXRlIGEgbGEgdXJsIGEgbGEgY3VhbCBzZSBsZSB2YW4gYSByZWFsaXphciBwZXRpY2lvbmVzIGFsIGJhY2tFbmRcclxuICAgICAqIEBwYXJhbSB1cmwgVVJsIGRvbmRlIHNlIHZhbiBhIHJlYWxpemFyIGxhcyBwZXRpY2lvbmVzXHJcbiAgICAgKiBAcmV0dXJuIHZvaWRcclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzZXRVcmwodXJsOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgdGhpcy5VUkwgPSB1cmw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gSW5pY2lhbGl6YSBlbCBzZXJ2aWNpbyBkZSBzaWdlc3BcclxuICAgICAqIEByZXR1cm4gdm9pZFxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGluaXQoKTogdm9pZCB7XHJcbiAgICAgIC8vIFZlcmlmaWNhbW9zIHNpIGhheSB1biB1c3VhcmlvIGVuIGxhIHNlc3Npb25TdG9yYWdlLCBlc3RvIGVzIG5lY2VzYXJpbyBwYXJhIHJlY2FyZ2FyIGxhIHDDoWdpbmFcclxuICAgICAgaWYgKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ3VzZXInKSkge1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ3VzZXInKSlcclxuICAgICAgICB0aGlzLmdldFVzZXIoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFZlcmlmaWNhIHNpIHVuIHVzdWFyaW8gZXN0w6EgbG9ndWVhZG9cclxuICAgICAqIEByZXR1cm4gUHJvbWlzZTxib29sZWFuPlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGFzeW5jIGlzTG9nZ2VkKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgIGlmIChzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCd1c2VyJykpIHtcclxuICAgICAgICAgIHJlc29sdmUodHJ1ZSlcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmVzb2x2ZShmYWxzZSlcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBoYW5kbGVyRXJyb3IoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKTogYW55IHtcclxuICAgICAgcmV0dXJuIHRocm93RXJyb3IoJ09jdXJyacOzIHVuIGVycm9yJylcclxuICAgIH1cclxuXHJcbiAgICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIG9idGllbmUgZWwgcGVyc29uYWwgc2VndW4gZmlsdHJvXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQGRhdGUgMTUtMTEtMjAyMVxyXG4gICAgICogQHBhcmFtIHRpcG86IHZhbG9yZXMgWydjYXRhbG9nbycsJ2NhdGFsb2dvU25vJywnZGVmYXVsdCcsJ25vbWluYScsJ3Jlc3BvbnNhYmxlcyddXHJcbiAgICAgKiBAcGFyYW1zIGRhdG86b2JqZWN0IHtub21icmU6c3RyaW5nLCBhcGVsbGlkbzpzdHJpbmcsIGNlZHVsYS5zdHJpbmd9IHVzZSBwYXJhIGxhIG9wY2lvbiAnY2F0YWxvZ28nIG8gJ2NhdGFsb2dvU25vJ1xyXG4gICAgICovXHJcbiAgICAgICBwdWJsaWMgZ2V0UGVyc29uYWwodGlwbzpzdHJpbmcsIGRhdG8/OmFueSl7XHJcbiAgICAgICAgICBsZXQgY2VkdWxhPScnO1xyXG4gICAgICAgICAgbGV0IG5vbWJyZT0nJztcclxuICAgICAgICAgIGxldCBhcGVsbGlkbz0nJztcclxuICAgICAgICAgIGxldCBpZEVudGVycHJpc2U9MDtcclxuICAgICAgICBpZihkYXRvKXtcclxuICAgICAgICAgIGNlZHVsYT1kYXRvLmNlZHVsYVxyXG4gICAgICAgICAgbm9tYnJlPWRhdG8ubm9tYnJlXHJcbiAgICAgICAgICBhcGVsbGlkbz1kYXRvLmFwZWxsaWRvXHJcbiAgICAgICAgICBpZEVudGVycHJpc2U9ZGF0by5pZEVudGVycHJpc2VcclxuICAgICAgICB9ICAgICAgICBcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vc25vL3BlcnNvbmFsX2Rhby5waHA/dGlwbz0ke3RpcG99JmNlZHVsYT0ke2NlZHVsYX0mbm9tYnJlPSR7bm9tYnJlfSZhcGVsbGlkbz0ke2FwZWxsaWRvfSZlPSR7aWRFbnRlcnByaXNlfWAsXHJcbiAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXMuc3VjY2VzcykgeyAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTVBlcnNvbmFsKGUpKTsgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0gXHJcblxyXG4gICAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBvYnRlbmVyIHBlcnNvbmFsIE5vbWluYSBzZWd1biBmaWx0cm9cclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxJUmVzcG9uc2U+XHJcbiAgICAgKiBAZGF0ZSAxNS0xMS0yMDIxXHJcbiAgICAgKiAqIEBwYXJhbSB0aXBvOiB2YWxvcmVzIFsnY2F0YWxvZ28nLCdkZWZhdWx0Jywnbm9taW5hJ11cclxuICAgICAqIEBwYXJhbXMgZGF0bzpvYmplY3Qge25vbWJyZTpzdHJpbmcsIGFwZWxsaWRvOnN0cmluZywgY2VkdWxhLnN0cmluZ30gdXNlIHBhcmEgbGEgb3BjaW9uICdjYXRhbG9nbydcclxuXHJcbiAgICAgKi9cclxuICAgICAgICBwdWJsaWMgZ2V0UGVyc29uYWxOb21pbmEodGlwbzpzdHJpbmcsZGF0bz86YW55KXtcclxuICAgICAgICAgIGxldCBjZWR1bGE9Jyc7XHJcbiAgICAgICAgICBsZXQgbm9tYnJlPScnO1xyXG4gICAgICAgICAgbGV0IGFwZWxsaWRvPScnO1xyXG4gICAgICAgICAgbGV0IGlkRW50ZXJwcmlzZT0wO1xyXG4gICAgICAgICAgbGV0IGlkTm9taW5hPTA7XHJcbiAgICAgICAgaWYoZGF0byl7XHJcbiAgICAgICAgICBjZWR1bGE9ZGF0by5jZWR1bGFcclxuICAgICAgICAgIG5vbWJyZT1kYXRvLm5vbWJyZVxyXG4gICAgICAgICAgYXBlbGxpZG89ZGF0by5hcGVsbGlkb1xyXG4gICAgICAgICAgaWRFbnRlcnByaXNlPWRhdG8uaWRFbnRlcnByaXNlXHJcbiAgICAgICAgICBpZE5vbWluYT1kYXRvLmlkTm9taW5hXHJcbiAgICAgICAgfSAgICAgICAgXHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vc25vL2FzaWduYWNpb25fcGVyc29uYWxfbm9taW5hX2Rhby5waHA/XHJcbiAgICAgICAgICB0aXBvPSR7dGlwb30mY2VkdWxhPSR7Y2VkdWxhfSZub21icmU9JHtub21icmV9JmFwZWxsaWRvPSR7YXBlbGxpZG99JmlkTm9taW5hPSR7aWROb21pbmF9JmlkRW50ZXJwcmlzZT0ke2lkRW50ZXJwcmlzZX1gLFxyXG4gICAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZSggICAgICAgICAgIFxyXG4gICAgICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1QZXJzb25hbE5vbWluYShlKSk7ICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogQHBhcmFtIGlkUGVyc29uYWw6IGlkIGRlbCBwZXJzb25hbFxyXG4gICAqIEBwYXJhbSB0aXBvOiB2YWxvcmVzWydub21pbmFfcGVyc29uYWwnXSBcclxuICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYXMgbm9taW5hcyBkZWwgcGVyc29uYWwgcmVzdW1pZGFcclxuICAgKiBAZGVwcmVjYXRlZDsgMjAtMDEtMjJcclxuICAgKiBAcmV0dXJucyBcclxuICAgKi9cclxuICBcclxuICBwdWJsaWMgZ2V0UGVyc29uYWxOb21pbmFSZXN1bWlkYShpZFBlcnNvbmFsOm51bWJlcix0aXBvOnN0cmluZyl7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zbm8vcGVyc29uYWxfZGFvLnBocD9pZFBlcnNvbmFsPSR7aWRQZXJzb25hbH0mdGlwbz0ke3RpcG99YCxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZSggICAgICAgXHJcbiAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTU5vbWluYVNpbXBsZShlKSk7ICAgICAgICAgICAgICBcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gICAgICAgLyoqXHJcbiAgICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGVsIEpzb24gU2lzdGVtYXMgcGFyYSBlbCB1c3VhcmlvIGRlZmluaWRvIHNlZ3VuIHN1IHBlcm1pc29sb2dpYSBkZWwgU2lzdGVtYVxyXG4gICAgICAgKiBAcmV0dXJuIEpzb24gZGF0YVxyXG4gICAgICAgKiBAYXV0aG9yIEluZy4gRGltYWx5IENyZXNwb1xyXG4gICAgICAgKi9cclxuICAgICAgIHB1YmxpYyBnZXRQZXJmaWxTaXN0ZW1hKGlkX3VzdWFyaW86bnVtYmVyICl7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5VUkx9L2Rhby9zc3MvdXN1YXJpb3Nfc2lzdGVtYXNfZGFvLnBocD9pZF91c3VhcmlvPSR7aWRfdXN1YXJpb31gLFxyXG4gICAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoICAgICAgICAgIFxyXG4gICAgICAgICAgbWFwKChyZXM6IGFueSkgPT4geyBcclxuICAgICAgICAgICAgaWYocmVzLmRhdGEubGVuZ3RoPjApe1xyXG4gICAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1Vc3VhcmlvU2lzdGVtYShlKSk7ICBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmVzOyAgICAgXHJcbiAgICAgICAgICAgfSlcclxuICAgICAgICAgIFxyXG4gICAgICAgICk7XHJcbiAgICAgIFxyXG4gICB9XHJcblxyXG4gIFxyXG4gICAgICAgLyoqXHJcbiAgICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGVsIEpzb24gTWVudSBwYXJhIGVsIHVzdWFyaW8gZGVmaW5pZG8gc2VndW4gc3UgcGVybWlzb2xvZ2lhIGRlbCBTaXN0ZW1hXHJcbiAgICAgICAqIEByZXR1cm4gSnNvbiBkYXRhXHJcbiAgICAgICAqIEBhdXRob3IgSW5nLiBXaWxtZXIgQnJpY2Vub1xyXG4gICAgICAgKi9cclxuICAgICAgICAgIHB1YmxpYyBnZXRQZXJmaWxOb0NvbXBvbmVudChpZF91c3VhcmlvOm51bWJlcixzaXN0ZW1hOnN0cmluZywgbmFtZUNvbXBvbmVudDogc3RyaW5nICl7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuVVJMfS9kYW8vc3NzL2RlcmVjaG9zX3VzdWFyaW9fZGFvLnBocD9pZF91c3VhcmlvPSR7aWRfdXN1YXJpb30mc2lzdGVtYT0ke3Npc3RlbWF9Jm5hbWVjb21wb25lbnQ9JHtuYW1lQ29tcG9uZW50fWAsXHJcbiAgICAgICAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoICAgICAgICAgIFxyXG4gICAgICAgICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHsgXHJcbiAgICAgICAgICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIFxyXG4gICAgICAgfVxyXG4gIFxyXG4gICAgICAgLyoqXHJcbiAgICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGVsIEpzb24gTWVudSBwYXJhIGVsIHVzdWFyaW8gZGVmaW5pZG8gc2VndW4gc3UgcGVybWlzb2xvZ2lhIGRlbCBTaXN0ZW1hXHJcbiAgICAgICAqIEByZXR1cm4gSnNvbiBkYXRhXHJcbiAgICAgICAqIEBhdXRob3IgSW5nLiBXaWxtZXIgQnJpY2Vub1xyXG4gICAgICAgKi9cclxuICAgICAgICBwdWJsaWMgZ2V0SnNvbk1lbnUoaWRfdXN1YXJpbzpudW1iZXIsc2lzdGVtYTpzdHJpbmcpe1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5VUkx9L2Rhby9zc3MvbWVudV9kYW8ucGhwP2lkX3VzdWFyaW89JHtpZF91c3VhcmlvfSZzaXN0ZW1hPSR7c2lzdGVtYX1gLFxyXG4gICAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZSggICAgICAgICAgXHJcbiAgICAgICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHsgXHJcbiAgICAgICAgICAgICAgIHRoaXMudXNlck1lbnUgPSByZXMuZGF0YTtcclxuICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudXNlck1lbnU7XHJcbiAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICAvKipcclxuICAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBlbCBKc29uIE1lbnUgcGFyYSBlbCB1c3VhcmlvIGRlZmluaWRvIHNlZ3VuIHN1IHBlcm1pc29sb2dpYSBkZWwgU2lzdGVtYVxyXG4gICAgICAqIEByZXR1cm4gSnNvbiBkYXRhXHJcbiAgICAgICogQGF1dGhvciBJbmcuIFdpbG1lciBCcmljZW5vXHJcbiAgICAgICovXHJcbiAgICAgIHB1YmxpYyBsb2coYm9keTogTUxvZyApeyAgXHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLlVSTH0vZGFvL3Nzcy9sb2dfZGFvLnBocGAsIGJvZHkgLCB7XHJcbiAgICAgICAgICAgICAgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpXHJcbiAgICAgICAgfSkucGlwZSggIFxyXG4gICAgICAgICAgbWFwKChyZXM6IGFueSkgPT4geyAgXHJcbiAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIClcclxuICAgIFxyXG4gICAgfVxyXG5cclxuICBcclxuICAgICAgICBcclxuICAgLyoqXHJcbiAgICAqIEBuYW1lIEVuY3J5cHREYXRhXHJcbiAgICAqIEBkZXNjcmlwdGlvbiBFbnNjcmlwdGEgdW5hIGV4cHJlc2lvbiBkYXRhXHJcbiAgICAqIEBhdXRob3IgSW5nLiBXaWxtZXIgQnJpY2XDsW9cclxuICAgICovXHJcbiAgICBwdWJsaWMgRW5jcnlwdERhdGEoIGV4cHJlc2lvbiA6IHN0cmluZyl7XHJcbiAgICAgICBjb25zdCBrZXkgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZSAoXCIwMTIzNDU2Nzg5U0lHRVNQXCIpOyAvLyBuw7ptZXJvIGhleGFkZWNpbWFsIGRlIDE2IGTDrWdpdG9zIGNvbW8gY2xhdmVcclxuICAgICAgIGNvbnN0IGl2ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UgKCdTSUdFU1AwMTIzNDU2Nzg5Jyk7IC8vIE7Dum1lcm8gaGV4YWRlY2ltYWwgY29tbyBkZXNwbGF6YW1pZW50byBkZSBjbGF2ZVxyXG4gICAgICAgbGV0IHNyY3MgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZShleHByZXNpb24pO1xyXG4gICAgICAgbGV0IGVuY3J5cHRlZCA9IENyeXB0b0pTLkFFUy5lbmNyeXB0KHNyY3MsIGtleSwgeyBpdjogaXYsIG1vZGU6IENyeXB0b0pTLm1vZGUuQ0JDLCBwYWRkaW5nOiBDcnlwdG9KUy5wYWQuUGtjczcgfSk7XHJcbiAgICAgICByZXR1cm4gZW5jcnlwdGVkLmNpcGhlcnRleHQudG9TdHJpbmcoKS50b1VwcGVyQ2FzZSgpO1xyXG4gICAgfVxyXG4gXHJcbiAgICAvKipcclxuICAgICogQG5hbWUgRGVjcnlwdERhdGFcclxuICAgICogQGRlc2NyaXB0aW9uIERlc2VuY3JpcHRhIHVuYSBleHByZXNpb24gZGF0YVxyXG4gICAgKiBAYXV0aG9yIEluZy4gV2lsbWVyIEJyaWNlw7FvXHJcbiAgICAqL1xyXG4gICAgcHVibGljIERlY3J5cHREYXRhKCBleHByZXNpb24gOiBzdHJpbmcpe1xyXG4gICAgICAgY29uc3Qga2V5ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UgKFwiMDEyMzQ1Njc4OVNJR0VTUFwiKTsgLy8gbsO6bWVybyBoZXhhZGVjaW1hbCBkZSAxNiBkw61naXRvcyBjb21vIGNsYXZlXHJcbiAgICAgICBjb25zdCBpdiA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlICgnU0lHRVNQMDEyMzQ1Njc4OScpOyAvLyBOw7ptZXJvIGhleGFkZWNpbWFsIGNvbW8gZGVzcGxhemFtaWVudG8gZGUgY2xhdmVcclxuICAgICAgIGxldCBlbmNyeXB0ZWRIZXhTdHIgPSBDcnlwdG9KUy5lbmMuSGV4LnBhcnNlKGV4cHJlc2lvbik7XHJcbiAgICAgICBsZXQgc3JjcyA9IENyeXB0b0pTLmVuYy5CYXNlNjQuc3RyaW5naWZ5KGVuY3J5cHRlZEhleFN0cik7XHJcbiAgICAgICBsZXQgZGVjcnlwdCA9IENyeXB0b0pTLkFFUy5kZWNyeXB0KHNyY3MsIGtleSwgeyBpdjogaXYsIG1vZGU6IENyeXB0b0pTLm1vZGUuQ0JDLCBwYWRkaW5nOiBDcnlwdG9KUy5wYWQuUGtjczcgfSk7XHJcbiAgICAgICBsZXQgZGVjcnlwdGVkU3RyID0gZGVjcnlwdC50b1N0cmluZyhDcnlwdG9KUy5lbmMuVXRmOCk7XHJcbiAgICAgICByZXR1cm4gZGVjcnlwdGVkU3RyLnRvU3RyaW5nKCk7XHJcbiAgICB9XHJcbiBcclxuIFxyXG4gICAgLyoqXHJcbiAgICAqIEBuYW1lIGdldFJlc3BvbnNlUGVyZmlsVG9vbGJhclxyXG4gICAgKiBAZGVzY3JpcHRpb24gTWV0b2RvIHF1ZSBvYnRpZW5lIHVuYSByZXNwdWVzdGEgdHJ1ZSBvIGZhbHNlIGJhc2FkbyBlbiB1bmEgZXN0cnVjdHVyYSBzcmluZyBiaW5hbnJpYSBzZWd1biBcclxuICAgICogICAgICAgICAgICAgIGxhIHBvc2ljaW9uIGRhZGEgZGVsIHRvb2xiYXIuIHNlIHBhc2Egc3RyaW5nIGJpbmFyaW8gcXVlIGNvbnRpZW5lIDEgeSAwIGVuIHJlcHJlc2VudGFjaW9uIFxyXG4gICAgKiAgICAgICAgICAgICAgZGUgbGFzIHByb3BpZXN0YWRlcyBhZG1pbmlzdHJhZG9yLGNvbnN1bHRhcixlamVjdXRhcixpbXByaW1pciBldGMgLi4uIGNhZGEgcG9zaWNpb24gc2VjdWVuY2lhbCBcclxuICAgICogICAgICAgICAgICAgIHNpIGVzdGEgZW4gMSBlcyB0cnVlIHkgMCBlbiBmYWxzZSB5IGRldnVsZXZlIGVsIHZhbG9yIHNlZ3VuIGxvIHJlcXVpZXJhIGVsIHVzdWFyaW86XHJcbiAgICAqICAgICAgICAgICAgICBzdHJpbmdiaW5hcmlvIDogJzEwMTEnIHkgcG9zaWNpb24gZXMgMiwgcG9yIHRhbnRvIHNlIHRhcmUgMCB5IGVzIGZhbHNlIHF1ZSByZXByZXNlbnRhIG9wY2lvbiBjb25zdWx0YXIuXHJcbiAgICAqICAgICAgICAgICAgICBFc3RydWN0dXJhIHN0cmluZyBiaW5hcmlvOlxyXG4gICAgKiAgICAgICAgICAgICAgUG9zaWNpw7NuIDpcclxuICAgICogICAgICAgICAgICAgIDAuICBBZG1pbmlzdHJhZG9yICAgICAgICA2LiAgRGVzY2FyZ2FyICAgICAgMTIuIFJldmVyc2FyIGFwcm9iYXIgICAgICAxOC4gUmV2ZXJzYXIgYW51bGFyIGNvbnRhYmlsaXphZG9cclxuICAgICogICAgICAgICAgICAgIDEuICBpbnNlcnRhciAgICAgICAgICAgICA3LiAgRWplY3V0YXIgICAgICAgMTMuIEFudWxhci5cclxuICAgICogICAgICAgICAgICAgIDIuICBBY3R1YWxpemFyICAgICAgICAgICA4LiAgRW52aWFyICAgICAgICAgMTQuIHJldmVyc2FyIGFudWxhclxyXG4gICAgKiAgICAgICAgICAgICAgMy4gIGNvbnN1bHRhciAgICAgICAgICAgIDkuIEltcHJpbWlyICAgICAgICAxNS4gY29udGFiaWxpemFyXHJcbiAgICAqICAgICAgICAgICAgICA0LiAgRWxpbWluYXIgICAgICAgICAgICAgMTAuIFZpc2libGUgICAgICAgIDE2LiByZXZlcnNhciBjb250YWJpbGl6YXJcclxuICAgICogICAgICAgICAgICAgIDUuICBBbnVsYXIgICAgICAgICAgICAgICAxMS4gQXByb2JhciAgICAgICAgMTcuIGFudWxhciBjb250YWJpbGl6YWRvICAgICAgIFxyXG4gICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgKiBAYXV0aG9yIEluZy4gV2lsbWVyIEJyaWNlw7FvXHJcbiAgICAqL1xyXG4gICAgIHB1YmxpYyBnZXRSZXNwb25zZVBlcmZpbFRvb2xiYXIoIHN0cmluZ2JpbmFyaW8gOiBzdHJpbmcsIHBvc2l0aW9uIDogbnVtYmVyICl7XHJcbiAgICAgICAgICBsZXQgYmluYXJpbyA9IHN0cmluZ2JpbmFyaW8uc3Vic3RyaW5nKHBvc2l0aW9uLHBvc2l0aW9uKzEpIDtcclxuICAgICAgICAgIGlmIChiaW5hcmlvPT1cIjFcIil7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7IFxyXG4gICAgICAgICAgfSAgIFxyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlOyBcclxuICAgICB9XHJcblxyXG4gLyoqXHJcbiAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGVsIElwIGRlbCBjbGllbnRlXHJcbiAgICAqIEByZXR1cm4gSnNvbiBkYXRhXHJcbiAgICAqIEBhdXRob3IgSW5nLiBXaWxtZXIgQnJpY2Vub1xyXG4gICAgKi9cclxuICBwdWJsaWMgZ2V0SVBBZGRyZXNzKCl7ICBcclxuXHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChcImh0dHA6Ly9hcGkuaXBpZnkub3JnLz9mb3JtYXQ9anNvblwiKSBcclxuICAgIC5waXBlKFxyXG4gICAgICBjYXRjaEVycm9yKChlcnIpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZygnZXJyb3IgY2F1Z2h0IGluIHNlcnZpY2UnKVxyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdpcF9hZHJlc3MnLCAnMTI3LjAuMC4xJyk7XHJcbiAgICAgICAgLy9IYW5kbGUgdGhlIGVycm9yIGhlcmVcclxuXHJcbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXJyKTsgICAgLy9SZXRocm93IGl0IGJhY2sgdG8gY29tcG9uZW50XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gICAgXHJcbiAgfVxyXG4gLyoqXHJcbiAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBlbCBJcCBkZWwgY2xpZW50ZVxyXG4gICogQHJldHVybiBKc29uIGRhdGFcclxuICAqIEBhdXRob3IgSW5nLiBXaWxtZXIgQnJpY2Vub1xyXG4gICovXHJcbiAgcHVibGljIHNldElwQWRyZXNzKCl7XHJcbiAgICB0aGlzLmdldElQQWRkcmVzcygpLnN1YnNjcmliZSggKHJlc3A6IGFueSkgICA9PiB7XHJcbiAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ2lwX2FkcmVzcycsIHJlc3AuaXApO1xyXG4gICAgICAgICB0aGlzLmlwX2FkcmVzcyA9IHJlc3AuaXA7XHJcbiAgICB9KTsgIFxyXG4gIH0gXHJcbiAvKipcclxuICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGVsIElwIGRlbCBjbGllbnRlXHJcbiAgKiBAcmV0dXJuIEpzb24gZGF0YVxyXG4gICogQGF1dGhvciBJbmcuIFdpbG1lciBCcmljZW5vXHJcbiAgKi9cclxuICBwdWJsaWMgZ2V0SXBBZHJlc3MoKXtcclxuICAgIHRoaXMuaXBfYWRyZXNzID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnaXBfYWRyZXNzJyk7ICBcclxuICB9IFxyXG5cclxuICAgLyoqXHJcbiAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBlbCBJcCBkZWwgY2xpZW50ZVxyXG4gICogQHJldHVybiBKc29uIGRhdGFcclxuICAqIEBkaWEgMTktMDUtMjAyMlxyXG4gICovICBcclxuXHJcbiAgICBwdWJsaWMgY3JlYXRlQXVkaXRvcmlhKHNubzpNU25vTG9nW10pe1xyXG4gICAgICBsZXQgYm9keT1bXTtcclxuICAgICAgc25vLmZvckVhY2goZT0+IHtib2R5LnB1c2goZS5kYXRhSW50ZWZhY2UoKSl9KTtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zbm8vc2VndXJpZGFkX2Rhby5waHA/YCxib2R5LFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKX0pXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtyZXR1cm4gcmVzO30pXHJcbiAgICAgICk7XHJcbiAgICB9ICBcclxuXHJcbiAvKiogIFxyXG4gICogQGRlc2NyaXB0aW9uIE9idGllbmUgbG9zIHRpcG9zIGRlIGRlcG9zaXRvcyAgKiBcclxuICAqIEBwYXJhbSBwcm9jZWRlIDogcHJvY2VkZSBkZWwgbW9kdWxvXHJcbiAgKiBAcGFyYW0gaWRBcnRpY3VsbyA6IGlkIGRlbCBhcnRpY3Vsb1xyXG4gICogQHBhcmFtIGlkVXN1YXJpbyA6IGlkIHVzdWFyaW8gcGVybWl0aWRvXHJcbiAgKiBAcmV0dXJucyBcclxuICAqIEBhdXRob3IgSmF2aWVyIFRvdmFyXHJcbiAgKiBAZGF0ZSAyMy0xMS0yMDIyXHJcbiAgKi8gICAgICBcclxuICBwdWJsaWMgZ2V0RGVwb3NpdFR5cGUocHJvY2VkZTpzdHJpbmcsaWRBcnRpY3VsbzpudW1iZXIsaWRVc3VhcmlvPzpudW1iZXIpe1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3Npdi9jYXRhbG9nb19wYXJhbWV0cml6YWRvX2Rhby5waHA/Z2V0PSR7cHJvY2VkZX0maWQ9JHtpZEFydGljdWxvfSZpPSR7aWRVc3VhcmlvfWAsXHJcbiAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKCAgICAgXHJcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHsgICAgICAgICAgICBcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTVRpcG9EZXBvc2l0b3MoZSkpOyAgICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqICBcclxuICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIENhcmdvcyBBZGljaW9uYWxlcyAgKiBcclxuICAqIEBwYXJhbSB0aXBvIDogb25lLGRlZmF1bHRcclxuICAqIEBwYXJhbSBpZCA6IGlkIGRlbCBjYXJnbyBcclxuICAqIEByZXR1cm5zIFxyXG4gICogQGF1dGhvciBEaW1hbHkgQ3Jlc3BvXHJcbiAgKiBAZGF0ZSAxMy0xMS0yMDIyXHJcbiAgKi8gICAgICBcclxuICBwdWJsaWMgZ2V0Q2FyZ29zQWRpY2lvbmFsZXModGlwbzpzdHJpbmcsaWQ/Om51bWJlcil7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vc3RiL2Nhcmdvc19hZGljaW9uYWxlc19kYW8ucGhwP3RpcG89JHt0aXBvfSZpZD0ke2lkfWAsXHJcbiAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKCAgICBcclxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXMuc3VjY2VzcykgeyAgICAgICAgICAgIFxyXG4gICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNQ2FyZ29zQWRpY2lvbmFsZXMoZSkpOyAgICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcblxyXG5cclxuICAgICAgICBcclxufVxyXG5cclxuICBcclxuaW50ZXJmYWNlIGZpbHRyb0N1ZW50YXNQcmVzdXB1ZXN0byB7XHJcbiAgdGlwbz86ICdFJyB8ICdSJyxcclxuICBlc3RhZG8/OiAnQycgfCAnUydcclxufVxyXG5cclxuXHJcbiJdfQ==
|
|
2052
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnZXNwLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zaWdlc3Avc3JjL2xpYi9zaWdlc3Auc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDNUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDbEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDeEQsT0FBTyxFQUFpQyxXQUFXLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUVqRixPQUFPLEVBQWMsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNqRSxPQUFPLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFckUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saURBQWlELENBQUM7QUFDcEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDL0UsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDbkYsT0FBTyxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUV4RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUU3RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFB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QUFHLElBQUUsR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLElBQUssS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLElBQUssS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLElBQUssS0FBSyxDQUFDLE9BQU8sSUFBRSxFQUFFO2VBQy9HLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRyxJQUFLLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRyxJQUFJLEtBQUssQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFLLEtBQUssQ0FBQyxPQUFPLElBQUksRUFBRSxJQUFLLEtBQUssQ0FBQyxPQUFPLElBQUksRUFBRSxFQUFHO1lBQzlHLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDSDs7Ozs7O09BTUc7SUFDTSxRQUFRLENBQUMsS0FBVztRQUN6QixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLElBQUssS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHO2VBQzVHLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFFLEdBQUcsSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFFLEdBQUcsSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFFLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO2VBQzdHLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRyxJQUFNLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRyxJQUFLLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRyxJQUFHLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRztlQUMxRyxLQUFLLENBQUMsR0FBRyxJQUFFLEdBQUcsSUFBTSxLQUFLLENBQUMsR0FBRyxJQUFFLEdBQUcsSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFFLEdBQUcsSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFFLEdBQUcsSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFFLEdBQUcsSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFFLEdBQUc7ZUFDMUcsS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLElBQUcsS0FBSyxDQUFDLE9BQU8sSUFBRSxJQUFJLElBQUssS0FBSyxDQUFDLE9BQU8sSUFBRSxHQUFHLElBQUcsS0FBSyxDQUFDLE9BQU8sSUFBRSxHQUFHO2VBQ2xHLEtBQUssQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFLLEtBQUssQ0FBQyxPQUFPLElBQUksRUFBRSxJQUFLLEtBQUssQ0FBQyxPQUFPLElBQUksRUFBRSxFQUFFO1lBQ3ZFLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRDs7Ozs7S0FLQztJQUNPLFFBQVEsQ0FBQyxLQUFXO1FBQzFCLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFFLEdBQUcsSUFBSyxLQUFLLENBQUMsR0FBRyxJQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLENBQUMsSUFBSyxLQUFLLENBQUMsR0FBRyxJQUFFLEdBQUcsSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFFLEdBQUc7ZUFDOUcsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRyxJ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YUFDM0Q7WUFDRCxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDOzswR0F2bUZZLGFBQWE7OEdBQWIsYUFBYSxjQUZaLE1BQU07MkZBRVAsYUFBYTtrQkFIekIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNUHJlZmlqbyB9IGZyb20gJy4vY29yZS9tb2RlbHMvQ0ZHL01QcmVmaWpvLm1vZGVsJztcclxuaW1wb3J0IHsgTUVudGVycHJpc2UgfSBmcm9tICcuL2NvcmUvbW9kZWxzL0NGRy9FbnRlcnByaXNlLm1vZGVsJztcclxuaW1wb3J0IHsgTVBlcnNvbmFsTm9taW5hIH0gZnJvbSAnLi9jb3JlL21vZGVscy9TTk8vTVBlcnNvbmFsTm9taW5hLm1vZGVsJztcclxuaW1wb3J0IHsgTUhvamFUaWVtcG8gfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NOTy9NSG9qYVRpZW1wby5tb2RlbCc7XHJcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTVVzdWFyaW8gfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NTUy91c2VyLm1vZGVsJztcclxuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEVycm9yUmVzcG9uc2UsIEh0dHBIZWFkZXJzfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IElSZXF1ZXN0IH0gZnJvbSAnLi9jb3JlL2ludGVyZmFjZXMvUmVxdWVzdCc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgTVByb3ZlZWRvciB9IGZyb20gJy4vY29yZS9tb2RlbHMvUlBDL3Byb3ZlZWRvcmVzLm1vZGVsJztcclxuaW1wb3J0IHsgbWFwLCBjYXRjaEVycm9yLCByZXRyeSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgTVVzdWFyaW9QcmVmaWpvIH0gZnJvbSAnLi9jb3JlL21vZGVscy9DRkcvdXNlclByZWZpeC5tb2RlbCc7XHJcbmltcG9ydCB7IElDYXRhbG9nbywgZmlsdGVyRGF0YSB9IGZyb20gJy4vY29yZS9pbnRlcmZhY2VzL0NhdGFsb2dvJztcclxuaW1wb3J0IHsgQ2F0YWxvZ29Db21wb25lbnQgfSBmcm9tICcuL3NoYXJlZC9jb21wb25lbnRzL2NhdGFsb2dvL2NhdGFsb2dvLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE1DdWVudGFQcmVzdXB1ZXN0byB9IGZyb20gJy4vY29yZS9tb2RlbHMvU1BHL2N1ZW50YVByZXN1cHVlc3RvLm1vZGVsJztcclxuaW1wb3J0IHsgTUN1ZW50YUluc3RpdHVjaW9uYWwgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NDRy9jdWVudGFJbnN0aXR1Y2lvbmFsLm1vZGVsJztcclxuaW1wb3J0IHsgTU1vbmVkYSwgTU1vbmVkYUNvbmZpZyB9IGZyb20gJy4vY29yZS9tb2RlbHMvQ0ZHL21vbmVkYS5tb2RlbCc7XHJcbmltcG9ydCB7IFRvYXN0clNlcnZpY2UgfSBmcm9tICduZ3gtdG9hc3RyJztcclxuaW1wb3J0IHsgTVVuaWRhZFRyaWJ1dGFyaWEgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NUQi91bmlkYWRUcmlidXRhcmlhLm1vZGVsJztcclxuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBVbnR5cGVkRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBDb25maXJtQ29tcG9uZW50IH0gZnJvbSAnLi9zaGFyZWQvY29tcG9uZW50cy9jb25maXJtL2NvbmZpcm0uY29tcG9uZW50JztcclxuaW1wb3J0IHsgTUNvbmZpZ3VyYWNpb25TQ0cgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NDRy9jb25maWd1cmFjaW9uU0NHLm1vZGVsJztcclxuaW1wb3J0IHsgTVBsYW5Vbmljb0N1ZW50YSB9IGZyb20gJy4vY29yZS9tb2RlbHMvU0NHL3BsYW5Vbmljb0N1ZW50YS5tb2RlbCc7XHJcbmltcG9ydCB7IElDb25leGlvbiB9IGZyb20gJy4vY29yZS9pbnRlcmZhY2VzL1VzdWFyaW8nO1xyXG5pbXBvcnQgeyBUYWJsZVNlbGVjdENvbXBvbmVudCB9IGZyb20gJy4vc2hhcmVkL2NvbXBvbmVudHMvdGFibGUtc2VsZWN0L3RhYmxlLXNlbGVjdC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBNQ29uZmlndXJhdGlvblNQRyB9IGZyb20gJy4vY29yZS9tb2RlbHMvU1BHL2NvbmZpZ3VyYXRpb25TUEcubW9kZWwnO1xyXG5pbXBvcnQgeyBNRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhT25lLCBNRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhVHdvLCBNRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhVGhyZWUsIE1Fc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFGb3VyLCBNRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhRml2ZUNvbXBsZXRlLCBNRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhRml2ZSwgTUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYVRocmVlQ29tcGxldGUsIE1BbGxTdHJ1Y3R1cmUgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NQRy9lc3RydWN0dXJhUHJlc3VwdWVzdGFyaWEubW9kZWwnO1xyXG5pbXBvcnQgeyBJRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhT25lLCBJRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhVHdvLCBJRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhVGhyZWUsIElFc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFGb3VyLCBJRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhRml2ZUNvbXBsZXRlLCBJRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhRml2ZSB9IGZyb20gJy4vY29yZS9pbnRlcmZhY2VzL0VzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYSc7XHJcbmltcG9ydCB7IE1DZW50cm9Db3N0bywgTVVzdWFyaW9DZW50cm9Db3N0byB9IGZyb20gJy4vY29yZS9tb2RlbHMvU0NHL2NlbnRyb0Nvc3RvLm1vZGVsJztcclxuaW1wb3J0IHsgTUZ1ZW50ZUZpbmFuY2lhbWllbnRvIH0gZnJvbSAnLi9jb3JlL21vZGVscy9TUEcvZnVlbnRlRmluYW5jaWFtaWVudG8ubW9kZWwnO1xyXG5pbXBvcnQgeyBNQ3VlbnRhRWdyZXNvcyB9IGZyb20gJy4vY29yZS9tb2RlbHMvU1BHL2V4cGVuc2l2ZUFjY291bnQubW9kZWwnO1xyXG5pbXBvcnQgeyBDYXRhbG9nb0VzdHJ1Y3R1cmFzQ29tcG9uZW50IH0gZnJvbSAnLi9zaGFyZWQvY29tcG9uZW50cy9jYXRhbG9nby1lc3RydWN0dXJhcy9jYXRhbG9nby1lc3RydWN0dXJhcy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBJVXBkYXRlRGlzdHJpYnV0aW9uLCBJVXBkYXRlRGlzdHJpYnV0aW9uMiwgSVVwZGF0ZURpc3RyaWJ1dGlvbkluZ3Jlc29zLCBJVXBkYXRlRGlzdHJpYnV0aW9uSW5ncmVzb3MyIH0gZnJvbSAnLi9jb3JlL2ludGVyZmFjZXMvQ3VlbnRhRWdyZXNvcyc7XHJcbmltcG9ydCB7IENhdGFsb2dvRG9ibGVJbnB1dENvbXBvbmVudCB9IGZyb20gJy4vc2hhcmVkL2NvbXBvbmVudHMvY2F0YWxvZ28tZG9ibGUtaW5wdXQvY2F0YWxvZ28tZG9ibGUtaW5wdXQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTVNpc3RlbWEsIE1Vc3VhcmlvU2lzdGVtYSB9IGZyb20gJy4vY29yZS9tb2RlbHMvU1NTL3Npc3RlbWEnO1xyXG5pbXBvcnQgeyBJQ29tcHJvYmFudGVQcmVzdXB1ZXN0YXJpb0VncmVzb3MsIElDb21wcm9iYW50ZVByZXN1cHVlc3RhcmlvSW5ncmVzb3MgfSBmcm9tICcuL2NvcmUvaW50ZXJmYWNlcy9Db21wcm9iYW50ZVByZXN1cHVlc3RhcmlvJztcclxuaW1wb3J0IHsgTUNvbXByb2JhbnRlUHJlc3VwdWVzdGFyaW9FZ3Jlc29zLCBNQ29tcHJvYmFudGVQcmVzdXB1ZXN0YXJpb0luZ3Jlc29zIH0gZnJvbSAnLi9jb3JlL21vZGVscy9TUEcvY29tcHJvYmFudGVQcmVzdXB1ZXN0YXJpby5tb2RlbCc7XHJcbmltcG9ydCB7IE1DdWVudGFJbmdyZXNvcyB9IGZyb20gJy4vY29yZS9tb2RlbHMvU0NHL0luY29tZUFjY291bnQnO1xyXG5pbXBvcnQgeyBNSW5jb21lU3RydWN0dXJlQWNjb3VudCB9IGZyb20gJy4vY29yZS9tb2RlbHMvU1BHL2luY29tZVN0cnVjdHVyZUFjY291bnQubW9kZWwnO1xyXG5pbXBvcnQgeyBNT3JnYW5pemF0aW9uVHlwZSB9IGZyb20gJy4vY29yZS9tb2RlbHMvU1BHL29yZ2FuaXphdGlvblR5cGUubW9kZWwnO1xyXG5pbXBvcnQgeyBNU3BlY2lhbHR5IH0gZnJvbSAnLi9jb3JlL21vZGVscy9SUEMvc3BlY2lhbHR5Lm1vZGVsJztcclxuaW1wb3J0IHsgTURvY3VtZW50IH0gZnJvbSAnLi9jb3JlL21vZGVscy9SUEMvZG9jdW1lbnQubW9kZWwnO1xyXG5pbXBvcnQgeyBNQ2xhc2lmaWNhdGlvbiB9IGZyb20gJy4vY29yZS9tb2RlbHMvUlBDL2NsYXNpZmljYXRpb24ubW9kZWwnO1xyXG5pbXBvcnQgeyBNQ291bnRyeSwgTVN0YXRlLCBNTXVuaWNpcGFsaXR5LCBNUGFyaXNoLCBNQ2l0eSwgTUNvbW11bml0eSB9IGZyb20gJy4vY29yZS9tb2RlbHMvQ0ZHL2xvY2F0aW9ucy5tb2RlbCc7XHJcbmltcG9ydCB7IE1Qcm92aWRlckJlbmVmaWNpYXJ5IH0gZnJvbSAnLi9jb3JlL21vZGVscy9SUEMvcHJvdmlkZXJCZW5lZmljaWFyeS5tb2RlbCc7XHJcbmltcG9ydCB7IE1TaWdlY29mQmFuaywgTUJhbmssIE1CYW5rQWNjb3VudFR5cGUsIE1BZ2VuY2lhQmFuY28sIE1DdWVudGFCYW5jbyB9IGZyb20gJy4vY29yZS9tb2RlbHMvU0NCL2JhbmsubW9kZWwnO1xyXG5pbXBvcnQgeyBJUmVzcG9uc2UgfSBmcm9tICcuL2NvcmUvaW50ZXJmYWNlcy9SZXNwb25zZSc7XHJcbmltcG9ydCB7IE1Db25maWd1cmF0aW9uUlBDIH0gZnJvbSAnLi9jb3JlL21vZGVscy9SUEMvY29uZmlndXJhY2lvblJQQy5tb2RlbCc7XHJcbmltcG9ydCB7IE1Db25maWdTT0MgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NPQy9jb25maWd1cmFjaW9uU09DLm1vZGVsJztcclxuaW1wb3J0IHsgTURlZHVjdGlvblR5cGUgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NUQi9kZWR1Y3Rpb25UeXBlLm1vZGVsJztcclxuaW1wb3J0IHsgTUNhcmdvIH0gZnJvbSAnLi9jb3JlL21vZGVscy9TT0MvY2hhcmdlLm1vZGVsJztcclxuaW1wb3J0IHsgTUNvbmNlcHRvUmV0ZW5jaW9uLCBNRGVkdWN0aW9uIH0gZnJvbSAnLi9jb3JlL21vZGVscy9TVEIvZGVkdWN0aW9uLm1vZGVsJztcclxuaW1wb3J0IHsgTUNvbmZpZ1NTUyB9IGZyb20gJy4vY29yZS9tb2RlbHMvU1NTL3NlY3VyaXR5Q29uZmlndXJhdGlvbi5tb2RlbCc7XHJcbmltcG9ydCB7IE1BZG1pbmlzdHJhdGl2ZVVuaXQgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NQRy9hZG1pbmlzdHJhdGl2ZVVuaXQubW9kZWwnO1xyXG5pbXBvcnQgeyBNQ29tcG9uZW50IH0gZnJvbSAnLi9jb3JlL21vZGVscy9TU1MvY29tcG9uZW50Lm1vZGVsJztcclxuaW1wb3J0IHsgTUxvZyB9IGZyb20gJy4vY29yZS9tb2RlbHMvU1NTL2xvZy5tb2RlbCc7XHJcbmltcG9ydCB7IE1TZXJ2aWNlQ2hhcmdlIH0gZnJvbSAnLi9jb3JlL21vZGVscy9TT0Mvc2VydmljZUNoYXJnZS5tb2RlbCc7XHJcbmltcG9ydCB7IE1FbXByZXNhIH0gZnJvbSAnLi9jb3JlL21vZGVscy9DRkcvRW1wcmVzYS5tb2RlbCc7XHJcbmltcG9ydCB7IE1Db25jZXB0b3NDWFAgfSBmcm9tICcuL2NvcmUvbW9kZWxzL0NYUC9NQ29uY2VwdG9zQ1hQLm1vZGVsJztcclxuaW1wb3J0IHsgTVRpcG9Eb2N1bWVudG9DWFAgfSBmcm9tICcuL2NvcmUvbW9kZWxzL0NYUC9NVGlwb0RvY3VtZW50b0NYUC5tb2RlbCc7XHJcbmltcG9ydCB7IE1Db25maWd1cmFjaW9uU05PIH0gZnJvbSAnLi9jb3JlL21vZGVscy9TTk8vTUNvbmZpZ3VyYWNpb25TTk8ubW9kZWwnO1xyXG5pbXBvcnQgeyBNRGVmaW5pY2lvbk5vbWluYSB9IGZyb20gJy4vY29yZS9tb2RlbHMvU05PL01EZWZpbmljaW9uTm9taW5hLm1vZGVsJztcclxuaW1wb3J0IHsgTUFzaWduYWNpb25DYXJnbyB9IGZyb20gJy4vY29yZS9tb2RlbHMvU05PL01Bc2lnbmFjaW9uQ2FyZ28ubW9kZWwnO1xyXG5pbXBvcnQgeyBNTm9taW5hU2ltcGxlIH0gZnJvbSAnLi9jb3JlL21vZGVscy9TTk8vTU5vbWluYVNpbXBsZS5tb2RlbCc7XHJcbmltcG9ydCB7IE1QZXJzb25hbCB9IGZyb20gJy4vY29yZS9tb2RlbHMvU05PL01QZXJzb25hbC5tb2RlbCc7XHJcbmltcG9ydCB7IE1FbnRyYWRhU3VtaW5pc3Ryb3MgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NJVi9NRW50cmFkYVN1bWluaXN0cm8ubW9kZWwnO1xyXG5pbXBvcnQgU3dhbCBmcm9tICdzd2VldGFsZXJ0MidcclxuaW1wb3J0ICogYXMgQ3J5cHRvSlMgZnJvbSAnY3J5cHRvLWpzJzsgXHJcbmltcG9ydCB7IE1Tbm9Mb2cgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NOTy9NQXVkaXRvcmlhLm1vZGVsJztcclxuaW1wb3J0IHsgTVRpcG9EZXBvc2l0b3MgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NJVi9NVGlwb0RlcG9zaXRvcy5tb2RlbCc7XHJcbmltcG9ydCB7IE1Db211bmlkYWQgfSBmcm9tICcuL2NvcmUvbW9kZWxzL0NGRy9jb211bmlkYWQubW9kZWwnO1xyXG5pbXBvcnQgeyBNRXhjaGFuZ2VSYXRlIH0gZnJvbSAnLi9jb3JlL21vZGVscy9DRkcvVGFzYUNhbWJpby5tb2RlbCc7XHJcbmltcG9ydCB7IE1DYXJnb3NBZGljaW9uYWxlc30gZnJvbSAnLi9jb3JlL21vZGVscy9TVEIvTUNhcmdvc0FkaWNpb25hbGVzJztcclxuaW1wb3J0IHsgTUNsaWVudCB9IGZyb20gJy4vY29yZS9tb2RlbHMvU0ZWL01DbGllbnRlTW9kZWwnO1xyXG5cclxuICBcclxuICBASW5qZWN0YWJsZSh7XHJcbiAgICBwcm92aWRlZEluOiAncm9vdCdcclxuICB9KVxyXG4gIGV4cG9ydCBjbGFzcyBTaWdlc3BTZXJ2aWNlIHtcclxuXHJcbiAgICBwdWJsaWMgdXN1YXJpb0FjdGl2bzogTVVzdWFyaW8gPSBudWxsO1xyXG4gICAgcHVibGljIFVSTDogc3RyaW5nO1xyXG4gICAgcHVibGljIGN1cnJlbnRDb21wb25lbnQ6IE1Db21wb25lbnQgPSBudWxsO1xyXG4gICAgcHVibGljIHVzZXJNZW51ICA9IG51bGw7IFxyXG4gICAgcHVibGljIGlwX2FkcmVzcyA9ICcxMjcuMC4wLjEnO1xyXG4gICAgLy8gcHVibGljIFVSTDogc3RyaW5nID0gXCJodHRwOi8vMTkyLjE2OC4xLjY3L3NpZ2VzcF9waHBcIjtcclxuICAgIC8vIHVzdWFyaW9BY3Rpdm86IE1Vc3VhcmlvID0ge1xyXG4gICAgLy8gICBjb25leGlvbkRCOiB7XHJcbiAgICAvLyAgICAgYmFzZURlRGF0b3M6IFwiZGJfc2lnZXNwX2RlbW92M1wiLFxyXG4gICAgLy8gICAgIGdlc3RvcjogXCJwb3N0Z3Jlc1wiLFxyXG4gICAgLy8gICAgIGxvZ2luOiBcInBvc3RncmVzXCIsXHJcbiAgICAvLyAgICAgbm9tYnJlOiBcIlNJR0VTUCBDLkEsIHNlcnZpZG9yIDg1IChTRSBQVUVERSBVU0FSKVwiLFxyXG4gICAgLy8gICAgIHBhc3N3b3JkOiBcImFkbWluc2lnZXNwXCIsXHJcbiAgICAvLyAgICAgcHVlcnRvOiBcIjU0MzJcIixcclxuICAgIC8vICAgICBzZXJ2aWRvcjogXCIxOTIuMTY4LjEuNjdcIixcclxuICAgIC8vICAgfSxcclxuICAgIC8vICAgZW1wcmVzYToge1xyXG4gICAgLy8gICAgIGlkOiAxLFxyXG4gICAgLy8gICAgIHBlcmlvZG9GaXNjYWw6IFwiMjAxOS0wMS0wMVwiLFxyXG4gICAgLy8gICAgIHRpdHVsbzogXCJTSUdFU1AgQy5BLlwiXHJcbiAgICAvLyAgIH0sXHJcbiAgICAvLyAgIG5vbWJyZTogXCJTSUdFU1BcIixcclxuICAgIC8vICAgdG9rZW46IFwiZXlKMGVYQWlPaUpLVjFRaUxDSmhiR2NpT2lKSVV6TTROQ0o5LmV5SndZWE56ZDI5eVpGOTFjM1VpT2lJeE1qTTBOVFkzT0NJc0ltbGtYMlZ0Y0hKbGMyRWlPaUl4SWl3aWRHbDBaVzF3SWpvaVUwbEhSVk5RSUVNdVFTNGlMQ0p3WlhKbWFYTmpZV3dpT2lJeU1ERTVMVEF4TFRBeElpd2liRjkxYzNWaGNtbHZJam9pVTBsSFJWTlFJaXdpYzJWeWRtbGtiM0lpT2lJeE9USXVNVFk0TGpFdU5qY2lMQ0p3ZFdWeWRHOGlPaUkxTkRNeUlpd2lZbUZ6WldSbFpHRjBiM01pT2lKa1lsOXphV2RsYzNCZlpHVnRiM1l6SWl3aWJHOW5hVzRpT2lKd2IzTjBaM0psY3lJc0luQmhjM04zYjNKa0lqb2lZV1J0YVc1emFXZGxjM0FpZlEuUElTQlNmdWVSQWRzV3NKMUFhR2NWQ2dXLTJhSmtndHZMZHNXMEJnbzVsdHlZb3dEOG95X25xSzVzakUyVVJHa1wiXHJcbiAgICAvLyB9XHJcbiAgICAvLyBwcm9jZWRlOiBzdHJpbmcgPSAnU0NHQ01QJztcclxuICAgIC8vIGNvZHNpczogc3RyaW5nID0gJ1NDRyc7XHJcblxyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCwgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZywgcHJpdmF0ZSB0b2FzdDogVG9hc3RyU2VydmljZSkgeyB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gVmFsaWRhIHF1ZSBzZWxvIHNlIGVzY3JpYmFuIGd1aW9uZXMgeSA5XHJcbiAgICAgKiBAcGFyYW0gZXZlbnRcclxuICAgICAqL1xyXG4gICAgcHVibGljIG9ubHlHdWlvbmVzQW5kTmluZShldmVudDogYW55KSB7XHJcbiAgICAgIGlmIChldmVudC5rZXkgPT09ICctJyB8fCBldmVudC5rZXkgPT09ICc5Jykge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgXHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEFjdHVhbGl6YSBlbCBtb25jbXAgZGUgc2lnZXNwX2NvbXByb2JhbnRlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB1cGRhdGVDb21wcm9iYW50ZUFtb3VudChhbW91bnQ6IG51bWJlciwgaWRDb21wcm9iYW50ZTogbnVtYmVyKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8YW55PihgJHt0aGlzLlVSTH0vZGFvL3NpZ2VzcC9jb21wcm9iYW50ZV9kYW8ucGhwP21vbnRvPXRydWVgLCB7XHJcbiAgICAgICAgbW9uY21wOiBhbW91bnQsXHJcbiAgICAgICAgaWRfY29tcHJvYmFudGU6IGlkQ29tcHJvYmFudGVcclxuICAgICAgfSwge1xyXG4gICAgICAgIGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBBY3R1YWxpemEgZWwgY29tcHJvYmFudGUgcHJzdXB1ZXN0YXJpbyBkZSBFZ3Jlc29zXHJcbiAgICAgKiBAcGFyYW0gY29tcHJvYmFudGVcclxuICAgICAqL1xyXG4gICAgcHVibGljIHVwZGF0ZUNvbXByb2JhbnRlUHJlc3VwdWVzdGFyaW9FZ3Jlc29zKGNvbXByb2JhbnRlOiBJQ29tcHJvYmFudGVQcmVzdXB1ZXN0YXJpb0VncmVzb3MpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxhbnk+KGAke3RoaXMuVVJMfS9kYW8vc3BnL2NvbXByb2JhbnRlX3ByZXN1cHVlc3RhcmlvX2VncmVzb3NfZGFvLnBocGAsXHJcbiAgICAgIHsgLi4uY29tcHJvYmFudGUsIGlkOiBjb21wcm9iYW50ZS5pZF9kdF9zcGdjbXAgfSwgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBlbCBjb21wcm9iYW50ZSBwcmVzdXB1ZXN0YXJpbyBkZSBFZ3Jlc29zXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRDb21wcm9iYW50ZVByZXN1cHVlc3RhcmlvRWdyZXNvcygpOiBPYnNlcnZhYmxlPE1Db21wcm9iYW50ZVByZXN1cHVlc3RhcmlvRWdyZXNvc1tdPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE1Db21wcm9iYW50ZVByZXN1cHVlc3RhcmlvRWdyZXNvc1tdPihgJHt0aGlzLlVSTH0vZGFvL3NwZy9jb21wcm9iYW50ZV9wcmVzdXB1ZXN0YXJpb19lZ3Jlc29zX2Rhby5waHBgLCB7XHJcbiAgICAgICAgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpXHJcbiAgICAgIH0pLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXM6IGFueSkgPT4gcmVzLmRhdGEubWFwKGVsZW1lbnQgPT4gbmV3IE1Db21wcm9iYW50ZVByZXN1cHVlc3RhcmlvRWdyZXNvcyhlbGVtZW50KSkpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQWN0dWFsaXphIGVsIGNvbXByb2JhbnRlIHByc3VwdWVzdGFyaW8gZGUgSW5ncmVzb3NcclxuICAgICAqIEBwYXJhbSBjb21wcm9iYW50ZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdXBkYXRlQ29tcHJvYmFudGVQcmVzdXB1ZXN0YXJpb0luZ3Jlc29zKGNvbXByb2JhbnRlOiBJQ29tcHJvYmFudGVQcmVzdXB1ZXN0YXJpb0luZ3Jlc29zKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8YW55PihgJHt0aGlzLlVSTH0vZGFvL3NwZy9jb21wcm9iYW50ZV9wcmVzdXB1ZXN0YXJpb19lZ3Jlc29zX2Rhby5waHBgLFxyXG4gICAgICB7IC4uLmNvbXByb2JhbnRlLCBpZDogY29tcHJvYmFudGUuaWRfZHRfc3BpY21wIH0sIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgZWwgY29tcHJvYmFudGUgcHJlc3VwdWVzdGFyaW8gZGUgSW5ncmVzb3NcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldENvbXByb2JhbnRlUHJlc3VwdWVzdGFyaW9JbmdyZXNvcygpOiBPYnNlcnZhYmxlPE1Db21wcm9iYW50ZVByZXN1cHVlc3RhcmlvSW5ncmVzb3NbXT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxNQ29tcHJvYmFudGVQcmVzdXB1ZXN0YXJpb0luZ3Jlc29zW10+KGAke3RoaXMuVVJMfS9kYW8vc3BpL2NvbXByb2JhbnRlX3ByZXN1cHVlc3RhcmlvX2luZ3Jlc29zX2Rhby5waHBgLCB7XHJcbiAgICAgICAgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpXHJcbiAgICAgIH0pLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXM6IGFueSkgPT4gcmVzLmRhdGEubWFwKGVsZW1lbnQgPT4gbmV3IE1Db21wcm9iYW50ZVByZXN1cHVlc3RhcmlvSW5ncmVzb3MoZWxlbWVudCkpKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQEFjdHVhbGl6YSBsYSBkaXN0cmlidWNpw7NuIGRlIGxhIGN1ZW50YSBkZSBlZ3Jlc29cclxuICAgICAqIEBwYXJhbSBkaXN0cmlidXRpb25cclxuICAgICAqL1xyXG4gICAgcHVibGljIHVwZGF0ZURpc3RyaWJ1dGlvbkV4cGVuc2VBY2NvdW50KGRpc3RyaWJ1dGlvbjogSVVwZGF0ZURpc3RyaWJ1dGlvbik6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucHV0KGAke3RoaXMuVVJMfS9kYW8vc3BnL2N1ZW50YXNfZWdyZXNvc19kYW8ucGhwYCwgZGlzdHJpYnV0aW9uLFxyXG4gICAgICB7aGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpfSk7XHJcbiAgICB9XHJcblxyXG4gICAgICAgLyoqXHJcbiAgICAgKiBAQWN0dWFsaXphIGxhIGRpc3RyaWJ1Y2nDs24gZGUgbGEgY3VlbnRhIGRlIGVncmVzb1xyXG4gICAgICogQHBhcmFtIGRpc3RyaWJ1dGlvblxyXG4gICAgICovXHJcbiAgICAgICBwdWJsaWMgdXBkYXRlRGlzdHJpYnV0aW9uRXhwZW5zZUFjY291bnQyKGRpc3RyaWJ1dGlvbjogSVVwZGF0ZURpc3RyaWJ1dGlvbjJbXSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoYCR7dGhpcy5VUkx9L2Rhby9zcGcvY3VlbnRhc19lZ3Jlc29zX2Rhby5waHBgLCBkaXN0cmlidXRpb24sXHJcbiAgICAgICAge2hlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKX0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAQWN0dWFsaXphIGxhIGRpc3RyaWJ1Y2nDs24gZGUgbGEgY3VlbnRhIGRlIEluZ3Jlc29cclxuICAgICAqIEBwYXJhbSBkaXN0cmlidXRpb25cclxuICAgICAqL1xyXG4gICAgcHVibGljIHVwZGF0ZURpc3RyaWJ1dGlvbkluY29tZUFjY291bnQoZGlzdHJpYnV0aW9uOiBJVXBkYXRlRGlzdHJpYnV0aW9uSW5ncmVzb3MpOiBPYnNlcnZhYmxlPElSZXNwb25zZT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vc3BpL2N1ZW50YXNfaW5ncmVzb3NfZGFvLnBocGAsIGRpc3RyaWJ1dGlvbixcclxuICAgICAge2hlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKX0pXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMuc3VjY2Vzcyl7XHJcbiAgICAgICAgICAgIHJlcy5kYXRhID0gbmV3IE1DdWVudGFJbmdyZXNvcyhyZXMuZGF0YSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZURpc3RyaWJ1dGlvbkluY29tZUFjY291bnQyKGRpc3RyaWJ1dGlvbjogSVVwZGF0ZURpc3RyaWJ1dGlvbkluZ3Jlc29zMltdKTogT2JzZXJ2YWJsZTxJUmVzcG9uc2U+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3NwaS9jdWVudGFzX2luZ3Jlc29zX2Rhby5waHBgLCBkaXN0cmlidXRpb24sXHJcbiAgICAgIHtoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCl9KVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3Mpe1xyXG4gICAgICAgICAgICByZXMuZGF0YSA9IG5ldyBNQ3VlbnRhSW5ncmVzb3MocmVzLmRhdGEpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQEFjdHVhbGl6YSBsYSBkaXN0cmlidWNpw7NuIGRlIGxhIGN1ZW50YSBkZSBJbmdyZXNvIGRlIEVzdHJ1Y3R1cmFcclxuICAgICAqIEBwYXJhbSBkaXN0cmlidXRpb25cclxuICAgICAqL1xyXG4gICAgcHVibGljIHVwZGF0ZURpc3RyaWJ1dGlvbkluY29tZVN0cnVjdHVyZUFjY291bnQoZGlzdHJpYnV0aW9uOiBJVXBkYXRlRGlzdHJpYnV0aW9uSW5ncmVzb3MsIGxldmVsOiBudW1iZXIpOiBPYnNlcnZhYmxlPElSZXNwb25zZT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vc3BpL2N1ZW50YV9lc3RydWN0dXJhX2luZ3Jlc29zX2Rhby5waHBgLCBkaXN0cmlidXRpb24sXHJcbiAgICAgIHtoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCl9KVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3Mpe1xyXG4gICAgICAgICAgICByZXMuZGF0YSA9IG5ldyBNSW5jb21lU3RydWN0dXJlQWNjb3VudChyZXMuZGF0YSwgbGV2ZWwpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbGFzIGN1ZW50YXMgcG9yIG5pdmVsIGRlIGxhcyBjdWVuYXRzIGRlIGVncmVzb3NcclxuICAgICAqIEBwYXJhbSBsZXZlbCBOw7ptZXJvIGRlIG5pdmVsZXMgZGUgbGEgY29uZmlndXJhY2nDs25cclxuICAgICAqIEBwYXJhbSBpZCBpZCBkZWwgbml2ZWwgMyBvIDUgcXVlIHNlIHZhIGEgYnVzY2FyXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8TUN1ZW50YUVncmVzb3NbXT5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldEV4cGVuc2VBY2NvdW50c0ZvckxldmVsKGxldmVsOiBudW1iZXIsIGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPE1DdWVudGFFZ3Jlc29zW10+e1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxNQ3VlbnRhRWdyZXNvc1tdPihgJHt0aGlzLlVSTH0vZGFvL3NwZy9jdWVudGFzX2VncmVzb3NfZGFvLnBocD9sZXZlbD0ke2xldmVsfSZpZD0ke2lkfWAsXHJcbiAgICAgIHtoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCl9KVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlczphbnkpID0+IHJlcy5kYXRhLm1hcChlbGVtZW50ID0+IG5ldyBNQ3VlbnRhRWdyZXNvcyhlbGVtZW50KSkpXHJcbiAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBBYnJlIGVsIGNhdMOhbG9nbyBkZSBlc3RydWN0dXJhIHByZXN1cHVlc2FyaWFcclxuICAgICAqIEBwYXJhbSBkYXRhIERhdGEgcXVlIHNlIHZhIGEgbW9zdHJhclxyXG4gICAgICogQHBhcmFtIGNvbmZpZ3VyYXRpb24gQ29uZmlndXJhY2nDs24gZGUgbGEgZXN0cnVjdHVyYVxyXG4gICAgICogQHJldHVybiBQcm9taXNlPGFueT5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvcGVuQ2F0YWxvZ29Fc3RydWN0dXJhUHJlc3VwdWVzdGFyaWEoZGF0YTogYW55W10sIGNvbmZpZ3VyYXRpb246IE1Db25maWd1cmF0aW9uU1BHKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgY29uc3QgY2F0YWxvZ28gPSB0aGlzLmRpYWxvZy5vcGVuKENhdGFsb2dvRXN0cnVjdHVyYXNDb21wb25lbnQsIHtcclxuICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICBkYXRhLFxyXG4gICAgICAgICAgY29uZmlndXJhdGlvblxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgd2lkdGg6ICcxMDAwcHgnLFxyXG4gICAgICAgIG1heEhlaWdodDogJzkwdmgnXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gY2F0YWxvZ28uYWZ0ZXJDbG9zZWQoKS50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhcyBjdWVudGFzIGRlIGVncmVzb3NcclxuICAgICAqIEBwYXJhbSBvbmx5QXZhaWxhYmxlXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8TUN1ZW50YUVncmVzb3NbXT5cclxuICAgICAqL1xyXG4gICAgIHB1YmxpYyBnZXRFeHBlbnNlQWNjb3VudHMob25seUF2YWlsYWJsZTogYm9vbGVhbiA9IGZhbHNlKTogT2JzZXJ2YWJsZTxNQ3VlbnRhRWdyZXNvc1tdPntcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TUN1ZW50YUVncmVzb3NbXT4oYCR7dGhpcy5VUkx9L2Rhby9zcGcvY3VlbnRhc19lZ3Jlc29zX2Rhby5waHAke1xyXG4gICAgICAgIG9ubHlBdmFpbGFibGUgPyAnP2F2YWlsYWJsZT10cnVlJyA6ICcnXHJcbiAgICAgIH1gLCB7aGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpfSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXM6YW55KSA9PiByZXMuZGF0YS5tYXAoZWxlbWVudCA9PiBuZXcgTUN1ZW50YUVncmVzb3MoZWxlbWVudCkpKVxyXG4gICAgICApXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSB0b2RhcyBsYXMgZXN0cnVjdHVyYXMgcHJlc3VwdWV0c2FyaWFzIGRlIGxhcyA1IHRhYmxhc1xyXG4gICAgICogQHJldHVybiBQcm9taXNlPE1BbGxTdHJ1Y3R1cmU+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0QWxsQnVkZ2V0U3RydWN0dXJlKCk6IFByb21pc2U8TUFsbFN0cnVjdHVyZT4ge1xyXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgIHRoaXMuZ2V0QnVkZ2V0U3RydWN0dXJlT25lKCkuc3Vic2NyaWJlKHN0cnVjdHVyZU9uZSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmdldEJ1ZGdldFN0cnVjdHVyZVR3b0FsbCgpLnN1YnNjcmliZShzdHJ1Y3R1cmVUd28gPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmdldEJ1ZGdldFN0cnVjdHVyZVRocmVlKCkuc3Vic2NyaWJlKHN0cnVjdHVyZVRocmVlID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLmdldEJ1ZGdldFN0cnVjdHVyZUZvdXIoKS5zdWJzY3JpYmUoc3RydWN0dXJlRm91ciA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldEJ1ZGdldFN0cnVjdHVyZUZpdmVCeUlkRXA0KCkuc3Vic2NyaWJlKHN0cnVjdHVyZUZpdmUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICByZXNvbHZlKG5ldyBNQWxsU3RydWN0dXJlKHtcclxuICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVPbmUsXHJcbiAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlVHdvLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZVRocmVlLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZUZvdXIsXHJcbiAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlRml2ZVxyXG4gICAgICAgICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhIGVzdHJ1Y3R1cmEgY29tcGxldGEgZGVwZW5kaWVuZG8gZGUgbGEgY29uZmlndXJhY2nDs25cclxuICAgICAqIEByZXR1cm4gUHJvbWlzZTxhbnlbXT5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKiBAdHlwZT0ge31cclxuICAgICAqL1xyXG4gICAgcHVibGljIGFzeW5jIGdldEJ1ZGdldFN0cnVjdHVyZUNvbXBsZXRlKG5pdmVsOm51bWJlcix0aXBvPzpzdHJpbmcpOiBQcm9taXNlPGFueVtdPiB7XHJcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgIGxldCBkYXRhID0gW107XHJcbiAgICAgICAgYXdhaXQgdGhpcy5nZXRCdWRnZXRTdHJ1Y3R1cmVGaXZlKG5pdmVsLHRpcG8pLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgZGF0YS5wdXNoKC4uLnJlc3VsdClcclxuICAgICAgICB9KVxyXG4gICAgICAgIC8vIGF3YWl0IHRoaXMuZ2V0QnVkZ2V0U3RydWN0dXJlVGhyZWVDb21wbGV0ZSgzKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgICAvLyAgIGRhdGEucHVzaCguLi5yZXN1bHQpXHJcbiAgICAgICAgLy8gfSlcclxuXHJcbiAgICAgICAgYXdhaXQgcmVzb2x2ZShkYXRhKTtcclxuXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEVsaW1pbmEgdW5hIG8gdmFyaWFzIGVzdHJ1Y3R1cmFzIHByZXN1cHVlc3Rhcmlhc1xyXG4gICAgICogQHBhcmFtIGlkU3RydWN0dXJlcyBJZCBkZSBsYXMgZXN0cnVjdHVyYXMgcHJlc3VwdWVzdGFyaWFzIDUgcXVlIHZhbiBhIHNlciBlbGltaW5hZGFzXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8YW55PlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGRlbGV0ZUJ1ZGdldFN0cnVjdHVyZUZpdmUoaWRTdHJ1Y3R1cmVzOiBhbnlbXSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdCgnZGVsZXRlJywgYCR7dGhpcy5VUkx9L2Rhby9zcGcvZXN0cnVjdHVyYV9wcmVzdXB1ZXN0YXJpYTVfZGFvLnBocGAsXHJcbiAgICAgIHsgYm9keTogaWRTdHJ1Y3R1cmVzLCBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQWN0dWFsaXphIHVuYSBvIHZhcmlhcyBlc3RydWN0dXJhcyA0XHJcbiAgICAgKiBAcGFyYW0gc3RydWN0dXJlcyBFc3RydWN0dXJhcyBwcmVzdXB1ZXN0YXJpYXMgcXVlIHZhbiBhIHNlciBhY3R1YWxpemFkYXNcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxhbnk+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdXBkYXRlQnVkZ2V0U3RydWN0dXJlRml2ZShzdHJ1Y3R1cmVzOiBJRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhRml2ZVtdKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoYCR7dGhpcy5VUkx9L2Rhby9zcGcvZXN0cnVjdHVyYV9wcmVzdXB1ZXN0YXJpYTVfZGFvLnBocGAsIHN0cnVjdHVyZXMsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEFncmVnYSB1bmEgbyB2YXJpYXMgZXN0cnVjdHVyYXMgcHJlc3VwdWVzdGFyaWFzIDRcclxuICAgICAqIEBwYXJhbSBzdHJ1Y3R1cmVzIExhcyBlc3RydWN0dXJhcyBxdWUgdmFuIGEgc2VyIHJlZ2lzdHJhZGFzXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8YW55PlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIHNldEJ1ZGdldFN0cnVjdHVyZUZpdmUoc3RydWN0dXJlczogSUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYUZpdmVbXSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLlVSTH0vZGFvL3NwZy9lc3RydWN0dXJhX3ByZXN1cHVlc3RhcmlhNV9kYW8ucGhwYCwgc3RydWN0dXJlcyxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSB0b2RhIGxhIGVzdHJ1Y3R1cmEgcHJlc3VwdWVzdGFyaWEgNVxyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPE1Fc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFGaXZlW10+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICogQHBhcmFtcyB0aXBvOlwic3NzXCIgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRCdWRnZXRTdHJ1Y3R1cmVGaXZlKGxldmVsOiBudW1iZXIgPSBudWxsLCB0aXBvOnN0cmluZz0nJyk6IE9ic2VydmFibGU8TUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYUZpdmVDb21wbGV0ZVtdPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE1Fc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFGaXZlQ29tcGxldGVbXT4oXHJcbiAgICAgICAgYCR7dGhpcy5VUkx9L2Rhby9zcGcvZXN0cnVjdHVyYV9wcmVzdXB1ZXN0YXJpYTVfZGFvLnBocD9jb21wbGV0ZT10cnVlJnRpcG89JHt0aXBvfWAsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoICAgICAgIFxyXG4gICAgICAgIG1hcCgocmVzcDogYW55KSA9PiByZXNwLmRhdGEubWFwKGUgPT4gbmV3IE1Fc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFGaXZlQ29tcGxldGUoZSwgbGV2ZWwpKSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhIGVzdHJ1Y3R1cmEgcHJlc3VwdWVzdGFyaWEgNSBwb3IgZWwgSWQgZGUgbGEgZXN0cnVjdHVyYSA0XHJcbiAgICAgKiBAcGFyYW0gaWRFcDQgaWQgZGUgbGEgZXN0cnVjdHVyYSBwcmVzdXB1ZXN0YXJpYSA0XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRCdWRnZXRTdHJ1Y3R1cmVGaXZlQnlJZEVwNChpZEVwND86IHN0cmluZyk6IE9ic2VydmFibGU8YW55W10+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55W10+KFxyXG4gICAgICAgIGAke3RoaXMuVVJMfS9kYW8vc3BnL2VzdHJ1Y3R1cmFfcHJlc3VwdWVzdGFyaWE1X2Rhby5waHAke2lkRXA0ID8gYD9pZF9lcDQ9JHtpZEVwNH1gIDogJyd9YCxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlc3A6IGFueSkgPT4gcmVzcC5kYXRhLm1hcChlbGVtZW50ID0+IG5ldyBNRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhRml2ZShlbGVtZW50KSkpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gRWxpbWluYSB1bmEgbyB2YXJpYXMgZXN0cnVjdHVyYXMgcHJlc3VwdWVzdGFyaWFzXHJcbiAgICAgKiBAcGFyYW0gaWRTdHJ1Y3R1cmVzIElkIGRlIGxhcyBlc3RydWN0dXJhcyBwcmVzdXB1ZXN0YXJpYXMgMyBxdWUgdmFuYSAgc2VyIGVsaW1pbmFkYXNcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxhbnk+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZGVsZXRlQnVkZ2V0U3RydWN0dXJlRm91cihpZFN0cnVjdHVyZXM6IGFueVtdKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0KCdkZWxldGUnLCBgJHt0aGlzLlVSTH0vZGFvL3NwZy9lc3RydWN0dXJhX3ByZXN1cHVlc3RhcmlhNF9kYW8ucGhwYCxcclxuICAgICAgeyBib2R5OiBpZFN0cnVjdHVyZXMsIGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBBY3R1YWxpemEgdW5hIG8gdmFyaWFzIGVzdHJ1Y3R1cmFzIDRcclxuICAgICAqIEBwYXJhbSBzdHJ1Y3R1cmVzIEVzdHJ1Y3R1cmFzIHByZXN1cHVlc3RhcmlhcyBxdWUgdmFuIGEgc2VyIGFjdHVhbGl6YWRhc1xyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPGFueT5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB1cGRhdGVCdWRnZXRTdHJ1Y3R1cmVGb3VyKHN0cnVjdHVyZXM6IElFc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFGb3VyW10pOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnB1dChgJHt0aGlzLlVSTH0vZGFvL3NwZy9lc3RydWN0dXJhX3ByZXN1cHVlc3RhcmlhNF9kYW8ucGhwYCwgc3RydWN0dXJlcyxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQWdyZWdhIHVuYSBvIHZhcmlhcyBlc3RydWN0dXJhcyBwcmVzdXB1ZXN0YXJpYXMgNFxyXG4gICAgICogQHBhcmFtIHN0cnVjdHVyZXMgTGFzIGVzdHJ1Y3R1cmFzIHF1ZSB2YW4gYSBzZXIgcmVnaXN0cmFkYXNcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxhbnk+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2V0QnVkZ2V0U3RydWN0dXJlRm91cihzdHJ1Y3R1cmVzOiBJRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhRm91cltdKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuVVJMfS9kYW8vc3BnL2VzdHJ1Y3R1cmFfcHJlc3VwdWVzdGFyaWE0X2Rhby5waHBgLCBzdHJ1Y3R1cmVzLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhcyBlc3RydWN0dXJhcyBwcmVzdXB1ZXN0YXJpYXMgNFxyXG4gICAgICogQHBhcmFtIGlkRXAzIElkIGRlIGxhIGVzdHJ1Y3R1cmEgcHJlc3VwdWVzdGFyaWEgM1xyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPE1Fc3RydWN0dXJhcHJlc3VwdWVzdGFyaWFbXT5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRCdWRnZXRTdHJ1Y3R1cmVGb3VyKGlkRXAzPzogc3RyaW5nKTogT2JzZXJ2YWJsZTxNRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhRm91cltdPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE1Fc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFGb3VyW10+KFxyXG4gICAgICAgIGAke3RoaXMuVVJMfS9kYW8vc3BnL2VzdHJ1Y3R1cmFfcHJlc3VwdWVzdGFyaWE0X2Rhby5waHAke2lkRXAzID8gYD9pZF9lcDM9JHtpZEVwM31gIDogJyd9YCxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlc3A6IGFueSkgPT4gcmVzcC5kYXRhLm1hcChlbGVtZW50ID0+IG5ldyBNRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhRm91cihlbGVtZW50KSkpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gRWxpbWluYSB1bmEgbyB2YXJpYXMgZXN0cnVjdHVyYXMgcHJlc3VwdWVzdGFyaWFzXHJcbiAgICAgKiBAcGFyYW0gaWRTdHJ1Y3R1cmVzIElkIGRlIGxhcyBlc3RydWN0dXJhcyBwcmVzdXB1ZXN0YXJpYXMgMyBxdWUgdmFuYSAgc2VyIGVsaW1pbmFkYXNcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxhbnk+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZGVsZXRlQnVkZ2V0U3RydWN0dXJlVGhyZWUoaWRTdHJ1Y3R1cmVzOiBhbnlbXSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdCgnZGVsZXRlJywgYCR7dGhpcy5VUkx9L2Rhby9zcGcvZXN0cnVjdHVyYV9wcmVzdXB1ZXN0YXJpYTNfZGFvLnBocGAsXHJcbiAgICAgIHsgYm9keTogaWRTdHJ1Y3R1cmVzLCBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQWN0dWFsaXphIHVuYSBvIHZhcmlhcyBlc3RydWN0dXJhcyAzXHJcbiAgICAgKiBAcGFyYW0gc3RydWN0dXJlcyBFc3RydWN0dXJhcyBwcmVzdXB1ZXN0YXJpYXMgcXVlIHZhbiBhIHNlciBhY3R1YWxpemFkYXNcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxhbnk+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdXBkYXRlQnVkZ2V0U3RydWN0dXJlVGhyZWUoc3RydWN0dXJlczogSUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYVRocmVlW10pOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnB1dChgJHt0aGlzLlVSTH0vZGFvL3NwZy9lc3RydWN0dXJhX3ByZXN1cHVlc3RhcmlhM19kYW8ucGhwYCwgc3RydWN0dXJlcyxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQWdyZWdhIHVuYSBvIHZhcmlhcyBlc3RydWN0dXJhcyBwcmVzdXB1ZXN0YXJpYXMgM1xyXG4gICAgICogQHBhcmFtIHN0cnVjdHVyZXMgTGFzIGVzdHJ1Y3R1cmFzIHF1ZSB2YW4gYSBzZXIgcmVnaXN0cmFkYXNcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxhbnk+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2V0QnVkZ2V0U3RydWN0dXJlVGhyZWUoc3RydWN0dXJlczogSUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYVRocmVlW10pOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5VUkx9L2Rhby9zcGcvZXN0cnVjdHVyYV9wcmVzdXB1ZXN0YXJpYTNfZGFvLnBocGAsIHN0cnVjdHVyZXMsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFNlIHRyYWUgbGEgZXN0cnVjdHVyYSBwcmVzdXB1ZXN0YXJpYSBjb21wbGV0YSBoYXN0YSBlbCBuaXZlbCAzXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8YW55W10+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0QnVkZ2V0U3RydWN0dXJlVGhyZWVDb21wbGV0ZShsZXZlbDogbnVtYmVyKTogT2JzZXJ2YWJsZTxNRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhRml2ZUNvbXBsZXRlW10+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYUZpdmVDb21wbGV0ZVtdPihcclxuICAgICAgICBgJHt0aGlzLlVSTH0vZGFvL3NwZy9lc3RydWN0dXJhX3ByZXN1cHVlc3RhcmlhM19kYW8ucGhwP2NvbXBsZXRlPXRydWVgLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzcDogYW55KSA9PiByZXNwLmRhdGEubWFwKGVsZW1lbnQgPT4gbmV3IE1Fc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFGaXZlQ29tcGxldGUoZWxlbWVudCwgbGV2ZWwpKSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhcyBlc3RydWN0dXJhcyBwcmVzdXB1ZXN0YXJpYXMgM1xyXG4gICAgICogQHBhcmFtIGlkRXAyIElkIGRlIGxhIGVzdHJ1Y3R1cmEgcHJlc3VwdWVzdGFyaWEgMlxyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPE1Fc3RydWN0dXJhcHJlc3VwdWVzdGFyaWFbXT5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRCdWRnZXRTdHJ1Y3R1cmVUaHJlZShpZEVwMj86IHN0cmluZyk6IE9ic2VydmFibGU8TUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYVRocmVlW10+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYVRocmVlW10+KFxyXG4gICAgICAgIGAke3RoaXMuVVJMfS9kYW8vc3BnL2VzdHJ1Y3R1cmFfcHJlc3VwdWVzdGFyaWEzX2Rhby5waHAke2lkRXAyID8gYD9pZF9lcDI9JHtpZEVwMn1gIDogJyd9YCxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlc3A6IGFueSkgPT4gcmVzcC5kYXRhLm1hcChlbGVtZW50ID0+IG5ldyBNRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhVGhyZWUoZWxlbWVudCkpKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEVsaW1pbmEgdW5hIG8gdmFyaWFzIGVzdHJ1Y3R1cmFzIHByZXN1cHVlc3RhcmlhcyB1bm9cclxuICAgICAqIEBwYXJhbSBpZFN0cnVjdHVyZXMgSWQgZGUgbGEgbyBsYXMgZXN0cnVjdHVyYXMgcHJlc3VwdWVzdGFyaWFzIHF1ZSB2YW4gYSBzZXIgZWxpbWluYWRhc1xyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPGFueT5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBkZWxldGVCdWRnZXRTdHJ1Y3R1cmVUd28oaWRTdHJ1Y3R1cmVzOiBhbnlbXSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdCgnZGVsZXRlJywgYCR7dGhpcy5VUkx9L2Rhby9zcGcvZXN0cnVjdHVyYV9wcmVzdXB1ZXN0YXJpYTJfZGFvLnBocGAsXHJcbiAgICAgIHsgYm9keTogaWRTdHJ1Y3R1cmVzLCBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQWN0dWFsaXphIHVuYSBlc3RydWN0dXJhIHByZXN1cHVlc3RhcmlhIGRvc1xyXG4gICAgICogQHBhcmFtIHN0cnVjdHVyZSBFc3RydWN0dXJhIHByZXN1cHVlc3RhcmlhIHVubyBxdWUgc2UgdmEgYSBhY3R1YWxpemFyXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8YW55PlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdXBkYXRlQnVkZ2V0U3RydWN0dXJlVHdvKHN0cnVjdHVyZTogSUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYVR3b1tdKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoYCR7dGhpcy5VUkx9L2Rhby9zcGcvZXN0cnVjdHVyYV9wcmVzdXB1ZXN0YXJpYTJfZGFvLnBocGAsIHN0cnVjdHVyZSxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gUmVnaXN0cmEgbGFzIGVzdHJ1Y3R1cmFzIHByZXN1cHVlc3RyaWFzIGRvcyBlbiBsYSBiYXNlIGRlIGRhdG9zXHJcbiAgICAgKiBAcGFyYW0gYnVkZ2V0U3RydWN0dXJlcyBBcnJheSBkZSBlc3RydWN0dXJhcyBwcmVzdXB1ZXN0YXJpYSBxdWUgc2UgdmFuIGEgcmVnaXN0cmFyXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8YW55PlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIHNldEJ1ZGdldFN0cnVjdHVyZVR3byhidWRnZXRTdHJ1Y3R1cmVzOiBJRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhVHdvW10pOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5VUkx9L2Rhby9zcGcvZXN0cnVjdHVyYV9wcmVzdXB1ZXN0YXJpYTJfZGFvLnBocGAsXHJcbiAgICAgIGJ1ZGdldFN0cnVjdHVyZXMsIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYSBlc3RydWN0dXJhIHByZXN1cHVlc3RhcmlhXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8TUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYVtdPlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldEJ1ZGdldFN0cnVjdHVyZVR3byhpZEVwMTogc3RyaW5nKTogT2JzZXJ2YWJsZTxNRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhVHdvW10+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYVR3b1tdPihgJHt0aGlzLlVSTH0vZGFvL3NwZy9lc3RydWN0dXJhX3ByZXN1cHVlc3RhcmlhMl9kYW8ucGhwP2lkX2VwMT0ke2lkRXAxfWAsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKCgocmVzcDogYW55KSA9PiByZXNwLmRhdGEubWFwKGVsZW1lbnQgPT4gbmV3IE1Fc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFUd28oZWxlbWVudCkpKSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhIGVzdHJ1Y3R1cmEgcHJlc3VwdWVzdGFyaWFcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxNRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhW10+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0QnVkZ2V0U3RydWN0dXJlVHdvQWxsKCk6IE9ic2VydmFibGU8TUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYVR3b1tdPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE1Fc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFUd29bXT4oYCR7dGhpcy5VUkx9L2Rhby9zcGcvZXN0cnVjdHVyYV9wcmVzdXB1ZXN0YXJpYTJfZGFvLnBocGAsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKCgocmVzcDogYW55KSA9PiByZXNwLmRhdGEubWFwKGVsZW1lbnQgPT4gbmV3IE1Fc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFUd28oZWxlbWVudCkpKSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBFbGltaW5hIHVuYSBvIHZhcmlhcyBlc3RydWN0dXJhcyBwcmVzdXB1ZXN0YXJpYXMgdW5vXHJcbiAgICAgKiBAcGFyYW0gaWRTdHJ1Y3R1cmVzIElkIGRlIGxhIG8gbGFzIGVzdHJ1Y3R1cmFzIHByZXN1cHVlc3RhcmlhcyBxdWUgdmFuIGEgc2VyIGVsaW1pbmFkYXNcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxhbnk+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZGVsZXRlQnVkZ2V0U3RydWN0dXJlT25lKGlkU3RydWN0dXJlczogYW55W10pOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3QoJ2RlbGV0ZScsIGAke3RoaXMuVVJMfS9kYW8vc3BnL2VzdHJ1Y3R1cmFfcHJlc3VwdWVzdGFyaWExX2Rhby5waHBgLFxyXG4gICAgICB7IGJvZHk6IGlkU3RydWN0dXJlcywgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEFjdHVhbGl6YSB1bmEgZXN0cnVjdHVyYSBwcmVzdXB1ZXN0YXJpYSB1bm9cclxuICAgICAqIEBwYXJhbSBzdHJ1Y3R1cmUgRXN0cnVjdHVyYSBwcmVzdXB1ZXN0YXJpYSB1bm8gcXVlIHNlIHZhIGEgYWN0dWFsaXphclxyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPGFueT5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHVwZGF0ZUJ1ZGdldFN0cnVjdHVyZU9uZShzdHJ1Y3R1cmU6IElFc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFPbmVbXSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucHV0KGAke3RoaXMuVVJMfS9kYW8vc3BnL2VzdHJ1Y3R1cmFfcHJlc3VwdWVzdGFyaWExX2Rhby5waHBgLCBzdHJ1Y3R1cmUsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFJlZ2lzdHJhIGxhcyBlc3RydWN0dXJhcyBwcmVzdXB1ZXN0cmlhcyBlbiBsYSBiYXNlIGRlIGRhdG9zXHJcbiAgICAgKiBAcGFyYW0gYnVkZ2V0U3RydWN0dXJlcyBBcnJheSBkZSBlc3RydWN0dXJhcyBwcmVzdXB1ZXN0YXJpYSBxdWUgcyBldmFuIGEgcmVnaXN0cmFyXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8YW55PlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIHNldEJ1ZGdldFN0cnVjdHVyZU9uZShidWRnZXRTdHJ1Y3R1cmVzOiBJRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhT25lW10pOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5VUkx9L2Rhby9zcGcvZXN0cnVjdHVyYV9wcmVzdXB1ZXN0YXJpYTFfZGFvLnBocGAsXHJcbiAgICAgIGJ1ZGdldFN0cnVjdHVyZXMsIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYSBlc3RydWN0dXJhIHByZXN1cHVlc3RhcmlhXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8TUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYVtdPlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldEJ1ZGdldFN0cnVjdHVyZU9uZSgpOiBPYnNlcnZhYmxlPE1Fc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFPbmVbXT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE1Fc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFPbmVbXT4oYCR7dGhpcy5VUkx9L2Rhby9zcGcvZXN0cnVjdHVyYV9wcmVzdXB1ZXN0YXJpYTFfZGFvLnBocGAsXHJcbiAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgICBtYXAoKChyZXNwOiBhbnkpID0+IHJlc3AuZGF0YS5tYXAoZWxlbWVudCA9PiBuZXcgTUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYU9uZShlbGVtZW50KSkpKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYXMgY29uZmlndXJhY2lvbmVzIGRlIGxhIGVzdHJ1Y3R1cmEgcHJlc3VwdWVzdGFyaWFcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxNQ29uZmlndXJhdGlvblNQR1tdPlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldENvbmZpZ3VyYXRpb25TUEcoKTogT2JzZXJ2YWJsZTxNQ29uZmlndXJhdGlvblNQRz4ge1xyXG5cclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TUNvbmZpZ3VyYXRpb25TUEc+KGAke3RoaXMuVVJMfS9kYW8vc3BnL2VzdHJ1Y3R1cmFfcHJlc3VwdWVzdGFyaWFfY29uZmlnX2Rhby5waHBgLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzcDogYW55KSA9PiBuZXcgTUNvbmZpZ3VyYXRpb25TUEcocmVzcC5kYXRhWzBdKSlcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbGFzIGNvbmZpZ3VyYWNpb25lcyBkZSBsb3MgcHJvdmVlZG9yZXNcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxNQ29uZmlndXJhdGlvblJQQ1tdPlxyXG4gICAgICogQGF1dGhvciBDYXJsb3MgQWxib3Jub3pcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldENvbmZpZ3VyYXRpb25SUEMoKTogT2JzZXJ2YWJsZTxJUmVzcG9uc2U+IHtcclxuXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE1Db25maWd1cmF0aW9uUlBDPihgJHt0aGlzLlVSTH0vZGFvL3JwYy9wcm92ZWVkb3JfY29uZmlnX2Rhby5waHBgLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzcDogSVJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzcC5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJlc3AuZGF0YSA9IG5ldyBNQ29uZmlndXJhdGlvblJQQyhyZXNwLmRhdGEpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmVzcFxyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYXMgTUNvbmZpZ3VyYWNpb25TTk8gZGUgbGEgbm9taW5hXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8TUNvbmZpZ3VyYWNpb25TTk9bXT5cclxuICAgICAqIEBkYXRlIDI3LTA3LTIwMjFcclxuICAgICAqL1xyXG4gICAgIHB1YmxpYyBnZXRDb25maWd1cmF0aW9uU05PKCk6IE9ic2VydmFibGU8SVJlc3BvbnNlPiB7XHJcblxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vc25vL2NvbmZpZ3VyYWNpb25fZGFvLnBocD90aXBvPSR7J2NvbmZpZ3VyYWNpb24nfWAsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXNwOiBJUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIGlmIChyZXNwLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgaWYocmVzcC5kYXRhICE9bnVsbCl7XHJcbiAgICAgICAgICAgICAgcmVzcC5kYXRhID0gcmVzcC5kYXRhLm1hcChlID0+IG5ldyBNQ29uZmlndXJhY2lvblNOTyhlKSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgcmVzcC5kYXRhPVtdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmVzcFxyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHB1YmxpYyBkYXRlVG9TdHJpbmcoZGF0ZTogRGF0ZSk6IHN0cmluZ3tcclxuICAgICAgcmV0dXJuIGAke2RhdGUuZ2V0RnVsbFllYXIoKX0tJHtcclxuICAgICAgICBkYXRlLmdldE1vbnRoKCkgKyAxID49IDEwID8gZGF0ZS5nZXRNb250aCgpICsgMSA6IGAwJHtkYXRlLmdldE1vbnRoKCkgKyAxfWBcclxuICAgICAgfS0ke1xyXG4gICAgICAgIGRhdGUuZ2V0RGF0ZSgpID49IDEwID8gZGF0ZS5nZXREYXRlKCkgOiBgMCR7ZGF0ZS5nZXREYXRlKCl9YFxyXG4gICAgICB9YFxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbGFzIGNvbmZpZ3VyYWNpb25lcyBkZSBTZWd1cmlkYWRcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxJUmVzcG9uc2U+XHJcbiAgICAgKiBAYXV0aG9yIENhcmxvcyBBbGJvcm5velxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0Q29uZmlnU1NTKCk6IE9ic2VydmFibGU8SVJlc3BvbnNlPiB7XHJcblxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vc3NzL3NlZ3VyaWRhZF9jb25maWdfZGFvLnBocGAsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXNwOiBJUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIGlmIChyZXNwLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgcmVzcC5kYXRhID0gbmV3IE1Db25maWdTU1MocmVzcC5kYXRhKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlc3BcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRDb21wb25lbnRzKHN5c3RlbUNvZGU6IHN0cmluZyA9IG51bGwsIHBlcm1pdDogYm9vbGVhbik6IE9ic2VydmFibGU8SVJlc3BvbnNlPntcclxuXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oXHJcbiAgICAgICAgYCR7dGhpcy5VUkx9L2Rhby9zc3MvY29tcG9uZW50ZXNfZGFvLnBocD8ke3N5c3RlbUNvZGUgPyBgY29kc2lzPSR7c3lzdGVtQ29kZX0ke1xyXG4gICAgICAgICAgcGVybWl0ID8gYCZwZXJtaXQ9dHJ1ZWAgOiAnJ1xyXG4gICAgICAgIH1gIDogJyd9YCxcclxuICAgICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9XHJcbiAgICAgICkucGlwZShcclxuICBcclxuICAgICAgICBtYXAocmVzID0+IHtcclxuICAgICAgICAgIGlmIChyZXMuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNQ29tcG9uZW50KGUpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKVxyXG4gIFxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbGFzIGZ1ZW50ZXMgZGUgZmluYW5jaWFtaWVudG9cclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxNRnVlbnRlRmluYW5jaWFtaWVudG9bXT5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRGdWVudGVGaW5hbmNpYW1pZW50bygpOiBPYnNlcnZhYmxlPE1GdWVudGVGaW5hbmNpYW1pZW50b1tdPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE1GdWVudGVGaW5hbmNpYW1pZW50b1tdPihgJHt0aGlzLlVSTH0vZGFvL3NwZy9mdWVudGVfZmluYW5jaWFtaWVudG9fZGFvLnBocGAsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXNwOiBhbnkpID0+IHJlc3AuZGF0YS5tYXAoZWxlbWVudCA9PiBuZXcgTUZ1ZW50ZUZpbmFuY2lhbWllbnRvKGVsZW1lbnQpKSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxvcyBjZW50cm9zIGRlIGNvc3RvXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8TUNlbnRyb0Nvc3RvW10+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICogQHBhcmFtIGlkOmlkdXN1cmlvIG8gaWQgZGVsIGVjbnRybyBkZSBjb3N0b1xyXG4gICAgICogbW9kaWZpY2FkbyAyOC0xMi0yMDIyXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRDZW50cm9Db3N0byh0aXBvOiAnYWxsJ3wnb25lJ3wndXNlcid8J2VudGVyJz0gbnVsbCwgaWQ/OnN0cmluZyk6IE9ic2VydmFibGU8TUNlbnRyb0Nvc3RvW10+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3NjZy9jZW50cm9fY29zdG9fZGFvLnBocD90aXBvPSR7dGlwb30maWQ9JHtpZH1gLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzcDogYW55KSA9PiByZXNwLmRhdGEubWFwKGVsZW1lbnQgPT4gbmV3IE1DZW50cm9Db3N0byhlbGVtZW50KSkpXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbG9zIGNlbnRyb3MgZGUgY29zdG9cclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxJUmVzcG9uc2U+XHJcbiAgICAgKiBAYXV0aG9yIENhcmxvcyBBbGJvcm5velxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0Q29zdENlbnRlcnMoKTogT2JzZXJ2YWJsZTxJUmVzcG9uc2U+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3NjZy9jZW50cm9fY29zdG9fZGFvLnBocGAsIFxyXG4gICAgICB7aGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpfVxyXG4gICAgICApLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXM6IElSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGVsZW1lbnQgPT4gbmV3IE1DZW50cm9Db3N0byhlbGVtZW50KSlcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXNcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRVc2VyQ29zdENlbnRlcnMoY29kaWdvOnN0cmluZyk6IE9ic2VydmFibGU8SVJlc3BvbnNlPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zY2cvY2VudHJvX2Nvc3RvX3VzdWFyaW9fZGFvLnBocD9jb2RpZ289JHtjb2RpZ299YCwgXHJcbiAgICAgIHtoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCl9XHJcbiAgICAgICkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlczogSVJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZWxlbWVudCA9PiBuZXcgTVVzdWFyaW9DZW50cm9Db3N0byhlbGVtZW50KSlcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXNcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBBYnJlIGVsIGRpYWxvZyBkZSBjaGVja2tzXHJcbiAgICAgKiBAcGFyYW0gY29sdW1ucyBDb2x1bW5hcyBxdWUgdmEgYSB0ZW5lciBsYSB0YWJsYVxyXG4gICAgICogQHBhcmFtIHRpdGxlIFTDrXR1bG8gZGUgbGEgbW9kYWxcclxuICAgICAqIEBwYXJhbSBkYXRhU291cmNlIERhdGEgcXVlIHMgZXZhIGEgbW9zdHJhciBlbiBsYSB0YWJsYVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb3BlbkRpYWxvZ011bHRpU2VsZWN0KFxyXG4gICAgICAvLyBjb2x1bW5zOiBzdHJpbmdbXSwgXHJcbiAgICAgIC8vIHRpdGxlOiBzdHJpbmcsIFxyXG4gICAgICAvLyBkYXRhU291cmNlOiBhbnlbXSxcclxuICAgICAgLy8gY29sdW1uTmFtZXM/OiBzdHJpbmdbXVxyXG4gICAgICBjb2x1bW5zOiBzdHJpbmdbXSwgXHJcbiAgICAgIHRpdGxlOiBzdHJpbmcsIFxyXG4gICAgICBkYXRhU291cmNlOiBhbnlbXSwgXHJcbiAgICAgIGNvbHVtbk5hbWVzOiBzdHJpbmdbXSA9IG51bGwsIFxyXG4gICAgICB3aWR0aDogc3RyaW5nID0gJzEwMDBweCcsXHJcbiAgICAgIG9wdGlvbnM6IHtcclxuICAgICAgICBoYXNCYWNrZHJvcD86IGJvb2xlYW4sXHJcbiAgICAgICAgZGlzYWJsZUNsb3NlPzogYm9vbGVhbixcclxuICAgICAgIC8vIGRpc2FibGVNYXN0ZXJUb2dnbGU/OiBib29sZWFuXHJcbiAgICAgIH0gPSB7XHJcbiAgICAgICAgZGlzYWJsZUNsb3NlOiBmYWxzZSwgXHJcbiAgICAgICAgaGFzQmFja2Ryb3A6IGZhbHNlLCBcclxuICAgICAgLy8gIGRpc2FibGVNYXN0ZXJUb2dnbGU6IGZhbHNlXHJcbiAgICAgIH1cclxuICAgICk6IFByb21pc2U8YW55W10+IHtcclxuICAgICAgbGV0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oVGFibGVTZWxlY3RDb21wb25lbnQsIHtcclxuICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICB0aXRsZTogdGl0bGUsXHJcbiAgICAgICAgICBjb2x1bW5zOiBjb2x1bW5zLFxyXG4gICAgICAgICAgZGF0YVNvdXJjZTogZGF0YVNvdXJjZSxcclxuICAgICAgICAgIGNvbHVtbk5hbWVzLFxyXG4gICAgICAgICAvLyBkaXNhYmxlTWFzdGVyVG9nZ2xlOiBvcHRpb25zLmRpc2FibGVNYXN0ZXJUb2dnbGVcclxuICAgICAgICB9LFxyXG4gICAgICAgIHdpZHRoOiB3aWR0aCxcclxuICAgICAgICBtYXhIZWlnaHQ6ICc5MHZoJyxcclxuICAgICAgICBoYXNCYWNrZHJvcDogb3B0aW9ucy5oYXNCYWNrZHJvcCxcclxuICAgICAgICBkaXNhYmxlQ2xvc2U6IG9wdGlvbnMuZGlzYWJsZUNsb3NlXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgcmV0dXJuIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQWJyZSBlbCBkaWFsb2cgZGUgbGFzIGNvbXVuaWRhZGVzXHJcbiAgICAgKiBAcmV0dXJuIFByb21pc2U8TVBsYW5Vbmljb0N1ZW50YT5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhc3luYyBvcGVuRGlhbG9nUGxhblVuaWNvQ3VlbnRhcygpOiBQcm9taXNlPE1QbGFuVW5pY29DdWVudGE+IHtcclxuICAgICAgbGV0IHBsYW5lczogTVBsYW5Vbmljb0N1ZW50YVtdID0gYXdhaXQgdGhpcy5nZXRMaXN0YWRvUExhblVuaWNvQ3VlbnRhcygpLnRvUHJvbWlzZSgpO1xyXG4gICAgICBsZXQgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihDYXRhbG9nb0NvbXBvbmVudCwge1xyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgIGNvbHVtbnM6IFsnY3VlbnRhJywgJ2Rlbm9taW5hY2lvbiddLFxyXG4gICAgICAgICAgY29sdW1uTmFtZXM6IFsnY3VlbnRhJywgJ2Rlbm9taW5hY2nDs24nXSxcclxuICAgICAgICAgIHRpdGxlOiAnQ2F0w6Fsb2dvIGRlIFBsYW4gZGUgQ3VlbnRhcyBHw6luZXJhbCcsXHJcbiAgICAgICAgICBkYXRhU291cmNlOiBwbGFuZXNcclxuICAgICAgICB9IGFzIElDYXRhbG9nbyxcclxuICAgICAgICB3aWR0aDogJzEwMDBweCcsXHJcbiAgICAgICAgbWF4SGVpZ2h0OiAnOTB2aCdcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGVsIGxpc3RhZG8gZGVsIHBsYW4gw7puaWNvIGRlIGN1ZW50YXNcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxNcGxhblVuaWNvQ3VlbnRhW10+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0TGlzdGFkb1BMYW5Vbmljb0N1ZW50YXMoKTogT2JzZXJ2YWJsZTxNUGxhblVuaWNvQ3VlbnRhW10+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TVBsYW5Vbmljb0N1ZW50YVtdPihgJHt0aGlzLlVSTH0vZGFvL3NjZy9wbGFuX3VuaWNvX2Rhby5waHBgLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzcDogYW55KSA9PiByZXNwLmRhdGEubWFwKGVsZW1lbnQgPT4gbmV3IE1QbGFuVW5pY29DdWVudGEoZWxlbWVudCkpKVxyXG4gICAgICApXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYSBjb25maWd1cmFjacOzbiBkZSBTQ0dcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxNQ29uZmlndXJhY2lvblNDR1tdPlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqIEBtb2RpZml0IDI1LTA3LTIwMjFcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldENvbmZpZ3VyYXRpb25TQ0coKTogT2JzZXJ2YWJsZTxNQ29uZmlndXJhY2lvblNDR1tdPiB7ICAgICAgXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE1Db25maWd1cmFjaW9uU0NHW10+KGAke3RoaXMuVVJMfS9kYW8vc2NnL2NvbmZpZ3VyYWNpb25fY29udGFiaWxpZGFkX2Rhby5waHBgLFxyXG4gICAgICB7aGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpfVxyXG4gICAgICApLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXNwOiBhbnkpID0+IHJlc3AuZGF0YS5tYXAoZWxlbWVudCA9PiBuZXcgTUNvbmZpZ3VyYWNpb25TQ0coZWxlbWVudCkpKVxyXG4gICAgICApXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQWJyZSB1biBkaWFsb2cgZGUgY29uZmlybWFjacOzblxyXG4gICAgICogQHBhcmFtIHRpdGxlIFTDrXR1bG8gZGUgbGEgbW9kYWwgZGUgY29uZmlybVxyXG4gICAgICogQHBhcmFtIG1lc3NhZ2UgTWVuc2FqZSAob3BjaW9uYWwpIHBhcmEgZWwgdXN1c2FyaW9cclxuICAgICAqIEByZXR1cm4gUHJvbWlzZTxib29sZWFuPlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIG9wZW5EaWFsb2dDb25maXJtKHRpdGxlOiBzdHJpbmcsIG1lc3NhZ2U/OiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgbGV0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oQ29uZmlybUNvbXBvbmVudCwge1xyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgIHRpdGxlOiB0aXRsZSxcclxuICAgICAgICAgIG1lc3NhZ2U6IChtZXNzYWdlKSA/IG1lc3NhZ2UgOiBudWxsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB3aWR0aDogJzEwMDBweCcsXHJcbiAgICAgICAgbWF4SGVpZ2h0OiAnOTB2aCdcclxuICAgICAgfSk7XHJcblxyXG4gICAgICByZXR1cm4gZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29udmllcnRlIGVsIGNvbnRlbmlkbyBkZSB1biBBYnN0cmFjdENvbnRyb2wgZW4gbWF5w7pzY3VsYSAoVXNhciBlbiBldmVudG8ga2V5dXApXHJcbiAgICAgKiBAcGFyYW0gZm9ybUdyb3VwIEZvcm11bGFyaW8gZMOzbmRlIHNlIHZhIGEgYnVzY2FyIGVsIEFic3RyYWN0Q29udHJvbFxyXG4gICAgICogQHBhcmFtIG5hbWUgTm9tYnJlIGRlbCBBYnN0cmFjdENvbnRyb2xcclxuICAgICAqIEByZXR1cm4gdm9pZFxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGNoYW5nZVRvVXBwZXJDYXNlKGZvcm1Hcm91cDogVW50eXBlZEZvcm1Hcm91cCwgbmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgIHRoaXMuZ2V0QWJzdHJhY3RDb250cm9sKGZvcm1Hcm91cCwgbmFtZSkuc2V0VmFsdWUodGhpcy5nZXRBYnN0cmFjdENvbnRyb2woZm9ybUdyb3VwLCBuYW1lKS52YWx1ZS50b1VwcGVyQ2FzZSgpKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGVsIEFic3RyYWN0Q29udHJvbCBkZSB1biBmb3JtdWxhcmlvXHJcbiAgICAgKiBAcGFyYW0gZm9ybUdyb3VwIEZvcm11bGFyaW8gZG9uZGUgc2UgdmEgYSBidXNjYXIgZWwgQWJzdHJhY3RDb250cm9sXHJcbiAgICAgKiBAcGFyYW0gbmFtZSBOb21icmUgZGVsIEFic3RyYWN0Q29udHJvbFxyXG4gICAgICogQHJldHVybiBBYnN0cmFjdENvbnRyb2xcclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRBYnN0cmFjdENvbnRyb2woZm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwLCBuYW1lOiBzdHJpbmcpOiBBYnN0cmFjdENvbnRyb2wge1xyXG4gICAgICByZXR1cm4gZm9ybUdyb3VwLmdldChuYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBQcmV2aWVuZSBxdWUgc2UgZXNjcmliYW4gbGV0cmFzIGVuIGVsIGlucHV0IChVc2FyIGVuIGtleXByZXNzKVxyXG4gICAgICogQHBhcmFtIGV2ZW50IEV2ZW50byBkZWwgdGVjbGFkb1xyXG4gICAgICogQHJldHVybiBib29sZWFuXHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICogQG1vZGlmaWNhZG8gY29tbyBvbmx5TnVtZXJvIHBhcmEgY29ycmVnaXIgY29kaWdvLCB1c2FyIGN1cnJlbmN5LWlucHV0IHNpIHF1aWVyZSB1c2FyIGRlY2ltYWxlcyBcclxuICAgICAqL1xyXG4gICAgcHVibGljIG9ubHlEZWNpbWFsKGV2ZW50PzogYW55KTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCFpc05hTigrZXZlbnQua2V5KSAmJiBldmVudC5rZXlDb2RlICE9IDMyKSB7XHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlOyAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFByZXZpZW5lIHF1ZSBzZSBlc2NyaWJhbiBsZXRyYXMgZW4gZWwgaW5wdXQgKFVzYXIgZW4ga2V5cHJlc3MpXHJcbiAgICAgKiBAcGFyYW0gZXZlbnQgRXZlbnRvIGRlbCB0ZWNsYWRvXHJcbiAgICAgKiBAcmV0dXJuIGJvb2xlYW5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvbmx5TnVtYmVycyhldmVudD86IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgICAvLyBjb25zb2xlLmxvZyhldmVudCk7XHJcbiAgICAgIGlmICghaXNOYU4oK2V2ZW50LmtleSkgJiYgZXZlbnQua2V5Q29kZSAhPSAzMikge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQWNlcHRhIHNvbG8gbnVtZXJvLCBkZWxldGUgeSBiYWNrc3BhY2VcclxuICAgICAqIEBwYXJhbSBldmVudCBFdmVudG8gZGVsIHRlY2xhZG9cclxuICAgICAqIEByZXR1cm4gYm9vbGVhblxyXG4gICAgICogQGF1dGhvciBEaW1hbHkgQ3Jlc3BvXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvbmx5TnVtYmVyczIoZXZlbnQ/OiBhbnkpOiBib29sZWFuIHtcclxuICAgICAgaWYgKCFpc05hTigrZXZlbnQua2V5KSAgfHwgZXZlbnQua2V5Q29kZSA9PSA4IHx8IGV2ZW50LmtleUNvZGUgPT0gNDYpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEFjZXB0YSBzb2xvIG51bWVybyxndWlvbmVzLCBwYXJlbnRlc2lzLGVzcGFjaW9zXHJcbiAgICAgKiBAcGFyYW0gZXZlbnQgRXZlbnRvIGRlbCB0ZWNsYWRvXHJcbiAgICAgKiBAcmV0dXJuIGJvb2xlYW5cclxuICAgICAqIEBhdXRob3IgRGltYWx5IENyZXNwb1xyXG4gICAgICovXHJcbiAgICAgcHVibGljIHR5cGVOdW1iZXJzSHlwaGVuKGV2ZW50PzogYW55KTogYm9vbGVhbiB7XHJcbiAgICAgIGlmICghaXNOYU4oK2V2ZW50LmtleSkgfHwgZXZlbnQua2V5Q29kZSA9PSA4IHx8ICBldmVudC5rZXlDb2RlID09IDMyICB8fCBldmVudC5rZXlDb2RlID09IDQ2IFxyXG4gICAgICB8fCBldmVudC5rZXlDb2RlID09IDU4IHx8IGV2ZW50LmtleUNvZGUgPT0gNTcgfHwgZXZlbnQua2V5Q29kZSA9PSAxODkpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFBlcm1pdGUgKGEteiBBLVogw6Etw7ogw7HDkSDDvMOcICcsLikgcXVlIHNlIGVzY3JpYmFuIG51bWVyb3MgZW4gZWwgaW5wdXQgKFVzYXIgZW4ga2V5cHJlc3MpXHJcbiAgICAgKiBAcGFyYW0gZXZlbnQgRXZlbnRvIGRlbCB0ZWNsYWRvXHJcbiAgICAgKiBAcmV0dXJuIGJvb2xlYW5cclxuICAgICAqIEBkYXRlIDE0LTA1LTIwMjJcclxuICAgICAqIFxyXG4gICAgICovXHJcbiAgICAgIHB1YmxpYyB0eXBlTmFtZShldmVudD86IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICgoZXZlbnQua2V5Pj0nYScgJiYgZXZlbnQua2V5PD0neicpICB8fCAoZXZlbnQua2V5Pj0nQScgJiYgZXZlbnQua2V5PD0nWicpIHx8ICBldmVudC5rZXk9PVwiw7FcIiB8fCAgZXZlbnQua2V5PT1cIsORXCIgXHJcbiAgICAgICAgICB8fCAoZXZlbnQua2V5Pj0nw6EnICYmIGV2ZW50LmtleTw9J8O6JykgfHwgZXZlbnQua2V5Pj0nw7wnICB8fCBldmVudC5rZXk+PSfDnCcgIHx8IGV2ZW50LmtleT09XCInXCIgIHx8IGV2ZW50LmtleUNvZGU9PTMyIFxyXG4gICAgICAgICAgfHwgIGV2ZW50LmtleT09XCIuXCIgfHwgIGV2ZW50LmtleT09XCIsXCIgfHwgZXZlbnQua2V5Q29kZSA9PSA4IHx8ICBldmVudC5rZXlDb2RlID09IDMyICB8fCBldmVudC5rZXlDb2RlID09IDQ2ICApe1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gUGVybWl0ZSAoMC05IGEteiBBLVogw6Etw7ogw7HDkSDDvMOcICcsLi1fLzooKSUjwromJOKCrMKjwqUpIHF1ZSBzZSBlc2NyaWJhbiAgZW4gZWwgaW5wdXQgKFVzYXIgZW4ga2V5cHJlc3MpXHJcbiAgICAgKiBAcGFyYW0gZXZlbnQgRXZlbnRvIGRlbCB0ZWNsYWRvXHJcbiAgICAgKiBAcmV0dXJuIGJvb2xlYW5cclxuICAgICAqIEBkYXRlIDE0LTA1LTIwMjJcclxuICAgICAqIFxyXG4gICAgICovXHJcbiAgICAgIHB1YmxpYyB0eXBlVGV4dChldmVudD86IGFueSk6IGJvb2xlYW4geyAgICAgIFxyXG4gICAgICAgIGlmICgoZXZlbnQua2V5Pj0nYScgICYmIGV2ZW50LmtleTw9J3onKSB8fCAoZXZlbnQua2V5Pj0nQScgJiYgZXZlbnQua2V5PD0nWicpIHx8IGV2ZW50LmtleT09XCLDsVwiIHx8IGV2ZW50LmtleT09XCLDkVwiIFxyXG4gICAgICAgICAgfHwgKGV2ZW50LmtleT49J8OhJyAmJiBldmVudC5rZXk8PSfDuicpIHx8IGV2ZW50LmtleT09J8O8JyB8fCBldmVudC5rZXk9PSfDnCcgfHwgZXZlbnQua2V5PT1cIidcIiB8fCBpc05hTigrZXZlbnQua2V5KSBcclxuICAgICAgICAgIHx8IGV2ZW50LmtleT09XCIuXCIgIHx8ICBldmVudC5rZXk9PVwiLFwiIHx8IGV2ZW50LmtleT09XCImXCIgfHwgIGV2ZW50LmtleT09XCJfXCJ8fCBldmVudC5rZXk9PVwiLVwiIHx8IGV2ZW50LmtleT09XCIjXCJcclxuICAgICAgICAgIHx8IGV2ZW50LmtleT09XCLCulwiICB8fCAgZXZlbnQua2V5PT1cIiRcIiB8fCBldmVudC5rZXk9PVwiKFwiIHx8IGV2ZW50LmtleT09XCIpXCIgfHwgZXZlbnQua2V5PT1cIiVcIiB8fCBldmVudC5rZXk9PScgJ1xyXG4gICAgICAgICAgfHwgZXZlbnQua2V5PT0nOicgIHx8ZXZlbnQua2V5PT0nLyd8fCBldmVudC5rZXlDb2RlPT04MzY0IHx8ICBldmVudC5rZXlDb2RlPT0xNjUgfHxldmVudC5rZXlDb2RlPT0xNjMgXHJcbiAgICAgICAgICB8fCBldmVudC5rZXlDb2RlID09IDggfHwgIGV2ZW50LmtleUNvZGUgPT0gMzIgIHx8IGV2ZW50LmtleUNvZGUgPT0gNDYgKXtcclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH0gICAgICAgIFxyXG4gICAgICAgIHJldHVybiBmYWxzZTsgICAgICBcclxuICAgICAgfVxyXG5cclxuICAgICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gUGVybWl0ZSAoMC05IGEteiBBLVogw7HDkSAuLV8pIHF1ZSBzZSBlc2NyaWJhbiAgZW4gZWwgaW5wdXQgKFVzYXIgZW4ga2V5cHJlc3MpXHJcbiAgICAgKiBAcGFyYW0gZXZlbnQgRXZlbnRvIGRlbCB0ZWNsYWRvXHJcbiAgICAgKiBAcmV0dXJuIGJvb2xlYW5cclxuICAgICAqIEBkYXRlIDE0LTA1LTIwMjJcclxuICAgICAqL1xyXG4gICAgICAgcHVibGljIHR5cGVDb2RlKGV2ZW50PzogYW55KTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKChldmVudC5rZXk+PSdhJyAgJiYgZXZlbnQua2V5PD0neicpIHx8IChldmVudC5rZXk+PSdBJyAmJiBldmVudC5rZXk8PSdaJykgIHx8IGV2ZW50LmtleT09XCLDsVwiIHx8IGV2ZW50LmtleT09XCLDkVwiIFxyXG4gICAgICAgICAgfHxpc05hTigrZXZlbnQua2V5KSB8fCBldmVudC5rZXk9PVwiLlwiIHx8ICBldmVudC5rZXk9PVwiX1wiIHx8IGV2ZW50LmtleT09XCItXCIgfHwgZXZlbnQua2V5Q29kZSA9PSA4IHx8ICBldmVudC5rZXlDb2RlID09IDMyICB8fCBldmVudC5rZXlDb2RlID09IDQ2ICl7XHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9ICAgICAgICBcclxuICAgICAgICByZXR1cm4gZmFsc2U7ICAgICAgXHJcbiAgICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBBYnJlIGVsIGRpYWxvZyBkZSBsYXMgY29tdW5pZGFkZXNcclxuICAgICAqIEByZXR1cm4gUHJvbWlzZTxNQ29tdW5pZGFkPlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGFzeW5jIG9wZW5EaWFsb2dVbmlkYWRlc1RyaWJ1dGFyaWFzKCk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgIGxldCB1ZFRyaWJ1dGFyaWFzOiBNVW5pZGFkVHJpYnV0YXJpYVtdID0gYXdhaXQgdGhpcy5nZXRVbmlkYWRlc1RyaWJ1dGFyaWFzKCkudG9Qcm9taXNlKCk7XHJcbiAgICAgIGxldCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKENhdGFsb2dvQ29tcG9uZW50LCB7XHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgY29sdW1uczogWydhw7FvJywgJ25yb19kZWNyZXRvJywgJ2ZlY2hhX2RlY3JldG8nLCAnZW50cmFkYV92aWRlbmNpYScsICdwdWJsaWNhY2lvbl9nYWNldGEnLCAnbnJvX2dhY2V0YScsICd2YWxvcnV0J10sXHJcbiAgICAgICAgICB0aXRsZTogJ0NhdMOhbG9nbyBkZSBVbmlkYWRlcyBUcmlidXRhcmlhcycsXHJcbiAgICAgICAgICBkYXRhU291cmNlOiB1ZFRyaWJ1dGFyaWFzXHJcbiAgICAgICAgfSBhcyBJQ2F0YWxvZ28sXHJcbiAgICAgICAgd2lkdGg6ICcxMDAweCcsXHJcbiAgICAgICAgbWF4SGVpZ2h0OiAnOTB2aCdcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhcyB1bmlkYWRlcyB0cmlidXRhcmlhc1xyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPGFueT5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRVbmlkYWRlc1RyaWJ1dGFyaWFzKCk6IE9ic2VydmFibGU8TVVuaWRhZFRyaWJ1dGFyaWFbXT4ge1xyXG4gICAgICBjb25zdCByZXF1ZXN0OiBJUmVxdWVzdCA9IHtcclxuICAgICAgICBvcGVyYWNpb246ICdvYnRlbmVyRGF0YScsXHJcbiAgICAgICAgc2lnZXNwX2NvbmV4aW9uOiB7XHJcbiAgICAgICAgICBzZXJ2aWRvcjogdGhpcy5VUkwsXHJcbiAgICAgICAgICB1c3VhcmlvOiB0aGlzLnVzdWFyaW9BY3Rpdm8uZ2V0SW50ZXJmYWNlKClcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PE1VbmlkYWRUcmlidXRhcmlhW10+KGAke3RoaXMuVVJMfS9kYW8vY2ZnL3VuZHRyaWJ1dGFyaWFfZGFvLnBocGAsIHJlcXVlc3QpLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXNwOiBhbnlbXSkgPT4gcmVzcC5tYXAoZWxlbWVudCA9PiBuZXcgTVVuaWRhZFRyaWJ1dGFyaWEoZWxlbWVudCkpKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEFicmUgdW5hIG1vZGFsIGfDqW5lcmljYVxyXG4gICAgICogQHBhcmFtIGNvbHVtbnMgQ29sdW1uYXMgcXVlIHZhIGEgdGVuZXIgbGEgdGFibGFcclxuICAgICAqIEBwYXJhbSB0aXRsZSBUw610dWxvIGRlbCBkaWFsb2dcclxuICAgICAqIEBwYXJhbSBkYXRhU291cmNlIERhdGEgcXVlIHNlIHZhIGEgbW9zdHJhciBlbiBsYSB0YWJsYVxyXG4gICAgICogQHJldHVybiBQcm9taXNlPGFueT5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhc3luYyBvcGVuQ2F0YWxvZ29HZW5lcmljbyhcclxuICAgICAgY29sdW1uczogc3RyaW5nW10sIFxyXG4gICAgICB0aXRsZTogc3RyaW5nLCBcclxuICAgICAgZGF0YVNvdXJjZTogYW55W10sIFxyXG4gICAgICBjb2x1bW5OYW1lczogc3RyaW5nW10gPSBudWxsLCBcclxuICAgICAgd2lkdGg6IHN0cmluZyA9ICcxMDAwcHgnLFxyXG4gICAgICBvcHRpb25zOiB7XHJcbiAgICAgICAgaGFzQmFja2Ryb3A/OiBib29sZWFuLFxyXG4gICAgICAgIGRpc2FibGVDbG9zZT86IGJvb2xlYW5cclxuICAgICAgfSA9IHtkaXNhYmxlQ2xvc2U6IGZhbHNlLCBoYXNCYWNrZHJvcDogZmFsc2V9XHJcbiAgICApOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICBsZXQgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihDYXRhbG9nb0NvbXBvbmVudCwge1xyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgIGNvbHVtbnMsXHJcbiAgICAgICAgICB0aXRsZSxcclxuICAgICAgICAgIGRhdGFTb3VyY2UsXHJcbiAgICAgICAgICBjb2x1bW5OYW1lc1xyXG4gICAgICAgIH0gYXMgSUNhdGFsb2dvLFxyXG4gICAgICAgIHdpZHRoOiB3aWR0aCxcclxuICAgICAgICBtYXhIZWlnaHQ6ICc5MHZoJyxcclxuICAgICAgICBoYXNCYWNrZHJvcDogb3B0aW9ucy5oYXNCYWNrZHJvcCA/IG9wdGlvbnMuaGFzQmFja2Ryb3AgOiBmYWxzZSxcclxuICAgICAgICBkaXNhYmxlQ2xvc2U6IG9wdGlvbnMuZGlzYWJsZUNsb3NlID8gb3B0aW9ucy5kaXNhYmxlQ2xvc2UgOiBmYWxzZSxcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBBYnJlIHVuYSBtb2RhbCBnw6luZXJpY2EgY29uIDIgaW5wdXRzXHJcbiAgICAgKiBAcGFyYW0gY29sdW1ucyBDb2x1bW5hcyBxdWUgdmEgYSB0ZW5lciBsYSB0YWJsYVxyXG4gICAgICogQHBhcmFtIHRpdGxlIFTDrXR1bG8gZGVsIGRpYWxvZ1xyXG4gICAgICogQHBhcmFtIGRhdGFTb3VyY2UgRGF0YSBxdWUgc2UgdmEgYSBtb3N0cmFyIGVuIGxhIHRhYmxhXHJcbiAgICAgKiBAcmV0dXJuIFByb21pc2U8YW55PlxyXG4gICAgICogQGF1dGhvciBDYXJsb3MgQWxib3Jub3pcclxuICAgICAqL1xyXG4gICAgcHVibGljIGFzeW5jIG9wZW5DYXRhbG9nb0Rvc0lucHV0cyhcclxuICAgICAgY29sdW1uczogc3RyaW5nW10sXHJcbiAgICAgIHRpdGxlOiBzdHJpbmcsIFxyXG4gICAgICBkYXRhU291cmNlOiBhbnlbXSwgXHJcbiAgICAgIGZpbHRlckRhdGE6IGZpbHRlckRhdGFbXSxcclxuICAgICAgY29sdW1uTmFtZXM6IHN0cmluZ1tdID0gbnVsbCxcclxuICAgICAgd2lkdGg6IHN0cmluZyA9IFwiMTAwMHB4XCJcclxuICAgICk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgIGxldCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKENhdGFsb2dvRG9ibGVJbnB1dENvbXBvbmVudCwge1xyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgIGNvbHVtbnMsXHJcbiAgICAgICAgICB0aXRsZSxcclxuICAgICAgICAgIGRhdGFTb3VyY2UsXHJcbiAgICAgICAgICBjb2x1bW5OYW1lcyxcclxuICAgICAgICAgIGZpbHRlckRhdGFcclxuICAgICAgICB9IGFzIElDYXRhbG9nbyxcclxuICAgICAgICB3aWR0aDogd2lkdGgsXHJcbiAgICAgICAgbWF4SGVpZ2h0OiAnOTB2aCdcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBBYnJlIGVsIGRpYWxvZyBkZSBsYXMgY29tdW5pZGFkZXNcclxuICAgICAqIEByZXR1cm4gUHJvbWlzZTxNQ29tdW5pZGFkPlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGFzeW5jIG9wZW5EaWFsb2dDb211bmlkYWQoKTogUHJvbWlzZTxNQ29tdW5pZGFkPiB7XHJcbiAgICAgIGxldCBjb211bmlkYWRlczogTUNvbXVuaWRhZFtdID0gYXdhaXQgdGhpcy5nZXRDb211bmlkYWRlcygpLnRvUHJvbWlzZSgpO1xyXG4gICAgICBsZXQgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihDYXRhbG9nb0NvbXBvbmVudCwge1xyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgIGNvbHVtbnM6IFsncHJlZmlqbycsICdwYWlzJywgJ2VzdGFkbycsICdtdW5pY2lwaW8nLCAncGFycm9xdWlhJywgJ2NvZGlnbycsICdjb211bmlkYWQnXSxcclxuICAgICAgICAgIHRpdGxlOiAnQ2F0w6Fsb2dvIGRlIENvbXVuaWRhZGVzJyxcclxuICAgICAgICAgIGRhdGFTb3VyY2U6IGNvbXVuaWRhZGVzXHJcbiAgICAgICAgfSBhcyBJQ2F0YWxvZ28sXHJcbiAgICAgICAgd2lkdGg6ICcxMDAwcHgnLFxyXG4gICAgICAgIG1heEhlaWdodDogJzkwdmgnXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYXMgY29tdW5pZGFkZXNcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxNQ29tdW5pZGFkW10+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0Q29tdW5pZGFkZXMoKTogT2JzZXJ2YWJsZTxNQ29tdW5pZGFkW10+IHtcclxuICAgICAgY29uc3QgcmVxdWVzdDogSVJlcXVlc3QgPSB7XHJcbiAgICAgICAgb3BlcmFjaW9uOiAnb2J0ZW5lckRhdGEnLFxyXG4gICAgICAgIHNpZ2VzcF9jb25leGlvbjoge1xyXG4gICAgICAgICAgc2Vydmlkb3I6IHRoaXMuVVJMLFxyXG4gICAgICAgICAgdXN1YXJpbzogdGhpcy51c3VhcmlvQWN0aXZvLmdldEludGVyZmFjZSgpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxNQ29tdW5pZGFkW10+KGAke3RoaXMuVVJMfS9kYW8vY2ZnL2NvbXVuaWRhZGVzX2Rhby5waHBgLCByZXF1ZXN0KS5waXBlKCAgICAgXHJcbiAgICAgICAgbWFwKChyZXNwOiBhbnlbXSkgPT4gcmVzcC5tYXAoZWxlbWVudCA9PiBuZXcgTUNvbXVuaWRhZChlbGVtZW50KSkpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQWJyZSBlbCBkaWFsb2cgZGUgbGFzIGxhcyBtb25lZGFzXHJcbiAgICAgKiBAcmV0dXJuIFByb21pc2U8TU1vbmVkYT5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhc3luYyBvcGVuRGlhbG9nTW9uZWRhcygpOiBQcm9taXNlPE1Nb25lZGE+IHtcclxuICAgICAgbGV0IGNvaW5zOiBNTW9uZWRhW10gPSBhd2FpdCB0aGlzLmdldE1vbmVkYXMoJ3RvZGFzJykudG9Qcm9taXNlKCk7XHJcbiAgICAgIGxldCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKENhdGFsb2dvQ29tcG9uZW50LCB7XHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgY29sdW1uczogWydjb2RpZ28nLCAnZGVub21pbmFjaW9uJywgJ2NvZGlnb0lzbycsICdzaW1ib2xvJ10sXHJcbiAgICAgICAgICB0aXRsZTogJ0NhdMOhbG9nbyBkZSBNb25lZGFzJyxcclxuICAgICAgICAgIGNvbHVtbk5hbWVzOiBbJ2PDs2RpZ28nLCAnZGVub21pbmFjacOzbicsICdpc28nLCAnc2ltYm9sbyddLFxyXG4gICAgICAgICAgZGF0YVNvdXJjZTogY29pbnNcclxuICAgICAgICB9IGFzIElDYXRhbG9nbyxcclxuICAgICAgICB3aWR0aDogJzEwMDBweCcsXHJcbiAgICAgICAgbWF4SGVpZ2h0OiAnOTB2aCdcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbGFzIG1vbmVkYXNcclxuICAgKiBAcmV0dXJuIE9ic2VydmFibGU8TU1vbmVkYVtdPlxyXG4gICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICogYWN0dWFsaXphZG8gNC0xMi0yMDIyXHJcbiAgICogQHBhcmFtIHRpcG8gOnN0cmluZyB7J3RvZGFzJywndW5vJywnYWN0dWFsfVxyXG4gICAqIEBwYXJhbSBpZCA6IG51bWJlclxyXG4gICAqIEByZXR1cm5zIFxyXG4gICAqLyBcclxuICAgIFxyXG4gICAgXHJcbiAgICBwdWJsaWMgZ2V0TW9uZWRhcyh0aXBvOnN0cmluZyxpZD86bnVtYmVyKTogT2JzZXJ2YWJsZTxNTW9uZWRhW10+IHsgICAgIFxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxNTW9uZWRhW10+KGAke3RoaXMuVVJMfS9kYW8vY2ZnL21vbmVkYV9kYW8ucGhwP3RpcG89JHt0aXBvfSZpZD0ke2lkfWAsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpfSkucGlwZSggICAgICBcclxuICAgICAgICBtYXAoKHJlc3A6IGFueSkgPT4gcmVzcC5kYXRhLm1hcChlbGVtZW50ID0+IG5ldyBNTW9uZWRhKGVsZW1lbnQpKSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBARGVzY3JpcHRpb246IE9idGllbmUgbGEgdGFzYSBkZSBjYW1iaW8gYXNvY2lhZGFzIGEgdW5vIG8gdmFyaWFzIG1vbmVkYXNcclxuICAgICAqIEBwYXJhbSB0aXBvIHN0cmluZ1xyXG4gICAgICogQHBhcmFtIGlkIGNvZGlnbyBtb25lZGFcclxuICAgICAqIEByZXR1cm5zIGFycmF5L251bGxcclxuICAgICAqIEB0aXBvOmFsbC0+dG9kYXMsIChtb25lZGEtPnVuYSBtb25lZGEgaWQtPmlkIGRlIG1vbmVkYSlcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldEN1cnJlbmN5RXhjaGFuZ2VSYXRlKHRpcG86ICdhbGwnfCAnbW9uZWRhJz0gbnVsbCwgaWQ/Om51bWJlcik6IE9ic2VydmFibGU8TUV4Y2hhbmdlUmF0ZVtdPiB7ICAgICBcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TUV4Y2hhbmdlUmF0ZVtdPihgJHt0aGlzLlVSTH0vZGFvL2NmZy90YXNhX2NhbWJpb19kYW8ucGhwP3RpcG89JHt0aXBvfSZpZD0ke2lkfWAsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpfSkucGlwZSggICAgICAgIFxyXG4gICAgICAgIG1hcCgocmVzcDogYW55KSA9PiByZXNwLmRhdGEubWFwKGVsZW1lbnQgPT4gbmV3IE1FeGNoYW5nZVJhdGUoZWxlbWVudCkpKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuXHJcblxyXG4gIFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEFicmUgZWwgZGlhbG9nIGRlIGxhcyBsYXMgY3VlbnRhcyBjb250YWJsZXMgKEN1ZW50YXMgSW5zdGl0dWNpb25hbGVzKVxyXG4gICAgICogQHJldHVybiBQcm9taXNlPE1jdWVudGFJbnN0aXR1Y2lvbmFsPlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGFzeW5jIG9wZW5EaWFsb2dDdWVudGFzSW5zdGl0dWNpb25hbGVzKCk6IFByb21pc2U8TUN1ZW50YUluc3RpdHVjaW9uYWw+IHtcclxuICAgICAgbGV0IGFjY291bnRzOiBNQ3VlbnRhSW5zdGl0dWNpb25hbFtdID0gYXdhaXQgdGhpcy5nZXRDdWVudGFzSW5zdGl0dWNpb25hbGVzKCkudG9Qcm9taXNlKCk7XHJcbiAgICAgIGxldCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKENhdGFsb2dvQ29tcG9uZW50LCB7XHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgY29sdW1uczogWydjdWVudGEnLCAnZGVub21pbmFjaW9uJ10sXHJcbiAgICAgICAgICBjb2x1bW5OYW1lczogWydjdWVudGEnLCAnZGVub21pbmFjacOzbiddLFxyXG4gICAgICAgICAgdGl0bGU6ICdDYXTDoWxvZ28gZGUgcGxhbiBkZSBjdWVudGEgaW5zdGl0dWNpb25hbCcsXHJcbiAgICAgICAgICBkYXRhU291cmNlOiBhY2NvdW50c1xyXG4gICAgICAgIH0gYXMgSUNhdGFsb2dvLFxyXG4gICAgICAgIHdpZHRoOiAnMTAwMHB4JyxcclxuICAgICAgICBtYXhIZWlnaHQ6ICc5MHZoJ1xyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbGFzIGN1ZW50YXMgY29udGFibGVzIChDdWVudGFzIEluc3RpdHVjaW9uYWxlcylcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxNQ3VlbnRhSW5zdGl0dWNpb25hbFtdPlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldEN1ZW50YXNJbnN0aXR1Y2lvbmFsZXMoaW52ZW50b3J5PzogYm9vbGVhbik6IE9ic2VydmFibGU8TUN1ZW50YUluc3RpdHVjaW9uYWxbXT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxNQ3VlbnRhSW5zdGl0dWNpb25hbFtdPihgJHt0aGlzLlVSTH0vZGFvL3NjZy9jdWVudGFzX2Rhby5waHAkeyhpbnZlbnRvcnkpID8gJz9pbnZlbnRvcnk9dHJ1ZScgOiAnJ31gLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzcDogYW55KSA9PiByZXNwLmRhdGEubWFwKGVsZW1lbnQgPT4gbmV3IE1DdWVudGFJbnN0aXR1Y2lvbmFsKGVsZW1lbnQpKSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBBYnJlIGVsIGRpYWxvZyBkZSBsYXMgY3VlbnRhcyBkZSBwcmVzdXB1ZXN0byAoUmVjdXJzb3MgeSBFZ3Jlc29zKVxyXG4gICAgICogQHJldHVybiBQcm9taXNlPE1DdWVudGFQcmVzdXB1ZXN0bz5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhc3luYyBvcGVuRGlhbG9nQ3VlbnRhc1ByZXN1cHVlc3RvKCk6IFByb21pc2U8TUN1ZW50YVByZXN1cHVlc3RvPiB7XHJcbiAgICAgIGxldCBhY2NvdW50czogTUN1ZW50YVByZXN1cHVlc3RvW10gPSBhd2FpdCB0aGlzLmdldEN1ZW50YXNQcmVzdXB1ZXN0bygpLnRvUHJvbWlzZSgpO1xyXG4gICAgICBsZXQgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihDYXRhbG9nb0NvbXBvbmVudCwge1xyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgIGNvbHVtbk5hbWVzOiBbJ2N1ZW50YScsICdkZW5vbWluYWNpw7NuJ10sXHJcbiAgICAgICAgICBjb2x1bW5zOiBbJ2N1ZW50YScsICdkZW5vbWluYWNpb24nXSxcclxuICAgICAgICAgIHRpdGxlOiAnQ2F0w6Fsb2dvIGRlIEN1ZW50YXMgZGUgUHJlc3VwdWVzdG8nLFxyXG4gICAgICAgICAgZGF0YVNvdXJjZTogYWNjb3VudHNcclxuICAgICAgICB9IGFzIElDYXRhbG9nbyxcclxuICAgICAgICB3aWR0aDogJzEwMDBweCcsXHJcbiAgICAgICAgbWF4SGVpZ2h0OiAnOTB2aCdcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhcyBjdWVudGFzIGRlIHJlY3Vyc29zIHkgZWdyZXNvc1xyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPE1DdWVudGFQcmVzdXB1ZXN0bz5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRDdWVudGFzUHJlc3VwdWVzdG8oZmlsdGVyPzpzdHJpbmcpOiBPYnNlcnZhYmxlPE1DdWVudGFQcmVzdXB1ZXN0b1tdPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE1DdWVudGFQcmVzdXB1ZXN0bz4oYCR7dGhpcy5VUkx9L2Rhby9zY2cvcGxhbl91bmljb19jdWVudGFzX2Rhby5waHA/ZmlsdGVyPSR7ZmlsdGVyfWAsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoIG1hcCgocmVzOiBhbnkpID0+IHJlcy5kYXRhLm1hcChlbGVtZW50ID0+IG5ldyBNQ3VlbnRhUHJlc3VwdWVzdG8oZWxlbWVudCkpKSk7XHJcbiAgICB9XHJcblxyXG4gICBcclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEFicmUgZWwgY8OhdGFsb2dvIGRlIGN1ZW50YXMgZGUgbGEgdGFibGEgXCJzY2dfcGxhbl91bmljb19yZVwiXHJcbiAgICAgKiBAcmV0dXJucyBQcm9taXNlPE1DdWVudGFQcmVzdXB1ZXN0bz5cclxuICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgKiBAcGFyYW1zIGZpbHRybzogSW5kaWNhIGJham8gcXVlIHBhcmFtZXRyb3Mgc2UgdmEgYSBmaWx0cmFyIGVsIGNhdGFsb2dvXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhc3luYyBvcGVuQ2F0YWxvZ29DdWVudGFzUHJlc3VzcHVlc3RvKFxyXG4gICAgICB0aXR1bG86IHN0cmluZyxcclxuICAgICAgZmlsdHJvOiBmaWx0cm9DdWVudGFzUHJlc3VwdWVzdG8gPSBudWxsLFxyXG4gICAgICBhbmNobzogc3RyaW5nID0gJzEwMDBweCdcclxuICAgICk6IFByb21pc2U8TUN1ZW50YVByZXN1cHVlc3RvPiB7XHJcbiAgICAgIGxldCBjdWVudGFzOiBNQ3VlbnRhUHJlc3VwdWVzdG9bXSA9IFtdO1xyXG5cclxuICAgICAgYXdhaXQgdGhpcy5nZXRDdWVudGFzUHJlc3VwdWVzdG8oKS50b1Byb21pc2UoKS50aGVuKChyZXMpID0+IHtcclxuICAgICAgICBjdWVudGFzID0gcmVzO1xyXG4gICAgICAgIGlmIChmaWx0cm8pIHtcclxuICAgICAgICAgIGlmIChmaWx0cm8uZXN0YWRvKSB7XHJcbiAgICAgICAgICAgIGN1ZW50YXMgPSBjdWVudGFzLmZpbHRlcihjID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4gYy5zdGF0dXMgPT0gZmlsdHJvLmVzdGFkb1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGZpbHRyby50aXBvKSB7XHJcbiAgICAgICAgICAgIGN1ZW50YXMgPSBjdWVudGFzLmZpbHRlcihjID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4gYy50aXBvID09IGZpbHRyby50aXBvXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGN1ZW50YXMgPSBjdWVudGFzLm1hcChlID0+IHtcclxuICAgICAgICAgIGVbJ3Byb3ZTdGF0dXMnXSA9IGUuc3RhdHVzID09IFwiQ1wiID8gXCJNb3ZpbWllbnRvc1wiIDogXCJUb3RhbGl6YWRvcmFcIlxyXG4gICAgICAgICAgZVsncHJvdlR5cGUnXSA9IGUuc3RhdHVzID09IFwiUlwiID8gXCJSZWN1cnNvc1wiIDogXCJJbmdyZXNvc1wiXHJcbiAgICAgICAgICByZXR1cm4gZVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0pXHJcbiAgICAgIHJldHVybiB0aGlzLm9wZW5DYXRhbG9nb0dlbmVyaWNvKFxyXG4gICAgICAgIFtcImN1ZW50YVwiLFwiZGVub21pbmFjaW9uXCIsXCJwcm92U3RhdHVzXCIsXCJwcm92VHlwZVwiXSxcclxuICAgICAgICB0aXR1bG8sXHJcbiAgICAgICAgY3VlbnRhcyxcclxuICAgICAgICBbXCJDdWVudGFcIixcIkRlbm9taW5hY2nDs25cIixcIkVzdGFkb1wiLFwiVGlwb1wiXSxcclxuICAgICAgICBhbmNob1xyXG4gICAgICApXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQWJyZSBlbCBjw6F0YWxvZ28gZGUgY3VlbnRhcyBkZSBsYSB0YWJsYSBcInNwZ19jdWVudGFzXCJcclxuICAgICAqIEByZXR1cm5zIFByb21pc2U8TUN1ZW50YUVncmVzb3M+XHJcbiAgICAgKiBAYXV0aG9yIENhcmxvcyBBbGJvcm5velxyXG4gICAgICogQHBhcmFtcyBwcmVzdXB1ZXN0bzogSW5kaWNhIHNpIHNlIGEgdHJhYmFqYXIgY29uIGVzdHJ1Y3R1cmEgZGUgcHJlc3VwdWVzdG8gbyBub1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYXN5bmMgb3BlbkNhdGFsb2dvQ3VlbnRhc0VncmVzbyhcclxuICAgICAgdGl0dWxvOiBzdHJpbmcsXHJcbiAgICAgIHByZXN1cHVlc3RvOiBib29sZWFuID0gdHJ1ZSxcclxuICAgICAgYW5jaG86IHN0cmluZyA9IFwiMTAwMHB4XCJcclxuICAgICk6IFByb21pc2U8TUN1ZW50YUVncmVzb3M+e1xyXG4gICAgICBsZXQgY3VlbnRhczogTUN1ZW50YUVncmVzb3NbXSA9IFtdO1xyXG4gICAgICBhd2FpdCB0aGlzLmdldEV4cGVuc2VBY2NvdW50cygpLnRvUHJvbWlzZSgpLnRoZW4ocmVzID0+IHtcclxuICAgICAgICBjdWVudGFzID0gcmVzXHJcbiAgICAgICAgY3VlbnRhcyA9IGN1ZW50YXMuZmlsdGVyKGUgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIGUuc3RhdHVzID09IFwiQ1wiXHJcbiAgICAgICAgfSkubWFwKGUgPT4ge1xyXG4gICAgICAgICAgZVsncHJvdlN0YXR1cyddID0gZS5zdGF0dXMgPT0gXCJDXCIgPyBcIk1vdmltaWVudG9zXCIgOiBcIlRvdGFsaXphZG9yYVwiXHJcbiAgICAgICAgICByZXR1cm4gZTtcclxuICAgICAgICB9KVxyXG4gICAgICB9KVxyXG4gICAgICBpZiAocHJlc3VwdWVzdG8pIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5vcGVuQ2F0YWxvZ29Eb3NJbnB1dHMoXHJcbiAgICAgICAgICBbXCJjdWVudGFcIixcImRlbm9taW5hY2lvblwiLFwiZXN0cnVjdHVyYVwiLFwicHJvdlN0YXR1c1wiXSxcclxuICAgICAgICAgIHRpdHVsbyxcclxuICAgICAgICAgIGN1ZW50YXMsXHJcbiAgICAgICAgICBbe1xyXG4gICAgICAgICAgICBwbGFjZWhvbGRlcjogXCJDdWVudGFcIixcclxuICAgICAgICAgICAgcHJvcGVydHk6IFwiY3VlbnRhXCJcclxuICAgICAgICAgIH0sIHtcclxuICAgICAgICAgICAgcGxhY2Vob2xkZXI6IFwiRXN0cnVjdHVyYVwiLFxyXG4gICAgICAgICAgICBwcm9wZXJ0eTogXCJlc3RydWN0dXJhXCJcclxuICAgICAgICAgIH1dLFxyXG4gICAgICAgICAgW1wiQ3VlbnRhXCIsIFwiRGVub21pbmFjacOzblwiLCBcIkVzdHJ1Y3R1cmFcIiwgXCJFc3RhZG9cIl0sXHJcbiAgICAgICAgICBhbmNob1xyXG4gICAgICAgIClcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsZXQgZmlsdGVyZWRBY2NvdW50czogTUN1ZW50YUVncmVzb3NbXSA9IFtdO1xyXG4gICAgICAgIGN1ZW50YXMuZm9yRWFjaChjID0+IHtcclxuICAgICAgICAgIGlmICghZmlsdGVyZWRBY2NvdW50cy5maW5kKGUgPT4gZS5jdWVudGEgPT0gYy5jdWVudGEpKSB7XHJcbiAgICAgICAgICAgIGZpbHRlcmVkQWNjb3VudHMucHVzaChjKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgcmV0dXJuIHRoaXMub3BlbkNhdGFsb2dvR2VuZXJpY28oXHJcbiAgICAgICAgICBbXCJjdWVudGFcIixcImRlbm9taW5hY2lvblwiLFwicHJvdlN0YXR1c1wiXSxcclxuICAgICAgICAgIHRpdHVsbyxcclxuICAgICAgICAgIGZpbHRlcmVkQWNjb3VudHMsXHJcbiAgICAgICAgICBbXCJDdWVudGFcIiwgXCJEZW5vbWluYWNpw7NuXCIsIFwiRXN0YWRvXCJdLFxyXG4gICAgICAgICAgYW5jaG9cclxuICAgICAgICApXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBBYnJlIGVsIGPDoXRhbG9nbyBkZSBjdWVudGFzIGRlIGxhIHRhYmxhIFwic3BpX2N1ZW50YXNcIlxyXG4gICAgICogQHJldHVybnMgUHJvbWlzZTxNQ3VlbnRhSW5ncmVzb3M+XHJcbiAgICAgKiBAYXV0aG9yIENhcmxvcyBBbGJvcm5velxyXG4gICAgICogQHBhcmFtcyBwcmVzdXB1ZXN0bzogSW5kaWNhIHNpIHNlIGEgdHJhYmFqYXIgY29uIGVzdHJ1Y3R1cmEgZGUgcHJlc3VwdWVzdG8gbyBub1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYXN5bmMgb3BlbkNhdGFsb2dvQ3VlbnRhc0luZ3Jlc28oXHJcbiAgICAgIHRpdHVsbzogc3RyaW5nLFxyXG4gICAgICBwcmVzdXB1ZXN0bzogYm9vbGVhbiA9IHRydWUsXHJcbiAgICAgIGFuY2hvOiBzdHJpbmcgPSBcIjEwMDBweFwiXHJcbiAgICApOiBQcm9taXNlPE1DdWVudGFJbmdyZXNvcz57XHJcbiAgICAgIGxldCBjdWVudGFzOiBNQ3VlbnRhSW5ncmVzb3NbXSA9IFtdO1xyXG4gICAgICBhd2FpdCB0aGlzLmdldEluY29tZUFjY291bnRzKCkudG9Qcm9taXNlKCkudGhlbigocmVzOiBJUmVzcG9uc2UpID0+IHtcclxuICAgICAgICBjdWVudGFzID0gcmVzLmRhdGFcclxuICAgICAgICBjdWVudGFzID0gY3VlbnRhcy5maWx0ZXIoZSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gZS5lc3RhZG8gPT0gXCJDXCJcclxuICAgICAgICB9KS5tYXAoZSA9PiB7XHJcbiAgICAgICAgICBlWydwcm92U3RhdHVzJ10gPSBlLmVzdGFkbyA9PSBcIkNcIiA/IFwiTW92aW1pZW50b3NcIiA6IFwiVG90YWxpemFkb3JhXCJcclxuICAgICAgICAgIHJldHVybiBlO1xyXG4gICAgICAgIH0pXHJcbiAgICAgIH0pXHJcbiAgICAgIGlmIChwcmVzdXB1ZXN0bykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm9wZW5DYXRhbG9nb0Rvc0lucHV0cyhcclxuICAgICAgICAgIFtcImN1ZW50YVwiLFwiZGVub21pbmFjaW9uXCIsXCJlc3RydWN0dXJhXCIsXCJwcm92U3RhdHVzXCJdLFxyXG4gICAgICAgICAgdGl0dWxvLFxyXG4gICAgICAgICAgY3VlbnRhcyxcclxuICAgICAgICAgIFt7XHJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBcIkN1ZW50YVwiLFxyXG4gICAgICAgICAgICBwcm9wZXJ0eTogXCJjdWVudGFcIlxyXG4gICAgICAgICAgfSwge1xyXG4gICAgICAgICAgICBwbGFjZWhvbGRlcjogXCJFc3RydWN0dXJhXCIsXHJcbiAgICAgICAgICAgIHByb3BlcnR5OiBcImVzdHJ1Y3R1cmFcIlxyXG4gICAgICAgICAgfV0sXHJcbiAgICAgICAgICBbXCJDdWVudGFcIiwgXCJEZW5vbWluYWNpw7NuXCIsIFwiRXN0cnVjdHVyYVwiLCBcIkVzdGFkb1wiXSxcclxuICAgICAgICAgIGFuY2hvXHJcbiAgICAgICAgKVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBmaWx0ZXJlZEFjY291bnRzOiBNQ3VlbnRhSW5ncmVzb3NbXSA9IFtdO1xyXG4gICAgICAgIGN1ZW50YXMuZm9yRWFjaChjID0+IHtcclxuICAgICAgICAgIGlmICghZmlsdGVyZWRBY2NvdW50cy5maW5kKGUgPT4gZS5jdWVudGEgPT0gYy5jdWVudGEpKSB7XHJcbiAgICAgICAgICAgIGZpbHRlcmVkQWNjb3VudHMucHVzaChjKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgcmV0dXJuIHRoaXMub3BlbkNhdGFsb2dvR2VuZXJpY28oXHJcbiAgICAgICAgICBbXCJjdWVudGFcIixcImRlbm9taW5hY2lvblwiLFwicHJvdlN0YXR1c1wiXSxcclxuICAgICAgICAgIHRpdHVsbyxcclxuICAgICAgICAgIGZpbHRlcmVkQWNjb3VudHMsXHJcbiAgICAgICAgICBbXCJDdWVudGFcIiwgXCJEZW5vbWluYWNpw7NuXCIsIFwiRXN0YWRvXCJdLFxyXG4gICAgICAgICAgYW5jaG9cclxuICAgICAgICApXHJcbiAgICAgIH1cclxuICAgIH0gICAgXHJcblxyXG4gICAgcHVibGljIGdldFVuaWRhZEFkbWluaXN0cmF0aXZhKHRpcG8/OnN0cmluZyxlPzpudW1iZXIpe1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLlVSTH0vZGFvL3NwZy91bmlkYWRfYWRtaW5pc3RyYXRpdmFfZGFvLnBocD90aXBvPSR7dGlwb30mZT0ke2V9YCxcclxuICAgICAge2hlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKX0pXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzOmFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1BZG1pbmlzdHJhdGl2ZVVuaXQoZSkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9KSBcclxuICAgICAgKVxyXG4gICAgfVxyXG5cclxuICAgIC8qKiBcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxvcyBjYXJnb3MgZGUgc2VydmljaW9zXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQGF1dGhvciBDYXJsb3MgQWxib3Jub3pcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldFNlcnZpY2VDaGFyZ2VzKHNlcnZpY2VJZDpudW1iZXIgPSBudWxsKTogT2JzZXJ2YWJsZTxJUmVzcG9uc2U+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3NvYy9zZXJ2aWNpb19jYXJnb19kYW8ucGhwJHtcclxuICAgICAgICBzZXJ2aWNlSWQgPyBgP3NlcnZpY2VfaWQ9JHtzZXJ2aWNlSWR9YCA6ICcnXHJcbiAgICAgIH1gLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNU2VydmljZUNoYXJnZShlKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgIC8qKiBcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxvcyBwYWlzZXNcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxNQ291bnRyeT5cclxuICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgKiBAbW9kaWZpZWQgMTAtMDEtMjAyMlxyXG4gICAgICogQHBhcmFtIGNvZGlnbzogQ29kaWdvIGRlbCBwYWlzXHJcblxyXG4gICAgICovXHJcbiAgICAgIHB1YmxpYyBnZXRDb3VudHJpZXMoY29kaWdvPzpzdHJpbmcpOiBPYnNlcnZhYmxlPE1Db3VudHJ5W10+IHtcclxuICAgICAgICBcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxNQ291bnRyeT4oYCR7dGhpcy5VUkx9L2Rhby9jZmcvcGFpc2VzX2Rhby5waHA/Y29kaWdvPSR7Y29kaWdvfWAsXHJcbiAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgICBtYXAoKHJlczogYW55KSA9PiByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTUNvdW50cnkoZSkpKVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICBcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxvcyBlc3RhZG9zXHJcbiAgICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxNU3RhdGU+XHJcbiAgICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgICAqIEBtb2RpZmljYWRvIDQtMTItMjAyMlxyXG4gICAgICAgKiBAcGFyYW0gY29kaWdvOiBDb2RpZ28gZGVsIHBhaXNcclxuICAgICAgICovXHJcbiAgICAgIHB1YmxpYyBnZXRTdGF0ZXMoY29kaWdvPzpzdHJpbmcpOiBPYnNlcnZhYmxlPE1TdGF0ZVtdPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TVN0YXRlPihgJHt0aGlzLlVSTH0vZGFvL2NmZy9lc3RhZG9zX2Rhby5waHA/Y29kaWdvPSR7Y29kaWdvfWAsXHJcbiAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgICBtYXAoKHJlczogYW55KSA9PiByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTVN0YXRlKGUpKSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsb3MgbXVuaWNpcGlvc1xyXG4gICAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8TU11bmljaXBhbGl0eT5cclxuICAgICAgICogQGF1dGhvciBDYXJsb3MgQWxib3Jub3pcclxuICAgICAgICogQG1vZGlmaWNhZG8gMTAtMDEtMjAyMlxyXG4gICAgICAgKiBAcGFyYW0gcGFpczogQ29kaWdvIGRlbCBwYWlzICxcclxuICAgICAgICogQHBhcmFtIGVzdGFkbzogQ29kaWdvIGRlbCBlc3RhZG9cclxuICAgICAgICogQGFjdHVhbGl6YWRvIDQtMTItMjAyMlxyXG4gICAgICAgKi9cclxuICAgICAgcHVibGljIGdldE11bmljaXBhbGl0aWVzKHBhaXM/OnN0cmluZyxlc3RhZG8/OnN0cmluZyk6IE9ic2VydmFibGU8TU11bmljaXBhbGl0eVtdPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TU11bmljaXBhbGl0eT4oYCR7dGhpcy5VUkx9L2Rhby9jZmcvbXVuaWNpcGlvc19kYW8ucGhwP3BhaXM9JHtwYWlzfSZlc3RhZG89JHtlc3RhZG99YCxcclxuICAgICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNTXVuaWNpcGFsaXR5KGUpKSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYXMgcGFycm9xdWlhcyBcclxuICAgICAgICogQHJldHVybiBPYnNlcnZhYmxlPE1QYXJpc2g+XHJcbiAgICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgICAqIEBtb2RpZmljYWRvIDEwLTAxLTIwMjJcclxuICAgICAgICogQHBhcmFtIHBhaXM6IENvZGlnbyBkZWwgcGFpc1xyXG4gICAgICAgKiBAcGFyYW0gZXN0YWRvOiBDb2RpZ28gZGVsIGVzdGFkb1xyXG4gICAgICAgKiBAcGFyYW0gbXVuaWNpcGlvOmNvZGlnbyBNdW5pY2lwaW9cclxuICAgICAgICogQGFjdHVhbGl6YWRvIDQtMTItMjAyMlxyXG5cclxuICAgICAgICovXHJcbiAgICAgIHB1YmxpYyBnZXRQYXJpc2hlcyhwYWlzPzpzdHJpbmcsZXN0YWRvPzpzdHJpbmcsbXVuaWNpcGlvPzpzdHJpbmcpOiBPYnNlcnZhYmxlPE1QYXJpc2hbXT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE1QYXJpc2g+KGAke3RoaXMuVVJMfS9kYW8vY2ZnL3BhcnJvcXVpYXNfZGFvLnBocD9wYWlzPSR7cGFpc30mZXN0YWRvPSR7ZXN0YWRvfSZtdW5pY2lwaW89JHttdW5pY2lwaW99YCxcclxuICAgICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNUGFyaXNoKGUpKSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYXMgY2l1ZGFkZXNcclxuICAgICAgICogQHJldHVybiBPYnNlcnZhYmxlPE1QYXJpc2g+XHJcbiAgICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgICAqIEBtb2RpZmljYWRvIDEwLTAxLTIwMjJcclxuICAgICAgICogQHBhcmFtIHBhaXM6IENvZGlnbyBkZWwgcGFpc1xyXG4gICAgICAgKiBAcGFyYW0gZXN0YWRvOiBDb2RpZ28gZGVsIGVzdGFkb1xyXG5cclxuXHJcbiAgICAgICAqL1xyXG4gICAgICAgIHB1YmxpYyBnZXRDaXR5KHBhaXM/OnN0cmluZyxlc3RhZG8/OnN0cmluZyk6IE9ic2VydmFibGU8TUNpdHlbXT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE1DaXR5PihgJHt0aGlzLlVSTH0vZGFvL2NmZy9jaXVkYWRlc19kYW8ucGhwP3BhaXM9JHtwYWlzfSZlc3RhZG89JHtlc3RhZG99YCxcclxuICAgICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNQ2l0eShlKSkpXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLyoqXHJcbiAgICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhcyBjaXVkYWRlc1xyXG4gICAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8TVBhcmlzaD5cclxuICAgICAgICogQGF1dGhvciBEaW1hbHkgQ3Jlc3BvXHJcbiAgICAgICAqIEBtb2RpZmljYWRvIDEwLTAxLTIwMjJcclxuICAgICAgICogQHBhcmFtIHBhaXM6IENvZGlnbyBkZWwgcGFpc1xyXG5cclxuICAgICAgICovXHJcbiAgICAgICAgcHVibGljIGdldENvbW11bml0aWVzKHBhaXM/OnN0cmluZyxlc3RhZG8/OnN0cmluZywgbXVuaWNpcGlvPzpzdHJpbmcscGFycm9xdWlhPzpzdHJpbmcpOiBPYnNlcnZhYmxlPE1Db21tdW5pdHlbXT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TUNvbW11bml0eT4oYCR7dGhpcy5VUkx9L2Rhby9jZmcvY29tdW5pZGFkZXNfZGFvLnBocD9wYWlzPSR7cGFpc30mZXN0YWRvPSR7ZXN0YWRvfSZtdW5pY2lwaW89JHttdW5pY2lwaW99JnBhcnJvcXVpYT0ke3BhcnJvcXVpYX1gLFxyXG4gICAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgICAgICBtYXAoKHJlczogYW55KSA9PiByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTUNvbW11bml0eShlKSkpXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICBcclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbG9zIHNpc3RlbWFzIGFjdGl2YXNcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxNU2lzdGVtYT5cclxuICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRTaXN0ZW1hcygpOiBPYnNlcnZhYmxlPE1TaXN0ZW1hW10+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TVNpc3RlbWE+KGAke3RoaXMuVVJMfS9kYW8vc3NzL3Npc3RlbWFzX2Rhby5waHBgLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNU2lzdGVtYShlKSkpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYSBtb25lZGEgYWN0dWFsXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQGF1dGhvciBDYXJsb3MgQWxib3Jub3pcclxuICAgICAqIEBhY3R1YWxpemFkbzogNC0xMi0yMDIyMlxyXG4gICAgICogQHBhcmFtcyBpZDogaWQgZGUgbGEgbW9uZWRhLFxyXG4gICAgICogQHBhcmFtcyB0aXBvOiB0b2Rhcy0+b2J0aWVuZSB0b2RhcyBsYXMgbW9uZWRhLCAodW5vLT4gb2J0aWVuZSB1bmEgbW9uZWRhICsgaWQpXHJcbiAgICAgKiAobW9uOmZvcm1hdG8gcGFyYSBpbnB1dEN1cnJlbmN5ICsgaWQgKVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0Q3VycmVudEN1cnJlbmN5KHRpcG86J3RvZGFzJ3wndW5vJ3wnbW9uJz1udWxsLGlkPzpudW1iZXIpOiBPYnNlcnZhYmxlPElSZXNwb25zZT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vY2ZnL21vbmVkYV9kYW8ucGhwP3RpcG89JHt0aXBvfSZpZD0ke2lkfWAsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJlcy5kYXRhID0gbmV3IE1Nb25lZGFDb25maWcocmVzLmRhdGEpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgICAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhIGxpbmVhIGVtcHJlc2FcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxJUmVzcG9uc2U+XHJcbiAgICAgKiBAYXV0aG9yIERpbWFseSBDcmVzcG9cclxuICAgICAqIEBhY3R1YWxpemFkbzogNS0xMi0yMDIyMlxyXG4gICAgICovXHJcbiAgICAgICAgIHB1YmxpYyBnZXRFbnRlcnByaXNlKHRpcG86J2xpbmVhJyB8J3Byb2Nlc28nfCdkZWZhdWx0Jz1udWxsICxpZD86bnVtYmVyKTogT2JzZXJ2YWJsZTxJUmVzcG9uc2U+IHtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9jZmcvZW50ZXJwcmlzZV9kYW8ucGhwP3RpcG89JHt0aXBvfWAsXHJcbiAgICAgICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1FbnRlcnByaXNlKGUpKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsb3MgdGlwb3MgZGUgb3JnYW5pemFjaW9uXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQGF1dGhvciBDYXJsb3MgQWxib3Jub3pcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldE9yZ2FuaXphdGlvblR5cGVzKCk6IE9ic2VydmFibGU8SVJlc3BvbnNlPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9ycGMvdGlwb19vcmdhbml6YWNpb25fZGFvLnBocGAsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1Pcmdhbml6YXRpb25UeXBlKGUpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxvcyB0aXBvcyBkZSBvcmdhbml6YWNpb25cclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxJUmVzcG9uc2U+XHJcbiAgICAgKiBAYXV0aG9yIENhcmxvcyBBbGJvcm5velxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0U3BlY2lhbHRpZXMoKTogT2JzZXJ2YWJsZTxJUmVzcG9uc2U+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3JwYy9lc3BlY2lhbGlkYWRfZGFvLnBocGAsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1TcGVjaWFsdHkoZSkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbG9zIGRvY3VtZW50b3NcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxJUmVzcG9uc2U+XHJcbiAgICAgKiBAYXV0aG9yIENhcmxvcyBBbGJvcm5velxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0RG9jdW1lbnRzKCk6IE9ic2VydmFibGU8SVJlc3BvbnNlPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9ycGMvZG9jdW1lbnRvX2Rhby5waHBgLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNRG9jdW1lbnQoZSkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbGFzIGNsYXNpZmljYWNpb25lc1xyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPElSZXNwb25zZT5cclxuICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRDbGFzaWZpY2F0aW9ucygpOiBPYnNlcnZhYmxlPElSZXNwb25zZT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vcnBjL2NsYXNpZmljYWNpb25fZGFvLnBocGAsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1DbGFzaWZpY2F0aW9uKGUpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGVsIHByZWZpam8gZGUgbG9zIHVzdWFyaW9zXHJcbiAgICAgKiBAcGFyYW0gcHJvY2VkZSBEZSBxdWUgbcOzZHVsbyBwcm9jZWRlXHJcbiAgICAgKiBAcGFyYW0gY29kc2lzIEPDs2RpZ28gZGVsIHNpc3RlbWFcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxNVXN1YXJpb1ByZWZpam9bXT5cclxuICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRVc2VyUHJlZml4KGZpbHRlcjogJ2RldGFpbCcgPSBudWxsLCBjb2RlOiBzdHJpbmcgPSBudWxsKTogT2JzZXJ2YWJsZTxJUmVzcG9uc2U+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL2NmZy9jb250cm9sX251bWVyb19kYW8ucGhwJHtcclxuICAgICAgICBmaWx0ZXIgPyBgP2ZpbHRlcj0ke2ZpbHRlcn0mY29kZT0ke2NvZGV9YCA6ICcnXHJcbiAgICAgIH1gLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNVXN1YXJpb1ByZWZpam8oZSkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxvcyBwZWZpam9cclxuICAgICAqIEBwYXJhbSBwcm9jZWRlIERlIHF1ZSBtw7NkdWxvIHByb2NlZGVcclxuICAgICAqIEBwYXJhbSBjb2RzaXMgQ8OzZGlnbyBkZWwgc2lzdGVtYVxyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPE1Vc3VhcmlvUHJlZmlqb1tdPlxyXG4gICAgICogQGF1dGhvciBEaW1hbHlDcmVzcG8gMTctMTItMjAyMlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0UHJlZml4KGZpbHRlcjogJ2FsbCcgfCAnb25lJyA9IG51bGwsIGNvZGU6IHN0cmluZyA9IG51bGwpOiBPYnNlcnZhYmxlPElSZXNwb25zZT4ge1xyXG5cclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL2NmZy9jb250cm9sX251bWVyb19kYW8ucGhwJHtcclxuICAgICAgICBmaWx0ZXIgPyBgP2ZpbHRlcj0ke2ZpbHRlcn0mY29kZT0ke2NvZGV9YCA6ICcnXHJcbiAgICAgIH1gLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNUHJlZmlqbyhlKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQWJyZSBlbCBkaWFsb2cgcGFyYSBidXNjYXIgbG9zIHByb3ZlZWRvcmVzXHJcbiAgICAgKiBAcmV0dXJuIFByb21pc2U8TVByb3ZlZWRvcj5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhc3luYyBvcGVuRGlhbG9nUHJvdmVlZG9yZXMoKTogUHJvbWlzZTxNUHJvdmVlZG9yPiB7XHJcbiAgICAgIGxldCBwcm92ZWVkb3JlczogTVByb3ZlZWRvcltdID0gYXdhaXQgdGhpcy5nZXRQcm92ZWVkb3JlcygpLnRvUHJvbWlzZSgpO1xyXG4gICAgICBsZXQgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihDYXRhbG9nb0NvbXBvbmVudCwge1xyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgIGNvbHVtbnM6IFsndGlwbycsICdyaWYnLCAnbm9tYnJlJ10sXHJcbiAgICAgICAgICB0aXRsZTogJ0NhdMOhbG9nbyBkZSBQcm92ZWVkb3JlcyB5IEJlbmVmaWNpYXJpb3MnLFxyXG4gICAgICAgICAgZGF0YVNvdXJjZTogcHJvdmVlZG9yZXNcclxuICAgICAgICB9IGFzIElDYXRhbG9nbyxcclxuICAgICAgICB3aWR0aDogJzQ1MHB4JyxcclxuICAgICAgICBtYXhIZWlnaHQ6ICc5MHZoJ1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHJldHVybiBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxvcyBwcm92ZWVkb3Jlc1xyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPE1Qcm92ZWVkb3JbXT5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRQcm92ZWVkb3JlcygpOiBPYnNlcnZhYmxlPE1Qcm92ZWVkb3JbXT4ge1xyXG4gICAgICBsZXQgcmVxdWVzdDogSVJlcXVlc3QgPSB7XHJcbiAgICAgICAgb3BlcmFjaW9uOiAnb2J0ZW5lckRhdGEnLFxyXG4gICAgICAgIHNpZ2VzcF9jb25leGlvbjoge1xyXG4gICAgICAgICAgc2Vydmlkb3I6IHRoaXMuVVJMLFxyXG4gICAgICAgICAgdXN1YXJpbzogdGhpcy51c3VhcmlvQWN0aXZvLmdldEludGVyZmFjZSgpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxNUHJvdmVlZG9yW10+KGAke3RoaXMuVVJMfS9kYW8vcnBjL3Byb3ZlZWRvcl9iZW5lZmljaWFyaW9fZGFvLnBocGAsIHJlcXVlc3QpLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXM6IGFueSkgPT4gcmVzLm1hcChlbGVtZW50ID0+IG5ldyBNUHJvdmVlZG9yKGVsZW1lbnQpKSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxvcyBwcm92ZWVkb3JlcyB5IGJlbmVmaWNpYXJpb3NcclxuICAgICAqIEBOb3RlIFNpIHF1aWVyZSBzb2xvIGxvcyBkYXRvcyBiYXNpY29zIHVzZSBsb3MgcGFyYW1ldHJvcyAoJ1MnLCdQJywnTicpXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQGF1dGhvciBDYXJsb3MgQWxib3Jub3pcclxuICAgICAqIEB0eXBlID17J1AnLCdCJywnUyd9XHJcbiAgICAgKiBAZGVzdGluYXRpb24gPXsnUCcsJ0InLCdDJywnQScsJ04nfeKJiHtQcm92ZWVkb3IsQmVuZWZpY2lhcmlvLENvbnRhdGlzdGEsQW1ib3MsTmluZ3Vub31cclxuICAgICAqIEBhY2NvdW50ID17J1MnLCdOJ30gcGFyYSB0cmFlciBsYXMgY3VlbnRhcyBiYW5jYXJpYXMgZGVsIHByb3ZlZWRvciBwb3IgZGVmZWN0byBlc3RhIGVuIE5cclxuICAgICAqIEBtb2RpZmljYWRvIDE3LTA3LTIwMjNcclxuICAgICAqL1xyXG5cclxuICAgIHB1YmxpYyBnZXRQcm92aWRlcnNBbmRCZW5lZmljaWFyaWVzKHR5cGU6IHN0cmluZyA9J2RlZmF1bHQnLCBkZXN0aW5hdGlvbjpzdHJpbmc9bnVsbCwgYWNjb3VudDpzdHJpbmc9J04nKTogT2JzZXJ2YWJsZTxJUmVzcG9uc2U+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3JwYy9wcm92ZWVkb3JfYmVuZWZpY2lhcmlvX2Rhby5waHAke3R5cGUgPyBgP3Byb3ZpZGVyX3R5cGU9JHt0eXBlfWAgIDogJyd9JmRlc3RpbmF0aW9uPSR7ZGVzdGluYXRpb259JmFjY291bnQ9JHthY2NvdW50fWAsIFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNUHJvdmlkZXJCZW5lZmljaWFyeShlKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgdW4gVXN1YXJpbyBzZWd1biBzdSBJRFxyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPElSZXNwb25zZT5cclxuICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRVc2VyQnlJZChpZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxJUmVzcG9uc2U+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3Nzcy91c3VhcmlvX2Rhby5waHA/aWQ9JHtpZH1gLCBcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSBuZXcgTVVzdWFyaW8ocmVzLmRhdGEpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbG9zIGJhbmNvc1xyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPElSZXNwb25zZT5cclxuICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRCYW5rcyhpZEVudGVycHJpc2U/Om51bWJlcik6IE9ic2VydmFibGU8SVJlc3BvbnNlPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zY2IvYmFuY29fZGFvLnBocD9lPSR7aWRFbnRlcnByaXNlfWAsIFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNQmFuayhlKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsb3MgdGlwb3MgZGUgY3VlbnRhIGJhbmNhcmlhc1xyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPElSZXNwb25zZT5cclxuICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRCYW5rQWNjb3VudFR5cGVzKCk6IE9ic2VydmFibGU8SVJlc3BvbnNlPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zY2IvYmFuY29fdGlwb19jdWVudGFfZGFvLnBocGAsIFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNQmFua0FjY291bnRUeXBlKGUpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gb2J0aWVuZSBsYXMgY3VlbnRhIHNlZ3VuIGVsIGlkXHJcbiAgICAgKiBAcGFyYW0gdGlwbyB7J2JhbmNvJywgJ2RlZmF1bHQnfVxyXG4gICAgICogQHBhcmFtIGlkIHBhcmEgbGEgb3BjaW9uIGJhbmNvIHVzYXIgaWQ9aWRCYW5jbywgb3BjaW9uIGRlZmF1bGYgaWQ9aWRFbnRlcnByaXNlXHJcbiAgICAgKiBAcmV0dXJucyBcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldEFsbEJhbmtBY2NvdW50KHRpcG86c3RyaW5nLGlkOm51bWJlcil7ICAgICAgICBcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5VUkx9L2Rhby9zY2IvY3VlbnRhX2JhbmNvX2Rhby5waHA/dGlwbz0ke3RpcG99JmU9JHtpZH1gLFxyXG4gICAgICB7aGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpfSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXM6YW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZWxlbWVudCA9PiBuZXcgTUN1ZW50YUJhbmNvKGVsZW1lbnQpKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJlcy5kYXRhID0gW107XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmVzXHJcbiAgICAgICAgfSkgXHJcbiAgICAgIClcclxuICAgIH0gXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsb3MgYmFuY29zIHNpZ2Vjb2ZcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxJUmVzcG9uc2U+XHJcbiAgICAgKiBAYXV0aG9yIENhcmxvcyBBbGJvcm5velxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0U2lnZWNvZkJhbmtzKCk6IE9ic2VydmFibGU8SVJlc3BvbnNlPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zaWdlc3AvYmFuY29fc2lnZWNvZl9kYW8ucGhwYCwgXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1TaWdlY29mQmFuayhlKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYSBjb25maWd1cmFjaW9uIGRlIFNPQ1xyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPElSZXNwb25zZT5cclxuICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRDb25maWdTT0MoKTogT2JzZXJ2YWJsZTxJUmVzcG9uc2U+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3NvYy9jb25maWd1cmFjaW9uX2Rhby5waHBgLCBcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSBuZXcgTUNvbmZpZ1NPQyhyZXMuZGF0YSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsb3MgdGlwb3MgZGUgZGVkdWNjaW9uXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQGF1dGhvciBDYXJsb3MgQWxib3Jub3pcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldERlZHVjdGlvblR5cGVzKCk6IE9ic2VydmFibGU8SVJlc3BvbnNlPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zdGIvdGlwb19kZWR1Y2Npb25fZGFvLnBocGAsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1EZWR1Y3Rpb25UeXBlKGUpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0SW5jb21lQWNjb3VudHMob25seUF2YWlsYWJsZTogYm9vbGVhbiA9IGZhbHNlKTogT2JzZXJ2YWJsZTxhbnk+e1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLlVSTH0vZGFvL3NwaS9jdWVudGFzX2luZ3Jlc29zX2Rhby5waHAke1xyXG4gICAgICAgIG9ubHlBdmFpbGFibGUgPyAnP2F2YWlsYWJsZT10cnVlJyA6ICcnXHJcbiAgICAgIH1gLCB7aGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpfSkucGlwZShcclxuICAgICAgICBtYXAoKHJlczphbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNQ3VlbnRhSW5ncmVzb3MoZSkpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0Q2hhcmdlcygpe1xyXG5cclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihcclxuICAgICAgICBgJHt0aGlzLlVSTH0vZGFvL3N0Yi9jYXJnb3NfZGFvLnBocGAsIFxyXG4gICAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH1cclxuICAgICAgKS5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzOiBJUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNQ2FyZ28oZSkpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgIClcclxuICBcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0RGVkdWN0aW9ucygpe1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KFxyXG4gICAgICAgIGAke3RoaXMuVVJMfS9kYW8vc3RiL2RlZHVjY2lvbmVzX2Rhby5waHBgLCBcclxuICAgICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9XHJcbiAgICAgICkucGlwZShcclxuICAgICAgICBtYXAoKHJlczogSVJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTURlZHVjdGlvbihlKSlcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKSAgXHJcbiAgICB9XHJcblxyXG4gICAgLyoqIFxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbGEgbG9zIGRhdG9zIGRlIEVtcHJlc2FcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxJUmVzcG9uc2U+XHJcbiAgICAgKiBAYXV0aG9yIERpbWFseSBDcmVzcG9cclxuICAgICAqIFxyXG4gICAgICovXHJcbiAgICAgcHVibGljIGdldENvbXBhbnkodGlwbz86c3RyaW5nLGlkPzpudW1iZXIpOiBPYnNlcnZhYmxlPElSZXNwb25zZT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vY2ZnL2VtcHJlc2FzX2Rhby5waHA/dGlwbz0ke3RpcG99JmlkPSR7aWR9YCxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZSggICAgICAgIFxyXG4gICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNRW1wcmVzYShlKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgIC8qKiBcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxvcyB0aXBvcyBkZSBkb2N1bWVudG9zIHJlZ2lzdHJhZG9zIGVuIENYUFxyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPElSZXNwb25zZT5cclxuICAgICAqIEBhdXRob3IgRGltYWx5IENyZXNwb1xyXG4gICAgICogQGRhdGUgMjAtMDctMjAyMVxyXG4gICAgICovXHJcbiAgICAgIHB1YmxpYyBnZXRUaXBvc0RvY3VtZXRvcygpOiBPYnNlcnZhYmxlPElSZXNwb25zZT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9jeHAvdGlwb19kb2N1bWVudG9fZGFvLnBocD9vcGVyYWNpb249JHsnYnVzY2FyJ30mZXhpc3Rlbj0keydleGlzdGVuJ31gLFxyXG4gICAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHsgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1UaXBvRG9jdW1lbnRvQ1hQKGUpKTsgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgLyoqXHJcbiAgICAgICogQHBhcmFtIGdldCB0b21hIGxvcyB2YWxvcmVzOiBbIGlkT3JkZW5Db21wcmEgLCdyZWNlcGNpb24nLCdleGlzdGVuJywnY29kaWdvJywgJ29yZGVuZXNTT0MnLCAnb3AnLCAnYXJ0JyBdXHJcbiAgICAgICogQHBhcmFtIG4gY29kaWdvIERvY3VtZW50byBPcmRlbiwgc2UgdXNhIHBhcmEgb2J0ZW5lciBsb3MgZGV0YWxsZXMgZGUgbGEgb3JkZW4gZGUgY29tcHJhLCBlcyBvYmxpZ2F0b3JpbyBhbCBjb21iaW5hciBjb24gbGEgb3BjaW9uIGdldDogaWRPcmRlbkNvbXByYVxyXG4gICAgICAqIEBkZXNjcmlwdGlvbiAncmVjZXBjaW9uJzogT2J0aW5lIGxhcyBvcmRlbmVzIGRlIHN1bWluaXN0cm8sXHJcbiAgICAgICogZXhpc3RlIHkgY29kaWdvOiBPYnRpZW5lIGxvcyBjb2RpZ29zIHJlZ2lzdHJhZG9zLCBcclxuICAgICAgKiBvcmRlbmVzU09DOiBvYnRpZW5lIGxhcyBvcmRlbmVzIGRlIGNvbXByYSxcclxuICAgICAgKiBvcDogb2J0aWVuZSBsYXMgb3JkZW5lcyBwZW5kaWVudGVzXHJcbiAgICAgICogYXJ0OiBvYnRpZW5lIGxvcyBhcnRpY3Vsb3MgXHJcbiAgICAgICogQHJldHVybiBPYnNlcnZhYmxlPElSZXNwb25zZT5cclxuICAgICAgKiBAZGF0ZSAzLTEwLTIwMjFcclxuICAgICAgKiBAcmV0dXJucyBcclxuICAgICAgKi9cclxuICAgICAgIHB1YmxpYyBnZXRFbnRyYWRhU3VtaW5pc3Ryb3MoZ2V0OmFueSwgbj86c3RyaW5nKTogT2JzZXJ2YWJsZTxJUmVzcG9uc2U+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vc2l2L2VudHJhZGFfc3VtaW5pc3Ryb19kYW8ucGhwP2dldD0ke2dldH0mbj0ke259YCxcclxuICAgICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTUVudHJhZGFTdW1pbmlzdHJvcyhlKSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAvKiogXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsb3MgdGlwb3MgZGUgZG9jdW1lbnRvcyByZWdpc3RyYWRvcyBlbiBDWFBcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxJUmVzcG9uc2U+XHJcbiAgICAgKiBAYXV0aG9yIERpbWFseSBDcmVzcG9cclxuICAgICAqIEBkYXRlIDIwLTA3LTIwMjFcclxuICAgICAqL1xyXG5cclxuICAgICAgcHVibGljIGdldENvbmNlcHRvc0N4UCgpe1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9jeHAvY29uY2VwdG9fZGFvLnBocD9vcGVyYWNpb249JHsnYnVzY2FyJ31gLFxyXG4gICAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHsgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1Db25jZXB0b3NDWFAoZSkpOyAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgIC8qKiBcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxvcyBsb3MgY29uY2VwdG9zIFJldGVuY2lvbiBJU1JMXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQGF1dGhvciBEaW1hbHkgQ3Jlc3BvXHJcbiAgICAgKiBAZGF0ZSAyNi0wNy0yMDIxXHJcbiAgICAgKi9cclxuXHJcbiAgICAgICAgcHVibGljIGdldENvbmNlcHRvc1JldGVuY2lvbigpe1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3N0Yi9kZWR1Y2Npb25lc19kYW8ucGhwP2NvZGU9JHsnY29uY2VwdG9zJ31gLFxyXG4gICAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1Db25jZXB0b1JldGVuY2lvbihlKSk7ICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAvKiogXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYSBjb25maWd1cmFjacOzbiBkZSBSUkhIIHkgZGUgU05PXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQGF1dGhvciBEaW1hbHkgQ3Jlc3BvXHJcbiAgICAgKi9cclxuICAgICAgcHVibGljIG9idGVuZXJDb25maWd1cmFjaW9uU05PKCl7XHJcbiAgICAgIFxyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zbm8vY29uZmlndXJhY2lvbl9kYW8ucGhwP3RpcG89JHsnY29uZmlndXJhY2lvbid9YCxcclxuICAgICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7IFxyXG4gICAgICAgICAgICAgICAgaWYgKHJlcy5kYXRhLmxlbmd0aD4wKXtcclxuICAgICAgICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTUNvbmZpZ3VyYWNpb25TTk8oZSkpOyAgXHJcbiAgICAgICAgICAgICAgICB9ICAgICAgICBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICAgICAgXHJcbiAgICAgIH1cclxuXHJcbiAgICAgLyoqXHJcbiAgICAgICogXHJcbiAgICAgICogQHBhcmFtIHRpcG8gWydkZWZhdWx0JywgJ3VubycsICdjYXJnb3MnLCdsaW5lYSddIGRhZmF1bHQ6VG9kYXMgbGFzIG5vbWluYXMsIHVubzogdW5hIG5vbWluYSwgXHJcbiAgICAgICogICAnY2FyZ29zJzogbm9taW5hcyBwb3IgY2FyZ29zLCAnbGluZWEnOiBub21pbmFzIGFjdGl2YXMgcG9yIGxpbmVhc1xyXG4gICAgICAqIEBwYXJhbSBpZCA6IFBhcmEgbG9zIHRpcG86IHVubyB5IGNhcmdvcyBlbCBpZCBlcyBpZE5vbWluYS4gUGFyYSBsaW5lYTogaWQgZXMgZWwgaWRFbnRlcnByaXNlXHJcbiAgICAgICogQHJldHVybnMgYXJyYXkoKSAgICAgIFxyXG4gICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhcyBub21pbmFzIHJlZ2lzdHJhZGFzXHJcbiAgICAgICogQHJldHVybiBPYnNlcnZhYmxlPElSZXNwb25zZT5cclxuICAgICAgKiBAZGF0ZSAyMC0xMC0yMVxyXG4gICAgICAqIEBhY3R1YWxpemFkbyAyNi0wNS0yMDI0XHJcbiAgICAgICpcclxuICAgICAqLyAgICAgXHJcblxyXG4gICAgICAgcHVibGljIGdldE5vbWluYSh0aXBvOnN0cmluZyxpZD86bnVtYmVyLGFjdD86bnVtYmVyKXtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vc25vL2RlZmluaWNpb25fbm9taW5hX2Rhby5waHA/dGlwbz0ke3RpcG99JmlkPSR7aWR9YCxcclxuICAgICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKCAgICAgICAgIFxyXG4gICAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHsgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1EZWZpbmljaW9uTm9taW5hKGUpKTsgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuXHJcbiAgIC8qKlxyXG4gICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsb3MgY2FyZ29zIGRlIGxhcyBub21pbmFcclxuICAgICogQHBhcmFtIHRpcG8gWydjb2RpZ28nLCdkZWZhdWx0J10gLT5jb2RpZ286IG9idGllbmUgZWwgcHJveGltbyBjb2RpZ28uIC0+ZGVmYXVsdDogb2J0aWVuZSB0b2RvcyBsb3MgY2FyZ29zIGRlIGxhIG5vbWluYVxyXG4gICAgKiBAcGFyYW0gaWQgaWQgZGUgbGEgbm9taW5hXHJcbiAgICAqIEByZXR1cm5zIGFycmF5KClcclxuICAgICovXHJcbiAgICAgIHB1YmxpYyBnZXRDYXJnb3NOb21pbmEodGlwbzpzdHJpbmcsaWQ/Om51bWJlcil7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3Nuby9hc2lnbmFjaW9uX2Nhcmdvc19kYW8ucGhwP3RpcG89JHt0aXBvfSZpZD0ke2lkfWAsXHJcbiAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXMuc3VjY2VzcykgeyAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTUFzaWduYWNpb25DYXJnbyhlKSk7ICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICB9ICBcclxuICAgICAgXHJcbiAgICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgdW4gcGVyc29uYWwgZGUgbGEgbsOzbWluYVxyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPElSZXNwb25zZT5cclxuICAgICAqIEBhdXRob3IgRGltYWx5IENyZXNwb1xyXG4gICAgICovXHJcbiAgICAgICBwdWJsaWMgZ2V0UGVyc29uYWxTUkgodGlwbzpzdHJpbmcsaWQ/Om51bWJlcil7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3Nuby9wZXJzb25hbF9kYW8ucGhwP3RpcG89JHt0aXBvfSZpZD0ke2lkfWAsXHJcbiAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXMuc3VjY2VzcykgeyAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTVBlcnNvbmFsKGUpKTsgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0gXHJcblxyXG4gICAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhcyBhZ2VuY2lhIGRlIGJhbmNvXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQGF1dGhvciBEaW1hbHkgQ3Jlc3BvXHJcbiAgICAgKi9cclxuICAgICAgIHB1YmxpYyBnZXRBZ2VuY2lhQmFuY28odGlwbzpzdHJpbmcsaWQ/Om51bWJlcil7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3NjYi9hZ2VuY2lhX2Rhby5waHA/Y29kZT0ke3RpcG99JmlkPSR7aWR9YCxcclxuICAgICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNQWdlbmNpYUJhbmNvKGUpKTsgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0gXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYSBob2phcyBkZSB0aWVtcG9cclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxJUmVzcG9uc2U+XHJcbiAgICAgKiBAYXV0aG9yIERpbWFseSBDcmVzcG9cclxuICAgICAqL1xyXG4gICAgICAgICAgIHB1YmxpYyBnZXRIb2phVGllbXBvKHRpcG86c3RyaW5nLGlkUGVyc29uYWw/Om51bWJlcixpZE5vbWluYT86bnVtYmVyKXtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3Nuby9ob2phX3RpZW1wb19kYW8ucGhwP2lkUGVyc29uYWw9JHtpZFBlcnNvbmFsfSZpZE5vbWluYT0ke2lkTm9taW5hfWAsXHJcbiAgICAgICAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTUhvamFUaWVtcG8oZSkpOyAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9ICAgICAgICAgXHJcbiAgICAgICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsb3MgY2xpZW50ZXMgXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQGF1dGhvciBEaW1hbHkgQ3Jlc3BvXHJcbiAgICAgKiBAdGlwbyBbYmFzaWNvLGNvZGlnbyxjZWR1bGFdXHJcbiAgICAgKiBcclxuICAgICAqL1xyXG5cclxuICAgIHB1YmxpYyBnZXRDbGllbnRlKHRpcG86IHN0cmluZyA9J2RlZmF1bHQnLCBpZDpudW1iZXI9MCwgY29kaWdvOnN0cmluZz0nJywgY2VkdWxhOnN0cmluZz0nJyk6IE9ic2VydmFibGU8SVJlc3BvbnNlPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zZnYvY2xpZW50X2Rhby5waHA/dGlwbz0ke3RpcG99JmlkPSR7aWR9JmNvZGlnbz0ke2NvZGlnb30mY2VkcmlmY2xpPSR7Y2VkdWxhfWAsIFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKCAgICAgICBcclxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTUNsaWVudChlKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gVmFsaWRhIHNpIGxhIGZlY2hhIGVzdGEgZGVudHJvIGRlbCBwZXJpb2RvIGZpc2NhbCB5IGVsIG1lcyBlc3RhIGFiaWVydG8gbyBjZXJyYWRvXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQGF1dGhvciBEaW1hbHkgQ3Jlc3BvXHJcbiAgICAgKiBAYXV0aG9yIDExLTEwLTIwMjNcclxuICAgICAqL1xyXG4gICAgICAgcHVibGljIGdldFZhbGlkYXJQZXJpb2RvKGZlY2hhOnN0cmluZywgcGVyaW9kb0Zpc2NhbDpzdHJpbmcpe1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zY2cvY29uZmlndXJhY2lvbl9jb250YWJpbGlkYWRfZGFvLnBocD9mZWNoYT0ke2ZlY2hhfSZwZXJpb2RvPSR7cGVyaW9kb0Zpc2NhbH1gLFxyXG4gICAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUobWFwKChyZXM6IGFueSkgPT4geyByZXR1cm4gcmVzO30pKTtcclxuICAgICAgfSBcclxuICAgICAgXHJcblxyXG4gICAgXHJcbiAgXHJcblxyXG5cclxuICAgIHB1YmxpYyB1c2VySGFzUmlnaHRzKGNvbHVtbjonYWRtaW5pc3RyYWRvcicgfCAnaW5zZXJ0YXInIHwgJ2FjdHVhbGl6YXInIHwgJ2NvbnN1bHRhcicgXHJcbiAgICB8ICdlbGltaW5hcicgfCAnYW51bGFyJyB8J2Rlc2NhcmdhcicgfCAnZWplY3V0YXJfX3Byb2Nlc2FyXycgfCAnaW1wcmltaXInIFxyXG4gICAgfCAnZW52aWFyX19jb3JyZW9fJyB8ICd2aXNpYmxlJyl7XHJcblxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KFxyXG4gICAgICAgIGAke3RoaXMuVVJMfS9kYW8vc3NzL2RlcmVjaG9zX3VzdWFyaW9fZGFvLnBocD9pZENvbXBvbmVudD0ke1xyXG4gICAgICAgICAgdGhpcy5jdXJyZW50Q29tcG9uZW50LmlkXHJcbiAgICAgICAgfSZjb2x1bW49JHtjb2x1bW59YCwgXHJcbiAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfVxyXG4gICAgICApXHJcblxyXG4gICAgfVxyXG5cclxuICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0b3JuYSBsb3MgaGVhZGVycyBwYXJhIGhhY2VyIGxhcyBwZXRpY2lvbmVzXHJcbiAgICAgKiBAcGFyYW1zIHR5cGU6IFRpcG8gTUlNRSBwZXJtaXRpZG8gcG9yIGRlZmVjdG8gc2UgdG9tYSBhcHBsaWNhdGlvbi9qc29uXHJcbiAgICAgKiBAcmV0dXJuIEh0dHBIZWFkZXJzXHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICogQGRhdGUtdXBkYXRlOiAxNS0wNi0yMDIyIFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0SHR0cEhlYWRlcnModHlwZT86c3RyaW5nKTogSHR0cEhlYWRlcnMgeyBcclxuICAgICAgIXR5cGU/IHR5cGU9J2FwcGxpY2F0aW9uL2pzb24nOicnOyAgICAgIFxyXG4gICAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHtcclxuICAgICAgICAnQ29udGVudC1UeXBlJzogdHlwZSxcclxuICAgICAgICAnQXV0aG9yaXphdGlvbic6IGAke3RoaXMudXN1YXJpb0FjdGl2by50b2tlbn1gXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gaGVhZGVycztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGVsIHNlcnZpZG9yIGd1YXJkYWRvIGVuIGVsIHNlc3Npb25TdG9yYWdlXHJcbiAgICAgKiBAcmV0dXJuIHN0cmluZ1xyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldFNlcnZlcigpOiBzdHJpbmcge1xyXG4gICAgICByZXR1cm4gdGhpcy5VUkw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBlbCB1c3VhcmlvIGd1YXJkYWRvIGVuIGVsIHNlc3Npb25TdG9yYWdlXHJcbiAgICAgKiBAcmV0dXJuIE1Vc3VhcmlvXHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYXN5bmMgZ2V0VXNlcigpIHtcclxuICAgICAgbGV0IGNvbmV4aW9uOiBJQ29uZXhpb24gPSBhd2FpdCAoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgndXNlcicpKSA/IEpTT04ucGFyc2UoYXRvYihzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCd1c2VyJykpKSA6IG51bGw7XHJcbiAgICAgIC8vY29uc29sZS5sb2coY29uZXhpb24pXHJcbiAgICAgIC8vIGRlYnVnZ2VyXHJcbiAgICAgIGlmIChjb25leGlvbikge1xyXG4gICAgICAgIHRoaXMudXN1YXJpb0FjdGl2byA9IG5ldyBNVXN1YXJpbyhjb25leGlvbi51c3VhcmlvKTtcclxuICAgICAgICB0aGlzLlVSTCA9IGNvbmV4aW9uLnNlcnZpZG9yO1xyXG4gICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE11ZXN0cmEgdW4gdG9hc3QgZGUgc3VjY2Vzc1xyXG4gICAgICogQHBhcmFtIG1lc3NhZ2UgTWVuc2FqZSBxdWUgc2UgdmEgYSBtb3N0cmFyXHJcbiAgICAgKiBAcmV0dXJuIHZvaWRcclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzaG93VG9hc3RTdWNjZXNzKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICB0aGlzLnRvYXN0LnN1Y2Nlc3MobWVzc2FnZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gTXVlc3RyYSB1biB0b2FzdCBkZSBlcnJvclxyXG4gICAgICogQHBhcmFtIG1lc3NhZ2UgTWVuc2FqZSBxdWUgc2UgdmEgYSBtb3N0cmFyXHJcbiAgICAgKiBAcmV0dXJuIHZvaWRcclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzaG93VG9hc3RFcnJvcihtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgdGhpcy50b2FzdC5lcnJvcihtZXNzYWdlKTtcclxuICAgIH1cclxuXHJcbiAgICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE11ZXN0cmEgdW4gc3dlZXRhbGVydDIgZGUgw6l4aXRvXHJcbiAgICAgKiBAcGFyYW0gbWVzc2FnZSBNZW5zYWplIHF1ZSBzZSB2YSBhIG1vc3RyYXJcclxuICAgICAqIEByZXR1cm4gdm9pZFxyXG4gICAgICogQGRhdGUgMjItMTEtMjAyMVxyXG4gICAgICovXHJcbiAgICAgICBwdWJsaWMgc2hvd1RvYXN0U3VjY2Vzc1N3YWwobWVzc2FnZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgU3dhbC5maXJlKHtcclxuICAgICAgICAgIGljb246ICdzdWNjZXNzJyxcclxuICAgICAgICAgIHRpdGxlOiAnw4l4aXRvJyxcclxuICAgICAgICAgIHRleHQ6IG1lc3NhZ2UsICBcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcblxyXG4gICAgICBcclxuXHJcbiAgICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gTXVlc3RyYSB1biBzd2VldGFsZXJ0MiBkZSBlcnJvclxyXG4gICAgICogQHBhcmFtIG1lc3NhZ2UgTWVuc2FqZSBxdWUgc2UgdmEgYSBtb3N0cmFyXHJcbiAgICAgKiBAcmV0dXJuIHZvaWRcclxuICAgICAqIEBkYXRlIDIyLTExLTIwMjFcclxuICAgICAqL1xyXG4gICAgcHVibGljIHNob3dUb2FzdEVycm9yU3dhbChtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgU3dhbC5maXJlKHtcclxuICAgICAgICBpY29uOiAnZXJyb3InLFxyXG4gICAgICAgIHRpdGxlOiAnwqFFcnJvciEnLFxyXG4gICAgICAgIHRleHQ6IG1lc3NhZ2UsICBcclxuICAgICAgICAgICAgIFxyXG4gICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEd1YXJkYSBlbCB1c3VhcmlvIGxvZ3VlYWRvIGVuIGVsIFNlc3Npb25TdG9yYWdlXHJcbiAgICAgKiBAcGFyYW0gdXNlciBVc3VhcmlvIHF1ZSBzZSB2YSBhIGd1YXJkYXIgZW4gZWwgU2Vzc2lvblN0b3JhZ2VcclxuICAgICAqIEByZXR1cm4gdm9pZFxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIHNhdmVVc2VyKGRhdGE6IElDb25leGlvbik6IHZvaWQge1xyXG4gICAgICB0aGlzLnVzdWFyaW9BY3Rpdm8gPSBuZXcgTVVzdWFyaW8oZGF0YS51c3VhcmlvKTtcclxuICAgICAgdGhpcy5VUkwgPSBkYXRhLnNlcnZpZG9yO1xyXG4gICAgICBsZXQgZW5jcnlwdGVkVXNlcjogc3RyaW5nID0gYnRvYShKU09OLnN0cmluZ2lmeShkYXRhKSk7XHJcbiAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ3VzZXInLCBlbmNyeXB0ZWRVc2VyKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBTZXRlIGEgbGEgdXJsIGEgbGEgY3VhbCBzZSBsZSB2YW4gYSByZWFsaXphciBwZXRpY2lvbmVzIGFsIGJhY2tFbmRcclxuICAgICAqIEBwYXJhbSB1cmwgVVJsIGRvbmRlIHNlIHZhbiBhIHJlYWxpemFyIGxhcyBwZXRpY2lvbmVzXHJcbiAgICAgKiBAcmV0dXJuIHZvaWRcclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzZXRVcmwodXJsOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgdGhpcy5VUkwgPSB1cmw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gSW5pY2lhbGl6YSBlbCBzZXJ2aWNpbyBkZSBzaWdlc3BcclxuICAgICAqIEByZXR1cm4gdm9pZFxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGluaXQoKTogdm9pZCB7XHJcbiAgICAgIC8vIFZlcmlmaWNhbW9zIHNpIGhheSB1biB1c3VhcmlvIGVuIGxhIHNlc3Npb25TdG9yYWdlLCBlc3RvIGVzIG5lY2VzYXJpbyBwYXJhIHJlY2FyZ2FyIGxhIHDDoWdpbmFcclxuICAgICAgaWYgKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ3VzZXInKSkge1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ3VzZXInKSlcclxuICAgICAgICB0aGlzLmdldFVzZXIoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFZlcmlmaWNhIHNpIHVuIHVzdWFyaW8gZXN0w6EgbG9ndWVhZG9cclxuICAgICAqIEByZXR1cm4gUHJvbWlzZTxib29sZWFuPlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGFzeW5jIGlzTG9nZ2VkKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgIGlmIChzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCd1c2VyJykpIHtcclxuICAgICAgICAgIHJlc29sdmUodHJ1ZSlcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmVzb2x2ZShmYWxzZSlcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBoYW5kbGVyRXJyb3IoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKTogYW55IHtcclxuICAgICAgcmV0dXJuIHRocm93RXJyb3IoJ09jdXJyacOzIHVuIGVycm9yJylcclxuICAgIH1cclxuXHJcbiAgICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIG9idGllbmUgZWwgcGVyc29uYWwgc2VndW4gZmlsdHJvXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQGRhdGUgMTUtMTEtMjAyMVxyXG4gICAgICogQHBhcmFtIHRpcG86IHZhbG9yZXMgWydjYXRhbG9nbycsJ2NhdGFsb2dvU25vJywnZGVmYXVsdCcsJ25vbWluYScsJ3Jlc3BvbnNhYmxlcyddXHJcbiAgICAgKiBAcGFyYW1zIGRhdG86b2JqZWN0IHtub21icmU6c3RyaW5nLCBhcGVsbGlkbzpzdHJpbmcsIGNlZHVsYS5zdHJpbmd9IHVzZSBwYXJhIGxhIG9wY2lvbiAnY2F0YWxvZ28nIG8gJ2NhdGFsb2dvU25vJ1xyXG4gICAgICovXHJcbiAgICAgICBwdWJsaWMgZ2V0UGVyc29uYWwodGlwbzpzdHJpbmcsIGRhdG8/OmFueSl7XHJcbiAgICAgICAgICBsZXQgY2VkdWxhPScnO1xyXG4gICAgICAgICAgbGV0IG5vbWJyZT0nJztcclxuICAgICAgICAgIGxldCBhcGVsbGlkbz0nJztcclxuICAgICAgICAgIGxldCBpZEVudGVycHJpc2U9MDtcclxuICAgICAgICBpZihkYXRvKXtcclxuICAgICAgICAgIGNlZHVsYT1kYXRvLmNlZHVsYVxyXG4gICAgICAgICAgbm9tYnJlPWRhdG8ubm9tYnJlXHJcbiAgICAgICAgICBhcGVsbGlkbz1kYXRvLmFwZWxsaWRvXHJcbiAgICAgICAgICBpZEVudGVycHJpc2U9ZGF0by5pZEVudGVycHJpc2VcclxuICAgICAgICB9ICAgICAgICBcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vc25vL3BlcnNvbmFsX2Rhby5waHA/dGlwbz0ke3RpcG99JmNlZHVsYT0ke2NlZHVsYX0mbm9tYnJlPSR7bm9tYnJlfSZhcGVsbGlkbz0ke2FwZWxsaWRvfSZlPSR7aWRFbnRlcnByaXNlfWAsXHJcbiAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXMuc3VjY2VzcykgeyAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTVBlcnNvbmFsKGUpKTsgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0gXHJcblxyXG4gICAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBvYnRlbmVyIHBlcnNvbmFsIE5vbWluYSBzZWd1biBmaWx0cm9cclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxJUmVzcG9uc2U+XHJcbiAgICAgKiBAZGF0ZSAxNS0xMS0yMDIxXHJcbiAgICAgKiAqIEBwYXJhbSB0aXBvOiB2YWxvcmVzIFsnY2F0YWxvZ28nLCdkZWZhdWx0Jywnbm9taW5hJ11cclxuICAgICAqIEBwYXJhbXMgZGF0bzpvYmplY3Qge25vbWJyZTpzdHJpbmcsIGFwZWxsaWRvOnN0cmluZywgY2VkdWxhLnN0cmluZ30gdXNlIHBhcmEgbGEgb3BjaW9uICdjYXRhbG9nbydcclxuXHJcbiAgICAgKi9cclxuICAgICAgICBwdWJsaWMgZ2V0UGVyc29uYWxOb21pbmEodGlwbzpzdHJpbmcsZGF0bz86YW55KXtcclxuICAgICAgICAgIGxldCBjZWR1bGE9Jyc7XHJcbiAgICAgICAgICBsZXQgbm9tYnJlPScnO1xyXG4gICAgICAgICAgbGV0IGFwZWxsaWRvPScnO1xyXG4gICAgICAgICAgbGV0IGlkRW50ZXJwcmlzZT0wO1xyXG4gICAgICAgICAgbGV0IGlkTm9taW5hPTA7XHJcbiAgICAgICAgaWYoZGF0byl7XHJcbiAgICAgICAgICBjZWR1bGE9ZGF0by5jZWR1bGFcclxuICAgICAgICAgIG5vbWJyZT1kYXRvLm5vbWJyZVxyXG4gICAgICAgICAgYXBlbGxpZG89ZGF0by5hcGVsbGlkb1xyXG4gICAgICAgICAgaWRFbnRlcnByaXNlPWRhdG8uaWRFbnRlcnByaXNlXHJcbiAgICAgICAgICBpZE5vbWluYT1kYXRvLmlkTm9taW5hXHJcbiAgICAgICAgfSAgICAgICAgXHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vc25vL2FzaWduYWNpb25fcGVyc29uYWxfbm9taW5hX2Rhby5waHA/XHJcbiAgICAgICAgICB0aXBvPSR7dGlwb30mY2VkdWxhPSR7Y2VkdWxhfSZub21icmU9JHtub21icmV9JmFwZWxsaWRvPSR7YXBlbGxpZG99JmlkTm9taW5hPSR7aWROb21pbmF9JmlkRW50ZXJwcmlzZT0ke2lkRW50ZXJwcmlzZX1gLFxyXG4gICAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZSggICAgICAgICAgIFxyXG4gICAgICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1QZXJzb25hbE5vbWluYShlKSk7ICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogQHBhcmFtIGlkUGVyc29uYWw6IGlkIGRlbCBwZXJzb25hbFxyXG4gICAqIEBwYXJhbSB0aXBvOiB2YWxvcmVzWydub21pbmFfcGVyc29uYWwnXSBcclxuICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYXMgbm9taW5hcyBkZWwgcGVyc29uYWwgcmVzdW1pZGFcclxuICAgKiBAZGVwcmVjYXRlZDsgMjAtMDEtMjJcclxuICAgKiBAcmV0dXJucyBcclxuICAgKi9cclxuICBcclxuICBwdWJsaWMgZ2V0UGVyc29uYWxOb21pbmFSZXN1bWlkYShpZFBlcnNvbmFsOm51bWJlcix0aXBvOnN0cmluZyl7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zbm8vcGVyc29uYWxfZGFvLnBocD9pZFBlcnNvbmFsPSR7aWRQZXJzb25hbH0mdGlwbz0ke3RpcG99YCxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZSggICAgICAgXHJcbiAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTU5vbWluYVNpbXBsZShlKSk7ICAgICAgICAgICAgICBcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gICAgICAgLyoqXHJcbiAgICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGVsIEpzb24gU2lzdGVtYXMgcGFyYSBlbCB1c3VhcmlvIGRlZmluaWRvIHNlZ3VuIHN1IHBlcm1pc29sb2dpYSBkZWwgU2lzdGVtYVxyXG4gICAgICAgKiBAcmV0dXJuIEpzb24gZGF0YVxyXG4gICAgICAgKiBAYXV0aG9yIEluZy4gRGltYWx5IENyZXNwb1xyXG4gICAgICAgKi9cclxuICAgICAgIHB1YmxpYyBnZXRQZXJmaWxTaXN0ZW1hKGlkX3VzdWFyaW86bnVtYmVyICl7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5VUkx9L2Rhby9zc3MvdXN1YXJpb3Nfc2lzdGVtYXNfZGFvLnBocD9pZF91c3VhcmlvPSR7aWRfdXN1YXJpb31gLFxyXG4gICAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoICAgICAgICAgIFxyXG4gICAgICAgICAgbWFwKChyZXM6IGFueSkgPT4geyBcclxuICAgICAgICAgICAgaWYocmVzLmRhdGEubGVuZ3RoPjApe1xyXG4gICAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1Vc3VhcmlvU2lzdGVtYShlKSk7ICBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmVzOyAgICAgXHJcbiAgICAgICAgICAgfSlcclxuICAgICAgICAgIFxyXG4gICAgICAgICk7XHJcbiAgICAgIFxyXG4gICB9XHJcblxyXG4gIFxyXG4gICAgICAgLyoqXHJcbiAgICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGVsIEpzb24gTWVudSBwYXJhIGVsIHVzdWFyaW8gZGVmaW5pZG8gc2VndW4gc3UgcGVybWlzb2xvZ2lhIGRlbCBTaXN0ZW1hXHJcbiAgICAgICAqIEByZXR1cm4gSnNvbiBkYXRhXHJcbiAgICAgICAqIEBhdXRob3IgSW5nLiBXaWxtZXIgQnJpY2Vub1xyXG4gICAgICAgKi9cclxuICAgICAgICAgIHB1YmxpYyBnZXRQZXJmaWxOb0NvbXBvbmVudChpZF91c3VhcmlvOm51bWJlcixzaXN0ZW1hOnN0cmluZywgbmFtZUNvbXBvbmVudDogc3RyaW5nICl7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuVVJMfS9kYW8vc3NzL2RlcmVjaG9zX3VzdWFyaW9fZGFvLnBocD9pZF91c3VhcmlvPSR7aWRfdXN1YXJpb30mc2lzdGVtYT0ke3Npc3RlbWF9Jm5hbWVjb21wb25lbnQ9JHtuYW1lQ29tcG9uZW50fWAsXHJcbiAgICAgICAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoICAgICAgICAgIFxyXG4gICAgICAgICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHsgXHJcbiAgICAgICAgICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIFxyXG4gICAgICAgfVxyXG4gIFxyXG4gICAgICAgLyoqXHJcbiAgICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGVsIEpzb24gTWVudSBwYXJhIGVsIHVzdWFyaW8gZGVmaW5pZG8gc2VndW4gc3UgcGVybWlzb2xvZ2lhIGRlbCBTaXN0ZW1hXHJcbiAgICAgICAqIEByZXR1cm4gSnNvbiBkYXRhXHJcbiAgICAgICAqIEBhdXRob3IgSW5nLiBXaWxtZXIgQnJpY2Vub1xyXG4gICAgICAgKi9cclxuICAgICAgICBwdWJsaWMgZ2V0SnNvbk1lbnUoaWRfdXN1YXJpbzpudW1iZXIsc2lzdGVtYTpzdHJpbmcpe1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5VUkx9L2Rhby9zc3MvbWVudV9kYW8ucGhwP2lkX3VzdWFyaW89JHtpZF91c3VhcmlvfSZzaXN0ZW1hPSR7c2lzdGVtYX1gLFxyXG4gICAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZSggICAgICAgICAgXHJcbiAgICAgICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHsgXHJcbiAgICAgICAgICAgICAgIHRoaXMudXNlck1lbnUgPSByZXMuZGF0YTtcclxuICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudXNlck1lbnU7XHJcbiAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICAvKipcclxuICAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBlbCBKc29uIE1lbnUgcGFyYSBlbCB1c3VhcmlvIGRlZmluaWRvIHNlZ3VuIHN1IHBlcm1pc29sb2dpYSBkZWwgU2lzdGVtYVxyXG4gICAgICAqIEByZXR1cm4gSnNvbiBkYXRhXHJcbiAgICAgICogQGF1dGhvciBJbmcuIFdpbG1lciBCcmljZW5vXHJcbiAgICAgICovXHJcbiAgICAgIHB1YmxpYyBsb2coYm9keTogTUxvZyApeyAgXHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLlVSTH0vZGFvL3Nzcy9sb2dfZGFvLnBocGAsIGJvZHkgLCB7XHJcbiAgICAgICAgICAgICAgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpXHJcbiAgICAgICAgfSkucGlwZSggIFxyXG4gICAgICAgICAgbWFwKChyZXM6IGFueSkgPT4geyAgXHJcbiAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIClcclxuICAgIFxyXG4gICAgfVxyXG5cclxuICBcclxuICAgICAgICBcclxuICAgLyoqXHJcbiAgICAqIEBuYW1lIEVuY3J5cHREYXRhXHJcbiAgICAqIEBkZXNjcmlwdGlvbiBFbnNjcmlwdGEgdW5hIGV4cHJlc2lvbiBkYXRhXHJcbiAgICAqIEBhdXRob3IgSW5nLiBXaWxtZXIgQnJpY2XDsW9cclxuICAgICovXHJcbiAgICBwdWJsaWMgRW5jcnlwdERhdGEoIGV4cHJlc2lvbiA6IHN0cmluZyl7XHJcbiAgICAgICBjb25zdCBrZXkgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZSAoXCIwMTIzNDU2Nzg5U0lHRVNQXCIpOyAvLyBuw7ptZXJvIGhleGFkZWNpbWFsIGRlIDE2IGTDrWdpdG9zIGNvbW8gY2xhdmVcclxuICAgICAgIGNvbnN0IGl2ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UgKCdTSUdFU1AwMTIzNDU2Nzg5Jyk7IC8vIE7Dum1lcm8gaGV4YWRlY2ltYWwgY29tbyBkZXNwbGF6YW1pZW50byBkZSBjbGF2ZVxyXG4gICAgICAgbGV0IHNyY3MgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZShleHByZXNpb24pO1xyXG4gICAgICAgbGV0IGVuY3J5cHRlZCA9IENyeXB0b0pTLkFFUy5lbmNyeXB0KHNyY3MsIGtleSwgeyBpdjogaXYsIG1vZGU6IENyeXB0b0pTLm1vZGUuQ0JDLCBwYWRkaW5nOiBDcnlwdG9KUy5wYWQuUGtjczcgfSk7XHJcbiAgICAgICByZXR1cm4gZW5jcnlwdGVkLmNpcGhlcnRleHQudG9TdHJpbmcoKS50b1VwcGVyQ2FzZSgpO1xyXG4gICAgfVxyXG4gXHJcbiAgICAvKipcclxuICAgICogQG5hbWUgRGVjcnlwdERhdGFcclxuICAgICogQGRlc2NyaXB0aW9uIERlc2VuY3JpcHRhIHVuYSBleHByZXNpb24gZGF0YVxyXG4gICAgKiBAYXV0aG9yIEluZy4gV2lsbWVyIEJyaWNlw7FvXHJcbiAgICAqL1xyXG4gICAgcHVibGljIERlY3J5cHREYXRhKCBleHByZXNpb24gOiBzdHJpbmcpe1xyXG4gICAgICAgY29uc3Qga2V5ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UgKFwiMDEyMzQ1Njc4OVNJR0VTUFwiKTsgLy8gbsO6bWVybyBoZXhhZGVjaW1hbCBkZSAxNiBkw61naXRvcyBjb21vIGNsYXZlXHJcbiAgICAgICBjb25zdCBpdiA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlICgnU0lHRVNQMDEyMzQ1Njc4OScpOyAvLyBOw7ptZXJvIGhleGFkZWNpbWFsIGNvbW8gZGVzcGxhemFtaWVudG8gZGUgY2xhdmVcclxuICAgICAgIGxldCBlbmNyeXB0ZWRIZXhTdHIgPSBDcnlwdG9KUy5lbmMuSGV4LnBhcnNlKGV4cHJlc2lvbik7XHJcbiAgICAgICBsZXQgc3JjcyA9IENyeXB0b0pTLmVuYy5CYXNlNjQuc3RyaW5naWZ5KGVuY3J5cHRlZEhleFN0cik7XHJcbiAgICAgICBsZXQgZGVjcnlwdCA9IENyeXB0b0pTLkFFUy5kZWNyeXB0KHNyY3MsIGtleSwgeyBpdjogaXYsIG1vZGU6IENyeXB0b0pTLm1vZGUuQ0JDLCBwYWRkaW5nOiBDcnlwdG9KUy5wYWQuUGtjczcgfSk7XHJcbiAgICAgICBsZXQgZGVjcnlwdGVkU3RyID0gZGVjcnlwdC50b1N0cmluZyhDcnlwdG9KUy5lbmMuVXRmOCk7XHJcbiAgICAgICByZXR1cm4gZGVjcnlwdGVkU3RyLnRvU3RyaW5nKCk7XHJcbiAgICB9XHJcbiBcclxuIFxyXG4gICAgLyoqXHJcbiAgICAqIEBuYW1lIGdldFJlc3BvbnNlUGVyZmlsVG9vbGJhclxyXG4gICAgKiBAZGVzY3JpcHRpb24gTWV0b2RvIHF1ZSBvYnRpZW5lIHVuYSByZXNwdWVzdGEgdHJ1ZSBvIGZhbHNlIGJhc2FkbyBlbiB1bmEgZXN0cnVjdHVyYSBzcmluZyBiaW5hbnJpYSBzZWd1biBcclxuICAgICogICAgICAgICAgICAgIGxhIHBvc2ljaW9uIGRhZGEgZGVsIHRvb2xiYXIuIHNlIHBhc2Egc3RyaW5nIGJpbmFyaW8gcXVlIGNvbnRpZW5lIDEgeSAwIGVuIHJlcHJlc2VudGFjaW9uIFxyXG4gICAgKiAgICAgICAgICAgICAgZGUgbGFzIHByb3BpZXN0YWRlcyBhZG1pbmlzdHJhZG9yLGNvbnN1bHRhcixlamVjdXRhcixpbXByaW1pciBldGMgLi4uIGNhZGEgcG9zaWNpb24gc2VjdWVuY2lhbCBcclxuICAgICogICAgICAgICAgICAgIHNpIGVzdGEgZW4gMSBlcyB0cnVlIHkgMCBlbiBmYWxzZSB5IGRldnVsZXZlIGVsIHZhbG9yIHNlZ3VuIGxvIHJlcXVpZXJhIGVsIHVzdWFyaW86XHJcbiAgICAqICAgICAgICAgICAgICBzdHJpbmdiaW5hcmlvIDogJzEwMTEnIHkgcG9zaWNpb24gZXMgMiwgcG9yIHRhbnRvIHNlIHRhcmUgMCB5IGVzIGZhbHNlIHF1ZSByZXByZXNlbnRhIG9wY2lvbiBjb25zdWx0YXIuXHJcbiAgICAqICAgICAgICAgICAgICBFc3RydWN0dXJhIHN0cmluZyBiaW5hcmlvOlxyXG4gICAgKiAgICAgICAgICAgICAgUG9zaWNpw7NuIDpcclxuICAgICogICAgICAgICAgICAgIDAuICBBZG1pbmlzdHJhZG9yICAgICAgICA2LiAgRGVzY2FyZ2FyICAgICAgMTIuIFJldmVyc2FyIGFwcm9iYXIgICAgICAxOC4gUmV2ZXJzYXIgYW51bGFyIGNvbnRhYmlsaXphZG9cclxuICAgICogICAgICAgICAgICAgIDEuICBpbnNlcnRhciAgICAgICAgICAgICA3LiAgRWplY3V0YXIgICAgICAgMTMuIEFudWxhci5cclxuICAgICogICAgICAgICAgICAgIDIuICBBY3R1YWxpemFyICAgICAgICAgICA4LiAgRW52aWFyICAgICAgICAgMTQuIHJldmVyc2FyIGFudWxhclxyXG4gICAgKiAgICAgICAgICAgICAgMy4gIGNvbnN1bHRhciAgICAgICAgICAgIDkuIEltcHJpbWlyICAgICAgICAxNS4gY29udGFiaWxpemFyXHJcbiAgICAqICAgICAgICAgICAgICA0LiAgRWxpbWluYXIgICAgICAgICAgICAgMTAuIFZpc2libGUgICAgICAgIDE2LiByZXZlcnNhciBjb250YWJpbGl6YXJcclxuICAgICogICAgICAgICAgICAgIDUuICBBbnVsYXIgICAgICAgICAgICAgICAxMS4gQXByb2JhciAgICAgICAgMTcuIGFudWxhciBjb250YWJpbGl6YWRvICAgICAgIFxyXG4gICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgKiBAYXV0aG9yIEluZy4gV2lsbWVyIEJyaWNlw7FvXHJcbiAgICAqL1xyXG4gICAgIHB1YmxpYyBnZXRSZXNwb25zZVBlcmZpbFRvb2xiYXIoIHN0cmluZ2JpbmFyaW8gOiBzdHJpbmcsIHBvc2l0aW9uIDogbnVtYmVyICl7XHJcbiAgICAgICAgICBsZXQgYmluYXJpbyA9IHN0cmluZ2JpbmFyaW8uc3Vic3RyaW5nKHBvc2l0aW9uLHBvc2l0aW9uKzEpIDtcclxuICAgICAgICAgIGlmIChiaW5hcmlvPT1cIjFcIil7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7IFxyXG4gICAgICAgICAgfSAgIFxyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlOyBcclxuICAgICB9XHJcblxyXG4gLyoqXHJcbiAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGVsIElwIGRlbCBjbGllbnRlXHJcbiAgICAqIEByZXR1cm4gSnNvbiBkYXRhXHJcbiAgICAqIEBhdXRob3IgSW5nLiBXaWxtZXIgQnJpY2Vub1xyXG4gICAgKi9cclxuICBwdWJsaWMgZ2V0SVBBZGRyZXNzKCl7ICBcclxuXHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChcImh0dHA6Ly9hcGkuaXBpZnkub3JnLz9mb3JtYXQ9anNvblwiKSBcclxuICAgIC5waXBlKFxyXG4gICAgICBjYXRjaEVycm9yKChlcnIpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZygnZXJyb3IgY2F1Z2h0IGluIHNlcnZpY2UnKVxyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdpcF9hZHJlc3MnLCAnMTI3LjAuMC4xJyk7XHJcbiAgICAgICAgLy9IYW5kbGUgdGhlIGVycm9yIGhlcmVcclxuXHJcbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXJyKTsgICAgLy9SZXRocm93IGl0IGJhY2sgdG8gY29tcG9uZW50XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gICAgXHJcbiAgfVxyXG4gLyoqXHJcbiAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBlbCBJcCBkZWwgY2xpZW50ZVxyXG4gICogQHJldHVybiBKc29uIGRhdGFcclxuICAqIEBhdXRob3IgSW5nLiBXaWxtZXIgQnJpY2Vub1xyXG4gICovXHJcbiAgcHVibGljIHNldElwQWRyZXNzKCl7XHJcbiAgICB0aGlzLmdldElQQWRkcmVzcygpLnN1YnNjcmliZSggKHJlc3A6IGFueSkgICA9PiB7XHJcbiAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ2lwX2FkcmVzcycsIHJlc3AuaXApO1xyXG4gICAgICAgICB0aGlzLmlwX2FkcmVzcyA9IHJlc3AuaXA7XHJcbiAgICB9KTsgIFxyXG4gIH0gXHJcbiAvKipcclxuICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGVsIElwIGRlbCBjbGllbnRlXHJcbiAgKiBAcmV0dXJuIEpzb24gZGF0YVxyXG4gICogQGF1dGhvciBJbmcuIFdpbG1lciBCcmljZW5vXHJcbiAgKi9cclxuICBwdWJsaWMgZ2V0SXBBZHJlc3MoKXtcclxuICAgIHRoaXMuaXBfYWRyZXNzID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnaXBfYWRyZXNzJyk7ICBcclxuICB9IFxyXG5cclxuICAgLyoqXHJcbiAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBlbCBJcCBkZWwgY2xpZW50ZVxyXG4gICogQHJldHVybiBKc29uIGRhdGFcclxuICAqIEBkaWEgMTktMDUtMjAyMlxyXG4gICovICBcclxuXHJcbiAgICBwdWJsaWMgY3JlYXRlQXVkaXRvcmlhKHNubzpNU25vTG9nW10pe1xyXG4gICAgICBsZXQgYm9keT1bXTtcclxuICAgICAgc25vLmZvckVhY2goZT0+IHtib2R5LnB1c2goZS5kYXRhSW50ZWZhY2UoKSl9KTtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zbm8vc2VndXJpZGFkX2Rhby5waHA/YCxib2R5LFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKX0pXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtyZXR1cm4gcmVzO30pXHJcbiAgICAgICk7XHJcbiAgICB9ICBcclxuXHJcbiAvKiogIFxyXG4gICogQGRlc2NyaXB0aW9uIE9idGllbmUgbG9zIHRpcG9zIGRlIGRlcG9zaXRvcyAgKiBcclxuICAqIEBwYXJhbSBwcm9jZWRlIDogcHJvY2VkZSBkZWwgbW9kdWxvXHJcbiAgKiBAcGFyYW0gaWRBcnRpY3VsbyA6IGlkIGRlbCBhcnRpY3Vsb1xyXG4gICogQHBhcmFtIGlkVXN1YXJpbyA6IGlkIHVzdWFyaW8gcGVybWl0aWRvXHJcbiAgKiBAcmV0dXJucyBcclxuICAqIEBhdXRob3IgSmF2aWVyIFRvdmFyXHJcbiAgKiBAZGF0ZSAyMy0xMS0yMDIyXHJcbiAgKi8gICAgICBcclxuICBwdWJsaWMgZ2V0RGVwb3NpdFR5cGUocHJvY2VkZTpzdHJpbmcsaWRBcnRpY3VsbzpudW1iZXIsaWRVc3VhcmlvPzpudW1iZXIpe1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3Npdi9jYXRhbG9nb19wYXJhbWV0cml6YWRvX2Rhby5waHA/Z2V0PSR7cHJvY2VkZX0maWQ9JHtpZEFydGljdWxvfSZpPSR7aWRVc3VhcmlvfWAsXHJcbiAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKCAgICAgXHJcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHsgICAgICAgICAgICBcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTVRpcG9EZXBvc2l0b3MoZSkpOyAgICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqICBcclxuICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIENhcmdvcyBBZGljaW9uYWxlcyAgKiBcclxuICAqIEBwYXJhbSB0aXBvIDogb25lLGRlZmF1bHRcclxuICAqIEBwYXJhbSBpZCA6IGlkIGRlbCBjYXJnbyBcclxuICAqIEByZXR1cm5zIFxyXG4gICogQGF1dGhvciBEaW1hbHkgQ3Jlc3BvXHJcbiAgKiBAZGF0ZSAxMy0xMS0yMDIyXHJcbiAgKi8gICAgICBcclxuICBwdWJsaWMgZ2V0Q2FyZ29zQWRpY2lvbmFsZXModGlwbzpzdHJpbmcsaWQ/Om51bWJlcil7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vc3RiL2Nhcmdvc19hZGljaW9uYWxlc19kYW8ucGhwP3RpcG89JHt0aXBvfSZpZD0ke2lkfWAsXHJcbiAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKCAgICBcclxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXMuc3VjY2VzcykgeyAgICAgICAgICAgIFxyXG4gICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNQ2FyZ29zQWRpY2lvbmFsZXMoZSkpOyAgICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcblxyXG5cclxuICAgICAgICBcclxufVxyXG5cclxuICBcclxuaW50ZXJmYWNlIGZpbHRyb0N1ZW50YXNQcmVzdXB1ZXN0byB7XHJcbiAgdGlwbz86ICdFJyB8ICdSJyxcclxuICBlc3RhZG8/OiAnQycgfCAnUydcclxufVxyXG5cclxuXHJcbiJdfQ==
|