@bitgo/passkey-crypto 0.6.0 → 0.7.0
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attachPasskeyToWallet.d.ts","sourceRoot":"","sources":["../../src/attachPasskeyToWallet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAIzE,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEtE,wBAAsB,qBAAqB,CAAC,MAAM,EAAE;IAClD,KAAK,EAAE,SAAS,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;CACvC,GAAG,OAAO,CAAC,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"attachPasskeyToWallet.d.ts","sourceRoot":"","sources":["../../src/attachPasskeyToWallet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAIzE,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEtE,wBAAsB,qBAAqB,CAAC,MAAM,EAAE;IAClD,KAAK,EAAE,SAAS,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;CACvC,GAAG,OAAO,CAAC,QAAQ,CAAC,CA4EpB"}
|
|
@@ -47,7 +47,14 @@ async function attachPasskeyToWallet(params) {
|
|
|
47
47
|
throw new Error('PRF assertion did not return a result.');
|
|
48
48
|
}
|
|
49
49
|
const prfPassword = (0, derivePassword_1.derivePassword)(authResult.prfResult);
|
|
50
|
-
const encryptedPrv = await bitgo.encrypt({
|
|
50
|
+
const encryptedPrv = await bitgo.encrypt({
|
|
51
|
+
password: prfPassword,
|
|
52
|
+
input: privateKey,
|
|
53
|
+
encryptionVersion,
|
|
54
|
+
// Bind to this enterprise via AES-GCM AAD — moving this blob to another enterprise
|
|
55
|
+
// or tampering with the stored adata field invalidates the GCM tag.
|
|
56
|
+
adata: enterpriseId,
|
|
57
|
+
});
|
|
51
58
|
const updatedKeychain = await bitgo
|
|
52
59
|
.put(bitgo.url(`/${coin}/key/${keychainId}`, 2))
|
|
53
60
|
.send({
|
|
@@ -60,4 +67,4 @@ async function attachPasskeyToWallet(params) {
|
|
|
60
67
|
.result();
|
|
61
68
|
return updatedKeychain;
|
|
62
69
|
}
|
|
63
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
70
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0YWNoUGFzc2tleVRvV2FsbGV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2F0dGFjaFBhc3NrZXlUb1dhbGxldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQU1BLHNEQW9GQztBQXpGRCwyQ0FBZ0Q7QUFDaEQsaUVBQThEO0FBQzlELHFEQUFrRDtBQUczQyxLQUFLLFVBQVUscUJBQXFCLENBQUMsTUFRM0M7SUFDQyxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLGtCQUFrQixFQUFFLFFBQVEsRUFBRSxpQkFBaUIsRUFBRSxHQUFHLE1BQU0sQ0FBQztJQUVsRyxnREFBZ0Q7SUFDaEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNwQixNQUFNLElBQUksS0FBSyxDQUFDLDZFQUE2RSxDQUFDLENBQUM7SUFDakcsQ0FBQztJQUVELE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFbEMsK0NBQStDO0lBQy9DLE1BQU0sTUFBTSxHQUFHLE1BQU0sUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBRTlELElBQUksTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLEtBQUssRUFBRSxDQUFDO1FBQzVCLE1BQU0sSUFBSSxLQUFLLENBQUMsVUFBVSxRQUFRLG9FQUFvRSxDQUFDLENBQUM7SUFDMUcsQ0FBQztJQUVELE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNuQyxNQUFNLFlBQVksR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDO0lBQzNDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNsQixNQUFNLElBQUksS0FBSyxDQUFDLFVBQVUsUUFBUSxxQkFBcUIsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRCwrRUFBK0U7SUFDL0UsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztJQUN6RCxNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsRUFBRSxDQUFDO0lBRS9CLHlFQUF5RTtJQUN6RSwwRUFBMEU7SUFDMUUsa0RBQWtEO0lBQ2xELE1BQU0sT0FBTyxHQUFHLElBQUEsMkNBQW9CLEVBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQztJQUVuRSwrQ0FBK0M7SUFDL0MsTUFBTSxVQUFVLEdBQUcsTUFBTSxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsUUFBUSxFQUFFLGtCQUFrQixFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztJQUV2RywwRUFBMEU7SUFDMUUsMkZBQTJGO0lBQzNGLHVFQUF1RTtJQUN2RSxNQUFNLGtCQUFrQixHQUFHLElBQUEsNkJBQWlCLEVBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUV6RSwwRUFBMEU7SUFDMUUsNEVBQTRFO0lBQzVFLDBFQUEwRTtJQUMxRSxNQUFNLFVBQVUsR0FBRyxNQUFNLFFBQVEsQ0FBQyxHQUFHLENBQUM7UUFDcEMsU0FBUyxFQUFFO1lBQ1QsZ0JBQWdCLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFLGtCQUFrQixFQUFFLENBQUM7U0FDOUI7UUFDdEMsZ0JBQWdCLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsRUFBRSxPQUFPLEVBQUU7S0FDckQsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUMxQixNQUFNLElBQUksS0FBSyxDQUFDLHdDQUF3QyxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVELE1BQU0sV0FBVyxHQUFHLElBQUEsK0JBQWMsRUFBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDekQsTUFBTSxZQUFZLEdBQUcsTUFBTSxLQUFLLENBQUMsT0FBTyxDQUFDO1FBQ3ZDLFFBQVEsRUFBRSxXQUFXO1FBQ3JCLEtBQUssRUFBRSxVQUFVO1FBQ2pCLGlCQUFpQjtRQUNqQixtRkFBbUY7UUFDbkYsb0VBQW9FO1FBQ3BFLEtBQUssRUFBRSxZQUFZO0tBQ3BCLENBQUMsQ0FBQztJQUVILE1BQU0sZUFBZSxHQUFHLE1BQU0sS0FBSztTQUNoQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksUUFBUSxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUMvQyxJQUFJLENBQUM7UUFDSixZQUFZLEVBQUU7WUFDWixPQUFPO1lBQ1AsV0FBVyxFQUFFLE1BQU0sQ0FBQyxFQUFFO1lBQ3RCLFlBQVk7U0FDYjtLQUNGLENBQUM7U0FDRCxNQUFNLEVBQUUsQ0FBQztJQUVaLE9BQU8sZUFBMkIsQ0FBQztBQUNyQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQml0R29CYXNlLCBFbmNyeXB0aW9uVmVyc2lvbiwgS2V5Y2hhaW4gfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IHsgYmFzZTY0VXJsVG9CdWZmZXIgfSBmcm9tICcuL2Jhc2U2NHVybCc7XG5pbXBvcnQgeyBkZXJpdmVFbnRlcnByaXNlU2FsdCB9IGZyb20gJy4vZGVyaXZlRW50ZXJwcmlzZVNhbHQnO1xuaW1wb3J0IHsgZGVyaXZlUGFzc3dvcmQgfSBmcm9tICcuL2Rlcml2ZVBhc3N3b3JkJztcbmltcG9ydCB7IFdlYkF1dGhuT3RwRGV2aWNlLCBXZWJBdXRoblByb3ZpZGVyIH0gZnJvbSAnLi93ZWJBdXRoblR5cGVzJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGF0dGFjaFBhc3NrZXlUb1dhbGxldChwYXJhbXM6IHtcbiAgYml0Z286IEJpdEdvQmFzZTtcbiAgY29pbjogc3RyaW5nO1xuICB3YWxsZXRJZDogc3RyaW5nO1xuICBkZXZpY2U6IFdlYkF1dGhuT3RwRGV2aWNlO1xuICBleGlzdGluZ1Bhc3NwaHJhc2U6IHN0cmluZztcbiAgcHJvdmlkZXI6IFdlYkF1dGhuUHJvdmlkZXI7XG4gIGVuY3J5cHRpb25WZXJzaW9uPzogRW5jcnlwdGlvblZlcnNpb247XG59KTogUHJvbWlzZTxLZXljaGFpbj4ge1xuICBjb25zdCB7IGJpdGdvLCBjb2luLCB3YWxsZXRJZCwgZGV2aWNlLCBleGlzdGluZ1Bhc3NwaHJhc2UsIHByb3ZpZGVyLCBlbmNyeXB0aW9uVmVyc2lvbiB9ID0gcGFyYW1zO1xuXG4gIC8vIFRocm93IGVhcmx5IGlmIFBSRiBleHRlbnNpb24gaXMgbm90IHN1cHBvcnRlZFxuICBpZiAoIWRldmljZS5wcmZTYWx0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdQUkYgZXh0ZW5zaW9uIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBkZXZpY2UuIFBsZWFzZSB1c2UgYSBkaWZmZXJlbnQgcGFzc2tleS4nKTtcbiAgfVxuXG4gIGNvbnN0IGJhc2VDb2luID0gYml0Z28uY29pbihjb2luKTtcblxuICAvLyBGZXRjaCB3YWxsZXQgYW5kIHZhbGlkYXRlIGl0IGlzIGEgaG90IHdhbGxldFxuICBjb25zdCB3YWxsZXQgPSBhd2FpdCBiYXNlQ29pbi53YWxsZXRzKCkuZ2V0KHsgaWQ6IHdhbGxldElkIH0pO1xuXG4gIGlmICh3YWxsZXQudHlwZSgpICE9PSAnaG90Jykge1xuICAgIHRocm93IG5ldyBFcnJvcihgV2FsbGV0ICR7d2FsbGV0SWR9IGlzIG5vdCBhIGhvdCB3YWxsZXQuIE9ubHkgaG90IHdhbGxldHMgc3VwcG9ydCBwYXNza2V5IGF0dGFjaG1lbnQuYCk7XG4gIH1cblxuICBjb25zdCB3YWxsZXREYXRhID0gd2FsbGV0LnRvSlNPTigpO1xuICBjb25zdCBlbnRlcnByaXNlSWQgPSB3YWxsZXREYXRhLmVudGVycHJpc2U7XG4gIGlmICghZW50ZXJwcmlzZUlkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBXYWxsZXQgJHt3YWxsZXRJZH0gaGFzIG5vIGVudGVycHJpc2UuYCk7XG4gIH1cblxuICAvLyBGZXRjaCB0aGUgdXNlciBrZXljaGFpbiDigJQgaXRlcmF0ZXMga2V5cyB1bnRpbCBpdCBmaW5kcyBvbmUgd2l0aCBlbmNyeXB0ZWRQcnZcbiAgY29uc3Qga2V5Y2hhaW4gPSBhd2FpdCB3YWxsZXQuZ2V0RW5jcnlwdGVkVXNlcktleWNoYWluKCk7XG4gIGNvbnN0IGtleWNoYWluSWQgPSBrZXljaGFpbi5pZDtcblxuICAvLyBEZXJpdmUgZW50ZXJwcmlzZS1zY29wZWQgc2FsdCAoYmFzZTY0dXJsOyBzYW1lIGVuY29kaW5nIGlzIHVzZWQgYXMgdGhlXG4gIC8vIFBSRiBldmFsIGlucHV0IGFuZCBhcyB0aGUgc2VydmVyLXN0b3JlZCBwcmZTYWx0IHNvIHRoZSBieXRlcyBmZWQgdG8gdGhlXG4gIC8vIGF1dGhlbnRpY2F0b3IgbWF0Y2ggYmV0d2VlbiBhdHRhY2ggYW5kIGRlcml2ZSkuXG4gIGNvbnN0IHByZlNhbHQgPSBkZXJpdmVFbnRlcnByaXNlU2FsdChkZXZpY2UucHJmU2FsdCwgZW50ZXJwcmlzZUlkKTtcblxuICAvLyBEZWNyeXB0IHByaXZhdGUga2V5IHdpdGggZXhpc3RpbmcgcGFzc3BocmFzZVxuICBjb25zdCBwcml2YXRlS2V5ID0gYXdhaXQgYml0Z28uZGVjcnlwdCh7IHBhc3N3b3JkOiBleGlzdGluZ1Bhc3NwaHJhc2UsIGlucHV0OiBrZXljaGFpbi5lbmNyeXB0ZWRQcnYgfSk7XG5cbiAgLy8gRGVjb2RlIGNyZWRlbnRpYWxJZCBmcm9tIGJhc2U2NHVybCB0byBBcnJheUJ1ZmZlciBmb3IgYWxsb3dDcmVkZW50aWFscy5cbiAgLy8gVGhlIFdlYkF1dGhuIHNwZWMgcmVxdWlyZXMgYWxsb3dDcmVkZW50aWFscyB0byBiZSBub24tZW1wdHkgd2hlbiB1c2luZyBldmFsQnlDcmVkZW50aWFsLFxuICAvLyBhbmQgZWFjaCBlbnRyeSBtdXN0IGNvcnJlc3BvbmQgdG8gYSBrZXkgaW4gdGhlIGV2YWxCeUNyZWRlbnRpYWwgbWFwLlxuICBjb25zdCBjcmVkZW50aWFsSWRCdWZmZXIgPSBiYXNlNjRVcmxUb0J1ZmZlcihkZXZpY2UuY3JlZGVudGlhbElkKS5idWZmZXI7XG5cbiAgLy8gUFJGIGFzc2VydGlvbiDigJQgZXZhbEJ5Q3JlZGVudGlhbCBtYXBzIHRoaXMgZGV2aWNlJ3MgY3JlZGVudGlhbElkIHRvIHRoZVxuICAvLyBiYXNlNjR1cmwgZW50ZXJwcmlzZSBzYWx0LiBUaGUgcHJvdmlkZXIgbGF5ZXIgaXMgcmVzcG9uc2libGUgZm9yIGRlY29kaW5nXG4gIC8vIGJhc2U2NHVybCB0byByYXcgYnl0ZXMgYmVmb3JlIGhhbmRpbmcgaXQgdG8gdGhlIFdlYkF1dGhuIFBSRiBleHRlbnNpb24uXG4gIGNvbnN0IGF1dGhSZXN1bHQgPSBhd2FpdCBwcm92aWRlci5nZXQoe1xuICAgIHB1YmxpY0tleToge1xuICAgICAgYWxsb3dDcmVkZW50aWFsczogW3sgdHlwZTogJ3B1YmxpYy1rZXknLCBpZDogY3JlZGVudGlhbElkQnVmZmVyIH1dLFxuICAgIH0gYXMgUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zLFxuICAgIGV2YWxCeUNyZWRlbnRpYWw6IHsgW2RldmljZS5jcmVkZW50aWFsSWRdOiBwcmZTYWx0IH0sXG4gIH0pO1xuXG4gIGlmICghYXV0aFJlc3VsdC5wcmZSZXN1bHQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1BSRiBhc3NlcnRpb24gZGlkIG5vdCByZXR1cm4gYSByZXN1bHQuJyk7XG4gIH1cblxuICBjb25zdCBwcmZQYXNzd29yZCA9IGRlcml2ZVBhc3N3b3JkKGF1dGhSZXN1bHQucHJmUmVzdWx0KTtcbiAgY29uc3QgZW5jcnlwdGVkUHJ2ID0gYXdhaXQgYml0Z28uZW5jcnlwdCh7XG4gICAgcGFzc3dvcmQ6IHByZlBhc3N3b3JkLFxuICAgIGlucHV0OiBwcml2YXRlS2V5LFxuICAgIGVuY3J5cHRpb25WZXJzaW9uLFxuICAgIC8vIEJpbmQgdG8gdGhpcyBlbnRlcnByaXNlIHZpYSBBRVMtR0NNIEFBRCDigJQgbW92aW5nIHRoaXMgYmxvYiB0byBhbm90aGVyIGVudGVycHJpc2VcbiAgICAvLyBvciB0YW1wZXJpbmcgd2l0aCB0aGUgc3RvcmVkIGFkYXRhIGZpZWxkIGludmFsaWRhdGVzIHRoZSBHQ00gdGFnLlxuICAgIGFkYXRhOiBlbnRlcnByaXNlSWQsXG4gIH0pO1xuXG4gIGNvbnN0IHVwZGF0ZWRLZXljaGFpbiA9IGF3YWl0IGJpdGdvXG4gICAgLnB1dChiaXRnby51cmwoYC8ke2NvaW59L2tleS8ke2tleWNoYWluSWR9YCwgMikpXG4gICAgLnNlbmQoe1xuICAgICAgd2ViYXV0aG5JbmZvOiB7XG4gICAgICAgIHByZlNhbHQsXG4gICAgICAgIG90cERldmljZUlkOiBkZXZpY2UuaWQsXG4gICAgICAgIGVuY3J5cHRlZFBydixcbiAgICAgIH0sXG4gICAgfSlcbiAgICAucmVzdWx0KCk7XG5cbiAgcmV0dXJuIHVwZGF0ZWRLZXljaGFpbiBhcyBLZXljaGFpbjtcbn1cbiJdfQ==
|
|
@@ -144,19 +144,20 @@ describe('attachPasskeyToWallet', function () {
|
|
|
144
144
|
// prfSalt must be base64url (URL-safe, no padding) as required by server validation
|
|
145
145
|
assert.match(putBody.webauthnInfo.prfSalt, /^[A-Za-z0-9\-_]+$/);
|
|
146
146
|
assert.strictEqual(typeof putBody.webauthnInfo.encryptedPrv, 'string');
|
|
147
|
-
// encrypt must be called with encryptionVersion 2
|
|
147
|
+
// encrypt must be called with encryptionVersion 2 and enterpriseId as AAD
|
|
148
148
|
sinon.assert.calledOnce(mockBitGo.encrypt);
|
|
149
|
-
sinon.assert.calledWithMatch(mockBitGo.encrypt, { encryptionVersion: 2 });
|
|
149
|
+
sinon.assert.calledWithMatch(mockBitGo.encrypt, { encryptionVersion: 2, adata: enterpriseId });
|
|
150
150
|
assert.strictEqual(result.id, keychainId);
|
|
151
151
|
});
|
|
152
152
|
it('should re-encrypt the private key as a v2 Argon2id envelope', async function () {
|
|
153
153
|
const expectedPrfPassword = (0, derivePassword_1.derivePassword)(prfResultBuffer);
|
|
154
154
|
await callAttach();
|
|
155
|
-
// The PRF-derived password and
|
|
155
|
+
// The PRF-derived password, decrypted xprv, and enterpriseId AAD must be passed to encrypt
|
|
156
156
|
sinon.assert.calledWithMatch(mockBitGo.encrypt, {
|
|
157
157
|
password: expectedPrfPassword,
|
|
158
158
|
input: decryptedPrv,
|
|
159
159
|
encryptionVersion: 2,
|
|
160
|
+
adata: enterpriseId,
|
|
160
161
|
});
|
|
161
162
|
// The v2 blob returned by encrypt is what gets stored on the server
|
|
162
163
|
const putBody = mockBitGo.put.firstCall.returnValue.send.firstCall.args[0];
|
|
@@ -220,4 +221,4 @@ describe('attachPasskeyToWallet', function () {
|
|
|
220
221
|
assert.strictEqual(evalKeys[0], device.credentialId);
|
|
221
222
|
});
|
|
222
223
|
});
|
|
223
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0YWNoUGFzc2tleVRvV2FsbGV0LnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvYXR0YWNoUGFzc2tleVRvV2FsbGV0LnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwrQ0FBaUM7QUFDakMsNkNBQStCO0FBQy9CLDJFQUF3RTtBQUN4RSw2REFBMEQ7QUFHMUQsUUFBUSxDQUFDLHVCQUF1QixFQUFFO0lBQ2hDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQztJQUNwQixNQUFNLFFBQVEsR0FBRyxlQUFlLENBQUM7SUFDakMsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDO0lBQ2pDLE1BQU0sWUFBWSxHQUFHLGdCQUFnQixDQUFDO0lBQ3RDLE1BQU0sWUFBWSxHQUFHLHNCQUFzQixDQUFDO0lBQzVDLE1BQU0sWUFBWSxHQUFHLGdCQUFnQixDQUFDO0lBQ3RDLE1BQU0sa0JBQWtCLEdBQUcsb0JBQW9CLENBQUM7SUFDaEQsTUFBTSxjQUFjLEdBQUcsa0JBQWtCLENBQUM7SUFFMUMsTUFBTSxlQUFlLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUV4RSxNQUFNLE1BQU0sR0FBc0I7UUFDaEMsRUFBRSxFQUFFLHFCQUFxQjtRQUN6QixZQUFZLEVBQUUsYUFBYTtRQUMzQixPQUFPLEVBQUUsNkNBQTZDO1FBQ3RELFNBQVMsRUFBRSxJQUFJO0tBQ2hCLENBQUM7SUFFRixNQUFNLGNBQWMsR0FBc0I7UUFDeEMsU0FBUyxFQUFFLGVBQWU7UUFDMUIsWUFBWSxFQUFFLGFBQWE7UUFDM0IsT0FBTyxFQUFFLFFBQVE7S0FDbEIsQ0FBQztJQUVGLE1BQU0sZUFBZSxHQUFHO1FBQ3RCLEVBQUUsRUFBRSxVQUFVO1FBQ2QsR0FBRyxFQUFF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QyxDQUFDLENBQUM7UUFFMUQsTUFBTSxNQUFNLENBQUMsT0FBTyxDQUNsQixHQUFHLEVBQUUsQ0FBQyxVQUFVLEVBQUUsRUFDbEIsQ0FBQyxHQUFVLEVBQUUsRUFBRTtZQUNiLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDO1lBQ3JELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQyxDQUNGLENBQUM7UUFFRixLQUFLLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDeEMsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsK0RBQStELEVBQUUsS0FBSztRQUN2RSxNQUFNLFVBQVUsRUFBRSxDQUFDO1FBRW5CLE1BQU0sT0FBTyxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuRCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3ZELE1BQU0sQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN2QyxNQUFNLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDdkQsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0ICogYXMgc2lub24gZnJvbSAnc2lub24nO1xuaW1wb3J0IHsgYXR0YWNoUGFzc2tleVRvV2FsbGV0IH0gZnJvbSAnLi4vLi4vc3JjL2F0dGFjaFBhc3NrZXlUb1dhbGxldCc7XG5pbXBvcnQgeyBkZXJpdmVQYXNzd29yZCB9IGZyb20gJy4uLy4uL3NyYy9kZXJpdmVQYXNzd29yZCc7XG5pbXBvcnQgeyBXZWJBdXRobk90cERldmljZSwgUGFzc2tleUF1dGhSZXN1bHQsIFdlYkF1dGhuUHJvdmlkZXIgfSBmcm9tICcuLi8uLi9zcmMvd2ViQXV0aG5UeXBlcyc7XG5cbmRlc2NyaWJlKCdhdHRhY2hQYXNza2V5VG9XYWxsZXQnLCBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IGNvaW4gPSAndGJ0Yyc7XG4gIGNvbnN0IHdhbGxldElkID0gJ3dhbGxldC1hYmMxMjMnO1xuICBjb25zdCBrZXljaGFpbklkID0gJ2tleS11c2VyLWlkJztcbiAgY29uc3QgZW50ZXJwcmlzZUlkID0gJ2VudGVycHJpc2UteHl6JztcbiAgY29uc3QgZW5jcnlwdGVkUHJ2ID0gJ2VuY3J5cHRlZC1wcnYtc3RyaW5nJztcbiAgY29uc3QgZGVjcnlwdGVkUHJ2ID0gJ3hwcnYtZGVjcnlwdGVkJztcbiAgY29uc3QgZXhpc3RpbmdQYXNzcGhyYXNlID0gJ2NvcnJlY3QtcGFzc3BocmFzZSc7XG4gIGNvbnN0IHJlRW5jcnlwdGVkUHJ2ID0gJ3JlLWVuY3J5cHRlZC1wcnYnO1xuXG4gIGNvbnN0IHByZlJlc3VsdEJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KFsweDFlLCAweDVjLCAweGI0LCAweDc4XSkuYnVmZmVyO1xuXG4gIGNvbnN0IGRldmljZTogV2ViQXV0aG5PdHBEZXZpY2UgPSB7XG4gICAgaWQ6ICdtb25nby1vYmplY3QtaWQtMTIzJyxcbiAgICBjcmVkZW50aWFsSWQ6ICdjcmVkLWlkLTQ1NicsXG4gICAgcHJmU2FsdDogJ1pxSjY0TTJkTDY1em4yLUp4ZDU4U01OMklMYzlRamJDRnhVVEdIZF9MQzgnLFxuICAgIGlzUGFzc2tleTogdHJ1ZSxcbiAgfTtcblxuICBjb25zdCBtb2NrQXV0aFJlc3VsdDogUGFzc2tleUF1dGhSZXN1bHQgPSB7XG4gICAgcHJmUmVzdWx0OiBwcmZSZXN1bHRCdWZmZXIsXG4gICAgY3JlZGVudGlhbElkOiAnY3JlZC1pZC00NTYnLFxuICAgIG90cENvZGU6ICcxMjM0NTYnLFxuICB9O1xuXG4gIGNvbnN0IHVwZGF0ZWRLZXljaGFpbiA9IHtcbiAgICBpZDoga2V5Y2hhaW5JZCxcbiAgICBwdWI6ICd4cHViLTEyMycsXG4gICAgdHlwZTogJ2luZGVwZW5kZW50JyBhcyBjb25zdCxcbiAgICBlbmNyeXB0ZWRQcnYsXG4gIH07XG5cbiAgbGV0IG1vY2tXYWxsZXQ6IHtcbiAgICB0eXBlOiBzaW5vbi5TaW5vblN0dWI7XG4gICAgdG9KU09OOiBzaW5vbi5TaW5vblN0dWI7XG4gICAgZ2V0RW5jcnlwdGVkVXNlcktleWNoYWluOiBzaW5vbi5TaW5vblN0dWI7XG4gIH07XG5cbiAgbGV0IG1vY2tXYWxsZXRzOiB7XG4gICAgZ2V0OiBzaW5vbi5TaW5vblN0dWI7XG4gIH07XG5cbiAgbGV0IG1vY2tCYXNlQ29pbjoge1xuICAgIHdhbGxldHM6IHNpbm9uLlNpbm9uU3R1YjtcbiAgfTtcblxuICBsZXQgbW9ja0JpdEdvOiB7XG4gICAgdXJsOiBzaW5vbi5TaW5vblN0dWI7XG4gICAgY29pbjogc2lub24uU2lub25TdHViO1xuICAgIHB1dDogc2lub24uU2lub25TdHViO1xuICAgIGRlY3J5cHQ6IHNpbm9uLlNpbm9uU3R1YjtcbiAgICBlbmNyeXB0OiBzaW5vbi5TaW5vblN0dWI7XG4gIH07XG5cbiAgbGV0IG1vY2tQcm92aWRlcjoge1xuICAgIGNyZWF0ZTogc2lub24uU2lub25TdHViO1xuICAgIGdldDogc2lub24uU2lub25TdHViO1xuICB9O1xuXG4gIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgIG1vY2tXYWxsZXQgPSB7XG4gICAgICB0eXBlOiBzaW5vbi5zdHViKCkucmV0dXJucygnaG90JyksXG4gICAgICB0b0pTT046IHNpbm9uLnN0dWIoKS5yZXR1cm5zKHsgZW50ZXJwcmlzZTogZW50ZXJwcmlzZUlkIH0pLFxuICAgICAgZ2V0RW5jcnlwdGVkVXNlcktleWNoYWluOiBzaW5vbi5zdHViKCkucmVzb2x2ZXMoeyBpZDoga2V5Y2hhaW5JZCwgZW5jcnlwdGVkUHJ2IH0pLFxuICAgIH07XG5cbiAgICBtb2NrV2FsbGV0cyA9IHtcbiAgICAgIGdldDogc2lub24uc3R1YigpLnJlc29sdmVzKG1vY2tXYWxsZXQpLFxuICAgIH07XG5cbiAgICBtb2NrQmFzZUNvaW4gPSB7XG4gICAgICB3YWxsZXRzOiBzaW5vbi5zdHViKCkucmV0dXJucyhtb2NrV2FsbGV0cyksXG4gICAgfTtcblxuICAgIG1vY2tCaXRHbyA9IHtcbiAgICAgIHVybDogc2lub25cbiAgICAgICAgLnN0dWI8W3BhdGg6IHN0cmluZywgdmVyc2lvbj86IG51bWJlcl0sIHN0cmluZz4oKVxuICAgICAgICAuY2FsbHNGYWtlKChwYXRoLCB2ZXJzaW9uKSA9PiBgL2FwaS92JHt2ZXJzaW9uID8/IDF9JHtwYXRofWApLFxuICAgICAgY29pbjogc2lub24uc3R1YigpLnJldHVybnMobW9ja0Jhc2VDb2luKSxcbiAgICAgIHB1dDogc2lub24uc3R1YigpLFxuICAgICAgZGVjcnlwdDogc2lub24uc3R1YigpLFxuICAgICAgZW5jcnlwdDogc2lub24uc3R1YigpLFxuICAgIH07XG5cbiAgICBtb2NrUHJvdmlkZXIgPSB7XG4gICAgICBjcmVhdGU6IHNpbm9uLnN0dWIoKSxcbiAgICAgIGdldDogc2lub24uc3R1YigpLFxuICAgIH07XG5cbiAgICBtb2NrQml0R28uZGVjcnlwdC5yZXNvbHZlcyhkZWNyeXB0ZWRQcnYpO1xuICAgIG1vY2tCaXRHby5lbmNyeXB0LnJlc29sdmVzKHJlRW5jcnlwdGVkUHJ2KTtcblxuICAgIGNvbnN0IHB1dFNlbmRTdHViID0gc2lub24uc3R1YigpLnJldHVybnMoeyByZXN1bHQ6IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyh1cGRhdGVkS2V5Y2hhaW4pIH0pO1xuICAgIG1vY2tCaXRHby5wdXQucmV0dXJucyh7IHNlbmQ6IHB1dFNlbmRTdHViIH0pO1xuXG4gICAgbW9ja1Byb3ZpZGVyLmdldC5yZXNvbHZlcyhtb2NrQXV0aFJlc3VsdCk7XG4gIH0pO1xuXG4gIGFmdGVyRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgc2lub24ucmVzdG9yZSgpO1xuICB9KTtcblxuICBhc3luYyBmdW5jdGlvbiBjYWxsQXR0YWNoKG92ZXJyaWRlcz86IFBhcnRpYWw8UGFyYW1ldGVyczx0eXBlb2YgYXR0YWNoUGFzc2tleVRvV2FsbGV0PlswXT4pIHtcbiAgICByZXR1cm4gYXR0YWNoUGFzc2tleVRvV2FsbGV0KHtcbiAgICAgIGJpdGdvOiBtb2NrQml0R28gYXMgdW5rbm93biBhcyBQYXJhbWV0ZXJzPHR5cGVvZiBhdHRhY2hQYXNza2V5VG9XYWxsZXQ+WzBdWydiaXRnbyddLFxuICAgICAgY29pbixcbiAgICAgIHdhbGxldElkLFxuICAgICAgZGV2aWNlLFxuICAgICAgZXhpc3RpbmdQYXNzcGhyYXNlLFxuICAgICAgcHJvdmlkZXI6IG1vY2tQcm92aWRlciBhcyB1bmtub3duIGFzIFdlYkF1dGhuUHJvdmlkZXIsXG4gICAgICBlbmNyeXB0aW9uVmVyc2lvbjogMixcbiAgICAgIC4uLm92ZXJyaWRlcyxcbiAgICB9KTtcbiAgfVxuXG4gIGl0KCdzaG91bGQgYXR0YWNoIGEgcGFzc2tleSBhbmQgcmV0dXJuIHRoZSB1cGRhdGVkIGtleWNoYWluJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNhbGxBdHRhY2goKTtcblxuICAgIHNpbm9uLmFzc2VydC5jYWxsZWRXaXRoKG1vY2tCaXRHby5jb2luLCBjb2luKTtcbiAgICBzaW5vbi5hc3NlcnQuY2FsbGVkV2l0aChtb2NrV2FsbGV0cy5nZXQsIHsgaWQ6IHdhbGxldElkIH0pO1xuICAgIHNpbm9uLmFzc2VydC5jYWxsZWRPbmNlKG1vY2tXYWxsZXQudHlwZSk7XG4gICAgc2lub24uYXNzZXJ0LmNhbGxlZE9uY2UobW9ja1dhbGxldC5nZXRFbmNyeXB0ZWRVc2VyS2V5Y2hhaW4pO1xuICAgIHNpbm9uLmFzc2VydC5jYWxsZWRPbmNlKG1vY2tCaXRHby5kZWNyeXB0KTtcbiAgICBzaW5vbi5hc3NlcnQuY2FsbGVkV2l0aEV4YWN0bHkobW9ja0JpdEdvLmRlY3J5cHQsIHsgcGFzc3dvcmQ6IGV4aXN0aW5nUGFzc3BocmFzZSwgaW5wdXQ6IGVuY3J5cHRlZFBydiB9KTtcblxuICAgIC8vIHByb3ZpZGVyLmdldCBjYWxsZWQgd2l0aCBldmFsQnlDcmVkZW50aWFsIGtleWVkIG9uIGRldmljZS5jcmVkZW50aWFsSWRcbiAgICBzaW5vbi5hc3NlcnQuY2FsbGVkT25jZShtb2NrUHJvdmlkZXIuZ2V0KTtcbiAgICBjb25zdCBnZXRBcmdzID0gbW9ja1Byb3ZpZGVyLmdldC5maXJzdENhbGwuYXJnc1swXTtcbiAgICBhc3NlcnQub2soZ2V0QXJncy5ldmFsQnlDcmVkZW50aWFsKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwodHlwZW9mIGdldEFyZ3MuZXZhbEJ5Q3JlZGVudGlhbFtkZXZpY2UuY3JlZGVudGlhbElkXSwgJ3N0cmluZycpO1xuXG4gICAgLy8gYWxsb3dDcmVkZW50aWFscyBtdXN0IGJlIHBvcHVsYXRlZCB3aXRoIHRoZSBjcmVkZW50aWFsIElEIGFzIGFuIEFycmF5QnVmZmVyXG4gICAgYXNzZXJ0Lm9rKEFycmF5LmlzQXJyYXkoZ2V0QXJncy5wdWJsaWNLZXkuYWxsb3dDcmVkZW50aWFscykpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChnZXRBcmdzLnB1YmxpY0tleS5hbGxvd0NyZWRlbnRpYWxzLmxlbmd0aCwgMSk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGdldEFyZ3MucHVibGljS2V5LmFsbG93Q3JlZGVudGlhbHNbMF0udHlwZSwgJ3B1YmxpYy1rZXknKTtcbiAgICBhc3NlcnQub2soZ2V0QXJncy5wdWJsaWNLZXkuYWxsb3dDcmVkZW50aWFsc1swXS5pZCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKTtcblxuICAgIC8vIFBVVCBjYWxsZWQgd2l0aCBjb3JyZWN0IHNoYXBlXG4gICAgc2lub24uYXNzZXJ0LmNhbGxlZE9uY2UobW9ja0JpdEdvLnB1dCk7XG4gICAgc2lub24uYXNzZXJ0LmNhbGxlZFdpdGgobW9ja0JpdEdvLnB1dCwgYC9hcGkvdjIvJHtjb2lufS9rZXkvJHtrZXljaGFpbklkfWApO1xuICAgIGNvbnN0IHNlbmRTdHViID0gbW9ja0JpdEdvLnB1dC5maXJzdENhbGwucmV0dXJuVmFsdWUuc2VuZDtcbiAgICBzaW5vbi5hc3NlcnQuY2FsbGVkT25jZShzZW5kU3R1Yik7XG4gICAgY29uc3QgcHV0Qm9keSA9IHNlbmRTdHViLmZpcnN0Q2FsbC5hcmdzWzBdO1xuICAgIGFzc2VydC5vayhwdXRCb2R5LndlYmF1dGhuSW5mbyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHB1dEJvZHkud2ViYXV0aG5JbmZvLm90cERldmljZUlkLCBkZXZpY2UuaWQpO1xuICAgIC8vIHByZlNhbHQgbXVzdCBiZSBiYXNlNjR1cmwgKFVSTC1zYWZlLCBubyBwYWRkaW5nKSBhcyByZXF1aXJlZCBieSBzZXJ2ZXIgdmFsaWRhdGlvblxuICAgIGFzc2VydC5tYXRjaChwdXRCb2R5LndlYmF1dGhuSW5mby5wcmZTYWx0LCAvXltBLVphLXowLTlcXC1fXSskLyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR5cGVvZiBwdXRCb2R5LndlYmF1dGhuSW5mby5lbmNyeXB0ZWRQcnYsICdzdHJpbmcnKTtcblxuICAgIC8vIGVuY3J5cHQgbXVzdCBiZSBjYWxsZWQgd2l0aCBlbmNyeXB0aW9uVmVyc2lvbiAyXG4gICAgc2lub24uYXNzZXJ0LmNhbGxlZE9uY2UobW9ja0JpdEdvLmVuY3J5cHQpO1xuICAgIHNpbm9uLmFzc2VydC5jYWxsZWRXaXRoTWF0Y2gobW9ja0JpdEdvLmVuY3J5cHQsIHsgZW5jcnlwdGlvblZlcnNpb246IDIgfSk7XG5cbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LmlkLCBrZXljaGFpbklkKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZS1lbmNyeXB0IHRoZSBwcml2YXRlIGtleSBhcyBhIHYyIEFyZ29uMmlkIGVudmVsb3BlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGV4cGVjdGVkUHJmUGFzc3dvcmQgPSBkZXJpdmVQYXNzd29yZChwcmZSZXN1bHRCdWZmZXIpO1xuXG4gICAgYXdhaXQgY2FsbEF0dGFjaCgpO1xuXG4gICAgLy8gVGhlIFBSRi1kZXJpdmVkIHBhc3N3b3JkIGFuZCB0aGUgZGVjcnlwdGVkIHhwcnYgbXVzdCBiZSBwYXNzZWQgdG8gZW5jcnlwdFxuICAgIHNpbm9uLmFzc2VydC5jYWxsZWRXaXRoTWF0Y2gobW9ja0JpdEdvLmVuY3J5cHQsIHtcbiAgICAgIHBhc3N3b3JkOiBleHBlY3RlZFByZlBhc3N3b3JkLFxuICAgICAgaW5wdXQ6IGRlY3J5cHRlZFBydixcbiAgICAgIGVuY3J5cHRpb25WZXJzaW9uOiAyLFxuICAgIH0pO1xuXG4gICAgLy8gVGhlIHYyIGJsb2IgcmV0dXJuZWQgYnkgZW5jcnlwdCBpcyB3aGF0IGdldHMgc3RvcmVkIG9uIHRoZSBzZXJ2ZXJcbiAgICBjb25zdCBwdXRCb2R5ID0gbW9ja0JpdEdvLnB1dC5maXJzdENhbGwucmV0dXJuVmFsdWUuc2VuZC5maXJzdENhbGwuYXJnc1swXTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocHV0Qm9keS53ZWJhdXRobkluZm8uZW5jcnlwdGVkUHJ2LCByZUVuY3J5cHRlZFBydik7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZGVjb2RlIGNyZWRlbnRpYWxJZCBjb250YWluaW5nIGJhc2U2NHVybC1zcGVjaWZpYyBjaGFyYWN0ZXJzICgtIGFuZCBfKScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBkZXZpY2VXaXRoVXJsQ2hhcnM6IFdlYkF1dGhuT3RwRGV2aWNlID0ge1xuICAgICAgLi4uZGV2aWNlLFxuICAgICAgY3JlZGVudGlhbElkOiAnYWJjLWRlZl9naGkramtsJyxcbiAgICB9O1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY2FsbEF0dGFjaCh7IGRldmljZTogZGV2aWNlV2l0aFVybENoYXJzIH0pO1xuICAgIGFzc2VydC5vayhyZXN1bHQpO1xuXG4gICAgY29uc3QgZ2V0QXJncyA9IG1vY2tQcm92aWRlci5nZXQuZmlyc3RDYWxsLmFyZ3NbMF07XG4gICAgYXNzZXJ0Lm9rKGdldEFyZ3MucHVibGljS2V5LmFsbG93Q3JlZGVudGlhbHNbMF0uaWQgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcik7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdGhyb3cgaWYgZGV2aWNlLnByZlNhbHQgaXMgdW5kZWZpbmVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGRldmljZU5vUHJmOiBXZWJBdXRobk90cERldmljZSA9IHsgLi4uZGV2aWNlLCBwcmZTYWx0OiB1bmRlZmluZWQgfTtcblxuICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgKCkgPT4gY2FsbEF0dGFjaCh7IGRldmljZTogZGV2aWNlTm9QcmYgfSksXG4gICAgICAoZXJyOiBFcnJvcikgPT4ge1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZXJyLm1lc3NhZ2UsICdQUkYgZXh0ZW5zaW9uIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBkZXZpY2UuIFBsZWFzZSB1c2UgYSBkaWZmZXJlbnQgcGFzc2tleS4nKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgKTtcblxuICAgIHNpbm9uLmFzc2VydC5ub3RDYWxsZWQobW9ja0JpdEdvLmNvaW4pO1xuICAgIHNpbm9uLmFzc2VydC5ub3RDYWxsZWQobW9ja0JpdEdvLnB1dCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdGhyb3cgaWYgd2FsbGV0IGlzIG5vdCBhIGhvdCB3YWxsZXQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgbW9ja1dhbGxldC50eXBlLnJldHVybnMoJ2NvbGQnKTtcblxuICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgKCkgPT4gY2FsbEF0dGFjaCgpLFxuICAgICAgKGVycjogRXJyb3IpID0+IHtcbiAgICAgICAgYXNzZXJ0Lm9rKGVyci5tZXNzYWdlLmluY2x1ZGVzKCdub3QgYSBob3Qgd2FsbGV0JykpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICApO1xuXG4gICAgc2lub24uYXNzZXJ0Lm5vdENhbGxlZChtb2NrQml0R28ucHV0KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB0aHJvdyBpZiB3YWxsZXQgaGFzIG5vIGVudGVycHJpc2UnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgbW9ja1dhbGxldC50b0pTT04ucmV0dXJucyh7IGVudGVycHJpc2U6IHVuZGVmaW5lZCB9KTtcblxuICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgKCkgPT4gY2FsbEF0dGFjaCgpLFxuICAgICAgKGVycjogRXJyb3IpID0+IHtcbiAgICAgICAgYXNzZXJ0Lm9rKGVyci5tZXNzYWdlLmluY2x1ZGVzKCdoYXMgbm8gZW50ZXJwcmlzZScpKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB0aHJvdyBpZiBQUkYgYXNzZXJ0aW9uIHJldHVybnMgbm8gcmVzdWx0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIG1vY2tQcm92aWRlci5nZXQucmVzb2x2ZXMoeyAuLi5tb2NrQXV0aFJlc3VsdCwgcHJmUmVzdWx0OiB1bmRlZmluZWQgfSk7XG5cbiAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgICgpID0+IGNhbGxBdHRhY2goKSxcbiAgICAgIChlcnI6IEVycm9yKSA9PiB7XG4gICAgICAgIGFzc2VydC5vayhlcnIubWVzc2FnZS5pbmNsdWRlcygnUFJGIGFzc2VydGlvbiBkaWQgbm90IHJldHVybiBhIHJlc3VsdCcpKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgKTtcblxuICAgIHNpbm9uLmFzc2VydC5ub3RDYWxsZWQobW9ja0JpdEdvLnB1dCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcHJvcGFnYXRlIGRlY3J5cHQgZXJyb3JzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIG1vY2tCaXRHby5kZWNyeXB0LnJlamVjdHMobmV3IEVycm9yKCdkZWNyeXB0aW9uIGZhaWxlZCcpKTtcblxuICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgKCkgPT4gY2FsbEF0dGFjaCgpLFxuICAgICAgKGVycjogRXJyb3IpID0+IHtcbiAgICAgICAgYXNzZXJ0Lm9rKGVyci5tZXNzYWdlLmluY2x1ZGVzKCdkZWNyeXB0aW9uIGZhaWxlZCcpKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgKTtcblxuICAgIHNpbm9uLmFzc2VydC5ub3RDYWxsZWQobW9ja0JpdEdvLnB1dCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdXNlIGRldmljZS5jcmVkZW50aWFsSWQgYXMgdGhlIGtleSBpbiBldmFsQnlDcmVkZW50aWFsJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGF3YWl0IGNhbGxBdHRhY2goKTtcblxuICAgIGNvbnN0IGdldEFyZ3MgPSBtb2NrUHJvdmlkZXIuZ2V0LmZpcnN0Q2FsbC5hcmdzWzBdO1xuICAgIGNvbnN0IGV2YWxLZXlzID0gT2JqZWN0LmtleXMoZ2V0QXJncy5ldmFsQnlDcmVkZW50aWFsKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZXZhbEtleXMubGVuZ3RoLCAxKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZXZhbEtleXNbMF0sIGRldmljZS5jcmVkZW50aWFsSWQpO1xuICB9KTtcbn0pO1xuIl19
|
|
224
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0YWNoUGFzc2tleVRvV2FsbGV0LnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvYXR0YWNoUGFzc2tleVRvV2FsbGV0LnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwrQ0FBaUM7QUFDakMsNkNBQStCO0FBQy9CLDJFQUF3RTtBQUN4RSw2REFBMEQ7QUFHMUQsUUFBUSxDQUFDLHVCQUF1QixFQUFFO0lBQ2hDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQztJQUNwQixNQUFNLFFBQVEsR0FBRyxlQUFlLENBQUM7SUFDakMsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDO0lBQ2pDLE1BQU0sWUFBWSxHQUFHLGdCQUFnQixDQUFDO0lBQ3RDLE1BQU0sWUFBWSxHQUFHLHNCQUFzQixDQUFDO0lBQzVDLE1BQU0sWUFBWSxHQUFHLGdCQUFnQixDQUFDO0lBQ3RDLE1BQU0sa0JBQWtCLEdBQUcsb0JBQW9CLENBQUM7SUFDaEQsTUFBTSxjQUFjLEdBQUcsa0JBQWtCLENBQUM7SUFFMUMsTUFBTSxlQUFlLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUV4RSxNQUFNLE1BQU0sR0FBc0I7UUFDaEMsRUFBRSxFQUFFLHFCQUFxQjtRQUN6QixZQUFZLEVBQUUsYUFBYTtRQUMzQixPQUFPLEVBQUUsNkNBQTZDO1FBQ3RELFNBQVMsRUFBRSxJQUFJO0tBQ2hCLENBQUM7SUFFRixNQUFNLGNBQWMsR0FBc0I7UUFDeEMsU0FBUyxFQUFFLGVBQWU7UUFDMUIsWUFBWSxFQUFFLGFBQWE7UUFDM0IsT0FBTyxFQUFFLFFBQVE7S0FDbEIsQ0FBQztJQUVGLE1BQU0sZUFBZSxHQUFHO1FBQ3RCLEVBQUUsRUFBRSxVQUFVO1FBQ2QsR0FBRyxFQUFF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LENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQztRQUUxRCxNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQ2xCLEdBQUcsRUFBRSxDQUFDLFVBQVUsRUFBRSxFQUNsQixDQUFDLEdBQVUsRUFBRSxFQUFFO1lBQ2IsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7WUFDckQsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLENBQ0YsQ0FBQztRQUVGLEtBQUssQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN4QyxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQywrREFBK0QsRUFBRSxLQUFLO1FBQ3ZFLE1BQU0sVUFBVSxFQUFFLENBQUM7UUFFbkIsTUFBTSxPQUFPLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25ELE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDdkQsTUFBTSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN2RCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgKiBhcyBzaW5vbiBmcm9tICdzaW5vbic7XG5pbXBvcnQgeyBhdHRhY2hQYXNza2V5VG9XYWxsZXQgfSBmcm9tICcuLi8uLi9zcmMvYXR0YWNoUGFzc2tleVRvV2FsbGV0JztcbmltcG9ydCB7IGRlcml2ZVBhc3N3b3JkIH0gZnJvbSAnLi4vLi4vc3JjL2Rlcml2ZVBhc3N3b3JkJztcbmltcG9ydCB7IFdlYkF1dGhuT3RwRGV2aWNlLCBQYXNza2V5QXV0aFJlc3VsdCwgV2ViQXV0aG5Qcm92aWRlciB9IGZyb20gJy4uLy4uL3NyYy93ZWJBdXRoblR5cGVzJztcblxuZGVzY3JpYmUoJ2F0dGFjaFBhc3NrZXlUb1dhbGxldCcsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgY29pbiA9ICd0YnRjJztcbiAgY29uc3Qgd2FsbGV0SWQgPSAnd2FsbGV0LWFiYzEyMyc7XG4gIGNvbnN0IGtleWNoYWluSWQgPSAna2V5LXVzZXItaWQnO1xuICBjb25zdCBlbnRlcnByaXNlSWQgPSAnZW50ZXJwcmlzZS14eXonO1xuICBjb25zdCBlbmNyeXB0ZWRQcnYgPSAnZW5jcnlwdGVkLXBydi1zdHJpbmcnO1xuICBjb25zdCBkZWNyeXB0ZWRQcnYgPSAneHBydi1kZWNyeXB0ZWQnO1xuICBjb25zdCBleGlzdGluZ1Bhc3NwaHJhc2UgPSAnY29ycmVjdC1wYXNzcGhyYXNlJztcbiAgY29uc3QgcmVFbmNyeXB0ZWRQcnYgPSAncmUtZW5jcnlwdGVkLXBydic7XG5cbiAgY29uc3QgcHJmUmVzdWx0QnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkoWzB4MWUsIDB4NWMsIDB4YjQsIDB4NzhdKS5idWZmZXI7XG5cbiAgY29uc3QgZGV2aWNlOiBXZWJBdXRobk90cERldmljZSA9IHtcbiAgICBpZDogJ21vbmdvLW9iamVjdC1pZC0xMjMnLFxuICAgIGNyZWRlbnRpYWxJZDogJ2NyZWQtaWQtNDU2JyxcbiAgICBwcmZTYWx0OiAnWnFKNjRNMmRMNjV6bjItSnhkNThTTU4ySUxjOVFqYkNGeFVUR0hkX0xDOCcsXG4gICAgaXNQYXNza2V5OiB0cnVlLFxuICB9O1xuXG4gIGNvbnN0IG1vY2tBdXRoUmVzdWx0OiBQYXNza2V5QXV0aFJlc3VsdCA9IHtcbiAgICBwcmZSZXN1bHQ6IHByZlJlc3VsdEJ1ZmZlcixcbiAgICBjcmVkZW50aWFsSWQ6ICdjcmVkLWlkLTQ1NicsXG4gICAgb3RwQ29kZTogJzEyMzQ1NicsXG4gIH07XG5cbiAgY29uc3QgdXBkYXRlZEtleWNoYWluID0ge1xuICAgIGlkOiBrZXljaGFpbklkLFxuICAgIHB1YjogJ3hwdWItMTIzJyxcbiAgICB0eXBlOiAnaW5kZXBlbmRlbnQnIGFzIGNvbnN0LFxuICAgIGVuY3J5cHRlZFBydixcbiAgfTtcblxuICBsZXQgbW9ja1dhbGxldDoge1xuICAgIHR5cGU6IHNpbm9uLlNpbm9uU3R1YjtcbiAgICB0b0pTT046IHNpbm9uLlNpbm9uU3R1YjtcbiAgICBnZXRFbmNyeXB0ZWRVc2VyS2V5Y2hhaW46IHNpbm9uLlNpbm9uU3R1YjtcbiAgfTtcblxuICBsZXQgbW9ja1dhbGxldHM6IHtcbiAgICBnZXQ6IHNpbm9uLlNpbm9uU3R1YjtcbiAgfTtcblxuICBsZXQgbW9ja0Jhc2VDb2luOiB7XG4gICAgd2FsbGV0czogc2lub24uU2lub25TdHViO1xuICB9O1xuXG4gIGxldCBtb2NrQml0R286IHtcbiAgICB1cmw6IHNpbm9uLlNpbm9uU3R1YjtcbiAgICBjb2luOiBzaW5vbi5TaW5vblN0dWI7XG4gICAgcHV0OiBzaW5vbi5TaW5vblN0dWI7XG4gICAgZGVjcnlwdDogc2lub24uU2lub25TdHViO1xuICAgIGVuY3J5cHQ6IHNpbm9uLlNpbm9uU3R1YjtcbiAgfTtcblxuICBsZXQgbW9ja1Byb3ZpZGVyOiB7XG4gICAgY3JlYXRlOiBzaW5vbi5TaW5vblN0dWI7XG4gICAgZ2V0OiBzaW5vbi5TaW5vblN0dWI7XG4gIH07XG5cbiAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgbW9ja1dhbGxldCA9IHtcbiAgICAgIHR5cGU6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKCdob3QnKSxcbiAgICAgIHRvSlNPTjogc2lub24uc3R1YigpLnJldHVybnMoeyBlbnRlcnByaXNlOiBlbnRlcnByaXNlSWQgfSksXG4gICAgICBnZXRFbmNyeXB0ZWRVc2VyS2V5Y2hhaW46IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyh7IGlkOiBrZXljaGFpbklkLCBlbmNyeXB0ZWRQcnYgfSksXG4gICAgfTtcblxuICAgIG1vY2tXYWxsZXRzID0ge1xuICAgICAgZ2V0OiBzaW5vbi5zdHViKCkucmVzb2x2ZXMobW9ja1dhbGxldCksXG4gICAgfTtcblxuICAgIG1vY2tCYXNlQ29pbiA9IHtcbiAgICAgIHdhbGxldHM6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKG1vY2tXYWxsZXRzKSxcbiAgICB9O1xuXG4gICAgbW9ja0JpdEdvID0ge1xuICAgICAgdXJsOiBzaW5vblxuICAgICAgICAuc3R1YjxbcGF0aDogc3RyaW5nLCB2ZXJzaW9uPzogbnVtYmVyXSwgc3RyaW5nPigpXG4gICAgICAgIC5jYWxsc0Zha2UoKHBhdGgsIHZlcnNpb24pID0+IGAvYXBpL3Yke3ZlcnNpb24gPz8gMX0ke3BhdGh9YCksXG4gICAgICBjb2luOiBzaW5vbi5zdHViKCkucmV0dXJucyhtb2NrQmFzZUNvaW4pLFxuICAgICAgcHV0OiBzaW5vbi5zdHViKCksXG4gICAgICBkZWNyeXB0OiBzaW5vbi5zdHViKCksXG4gICAgICBlbmNyeXB0OiBzaW5vbi5zdHViKCksXG4gICAgfTtcblxuICAgIG1vY2tQcm92aWRlciA9IHtcbiAgICAgIGNyZWF0ZTogc2lub24uc3R1YigpLFxuICAgICAgZ2V0OiBzaW5vbi5zdHViKCksXG4gICAgfTtcblxuICAgIG1vY2tCaXRHby5kZWNyeXB0LnJlc29sdmVzKGRlY3J5cHRlZFBydik7XG4gICAgbW9ja0JpdEdvLmVuY3J5cHQucmVzb2x2ZXMocmVFbmNyeXB0ZWRQcnYpO1xuXG4gICAgY29uc3QgcHV0U2VuZFN0dWIgPSBzaW5vbi5zdHViKCkucmV0dXJucyh7IHJlc3VsdDogc2lub24uc3R1YigpLnJlc29sdmVzKHVwZGF0ZWRLZXljaGFpbikgfSk7XG4gICAgbW9ja0JpdEdvLnB1dC5yZXR1cm5zKHsgc2VuZDogcHV0U2VuZFN0dWIgfSk7XG5cbiAgICBtb2NrUHJvdmlkZXIuZ2V0LnJlc29sdmVzKG1vY2tBdXRoUmVzdWx0KTtcbiAgfSk7XG5cbiAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICBzaW5vbi5yZXN0b3JlKCk7XG4gIH0pO1xuXG4gIGFzeW5jIGZ1bmN0aW9uIGNhbGxBdHRhY2gob3ZlcnJpZGVzPzogUGFydGlhbDxQYXJhbWV0ZXJzPHR5cGVvZiBhdHRhY2hQYXNza2V5VG9XYWxsZXQ+WzBdPikge1xuICAgIHJldHVybiBhdHRhY2hQYXNza2V5VG9XYWxsZXQoe1xuICAgICAgYml0Z286IG1vY2tCaXRHbyBhcyB1bmtub3duIGFzIFBhcmFtZXRlcnM8dHlwZW9mIGF0dGFjaFBhc3NrZXlUb1dhbGxldD5bMF1bJ2JpdGdvJ10sXG4gICAgICBjb2luLFxuICAgICAgd2FsbGV0SWQsXG4gICAgICBkZXZpY2UsXG4gICAgICBleGlzdGluZ1Bhc3NwaHJhc2UsXG4gICAgICBwcm92aWRlcjogbW9ja1Byb3ZpZGVyIGFzIHVua25vd24gYXMgV2ViQXV0aG5Qcm92aWRlcixcbiAgICAgIGVuY3J5cHRpb25WZXJzaW9uOiAyLFxuICAgICAgLi4ub3ZlcnJpZGVzLFxuICAgIH0pO1xuICB9XG5cbiAgaXQoJ3Nob3VsZCBhdHRhY2ggYSBwYXNza2V5IGFuZCByZXR1cm4gdGhlIHVwZGF0ZWQga2V5Y2hhaW4nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY2FsbEF0dGFjaCgpO1xuXG4gICAgc2lub24uYXNzZXJ0LmNhbGxlZFdpdGgobW9ja0JpdEdvLmNvaW4sIGNvaW4pO1xuICAgIHNpbm9uLmFzc2VydC5jYWxsZWRXaXRoKG1vY2tXYWxsZXRzLmdldCwgeyBpZDogd2FsbGV0SWQgfSk7XG4gICAgc2lub24uYXNzZXJ0LmNhbGxlZE9uY2UobW9ja1dhbGxldC50eXBlKTtcbiAgICBzaW5vbi5hc3NlcnQuY2FsbGVkT25jZShtb2NrV2FsbGV0LmdldEVuY3J5cHRlZFVzZXJLZXljaGFpbik7XG4gICAgc2lub24uYXNzZXJ0LmNhbGxlZE9uY2UobW9ja0JpdEdvLmRlY3J5cHQpO1xuICAgIHNpbm9uLmFzc2VydC5jYWxsZWRXaXRoRXhhY3RseShtb2NrQml0R28uZGVjcnlwdCwgeyBwYXNzd29yZDogZXhpc3RpbmdQYXNzcGhyYXNlLCBpbnB1dDogZW5jcnlwdGVkUHJ2IH0pO1xuXG4gICAgLy8gcHJvdmlkZXIuZ2V0IGNhbGxlZCB3aXRoIGV2YWxCeUNyZWRlbnRpYWwga2V5ZWQgb24gZGV2aWNlLmNyZWRlbnRpYWxJZFxuICAgIHNpbm9uLmFzc2VydC5jYWxsZWRPbmNlKG1vY2tQcm92aWRlci5nZXQpO1xuICAgIGNvbnN0IGdldEFyZ3MgPSBtb2NrUHJvdmlkZXIuZ2V0LmZpcnN0Q2FsbC5hcmdzWzBdO1xuICAgIGFzc2VydC5vayhnZXRBcmdzLmV2YWxCeUNyZWRlbnRpYWwpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2YgZ2V0QXJncy5ldmFsQnlDcmVkZW50aWFsW2RldmljZS5jcmVkZW50aWFsSWRdLCAnc3RyaW5nJyk7XG5cbiAgICAvLyBhbGxvd0NyZWRlbnRpYWxzIG11c3QgYmUgcG9wdWxhdGVkIHdpdGggdGhlIGNyZWRlbnRpYWwgSUQgYXMgYW4gQXJyYXlCdWZmZXJcbiAgICBhc3NlcnQub2soQXJyYXkuaXNBcnJheShnZXRBcmdzLnB1YmxpY0tleS5hbGxvd0NyZWRlbnRpYWxzKSk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGdldEFyZ3MucHVibGljS2V5LmFsbG93Q3JlZGVudGlhbHMubGVuZ3RoLCAxKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZ2V0QXJncy5wdWJsaWNLZXkuYWxsb3dDcmVkZW50aWFsc1swXS50eXBlLCAncHVibGljLWtleScpO1xuICAgIGFzc2VydC5vayhnZXRBcmdzLnB1YmxpY0tleS5hbGxvd0NyZWRlbnRpYWxzWzBdLmlkIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpO1xuXG4gICAgLy8gUFVUIGNhbGxlZCB3aXRoIGNvcnJlY3Qgc2hhcGVcbiAgICBzaW5vbi5hc3NlcnQuY2FsbGVkT25jZShtb2NrQml0R28ucHV0KTtcbiAgICBzaW5vbi5hc3NlcnQuY2FsbGVkV2l0aChtb2NrQml0R28ucHV0LCBgL2FwaS92Mi8ke2NvaW59L2tleS8ke2tleWNoYWluSWR9YCk7XG4gICAgY29uc3Qgc2VuZFN0dWIgPSBtb2NrQml0R28ucHV0LmZpcnN0Q2FsbC5yZXR1cm5WYWx1ZS5zZW5kO1xuICAgIHNpbm9uLmFzc2VydC5jYWxsZWRPbmNlKHNlbmRTdHViKTtcbiAgICBjb25zdCBwdXRCb2R5ID0gc2VuZFN0dWIuZmlyc3RDYWxsLmFyZ3NbMF07XG4gICAgYXNzZXJ0Lm9rKHB1dEJvZHkud2ViYXV0aG5JbmZvKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocHV0Qm9keS53ZWJhdXRobkluZm8ub3RwRGV2aWNlSWQsIGRldmljZS5pZCk7XG4gICAgLy8gcHJmU2FsdCBtdXN0IGJlIGJhc2U2NHVybCAoVVJMLXNhZmUsIG5vIHBhZGRpbmcpIGFzIHJlcXVpcmVkIGJ5IHNlcnZlciB2YWxpZGF0aW9uXG4gICAgYXNzZXJ0Lm1hdGNoKHB1dEJvZHkud2ViYXV0aG5JbmZvLnByZlNhbHQsIC9eW0EtWmEtejAtOVxcLV9dKyQvKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwodHlwZW9mIHB1dEJvZHkud2ViYXV0aG5JbmZvLmVuY3J5cHRlZFBydiwgJ3N0cmluZycpO1xuXG4gICAgLy8gZW5jcnlwdCBtdXN0IGJlIGNhbGxlZCB3aXRoIGVuY3J5cHRpb25WZXJzaW9uIDIgYW5kIGVudGVycHJpc2VJZCBhcyBBQURcbiAgICBzaW5vbi5hc3NlcnQuY2FsbGVkT25jZShtb2NrQml0R28uZW5jcnlwdCk7XG4gICAgc2lub24uYXNzZXJ0LmNhbGxlZFdpdGhNYXRjaChtb2NrQml0R28uZW5jcnlwdCwgeyBlbmNyeXB0aW9uVmVyc2lvbjogMiwgYWRhdGE6IGVudGVycHJpc2VJZCB9KTtcblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQuaWQsIGtleWNoYWluSWQpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJlLWVuY3J5cHQgdGhlIHByaXZhdGUga2V5IGFzIGEgdjIgQXJnb24yaWQgZW52ZWxvcGUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgZXhwZWN0ZWRQcmZQYXNzd29yZCA9IGRlcml2ZVBhc3N3b3JkKHByZlJlc3VsdEJ1ZmZlcik7XG5cbiAgICBhd2FpdCBjYWxsQXR0YWNoKCk7XG5cbiAgICAvLyBUaGUgUFJGLWRlcml2ZWQgcGFzc3dvcmQsIGRlY3J5cHRlZCB4cHJ2LCBhbmQgZW50ZXJwcmlzZUlkIEFBRCBtdXN0IGJlIHBhc3NlZCB0byBlbmNyeXB0XG4gICAgc2lub24uYXNzZXJ0LmNhbGxlZFdpdGhNYXRjaChtb2NrQml0R28uZW5jcnlwdCwge1xuICAgICAgcGFzc3dvcmQ6IGV4cGVjdGVkUHJmUGFzc3dvcmQsXG4gICAgICBpbnB1dDogZGVjcnlwdGVkUHJ2LFxuICAgICAgZW5jcnlwdGlvblZlcnNpb246IDIsXG4gICAgICBhZGF0YTogZW50ZXJwcmlzZUlkLFxuICAgIH0pO1xuXG4gICAgLy8gVGhlIHYyIGJsb2IgcmV0dXJuZWQgYnkgZW5jcnlwdCBpcyB3aGF0IGdldHMgc3RvcmVkIG9uIHRoZSBzZXJ2ZXJcbiAgICBjb25zdCBwdXRCb2R5ID0gbW9ja0JpdEdvLnB1dC5maXJzdENhbGwucmV0dXJuVmFsdWUuc2VuZC5maXJzdENhbGwuYXJnc1swXTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocHV0Qm9keS53ZWJhdXRobkluZm8uZW5jcnlwdGVkUHJ2LCByZUVuY3J5cHRlZFBydik7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZGVjb2RlIGNyZWRlbnRpYWxJZCBjb250YWluaW5nIGJhc2U2NHVybC1zcGVjaWZpYyBjaGFyYWN0ZXJzICgtIGFuZCBfKScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBkZXZpY2VXaXRoVXJsQ2hhcnM6IFdlYkF1dGhuT3RwRGV2aWNlID0ge1xuICAgICAgLi4uZGV2aWNlLFxuICAgICAgY3JlZGVudGlhbElkOiAnYWJjLWRlZl9naGkramtsJyxcbiAgICB9O1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY2FsbEF0dGFjaCh7IGRldmljZTogZGV2aWNlV2l0aFVybENoYXJzIH0pO1xuICAgIGFzc2VydC5vayhyZXN1bHQpO1xuXG4gICAgY29uc3QgZ2V0QXJncyA9IG1vY2tQcm92aWRlci5nZXQuZmlyc3RDYWxsLmFyZ3NbMF07XG4gICAgYXNzZXJ0Lm9rKGdldEFyZ3MucHVibGljS2V5LmFsbG93Q3JlZGVudGlhbHNbMF0uaWQgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcik7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdGhyb3cgaWYgZGV2aWNlLnByZlNhbHQgaXMgdW5kZWZpbmVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGRldmljZU5vUHJmOiBXZWJBdXRobk90cERldmljZSA9IHsgLi4uZGV2aWNlLCBwcmZTYWx0OiB1bmRlZmluZWQgfTtcblxuICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgKCkgPT4gY2FsbEF0dGFjaCh7IGRldmljZTogZGV2aWNlTm9QcmYgfSksXG4gICAgICAoZXJyOiBFcnJvcikgPT4ge1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZXJyLm1lc3NhZ2UsICdQUkYgZXh0ZW5zaW9uIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBkZXZpY2UuIFBsZWFzZSB1c2UgYSBkaWZmZXJlbnQgcGFzc2tleS4nKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgKTtcblxuICAgIHNpbm9uLmFzc2VydC5ub3RDYWxsZWQobW9ja0JpdEdvLmNvaW4pO1xuICAgIHNpbm9uLmFzc2VydC5ub3RDYWxsZWQobW9ja0JpdEdvLnB1dCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdGhyb3cgaWYgd2FsbGV0IGlzIG5vdCBhIGhvdCB3YWxsZXQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgbW9ja1dhbGxldC50eXBlLnJldHVybnMoJ2NvbGQnKTtcblxuICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgKCkgPT4gY2FsbEF0dGFjaCgpLFxuICAgICAgKGVycjogRXJyb3IpID0+IHtcbiAgICAgICAgYXNzZXJ0Lm9rKGVyci5tZXNzYWdlLmluY2x1ZGVzKCdub3QgYSBob3Qgd2FsbGV0JykpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICApO1xuXG4gICAgc2lub24uYXNzZXJ0Lm5vdENhbGxlZChtb2NrQml0R28ucHV0KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB0aHJvdyBpZiB3YWxsZXQgaGFzIG5vIGVudGVycHJpc2UnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgbW9ja1dhbGxldC50b0pTT04ucmV0dXJucyh7IGVudGVycHJpc2U6IHVuZGVmaW5lZCB9KTtcblxuICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgKCkgPT4gY2FsbEF0dGFjaCgpLFxuICAgICAgKGVycjogRXJyb3IpID0+IHtcbiAgICAgICAgYXNzZXJ0Lm9rKGVyci5tZXNzYWdlLmluY2x1ZGVzKCdoYXMgbm8gZW50ZXJwcmlzZScpKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB0aHJvdyBpZiBQUkYgYXNzZXJ0aW9uIHJldHVybnMgbm8gcmVzdWx0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIG1vY2tQcm92aWRlci5nZXQucmVzb2x2ZXMoeyAuLi5tb2NrQXV0aFJlc3VsdCwgcHJmUmVzdWx0OiB1bmRlZmluZWQgfSk7XG5cbiAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgICgpID0+IGNhbGxBdHRhY2goKSxcbiAgICAgIChlcnI6IEVycm9yKSA9PiB7XG4gICAgICAgIGFzc2VydC5vayhlcnIubWVzc2FnZS5pbmNsdWRlcygnUFJGIGFzc2VydGlvbiBkaWQgbm90IHJldHVybiBhIHJlc3VsdCcpKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgKTtcblxuICAgIHNpbm9uLmFzc2VydC5ub3RDYWxsZWQobW9ja0JpdEdvLnB1dCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcHJvcGFnYXRlIGRlY3J5cHQgZXJyb3JzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIG1vY2tCaXRHby5kZWNyeXB0LnJlamVjdHMobmV3IEVycm9yKCdkZWNyeXB0aW9uIGZhaWxlZCcpKTtcblxuICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgKCkgPT4gY2FsbEF0dGFjaCgpLFxuICAgICAgKGVycjogRXJyb3IpID0+IHtcbiAgICAgICAgYXNzZXJ0Lm9rKGVyci5tZXNzYWdlLmluY2x1ZGVzKCdkZWNyeXB0aW9uIGZhaWxlZCcpKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgKTtcblxuICAgIHNpbm9uLmFzc2VydC5ub3RDYWxsZWQobW9ja0JpdEdvLnB1dCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdXNlIGRldmljZS5jcmVkZW50aWFsSWQgYXMgdGhlIGtleSBpbiBldmFsQnlDcmVkZW50aWFsJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGF3YWl0IGNhbGxBdHRhY2goKTtcblxuICAgIGNvbnN0IGdldEFyZ3MgPSBtb2NrUHJvdmlkZXIuZ2V0LmZpcnN0Q2FsbC5hcmdzWzBdO1xuICAgIGNvbnN0IGV2YWxLZXlzID0gT2JqZWN0LmtleXMoZ2V0QXJncy5ldmFsQnlDcmVkZW50aWFsKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZXZhbEtleXMubGVuZ3RoLCAxKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZXZhbEtleXNbMF0sIGRldmljZS5jcmVkZW50aWFsSWQpO1xuICB9KTtcbn0pO1xuIl19
|