ssi-security-commons 0.16.35 → 0.16.36
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.
|
@@ -89,8 +89,10 @@ export class MessagesService {
|
|
|
89
89
|
console.log(res);
|
|
90
90
|
const loginUrl = res.data;
|
|
91
91
|
const url = window.location.href;
|
|
92
|
+
const urlObj = new URL(url);
|
|
93
|
+
urlObj.searchParams.delete('code');
|
|
92
94
|
if (url.indexOf(loginUrl) < 0) {
|
|
93
|
-
window.location.href = loginUrl + '?continue=' + encodeURIComponent(
|
|
95
|
+
window.location.href = loginUrl + '?continue=' + encodeURIComponent(urlObj.toString());
|
|
94
96
|
}
|
|
95
97
|
}, (err) => {
|
|
96
98
|
console.error(err);
|
|
@@ -274,4 +276,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.3", ngImpor
|
|
|
274
276
|
type: Inject,
|
|
275
277
|
args: ['environment']
|
|
276
278
|
}] }]; } });
|
|
277
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZXMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NzaS1zZWN1cml0eS1jb21tb25zL3NyYy9saWIvc2VydmljZXMvbWVzc2FnZXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUduRCw0Q0FBNEM7QUFDNUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7OztBQU0xRCxNQUFNLE9BQU8sZUFBZTtJQUsxQixZQUNTLElBQW9CO0lBQzNCLDBCQUEwQjtJQUNsQixRQUFxQixFQUN0QixNQUFpQixFQUNELFdBQWdCO1FBSmhDLFNBQUksR0FBSixJQUFJLENBQWdCO1FBRW5CLGFBQVEsR0FBUixRQUFRLENBQWE7UUFDdEIsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQUd4QixJQUFJLENBQUMsYUFBYSxHQUFHLFdBQVcsQ0FBQyxhQUFhLENBQUM7SUFDakQsQ0FBQztJQUdELDhEQUE4RDtJQUM5RCxnQkFBZ0IsQ0FBQyxLQUF3QixFQUFFLE9BQXlCO1FBQ2xFLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sSUFBSSxHQUFRLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQ2hELFFBQVEsS0FBSyxDQUFDLE1BQU0sRUFBRTtZQUNwQixLQUFLLEdBQUcsQ0FBQyxDQUFDO2dCQUNSLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDOUIsTUFBTTthQUNQO1lBQ0QsS0FBSyxHQUFHLENBQUMsQ0FBQztnQkFDUixJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxLQUFLLGVBQWUsRUFBRTtv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LEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUN6QixJQUFJLGFBQWEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLEVBQUUsYUFBYTt3QkFDaEYsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDLGNBQWM7cUJBQzFDO3lCQUFNLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLEVBQUUsd0NBQXdDO3dCQUM5RSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO3FCQUN0Qzt5QkFBTTt3QkFDTCxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO3FCQUNyQjtpQkFDRjtnQkFDRCxPQUFPLE1BQU0sQ0FBQzthQUNmO1lBQ0QsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDLENBQUM7UUFDRixPQUFPLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQixDQUFDOzhHQS9QVSxlQUFlLG9HQVVoQixhQUFhO2tIQVZaLGVBQWU7OzJGQUFmLGVBQWU7a0JBRDNCLFVBQVU7OzBCQVdOLE1BQU07MkJBQUMsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxpbmVzLXBlci1mdW5jdGlvbiAqL1xuLyogZXNsaW50LWRpc2FibGUgcXVvdGUtcHJvcHMgKi9cbmltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlLCBIdHRwUmVxdWVzdCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IE1hdFNuYWNrQmFyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc25hY2stYmFyJztcbi8vIGltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBBbGVydENvbXBvbmVudCB9IGZyb20gJy4uL2FsZXJ0L2FsZXJ0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGcm9udEVuZEV4Y2VwdGlvbiB9IGZyb20gJy4uL3VzZXIubW9kZWwnO1xuaW1wb3J0IHsgU2Vzc2lvblNlcnZpY2UgfSBmcm9tICcuL3Nlc3Npb24uc2VydmljZSc7XG5cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE1lc3NhZ2VzU2VydmljZSB7XG5cbiAgcHJpdmF0ZSBpbnRlcmNlcHRvck1lc3NhZ2VzOiBhbnk7XG4gIGFwcGxpY2F0aW9uSWQ6IGFueTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgYXV0aDogU2Vzc2lvblNlcnZpY2UsXG4gICAgLy8gcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIHNuYWNrQmFyOiBNYXRTbmFja0JhcixcbiAgICBwdWJsaWMgZGlhbG9nOiBNYXREaWFsb2csXG4gICAgQEluamVjdCgnZW52aXJvbm1lbnQnKSBlbnZpcm9ubWVudDogYW55XG4gICkge1xuICAgIHRoaXMuYXBwbGljYXRpb25JZCA9IGVudmlyb25tZW50LmFwcGxpY2F0aW9uSWQ7XG4gIH1cblxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGluZXMtcGVyLWZ1bmN0aW9uLCBjb21wbGV4aXR5XG4gIHNob3dFcnJvck1lc3NhZ2UoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlLCByZXF1ZXN0OiBIdHRwUmVxdWVzdDxhbnk+KTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coJ2Vycm9yOiAnLCBlcnJvcik7XG4gICAgdGhpcy5yZWdpc3RlckxvZyhlcnJvciwgcmVxdWVzdCk7XG4gICAgY29uc3QgbXNnczogYW55ID0gdGhpcy5nZXRJbnRlcmNlcHRvck1lc3NhZ2VzKCk7XG4gICAgc3dpdGNoIChlcnJvci5zdGF0dXMpIHtcbiAgICAgIGNhc2UgMzAyOiB7XG4gICAgICAgIHRoaXMubWVzc2FnZVNuYWNrRXJyb3IoZXJyb3IpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgNDAwOiB7XG4gICAgICAgIGlmIChlcnJvci5lcnJvci5lcnJvciA9PT0gJ2ludmFsaWRfZ3JhbnQnKSB7XG4gICAgICAgICAgdGhpcy5nb05hdmlnYXRlTG9naW4obXNncyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zaG93U25hY2tFcnJvcihlcnJvci5tZXNzYWdlLCBbJ3NuYWNrLWVycm9yJ10pO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSA0MDM6IHtcbiAgICAgICAgdGhpcy5nb05hdmlnYXRlTG9naW4obXNncyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSA0MDQ6IHtcbiAgICAgICAgdGhpcy5zaG93U25hY2tFcnJvcihtc2dzLmF1dGhfaW50ZXJjZXB0b3Iubm90X2ZvdW5kLCBbJ3NuYWNrLWVycm9yJ10pO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgNDA5OiB7XG4gICAgICAgIHRoaXMubWVzc2FnZURpYWxvZyhlcnJvciwgbXNncyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSA0MTI6IHtcbiAgICAgICAgdGhpcy5zaG93U25hY2tFcnJvcihlcnJvci5lcnJvci5yZXNwb25zZU1lc3NhZ2UgPz8gZXJyb3IuZXJyb3IubWVzc2FnZSwgWydzbmFjay1lcnJvciddKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIDQyMjoge1xuICAgICAgICB0aGlzLm1lc3NhZ2VEaWFsb2coZXJyb3IsIG1zZ3MpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgNDI4OiB7XG4gICAgICAgIHRoaXMuc2hvd1NuYWNrRXJyb3IoZXJyb3IuZXJyb3IucmVzcG9uc2VNZXNzYWdlID8/IGVycm9yLmVycm9yLm1lc3NhZ2UsIFsnc25hY2stZXJyb3InXSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSA1MDA6IHtcbiAgICAgICAgdGhpcy5tZXNzYWdlQWxlcnREaWFsb2coZXJyb3IsIG1zZ3MpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgNTAzOiB7XG4gICAgICAgIHRoaXMuc2hvd1NuYWNrRXJyb3IobXNncy5hdXRoX2ludGVyY2VwdG9yLnVuYXZhaWxhYmxlLCBbJ3NuYWNrLWVycm9yJ10pO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgLTE6IHtcbiAgICAgICAgdGhpcy5zaG93U25hY2tFcnJvcihtc2dzLmF1dGhfaW50ZXJjZXB0b3IuY29ubmVjdGlvbl9lcnJvcik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAwOiB7XG4gICAgICAgIHRoaXMuc2hvd1NuYWNrRXJyb3IobXNncy5hdXRoX2ludGVyY2VwdG9yLmNvbm5lY3Rpb25fZXJyb3IpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBtZXNzYWdlU25hY2tFcnJvcihlcnJvcjogYW55KTogdm9pZCB7XG4gICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyb3IuZXJyb3IgJiYgZXJyb3IuZXJyb3IucmVzcG9uc2VNZXNzYWdlID8gZXJyb3IuZXJyb3IucmVzcG9uc2VNZXNzYWdlIDpcbiAgICAgIGVycm9yLmVycm9yLm1lc3NhZ2UgPyBlcnJvci5lcnJvci5tZXNzYWdlIDogZXJyb3IubWVzc2FnZTtcbiAgICB0aGlzLnNob3dTbmFja0Vycm9yKGVycm9yTWVzc2FnZSwgWydzbmFjay1lcnJvciddKTtcbiAgfVxuXG4gIGdvTmF2aWdhdGVMb2dpbihtc2dzOiBhbnkpOiB2b2lkIHtcbiAgICAvLyBpZiAodGhpcy5yb3V0ZXIudXJsICE9PSAnL2xvZ2luJykge1xuICAgIHRoaXMuc2hvd1NuYWNrRXJyb3IobXNncy5hdXRoX2ludGVyY2VwdG9yLnNlc3Npb25fbG9zdCwgWydzbmFjay1lcnJvciddKTtcbiAgICAvLyB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9sb2dpbiddKTtcbiAgICB0aGlzLmF1dGguZGVzdHJveUNyZWRlbnRpYWxzKCk7XG4gICAgdGhpcy5hdXRoLmdldExvZ2luVXJsKCkuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICBjb25zb2xlLmxvZyhyZXMpO1xuICAgICAgY29uc3QgbG9naW5VcmwgPSByZXMuZGF0YTtcbiAgICAgIGNvbnN0IHVybCA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xuICAgICAgaWYgKHVybC5pbmRleE9mKGxvZ2luVXJsKSA8IDApIHtcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBsb2dpblVybCArICc/Y29udGludWU9JyArIGVuY29kZVVSSUNvbXBvbmVudCh1cmwpO1xuICAgICAgfVxuICAgIH0sIChlcnIpID0+IHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICB9KTtcbiAgICAvLyB9XG4gIH1cblxuICBtZXNzYWdlQWxlcnREaWFsb2coZXJyb3I6IGFueSwgbXNnczogYW55KTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coZXJyb3IpO1xuICAgIGxldCBtZXNzYWdlID0gJyc7XG4gICAgaWYgKGVycm9yLmVycm9yLmRlc2NyaXB0aW9uKSB7XG4gICAgICBtZXNzYWdlID0gZXJyb3IuZXJyb3IuZGVzY3JpcHRpb247XG4gICAgICBpZiAoZXJyb3IuZXJyb3IuZXhjZXB0aW9uKSB7IG1lc3NhZ2UgPSBtZXNzYWdlICsgJ1xcblxcbicgKyBtc2dzLmF1dGhfaW50ZXJjZXB0b3IuY29kZSArICc6ICcgKyBlcnJvci5lcnJvci5leGNlcHRpb247IH1cbiAgICB9IGVsc2UgaWYgKGVycm9yLmVycm9yLnJlc3BvbnNlTWVzc2FnZSkge1xuICAgICAgbWVzc2FnZSA9IGVycm9yLmVycm9yLnJlc3BvbnNlTWVzc2FnZTtcbiAgICAgIGlmIChlcnJvci5lcnJvci5leGNlcHRpb25JZCkgeyBtZXNzYWdlID0gbWVzc2FnZSArICdcXG5cXG4nICsgbXNncy5hdXRoX2ludGVyY2VwdG9yLmNvZGUgKyAnOiAnICsgZXJyb3IuZXJyb3IuZXhjZXB0aW9uSWQ7IH1cbiAgICB9IGVsc2UgaWYgKGVycm9yLmVycm9yLm1lc3NhZ2UpIHtcbiAgICAgIG1lc3NhZ2UgPSBlcnJvci5lcnJvci5tZXNzYWdlO1xuICAgICAgaWYgKGVycm9yLmVycm9yLmV4Y2VwdGlvbklkKSB7IG1lc3NhZ2UgPSBtZXNzYWdlICsgJ1xcblxcbicgKyBtc2dzLmF1dGhfaW50ZXJjZXB0b3IuY29kZSArICc6ICcgKyBlcnJvci5lcnJvci5leGNlcHRpb25JZDsgfVxuICAgICAgaWYgKGVycm9yLmVycm9yLnJlZmVyZW5jZUVycm9yKSB7IG1lc3NhZ2UgPSBtZXNzYWdlICsgJ1xcblxcbicgKyBtc2dzLmF1dGhfaW50ZXJjZXB0b3IuY29kZSArICc6ICcgKyBlcnJvci5lcnJvci5yZWZlcmVuY2VFcnJvcjsgfVxuICAgIH0gZWxzZSBpZiAoZXJyb3IubWVzc2FnZSkge1xuICAgICAgbWVzc2FnZSA9IGVycm9yLm1lc3NhZ2U7XG4gICAgICBpZiAoZXJyb3IuZXJyb3IuZXhjZXB0aW9uSWQpIHsgbWVzc2FnZSA9IG1lc3NhZ2UgKyAnXFxuXFxuJyArIG1zZ3MuYXV0aF9pbnRlcmNlcHRvci5jb2RlICsgJzogJyArIGVycm9yLmVycm9yLmV4Y2VwdGlvbklkOyB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG1lc3NhZ2UgPSBtc2dzLmF1dGhfaW50ZXJjZXB0b3IubWVzc2FnZTtcbiAgICB9XG4gICAgdGhpcy5kaWFsb2cub3BlbihBbGVydENvbXBvbmVudCwge1xuICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxuICAgICAgZGF0YTogeyB0aXRsZTogbXNncy5hdXRoX2ludGVyY2VwdG9yLnRpdGxlLCBtZXNzYWdlLCBpY29uOiAnd2FybicsIG9rVGV4dDogbXNncy5hdXRoX2ludGVyY2VwdG9yLmFjY2VwdF90ZXh0IH1cbiAgICB9KTtcbiAgfVxuXG4gIG1lc3NhZ2VEaWFsb2coZXJyb3I6IGFueSwgbXNnczogYW55KTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coZXJyb3IpO1xuICAgIGxldCBtZXNzYWdlID0gJyc7XG4gICAgaWYgKGVycm9yLmVycm9yLmRlc2NyaXB0aW9uKSB7XG4gICAgICBtZXNzYWdlID0gZXJyb3IuZXJyb3IuZGVzY3JpcHRpb247XG4gICAgfSBlbHNlIGlmIChlcnJvci5lcnJvci5yZXNwb25zZU1lc3NhZ2UpIHtcbiAgICAgIG1lc3NhZ2UgPSBlcnJvci5lcnJvci5yZXNwb25zZU1lc3NhZ2U7XG4gICAgfSBlbHNlIGlmIChlcnJvci5lcnJvci5tZXNzYWdlKSB7XG4gICAgICBtZXNzYWdlID0gZXJyb3IuZXJyb3IubWVzc2FnZTtcbiAgICB9IGVsc2UgaWYgKGVycm9yLm1lc3NhZ2UpIHtcbiAgICAgIG1lc3NhZ2UgPSBlcnJvci5tZXNzYWdlO1xuICAgIH0gZWxzZSB7XG4gICAgICBtZXNzYWdlID0gbXNncy5hdXRoX2ludGVyY2VwdG9yLm1lc3NhZ2U7XG4gICAgfVxuICAgIHRoaXMuZGlhbG9nLm9wZW4oQWxlcnRDb21wb25lbnQsIHtcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcbiAgICAgIGRhdGE6IHsgdGl0bGU6IG1zZ3MuYXV0aF9pbnRlcmNlcHRvci50aXRsZSwgbWVzc2FnZSwgaWNvbjogJ3dhcm4nLCBva1RleHQ6IG1zZ3MuYXV0aF9pbnRlcmNlcHRvci5hY2NlcHRfdGV4dCB9XG4gICAgfSk7XG4gIH1cblxuICBzaG93U25hY2tFcnJvcihtZXNzYWdlOiBhbnksIHBhbmVsQ2xhc3M6IGFueVtdID0gW10pOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZyhtZXNzYWdlKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc25hY2tCYXIub3BlbihtZXNzYWdlLCB1bmRlZmluZWQsIHtcbiAgICAgICAgZHVyYXRpb246IDUwMDAsXG4gICAgICAgIHBhbmVsQ2xhc3MsXG4gICAgICAgIHZlcnRpY2FsUG9zaXRpb246ICd0b3AnXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHNldEludGVyY2VwdG9yTWVzc2FnZXMobWVzc2FnZTogYW55KTogdm9pZCB7XG4gICAgdGhpcy5pbnRlcmNlcHRvck1lc3NhZ2VzID0gbWVzc2FnZTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGluZXMtcGVyLWZ1bmN0aW9uXG4gIGdldEludGVyY2VwdG9yTWVzc2FnZXMoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuaW50ZXJjZXB0b3JNZXNzYWdlcykge1xuICAgICAgbGV0IGxhbmcgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oJ0xBTkcnKTtcbiAgICAgIGlmICghbGFuZykge1xuICAgICAgICBjb25zdCB1c2VyTGFuZyA9IG5hdmlnYXRvci5sYW5ndWFnZTtcbiAgICAgICAgbGFuZyA9IHVzZXJMYW5nLnNwbGl0KCctJylbMF07XG4gICAgICB9XG4gICAgICBjb25zdCBtZXNzYWdlc0VuID0ge1xuICAgICAgICBhdXRoX2ludGVyY2VwdG9yOiB7XG4gICAgICAgICAgc2Vzc2lvbl9sb3N0OiAnU2Vzc2lvbiBsb3N0LCB5b3UgaGF2ZSB0byBsb2dpbiBhZ2Fpbi4nLFxuICAgICAgICAgIG5vdF9mb3VuZDogJ1Jlc291cmNlIG5vdCBmb3VuZCcsXG4gICAgICAgICAgdGl0bGU6ICdXZSBhcmUgc29ycnknLFxuICAgICAgICAgIG1lc3NhZ2U6ICdXZSBoYWQgYSBwcm9ibGVtIHRyeWluZyB0byBwcm9jZXNzIHlvdXIgcmVxdWVzdC4nLFxuICAgICAgICAgIGNvZGU6ICdDb2RlJyxcbiAgICAgICAgICB1bmF2YWlsYWJsZTogJ1NlcnZpY2UgdW5hdmFpbGFibGUsIHBsZWFzZSB0cnkgYWdhaW4gaW4gYSBmZXcgbWludXRlcy4nLFxuICAgICAgICAgIGNvbm5lY3Rpb25fZXJyb3I6ICdDb3VsZCBub3QgY29ubmVjdCB0byBzZXJ2ZXIsIHBsZWFzZSBjaGVjayB5b3VyIG5ldHdvcmsgY29ubmVjdGlvbi4nLFxuICAgICAgICAgIGFjY2VwdF90ZXh0OiAnT0snLFxuICAgICAgICAgIGNhbmNlbF90ZXh0OiAnQ2FuY2VsJ1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgbWVzc2FnZXNFcyA9IHtcbiAgICAgICAgYXV0aF9pbnRlcmNlcHRvcjoge1xuICAgICAgICAgIHNlc3Npb25fbG9zdDogJ1N1IHNlc2nDs24gZXhwaXLDsywgZGViZSBpbmljaWFyIHNlc2nDs24gbnVldmFtZW50ZS4nLFxuICAgICAgICAgIG5vdF9mb3VuZDogJ1JlY3Vyc28gbm8gZW5jb250cmFkbycsXG4gICAgICAgICAgdGl0bGU6ICdMbyBzZW50aW1vcycsXG4gICAgICAgICAgbWVzc2FnZTogJ1R1dmltb3MgdW4gcHJvYmxlbWEgYWwgdHJhdGFyIGRlIHByb2Nlc2FyIHN1IHNvbGljaXR1ZC4nLFxuICAgICAgICAgIGNvZGU6ICdDw7NkaWdvJyxcbiAgICAgICAgICB1bmF2YWlsYWJsZTogJ1NlcnZpY2lvIG5vIGRpc3BvbmlibGUsIGludMOpbnRlbG8gZGUgbnVldm8gZW4gdW5vcyBtaW51dG9zLicsXG4gICAgICAgICAgY29ubmVjdGlvbl9lcnJvcjogJ05vIHNlIHB1ZG8gY29uZWN0YXIgYWwgc2Vydmlkb3IsIHZlcmlmaXF1ZSBzdSBjb25leGnDs24gZGUgcmVkLicsXG4gICAgICAgICAgYWNjZXB0X3RleHQ6ICdBY2VwdGFyJyxcbiAgICAgICAgICBjYW5jZWxfdGV4dDogJ0NhbmNlbGFyJ1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgaWYgKGxhbmcgJiYgbGFuZyA9PT0gJ2VzJykge1xuICAgICAgICB0aGlzLmludGVyY2VwdG9yTWVzc2FnZXMgPSBtZXNzYWdlc0VzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5pbnRlcmNlcHRvck1lc3NhZ2VzID0gbWVzc2FnZXNFbjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaW50ZXJjZXB0b3JNZXNzYWdlcztcbiAgfVxuXG5cbiAgcmVnaXN0ZXJMb2coZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlLCByZXF1ZXN0OiBIdHRwUmVxdWVzdDxhbnk+KTogdm9pZCB7XG4gICAgY29uc3QgdSA9IHRoaXMuYXV0aC5nZXRVc2VyZGF0YSgpO1xuICAgIGNvbnN0IHBhcmFtOiBGcm9udEVuZEV4Y2VwdGlvbiA9IHtcbiAgICAgIGh0dHBTdGF0dXM6IGVycm9yLnN0YXR1cyxcbiAgICAgIGh0dHBTdGF0dXNUZXh0OiBlcnJvci5zdGF0dXNUZXh0LFxuICAgICAgZXJyb3JNZXNzYWdlOiBlcnJvci5tZXNzYWdlLFxuICAgICAgY3VycmVudFVybDogd2luZG93LmxvY2F0aW9uLmhyZWYsXG4gICAgICByZXF1ZXN0VXJsOiByZXF1ZXN0LnVybFdpdGhQYXJhbXMgPyByZXF1ZXN0LnVybFdpdGhQYXJhbXMgOiB1bmRlZmluZWQsXG4gICAgICByZXF1ZXN0Qm9keTogcmVxdWVzdC5ib2R5ID8gSlNPTi5zdHJpbmdpZnkodGhpcy5vYmZ1c2NhdGVEYXRhKHJlcXVlc3QuYm9keSkpIDogdW5kZWZpbmVkLFxuICAgICAgdXNlcklkOiB1ID8gdS51c2VySWQgOiB1bmRlZmluZWQsXG4gICAgICBhcHBsaWNhdGlvbklkOiB0aGlzLmFwcGxpY2F0aW9uSWQsXG4gICAgICByZXF1ZXN0RGF0ZTogbmV3IERhdGUoKVxuICAgIH07XG4gICAgdGhpcy5hdXRoLnJlZ2lzdGVyRXhjZXB0aW9uKHBhcmFtKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdyZWdpc3RlckV4Y2VwdGlvbicsIHJlc3BvbnNlKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ3JlZ2lzdGVyRXhjZXB0aW9uJywgZXJyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgb2JmdXNjYXRlRGF0YShkYXRhOiBhbnkpOiBhbnkge1xuICAgIGNvbnN0IHNlbnNpdGl2ZUtleXMgPSBbJ3Bhc3N3b3JkJywgJ2NhcmQnLCAnY2FyZG51bWJlcicsICd0b2tlbiddO1xuICAgIGNvbnN0IG9iZnVzY2F0ZUhhbmRsZSA9IChpbnB1dDogYW55KTogYW55ID0+IHtcbiAgICAgIC8vIFNpIGVzIGFycmF5IGl0ZXJhIHVubyBwb3IgdW5vXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShpbnB1dCkpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0Lm1hcChpdGVtID0+IG9iZnVzY2F0ZUhhbmRsZShpdGVtKSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNpIGVzIG9iamV0byB2YWxpZGEgc2kgZWwgYXRyaWJ1dG8gZXMgc3RyaW5nIHUgb2JqZWN0LCBsbyBkZW1hcyBsbyBzYWx0YVxuICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ29iamVjdCcgJiYgaW5wdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCByZXN1bHQ6IGFueSA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhpbnB1dCkpIHtcbiAgICAgICAgICBjb25zdCBsb3dlcktleSA9IGtleS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gaW5wdXRba2V5XTtcbiAgICAgICAgICBpZiAoc2Vuc2l0aXZlS2V5cy5pbmNsdWRlcyhsb3dlcktleSkgJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykgeyAvLyBLZXkgc3RyaW5nXG4gICAgICAgICAgICByZXN1bHRba2V5XSA9ICcqKioqKioqKionOyAvL2J0b2EodmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JykgeyAvLyBLZXkgb2JqZWN0IC0+IGJ1c2NhIGVuIG9iamV0byBhbmlkYWRvXG4gICAgICAgICAgICByZXN1bHRba2V5XSA9IG9iZnVzY2F0ZUhhbmRsZSh2YWx1ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdFtrZXldID0gdmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gaW5wdXQ7XG4gICAgfTtcbiAgICByZXR1cm4gb2JmdXNjYXRlSGFuZGxlKGRhdGEpO1xuICB9XG5cbn1cbiJdfQ==
|
|
279
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZXMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NzaS1zZWN1cml0eS1jb21tb25zL3NyYy9saWIvc2VydmljZXMvbWVzc2FnZXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUduRCw0Q0FBNEM7QUFDNUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7OztBQU0xRCxNQUFNLE9BQU8sZUFBZTtJQUsxQixZQUNTLElBQW9CO0lBQzNCLDBCQUEwQjtJQUNsQixRQUFxQixFQUN0QixNQUFpQixFQUNELFdBQWdCO1FBSmhDLFNBQUksR0FBSixJQUFJLENBQWdCO1FBRW5CLGFBQVEsR0FBUixRQUFRLENBQWE7UUFDdEIsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQUd4QixJQUFJLENBQUMsYUFBYSxHQUFHLFdBQVcsQ0FBQyxhQUFhLENBQUM7SUFDakQsQ0FBQztJQUdELDhEQUE4RDtJQUM5RCxnQkFBZ0IsQ0FBQyxLQUF3QixFQUFFLE9BQXlCO1FBQ2xFLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sSUFBSSxHQUFRLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQ2hELFFBQVEsS0FBSyxDQUFDLE1BQU0sRUFBRTtZQUNwQixLQUFLLEdBQUcsQ0FBQyxDQUFDO2dCQUNSLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDOUIsTUFBTTthQUNQO1lBQ0QsS0FBSyxHQUFHLENBQUMsQ0FBQztnQkFDUixJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxLQUFLLGVBQWUsRUFBRTtv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QUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7b0JBQ3BDLE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztvQkFDbkMsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUN6QixJQUFJLGFBQWEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLEVBQUUsYUFBYTt3QkFDaEYsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDLGNBQWM7cUJBQzFDO3lCQUFNLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLEVBQUUsd0NBQXdDO3dCQUM5RSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO3FCQUN0Qzt5QkFBTTt3QkFDTCxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO3FCQUNyQjtpQkFDRjtnQkFDRCxPQUFPLE1BQU0sQ0FBQzthQUNmO1lBQ0QsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDLENBQUM7UUFDRixPQUFPLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQixDQUFDOzhHQWpRVSxlQUFlLG9HQVVoQixhQUFhO2tIQVZaLGVBQWU7OzJGQUFmLGVBQWU7a0JBRDNCLFVBQVU7OzBCQVdOLE1BQU07MkJBQUMsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxpbmVzLXBlci1mdW5jdGlvbiAqL1xuLyogZXNsaW50LWRpc2FibGUgcXVvdGUtcHJvcHMgKi9cbmltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlLCBIdHRwUmVxdWVzdCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IE1hdFNuYWNrQmFyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc25hY2stYmFyJztcbi8vIGltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBBbGVydENvbXBvbmVudCB9IGZyb20gJy4uL2FsZXJ0L2FsZXJ0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGcm9udEVuZEV4Y2VwdGlvbiB9IGZyb20gJy4uL3VzZXIubW9kZWwnO1xuaW1wb3J0IHsgU2Vzc2lvblNlcnZpY2UgfSBmcm9tICcuL3Nlc3Npb24uc2VydmljZSc7XG5cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE1lc3NhZ2VzU2VydmljZSB7XG5cbiAgcHJpdmF0ZSBpbnRlcmNlcHRvck1lc3NhZ2VzOiBhbnk7XG4gIGFwcGxpY2F0aW9uSWQ6IGFueTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgYXV0aDogU2Vzc2lvblNlcnZpY2UsXG4gICAgLy8gcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIHNuYWNrQmFyOiBNYXRTbmFja0JhcixcbiAgICBwdWJsaWMgZGlhbG9nOiBNYXREaWFsb2csXG4gICAgQEluamVjdCgnZW52aXJvbm1lbnQnKSBlbnZpcm9ubWVudDogYW55XG4gICkge1xuICAgIHRoaXMuYXBwbGljYXRpb25JZCA9IGVudmlyb25tZW50LmFwcGxpY2F0aW9uSWQ7XG4gIH1cblxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGluZXMtcGVyLWZ1bmN0aW9uLCBjb21wbGV4aXR5XG4gIHNob3dFcnJvck1lc3NhZ2UoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlLCByZXF1ZXN0OiBIdHRwUmVxdWVzdDxhbnk+KTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coJ2Vycm9yOiAnLCBlcnJvcik7XG4gICAgdGhpcy5yZWdpc3RlckxvZyhlcnJvciwgcmVxdWVzdCk7XG4gICAgY29uc3QgbXNnczogYW55ID0gdGhpcy5nZXRJbnRlcmNlcHRvck1lc3NhZ2VzKCk7XG4gICAgc3dpdGNoIChlcnJvci5zdGF0dXMpIHtcbiAgICAgIGNhc2UgMzAyOiB7XG4gICAgICAgIHRoaXMubWVzc2FnZVNuYWNrRXJyb3IoZXJyb3IpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgNDAwOiB7XG4gICAgICAgIGlmIChlcnJvci5lcnJvci5lcnJvciA9PT0gJ2ludmFsaWRfZ3JhbnQnKSB7XG4gICAgICAgICAgdGhpcy5nb05hdmlnYXRlTG9naW4obXNncyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zaG93U25hY2tFcnJvcihlcnJvci5tZXNzYWdlLCBbJ3NuYWNrLWVycm9yJ10pO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSA0MDM6IHtcbiAgICAgICAgdGhpcy5nb05hdmlnYXRlTG9naW4obXNncyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSA0MDQ6IHtcbiAgICAgICAgdGhpcy5zaG93U25hY2tFcnJvcihtc2dzLmF1dGhfaW50ZXJjZXB0b3Iubm90X2ZvdW5kLCBbJ3NuYWNrLWVycm9yJ10pO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgNDA5OiB7XG4gICAgICAgIHRoaXMubWVzc2FnZURpYWxvZyhlcnJvciwgbXNncyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSA0MTI6IHtcbiAgICAgICAgdGhpcy5zaG93U25hY2tFcnJvcihlcnJvci5lcnJvci5yZXNwb25zZU1lc3NhZ2UgPz8gZXJyb3IuZXJyb3IubWVzc2FnZSwgWydzbmFjay1lcnJvciddKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIDQyMjoge1xuICAgICAgICB0aGlzLm1lc3NhZ2VEaWFsb2coZXJyb3IsIG1zZ3MpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgNDI4OiB7XG4gICAgICAgIHRoaXMuc2hvd1NuYWNrRXJyb3IoZXJyb3IuZXJyb3IucmVzcG9uc2VNZXNzYWdlID8/IGVycm9yLmVycm9yLm1lc3NhZ2UsIFsnc25hY2stZXJyb3InXSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSA1MDA6IHtcbiAgICAgICAgdGhpcy5tZXNzYWdlQWxlcnREaWFsb2coZXJyb3IsIG1zZ3MpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgNTAzOiB7XG4gICAgICAgIHRoaXMuc2hvd1NuYWNrRXJyb3IobXNncy5hdXRoX2ludGVyY2VwdG9yLnVuYXZhaWxhYmxlLCBbJ3NuYWNrLWVycm9yJ10pO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgLTE6IHtcbiAgICAgICAgdGhpcy5zaG93U25hY2tFcnJvcihtc2dzLmF1dGhfaW50ZXJjZXB0b3IuY29ubmVjdGlvbl9lcnJvcik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAwOiB7XG4gICAgICAgIHRoaXMuc2hvd1NuYWNrRXJyb3IobXNncy5hdXRoX2ludGVyY2VwdG9yLmNvbm5lY3Rpb25fZXJyb3IpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBtZXNzYWdlU25hY2tFcnJvcihlcnJvcjogYW55KTogdm9pZCB7XG4gICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyb3IuZXJyb3IgJiYgZXJyb3IuZXJyb3IucmVzcG9uc2VNZXNzYWdlID8gZXJyb3IuZXJyb3IucmVzcG9uc2VNZXNzYWdlIDpcbiAgICAgIGVycm9yLmVycm9yLm1lc3NhZ2UgPyBlcnJvci5lcnJvci5tZXNzYWdlIDogZXJyb3IubWVzc2FnZTtcbiAgICB0aGlzLnNob3dTbmFja0Vycm9yKGVycm9yTWVzc2FnZSwgWydzbmFjay1lcnJvciddKTtcbiAgfVxuXG4gIGdvTmF2aWdhdGVMb2dpbihtc2dzOiBhbnkpOiB2b2lkIHtcbiAgICAvLyBpZiAodGhpcy5yb3V0ZXIudXJsICE9PSAnL2xvZ2luJykge1xuICAgIHRoaXMuc2hvd1NuYWNrRXJyb3IobXNncy5hdXRoX2ludGVyY2VwdG9yLnNlc3Npb25fbG9zdCwgWydzbmFjay1lcnJvciddKTtcbiAgICAvLyB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9sb2dpbiddKTtcbiAgICB0aGlzLmF1dGguZGVzdHJveUNyZWRlbnRpYWxzKCk7XG4gICAgdGhpcy5hdXRoLmdldExvZ2luVXJsKCkuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICBjb25zb2xlLmxvZyhyZXMpO1xuICAgICAgY29uc3QgbG9naW5VcmwgPSByZXMuZGF0YTtcbiAgICAgIGNvbnN0IHVybCA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xuICAgICAgY29uc3QgdXJsT2JqID0gbmV3IFVSTCh1cmwpO1xuICAgICAgdXJsT2JqLnNlYXJjaFBhcmFtcy5kZWxldGUoJ2NvZGUnKTtcbiAgICAgIGlmICh1cmwuaW5kZXhPZihsb2dpblVybCkgPCAwKSB7XG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gbG9naW5VcmwgKyAnP2NvbnRpbnVlPScgKyBlbmNvZGVVUklDb21wb25lbnQodXJsT2JqLnRvU3RyaW5nKCkpO1xuICAgICAgfVxuICAgIH0sIChlcnIpID0+IHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICB9KTtcbiAgICAvLyB9XG4gIH1cblxuICBtZXNzYWdlQWxlcnREaWFsb2coZXJyb3I6IGFueSwgbXNnczogYW55KTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coZXJyb3IpO1xuICAgIGxldCBtZXNzYWdlID0gJyc7XG4gICAgaWYgKGVycm9yLmVycm9yLmRlc2NyaXB0aW9uKSB7XG4gICAgICBtZXNzYWdlID0gZXJyb3IuZXJyb3IuZGVzY3JpcHRpb247XG4gICAgICBpZiAoZXJyb3IuZXJyb3IuZXhjZXB0aW9uKSB7IG1lc3NhZ2UgPSBtZXNzYWdlICsgJ1xcblxcbicgKyBtc2dzLmF1dGhfaW50ZXJjZXB0b3IuY29kZSArICc6ICcgKyBlcnJvci5lcnJvci5leGNlcHRpb247IH1cbiAgICB9IGVsc2UgaWYgKGVycm9yLmVycm9yLnJlc3BvbnNlTWVzc2FnZSkge1xuICAgICAgbWVzc2FnZSA9IGVycm9yLmVycm9yLnJlc3BvbnNlTWVzc2FnZTtcbiAgICAgIGlmIChlcnJvci5lcnJvci5leGNlcHRpb25JZCkgeyBtZXNzYWdlID0gbWVzc2FnZSArICdcXG5cXG4nICsgbXNncy5hdXRoX2ludGVyY2VwdG9yLmNvZGUgKyAnOiAnICsgZXJyb3IuZXJyb3IuZXhjZXB0aW9uSWQ7IH1cbiAgICB9IGVsc2UgaWYgKGVycm9yLmVycm9yLm1lc3NhZ2UpIHtcbiAgICAgIG1lc3NhZ2UgPSBlcnJvci5lcnJvci5tZXNzYWdlO1xuICAgICAgaWYgKGVycm9yLmVycm9yLmV4Y2VwdGlvbklkKSB7IG1lc3NhZ2UgPSBtZXNzYWdlICsgJ1xcblxcbicgKyBtc2dzLmF1dGhfaW50ZXJjZXB0b3IuY29kZSArICc6ICcgKyBlcnJvci5lcnJvci5leGNlcHRpb25JZDsgfVxuICAgICAgaWYgKGVycm9yLmVycm9yLnJlZmVyZW5jZUVycm9yKSB7IG1lc3NhZ2UgPSBtZXNzYWdlICsgJ1xcblxcbicgKyBtc2dzLmF1dGhfaW50ZXJjZXB0b3IuY29kZSArICc6ICcgKyBlcnJvci5lcnJvci5yZWZlcmVuY2VFcnJvcjsgfVxuICAgIH0gZWxzZSBpZiAoZXJyb3IubWVzc2FnZSkge1xuICAgICAgbWVzc2FnZSA9IGVycm9yLm1lc3NhZ2U7XG4gICAgICBpZiAoZXJyb3IuZXJyb3IuZXhjZXB0aW9uSWQpIHsgbWVzc2FnZSA9IG1lc3NhZ2UgKyAnXFxuXFxuJyArIG1zZ3MuYXV0aF9pbnRlcmNlcHRvci5jb2RlICsgJzogJyArIGVycm9yLmVycm9yLmV4Y2VwdGlvbklkOyB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG1lc3NhZ2UgPSBtc2dzLmF1dGhfaW50ZXJjZXB0b3IubWVzc2FnZTtcbiAgICB9XG4gICAgdGhpcy5kaWFsb2cub3BlbihBbGVydENvbXBvbmVudCwge1xuICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxuICAgICAgZGF0YTogeyB0aXRsZTogbXNncy5hdXRoX2ludGVyY2VwdG9yLnRpdGxlLCBtZXNzYWdlLCBpY29uOiAnd2FybicsIG9rVGV4dDogbXNncy5hdXRoX2ludGVyY2VwdG9yLmFjY2VwdF90ZXh0IH1cbiAgICB9KTtcbiAgfVxuXG4gIG1lc3NhZ2VEaWFsb2coZXJyb3I6IGFueSwgbXNnczogYW55KTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coZXJyb3IpO1xuICAgIGxldCBtZXNzYWdlID0gJyc7XG4gICAgaWYgKGVycm9yLmVycm9yLmRlc2NyaXB0aW9uKSB7XG4gICAgICBtZXNzYWdlID0gZXJyb3IuZXJyb3IuZGVzY3JpcHRpb247XG4gICAgfSBlbHNlIGlmIChlcnJvci5lcnJvci5yZXNwb25zZU1lc3NhZ2UpIHtcbiAgICAgIG1lc3NhZ2UgPSBlcnJvci5lcnJvci5yZXNwb25zZU1lc3NhZ2U7XG4gICAgfSBlbHNlIGlmIChlcnJvci5lcnJvci5tZXNzYWdlKSB7XG4gICAgICBtZXNzYWdlID0gZXJyb3IuZXJyb3IubWVzc2FnZTtcbiAgICB9IGVsc2UgaWYgKGVycm9yLm1lc3NhZ2UpIHtcbiAgICAgIG1lc3NhZ2UgPSBlcnJvci5tZXNzYWdlO1xuICAgIH0gZWxzZSB7XG4gICAgICBtZXNzYWdlID0gbXNncy5hdXRoX2ludGVyY2VwdG9yLm1lc3NhZ2U7XG4gICAgfVxuICAgIHRoaXMuZGlhbG9nLm9wZW4oQWxlcnRDb21wb25lbnQsIHtcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcbiAgICAgIGRhdGE6IHsgdGl0bGU6IG1zZ3MuYXV0aF9pbnRlcmNlcHRvci50aXRsZSwgbWVzc2FnZSwgaWNvbjogJ3dhcm4nLCBva1RleHQ6IG1zZ3MuYXV0aF9pbnRlcmNlcHRvci5hY2NlcHRfdGV4dCB9XG4gICAgfSk7XG4gIH1cblxuICBzaG93U25hY2tFcnJvcihtZXNzYWdlOiBhbnksIHBhbmVsQ2xhc3M6IGFueVtdID0gW10pOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZyhtZXNzYWdlKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc25hY2tCYXIub3BlbihtZXNzYWdlLCB1bmRlZmluZWQsIHtcbiAgICAgICAgZHVyYXRpb246IDUwMDAsXG4gICAgICAgIHBhbmVsQ2xhc3MsXG4gICAgICAgIHZlcnRpY2FsUG9zaXRpb246ICd0b3AnXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHNldEludGVyY2VwdG9yTWVzc2FnZXMobWVzc2FnZTogYW55KTogdm9pZCB7XG4gICAgdGhpcy5pbnRlcmNlcHRvck1lc3NhZ2VzID0gbWVzc2FnZTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGluZXMtcGVyLWZ1bmN0aW9uXG4gIGdldEludGVyY2VwdG9yTWVzc2FnZXMoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuaW50ZXJjZXB0b3JNZXNzYWdlcykge1xuICAgICAgbGV0IGxhbmcgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oJ0xBTkcnKTtcbiAgICAgIGlmICghbGFuZykge1xuICAgICAgICBjb25zdCB1c2VyTGFuZyA9IG5hdmlnYXRvci5sYW5ndWFnZTtcbiAgICAgICAgbGFuZyA9IHVzZXJMYW5nLnNwbGl0KCctJylbMF07XG4gICAgICB9XG4gICAgICBjb25zdCBtZXNzYWdlc0VuID0ge1xuICAgICAgICBhdXRoX2ludGVyY2VwdG9yOiB7XG4gICAgICAgICAgc2Vzc2lvbl9sb3N0OiAnU2Vzc2lvbiBsb3N0LCB5b3UgaGF2ZSB0byBsb2dpbiBhZ2Fpbi4nLFxuICAgICAgICAgIG5vdF9mb3VuZDogJ1Jlc291cmNlIG5vdCBmb3VuZCcsXG4gICAgICAgICAgdGl0bGU6ICdXZSBhcmUgc29ycnknLFxuICAgICAgICAgIG1lc3NhZ2U6ICdXZSBoYWQgYSBwcm9ibGVtIHRyeWluZyB0byBwcm9jZXNzIHlvdXIgcmVxdWVzdC4nLFxuICAgICAgICAgIGNvZGU6ICdDb2RlJyxcbiAgICAgICAgICB1bmF2YWlsYWJsZTogJ1NlcnZpY2UgdW5hdmFpbGFibGUsIHBsZWFzZSB0cnkgYWdhaW4gaW4gYSBmZXcgbWludXRlcy4nLFxuICAgICAgICAgIGNvbm5lY3Rpb25fZXJyb3I6ICdDb3VsZCBub3QgY29ubmVjdCB0byBzZXJ2ZXIsIHBsZWFzZSBjaGVjayB5b3VyIG5ldHdvcmsgY29ubmVjdGlvbi4nLFxuICAgICAgICAgIGFjY2VwdF90ZXh0OiAnT0snLFxuICAgICAgICAgIGNhbmNlbF90ZXh0OiAnQ2FuY2VsJ1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgbWVzc2FnZXNFcyA9IHtcbiAgICAgICAgYXV0aF9pbnRlcmNlcHRvcjoge1xuICAgICAgICAgIHNlc3Npb25fbG9zdDogJ1N1IHNlc2nDs24gZXhwaXLDsywgZGViZSBpbmljaWFyIHNlc2nDs24gbnVldmFtZW50ZS4nLFxuICAgICAgICAgIG5vdF9mb3VuZDogJ1JlY3Vyc28gbm8gZW5jb250cmFkbycsXG4gICAgICAgICAgdGl0bGU6ICdMbyBzZW50aW1vcycsXG4gICAgICAgICAgbWVzc2FnZTogJ1R1dmltb3MgdW4gcHJvYmxlbWEgYWwgdHJhdGFyIGRlIHByb2Nlc2FyIHN1IHNvbGljaXR1ZC4nLFxuICAgICAgICAgIGNvZGU6ICdDw7NkaWdvJyxcbiAgICAgICAgICB1bmF2YWlsYWJsZTogJ1NlcnZpY2lvIG5vIGRpc3BvbmlibGUsIGludMOpbnRlbG8gZGUgbnVldm8gZW4gdW5vcyBtaW51dG9zLicsXG4gICAgICAgICAgY29ubmVjdGlvbl9lcnJvcjogJ05vIHNlIHB1ZG8gY29uZWN0YXIgYWwgc2Vydmlkb3IsIHZlcmlmaXF1ZSBzdSBjb25leGnDs24gZGUgcmVkLicsXG4gICAgICAgICAgYWNjZXB0X3RleHQ6ICdBY2VwdGFyJyxcbiAgICAgICAgICBjYW5jZWxfdGV4dDogJ0NhbmNlbGFyJ1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgaWYgKGxhbmcgJiYgbGFuZyA9PT0gJ2VzJykge1xuICAgICAgICB0aGlzLmludGVyY2VwdG9yTWVzc2FnZXMgPSBtZXNzYWdlc0VzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5pbnRlcmNlcHRvck1lc3NhZ2VzID0gbWVzc2FnZXNFbjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaW50ZXJjZXB0b3JNZXNzYWdlcztcbiAgfVxuXG5cbiAgcmVnaXN0ZXJMb2coZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlLCByZXF1ZXN0OiBIdHRwUmVxdWVzdDxhbnk+KTogdm9pZCB7XG4gICAgY29uc3QgdSA9IHRoaXMuYXV0aC5nZXRVc2VyZGF0YSgpO1xuICAgIGNvbnN0IHBhcmFtOiBGcm9udEVuZEV4Y2VwdGlvbiA9IHtcbiAgICAgIGh0dHBTdGF0dXM6IGVycm9yLnN0YXR1cyxcbiAgICAgIGh0dHBTdGF0dXNUZXh0OiBlcnJvci5zdGF0dXNUZXh0LFxuICAgICAgZXJyb3JNZXNzYWdlOiBlcnJvci5tZXNzYWdlLFxuICAgICAgY3VycmVudFVybDogd2luZG93LmxvY2F0aW9uLmhyZWYsXG4gICAgICByZXF1ZXN0VXJsOiByZXF1ZXN0LnVybFdpdGhQYXJhbXMgPyByZXF1ZXN0LnVybFdpdGhQYXJhbXMgOiB1bmRlZmluZWQsXG4gICAgICByZXF1ZXN0Qm9keTogcmVxdWVzdC5ib2R5ID8gSlNPTi5zdHJpbmdpZnkodGhpcy5vYmZ1c2NhdGVEYXRhKHJlcXVlc3QuYm9keSkpIDogdW5kZWZpbmVkLFxuICAgICAgdXNlcklkOiB1ID8gdS51c2VySWQgOiB1bmRlZmluZWQsXG4gICAgICBhcHBsaWNhdGlvbklkOiB0aGlzLmFwcGxpY2F0aW9uSWQsXG4gICAgICByZXF1ZXN0RGF0ZTogbmV3IERhdGUoKVxuICAgIH07XG4gICAgdGhpcy5hdXRoLnJlZ2lzdGVyRXhjZXB0aW9uKHBhcmFtKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdyZWdpc3RlckV4Y2VwdGlvbicsIHJlc3BvbnNlKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ3JlZ2lzdGVyRXhjZXB0aW9uJywgZXJyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgb2JmdXNjYXRlRGF0YShkYXRhOiBhbnkpOiBhbnkge1xuICAgIGNvbnN0IHNlbnNpdGl2ZUtleXMgPSBbJ3Bhc3N3b3JkJywgJ2NhcmQnLCAnY2FyZG51bWJlcicsICd0b2tlbiddO1xuICAgIGNvbnN0IG9iZnVzY2F0ZUhhbmRsZSA9IChpbnB1dDogYW55KTogYW55ID0+IHtcbiAgICAgIC8vIFNpIGVzIGFycmF5IGl0ZXJhIHVubyBwb3IgdW5vXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShpbnB1dCkpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0Lm1hcChpdGVtID0+IG9iZnVzY2F0ZUhhbmRsZShpdGVtKSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNpIGVzIG9iamV0byB2YWxpZGEgc2kgZWwgYXRyaWJ1dG8gZXMgc3RyaW5nIHUgb2JqZWN0LCBsbyBkZW1hcyBsbyBzYWx0YVxuICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ29iamVjdCcgJiYgaW5wdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCByZXN1bHQ6IGFueSA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhpbnB1dCkpIHtcbiAgICAgICAgICBjb25zdCBsb3dlcktleSA9IGtleS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gaW5wdXRba2V5XTtcbiAgICAgICAgICBpZiAoc2Vuc2l0aXZlS2V5cy5pbmNsdWRlcyhsb3dlcktleSkgJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykgeyAvLyBLZXkgc3RyaW5nXG4gICAgICAgICAgICByZXN1bHRba2V5XSA9ICcqKioqKioqKionOyAvL2J0b2EodmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JykgeyAvLyBLZXkgb2JqZWN0IC0+IGJ1c2NhIGVuIG9iamV0byBhbmlkYWRvXG4gICAgICAgICAgICByZXN1bHRba2V5XSA9IG9iZnVzY2F0ZUhhbmRsZSh2YWx1ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdFtrZXldID0gdmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gaW5wdXQ7XG4gICAgfTtcbiAgICByZXR1cm4gb2JmdXNjYXRlSGFuZGxlKGRhdGEpO1xuICB9XG5cbn1cbiJdfQ==
|
|
@@ -674,8 +674,10 @@ class MessagesService {
|
|
|
674
674
|
console.log(res);
|
|
675
675
|
const loginUrl = res.data;
|
|
676
676
|
const url = window.location.href;
|
|
677
|
+
const urlObj = new URL(url);
|
|
678
|
+
urlObj.searchParams.delete('code');
|
|
677
679
|
if (url.indexOf(loginUrl) < 0) {
|
|
678
|
-
window.location.href = loginUrl + '?continue=' + encodeURIComponent(
|
|
680
|
+
window.location.href = loginUrl + '?continue=' + encodeURIComponent(urlObj.toString());
|
|
679
681
|
}
|
|
680
682
|
}, (err) => {
|
|
681
683
|
console.error(err);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ssi-security-commons.mjs","sources":["../../../projects/ssi-security-commons/src/lib/ssi-security-commons.service.ts","../../../projects/ssi-security-commons/src/lib/ssi-security-commons.component.ts","../../../projects/ssi-security-commons/src/lib/services/crypto.service.ts","../../../projects/ssi-security-commons/src/lib/alert/alert.component.ts","../../../projects/ssi-security-commons/src/lib/alert/alert.component.html","../../../projects/ssi-security-commons/src/lib/shared/constants.ts","../../../projects/ssi-security-commons/src/lib/services/jwt.service.ts","../../../projects/ssi-security-commons/src/lib/services/session.service.ts","../../../projects/ssi-security-commons/src/lib/services/messages.service.ts","../../../projects/ssi-security-commons/src/lib/services/user-event.service.ts","../../../projects/ssi-security-commons/src/lib/ssi-security-commons.module.ts","../../../projects/ssi-security-commons/src/lib/services/hybrid-encryption.service.ts","../../../projects/ssi-security-commons/src/lib/services/auth-interceptor.service.ts","../../../projects/ssi-security-commons/src/lib/services/web-authn.service.ts","../../../projects/ssi-security-commons/src/public-api.ts","../../../projects/ssi-security-commons/src/ssi-security-commons.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SsiSecurityCommonsService {\n\n}\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'lib-ssi-security-commons',\n template: ` <p>ssi-security-commons works!</p>\n `,\n styles: [\n ]\n})\nexport class SsiSecurityCommonsComponent {\n\n}\n","import { Injectable } from '@angular/core';\nimport * as CryptoJS from 'crypto-js';\n\n@Injectable()\nexport class CryptoService {\n\n private configuration: any;\n private key: any;\n private secret = '&E)H@McQfThWmZq4';\n\n constructor() {\n this.configuration = {\n mode: CryptoJS.mode.ECB\n };\n const hash = CryptoJS.SHA1(this.secret);\n this.key = CryptoJS.lib.WordArray.create(hash.words.slice(0, 16 / 4));\n }\n\n encrypt(text: string): string {\n if (!text) {return '';}\n return CryptoJS.AES.encrypt(text, this.key, this.configuration).toString();\n }\n\n decrypt(text: string): string {\n if (!text) {return '';}\n return CryptoJS.AES.decrypt(text, this.key, this.configuration).toString(CryptoJS.enc.Utf8);\n }\n\n encryptWithSecret(text: string, secret: string): string {\n const hash = CryptoJS.SHA1(secret);\n const key = CryptoJS.lib.WordArray.create(hash.words.slice(0, 16 / 4));\n return CryptoJS.AES.encrypt(text, key, this.configuration).toString();\n }\n\n decryptWithSecret(text: string, secret: string): string {\n const hash = CryptoJS.SHA1(secret);\n const key = CryptoJS.lib.WordArray.create(hash.words.slice(0, 16 / 4));\n return CryptoJS.AES.decrypt(text, key, this.configuration).toString(CryptoJS.enc.Utf8);\n }\n\n}\n","import { Component, Inject } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\n\nexport interface DialogData {\n title?: string;\n icon?: string;\n type?: string;\n message?: string;\n okText?: string;\n cancelText?: string;\n}\n\n@Component({\n selector: 'lib-app-alert',\n templateUrl: './alert.component.html',\n styleUrls: ['./alert.component.scss']\n})\nexport class AlertComponent {\n\n constructor(\n public dialogRef: MatDialogRef<AlertComponent>,\n @Inject(MAT_DIALOG_DATA) public data: DialogData\n ) { }\n\n onConfirm(): void {\n this.dialogRef.close(true);\n }\n\n onCancel(): void {\n this.dialogRef.close(null);\n }\n}\n","<div class=\"sec-alert-icon\" *ngIf=\"data.icon==='warn'\">\n <svg width=\"48\" height=\"49\" viewBox=\"0 0 48 49\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M24 13.5C24.69 13.5 25.25 14.06 25.25 14.75V27.25C25.25 27.5815 25.1183 27.8995 24.8839 28.1339C24.6495 28.3683 24.3315 28.5 24 28.5C23.6685 28.5 23.3505 28.3683 23.1161 28.1339C22.8817 27.8995 22.75 27.5815 22.75 27.25V14.75C22.75 14.06 23.31 13.5 24 13.5ZM24 34.5C24.5304 34.5 25.0391 34.2893 25.4142 33.9142C25.7893 33.5391 26 33.0304 26 32.5C26 31.9696 25.7893 31.4609 25.4142 31.0858C25.0391 30.7107 24.5304 30.5 24 30.5C23.4696 30.5 22.9609 30.7107 22.5858 31.0858C22.2107 31.4609 22 31.9696 22 32.5C22 33.0304 22.2107 33.5391 22.5858 33.9142C22.9609 34.2893 23.4696 34.5 24 34.5ZM4 24.5C4 13.454 12.954 4.5 24 4.5C35.046 4.5 44 13.454 44 24.5C44 35.546 35.046 44.5 24 44.5C12.954 44.5 4 35.546 4 24.5ZM24 7C14.335 7 6.5 14.835 6.5 24.5C6.5 34.165 14.335 42 24 42C33.665 42 41.5 34.165 41.5 24.5C41.5 14.835 33.665 7 24 7Z\" fill=\"#FF4021\"/>\n </svg>\n</div>\n<h1 mat-dialog-title class=\"sec-alert-title\">{{data.title?data.title:'Alert'}}</h1>\n<div mat-dialog-content class=\"alert-min-width sec-alert-content\">\n <div>\n {{data.message}}\n </div>\n</div>\n<div class=\"sec-alert-actions\"> \n <button mat-flat-button color=\"primary\" class=\"sec-alert-ok\" (click)=\"onConfirm()\">{{data.okText ? data.okText : 'OK'}}</button>\n <button mat-flat-button class=\"sec-alert-cancel\" (click)=\"onCancel()\" *ngIf=\"data.cancelText\">{{data.cancelText ? data.cancelText : 'Cancel'}}</button>\n</div>\n","export const TOKEN = 'TOKEN';\nexport const REFRESH_TOKEN = 'REFRESH_TOKEN';\nexport const USERDATA = 'USERDATA';\nexport const LANG = 'LANG';\n","/* eslint-disable */\nimport { Injectable } from '@angular/core';\n\n@Injectable()\nexport class JwtService {\n\n public decodeTokenOld(token: string) {\n const _decodeToken = (token: string) => {\n try {\n return JSON.parse(atob(token));\n } catch {\n return;\n }\n };\n return token\n .split('.')\n .map(token => _decodeToken(token))\n .reduce((acc, curr) => {\n if (!!curr) acc = { ...acc, ...curr };\n return acc;\n }, Object.create(null));\n }\n\n public decodeToken(token: string) {\n const payload = token.split('.')[1];\n // Add padding if needed\n const base64 = payload.replace(/-/g, '+').replace(/_/g, '/');\n const padded = base64.padEnd(base64.length + (4 - base64.length % 4) % 4, '=');\n // Decode Base64 to binary string\n const binary = atob(padded);\n // Convert binary string to UTF-8 correctly\n const utf8String = decodeURIComponent(\n Array.from(binary)\n .map(c => '%' + c.charCodeAt(0).toString(16).padStart(2, '0'))\n .join('')\n );\n // Parse JSON payload\n return JSON.parse(utf8String);\n }\n\n}\n","/* eslint-disable max-lines-per-function */\n/* eslint-disable arrow-body-style */\n/* eslint-disable @typescript-eslint/naming-convention */\nimport { Inject, Injectable } from '@angular/core';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { FrontEndException, UserData } from '../user.model';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { JwtService } from './jwt.service';\nimport { CryptoService } from './crypto.service';\nimport { REFRESH_TOKEN, TOKEN, USERDATA } from '../shared/constants';\n\n\n@Injectable()\nexport class SessionService {\n\n userdata: UserData | undefined;\n token: string | undefined;\n refreshToken: string | undefined;\n endPoint: string;\n loginUrl = 'http://localhost:4200/login';\n applicationId: any;\n environment: any;\n\n constructor(private http: HttpClient,\n @Inject('environment') environment: any,\n private cryptoService: CryptoService,\n private jwtService: JwtService) {\n this.endPoint = environment.endPointCore;\n this.applicationId = environment.applicationId;\n this.environment = environment;\n }\n\n public buildUserdataFromToken(token: string): any {\n const tokenData = this.jwtService.decodeToken(token);\n const userData: UserData = {\n givenName: tokenData.given_name,\n familyName: tokenData.family_name,\n name: tokenData.name,\n roles: tokenData.realm_access.roles,\n userId: tokenData.sub,\n username: tokenData.preferred_username,\n email: tokenData.email,\n emailVerified: tokenData.email_verified,\n countryCode: tokenData.country_code,\n partyId: tokenData.party_id\n };\n return userData;\n }\n\n public async reviewSessionData(): Promise<any> {\n const value = await this.checkSessionData() as any;\n console.log(`async result: ${value}`);\n return value;\n }\n\n public setUserdata(userdata: any): void {\n this.userdata = userdata;\n }\n\n public setTokens(token: any, refreshToken: any): void {\n this.token = token;\n this.refreshToken = refreshToken;\n }\n\n public getUserdata(): UserData | undefined {\n return this.userdata;\n }\n\n public setRefreshToken(refreshToken: any): void {\n this.refreshToken = refreshToken;\n this.saveStorageData(REFRESH_TOKEN, refreshToken);\n }\n\n public getRefreshToken(): string | undefined {\n return this.refreshToken;\n }\n\n public setToken(token: any): any {\n this.token = token;\n this.saveStorageData(TOKEN, token);\n }\n\n public getToken(): any {\n return this.token;\n }\n\n public destroyCredentials(): void {\n this.token = undefined;\n this.refreshToken = undefined;\n this.deleteStorageData(TOKEN);\n this.deleteStorageData(REFRESH_TOKEN);\n }\n\n public destroyUserData(): void {\n this.userdata = undefined;\n this.deleteStorageData(USERDATA);\n }\n\n public saveCredentials(token: any, refreshToken: any): void {\n this.token = token;\n this.refreshToken = refreshToken;\n this.saveStorageData(TOKEN, token);\n this.saveStorageData(REFRESH_TOKEN, refreshToken);\n this.saveUserData(this.buildUserdataFromToken(token));\n }\n\n public saveUserData(userData: any): void {\n this.userdata = userData;\n this.saveStorageData(USERDATA, JSON.stringify(userData));\n }\n\n public isLoggedIn(): boolean {\n return !!this.userdata;\n }\n\n logout(): Promise<any> {\n let clientId = this.environment.authClient;\n if (this.refreshToken) {\n const decoded = this.jwtService.decodeToken(this.refreshToken);\n clientId = decoded.azp;\n }\n return new Promise((resolve, reject) => {\n this.logoutApiClient(clientId).subscribe(res => {\n console.log(res);\n this.destroyCredentials();\n this.destroyUserData();\n this.goToLogin();\n resolve(null);\n }, (err) => {\n this.destroyCredentials();\n this.destroyUserData();\n console.error(err);\n reject(err);\n });\n });\n }\n\n getNewToken(refreshToken: string): any {\n console.log('getNewToken');\n const body = 'grant_type=refresh_token' + '&refresh_token=' + refreshToken + '&client_id=' + this.environment.authClient;\n\n const headers = new HttpHeaders().set('Content-Type', 'application/x-www-form-urlencoded');\n return this.http.post<any>(`${this.environment.authEndPoint}/realms/${this.environment.authRealm}/protocol/openid-connect/token`,\n body, {headers})\n .pipe(\n map(res => res));\n }\n\n getNewTokenClient(refreshToken: string, clientId: string): any {\n console.log('getNewToken');\n const body = 'grant_type=refresh_token' + '&refresh_token=' + refreshToken + '&client_id=' + clientId;\n\n const headers = new HttpHeaders().set('Content-Type', 'application/x-www-form-urlencoded');\n return this.http.post<any>(`${this.environment.authEndPoint}/realms/${this.environment.authRealm}/protocol/openid-connect/token`,\n body, {headers})\n .pipe(\n map(res => res));\n }\n\n getTokenClientCode(refreshToken: string, clientId: string): Observable<any> {\n console.log('getNewToken');\n const body = 'grant_type=refresh_token' + '&refresh_token=' + refreshToken + '&client_id=' + clientId;\n\n const headers = new HttpHeaders().set('Content-Type', 'application/x-www-form-urlencoded');\n return this.http.post<any>(`${this.environment.authEndPoint}/realms/${this.environment.authRealm}/protocol/openid-connect/token`,\n body, {headers})\n .pipe(\n map(res => res));\n }\n\n\n getLoginUrl(): Observable<any> {\n return this.http.get<any>(this.endPoint + '/auth/login/url/'+this.environment.authClient)\n .pipe(\n map(res => res));\n }\n\n getHomeUrl(): Observable<any> {\n return this.http.get<any>(this.endPoint + '/auth/home/url/'+this.environment.authClient)\n .pipe(\n map(res => res));\n }\n\n logoutApi(): Observable<any> {\n const body = 'refresh_token=' + this.refreshToken + '&client_id=' + this.environment.authClient;\n const headers = new HttpHeaders().set('Content-Type', 'application/x-www-form-urlencoded');\n return this.http.post<any>(`${this.environment.authEndPoint}/realms/${this.environment.authRealm}/protocol/openid-connect/logout`,\n body, {headers})\n .pipe(\n map(res => res));\n }\n\n logoutApiClient(clientId: string): Observable<any> {\n const body = 'refresh_token=' + this.refreshToken + '&client_id=' + clientId;\n const headers = new HttpHeaders().set('Content-Type', 'application/x-www-form-urlencoded');\n return this.http.post<any>(`${this.environment.authEndPoint}/realms/${this.environment.authRealm}/protocol/openid-connect/logout`,\n body, {headers})\n .pipe(\n map(res => res));\n }\n\n goToLogin(): void {\n this.getLoginUrl().subscribe(res => {\n console.log(res);\n const loginUrl = res.data;\n window.location.href = loginUrl;\n }, (err) => {\n console.error(err);\n });\n }\n\n public loadSessionData(): void {\n let data;\n let token;\n let refreshToken;\n if (this.environment.production) {\n const u = this.cryptoService.encrypt(USERDATA);\n const t = this.cryptoService.encrypt(TOKEN);\n const r = this.cryptoService.encrypt(REFRESH_TOKEN);\n data = window.localStorage.getItem(u);\n token = window.localStorage.getItem(t);\n refreshToken = window.localStorage.getItem(r);\n if (data && token && refreshToken) {\n data = this.cryptoService.decrypt(data);\n token = this.cryptoService.decrypt(token);\n refreshToken = this.cryptoService.decrypt(refreshToken);\n }\n } else {\n data = window.localStorage.getItem(USERDATA);\n token = window.localStorage.getItem(TOKEN);\n refreshToken = window.localStorage.getItem(REFRESH_TOKEN);\n }\n if (data && token && refreshToken) {\n const user = JSON.parse(data);\n this.setTokens(token, refreshToken);\n this.setUserdata(user);\n }\n }\n\n userHasOptionsInApp(userId: any, applicationId: any): Observable<any> {\n return this.http.get<any>(this.endPoint + `/security/option/${applicationId}/${userId}`)\n .pipe(\n map(res => res));\n }\n\n checkAppPermissions(): Promise<any> {\n const promise = new Promise((resolve, reject) => {\n console.log(this.userdata?.userId, this.applicationId);\n if (this.applicationId) {\n this.userHasOptionsInApp(this.userdata?.userId, this.applicationId).subscribe(res => {\n console.log(res);\n if (res.data) {\n resolve('ok');\n } else {\n this.getHomeUrl().subscribe(res1 => {\n console.log(res1);\n const homeUrl = res1.data;\n window.location.href = homeUrl;\n reject('nok');\n }, (err) => {\n console.error(err);\n reject('nok');\n });\n }\n }, (err) => {\n console.error(err);\n reject('nok');\n });\n } else {\n resolve('ok');\n }\n });\n return promise;\n }\n\n\n // eslint-disable-next-line max-len\n public getOptionsUser(applicationId: number | null, type: string | null, language: string | null, entityCode: string | null, parentOptionId: number | null, includeData: boolean | null): Observable<any> {\n const param = {\n userId: this.userdata?.userId,\n applicationId,\n type,\n language,\n entityCode,\n parentOptionId,\n includeData\n };\n return this.http.post<any>(this.endPoint + '/security/option/user', param)\n .pipe(\n map(res => res));\n }\n\n registerException(param: FrontEndException): Observable<any> {\n const headers = new HttpHeaders().set('skipError', 'true');\n return this.http.post<any>(this.endPoint + '/auth/exception/log', param, {headers})\n .pipe(\n map(res => res));\n }\n\n saveStorageData(key: string, value: string): void {\n if (this.environment.production) {\n const k = this.cryptoService.encrypt(key);\n const v = this.cryptoService.encrypt(value);\n window.localStorage.setItem(k, v);\n } else {\n window.localStorage.setItem(key, value);\n }\n }\n\n deleteStorageData(key: string): void {\n if (this.environment.production) {\n const k = this.cryptoService.encrypt(key);\n window.localStorage.removeItem(k);\n } else {\n window.localStorage.removeItem(key);\n }\n }\n\n getStorageData(key: string): string | null {\n let res: string | null;\n if (this.environment.production) {\n const k = this.cryptoService.encrypt(key);\n const v = window.localStorage.getItem(k);\n if (v) {\n res = this.cryptoService.decrypt(v);\n return res;\n } else {\n res = null;\n }\n } else {\n res = window.localStorage.getItem(key);\n }\n return res;\n }\n\n\n public removeUrlData(): void {\n const url = new URL(window.location.href);\n const queryParams = url.searchParams;\n queryParams.delete('code');\n queryParams.delete('clientId');\n const newUrl = url.origin + url.pathname + '?' + queryParams.toString();\n window.history.replaceState({}, document.title, newUrl);\n }\n\n public checkSessionData(): Promise<any> {\n return this.checkSessionDataClient(null);\n }\n\n public checkSessionDataClient(clientId: any): Promise<any> {\n const promise = new Promise((resolve, reject) => {\n let data;\n let token;\n let refreshToken;\n\n const currentUrl = new URL(window.location.href);\n const code = currentUrl.searchParams.get('code');\n console.log('code', code);\n if (code) {\n const codeDecoded = this.getDecodedAuthCode(code);\n // console.log('code', codeDecoded);\n const cliId = currentUrl.searchParams.get('clientId');\n const decoded = this.jwtService.decodeToken(codeDecoded);\n let clientIdFinal = decoded.azp;\n if (clientId) {\n clientIdFinal = clientId;\n } else if (cliId) {\n clientIdFinal = cliId;\n }\n console.log('clientIdFinal', cliId);\n this.getTokenClientCode(codeDecoded, clientIdFinal).subscribe({\n next: (res) => {\n console.log(res);\n token = res.access_token;\n refreshToken = res.refresh_token;\n this.saveCredentials(token, refreshToken);\n this.checkAppPermissions().then((res1) => {\n console.log(res1);\n this.removeUrlData();\n resolve('OK');\n }, (err) => {\n console.error(err);\n reject(err);\n });\n },\n error: (err) => {\n console.error(err);\n reject(err);\n }\n });\n } else {\n data = this.getStorageData(USERDATA);\n token = this.getStorageData(TOKEN);\n refreshToken = this.getStorageData(REFRESH_TOKEN);\n if (data && token && refreshToken) {\n this.saveCredentials(token, refreshToken);\n this.checkAppPermissions().then((res1) => {\n console.log(res1);\n resolve('OK');\n }, (err) => {\n console.error(err);\n reject(err);\n });\n } else {\n const url = window.location.href;\n if (url.indexOf('/redirect')>-1) {\n resolve('OK');\n } else {\n this.destroyCredentials();\n this.destroyUserData();\n this.getLoginUrl().subscribe(res1 => {\n console.log(res1);\n this.loginUrl = res1.data;\n const urlObj = new URL(url);\n // Remove 'code' query param if it exists\n urlObj.searchParams.delete('code');\n if (url.indexOf('/login')<0 && url.indexOf('/forgot')<0 &&\n url.indexOf('/reset')<0 && url.indexOf('/verify')<0 &&\n url.indexOf('/sign_up')<0) {\n window.location.href = this.loginUrl + '?continue='+encodeURIComponent(urlObj.toString());\n }\n resolve('NOK');\n }, (err) => {\n console.error(err);\n reject(err);\n });\n }\n }\n }\n });\n return promise;\n }\n\n\n\n public checkSessionDataMicrofront(): Promise<any> {\n const promise = new Promise((resolve, reject) => {\n let data;\n let token;\n let refreshToken;\n if (this.environment.production) {\n const u = this.cryptoService.encrypt(USERDATA);\n const t = this.cryptoService.encrypt(TOKEN);\n const r = this.cryptoService.encrypt(REFRESH_TOKEN);\n const d1 = window.localStorage.getItem(u);\n const d2 = window.localStorage.getItem(t);\n const d3 = window.localStorage.getItem(r);\n if (d1 && d2 && d3) {\n data = this.cryptoService.decrypt(d1);\n token = this.cryptoService.decrypt(d2);\n refreshToken = this.cryptoService.decrypt(d3);\n }\n } else {\n data = window.localStorage.getItem(USERDATA);\n token = window.localStorage.getItem(TOKEN);\n refreshToken = window.localStorage.getItem(REFRESH_TOKEN);\n }\n if (data && token && refreshToken) {\n console.log('local session ok');\n this.saveCredentials(token, refreshToken);\n resolve('OK');\n } else {\n console.error('local session nok');\n reject('NOK');\n }\n });\n return promise;\n }\n\n public getAuthCode(): string {\n const enc = this.cryptoService.encrypt(this.refreshToken?this.refreshToken:'');\n return encodeURIComponent(enc);\n }\n\n private getDecodedAuthCode(code: string): string {\n const dec = decodeURIComponent(code);\n return this.cryptoService.decrypt(dec);\n }\n\n public refreshSession(): Promise<any> {\n const promise = new Promise((resolve, reject) => {\n const refreshToken = this.getRefreshToken();\n if (refreshToken) {\n const decoded = this.jwtService.decodeToken(refreshToken);\n this.getNewTokenClient(refreshToken, decoded.azp).subscribe({\n next: (res: any) => {\n console.log(res);\n this.setToken(res.access_token);\n this.setRefreshToken(res.refresh_token);\n this.saveCredentials(res.access_token, res.refresh_token);\n resolve('OK');\n },\n error: (err: any) => {\n console.error(err);\n reject(err);\n }\n });\n } else {\n reject('NOK');\n }\n });\n return promise;\n }\n\n}\n\n","/* eslint-disable @typescript-eslint/naming-convention */\n/* eslint-disable max-lines-per-function */\n/* eslint-disable quote-props */\nimport { HttpErrorResponse, HttpRequest } from '@angular/common/http';\nimport { Inject, Injectable } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatSnackBar } from '@angular/material/snack-bar';\n// import { Router } from '@angular/router';\nimport { AlertComponent } from '../alert/alert.component';\nimport { FrontEndException } from '../user.model';\nimport { SessionService } from './session.service';\n\n\n@Injectable()\nexport class MessagesService {\n\n private interceptorMessages: any;\n applicationId: any;\n\n constructor(\n public auth: SessionService,\n // private router: Router,\n private snackBar: MatSnackBar,\n public dialog: MatDialog,\n @Inject('environment') environment: any\n ) {\n this.applicationId = environment.applicationId;\n }\n\n\n // eslint-disable-next-line max-lines-per-function, complexity\n showErrorMessage(error: HttpErrorResponse, request: HttpRequest<any>): void {\n console.log('error: ', error);\n this.registerLog(error, request);\n const msgs: any = this.getInterceptorMessages();\n switch (error.status) {\n case 302: {\n this.messageSnackError(error);\n break;\n }\n case 400: {\n if (error.error.error === 'invalid_grant') {\n this.goNavigateLogin(msgs);\n } else {\n this.showSnackError(error.message, ['snack-error']);\n }\n break;\n }\n case 403: {\n this.goNavigateLogin(msgs);\n break;\n }\n case 404: {\n this.showSnackError(msgs.auth_interceptor.not_found, ['snack-error']);\n break;\n }\n case 409: {\n this.messageDialog(error, msgs);\n break;\n }\n case 412: {\n this.showSnackError(error.error.responseMessage ?? error.error.message, ['snack-error']);\n break;\n }\n case 422: {\n this.messageDialog(error, msgs);\n break;\n }\n case 428: {\n this.showSnackError(error.error.responseMessage ?? error.error.message, ['snack-error']);\n break;\n }\n case 500: {\n this.messageAlertDialog(error, msgs);\n break;\n }\n case 503: {\n this.showSnackError(msgs.auth_interceptor.unavailable, ['snack-error']);\n break;\n }\n case -1: {\n this.showSnackError(msgs.auth_interceptor.connection_error);\n break;\n }\n case 0: {\n this.showSnackError(msgs.auth_interceptor.connection_error);\n break;\n }\n }\n }\n\n messageSnackError(error: any): void {\n const errorMessage = error.error && error.error.responseMessage ? error.error.responseMessage :\n error.error.message ? error.error.message : error.message;\n this.showSnackError(errorMessage, ['snack-error']);\n }\n\n goNavigateLogin(msgs: any): void {\n // if (this.router.url !== '/login') {\n this.showSnackError(msgs.auth_interceptor.session_lost, ['snack-error']);\n // this.router.navigate(['/login']);\n this.auth.destroyCredentials();\n this.auth.getLoginUrl().subscribe(res => {\n console.log(res);\n const loginUrl = res.data;\n const url = window.location.href;\n if (url.indexOf(loginUrl) < 0) {\n window.location.href = loginUrl + '?continue=' + encodeURIComponent(url);\n }\n }, (err) => {\n console.error(err);\n });\n // }\n }\n\n messageAlertDialog(error: any, msgs: any): void {\n console.log(error);\n let message = '';\n if (error.error.description) {\n message = error.error.description;\n if (error.error.exception) { message = message + '\\n\\n' + msgs.auth_interceptor.code + ': ' + error.error.exception; }\n } else if (error.error.responseMessage) {\n message = error.error.responseMessage;\n if (error.error.exceptionId) { message = message + '\\n\\n' + msgs.auth_interceptor.code + ': ' + error.error.exceptionId; }\n } else if (error.error.message) {\n message = error.error.message;\n if (error.error.exceptionId) { message = message + '\\n\\n' + msgs.auth_interceptor.code + ': ' + error.error.exceptionId; }\n if (error.error.referenceError) { message = message + '\\n\\n' + msgs.auth_interceptor.code + ': ' + error.error.referenceError; }\n } else if (error.message) {\n message = error.message;\n if (error.error.exceptionId) { message = message + '\\n\\n' + msgs.auth_interceptor.code + ': ' + error.error.exceptionId; }\n } else {\n message = msgs.auth_interceptor.message;\n }\n this.dialog.open(AlertComponent, {\n disableClose: true,\n data: { title: msgs.auth_interceptor.title, message, icon: 'warn', okText: msgs.auth_interceptor.accept_text }\n });\n }\n\n messageDialog(error: any, msgs: any): void {\n console.log(error);\n let message = '';\n if (error.error.description) {\n message = error.error.description;\n } else if (error.error.responseMessage) {\n message = error.error.responseMessage;\n } else if (error.error.message) {\n message = error.error.message;\n } else if (error.message) {\n message = error.message;\n } else {\n message = msgs.auth_interceptor.message;\n }\n this.dialog.open(AlertComponent, {\n disableClose: true,\n data: { title: msgs.auth_interceptor.title, message, icon: 'warn', okText: msgs.auth_interceptor.accept_text }\n });\n }\n\n showSnackError(message: any, panelClass: any[] = []): void {\n console.log(message);\n setTimeout(() => {\n this.snackBar.open(message, undefined, {\n duration: 5000,\n panelClass,\n verticalPosition: 'top'\n });\n });\n }\n\n setInterceptorMessages(message: any): void {\n this.interceptorMessages = message;\n }\n\n // eslint-disable-next-line max-lines-per-function\n getInterceptorMessages(): string {\n if (!this.interceptorMessages) {\n let lang = window.localStorage.getItem('LANG');\n if (!lang) {\n const userLang = navigator.language;\n lang = userLang.split('-')[0];\n }\n const messagesEn = {\n auth_interceptor: {\n session_lost: 'Session lost, you have to login again.',\n not_found: 'Resource not found',\n title: 'We are sorry',\n message: 'We had a problem trying to process your request.',\n code: 'Code',\n unavailable: 'Service unavailable, please try again in a few minutes.',\n connection_error: 'Could not connect to server, please check your network connection.',\n accept_text: 'OK',\n cancel_text: 'Cancel'\n }\n };\n const messagesEs = {\n auth_interceptor: {\n session_lost: 'Su sesión expiró, debe iniciar sesión nuevamente.',\n not_found: 'Recurso no encontrado',\n title: 'Lo sentimos',\n message: 'Tuvimos un problema al tratar de procesar su solicitud.',\n code: 'Código',\n unavailable: 'Servicio no disponible, inténtelo de nuevo en unos minutos.',\n connection_error: 'No se pudo conectar al servidor, verifique su conexión de red.',\n accept_text: 'Aceptar',\n cancel_text: 'Cancelar'\n }\n };\n if (lang && lang === 'es') {\n this.interceptorMessages = messagesEs;\n } else {\n this.interceptorMessages = messagesEn;\n }\n }\n return this.interceptorMessages;\n }\n\n\n registerLog(error: HttpErrorResponse, request: HttpRequest<any>): void {\n const u = this.auth.getUserdata();\n const param: FrontEndException = {\n httpStatus: error.status,\n httpStatusText: error.statusText,\n errorMessage: error.message,\n currentUrl: window.location.href,\n requestUrl: request.urlWithParams ? request.urlWithParams : undefined,\n requestBody: request.body ? JSON.stringify(this.obfuscateData(request.body)) : undefined,\n userId: u ? u.userId : undefined,\n applicationId: this.applicationId,\n requestDate: new Date()\n };\n this.auth.registerException(param).subscribe({\n next: (response) => {\n console.log('registerException', response);\n },\n error: (err: any) => {\n console.error('registerException', err);\n }\n });\n }\n\n private obfuscateData(data: any): any {\n const sensitiveKeys = ['password', 'card', 'cardnumber', 'token'];\n const obfuscateHandle = (input: any): any => {\n // Si es array itera uno por uno\n if (Array.isArray(input)) {\n return input.map(item => obfuscateHandle(item));\n }\n\n // Si es objeto valida si el atributo es string u object, lo demas lo salta\n if (typeof input === 'object' && input !== undefined) {\n const result: any = {};\n for (const key of Object.keys(input)) {\n const lowerKey = key.toLowerCase();\n const value = input[key];\n if (sensitiveKeys.includes(lowerKey) && typeof value === 'string') { // Key string\n result[key] = '*********'; //btoa(value);\n } else if (typeof value === 'object') { // Key object -> busca en objeto anidado\n result[key] = obfuscateHandle(value);\n } else {\n result[key] = value;\n }\n }\n return result;\n }\n return input;\n };\n return obfuscateHandle(data);\n }\n\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Inject, Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\n\n@Injectable()\nexport class UserEventService {\n\n endPoint: string;\n\n constructor(private http: HttpClient,\n @Inject('environment') environment: any) {\n this.endPoint = environment.endPointCore;\n }\n\n public registerUserEvent(eventType: string,\n optionId: number | null,\n entityType: string | null,\n entityId: string | null,\n paramsIn: string | null,\n paramsOut: string | null): Observable<any> {\n const param = {\n eventType,\n optionId,\n entityType,\n entityId,\n paramsIn,\n paramsOut\n };\n return this.http.post<any>(this.endPoint + '/security/user/event', param)\n .pipe(\n map((res: any) => res));\n }\n\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\nimport { CryptoService } from './services/crypto.service';\nimport { AlertComponent } from './alert/alert.component';\nimport { MessagesService } from './services/messages.service';\nimport { SessionService } from './services/session.service';\nimport { SsiSecurityCommonsComponent } from './ssi-security-commons.component';\nimport { MatButtonModule } from '@angular/material/button';\nimport { JwtService } from './services/jwt.service';\nimport { CommonModule } from '@angular/common';\nimport { UserEventService } from \"./services/user-event.service\";\n\n\n@NgModule({\n declarations: [\n SsiSecurityCommonsComponent,\n AlertComponent\n ],\n imports: [\n MatSnackBarModule,\n MatDialogModule,\n MatButtonModule,\n CommonModule\n ],\n exports: [\n SsiSecurityCommonsComponent\n ],\n providers: [\n MessagesService,\n SessionService,\n CryptoService,\n JwtService,\n UserEventService\n ]\n})\nexport class SsiSecurityCommonsModule {\n static forRoot(environment: any): ModuleWithProviders<SsiSecurityCommonsModule> {\n return {\n ngModule: SsiSecurityCommonsModule,\n providers: [{provide: 'environment', useValue: environment}]\n };\n }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class HybridEncryptionService {\n private publicKeyPem = `-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAydjMaPDQvcNCPsB3zmuA\nRyDw/eVPjH8eITcWq+TnmqW4FCxwTxAQQy8bEnO7HC8eUVaD8tlNaLVjiRRCo0+o\nJMDZC5S9aUGpz/Ueghp5aziu0abk7pZ+x/BrfpAN+7VteZh00d/YAtZlbQ6kHM44\noz2d7Fj1MPzB22ZoEnmcFqBlvsW8yblM38HEAKRXj9733XiayDoq6ivP046IFBpP\nCgg7kOLfOYMt7ZNkaKzDeYBfQAvhW+Nd6EN+8CCrI8//fnwRbrItzgR5KXwJ0F5T\nw6/YhIkJi7Ce6kR8D7aYdXNoRKzX5m+GxSkLtiMImHOnVWg+wo/lvCbLRWS+QQ14\npQIDAQAB\n-----END PUBLIC KEY-----`;\n private publicKey!: CryptoKey;\n\n constructor() {\n this.loadPublicKey();\n }\n\n /** Import RSA public key */\n private async loadPublicKey(): Promise<void> {\n const pemHeader = '-----BEGIN PUBLIC KEY-----';\n const pemFooter = '-----END PUBLIC KEY-----';\n const pemContents = this.publicKeyPem\n .replace(pemHeader, '')\n .replace(pemFooter, '')\n .replace(/\\s/g, '');\n\n const binaryDer = Uint8Array.from(atob(pemContents), c => c.charCodeAt(0));\n\n this.publicKey = await crypto.subtle.importKey(\n 'spki',\n binaryDer.buffer,\n {\n name: 'RSA-OAEP',\n hash: 'SHA-256'\n },\n true,\n ['encrypt']\n );\n }\n\n /** Generate a random AES key */\n private async generateAesKey(): Promise<CryptoKey> {\n return crypto.subtle.generateKey(\n { name: 'AES-GCM', length: 256 },\n true,\n ['encrypt', 'decrypt']\n );\n }\n\n /** Encrypt large data with AES and AES key with RSA */\n async encrypt(data: any): Promise<{ encryptedKey: string; encryptedData: string; iv: string }> {\n if (!this.publicKey) {\n await this.loadPublicKey();\n }\n\n // Convert payload to JSON + Uint8Array\n const encoder = new TextEncoder();\n const plainBytes = encoder.encode(JSON.stringify(data));\n\n // Generate AES key + IV\n const aesKey = await this.generateAesKey();\n const iv = crypto.getRandomValues(new Uint8Array(12)); // AES-GCM nonce\n\n // Encrypt data with AES\n const encryptedDataBuffer = await crypto.subtle.encrypt(\n { name: 'AES-GCM', iv },\n aesKey,\n plainBytes\n );\n\n // Export AES key\n const rawAesKey = await crypto.subtle.exportKey('raw', aesKey);\n\n // Encrypt AES key with RSA\n const encryptedKeyBuffer = await crypto.subtle.encrypt(\n { name: 'RSA-OAEP' },\n this.publicKey,\n rawAesKey\n );\n\n return {\n encryptedKey: this.arrayBufferToBase64(encryptedKeyBuffer),\n encryptedData: this.arrayBufferToBase64(encryptedDataBuffer),\n iv: this.arrayBufferToBase64(iv.buffer)\n };\n }\n\n /** Convert ArrayBuffer → Base64 */\n private arrayBufferToBase64(buffer: ArrayBuffer): string {\n return btoa(String.fromCharCode(...new Uint8Array(buffer)));\n }\n}\n","/* eslint-disable */\nimport { Inject, Injectable, Injector } from '@angular/core';\nimport {\n HttpRequest,\n HttpHandler,\n HttpEvent,\n HttpInterceptor,\n HttpErrorResponse,\n HttpResponse\n} from '@angular/common/http';\nimport { BehaviorSubject, from, Observable, throwError } from 'rxjs';\nimport { catchError, filter, map, switchMap, take, tap } from 'rxjs/operators';\nimport { MessagesService } from './messages.service';\nimport { CryptoService } from './crypto.service';\nimport { Router } from '@angular/router';\nimport { SessionService } from './session.service';\nimport { LANG, TOKEN } from '../shared/constants';\nimport { JwtService } from './jwt.service';\nimport { HybridEncryptionService } from './hybrid-encryption.service';\n\n\n@Injectable()\nexport class AuthInterceptor implements HttpInterceptor {\n\n private environment;\n\n constructor(private cryptoService: CryptoService, private hybridEncryptionService: HybridEncryptionService, @Inject('environment') environment: any) {\n console.log('AuthInterceptor constructor');\n this.environment = environment;\n }\n\n intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n\n let token;\n if(this.environment.production) {\n const t = this.cryptoService.encrypt(TOKEN);\n const to = window.localStorage.getItem(t);\n if (to) {\n token = this.cryptoService.decrypt(to);\n }\n } else {\n token = window.localStorage.getItem(TOKEN);\n }\n\n let encrypt = request.headers.get('encrypted');\n if(encrypt && encrypt === 'true'){\n let body = request.body;\n let bodyStr = JSON.stringify(body);\n var newBody = {\n encrypted: this.cryptoService.encrypt(bodyStr)\n }\n request = request.clone({\n body: newBody\n });\n }\n if (token) {\n request = request.clone({\n setHeaders: {\n Authorization: 'Bearer ' + token,\n }\n });\n }\n\n const l = window.localStorage.getItem(LANG);\n if (l && request.url.indexOf(this.environment.authEndPoint)<0) {\n request = request.clone({\n headers: request.headers.append('Language', l)\n });\n }\n\n const isEncrypted = request.headers.get('X-Encrypted');\n if (isEncrypted === 'true' && request.body) {\n return from(this.hybridEncryptionService.encrypt(request.body)).pipe(\n switchMap(encryptedPayload => {\n const newReq = request.clone({\n body: encryptedPayload\n });\n return next.handle(newReq);\n })\n );\n }\n\n return next.handle(request);\n }\n}\n\n\n@Injectable()\nexport class ResponseInterceptor implements HttpInterceptor {\n\n private messages: MessagesService | undefined;\n private isRefreshing = false;\n private refreshTokenSubject: BehaviorSubject<any> = new BehaviorSubject<any>(null);\n\n constructor(private injector: Injector,\n private router: Router,\n private cryptoService: CryptoService,\n private jwtService: JwtService,\n private sessionService: SessionService) {\n setTimeout(() => {\n this.messages = this.injector.get(MessagesService);\n })\n }\n\n intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n\n return next.handle(request).pipe(\n map((event: HttpEvent<any>) => {\n if (event instanceof HttpResponse) {\n let encrypt = request.headers.get('encrypted');\n if(encrypt && encrypt === 'true' && event.body.encrypted){\n event = event.clone({body: this.decryptBody(event.body)});\n }\n }\n return event;\n }),\n catchError(error => {\n if (error instanceof HttpErrorResponse) {\n console.error(error);\n let nerror = error;\n if (this.router.url != '/login' && this.router.url.indexOf('/login')<0) {\n if (nerror.status === 401) {\n return this.handle401Error(request, next);\n } else {\n let skipError = request.headers.get('skipError');\n if(skipError && skipError==='true'){\n return throwError(nerror);\n } else {\n this.messages?.showErrorMessage(nerror, request);\n }\n }\n } else {\n return throwError(nerror);\n }\n }\n })) as Observable<HttpEvent<any>>;\n }\n\n decryptBody(body: any): any {\n let encrypted = body.encrypted;\n let strJson = this.cryptoService.decrypt(encrypted);\n return JSON.parse(strJson);\n }\n\n\n private handle401Error(request: HttpRequest<any>, next: HttpHandler) {\n if (!this.isRefreshing) {\n this.isRefreshing = true;\n this.refreshTokenSubject.next(null);\n const refreshToken = this.sessionService.getRefreshToken();\n if (refreshToken){\n const decoded = this.jwtService.decodeToken(refreshToken);\n return this.sessionService.getNewTokenClient(refreshToken, decoded.azp).pipe(\n switchMap((res: any) => {\n console.log('refresh token response');\n console.log(res);\n this.isRefreshing = false;\n this.sessionService.setToken(res.access_token);\n this.sessionService.setRefreshToken(res.refresh_token);\n this.refreshTokenSubject.next(res.access_token);\n return next.handle(this.addTokenHeader(request, res.access_token));\n }),\n catchError((err) => {\n this.isRefreshing = false;\n this.sessionService.logout();\n this.goToLogin();\n return throwError(err);\n })\n );\n }\n } else {\n return this.refreshTokenSubject.pipe(\n filter(token => token !== null),\n take(1),\n switchMap((token) => next.handle(this.addTokenHeader(request, token)))\n );\n }\n }\n\n private addTokenHeader(request: HttpRequest<any>, token: string) {\n return request.clone({ headers: request.headers.set('Authorization', 'Bearer ' + token) });\n }\n\n private goToLogin(): void {\n this.sessionService.getLoginUrl().subscribe(res => {\n console.log(res);\n const loginUrl = res.data;\n const url = window.location.href;\n if (url.indexOf(loginUrl)<0) {\n window.location.href = loginUrl + '?continue='+encodeURIComponent(url);\n }\n }, (err) => {\n console.error(err);\n });\n }\n\n}\n\n\n\n\n","/* eslint-disable max-lines-per-function */\n/* eslint-disable prefer-const */\nimport { Inject, Injectable } from '@angular/core';\nimport { UserWebauthn } from '../user.model';\nimport { SessionService } from './session.service';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable, map } from 'rxjs';\nimport { MatSnackBar } from '@angular/material/snack-bar';\n\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class WebAuthnService {\n\n webAuthnAvailable = !!navigator.credentials && !!navigator.credentials.create;\n environment: any;\n\n public constructor(\n private sessionService: SessionService,\n private http: HttpClient,\n private snackBar: MatSnackBar,\n @Inject('environment') environment: any\n ) {\n this.environment = environment;\n }\n\n webAuthnSignup(user: UserWebauthn): Promise<any> {\n console.log('[webAuthnSignup]');\n const publicKeyCredentialCreationOptions: PublicKeyCredentialCreationOptions = {\n challenge: this.getChallenge(),\n rp: {\n name: 'WebAuthn',\n },\n user: {\n id: Uint8Array.from(user.id, c => c.charCodeAt(0)),\n name: user.email,\n displayName: user.email,\n },\n pubKeyCredParams: [{ alg: -7, type: 'public-key' }],\n authenticatorSelection: {\n authenticatorAttachment: 'platform',\n },\n timeout: 60000,\n attestation: 'direct'\n };\n\n return navigator.credentials.create({\n publicKey: publicKeyCredentialCreationOptions,\n });\n\n }\n\n webAuthnSignin(user: UserWebauthn): Promise<any> {\n console.log(user);\n /* {\n \"id\": \"b18ee077-f896-44f4-a2d4-3ac831eb1c90\",\n \"email\": \"test.user@email.com\",\n \"password\": \"\",\n \"credentials\": [\n [\n {\n \"id\": {},\n \"type\": \"public-key\"\n }\n ]\n ]\n } */\n let publicKeyCredentials = {\n challenge: this.getChallenge(),\n allowCredentials: user.credentials[0]\n };\n return navigator.credentials.get({ publicKey: publicKeyCredentials });\n }\n\n\n getChallenge(): Uint8Array {\n return Uint8Array.from('jEfcn1CsGFxBiXYtJMSGDycPqPoyFJ3Z', c => c.charCodeAt(0));\n }\n\n register(user: UserWebauthn, newCredentialInfo: any): Promise<any> {\n const promise = new Promise((resolve, reject) => {\n let enc = new TextDecoder('utf-8');\n let clientDataJSON = enc.decode(newCredentialInfo.response.clientDataJSON);\n console.log(clientDataJSON);\n let clientData = JSON.parse(clientDataJSON);\n console.log(clientData);\n const publicKey = this.arrayBufferToBase64Url(newCredentialInfo.rawId);\n let idList = [{\n // id: newCredentialInfo.rawId,\n id: publicKey,\n type: 'public-key'\n }];\n user.credentials.push(idList);\n console.log(user);\n this.addAttributeUser(user.id, 'webauthn_key', publicKey).subscribe({\n next: (res) => {\n console.log(res);\n resolve(res);\n },\n error: (err) => {\n console.error(err);\n reject(err);\n }\n });\n });\n return promise;\n }\n\n\n base64UrlToArrayBuffer(base64UrlString: string): ArrayBuffer {\n const base64String = base64UrlString.replace(/-/g, '+').replace(/_/g, '/');\n const paddedBase64String = base64String.padEnd(Math.ceil(base64String.length / 4) * 4, '=');\n const uint8Array = new Uint8Array(\n atob(paddedBase64String)\n .split('')\n .map((char) => char.charCodeAt(0))\n );\n return uint8Array.buffer;\n }\n\n arrayBufferToBase64Url(arrayBuffer: ArrayBuffer): string {\n const uint8Array = new Uint8Array(arrayBuffer);\n let base64String = btoa(String.fromCharCode.apply(null, Array.from(uint8Array)));\n base64String = base64String.replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/, '');\n return base64String;\n }\n\n\n signUp(): Promise<any> {\n const promise = new Promise((resolve, reject) => {\n if (this.webAuthnAvailable) {\n const userData = this.sessionService.getUserdata();\n if (userData) {\n let user = {\n id: userData?.userId,\n email: userData?.email,\n credentials: []\n };\n this.webAuthnSignup(user)\n .then((credential: PublicKeyCredential) => {\n console.log('credentials.create RESPONSE', credential);\n this.register(user, credential).then((res: any) => {\n console.log(res);\n this.showSnackBar(this.getMessage('signUpOk'), ['snack-success']);\n resolve(this.getMessage('signUpOk'));\n }).catch((err) => {\n console.error(err);\n this.showSnackBar(this.getMessage('signUpNok'), ['snack-error']);\n reject(this.getMessage('signUpNok'));\n });\n }).catch((error) => {\n console.error('credentials.create ERROR', error);\n this.showSnackBar(this.getMessage('signUpNok'), ['snack-error']);\n reject(this.getMessage('signUpNok'));\n });\n }\n } else {\n this.showSnackBar(this.getMessage('browserNok'), ['snack-error']);\n reject(this.getMessage('browserNok'));\n }\n });\n return promise;\n }\n\n\n signIn(): Promise<any> {\n const promise = new Promise((resolve, reject) => {\n if (this.webAuthnAvailable) {\n const userData = this.sessionService.getUserdata();\n if (userData) {\n let user = {\n id: userData?.userId,\n email: userData?.email,\n credentials: [{}]\n };\n\n this.getAttributeUser(user.id, 'webauthn_key').subscribe({\n next: (res) => {\n console.log(res);\n if (res.data && res.data.webauthn_key && res.data.webauthn_key.length > 0) {\n\n const cred = {\n id: this.base64UrlToArrayBuffer(res.data.webauthn_key[0]),\n type: 'public-key'\n };\n user.credentials.splice(0,1);\n user.credentials.push([cred]);\n\n this.webAuthnSignin(user).then((response) => {\n console.log('SUCCESSFULLY GOT AN ASSERTION!', response);\n resolve('ok');\n })\n .catch((error) => {\n console.error('FAIL', error);\n this.showSnackBar(this.getMessage('invalidCredentials'), ['snack-error']);\n reject(this.getMessage('invalidCredentials'));\n });\n } else {\n this.showSnackBar(this.getMessage('noCredentials'), ['snack-error']);\n reject(this.getMessage('noCredentials'));\n }\n },\n error: (err) => {\n console.error(err);\n this.showSnackBar(this.getMessage('errorRetrievingCredentials'), ['snack-error']);\n reject(this.getMessage('errorRetrievingCredentials'));\n }\n });\n }\n } else {\n this.showSnackBar(this.getMessage('browserNok'), ['snack-error']);\n reject(this.getMessage('browserNok'));\n }\n });\n return promise;\n }\n\n\n addAttributeUser(userId: any, code: any, value: any): Observable<any> {\n return this.http.post<any>(this.environment.endPoint + `/user/attribute/value/${userId}/${code}/${value}`,{})\n .pipe(\n map(res => res));\n }\n\n getAttributeUser(userId: any, code: any): Observable<any> {\n return this.http.get<any>(this.environment.endPoint + `/user/attribute/value/${userId}/${code}`)\n .pipe(\n map(res => res));\n }\n\n showSnackBar(message: any, panelClass: any[] = []): void {\n console.log(message);\n setTimeout(() => {\n this.snackBar.open(message, undefined, {\n duration: 5000,\n panelClass,\n verticalPosition: 'top'\n });\n });\n }\n\n getMessage(code: string): string {\n let msg = '';\n const lang = window.localStorage.getItem('LANG');\n const messagesEn: any = {\n signUpOk: 'Credentials registered successfully',\n signUpNok: 'A problem occurred while registering credentials',\n browserNok: 'The browser does not support this functionality',\n noCredentials: 'The user has no stored credentials',\n invalidCredentials: 'The credentials are invalid',\n errorRetrievingCredentials: 'There was a problem retrieving credentials',\n };\n const messagesEs: any = {\n signUpOk: 'Credenciales registradas exitosamente',\n signUpNok: 'Se produjo un problema al registrar las credenciales',\n browserNok: 'El navegador no soporta esta funcionalidad',\n noCredentials: 'El usuario no tiene credenciales almacenadas',\n invalidCredentials: 'Las credenciales no son válidas',\n errorRetrievingCredentials: 'Se produjo un problema al recuperar las credenciales',\n };\n if (lang && lang==='en') {\n msg = messagesEn[code];\n } else {\n msg = messagesEs[code];\n }\n return msg;\n }\n\n}\n","/*\n * Public API Surface of ssi-security-commons\n */\n\nexport * from './lib/ssi-security-commons.service';\nexport * from './lib/ssi-security-commons.component';\nexport * from './lib/ssi-security-commons.module';\nexport * from './lib/services/auth-interceptor.service';\nexport * from './lib/services/session.service';\nexport * from './lib/services/messages.service';\nexport * from './lib/services/web-authn.service';\nexport * from './lib/user.model';\nexport * from './lib/services/crypto.service';\nexport * from './lib/services/jwt.service';\nexport * from './lib/shared/constants';\nexport * from './lib/services/user-event.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.CryptoService","i3.JwtService","i3","i1.CryptoService","i4.JwtService","i5.SessionService","map"],"mappings":";;;;;;;;;;;;;;;;;MAKa,yBAAyB,CAAA;8GAAzB,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,cAFxB,MAAM,EAAA,CAAA,CAAA,EAAA;;2FAEP,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAHrC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;MCKY,2BAA2B,CAAA;8GAA3B,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAA3B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,2BAA2B,EAL5B,QAAA,EAAA,0BAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;AACT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,CAAA,EAAA;;2FAIU,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAPvC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,0BAA0B,EAC1B,QAAA,EAAA,CAAA;AACT,EAAA,CAAA,EAAA,CAAA;;;MCDU,aAAa,CAAA;AAMxB,IAAA,WAAA,GAAA;QAFQ,IAAM,CAAA,MAAA,GAAG,kBAAkB,CAAC;QAGlC,IAAI,CAAC,aAAa,GAAG;AACnB,YAAA,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG;SACxB,CAAC;QACF,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACxC,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;KACvE;AAED,IAAA,OAAO,CAAC,IAAY,EAAA;QAClB,IAAI,CAAC,IAAI,EAAE;AAAC,YAAA,OAAO,EAAE,CAAC;AAAC,SAAA;AACvB,QAAA,OAAO,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,QAAQ,EAAE,CAAC;KAC5E;AAED,IAAA,OAAO,CAAC,IAAY,EAAA;QAClB,IAAI,CAAC,IAAI,EAAE;AAAC,YAAA,OAAO,EAAE,CAAC;AAAC,SAAA;QACvB,OAAO,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;KAC7F;IAED,iBAAiB,CAAC,IAAY,EAAE,MAAc,EAAA;QAC5C,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnC,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AACvE,QAAA,OAAO,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,QAAQ,EAAE,CAAC;KACvE;IAED,iBAAiB,CAAC,IAAY,EAAE,MAAc,EAAA;QAC5C,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnC,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;QACvE,OAAO,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;KACxF;8GAlCU,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;kHAAb,aAAa,EAAA,CAAA,CAAA,EAAA;;2FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBADzB,UAAU;;;MCcE,cAAc,CAAA;IAEzB,WACS,CAAA,SAAuC,EACd,IAAgB,EAAA;QADzC,IAAS,CAAA,SAAA,GAAT,SAAS,CAA8B;QACd,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAY;KAC7C;IAEL,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;KAC5B;IAED,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;KAC5B;AAbU,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,8CAIf,eAAe,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAJd,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,cAAc,qDCjB3B,wlDAeA,EAAA,MAAA,EAAA,CAAA,wNAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,8DAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,eAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FDEa,cAAc,EAAA,UAAA,EAAA,CAAA;kBAL1B,SAAS;+BACE,eAAe,EAAA,QAAA,EAAA,wlDAAA,EAAA,MAAA,EAAA,CAAA,wNAAA,CAAA,EAAA,CAAA;;0BAQtB,MAAM;2BAAC,eAAe,CAAA;;;AErBpB,MAAM,KAAK,GAAG,QAAQ;AACtB,MAAM,aAAa,GAAG,gBAAgB;AACtC,MAAM,QAAQ,GAAG,WAAW;AAC5B,MAAM,IAAI,GAAG;;ACHpB;MAIa,UAAU,CAAA;AAEd,IAAA,cAAc,CAAC,KAAa,EAAA;AACjC,QAAA,MAAM,YAAY,GAAG,CAAC,KAAa,KAAI;YACrC,IAAI;gBACF,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAChC,aAAA;YAAC,MAAM;gBACN,OAAO;AACR,aAAA;AACH,SAAC,CAAC;AACF,QAAA,OAAO,KAAK;aACT,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,KAAK,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC;AACjC,aAAA,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAI;YACpB,IAAI,CAAC,CAAC,IAAI;gBAAE,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC;AACtC,YAAA,OAAO,GAAG,CAAC;SACZ,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;KAC3B;AAEM,IAAA,WAAW,CAAC,KAAa,EAAA;QAC9B,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;;AAEpC,QAAA,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC7D,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;;AAE/E,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;;QAE5B,MAAM,UAAU,GAAG,kBAAkB,CACnC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;aACf,GAAG,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAC7D,aAAA,IAAI,CAAC,EAAE,CAAC,CACZ,CAAC;;AAEF,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;KAC/B;8GAlCU,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;kHAAV,UAAU,EAAA,CAAA,CAAA,EAAA;;2FAAV,UAAU,EAAA,UAAA,EAAA,CAAA;kBADtB,UAAU;;;ACHX;AACA;AACA;MAYa,cAAc,CAAA;AAUzB,IAAA,WAAA,CAAoB,IAAgB,EACX,WAAgB,EACrB,aAA4B,EAC5B,UAAsB,EAAA;QAHtB,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAY;QAEhB,IAAa,CAAA,aAAA,GAAb,aAAa,CAAe;QAC5B,IAAU,CAAA,UAAA,GAAV,UAAU,CAAY;QAP1C,IAAQ,CAAA,QAAA,GAAG,6BAA6B,CAAC;AAQvC,QAAA,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC,YAAY,CAAC;AACzC,QAAA,IAAI,CAAC,aAAa,GAAG,WAAW,CAAC,aAAa,CAAC;AAC/C,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;KAChC;AAEM,IAAA,sBAAsB,CAAC,KAAa,EAAA;QACzC,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AACrD,QAAA,MAAM,QAAQ,GAAa;YACzB,SAAS,EAAE,SAAS,CAAC,UAAU;YAC/B,UAAU,EAAE,SAAS,CAAC,WAAW;YACjC,IAAI,EAAE,SAAS,CAAC,IAAI;AACpB,YAAA,KAAK,EAAE,SAAS,CAAC,YAAY,CAAC,KAAK;YACnC,MAAM,EAAE,SAAS,CAAC,GAAG;YACrB,QAAQ,EAAE,SAAS,CAAC,kBAAkB;YACtC,KAAK,EAAE,SAAS,CAAC,KAAK;YACtB,aAAa,EAAE,SAAS,CAAC,cAAc;YACvC,WAAW,EAAE,SAAS,CAAC,YAAY;YACnC,OAAO,EAAE,SAAS,CAAC,QAAQ;SAC5B,CAAC;AACF,QAAA,OAAO,QAAQ,CAAC;KACjB;AAEM,IAAA,MAAM,iBAAiB,GAAA;AAC5B,QAAA,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAS,CAAC;AACnD,QAAA,OAAO,CAAC,GAAG,CAAC,iBAAiB,KAAK,CAAA,CAAE,CAAC,CAAC;AACtC,QAAA,OAAO,KAAK,CAAC;KACd;AAEM,IAAA,WAAW,CAAC,QAAa,EAAA;AAC9B,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;KAC1B;IAEM,SAAS,CAAC,KAAU,EAAE,YAAiB,EAAA;AAC5C,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACnB,QAAA,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;KAClC;IAEM,WAAW,GAAA;QAChB,OAAO,IAAI,CAAC,QAAQ,CAAC;KACtB;AAEM,IAAA,eAAe,CAAC,YAAiB,EAAA;AACtC,QAAA,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;AACjC,QAAA,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;KACnD;IAEM,eAAe,GAAA;QACpB,OAAO,IAAI,CAAC,YAAY,CAAC;KAC1B;AAEM,IAAA,QAAQ,CAAC,KAAU,EAAA;AACxB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACnB,QAAA,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;KACpC;IAEM,QAAQ,GAAA;QACb,OAAO,IAAI,CAAC,KAAK,CAAC;KACnB;IAEM,kBAAkB,GAAA;AACvB,QAAA,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;AACvB,QAAA,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;AAC9B,QAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;AAC9B,QAAA,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;KACvC;IAEM,eAAe,GAAA;AACpB,QAAA,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;AAC1B,QAAA,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;KAClC;IAEM,eAAe,CAAC,KAAU,EAAE,YAAiB,EAAA;AAClD,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACnB,QAAA,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;AACjC,QAAA,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AACnC,QAAA,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;QAClD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC,CAAC;KACvD;AAEM,IAAA,YAAY,CAAC,QAAa,EAAA;AAC/B,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACzB,QAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;KAC1D;IAEM,UAAU,GAAA;AACf,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;KACxB;IAED,MAAM,GAAA;AACJ,QAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC;QAC3C,IAAI,IAAI,CAAC,YAAY,EAAE;AACrB,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AAC/D,YAAA,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC;AACxB,SAAA;QACD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;YACrC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,GAAG,IAAG;AAC7C,gBAAA,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACjB,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBAC1B,IAAI,CAAC,eAAe,EAAE,CAAC;gBACvB,IAAI,CAAC,SAAS,EAAE,CAAC;gBACjB,OAAO,CAAC,IAAI,CAAC,CAAC;AAChB,aAAC,EAAE,CAAC,GAAG,KAAI;gBACT,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBAC1B,IAAI,CAAC,eAAe,EAAE,CAAC;AACvB,gBAAA,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACnB,MAAM,CAAC,GAAG,CAAC,CAAC;AACd,aAAC,CAAC,CAAC;AACL,SAAC,CAAC,CAAC;KACJ;AAED,IAAA,WAAW,CAAC,YAAoB,EAAA;AAC9B,QAAA,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;AAC3B,QAAA,MAAM,IAAI,GAAG,0BAA0B,GAAG,iBAAiB,GAAG,YAAY,GAAG,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC;AAEzH,QAAA,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC,GAAG,CAAC,cAAc,EAAE,mCAAmC,CAAC,CAAC;QAC3F,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAM,CAAG,EAAA,IAAI,CAAC,WAAW,CAAC,YAAY,WAAW,IAAI,CAAC,WAAW,CAAC,SAAS,CAAA,8BAAA,CAAgC,EAC9H,IAAI,EAAE,EAAC,OAAO,EAAC,CAAC;aACf,IAAI,CACH,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC;KACtB;IAED,iBAAiB,CAAC,YAAoB,EAAE,QAAgB,EAAA;AACtD,QAAA,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAC3B,MAAM,IAAI,GAAG,0BAA0B,GAAG,iBAAiB,GAAG,YAAY,GAAG,aAAa,GAAG,QAAQ,CAAC;AAEtG,QAAA,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC,GAAG,CAAC,cAAc,EAAE,mCAAmC,CAAC,CAAC;QAC3F,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAM,CAAG,EAAA,IAAI,CAAC,WAAW,CAAC,YAAY,WAAW,IAAI,CAAC,WAAW,CAAC,SAAS,CAAA,8BAAA,CAAgC,EAC9H,IAAI,EAAE,EAAC,OAAO,EAAC,CAAC;aACf,IAAI,CACH,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC;KACtB;IAED,kBAAkB,CAAC,YAAoB,EAAE,QAAgB,EAAA;AACvD,QAAA,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAC3B,MAAM,IAAI,GAAG,0BAA0B,GAAG,iBAAiB,GAAG,YAAY,GAAG,aAAa,GAAG,QAAQ,CAAC;AAEtG,QAAA,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC,GAAG,CAAC,cAAc,EAAE,mCAAmC,CAAC,CAAC;QAC3F,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAM,CAAG,EAAA,IAAI,CAAC,WAAW,CAAC,YAAY,WAAW,IAAI,CAAC,WAAW,CAAC,SAAS,CAAA,8BAAA,CAAgC,EAC9H,IAAI,EAAE,EAAC,OAAO,EAAC,CAAC;aACf,IAAI,CACH,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC;KACtB;IAGD,WAAW,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAM,IAAI,CAAC,QAAQ,GAAG,kBAAkB,GAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC;aACtF,IAAI,CACH,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC;KACtB;IAED,UAAU,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAM,IAAI,CAAC,QAAQ,GAAG,iBAAiB,GAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC;aACrF,IAAI,CACH,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC;KACtB;IAED,SAAS,GAAA;AACP,QAAA,MAAM,IAAI,GAAG,gBAAgB,GAAG,IAAI,CAAC,YAAY,GAAG,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC;AAChG,QAAA,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC,GAAG,CAAC,cAAc,EAAE,mCAAmC,CAAC,CAAC;QAC3F,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAM,CAAG,EAAA,IAAI,CAAC,WAAW,CAAC,YAAY,WAAW,IAAI,CAAC,WAAW,CAAC,SAAS,CAAA,+BAAA,CAAiC,EAC/H,IAAI,EAAE,EAAC,OAAO,EAAC,CAAC;aACf,IAAI,CACH,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC;KACtB;AAED,IAAA,eAAe,CAAC,QAAgB,EAAA;QAC9B,MAAM,IAAI,GAAG,gBAAgB,GAAG,IAAI,CAAC,YAAY,GAAG,aAAa,GAAG,QAAQ,CAAC;AAC7E,QAAA,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC,GAAG,CAAC,cAAc,EAAE,mCAAmC,CAAC,CAAC;QAC3F,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAM,CAAG,EAAA,IAAI,CAAC,WAAW,CAAC,YAAY,WAAW,IAAI,CAAC,WAAW,CAAC,SAAS,CAAA,+BAAA,CAAiC,EAC/H,IAAI,EAAE,EAAC,OAAO,EAAC,CAAC;aACf,IAAI,CACH,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC;KACtB;IAED,SAAS,GAAA;QACP,IAAI,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,GAAG,IAAG;AACjC,YAAA,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACjB,YAAA,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAC;AAC1B,YAAA,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,QAAQ,CAAC;AAClC,SAAC,EAAE,CAAC,GAAG,KAAI;AACT,YAAA,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACrB,SAAC,CAAC,CAAC;KACJ;IAEM,eAAe,GAAA;AACpB,QAAA,IAAI,IAAI,CAAC;AACT,QAAA,IAAI,KAAK,CAAC;AACV,QAAA,IAAI,YAAY,CAAC;AACjB,QAAA,IAAI,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE;YAC/B,MAAM,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC/C,MAAM,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAC5C,MAAM,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;YACpD,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YACtC,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YACvC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAC9C,YAAA,IAAI,IAAI,IAAI,KAAK,IAAI,YAAY,EAAE;gBACjC,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBACxC,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBAC1C,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;AACzD,aAAA;AACF,SAAA;AAAM,aAAA;YACL,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC7C,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAC3C,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;AAC3D,SAAA;AACD,QAAA,IAAI,IAAI,IAAI,KAAK,IAAI,YAAY,EAAE;YACjC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC9B,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;AACpC,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AACxB,SAAA;KACF;IAED,mBAAmB,CAAC,MAAW,EAAE,aAAkB,EAAA;AACjD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAM,IAAI,CAAC,QAAQ,GAAG,CAAoB,iBAAA,EAAA,aAAa,CAAI,CAAA,EAAA,MAAM,EAAE,CAAC;aACrF,IAAI,CACH,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC;KACtB;IAED,mBAAmB,GAAA;QACjB,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AAC9C,YAAA,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;YACvD,IAAI,IAAI,CAAC,aAAa,EAAE;AACtB,gBAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,GAAG,IAAG;AAClF,oBAAA,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACjB,IAAI,GAAG,CAAC,IAAI,EAAE;wBACZ,OAAO,CAAC,IAAI,CAAC,CAAC;AACf,qBAAA;AAAM,yBAAA;wBACL,IAAI,CAAC,UAAU,EAAE,CAAC,SAAS,CAAC,IAAI,IAAG;AACjC,4BAAA,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAClB,4BAAA,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC;AAC1B,4BAAA,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,OAAO,CAAC;4BAC/B,MAAM,CAAC,KAAK,CAAC,CAAC;AAChB,yBAAC,EAAE,CAAC,GAAG,KAAI;AACT,4BAAA,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;4BACnB,MAAM,CAAC,KAAK,CAAC,CAAC;AAChB,yBAAC,CAAC,CAAC;AACJ,qBAAA;AACH,iBAAC,EAAE,CAAC,GAAG,KAAI;AACT,oBAAA,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBACnB,MAAM,CAAC,KAAK,CAAC,CAAC;AAChB,iBAAC,CAAC,CAAC;AACJ,aAAA;AAAM,iBAAA;gBACL,OAAO,CAAC,IAAI,CAAC,CAAC;AACf,aAAA;AACH,SAAC,CAAC,CAAC;AACH,QAAA,OAAO,OAAO,CAAC;KAChB;;IAIM,cAAc,CAAC,aAA4B,EAAE,IAAmB,EAAE,QAAuB,EAAE,UAAyB,EAAE,cAA6B,EAAE,WAA2B,EAAA;AACrL,QAAA,MAAM,KAAK,GAAG;AACZ,YAAA,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM;YAC7B,aAAa;YACb,IAAI;YACJ,QAAQ;YACR,UAAU;YACV,cAAc;YACd,WAAW;SACZ,CAAC;AACF,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAM,IAAI,CAAC,QAAQ,GAAG,uBAAuB,EAAE,KAAK,CAAC;aACvE,IAAI,CACH,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC;KACtB;AAED,IAAA,iBAAiB,CAAC,KAAwB,EAAA;AACxC,QAAA,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;AAC3D,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAM,IAAI,CAAC,QAAQ,GAAG,qBAAqB,EAAE,KAAK,EAAE,EAAC,OAAO,EAAC,CAAC;aAChF,IAAI,CACH,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC;KACtB;IAED,eAAe,CAAC,GAAW,EAAE,KAAa,EAAA;AACxC,QAAA,IAAI,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE;YAC/B,MAAM,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC1C,MAAM,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAC5C,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACnC,SAAA;AAAM,aAAA;YACL,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AACzC,SAAA;KACF;AAED,IAAA,iBAAiB,CAAC,GAAW,EAAA;AAC3B,QAAA,IAAI,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE;YAC/B,MAAM,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AAC1C,YAAA,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AACnC,SAAA;AAAM,aAAA;AACL,YAAA,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;AACrC,SAAA;KACF;AAED,IAAA,cAAc,CAAC,GAAW,EAAA;AACxB,QAAA,IAAI,GAAkB,CAAC;AACvB,QAAA,IAAI,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE;YAC/B,MAAM,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC1C,MAAM,CAAC,GAAG,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACzC,YAAA,IAAI,CAAC,EAAE;gBACL,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACpC,gBAAA,OAAO,GAAG,CAAC;AACZ,aAAA;AAAM,iBAAA;gBACL,GAAG,GAAG,IAAI,CAAC;AACZ,aAAA;AACF,SAAA;AAAM,aAAA;YACL,GAAG,GAAG,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACxC,SAAA;AACD,QAAA,OAAO,GAAG,CAAC;KACZ;IAGM,aAAa,GAAA;QAClB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC1C,QAAA,MAAM,WAAW,GAAG,GAAG,CAAC,YAAY,CAAC;AACrC,QAAA,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAC3B,QAAA,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AAC/B,QAAA,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,QAAQ,GAAG,GAAG,GAAG,WAAW,CAAC,QAAQ,EAAE,CAAC;AACxE,QAAA,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;KACzD;IAEM,gBAAgB,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;KAC1C;AAEM,IAAA,sBAAsB,CAAC,QAAa,EAAA;QACzC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AAC9C,YAAA,IAAI,IAAI,CAAC;AACT,YAAA,IAAI,KAAK,CAAC;AACV,YAAA,IAAI,YAAY,CAAC;YAEjB,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACjD,MAAM,IAAI,GAAG,UAAU,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACjD,YAAA,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAC1B,YAAA,IAAI,IAAI,EAAE;gBACR,MAAM,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;;gBAElD,MAAM,KAAK,GAAG,UAAU,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;gBACtD,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;AACzD,gBAAA,IAAI,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC;AAChC,gBAAA,IAAI,QAAQ,EAAE;oBACZ,aAAa,GAAG,QAAQ,CAAC;AAC1B,iBAAA;AAAM,qBAAA,IAAI,KAAK,EAAE;oBAChB,aAAa,GAAG,KAAK,CAAC;AACvB,iBAAA;AACD,gBAAA,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;gBACpC,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC,SAAS,CAAC;AAC5D,oBAAA,IAAI,EAAE,CAAC,GAAG,KAAI;AACZ,wBAAA,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACjB,wBAAA,KAAK,GAAG,GAAG,CAAC,YAAY,CAAC;AACzB,wBAAA,YAAY,GAAG,GAAG,CAAC,aAAa,CAAC;AACjC,wBAAA,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;wBAC1C,IAAI,CAAC,mBAAmB,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,KAAI;AACvC,4BAAA,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;4BAClB,IAAI,CAAC,aAAa,EAAE,CAAC;4BACrB,OAAO,CAAC,IAAI,CAAC,CAAC;AAChB,yBAAC,EAAE,CAAC,GAAG,KAAI;AACT,4BAAA,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;4BACnB,MAAM,CAAC,GAAG,CAAC,CAAC;AACd,yBAAC,CAAC,CAAC;qBACJ;AACD,oBAAA,KAAK,EAAE,CAAC,GAAG,KAAI;AACb,wBAAA,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;wBACnB,MAAM,CAAC,GAAG,CAAC,CAAC;qBACb;AACF,iBAAA,CAAC,CAAC;AACJ,aAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;AACrC,gBAAA,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;AACnC,gBAAA,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;AAClD,gBAAA,IAAI,IAAI,IAAI,KAAK,IAAI,YAAY,EAAE;AACjC,oBAAA,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;oBAC1C,IAAI,CAAC,mBAAmB,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,KAAI;AACvC,wBAAA,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;wBAClB,OAAO,CAAC,IAAI,CAAC,CAAC;AAChB,qBAAC,EAAE,CAAC,GAAG,KAAI;AACT,wBAAA,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;wBACnB,MAAM,CAAC,GAAG,CAAC,CAAC;AACd,qBAAC,CAAC,CAAC;AACJ,iBAAA;AAAM,qBAAA;AACL,oBAAA,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;oBACjC,IAAI,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,GAAC,CAAC,CAAC,EAAE;wBAC/B,OAAO,CAAC,IAAI,CAAC,CAAC;AACf,qBAAA;AAAM,yBAAA;wBACL,IAAI,CAAC,kBAAkB,EAAE,CAAC;wBAC1B,IAAI,CAAC,eAAe,EAAE,CAAC;wBACvB,IAAI,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,IAAI,IAAG;AAClC,4BAAA,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAClB,4BAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;AAC1B,4BAAA,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;;AAE5B,4BAAA,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACnC,4BAAA,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAC,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,GAAC,CAAC;AACnD,gCAAA,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAC,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,GAAC,CAAC;AACnD,gCAAA,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,GAAC,CAAC,EAAE;AAC7B,gCAAA,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,GAAG,YAAY,GAAC,kBAAkB,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC3F,6BAAA;4BACD,OAAO,CAAC,KAAK,CAAC,CAAC;AACjB,yBAAC,EAAE,CAAC,GAAG,KAAI;AACT,4BAAA,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;4BACnB,MAAM,CAAC,GAAG,CAAC,CAAC;AACd,yBAAC,CAAC,CAAC;AACJ,qBAAA;AACF,iBAAA;AACF,aAAA;AACH,SAAC,CAAC,CAAC;AACH,QAAA,OAAO,OAAO,CAAC;KAChB;IAIM,0BAA0B,GAAA;QAC/B,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AAC9C,YAAA,IAAI,IAAI,CAAC;AACT,YAAA,IAAI,KAAK,CAAC;AACV,YAAA,IAAI,YAAY,CAAC;AACjB,YAAA,IAAI,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE;gBAC/B,MAAM,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAC/C,MAAM,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBAC5C,MAAM,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;gBACpD,MAAM,EAAE,GAAG,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBAC1C,MAAM,EAAE,GAAG,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBAC1C,MAAM,EAAE,GAAG,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAC1C,gBAAA,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;oBAClB,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;oBACtC,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;oBACvC,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AAC/C,iBAAA;AACF,aAAA;AAAM,iBAAA;gBACL,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAC7C,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBAC3C,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;AAC3D,aAAA;AACD,YAAA,IAAI,IAAI,IAAI,KAAK,IAAI,YAAY,EAAE;AACjC,gBAAA,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;AAChC,gBAAA,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;gBAC1C,OAAO,CAAC,IAAI,CAAC,CAAC;AACf,aAAA;AAAM,iBAAA;AACL,gBAAA,OAAO,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;gBACnC,MAAM,CAAC,KAAK,CAAC,CAAC;AACf,aAAA;AACH,SAAC,CAAC,CAAC;AACH,QAAA,OAAO,OAAO,CAAC;KAChB;IAEM,WAAW,GAAA;QAChB,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,GAAC,IAAI,CAAC,YAAY,GAAC,EAAE,CAAC,CAAC;AAC/E,QAAA,OAAO,kBAAkB,CAAC,GAAG,CAAC,CAAC;KAChC;AAEO,IAAA,kBAAkB,CAAC,IAAY,EAAA;AACrC,QAAA,MAAM,GAAG,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;QACrC,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;KACxC;IAEM,cAAc,GAAA;QACnB,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AAC9C,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;AAC5C,YAAA,IAAI,YAAY,EAAE;gBAChB,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;gBAC1D,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC;AAC1D,oBAAA,IAAI,EAAE,CAAC,GAAQ,KAAI;AACjB,wBAAA,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACjB,wBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;AAChC,wBAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;wBACxC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,aAAa,CAAC,CAAC;wBAC1D,OAAO,CAAC,IAAI,CAAC,CAAC;qBACf;AACD,oBAAA,KAAK,EAAE,CAAC,GAAQ,KAAI;AAClB,wBAAA,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;wBACnB,MAAM,CAAC,GAAG,CAAC,CAAC;qBACb;AACF,iBAAA,CAAC,CAAC;AACJ,aAAA;AAAM,iBAAA;gBACL,MAAM,CAAC,KAAK,CAAC,CAAC;AACf,aAAA;AACH,SAAC,CAAC,CAAC;AACH,QAAA,OAAO,OAAO,CAAC;KAChB;AAzeU,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,8CAWf,aAAa,EAAA,EAAA,EAAA,KAAA,EAAAA,aAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;kHAXZ,cAAc,EAAA,CAAA,CAAA,EAAA;;2FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAD1B,UAAU;;0BAYN,MAAM;2BAAC,aAAa,CAAA;;;MCXZ,eAAe,CAAA;AAK1B,IAAA,WAAA,CACS,IAAoB;;IAEnB,QAAqB,EACtB,MAAiB,EACD,WAAgB,EAAA;QAJhC,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAgB;QAEnB,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAa;QACtB,IAAM,CAAA,MAAA,GAAN,MAAM,CAAW;AAGxB,QAAA,IAAI,CAAC,aAAa,GAAG,WAAW,CAAC,aAAa,CAAC;KAChD;;IAID,gBAAgB,CAAC,KAAwB,EAAE,OAAyB,EAAA;AAClE,QAAA,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;AAC9B,QAAA,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AACjC,QAAA,MAAM,IAAI,GAAQ,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAChD,QAAQ,KAAK,CAAC,MAAM;YAClB,KAAK,GAAG,EAAE;AACR,gBAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;gBAC9B,MAAM;AACP,aAAA;YACD,KAAK,GAAG,EAAE;AACR,gBAAA,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,KAAK,eAAe,EAAE;AACzC,oBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;AAC5B,iBAAA;AAAM,qBAAA;oBACL,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;AACrD,iBAAA;gBACD,MAAM;AACP,aAAA;YACD,KAAK,GAAG,EAAE;AACR,gBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;gBAC3B,MAAM;AACP,aAAA;YACD,KAAK,GAAG,EAAE;AACR,gBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;gBACtE,MAAM;AACP,aAAA;YACD,KAAK,GAAG,EAAE;AACR,gBAAA,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;gBAChC,MAAM;AACP,aAAA;YACD,KAAK,GAAG,EAAE;AACR,gBAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;gBACzF,MAAM;AACP,aAAA;YACD,KAAK,GAAG,EAAE;AACR,gBAAA,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;gBAChC,MAAM;AACP,aAAA;YACD,KAAK,GAAG,EAAE;AACR,gBAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;gBACzF,MAAM;AACP,aAAA;YACD,KAAK,GAAG,EAAE;AACR,gBAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;gBACrC,MAAM;AACP,aAAA;YACD,KAAK,GAAG,EAAE;AACR,gBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;gBACxE,MAAM;AACP,aAAA;YACD,KAAK,CAAC,CAAC,EAAE;gBACP,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;gBAC5D,MAAM;AACP,aAAA;YACD,KAAK,CAAC,EAAE;gBACN,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;gBAC5D,MAAM;AACP,aAAA;AACF,SAAA;KACF;AAED,IAAA,iBAAiB,CAAC,KAAU,EAAA;QAC1B,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,eAAe,GAAG,KAAK,CAAC,KAAK,CAAC,eAAe;AAC3F,YAAA,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QAC5D,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;KACpD;AAED,IAAA,eAAe,CAAC,IAAS,EAAA;;AAEvB,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;;AAEzE,QAAA,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC/B,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,GAAG,IAAG;AACtC,YAAA,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACjB,YAAA,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAC;AAC1B,YAAA,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;YACjC,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AAC7B,gBAAA,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,QAAQ,GAAG,YAAY,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;AAC1E,aAAA;AACH,SAAC,EAAE,CAAC,GAAG,KAAI;AACT,YAAA,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACrB,SAAC,CAAC,CAAC;;KAEJ;IAED,kBAAkB,CAAC,KAAU,EAAE,IAAS,EAAA;AACtC,QAAA,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACnB,IAAI,OAAO,GAAG,EAAE,CAAC;AACjB,QAAA,IAAI,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE;AAC3B,YAAA,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC;AAClC,YAAA,IAAI,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE;AAAE,gBAAA,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,GAAG,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC;AAAE,aAAA;AACvH,SAAA;AAAM,aAAA,IAAI,KAAK,CAAC,KAAK,CAAC,eAAe,EAAE;AACtC,YAAA,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC;AACtC,YAAA,IAAI,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE;AAAE,gBAAA,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,GAAG,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC;AAAE,aAAA;AAC3H,SAAA;AAAM,aAAA,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE;AAC9B,YAAA,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC;AAC9B,YAAA,IAAI,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE;AAAE,gBAAA,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,GAAG,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC;AAAE,aAAA;AAC1H,YAAA,IAAI,KAAK,CAAC,KAAK,CAAC,cAAc,EAAE;AAAE,gBAAA,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,GAAG,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC;AAAE,aAAA;AACjI,SAAA;aAAM,IAAI,KAAK,CAAC,OAAO,EAAE;AACxB,YAAA,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;AACxB,YAAA,IAAI,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE;AAAE,gBAAA,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,GAAG,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC;AAAE,aAAA;AAC3H,SAAA;AAAM,aAAA;AACL,YAAA,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;AACzC,SAAA;AACD,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE;AAC/B,YAAA,YAAY,EAAE,IAAI;YAClB,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE;AAC/G,SAAA,CAAC,CAAC;KACJ;IAED,aAAa,CAAC,KAAU,EAAE,IAAS,EAAA;AACjC,QAAA,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACnB,IAAI,OAAO,GAAG,EAAE,CAAC;AACjB,QAAA,IAAI,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE;AAC3B,YAAA,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC;AACnC,SAAA;AAAM,aAAA,IAAI,KAAK,CAAC,KAAK,CAAC,eAAe,EAAE;AACtC,YAAA,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC;AACvC,SAAA;AAAM,aAAA,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE;AAC9B,YAAA,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC;AAC/B,SAAA;aAAM,IAAI,KAAK,CAAC,OAAO,EAAE;AACxB,YAAA,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;AACzB,SAAA;AAAM,aAAA;AACL,YAAA,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;AACzC,SAAA;AACD,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE;AAC/B,YAAA,YAAY,EAAE,IAAI;YAClB,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE;AAC/G,SAAA,CAAC,CAAC;KACJ;AAED,IAAA,cAAc,CAAC,OAAY,EAAE,UAAA,GAAoB,EAAE,EAAA;AACjD,QAAA,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACrB,UAAU,CAAC,MAAK;YACd,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE;AACrC,gBAAA,QAAQ,EAAE,IAAI;gBACd,UAAU;AACV,gBAAA,gBAAgB,EAAE,KAAK;AACxB,aAAA,CAAC,CAAC;AACL,SAAC,CAAC,CAAC;KACJ;AAED,IAAA,sBAAsB,CAAC,OAAY,EAAA;AACjC,QAAA,IAAI,CAAC,mBAAmB,GAAG,OAAO,CAAC;KACpC;;IAGD,sBAAsB,GAAA;AACpB,QAAA,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE;YAC7B,IAAI,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAC/C,IAAI,CAAC,IAAI,EAAE;AACT,gBAAA,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;gBACpC,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/B,aAAA;AACD,YAAA,MAAM,UAAU,GAAG;AACjB,gBAAA,gBAAgB,EAAE;AAChB,oBAAA,YAAY,EAAE,wCAAwC;AACtD,oBAAA,SAAS,EAAE,oBAAoB;AAC/B,oBAAA,KAAK,EAAE,cAAc;AACrB,oBAAA,OAAO,EAAE,kDAAkD;AAC3D,oBAAA,IAAI,EAAE,MAAM;AACZ,oBAAA,WAAW,EAAE,yDAAyD;AACtE,oBAAA,gBAAgB,EAAE,oEAAoE;AACtF,oBAAA,WAAW,EAAE,IAAI;AACjB,oBAAA,WAAW,EAAE,QAAQ;AACtB,iBAAA;aACF,CAAC;AACF,YAAA,MAAM,UAAU,GAAG;AACjB,gBAAA,gBAAgB,EAAE;AAChB,oBAAA,YAAY,EAAE,mDAAmD;AACjE,oBAAA,SAAS,EAAE,uBAAuB;AAClC,oBAAA,KAAK,EAAE,aAAa;AACpB,oBAAA,OAAO,EAAE,yDAAyD;AAClE,oBAAA,IAAI,EAAE,QAAQ;AACd,oBAAA,WAAW,EAAE,6DAA6D;AAC1E,oBAAA,gBAAgB,EAAE,gEAAgE;AAClF,oBAAA,WAAW,EAAE,SAAS;AACtB,oBAAA,WAAW,EAAE,UAAU;AACxB,iBAAA;aACF,CAAC;AACF,YAAA,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,EAAE;AACzB,gBAAA,IAAI,CAAC,mBAAmB,GAAG,UAAU,CAAC;AACvC,aAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,mBAAmB,GAAG,UAAU,CAAC;AACvC,aAAA;AACF,SAAA;QACD,OAAO,IAAI,CAAC,mBAAmB,CAAC;KACjC;IAGD,WAAW,CAAC,KAAwB,EAAE,OAAyB,EAAA;QAC7D,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;AAClC,QAAA,MAAM,KAAK,GAAsB;YAC/B,UAAU,EAAE,KAAK,CAAC,MAAM;YACxB,cAAc,EAAE,KAAK,CAAC,UAAU;YAChC,YAAY,EAAE,KAAK,CAAC,OAAO;AAC3B,YAAA,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI;AAChC,YAAA,UAAU,EAAE,OAAO,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS;YACrE,WAAW,EAAE,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS;YACxF,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,SAAS;YAChC,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,WAAW,EAAE,IAAI,IAAI,EAAE;SACxB,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC;AAC3C,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,gBAAA,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,QAAQ,CAAC,CAAC;aAC5C;AACD,YAAA,KAAK,EAAE,CAAC,GAAQ,KAAI;AAClB,gBAAA,OAAO,CAAC,KAAK,CAAC,mBAAmB,EAAE,GAAG,CAAC,CAAC;aACzC;AACF,SAAA,CAAC,CAAC;KACJ;AAEO,IAAA,aAAa,CAAC,IAAS,EAAA;QAC7B,MAAM,aAAa,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;AAClE,QAAA,MAAM,eAAe,GAAG,CAAC,KAAU,KAAS;;AAE1C,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACxB,gBAAA,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;AACjD,aAAA;;YAGD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,SAAS,EAAE;gBACpD,MAAM,MAAM,GAAQ,EAAE,CAAC;gBACvB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AACpC,oBAAA,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;AACnC,oBAAA,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;AACzB,oBAAA,IAAI,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AACjE,wBAAA,MAAM,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC;AAC3B,qBAAA;AAAM,yBAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;wBACpC,MAAM,CAAC,GAAG,CAAC,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;AACtC,qBAAA;AAAM,yBAAA;AACL,wBAAA,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AACrB,qBAAA;AACF,iBAAA;AACD,gBAAA,OAAO,MAAM,CAAC;AACf,aAAA;AACD,YAAA,OAAO,KAAK,CAAC;AACf,SAAC,CAAC;AACF,QAAA,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC;KAC9B;AA/PU,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,mGAUhB,aAAa,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;kHAVZ,eAAe,EAAA,CAAA,CAAA,EAAA;;2FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B,UAAU;;0BAWN,MAAM;2BAAC,aAAa,CAAA;;;MCjBZ,gBAAgB,CAAA;IAI3B,WAAoB,CAAA,IAAgB,EACX,WAAgB,EAAA;QADrB,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAY;AAElC,QAAA,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC,YAAY,CAAC;KAC1C;IAEM,iBAAiB,CAAC,SAAiB,EACjB,QAAuB,EACvB,UAAyB,EACzB,QAAuB,EACvB,QAAuB,EACvB,SAAwB,EAAA;AAC/C,QAAA,MAAM,KAAK,GAAG;YACZ,SAAS;YACT,QAAQ;YACR,UAAU;YACV,QAAQ;YACR,QAAQ;YACR,SAAS;SACV,CAAC;AACF,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAM,IAAI,CAAC,QAAQ,GAAG,sBAAsB,EAAE,KAAK,CAAC;aACtE,IAAI,CACH,GAAG,CAAC,CAAC,GAAQ,KAAK,GAAG,CAAC,CAAC,CAAC;KAC7B;AA1BU,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,8CAKjB,aAAa,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;kHALZ,gBAAgB,EAAA,CAAA,CAAA,EAAA;;2FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAD5B,UAAU;;0BAMN,MAAM;2BAAC,aAAa,CAAA;;;MCwBZ,wBAAwB,CAAA;IACnC,OAAO,OAAO,CAAC,WAAgB,EAAA;QAC7B,OAAO;AACL,YAAA,QAAQ,EAAE,wBAAwB;YAClC,SAAS,EAAE,CAAC,EAAC,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,WAAW,EAAC,CAAC;SAC7D,CAAC;KACH;8GANU,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA,EAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,iBApBjC,2BAA2B;AAC3B,YAAA,cAAc,aAGd,iBAAiB;YACjB,eAAe;YACf,eAAe;AACf,YAAA,YAAY,aAGZ,2BAA2B,CAAA,EAAA,CAAA,CAAA,EAAA;AAUlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,EARxB,SAAA,EAAA;YACT,eAAe;YACf,cAAc;YACd,aAAa;YACb,UAAU;YACV,gBAAgB;AACjB,SAAA,EAAA,OAAA,EAAA,CAdC,iBAAiB;YACjB,eAAe;YACf,eAAe;YACf,YAAY,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAaH,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAtBpC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE;wBACZ,2BAA2B;wBAC3B,cAAc;AACf,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,iBAAiB;wBACjB,eAAe;wBACf,eAAe;wBACf,YAAY;AACb,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,2BAA2B;AAC5B,qBAAA;AACD,oBAAA,SAAS,EAAE;wBACT,eAAe;wBACf,cAAc;wBACd,aAAa;wBACb,UAAU;wBACV,gBAAgB;AACjB,qBAAA;AACF,iBAAA,CAAA;;;MC9BY,uBAAuB,CAAA;AAYlC,IAAA,WAAA,GAAA;AAXQ,QAAA,IAAA,CAAA,YAAY,GAAG,CAAA;;;;;;;;yBAQA,CAAC;QAItB,IAAI,CAAC,aAAa,EAAE,CAAC;KACtB;;AAGO,IAAA,MAAM,aAAa,GAAA;QACzB,MAAM,SAAS,GAAG,4BAA4B,CAAC;QAC/C,MAAM,SAAS,GAAG,0BAA0B,CAAC;AAC7C,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY;AAClC,aAAA,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;AACtB,aAAA,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;AACtB,aAAA,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAEtB,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AAE3E,QAAA,IAAI,CAAC,SAAS,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,CAC5C,MAAM,EACN,SAAS,CAAC,MAAM,EAChB;AACE,YAAA,IAAI,EAAE,UAAU;AAChB,YAAA,IAAI,EAAE,SAAS;AAChB,SAAA,EACD,IAAI,EACJ,CAAC,SAAS,CAAC,CACZ,CAAC;KACH;;AAGO,IAAA,MAAM,cAAc,GAAA;QAC1B,OAAO,MAAM,CAAC,MAAM,CAAC,WAAW,CAC9B,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,EAChC,IAAI,EACJ,CAAC,SAAS,EAAE,SAAS,CAAC,CACvB,CAAC;KACH;;IAGD,MAAM,OAAO,CAAC,IAAS,EAAA;AACrB,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACnB,YAAA,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;AAC5B,SAAA;;AAGD,QAAA,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;AAClC,QAAA,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;;AAGxD,QAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;AAC3C,QAAA,MAAM,EAAE,GAAG,MAAM,CAAC,eAAe,CAAC,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;;QAGtD,MAAM,mBAAmB,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,CACrD,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,EACvB,MAAM,EACN,UAAU,CACX,CAAC;;AAGF,QAAA,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;;QAG/D,MAAM,kBAAkB,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,CACpD,EAAE,IAAI,EAAE,UAAU,EAAE,EACpB,IAAI,CAAC,SAAS,EACd,SAAS,CACV,CAAC;QAEF,OAAO;AACL,YAAA,YAAY,EAAE,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,CAAC;AAC1D,YAAA,aAAa,EAAE,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,CAAC;YAC5D,EAAE,EAAE,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC,MAAM,CAAC;SACxC,CAAC;KACH;;AAGO,IAAA,mBAAmB,CAAC,MAAmB,EAAA;AAC7C,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;KAC7D;8GAzFU,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,cAFtB,MAAM,EAAA,CAAA,CAAA,EAAA;;2FAEP,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAHnC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;ACJD;MAsBa,eAAe,CAAA;AAI1B,IAAA,WAAA,CAAoB,aAA4B,EAAU,uBAAgD,EAAyB,WAAgB,EAAA;QAA/H,IAAa,CAAA,aAAA,GAAb,aAAa,CAAe;QAAU,IAAuB,CAAA,uBAAA,GAAvB,uBAAuB,CAAyB;AACxG,QAAA,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;AAC3C,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;KAChC;IAED,SAAS,CAAC,OAAyB,EAAE,IAAiB,EAAA;AAEpD,QAAA,IAAI,KAAK,CAAC;AACV,QAAA,IAAG,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE;YAC9B,MAAM,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAC5C,MAAM,EAAE,GAAG,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAC1C,YAAA,IAAI,EAAE,EAAE;gBACN,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AACxC,aAAA;AACF,SAAA;AAAM,aAAA;YACL,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC5C,SAAA;QAED,IAAI,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;AAC/C,QAAA,IAAG,OAAO,IAAI,OAAO,KAAK,MAAM,EAAC;AAC/B,YAAA,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;YACxB,IAAI,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AACnC,YAAA,IAAI,OAAO,GAAG;gBACZ,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC;aAC/C,CAAA;AACD,YAAA,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC;AACtB,gBAAA,IAAI,EAAE,OAAO;AACd,aAAA,CAAC,CAAC;AACJ,SAAA;AACD,QAAA,IAAI,KAAK,EAAE;AACT,YAAA,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC;AACtB,gBAAA,UAAU,EAAE;oBACV,aAAa,EAAE,SAAS,GAAG,KAAK;AACjC,iBAAA;AACF,aAAA,CAAC,CAAC;AACJ,SAAA;QAED,MAAM,CAAC,GAAG,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC5C,QAAA,IAAI,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,GAAC,CAAC,EAAE;AAC7D,YAAA,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC;gBACtB,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;AAC/C,aAAA,CAAC,CAAC;AACJ,SAAA;QAED,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;AACvD,QAAA,IAAI,WAAW,KAAK,MAAM,IAAI,OAAO,CAAC,IAAI,EAAE;YAC1C,OAAO,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAClE,SAAS,CAAC,gBAAgB,IAAG;AAC3B,gBAAA,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;AAC3B,oBAAA,IAAI,EAAE,gBAAgB;AACvB,iBAAA,CAAC,CAAC;AACH,gBAAA,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;aAC5B,CAAC,CACH,CAAC;AACH,SAAA;AAED,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;KAC7B;AA7DU,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,gFAI0F,aAAa,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;kHAJtH,eAAe,EAAA,CAAA,CAAA,EAAA;;2FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B,UAAU;;0BAKoG,MAAM;2BAAC,aAAa,CAAA;;MA8DtH,mBAAmB,CAAA;IAM9B,WAAoB,CAAA,QAAkB,EAC5B,MAAc,EACd,aAA4B,EAC5B,UAAsB,EACtB,cAA8B,EAAA;QAJpB,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAU;QAC5B,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;QACd,IAAa,CAAA,aAAA,GAAb,aAAa,CAAe;QAC5B,IAAU,CAAA,UAAA,GAAV,UAAU,CAAY;QACtB,IAAc,CAAA,cAAA,GAAd,cAAc,CAAgB;QAPhC,IAAY,CAAA,YAAA,GAAG,KAAK,CAAC;AACrB,QAAA,IAAA,CAAA,mBAAmB,GAAyB,IAAI,eAAe,CAAM,IAAI,CAAC,CAAC;QAOjF,UAAU,CAAC,MAAK;YACd,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;AACrD,SAAC,CAAC,CAAA;KACH;IAED,SAAS,CAAC,OAAyB,EAAE,IAAiB,EAAA;AAEpD,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAC9B,GAAG,CAAC,CAAC,KAAqB,KAAI;YAC1B,IAAI,KAAK,YAAY,YAAY,EAAE;gBACjC,IAAI,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;gBAC/C,IAAG,OAAO,IAAI,OAAO,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,EAAC;AACvD,oBAAA,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,EAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,EAAC,CAAC,CAAC;AAC3D,iBAAA;AACF,aAAA;AACD,YAAA,OAAO,KAAK,CAAC;AACjB,SAAC,CAAC,EACF,UAAU,CAAC,KAAK,IAAG;YACjB,IAAI,KAAK,YAAY,iBAAiB,EAAE;AACpC,gBAAA,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACrB,IAAI,MAAM,GAAG,KAAK,CAAC;gBACnB,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAC,CAAC,EAAE;AACtE,oBAAA,IAAI,MAAM,CAAC,MAAM,KAAK,GAAG,EAAE;wBACzB,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AAC3C,qBAAA;AAAM,yBAAA;wBACL,IAAI,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;AACjD,wBAAA,IAAG,SAAS,IAAI,SAAS,KAAG,MAAM,EAAC;AACjC,4BAAA,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC;AAC3B,yBAAA;AAAM,6BAAA;4BACL,IAAI,CAAC,QAAQ,EAAE,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAClD,yBAAA;AACF,qBAAA;AACF,iBAAA;AAAM,qBAAA;AACL,oBAAA,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC;AAC3B,iBAAA;AACJ,aAAA;SACF,CAAC,CAA+B,CAAC;KACrC;AAED,IAAA,WAAW,CAAC,IAAS,EAAA;AACnB,QAAA,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QAC/B,IAAI,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AACpD,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;KAC5B;IAGO,cAAc,CAAC,OAAyB,EAAE,IAAiB,EAAA;AACjE,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AACpB,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;AACzB,YAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpC,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,eAAe,EAAE,CAAC;AAC3D,YAAA,IAAI,YAAY,EAAC;gBACb,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;gBAC1D,OAAO,IAAI,CAAC,cAAc,CAAC,iBAAiB,CAAC,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CACxE,SAAS,CAAC,CAAC,GAAQ,KAAI;AACnB,oBAAA,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;AACtC,oBAAA,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACjB,oBAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;oBAC1B,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;oBAC/C,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;oBACvD,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;AAChD,oBAAA,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC;AACvE,iBAAC,CAAC,EACF,UAAU,CAAC,CAAC,GAAG,KAAI;AACf,oBAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;AAC1B,oBAAA,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC;oBAC7B,IAAI,CAAC,SAAS,EAAE,CAAC;AACjB,oBAAA,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC;iBAC1B,CAAC,CACL,CAAC;AACL,aAAA;AACJ,SAAA;AAAM,aAAA;YACH,OAAO,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAChC,MAAM,CAAC,KAAK,IAAI,KAAK,KAAK,IAAI,CAAC,EAC/B,IAAI,CAAC,CAAC,CAAC,EACP,SAAS,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CACzE,CAAC;AACL,SAAA;KACF;IAEO,cAAc,CAAC,OAAyB,EAAE,KAAa,EAAA;QAC7D,OAAO,OAAO,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,SAAS,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;KAC5F;IAEO,SAAS,GAAA;QACf,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,GAAG,IAAG;AAChD,YAAA,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACjB,YAAA,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAC;AAC1B,YAAA,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;YACjC,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAC,CAAC,EAAE;AAC3B,gBAAA,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,QAAQ,GAAG,YAAY,GAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;AACxE,aAAA;AACH,SAAC,EAAE,CAAC,GAAG,KAAI;AACT,YAAA,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACrB,SAAC,CAAC,CAAC;KACJ;8GA1GU,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,QAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,aAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;kHAAnB,mBAAmB,EAAA,CAAA,CAAA,EAAA;;2FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAD/B,UAAU;;;ACvFX;AACA;MAaa,eAAe,CAAA;AAK1B,IAAA,WAAA,CACU,cAA8B,EAC9B,IAAgB,EAChB,QAAqB,EACN,WAAgB,EAAA;QAH/B,IAAc,CAAA,cAAA,GAAd,cAAc,CAAgB;QAC9B,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAY;QAChB,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAa;AAN/B,QAAA,IAAA,CAAA,iBAAiB,GAAG,CAAC,CAAC,SAAS,CAAC,WAAW,IAAI,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC;AAS5E,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;KAChC;AAED,IAAA,cAAc,CAAC,IAAkB,EAAA;AAC/B,QAAA,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;AAChC,QAAA,MAAM,kCAAkC,GAAuC;AAC7E,YAAA,SAAS,EAAE,IAAI,CAAC,YAAY,EAAE;AAC9B,YAAA,EAAE,EAAE;AACF,gBAAA,IAAI,EAAE,UAAU;AACjB,aAAA;AACD,YAAA,IAAI,EAAE;AACJ,gBAAA,EAAE,EAAE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;gBAClD,IAAI,EAAE,IAAI,CAAC,KAAK;gBAChB,WAAW,EAAE,IAAI,CAAC,KAAK;AACxB,aAAA;AACD,YAAA,gBAAgB,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;AACnD,YAAA,sBAAsB,EAAE;AACtB,gBAAA,uBAAuB,EAAE,UAAU;AACpC,aAAA;AACD,YAAA,OAAO,EAAE,KAAK;AACd,YAAA,WAAW,EAAE,QAAQ;SACtB,CAAC;AAEF,QAAA,OAAO,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC;AAClC,YAAA,SAAS,EAAE,kCAAkC;AAC9C,SAAA,CAAC,CAAC;KAEJ;AAED,IAAA,cAAc,CAAC,IAAkB,EAAA;AAC/B,QAAA,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAClB;;;;;;;;;;;;AAYI;AACJ,QAAA,IAAI,oBAAoB,GAAG;AACzB,YAAA,SAAS,EAAE,IAAI,CAAC,YAAY,EAAE;AAC9B,YAAA,gBAAgB,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;SACtC,CAAC;AACF,QAAA,OAAO,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,oBAAoB,EAAE,CAAC,CAAC;KACvE;IAGD,YAAY,GAAA;AACV,QAAA,OAAO,UAAU,CAAC,IAAI,CAAC,kCAAkC,EAAE,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;KAClF;IAED,QAAQ,CAAC,IAAkB,EAAE,iBAAsB,EAAA;QACjD,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AAC9C,YAAA,IAAI,GAAG,GAAG,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC;AACnC,YAAA,IAAI,cAAc,GAAG,GAAG,CAAC,MAAM,CAAC,iBAAiB,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;AAC3E,YAAA,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;YAC5B,IAAI,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;AAC5C,YAAA,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YACxB,MAAM,SAAS,GAAI,IAAI,CAAC,sBAAsB,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;YACxE,IAAI,MAAM,GAAG,CAAC;;AAEZ,oBAAA,EAAE,EAAE,SAAS;AACb,oBAAA,IAAI,EAAE,YAAY;AACnB,iBAAA,CAAC,CAAC;AACH,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC9B,YAAA,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAClB,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,EAAE,cAAc,EAAE,SAAS,CAAC,CAAC,SAAS,CAAC;AAClE,gBAAA,IAAI,EAAE,CAAC,GAAG,KAAI;AACZ,oBAAA,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACjB,OAAO,CAAC,GAAG,CAAC,CAAC;iBACd;AACD,gBAAA,KAAK,EAAE,CAAC,GAAG,KAAI;AACb,oBAAA,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBACnB,MAAM,CAAC,GAAG,CAAC,CAAC;iBACb;AACF,aAAA,CAAC,CAAC;AACL,SAAC,CAAC,CAAC;AACH,QAAA,OAAO,OAAO,CAAC;KAChB;AAGD,IAAA,sBAAsB,CAAC,eAAuB,EAAA;AAC5C,QAAA,MAAM,YAAY,GAAG,eAAe,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC3E,MAAM,kBAAkB,GAAG,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;QAC5F,MAAM,UAAU,GAAG,IAAI,UAAU,CAC/B,IAAI,CAAC,kBAAkB,CAAC;aACrB,KAAK,CAAC,EAAE,CAAC;AACT,aAAA,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CACrC,CAAC;QACF,OAAO,UAAU,CAAC,MAAM,CAAC;KAC1B;AAED,IAAA,sBAAsB,CAAC,WAAwB,EAAA;AAC7C,QAAA,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,WAAW,CAAC,CAAC;QAC/C,IAAI,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACjF,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AACvF,QAAA,OAAO,YAAY,CAAC;KACrB;IAGD,MAAM,GAAA;QACJ,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;YAC9C,IAAI,IAAI,CAAC,iBAAiB,EAAE;gBAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC;AACnD,gBAAA,IAAI,QAAQ,EAAE;AACZ,oBAAA,IAAI,IAAI,GAAG;wBACT,EAAE,EAAE,QAAQ,EAAE,MAAM;wBACpB,KAAK,EAAE,QAAQ,EAAE,KAAK;AACtB,wBAAA,WAAW,EAAE,EAAE;qBAChB,CAAC;AACF,oBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;AACtB,yBAAA,IAAI,CAAC,CAAC,UAA+B,KAAI;AACxC,wBAAA,OAAO,CAAC,GAAG,CAAC,6BAA6B,EAAE,UAAU,CAAC,CAAC;AACvD,wBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,GAAQ,KAAI;AAChD,4BAAA,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACjB,4BAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC;4BAClE,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;AACvC,yBAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAI;AACf,4BAAA,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACnB,4BAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;4BACjE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC;AACvC,yBAAC,CAAC,CAAC;AACL,qBAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAI;AACjB,wBAAA,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;AACjD,wBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;wBACjE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC;AACvC,qBAAC,CAAC,CAAC;AACN,iBAAA;AACF,aAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;gBAClE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC;AACvC,aAAA;AACH,SAAC,CAAC,CAAC;AACH,QAAA,OAAO,OAAO,CAAC;KAChB;IAGD,MAAM,GAAA;QACJ,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;YAC9C,IAAI,IAAI,CAAC,iBAAiB,EAAE;gBAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC;AACnD,gBAAA,IAAI,QAAQ,EAAE;AACZ,oBAAA,IAAI,IAAI,GAAG;wBACT,EAAE,EAAE,QAAQ,EAAE,MAAM;wBACpB,KAAK,EAAE,QAAQ,EAAE,KAAK;wBACtB,WAAW,EAAE,CAAC,EAAE,CAAC;qBAClB,CAAC;oBAEF,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,EAAE,cAAc,CAAC,CAAC,SAAS,CAAC;AACvD,wBAAA,IAAI,EAAE,CAAC,GAAG,KAAI;AACZ,4BAAA,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACjB,4BAAA,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,YAAY,IAAI,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;AAEzE,gCAAA,MAAM,IAAI,GAAG;AACX,oCAAA,EAAE,EAAG,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;AAC1D,oCAAA,IAAI,EAAE,YAAY;iCACnB,CAAC;gCACF,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC;gCAC7B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;gCAE9B,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,KAAI;AAC1C,oCAAA,OAAO,CAAC,GAAG,CAAC,gCAAgC,EAAE,QAAQ,CAAC,CAAC;oCACxD,OAAO,CAAC,IAAI,CAAC,CAAC;AAChB,iCAAC,CAAC;AACC,qCAAA,KAAK,CAAC,CAAC,KAAK,KAAI;AACf,oCAAA,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAC7B,oCAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;oCAC1E,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC,CAAC;AAChD,iCAAC,CAAC,CAAC;AACN,6BAAA;AAAM,iCAAA;AACL,gCAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;gCACrE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC;AAC1C,6BAAA;yBACF;AACD,wBAAA,KAAK,EAAE,CAAC,GAAG,KAAI;AACb,4BAAA,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACnB,4BAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,4BAA4B,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;4BAClF,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,4BAA4B,CAAC,CAAC,CAAC;yBACvD;AACF,qBAAA,CAAC,CAAC;AACJ,iBAAA;AACF,aAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;gBAClE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC;AACvC,aAAA;AACH,SAAC,CAAC,CAAC;AACH,QAAA,OAAO,OAAO,CAAC;KAChB;AAGD,IAAA,gBAAgB,CAAC,MAAW,EAAE,IAAS,EAAE,KAAU,EAAA;QACjD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,GAAG,CAAA,sBAAA,EAAyB,MAAM,CAAI,CAAA,EAAA,IAAI,IAAI,KAAK,CAAA,CAAE,EAAC,EAAE,CAAC;aAC1G,IAAI,CACHC,KAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC;KACtB;IAED,gBAAgB,CAAC,MAAW,EAAE,IAAS,EAAA;AACrC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,GAAG,CAAA,sBAAA,EAAyB,MAAM,CAAI,CAAA,EAAA,IAAI,EAAE,CAAC;aAC7F,IAAI,CACHA,KAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC;KACtB;AAED,IAAA,YAAY,CAAC,OAAY,EAAE,UAAA,GAAoB,EAAE,EAAA;AAC/C,QAAA,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACrB,UAAU,CAAC,MAAK;YACd,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE;AACrC,gBAAA,QAAQ,EAAE,IAAI;gBACd,UAAU;AACV,gBAAA,gBAAgB,EAAE,KAAK;AACxB,aAAA,CAAC,CAAC;AACL,SAAC,CAAC,CAAC;KACJ;AAED,IAAA,UAAU,CAAC,IAAY,EAAA;QACrB,IAAI,GAAG,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AACjD,QAAA,MAAM,UAAU,GAAQ;AACtB,YAAA,QAAQ,EAAE,qCAAqC;AAC/C,YAAA,SAAS,EAAE,kDAAkD;AAC7D,YAAA,UAAU,EAAE,iDAAiD;AAC7D,YAAA,aAAa,EAAE,oCAAoC;AACnD,YAAA,kBAAkB,EAAE,6BAA6B;AACjD,YAAA,0BAA0B,EAAE,4CAA4C;SACzE,CAAC;AACF,QAAA,MAAM,UAAU,GAAQ;AACtB,YAAA,QAAQ,EAAE,uCAAuC;AACjD,YAAA,SAAS,EAAE,sDAAsD;AACjE,YAAA,UAAU,EAAE,4CAA4C;AACxD,YAAA,aAAa,EAAE,8CAA8C;AAC7D,YAAA,kBAAkB,EAAE,iCAAiC;AACrD,YAAA,0BAA0B,EAAE,sDAAsD;SACnF,CAAC;AACF,QAAA,IAAI,IAAI,IAAI,IAAI,KAAG,IAAI,EAAE;AACvB,YAAA,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;AACxB,SAAA;AAAM,aAAA;AACL,YAAA,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;AACxB,SAAA;AACD,QAAA,OAAO,GAAG,CAAC;KACZ;AA9PU,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,sGAShB,aAAa,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AATZ,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,cAFd,MAAM,EAAA,CAAA,CAAA,EAAA;;2FAEP,eAAe,EAAA,UAAA,EAAA,CAAA;kBAH3B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;0BAUI,MAAM;2BAAC,aAAa,CAAA;;;ACvBzB;;AAEG;;ACFH;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"ssi-security-commons.mjs","sources":["../../../projects/ssi-security-commons/src/lib/ssi-security-commons.service.ts","../../../projects/ssi-security-commons/src/lib/ssi-security-commons.component.ts","../../../projects/ssi-security-commons/src/lib/services/crypto.service.ts","../../../projects/ssi-security-commons/src/lib/alert/alert.component.ts","../../../projects/ssi-security-commons/src/lib/alert/alert.component.html","../../../projects/ssi-security-commons/src/lib/shared/constants.ts","../../../projects/ssi-security-commons/src/lib/services/jwt.service.ts","../../../projects/ssi-security-commons/src/lib/services/session.service.ts","../../../projects/ssi-security-commons/src/lib/services/messages.service.ts","../../../projects/ssi-security-commons/src/lib/services/user-event.service.ts","../../../projects/ssi-security-commons/src/lib/ssi-security-commons.module.ts","../../../projects/ssi-security-commons/src/lib/services/hybrid-encryption.service.ts","../../../projects/ssi-security-commons/src/lib/services/auth-interceptor.service.ts","../../../projects/ssi-security-commons/src/lib/services/web-authn.service.ts","../../../projects/ssi-security-commons/src/public-api.ts","../../../projects/ssi-security-commons/src/ssi-security-commons.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SsiSecurityCommonsService {\n\n}\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'lib-ssi-security-commons',\n template: ` <p>ssi-security-commons works!</p>\n `,\n styles: [\n ]\n})\nexport class SsiSecurityCommonsComponent {\n\n}\n","import { Injectable } from '@angular/core';\nimport * as CryptoJS from 'crypto-js';\n\n@Injectable()\nexport class CryptoService {\n\n private configuration: any;\n private key: any;\n private secret = '&E)H@McQfThWmZq4';\n\n constructor() {\n this.configuration = {\n mode: CryptoJS.mode.ECB\n };\n const hash = CryptoJS.SHA1(this.secret);\n this.key = CryptoJS.lib.WordArray.create(hash.words.slice(0, 16 / 4));\n }\n\n encrypt(text: string): string {\n if (!text) {return '';}\n return CryptoJS.AES.encrypt(text, this.key, this.configuration).toString();\n }\n\n decrypt(text: string): string {\n if (!text) {return '';}\n return CryptoJS.AES.decrypt(text, this.key, this.configuration).toString(CryptoJS.enc.Utf8);\n }\n\n encryptWithSecret(text: string, secret: string): string {\n const hash = CryptoJS.SHA1(secret);\n const key = CryptoJS.lib.WordArray.create(hash.words.slice(0, 16 / 4));\n return CryptoJS.AES.encrypt(text, key, this.configuration).toString();\n }\n\n decryptWithSecret(text: string, secret: string): string {\n const hash = CryptoJS.SHA1(secret);\n const key = CryptoJS.lib.WordArray.create(hash.words.slice(0, 16 / 4));\n return CryptoJS.AES.decrypt(text, key, this.configuration).toString(CryptoJS.enc.Utf8);\n }\n\n}\n","import { Component, Inject } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\n\nexport interface DialogData {\n title?: string;\n icon?: string;\n type?: string;\n message?: string;\n okText?: string;\n cancelText?: string;\n}\n\n@Component({\n selector: 'lib-app-alert',\n templateUrl: './alert.component.html',\n styleUrls: ['./alert.component.scss']\n})\nexport class AlertComponent {\n\n constructor(\n public dialogRef: MatDialogRef<AlertComponent>,\n @Inject(MAT_DIALOG_DATA) public data: DialogData\n ) { }\n\n onConfirm(): void {\n this.dialogRef.close(true);\n }\n\n onCancel(): void {\n this.dialogRef.close(null);\n }\n}\n","<div class=\"sec-alert-icon\" *ngIf=\"data.icon==='warn'\">\n <svg width=\"48\" height=\"49\" viewBox=\"0 0 48 49\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M24 13.5C24.69 13.5 25.25 14.06 25.25 14.75V27.25C25.25 27.5815 25.1183 27.8995 24.8839 28.1339C24.6495 28.3683 24.3315 28.5 24 28.5C23.6685 28.5 23.3505 28.3683 23.1161 28.1339C22.8817 27.8995 22.75 27.5815 22.75 27.25V14.75C22.75 14.06 23.31 13.5 24 13.5ZM24 34.5C24.5304 34.5 25.0391 34.2893 25.4142 33.9142C25.7893 33.5391 26 33.0304 26 32.5C26 31.9696 25.7893 31.4609 25.4142 31.0858C25.0391 30.7107 24.5304 30.5 24 30.5C23.4696 30.5 22.9609 30.7107 22.5858 31.0858C22.2107 31.4609 22 31.9696 22 32.5C22 33.0304 22.2107 33.5391 22.5858 33.9142C22.9609 34.2893 23.4696 34.5 24 34.5ZM4 24.5C4 13.454 12.954 4.5 24 4.5C35.046 4.5 44 13.454 44 24.5C44 35.546 35.046 44.5 24 44.5C12.954 44.5 4 35.546 4 24.5ZM24 7C14.335 7 6.5 14.835 6.5 24.5C6.5 34.165 14.335 42 24 42C33.665 42 41.5 34.165 41.5 24.5C41.5 14.835 33.665 7 24 7Z\" fill=\"#FF4021\"/>\n </svg>\n</div>\n<h1 mat-dialog-title class=\"sec-alert-title\">{{data.title?data.title:'Alert'}}</h1>\n<div mat-dialog-content class=\"alert-min-width sec-alert-content\">\n <div>\n {{data.message}}\n </div>\n</div>\n<div class=\"sec-alert-actions\"> \n <button mat-flat-button color=\"primary\" class=\"sec-alert-ok\" (click)=\"onConfirm()\">{{data.okText ? data.okText : 'OK'}}</button>\n <button mat-flat-button class=\"sec-alert-cancel\" (click)=\"onCancel()\" *ngIf=\"data.cancelText\">{{data.cancelText ? data.cancelText : 'Cancel'}}</button>\n</div>\n","export const TOKEN = 'TOKEN';\nexport const REFRESH_TOKEN = 'REFRESH_TOKEN';\nexport const USERDATA = 'USERDATA';\nexport const LANG = 'LANG';\n","/* eslint-disable */\nimport { Injectable } from '@angular/core';\n\n@Injectable()\nexport class JwtService {\n\n public decodeTokenOld(token: string) {\n const _decodeToken = (token: string) => {\n try {\n return JSON.parse(atob(token));\n } catch {\n return;\n }\n };\n return token\n .split('.')\n .map(token => _decodeToken(token))\n .reduce((acc, curr) => {\n if (!!curr) acc = { ...acc, ...curr };\n return acc;\n }, Object.create(null));\n }\n\n public decodeToken(token: string) {\n const payload = token.split('.')[1];\n // Add padding if needed\n const base64 = payload.replace(/-/g, '+').replace(/_/g, '/');\n const padded = base64.padEnd(base64.length + (4 - base64.length % 4) % 4, '=');\n // Decode Base64 to binary string\n const binary = atob(padded);\n // Convert binary string to UTF-8 correctly\n const utf8String = decodeURIComponent(\n Array.from(binary)\n .map(c => '%' + c.charCodeAt(0).toString(16).padStart(2, '0'))\n .join('')\n );\n // Parse JSON payload\n return JSON.parse(utf8String);\n }\n\n}\n","/* eslint-disable max-lines-per-function */\n/* eslint-disable arrow-body-style */\n/* eslint-disable @typescript-eslint/naming-convention */\nimport { Inject, Injectable } from '@angular/core';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { FrontEndException, UserData } from '../user.model';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { JwtService } from './jwt.service';\nimport { CryptoService } from './crypto.service';\nimport { REFRESH_TOKEN, TOKEN, USERDATA } from '../shared/constants';\n\n\n@Injectable()\nexport class SessionService {\n\n userdata: UserData | undefined;\n token: string | undefined;\n refreshToken: string | undefined;\n endPoint: string;\n loginUrl = 'http://localhost:4200/login';\n applicationId: any;\n environment: any;\n\n constructor(private http: HttpClient,\n @Inject('environment') environment: any,\n private cryptoService: CryptoService,\n private jwtService: JwtService) {\n this.endPoint = environment.endPointCore;\n this.applicationId = environment.applicationId;\n this.environment = environment;\n }\n\n public buildUserdataFromToken(token: string): any {\n const tokenData = this.jwtService.decodeToken(token);\n const userData: UserData = {\n givenName: tokenData.given_name,\n familyName: tokenData.family_name,\n name: tokenData.name,\n roles: tokenData.realm_access.roles,\n userId: tokenData.sub,\n username: tokenData.preferred_username,\n email: tokenData.email,\n emailVerified: tokenData.email_verified,\n countryCode: tokenData.country_code,\n partyId: tokenData.party_id\n };\n return userData;\n }\n\n public async reviewSessionData(): Promise<any> {\n const value = await this.checkSessionData() as any;\n console.log(`async result: ${value}`);\n return value;\n }\n\n public setUserdata(userdata: any): void {\n this.userdata = userdata;\n }\n\n public setTokens(token: any, refreshToken: any): void {\n this.token = token;\n this.refreshToken = refreshToken;\n }\n\n public getUserdata(): UserData | undefined {\n return this.userdata;\n }\n\n public setRefreshToken(refreshToken: any): void {\n this.refreshToken = refreshToken;\n this.saveStorageData(REFRESH_TOKEN, refreshToken);\n }\n\n public getRefreshToken(): string | undefined {\n return this.refreshToken;\n }\n\n public setToken(token: any): any {\n this.token = token;\n this.saveStorageData(TOKEN, token);\n }\n\n public getToken(): any {\n return this.token;\n }\n\n public destroyCredentials(): void {\n this.token = undefined;\n this.refreshToken = undefined;\n this.deleteStorageData(TOKEN);\n this.deleteStorageData(REFRESH_TOKEN);\n }\n\n public destroyUserData(): void {\n this.userdata = undefined;\n this.deleteStorageData(USERDATA);\n }\n\n public saveCredentials(token: any, refreshToken: any): void {\n this.token = token;\n this.refreshToken = refreshToken;\n this.saveStorageData(TOKEN, token);\n this.saveStorageData(REFRESH_TOKEN, refreshToken);\n this.saveUserData(this.buildUserdataFromToken(token));\n }\n\n public saveUserData(userData: any): void {\n this.userdata = userData;\n this.saveStorageData(USERDATA, JSON.stringify(userData));\n }\n\n public isLoggedIn(): boolean {\n return !!this.userdata;\n }\n\n logout(): Promise<any> {\n let clientId = this.environment.authClient;\n if (this.refreshToken) {\n const decoded = this.jwtService.decodeToken(this.refreshToken);\n clientId = decoded.azp;\n }\n return new Promise((resolve, reject) => {\n this.logoutApiClient(clientId).subscribe(res => {\n console.log(res);\n this.destroyCredentials();\n this.destroyUserData();\n this.goToLogin();\n resolve(null);\n }, (err) => {\n this.destroyCredentials();\n this.destroyUserData();\n console.error(err);\n reject(err);\n });\n });\n }\n\n getNewToken(refreshToken: string): any {\n console.log('getNewToken');\n const body = 'grant_type=refresh_token' + '&refresh_token=' + refreshToken + '&client_id=' + this.environment.authClient;\n\n const headers = new HttpHeaders().set('Content-Type', 'application/x-www-form-urlencoded');\n return this.http.post<any>(`${this.environment.authEndPoint}/realms/${this.environment.authRealm}/protocol/openid-connect/token`,\n body, {headers})\n .pipe(\n map(res => res));\n }\n\n getNewTokenClient(refreshToken: string, clientId: string): any {\n console.log('getNewToken');\n const body = 'grant_type=refresh_token' + '&refresh_token=' + refreshToken + '&client_id=' + clientId;\n\n const headers = new HttpHeaders().set('Content-Type', 'application/x-www-form-urlencoded');\n return this.http.post<any>(`${this.environment.authEndPoint}/realms/${this.environment.authRealm}/protocol/openid-connect/token`,\n body, {headers})\n .pipe(\n map(res => res));\n }\n\n getTokenClientCode(refreshToken: string, clientId: string): Observable<any> {\n console.log('getNewToken');\n const body = 'grant_type=refresh_token' + '&refresh_token=' + refreshToken + '&client_id=' + clientId;\n\n const headers = new HttpHeaders().set('Content-Type', 'application/x-www-form-urlencoded');\n return this.http.post<any>(`${this.environment.authEndPoint}/realms/${this.environment.authRealm}/protocol/openid-connect/token`,\n body, {headers})\n .pipe(\n map(res => res));\n }\n\n\n getLoginUrl(): Observable<any> {\n return this.http.get<any>(this.endPoint + '/auth/login/url/'+this.environment.authClient)\n .pipe(\n map(res => res));\n }\n\n getHomeUrl(): Observable<any> {\n return this.http.get<any>(this.endPoint + '/auth/home/url/'+this.environment.authClient)\n .pipe(\n map(res => res));\n }\n\n logoutApi(): Observable<any> {\n const body = 'refresh_token=' + this.refreshToken + '&client_id=' + this.environment.authClient;\n const headers = new HttpHeaders().set('Content-Type', 'application/x-www-form-urlencoded');\n return this.http.post<any>(`${this.environment.authEndPoint}/realms/${this.environment.authRealm}/protocol/openid-connect/logout`,\n body, {headers})\n .pipe(\n map(res => res));\n }\n\n logoutApiClient(clientId: string): Observable<any> {\n const body = 'refresh_token=' + this.refreshToken + '&client_id=' + clientId;\n const headers = new HttpHeaders().set('Content-Type', 'application/x-www-form-urlencoded');\n return this.http.post<any>(`${this.environment.authEndPoint}/realms/${this.environment.authRealm}/protocol/openid-connect/logout`,\n body, {headers})\n .pipe(\n map(res => res));\n }\n\n goToLogin(): void {\n this.getLoginUrl().subscribe(res => {\n console.log(res);\n const loginUrl = res.data;\n window.location.href = loginUrl;\n }, (err) => {\n console.error(err);\n });\n }\n\n public loadSessionData(): void {\n let data;\n let token;\n let refreshToken;\n if (this.environment.production) {\n const u = this.cryptoService.encrypt(USERDATA);\n const t = this.cryptoService.encrypt(TOKEN);\n const r = this.cryptoService.encrypt(REFRESH_TOKEN);\n data = window.localStorage.getItem(u);\n token = window.localStorage.getItem(t);\n refreshToken = window.localStorage.getItem(r);\n if (data && token && refreshToken) {\n data = this.cryptoService.decrypt(data);\n token = this.cryptoService.decrypt(token);\n refreshToken = this.cryptoService.decrypt(refreshToken);\n }\n } else {\n data = window.localStorage.getItem(USERDATA);\n token = window.localStorage.getItem(TOKEN);\n refreshToken = window.localStorage.getItem(REFRESH_TOKEN);\n }\n if (data && token && refreshToken) {\n const user = JSON.parse(data);\n this.setTokens(token, refreshToken);\n this.setUserdata(user);\n }\n }\n\n userHasOptionsInApp(userId: any, applicationId: any): Observable<any> {\n return this.http.get<any>(this.endPoint + `/security/option/${applicationId}/${userId}`)\n .pipe(\n map(res => res));\n }\n\n checkAppPermissions(): Promise<any> {\n const promise = new Promise((resolve, reject) => {\n console.log(this.userdata?.userId, this.applicationId);\n if (this.applicationId) {\n this.userHasOptionsInApp(this.userdata?.userId, this.applicationId).subscribe(res => {\n console.log(res);\n if (res.data) {\n resolve('ok');\n } else {\n this.getHomeUrl().subscribe(res1 => {\n console.log(res1);\n const homeUrl = res1.data;\n window.location.href = homeUrl;\n reject('nok');\n }, (err) => {\n console.error(err);\n reject('nok');\n });\n }\n }, (err) => {\n console.error(err);\n reject('nok');\n });\n } else {\n resolve('ok');\n }\n });\n return promise;\n }\n\n\n // eslint-disable-next-line max-len\n public getOptionsUser(applicationId: number | null, type: string | null, language: string | null, entityCode: string | null, parentOptionId: number | null, includeData: boolean | null): Observable<any> {\n const param = {\n userId: this.userdata?.userId,\n applicationId,\n type,\n language,\n entityCode,\n parentOptionId,\n includeData\n };\n return this.http.post<any>(this.endPoint + '/security/option/user', param)\n .pipe(\n map(res => res));\n }\n\n registerException(param: FrontEndException): Observable<any> {\n const headers = new HttpHeaders().set('skipError', 'true');\n return this.http.post<any>(this.endPoint + '/auth/exception/log', param, {headers})\n .pipe(\n map(res => res));\n }\n\n saveStorageData(key: string, value: string): void {\n if (this.environment.production) {\n const k = this.cryptoService.encrypt(key);\n const v = this.cryptoService.encrypt(value);\n window.localStorage.setItem(k, v);\n } else {\n window.localStorage.setItem(key, value);\n }\n }\n\n deleteStorageData(key: string): void {\n if (this.environment.production) {\n const k = this.cryptoService.encrypt(key);\n window.localStorage.removeItem(k);\n } else {\n window.localStorage.removeItem(key);\n }\n }\n\n getStorageData(key: string): string | null {\n let res: string | null;\n if (this.environment.production) {\n const k = this.cryptoService.encrypt(key);\n const v = window.localStorage.getItem(k);\n if (v) {\n res = this.cryptoService.decrypt(v);\n return res;\n } else {\n res = null;\n }\n } else {\n res = window.localStorage.getItem(key);\n }\n return res;\n }\n\n\n public removeUrlData(): void {\n const url = new URL(window.location.href);\n const queryParams = url.searchParams;\n queryParams.delete('code');\n queryParams.delete('clientId');\n const newUrl = url.origin + url.pathname + '?' + queryParams.toString();\n window.history.replaceState({}, document.title, newUrl);\n }\n\n public checkSessionData(): Promise<any> {\n return this.checkSessionDataClient(null);\n }\n\n public checkSessionDataClient(clientId: any): Promise<any> {\n const promise = new Promise((resolve, reject) => {\n let data;\n let token;\n let refreshToken;\n\n const currentUrl = new URL(window.location.href);\n const code = currentUrl.searchParams.get('code');\n console.log('code', code);\n if (code) {\n const codeDecoded = this.getDecodedAuthCode(code);\n // console.log('code', codeDecoded);\n const cliId = currentUrl.searchParams.get('clientId');\n const decoded = this.jwtService.decodeToken(codeDecoded);\n let clientIdFinal = decoded.azp;\n if (clientId) {\n clientIdFinal = clientId;\n } else if (cliId) {\n clientIdFinal = cliId;\n }\n console.log('clientIdFinal', cliId);\n this.getTokenClientCode(codeDecoded, clientIdFinal).subscribe({\n next: (res) => {\n console.log(res);\n token = res.access_token;\n refreshToken = res.refresh_token;\n this.saveCredentials(token, refreshToken);\n this.checkAppPermissions().then((res1) => {\n console.log(res1);\n this.removeUrlData();\n resolve('OK');\n }, (err) => {\n console.error(err);\n reject(err);\n });\n },\n error: (err) => {\n console.error(err);\n reject(err);\n }\n });\n } else {\n data = this.getStorageData(USERDATA);\n token = this.getStorageData(TOKEN);\n refreshToken = this.getStorageData(REFRESH_TOKEN);\n if (data && token && refreshToken) {\n this.saveCredentials(token, refreshToken);\n this.checkAppPermissions().then((res1) => {\n console.log(res1);\n resolve('OK');\n }, (err) => {\n console.error(err);\n reject(err);\n });\n } else {\n const url = window.location.href;\n if (url.indexOf('/redirect')>-1) {\n resolve('OK');\n } else {\n this.destroyCredentials();\n this.destroyUserData();\n this.getLoginUrl().subscribe(res1 => {\n console.log(res1);\n this.loginUrl = res1.data;\n const urlObj = new URL(url);\n // Remove 'code' query param if it exists\n urlObj.searchParams.delete('code');\n if (url.indexOf('/login')<0 && url.indexOf('/forgot')<0 &&\n url.indexOf('/reset')<0 && url.indexOf('/verify')<0 &&\n url.indexOf('/sign_up')<0) {\n window.location.href = this.loginUrl + '?continue='+encodeURIComponent(urlObj.toString());\n }\n resolve('NOK');\n }, (err) => {\n console.error(err);\n reject(err);\n });\n }\n }\n }\n });\n return promise;\n }\n\n\n\n public checkSessionDataMicrofront(): Promise<any> {\n const promise = new Promise((resolve, reject) => {\n let data;\n let token;\n let refreshToken;\n if (this.environment.production) {\n const u = this.cryptoService.encrypt(USERDATA);\n const t = this.cryptoService.encrypt(TOKEN);\n const r = this.cryptoService.encrypt(REFRESH_TOKEN);\n const d1 = window.localStorage.getItem(u);\n const d2 = window.localStorage.getItem(t);\n const d3 = window.localStorage.getItem(r);\n if (d1 && d2 && d3) {\n data = this.cryptoService.decrypt(d1);\n token = this.cryptoService.decrypt(d2);\n refreshToken = this.cryptoService.decrypt(d3);\n }\n } else {\n data = window.localStorage.getItem(USERDATA);\n token = window.localStorage.getItem(TOKEN);\n refreshToken = window.localStorage.getItem(REFRESH_TOKEN);\n }\n if (data && token && refreshToken) {\n console.log('local session ok');\n this.saveCredentials(token, refreshToken);\n resolve('OK');\n } else {\n console.error('local session nok');\n reject('NOK');\n }\n });\n return promise;\n }\n\n public getAuthCode(): string {\n const enc = this.cryptoService.encrypt(this.refreshToken?this.refreshToken:'');\n return encodeURIComponent(enc);\n }\n\n private getDecodedAuthCode(code: string): string {\n const dec = decodeURIComponent(code);\n return this.cryptoService.decrypt(dec);\n }\n\n public refreshSession(): Promise<any> {\n const promise = new Promise((resolve, reject) => {\n const refreshToken = this.getRefreshToken();\n if (refreshToken) {\n const decoded = this.jwtService.decodeToken(refreshToken);\n this.getNewTokenClient(refreshToken, decoded.azp).subscribe({\n next: (res: any) => {\n console.log(res);\n this.setToken(res.access_token);\n this.setRefreshToken(res.refresh_token);\n this.saveCredentials(res.access_token, res.refresh_token);\n resolve('OK');\n },\n error: (err: any) => {\n console.error(err);\n reject(err);\n }\n });\n } else {\n reject('NOK');\n }\n });\n return promise;\n }\n\n}\n\n","/* eslint-disable @typescript-eslint/naming-convention */\n/* eslint-disable max-lines-per-function */\n/* eslint-disable quote-props */\nimport { HttpErrorResponse, HttpRequest } from '@angular/common/http';\nimport { Inject, Injectable } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatSnackBar } from '@angular/material/snack-bar';\n// import { Router } from '@angular/router';\nimport { AlertComponent } from '../alert/alert.component';\nimport { FrontEndException } from '../user.model';\nimport { SessionService } from './session.service';\n\n\n@Injectable()\nexport class MessagesService {\n\n private interceptorMessages: any;\n applicationId: any;\n\n constructor(\n public auth: SessionService,\n // private router: Router,\n private snackBar: MatSnackBar,\n public dialog: MatDialog,\n @Inject('environment') environment: any\n ) {\n this.applicationId = environment.applicationId;\n }\n\n\n // eslint-disable-next-line max-lines-per-function, complexity\n showErrorMessage(error: HttpErrorResponse, request: HttpRequest<any>): void {\n console.log('error: ', error);\n this.registerLog(error, request);\n const msgs: any = this.getInterceptorMessages();\n switch (error.status) {\n case 302: {\n this.messageSnackError(error);\n break;\n }\n case 400: {\n if (error.error.error === 'invalid_grant') {\n this.goNavigateLogin(msgs);\n } else {\n this.showSnackError(error.message, ['snack-error']);\n }\n break;\n }\n case 403: {\n this.goNavigateLogin(msgs);\n break;\n }\n case 404: {\n this.showSnackError(msgs.auth_interceptor.not_found, ['snack-error']);\n break;\n }\n case 409: {\n this.messageDialog(error, msgs);\n break;\n }\n case 412: {\n this.showSnackError(error.error.responseMessage ?? error.error.message, ['snack-error']);\n break;\n }\n case 422: {\n this.messageDialog(error, msgs);\n break;\n }\n case 428: {\n this.showSnackError(error.error.responseMessage ?? error.error.message, ['snack-error']);\n break;\n }\n case 500: {\n this.messageAlertDialog(error, msgs);\n break;\n }\n case 503: {\n this.showSnackError(msgs.auth_interceptor.unavailable, ['snack-error']);\n break;\n }\n case -1: {\n this.showSnackError(msgs.auth_interceptor.connection_error);\n break;\n }\n case 0: {\n this.showSnackError(msgs.auth_interceptor.connection_error);\n break;\n }\n }\n }\n\n messageSnackError(error: any): void {\n const errorMessage = error.error && error.error.responseMessage ? error.error.responseMessage :\n error.error.message ? error.error.message : error.message;\n this.showSnackError(errorMessage, ['snack-error']);\n }\n\n goNavigateLogin(msgs: any): void {\n // if (this.router.url !== '/login') {\n this.showSnackError(msgs.auth_interceptor.session_lost, ['snack-error']);\n // this.router.navigate(['/login']);\n this.auth.destroyCredentials();\n this.auth.getLoginUrl().subscribe(res => {\n console.log(res);\n const loginUrl = res.data;\n const url = window.location.href;\n const urlObj = new URL(url);\n urlObj.searchParams.delete('code');\n if (url.indexOf(loginUrl) < 0) {\n window.location.href = loginUrl + '?continue=' + encodeURIComponent(urlObj.toString());\n }\n }, (err) => {\n console.error(err);\n });\n // }\n }\n\n messageAlertDialog(error: any, msgs: any): void {\n console.log(error);\n let message = '';\n if (error.error.description) {\n message = error.error.description;\n if (error.error.exception) { message = message + '\\n\\n' + msgs.auth_interceptor.code + ': ' + error.error.exception; }\n } else if (error.error.responseMessage) {\n message = error.error.responseMessage;\n if (error.error.exceptionId) { message = message + '\\n\\n' + msgs.auth_interceptor.code + ': ' + error.error.exceptionId; }\n } else if (error.error.message) {\n message = error.error.message;\n if (error.error.exceptionId) { message = message + '\\n\\n' + msgs.auth_interceptor.code + ': ' + error.error.exceptionId; }\n if (error.error.referenceError) { message = message + '\\n\\n' + msgs.auth_interceptor.code + ': ' + error.error.referenceError; }\n } else if (error.message) {\n message = error.message;\n if (error.error.exceptionId) { message = message + '\\n\\n' + msgs.auth_interceptor.code + ': ' + error.error.exceptionId; }\n } else {\n message = msgs.auth_interceptor.message;\n }\n this.dialog.open(AlertComponent, {\n disableClose: true,\n data: { title: msgs.auth_interceptor.title, message, icon: 'warn', okText: msgs.auth_interceptor.accept_text }\n });\n }\n\n messageDialog(error: any, msgs: any): void {\n console.log(error);\n let message = '';\n if (error.error.description) {\n message = error.error.description;\n } else if (error.error.responseMessage) {\n message = error.error.responseMessage;\n } else if (error.error.message) {\n message = error.error.message;\n } else if (error.message) {\n message = error.message;\n } else {\n message = msgs.auth_interceptor.message;\n }\n this.dialog.open(AlertComponent, {\n disableClose: true,\n data: { title: msgs.auth_interceptor.title, message, icon: 'warn', okText: msgs.auth_interceptor.accept_text }\n });\n }\n\n showSnackError(message: any, panelClass: any[] = []): void {\n console.log(message);\n setTimeout(() => {\n this.snackBar.open(message, undefined, {\n duration: 5000,\n panelClass,\n verticalPosition: 'top'\n });\n });\n }\n\n setInterceptorMessages(message: any): void {\n this.interceptorMessages = message;\n }\n\n // eslint-disable-next-line max-lines-per-function\n getInterceptorMessages(): string {\n if (!this.interceptorMessages) {\n let lang = window.localStorage.getItem('LANG');\n if (!lang) {\n const userLang = navigator.language;\n lang = userLang.split('-')[0];\n }\n const messagesEn = {\n auth_interceptor: {\n session_lost: 'Session lost, you have to login again.',\n not_found: 'Resource not found',\n title: 'We are sorry',\n message: 'We had a problem trying to process your request.',\n code: 'Code',\n unavailable: 'Service unavailable, please try again in a few minutes.',\n connection_error: 'Could not connect to server, please check your network connection.',\n accept_text: 'OK',\n cancel_text: 'Cancel'\n }\n };\n const messagesEs = {\n auth_interceptor: {\n session_lost: 'Su sesión expiró, debe iniciar sesión nuevamente.',\n not_found: 'Recurso no encontrado',\n title: 'Lo sentimos',\n message: 'Tuvimos un problema al tratar de procesar su solicitud.',\n code: 'Código',\n unavailable: 'Servicio no disponible, inténtelo de nuevo en unos minutos.',\n connection_error: 'No se pudo conectar al servidor, verifique su conexión de red.',\n accept_text: 'Aceptar',\n cancel_text: 'Cancelar'\n }\n };\n if (lang && lang === 'es') {\n this.interceptorMessages = messagesEs;\n } else {\n this.interceptorMessages = messagesEn;\n }\n }\n return this.interceptorMessages;\n }\n\n\n registerLog(error: HttpErrorResponse, request: HttpRequest<any>): void {\n const u = this.auth.getUserdata();\n const param: FrontEndException = {\n httpStatus: error.status,\n httpStatusText: error.statusText,\n errorMessage: error.message,\n currentUrl: window.location.href,\n requestUrl: request.urlWithParams ? request.urlWithParams : undefined,\n requestBody: request.body ? JSON.stringify(this.obfuscateData(request.body)) : undefined,\n userId: u ? u.userId : undefined,\n applicationId: this.applicationId,\n requestDate: new Date()\n };\n this.auth.registerException(param).subscribe({\n next: (response) => {\n console.log('registerException', response);\n },\n error: (err: any) => {\n console.error('registerException', err);\n }\n });\n }\n\n private obfuscateData(data: any): any {\n const sensitiveKeys = ['password', 'card', 'cardnumber', 'token'];\n const obfuscateHandle = (input: any): any => {\n // Si es array itera uno por uno\n if (Array.isArray(input)) {\n return input.map(item => obfuscateHandle(item));\n }\n\n // Si es objeto valida si el atributo es string u object, lo demas lo salta\n if (typeof input === 'object' && input !== undefined) {\n const result: any = {};\n for (const key of Object.keys(input)) {\n const lowerKey = key.toLowerCase();\n const value = input[key];\n if (sensitiveKeys.includes(lowerKey) && typeof value === 'string') { // Key string\n result[key] = '*********'; //btoa(value);\n } else if (typeof value === 'object') { // Key object -> busca en objeto anidado\n result[key] = obfuscateHandle(value);\n } else {\n result[key] = value;\n }\n }\n return result;\n }\n return input;\n };\n return obfuscateHandle(data);\n }\n\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Inject, Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\n\n@Injectable()\nexport class UserEventService {\n\n endPoint: string;\n\n constructor(private http: HttpClient,\n @Inject('environment') environment: any) {\n this.endPoint = environment.endPointCore;\n }\n\n public registerUserEvent(eventType: string,\n optionId: number | null,\n entityType: string | null,\n entityId: string | null,\n paramsIn: string | null,\n paramsOut: string | null): Observable<any> {\n const param = {\n eventType,\n optionId,\n entityType,\n entityId,\n paramsIn,\n paramsOut\n };\n return this.http.post<any>(this.endPoint + '/security/user/event', param)\n .pipe(\n map((res: any) => res));\n }\n\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\nimport { CryptoService } from './services/crypto.service';\nimport { AlertComponent } from './alert/alert.component';\nimport { MessagesService } from './services/messages.service';\nimport { SessionService } from './services/session.service';\nimport { SsiSecurityCommonsComponent } from './ssi-security-commons.component';\nimport { MatButtonModule } from '@angular/material/button';\nimport { JwtService } from './services/jwt.service';\nimport { CommonModule } from '@angular/common';\nimport { UserEventService } from \"./services/user-event.service\";\n\n\n@NgModule({\n declarations: [\n SsiSecurityCommonsComponent,\n AlertComponent\n ],\n imports: [\n MatSnackBarModule,\n MatDialogModule,\n MatButtonModule,\n CommonModule\n ],\n exports: [\n SsiSecurityCommonsComponent\n ],\n providers: [\n MessagesService,\n SessionService,\n CryptoService,\n JwtService,\n UserEventService\n ]\n})\nexport class SsiSecurityCommonsModule {\n static forRoot(environment: any): ModuleWithProviders<SsiSecurityCommonsModule> {\n return {\n ngModule: SsiSecurityCommonsModule,\n providers: [{provide: 'environment', useValue: environment}]\n };\n }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class HybridEncryptionService {\n private publicKeyPem = `-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAydjMaPDQvcNCPsB3zmuA\nRyDw/eVPjH8eITcWq+TnmqW4FCxwTxAQQy8bEnO7HC8eUVaD8tlNaLVjiRRCo0+o\nJMDZC5S9aUGpz/Ueghp5aziu0abk7pZ+x/BrfpAN+7VteZh00d/YAtZlbQ6kHM44\noz2d7Fj1MPzB22ZoEnmcFqBlvsW8yblM38HEAKRXj9733XiayDoq6ivP046IFBpP\nCgg7kOLfOYMt7ZNkaKzDeYBfQAvhW+Nd6EN+8CCrI8//fnwRbrItzgR5KXwJ0F5T\nw6/YhIkJi7Ce6kR8D7aYdXNoRKzX5m+GxSkLtiMImHOnVWg+wo/lvCbLRWS+QQ14\npQIDAQAB\n-----END PUBLIC KEY-----`;\n private publicKey!: CryptoKey;\n\n constructor() {\n this.loadPublicKey();\n }\n\n /** Import RSA public key */\n private async loadPublicKey(): Promise<void> {\n const pemHeader = '-----BEGIN PUBLIC KEY-----';\n const pemFooter = '-----END PUBLIC KEY-----';\n const pemContents = this.publicKeyPem\n .replace(pemHeader, '')\n .replace(pemFooter, '')\n .replace(/\\s/g, '');\n\n const binaryDer = Uint8Array.from(atob(pemContents), c => c.charCodeAt(0));\n\n this.publicKey = await crypto.subtle.importKey(\n 'spki',\n binaryDer.buffer,\n {\n name: 'RSA-OAEP',\n hash: 'SHA-256'\n },\n true,\n ['encrypt']\n );\n }\n\n /** Generate a random AES key */\n private async generateAesKey(): Promise<CryptoKey> {\n return crypto.subtle.generateKey(\n { name: 'AES-GCM', length: 256 },\n true,\n ['encrypt', 'decrypt']\n );\n }\n\n /** Encrypt large data with AES and AES key with RSA */\n async encrypt(data: any): Promise<{ encryptedKey: string; encryptedData: string; iv: string }> {\n if (!this.publicKey) {\n await this.loadPublicKey();\n }\n\n // Convert payload to JSON + Uint8Array\n const encoder = new TextEncoder();\n const plainBytes = encoder.encode(JSON.stringify(data));\n\n // Generate AES key + IV\n const aesKey = await this.generateAesKey();\n const iv = crypto.getRandomValues(new Uint8Array(12)); // AES-GCM nonce\n\n // Encrypt data with AES\n const encryptedDataBuffer = await crypto.subtle.encrypt(\n { name: 'AES-GCM', iv },\n aesKey,\n plainBytes\n );\n\n // Export AES key\n const rawAesKey = await crypto.subtle.exportKey('raw', aesKey);\n\n // Encrypt AES key with RSA\n const encryptedKeyBuffer = await crypto.subtle.encrypt(\n { name: 'RSA-OAEP' },\n this.publicKey,\n rawAesKey\n );\n\n return {\n encryptedKey: this.arrayBufferToBase64(encryptedKeyBuffer),\n encryptedData: this.arrayBufferToBase64(encryptedDataBuffer),\n iv: this.arrayBufferToBase64(iv.buffer)\n };\n }\n\n /** Convert ArrayBuffer → Base64 */\n private arrayBufferToBase64(buffer: ArrayBuffer): string {\n return btoa(String.fromCharCode(...new Uint8Array(buffer)));\n }\n}\n","/* eslint-disable */\nimport { Inject, Injectable, Injector } from '@angular/core';\nimport {\n HttpRequest,\n HttpHandler,\n HttpEvent,\n HttpInterceptor,\n HttpErrorResponse,\n HttpResponse\n} from '@angular/common/http';\nimport { BehaviorSubject, from, Observable, throwError } from 'rxjs';\nimport { catchError, filter, map, switchMap, take, tap } from 'rxjs/operators';\nimport { MessagesService } from './messages.service';\nimport { CryptoService } from './crypto.service';\nimport { Router } from '@angular/router';\nimport { SessionService } from './session.service';\nimport { LANG, TOKEN } from '../shared/constants';\nimport { JwtService } from './jwt.service';\nimport { HybridEncryptionService } from './hybrid-encryption.service';\n\n\n@Injectable()\nexport class AuthInterceptor implements HttpInterceptor {\n\n private environment;\n\n constructor(private cryptoService: CryptoService, private hybridEncryptionService: HybridEncryptionService, @Inject('environment') environment: any) {\n console.log('AuthInterceptor constructor');\n this.environment = environment;\n }\n\n intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n\n let token;\n if(this.environment.production) {\n const t = this.cryptoService.encrypt(TOKEN);\n const to = window.localStorage.getItem(t);\n if (to) {\n token = this.cryptoService.decrypt(to);\n }\n } else {\n token = window.localStorage.getItem(TOKEN);\n }\n\n let encrypt = request.headers.get('encrypted');\n if(encrypt && encrypt === 'true'){\n let body = request.body;\n let bodyStr = JSON.stringify(body);\n var newBody = {\n encrypted: this.cryptoService.encrypt(bodyStr)\n }\n request = request.clone({\n body: newBody\n });\n }\n if (token) {\n request = request.clone({\n setHeaders: {\n Authorization: 'Bearer ' + token,\n }\n });\n }\n\n const l = window.localStorage.getItem(LANG);\n if (l && request.url.indexOf(this.environment.authEndPoint)<0) {\n request = request.clone({\n headers: request.headers.append('Language', l)\n });\n }\n\n const isEncrypted = request.headers.get('X-Encrypted');\n if (isEncrypted === 'true' && request.body) {\n return from(this.hybridEncryptionService.encrypt(request.body)).pipe(\n switchMap(encryptedPayload => {\n const newReq = request.clone({\n body: encryptedPayload\n });\n return next.handle(newReq);\n })\n );\n }\n\n return next.handle(request);\n }\n}\n\n\n@Injectable()\nexport class ResponseInterceptor implements HttpInterceptor {\n\n private messages: MessagesService | undefined;\n private isRefreshing = false;\n private refreshTokenSubject: BehaviorSubject<any> = new BehaviorSubject<any>(null);\n\n constructor(private injector: Injector,\n private router: Router,\n private cryptoService: CryptoService,\n private jwtService: JwtService,\n private sessionService: SessionService) {\n setTimeout(() => {\n this.messages = this.injector.get(MessagesService);\n })\n }\n\n intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n\n return next.handle(request).pipe(\n map((event: HttpEvent<any>) => {\n if (event instanceof HttpResponse) {\n let encrypt = request.headers.get('encrypted');\n if(encrypt && encrypt === 'true' && event.body.encrypted){\n event = event.clone({body: this.decryptBody(event.body)});\n }\n }\n return event;\n }),\n catchError(error => {\n if (error instanceof HttpErrorResponse) {\n console.error(error);\n let nerror = error;\n if (this.router.url != '/login' && this.router.url.indexOf('/login')<0) {\n if (nerror.status === 401) {\n return this.handle401Error(request, next);\n } else {\n let skipError = request.headers.get('skipError');\n if(skipError && skipError==='true'){\n return throwError(nerror);\n } else {\n this.messages?.showErrorMessage(nerror, request);\n }\n }\n } else {\n return throwError(nerror);\n }\n }\n })) as Observable<HttpEvent<any>>;\n }\n\n decryptBody(body: any): any {\n let encrypted = body.encrypted;\n let strJson = this.cryptoService.decrypt(encrypted);\n return JSON.parse(strJson);\n }\n\n\n private handle401Error(request: HttpRequest<any>, next: HttpHandler) {\n if (!this.isRefreshing) {\n this.isRefreshing = true;\n this.refreshTokenSubject.next(null);\n const refreshToken = this.sessionService.getRefreshToken();\n if (refreshToken){\n const decoded = this.jwtService.decodeToken(refreshToken);\n return this.sessionService.getNewTokenClient(refreshToken, decoded.azp).pipe(\n switchMap((res: any) => {\n console.log('refresh token response');\n console.log(res);\n this.isRefreshing = false;\n this.sessionService.setToken(res.access_token);\n this.sessionService.setRefreshToken(res.refresh_token);\n this.refreshTokenSubject.next(res.access_token);\n return next.handle(this.addTokenHeader(request, res.access_token));\n }),\n catchError((err) => {\n this.isRefreshing = false;\n this.sessionService.logout();\n this.goToLogin();\n return throwError(err);\n })\n );\n }\n } else {\n return this.refreshTokenSubject.pipe(\n filter(token => token !== null),\n take(1),\n switchMap((token) => next.handle(this.addTokenHeader(request, token)))\n );\n }\n }\n\n private addTokenHeader(request: HttpRequest<any>, token: string) {\n return request.clone({ headers: request.headers.set('Authorization', 'Bearer ' + token) });\n }\n\n private goToLogin(): void {\n this.sessionService.getLoginUrl().subscribe(res => {\n console.log(res);\n const loginUrl = res.data;\n const url = window.location.href;\n if (url.indexOf(loginUrl)<0) {\n window.location.href = loginUrl + '?continue='+encodeURIComponent(url);\n }\n }, (err) => {\n console.error(err);\n });\n }\n\n}\n\n\n\n\n","/* eslint-disable max-lines-per-function */\n/* eslint-disable prefer-const */\nimport { Inject, Injectable } from '@angular/core';\nimport { UserWebauthn } from '../user.model';\nimport { SessionService } from './session.service';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable, map } from 'rxjs';\nimport { MatSnackBar } from '@angular/material/snack-bar';\n\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class WebAuthnService {\n\n webAuthnAvailable = !!navigator.credentials && !!navigator.credentials.create;\n environment: any;\n\n public constructor(\n private sessionService: SessionService,\n private http: HttpClient,\n private snackBar: MatSnackBar,\n @Inject('environment') environment: any\n ) {\n this.environment = environment;\n }\n\n webAuthnSignup(user: UserWebauthn): Promise<any> {\n console.log('[webAuthnSignup]');\n const publicKeyCredentialCreationOptions: PublicKeyCredentialCreationOptions = {\n challenge: this.getChallenge(),\n rp: {\n name: 'WebAuthn',\n },\n user: {\n id: Uint8Array.from(user.id, c => c.charCodeAt(0)),\n name: user.email,\n displayName: user.email,\n },\n pubKeyCredParams: [{ alg: -7, type: 'public-key' }],\n authenticatorSelection: {\n authenticatorAttachment: 'platform',\n },\n timeout: 60000,\n attestation: 'direct'\n };\n\n return navigator.credentials.create({\n publicKey: publicKeyCredentialCreationOptions,\n });\n\n }\n\n webAuthnSignin(user: UserWebauthn): Promise<any> {\n console.log(user);\n /* {\n \"id\": \"b18ee077-f896-44f4-a2d4-3ac831eb1c90\",\n \"email\": \"test.user@email.com\",\n \"password\": \"\",\n \"credentials\": [\n [\n {\n \"id\": {},\n \"type\": \"public-key\"\n }\n ]\n ]\n } */\n let publicKeyCredentials = {\n challenge: this.getChallenge(),\n allowCredentials: user.credentials[0]\n };\n return navigator.credentials.get({ publicKey: publicKeyCredentials });\n }\n\n\n getChallenge(): Uint8Array {\n return Uint8Array.from('jEfcn1CsGFxBiXYtJMSGDycPqPoyFJ3Z', c => c.charCodeAt(0));\n }\n\n register(user: UserWebauthn, newCredentialInfo: any): Promise<any> {\n const promise = new Promise((resolve, reject) => {\n let enc = new TextDecoder('utf-8');\n let clientDataJSON = enc.decode(newCredentialInfo.response.clientDataJSON);\n console.log(clientDataJSON);\n let clientData = JSON.parse(clientDataJSON);\n console.log(clientData);\n const publicKey = this.arrayBufferToBase64Url(newCredentialInfo.rawId);\n let idList = [{\n // id: newCredentialInfo.rawId,\n id: publicKey,\n type: 'public-key'\n }];\n user.credentials.push(idList);\n console.log(user);\n this.addAttributeUser(user.id, 'webauthn_key', publicKey).subscribe({\n next: (res) => {\n console.log(res);\n resolve(res);\n },\n error: (err) => {\n console.error(err);\n reject(err);\n }\n });\n });\n return promise;\n }\n\n\n base64UrlToArrayBuffer(base64UrlString: string): ArrayBuffer {\n const base64String = base64UrlString.replace(/-/g, '+').replace(/_/g, '/');\n const paddedBase64String = base64String.padEnd(Math.ceil(base64String.length / 4) * 4, '=');\n const uint8Array = new Uint8Array(\n atob(paddedBase64String)\n .split('')\n .map((char) => char.charCodeAt(0))\n );\n return uint8Array.buffer;\n }\n\n arrayBufferToBase64Url(arrayBuffer: ArrayBuffer): string {\n const uint8Array = new Uint8Array(arrayBuffer);\n let base64String = btoa(String.fromCharCode.apply(null, Array.from(uint8Array)));\n base64String = base64String.replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/, '');\n return base64String;\n }\n\n\n signUp(): Promise<any> {\n const promise = new Promise((resolve, reject) => {\n if (this.webAuthnAvailable) {\n const userData = this.sessionService.getUserdata();\n if (userData) {\n let user = {\n id: userData?.userId,\n email: userData?.email,\n credentials: []\n };\n this.webAuthnSignup(user)\n .then((credential: PublicKeyCredential) => {\n console.log('credentials.create RESPONSE', credential);\n this.register(user, credential).then((res: any) => {\n console.log(res);\n this.showSnackBar(this.getMessage('signUpOk'), ['snack-success']);\n resolve(this.getMessage('signUpOk'));\n }).catch((err) => {\n console.error(err);\n this.showSnackBar(this.getMessage('signUpNok'), ['snack-error']);\n reject(this.getMessage('signUpNok'));\n });\n }).catch((error) => {\n console.error('credentials.create ERROR', error);\n this.showSnackBar(this.getMessage('signUpNok'), ['snack-error']);\n reject(this.getMessage('signUpNok'));\n });\n }\n } else {\n this.showSnackBar(this.getMessage('browserNok'), ['snack-error']);\n reject(this.getMessage('browserNok'));\n }\n });\n return promise;\n }\n\n\n signIn(): Promise<any> {\n const promise = new Promise((resolve, reject) => {\n if (this.webAuthnAvailable) {\n const userData = this.sessionService.getUserdata();\n if (userData) {\n let user = {\n id: userData?.userId,\n email: userData?.email,\n credentials: [{}]\n };\n\n this.getAttributeUser(user.id, 'webauthn_key').subscribe({\n next: (res) => {\n console.log(res);\n if (res.data && res.data.webauthn_key && res.data.webauthn_key.length > 0) {\n\n const cred = {\n id: this.base64UrlToArrayBuffer(res.data.webauthn_key[0]),\n type: 'public-key'\n };\n user.credentials.splice(0,1);\n user.credentials.push([cred]);\n\n this.webAuthnSignin(user).then((response) => {\n console.log('SUCCESSFULLY GOT AN ASSERTION!', response);\n resolve('ok');\n })\n .catch((error) => {\n console.error('FAIL', error);\n this.showSnackBar(this.getMessage('invalidCredentials'), ['snack-error']);\n reject(this.getMessage('invalidCredentials'));\n });\n } else {\n this.showSnackBar(this.getMessage('noCredentials'), ['snack-error']);\n reject(this.getMessage('noCredentials'));\n }\n },\n error: (err) => {\n console.error(err);\n this.showSnackBar(this.getMessage('errorRetrievingCredentials'), ['snack-error']);\n reject(this.getMessage('errorRetrievingCredentials'));\n }\n });\n }\n } else {\n this.showSnackBar(this.getMessage('browserNok'), ['snack-error']);\n reject(this.getMessage('browserNok'));\n }\n });\n return promise;\n }\n\n\n addAttributeUser(userId: any, code: any, value: any): Observable<any> {\n return this.http.post<any>(this.environment.endPoint + `/user/attribute/value/${userId}/${code}/${value}`,{})\n .pipe(\n map(res => res));\n }\n\n getAttributeUser(userId: any, code: any): Observable<any> {\n return this.http.get<any>(this.environment.endPoint + `/user/attribute/value/${userId}/${code}`)\n .pipe(\n map(res => res));\n }\n\n showSnackBar(message: any, panelClass: any[] = []): void {\n console.log(message);\n setTimeout(() => {\n this.snackBar.open(message, undefined, {\n duration: 5000,\n panelClass,\n verticalPosition: 'top'\n });\n });\n }\n\n getMessage(code: string): string {\n let msg = '';\n const lang = window.localStorage.getItem('LANG');\n const messagesEn: any = {\n signUpOk: 'Credentials registered successfully',\n signUpNok: 'A problem occurred while registering credentials',\n browserNok: 'The browser does not support this functionality',\n noCredentials: 'The user has no stored credentials',\n invalidCredentials: 'The credentials are invalid',\n errorRetrievingCredentials: 'There was a problem retrieving credentials',\n };\n const messagesEs: any = {\n signUpOk: 'Credenciales registradas exitosamente',\n signUpNok: 'Se produjo un problema al registrar las credenciales',\n browserNok: 'El navegador no soporta esta funcionalidad',\n noCredentials: 'El usuario no tiene credenciales almacenadas',\n invalidCredentials: 'Las credenciales no son válidas',\n errorRetrievingCredentials: 'Se produjo un problema al recuperar las credenciales',\n };\n if (lang && lang==='en') {\n msg = messagesEn[code];\n } else {\n msg = messagesEs[code];\n }\n return msg;\n }\n\n}\n","/*\n * Public API Surface of ssi-security-commons\n */\n\nexport * from './lib/ssi-security-commons.service';\nexport * from './lib/ssi-security-commons.component';\nexport * from './lib/ssi-security-commons.module';\nexport * from './lib/services/auth-interceptor.service';\nexport * from './lib/services/session.service';\nexport * from './lib/services/messages.service';\nexport * from './lib/services/web-authn.service';\nexport * from './lib/user.model';\nexport * from './lib/services/crypto.service';\nexport * from './lib/services/jwt.service';\nexport * from './lib/shared/constants';\nexport * from './lib/services/user-event.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.CryptoService","i3.JwtService","i3","i1.CryptoService","i4.JwtService","i5.SessionService","map"],"mappings":"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"}
|