@vgroup/dialbox 0.7.73 → 0.7.75
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/components/call-progress/call-progress.component.mjs +118 -66
- package/esm2020/lib/dialbox.component.mjs +31 -22
- package/esm2020/lib/environments/environments.mjs +12 -12
- package/esm2020/lib/service/twilio.service.mjs +3 -9
- package/fesm2015/vgroup-dialbox.mjs +172 -114
- package/fesm2015/vgroup-dialbox.mjs.map +1 -1
- package/fesm2020/vgroup-dialbox.mjs +160 -105
- package/fesm2020/vgroup-dialbox.mjs.map +1 -1
- package/lib/components/call-progress/call-progress.component.d.ts +1 -1
- package/package.json +1 -1
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
export const environment = {
|
|
2
|
-
abb: "
|
|
2
|
+
abb: "t",
|
|
3
3
|
production: false,
|
|
4
4
|
secureCookies: true,
|
|
5
|
-
feUrl: 'https://
|
|
6
|
-
apiUrl: 'https://
|
|
7
|
-
websocketUrl: 'wss://
|
|
5
|
+
feUrl: 'https://test.vgroupinc.com:91/',
|
|
6
|
+
apiUrl: 'https://apis.vgroupinc.com/test_softphone',
|
|
7
|
+
websocketUrl: 'wss://apis.vgroupinc.com/test_softphone/',
|
|
8
8
|
captchaKey: "6LfpOmEaAAAAAGsI6JXlMzOl3b7rW4YmYXFDjldD",
|
|
9
|
-
stripePublishableKey: "
|
|
9
|
+
stripePublishableKey: "pk_test_51NbMVaA3guus6fhlTuCV5ycFTIJmwgN38dDUf9pNPfM319x5CkLbV6EbTQaZiNOrRsfR16RWLE8hQmR0eZFTBqTy00Wlsug4qS",
|
|
10
10
|
sessionTimeout: 15,
|
|
11
11
|
deviceType: "web",
|
|
12
|
-
appVersion: "2.
|
|
13
|
-
channelId: '
|
|
12
|
+
appVersion: "2.3",
|
|
13
|
+
channelId: '61481b12e138eb7dc3007579',
|
|
14
14
|
c2c_support_point_id: '60424735f74ac306c1bfa900',
|
|
15
|
-
c2c_support_channel_id: '
|
|
16
|
-
c2c_point_url: 'https://
|
|
17
|
-
c2c_call_label_id: '
|
|
18
|
-
c2c_email_label_id: '
|
|
15
|
+
c2c_support_channel_id: '677f6726be93ab507fbbfdf0',
|
|
16
|
+
c2c_point_url: 'https://app.contexttocall.com/assets/cdn/c2c.js',
|
|
17
|
+
c2c_call_label_id: '6NU5fKE2mGTyXDC3yhmK',
|
|
18
|
+
c2c_email_label_id: 'YPMamj8RvsGORVvqXWyc',
|
|
19
19
|
radarAPIKey: 'prj_live_sk_569b6f639edde6120a26f703511c61aaecd3f7ef',
|
|
20
20
|
firebase: {
|
|
21
21
|
apiKey: "AIzaSyCA8LSPrqlDq_thk26LhBQexAQeY6pkU5Y",
|
|
@@ -32,4 +32,4 @@ export const environment = {
|
|
|
32
32
|
keycloakRealm: 'vgroup-test',
|
|
33
33
|
keycloakClientId: 'c2c-softphone-app'
|
|
34
34
|
};
|
|
35
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52aXJvbm1lbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGlhbGJveC9zcmMvbGliL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHO0lBQ3pCLEdBQUcsRUFBRSxHQUFHO0lBQ1IsVUFBVSxFQUFFLEtBQUs7SUFDakIsYUFBYSxFQUFFLElBQUk7SUFDbkIsS0FBSyxFQUFDLGdDQUFnQztJQUN0QyxNQUFNLEVBQUUsMkNBQTJDO0lBQ2pELFlBQVksRUFBRSwwQ0FBMEM7SUFDMUQsVUFBVSxFQUFFLDBDQUEwQztJQUN0RCxvQkFBb0IsRUFBRSw2R0FBNkc7SUFDbkksY0FBYyxFQUFFLEVBQUU7SUFDbEIsVUFBVSxFQUFFLEtBQUs7SUFDakIsVUFBVSxFQUFFLEtBQUs7SUFDakIsU0FBUyxFQUFFLDBCQUEwQjtJQUNyQyxvQkFBb0IsRUFBQywwQkFBMEI7SUFDL0Msc0JBQXNCLEVBQUMsMEJBQTBCO0lBQ2pELGFBQWEsRUFBQyxpREFBaUQ7SUFDL0QsaUJBQWlCLEVBQUMsc0JBQXNCO0lBQ3hDLGtCQUFrQixFQUFDLHNCQUFzQjtJQUN6QyxXQUFXLEVBQUUsc0RBQXNEO0lBQ25FLFFBQVEsRUFBRTtRQUNOLE1BQU0sRUFBRSx5Q0FBeUM7UUFDakQsVUFBVSxFQUFFLGlDQUFpQztRQUM3QyxTQUFTLEVBQUUsaUJBQWlCO1FBQzVCLGFBQWEsRUFBRSw2QkFBNkI7UUFDNUMsaUJBQWlCLEVBQUUsY0FBYztRQUNqQyxLQUFLLEVBQUUsMkNBQTJDO1FBQ2xELGFBQWEsRUFBRSxjQUFjO1FBQzdCLFFBQVEsRUFBQyx5RkFBeUY7S0FDckc7SUFDSCxpQkFBaUIsRUFBRSx5Q0FBeUM7SUFDMUQsV0FBVyxFQUFFLHNDQUFzQztJQUNuRCxhQUFhLEVBQUUsYUFBYTtJQUM1QixnQkFBZ0IsRUFBRSxtQkFBbUI7Q0FDdEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBlbnZpcm9ubWVudCA9IHtcclxuICBhYmI6IFwidFwiLFxyXG4gIHByb2R1Y3Rpb246IGZhbHNlLFxyXG4gIHNlY3VyZUNvb2tpZXM6IHRydWUsXHJcbiAgZmVVcmw6J2h0dHBzOi8vdGVzdC52Z3JvdXBpbmMuY29tOjkxLycsXHJcbiAgYXBpVXJsOiAnaHR0cHM6Ly9hcGlzLnZncm91cGluYy5jb20vdGVzdF9zb2Z0cGhvbmUnLFxyXG4gICAgd2Vic29ja2V0VXJsOiAnd3NzOi8vYXBpcy52Z3JvdXBpbmMuY29tL3Rlc3Rfc29mdHBob25lLycsXHJcbiAgY2FwdGNoYUtleTogXCI2TGZwT21FYUFBQUFBR3NJNkpYbE16T2wzYjdyVzRZbVlYRkRqbGREXCIsXHJcbiAgc3RyaXBlUHVibGlzaGFibGVLZXk6IFwicGtfdGVzdF81MU5iTVZhQTNndXVzNmZobFR1Q1Y1eWNGVElKbXdnTjM4ZERVZjlwTlBmTTMxOXg1Q2tMYlY2RWJUUWFaaU5PclJzZlIxNlJXTEU4aFFtUjBlWkZUQnFUeTAwV2xzdWc0cVNcIixcclxuICBzZXNzaW9uVGltZW91dDogMTUsIC8vaW4gbWluc1xyXG4gIGRldmljZVR5cGU6IFwid2ViXCIsXHJcbiAgYXBwVmVyc2lvbjogXCIyLjNcIixcclxuICBjaGFubmVsSWQ6ICc2MTQ4MWIxMmUxMzhlYjdkYzMwMDc1NzknLFxyXG4gIGMyY19zdXBwb3J0X3BvaW50X2lkOic2MDQyNDczNWY3NGFjMzA2YzFiZmE5MDAnLFxyXG4gIGMyY19zdXBwb3J0X2NoYW5uZWxfaWQ6JzY3N2Y2NzI2YmU5M2FiNTA3ZmJiZmRmMCcsXHJcbiAgYzJjX3BvaW50X3VybDonaHR0cHM6Ly9hcHAuY29udGV4dHRvY2FsbC5jb20vYXNzZXRzL2Nkbi9jMmMuanMnLFxyXG4gIGMyY19jYWxsX2xhYmVsX2lkOic2TlU1ZktFMm1HVHlYREMzeWhtSycsLy8gdGVzdFxyXG4gIGMyY19lbWFpbF9sYWJlbF9pZDonWVBNYW1qOFJ2c0dPUlZ2cVhXeWMnLC8vIHRlc3RcclxuICByYWRhckFQSUtleTogJ3Byal9saXZlX3NrXzU2OWI2ZjYzOWVkZGU2MTIwYTI2ZjcwMzUxMWM2MWFhZWNkM2Y3ZWYnLFxyXG4gIGZpcmViYXNlOiB7XHJcbiAgICAgIGFwaUtleTogXCJBSXphU3lDQThMU1BycWxEcV90aGsyNkxoQlFleEFRZVk2cGtVNVlcIixcclxuICAgICAgYXV0aERvbWFpbjogXCJzb2Z0cGhvbmUtZDU3NzcuZmlyZWJhc2VhcHAuY29tXCIsXHJcbiAgICAgIHByb2plY3RJZDogXCJzb2Z0cGhvbmUtZDU3NzdcIixcclxuICAgICAgc3RvcmFnZUJ1Y2tldDogXCJzb2Z0cGhvbmUtZDU3NzcuYXBwc3BvdC5jb21cIixcclxuICAgICAgbWVzc2FnaW5nU2VuZGVySWQ6IFwiODUwODEyNDk0NTM4XCIsXHJcbiAgICAgIGFwcElkOiBcIjE6ODUwODEyNDk0NTM4OndlYjo3NGY4YTMwZmMxOGUyOGRlZDc4YTMzXCIsXHJcbiAgICAgIG1lYXN1cmVtZW50SWQ6IFwiRy1OR1hUU1Y5U0gzXCIsXHJcbiAgICAgIHZhcGlkS2V5OlwiQkQ2RWdjUWdiWlRqT1FmbGVHM1lsRWMwX1NhakIwM3BycVRkRHktcUdKa3hUeGV6YnEtQV9xdHVYRTFsM3lUNDdvOGhuVEFiVEtCY0gxNUQyQUpCMlRvXCJcclxuICB9LFxyXG5wZXJzcGVjdGl2ZUFwaUtleTogJ0FJemFTeUNsZjMybHZMSDRRT3ktdk9uekx6d1NObnRLSWdhcEg4cycsXHJcbiAga2V5Y2xvYWtVUkw6ICdodHRwczovL3Rlc3Qta2V5Y2xvYWsudmdyb3VwaW5jLmNvbS8nLFxyXG4gIGtleWNsb2FrUmVhbG06ICd2Z3JvdXAtdGVzdCcsXHJcbiAga2V5Y2xvYWtDbGllbnRJZDogJ2MyYy1zb2Z0cGhvbmUtYXBwJ1xyXG59OyJdfQ==
|
|
@@ -153,10 +153,7 @@ export class TwilioService {
|
|
|
153
153
|
device.on('incoming', (call) => {
|
|
154
154
|
console.log('Twilio Device incoming call event:', call);
|
|
155
155
|
const notification = this.buildIncomingNotification(call);
|
|
156
|
-
|
|
157
|
-
this.incomingCallNotification.next(notification);
|
|
158
|
-
this.previousIncomingCallNotification = call;
|
|
159
|
-
}
|
|
156
|
+
this.incomingCallNotification.next(notification);
|
|
160
157
|
if (this.acceptedCallList.length > 0 || this.primaryHasCall) {
|
|
161
158
|
console.log('primary device: concurrent call arriving – spare device will handle it');
|
|
162
159
|
this.isShowIncomingCall = true;
|
|
@@ -490,10 +487,7 @@ export class TwilioService {
|
|
|
490
487
|
this.incomingCallDetail = call;
|
|
491
488
|
this.isShowIncomingCall = true;
|
|
492
489
|
const notification = this.buildIncomingNotification(call);
|
|
493
|
-
|
|
494
|
-
this.incomingCallNotification.next(notification);
|
|
495
|
-
this.previousIncomingCallNotification = call;
|
|
496
|
-
}
|
|
490
|
+
this.incomingCallNotification.next(notification);
|
|
497
491
|
console.log('spare device: incoming call', call);
|
|
498
492
|
});
|
|
499
493
|
spare.on('error', (error) => {
|
|
@@ -638,4 +632,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
638
632
|
providedIn: 'root'
|
|
639
633
|
}]
|
|
640
634
|
}], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.ExtensionService }]; } });
|
|
641
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHdpbGlvLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kaWFsYm94L3NyYy9saWIvc2VydmljZS90d2lsaW8uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzNFLE9BQU8sRUFBRSxVQUFVLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDdEQsT0FBTyxFQUFFLGVBQWUsRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1RSxPQUFPLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsTUFBTSxFQUFRLE1BQU0sbUJBQW1CLENBQUM7QUFFakQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDhCQUE4QixDQUFDOzs7O0FBYzNELE1BQU0sT0FBTyxhQUFhO0lBdUR4QixZQUNVLElBQWdCLEVBQ2hCLGdCQUFrQztRQURsQyxTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUF2RDVDLDBCQUFxQixHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQzVELGdCQUFXLEdBQUcsSUFBSSxlQUFlLENBQWMsSUFBSSxDQUFDLENBQUM7UUFDckQscUJBQWdCLEdBQUcsSUFBSSxlQUFlLENBQU0sTUFBTSxDQUFDLENBQUMsQ0FBQyxpQ0FBaUM7UUFHdEYsc0JBQWlCLEdBQVEsRUFBRSxDQUFDO1FBRTVCLGFBQVEsR0FBRyxJQUFJLGVBQWUsQ0FBUyxLQUFLLENBQUMsQ0FBQztRQUU5QyxVQUFLLEdBQU8sWUFBWSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM5QyxzQkFBaUIsR0FBRyxJQUFJLGVBQWUsQ0FBVSxL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TUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycywgSHR0cFBhcmFtcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgY2F0Y2hFcnJvciwgc2hhcmVSZXBsYXksIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgRGV2aWNlLCBDYWxsIH0gZnJvbSAnQHR3aWxpby92b2ljZS1zZGsnO1xyXG5pbXBvcnQgeyBFeHRlbnNpb25TZXJ2aWNlIH0gZnJvbSAnLi9leHRlbnNpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IGVudmlyb25tZW50IH0gZnJvbSAnLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50cyc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIERpYWxQYXlsb2FkIHtcclxuICBudW1iZXI6IHN0cmluZztcclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgaW1nOiBzdHJpbmc7XHJcbiAgY2FsbGVySWQ6c3RyaW5nO1xyXG4gIGlzRGlhbEZyb21IaXN0b3J5OmJvb2xlYW47XHJcbiAgZnJvbTpzdHJpbmc7XHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcgIFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVHdpbGlvU2VydmljZSB7XHJcbiAgXHJcbiAgb3BlbkluUHJvZ3Jlc3NEaWFscGFkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgY3VycmVudENhbGwgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PENhbGwgfCBudWxsPihudWxsKTtcclxuICBjdXJyZW50Q2FsbFN0YXRlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KCdub25lJyk7IC8vaW4tcHJvZ3Jlc3MsIG91dC1wcm9ncmVzcywgbm9uZVxyXG4gIGRldmljZTphbnk7XHJcbiAgY2FsbCE6IENhbGw7XHJcbiAgaW5jb21pbmdDYWxsVG9rZW46c3RyaW5nPScnO1xyXG4gIG91dGdvaW5nQ2FsbFRva2VuPzpzdHJpbmc7XHJcbiAgY2FsbFR5cGUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJ05JTCcpO1xyXG4gIGluY29taW5nQ2FsbERldGFpbDogYW55OyAvLyBmb3IgYm90aCBpbmNvbWluZyBhbmQgb3V0Z29pbmdcclxuICB0b2tlbjphbnkgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZXh0X3Rva2VuJyk7XHJcbiAgaXNOZXdDb250YWN0QWRkZWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICB1cGRhdGVSZWNlbnRDYWxsID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgY2FsbGhhbmRsZUZyb21Ob3RpZmljYXRpb24gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4oe30pO1xyXG5cclxuICBlbmRDYWxsID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgZGlhbE51bWJlckZyb21PdGhlck1vZHVsZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RGlhbFBheWxvYWQ+KHsgbnVtYmVyOiAnJywgbmFtZTogJycsIGltZzogJycsIGNhbGxlcklkOiAnJywgaXNEaWFsRnJvbUhpc3Rvcnk6IGZhbHNlLCBmcm9tOiAnJyB9KTtcclxuXHJcbiAgdG9nZ2xlQ2FsbGVySWRBbGVydCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XHJcbiAgaXNUcmlhbE92ZXIgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBpc1BheW1lbnREdWUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBpc0F2YWlsYWJsZU51bWJlciA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIGNhbGxlcklkTGlzdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55W10+KFtdKTtcclxuICB0cmlnZ2VyU01TUmVsb2FkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgaXNDb25uZWN0aW5nSW5jb21pbmdDYWxsSWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xyXG5cclxuICB0b2tlbkluaXRpYWxpemVkID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSB0b2tlbkluaXRpYWxpemF0aW9uJDogT2JzZXJ2YWJsZTxhbnk+IHwgbnVsbCA9IG51bGw7XHJcbiAgZGV2aWNlSWQ6IGFueTtcclxuICBjb25mZXJlbmNlQ2FsbEluZm86IGFueTtcclxuICBpc1Nob3dJbmNvbWluZ0NhbGw6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLy8gQ1JJVElDQUw6IFRyYWNrIGFsbCBhY2NlcHRlZCBDYWxsIG9iamVjdHMgKG1pcnJvcnMgaU9TIGFjY2VwdGVkQ2FsbExpc3QpXHJcbiAgLy8gVXNlZCB0byBndWFyZCBkZXZpY2UgcmUtaW5pdGlhbGl6YXRpb24gc28gYWN0aXZlIGNhbGxzIGFyZSBuZXZlciB0b3JuIGRvd25cclxuICBhY2NlcHRlZENhbGxMaXN0OiBDYWxsW10gPSBbXTtcclxuXHJcbiAgcHJpdmF0ZSBwcmltYXJ5SGFzQ2FsbCA9IGZhbHNlO1xyXG4gIHByaXZhdGUgc3BhcmVEZXZpY2U6IGFueSA9IG51bGw7XHJcbiAgc3BhcmVEZXZpY2VSZWFkeSA9IGZhbHNlO1xyXG4gIHByaXZhdGUgcGVuZGluZ0luY29taW5nRGV2aWNlcyA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XHJcbiAgcHJpdmF0ZSBleHRyYURldmljZXMgPSBuZXcgTWFwPHN0cmluZywgYW55PigpO1xyXG4gIGluY29taW5nQ2FsbHNNYXAgPSBuZXcgTWFwPHN0cmluZywgYW55PigpO1xyXG5cclxuICBwcml2YXRlIHRva2VuUmVmcmVzaEluUHJvZ3Jlc3MgPSBmYWxzZTtcclxuICBwcml2YXRlIHJlY292ZXJ5QXR0ZW1wdHMgPSAwO1xyXG4gIHByaXZhdGUgcmVjb3ZlcnlUaW1lcjogYW55ID0gbnVsbDtcclxuICAvLyBSZWZlcmVuY2VzIHRvIHRoZSAndW5yZWdpc3RlcmVkJy8nZXJyb3InIGhhbmRsZXJzIGN1cnJlbnRseSBhdHRhY2hlZCB0byBgdGhpcy5kZXZpY2VgLFxyXG4gIC8vIHNvIGFuIGludGVudGlvbmFsIHJlcGxhY2UgY2FuIGRldGFjaCBleGFjdGx5IHRob3NlIHR3byBiZWZvcmUgZGVzdHJveSgpIHdpdGhvdXRcclxuICAvLyB0b3VjaGluZyBhbnkgbGlzdGVuZXJzIHRoZSBUd2lsaW8gU0RLIGl0c2VsZiBtYXkgaGF2ZSB3aXJlZCB0byB0aGUgc2FtZSBFdmVudEVtaXR0ZXIuXHJcbiAgcHJpdmF0ZSBjdXJyZW50RGV2aWNlVW5yZWdpc3RlcmVkSGFuZGxlcjogYW55ID0gbnVsbDtcclxuICBwcml2YXRlIGN1cnJlbnREZXZpY2VFcnJvckhhbmRsZXI6IGFueSA9IG51bGw7XHJcbiAgaW5jb21pbmdDYWxsTm90aWZpY2F0aW9uPSBuZXcgU3ViamVjdDxhbnk+KCk7XHJcbiAgcHJldmlvdXNJbmNvbWluZ0NhbGxOb3RpZmljYXRpb246IGFueTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXHJcbiAgICBwcml2YXRlIGV4dGVuc2lvblNlcnZpY2U6IEV4dGVuc2lvblNlcnZpY2UsXHJcbiAgKSB7XHJcbiAgICB0aGlzLmluaXRpYWxpemVUb2tlbigpO1xyXG4gICAgLy8gU2FmZXR5IG5ldCBmb3IgbG9uZyBpZGxlL3NsZWVwIHBlcmlvZHM6IHRoZSBzaWduYWxpbmcgc29ja2V0IGNhbiBkaWUgc2lsZW50bHlcclxuICAgIC8vIChPUyBzdXNwZW5kcyB0aW1lcnMsIHRhYiBpcyBiYWNrZ3JvdW5kZWQpIHdpdGhvdXQgZXZlciBmaXJpbmcgJ2Vycm9yJy8ndW5yZWdpc3RlcmVkJy5cclxuICAgIC8vIFJlLWNoZWNrIGRldmljZSBoZWFsdGggd2hlbmV2ZXIgdGhlIGFwcCBiZWNvbWVzIGFjdGl2ZS9vbmxpbmUgYWdhaW4uXHJcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd2aXNpYmlsaXR5Y2hhbmdlJywgKCkgPT4ge1xyXG4gICAgICBpZiAoZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlID09PSAndmlzaWJsZScpIHtcclxuICAgICAgICB0aGlzLmVuc3VyZURldmljZUhlYWx0aHkoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignb25saW5lJywgKCkgPT4gdGhpcy5lbnN1cmVEZXZpY2VIZWFsdGh5KCkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0aWFsaXplVG9rZW4oKSB7XHJcbiAgICBpZiAodGhpcy50b2tlbkluaXRpYWxpemVkKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnRva2VuSW5pdGlhbGl6YXRpb24kIHx8IG9mKG51bGwpO1xyXG4gICAgfVxyXG4gICAgLy8gQSBmZXRjaCBpcyBhbHJlYWR5IGluIGZsaWdodCDigJQgQXBwSW5pdGlhbGl6ZXJTZXJ2aWNlIGFuZCB0aGUgZGlhbGJveCBjb21wb25lbnRcclxuICAgIC8vIGJvdGggY2FsbCBpbml0aWFsaXplVHdpbGlvRGV2aWNlKCkgb24gc3RhcnR1cCwgYW5kIHdpdGhvdXQgdGhpcyB0aGV5J2QgcmFjZTpcclxuICAgIC8vIHRoZSBzZWNvbmQgY2FsbCB3b3VsZCBmaXJlIGl0cyBvd24gdG9rZW4gcmVxdWVzdCBhbmQsIG9uY2UgcmVzb2x2ZWQsIGNhbGxcclxuICAgIC8vIGluaXRpYWxpemVEZXZpY2UoKSBhZ2FpbiwgZGVzdHJveWluZyB0aGUgZGV2aWNlIHRoZSBmaXJzdCBjYWxsIGp1c3QgY3JlYXRlZCBhbmRcclxuICAgIC8vIHRvdWNoaW5nIG9mZiBhIHNwdXJpb3VzICd1bnJlZ2lzdGVyZWQnIC0+IHJlY292ZXJ5IGNhc2NhZGUuIFNoYXJlIHRoZSBzYW1lXHJcbiAgICAvLyBpbi1mbGlnaHQgcmVxdWVzdCBpbnN0ZWFkLlxyXG4gICAgaWYgKHRoaXMudG9rZW5Jbml0aWFsaXphdGlvbiQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMudG9rZW5Jbml0aWFsaXphdGlvbiQ7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy50b2tlbkluaXRpYWxpemF0aW9uJCA9IHRoaXMuZXh0ZW5zaW9uU2VydmljZS5nZXRJbmNvbWluZ0NhbGxUb2tlbih0aGlzLmRldmljZUlkIHx8IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdkZXZpY2VJZCcpKS5waXBlKFxyXG4gICAgICB0YXAoKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuaW5jb21pbmdDYWxsVG9rZW4gPSBkYXRhLnRva2VuO1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdpbi10b2tlbicsIGRhdGEudG9rZW4pO1xyXG4gICAgICAgIHRoaXMudG9rZW5Jbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5pbml0aWFsaXplRGV2aWNlKCk7XHJcbiAgICAgIH0pLFxyXG4gICAgICBjYXRjaEVycm9yKGVycm9yID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBpbml0aWFsaXppbmcgVHdpbGlvIHRva2VuOicsIGVycm9yKTtcclxuICAgICAgICAvLyBBbGxvdyBhIGZyZXNoIGF0dGVtcHQgbmV4dCB0aW1lIHNpbmNlIHRoaXMgb25lIGZhaWxlZC5cclxuICAgICAgICB0aGlzLnRva2VuSW5pdGlhbGl6YXRpb24kID0gbnVsbDtcclxuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcik7XHJcbiAgICAgIH0pLFxyXG4gICAgICBzaGFyZVJlcGxheSgxKSAvLyBDYWNoZSB0aGUgcmVzdWx0IGZvciBzdWJzZXF1ZW50IHN1YnNjcmliZXJzXHJcbiAgICApO1xyXG5cclxuICAgIHJldHVybiB0aGlzLnRva2VuSW5pdGlhbGl6YXRpb24kO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGluaXRpYWxpemVUd2lsaW9EZXZpY2UoZGV2aWNlSWQ6IGFueSkge1xyXG4gICAgdGhpcy5kZXZpY2VJZCA9IGRldmljZUlkO1xyXG4gICAgaWYgKHRoaXMudG9rZW5Jbml0aWFsaXplZCAmJiB0aGlzLmluY29taW5nQ2FsbFRva2VuKSB7XHJcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZURldmljZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5pbml0aWFsaXplVG9rZW4oKS5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdGlhbGl6ZURldmljZSgpIHtcclxuICAgIGlmICh0aGlzLmRldmljZSkge1xyXG4gICAgICBpZiAodGhpcy5hY2NlcHRlZENhbGxMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oJ1NraXBwaW5nIGRldmljZSByZS1pbml0OiBhY3RpdmUgYWNjZXB0ZWQgY2FsbHMgZXhpc3Q6JywgdGhpcy5hY2NlcHRlZENhbGxMaXN0Lmxlbmd0aCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIERldGFjaCB0aGUgJ3VucmVnaXN0ZXJlZCcvJ2Vycm9yJyBoYW5kbGVycyB3ZSBhdHRhY2hlZCBiZWZvcmUgZGVzdHJveWluZywgc29cclxuICAgICAgLy8gdGhpcyAqaW50ZW50aW9uYWwqIHRlYXJkb3duIGNhbid0IGZpcmUgdGhlbSBiZWxvdyDigJQgb3RoZXJ3aXNlIGEgZGVsaWJlcmF0ZVxyXG4gICAgICAvLyByZXBsYWNlIGxvb2tzIGlkZW50aWNhbCB0byBhbiB1bmV4cGVjdGVkIGRyb3AgYW5kIHRvdWNoZXMgb2ZmIGFcclxuICAgICAgLy8gZGVzdHJveSAtPiAndW5yZWdpc3RlcmVkJyAtPiBzY2hlZHVsZURldmljZVJlY292ZXJ5IC0+IGRlc3Ryb3kgY2FzY2FkZS5cclxuICAgICAgLy8gKE9ubHkgcmVtb3ZlcyBvdXIgb3duIGhhbmRsZXJzLCBub3QgYW55dGhpbmcgdGhlIFR3aWxpbyBTREsgaXRzZWxmIG1heSBoYXZlXHJcbiAgICAgIC8vIHdpcmVkIHRvIHRoZSBzYW1lIEV2ZW50RW1pdHRlciwgc28gaXRzIG93biBkZXN0cm95KCkvY2xlYW51cCBpcyB1bmFmZmVjdGVkLilcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50RGV2aWNlVW5yZWdpc3RlcmVkSGFuZGxlcikge1xyXG4gICAgICAgICAgdGhpcy5kZXZpY2UucmVtb3ZlTGlzdGVuZXIoJ3VucmVnaXN0ZXJlZCcsIHRoaXMuY3VycmVudERldmljZVVucmVnaXN0ZXJlZEhhbmRsZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50RGV2aWNlRXJyb3JIYW5kbGVyKSB7XHJcbiAgICAgICAgICB0aGlzLmRldmljZS5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCB0aGlzLmN1cnJlbnREZXZpY2VFcnJvckhhbmRsZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBjYXRjaCAoXykge31cclxuICAgICAgY29uc29sZS5sb2coJzE1MyBjYWxsIGVuZCcpXHJcbiAgICAgIHRoaXMuZGV2aWNlLmRlc3Ryb3koKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuaW5jb21pbmdDYWxsVG9rZW4pIHtcclxuICAgICAgY29uc29sZS5lcnJvcignTm8gVHdpbGlvIHRva2VuIGF2YWlsYWJsZScpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZGV2aWNlOiBhbnkgPSBuZXcgRGV2aWNlKHRoaXMuaW5jb21pbmdDYWxsVG9rZW4sIHsgYWxsb3dJbmNvbWluZ1doaWxlQnVzeTogdHJ1ZSB9KTtcclxuICAgIHRoaXMuZGV2aWNlID0gZGV2aWNlO1xyXG5cclxuICAgIGRldmljZS5vbigncmVnaXN0ZXJlZCcsICgpID0+IHtcclxuICAgICAgY29uc29sZS5sb2coJ1R3aWxpbyBEZXZpY2UgcmVnaXN0ZXJlZCBzdWNjZXNzZnVsbHknKTtcclxuICAgICAgdGhpcy5yZWNvdmVyeUF0dGVtcHRzID0gMTA7XHJcbiAgICAgIC8vIEEgcmVjb3ZlcnkgYXR0ZW1wdCBtYXkgaGF2ZSBiZWVuIHNjaGVkdWxlZCBieSBhbiBlYXJsaWVyIGRldmljZSBpbnN0YW5jZVxyXG4gICAgICAvLyBiZWZvcmUgdGhpcyBvbmUgY2FtZSB1cCDigJQgaXQncyBzdGFsZSBub3csIGNhbmNlbCBpdCBzbyBpdCBjYW4ndCB0ZWFyIHRoaXNcclxuICAgICAgLy8gaGVhbHRoeSBkZXZpY2UgZG93biBsYXRlci5cclxuICAgICAgaWYgKHRoaXMucmVjb3ZlcnlUaW1lcikge1xyXG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnJlY292ZXJ5VGltZXIpO1xyXG4gICAgICAgIHRoaXMucmVjb3ZlcnlUaW1lciA9IG51bGw7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5wcmVwYXJlRGV2aWNlMkZvckluY29taW5nQ2FsbCgpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gVHdpbGlvIGZpcmVzIHRoaXMgfjMgbWludXRlcyBiZWZvcmUgdGhlIGFjY2VzcyB0b2tlbiBleHBpcmVzLiBTd2FwIGluIGFcclxuICAgIC8vIGZyZXNoIG9uZSB2aWEgdXBkYXRlVG9rZW4oKSBzbyB0aGUgc2lnbmFsaW5nIGNvbm5lY3Rpb24gbmV2ZXIgaGFzIHRvIGRyb3BcclxuICAgIC8vIGluIHRoZSBmaXJzdCBwbGFjZSAodGhpcyBpcyB0aGUgbWFpbiBjYXVzZSBvZiBcImlkbGUgZm9yIGEgd2hpbGUsIEJFIHN0aWxsXHJcbiAgICAvLyBub3RpZmllcyBidXQgVHdpbGlvIGluY29taW5nIGV2ZW50IG5ldmVyIGZpcmVzXCIpLlxyXG4gICAgZGV2aWNlLm9uKCd0b2tlbldpbGxFeHBpcmUnLCAoKSA9PiB7XHJcbiAgICAgIHRoaXMucmVmcmVzaERldmljZVRva2VuKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBkZXZpY2Uub24oJ2luY29taW5nJywgKGNhbGw6IENhbGwgfCBhbnkpID0+IHtcclxuICAgICAgY29uc29sZS5sb2coJ1R3aWxpbyBEZXZpY2UgaW5jb21pbmcgY2FsbCBldmVudDonLCBjYWxsKTtcclxuICAgICAgY29uc3Qgbm90aWZpY2F0aW9uID0gdGhpcy5idWlsZEluY29taW5nTm90aWZpY2F0aW9uKGNhbGwpO1xyXG4gICAgICBpZih0aGlzLnByZXZpb3VzSW5jb21pbmdDYWxsTm90aWZpY2F0aW9uPy5wYXJhbWV0ZXJzPy5BY2NvdW50U2lkICE9IG5vdGlmaWNhdGlvbj8ucGFyYW1ldGVycz8uQWNjb3VudFNpZCAmJiB0aGlzLnByZXZpb3VzSW5jb21pbmdDYWxsTm90aWZpY2F0aW9uPy5wYXJhbWV0ZXJzPy5DYWxsU2lkICE9IG5vdGlmaWNhdGlvbj8ucGFyYW1ldGVycz8uQ2FsbFNpZCl7XHJcbiAgICAgICAgdGhpcy5pbmNvbWluZ0NhbGxOb3RpZmljYXRpb24ubmV4dChub3RpZmljYXRpb24pO1xyXG4gICAgICAgIHRoaXMucHJldmlvdXNJbmNvbWluZ0NhbGxOb3RpZmljYXRpb24gPSBjYWxsO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmFjY2VwdGVkQ2FsbExpc3QubGVuZ3RoID4gMCB8fCB0aGlzLnByaW1hcnlIYXNDYWxsKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ3ByaW1hcnkgZGV2aWNlOiBjb25jdXJyZW50IGNhbGwgYXJyaXZpbmcg4oCTIHNwYXJlIGRldmljZSB3aWxsIGhhbmRsZSBpdCcpO1xyXG4gICAgICAgIHRoaXMuaXNTaG93SW5jb21pbmdDYWxsID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5wcmltYXJ5SGFzQ2FsbCA9IHRydWU7XHJcbiAgICAgIC8vIEFybSBhIHNwYXJlIGRldmljZSByaWdodCBub3cgKGJlZm9yZSB0aGUgdXNlciBldmVuIGFjY2VwdHMpIHNvIGl0IGNhblxyXG4gICAgICAvLyByZWdpc3RlciBpbiB0aW1lIGZvciBhbnkgY2FsbCB0aGF0IGFycml2ZXMgc2Vjb25kcyBsYXRlci5cclxuICAgICAgdGhpcy5wcmVwYXJlRGV2aWNlMkZvckluY29taW5nQ2FsbCgpO1xyXG5cclxuICAgICAgaWYgKHRoaXMuaXNJbmNvbWluZ011dGVkKSB7XHJcbiAgICAgICAgdHJ5IHsgZGV2aWNlLmF1ZGlvPy5pbmNvbWluZyhmYWxzZSk7IH0gY2F0Y2ggKF8pIHt9XHJcbiAgICAgIH1cclxuICAgICAgY2FsbC5vbignYWNjZXB0JywgKCkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdJbmNvbWluZyBjYWxsIGFuc3dlcmVkL2FjY2VwdGVkJyk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgY2FsbC5vbignZGlzY29ubmVjdCcsICgpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZygnQ2FsbCBkaXNjb25uZWN0ZWQnKTtcclxuICAgICAgICB0aGlzLnByaW1hcnlIYXNDYWxsID0gZmFsc2U7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgY2FsbC5vbignY2FuY2VsJywgKCkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdDYWxsZXIgaHVuZyB1cCBiZWZvcmUgYW5zd2VyJyk7XHJcbiAgICAgICAgdGhpcy5wcmltYXJ5SGFzQ2FsbCA9IGZhbHNlO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGNhbGwub24oJ3JlamVjdCcsICgpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZygnQ2FsbCByZWplY3RlZCcpO1xyXG4gICAgICAgIHRoaXMucHJpbWFyeUhhc0NhbGwgPSBmYWxzZTtcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMudHJhY2tJbmNvbWluZ0NhbGwoY2FsbCk7XHJcbiAgICAgIHRoaXMuaW5jb21pbmdDYWxsRGV0YWlsID0gY2FsbDtcclxuICAgICAgdGhpcy5pc1Nob3dJbmNvbWluZ0NhbGwgPSB0cnVlO1xyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3Qgb25EZXZpY2VFcnJvciA9IChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgIC8vIFN0YWxlIGV2ZW50IGZyb20gYSBkZXZpY2Ugd2UndmUgYWxyZWFkeSBpbnRlbnRpb25hbGx5IHJlcGxhY2VkIOKAlCBpZ25vcmUuXHJcbiAgICAgIGlmICh0aGlzLmRldmljZSAhPT0gZGV2aWNlKSByZXR1cm47XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1R3aWxpbyBEZXZpY2UgRXJyb3I6JywgZXJyb3IpO1xyXG4gICAgICB0aGlzLmlzU2hvd0luY29taW5nQ2FsbCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnRva2VuSW5pdGlhbGl6ZWQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zY2hlZHVsZURldmljZVJlY292ZXJ5KCk7XHJcbiAgICB9O1xyXG4gICAgdGhpcy5jdXJyZW50RGV2aWNlRXJyb3JIYW5kbGVyID0gb25EZXZpY2VFcnJvcjtcclxuICAgIGRldmljZS5vbignZXJyb3InLCBvbkRldmljZUVycm9yKTtcclxuXHJcbiAgICBjb25zdCBvbkRldmljZVVucmVnaXN0ZXJlZCA9ICgpID0+IHtcclxuICAgICAgLy8gU3RhbGUgZXZlbnQgZnJvbSBhIGRldmljZSB3ZSd2ZSBhbHJlYWR5IGludGVudGlvbmFsbHkgcmVwbGFjZWQg4oCUIGlnbm9yZS5cclxuICAgICAgaWYgKHRoaXMuZGV2aWNlICE9PSBkZXZpY2UpIHJldHVybjtcclxuICAgICAgY29uc29sZS5sb2coJ1R3aWxpbyBEZXZpY2UgdW5yZWdpc3RlcmVkJyk7XHJcbiAgICAgIHRoaXMuaXNTaG93SW5jb21pbmdDYWxsID0gZmFsc2U7XHJcbiAgICAgIHRoaXMudG9rZW5Jbml0aWFsaXplZCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnNjaGVkdWxlRGV2aWNlUmVjb3ZlcnkoKTtcclxuICAgIH07XHJcbiAgICB0aGlzLmN1cnJlbnREZXZpY2VVbnJlZ2lzdGVyZWRIYW5kbGVyID0gb25EZXZpY2VVbnJlZ2lzdGVyZWQ7XHJcbiAgICBkZXZpY2Uub24oJ3VucmVnaXN0ZXJlZCcsIG9uRGV2aWNlVW5yZWdpc3RlcmVkKTtcclxuXHJcbiAgICAvLyBSZWdpc3RlciBBRlRFUiBhdHRhY2hpbmcgYWxsIGxpc3RlbmVyc1xyXG4gICAgZGV2aWNlLnJlZ2lzdGVyKCk7XHJcbiAgICBjb25zb2xlLmxvZygnZGV2aWNlIGNyZWF0ZWQnLCBkZXZpY2UpO1xyXG4gICAgcmV0dXJuIHRoaXMudG9rZW5Jbml0aWFsaXphdGlvbiQgfHwgb2YobnVsbCk7XHJcbiAgfVxyXG5cclxuICAvLyBQcm9hY3RpdmVseSBzd2FwIGluIGEgZnJlc2ggYWNjZXNzIHRva2VuIGFoZWFkIG9mIGV4cGlyeSAoc2VlICd0b2tlbldpbGxFeHBpcmUnXHJcbiAgLy8gYWJvdmUpIHNvIHRoZSBEZXZpY2UncyBzaWduYWxpbmcgY29ubmVjdGlvbiBzdXJ2aXZlcyBsb25nIGlkbGUgcGVyaW9kcy5cclxuICBwcml2YXRlIHJlZnJlc2hEZXZpY2VUb2tlbigpIHtcclxuICAgIGlmICh0aGlzLnRva2VuUmVmcmVzaEluUHJvZ3Jlc3MpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy50b2tlblJlZnJlc2hJblByb2dyZXNzID0gdHJ1ZTtcclxuICAgIHRoaXMuZXh0ZW5zaW9uU2VydmljZS5nZXRJbmNvbWluZ0NhbGxUb2tlbih0aGlzLmRldmljZUlkIHx8IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdkZXZpY2VJZCcpKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy50b2tlblJlZnJlc2hJblByb2dyZXNzID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pbmNvbWluZ0NhbGxUb2tlbiA9IGRhdGEudG9rZW47XHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2luLXRva2VuJywgZGF0YS50b2tlbik7XHJcbiAgICAgICAgdGhpcy50b2tlbkluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgdGhpcy5kZXZpY2U/LnVwZGF0ZVRva2VuKHRoaXMuaW5jb21pbmdDYWxsVG9rZW4pO1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGFwcGx5IHJlZnJlc2hlZCBUd2lsaW8gdG9rZW46JywgZXJyKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgdGhpcy50b2tlblJlZnJlc2hJblByb2dyZXNzID0gZmFsc2U7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIHJlZnJlc2ggVHdpbGlvIHRva2VuIGFoZWFkIG9mIGV4cGlyeTonLCBlcnIpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vIFNlbGYtaGVhbCBhZnRlciB0aGUgRGV2aWNlIGRpZXMgKGV4cGlyZWQgdG9rZW4sIGRyb3BwZWQgc2lnbmFsaW5nIHNvY2tldCB3aGlsZVxyXG4gIC8vIGlkbGUvYXNsZWVwLCBldGMpLiBOZXZlciBydW5zIHdoaWxlIGEgY2FsbCBpcyBhY3R1YWxseSBhY3RpdmUsIGFuZCBiYWNrcyBvZmYgc28gYVxyXG4gIC8vIGdlbnVpbmVseSBsb2dnZWQtb3V0L29mZmxpbmUgdXNlciBkb2Vzbid0IHJldHJ5IGZvcmV2ZXIuXHJcbiAgcHJpdmF0ZSBzY2hlZHVsZURldmljZVJlY292ZXJ5KCkge1xyXG4gICAgaWYgKHRoaXMuYWNjZXB0ZWRDYWxsTGlzdC5sZW5ndGggPiAwIHx8IHRoaXMucmVjb3ZlcnlUaW1lcikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBkZWxheSA9IE1hdGgubWluKDMwMDAwLCAyMDAwICogTWF0aC5wb3coMiwgdGhpcy5yZWNvdmVyeUF0dGVtcHRzKSk7XHJcbiAgICB0aGlzLnJlY292ZXJ5QXR0ZW1wdHMrKztcclxuICAgIHRoaXMucmVjb3ZlcnlUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnJlY292ZXJ5VGltZXIgPSBudWxsO1xyXG4gICAgICBjb25zdCBhdXRoVG9rZW4gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZXh0X3Rva2VuJyk7XHJcbiAgICAgIGlmICghYXV0aFRva2VuIHx8IGF1dGhUb2tlbiA9PT0gJ2xvZ291dCcpIHtcclxuICAgICAgICB0aGlzLnJlY292ZXJ5QXR0ZW1wdHMgPSAwO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnRva2VuSW5pdGlhbGl6ZWQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5pbml0aWFsaXplVG9rZW4oKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiBjb25zb2xlLmVycm9yKCdUd2lsaW8gZGV2aWNlIHJlY292ZXJ5IGF0dGVtcHQgZmFpbGVkOicsIGVycilcclxuICAgICAgfSk7XHJcbiAgICB9LCBkZWxheSk7XHJcbiAgfVxyXG5cclxuICAvLyBCdWlsZCB0aGUgZnVsbCBpbmNvbWluZy1jYWxsIG5vdGlmaWNhdGlvbiBwYXlsb2FkIChtYXRjaGVzIHRoZSBzaGFwZSB0aGUgQkUgdXNlZCB0b1xyXG4gIC8vIHB1c2ggb3ZlciB0aGUgc29ja2V0KSBmcm9tIHRoZSByYXcgVHdpbGlvICdpbmNvbWluZycgQ2FsbDogcGFyc2VkIFBhcmFtcyBmaWVsZHMgcGx1c1xyXG4gIC8vIHRoZSBkZXJpdmVkIGNsaWVudFNpZC9wYXJ0aWNpcGFudFNpZC9ub3RpZmljYXRpb25UeXBlL3RpdGxlL21zZ0JvZHkuXHJcbiAgYnVpbGRJbmNvbWluZ05vdGlmaWNhdGlvbihjYWxsOiBDYWxsKTogYW55IHtcclxuICAgIGNvbnN0IG5vdGlmaWNhdGlvbiA9IHRoaXMuY29udmVydFRvSnNvbihjYWxsPy5wYXJhbWV0ZXJzPy5bJ1BhcmFtcyddIHx8ICd7fScpO1xyXG4gICAgY29uc3QgY2FsbFNpZCA9IGNhbGw/LnBhcmFtZXRlcnM/LlsnQ2FsbFNpZCddO1xyXG4gICAgbm90aWZpY2F0aW9uLmNsaWVudFNpZCA9IGNhbGxTaWQ7XHJcbiAgICAvLyBPbmx5IHJlYWwgVHdpbGlvIFNJRCBleHBvc2VkIGNsaWVudC1zaWRlIGZvciB0aGlzIGxlZzsgbm8gc2VwYXJhdGUgcGFydGljaXBhbnQgU0lEXHJcbiAgICAvLyBpcyBhdmFpbGFibGUsIHNvIGl0IG1pcnJvcnMgY2xpZW50U2lkLlxyXG4gICAgbm90aWZpY2F0aW9uLnBhcnRpY2lwYW50U2lkID0gY2FsbFNpZDtcclxuICAgIG5vdGlmaWNhdGlvbi5ub3RpZmljYXRpb25UeXBlID0gJ2luY29taW5nY2FsbCc7XHJcbiAgICBub3RpZmljYXRpb24udGl0bGUgPSAnSW5jb21pbmcgQ2FsbCc7XHJcbiAgICBub3RpZmljYXRpb24ubXNnQm9keSA9IGB5b3UgaGF2ZSBpbmNvbWluZyBjYWxsICR7bm90aWZpY2F0aW9uLmZyb21OYW1lIHx8ICcnfWA7XHJcbiAgICByZXR1cm4gbm90aWZpY2F0aW9uO1xyXG4gIH1cclxuXHJcbiAgY29udmVydFRvSnNvbihkYXRhOiBzdHJpbmcpOiBhbnkge1xyXG4gICAgY29uc3Qgb2JqOiBhbnkgPSB7fTtcclxuXHJcbiAgICBpZiAoIWRhdGEpIHtcclxuICAgICAgcmV0dXJuIG9iajtcclxuICAgIH1cclxuXHJcbiAgICAvLyBGb3JtYXQ6IGtleT12YWx1ZSZrZXk9dmFsdWVcclxuICAgIGlmIChkYXRhLmluY2x1ZGVzKCcmJykpIHtcclxuICAgICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhkYXRhKTtcclxuXHJcbiAgICAgIHBhcmFtcy5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XHJcbiAgICAgICAgb2JqW2tleV0gPSB2YWx1ZSA9PT0gJ3RydWUnXHJcbiAgICAgICAgICA/IHRydWVcclxuICAgICAgICAgIDogdmFsdWUgPT09ICdmYWxzZSdcclxuICAgICAgICAgID8gZmFsc2VcclxuICAgICAgICAgIDogZGVjb2RlVVJJQ29tcG9uZW50KHZhbHVlKTtcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBGb3JtYXQ6IHtrZXk9dmFsdWUsIGtleT12YWx1ZX1cclxuICAgICAgY29uc3QgdGV4dCA9IGRhdGEudHJpbSgpLnJlcGxhY2UoL15cXHt8XFx9JC9nLCAnJyk7XHJcblxyXG4gICAgICB0ZXh0LnNwbGl0KCcsJykuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICBjb25zdCBpbmRleCA9IGl0ZW0uaW5kZXhPZignPScpO1xyXG5cclxuICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgY29uc3Qga2V5ID0gaXRlbS5zdWJzdHJpbmcoMCwgaW5kZXgpLnRyaW0oKTtcclxuICAgICAgICAgIGxldCB2YWx1ZTogYW55ID0gaXRlbS5zdWJzdHJpbmcoaW5kZXggKyAxKS50cmltKCk7XHJcblxyXG4gICAgICAgICAgaWYgKHZhbHVlID09PSAndHJ1ZScpIHZhbHVlID0gdHJ1ZTtcclxuICAgICAgICAgIGVsc2UgaWYgKHZhbHVlID09PSAnZmFsc2UnKSB2YWx1ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgIG9ialtrZXldID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvYmoucmVhZCA9IGZhbHNlO1xyXG4gICAgb2JqLnNhdmUgPSBmYWxzZTtcclxuXHJcbiAgICByZXR1cm4gb2JqO1xyXG4gIH1cclxuICAvLyBTYWZldHkgbmV0IGZvciB0aGUgY2FzZSB3aGVyZSB0aGUgdW5kZXJseWluZyBzb2NrZXQgZGllcyBzaWxlbnRseSBkdXJpbmcgYSBsb25nXHJcbiAgLy8gc2xlZXAvaWRsZSBwZXJpb2Qgd2l0aG91dCBldmVyIGZpcmluZyAnZXJyb3InLyd1bnJlZ2lzdGVyZWQnICh0aGUgT1MgY2FuIHN1c3BlbmRcclxuICAvLyB0aW1lcnMvc29ja2V0cyBvdXRyaWdodCkg4oCUIHJlLWNoZWNrIGRldmljZSBoZWFsdGggd2hlbmV2ZXIgdGhlIGFwcCB3YWtlcyB1cC5cclxuICBwcml2YXRlIGVuc3VyZURldmljZUhlYWx0aHkoKSB7XHJcbiAgICBpZiAodGhpcy5hY2NlcHRlZENhbGxMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLmRldmljZSB8fCB0aGlzLmRldmljZS5zdGF0ZSAhPT0gJ3JlZ2lzdGVyZWQnKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdUd2lsaW8gZGV2aWNlIHVuaGVhbHRoeSBhZnRlciB3YWtlL3Zpc2liaWxpdHkgY2hhbmdlLCByZS1pbml0aWFsaXppbmcnKTtcclxuICAgICAgdGhpcy50b2tlbkluaXRpYWxpemVkID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZVRva2VuKCkuc3Vic2NyaWJlKHtcclxuICAgICAgICBlcnJvcjogKGVycikgPT4gY29uc29sZS5lcnJvcignVHdpbGlvIGRldmljZSByZWNvdmVyeSBmYWlsZWQ6JywgZXJyKVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNhdmVDb250YWN0KHBheWxvYWQ6IGFueSk6IE9ic2VydmFibGU8W10+IHtcclxuICAgIGNvbnN0IGh0dHBPcHRpb25zID0geyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLCAnQXV0aC1LZXknOiBcIkJlYXJlciBcIiArIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdleHRfdG9rZW4nKX0pIH07XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8W10+KGVudmlyb25tZW50LmFwaVVybCArICcvdXRpbGl0aWVzL3Bob25lYm9vay9hZGQvY29udGFjdHMvbWFudWFsbHknLCBwYXlsb2FkLCBodHRwT3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVDb250YWN0KHBheWxvYWQ6YW55KXtcclxuICAgIGNvbnN0IGh0dHBPcHRpb25zID0geyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLCAnQXV0aC1LZXknOiBcIkJlYXJlciBcIiArIHRoaXMudG9rZW59KSB9O1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PFtdPihlbnZpcm9ubWVudC5hcGlVcmwgKyAnL3V0aWxpdGllcy9waG9uZWJvb2svdXBkYXRlL2NvbnRhY3QnLCBwYXlsb2FkLCBodHRwT3B0aW9ucyk7XHJcbiAgfVxyXG4gIFxyXG4gIGRlbGV0ZUNvbnRhY3QoaWQ6c3RyaW5nKXtcclxuICAgIGxldCBwYXlsb2FkID0ge1xyXG4gICAgICBwaG9uZWJvb2tpZDogaWRcclxuICAgIH1cclxuICAgIGNvbnN0IGh0dHBPcHRpb25zID0geyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLCAnQXV0aC1LZXknOiBcIkJlYXJlciBcIiArIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdleHRfdG9rZW4nKSB9KSB9O1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PFtdPihlbnZpcm9ubWVudC5hcGlVcmwgKyAnL3V0aWxpdGllcy9waG9uZWJvb2svZGVsZXRlL2NvbnRhY3QvJytpZCxwYXlsb2FkLCBodHRwT3B0aW9ucyk7XHJcbiAgfVxyXG4gIGdldENvbnRhY3RMaXN0KCl7XHJcbiAgICBjb25zdCBodHRwT3B0aW9ucyA9IHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJywgJ0F1dGgtS2V5JzogXCJCZWFyZXIgXCIgKyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZXh0X3Rva2VuJykgfSkgfTtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFtdPihlbnZpcm9ubWVudC5hcGlVcmwgKyAnL3V0aWxpdGllcy9waG9uZWJvb2svcmVhZC9jb250YWN0cycsIGh0dHBPcHRpb25zKTtcclxuICB9XHJcblxyXG4gIGFkZENvbnRhY3RUb0Zhdm91cml0ZShwYXlsb2FkOiBhbnkpe1xyXG4gICAgY29uc3QgaHR0cE9wdGlvbnMgPSB7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsICdBdXRoLUtleSc6IFwiQmVhcmVyIFwiICsgbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2V4dF90b2tlbicpIH0pIH07XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8W10+KGVudmlyb25tZW50LmFwaVVybCArICcvdXRpbGl0aWVzL3Bob25lYm9vay91cGRhdGUvZmF2b3VyaXRlJywgcGF5bG9hZCwgaHR0cE9wdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgZ2V0RmF2b3VyaXRDb250YWN0cygpe1xyXG4gICAgY29uc3QgaHR0cE9wdGlvbnMgPSB7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsICdBdXRoLUtleSc6IFwiQmVhcmVyIFwiICsgbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2V4dF90b2tlbicpIH0pIH07XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxbXT4oZW52aXJvbm1lbnQuYXBpVXJsICsgJy91dGlsaXRpZXMvcGhvbmVib29rL2Zhdm91cml0ZS9jb250YWN0cycsIGh0dHBPcHRpb25zKTtcclxuICB9XHJcblxyXG4gIGdldFJlY2VudENhbGxzKHBhZ2VJbmRleD86IHN0cmluZywgcGFnZVNpemU/OiBzdHJpbmcsKXtcclxuICAgIGNvbnN0IGhlYWRlcnMgPSAgeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLCAnQXV0aC1LZXknOiBcIkJlYXJlciBcIiArIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdleHRfdG9rZW4nKSB9O1xyXG4gICAgY29uc3QgaHR0cE9wdGlvbnMgPXtoZWFkZXJzfVxyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8W10+KGVudmlyb25tZW50LmFwaVVybCArICcvdXRpbGl0aWVzL3Bob25lYm9vay9yZWNlbnQvY2FsbHMnLCBodHRwT3B0aW9ucyk7XHJcbiAgfVxyXG4gIGRlbGV0ZVJlY2VudENhbGxMb2coaWQ6c3RyaW5nfCBzdHJpbmdbXSl7XHJcbiAgICBsZXQgcGF5bG9hZCA9IHtcclxuICAgICAgcmVjb3JkSWQ6IGlkXHJcbiAgICB9XHJcbiAgICBjb25zdCBodHRwT3B0aW9ucyA9IHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJywgJ0F1dGgtS2V5JzogXCJCZWFyZXIgXCIgKyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZXh0X3Rva2VuJykgfSkgfTtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxbXT4oZW52aXJvbm1lbnQuYXBpVXJsICsgJy91dGlsaXRpZXMvcGhvbmVib29rL2RlbGV0ZS9jYWxscy8nK2lkLHBheWxvYWQsIGh0dHBPcHRpb25zKTtcclxuICB9XHJcblxyXG4gIHVwbG9hZFBob3RvKHBheWxvYWQ6IGFueSl7XHJcbiAgICBsZXQgaHR0cE9wdGlvbnMgPSB7XHJcbiAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XHJcbiAgICAgICAgJ0F1dGgtS2V5JzogXCJCZWFyZXIgXCIgKyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZXh0X3Rva2VuJylcclxuICAgICAgfSlcclxuICAgIH07XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8W10+KGVudmlyb25tZW50LmFwaVVybCArICcvdXRpbGl0aWVzL3Bob25lYm9vay91cGxvYWQvcGhvdG8nLHBheWxvYWQsIGh0dHBPcHRpb25zKTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZVBob3RvKGlkOnN0cmluZyl7XHJcbiAgICBsZXQgcGF5bG9hZCA9IHtcclxuICAgICAgcGhvbmVib29raWQ6IGlkXHJcbiAgICB9XHJcbiAgICBsZXQgaHR0cE9wdGlvbnMgPSB7XHJcbiAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XHJcbiAgICAgICAgJ0F1dGgtS2V5JzogXCJCZWFyZXIgXCIgKyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZXh0X3Rva2VuJylcclxuICAgICAgfSlcclxuICAgIH07XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8W10+KGVudmlyb25tZW50LmFwaVVybCArICcvdXRpbGl0aWVzL3Bob25lYm9vay9kZWxldGUvcGhvdG8vJytpZCxwYXlsb2FkLCBodHRwT3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICB0b2dnbGVDb3V0cnlDb2RlVG9hc3QodmFsOmFueSl7XHJcbiAgICBsZXQgaHR0cE9wdGlvbnMgPSB7XHJcbiAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XHJcbiAgICAgICAgJ0F1dGgtS2V5JzogXCJCZWFyZXIgXCIgKyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZXh0X3Rva2VuJylcclxuICAgICAgfSlcclxuICAgIH07XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxbXT4oZW52aXJvbm1lbnQuYXBpVXJsICsgJy91dGlsaXRpZXMvc29mdHBob25lL2NvdW50cnljb2RlL2FsZXJ0LycgKyB2YWwsIHt9LCBodHRwT3B0aW9ucyk7XHJcbiAgfVxyXG4gIGdldFRvTnVtYmVyKGRpYWxsZWRObzogc3RyaW5nLCBpc29Db2RlOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGh0dHBPcHRpb25zID0ge1xyXG4gICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLCAnQXV0aC1LZXknOiBcIkJlYXJlciBcIiArIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdleHRfdG9rZW4nKSB9KSxcclxuICAgICAgcGFyYW1zOiBuZXcgSHR0cFBhcmFtcygpLnNldCgnaXNvQ29kZScsIGlzb0NvZGUpXHJcbiAgICB9O1xyXG4gICAgY29uc3QgcGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKS5zZXQoJ2lzb0NvZGUnLCBpc29Db2RlKVxyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8W10+KGVudmlyb25tZW50LmFwaVVybCArICcvdXRpbGl0aWVzL3NvZnRwaG9uZS9jaGVjay9jb3VudHJ5Q29kZS8nICsgZGlhbGxlZE5vLCBodHRwT3B0aW9ucyk7XHJcbiAgfSBcclxuICBcclxuICAvLyBSZWNvcmQgYSByaW5naW5nIGluY29taW5nIENhbGwgc28gaXQgY2FuIGxhdGVyIGJlIGFjY2VwdGVkIGJ5IGl0cyBzcGVjaWZpYyBpZC5cclxuICAvLyBUaGUgbWFwIGlzIGNsZWFuZWQgYXV0b21hdGljYWxseSB3aGVuIHRoZSBjYWxsIGlzIGNhbmNlbGxlZC9kaXNjb25uZWN0ZWQvcmVqZWN0ZWQuXHJcbiAgcHJpdmF0ZSB0cmFja0luY29taW5nQ2FsbChjYWxsOiBhbnkpIHtcclxuICAgIGNvbnN0IGNhbGxTaWQgPSBjYWxsPy5wYXJhbWV0ZXJzPy5bJ0NhbGxTaWQnXTtcclxuICAgIGlmIChjYWxsU2lkKSB7XHJcbiAgICAgIHRoaXMuaW5jb21pbmdDYWxsc01hcC5zZXQoY2FsbFNpZCwgY2FsbCk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBjbGVhbnVwID0gKCkgPT4ge1xyXG4gICAgICBpZiAoIWNhbGxTaWQpIHJldHVybjtcclxuICAgICAgdGhpcy5pbmNvbWluZ0NhbGxzTWFwLmRlbGV0ZShjYWxsU2lkKTtcclxuICAgICAgLy8gSWYgdGhlIGNhbGwgZW5kZWQgYmVmb3JlIHRoZSB1c2VyIGFjY2VwdGVkIGl0LCBkZXN0cm95IHRoZSBwZW5kaW5nIHNwYXJlXHJcbiAgICAgIC8vIGRldmljZSB0aGF0IHdhcyBob2xkaW5nIGl0IHNvIHdlIGRvbid0IGxlYWsgZGV2aWNlIHJlZ2lzdHJhdGlvbnMuXHJcbiAgICAgIGNvbnN0IGRldiA9IHRoaXMucGVuZGluZ0luY29taW5nRGV2aWNlcy5nZXQoY2FsbFNpZCk7XHJcbiAgICAgIGlmIChkZXYgJiYgIWRldi5fb3duc0FjY2VwdGVkQ2FsbCkge1xyXG4gICAgICAgIHRyeSB7IGRldi5kZXN0cm95KCk7IH0gY2F0Y2ggKF8pIHt9XHJcbiAgICAgICAgdGhpcy5wZW5kaW5nSW5jb21pbmdEZXZpY2VzLmRlbGV0ZShjYWxsU2lkKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuICAgIGNhbGwub24oJ2NhbmNlbCcsIGNsZWFudXApO1xyXG4gICAgY2FsbC5vbignZGlzY29ubmVjdCcsIGNsZWFudXApO1xyXG4gICAgY2FsbC5vbigncmVqZWN0JywgY2xlYW51cCk7XHJcbiAgfVxyXG5cclxuICAvLyBSZXNvbHZlIHRoZSBFWEFDVCByaW5naW5nIENhbGwgZm9yIGEgZ2l2ZW4gVUkgZW50cnkgaWQgKHBhcnRpY2lwYW50L3JlY29yZCBpZCkuXHJcbiAgLy8gRmFsbHMgYmFjayB0byB0aGUgbW9zdCByZWNlbnQgaW5jb21pbmcgY2FsbCBzbyBvbGRlciBzaW5nbGUtY2FsbCBmbG93cyBzdGlsbCB3b3JrLlxyXG4gIGdldEluY29taW5nQ2FsbEJ5SWQoaWQ6IGFueSkge1xyXG4gICAgaWYgKGlkICE9IG51bGwgJiYgdGhpcy5pbmNvbWluZ0NhbGxzTWFwLmhhcyhpZCkpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuaW5jb21pbmdDYWxsc01hcC5nZXQoaWQpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuaW5jb21pbmdDYWxsRGV0YWlsLnBhcmFtZXRlcnM/LlsnQ2FsbFNpZCddID09IGlkID8gdGhpcy5pbmNvbWluZ0NhbGxEZXRhaWwgOiBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHJlcGFyZURldmljZTJGb3JJbmNvbWluZ0NhbGwoKSB7XHJcbiAgICBpZiAodGhpcy5zcGFyZURldmljZSkge1xyXG4gICAgICByZXR1cm47IC8vIGEgZnJlZSBzcGFyZSBpcyBhbHJlYWR5IHdhaXRpbmdcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5pbmNvbWluZ0NhbGxUb2tlbikge1xyXG4gICAgICBjb25zb2xlLndhcm4oJ3ByZXBhcmVTcGFyZURldmljZTogbm8gdG9rZW4gYXZhaWxhYmxlJyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IHNwYXJlOiBhbnkgPSBuZXcgRGV2aWNlKHRoaXMuaW5jb21pbmdDYWxsVG9rZW4sIHsgYWxsb3dJbmNvbWluZ1doaWxlQnVzeTogdHJ1ZSB9KTtcclxuICAgIHNwYXJlLl9vd25zQWNjZXB0ZWRDYWxsID0gZmFsc2U7XHJcblxyXG4gICAgc3BhcmUub24oJ3JlZ2lzdGVyZWQnLCAoKSA9PiB7XHJcbiAgICAgIHRoaXMuc3BhcmVEZXZpY2VSZWFkeSA9IHRydWU7XHJcbiAgICAgIC8vIEFwcGx5IHRoZSBtdXRlIHByZWZlcmVuY2UgaGVyZSDigJQgYHNwYXJlLmF1ZGlvYCBpcyBvbmx5IHJlYWR5IGFmdGVyIHJlZ2lzdHJhdGlvbixcclxuICAgICAgLy8gc28gdGhlIGNhbGwgYWJvdmUgKGJlZm9yZSByZWdpc3RlcigpKSB3YXMgYWx3YXlzIGEgbm8tb3AuXHJcbiAgICAgIHRyeSB7IHNwYXJlLmF1ZGlvPy5pbmNvbWluZyghdGhpcy5pc0luY29taW5nTXV0ZWQpOyB9IGNhdGNoIChfKSB7fVxyXG4gICAgICBjb25zb2xlLmxvZygnU3BhcmUgZGV2aWNlIHJlZ2lzdGVyZWQg4oCTIHJlYWR5IGZvciB0aGUgbmV4dCBjb25jdXJyZW50IGNhbGwnKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHNwYXJlLm9uKCdpbmNvbWluZycsIChjYWxsOiBDYWxsIHwgYW55KSA9PiB7XHJcbiAgICAgIC8vIEd1YXJkOiBvbmNlIHRoaXMgc3BhcmUgaXMgYWxyZWFkeSBoYW5kbGluZyBhIGNhbGwgKHBlbmRpbmcgb3IgYWNjZXB0ZWQpLFxyXG4gICAgICAvLyBpZ25vcmUgYW55IGZ1cnRoZXIgaW5jb21pbmcgZXZlbnRzIHNvIGFub3RoZXIgc3BhcmUgY2FuIHRha2UgdGhlIG5leHQgY2FsbC5cclxuICAgICAgaWYgKHNwYXJlLl9vd25zQWNjZXB0ZWRDYWxsIHx8IHNwYXJlLl9wZW5kaW5nSW5jb21pbmdDYWxsKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIHNwYXJlLl9wZW5kaW5nSW5jb21pbmdDYWxsID0gY2FsbDtcclxuICAgICAgY29uc3QgY2FsbFNpZCA9IGNhbGw/LnBhcmFtZXRlcnM/LlsnQ2FsbFNpZCddO1xyXG5cclxuICAgICAgLy8gVHJhbnNpdGlvbiB0aGlzIHNwYXJlIGZyb20gXCJmcmVlXCIg4oaSIFwicGVuZGluZ1wiOiByZW1vdmUgaXQgYXMgdGhlIGFjdGl2ZVxyXG4gICAgICAvLyBzcGFyZURldmljZSBhbmQgdHJhY2sgaXQgYnkgQ2FsbFNpZCBzbyBvbkNvbmN1cnJlbnRDYWxsQWNjZXB0ZWQgY2FuIGZpbmQgaXQuXHJcbiAgICAgIGlmICh0aGlzLnNwYXJlRGV2aWNlID09PSBzcGFyZSkge1xyXG4gICAgICAgIHRoaXMuc3BhcmVEZXZpY2UgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuc3BhcmVEZXZpY2VSZWFkeSA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjYWxsU2lkKSB7XHJcbiAgICAgICAgdGhpcy5wZW5kaW5nSW5jb21pbmdEZXZpY2VzLnNldChjYWxsU2lkLCBzcGFyZSk7XHJcbiAgICAgIH1cclxuICAgICAgLy8gSW1tZWRpYXRlbHkgYXJtIHRoZSBORVhUIGZyZWUgc3BhcmUgc28gaXQgaXMgcmVhZHkgZm9yIGNhbGwgTisyIHdpdGhvdXRcclxuICAgICAgLy8gd2FpdGluZyBmb3IgdGhlIHVzZXIgdG8gYWNjZXB0IHRoaXMgY2FsbCBmaXJzdC5cclxuICAgICAgdGhpcy5wcmVwYXJlRGV2aWNlMkZvckluY29taW5nQ2FsbCgpO1xyXG5cclxuICAgICAgaWYgKHRoaXMuaXNJbmNvbWluZ011dGVkKSB7XHJcbiAgICAgICAgdHJ5IHsgc3BhcmUuYXVkaW8/LmluY29taW5nKGZhbHNlKTsgfSBjYXRjaCAoXykge31cclxuICAgICAgfVxyXG4gICAgICB0aGlzLnRyYWNrSW5jb21pbmdDYWxsKGNhbGwpO1xyXG4gICAgICB0aGlzLmluY29taW5nQ2FsbERldGFpbCA9IGNhbGw7XHJcbiAgICAgIHRoaXMuaXNTaG93SW5jb21pbmdDYWxsID0gdHJ1ZTtcclxuICAgICAgY29uc3Qgbm90aWZpY2F0aW9uID0gdGhpcy5idWlsZEluY29taW5nTm90aWZpY2F0aW9uKGNhbGwpO1xyXG4gICAgICBpZih0aGlzLnByZXZpb3VzSW5jb21pbmdDYWxsTm90aWZpY2F0aW9uPy5wYXJhbWV0ZXJzPy5BY2NvdW50U2lkICE9IGNhbGw/LnBhcmFtZXRlcnM/LkFjY291bnRTaWQgJiYgdGhpcy5wcmV2aW91c0luY29taW5nQ2FsbE5vdGlmaWNhdGlvbj8ucGFyYW1ldGVycz8uQ2FsbFNpZCAhPSBjYWxsPy5wYXJhbWV0ZXJzPy5DYWxsU2lkKXtcclxuICAgICAgICB0aGlzLmluY29taW5nQ2FsbE5vdGlmaWNhdGlvbi5uZXh0KG5vdGlmaWNhdGlvbik7XHJcbiAgICAgICAgdGhpcy5wcmV2aW91c0luY29taW5nQ2FsbE5vdGlmaWNhdGlvbiA9IGNhbGw7XHJcbiAgICAgIH1cclxuICAgICAgY29uc29sZS5sb2coJ3NwYXJlIGRldmljZTogaW5jb21pbmcgY2FsbCcsIGNhbGwpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgc3BhcmUub24oJ2Vycm9yJywgKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgY29uc29sZS5lcnJvcignU3BhcmUgZGV2aWNlIGVycm9yOicsIGVycm9yKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHNwYXJlLnJlZ2lzdGVyKCk7XHJcbiAgICB0aGlzLnNwYXJlRGV2aWNlID0gc3BhcmU7XHJcbiAgICBjb25zb2xlLmxvZygnc3BhcmUgZGV2aWNlIGNyZWF0ZWQgYW5kIHJlZ2lzdGVyaW5nJyk7XHJcbiAgfVxyXG5cclxuICBvbkNvbmN1cnJlbnRDYWxsQWNjZXB0ZWQoYWNjZXB0ZWRDYWxsOiBhbnkpIHtcclxuICAgIGNvbnN0IHNpZCA9IGFjY2VwdGVkQ2FsbD8ucGFyYW1ldGVycz8uWydDYWxsU2lkJ107XHJcbiAgICBpZiAoc2lkKSB7XHJcbiAgICAgIC8vIFByaW1hcnkgcGF0aDogdGhlIGFjY2VwdGVkIGNhbGwgd2FzIGhlbGQgYnkgYSBwZW5kaW5nIHNwYXJlIGRldmljZS5cclxuICAgICAgY29uc3QgZGV2ID0gdGhpcy5wZW5kaW5nSW5jb21pbmdEZXZpY2VzLmdldChzaWQpO1xyXG4gICAgICBpZiAoZGV2KSB7XHJcbiAgICAgICAgZGV2Ll9vd25zQWNjZXB0ZWRDYWxsID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmV4dHJhRGV2aWNlcy5zZXQoc2lkLCBkZXYpO1xyXG4gICAgICAgIHRoaXMucGVuZGluZ0luY29taW5nRGV2aWNlcy5kZWxldGUoc2lkKTtcclxuICAgICAgfVxyXG4gICAgICAvLyBMZWdhY3kgZmFsbGJhY2s6IG9sZCBzaW5nbGUtc3BhcmUgcGF0aCAoc3BhcmUgc3RpbGwgaG9sZHMgdGhlIGNhbGwpLlxyXG4gICAgICBlbHNlIGlmICh0aGlzLnNwYXJlRGV2aWNlICYmIHRoaXMuc3BhcmVEZXZpY2UuX3BlbmRpbmdJbmNvbWluZ0NhbGwgPT09IGFjY2VwdGVkQ2FsbCkge1xyXG4gICAgICAgIHRoaXMuc3BhcmVEZXZpY2UuX293bnNBY2NlcHRlZENhbGwgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZXh0cmFEZXZpY2VzLnNldChzaWQsIHRoaXMuc3BhcmVEZXZpY2UpO1xyXG4gICAgICAgIHRoaXMuc3BhcmVEZXZpY2UgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuc3BhcmVEZXZpY2VSZWFkeSA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBFbnN1cmUgYSBmcmVlIHNwYXJlIGlzIGFsd2F5cyByZWFkeSBmb3IgdGhlIG5leHQgY29uY3VycmVudCBjYWxsLlxyXG4gICAgdGhpcy5wcmVwYXJlRGV2aWNlMkZvckluY29taW5nQ2FsbCgpO1xyXG4gIH1cclxuXHJcbiAgcmVsZWFzZUNvbmN1cnJlbnRDYWxsRGV2aWNlKGNhbGxTaWQ6IHN0cmluZykge1xyXG4gICAgY29uc3QgZGV2ID0gdGhpcy5leHRyYURldmljZXMuZ2V0KGNhbGxTaWQpO1xyXG4gICAgaWYgKGRldikge1xyXG4gICAgICB0cnkgeyBkZXYuZGVzdHJveSgpOyB9IGNhdGNoIChfKSB7fVxyXG4gICAgICB0aGlzLmV4dHJhRGV2aWNlcy5kZWxldGUoY2FsbFNpZCk7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdyZWxlYXNlZCBjb25jdXJyZW50LWNhbGwgZGV2aWNlIGZvcicsIGNhbGxTaWQpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAvLyBBbHNvIHJlbGVhc2UgcGVuZGluZyBkZXZpY2VzIHRoYXQgd2VyZSBjYW5jZWxsZWQgYmVmb3JlIGFjY2VwdGFuY2UuXHJcbiAgICBjb25zdCBwZW5kaW5nRGV2ID0gdGhpcy5wZW5kaW5nSW5jb21pbmdEZXZpY2VzLmdldChjYWxsU2lkKTtcclxuICAgIGlmIChwZW5kaW5nRGV2KSB7XHJcbiAgICAgIHRyeSB7IHBlbmRpbmdEZXYuZGVzdHJveSgpOyB9IGNhdGNoIChfKSB7fVxyXG4gICAgICB0aGlzLnBlbmRpbmdJbmNvbWluZ0RldmljZXMuZGVsZXRlKGNhbGxTaWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gV2hlbiBubyBhY2NlcHRlZCBjYWxscyByZW1haW4sIHRlYXIgZG93biBhbGwgc3BhcmUvcGVuZGluZy9leHRyYSBkZXZpY2VzIHNvXHJcbiAgLy8gdGhlIHByaW1hcnkgZGV2aWNlIGNsZWFubHkgaGFuZGxlcyB0aGUgbmV4dCBmcmVzaCBpbmNvbWluZyBjYWxsLlxyXG4gIHRlYXJkb3duU3BhcmVEZXZpY2VzSWZJZGxlKCkge1xyXG4gICAgaWYgKHRoaXMuYWNjZXB0ZWRDYWxsTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuZXh0cmFEZXZpY2VzLmZvckVhY2goKGQpID0+IHsgdHJ5IHsgZC5kZXN0cm95KCk7IH0gY2F0Y2ggKF8pIHt9IH0pO1xyXG4gICAgdGhpcy5leHRyYURldmljZXMuY2xlYXIoKTtcclxuICAgIHRoaXMucGVuZGluZ0luY29taW5nRGV2aWNlcy5mb3JFYWNoKChkKSA9PiB7IHRyeSB7IGQuZGVzdHJveSgpOyB9IGNhdGNoIChfKSB7fSB9KTtcclxuICAgIHRoaXMucGVuZGluZ0luY29taW5nRGV2aWNlcy5jbGVhcigpO1xyXG4gICAgaWYgKHRoaXMuc3BhcmVEZXZpY2UpIHtcclxuICAgICAgdHJ5IHsgdGhpcy5zcGFyZURldmljZS5kZXN0cm95KCk7IH0gY2F0Y2ggKF8pIHt9XHJcbiAgICAgIHRoaXMuc3BhcmVEZXZpY2UgPSBudWxsO1xyXG4gICAgICB0aGlzLnNwYXJlRGV2aWNlUmVhZHkgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIHRoaXMucHJpbWFyeUhhc0NhbGwgPSBmYWxzZTtcclxuICAgIGNvbnNvbGUubG9nKCdzcGFyZS9leHRyYSBkZXZpY2VzIHRvcm4gZG93biAoaWRsZSknKTtcclxuICB9XHJcblxyXG4gIC8vIEJhY2t3YXJkcy1jb21wYXRpYmxlIGFsaWFzIGtlcHQgZm9yIGV4aXN0aW5nIGNhbGwgc2l0ZXMuXHJcbiAgZGVzdHJveURldmljZTIoKSB7XHJcbiAgICB0aGlzLnRlYXJkb3duU3BhcmVEZXZpY2VzSWZJZGxlKCk7XHJcbiAgfVxyXG5cclxuICAvLyBVc2VyLWNvbnRyb2xsZWQgc3dpdGNoIChpbiB0aGUgY2FsbC1wcm9ncmVzcyBVSSkuIFdoZW4gT04sIGEgbmV3IGluY29taW5nXHJcbiAgLy8gY2FsbCdzIGJ1aWx0LWluIFR3aWxpbyByaW5ndG9uZSBpcyBzaWxlbmNlZCBzbyBpdCBkb2VzIG5vdCBkaXN0dXJiIHRoZVxyXG4gIC8vIG9uZ29pbmcgY2FsbC4gU291cmNlIG9mIHRydXRoIHNvIG5ld2x5IGNyZWF0ZWQgKHNwYXJlKSBkZXZpY2VzIGluaGVyaXQgaXQuXHJcbiAgaXNJbmNvbWluZ011dGVkID0gZmFsc2U7XHJcblxyXG4gIC8vIEFwcGx5IHRoZSBjdXJyZW50IG11dGUgcHJlZmVyZW5jZSB0byBldmVyeSBsaXZlIERldmljZSAocHJpbWFyeSArIHNwYXJlICtcclxuICAvLyBhbnkgY29uY3VycmVudC1jYWxsIGRldmljZXMpIHZpYSBUd2lsaW8ncyBvd24gZGV2aWNlLmF1ZGlvLmluY29taW5nKCkuXHJcbiAgYXBwbHlJbmNvbWluZ011dGUoKSB7XHJcbiAgICBjb25zdCBlbmFibGVkID0gIXRoaXMuaXNJbmNvbWluZ011dGVkOyAvLyByaW5ndG9uZSBlbmFibGVkID0gTk9UIG11dGVkXHJcbiAgICBjb25zdCBhcHBseSA9IChkZXY6IGFueSkgPT4ge1xyXG4gICAgICB0cnkgeyBkZXY/LmF1ZGlvPy5pbmNvbWluZz8uKGVuYWJsZWQpOyB9IGNhdGNoIChfKSB7fVxyXG4gICAgfTtcclxuICAgIGFwcGx5KHRoaXMuZGV2aWNlKTtcclxuICAgIGFwcGx5KHRoaXMuc3BhcmVEZXZpY2UpO1xyXG4gICAgdGhpcy5leHRyYURldmljZXMuZm9yRWFjaChhcHBseSk7XHJcbiAgICB0aGlzLnBlbmRpbmdJbmNvbWluZ0RldmljZXMuZm9yRWFjaChhcHBseSk7XHJcbiAgfVxyXG5cclxuICAvLyBUb2dnbGUvc2V0IHRoZSBtdXRlIHN3aXRjaCBhbmQgaW1tZWRpYXRlbHkgYXBwbHkgaXQuXHJcbiAgc2V0SW5jb21pbmdNdXRlZChtdXRlZDogYm9vbGVhbikge1xyXG4gICAgdGhpcy5pc0luY29taW5nTXV0ZWQgPSBtdXRlZDtcclxuICAgIHRoaXMuYXBwbHlJbmNvbWluZ011dGUoKTtcclxuICAgIGlmIChtdXRlZCkge1xyXG4gICAgICAvLyBkZXZpY2UuYXVkaW8uaW5jb21pbmcoZmFsc2UpIG9ubHkgcHJldmVudHMgZnV0dXJlIHJpbmdzIOKAlCBpdCBkb2VzIE5PVCBzdG9wXHJcbiAgICAgIC8vIGEgY2FsbCB0aGF0IGlzIGFscmVhZHkgcmluZ2luZy4gU3RvcCB0aGUgYWN0aXZlIHJpbmcgZGlyZWN0bHkgdmlhIHNvdW5kY2FjaGUuXHJcbiAgICAgIGNvbnN0IHN0b3BSaW5nID0gKGRldjogYW55KSA9PiB7XHJcbiAgICAgICAgdHJ5IHsgZGV2Py5fc291bmRjYWNoZT8uZ2V0Py4oJ2luY29taW5nJyk/LnN0b3A/LigpOyB9IGNhdGNoIChfKSB7fVxyXG4gICAgICB9O1xyXG4gICAgICBzdG9wUmluZyh0aGlzLmRldmljZSk7XHJcbiAgICAgIHN0b3BSaW5nKHRoaXMuc3BhcmVEZXZpY2UpO1xyXG4gICAgICB0aGlzLmV4dHJhRGV2aWNlcy5mb3JFYWNoKChkZXY6IGFueSkgPT4gc3RvcFJpbmcoZGV2KSk7XHJcbiAgICAgIHRoaXMucGVuZGluZ0luY29taW5nRGV2aWNlcy5mb3JFYWNoKChkZXY6IGFueSkgPT4gc3RvcFJpbmcoZGV2KSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGRJbmNvbWluZ1BhcnRpY2lwYW50KHBhcnRpY2lwYW50SWQ6IHN0cmluZywgY29uZmVyZW5jZUlkOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGh0dHBPcHRpb25zID0ge1xyXG4gICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLCAnQXV0aC1LZXknOiBcIkJlYXJlciBcIiArIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdleHRfdG9rZW4nKX0pLFxyXG4gICAgfTtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFtdPihgJHtlbnZpcm9ubWVudC5hcGlVcmx9L3V0aWxpdGllcy9leHQvYWRkL2luY29taW5nL3BhcnRpY2lwYW50LyR7cGFydGljaXBhbnRJZH0vJHtjb25mZXJlbmNlSWR9YCxodHRwT3B0aW9ucyk7XHJcbiAgfSBcclxuICBjb25uZWN0KGRhdGE/OiBhbnkpe1xyXG4gICAgaWYgKHRoaXMuZGV2aWNlLl9hY3RpdmVDYWxsKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCcyNDQtdGVzdCcpXHJcbiAgICAgIHRoaXMuZGV2aWNlLmRpc2Nvbm5lY3RBbGwoKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmRldmljZS5jb25uZWN0KHtcclxuICAgICAgcGFyYW1zOiB7XHJcbiAgICAgICAgVG9rZW46IHRoaXMuY29uZmVyZW5jZUNhbGxJbmZvPy5jb25mZXJlbmNlSWQgfHwgZGF0YS5jb25mZXJlbmNlSWQsXHJcbiAgICAgICAgQ29uZmVyZW5jZU5hbWU6IHRoaXMuY29uZmVyZW5jZUNhbGxJbmZvPy5jb25mZXJlbmNlTmFtZSB8fCBkYXRhLmNvbmZlcmVuY2VOYW1lXHJcbiAgICAgIH0sXHJcbiAgICAgIHJ0Y0NvbnN0cmFpbnRzOiB7IGF1ZGlvOiB7IGRldmljZUlkOiAnZGVmYXVsdCcgfSB9LFxyXG4gICAgfSlcclxuICB9XHJcbn1cclxuIl19
|
|
635
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHdpbGlvLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kaWFsYm94L3NyYy9saWIvc2VydmljZS90d2lsaW8uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzNFLE9BQU8sRUFBRSxVQUFVLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDdEQsT0FBTyxFQUFFLGVBQWUsRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1RSxPQUFPLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsTUFBTSxFQUFRLE1BQU0sbUJBQW1CLENBQUM7QUFFakQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDhCQUE4QixDQUFDOzs7O0FBYzNELE1BQU0sT0FBTyxhQUFhO0lBdUR4QixZQUNVLElBQWdCLEVBQ2hCLGdCQUFrQztRQURsQyxTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUF2RDVDLDBCQUFxQixHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQzVELGdCQUFXLEdBQUcsSUFBSSxlQUFlLENBQWMsSUFBSSxDQUFDLENBQUM7UUFDckQscUJBQWdCLEdBQUcsSUFBSSxlQUFlLENBQU0sTUFBTSxDQUFDLENBQUMsQ0FBQyxpQ0FBaUM7UUFHdEYsc0JBQWlCLEdBQVEsRUFBRSxDQUFDO1FBRTVCLGFBQVEsR0FBRyxJQUFJLGVBQWUsQ0FBUyxLQUFLLENBQUMsQ0FBQztRQUU5QyxVQUFLLEdBQU8sWUFBWSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM5QyxzQkFBaUIsR0FBRyxJQUFJLGVBQWUsQ0FBVSxL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LE9BQU8sQ0FBQyxJQUFVO1FBQ2hCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUU7WUFDM0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQTtZQUN2QixJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDO1NBQzdCO1FBQ0QsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztZQUN6QixNQUFNLEVBQUU7Z0JBQ04sS0FBSyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxZQUFZLElBQUksSUFBSSxDQUFDLFlBQVk7Z0JBQ2pFLGNBQWMsRUFBRSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsY0FBYyxJQUFJLElBQUksQ0FBQyxjQUFjO2FBQy9FO1lBQ0QsY0FBYyxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxFQUFFO1NBQ25ELENBQUMsQ0FBQTtJQUNKLENBQUM7OzJHQXhvQlUsYUFBYTsrR0FBYixhQUFhLGNBRlosTUFBTTs0RkFFUCxhQUFhO2tCQUh6QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzLCBIdHRwUGFyYW1zIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBjYXRjaEVycm9yLCBzaGFyZVJlcGxheSwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBEZXZpY2UsIENhbGwgfSBmcm9tICdAdHdpbGlvL3ZvaWNlLXNkayc7XHJcbmltcG9ydCB7IEV4dGVuc2lvblNlcnZpY2UgfSBmcm9tICcuL2V4dGVuc2lvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgZW52aXJvbm1lbnQgfSBmcm9tICcuLi9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnRzJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRGlhbFBheWxvYWQge1xyXG4gIG51bWJlcjogc3RyaW5nO1xyXG4gIG5hbWU6IHN0cmluZztcclxuICBpbWc6IHN0cmluZztcclxuICBjYWxsZXJJZDpzdHJpbmc7XHJcbiAgaXNEaWFsRnJvbUhpc3Rvcnk6Ym9vbGVhbjtcclxuICBmcm9tOnN0cmluZztcclxufVxyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyAgXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUd2lsaW9TZXJ2aWNlIHtcclxuICBcclxuICBvcGVuSW5Qcm9ncmVzc0RpYWxwYWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBjdXJyZW50Q2FsbCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q2FsbCB8IG51bGw+KG51bGwpO1xyXG4gIGN1cnJlbnRDYWxsU3RhdGUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4oJ25vbmUnKTsgLy9pbi1wcm9ncmVzcywgb3V0LXByb2dyZXNzLCBub25lXHJcbiAgZGV2aWNlOmFueTtcclxuICBjYWxsITogQ2FsbDtcclxuICBpbmNvbWluZ0NhbGxUb2tlbjpzdHJpbmc9Jyc7XHJcbiAgb3V0Z29pbmdDYWxsVG9rZW4/OnN0cmluZztcclxuICBjYWxsVHlwZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignTklMJyk7XHJcbiAgaW5jb21pbmdDYWxsRGV0YWlsOiBhbnk7IC8vIGZvciBib3RoIGluY29taW5nIGFuZCBvdXRnb2luZ1xyXG4gIHRva2VuOmFueSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdleHRfdG9rZW4nKTtcclxuICBpc05ld0NvbnRhY3RBZGRlZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIHVwZGF0ZVJlY2VudENhbGwgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBjYWxsaGFuZGxlRnJvbU5vdGlmaWNhdGlvbiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55Pih7fSk7XHJcblxyXG4gIGVuZENhbGwgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBkaWFsTnVtYmVyRnJvbU90aGVyTW9kdWxlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxEaWFsUGF5bG9hZD4oeyBudW1iZXI6ICcnLCBuYW1lOiAnJywgaW1nOiAnJywgY2FsbGVySWQ6ICcnLCBpc0RpYWxGcm9tSGlzdG9yeTogZmFsc2UsIGZyb206ICcnIH0pO1xyXG5cclxuICB0b2dnbGVDYWxsZXJJZEFsZXJ0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcclxuICBpc1RyaWFsT3ZlciA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIGlzUGF5bWVudER1ZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIGlzQXZhaWxhYmxlTnVtYmVyID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgY2FsbGVySWRMaXN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnlbXT4oW10pO1xyXG4gIHRyaWdnZXJTTVNSZWxvYWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBpc0Nvbm5lY3RpbmdJbmNvbWluZ0NhbGxJZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignJyk7XHJcblxyXG4gIHRva2VuSW5pdGlhbGl6ZWQgPSBmYWxzZTtcclxuICBwcml2YXRlIHRva2VuSW5pdGlhbGl6YXRpb24kOiBPYnNlcnZhYmxlPGFueT4gfCBudWxsID0gbnVsbDtcclxuICBkZXZpY2VJZDogYW55O1xyXG4gIGNvbmZlcmVuY2VDYWxsSW5mbzogYW55O1xyXG4gIGlzU2hvd0luY29taW5nQ2FsbDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvLyBDUklUSUNBTDogVHJhY2sgYWxsIGFjY2VwdGVkIENhbGwgb2JqZWN0cyAobWlycm9ycyBpT1MgYWNjZXB0ZWRDYWxsTGlzdClcclxuICAvLyBVc2VkIHRvIGd1YXJkIGRldmljZSByZS1pbml0aWFsaXphdGlvbiBzbyBhY3RpdmUgY2FsbHMgYXJlIG5ldmVyIHRvcm4gZG93blxyXG4gIGFjY2VwdGVkQ2FsbExpc3Q6IENhbGxbXSA9IFtdO1xyXG5cclxuICBwcml2YXRlIHByaW1hcnlIYXNDYWxsID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBzcGFyZURldmljZTogYW55ID0gbnVsbDtcclxuICBzcGFyZURldmljZVJlYWR5ID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBwZW5kaW5nSW5jb21pbmdEZXZpY2VzID0gbmV3IE1hcDxzdHJpbmcsIGFueT4oKTtcclxuICBwcml2YXRlIGV4dHJhRGV2aWNlcyA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XHJcbiAgaW5jb21pbmdDYWxsc01hcCA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XHJcblxyXG4gIHByaXZhdGUgdG9rZW5SZWZyZXNoSW5Qcm9ncmVzcyA9IGZhbHNlO1xyXG4gIHByaXZhdGUgcmVjb3ZlcnlBdHRlbXB0cyA9IDA7XHJcbiAgcHJpdmF0ZSByZWNvdmVyeVRpbWVyOiBhbnkgPSBudWxsO1xyXG4gIC8vIFJlZmVyZW5jZXMgdG8gdGhlICd1bnJlZ2lzdGVyZWQnLydlcnJvcicgaGFuZGxlcnMgY3VycmVudGx5IGF0dGFjaGVkIHRvIGB0aGlzLmRldmljZWAsXHJcbiAgLy8gc28gYW4gaW50ZW50aW9uYWwgcmVwbGFjZSBjYW4gZGV0YWNoIGV4YWN0bHkgdGhvc2UgdHdvIGJlZm9yZSBkZXN0cm95KCkgd2l0aG91dFxyXG4gIC8vIHRvdWNoaW5nIGFueSBsaXN0ZW5lcnMgdGhlIFR3aWxpbyBTREsgaXRzZWxmIG1heSBoYXZlIHdpcmVkIHRvIHRoZSBzYW1lIEV2ZW50RW1pdHRlci5cclxuICBwcml2YXRlIGN1cnJlbnREZXZpY2VVbnJlZ2lzdGVyZWRIYW5kbGVyOiBhbnkgPSBudWxsO1xyXG4gIHByaXZhdGUgY3VycmVudERldmljZUVycm9ySGFuZGxlcjogYW55ID0gbnVsbDtcclxuICBpbmNvbWluZ0NhbGxOb3RpZmljYXRpb249IG5ldyBTdWJqZWN0PGFueT4oKTtcclxuICBwcmV2aW91c0luY29taW5nQ2FsbE5vdGlmaWNhdGlvbjogYW55O1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcclxuICAgIHByaXZhdGUgZXh0ZW5zaW9uU2VydmljZTogRXh0ZW5zaW9uU2VydmljZSxcclxuICApIHtcclxuICAgIHRoaXMuaW5pdGlhbGl6ZVRva2VuKCk7XHJcbiAgICAvLyBTYWZldHkgbmV0IGZvciBsb25nIGlkbGUvc2xlZXAgcGVyaW9kczogdGhlIHNpZ25hbGluZyBzb2NrZXQgY2FuIGRpZSBzaWxlbnRseVxyXG4gICAgLy8gKE9TIHN1c3BlbmRzIHRpbWVycywgdGFiIGlzIGJhY2tncm91bmRlZCkgd2l0aG91dCBldmVyIGZpcmluZyAnZXJyb3InLyd1bnJlZ2lzdGVyZWQnLlxyXG4gICAgLy8gUmUtY2hlY2sgZGV2aWNlIGhlYWx0aCB3aGVuZXZlciB0aGUgYXBwIGJlY29tZXMgYWN0aXZlL29ubGluZSBhZ2Fpbi5cclxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCAoKSA9PiB7XHJcbiAgICAgIGlmIChkb2N1bWVudC52aXNpYmlsaXR5U3RhdGUgPT09ICd2aXNpYmxlJykge1xyXG4gICAgICAgIHRoaXMuZW5zdXJlRGV2aWNlSGVhbHRoeSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdvbmxpbmUnLCAoKSA9PiB0aGlzLmVuc3VyZURldmljZUhlYWx0aHkoKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXRpYWxpemVUb2tlbigpIHtcclxuICAgIGlmICh0aGlzLnRva2VuSW5pdGlhbGl6ZWQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMudG9rZW5Jbml0aWFsaXphdGlvbiQgfHwgb2YobnVsbCk7XHJcbiAgICB9XHJcbiAgICAvLyBBIGZldGNoIGlzIGFscmVhZHkgaW4gZmxpZ2h0IOKAlCBBcHBJbml0aWFsaXplclNlcnZpY2UgYW5kIHRoZSBkaWFsYm94IGNvbXBvbmVudFxyXG4gICAgLy8gYm90aCBjYWxsIGluaXRpYWxpemVUd2lsaW9EZXZpY2UoKSBvbiBzdGFydHVwLCBhbmQgd2l0aG91dCB0aGlzIHRoZXknZCByYWNlOlxyXG4gICAgLy8gdGhlIHNlY29uZCBjYWxsIHdvdWxkIGZpcmUgaXRzIG93biB0b2tlbiByZXF1ZXN0IGFuZCwgb25jZSByZXNvbHZlZCwgY2FsbFxyXG4gICAgLy8gaW5pdGlhbGl6ZURldmljZSgpIGFnYWluLCBkZXN0cm95aW5nIHRoZSBkZXZpY2UgdGhlIGZpcnN0IGNhbGwganVzdCBjcmVhdGVkIGFuZFxyXG4gICAgLy8gdG91Y2hpbmcgb2ZmIGEgc3B1cmlvdXMgJ3VucmVnaXN0ZXJlZCcgLT4gcmVjb3ZlcnkgY2FzY2FkZS4gU2hhcmUgdGhlIHNhbWVcclxuICAgIC8vIGluLWZsaWdodCByZXF1ZXN0IGluc3RlYWQuXHJcbiAgICBpZiAodGhpcy50b2tlbkluaXRpYWxpemF0aW9uJCkge1xyXG4gICAgICByZXR1cm4gdGhpcy50b2tlbkluaXRpYWxpemF0aW9uJDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnRva2VuSW5pdGlhbGl6YXRpb24kID0gdGhpcy5leHRlbnNpb25TZXJ2aWNlLmdldEluY29taW5nQ2FsbFRva2VuKHRoaXMuZGV2aWNlSWQgfHwgbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2RldmljZUlkJykpLnBpcGUoXHJcbiAgICAgIHRhcCgoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5pbmNvbWluZ0NhbGxUb2tlbiA9IGRhdGEudG9rZW47XHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2luLXRva2VuJywgZGF0YS50b2tlbik7XHJcbiAgICAgICAgdGhpcy50b2tlbkluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmluaXRpYWxpemVEZXZpY2UoKTtcclxuICAgICAgfSksXHJcbiAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluaXRpYWxpemluZyBUd2lsaW8gdG9rZW46JywgZXJyb3IpO1xyXG4gICAgICAgIC8vIEFsbG93IGEgZnJlc2ggYXR0ZW1wdCBuZXh0IHRpbWUgc2luY2UgdGhpcyBvbmUgZmFpbGVkLlxyXG4gICAgICAgIHRoaXMudG9rZW5Jbml0aWFsaXphdGlvbiQgPSBudWxsO1xyXG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycm9yKTtcclxuICAgICAgfSksXHJcbiAgICAgIHNoYXJlUmVwbGF5KDEpIC8vIENhY2hlIHRoZSByZXN1bHQgZm9yIHN1YnNlcXVlbnQgc3Vic2NyaWJlcnNcclxuICAgICk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMudG9rZW5Jbml0aWFsaXphdGlvbiQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaW5pdGlhbGl6ZVR3aWxpb0RldmljZShkZXZpY2VJZDogYW55KSB7XHJcbiAgICB0aGlzLmRldmljZUlkID0gZGV2aWNlSWQ7XHJcbiAgICBpZiAodGhpcy50b2tlbkluaXRpYWxpemVkICYmIHRoaXMuaW5jb21pbmdDYWxsVG9rZW4pIHtcclxuICAgICAgdGhpcy5pbml0aWFsaXplRGV2aWNlKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmluaXRpYWxpemVUb2tlbigpLnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0aWFsaXplRGV2aWNlKCkge1xyXG4gICAgaWYgKHRoaXMuZGV2aWNlKSB7XHJcbiAgICAgIGlmICh0aGlzLmFjY2VwdGVkQ2FsbExpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGNvbnNvbGUud2FybignU2tpcHBpbmcgZGV2aWNlIHJlLWluaXQ6IGFjdGl2ZSBhY2NlcHRlZCBjYWxscyBleGlzdDonLCB0aGlzLmFjY2VwdGVkQ2FsbExpc3QubGVuZ3RoKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgLy8gRGV0YWNoIHRoZSAndW5yZWdpc3RlcmVkJy8nZXJyb3InIGhhbmRsZXJzIHdlIGF0dGFjaGVkIGJlZm9yZSBkZXN0cm95aW5nLCBzb1xyXG4gICAgICAvLyB0aGlzICppbnRlbnRpb25hbCogdGVhcmRvd24gY2FuJ3QgZmlyZSB0aGVtIGJlbG93IOKAlCBvdGhlcndpc2UgYSBkZWxpYmVyYXRlXHJcbiAgICAgIC8vIHJlcGxhY2UgbG9va3MgaWRlbnRpY2FsIHRvIGFuIHVuZXhwZWN0ZWQgZHJvcCBhbmQgdG91Y2hlcyBvZmYgYVxyXG4gICAgICAvLyBkZXN0cm95IC0+ICd1bnJlZ2lzdGVyZWQnIC0+IHNjaGVkdWxlRGV2aWNlUmVjb3ZlcnkgLT4gZGVzdHJveSBjYXNjYWRlLlxyXG4gICAgICAvLyAoT25seSByZW1vdmVzIG91ciBvd24gaGFuZGxlcnMsIG5vdCBhbnl0aGluZyB0aGUgVHdpbGlvIFNESyBpdHNlbGYgbWF5IGhhdmVcclxuICAgICAgLy8gd2lyZWQgdG8gdGhlIHNhbWUgRXZlbnRFbWl0dGVyLCBzbyBpdHMgb3duIGRlc3Ryb3koKS9jbGVhbnVwIGlzIHVuYWZmZWN0ZWQuKVxyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnREZXZpY2VVbnJlZ2lzdGVyZWRIYW5kbGVyKSB7XHJcbiAgICAgICAgICB0aGlzLmRldmljZS5yZW1vdmVMaXN0ZW5lcigndW5yZWdpc3RlcmVkJywgdGhpcy5jdXJyZW50RGV2aWNlVW5yZWdpc3RlcmVkSGFuZGxlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnREZXZpY2VFcnJvckhhbmRsZXIpIHtcclxuICAgICAgICAgIHRoaXMuZGV2aWNlLnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIHRoaXMuY3VycmVudERldmljZUVycm9ySGFuZGxlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGNhdGNoIChfKSB7fVxyXG4gICAgICBjb25zb2xlLmxvZygnMTUzIGNhbGwgZW5kJylcclxuICAgICAgdGhpcy5kZXZpY2UuZGVzdHJveSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5pbmNvbWluZ0NhbGxUb2tlbikge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdObyBUd2lsaW8gdG9rZW4gYXZhaWxhYmxlJyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBkZXZpY2U6IGFueSA9IG5ldyBEZXZpY2UodGhpcy5pbmNvbWluZ0NhbGxUb2tlbiwgeyBhbGxvd0luY29taW5nV2hpbGVCdXN5OiB0cnVlIH0pO1xyXG4gICAgdGhpcy5kZXZpY2UgPSBkZXZpY2U7XHJcblxyXG4gICAgZGV2aWNlLm9uKCdyZWdpc3RlcmVkJywgKCkgPT4ge1xyXG4gICAgICBjb25zb2xlLmxvZygnVHdpbGlvIERldmljZSByZWdpc3RlcmVkIHN1Y2Nlc3NmdWxseScpO1xyXG4gICAgICB0aGlzLnJlY292ZXJ5QXR0ZW1wdHMgPSAxMDtcclxuICAgICAgLy8gQSByZWNvdmVyeSBhdHRlbXB0IG1heSBoYXZlIGJlZW4gc2NoZWR1bGVkIGJ5IGFuIGVhcmxpZXIgZGV2aWNlIGluc3RhbmNlXHJcbiAgICAgIC8vIGJlZm9yZSB0aGlzIG9uZSBjYW1lIHVwIOKAlCBpdCdzIHN0YWxlIG5vdywgY2FuY2VsIGl0IHNvIGl0IGNhbid0IHRlYXIgdGhpc1xyXG4gICAgICAvLyBoZWFsdGh5IGRldmljZSBkb3duIGxhdGVyLlxyXG4gICAgICBpZiAodGhpcy5yZWNvdmVyeVRpbWVyKSB7XHJcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMucmVjb3ZlcnlUaW1lcik7XHJcbiAgICAgICAgdGhpcy5yZWNvdmVyeVRpbWVyID0gbnVsbDtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnByZXBhcmVEZXZpY2UyRm9ySW5jb21pbmdDYWxsKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBUd2lsaW8gZmlyZXMgdGhpcyB+MyBtaW51dGVzIGJlZm9yZSB0aGUgYWNjZXNzIHRva2VuIGV4cGlyZXMuIFN3YXAgaW4gYVxyXG4gICAgLy8gZnJlc2ggb25lIHZpYSB1cGRhdGVUb2tlbigpIHNvIHRoZSBzaWduYWxpbmcgY29ubmVjdGlvbiBuZXZlciBoYXMgdG8gZHJvcFxyXG4gICAgLy8gaW4gdGhlIGZpcnN0IHBsYWNlICh0aGlzIGlzIHRoZSBtYWluIGNhdXNlIG9mIFwiaWRsZSBmb3IgYSB3aGlsZSwgQkUgc3RpbGxcclxuICAgIC8vIG5vdGlmaWVzIGJ1dCBUd2lsaW8gaW5jb21pbmcgZXZlbnQgbmV2ZXIgZmlyZXNcIikuXHJcbiAgICBkZXZpY2Uub24oJ3Rva2VuV2lsbEV4cGlyZScsICgpID0+IHtcclxuICAgICAgdGhpcy5yZWZyZXNoRGV2aWNlVG9rZW4oKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGRldmljZS5vbignaW5jb21pbmcnLCAoY2FsbDogQ2FsbCB8IGFueSkgPT4ge1xyXG4gICAgICBjb25zb2xlLmxvZygnVHdpbGlvIERldmljZSBpbmNvbWluZyBjYWxsIGV2ZW50OicsIGNhbGwpO1xyXG4gICAgICBjb25zdCBub3RpZmljYXRpb24gPSB0aGlzLmJ1aWxkSW5jb21pbmdOb3RpZmljYXRpb24oY2FsbCk7XHJcbiAgICAgICAgdGhpcy5pbmNvbWluZ0NhbGxOb3RpZmljYXRpb24ubmV4dChub3RpZmljYXRpb24pO1xyXG4gICAgICBpZiAodGhpcy5hY2NlcHRlZENhbGxMaXN0Lmxlbmd0aCA+IDAgfHwgdGhpcy5wcmltYXJ5SGFzQ2FsbCkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdwcmltYXJ5IGRldmljZTogY29uY3VycmVudCBjYWxsIGFycml2aW5nIOKAkyBzcGFyZSBkZXZpY2Ugd2lsbCBoYW5kbGUgaXQnKTtcclxuICAgICAgICB0aGlzLmlzU2hvd0luY29taW5nQ2FsbCA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucHJpbWFyeUhhc0NhbGwgPSB0cnVlO1xyXG4gICAgICAvLyBBcm0gYSBzcGFyZSBkZXZpY2UgcmlnaHQgbm93IChiZWZvcmUgdGhlIHVzZXIgZXZlbiBhY2NlcHRzKSBzbyBpdCBjYW5cclxuICAgICAgLy8gcmVnaXN0ZXIgaW4gdGltZSBmb3IgYW55IGNhbGwgdGhhdCBhcnJpdmVzIHNlY29uZHMgbGF0ZXIuXHJcbiAgICAgIHRoaXMucHJlcGFyZURldmljZTJGb3JJbmNvbWluZ0NhbGwoKTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmlzSW5jb21pbmdNdXRlZCkge1xyXG4gICAgICAgIHRyeSB7IGRldmljZS5hdWRpbz8uaW5jb21pbmcoZmFsc2UpOyB9IGNhdGNoIChfKSB7fVxyXG4gICAgICB9XHJcbiAgICAgIGNhbGwub24oJ2FjY2VwdCcsICgpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZygnSW5jb21pbmcgY2FsbCBhbnN3ZXJlZC9hY2NlcHRlZCcpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGNhbGwub24oJ2Rpc2Nvbm5lY3QnLCAoKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ0NhbGwgZGlzY29ubmVjdGVkJyk7XHJcbiAgICAgICAgdGhpcy5wcmltYXJ5SGFzQ2FsbCA9IGZhbHNlO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGNhbGwub24oJ2NhbmNlbCcsICgpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZygnQ2FsbGVyIGh1bmcgdXAgYmVmb3JlIGFuc3dlcicpO1xyXG4gICAgICAgIHRoaXMucHJpbWFyeUhhc0NhbGwgPSBmYWxzZTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBjYWxsLm9uKCdyZWplY3QnLCAoKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ0NhbGwgcmVqZWN0ZWQnKTtcclxuICAgICAgICB0aGlzLnByaW1hcnlIYXNDYWxsID0gZmFsc2U7XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnRyYWNrSW5jb21pbmdDYWxsKGNhbGwpO1xyXG4gICAgICB0aGlzLmluY29taW5nQ2FsbERldGFpbCA9IGNhbGw7XHJcbiAgICAgIHRoaXMuaXNTaG93SW5jb21pbmdDYWxsID0gdHJ1ZTtcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IG9uRGV2aWNlRXJyb3IgPSAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAvLyBTdGFsZSBldmVudCBmcm9tIGEgZGV2aWNlIHdlJ3ZlIGFscmVhZHkgaW50ZW50aW9uYWxseSByZXBsYWNlZCDigJQgaWdub3JlLlxyXG4gICAgICBpZiAodGhpcy5kZXZpY2UgIT09IGRldmljZSkgcmV0dXJuO1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUd2lsaW8gRGV2aWNlIEVycm9yOicsIGVycm9yKTtcclxuICAgICAgdGhpcy5pc1Nob3dJbmNvbWluZ0NhbGwgPSBmYWxzZTtcclxuICAgICAgdGhpcy50b2tlbkluaXRpYWxpemVkID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc2NoZWR1bGVEZXZpY2VSZWNvdmVyeSgpO1xyXG4gICAgfTtcclxuICAgIHRoaXMuY3VycmVudERldmljZUVycm9ySGFuZGxlciA9IG9uRGV2aWNlRXJyb3I7XHJcbiAgICBkZXZpY2Uub24oJ2Vycm9yJywgb25EZXZpY2VFcnJvcik7XHJcblxyXG4gICAgY29uc3Qgb25EZXZpY2VVbnJlZ2lzdGVyZWQgPSAoKSA9PiB7XHJcbiAgICAgIC8vIFN0YWxlIGV2ZW50IGZyb20gYSBkZXZpY2Ugd2UndmUgYWxyZWFkeSBpbnRlbnRpb25hbGx5IHJlcGxhY2VkIOKAlCBpZ25vcmUuXHJcbiAgICAgIGlmICh0aGlzLmRldmljZSAhPT0gZGV2aWNlKSByZXR1cm47XHJcbiAgICAgIGNvbnNvbGUubG9nKCdUd2lsaW8gRGV2aWNlIHVucmVnaXN0ZXJlZCcpO1xyXG4gICAgICB0aGlzLmlzU2hvd0luY29taW5nQ2FsbCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnRva2VuSW5pdGlhbGl6ZWQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zY2hlZHVsZURldmljZVJlY292ZXJ5KCk7XHJcbiAgICB9O1xyXG4gICAgdGhpcy5jdXJyZW50RGV2aWNlVW5yZWdpc3RlcmVkSGFuZGxlciA9IG9uRGV2aWNlVW5yZWdpc3RlcmVkO1xyXG4gICAgZGV2aWNlLm9uKCd1bnJlZ2lzdGVyZWQnLCBvbkRldmljZVVucmVnaXN0ZXJlZCk7XHJcblxyXG4gICAgLy8gUmVnaXN0ZXIgQUZURVIgYXR0YWNoaW5nIGFsbCBsaXN0ZW5lcnNcclxuICAgIGRldmljZS5yZWdpc3RlcigpO1xyXG4gICAgY29uc29sZS5sb2coJ2RldmljZSBjcmVhdGVkJywgZGV2aWNlKTtcclxuICAgIHJldHVybiB0aGlzLnRva2VuSW5pdGlhbGl6YXRpb24kIHx8IG9mKG51bGwpO1xyXG4gIH1cclxuXHJcbiAgLy8gUHJvYWN0aXZlbHkgc3dhcCBpbiBhIGZyZXNoIGFjY2VzcyB0b2tlbiBhaGVhZCBvZiBleHBpcnkgKHNlZSAndG9rZW5XaWxsRXhwaXJlJ1xyXG4gIC8vIGFib3ZlKSBzbyB0aGUgRGV2aWNlJ3Mgc2lnbmFsaW5nIGNvbm5lY3Rpb24gc3Vydml2ZXMgbG9uZyBpZGxlIHBlcmlvZHMuXHJcbiAgcHJpdmF0ZSByZWZyZXNoRGV2aWNlVG9rZW4oKSB7XHJcbiAgICBpZiAodGhpcy50b2tlblJlZnJlc2hJblByb2dyZXNzKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMudG9rZW5SZWZyZXNoSW5Qcm9ncmVzcyA9IHRydWU7XHJcbiAgICB0aGlzLmV4dGVuc2lvblNlcnZpY2UuZ2V0SW5jb21pbmdDYWxsVG9rZW4odGhpcy5kZXZpY2VJZCB8fCBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZGV2aWNlSWQnKSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMudG9rZW5SZWZyZXNoSW5Qcm9ncmVzcyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaW5jb21pbmdDYWxsVG9rZW4gPSBkYXRhLnRva2VuO1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdpbi10b2tlbicsIGRhdGEudG9rZW4pO1xyXG4gICAgICAgIHRoaXMudG9rZW5Jbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIHRoaXMuZGV2aWNlPy51cGRhdGVUb2tlbih0aGlzLmluY29taW5nQ2FsbFRva2VuKTtcclxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBhcHBseSByZWZyZXNoZWQgVHdpbGlvIHRva2VuOicsIGVycik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgIHRoaXMudG9rZW5SZWZyZXNoSW5Qcm9ncmVzcyA9IGZhbHNlO1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byByZWZyZXNoIFR3aWxpbyB0b2tlbiBhaGVhZCBvZiBleHBpcnk6JywgZXJyKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyBTZWxmLWhlYWwgYWZ0ZXIgdGhlIERldmljZSBkaWVzIChleHBpcmVkIHRva2VuLCBkcm9wcGVkIHNpZ25hbGluZyBzb2NrZXQgd2hpbGVcclxuICAvLyBpZGxlL2FzbGVlcCwgZXRjKS4gTmV2ZXIgcnVucyB3aGlsZSBhIGNhbGwgaXMgYWN0dWFsbHkgYWN0aXZlLCBhbmQgYmFja3Mgb2ZmIHNvIGFcclxuICAvLyBnZW51aW5lbHkgbG9nZ2VkLW91dC9vZmZsaW5lIHVzZXIgZG9lc24ndCByZXRyeSBmb3JldmVyLlxyXG4gIHByaXZhdGUgc2NoZWR1bGVEZXZpY2VSZWNvdmVyeSgpIHtcclxuICAgIGlmICh0aGlzLmFjY2VwdGVkQ2FsbExpc3QubGVuZ3RoID4gMCB8fCB0aGlzLnJlY292ZXJ5VGltZXIpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZGVsYXkgPSBNYXRoLm1pbigzMDAwMCwgMjAwMCAqIE1hdGgucG93KDIsIHRoaXMucmVjb3ZlcnlBdHRlbXB0cykpO1xyXG4gICAgdGhpcy5yZWNvdmVyeUF0dGVtcHRzKys7XHJcbiAgICB0aGlzLnJlY292ZXJ5VGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5yZWNvdmVyeVRpbWVyID0gbnVsbDtcclxuICAgICAgY29uc3QgYXV0aFRva2VuID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2V4dF90b2tlbicpO1xyXG4gICAgICBpZiAoIWF1dGhUb2tlbiB8fCBhdXRoVG9rZW4gPT09ICdsb2dvdXQnKSB7XHJcbiAgICAgICAgdGhpcy5yZWNvdmVyeUF0dGVtcHRzID0gMDtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy50b2tlbkluaXRpYWxpemVkID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZVRva2VuKCkuc3Vic2NyaWJlKHtcclxuICAgICAgICBlcnJvcjogKGVycikgPT4gY29uc29sZS5lcnJvcignVHdpbGlvIGRldmljZSByZWNvdmVyeSBhdHRlbXB0IGZhaWxlZDonLCBlcnIpXHJcbiAgICAgIH0pO1xyXG4gICAgfSwgZGVsYXkpO1xyXG4gIH1cclxuXHJcbiAgLy8gQnVpbGQgdGhlIGZ1bGwgaW5jb21pbmctY2FsbCBub3RpZmljYXRpb24gcGF5bG9hZCAobWF0Y2hlcyB0aGUgc2hhcGUgdGhlIEJFIHVzZWQgdG9cclxuICAvLyBwdXNoIG92ZXIgdGhlIHNvY2tldCkgZnJvbSB0aGUgcmF3IFR3aWxpbyAnaW5jb21pbmcnIENhbGw6IHBhcnNlZCBQYXJhbXMgZmllbGRzIHBsdXNcclxuICAvLyB0aGUgZGVyaXZlZCBjbGllbnRTaWQvcGFydGljaXBhbnRTaWQvbm90aWZpY2F0aW9uVHlwZS90aXRsZS9tc2dCb2R5LlxyXG4gIGJ1aWxkSW5jb21pbmdOb3RpZmljYXRpb24oY2FsbDogQ2FsbCk6IGFueSB7XHJcbiAgICBjb25zdCBub3RpZmljYXRpb24gPSB0aGlzLmNvbnZlcnRUb0pzb24oY2FsbD8ucGFyYW1ldGVycz8uWydQYXJhbXMnXSB8fCAne30nKTtcclxuICAgIGNvbnN0IGNhbGxTaWQgPSBjYWxsPy5wYXJhbWV0ZXJzPy5bJ0NhbGxTaWQnXTtcclxuICAgIG5vdGlmaWNhdGlvbi5jbGllbnRTaWQgPSBjYWxsU2lkO1xyXG4gICAgLy8gT25seSByZWFsIFR3aWxpbyBTSUQgZXhwb3NlZCBjbGllbnQtc2lkZSBmb3IgdGhpcyBsZWc7IG5vIHNlcGFyYXRlIHBhcnRpY2lwYW50IFNJRFxyXG4gICAgLy8gaXMgYXZhaWxhYmxlLCBzbyBpdCBtaXJyb3JzIGNsaWVudFNpZC5cclxuICAgIG5vdGlmaWNhdGlvbi5wYXJ0aWNpcGFudFNpZCA9IGNhbGxTaWQ7XHJcbiAgICBub3RpZmljYXRpb24ubm90aWZpY2F0aW9uVHlwZSA9ICdpbmNvbWluZ2NhbGwnO1xyXG4gICAgbm90aWZpY2F0aW9uLnRpdGxlID0gJ0luY29taW5nIENhbGwnO1xyXG4gICAgbm90aWZpY2F0aW9uLm1zZ0JvZHkgPSBgeW91IGhhdmUgaW5jb21pbmcgY2FsbCAke25vdGlmaWNhdGlvbi5mcm9tTmFtZSB8fCAnJ31gO1xyXG4gICAgcmV0dXJuIG5vdGlmaWNhdGlvbjtcclxuICB9XHJcblxyXG4gIGNvbnZlcnRUb0pzb24oZGF0YTogc3RyaW5nKTogYW55IHtcclxuICAgIGNvbnN0IG9iajogYW55ID0ge307XHJcblxyXG4gICAgaWYgKCFkYXRhKSB7XHJcbiAgICAgIHJldHVybiBvYmo7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRm9ybWF0OiBrZXk9dmFsdWUma2V5PXZhbHVlXHJcbiAgICBpZiAoZGF0YS5pbmNsdWRlcygnJicpKSB7XHJcbiAgICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoZGF0YSk7XHJcblxyXG4gICAgICBwYXJhbXMuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xyXG4gICAgICAgIG9ialtrZXldID0gdmFsdWUgPT09ICd0cnVlJ1xyXG4gICAgICAgICAgPyB0cnVlXHJcbiAgICAgICAgICA6IHZhbHVlID09PSAnZmFsc2UnXHJcbiAgICAgICAgICA/IGZhbHNlXHJcbiAgICAgICAgICA6IGRlY29kZVVSSUNvbXBvbmVudCh2YWx1ZSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gRm9ybWF0OiB7a2V5PXZhbHVlLCBrZXk9dmFsdWV9XHJcbiAgICAgIGNvbnN0IHRleHQgPSBkYXRhLnRyaW0oKS5yZXBsYWNlKC9eXFx7fFxcfSQvZywgJycpO1xyXG5cclxuICAgICAgdGV4dC5zcGxpdCgnLCcpLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgY29uc3QgaW5kZXggPSBpdGVtLmluZGV4T2YoJz0nKTtcclxuXHJcbiAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgIGNvbnN0IGtleSA9IGl0ZW0uc3Vic3RyaW5nKDAsIGluZGV4KS50cmltKCk7XHJcbiAgICAgICAgICBsZXQgdmFsdWU6IGFueSA9IGl0ZW0uc3Vic3RyaW5nKGluZGV4ICsgMSkudHJpbSgpO1xyXG5cclxuICAgICAgICAgIGlmICh2YWx1ZSA9PT0gJ3RydWUnKSB2YWx1ZSA9IHRydWU7XHJcbiAgICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PT0gJ2ZhbHNlJykgdmFsdWUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICBvYmpba2V5XSA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb2JqLnJlYWQgPSBmYWxzZTtcclxuICAgIG9iai5zYXZlID0gZmFsc2U7XHJcblxyXG4gICAgcmV0dXJuIG9iajtcclxuICB9XHJcbiAgLy8gU2FmZXR5IG5ldCBmb3IgdGhlIGNhc2Ugd2hlcmUgdGhlIHVuZGVybHlpbmcgc29ja2V0IGRpZXMgc2lsZW50bHkgZHVyaW5nIGEgbG9uZ1xyXG4gIC8vIHNsZWVwL2lkbGUgcGVyaW9kIHdpdGhvdXQgZXZlciBmaXJpbmcgJ2Vycm9yJy8ndW5yZWdpc3RlcmVkJyAodGhlIE9TIGNhbiBzdXNwZW5kXHJcbiAgLy8gdGltZXJzL3NvY2tldHMgb3V0cmlnaHQpIOKAlCByZS1jaGVjayBkZXZpY2UgaGVhbHRoIHdoZW5ldmVyIHRoZSBhcHAgd2FrZXMgdXAuXHJcbiAgcHJpdmF0ZSBlbnN1cmVEZXZpY2VIZWFsdGh5KCkge1xyXG4gICAgaWYgKHRoaXMuYWNjZXB0ZWRDYWxsTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5kZXZpY2UgfHwgdGhpcy5kZXZpY2Uuc3RhdGUgIT09ICdyZWdpc3RlcmVkJykge1xyXG4gICAgICBjb25zb2xlLmxvZygnVHdpbGlvIGRldmljZSB1bmhlYWx0aHkgYWZ0ZXIgd2FrZS92aXNpYmlsaXR5IGNoYW5nZSwgcmUtaW5pdGlhbGl6aW5nJyk7XHJcbiAgICAgIHRoaXMudG9rZW5Jbml0aWFsaXplZCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmluaXRpYWxpemVUb2tlbigpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgZXJyb3I6IChlcnIpID0+IGNvbnNvbGUuZXJyb3IoJ1R3aWxpbyBkZXZpY2UgcmVjb3ZlcnkgZmFpbGVkOicsIGVycilcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzYXZlQ29udGFjdChwYXlsb2FkOiBhbnkpOiBPYnNlcnZhYmxlPFtdPiB7XHJcbiAgICBjb25zdCBodHRwT3B0aW9ucyA9IHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJywgJ0F1dGgtS2V5JzogXCJCZWFyZXIgXCIgKyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZXh0X3Rva2VuJyl9KSB9O1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PFtdPihlbnZpcm9ubWVudC5hcGlVcmwgKyAnL3V0aWxpdGllcy9waG9uZWJvb2svYWRkL2NvbnRhY3RzL21hbnVhbGx5JywgcGF5bG9hZCwgaHR0cE9wdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlQ29udGFjdChwYXlsb2FkOmFueSl7XHJcbiAgICBjb25zdCBodHRwT3B0aW9ucyA9IHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJywgJ0F1dGgtS2V5JzogXCJCZWFyZXIgXCIgKyB0aGlzLnRva2VufSkgfTtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxbXT4oZW52aXJvbm1lbnQuYXBpVXJsICsgJy91dGlsaXRpZXMvcGhvbmVib29rL3VwZGF0ZS9jb250YWN0JywgcGF5bG9hZCwgaHR0cE9wdGlvbnMpO1xyXG4gIH1cclxuICBcclxuICBkZWxldGVDb250YWN0KGlkOnN0cmluZyl7XHJcbiAgICBsZXQgcGF5bG9hZCA9IHtcclxuICAgICAgcGhvbmVib29raWQ6IGlkXHJcbiAgICB9XHJcbiAgICBjb25zdCBodHRwT3B0aW9ucyA9IHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJywgJ0F1dGgtS2V5JzogXCJCZWFyZXIgXCIgKyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZXh0X3Rva2VuJykgfSkgfTtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxbXT4oZW52aXJvbm1lbnQuYXBpVXJsICsgJy91dGlsaXRpZXMvcGhvbmVib29rL2RlbGV0ZS9jb250YWN0LycraWQscGF5bG9hZCwgaHR0cE9wdGlvbnMpO1xyXG4gIH1cclxuICBnZXRDb250YWN0TGlzdCgpe1xyXG4gICAgY29uc3QgaHR0cE9wdGlvbnMgPSB7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsICdBdXRoLUtleSc6IFwiQmVhcmVyIFwiICsgbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2V4dF90b2tlbicpIH0pIH07XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxbXT4oZW52aXJvbm1lbnQuYXBpVXJsICsgJy91dGlsaXRpZXMvcGhvbmVib29rL3JlYWQvY29udGFjdHMnLCBodHRwT3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICBhZGRDb250YWN0VG9GYXZvdXJpdGUocGF5bG9hZDogYW55KXtcclxuICAgIGNvbnN0IGh0dHBPcHRpb25zID0geyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLCAnQXV0aC1LZXknOiBcIkJlYXJlciBcIiArIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdleHRfdG9rZW4nKSB9KSB9O1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PFtdPihlbnZpcm9ubWVudC5hcGlVcmwgKyAnL3V0aWxpdGllcy9waG9uZWJvb2svdXBkYXRlL2Zhdm91cml0ZScsIHBheWxvYWQsIGh0dHBPcHRpb25zKTtcclxuICB9XHJcblxyXG4gIGdldEZhdm91cml0Q29udGFjdHMoKXtcclxuICAgIGNvbnN0IGh0dHBPcHRpb25zID0geyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLCAnQXV0aC1LZXknOiBcIkJlYXJlciBcIiArIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdleHRfdG9rZW4nKSB9KSB9O1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8W10+KGVudmlyb25tZW50LmFwaVVybCArICcvdXRpbGl0aWVzL3Bob25lYm9vay9mYXZvdXJpdGUvY29udGFjdHMnLCBodHRwT3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICBnZXRSZWNlbnRDYWxscyhwYWdlSW5kZXg/OiBzdHJpbmcsIHBhZ2VTaXplPzogc3RyaW5nLCl7XHJcbiAgICBjb25zdCBoZWFkZXJzID0gIHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJywgJ0F1dGgtS2V5JzogXCJCZWFyZXIgXCIgKyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZXh0X3Rva2VuJykgfTtcclxuICAgIGNvbnN0IGh0dHBPcHRpb25zID17aGVhZGVyc31cclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFtdPihlbnZpcm9ubWVudC5hcGlVcmwgKyAnL3V0aWxpdGllcy9waG9uZWJvb2svcmVjZW50L2NhbGxzJywgaHR0cE9wdGlvbnMpO1xyXG4gIH1cclxuICBkZWxldGVSZWNlbnRDYWxsTG9nKGlkOnN0cmluZ3wgc3RyaW5nW10pe1xyXG4gICAgbGV0IHBheWxvYWQgPSB7XHJcbiAgICAgIHJlY29yZElkOiBpZFxyXG4gICAgfVxyXG4gICAgY29uc3QgaHR0cE9wdGlvbnMgPSB7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsICdBdXRoLUtleSc6IFwiQmVhcmVyIFwiICsgbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2V4dF90b2tlbicpIH0pIH07XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8W10+KGVudmlyb25tZW50LmFwaVVybCArICcvdXRpbGl0aWVzL3Bob25lYm9vay9kZWxldGUvY2FsbHMvJytpZCxwYXlsb2FkLCBodHRwT3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICB1cGxvYWRQaG90byhwYXlsb2FkOiBhbnkpe1xyXG4gICAgbGV0IGh0dHBPcHRpb25zID0ge1xyXG4gICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xyXG4gICAgICAgICdBdXRoLUtleSc6IFwiQmVhcmVyIFwiICsgbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2V4dF90b2tlbicpXHJcbiAgICAgIH0pXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PFtdPihlbnZpcm9ubWVudC5hcGlVcmwgKyAnL3V0aWxpdGllcy9waG9uZWJvb2svdXBsb2FkL3Bob3RvJyxwYXlsb2FkLCBodHRwT3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICBkZWxldGVQaG90byhpZDpzdHJpbmcpe1xyXG4gICAgbGV0IHBheWxvYWQgPSB7XHJcbiAgICAgIHBob25lYm9va2lkOiBpZFxyXG4gICAgfVxyXG4gICAgbGV0IGh0dHBPcHRpb25zID0ge1xyXG4gICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xyXG4gICAgICAgICdBdXRoLUtleSc6IFwiQmVhcmVyIFwiICsgbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2V4dF90b2tlbicpXHJcbiAgICAgIH0pXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PFtdPihlbnZpcm9ubWVudC5hcGlVcmwgKyAnL3V0aWxpdGllcy9waG9uZWJvb2svZGVsZXRlL3Bob3RvLycraWQscGF5bG9hZCwgaHR0cE9wdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlQ291dHJ5Q29kZVRvYXN0KHZhbDphbnkpe1xyXG4gICAgbGV0IGh0dHBPcHRpb25zID0ge1xyXG4gICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xyXG4gICAgICAgICdBdXRoLUtleSc6IFwiQmVhcmVyIFwiICsgbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2V4dF90b2tlbicpXHJcbiAgICAgIH0pXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8W10+KGVudmlyb25tZW50LmFwaVVybCArICcvdXRpbGl0aWVzL3NvZnRwaG9uZS9jb3VudHJ5Y29kZS9hbGVydC8nICsgdmFsLCB7fSwgaHR0cE9wdGlvbnMpO1xyXG4gIH1cclxuICBnZXRUb051bWJlcihkaWFsbGVkTm86IHN0cmluZywgaXNvQ29kZTogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBodHRwT3B0aW9ucyA9IHtcclxuICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJywgJ0F1dGgtS2V5JzogXCJCZWFyZXIgXCIgKyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZXh0X3Rva2VuJykgfSksXHJcbiAgICAgIHBhcmFtczogbmV3IEh0dHBQYXJhbXMoKS5zZXQoJ2lzb0NvZGUnLCBpc29Db2RlKVxyXG4gICAgfTtcclxuICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCkuc2V0KCdpc29Db2RlJywgaXNvQ29kZSlcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFtdPihlbnZpcm9ubWVudC5hcGlVcmwgKyAnL3V0aWxpdGllcy9zb2Z0cGhvbmUvY2hlY2svY291bnRyeUNvZGUvJyArIGRpYWxsZWRObywgaHR0cE9wdGlvbnMpO1xyXG4gIH0gXHJcbiAgXHJcbiAgLy8gUmVjb3JkIGEgcmluZ2luZyBpbmNvbWluZyBDYWxsIHNvIGl0IGNhbiBsYXRlciBiZSBhY2NlcHRlZCBieSBpdHMgc3BlY2lmaWMgaWQuXHJcbiAgLy8gVGhlIG1hcCBpcyBjbGVhbmVkIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgY2FsbCBpcyBjYW5jZWxsZWQvZGlzY29ubmVjdGVkL3JlamVjdGVkLlxyXG4gIHByaXZhdGUgdHJhY2tJbmNvbWluZ0NhbGwoY2FsbDogYW55KSB7XHJcbiAgICBjb25zdCBjYWxsU2lkID0gY2FsbD8ucGFyYW1ldGVycz8uWydDYWxsU2lkJ107XHJcbiAgICBpZiAoY2FsbFNpZCkge1xyXG4gICAgICB0aGlzLmluY29taW5nQ2FsbHNNYXAuc2V0KGNhbGxTaWQsIGNhbGwpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgY2xlYW51cCA9ICgpID0+IHtcclxuICAgICAgaWYgKCFjYWxsU2lkKSByZXR1cm47XHJcbiAgICAgIHRoaXMuaW5jb21pbmdDYWxsc01hcC5kZWxldGUoY2FsbFNpZCk7XHJcbiAgICAgIC8vIElmIHRoZSBjYWxsIGVuZGVkIGJlZm9yZSB0aGUgdXNlciBhY2NlcHRlZCBpdCwgZGVzdHJveSB0aGUgcGVuZGluZyBzcGFyZVxyXG4gICAgICAvLyBkZXZpY2UgdGhhdCB3YXMgaG9sZGluZyBpdCBzbyB3ZSBkb24ndCBsZWFrIGRldmljZSByZWdpc3RyYXRpb25zLlxyXG4gICAgICBjb25zdCBkZXYgPSB0aGlzLnBlbmRpbmdJbmNvbWluZ0RldmljZXMuZ2V0KGNhbGxTaWQpO1xyXG4gICAgICBpZiAoZGV2ICYmICFkZXYuX293bnNBY2NlcHRlZENhbGwpIHtcclxuICAgICAgICB0cnkgeyBkZXYuZGVzdHJveSgpOyB9IGNhdGNoIChfKSB7fVxyXG4gICAgICAgIHRoaXMucGVuZGluZ0luY29taW5nRGV2aWNlcy5kZWxldGUoY2FsbFNpZCk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgICBjYWxsLm9uKCdjYW5jZWwnLCBjbGVhbnVwKTtcclxuICAgIGNhbGwub24oJ2Rpc2Nvbm5lY3QnLCBjbGVhbnVwKTtcclxuICAgIGNhbGwub24oJ3JlamVjdCcsIGNsZWFudXApO1xyXG4gIH1cclxuXHJcbiAgLy8gUmVzb2x2ZSB0aGUgRVhBQ1QgcmluZ2luZyBDYWxsIGZvciBhIGdpdmVuIFVJIGVudHJ5IGlkIChwYXJ0aWNpcGFudC9yZWNvcmQgaWQpLlxyXG4gIC8vIEZhbGxzIGJhY2sgdG8gdGhlIG1vc3QgcmVjZW50IGluY29taW5nIGNhbGwgc28gb2xkZXIgc2luZ2xlLWNhbGwgZmxvd3Mgc3RpbGwgd29yay5cclxuICBnZXRJbmNvbWluZ0NhbGxCeUlkKGlkOiBhbnkpIHtcclxuICAgIGlmIChpZCAhPSBudWxsICYmIHRoaXMuaW5jb21pbmdDYWxsc01hcC5oYXMoaWQpKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmluY29taW5nQ2FsbHNNYXAuZ2V0KGlkKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmluY29taW5nQ2FsbERldGFpbC5wYXJhbWV0ZXJzPy5bJ0NhbGxTaWQnXSA9PSBpZCA/IHRoaXMuaW5jb21pbmdDYWxsRGV0YWlsIDogbnVsbDtcclxuICB9XHJcblxyXG4gIHByZXBhcmVEZXZpY2UyRm9ySW5jb21pbmdDYWxsKCkge1xyXG4gICAgaWYgKHRoaXMuc3BhcmVEZXZpY2UpIHtcclxuICAgICAgcmV0dXJuOyAvLyBhIGZyZWUgc3BhcmUgaXMgYWxyZWFkeSB3YWl0aW5nXHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuaW5jb21pbmdDYWxsVG9rZW4pIHtcclxuICAgICAgY29uc29sZS53YXJuKCdwcmVwYXJlU3BhcmVEZXZpY2U6IG5vIHRva2VuIGF2YWlsYWJsZScpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBzcGFyZTogYW55ID0gbmV3IERldmljZSh0aGlzLmluY29taW5nQ2FsbFRva2VuLCB7IGFsbG93SW5jb21pbmdXaGlsZUJ1c3k6IHRydWUgfSk7XHJcbiAgICBzcGFyZS5fb3duc0FjY2VwdGVkQ2FsbCA9IGZhbHNlO1xyXG5cclxuICAgIHNwYXJlLm9uKCdyZWdpc3RlcmVkJywgKCkgPT4ge1xyXG4gICAgICB0aGlzLnNwYXJlRGV2aWNlUmVhZHkgPSB0cnVlO1xyXG4gICAgICAvLyBBcHBseSB0aGUgbXV0ZSBwcmVmZXJlbmNlIGhlcmUg4oCUIGBzcGFyZS5hdWRpb2AgaXMgb25seSByZWFkeSBhZnRlciByZWdpc3RyYXRpb24sXHJcbiAgICAgIC8vIHNvIHRoZSBjYWxsIGFib3ZlIChiZWZvcmUgcmVnaXN0ZXIoKSkgd2FzIGFsd2F5cyBhIG5vLW9wLlxyXG4gICAgICB0cnkgeyBzcGFyZS5hdWRpbz8uaW5jb21pbmcoIXRoaXMuaXNJbmNvbWluZ011dGVkKTsgfSBjYXRjaCAoXykge31cclxuICAgICAgY29uc29sZS5sb2coJ1NwYXJlIGRldmljZSByZWdpc3RlcmVkIOKAkyByZWFkeSBmb3IgdGhlIG5leHQgY29uY3VycmVudCBjYWxsJyk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBzcGFyZS5vbignaW5jb21pbmcnLCAoY2FsbDogQ2FsbCB8IGFueSkgPT4ge1xyXG4gICAgICAvLyBHdWFyZDogb25jZSB0aGlzIHNwYXJlIGlzIGFscmVhZHkgaGFuZGxpbmcgYSBjYWxsIChwZW5kaW5nIG9yIGFjY2VwdGVkKSxcclxuICAgICAgLy8gaWdub3JlIGFueSBmdXJ0aGVyIGluY29taW5nIGV2ZW50cyBzbyBhbm90aGVyIHNwYXJlIGNhbiB0YWtlIHRoZSBuZXh0IGNhbGwuXHJcbiAgICAgIGlmIChzcGFyZS5fb3duc0FjY2VwdGVkQ2FsbCB8fCBzcGFyZS5fcGVuZGluZ0luY29taW5nQ2FsbCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBzcGFyZS5fcGVuZGluZ0luY29taW5nQ2FsbCA9IGNhbGw7XHJcbiAgICAgIGNvbnN0IGNhbGxTaWQgPSBjYWxsPy5wYXJhbWV0ZXJzPy5bJ0NhbGxTaWQnXTtcclxuXHJcbiAgICAgIC8vIFRyYW5zaXRpb24gdGhpcyBzcGFyZSBmcm9tIFwiZnJlZVwiIOKGkiBcInBlbmRpbmdcIjogcmVtb3ZlIGl0IGFzIHRoZSBhY3RpdmVcclxuICAgICAgLy8gc3BhcmVEZXZpY2UgYW5kIHRyYWNrIGl0IGJ5IENhbGxTaWQgc28gb25Db25jdXJyZW50Q2FsbEFjY2VwdGVkIGNhbiBmaW5kIGl0LlxyXG4gICAgICBpZiAodGhpcy5zcGFyZURldmljZSA9PT0gc3BhcmUpIHtcclxuICAgICAgICB0aGlzLnNwYXJlRGV2aWNlID0gbnVsbDtcclxuICAgICAgICB0aGlzLnNwYXJlRGV2aWNlUmVhZHkgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY2FsbFNpZCkge1xyXG4gICAgICAgIHRoaXMucGVuZGluZ0luY29taW5nRGV2aWNlcy5zZXQoY2FsbFNpZCwgc3BhcmUpO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIEltbWVkaWF0ZWx5IGFybSB0aGUgTkVYVCBmcmVlIHNwYXJlIHNvIGl0IGlzIHJlYWR5IGZvciBjYWxsIE4rMiB3aXRob3V0XHJcbiAgICAgIC8vIHdhaXRpbmcgZm9yIHRoZSB1c2VyIHRvIGFjY2VwdCB0aGlzIGNhbGwgZmlyc3QuXHJcbiAgICAgIHRoaXMucHJlcGFyZURldmljZTJGb3JJbmNvbWluZ0NhbGwoKTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmlzSW5jb21pbmdNdXRlZCkge1xyXG4gICAgICAgIHRyeSB7IHNwYXJlLmF1ZGlvPy5pbmNvbWluZyhmYWxzZSk7IH0gY2F0Y2ggKF8pIHt9XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy50cmFja0luY29taW5nQ2FsbChjYWxsKTtcclxuICAgICAgdGhpcy5pbmNvbWluZ0NhbGxEZXRhaWwgPSBjYWxsO1xyXG4gICAgICB0aGlzLmlzU2hvd0luY29taW5nQ2FsbCA9IHRydWU7XHJcbiAgICAgIGNvbnN0IG5vdGlmaWNhdGlvbiA9IHRoaXMuYnVpbGRJbmNvbWluZ05vdGlmaWNhdGlvbihjYWxsKTtcclxuICAgICAgICB0aGlzLmluY29taW5nQ2FsbE5vdGlmaWNhdGlvbi5uZXh0KG5vdGlmaWNhdGlvbik7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdzcGFyZSBkZXZpY2U6IGluY29taW5nIGNhbGwnLCBjYWxsKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHNwYXJlLm9uKCdlcnJvcicsIChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1NwYXJlIGRldmljZSBlcnJvcjonLCBlcnJvcik7XHJcbiAgICB9KTtcclxuXHJcbiAgICBzcGFyZS5yZWdpc3RlcigpO1xyXG4gICAgdGhpcy5zcGFyZURldmljZSA9IHNwYXJlO1xyXG4gICAgY29uc29sZS5sb2coJ3NwYXJlIGRldmljZSBjcmVhdGVkIGFuZCByZWdpc3RlcmluZycpO1xyXG4gIH1cclxuXHJcbiAgb25Db25jdXJyZW50Q2FsbEFjY2VwdGVkKGFjY2VwdGVkQ2FsbDogYW55KSB7XHJcbiAgICBjb25zdCBzaWQgPSBhY2NlcHRlZENhbGw/LnBhcmFtZXRlcnM/LlsnQ2FsbFNpZCddO1xyXG4gICAgaWYgKHNpZCkge1xyXG4gICAgICAvLyBQcmltYXJ5IHBhdGg6IHRoZSBhY2NlcHRlZCBjYWxsIHdhcyBoZWxkIGJ5IGEgcGVuZGluZyBzcGFyZSBkZXZpY2UuXHJcbiAgICAgIGNvbnN0IGRldiA9IHRoaXMucGVuZGluZ0luY29taW5nRGV2aWNlcy5nZXQoc2lkKTtcclxuICAgICAgaWYgKGRldikge1xyXG4gICAgICAgIGRldi5fb3duc0FjY2VwdGVkQ2FsbCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5leHRyYURldmljZXMuc2V0KHNpZCwgZGV2KTtcclxuICAgICAgICB0aGlzLnBlbmRpbmdJbmNvbWluZ0RldmljZXMuZGVsZXRlKHNpZCk7XHJcbiAgICAgIH1cclxuICAgICAgLy8gTGVnYWN5IGZhbGxiYWNrOiBvbGQgc2luZ2xlLXNwYXJlIHBhdGggKHNwYXJlIHN0aWxsIGhvbGRzIHRoZSBjYWxsKS5cclxuICAgICAgZWxzZSBpZiAodGhpcy5zcGFyZURldmljZSAmJiB0aGlzLnNwYXJlRGV2aWNlLl9wZW5kaW5nSW5jb21pbmdDYWxsID09PSBhY2NlcHRlZENhbGwpIHtcclxuICAgICAgICB0aGlzLnNwYXJlRGV2aWNlLl9vd25zQWNjZXB0ZWRDYWxsID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmV4dHJhRGV2aWNlcy5zZXQoc2lkLCB0aGlzLnNwYXJlRGV2aWNlKTtcclxuICAgICAgICB0aGlzLnNwYXJlRGV2aWNlID0gbnVsbDtcclxuICAgICAgICB0aGlzLnNwYXJlRGV2aWNlUmVhZHkgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gRW5zdXJlIGEgZnJlZSBzcGFyZSBpcyBhbHdheXMgcmVhZHkgZm9yIHRoZSBuZXh0IGNvbmN1cnJlbnQgY2FsbC5cclxuICAgIHRoaXMucHJlcGFyZURldmljZTJGb3JJbmNvbWluZ0NhbGwoKTtcclxuICB9XHJcblxyXG4gIHJlbGVhc2VDb25jdXJyZW50Q2FsbERldmljZShjYWxsU2lkOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGRldiA9IHRoaXMuZXh0cmFEZXZpY2VzLmdldChjYWxsU2lkKTtcclxuICAgIGlmIChkZXYpIHtcclxuICAgICAgdHJ5IHsgZGV2LmRlc3Ryb3koKTsgfSBjYXRjaCAoXykge31cclxuICAgICAgdGhpcy5leHRyYURldmljZXMuZGVsZXRlKGNhbGxTaWQpO1xyXG4gICAgICBjb25zb2xlLmxvZygncmVsZWFzZWQgY29uY3VycmVudC1jYWxsIGRldmljZSBmb3InLCBjYWxsU2lkKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgLy8gQWxzbyByZWxlYXNlIHBlbmRpbmcgZGV2aWNlcyB0aGF0IHdlcmUgY2FuY2VsbGVkIGJlZm9yZSBhY2NlcHRhbmNlLlxyXG4gICAgY29uc3QgcGVuZGluZ0RldiA9IHRoaXMucGVuZGluZ0luY29taW5nRGV2aWNlcy5nZXQoY2FsbFNpZCk7XHJcbiAgICBpZiAocGVuZGluZ0Rldikge1xyXG4gICAgICB0cnkgeyBwZW5kaW5nRGV2LmRlc3Ryb3koKTsgfSBjYXRjaCAoXykge31cclxuICAgICAgdGhpcy5wZW5kaW5nSW5jb21pbmdEZXZpY2VzLmRlbGV0ZShjYWxsU2lkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIFdoZW4gbm8gYWNjZXB0ZWQgY2FsbHMgcmVtYWluLCB0ZWFyIGRvd24gYWxsIHNwYXJlL3BlbmRpbmcvZXh0cmEgZGV2aWNlcyBzb1xyXG4gIC8vIHRoZSBwcmltYXJ5IGRldmljZSBjbGVhbmx5IGhhbmRsZXMgdGhlIG5leHQgZnJlc2ggaW5jb21pbmcgY2FsbC5cclxuICB0ZWFyZG93blNwYXJlRGV2aWNlc0lmSWRsZSgpIHtcclxuICAgIGlmICh0aGlzLmFjY2VwdGVkQ2FsbExpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmV4dHJhRGV2aWNlcy5mb3JFYWNoKChkKSA9PiB7IHRyeSB7IGQuZGVzdHJveSgpOyB9IGNhdGNoIChfKSB7fSB9KTtcclxuICAgIHRoaXMuZXh0cmFEZXZpY2VzLmNsZWFyKCk7XHJcbiAgICB0aGlzLnBlbmRpbmdJbmNvbWluZ0RldmljZXMuZm9yRWFjaCgoZCkgPT4geyB0cnkgeyBkLmRlc3Ryb3koKTsgfSBjYXRjaCAoXykge30gfSk7XHJcbiAgICB0aGlzLnBlbmRpbmdJbmNvbWluZ0RldmljZXMuY2xlYXIoKTtcclxuICAgIGlmICh0aGlzLnNwYXJlRGV2aWNlKSB7XHJcbiAgICAgIHRyeSB7IHRoaXMuc3BhcmVEZXZpY2UuZGVzdHJveSgpOyB9IGNhdGNoIChfKSB7fVxyXG4gICAgICB0aGlzLnNwYXJlRGV2aWNlID0gbnVsbDtcclxuICAgICAgdGhpcy5zcGFyZURldmljZVJlYWR5ID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICB0aGlzLnByaW1hcnlIYXNDYWxsID0gZmFsc2U7XHJcbiAgICBjb25zb2xlLmxvZygnc3BhcmUvZXh0cmEgZGV2aWNlcyB0b3JuIGRvd24gKGlkbGUpJyk7XHJcbiAgfVxyXG5cclxuICAvLyBCYWNrd2FyZHMtY29tcGF0aWJsZSBhbGlhcyBrZXB0IGZvciBleGlzdGluZyBjYWxsIHNpdGVzLlxyXG4gIGRlc3Ryb3lEZXZpY2UyKCkge1xyXG4gICAgdGhpcy50ZWFyZG93blNwYXJlRGV2aWNlc0lmSWRsZSgpO1xyXG4gIH1cclxuXHJcbiAgLy8gVXNlci1jb250cm9sbGVkIHN3aXRjaCAoaW4gdGhlIGNhbGwtcHJvZ3Jlc3MgVUkpLiBXaGVuIE9OLCBhIG5ldyBpbmNvbWluZ1xyXG4gIC8vIGNhbGwncyBidWlsdC1pbiBUd2lsaW8gcmluZ3RvbmUgaXMgc2lsZW5jZWQgc28gaXQgZG9lcyBub3QgZGlzdHVyYiB0aGVcclxuICAvLyBvbmdvaW5nIGNhbGwuIFNvdXJjZSBvZiB0cnV0aCBzbyBuZXdseSBjcmVhdGVkIChzcGFyZSkgZGV2aWNlcyBpbmhlcml0IGl0LlxyXG4gIGlzSW5jb21pbmdNdXRlZCA9IGZhbHNlO1xyXG5cclxuICAvLyBBcHBseSB0aGUgY3VycmVudCBtdXRlIHByZWZlcmVuY2UgdG8gZXZlcnkgbGl2ZSBEZXZpY2UgKHByaW1hcnkgKyBzcGFyZSArXHJcbiAgLy8gYW55IGNvbmN1cnJlbnQtY2FsbCBkZXZpY2VzKSB2aWEgVHdpbGlvJ3Mgb3duIGRldmljZS5hdWRpby5pbmNvbWluZygpLlxyXG4gIGFwcGx5SW5jb21pbmdNdXRlKCkge1xyXG4gICAgY29uc3QgZW5hYmxlZCA9ICF0aGlzLmlzSW5jb21pbmdNdXRlZDsgLy8gcmluZ3RvbmUgZW5hYmxlZCA9IE5PVCBtdXRlZFxyXG4gICAgY29uc3QgYXBwbHkgPSAoZGV2OiBhbnkpID0+IHtcclxuICAgICAgdHJ5IHsgZGV2Py5hdWRpbz8uaW5jb21pbmc/LihlbmFibGVkKTsgfSBjYXRjaCAoXykge31cclxuICAgIH07XHJcbiAgICBhcHBseSh0aGlzLmRldmljZSk7XHJcbiAgICBhcHBseSh0aGlzLnNwYXJlRGV2aWNlKTtcclxuICAgIHRoaXMuZXh0cmFEZXZpY2VzLmZvckVhY2goYXBwbHkpO1xyXG4gICAgdGhpcy5wZW5kaW5nSW5jb21pbmdEZXZpY2VzLmZvckVhY2goYXBwbHkpO1xyXG4gIH1cclxuXHJcbiAgLy8gVG9nZ2xlL3NldCB0aGUgbXV0ZSBzd2l0Y2ggYW5kIGltbWVkaWF0ZWx5IGFwcGx5IGl0LlxyXG4gIHNldEluY29taW5nTXV0ZWQobXV0ZWQ6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuaXNJbmNvbWluZ011dGVkID0gbXV0ZWQ7XHJcbiAgICB0aGlzLmFwcGx5SW5jb21pbmdNdXRlKCk7XHJcbiAgICBpZiAobXV0ZWQpIHtcclxuICAgICAgLy8gZGV2aWNlLmF1ZGlvLmluY29taW5nKGZhbHNlKSBvbmx5IHByZXZlbnRzIGZ1dHVyZSByaW5ncyDigJQgaXQgZG9lcyBOT1Qgc3RvcFxyXG4gICAgICAvLyBhIGNhbGwgdGhhdCBpcyBhbHJlYWR5IHJpbmdpbmcuIFN0b3AgdGhlIGFjdGl2ZSByaW5nIGRpcmVjdGx5IHZpYSBzb3VuZGNhY2hlLlxyXG4gICAgICBjb25zdCBzdG9wUmluZyA9IChkZXY6IGFueSkgPT4ge1xyXG4gICAgICAgIHRyeSB7IGRldj8uX3NvdW5kY2FjaGU/LmdldD8uKCdpbmNvbWluZycpPy5zdG9wPy4oKTsgfSBjYXRjaCAoXykge31cclxuICAgICAgfTtcclxuICAgICAgc3RvcFJpbmcodGhpcy5kZXZpY2UpO1xyXG4gICAgICBzdG9wUmluZyh0aGlzLnNwYXJlRGV2aWNlKTtcclxuICAgICAgdGhpcy5leHRyYURldmljZXMuZm9yRWFjaCgoZGV2OiBhbnkpID0+IHN0b3BSaW5nKGRldikpO1xyXG4gICAgICB0aGlzLnBlbmRpbmdJbmNvbWluZ0RldmljZXMuZm9yRWFjaCgoZGV2OiBhbnkpID0+IHN0b3BSaW5nKGRldikpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkSW5jb21pbmdQYXJ0aWNpcGFudChwYXJ0aWNpcGFudElkOiBzdHJpbmcsIGNvbmZlcmVuY2VJZDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBodHRwT3B0aW9ucyA9IHtcclxuICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJywgJ0F1dGgtS2V5JzogXCJCZWFyZXIgXCIgKyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZXh0X3Rva2VuJyl9KSxcclxuICAgIH07XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxbXT4oYCR7ZW52aXJvbm1lbnQuYXBpVXJsfS91dGlsaXRpZXMvZXh0L2FkZC9pbmNvbWluZy9wYXJ0aWNpcGFudC8ke3BhcnRpY2lwYW50SWR9LyR7Y29uZmVyZW5jZUlkfWAsaHR0cE9wdGlvbnMpO1xyXG4gIH0gXHJcbiAgY29ubmVjdChkYXRhPzogYW55KXtcclxuICAgIGlmICh0aGlzLmRldmljZS5fYWN0aXZlQ2FsbCkge1xyXG4gICAgICBjb25zb2xlLmxvZygnMjQ0LXRlc3QnKVxyXG4gICAgICB0aGlzLmRldmljZS5kaXNjb25uZWN0QWxsKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5kZXZpY2UuY29ubmVjdCh7XHJcbiAgICAgIHBhcmFtczoge1xyXG4gICAgICAgIFRva2VuOiB0aGlzLmNvbmZlcmVuY2VDYWxsSW5mbz8uY29uZmVyZW5jZUlkIHx8IGRhdGEuY29uZmVyZW5jZUlkLFxyXG4gICAgICAgIENvbmZlcmVuY2VOYW1lOiB0aGlzLmNvbmZlcmVuY2VDYWxsSW5mbz8uY29uZmVyZW5jZU5hbWUgfHwgZGF0YS5jb25mZXJlbmNlTmFtZVxyXG4gICAgICB9LFxyXG4gICAgICBydGNDb25zdHJhaW50czogeyBhdWRpbzogeyBkZXZpY2VJZDogJ2RlZmF1bHQnIH0gfSxcclxuICAgIH0pXHJcbiAgfVxyXG59XHJcbiJdfQ==
|