Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@ionic-native/bluetooth-le

Package Overview
Dependencies
Maintainers
6
Versions
76
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@ionic-native/bluetooth-le - npm Package Compare versions

Comparing version 5.25.0 to 5.26.0

2

ngx/index.js

@@ -170,2 +170,2 @@ import { __decorate, __extends } from "tslib";

export { BluetoothLE };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvQGlvbmljLW5hdGl2ZS9wbHVnaW5zL2JsdWV0b290aC1sZS9uZ3gvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxzRUFLTixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUEyVmxDLE1BQU0sQ0FBTixJQUFZLGlCQUtYO0FBTEQsV0FBWSxpQkFBaUI7SUFDM0IsZ0dBQTRCLENBQUE7SUFDNUIsdUZBQXVCLENBQUE7SUFDdkIscUZBQXNCLENBQUE7SUFDdEIsMkZBQXlCLENBQUE7QUFDM0IsQ0FBQyxFQUxXLGlCQUFpQixLQUFqQixpQkFBaUIsUUFLNUI7QUFFRCxNQUFNLENBQU4sSUFBWSxrQkFHWDtBQUhELFdBQVksa0JBQWtCO0lBQzVCLDJGQUF3QixDQUFBO0lBQ3hCLHFGQUFxQixDQUFBO0FBQ3ZCLENBQUMsRUFIVyxrQkFBa0IsS0FBbEIsa0JBQWtCLFFBRzdCO0FBRUQsTUFBTSxDQUFOLElBQVksaUJBSVg7QUFKRCxXQUFZLGlCQUFpQjtJQUMzQix1R0FBK0IsQ0FBQTtJQUMvQix1R0FBK0IsQ0FBQTtJQUMvQix1R0FBK0IsQ0FBQTtBQUNqQyxDQUFDLEVBSlcsaUJBQWlCLEtBQWpCLGlCQUFpQixRQUk1QjtBQUVELE1BQU0sQ0FBTixJQUFZLHFCQUlYO0FBSkQsV0FBWSxxQkFBcUI7SUFDL0IsMkdBQTZCLENBQUE7SUFDN0IsMkdBQTZCLENBQUE7SUFDN0IseUdBQTRCLENBQUE7QUFDOUIsQ0FBQyxFQUpXLHFCQUFxQixLQUFyQixxQkFBcUIsUUFJaEM7O0lBc0RnQywrQkFBaUI7Ozs7SUFRaEQsZ0NBQVUsYUFBQyxNQUFtQjtJQVU5Qiw0QkFBTTtJQVVOLDZCQUFPO0lBYVAsb0NBQWM7SUFnQmQsK0JBQVMsYUFBQyxNQUFrQjtJQVc1Qiw4QkFBUTtJQVlSLHVDQUFpQixhQUFDLE1BRWpCO0lBa0JELDBCQUFJLGFBQUMsTUFBMkI7SUFhaEMsNEJBQU0sYUFBQyxNQUEyQjtJQWlCbEMsNkJBQU8sYUFBQyxNQUdQO0lBV0QsK0JBQVMsYUFBQyxNQUEyQjtJQVlyQyxnQ0FBVSxhQUFDLE1BQTJCO0lBYXRDLDJCQUFLLGFBQUMsTUFBMkI7SUFtQmpDLDhCQUFRLGFBQUMsTUFHUjtJQVlELDhCQUFRLGFBQUMsTUFHUjtJQVlELHFDQUFlLGFBQ2IsTUFBNEI7SUFZOUIsaUNBQVcsYUFBQyxNQUF3QjtJQVdwQywwQkFBSSxhQUFDLE1BQXdCO0lBYTdCLCtCQUFTLGFBQUMsTUFBd0I7SUFXbEMsaUNBQVcsYUFBQyxNQUF3QjtJQVlwQywyQkFBSyxhQUFDLE1BQWlDO0lBWXZDLDRCQUFNLGFBQUMsTUFBaUM7SUFXeEMsb0NBQWMsYUFBQyxNQUFpQztJQVloRCxxQ0FBZSxhQUFDLE1BQTZCO0lBVzdDLDBCQUFJLGFBQUMsTUFBMkI7SUFXaEMseUJBQUcsYUFBQyxNQUF5QztJQVk3QywrQ0FBeUIsYUFBQyxNQUd6QjtJQVVELG1DQUFhO0lBVWIsK0JBQVM7SUFVVCxnQ0FBVTtJQVdWLDhCQUFRLGFBQUMsTUFBMkI7SUFXcEMsa0NBQVksYUFBQyxNQUEyQjtJQVd4QyxpQ0FBVyxhQUFDLE1BQTJCO0lBV3ZDLGtDQUFZLGFBQUMsTUFBMkI7SUFVeEMsbUNBQWE7SUFXYix1Q0FBaUI7SUFVakIsdUNBQWlCO0lBV2pCLHFDQUFlO0lBWWYsMENBQW9CLGFBQ2xCLE1BQTZCO0lBWS9CLGdDQUFVLGFBQUMsTUFHVjtJQVdELG1DQUFhLGFBQUMsTUFFYjtJQVVELHVDQUFpQjtJQWFqQixzQ0FBZ0IsYUFBQyxNQUF5QjtJQVUxQyxxQ0FBZTtJQVVmLG1DQUFhO0lBV2IsNkJBQU8sYUFBQyxNQUFxQjtJQWE3Qiw0QkFBTSxhQUFDLE1BQW9CO0lBVzNCLDBDQUFvQixhQUFDLEtBQWE7SUFXbEMsMENBQW9CLGFBQUMsS0FBaUI7SUFXdEMsbUNBQWEsYUFBQyxLQUFhO0lBVzNCLG1DQUFhLGFBQUMsS0FBaUI7MEJBSy9CLGdEQUF1Qjs7Ozs7OzBCQUV2Qiw0Q0FBbUI7Ozs7OzswQkFFbkIsMkNBQWtCOzs7Ozs7MEJBRWxCLDhDQUFxQjs7Ozs7OzBCQUVyQiw4Q0FBcUI7Ozs7OzswQkFFckIsMENBQWlCOzs7Ozs7MEJBRWpCLG9EQUEyQjs7Ozs7OzBCQUUzQixvREFBMkI7Ozs7OzswQkFFM0Isb0RBQTJCOzs7Ozs7MEJBRTNCLGtEQUF5Qjs7Ozs7OzBCQUV6QixrREFBeUI7Ozs7OzswQkFFekIsaURBQXdCOzs7Ozs7Ozs7Ozs7O0lBcm9CYixXQUFXO1FBRHZCLFVBQVUsRUFBRTtPQUNBLFdBQVc7c0JBOWF4QjtFQThhaUMsaUJBQWlCO1NBQXJDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBDb3Jkb3ZhLFxuICBDb3Jkb3ZhUHJvcGVydHksXG4gIElvbmljTmF0aXZlUGx1Z2luLFxuICBQbHVnaW5cbn0gZnJvbSAnQGlvbmljLW5hdGl2ZS9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuLyogQXZhaWxhYmxlIHN0YXR1cyBvZiBkZXZpY2UgKi9cbmV4cG9ydCB0eXBlIFN0YXR1cyA9XG4gIHwgJ3NjYW5TdGFydGVkJ1xuICB8ICdzY2FuU3RvcHBlZCdcbiAgfCAnc2NhblJlc3VsdCdcbiAgfCAnY29ubmVjdGVkJ1xuICB8ICdkaXNjb25uZWN0ZWQnXG4gIHwgJ2JvbmRpbmcnXG4gIHwgJ2JvbmRlZCdcbiAgfCAndW5ib25kZWQnXG4gIHwgJ2Nsb3NlZCdcbiAgfCAnc2VydmljZXMnXG4gIHwgJ2Rpc2NvdmVyZWQnXG4gIHwgJ2NoYXJhY3RlcmlzdGljcydcbiAgfCAnZGVzY3JpcHRvcnMnXG4gIHwgJ3JlYWQnXG4gIHwgJ3N1YnNjcmliZWQnXG4gIHwgJ3Vuc3Vic2NyaWJlZCdcbiAgfCAnc3Vic2NyaWJlZFJlc3VsdCdcbiAgfCAnd3JpdHRlbidcbiAgfCAncmVhZERlc2NyaXB0b3InXG4gIHwgJ3dyaXRlRGVzY3JpcHRvcidcbiAgfCAncnNzaSdcbiAgfCAnbXR1J1xuICB8ICdjb25uZWN0aW9uUHJpb3JpdHlSZXF1ZXN0ZWQnXG4gIHwgJ2VuYWJsZWQnXG4gIHwgJ2Rpc2FibGVkJ1xuICB8ICdyZWFkUmVxdWVzdGVkJ1xuICB8ICd3cml0ZVJlcXVlc3RlZCdcbiAgfCAnbXR1Q2hhbmdlZCdcbiAgfCAnbm90aWZ5UmVhZHknXG4gIHwgJ25vdGlmeVNlbnQnXG4gIHwgJ3NlcnZpY2VBZGRlZCdcbiAgfCAnc2VydmljZVJlbW92ZWQnXG4gIHwgJ2FsbFNlcnZpY2VzUmVtb3ZlZCdcbiAgfCAnYWR2ZXJ0aXNpbmdTdGFydGVkJ1xuICB8ICdhZHZlcnRpc2luZ1N0b3BwZWQnXG4gIHwgJ3Jlc3BvbmRlZCdcbiAgfCAnbm90aWZpZWQnO1xuXG4vKiogQXZhaWxhYmxlIGNvbm5lY3Rpb24gcHJpb3JpdGllcyAqL1xuZXhwb3J0IHR5cGUgQ29ubmVjdGlvblByaW9yaXR5ID0gJ2xvdycgfCAnYmFsYW5jZWQnIHwgJ2hpZ2gnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFBhcmFtcyB7XG4gIC8qKiBUaGUgYWRkcmVzcy9pZGVudGlmaWVyIHByb3ZpZGVkIGJ5IHRoZSBzY2FuJ3MgcmV0dXJuIG9iamVjdCAqL1xuICBhZGRyZXNzOiBzdHJpbmc7XG4gIC8qKiBUaGUgc2VydmljZSdzIElEICovXG4gIHNlcnZpY2U6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbml0UGVyaXBoZXJhbFBhcmFtcyB7XG4gIC8qKiBTaG91bGQgdXNlciBiZSBwcm9tcHRlZCB0byBlbmFibGUgQmx1ZXRvb3RoICovXG4gIHJlcXVlc3Q/OiBib29sZWFuO1xuICAvKiBBIHVuaXF1ZSBzdHJpbmcgdG8gaWRlbnRpZnkgeW91ciBhcHAuIEJsdWV0b290aCBDZW50cmFsIGJhY2tncm91bmQgbW9kZSBpcyByZXF1aXJlZCB0byB1c2UgdGhpcywgYnV0IGJhY2tncm91bmQgbW9kZSBkb2Vzbid0IHNlZW0gdG8gcmVxdWlyZSBzcGVjaWZ5aW5nIHRoZSByZXN0b3JlS2V5ICovXG4gIHJlc3RvcmVLZXk/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW5pdFBhcmFtcyBleHRlbmRzIEluaXRQZXJpcGhlcmFsUGFyYW1zIHtcbiAgLyoqIFNob3VsZCBjaGFuZ2UgaW4gQmx1ZXRvb3RoIHN0YXR1cyBub3RpZmljYXRpb25zIGJlIHNlbnQgKi9cbiAgc3RhdHVzUmVjZWl2ZXI/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNjYW5QYXJhbXMge1xuICAvKiBBbiBhcnJheSBvZiBzZXJ2aWNlIElEcyB0byBmaWx0ZXIgdGhlIHNjYW4gb3IgZW1wdHkgYXJyYXkgLyBudWxsLiBUaGlzIHBhcmFtZXRlciBpcyBub3Qgc3VwcG9ydGVkIG9uIFdpbmRvd3MgcGxhdGZvcm0geWV0ICovXG4gIHNlcnZpY2VzPzogc3RyaW5nW107XG4gIC8qIFRydWUvZmFsc2UgdG8gYWxsb3cgZHVwbGljYXRlIGFkdmVydGlzZW1lbnQgcGFja2V0cywgZGVmYXVsdHMgdG8gZmFsc2UgKGlPUykqL1xuICBhbGxvd0R1cGxpY2F0ZXM/OiBib29sZWFuO1xuICAvKiogRGVmYXVsdHMgdG8gTG93IFBvd2VyLiBBdmFpbGFibGUgZnJvbSBBUEkyMSAvIEFQSSAyMyAoQW5kcm9pZCkgKi9cbiAgc2Nhbk1vZGU/OiBCbHVldG9vdGhTY2FuTW9kZTtcbiAgLyoqIERlZmF1bHRzIHRvIEFnZ3Jlc3NpdmUuIEF2YWlsYWJsZSBmcm9tIEFQSTIzIChBbmRyb2lkKSAqL1xuICBtYXRjaE1vZGU/OiBCbHVldG9vdGhNYXRjaE1vZGU7XG4gIC8qKiBEZWZhdWx0cyB0byBPbmUgQWR2ZXJ0aXNlbWVudC4gQXZhaWxhYmxlIGZyb20gQVBJMjMgKEFuZHJvaWQpICovXG4gIG1hdGNoTnVtPzogQmx1ZXRvb3RoTWF0Y2hOdW07XG4gIC8qKiBEZWZhdWx0cyB0byBBbGwgTWF0Y2hlcy4gQXZhaWxhYmxlIGZyb20gQVBJMjEgLyBBUEkgMjMuIChBbmRyb2lkKSAqL1xuICBjYWxsYmFja1R5cGU/OiBCbHVldG9vdGhDYWxsYmFja1R5cGU7XG4gIC8qKiBUcnVlL2ZhbHNlIHRvIHNob3cgb25seSBjb25uZWN0YWJsZSBkZXZpY2VzLCByYXRoZXIgdGhhbiBhbGwgZGV2aWNlcyBldmVyIHNlZW4sIGRlZmF1bHRzIHRvIGZhbHNlIChXaW5kb3dzKSAqL1xuICBpc0Nvbm5lY3RhYmxlPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOb3RpZnlQYXJhbXMge1xuICAvKiogU2VydmljZSdzIFVVSUQgKi9cbiAgc2VydmljZTogc3RyaW5nO1xuICAvKiogQ2hhcmFjdGVyaXN0aWMncyBVVUlEICovXG4gIGNoYXJhY3RlcmlzdGljOiBzdHJpbmc7XG4gIC8qKiBCYXNlNjQgZW5jb2RlZCBzdHJpbmcsIG51bWJlciBvciBzdHJpbmcgKi9cbiAgdmFsdWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXNwb25kUGFyYW1zIHtcbiAgLyoqIFRoaXMgaW50ZWdlciB2YWx1ZSB3aWxsIGJlIGluY3JlbWVudGVkIGV2ZXJ5IHJlYWQvd3JpdGVSZXF1ZXN0ZWQgKi9cbiAgcmVxdWVzdElkOiBudW1iZXI7XG4gIC8qKiBiYXNlNjQgc3RyaW5nICovXG4gIHZhbHVlOiBzdHJpbmc7XG4gIC8qKiBub3QgZG9jdW1lbnRlZCAqL1xuICBvZmZzZXQ/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhcmFjdGVyaXN0aWNQYXJhbXMgZXh0ZW5kcyBQYXJhbXMge1xuICAvKiogQW4gYXJyYXkgb2YgY2hhcmFjdGVyaXN0aWMgSURzIHRvIGRpc2NvdmVyIG9yIGVtcHR5IGFycmF5IC8gbnVsbCAqL1xuICBjaGFyYWN0ZXJpc3RpY3M/OiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEZXNjcmlwdG9yUGFyYW1zIGV4dGVuZHMgUGFyYW1zIHtcbiAgLyoqIFRoZSBjaGFyYWN0ZXJpc3RpYydzIElEICovXG4gIGNoYXJhY3RlcmlzdGljOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3BlcmF0aW9uRGVzY3JpcHRvclBhcmFtcyBleHRlbmRzIERlc2NyaXB0b3JQYXJhbXMge1xuICAvKiogVGhlIGRlc2NyaXB0b3IncyBJRCAqL1xuICBkZXNjcmlwdG9yOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV3JpdGVDaGFyYWN0ZXJpc3RpY1BhcmFtcyBleHRlbmRzIERlc2NyaXB0b3JQYXJhbXMge1xuICAvKiBCYXNlNjQgZW5jb2RlZCBzdHJpbmcgKi9cbiAgdmFsdWU6IHN0cmluZztcbiAgLyogU2V0IHRvIFwibm9SZXNwb25zZVwiIHRvIGVuYWJsZSB3cml0ZSB3aXRob3V0IHJlc3BvbnNlLCBhbGwgb3RoZXIgdmFsdWVzIHdpbGwgd3JpdGUgbm9ybWFsbHkuICovXG4gIHR5cGU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV3JpdGVEZXNjcmlwdG9yUGFyYW1zIGV4dGVuZHMgRGVzY3JpcHRvclBhcmFtcyB7XG4gIC8qKiBUaGUgZGVzY3JpcHRvcidzIElEICovXG4gIGRlc2NyaXB0b3I6IHN0cmluZztcbiAgLyoqIEJhc2U2NCBlbmNvZGVkIHN0cmluZywgbnVtYmVyIG9yIHN0cmluZyAqL1xuICB2YWx1ZTogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBBZHZlcnRpc2luZ1BhcmFtcyA9IEFkdmVydGlzaW5nUGFyYW1zQW5kcm9pZCB8IEFkdmVydGlzaW5nUGFyYW1zSU9TO1xuZXhwb3J0IHR5cGUgQWR2ZXJ0aXNlTW9kZSA9ICdiYWxhbmNlZCcgfCAnbG93TGF0ZW5jeScgfCAnbG93UG93ZXInO1xuZXhwb3J0IHR5cGUgVHhQb3dlckxldmVsID0gJ2hpZ2gnIHwgJ2xvdycgfCAndWx0cmFsb3cnIHwgJ21lZGl1bSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWR2ZXJ0aXNpbmdQYXJhbXNBbmRyb2lkIHtcbiAgLyoqIFNlcnZpY2UgVVVJRCBvbiBBbmRyb2lkICovXG4gIHNlcnZpY2U6IHN0cmluZztcbiAgLyoqIG5vdCBkb2N1bWVudGVkICovXG4gIG1vZGU/OiBBZHZlcnRpc2VNb2RlO1xuICAvKiogbm90IGRvY3VtZW50ZWQgKi9cbiAgY29ubmVjdGFibGU/OiBib29sZWFuO1xuICAvKiogbm90IGRvY3VtZW50ZWQgKi9cbiAgdGltZW91dD86IG51bWJlcjtcbiAgLyoqIG5vdCBkb2N1bWVudGVkICovXG4gIHR4UG93ZXJMZXZlbD86IFR4UG93ZXJMZXZlbDtcbiAgLyoqIG5vdCBkb2N1bWVudGVkICovXG4gIG1hbnVmYWN0dXJlcklkPzogbnVtYmVyO1xuICAvKiogbm90IGRvY3VtZW50ZWQgKi9cbiAgbWFudWZhY3R1cmVyU3BlY2lmaWNEYXRhPzogYW55O1xuICAvKiogbm90IGRvY3VtZW50ZWQgKi9cbiAgaW5jbHVkZURldmljZU5hbWU6IGJvb2xlYW47XG4gIC8qKiBub3QgZG9jdW1lbnRlZCAqL1xuICBpbmNsdWRlVHhQb3dlckxldmVsOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFkdmVydGlzaW5nUGFyYW1zSU9TIHtcbiAgLyoqIEFycmF5IG9mIHNlcnZpY2UgVVVJRHMgb24gaU9TICovXG4gIHNlcnZpY2VzOiBzdHJpbmdbXTtcbiAgLyoqIGRldmljZSdzIG5hbWUgKi9cbiAgbmFtZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21tb25JbmZvIHtcbiAgLyoqIFRoZSBkZXZpY2UncyBkaXNwbGF5IG5hbWUgKi9cbiAgbmFtZTogc3RyaW5nO1xuICAvKiogVGhlIGRldmljZSdzIGFkZHJlc3MgLyBpZGVudGlmaWVyIGZvciBjb25uZWN0aW5nIHRvIHRoZSBvYmplY3QgKi9cbiAgYWRkcmVzczogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERldmljZUluZm8gZXh0ZW5kcyBDb21tb25JbmZvIHtcbiAgLyoqIERldmljZSdzIHN0YXR1cyAqL1xuICBzdGF0dXM6IFN0YXR1cztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSU1NJIGV4dGVuZHMgRGV2aWNlSW5mbyB7XG4gIC8qKiBzaWduYWwgc3RyZW5ndGggKi9cbiAgcnNzaTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1UVSBleHRlbmRzIERldmljZUluZm8ge1xuICAvKiBtdHUgdmFsdWUgKi9cbiAgbXR1OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQm9uZGVkU3RhdHVzIGV4dGVuZHMgQ29tbW9uSW5mbyB7XG4gIC8qIEJvbmRlZCBzdGF0dXMqL1xuICBpc0JvbmRlZDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcmV2Q29ubmVjdGlvblN0YXR1cyBleHRlbmRzIENvbW1vbkluZm8ge1xuICAvKiogRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGRldmljZSB3YXMgY29ubmVjdGVkICovXG4gIHdhc0Nvbm5lY3RlZDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDdXJyQ29ubmVjdGlvblN0YXR1cyBleHRlbmRzIENvbW1vbkluZm8ge1xuICAvKiogRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGRldmljZSBpcyBjb25uZWN0ZWQgKi9cbiAgaXNDb25uZWN0ZWQ6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGlzY292ZXJTdGF0dXMgZXh0ZW5kcyBDb21tb25JbmZvIHtcbiAgLyoqIERldGVybWluZSB3aGV0aGVyIHRoZSBkZXZpY2UncyBjaGFyYWN0ZXJpc3RpY3MgYW5kIGRlc2NyaXB0b3JzIGhhdmUgYmVlbiBkaXNjb3ZlcmVkICovXG4gIGlzRGlzY292ZXJlZDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTY2FuU3RhdHVzIGV4dGVuZHMgRGV2aWNlSW5mbyB7XG4gIC8qKiBzaWduYWwgc3RyZW5ndGggKi9cbiAgcnNzaTogbnVtYmVyO1xuICAvKipcbiAgICogYWR2ZXJ0aXNlbWVudCBkYXRhIGluIGVuY29kZWQgc3RyaW5nIG9mIGJ5dGVzLCB1c2UgYmx1ZXRvb3RobGUuZW5jb2RlZFN0cmluZ1RvQnl0ZXMoKSAoQW5kcm9pZClcbiAgICogYWR2ZXJ0aXNlbWVudCBoYXNoIHdpdGggdGhlIGtleXMgKGlPUylcbiAgICogZW1wdHkgKFdpbmRvd3MpXG4gICAqL1xuICBhZHZlcnRpc2VtZW50OlxuICAgIHwge1xuICAgICAgICAvKiogQW4gYXJyYXkgb2Ygc2VydmljZSBVVUlEcyAqL1xuICAgICAgICBzZXJ2aWNlVXVpZHM6IHN0cmluZ1tdO1xuICAgICAgICAvKiogQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBuYW1lIG9mIHRoZSBtYW51ZmFjdHVyZXIgb2YgdGhlIGRldmljZSAqL1xuICAgICAgICBtYW51ZmFjdHVyZXJEYXRhOiBzdHJpbmc7XG4gICAgICAgIC8qKiBBIG51bWJlciBjb250YWluaW5nIHRoZSB0cmFuc21pdCBwb3dlciBvZiBhIHBlcmlwaGVyYWwgKi9cbiAgICAgICAgdHhQb3dlckxldmVsOiBudW1iZXI7XG4gICAgICAgIC8qKiBBbiBhcnJheSBvZiBvbmUgb3IgbW9yZSBDQlVVSUQgb2JqZWN0cywgcmVwcmVzZW50aW5nIENCU2VydmljZSBVVUlEcyB0aGF0IHdlcmUgZm91bmQgaW4gdGhlIOKAnG92ZXJmbG934oCdIGFyZWEgb2YgdGhlIGFkdmVydGlzZW1lbnQgZGF0YSAqL1xuICAgICAgICBvdmVyZmxvd1NlcnZpY2VVdWlkczogc3RyaW5nW107XG4gICAgICAgIC8qKiBBIGJvb2xlYW4gdmFsdWUgdGhhdCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgYWR2ZXJ0aXNpbmcgZXZlbnQgdHlwZSBpcyBjb25uZWN0YWJsZSAqL1xuICAgICAgICBpc0Nvbm5lY3RhYmxlOiBib29sZWFuO1xuICAgICAgICAvKiogQW4gYXJyYXkgb2Ygb25lIG9yIG1vcmUgQ0JVVUlEIG9iamVjdHMsIHJlcHJlc2VudGluZyBDQlNlcnZpY2UgVVVJRHMgKi9cbiAgICAgICAgc29saWNpdGVkU2VydmljZVV1aWRzOiBzdHJpbmdbXTtcbiAgICAgICAgLyogQSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcgc2VydmljZS1zcGVjaWZpYyBhZHZlcnRpc2VtZW50IGRhdGEgKi9cbiAgICAgICAgc2VydmljZURhdGE6IGFueTtcbiAgICAgICAgLyogQSBzdHJpbmcgY29udGFpbmluZyB0aGUgbG9jYWwgbmFtZSBvZiBhIHBlcmlwaGVyYWwgKi9cbiAgICAgICAgbG9jYWxOYW1lOiBzdHJpbmc7XG4gICAgICB9XG4gICAgfCBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZSB7XG4gIC8qKiBTZXJ2aWNlJ3MgdXVpZCAqL1xuICB1dWlkOiBzdHJpbmc7XG4gIC8qKiBBcnJheSBvZiBjaGFyYWN0ZXJpc3RpY3MgKi9cbiAgY2hhcmFjdGVyaXN0aWNzOiBDaGFyYWN0ZXJpc3RpY1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENoYXJhY3RlcmlzdGljIHtcbiAgLyogQXJyYXkgb2YgZGVzY3JpcHRvcnMgKi9cbiAgZGVzY3JpcHRvcnM/OiBEZXNjcmlwdG9yW107XG4gIC8qKiAgQ2hhcmFjdGVyaXN0aWMncyB1dWlkICovXG4gIHV1aWQ6IHN0cmluZztcbiAgLyoqXG4gICAqICBDaGFyYWN0ZXJpc3RpYydzIHByb3BlcnRpZXNcbiAgICogIElmIHRoZSBwcm9wZXJ0eSBpcyBkZWZpbmVkIGFzIGEga2V5LCB0aGUgY2hhcmFjdGVyaXN0aWMgaGFzIHRoYXQgcHJvcGVydHlcbiAgICovXG4gIHByb3BlcnRpZXM/OiB7XG4gICAgd3JpdGU/OiBib29sZWFuO1xuICAgIGJyb2FkY2FzdD86IGJvb2xlYW47XG4gICAgZXh0ZW5kZWRQcm9wcz86IGJvb2xlYW47XG4gICAgd3JpdGVXaXRob3V0UmVzcG9uc2U/OiBib29sZWFuO1xuICAgIHdyaXRlTm9SZXNwb25zZT86IGJvb2xlYW47XG4gICAgc2lnbmVkV3JpdGU/OiBib29sZWFuO1xuICAgIHJlYWQ/OiBib29sZWFuO1xuICAgIG5vdGlmeT86IGJvb2xlYW47XG4gICAgaW5kaWNhdGU/OiBib29sZWFuO1xuICAgIGF1dGhlbnRpY2F0ZWRTaWduZWRXcml0ZXM/OiBib29sZWFuO1xuICAgIG5vdGlmeUVuY3J5cHRpb25SZXF1aXJlZD86IGJvb2xlYW47XG4gICAgaW5kaWNhdGVFbmNyeXB0aW9uUmVxdWlyZWQ/OiBib29sZWFuO1xuICB9O1xuICAvKipcbiAgICogIElmIHRoZSBwZXJtaXNzaW9uIGlzIGRlZmluZWQgYXMgYSBrZXksIHRoZSBjaGFyYWN0ZXIgaGFzIHRoYXQgcGVybWlzc2lvblxuICAgKi9cbiAgcGVybWlzc2lvbnM/OiB7XG4gICAgcmVhZD86IGJvb2xlYW47XG4gICAgcmVhZEVuY3J5cHRlZD86IGJvb2xlYW47XG4gICAgcmVhZEVuY3J5cHRlZE1JVE0/OiBib29sZWFuO1xuICAgIHdyaXRlPzogYm9vbGVhbjtcbiAgICB3cml0ZVNpZ25lZD86IGJvb2xlYW47XG4gICAgd3JpdGVTaWduZWRNSVRNPzogYm9vbGVhbjtcbiAgICB3cml0ZUVuY3J5cHRlZE1JVE0/OiBib29sZWFuO1xuICAgIHJlYWRFbmNyeXB0aW9uUmVxdWlyZWQ/OiBib29sZWFuO1xuICAgIHdyaXRlRW5jcnlwdGlvblJlcXVpcmVkPzogYm9vbGVhbjtcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEZXNjcmlwdG9yIHtcbiAgdXVpZDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERldmljZSBleHRlbmRzIERldmljZUluZm8ge1xuICAvKiogRGV2aWNlJ3Mgc2VydmljZXMgKi9cbiAgc2VydmljZXM6IFNlcnZpY2VbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlcyBleHRlbmRzIERldmljZUluZm8ge1xuICAvKiogQXJyYXkgb2Ygc2VydmljZSBVVUlEUyAqL1xuICBzZXJ2aWNlczogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVzY3JpcHRvcnMgZXh0ZW5kcyBEZXZpY2VJbmZvIHtcbiAgLyoqIENoYXJhY3RlcmlzdGljJ3MgVVVJRCAqL1xuICBjaGFyYWN0ZXJpc3RpYzogc3RyaW5nO1xuICAvKiogU2VydmljZSdzIFVVSUQgKi9cbiAgc2VydmljZTogc3RyaW5nO1xuICAvKiBBcnJheSBvZiBkZXNjcmlwdG9yIFVVSURzICovXG4gIGRlc2NyaXB0b3JzOiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcGVyYXRpb25SZXN1bHQgZXh0ZW5kcyBEZXZpY2VJbmZvIHtcbiAgLyoqIENoYXJhY3RlcmlzdGljIFVVSUQgKi9cbiAgY2hhcmFjdGVyaXN0aWM6IHN0cmluZztcbiAgLyoqIFNlcnZpY2UncyBVVUlEICovXG4gIHNlcnZpY2U6IHN0cmluZztcbiAgLyoqIEJhc2U2NCBlbmNvZGVkIHN0cmluZyBvZiBieXRlcyAqL1xuICB2YWx1ZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVuc3Vic2NyaWJlUmVzdWx0IGV4dGVuZHMgRGV2aWNlSW5mbyB7XG4gIC8qKiBDaGFyYWN0ZXJpc3RpYyBVVUlEICovXG4gIGNoYXJhY3RlcmlzdGljOiBzdHJpbmc7XG4gIC8qKiBTZXJ2aWNlJ3MgVVVJRCAqL1xuICBzZXJ2aWNlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVzY3JpcHRvclJlc3VsdCBleHRlbmRzIE9wZXJhdGlvblJlc3VsdCB7XG4gIGRlc2NyaXB0b3I6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDaGFyYWN0ZXJpc3RpY3MgZXh0ZW5kcyBEZXZpY2VJbmZvIHtcbiAgLyoqIFNlcnZpY2UncyBpZCAqL1xuICBzZXJ2aWNlOiBzdHJpbmc7XG4gIC8qIEFycmF5IG9mIGNoYXJhY3RlcmlzdGljIG9iamVjdHMqL1xuICBjaGFyYWN0ZXJpc3RpY3M6IENoYXJhY3RlcmlzdGljW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW5pdGlhbGl6ZVJlc3VsdCB7XG4gIC8qKiBEZXZpY2UncyBzdGF0dXMgKi9cbiAgc3RhdHVzOiBTdGF0dXM7XG4gIC8qKiBUaGUgYWRkcmVzcy9pZGVudGlmaWVyIHByb3ZpZGVkIGJ5IHRoZSBzY2FuJ3MgcmV0dXJuIG9iamVjdCAqL1xuICBhZGRyZXNzOiBzdHJpbmc7XG4gIC8qKiBTZXJ2aWNlJ3MgVVVJRCAqL1xuICBzZXJ2aWNlOiBzdHJpbmc7XG4gIC8qKiBDaGFyYWN0ZXJpc3RpYyBVVUlEICovXG4gIGNoYXJhY3RlcmlzdGljOiBzdHJpbmc7XG4gIC8qKiBUaGlzIGludGVnZXIgdmFsdWUgd2lsbCBiZSBpbmNyZW1lbnRlZCBldmVyeSByZWFkL3dyaXRlUmVxdWVzdGVkICovXG4gIHJlcXVlc3RJZDogbnVtYmVyO1xuICAvKiogT2Zmc2V0IHZhbHVlICovXG4gIG9mZnNldDogbnVtYmVyO1xuICAvKiogbXR1IHZhbHVlICovXG4gIG10dTogbnVtYmVyO1xuICAvKiogQmFzZTY0IGVuY29kZWQgc3RyaW5nIG9mIGJ5dGVzICovXG4gIHZhbHVlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBlbnVtIEJsdWV0b290aFNjYW5Nb2RlIHtcbiAgU0NBTl9NT0RFX09QUE9SVFVOSVNUSUMgPSAtMSxcbiAgU0NBTl9NT0RFX0xPV19QT1dFUiA9IDAsXG4gIFNDQU5fTU9ERV9CQUxBTkNFRCA9IDEsXG4gIFNDQU5fTU9ERV9MT1dfTEFURU5DWSA9IDJcbn1cblxuZXhwb3J0IGVudW0gQmx1ZXRvb3RoTWF0Y2hNb2RlIHtcbiAgTUFUQ0hfTU9ERV9BR1JFU1NJVkUgPSAxLFxuICBNQVRDSF9NT0RFX1NUSUNLWSA9IDJcbn1cblxuZXhwb3J0IGVudW0gQmx1ZXRvb3RoTWF0Y2hOdW0ge1xuICBNQVRDSF9OVU1fT05FX0FEVkVSVElTRU1FTlQgPSAxLFxuICBNQVRDSF9OVU1fRkVXX0FEVkVSVElTRU1FTlQgPSAyLFxuICBNQVRDSF9OVU1fTUFYX0FEVkVSVElTRU1FTlQgPSAzXG59XG5cbmV4cG9ydCBlbnVtIEJsdWV0b290aENhbGxiYWNrVHlwZSB7XG4gIENBTExCQUNLX1RZUEVfQUxMX01BVENIRVMgPSAxLFxuICBDQUxMQkFDS19UWVBFX0ZJUlNUX01BVENIID0gMixcbiAgQ0FMTEJBQ0tfVFlQRV9NQVRDSF9MT1NUID0gNFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVycm9yIHtcbiAgY29kZTogbnVtYmVyO1xuICBtZXNzYWdlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWRhcHRlckluZm8ge1xuICBuYW1lOiBzdHJpbmc7XG4gIGFkZHJlc3M6IHN0cmluZztcbiAgaXNJbml0aWFsaXplZDogYm9vbGVhbjtcbiAgaXNFbmFibGVkOiBib29sZWFuO1xuICBpc1NjYW5uaW5nOiBib29sZWFuO1xuICBpc0Rpc2NvdmVyYWJsZTogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBAbmFtZSBCbHVldG9vdGhMRVxuICogQGRlc2NyaXB0aW9uXG4gKiBUaGlzIHBsdWdpbiBoYXMgdGhlIG1vc3QgY29tcGxldGUgaW1wbGVtZW50YXRpb24gZm9yIGludGVyYWN0aW5nIHdpdGggQmx1ZXRvb3RoIExFIGRldmljZXMgb24gQW5kcm9pZCwgaU9TIGFuZCBwYXJ0aWFsbHkgV2luZG93cy5cbiAqIEl0J3MgYSB3cmFwIGFyb3VuZCBbcmFuZGR1c2luZy9jb3Jkb3ZhLXBsdWdpbi1ibHVldG9vdGhsZV0oaHR0cHM6Ly9naXRodWIuY29tL3JhbmRkdXNpbmcvY29yZG92YS1wbHVnaW4tYmx1ZXRvb3RobGUvYmxvYi9tYXN0ZXIvcmVhZG1lLm1kKSBjb3Jkb3ZhIHBsdWdpbiBmb3IgSW9uaWMuXG4gKiBJdCBzdXBwb3J0cyBwZXJpcGhlcmFsICoqYW5kKiogY2VudHJhbCBtb2RlcyBhbmQgY292ZXJzIG1vc3Qgb2YgdGhlIEFQSSBtZXRob2RzIGF2YWlsYWJsZSBvbiBBbmRyb2lkIGFuZCBpT1MuXG4gKlxuICogQHVzYWdlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBCbHVldG9vdGhMRSB9IGZyb20gJ0Bpb25pYy1uYXRpdmUvYmx1ZXRvb3RoLWxlL25neCc7XG4gKlxuICpcbiAqIGNvbnN0cnVjdG9yKHB1YmxpYyBibHVldG9vdGhsZTogQmx1ZXRvb3RoTEUsIHB1YmxpYyBwbHQ6IFBsYXRmb3JtKSB7XG4gKlxuICogIHRoaXMucGx0LnJlYWR5KCkudGhlbigocmVhZHlTb3VyY2UpID0+IHtcbiAqXG4gKiAgICBjb25zb2xlLmxvZygnUGxhdGZvcm0gcmVhZHkgZnJvbScsIHJlYWR5U291cmNlKTtcbiAqXG4gKiAgICB0aGlzLmJsdWV0b290aGxlLmluaXRpYWxpemUoKS50aGVuKGJsZSA9PiB7XG4gKiAgICAgIGNvbnNvbGUubG9nKCdibGUnLCBibGUuc3RhdHVzKSAvLyBsb2dzICdlbmFibGVkJ1xuICogICAgfSk7XG4gKlxuICogICB9KTtcbiAqIH1cbiAqXG4gKiBgYGBcbiAqXG4gKi9cbkBQbHVnaW4oe1xuICBwbHVnaW5OYW1lOiAnQmx1ZXRvb3RoTEUnLFxuICBwbHVnaW46ICdjb3Jkb3ZhLXBsdWdpbi1ibHVldG9vdGhsZScsIC8vIG5wbSBwYWNrYWdlIG5hbWUsIGV4YW1wbGU6IGNvcmRvdmEtcGx1Z2luLWNhbWVyYVxuICBwbHVnaW5SZWY6ICdibHVldG9vdGhsZScsIC8vIHRoZSB2YXJpYWJsZSByZWZlcmVuY2UgdG8gY2FsbCB0aGUgcGx1Z2luLCBleGFtcGxlOiBuYXZpZ2F0b3IuZ2VvbG9jYXRpb25cbiAgcmVwbzogJ2h0dHBzOi8vZ2l0aHViLmNvbS9yYW5kZHVzaW5nL2NvcmRvdmEtcGx1Z2luLWJsdWV0b290aGxlJywgLy8gdGhlIGdpdGh1YiByZXBvc2l0b3J5IFVSTCBmb3IgdGhlIHBsdWdpblxuICBpbnN0YWxsOiAnaW9uaWMgY29yZG92YSBwbHVnaW4gYWRkIGNvcmRvdmEtcGx1Z2luLWJsdWV0b290aGxlJywgLy8gT1BUSU9OQUwgaW5zdGFsbCBjb21tYW5kLCBpbiBjYXNlIHRoZSBwbHVnaW4gcmVxdWlyZXMgdmFyaWFibGVzXG4gIGluc3RhbGxWYXJpYWJsZXM6IFtdLCAvLyBPUFRJT05BTCB0aGUgcGx1Z2luIHJlcXVpcmVzIHZhcmlhYmxlc1xuICBwbGF0Zm9ybXM6IFsnQW5kcm9pZCcsICdpT1MnXSAvLyBBcnJheSBvZiBwbGF0Zm9ybXMgc3VwcG9ydGVkLCBleGFtcGxlOiBbJ0FuZHJvaWQnLCAnaU9TJ11cbn0pXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQmx1ZXRvb3RoTEUgZXh0ZW5kcyBJb25pY05hdGl2ZVBsdWdpbiB7XG4gIC8qKlxuICAgKiBAbmFtZSBpbml0aWFsaXplXG4gICAqIEluaXRpYWxpemUgQmx1ZXRvb3RoIG9uIHRoZSBkZXZpY2VcbiAgICogQHBhcmFtIHtJbml0UGFyYW1zfSBbcGFyYW1zXVxuICAgKiBAcmV0dXJucyB7KE9ic2VydmFibGU8eyBzdGF0dXM6ICdlbmFibGVkJyB8ICdkaXNhYmxlZCd9Pil9IFRoZSBjYWxsYmFjayB0aGF0IGlzIHBhc3NlZCBpbml0aWFsaXplIHN0YXR1cyAoZW5hYmxlZC9kaXNhYmxlZClcbiAgICovXG4gIEBDb3Jkb3ZhKHsgc3VjY2Vzc0luZGV4OiAwLCBlcnJvckluZGV4OiAyLCBvYnNlcnZhYmxlOiB0cnVlIH0pXG4gIGluaXRpYWxpemUocGFyYW1zPzogSW5pdFBhcmFtcyk6IE9ic2VydmFibGU8eyBzdGF0dXM6ICdlbmFibGVkJyB8ICdkaXNhYmxlZCcgfT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbmFtZSBlbmFibGUgKEFuZHJvaWQpXG4gICAqIEVuYWJsZSBCbHVldG9vdGggb24gdGhlIGRldmljZS4gQW5kcm9pZCBzdXBwb3J0IG9ubHlcbiAgICogQHJldHVybnMgdm9pZFxuICAgKi9cbiAgQENvcmRvdmEoeyBjYWxsYmFja09yZGVyOiAncmV2ZXJzZScsIHN5bmM6IHRydWUgfSlcbiAgZW5hYmxlKCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbmFtZSBkaXNhYmxlIChBbmRyb2lkKVxuICAgKiBEaXNhYmxlIEJsdWV0b290aCBvbiB0aGUgZGV2aWNlLiBBbmRyb2lkIHN1cHBvcnQgb25seVxuICAgKiBAcmV0dXJucyB2b2lkXG4gICAqL1xuICBAQ29yZG92YSh7IGNhbGxiYWNrT3JkZXI6ICdyZXZlcnNlJywgc3luYzogdHJ1ZSB9KVxuICBkaXNhYmxlKCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbmFtZSBnZXRBZGFwdGVySW5mbyAoQW5kcm9pZClcbiAgICogUmV0cmlldmUgdXNlZnVsIGluZm9ybWF0aW9uIHN1Y2ggYXMgdGhlIGFkZHJlc3MsIG5hbWUsIGFuZCB2YXJpb3VzIHN0YXRlcyAoaW5pdGlhbGl6ZWQsIGVuYWJsZWQsIHNjYW5uaW5nLCBkaXNjb3ZlcmFibGUpLlxuICAgKiBUaGlzIGNhbiBiZSB2ZXJ5IHVzZWZ1bCB3aGVuIHRoZSBnZW5lcmFsIHN0YXRlIG9mIHRoZSBhZGFwdGVyIGhhcyBiZWVuIGxvc3QsIGFuZCB3ZSB3b3VsZCBvdGhlcndpc2UgbmVlZCB0byBnbyB0aHJvdWdoIGEgc2VyaWVzIG9mIGNhbGxiYWNrcyB0byBnZXQgdGhlIGNvcnJlY3Qgc3RhdGUgKGZpcnN0IGluaXRpYWxpemVkLCB0aGVuIGVuYWJsZWQsIHRoZW4gaXNTY2FubmluZywgYW5kIHNvIGZvcnRoKS5cbiAgICogVGhlIHJlc3VsdCBvZiB0aGlzIG1ldGhvZCBhbGxvd3MgdXMgdG8gdGFrZSBidXNpbmVzcyBsb2dpYyBkZWNpc2lvbnMgd2hpbGUgYXZvaWRpbmcgYSBsYXJnZSBwYXJ0IG9mIHRoZSBjYWxsYmFjayBoZWxsLlxuICAgKiBDdXJyZW50bHkgdGhlIGRpc2NvdmVyYWJsZSBzdGF0ZSBkb2VzIG5vdCBoYXZlIGFueSByZWxldmFuY2UgYmVjYXVzZSB0aGVyZSBpcyBubyBcInNldERpc2NvdmVyYWJsZVwiIGZ1bmN0aW9uYWxpdHkgaW4gcGxhY2UuIFRoYXQgbWF5IGNoYW5nZSBpbiB0aGUgZnV0dXJlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxBZGFwdGVySW5mbz59XG4gICAqL1xuICBAQ29yZG92YSh7IGNhbGxiYWNrT3JkZXI6ICdyZXZlcnNlJyB9KVxuICBnZXRBZGFwdGVySW5mbygpOiBQcm9taXNlPEFkYXB0ZXJJbmZvPiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIHN0YXJ0U2NhblxuICAgKiBTY2FuIGZvciBCbHVldG9vdGggTEUgZGV2aWNlcy5cbiAgICogU2luY2Ugc2Nhbm5pbmcgaXMgZXhwZW5zaXZlLCBzdG9wIGFzIHNvb24gYXMgcG9zc2libGUuIFRoZSBDb3Jkb3ZhIGFwcCBzaG91bGQgdXNlIGEgdGltZXIgdG8gbGltaXQgdGhlIHNjYW4gaW50ZXJ2YWwuXG4gICAqIEFuZHJvaWQgQVBJID49IDIzIHJlcXVpcmVzIEFDQ0VTU19DT0FSU0VfTE9DQVRJT04gcGVybWlzc2lvbnMgdG8gZmluZCB1bnBhaXJlZCBkZXZpY2VzLlxuICAgKiBQZXJtaXNzaW9ucyBjYW4gYmUgcmVxdWVzdGVkIGJ5IHVzaW5nIHRoZSBoYXNQZXJtaXNzaW9uIGFuZCByZXF1ZXN0UGVybWlzc2lvbiBmdW5jdGlvbnMuXG4gICAqIEFuZHJvaWQgQVBJID49IDIzIGFsc28gcmVxdWlyZXMgbG9jYXRpb24gc2VydmljZXMgdG8gYmUgZW5hYmxlZC4gVXNlIGlzTG9jYXRpb25FbmFibGVkIHRvIGRldGVybWluZSB3aGV0aGVyIGxvY2F0aW9uIHNlcnZpY2VzIGFyZSBlbmFibGVkLlxuICAgKiBJZiBub3QgZW5hYmxlZCwgdXNlIHJlcXVlc3RMb2NhdGlvbiB0byBwcm9tcHQgdGhlIGxvY2F0aW9uIHNlcnZpY2VzIHNldHRpbmdzIHBhZ2UuXG4gICAqIEBwYXJhbSB7U2NhblBhcmFtc30gcGFyYW1zIFNjYW4gcGFyYW1zXG4gICAqIEByZXR1cm5zIHsoT2JzZXJ2YWJsZTwgU2NhblN0YXR1cyA+KX1cbiAgICovXG4gIEBDb3Jkb3ZhKHsgY2FsbGJhY2tPcmRlcjogJ3JldmVyc2UnLCBvYnNlcnZhYmxlOiB0cnVlIH0pXG4gIHN0YXJ0U2NhbihwYXJhbXM6IFNjYW5QYXJhbXMpOiBPYnNlcnZhYmxlPCBTY2FuU3RhdHVzID4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbmFtZSBzdG9wU2NhblxuICAgKiBTdG9wIHNjYW4gZm9yIEJsdWV0b290aCBMRSBkZXZpY2VzLiBTaW5jZSBzY2FubmluZyBpcyBleHBlbnNpdmUsIHN0b3AgYXMgc29vbiBhcyBwb3NzaWJsZVxuICAgKiBUaGUgYXBwIHNob3VsZCB1c2UgYSB0aW1lciB0byBsaW1pdCB0aGUgc2Nhbm5pbmcgdGltZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8e3N0YXR1czogJ3NjYW5TdG9wcGVkJ30+fVxuICAgKi9cbiAgQENvcmRvdmEoeyBjYWxsYmFja09yZGVyOiAncmV2ZXJzZScgfSlcbiAgc3RvcFNjYW4oKTogUHJvbWlzZTx7IHN0YXR1czogJ3NjYW5TdG9wcGVkJyB9PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIHJldHJpZXZlQ29ubmVjdGVkXG4gICAqIFJldHJpZXZlZCBwYWlyZWQgQmx1ZXRvb3RoIExFIGRldmljZXMuIEluIGlPUywgZGV2aWNlcyB0aGF0IGFyZSBcInBhaXJlZFwiIHRvIHdpbGwgbm90IHJldHVybiBkdXJpbmcgYSBub3JtYWwgc2Nhbi5cbiAgICogQ2FsbGJhY2sgaXMgXCJpbnN0YW50XCIgY29tcGFyZWQgdG8gYSBzY2FuLlxuICAgKiBAcGFyYW0ge3sgc2VydmljZXM6IHN0cmluZ1tdIH19IEFuIGFycmF5IG9mIHNlcnZpY2UgSURzIHRvIGZpbHRlciB0aGUgcmV0cmlldmFsIGJ5LiBJZiBubyBzZXJ2aWNlIElEcyBhcmUgc3BlY2lmaWVkLCBubyBkZXZpY2VzIHdpbGwgYmUgcmV0dXJuZWQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHsgZGV2aWNlczogRGV2aWNlSW5mb1tdIH0+fVxuICAgKi9cbiAgQENvcmRvdmEoeyBjYWxsYmFja09yZGVyOiAncmV2ZXJzZScgfSlcbiAgcmV0cmlldmVDb25uZWN0ZWQocGFyYW1zPzoge1xuICAgIHNlcnZpY2VzPzogc3RyaW5nW107XG4gIH0pOiBQcm9taXNlPHsgZGV2aWNlczogRGV2aWNlSW5mb1tdIH0+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQG5hbWUgYm9uZCAoQW5kcm9pZClcbiAgICogQm9uZCB3aXRoIGEgZGV2aWNlLlxuICAgKiBUaGUgZGV2aWNlIGRvZXNuJ3QgbmVlZCB0byBiZSBjb25uZWN0ZWQgdG8gaW5pdGlhdGUgYm9uZGluZy4gQW5kcm9pZCBzdXBwb3J0IG9ubHkuXG4gICAqIEBwYXJhbSB7eyBhZGRyZXNzOiBzdHJpbmcgfX0gcGFyYW1zIFRoZSBhZGRyZXNzL2lkZW50aWZpZXIgcHJvdmlkZWQgYnkgdGhlIHNjYW4ncyByZXR1cm4gb2JqZWN0XG4gICAqIEByZXR1cm5zIHsoT2JzZXJ2YWJsZTx7IHN0YXR1czogRGV2aWNlSW5mbyB9Pil9XG4gICAqIHN1Y2Nlc3M6XG4gICAqICAgIFRoZSBmaXJzdCBzdWNjZXNzIGNhbGxiYWNrIHNob3VsZCBhbHdheXMgcmV0dXJuIHdpdGggc3RhdHVzID09IGJvbmRpbmcuXG4gICAqICAgIElmIHRoZSBib25kIGlzIGNyZWF0ZWQsIHRoZSBjYWxsYmFjayB3aWxsIHJldHVybiBhZ2FpbiB3aXRoIHN0YXR1cyA9PSBib25kZWQuXG4gICAqICAgIElmIHRoZSBib25kaW5nIHBvcHVwIGlzIGNhbmNlbGVkIG9yIHRoZSB3cm9uZyBjb2RlIGlzIGVudGVyZWQsIHRoZSBjYWxsYmFjayB3aWxsIHJldHVybiBhZ2FpbiB3aXRoIHN0YXR1cyA9PSB1bmJvbmRlZC5cbiAgICogZXJyb3I6XG4gICAqICAgIFRoZSBjYWxsYmFjayB0aGF0IHdpbGwgYmUgdHJpZ2dlcmVkIHdoZW4gdGhlIGJvbmQgb3BlcmF0aW9uIGZhaWxzXG4gICAqL1xuICBAQ29yZG92YSh7IGNhbGxiYWNrT3JkZXI6ICdyZXZlcnNlJywgb2JzZXJ2YWJsZTogdHJ1ZSB9KVxuICBib25kKHBhcmFtczogeyBhZGRyZXNzOiBzdHJpbmcgfSk6IE9ic2VydmFibGU8eyBzdGF0dXM6IERldmljZUluZm8gfT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbmFtZSB1bmJvbmQgKEFuZHJvaWQpXG4gICAqIFVuYm9uZCB3aXRoIGEgZGV2aWNlLiBUaGUgZGV2aWNlIGRvZXNuJ3QgbmVlZCB0byBiZSBjb25uZWN0ZWQgdG8gaW5pdGlhdGUgYm9uZGluZy4gQW5kcm9pZCBzdXBwb3J0IG9ubHkuXG4gICAqIEBwYXJhbSB7e2FkZHJlc3M6IHN0cmluZ319IHBhcmFtcyBUaGUgYWRkcmVzcy9pZGVudGlmaWVyXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHsgc3RhdHVzOiBEZXZpY2VJbmZvIH0+fVxuICAgKiAgICBzdWNjZXNzOiBUaGUgc3VjY2VzcyBjYWxsYmFjayBzaG91bGQgYWx3YXlzIHJldHVybiB3aXRoIHN0YXR1cyA9PSB1bmJvbmRlZCwgdGhhdCBpcyBwYXNzZWQgd2l0aCBkZXZpY2Ugb2JqZWN0XG4gICAqICAgIGVycm9yOiBUaGUgY2FsbGJhY2sgdGhhdCB3aWxsIGJlIHRyaWdnZXJlZCB3aGVuIHRoZSB1bmJvbmQgb3BlcmF0aW9uIGZhaWxzXG4gICAqL1xuICBAQ29yZG92YSh7IGNhbGxiYWNrT3JkZXI6ICdyZXZlcnNlJyB9KVxuICB1bmJvbmQocGFyYW1zOiB7IGFkZHJlc3M6IHN0cmluZyB9KTogUHJvbWlzZTx7IHN0YXR1czogRGV2aWNlSW5mbyB9PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIGNvbm5lY3RcbiAgICogQ29ubmVjdCB0byBhIEJsdWV0b290aCBMRSBkZXZpY2VcbiAgICogQHBhcmFtIGNvbm5lY3RTdWNjZXNzIFRoZSBzdWNjZXNzIGNhbGxiYWNrIHRoYXQgaXMgcGFzc2VkIHdpdGggZGV2aWNlIG9iamVjdFxuICAgKiBAcGFyYW0gY29ubmVjdEVycm9yICAgVGhlIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSB0cmlnZ2VyZWQgd2hlbiB0aGUgY29ubmVjdCBvcGVyYXRpb24gZmFpbHNcbiAgICogQHBhcmFtIHBhcmFtcyAgICAgICAgIFRoZSBhZGRyZXNzL2lkZW50aWZpZXJcbiAgICpcbiAgICogQHBhcmFtIHt7YWRkcmVzczogc3RyaW5nLCBhdXRvQ29ubmVjdDogYm9vbGVhbn19IHBhcmFtc1xuICAgKiBAcmV0dXJucyB7KE9ic2VydmFibGU8eyBzdGF0dXM6IERldmljZUluZm8gfT4pfVxuICAgKiAgICBzdWNjZXNzOiBkZXZpY2Ugb2JqZWN0IHdpdGggc3RhdHVzXG4gICAqICAgIGVycm9yOiBUaGUgY2FsbGJhY2sgdGhhdCB3aWxsIGJlIHRyaWdnZXJlZCB3aGVuIHRoZSB1bmJvbmQgb3BlcmF0aW9uIGZhaWxzXG4gICAqL1xuICBAQ29yZG92YSh7IGNhbGxiYWNrT3JkZXI6ICdyZXZlcnNlJywgb2JzZXJ2YWJsZTogdHJ1ZSB9KVxuICBjb25uZWN0KHBhcmFtczoge1xuICAgIGFkZHJlc3M6IHN0cmluZztcbiAgICBhdXRvQ29ubmVjdD86IGJvb2xlYW47XG4gIH0pOiBPYnNlcnZhYmxlPCBEZXZpY2VJbmZvID4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbmFtZSByZWNvbm5lY3RcbiAgICogUmVjb25uZWN0IHRvIGEgcHJldmlvdXNseSBjb25uZWN0ZWQgQmx1ZXRvb3RoIGRldmljZVxuICAgKiBAcGFyYW0ge3thZGRyZXNzOiBzdHJpbmd9fSBwYXJhbXMgVGhlIGFkZHJlc3MvaWRlbnRpZmllclxuICAgKiBAcmV0dXJucyB7KE9ic2VydmFibGU8RGV2aWNlSW5mbz4pfVxuICAgKi9cbiAgQENvcmRvdmEoeyBjYWxsYmFja09yZGVyOiAncmV2ZXJzZScsIG9ic2VydmFibGU6IHRydWUgfSlcbiAgcmVjb25uZWN0KHBhcmFtczogeyBhZGRyZXNzOiBzdHJpbmcgfSk6IE9ic2VydmFibGU8RGV2aWNlSW5mbz4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbmFtZSBkaXNjb25uZWN0XG4gICAqIERpc2Nvbm5lY3QgZnJvbSBhIEJsdWV0b290aCBMRSBkZXZpY2UuXG4gICAqICAgICAgICAgICAgICBOb3RlOiBJdCdzIHNpbXBsZXIgdG8ganVzdCBjYWxsIGNsb3NlKCkuIFN0YXJ0aW5nIHdpdGggaU9TIDEwLCBkaXNjb25uZWN0aW5nIGJlZm9yZSBjbG9zaW5nIHNlZW1zIHJlcXVpcmVkIVxuICAgKiBAcGFyYW0ge3thZGRyZXNzOiBzdHJpbmd9fSBwYXJhbXMgVGhlIGFkZHJlc3MvaWRlbnRpZmllclxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxEZXZpY2VJbmZvPn1cbiAgICovXG4gIEBDb3Jkb3ZhKHsgY2FsbGJhY2tPcmRlcjogJ3JldmVyc2UnIH0pXG4gIGRpc2Nvbm5lY3QocGFyYW1zOiB7IGFkZHJlc3M6IHN0cmluZyB9KTogUHJvbWlzZTxEZXZpY2VJbmZvPiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIGNsb3NlXG4gICAqIENsb3NlL2Rpc3Bvc2UgYSBCbHVldG9vdGggTEUgZGV2aWNlLlxuICAgKiBQcmlvciB0byAyLjcuMCwgeW91IG5lZWRlZCB0byBkaXNjb25uZWN0IHRvIHRoZSBkZXZpY2UgYmVmb3JlIGNsb3NpbmcsIGJ1dCB0aGlzIGlzIG5vIGxvbmdlciB0aGUgY2FzZS5cbiAgICogU3RhcnRpbmcgd2l0aCBpT1MgMTAsIGRpc2Nvbm5lY3RpbmcgYmVmb3JlIGNsb3Npbmcgc2VlbXMgcmVxdWlyZWQhXG4gICAqIEBwYXJhbSB7eyBhZGRyZXNzOiBzdHJpbmcgfX0gcGFyYW1zIFRoZSBhZGRyZXNzL2lkZW50aWZpZXJcbiAgICogQHJldHVybnMge1Byb21pc2U8RGV2aWNlSW5mbz59XG4gICAqL1xuICBAQ29yZG92YSh7IGNhbGxiYWNrT3JkZXI6ICdyZXZlcnNlJyB9KVxuICBjbG9zZShwYXJhbXM6IHsgYWRkcmVzczogc3RyaW5nIH0pOiBQcm9taXNlPERldmljZUluZm8+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQG5hbWUgZGlzY292ZXJcbiAgICogRGlzY292ZXIgYWxsIHRoZSBkZXZpY2VzIHNlcnZpY2VzLCBjaGFyYWN0ZXJpc3RpY3MgYW5kIGRlc2NyaXB0b3JzLlxuICAgKiBEb2Vzbid0IG5lZWQgdG8gYmUgY2FsbGVkIGFnYWluIGFmdGVyIGRpc2Nvbm5lY3RpbmcgYW5kIHRoZW4gcmVjb25uZWN0aW5nLlxuICAgKiBJZiB1c2luZyBpT1MsIHlvdSBzaG91bGRuJ3QgdXNlIGRpc2NvdmVyIGFuZCBzZXJ2aWNlcy9jaGFyYWN0ZXJpc3RpY3MvZGVzY3JpcHRvcnMgb24gdGhlIHNhbWUgZGV2aWNlLlxuICAgKiBUaGVyZSBzZWVtcyB0byBiZSBhbiBpc3N1ZSB3aXRoIGNhbGxpbmcgZGlzY292ZXIgb24gaU9TOCBkZXZpY2VzLCBzbyB1c2Ugd2l0aCBjYXV0aW9uLlxuICAgKiBPbiBzb21lIEFuZHJvaWQgdmVyc2lvbnMsIHRoZSBkaXNjb3ZlcmVkIHNlcnZpY2VzIG1heSBiZSBjYWNoZWQgZm9yIGEgZGV2aWNlLlxuICAgKiBTdWJzZXF1ZW50IGRpc2NvdmVyIGV2ZW50cyB3aWxsIG1ha2UgdXNlIG9mIHRoaXMgY2FjaGUuXG4gICAqIElmIHlvdXIgZGV2aWNlJ3Mgc2VydmljZXMgY2hhbmdlLCBzZXQgdGhlIGNsZWFyQ2FjaGUgcGFyYW1ldGVyIHRvIGZvcmNlIEFuZHJvaWQgdG8gcmUtZGlzY292ZXIgc2VydmljZXMuXG4gICAqIEBwYXJhbSB7eyBhZGRyZXNzOiBzdHJpbmcsIGNsZWFyQ2FjaGU6IGJvb2xlYW4gfX0gcGFyYW1zIFRoZSBhZGRyZXNzL2lkZW50aWZpZXJcbiAgICogQHJldHVybnMge1Byb21pc2U8RGV2aWNlPn1cbiAgICogICAgc3VjY2VzczogZGV2aWNlIG9iamVjdCAoY29udGFpbnMgYXJyYXkgb2Ygc2VydmljZSBvYmplY3RzKVxuICAgKiAgICBlcnJvcjogVGhlIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSB0cmlnZ2VyZWQgd2hlbiB0aGUgdW5ib25kIG9wZXJhdGlvbiBmYWlsc1xuICAgKi9cbiAgQENvcmRvdmEoeyBjYWxsYmFja09yZGVyOiAncmV2ZXJzZScgfSlcbiAgZGlzY292ZXIocGFyYW1zOiB7XG4gICAgYWRkcmVzczogc3RyaW5nO1xuICAgIGNsZWFyQ2FjaGU/OiBib29sZWFuO1xuICB9KTogUHJvbWlzZTxEZXZpY2U+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQG5hbWUgc2VydmljZXMgKGlPUylcbiAgICogRGlzY292ZXIgdGhlIGRldmljZSdzIHNlcnZpY2VzLlxuICAgKiBOb3QgcHJvdmlkaW5nIGFuIGFycmF5IG9mIHNlcnZpY2VzIHdpbGwgcmV0dXJuIGFsbCBzZXJ2aWNlcyBhbmQgdGFrZSBsb25nZXIgdG8gZGlzY292ZXIuIGlPUyBzdXBwb3J0IG9ubHkuXG4gICAqIEBwYXJhbSB7e2FkZHJlc3M6IHN0cmluZywgc2VydmljZXM6IHN0cmluZ1tdfX0gcGFyYW1zXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFNlcnZpY2VzPn1cbiAgICovXG4gIEBDb3Jkb3ZhKHsgY2FsbGJhY2tPcmRlcjogJ3JldmVyc2UnIH0pXG4gIHNlcnZpY2VzKHBhcmFtczoge1xuICAgIGFkZHJlc3M6IHN0cmluZztcbiAgICBzZXJ2aWNlcz86IHN0cmluZ1tdO1xuICB9KTogUHJvbWlzZTxTZXJ2aWNlcz4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbmFtZSBjaGFyYWN0ZXJpc3RpY3MgKGlPUylcbiAgICogRGlzY292ZXIgdGhlIHNlcnZpY2UncyBjaGFyYWN0ZXJpc3RpY3MuXG4gICAqIE5vdCBwcm92aWRpbmcgYW4gYXJyYXkgb2YgY2hhcmFjdGVyaXN0aWNzIHdpbGwgcmV0dXJuIGFsbCBjaGFyYWN0ZXJpc3RpY3MgYW5kIHRha2UgbG9uZ2VyIHRvIGRpc2NvdmVyLiBpT1Mgc3VwcG9ydCBvbmx5LlxuICAgKiBAcGFyYW0ge0NoYXJhY3RlcmlzdGljUGFyYW1zfSBwYXJhbXMgQ2hhcmFjdGVyaXN0aWMgcGFyYW1zXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHsgY2hhcmFjdGVyaXN0aWNzOiBDaGFyYWN0ZXJpc3RpY3MgfT59IFRoZSBzZXJ2aWNlIGlkIGFuZCBhbiBBcnJheSBvZiBjaGFyYWN0ZXJpc3RpY3NcbiAgICovXG4gIEBDb3Jkb3ZhKHsgY2FsbGJhY2tPcmRlcjogJ3JldmVyc2UnIH0pXG4gIGNoYXJhY3RlcmlzdGljcyhcbiAgICBwYXJhbXM6IENoYXJhY3RlcmlzdGljUGFyYW1zXG4gICk6IFByb21pc2U8eyBjaGFyYWN0ZXJpc3RpY3M6IENoYXJhY3RlcmlzdGljcyB9PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIGRlc2NyaXB0b3JzIChpT1MpXG4gICAqIERpc2NvdmVyIHRoZSBjaGFyYWN0ZXJpc3RpYydzIGRlc2NyaXB0b3JzLiBpT1Mgc3VwcG9ydCBvbmx5LlxuICAgKiBAcGFyYW0ge0Rlc2NyaXB0b3JQYXJhbXN9IHBhcmFtc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx7IGRlc2NyaXB0b3JzOiBEZXNjcmlwdG9ycyB9Pn1cbiAgICovXG4gIEBDb3Jkb3ZhKHsgY2FsbGJhY2tPcmRlcjogJ3JldmVyc2UnIH0pXG4gIGRlc2NyaXB0b3JzKHBhcmFtczogRGVzY3JpcHRvclBhcmFtcyk6IFByb21pc2U8eyBkZXNjcmlwdG9yczogRGVzY3JpcHRvcnMgfT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbmFtZSByZWFkXG4gICAqIFJlYWQgYSBwYXJ0aWN1bGFyIHNlcnZpY2UncyBjaGFyYWN0ZXJpc3RpYyBvbmNlXG4gICAqIEBwYXJhbSB7RGVzY3JpcHRvclBhcmFtc30gcGFyYW1zXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPE9wZXJhdGlvblJlc3VsdD59XG4gICAqL1xuICBAQ29yZG92YSh7IGNhbGxiYWNrT3JkZXI6ICdyZXZlcnNlJyB9KVxuICByZWFkKHBhcmFtczogRGVzY3JpcHRvclBhcmFtcyk6IFByb21pc2U8T3BlcmF0aW9uUmVzdWx0PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIHN1YnNjcmliZVxuICAgKiBTdWJzY3JpYmUgdG8gYSBwYXJ0aWN1bGFyIHNlcnZpY2UncyBjaGFyYWN0ZXJpc3RpYy5cbiAgICogT25jZSBhIHN1YnNjcmlwdGlvbiBpcyBubyBsb25nZXIgbmVlZGVkLCBleGVjdXRlIHVuc3Vic2NyaWJlIGluIGEgc2ltaWxhciBmYXNoaW9uLlxuICAgKiBUaGUgQ2xpZW50IENvbmZpZ3VyYXRpb24gZGVzY3JpcHRvciB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgd3JpdHRlbiB0byBlbmFibGUgbm90aWZpY2F0aW9uL2luZGljYXRpb24gYmFzZWQgb24gdGhlIGNoYXJhY3RlcmlzdGljJ3MgcHJvcGVydGllcy5cbiAgICogQHBhcmFtIHtEZXNjcmlwdG9yUGFyYW1zfSBwYXJhbXNcbiAgICogQHJldHVybnMge09ic2VydmFibGU8T3BlcmF0aW9uUmVzdWx0Pn1cbiAgICovXG4gIEBDb3Jkb3ZhKHsgY2FsbGJhY2tPcmRlcjogJ3JldmVyc2UnLCBvYnNlcnZhYmxlOiB0cnVlIH0pXG4gIHN1YnNjcmliZShwYXJhbXM6IERlc2NyaXB0b3JQYXJhbXMpOiBPYnNlcnZhYmxlPE9wZXJhdGlvblJlc3VsdD4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbmFtZSB1bnN1YnNjcmliZVxuICAgKiBVbnN1YnNjcmliZSB0byBhIHBhcnRpY3VsYXIgc2VydmljZSdzIGNoYXJhY3RlcmlzdGljLlxuICAgKiBAcGFyYW0ge0Rlc2NyaXB0b3JQYXJhbXN9IHBhcmFtc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxVbnN1YnNjcmliZVJlc3VsdD59XG4gICAqL1xuICBAQ29yZG92YSh7IGNhbGxiYWNrT3JkZXI6ICdyZXZlcnNlJyB9KVxuICB1bnN1YnNjcmliZShwYXJhbXM6IERlc2NyaXB0b3JQYXJhbXMpOiBQcm9taXNlPFVuc3Vic2NyaWJlUmVzdWx0PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIHdyaXRlIChsaW1pdGF0aW9uIG9uIGlPUywgcmVhZCBiZWxvdylcbiAgICogV3JpdGUgYSBwYXJ0aWN1bGFyIHNlcnZpY2UncyBjaGFyYWN0ZXJpc3RpY1xuICAgKiBOb3RlOiBubyBjYWxsYmFjayB3aWxsIG9jY3VyIG9uIHdyaXRlIHdpdGhvdXQgcmVzcG9uc2Ugb24gaU9TLlxuICAgKiBAcGFyYW0ge1dyaXRlQ2hhcmFjdGVyaXN0aWNQYXJhbXN9IHBhcmFtc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxPcGVyYXRpb25SZXN1bHQ+fVxuICAgKi9cbiAgQENvcmRvdmEoeyBjYWxsYmFja09yZGVyOiAncmV2ZXJzZScgfSlcbiAgd3JpdGUocGFyYW1zOiBXcml0ZUNoYXJhY3RlcmlzdGljUGFyYW1zKTogUHJvbWlzZTxPcGVyYXRpb25SZXN1bHQ+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQG5hbWUgd3JpdGUgKGxpbWl0YXRpb24gb24gaU9TLCByZWFkIGJlbG93KVxuICAgKiBXcml0ZSBRdWljayAvIFF1ZXVlLCB1c2UgdGhpcyBtZXRob2QgdG8gcXVpY2tseSBleGVjdXRlIHdyaXRlIHdpdGhvdXQgcmVzcG9uc2UgY29tbWFuZHMgd2hlbiB3cml0aW5nIG1vcmUgdGhhbiAyMCBieXRlcyBhdCBhIHRpbWUuXG4gICAqIE5vdGU6IG5vIGNhbGxiYWNrIHdpbGwgb2NjdXIgb24gd3JpdGUgd2l0aG91dCByZXNwb25zZSBvbiBpT1MuXG4gICAqIEBwYXJhbSB7V3JpdGVDaGFyYWN0ZXJpc3RpY1BhcmFtc30gcGFyYW1zXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPE9wZXJhdGlvblJlc3VsdD59XG4gICAqL1xuICBAQ29yZG92YSh7IGNhbGxiYWNrT3JkZXI6ICdyZXZlcnNlJyB9KVxuICB3cml0ZVEocGFyYW1zOiBXcml0ZUNoYXJhY3RlcmlzdGljUGFyYW1zKTogUHJvbWlzZTxPcGVyYXRpb25SZXN1bHQ+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQG5hbWUgcmVhZERlc2NyaXB0b3JcbiAgICogUmVhZCBhIHBhcnRpY3VsYXIgY2hhcmFjdGVyaXN0J3MgZGVzY3JpcHRvclxuICAgKiBAcGFyYW0ge09wZXJhdGlvbkRlc2NyaXB0b3JQYXJhbXN9IHBhcmFtc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxEZXNjcmlwdG9yUmVzdWx0Pn1cbiAgICovXG4gIEBDb3Jkb3ZhKHsgY2FsbGJhY2tPcmRlcjogJ3JldmVyc2UnIH0pXG4gIHJlYWREZXNjcmlwdG9yKHBhcmFtczogT3BlcmF0aW9uRGVzY3JpcHRvclBhcmFtcyk6IFByb21pc2U8RGVzY3JpcHRvclJlc3VsdD4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbmFtZSB3cml0ZURlc2NyaXB0b3JcbiAgICogV3JpdGUgYSBwYXJ0aWN1bGFyIGNoYXJhY3RlcmlzdGljJ3MgZGVzY3JpcHRvci4gVW5hYmxlIHRvIHdyaXRlIGNoYXJhY3RlcmlzdGljIGNvbmZpZ3VyYXRpb24gZGlyZWN0bHkgdG8ga2VlcCBpbiBsaW5lIHdpdGggaU9TIGltcGxlbWVudGF0aW9uLlxuICAgKiBJbnN0ZWFkIHVzZSBzdWJzY3JpYmUvdW5zdWJzY3JpYmUsIHdoaWNoIHdpbGwgYXV0b21hdGljYWxseSBlbmFibGUvZGlzYWJsZSBub3RpZmljYXRpb24uXG4gICAqIEBwYXJhbSB7V3JpdGVEZXNjcmlwdG9yUGFyYW1zfSBwYXJhbXNcbiAgICogQHJldHVybnMge1Byb21pc2U8RGVzY3JpcHRvclJlc3VsdD59XG4gICAqL1xuICBAQ29yZG92YSh7IGNhbGxiYWNrT3JkZXI6ICdyZXZlcnNlJyB9KVxuICB3cml0ZURlc2NyaXB0b3IocGFyYW1zOiBXcml0ZURlc2NyaXB0b3JQYXJhbXMpOiBQcm9taXNlPERlc2NyaXB0b3JSZXN1bHQ+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQG5hbWUgcnNzaVxuICAgKiBSZWFkIFJTU0kgb2YgYSBjb25uZWN0ZWQgZGV2aWNlLiBSU1NJIGlzIGFsc28gcmV0dXJuZWQgd2l0aCBzY2FubmluZy5cbiAgICogQHBhcmFtIHt7IGFkZHJlc3M6IHN0cmluZyB9fSBwYXJhbXNcbiAgICogQHJldHVybnMge1Byb21pc2U8IFJTU0kgPn1cbiAgICovXG4gIEBDb3Jkb3ZhKHsgY2FsbGJhY2tPcmRlcjogJ3JldmVyc2UnIH0pXG4gIHJzc2kocGFyYW1zOiB7IGFkZHJlc3M6IHN0cmluZyB9KTogUHJvbWlzZTwgUlNTSSA+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQG5hbWUgbXR1IChBbmRyb2lkLCBBbmRyb2lkIDUrKVxuICAgKiBTZXQgTVRVIG9mIGEgY29ubmVjdGVkIGRldmljZS4gQW5kcm9pZCBvbmx5LlxuICAgKiBAcGFyYW0ge3sgYWRkcmVzczogc3RyaW5nLCBtdHU6IG51bWJlciB9fSBwYXJhbXNcbiAgICogQHJldHVybnMge1Byb21pc2U8IE1UVSA+fVxuICAgKi9cbiAgQENvcmRvdmEoeyBjYWxsYmFja09yZGVyOiAncmV2ZXJzZScgfSlcbiAgbXR1KHBhcmFtczogeyBhZGRyZXNzOiBzdHJpbmc7IG10dT86IG51bWJlciB9KTogUHJvbWlzZTwgTVRVID4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbmFtZSByZXF1ZXN0Q29ubmVjdGlvblByaW9yaXR5IChBbmRyb2lkLCBBbmRyb2lkIDUrKVxuICAgKiBSZXF1ZXN0IGEgY2hhbmdlIGluIHRoZSBjb25uZWN0aW9uIHByaW9yaXR5IHRvIGltcHJvdmUgdGhyb3VnaHB1dCB3aGVuIHRyYW5zZmVyIGxhcmdlIGFtb3VudHMgb2YgZGF0YSB2aWEgQkxFLlxuICAgKiBBbmRyb2lkIHN1cHBvcnQgb25seS4gaU9TIHdpbGwgcmV0dXJuIGVycm9yLlxuICAgKiBAcGFyYW0ge3sgYWRkcmVzczogc3RyaW5nLCBjb25uZWN0aW9uUHJpb3JpdHk6IENvbm5lY3Rpb25Qcmlvcml0eSB9fSBwYXJhbXNcbiAgICogQHJldHVybnMge1Byb21pc2U8RGV2aWNlSW5mbz59XG4gICAqL1xuICBAQ29yZG92YSh7IGNhbGxiYWNrT3JkZXI6ICdyZXZlcnNlJyB9KVxuICByZXF1ZXN0Q29ubmVjdGlvblByaW9yaXR5KHBhcmFtczoge1xuICAgIGFkZHJlc3M6IHN0cmluZztcbiAgICBjb25uZWN0aW9uUHJpb3JpdHk6IENvbm5lY3Rpb25Qcmlvcml0eTtcbiAgfSk6IFByb21pc2U8RGV2aWNlSW5mbz4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbmFtZSBpc0luaXRpYWxpemVkXG4gICAqIERldGVybWluZSB3aGV0aGVyIHRoZSBhZGFwdGVyIGlzIGluaXRpYWxpemVkLiBObyBlcnJvciBjYWxsYmFjay4gUmV0dXJucyB0cnVlIG9yIGZhbHNlXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHsgaXNJbml0aWFsaXplZDogYm9vbGVhbiB9Pn1cbiAgICovXG4gIEBDb3Jkb3ZhKHsgY2FsbGJhY2tPcmRlcjogJ3JldmVyc2UnIH0pXG4gIGlzSW5pdGlhbGl6ZWQoKTogUHJvbWlzZTx7IGlzSW5pdGlhbGl6ZWQ6IGJvb2xlYW4gfT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbmFtZSBpc0VuYWJsZWRcbiAgICogRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGFkYXB0ZXIgaXMgZW5hYmxlZC4gTm8gZXJyb3IgY2FsbGJhY2tcbiAgICogQHJldHVybnMge1Byb21pc2U8eyBpc0VuYWJsZWQ6IGJvb2xlYW4gfT59XG4gICAqL1xuICBAQ29yZG92YSh7IGNhbGxiYWNrT3JkZXI6ICdyZXZlcnNlJyB9KVxuICBpc0VuYWJsZWQoKTogUHJvbWlzZTx7IGlzRW5hYmxlZDogYm9vbGVhbiB9PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIGlzU2Nhbm5pbmdcbiAgICogRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGFkYXB0ZXIgaXMgc2Nhbm5pbmcuIE5vIGVycm9yIGNhbGxiYWNrLiBSZXR1cm5zIHRydWUgb3IgZmFsc2VcbiAgICogQHJldHVybnMge1Byb21pc2U8eyBpc1NjYW5uaW5nOiBib29sZWFuIH0+fVxuICAgKi9cbiAgQENvcmRvdmEoeyBjYWxsYmFja09yZGVyOiAncmV2ZXJzZScgfSlcbiAgaXNTY2FubmluZygpOiBQcm9taXNlPHsgaXNTY2FubmluZzogYm9vbGVhbiB9PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIGlzQm9uZGVkIChBbmRyb2lkKVxuICAgKiBEZXRlcm1pbmUgd2hldGhlciB0aGUgZGV2aWNlIGlzIGJvbmRlZCBvciBub3QsIG9yIGVycm9yIGlmIG5vdCBpbml0aWFsaXplZC4gQW5kcm9pZCBzdXBwb3J0IG9ubHkuXG4gICAqIEBwYXJhbSB7eyBhZGRyZXNzOiBzdHJpbmcgfX0gcGFyYW1zXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPEJvbmRlZFN0YXR1cz59XG4gICAqL1xuICBAQ29yZG92YSh7IGNhbGxiYWNrT3JkZXI6ICdyZXZlcnNlJyB9KVxuICBpc0JvbmRlZChwYXJhbXM6IHsgYWRkcmVzczogc3RyaW5nIH0pOiBQcm9taXNlPEJvbmRlZFN0YXR1cz4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbmFtZSB3YXNDb25uZWN0ZWRcbiAgICogRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGRldmljZSB3YXMgY29ubmVjdGVkLCBvciBlcnJvciBpZiBub3QgaW5pdGlhbGl6ZWQuXG4gICAqIEBwYXJhbSB7eyBhZGRyZXNzOiBzdHJpbmcgfX0gcGFyYW1zXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFByZXZDb25uZWN0aW9uU3RhdHVzPn1cbiAgICovXG4gIEBDb3Jkb3ZhKHsgY2FsbGJhY2tPcmRlcjogJ3JldmVyc2UnIH0pXG4gIHdhc0Nvbm5lY3RlZChwYXJhbXM6IHsgYWRkcmVzczogc3RyaW5nIH0pOiBQcm9taXNlPFByZXZDb25uZWN0aW9uU3RhdHVzPiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIGlzQ29ubmVjdGVkXG4gICAqIERldGVybWluZSB3aGV0aGVyIHRoZSBkZXZpY2UgaXMgY29ubmVjdGVkLCBvciBlcnJvciBpZiBub3QgaW5pdGlhbGl6ZWQgb3IgbmV2ZXIgY29ubmVjdGVkIHRvIGRldmljZVxuICAgKiBAcGFyYW0ge3sgYWRkcmVzczogc3RyaW5nIH19IHBhcmFtc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDdXJyQ29ubmVjdGlvblN0YXR1cz59XG4gICAqL1xuICBAQ29yZG92YSh7IGNhbGxiYWNrT3JkZXI6ICdyZXZlcnNlJyB9KVxuICBpc0Nvbm5lY3RlZChwYXJhbXM6IHsgYWRkcmVzczogc3RyaW5nIH0pOiBQcm9taXNlPEN1cnJDb25uZWN0aW9uU3RhdHVzPiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIGlzRGlzY292ZXJlZFxuICAgKiBEZXRlcm1pbmUgd2hldGhlciB0aGUgZGV2aWNlJ3MgY2hhcmFjdGVyaXN0aWNzIGFuZCBkZXNjcmlwdG9ycyBoYXZlIGJlZW4gZGlzY292ZXJlZCwgb3IgZXJyb3IgaWYgbm90IGluaXRpYWxpemVkIG9yIG5vdCBjb25uZWN0ZWQgdG8gZGV2aWNlLlxuICAgKiBAcGFyYW0ge3sgYWRkcmVzczogc3RyaW5nIH19IHBhcmFtc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxEaXNjb3ZlclN0YXR1cz59XG4gICAqL1xuICBAQ29yZG92YSh7IGNhbGxiYWNrT3JkZXI6ICdyZXZlcnNlJyB9KVxuICBpc0Rpc2NvdmVyZWQocGFyYW1zOiB7IGFkZHJlc3M6IHN0cmluZyB9KTogUHJvbWlzZTxEaXNjb3ZlclN0YXR1cz4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbmFtZSBoYXNQZXJtaXNzaW9uICh1c2VmdWwgb25seSBmb3IgQW5kcm9pZCA2KyAvIEFQSSAyMylcbiAgICogRGV0ZXJtaW5lIHdoZXRoZXIgY29hcnNlIGxvY2F0aW9uIHByaXZpbGVnZXMgYXJlIGdyYW50ZWQgc2luY2Ugc2Nhbm5pbmcgZm9yIHVucGFpcmVkIGRldmljZXMgcmVxdWlyZXMgaXQgaW4gQW5kcm9pZCBBUEkgMjNcbiAgICogQHJldHVybnMge1Byb21pc2U8eyBoYXNQZXJtaXNzaW9uOiBib29sZWFuIH0+fVxuICAgKi9cbiAgQENvcmRvdmEoeyBjYWxsYmFja09yZGVyOiAncmV2ZXJzZScgfSlcbiAgaGFzUGVybWlzc2lvbigpOiBQcm9taXNlPHsgaGFzUGVybWlzc2lvbjogYm9vbGVhbiB9PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIHJlcXVlc3RQZXJtaXNzaW9uICh1c2VmdWwgb25seSBmb3IgQW5kcm9pZCA2KyAvIEFQSSAyMylcbiAgICogUmVxdWVzdCBjb2Fyc2UgbG9jYXRpb24gcHJpdmlsZWdlcyBzaW5jZSBzY2FubmluZyBmb3IgdW5wYWlyZWQgZGV2aWNlcyByZXF1aXJlcyBpdCBpbiBBbmRyb2lkIEFQSSAyMy5cbiAgICogV2lsbCByZXR1cm4gYW4gZXJyb3IgaWYgY2FsbGVkIG9uIGlPUyBvciBBbmRyb2lkIHZlcnNpb25zIHByaW9yIHRvIDYuMC5cbiAgICogQHJldHVybnMge1Byb21pc2U8eyByZXF1ZXN0UGVybWlzc2lvbjogYm9vbGVhbiB9Pn1cbiAgICovXG4gIEBDb3Jkb3ZhKHsgY2FsbGJhY2tPcmRlcjogJ3JldmVyc2UnIH0pXG4gIHJlcXVlc3RQZXJtaXNzaW9uKCk6IFByb21pc2U8eyByZXF1ZXN0UGVybWlzc2lvbjogYm9vbGVhbiB9PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIGlzTG9jYXRpb25FbmFibGVkICh1c2VmdWwgb25seSBmb3IgQW5kcm9pZCA2KyAvIEFQSSAyMylcbiAgICogRGV0ZXJtaW5lIGlmIGxvY2F0aW9uIHNlcnZpY2VzIGFyZSBlbmFibGVkIG9yIG5vdC4gTG9jYXRpb24gU2VydmljZXMgYXJlIHJlcXVpcmVkIHRvIGZpbmQgZGV2aWNlcyBpbiBBbmRyb2lkIEFQSSAyM1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx7IGlzTG9jYXRpb25FbmFibGVkOiBib29sZWFuIH0+fVxuICAgKi9cbiAgQENvcmRvdmEoeyBjYWxsYmFja09yZGVyOiAncmV2ZXJzZScgfSlcbiAgaXNMb2NhdGlvbkVuYWJsZWQoKTogUHJvbWlzZTx7IGlzTG9jYXRpb25FbmFibGVkOiBib29sZWFuIH0+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQG5hbWUgcmVxdWVzdExvY2F0aW9uICh1c2VmdWwgb25seSBmb3IgQW5kcm9pZCA2KyAvIEFQSSAyMylcbiAgICogUHJvbXB0IGxvY2F0aW9uIHNlcnZpY2VzIHNldHRpbmdzIHBhZ2VzLiByZXF1ZXN0TG9jYXRpb24gcHJvcGVydHkgcmV0dXJucyB3aGV0aGVyIGxvY2F0aW9uIHNlcnZpY2VzIGFyZSBlbmFibGVkIG9yIGRpc2FibGVkLlxuICAgKiBMb2NhdGlvbiBTZXJ2aWNlcyBhcmUgcmVxdWlyZWQgdG8gZmluZCBkZXZpY2VzIGluIEFuZHJvaWQgQVBJIDIzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx7IHJlcXVlc3RMb2NhdGlvbjogYm9vbGVhbiB9Pn1cbiAgICovXG4gIEBDb3Jkb3ZhKHsgY2FsbGJhY2tPcmRlcjogJ3JldmVyc2UnIH0pXG4gIHJlcXVlc3RMb2NhdGlvbigpOiBQcm9taXNlPHsgcmVxdWVzdExvY2F0aW9uOiBib29sZWFuIH0+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQG5hbWUgaW5pdGlhbGl6ZVBlcmlwaGVyYWxcbiAgICogSW5pdGlhbGl6ZSBCbHVldG9vdGggb24gdGhlIGRldmljZS4gTXVzdCBiZSBjYWxsZWQgYmVmb3JlIGFueXRoaW5nIGVsc2UuXG4gICAqIENhbGxiYWNrIHdpbGwgY29udGludW91c2x5IGJlIHVzZWQgd2hlbmV2ZXIgQmx1ZXRvb3RoIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQuXG4gICAqIEBwYXJhbSB7SW5pdFBlcmlwaGVyYWxQYXJhbXN9IFtwYXJhbXNdXG4gICAqIEByZXR1cm5zIHtPYnNlcnZhYmxlPEluaXRpYWxpemVSZXN1bHQ+fVxuICAgKi9cbiAgQENvcmRvdmEoeyBjYWxsYmFja09yZGVyOiAncmV2ZXJzZScsIG9ic2VydmFibGU6IHRydWUgfSlcbiAgaW5pdGlhbGl6ZVBlcmlwaGVyYWwoXG4gICAgcGFyYW1zPzogSW5pdFBlcmlwaGVyYWxQYXJhbXNcbiAgKTogT2JzZXJ2YWJsZTxJbml0aWFsaXplUmVzdWx0PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIGFkZFNlcnZpY2VcbiAgICogQWRkIGEgc2VydmljZSB3aXRoIGNoYXJhY3RlcmlzdGljcyBhbmQgZGVzY3JpcHRvcnMuIElmIG1vcmUgdGhhbiBvbmUgc2VydmljZSBpcyBhZGRlZCwgYWRkIHRoZW0gc2VxdWVudGlhbGx5XG4gICAqIEBwYXJhbSB7eyBzZXJ2aWNlOiBzdHJpbmcsIGNoYXJhY3RlcmlzdGljczogQ2hhcmFjdGVyaXN0aWNbXSB9fSBwYXJhbXNcbiAgICogQHJldHVybnMge1Byb21pc2U8eyBzZXJ2aWNlOiBzdHJpbmcsIHN0YXR1czogU3RhdHVzIH0+fVxuICAgKi9cbiAgQENvcmRvdmEoeyBjYWxsYmFja09yZGVyOiAncmV2ZXJzZScgfSlcbiAgYWRkU2VydmljZShwYXJhbXM6IHtcbiAgICBzZXJ2aWNlOiBzdHJpbmc7XG4gICAgY2hhcmFjdGVyaXN0aWNzOiBDaGFyYWN0ZXJpc3RpY1tdO1xuICB9KTogUHJvbWlzZTx7IHNlcnZpY2U6IHN0cmluZzsgc3RhdHVzOiBTdGF0dXMgfT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbmFtZSByZW1vdmVTZXJ2aWNlXG4gICAqIFJlbW92ZSBhIHNlcnZpY2VcbiAgICogQHBhcmFtIHt7IHNlcnZpY2U6IHN0cmluZyB9fSBwYXJhbXNcbiAgICogQHJldHVybnMge1Byb21pc2U8eyBzZXJ2aWNlOiBzdHJpbmcsIHN0YXR1czogU3RhdHVzIH0+fVxuICAgKi9cbiAgQENvcmRvdmEoeyBjYWxsYmFja09yZGVyOiAncmV2ZXJzZScgfSlcbiAgcmVtb3ZlU2VydmljZShwYXJhbXM6IHtcbiAgICBzZXJ2aWNlOiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPHsgc2VydmljZTogc3RyaW5nOyBzdGF0dXM6IFN0YXR1cyB9PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIHJlbW92ZUFsbFNlcnZpY2VzXG4gICAqIFJlbW92ZSBhbGwgc2VydmljZXNcbiAgICogQHJldHVybnMge1Byb21pc2U8eyBzdGF0dXM6IFN0YXR1cyB9Pn1cbiAgICovXG4gIEBDb3Jkb3ZhKHsgY2FsbGJhY2tPcmRlcjogJ3JldmVyc2UnIH0pXG4gIHJlbW92ZUFsbFNlcnZpY2VzKCk6IFByb21pc2U8eyBzdGF0dXM6IFN0YXR1cyB9PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIHN0YXJ0QWR2ZXJ0aXNpbmcgKGRpZmZlcmVudCBiZWhhdmlvciBvbiBBbmRyb2lkL2lPUywgcmVhZCBiZWxvdylcbiAgICogU3RhcnQgYWR2ZXJ0aXNpbmcgYXMgYSBCTEUgZGV2aWNlLlxuICAgKiBOb3RlOiBUaGlzIG5lZWRzIHRvIGJlIGltcHJvdmVkIHNvIHNlcnZpY2VzIGNhbiBiZSB1c2VkIGZvciBib3RoIEFuZHJvaWQgYW5kIGlPUy5cbiAgICogT24gaU9TLCB0aGUgYWR2ZXJ0aXNpbmcgZGV2aWNlcyBsaWtlcyB0byByZW5hbWUgaXRzZWxmIGJhY2sgdG8gdGhlIG5hbWUgb2YgdGhlIGRldmljZSwgaS5lLiBSYW5kJyBpUGhvbmVcbiAgICogQHBhcmFtIHtBZHZlcnRpc2luZ1BhcmFtc30gcGFyYW1zXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHsgc3RhdHVzOiBTdGF0dXMgfT59XG4gICAqL1xuICBAQ29yZG92YSh7IGNhbGxiYWNrT3JkZXI6ICdyZXZlcnNlJyB9KVxuICBzdGFydEFkdmVydGlzaW5nKHBhcmFtczogQWR2ZXJ0aXNpbmdQYXJhbXMpOiBQcm9taXNlPHsgc3RhdHVzOiBTdGF0dXMgfT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbmFtZSBzdG9wQWR2ZXJ0aXNpbmdcbiAgICogU3RvcCBhZHZlcnRpc2luZ1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx7IHN0YXR1czogU3RhdHVzIH0+fVxuICAgKi9cbiAgQENvcmRvdmEoeyBjYWxsYmFja09yZGVyOiAncmV2ZXJzZScgfSlcbiAgc3RvcEFkdmVydGlzaW5nKCk6IFByb21pc2U8eyBzdGF0dXM6IFN0YXR1cyB9PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIGlzQWR2ZXJ0aXNpbmdcbiAgICogRGV0ZXJtaW5lIGlmIGFwcCBpcyBhZHZlcnRpc2luZyBvciBub3QuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHsgc3RhdHVzOiBib29sZWFuIH0+fVxuICAgKi9cbiAgQENvcmRvdmEoeyBjYWxsYmFja09yZGVyOiAncmV2ZXJzZScgfSlcbiAgaXNBZHZlcnRpc2luZygpOiBQcm9taXNlPHsgc3RhdHVzOiBib29sZWFuIH0+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQG5hbWUgcmVzcG9uZFxuICAgKiBSZXNwb25kIHRvIGEgcmVhZCBvciB3cml0ZSByZXF1ZXN0XG4gICAqIEBwYXJhbSB7UmVzcG9uZFBhcmFtc30gcGFyYW1zXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHsgc3RhdHVzOiBTdGF0dXMgfT59XG4gICAqL1xuICBAQ29yZG92YSh7IGNhbGxiYWNrT3JkZXI6ICdyZXZlcnNlJyB9KVxuICByZXNwb25kKHBhcmFtczogUmVzcG9uZFBhcmFtcyk6IFByb21pc2U8eyBzdGF0dXM6IFN0YXR1cyB9PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIG5vdGlmeVxuICAgKiBVcGRhdGUgYSB2YWx1ZSBmb3IgYSBzdWJzY3JpcHRpb24uIEN1cnJlbnRseSBhbGwgc3Vic2NyaWJlZCBkZXZpY2VzIHdpbGwgcmVjZWl2ZSB1cGRhdGUuXG4gICAqIERldmljZSBzcGVjaWZpYyB1cGRhdGVzIHdpbGwgYmUgYWRkZWQgaW4gdGhlIGZ1dHVyZS5cbiAgICogSWYgc2VudCBlcXVhbHMgZmFsc2UgaW4gdGhlIHJldHVybiB2YWx1ZSwgeW91IG11c3Qgd2FpdCBmb3IgdGhlIHBlcmlwaGVyYWxNYW5hZ2VySXNSZWFkeVRvVXBkYXRlU3Vic2NyaWJlcnMgZXZlbnQgYmVmb3JlIHNlbmRpbmcgbW9yZSB1cGRhdGVzLlxuICAgKiBAcGFyYW0ge05vdGlmeVBhcmFtc30gcGFyYW1zXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHsgc3RhdHVzOiBTdGF0dXMsIHNlbnQ6IGJvb2xlYW4gfT59XG4gICAqL1xuICBAQ29yZG92YSh7IGNhbGxiYWNrT3JkZXI6ICdyZXZlcnNlJyB9KVxuICBub3RpZnkocGFyYW1zOiBOb3RpZnlQYXJhbXMpOiBQcm9taXNlPHsgc3RhdHVzOiBTdGF0dXM7IHNlbnQ6IGJvb2xlYW4gfT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbmFtZSBlbmNvZGVkU3RyaW5nVG9CeXRlc1xuICAgKiBIZWxwZXIgZnVuY3Rpb24gdG8gY29udmVydCBhIGJhc2U2NCBlbmNvZGVkIHN0cmluZyBmcm9tIGEgY2hhcmFjdGVyaXN0aWMgb3IgZGVzY3JpcHRvciB2YWx1ZSBpbnRvIGEgdWludDhBcnJheSBvYmplY3RcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKiBAcmV0dXJucyB7VWludDhBcnJheX1cbiAgICovXG4gIEBDb3Jkb3ZhKHsgc3luYzogdHJ1ZSB9KVxuICBlbmNvZGVkU3RyaW5nVG9CeXRlcyh2YWx1ZTogc3RyaW5nKTogVWludDhBcnJheSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIGJ5dGVzVG9FbmNvZGVkU3RyaW5nXG4gICAqIEhlbHBlciBmdW5jdGlvbiB0byBjb252ZXJ0IGEgdW5pdDhBcnJheSB0byBhIGJhc2U2NCBlbmNvZGVkIHN0cmluZyBmb3IgYSBjaGFyYWN0ZXJpYyBvciBkZXNjcmlwdG9yIHdyaXRlXG4gICAqIEBwYXJhbSB7VWludDhBcnJheX0gYnl0ZXNcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIEBDb3Jkb3ZhKHsgc3luYzogdHJ1ZSB9KVxuICBieXRlc1RvRW5jb2RlZFN0cmluZyh2YWx1ZTogVWludDhBcnJheSk6IHN0cmluZyB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIHN0cmluZ1RvQnl0ZXNcbiAgICogSGVscGVyIGZ1bmN0aW9uIHRvIGNvbnZlcnQgYSBzdHJpbmcgdG8gYnl0ZXNcbiAgICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gICAqIEByZXR1cm5zIHtVaW50OEFycmF5fVxuICAgKi9cbiAgQENvcmRvdmEoeyBzeW5jOiB0cnVlIH0pXG4gIHN0cmluZ1RvQnl0ZXModmFsdWU6IHN0cmluZyk6IFVpbnQ4QXJyYXkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbmFtZSBieXRlc1RvU3RyaW5nXG4gICAqIEhlbHBlciBmdW5jdGlvbiB0byBjb252ZXJ0IGJ5dGVzIHRvIGEgc3RyaW5nLlxuICAgKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IHZhbHVlXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICBAQ29yZG92YSh7IHN5bmM6IHRydWUgfSlcbiAgYnl0ZXNUb1N0cmluZyh2YWx1ZTogVWludDhBcnJheSk6IHN0cmluZyB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgQENvcmRvdmFQcm9wZXJ0eSgpXG4gIFNDQU5fTU9ERV9PUFBPUlRVTklTVElDOiBudW1iZXI7XG4gIEBDb3Jkb3ZhUHJvcGVydHkoKVxuICBTQ0FOX01PREVfTE9XX1BPV0VSOiBudW1iZXI7XG4gIEBDb3Jkb3ZhUHJvcGVydHkoKVxuICBTQ0FOX01PREVfQkFMQU5DRUQ6IG51bWJlcjtcbiAgQENvcmRvdmFQcm9wZXJ0eSgpXG4gIFNDQU5fTU9ERV9MT1dfTEFURU5DWTogbnVtYmVyO1xuICBAQ29yZG92YVByb3BlcnR5KClcbiAgTUFUQ0hfTU9ERV9BR0dSRVNTSVZFOiBudW1iZXI7XG4gIEBDb3Jkb3ZhUHJvcGVydHkoKVxuICBNQVRDSF9NT0RFX1NUSUNLWTogbnVtYmVyO1xuICBAQ29yZG92YVByb3BlcnR5KClcbiAgTUFUQ0hfTlVNX09ORV9BRFZFUlRJU0VNRU5UOiBudW1iZXI7XG4gIEBDb3Jkb3ZhUHJvcGVydHkoKVxuICBNQVRDSF9OVU1fRkVXX0FEVkVSVElTRU1FTlQ6IG51bWJlcjtcbiAgQENvcmRvdmFQcm9wZXJ0eSgpXG4gIE1BVENIX05VTV9NQVhfQURWRVJUSVNFTUVOVDogbnVtYmVyO1xuICBAQ29yZG92YVByb3BlcnR5KClcbiAgQ0FMTEJBQ0tfVFlQRV9BTExfTUFUQ0hFUzogbnVtYmVyO1xuICBAQ29yZG92YVByb3BlcnR5KClcbiAgQ0FMTEJBQ0tfVFlQRV9GSVJTVF9NQVRDSDogbnVtYmVyO1xuICBAQ29yZG92YVByb3BlcnR5KClcbiAgQ0FMTEJBQ0tfVFlQRV9NQVRDSF9MT1NUOiBudW1iZXI7XG59XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvQGlvbmljLW5hdGl2ZS9wbHVnaW5zL2JsdWV0b290aC1sZS9uZ3gvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxzRUFBdUQsTUFBTSxvQkFBb0IsQ0FBQztBQUN6RixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBMlZsQyxNQUFNLENBQU4sSUFBWSxpQkFLWDtBQUxELFdBQVksaUJBQWlCO0lBQzNCLGdHQUE0QixDQUFBO0lBQzVCLHVGQUF1QixDQUFBO0lBQ3ZCLHFGQUFzQixDQUFBO0lBQ3RCLDJGQUF5QixDQUFBO0FBQzNCLENBQUMsRUFMVyxpQkFBaUIsS0FBakIsaUJBQWlCLFFBSzVCO0FBRUQsTUFBTSxDQUFOLElBQVksa0JBR1g7QUFIRCxXQUFZLGtCQUFrQjtJQUM1QiwyRkFBd0IsQ0FBQTtJQUN4QixxRkFBcUIsQ0FBQTtBQUN2QixDQUFDLEVBSFcsa0JBQWtCLEtBQWxCLGtCQUFrQixRQUc3QjtBQUVELE1BQU0sQ0FBTixJQUFZLGlCQUlYO0FBSkQsV0FBWSxpQkFBaUI7SUFDM0IsdUdBQStCLENBQUE7SUFDL0IsdUdBQStCLENBQUE7SUFDL0IsdUdBQStCLENBQUE7QUFDakMsQ0FBQyxFQUpXLGlCQUFpQixLQUFqQixpQkFBaUIsUUFJNUI7QUFFRCxNQUFNLENBQU4sSUFBWSxxQkFJWDtBQUpELFdBQVkscUJBQXFCO0lBQy9CLDJHQUE2QixDQUFBO0lBQzdCLDJHQUE2QixDQUFBO0lBQzdCLHlHQUE0QixDQUFBO0FBQzlCLENBQUMsRUFKVyxxQkFBcUIsS0FBckIscUJBQXFCLFFBSWhDOztJQXNEZ0MsK0JBQWlCOzs7O0lBUWhELGdDQUFVLGFBQUMsTUFBbUI7SUFVOUIsNEJBQU07SUFVTiw2QkFBTztJQWFQLG9DQUFjO0lBZ0JkLCtCQUFTLGFBQUMsTUFBa0I7SUFXNUIsOEJBQVE7SUFZUix1Q0FBaUIsYUFBQyxNQUFnQztJQWtCbEQsMEJBQUksYUFBQyxNQUEyQjtJQWFoQyw0QkFBTSxhQUFDLE1BQTJCO0lBaUJsQyw2QkFBTyxhQUFDLE1BQWtEO0lBVzFELCtCQUFTLGFBQUMsTUFBMkI7SUFZckMsZ0NBQVUsYUFBQyxNQUEyQjtJQWF0QywyQkFBSyxhQUFDLE1BQTJCO0lBbUJqQyw4QkFBUSxhQUFDLE1BQWlEO0lBWTFELDhCQUFRLGFBQUMsTUFBZ0Q7SUFZekQscUNBQWUsYUFBQyxNQUE0QjtJQVc1QyxpQ0FBVyxhQUFDLE1BQXdCO0lBV3BDLDBCQUFJLGFBQUMsTUFBd0I7SUFhN0IsK0JBQVMsYUFBQyxNQUF3QjtJQVdsQyxpQ0FBVyxhQUFDLE1BQXdCO0lBWXBDLDJCQUFLLGFBQUMsTUFBaUM7SUFZdkMsNEJBQU0sYUFBQyxNQUFpQztJQVd4QyxvQ0FBYyxhQUFDLE1BQWlDO0lBWWhELHFDQUFlLGFBQUMsTUFBNkI7SUFXN0MsMEJBQUksYUFBQyxNQUEyQjtJQVdoQyx5QkFBRyxhQUFDLE1BQXlDO0lBWTdDLCtDQUF5QixhQUFDLE1BQW1FO0lBVTdGLG1DQUFhO0lBVWIsK0JBQVM7SUFVVCxnQ0FBVTtJQVdWLDhCQUFRLGFBQUMsTUFBMkI7SUFXcEMsa0NBQVksYUFBQyxNQUEyQjtJQVd4QyxpQ0FBVyxhQUFDLE1BQTJCO0lBV3ZDLGtDQUFZLGFBQUMsTUFBMkI7SUFVeEMsbUNBQWE7SUFXYix1Q0FBaUI7SUFVakIsdUNBQWlCO0lBV2pCLHFDQUFlO0lBWWYsMENBQW9CLGFBQUMsTUFBNkI7SUFXbEQsZ0NBQVUsYUFBQyxNQUdWO0lBV0QsbUNBQWEsYUFBQyxNQUEyQjtJQVV6Qyx1Q0FBaUI7SUFhakIsc0NBQWdCLGFBQUMsTUFBeUI7SUFVMUMscUNBQWU7SUFVZixtQ0FBYTtJQVdiLDZCQUFPLGFBQUMsTUFBcUI7SUFhN0IsNEJBQU0sYUFBQyxNQUFvQjtJQVczQiwwQ0FBb0IsYUFBQyxLQUFhO0lBV2xDLDBDQUFvQixhQUFDLEtBQWlCO0lBV3RDLG1DQUFhLGFBQUMsS0FBYTtJQVczQixtQ0FBYSxhQUFDLEtBQWlCOzBCQUsvQixnREFBdUI7Ozs7OzswQkFFdkIsNENBQW1COzs7Ozs7MEJBRW5CLDJDQUFrQjs7Ozs7OzBCQUVsQiw4Q0FBcUI7Ozs7OzswQkFFckIsOENBQXFCOzs7Ozs7MEJBRXJCLDBDQUFpQjs7Ozs7OzBCQUVqQixvREFBMkI7Ozs7OzswQkFFM0Isb0RBQTJCOzs7Ozs7MEJBRTNCLG9EQUEyQjs7Ozs7OzBCQUUzQixrREFBeUI7Ozs7OzswQkFFekIsa0RBQXlCOzs7Ozs7MEJBRXpCLGlEQUF3Qjs7Ozs7Ozs7Ozs7OztJQWpuQmIsV0FBVztRQUR2QixVQUFVLEVBQUU7T0FDQSxXQUFXO3NCQXpheEI7RUF5YWlDLGlCQUFpQjtTQUFyQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29yZG92YSwgQ29yZG92YVByb3BlcnR5LCBJb25pY05hdGl2ZVBsdWdpbiwgUGx1Z2luIH0gZnJvbSAnQGlvbmljLW5hdGl2ZS9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuLyogQXZhaWxhYmxlIHN0YXR1cyBvZiBkZXZpY2UgKi9cbmV4cG9ydCB0eXBlIFN0YXR1cyA9XG4gIHwgJ3NjYW5TdGFydGVkJ1xuICB8ICdzY2FuU3RvcHBlZCdcbiAgfCAnc2NhblJlc3VsdCdcbiAgfCAnY29ubmVjdGVkJ1xuICB8ICdkaXNjb25uZWN0ZWQnXG4gIHwgJ2JvbmRpbmcnXG4gIHwgJ2JvbmRlZCdcbiAgfCAndW5ib25kZWQnXG4gIHwgJ2Nsb3NlZCdcbiAgfCAnc2VydmljZXMnXG4gIHwgJ2Rpc2NvdmVyZWQnXG4gIHwgJ2NoYXJhY3RlcmlzdGljcydcbiAgfCAnZGVzY3JpcHRvcnMnXG4gIHwgJ3JlYWQnXG4gIHwgJ3N1YnNjcmliZWQnXG4gIHwgJ3Vuc3Vic2NyaWJlZCdcbiAgfCAnc3Vic2NyaWJlZFJlc3VsdCdcbiAgfCAnd3JpdHRlbidcbiAgfCAncmVhZERlc2NyaXB0b3InXG4gIHwgJ3dyaXRlRGVzY3JpcHRvcidcbiAgfCAncnNzaSdcbiAgfCAnbXR1J1xuICB8ICdjb25uZWN0aW9uUHJpb3JpdHlSZXF1ZXN0ZWQnXG4gIHwgJ2VuYWJsZWQnXG4gIHwgJ2Rpc2FibGVkJ1xuICB8ICdyZWFkUmVxdWVzdGVkJ1xuICB8ICd3cml0ZVJlcXVlc3RlZCdcbiAgfCAnbXR1Q2hhbmdlZCdcbiAgfCAnbm90aWZ5UmVhZHknXG4gIHwgJ25vdGlmeVNlbnQnXG4gIHwgJ3NlcnZpY2VBZGRlZCdcbiAgfCAnc2VydmljZVJlbW92ZWQnXG4gIHwgJ2FsbFNlcnZpY2VzUmVtb3ZlZCdcbiAgfCAnYWR2ZXJ0aXNpbmdTdGFydGVkJ1xuICB8ICdhZHZlcnRpc2luZ1N0b3BwZWQnXG4gIHwgJ3Jlc3BvbmRlZCdcbiAgfCAnbm90aWZpZWQnO1xuXG4vKiogQXZhaWxhYmxlIGNvbm5lY3Rpb24gcHJpb3JpdGllcyAqL1xuZXhwb3J0IHR5cGUgQ29ubmVjdGlvblByaW9yaXR5ID0gJ2xvdycgfCAnYmFsYW5jZWQnIHwgJ2hpZ2gnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFBhcmFtcyB7XG4gIC8qKiBUaGUgYWRkcmVzcy9pZGVudGlmaWVyIHByb3ZpZGVkIGJ5IHRoZSBzY2FuJ3MgcmV0dXJuIG9iamVjdCAqL1xuICBhZGRyZXNzOiBzdHJpbmc7XG4gIC8qKiBUaGUgc2VydmljZSdzIElEICovXG4gIHNlcnZpY2U6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbml0UGVyaXBoZXJhbFBhcmFtcyB7XG4gIC8qKiBTaG91bGQgdXNlciBiZSBwcm9tcHRlZCB0byBlbmFibGUgQmx1ZXRvb3RoICovXG4gIHJlcXVlc3Q/OiBib29sZWFuO1xuICAvKiBBIHVuaXF1ZSBzdHJpbmcgdG8gaWRlbnRpZnkgeW91ciBhcHAuIEJsdWV0b290aCBDZW50cmFsIGJhY2tncm91bmQgbW9kZSBpcyByZXF1aXJlZCB0byB1c2UgdGhpcywgYnV0IGJhY2tncm91bmQgbW9kZSBkb2Vzbid0IHNlZW0gdG8gcmVxdWlyZSBzcGVjaWZ5aW5nIHRoZSByZXN0b3JlS2V5ICovXG4gIHJlc3RvcmVLZXk/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW5pdFBhcmFtcyBleHRlbmRzIEluaXRQZXJpcGhlcmFsUGFyYW1zIHtcbiAgLyoqIFNob3VsZCBjaGFuZ2UgaW4gQmx1ZXRvb3RoIHN0YXR1cyBub3RpZmljYXRpb25zIGJlIHNlbnQgKi9cbiAgc3RhdHVzUmVjZWl2ZXI/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNjYW5QYXJhbXMge1xuICAvKiBBbiBhcnJheSBvZiBzZXJ2aWNlIElEcyB0byBmaWx0ZXIgdGhlIHNjYW4gb3IgZW1wdHkgYXJyYXkgLyBudWxsLiBUaGlzIHBhcmFtZXRlciBpcyBub3Qgc3VwcG9ydGVkIG9uIFdpbmRvd3MgcGxhdGZvcm0geWV0ICovXG4gIHNlcnZpY2VzPzogc3RyaW5nW107XG4gIC8qIFRydWUvZmFsc2UgdG8gYWxsb3cgZHVwbGljYXRlIGFkdmVydGlzZW1lbnQgcGFja2V0cywgZGVmYXVsdHMgdG8gZmFsc2UgKGlPUykqL1xuICBhbGxvd0R1cGxpY2F0ZXM/OiBib29sZWFuO1xuICAvKiogRGVmYXVsdHMgdG8gTG93IFBvd2VyLiBBdmFpbGFibGUgZnJvbSBBUEkyMSAvIEFQSSAyMyAoQW5kcm9pZCkgKi9cbiAgc2Nhbk1vZGU/OiBCbHVldG9vdGhTY2FuTW9kZTtcbiAgLyoqIERlZmF1bHRzIHRvIEFnZ3Jlc3NpdmUuIEF2YWlsYWJsZSBmcm9tIEFQSTIzIChBbmRyb2lkKSAqL1xuICBtYXRjaE1vZGU/OiBCbHVldG9vdGhNYXRjaE1vZGU7XG4gIC8qKiBEZWZhdWx0cyB0byBPbmUgQWR2ZXJ0aXNlbWVudC4gQXZhaWxhYmxlIGZyb20gQVBJMjMgKEFuZHJvaWQpICovXG4gIG1hdGNoTnVtPzogQmx1ZXRvb3RoTWF0Y2hOdW07XG4gIC8qKiBEZWZhdWx0cyB0byBBbGwgTWF0Y2hlcy4gQXZhaWxhYmxlIGZyb20gQVBJMjEgLyBBUEkgMjMuIChBbmRyb2lkKSAqL1xuICBjYWxsYmFja1R5cGU/OiBCbHVldG9vdGhDYWxsYmFja1R5cGU7XG4gIC8qKiBUcnVlL2ZhbHNlIHRvIHNob3cgb25seSBjb25uZWN0YWJsZSBkZXZpY2VzLCByYXRoZXIgdGhhbiBhbGwgZGV2aWNlcyBldmVyIHNlZW4sIGRlZmF1bHRzIHRvIGZhbHNlIChXaW5kb3dzKSAqL1xuICBpc0Nvbm5lY3RhYmxlPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOb3RpZnlQYXJhbXMge1xuICAvKiogU2VydmljZSdzIFVVSUQgKi9cbiAgc2VydmljZTogc3RyaW5nO1xuICAvKiogQ2hhcmFjdGVyaXN0aWMncyBVVUlEICovXG4gIGNoYXJhY3RlcmlzdGljOiBzdHJpbmc7XG4gIC8qKiBCYXNlNjQgZW5jb2RlZCBzdHJpbmcsIG51bWJlciBvciBzdHJpbmcgKi9cbiAgdmFsdWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXNwb25kUGFyYW1zIHtcbiAgLyoqIFRoaXMgaW50ZWdlciB2YWx1ZSB3aWxsIGJlIGluY3JlbWVudGVkIGV2ZXJ5IHJlYWQvd3JpdGVSZXF1ZXN0ZWQgKi9cbiAgcmVxdWVzdElkOiBudW1iZXI7XG4gIC8qKiBiYXNlNjQgc3RyaW5nICovXG4gIHZhbHVlOiBzdHJpbmc7XG4gIC8qKiBub3QgZG9jdW1lbnRlZCAqL1xuICBvZmZzZXQ/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhcmFjdGVyaXN0aWNQYXJhbXMgZXh0ZW5kcyBQYXJhbXMge1xuICAvKiogQW4gYXJyYXkgb2YgY2hhcmFjdGVyaXN0aWMgSURzIHRvIGRpc2NvdmVyIG9yIGVtcHR5IGFycmF5IC8gbnVsbCAqL1xuICBjaGFyYWN0ZXJpc3RpY3M/OiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEZXNjcmlwdG9yUGFyYW1zIGV4dGVuZHMgUGFyYW1zIHtcbiAgLyoqIFRoZSBjaGFyYWN0ZXJpc3RpYydzIElEICovXG4gIGNoYXJhY3RlcmlzdGljOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3BlcmF0aW9uRGVzY3JpcHRvclBhcmFtcyBleHRlbmRzIERlc2NyaXB0b3JQYXJhbXMge1xuICAvKiogVGhlIGRlc2NyaXB0b3IncyBJRCAqL1xuICBkZXNjcmlwdG9yOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV3JpdGVDaGFyYWN0ZXJpc3RpY1BhcmFtcyBleHRlbmRzIERlc2NyaXB0b3JQYXJhbXMge1xuICAvKiBCYXNlNjQgZW5jb2RlZCBzdHJpbmcgKi9cbiAgdmFsdWU6IHN0cmluZztcbiAgLyogU2V0IHRvIFwibm9SZXNwb25zZVwiIHRvIGVuYWJsZSB3cml0ZSB3aXRob3V0IHJlc3BvbnNlLCBhbGwgb3RoZXIgdmFsdWVzIHdpbGwgd3JpdGUgbm9ybWFsbHkuICovXG4gIHR5cGU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV3JpdGVEZXNjcmlwdG9yUGFyYW1zIGV4dGVuZHMgRGVzY3JpcHRvclBhcmFtcyB7XG4gIC8qKiBUaGUgZGVzY3JpcHRvcidzIElEICovXG4gIGRlc2NyaXB0b3I6IHN0cmluZztcbiAgLyoqIEJhc2U2NCBlbmNvZGVkIHN0cmluZywgbnVtYmVyIG9yIHN0cmluZyAqL1xuICB2YWx1ZTogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBBZHZlcnRpc2luZ1BhcmFtcyA9IEFkdmVydGlzaW5nUGFyYW1zQW5kcm9pZCB8IEFkdmVydGlzaW5nUGFyYW1zSU9TO1xuZXhwb3J0IHR5cGUgQWR2ZXJ0aXNlTW9kZSA9ICdiYWxhbmNlZCcgfCAnbG93TGF0ZW5jeScgfCAnbG93UG93ZXInO1xuZXhwb3J0IHR5cGUgVHhQb3dlckxldmVsID0gJ2hpZ2gnIHwgJ2xvdycgfCAndWx0cmFsb3cnIHwgJ21lZGl1bSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWR2ZXJ0aXNpbmdQYXJhbXNBbmRyb2lkIHtcbiAgLyoqIFNlcnZpY2UgVVVJRCBvbiBBbmRyb2lkICovXG4gIHNlcnZpY2U6IHN0cmluZztcbiAgLyoqIG5vdCBkb2N1bWVudGVkICovXG4gIG1vZGU/OiBBZHZlcnRpc2VNb2RlO1xuICAvKiogbm90IGRvY3VtZW50ZWQgKi9cbiAgY29ubmVjdGFibGU/OiBib29sZWFuO1xuICAvKiogbm90IGRvY3VtZW50ZWQgKi9cbiAgdGltZW91dD86IG51bWJlcjtcbiAgLyoqIG5vdCBkb2N1bWVudGVkICovXG4gIHR4UG93ZXJMZXZlbD86IFR4UG93ZXJMZXZlbDtcbiAgLyoqIG5vdCBkb2N1bWVudGVkICovXG4gIG1hbnVmYWN0dXJlcklkPzogbnVtYmVyO1xuICAvKiogbm90IGRvY3VtZW50ZWQgKi9cbiAgbWFudWZhY3R1cmVyU3BlY2lmaWNEYXRhPzogYW55O1xuICAvKiogbm90IGRvY3VtZW50ZWQgKi9cbiAgaW5jbHVkZURldmljZU5hbWU6IGJvb2xlYW47XG4gIC8qKiBub3QgZG9jdW1lbnRlZCAqL1xuICBpbmNsdWRlVHhQb3dlckxldmVsOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFkdmVydGlzaW5nUGFyYW1zSU9TIHtcbiAgLyoqIEFycmF5IG9mIHNlcnZpY2UgVVVJRHMgb24gaU9TICovXG4gIHNlcnZpY2VzOiBzdHJpbmdbXTtcbiAgLyoqIGRldmljZSdzIG5hbWUgKi9cbiAgbmFtZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21tb25JbmZvIHtcbiAgLyoqIFRoZSBkZXZpY2UncyBkaXNwbGF5IG5hbWUgKi9cbiAgbmFtZTogc3RyaW5nO1xuICAvKiogVGhlIGRldmljZSdzIGFkZHJlc3MgLyBpZGVudGlmaWVyIGZvciBjb25uZWN0aW5nIHRvIHRoZSBvYmplY3QgKi9cbiAgYWRkcmVzczogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERldmljZUluZm8gZXh0ZW5kcyBDb21tb25JbmZvIHtcbiAgLyoqIERldmljZSdzIHN0YXR1cyAqL1xuICBzdGF0dXM6IFN0YXR1cztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSU1NJIGV4dGVuZHMgRGV2aWNlSW5mbyB7XG4gIC8qKiBzaWduYWwgc3RyZW5ndGggKi9cbiAgcnNzaTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1UVSBleHRlbmRzIERldmljZUluZm8ge1xuICAvKiBtdHUgdmFsdWUgKi9cbiAgbXR1OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQm9uZGVkU3RhdHVzIGV4dGVuZHMgQ29tbW9uSW5mbyB7XG4gIC8qIEJvbmRlZCBzdGF0dXMqL1xuICBpc0JvbmRlZDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcmV2Q29ubmVjdGlvblN0YXR1cyBleHRlbmRzIENvbW1vbkluZm8ge1xuICAvKiogRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGRldmljZSB3YXMgY29ubmVjdGVkICovXG4gIHdhc0Nvbm5lY3RlZDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDdXJyQ29ubmVjdGlvblN0YXR1cyBleHRlbmRzIENvbW1vbkluZm8ge1xuICAvKiogRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGRldmljZSBpcyBjb25uZWN0ZWQgKi9cbiAgaXNDb25uZWN0ZWQ6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGlzY292ZXJTdGF0dXMgZXh0ZW5kcyBDb21tb25JbmZvIHtcbiAgLyoqIERldGVybWluZSB3aGV0aGVyIHRoZSBkZXZpY2UncyBjaGFyYWN0ZXJpc3RpY3MgYW5kIGRlc2NyaXB0b3JzIGhhdmUgYmVlbiBkaXNjb3ZlcmVkICovXG4gIGlzRGlzY292ZXJlZDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTY2FuU3RhdHVzIGV4dGVuZHMgRGV2aWNlSW5mbyB7XG4gIC8qKiBzaWduYWwgc3RyZW5ndGggKi9cbiAgcnNzaTogbnVtYmVyO1xuICAvKipcbiAgICogYWR2ZXJ0aXNlbWVudCBkYXRhIGluIGVuY29kZWQgc3RyaW5nIG9mIGJ5dGVzLCB1c2UgYmx1ZXRvb3RobGUuZW5jb2RlZFN0cmluZ1RvQnl0ZXMoKSAoQW5kcm9pZClcbiAgICogYWR2ZXJ0aXNlbWVudCBoYXNoIHdpdGggdGhlIGtleXMgKGlPUylcbiAgICogZW1wdHkgKFdpbmRvd3MpXG4gICAqL1xuICBhZHZlcnRpc2VtZW50OlxuICAgIHwge1xuICAgICAgICAvKiogQW4gYXJyYXkgb2Ygc2VydmljZSBVVUlEcyAqL1xuICAgICAgICBzZXJ2aWNlVXVpZHM6IHN0cmluZ1tdO1xuICAgICAgICAvKiogQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBuYW1lIG9mIHRoZSBtYW51ZmFjdHVyZXIgb2YgdGhlIGRldmljZSAqL1xuICAgICAgICBtYW51ZmFjdHVyZXJEYXRhOiBzdHJpbmc7XG4gICAgICAgIC8qKiBBIG51bWJlciBjb250YWluaW5nIHRoZSB0cmFuc21pdCBwb3dlciBvZiBhIHBlcmlwaGVyYWwgKi9cbiAgICAgICAgdHhQb3dlckxldmVsOiBudW1iZXI7XG4gICAgICAgIC8qKiBBbiBhcnJheSBvZiBvbmUgb3IgbW9yZSBDQlVVSUQgb2JqZWN0cywgcmVwcmVzZW50aW5nIENCU2VydmljZSBVVUlEcyB0aGF0IHdlcmUgZm91bmQgaW4gdGhlIOKAnG92ZXJmbG934oCdIGFyZWEgb2YgdGhlIGFkdmVydGlzZW1lbnQgZGF0YSAqL1xuICAgICAgICBvdmVyZmxvd1NlcnZpY2VVdWlkczogc3RyaW5nW107XG4gICAgICAgIC8qKiBBIGJvb2xlYW4gdmFsdWUgdGhhdCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgYWR2ZXJ0aXNpbmcgZXZlbnQgdHlwZSBpcyBjb25uZWN0YWJsZSAqL1xuICAgICAgICBpc0Nvbm5lY3RhYmxlOiBib29sZWFuO1xuICAgICAgICAvKiogQW4gYXJyYXkgb2Ygb25lIG9yIG1vcmUgQ0JVVUlEIG9iamVjdHMsIHJlcHJlc2VudGluZyBDQlNlcnZpY2UgVVVJRHMgKi9cbiAgICAgICAgc29saWNpdGVkU2VydmljZVV1aWRzOiBzdHJpbmdbXTtcbiAgICAgICAgLyogQSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcgc2VydmljZS1zcGVjaWZpYyBhZHZlcnRpc2VtZW50IGRhdGEgKi9cbiAgICAgICAgc2VydmljZURhdGE6IGFueTtcbiAgICAgICAgLyogQSBzdHJpbmcgY29udGFpbmluZyB0aGUgbG9jYWwgbmFtZSBvZiBhIHBlcmlwaGVyYWwgKi9cbiAgICAgICAgbG9jYWxOYW1lOiBzdHJpbmc7XG4gICAgICB9XG4gICAgfCBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZSB7XG4gIC8qKiBTZXJ2aWNlJ3MgdXVpZCAqL1xuICB1dWlkOiBzdHJpbmc7XG4gIC8qKiBBcnJheSBvZiBjaGFyYWN0ZXJpc3RpY3MgKi9cbiAgY2hhcmFjdGVyaXN0aWNzOiBDaGFyYWN0ZXJpc3RpY1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENoYXJhY3RlcmlzdGljIHtcbiAgLyogQXJyYXkgb2YgZGVzY3JpcHRvcnMgKi9cbiAgZGVzY3JpcHRvcnM/OiBEZXNjcmlwdG9yW107XG4gIC8qKiAgQ2hhcmFjdGVyaXN0aWMncyB1dWlkICovXG4gIHV1aWQ6IHN0cmluZztcbiAgLyoqXG4gICAqICBDaGFyYWN0ZXJpc3RpYydzIHByb3BlcnRpZXNcbiAgICogIElmIHRoZSBwcm9wZXJ0eSBpcyBkZWZpbmVkIGFzIGEga2V5LCB0aGUgY2hhcmFjdGVyaXN0aWMgaGFzIHRoYXQgcHJvcGVydHlcbiAgICovXG4gIHByb3BlcnRpZXM/OiB7XG4gICAgd3JpdGU/OiBib29sZWFuO1xuICAgIGJyb2FkY2FzdD86IGJvb2xlYW47XG4gICAgZXh0ZW5kZWRQcm9wcz86IGJvb2xlYW47XG4gICAgd3JpdGVXaXRob3V0UmVzcG9uc2U/OiBib29sZWFuO1xuICAgIHdyaXRlTm9SZXNwb25zZT86IGJvb2xlYW47XG4gICAgc2lnbmVkV3JpdGU/OiBib29sZWFuO1xuICAgIHJlYWQ/OiBib29sZWFuO1xuICAgIG5vdGlmeT86IGJvb2xlYW47XG4gICAgaW5kaWNhdGU/OiBib29sZWFuO1xuICAgIGF1dGhlbnRpY2F0ZWRTaWduZWRXcml0ZXM/OiBib29sZWFuO1xuICAgIG5vdGlmeUVuY3J5cHRpb25SZXF1aXJlZD86IGJvb2xlYW47XG4gICAgaW5kaWNhdGVFbmNyeXB0aW9uUmVxdWlyZWQ/OiBib29sZWFuO1xuICB9O1xuICAvKipcbiAgICogIElmIHRoZSBwZXJtaXNzaW9uIGlzIGRlZmluZWQgYXMgYSBrZXksIHRoZSBjaGFyYWN0ZXIgaGFzIHRoYXQgcGVybWlzc2lvblxuICAgKi9cbiAgcGVybWlzc2lvbnM/OiB7XG4gICAgcmVhZD86IGJvb2xlYW47XG4gICAgcmVhZEVuY3J5cHRlZD86IGJvb2xlYW47XG4gICAgcmVhZEVuY3J5cHRlZE1JVE0/OiBib29sZWFuO1xuICAgIHdyaXRlPzogYm9vbGVhbjtcbiAgICB3cml0ZVNpZ25lZD86IGJvb2xlYW47XG4gICAgd3JpdGVTaWduZWRNSVRNPzogYm9vbGVhbjtcbiAgICB3cml0ZUVuY3J5cHRlZE1JVE0/OiBib29sZWFuO1xuICAgIHJlYWRFbmNyeXB0aW9uUmVxdWlyZWQ/OiBib29sZWFuO1xuICAgIHdyaXRlRW5jcnlwdGlvblJlcXVpcmVkPzogYm9vbGVhbjtcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEZXNjcmlwdG9yIHtcbiAgdXVpZDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERldmljZSBleHRlbmRzIERldmljZUluZm8ge1xuICAvKiogRGV2aWNlJ3Mgc2VydmljZXMgKi9cbiAgc2VydmljZXM6IFNlcnZpY2VbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlcyBleHRlbmRzIERldmljZUluZm8ge1xuICAvKiogQXJyYXkgb2Ygc2VydmljZSBVVUlEUyAqL1xuICBzZXJ2aWNlczogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVzY3JpcHRvcnMgZXh0ZW5kcyBEZXZpY2VJbmZvIHtcbiAgLyoqIENoYXJhY3RlcmlzdGljJ3MgVVVJRCAqL1xuICBjaGFyYWN0ZXJpc3RpYzogc3RyaW5nO1xuICAvKiogU2VydmljZSdzIFVVSUQgKi9cbiAgc2VydmljZTogc3RyaW5nO1xuICAvKiBBcnJheSBvZiBkZXNjcmlwdG9yIFVVSURzICovXG4gIGRlc2NyaXB0b3JzOiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcGVyYXRpb25SZXN1bHQgZXh0ZW5kcyBEZXZpY2VJbmZvIHtcbiAgLyoqIENoYXJhY3RlcmlzdGljIFVVSUQgKi9cbiAgY2hhcmFjdGVyaXN0aWM6IHN0cmluZztcbiAgLyoqIFNlcnZpY2UncyBVVUlEICovXG4gIHNlcnZpY2U6IHN0cmluZztcbiAgLyoqIEJhc2U2NCBlbmNvZGVkIHN0cmluZyBvZiBieXRlcyAqL1xuICB2YWx1ZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVuc3Vic2NyaWJlUmVzdWx0IGV4dGVuZHMgRGV2aWNlSW5mbyB7XG4gIC8qKiBDaGFyYWN0ZXJpc3RpYyBVVUlEICovXG4gIGNoYXJhY3RlcmlzdGljOiBzdHJpbmc7XG4gIC8qKiBTZXJ2aWNlJ3MgVVVJRCAqL1xuICBzZXJ2aWNlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVzY3JpcHRvclJlc3VsdCBleHRlbmRzIE9wZXJhdGlvblJlc3VsdCB7XG4gIGRlc2NyaXB0b3I6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDaGFyYWN0ZXJpc3RpY3MgZXh0ZW5kcyBEZXZpY2VJbmZvIHtcbiAgLyoqIFNlcnZpY2UncyBpZCAqL1xuICBzZXJ2aWNlOiBzdHJpbmc7XG4gIC8qIEFycmF5IG9mIGNoYXJhY3RlcmlzdGljIG9iamVjdHMqL1xuICBjaGFyYWN0ZXJpc3RpY3M6IENoYXJhY3RlcmlzdGljW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW5pdGlhbGl6ZVJlc3VsdCB7XG4gIC8qKiBEZXZpY2UncyBzdGF0dXMgKi9cbiAgc3RhdHVzOiBTdGF0dXM7XG4gIC8qKiBUaGUgYWRkcmVzcy9pZGVudGlmaWVyIHByb3ZpZGVkIGJ5IHRoZSBzY2FuJ3MgcmV0dXJuIG9iamVjdCAqL1xuICBhZGRyZXNzOiBzdHJpbmc7XG4gIC8qKiBTZXJ2aWNlJ3MgVVVJRCAqL1xuICBzZXJ2aWNlOiBzdHJpbmc7XG4gIC8qKiBDaGFyYWN0ZXJpc3RpYyBVVUlEICovXG4gIGNoYXJhY3RlcmlzdGljOiBzdHJpbmc7XG4gIC8qKiBUaGlzIGludGVnZXIgdmFsdWUgd2lsbCBiZSBpbmNyZW1lbnRlZCBldmVyeSByZWFkL3dyaXRlUmVxdWVzdGVkICovXG4gIHJlcXVlc3RJZDogbnVtYmVyO1xuICAvKiogT2Zmc2V0IHZhbHVlICovXG4gIG9mZnNldDogbnVtYmVyO1xuICAvKiogbXR1IHZhbHVlICovXG4gIG10dTogbnVtYmVyO1xuICAvKiogQmFzZTY0IGVuY29kZWQgc3RyaW5nIG9mIGJ5dGVzICovXG4gIHZhbHVlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBlbnVtIEJsdWV0b290aFNjYW5Nb2RlIHtcbiAgU0NBTl9NT0RFX09QUE9SVFVOSVNUSUMgPSAtMSxcbiAgU0NBTl9NT0RFX0xPV19QT1dFUiA9IDAsXG4gIFNDQU5fTU9ERV9CQUxBTkNFRCA9IDEsXG4gIFNDQU5fTU9ERV9MT1dfTEFURU5DWSA9IDIsXG59XG5cbmV4cG9ydCBlbnVtIEJsdWV0b290aE1hdGNoTW9kZSB7XG4gIE1BVENIX01PREVfQUdSRVNTSVZFID0gMSxcbiAgTUFUQ0hfTU9ERV9TVElDS1kgPSAyLFxufVxuXG5leHBvcnQgZW51bSBCbHVldG9vdGhNYXRjaE51bSB7XG4gIE1BVENIX05VTV9PTkVfQURWRVJUSVNFTUVOVCA9IDEsXG4gIE1BVENIX05VTV9GRVdfQURWRVJUSVNFTUVOVCA9IDIsXG4gIE1BVENIX05VTV9NQVhfQURWRVJUSVNFTUVOVCA9IDMsXG59XG5cbmV4cG9ydCBlbnVtIEJsdWV0b290aENhbGxiYWNrVHlwZSB7XG4gIENBTExCQUNLX1RZUEVfQUxMX01BVENIRVMgPSAxLFxuICBDQUxMQkFDS19UWVBFX0ZJUlNUX01BVENIID0gMixcbiAgQ0FMTEJBQ0tfVFlQRV9NQVRDSF9MT1NUID0gNCxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFcnJvciB7XG4gIGNvZGU6IG51bWJlcjtcbiAgbWVzc2FnZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFkYXB0ZXJJbmZvIHtcbiAgbmFtZTogc3RyaW5nO1xuICBhZGRyZXNzOiBzdHJpbmc7XG4gIGlzSW5pdGlhbGl6ZWQ6IGJvb2xlYW47XG4gIGlzRW5hYmxlZDogYm9vbGVhbjtcbiAgaXNTY2FubmluZzogYm9vbGVhbjtcbiAgaXNEaXNjb3ZlcmFibGU6IGJvb2xlYW47XG59XG5cbi8qKlxuICogQG5hbWUgQmx1ZXRvb3RoTEVcbiAqIEBkZXNjcmlwdGlvblxuICogVGhpcyBwbHVnaW4gaGFzIHRoZSBtb3N0IGNvbXBsZXRlIGltcGxlbWVudGF0aW9uIGZvciBpbnRlcmFjdGluZyB3aXRoIEJsdWV0b290aCBMRSBkZXZpY2VzIG9uIEFuZHJvaWQsIGlPUyBhbmQgcGFydGlhbGx5IFdpbmRvd3MuXG4gKiBJdCdzIGEgd3JhcCBhcm91bmQgW3JhbmRkdXNpbmcvY29yZG92YS1wbHVnaW4tYmx1ZXRvb3RobGVdKGh0dHBzOi8vZ2l0aHViLmNvbS9yYW5kZHVzaW5nL2NvcmRvdmEtcGx1Z2luLWJsdWV0b290aGxlL2Jsb2IvbWFzdGVyL3JlYWRtZS5tZCkgY29yZG92YSBwbHVnaW4gZm9yIElvbmljLlxuICogSXQgc3VwcG9ydHMgcGVyaXBoZXJhbCAqKmFuZCoqIGNlbnRyYWwgbW9kZXMgYW5kIGNvdmVycyBtb3N0IG9mIHRoZSBBUEkgbWV0aG9kcyBhdmFpbGFibGUgb24gQW5kcm9pZCBhbmQgaU9TLlxuICpcbiAqIEB1c2FnZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgQmx1ZXRvb3RoTEUgfSBmcm9tICdAaW9uaWMtbmF0aXZlL2JsdWV0b290aC1sZS9uZ3gnO1xuICpcbiAqXG4gKiBjb25zdHJ1Y3RvcihwdWJsaWMgYmx1ZXRvb3RobGU6IEJsdWV0b290aExFLCBwdWJsaWMgcGx0OiBQbGF0Zm9ybSkge1xuICpcbiAqICB0aGlzLnBsdC5yZWFkeSgpLnRoZW4oKHJlYWR5U291cmNlKSA9PiB7XG4gKlxuICogICAgY29uc29sZS5sb2coJ1BsYXRmb3JtIHJlYWR5IGZyb20nLCByZWFkeVNvdXJjZSk7XG4gKlxuICogICAgdGhpcy5ibHVldG9vdGhsZS5pbml0aWFsaXplKCkudGhlbihibGUgPT4ge1xuICogICAgICBjb25zb2xlLmxvZygnYmxlJywgYmxlLnN0YXR1cykgLy8gbG9ncyAnZW5hYmxlZCdcbiAqICAgIH0pO1xuICpcbiAqICAgfSk7XG4gKiB9XG4gKlxuICogYGBgXG4gKlxuICovXG5AUGx1Z2luKHtcbiAgcGx1Z2luTmFtZTogJ0JsdWV0b290aExFJyxcbiAgcGx1Z2luOiAnY29yZG92YS1wbHVnaW4tYmx1ZXRvb3RobGUnLCAvLyBucG0gcGFja2FnZSBuYW1lLCBleGFtcGxlOiBjb3Jkb3ZhLXBsdWdpbi1jYW1lcmFcbiAgcGx1Z2luUmVmOiAnYmx1ZXRvb3RobGUnLCAvLyB0aGUgdmFyaWFibGUgcmVmZXJlbmNlIHRvIGNhbGwgdGhlIHBsdWdpbiwgZXhhbXBsZTogbmF2aWdhdG9yLmdlb2xvY2F0aW9uXG4gIHJlcG86ICdodHRwczovL2dpdGh1Yi5jb20vcmFuZGR1c2luZy9jb3Jkb3ZhLXBsdWdpbi1ibHVldG9vdGhsZScsIC8vIHRoZSBnaXRodWIgcmVwb3NpdG9yeSBVUkwgZm9yIHRoZSBwbHVnaW5cbiAgaW5zdGFsbDogJ2lvbmljIGNvcmRvdmEgcGx1Z2luIGFkZCBjb3Jkb3ZhLXBsdWdpbi1ibHVldG9vdGhsZScsIC8vIE9QVElPTkFMIGluc3RhbGwgY29tbWFuZCwgaW4gY2FzZSB0aGUgcGx1Z2luIHJlcXVpcmVzIHZhcmlhYmxlc1xuICBpbnN0YWxsVmFyaWFibGVzOiBbXSwgLy8gT1BUSU9OQUwgdGhlIHBsdWdpbiByZXF1aXJlcyB2YXJpYWJsZXNcbiAgcGxhdGZvcm1zOiBbJ0FuZHJvaWQnLCAnaU9TJ10sIC8vIEFycmF5IG9mIHBsYXRmb3JtcyBzdXBwb3J0ZWQsIGV4YW1wbGU6IFsnQW5kcm9pZCcsICdpT1MnXVxufSlcbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBCbHVldG9vdGhMRSBleHRlbmRzIElvbmljTmF0aXZlUGx1Z2luIHtcbiAgLyoqXG4gICAqIEBuYW1lIGluaXRpYWxpemVcbiAgICogSW5pdGlhbGl6ZSBCbHVldG9vdGggb24gdGhlIGRldmljZVxuICAgKiBAcGFyYW0ge0luaXRQYXJhbXN9IFtwYXJhbXNdXG4gICAqIEByZXR1cm5zIHsoT2JzZXJ2YWJsZTx7IHN0YXR1czogJ2VuYWJsZWQnIHwgJ2Rpc2FibGVkJ30+KX0gVGhlIGNhbGxiYWNrIHRoYXQgaXMgcGFzc2VkIGluaXRpYWxpemUgc3RhdHVzIChlbmFibGVkL2Rpc2FibGVkKVxuICAgKi9cbiAgQENvcmRvdmEoeyBzdWNjZXNzSW5kZXg6IDAsIGVycm9ySW5kZXg6IDIsIG9ic2VydmFibGU6IHRydWUgfSlcbiAgaW5pdGlhbGl6ZShwYXJhbXM/OiBJbml0UGFyYW1zKTogT2JzZXJ2YWJsZTx7IHN0YXR1czogJ2VuYWJsZWQnIHwgJ2Rpc2FibGVkJyB9PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIGVuYWJsZSAoQW5kcm9pZClcbiAgICogRW5hYmxlIEJsdWV0b290aCBvbiB0aGUgZGV2aWNlLiBBbmRyb2lkIHN1cHBvcnQgb25seVxuICAgKiBAcmV0dXJucyB2b2lkXG4gICAqL1xuICBAQ29yZG92YSh7IGNhbGxiYWNrT3JkZXI6ICdyZXZlcnNlJywgc3luYzogdHJ1ZSB9KVxuICBlbmFibGUoKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIGRpc2FibGUgKEFuZHJvaWQpXG4gICAqIERpc2FibGUgQmx1ZXRvb3RoIG9uIHRoZSBkZXZpY2UuIEFuZHJvaWQgc3VwcG9ydCBvbmx5XG4gICAqIEByZXR1cm5zIHZvaWRcbiAgICovXG4gIEBDb3Jkb3ZhKHsgY2FsbGJhY2tPcmRlcjogJ3JldmVyc2UnLCBzeW5jOiB0cnVlIH0pXG4gIGRpc2FibGUoKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIGdldEFkYXB0ZXJJbmZvIChBbmRyb2lkKVxuICAgKiBSZXRyaWV2ZSB1c2VmdWwgaW5mb3JtYXRpb24gc3VjaCBhcyB0aGUgYWRkcmVzcywgbmFtZSwgYW5kIHZhcmlvdXMgc3RhdGVzIChpbml0aWFsaXplZCwgZW5hYmxlZCwgc2Nhbm5pbmcsIGRpc2NvdmVyYWJsZSkuXG4gICAqIFRoaXMgY2FuIGJlIHZlcnkgdXNlZnVsIHdoZW4gdGhlIGdlbmVyYWwgc3RhdGUgb2YgdGhlIGFkYXB0ZXIgaGFzIGJlZW4gbG9zdCwgYW5kIHdlIHdvdWxkIG90aGVyd2lzZSBuZWVkIHRvIGdvIHRocm91Z2ggYSBzZXJpZXMgb2YgY2FsbGJhY2tzIHRvIGdldCB0aGUgY29ycmVjdCBzdGF0ZSAoZmlyc3QgaW5pdGlhbGl6ZWQsIHRoZW4gZW5hYmxlZCwgdGhlbiBpc1NjYW5uaW5nLCBhbmQgc28gZm9ydGgpLlxuICAgKiBUaGUgcmVzdWx0IG9mIHRoaXMgbWV0aG9kIGFsbG93cyB1cyB0byB0YWtlIGJ1c2luZXNzIGxvZ2ljIGRlY2lzaW9ucyB3aGlsZSBhdm9pZGluZyBhIGxhcmdlIHBhcnQgb2YgdGhlIGNhbGxiYWNrIGhlbGwuXG4gICAqIEN1cnJlbnRseSB0aGUgZGlzY292ZXJhYmxlIHN0YXRlIGRvZXMgbm90IGhhdmUgYW55IHJlbGV2YW5jZSBiZWNhdXNlIHRoZXJlIGlzIG5vIFwic2V0RGlzY292ZXJhYmxlXCIgZnVuY3Rpb25hbGl0eSBpbiBwbGFjZS4gVGhhdCBtYXkgY2hhbmdlIGluIHRoZSBmdXR1cmUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPEFkYXB0ZXJJbmZvPn1cbiAgICovXG4gIEBDb3Jkb3ZhKHsgY2FsbGJhY2tPcmRlcjogJ3JldmVyc2UnIH0pXG4gIGdldEFkYXB0ZXJJbmZvKCk6IFByb21pc2U8QWRhcHRlckluZm8+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQG5hbWUgc3RhcnRTY2FuXG4gICAqIFNjYW4gZm9yIEJsdWV0b290aCBMRSBkZXZpY2VzLlxuICAgKiBTaW5jZSBzY2FubmluZyBpcyBleHBlbnNpdmUsIHN0b3AgYXMgc29vbiBhcyBwb3NzaWJsZS4gVGhlIENvcmRvdmEgYXBwIHNob3VsZCB1c2UgYSB0aW1lciB0byBsaW1pdCB0aGUgc2NhbiBpbnRlcnZhbC5cbiAgICogQW5kcm9pZCBBUEkgPj0gMjMgcmVxdWlyZXMgQUNDRVNTX0NPQVJTRV9MT0NBVElPTiBwZXJtaXNzaW9ucyB0byBmaW5kIHVucGFpcmVkIGRldmljZXMuXG4gICAqIFBlcm1pc3Npb25zIGNhbiBiZSByZXF1ZXN0ZWQgYnkgdXNpbmcgdGhlIGhhc1Blcm1pc3Npb24gYW5kIHJlcXVlc3RQZXJtaXNzaW9uIGZ1bmN0aW9ucy5cbiAgICogQW5kcm9pZCBBUEkgPj0gMjMgYWxzbyByZXF1aXJlcyBsb2NhdGlvbiBzZXJ2aWNlcyB0byBiZSBlbmFibGVkLiBVc2UgaXNMb2NhdGlvbkVuYWJsZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgbG9jYXRpb24gc2VydmljZXMgYXJlIGVuYWJsZWQuXG4gICAqIElmIG5vdCBlbmFibGVkLCB1c2UgcmVxdWVzdExvY2F0aW9uIHRvIHByb21wdCB0aGUgbG9jYXRpb24gc2VydmljZXMgc2V0dGluZ3MgcGFnZS5cbiAgICogQHBhcmFtIHtTY2FuUGFyYW1zfSBwYXJhbXMgU2NhbiBwYXJhbXNcbiAgICogQHJldHVybnMgeyhPYnNlcnZhYmxlPCBTY2FuU3RhdHVzID4pfVxuICAgKi9cbiAgQENvcmRvdmEoeyBjYWxsYmFja09yZGVyOiAncmV2ZXJzZScsIG9ic2VydmFibGU6IHRydWUgfSlcbiAgc3RhcnRTY2FuKHBhcmFtczogU2NhblBhcmFtcyk6IE9ic2VydmFibGU8U2NhblN0YXR1cz4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbmFtZSBzdG9wU2NhblxuICAgKiBTdG9wIHNjYW4gZm9yIEJsdWV0b290aCBMRSBkZXZpY2VzLiBTaW5jZSBzY2FubmluZyBpcyBleHBlbnNpdmUsIHN0b3AgYXMgc29vbiBhcyBwb3NzaWJsZVxuICAgKiBUaGUgYXBwIHNob3VsZCB1c2UgYSB0aW1lciB0byBsaW1pdCB0aGUgc2Nhbm5pbmcgdGltZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8e3N0YXR1czogJ3NjYW5TdG9wcGVkJ30+fVxuICAgKi9cbiAgQENvcmRvdmEoeyBjYWxsYmFja09yZGVyOiAncmV2ZXJzZScgfSlcbiAgc3RvcFNjYW4oKTogUHJvbWlzZTx7IHN0YXR1czogJ3NjYW5TdG9wcGVkJyB9PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIHJldHJpZXZlQ29ubmVjdGVkXG4gICAqIFJldHJpZXZlZCBwYWlyZWQgQmx1ZXRvb3RoIExFIGRldmljZXMuIEluIGlPUywgZGV2aWNlcyB0aGF0IGFyZSBcInBhaXJlZFwiIHRvIHdpbGwgbm90IHJldHVybiBkdXJpbmcgYSBub3JtYWwgc2Nhbi5cbiAgICogQ2FsbGJhY2sgaXMgXCJpbnN0YW50XCIgY29tcGFyZWQgdG8gYSBzY2FuLlxuICAgKiBAcGFyYW0ge3sgc2VydmljZXM6IHN0cmluZ1tdIH19IEFuIGFycmF5IG9mIHNlcnZpY2UgSURzIHRvIGZpbHRlciB0aGUgcmV0cmlldmFsIGJ5LiBJZiBubyBzZXJ2aWNlIElEcyBhcmUgc3BlY2lmaWVkLCBubyBkZXZpY2VzIHdpbGwgYmUgcmV0dXJuZWQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHsgZGV2aWNlczogRGV2aWNlSW5mb1tdIH0+fVxuICAgKi9cbiAgQENvcmRvdmEoeyBjYWxsYmFja09yZGVyOiAncmV2ZXJzZScgfSlcbiAgcmV0cmlldmVDb25uZWN0ZWQocGFyYW1zPzogeyBzZXJ2aWNlcz86IHN0cmluZ1tdIH0pOiBQcm9taXNlPHsgZGV2aWNlczogRGV2aWNlSW5mb1tdIH0+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQG5hbWUgYm9uZCAoQW5kcm9pZClcbiAgICogQm9uZCB3aXRoIGEgZGV2aWNlLlxuICAgKiBUaGUgZGV2aWNlIGRvZXNuJ3QgbmVlZCB0byBiZSBjb25uZWN0ZWQgdG8gaW5pdGlhdGUgYm9uZGluZy4gQW5kcm9pZCBzdXBwb3J0IG9ubHkuXG4gICAqIEBwYXJhbSB7eyBhZGRyZXNzOiBzdHJpbmcgfX0gcGFyYW1zIFRoZSBhZGRyZXNzL2lkZW50aWZpZXIgcHJvdmlkZWQgYnkgdGhlIHNjYW4ncyByZXR1cm4gb2JqZWN0XG4gICAqIEByZXR1cm5zIHsoT2JzZXJ2YWJsZTx7IHN0YXR1czogRGV2aWNlSW5mbyB9Pil9XG4gICAqIHN1Y2Nlc3M6XG4gICAqICAgIFRoZSBmaXJzdCBzdWNjZXNzIGNhbGxiYWNrIHNob3VsZCBhbHdheXMgcmV0dXJuIHdpdGggc3RhdHVzID09IGJvbmRpbmcuXG4gICAqICAgIElmIHRoZSBib25kIGlzIGNyZWF0ZWQsIHRoZSBjYWxsYmFjayB3aWxsIHJldHVybiBhZ2FpbiB3aXRoIHN0YXR1cyA9PSBib25kZWQuXG4gICAqICAgIElmIHRoZSBib25kaW5nIHBvcHVwIGlzIGNhbmNlbGVkIG9yIHRoZSB3cm9uZyBjb2RlIGlzIGVudGVyZWQsIHRoZSBjYWxsYmFjayB3aWxsIHJldHVybiBhZ2FpbiB3aXRoIHN0YXR1cyA9PSB1bmJvbmRlZC5cbiAgICogZXJyb3I6XG4gICAqICAgIFRoZSBjYWxsYmFjayB0aGF0IHdpbGwgYmUgdHJpZ2dlcmVkIHdoZW4gdGhlIGJvbmQgb3BlcmF0aW9uIGZhaWxzXG4gICAqL1xuICBAQ29yZG92YSh7IGNhbGxiYWNrT3JkZXI6ICdyZXZlcnNlJywgb2JzZXJ2YWJsZTogdHJ1ZSB9KVxuICBib25kKHBhcmFtczogeyBhZGRyZXNzOiBzdHJpbmcgfSk6IE9ic2VydmFibGU8eyBzdGF0dXM6IERldmljZUluZm8gfT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbmFtZSB1bmJvbmQgKEFuZHJvaWQpXG4gICAqIFVuYm9uZCB3aXRoIGEgZGV2aWNlLiBUaGUgZGV2aWNlIGRvZXNuJ3QgbmVlZCB0byBiZSBjb25uZWN0ZWQgdG8gaW5pdGlhdGUgYm9uZGluZy4gQW5kcm9pZCBzdXBwb3J0IG9ubHkuXG4gICAqIEBwYXJhbSB7e2FkZHJlc3M6IHN0cmluZ319IHBhcmFtcyBUaGUgYWRkcmVzcy9pZGVudGlmaWVyXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHsgc3RhdHVzOiBEZXZpY2VJbmZvIH0+fVxuICAgKiAgICBzdWNjZXNzOiBUaGUgc3VjY2VzcyBjYWxsYmFjayBzaG91bGQgYWx3YXlzIHJldHVybiB3aXRoIHN0YXR1cyA9PSB1bmJvbmRlZCwgdGhhdCBpcyBwYXNzZWQgd2l0aCBkZXZpY2Ugb2JqZWN0XG4gICAqICAgIGVycm9yOiBUaGUgY2FsbGJhY2sgdGhhdCB3aWxsIGJlIHRyaWdnZXJlZCB3aGVuIHRoZSB1bmJvbmQgb3BlcmF0aW9uIGZhaWxzXG4gICAqL1xuICBAQ29yZG92YSh7IGNhbGxiYWNrT3JkZXI6ICdyZXZlcnNlJyB9KVxuICB1bmJvbmQocGFyYW1zOiB7IGFkZHJlc3M6IHN0cmluZyB9KTogUHJvbWlzZTx7IHN0YXR1czogRGV2aWNlSW5mbyB9PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIGNvbm5lY3RcbiAgICogQ29ubmVjdCB0byBhIEJsdWV0b290aCBMRSBkZXZpY2VcbiAgICogQHBhcmFtIGNvbm5lY3RTdWNjZXNzIFRoZSBzdWNjZXNzIGNhbGxiYWNrIHRoYXQgaXMgcGFzc2VkIHdpdGggZGV2aWNlIG9iamVjdFxuICAgKiBAcGFyYW0gY29ubmVjdEVycm9yICAgVGhlIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSB0cmlnZ2VyZWQgd2hlbiB0aGUgY29ubmVjdCBvcGVyYXRpb24gZmFpbHNcbiAgICogQHBhcmFtIHBhcmFtcyAgICAgICAgIFRoZSBhZGRyZXNzL2lkZW50aWZpZXJcbiAgICpcbiAgICogQHBhcmFtIHt7YWRkcmVzczogc3RyaW5nLCBhdXRvQ29ubmVjdDogYm9vbGVhbn19IHBhcmFtc1xuICAgKiBAcmV0dXJucyB7KE9ic2VydmFibGU8eyBzdGF0dXM6IERldmljZUluZm8gfT4pfVxuICAgKiAgICBzdWNjZXNzOiBkZXZpY2Ugb2JqZWN0IHdpdGggc3RhdHVzXG4gICAqICAgIGVycm9yOiBUaGUgY2FsbGJhY2sgdGhhdCB3aWxsIGJlIHRyaWdnZXJlZCB3aGVuIHRoZSB1bmJvbmQgb3BlcmF0aW9uIGZhaWxzXG4gICAqL1xuICBAQ29yZG92YSh7IGNhbGxiYWNrT3JkZXI6ICdyZXZlcnNlJywgb2JzZXJ2YWJsZTogdHJ1ZSB9KVxuICBjb25uZWN0KHBhcmFtczogeyBhZGRyZXNzOiBzdHJpbmc7IGF1dG9Db25uZWN0PzogYm9vbGVhbiB9KTogT2JzZXJ2YWJsZTxEZXZpY2VJbmZvPiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIHJlY29ubmVjdFxuICAgKiBSZWNvbm5lY3QgdG8gYSBwcmV2aW91c2x5IGNvbm5lY3RlZCBCbHVldG9vdGggZGV2aWNlXG4gICAqIEBwYXJhbSB7e2FkZHJlc3M6IHN0cmluZ319IHBhcmFtcyBUaGUgYWRkcmVzcy9pZGVudGlmaWVyXG4gICAqIEByZXR1cm5zIHsoT2JzZXJ2YWJsZTxEZXZpY2VJbmZvPil9XG4gICAqL1xuICBAQ29yZG92YSh7IGNhbGxiYWNrT3JkZXI6ICdyZXZlcnNlJywgb2JzZXJ2YWJsZTogdHJ1ZSB9KVxuICByZWNvbm5lY3QocGFyYW1zOiB7IGFkZHJlc3M6IHN0cmluZyB9KTogT2JzZXJ2YWJsZTxEZXZpY2VJbmZvPiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIGRpc2Nvbm5lY3RcbiAgICogRGlzY29ubmVjdCBmcm9tIGEgQmx1ZXRvb3RoIExFIGRldmljZS5cbiAgICogICAgICAgICAgICAgIE5vdGU6IEl0J3Mgc2ltcGxlciB0byBqdXN0IGNhbGwgY2xvc2UoKS4gU3RhcnRpbmcgd2l0aCBpT1MgMTAsIGRpc2Nvbm5lY3RpbmcgYmVmb3JlIGNsb3Npbmcgc2VlbXMgcmVxdWlyZWQhXG4gICAqIEBwYXJhbSB7e2FkZHJlc3M6IHN0cmluZ319IHBhcmFtcyBUaGUgYWRkcmVzcy9pZGVudGlmaWVyXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPERldmljZUluZm8+fVxuICAgKi9cbiAgQENvcmRvdmEoeyBjYWxsYmFja09yZGVyOiAncmV2ZXJzZScgfSlcbiAgZGlzY29ubmVjdChwYXJhbXM6IHsgYWRkcmVzczogc3RyaW5nIH0pOiBQcm9taXNlPERldmljZUluZm8+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQG5hbWUgY2xvc2VcbiAgICogQ2xvc2UvZGlzcG9zZSBhIEJsdWV0b290aCBMRSBkZXZpY2UuXG4gICAqIFByaW9yIHRvIDIuNy4wLCB5b3UgbmVlZGVkIHRvIGRpc2Nvbm5lY3QgdG8gdGhlIGRldmljZSBiZWZvcmUgY2xvc2luZywgYnV0IHRoaXMgaXMgbm8gbG9uZ2VyIHRoZSBjYXNlLlxuICAgKiBTdGFydGluZyB3aXRoIGlPUyAxMCwgZGlzY29ubmVjdGluZyBiZWZvcmUgY2xvc2luZyBzZWVtcyByZXF1aXJlZCFcbiAgICogQHBhcmFtIHt7IGFkZHJlc3M6IHN0cmluZyB9fSBwYXJhbXMgVGhlIGFkZHJlc3MvaWRlbnRpZmllclxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxEZXZpY2VJbmZvPn1cbiAgICovXG4gIEBDb3Jkb3ZhKHsgY2FsbGJhY2tPcmRlcjogJ3JldmVyc2UnIH0pXG4gIGNsb3NlKHBhcmFtczogeyBhZGRyZXNzOiBzdHJpbmcgfSk6IFByb21pc2U8RGV2aWNlSW5mbz4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbmFtZSBkaXNjb3ZlclxuICAgKiBEaXNjb3ZlciBhbGwgdGhlIGRldmljZXMgc2VydmljZXMsIGNoYXJhY3RlcmlzdGljcyBhbmQgZGVzY3JpcHRvcnMuXG4gICAqIERvZXNuJ3QgbmVlZCB0byBiZSBjYWxsZWQgYWdhaW4gYWZ0ZXIgZGlzY29ubmVjdGluZyBhbmQgdGhlbiByZWNvbm5lY3RpbmcuXG4gICAqIElmIHVzaW5nIGlPUywgeW91IHNob3VsZG4ndCB1c2UgZGlzY292ZXIgYW5kIHNlcnZpY2VzL2NoYXJhY3RlcmlzdGljcy9kZXNjcmlwdG9ycyBvbiB0aGUgc2FtZSBkZXZpY2UuXG4gICAqIFRoZXJlIHNlZW1zIHRvIGJlIGFuIGlzc3VlIHdpdGggY2FsbGluZyBkaXNjb3ZlciBvbiBpT1M4IGRldmljZXMsIHNvIHVzZSB3aXRoIGNhdXRpb24uXG4gICAqIE9uIHNvbWUgQW5kcm9pZCB2ZXJzaW9ucywgdGhlIGRpc2NvdmVyZWQgc2VydmljZXMgbWF5IGJlIGNhY2hlZCBmb3IgYSBkZXZpY2UuXG4gICAqIFN1YnNlcXVlbnQgZGlzY292ZXIgZXZlbnRzIHdpbGwgbWFrZSB1c2Ugb2YgdGhpcyBjYWNoZS5cbiAgICogSWYgeW91ciBkZXZpY2UncyBzZXJ2aWNlcyBjaGFuZ2UsIHNldCB0aGUgY2xlYXJDYWNoZSBwYXJhbWV0ZXIgdG8gZm9yY2UgQW5kcm9pZCB0byByZS1kaXNjb3ZlciBzZXJ2aWNlcy5cbiAgICogQHBhcmFtIHt7IGFkZHJlc3M6IHN0cmluZywgY2xlYXJDYWNoZTogYm9vbGVhbiB9fSBwYXJhbXMgVGhlIGFkZHJlc3MvaWRlbnRpZmllclxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxEZXZpY2U+fVxuICAgKiAgICBzdWNjZXNzOiBkZXZpY2Ugb2JqZWN0IChjb250YWlucyBhcnJheSBvZiBzZXJ2aWNlIG9iamVjdHMpXG4gICAqICAgIGVycm9yOiBUaGUgY2FsbGJhY2sgdGhhdCB3aWxsIGJlIHRyaWdnZXJlZCB3aGVuIHRoZSB1bmJvbmQgb3BlcmF0aW9uIGZhaWxzXG4gICAqL1xuICBAQ29yZG92YSh7IGNhbGxiYWNrT3JkZXI6ICdyZXZlcnNlJyB9KVxuICBkaXNjb3ZlcihwYXJhbXM6IHsgYWRkcmVzczogc3RyaW5nOyBjbGVhckNhY2hlPzogYm9vbGVhbiB9KTogUHJvbWlzZTxEZXZpY2U+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQG5hbWUgc2VydmljZXMgKGlPUylcbiAgICogRGlzY292ZXIgdGhlIGRldmljZSdzIHNlcnZpY2VzLlxuICAgKiBOb3QgcHJvdmlkaW5nIGFuIGFycmF5IG9mIHNlcnZpY2VzIHdpbGwgcmV0dXJuIGFsbCBzZXJ2aWNlcyBhbmQgdGFrZSBsb25nZXIgdG8gZGlzY292ZXIuIGlPUyBzdXBwb3J0IG9ubHkuXG4gICAqIEBwYXJhbSB7e2FkZHJlc3M6IHN0cmluZywgc2VydmljZXM6IHN0cmluZ1tdfX0gcGFyYW1zXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFNlcnZpY2VzPn1cbiAgICovXG4gIEBDb3Jkb3ZhKHsgY2FsbGJhY2tPcmRlcjogJ3JldmVyc2UnIH0pXG4gIHNlcnZpY2VzKHBhcmFtczogeyBhZGRyZXNzOiBzdHJpbmc7IHNlcnZpY2VzPzogc3RyaW5nW10gfSk6IFByb21pc2U8U2VydmljZXM+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQG5hbWUgY2hhcmFjdGVyaXN0aWNzIChpT1MpXG4gICAqIERpc2NvdmVyIHRoZSBzZXJ2aWNlJ3MgY2hhcmFjdGVyaXN0aWNzLlxuICAgKiBOb3QgcHJvdmlkaW5nIGFuIGFycmF5IG9mIGNoYXJhY3RlcmlzdGljcyB3aWxsIHJldHVybiBhbGwgY2hhcmFjdGVyaXN0aWNzIGFuZCB0YWtlIGxvbmdlciB0byBkaXNjb3Zlci4gaU9TIHN1cHBvcnQgb25seS5cbiAgICogQHBhcmFtIHtDaGFyYWN0ZXJpc3RpY1BhcmFtc30gcGFyYW1zIENoYXJhY3RlcmlzdGljIHBhcmFtc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx7IGNoYXJhY3RlcmlzdGljczogQ2hhcmFjdGVyaXN0aWNzIH0+fSBUaGUgc2VydmljZSBpZCBhbmQgYW4gQXJyYXkgb2YgY2hhcmFjdGVyaXN0aWNzXG4gICAqL1xuICBAQ29yZG92YSh7IGNhbGxiYWNrT3JkZXI6ICdyZXZlcnNlJyB9KVxuICBjaGFyYWN0ZXJpc3RpY3MocGFyYW1zOiBDaGFyYWN0ZXJpc3RpY1BhcmFtcyk6IFByb21pc2U8eyBjaGFyYWN0ZXJpc3RpY3M6IENoYXJhY3RlcmlzdGljcyB9PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIGRlc2NyaXB0b3JzIChpT1MpXG4gICAqIERpc2NvdmVyIHRoZSBjaGFyYWN0ZXJpc3RpYydzIGRlc2NyaXB0b3JzLiBpT1Mgc3VwcG9ydCBvbmx5LlxuICAgKiBAcGFyYW0ge0Rlc2NyaXB0b3JQYXJhbXN9IHBhcmFtc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx7IGRlc2NyaXB0b3JzOiBEZXNjcmlwdG9ycyB9Pn1cbiAgICovXG4gIEBDb3Jkb3ZhKHsgY2FsbGJhY2tPcmRlcjogJ3JldmVyc2UnIH0pXG4gIGRlc2NyaXB0b3JzKHBhcmFtczogRGVzY3JpcHRvclBhcmFtcyk6IFByb21pc2U8eyBkZXNjcmlwdG9yczogRGVzY3JpcHRvcnMgfT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbmFtZSByZWFkXG4gICAqIFJlYWQgYSBwYXJ0aWN1bGFyIHNlcnZpY2UncyBjaGFyYWN0ZXJpc3RpYyBvbmNlXG4gICAqIEBwYXJhbSB7RGVzY3JpcHRvclBhcmFtc30gcGFyYW1zXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPE9wZXJhdGlvblJlc3VsdD59XG4gICAqL1xuICBAQ29yZG92YSh7IGNhbGxiYWNrT3JkZXI6ICdyZXZlcnNlJyB9KVxuICByZWFkKHBhcmFtczogRGVzY3JpcHRvclBhcmFtcyk6IFByb21pc2U8T3BlcmF0aW9uUmVzdWx0PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIHN1YnNjcmliZVxuICAgKiBTdWJzY3JpYmUgdG8gYSBwYXJ0aWN1bGFyIHNlcnZpY2UncyBjaGFyYWN0ZXJpc3RpYy5cbiAgICogT25jZSBhIHN1YnNjcmlwdGlvbiBpcyBubyBsb25nZXIgbmVlZGVkLCBleGVjdXRlIHVuc3Vic2NyaWJlIGluIGEgc2ltaWxhciBmYXNoaW9uLlxuICAgKiBUaGUgQ2xpZW50IENvbmZpZ3VyYXRpb24gZGVzY3JpcHRvciB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgd3JpdHRlbiB0byBlbmFibGUgbm90aWZpY2F0aW9uL2luZGljYXRpb24gYmFzZWQgb24gdGhlIGNoYXJhY3RlcmlzdGljJ3MgcHJvcGVydGllcy5cbiAgICogQHBhcmFtIHtEZXNjcmlwdG9yUGFyYW1zfSBwYXJhbXNcbiAgICogQHJldHVybnMge09ic2VydmFibGU8T3BlcmF0aW9uUmVzdWx0Pn1cbiAgICovXG4gIEBDb3Jkb3ZhKHsgY2FsbGJhY2tPcmRlcjogJ3JldmVyc2UnLCBvYnNlcnZhYmxlOiB0cnVlIH0pXG4gIHN1YnNjcmliZShwYXJhbXM6IERlc2NyaXB0b3JQYXJhbXMpOiBPYnNlcnZhYmxlPE9wZXJhdGlvblJlc3VsdD4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbmFtZSB1bnN1YnNjcmliZVxuICAgKiBVbnN1YnNjcmliZSB0byBhIHBhcnRpY3VsYXIgc2VydmljZSdzIGNoYXJhY3RlcmlzdGljLlxuICAgKiBAcGFyYW0ge0Rlc2NyaXB0b3JQYXJhbXN9IHBhcmFtc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxVbnN1YnNjcmliZVJlc3VsdD59XG4gICAqL1xuICBAQ29yZG92YSh7IGNhbGxiYWNrT3JkZXI6ICdyZXZlcnNlJyB9KVxuICB1bnN1YnNjcmliZShwYXJhbXM6IERlc2NyaXB0b3JQYXJhbXMpOiBQcm9taXNlPFVuc3Vic2NyaWJlUmVzdWx0PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIHdyaXRlIChsaW1pdGF0aW9uIG9uIGlPUywgcmVhZCBiZWxvdylcbiAgICogV3JpdGUgYSBwYXJ0aWN1bGFyIHNlcnZpY2UncyBjaGFyYWN0ZXJpc3RpY1xuICAgKiBOb3RlOiBubyBjYWxsYmFjayB3aWxsIG9jY3VyIG9uIHdyaXRlIHdpdGhvdXQgcmVzcG9uc2Ugb24gaU9TLlxuICAgKiBAcGFyYW0ge1dyaXRlQ2hhcmFjdGVyaXN0aWNQYXJhbXN9IHBhcmFtc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxPcGVyYXRpb25SZXN1bHQ+fVxuICAgKi9cbiAgQENvcmRvdmEoeyBjYWxsYmFja09yZGVyOiAncmV2ZXJzZScgfSlcbiAgd3JpdGUocGFyYW1zOiBXcml0ZUNoYXJhY3RlcmlzdGljUGFyYW1zKTogUHJvbWlzZTxPcGVyYXRpb25SZXN1bHQ+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQG5hbWUgd3JpdGUgKGxpbWl0YXRpb24gb24gaU9TLCByZWFkIGJlbG93KVxuICAgKiBXcml0ZSBRdWljayAvIFF1ZXVlLCB1c2UgdGhpcyBtZXRob2QgdG8gcXVpY2tseSBleGVjdXRlIHdyaXRlIHdpdGhvdXQgcmVzcG9uc2UgY29tbWFuZHMgd2hlbiB3cml0aW5nIG1vcmUgdGhhbiAyMCBieXRlcyBhdCBhIHRpbWUuXG4gICAqIE5vdGU6IG5vIGNhbGxiYWNrIHdpbGwgb2NjdXIgb24gd3JpdGUgd2l0aG91dCByZXNwb25zZSBvbiBpT1MuXG4gICAqIEBwYXJhbSB7V3JpdGVDaGFyYWN0ZXJpc3RpY1BhcmFtc30gcGFyYW1zXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPE9wZXJhdGlvblJlc3VsdD59XG4gICAqL1xuICBAQ29yZG92YSh7IGNhbGxiYWNrT3JkZXI6ICdyZXZlcnNlJyB9KVxuICB3cml0ZVEocGFyYW1zOiBXcml0ZUNoYXJhY3RlcmlzdGljUGFyYW1zKTogUHJvbWlzZTxPcGVyYXRpb25SZXN1bHQ+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQG5hbWUgcmVhZERlc2NyaXB0b3JcbiAgICogUmVhZCBhIHBhcnRpY3VsYXIgY2hhcmFjdGVyaXN0J3MgZGVzY3JpcHRvclxuICAgKiBAcGFyYW0ge09wZXJhdGlvbkRlc2NyaXB0b3JQYXJhbXN9IHBhcmFtc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxEZXNjcmlwdG9yUmVzdWx0Pn1cbiAgICovXG4gIEBDb3Jkb3ZhKHsgY2FsbGJhY2tPcmRlcjogJ3JldmVyc2UnIH0pXG4gIHJlYWREZXNjcmlwdG9yKHBhcmFtczogT3BlcmF0aW9uRGVzY3JpcHRvclBhcmFtcyk6IFByb21pc2U8RGVzY3JpcHRvclJlc3VsdD4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbmFtZSB3cml0ZURlc2NyaXB0b3JcbiAgICogV3JpdGUgYSBwYXJ0aWN1bGFyIGNoYXJhY3RlcmlzdGljJ3MgZGVzY3JpcHRvci4gVW5hYmxlIHRvIHdyaXRlIGNoYXJhY3RlcmlzdGljIGNvbmZpZ3VyYXRpb24gZGlyZWN0bHkgdG8ga2VlcCBpbiBsaW5lIHdpdGggaU9TIGltcGxlbWVudGF0aW9uLlxuICAgKiBJbnN0ZWFkIHVzZSBzdWJzY3JpYmUvdW5zdWJzY3JpYmUsIHdoaWNoIHdpbGwgYXV0b21hdGljYWxseSBlbmFibGUvZGlzYWJsZSBub3RpZmljYXRpb24uXG4gICAqIEBwYXJhbSB7V3JpdGVEZXNjcmlwdG9yUGFyYW1zfSBwYXJhbXNcbiAgICogQHJldHVybnMge1Byb21pc2U8RGVzY3JpcHRvclJlc3VsdD59XG4gICAqL1xuICBAQ29yZG92YSh7IGNhbGxiYWNrT3JkZXI6ICdyZXZlcnNlJyB9KVxuICB3cml0ZURlc2NyaXB0b3IocGFyYW1zOiBXcml0ZURlc2NyaXB0b3JQYXJhbXMpOiBQcm9taXNlPERlc2NyaXB0b3JSZXN1bHQ+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQG5hbWUgcnNzaVxuICAgKiBSZWFkIFJTU0kgb2YgYSBjb25uZWN0ZWQgZGV2aWNlLiBSU1NJIGlzIGFsc28gcmV0dXJuZWQgd2l0aCBzY2FubmluZy5cbiAgICogQHBhcmFtIHt7IGFkZHJlc3M6IHN0cmluZyB9fSBwYXJhbXNcbiAgICogQHJldHVybnMge1Byb21pc2U8IFJTU0kgPn1cbiAgICovXG4gIEBDb3Jkb3ZhKHsgY2FsbGJhY2tPcmRlcjogJ3JldmVyc2UnIH0pXG4gIHJzc2kocGFyYW1zOiB7IGFkZHJlc3M6IHN0cmluZyB9KTogUHJvbWlzZTxSU1NJPiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIG10dSAoQW5kcm9pZCwgQW5kcm9pZCA1KylcbiAgICogU2V0IE1UVSBvZiBhIGNvbm5lY3RlZCBkZXZpY2UuIEFuZHJvaWQgb25seS5cbiAgICogQHBhcmFtIHt7IGFkZHJlc3M6IHN0cmluZywgbXR1OiBudW1iZXIgfX0gcGFyYW1zXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPCBNVFUgPn1cbiAgICovXG4gIEBDb3Jkb3ZhKHsgY2FsbGJhY2tPcmRlcjogJ3JldmVyc2UnIH0pXG4gIG10dShwYXJhbXM6IHsgYWRkcmVzczogc3RyaW5nOyBtdHU/OiBudW1iZXIgfSk6IFByb21pc2U8TVRVPiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIHJlcXVlc3RDb25uZWN0aW9uUHJpb3JpdHkgKEFuZHJvaWQsIEFuZHJvaWQgNSspXG4gICAqIFJlcXVlc3QgYSBjaGFuZ2UgaW4gdGhlIGNvbm5lY3Rpb24gcHJpb3JpdHkgdG8gaW1wcm92ZSB0aHJvdWdocHV0IHdoZW4gdHJhbnNmZXIgbGFyZ2UgYW1vdW50cyBvZiBkYXRhIHZpYSBCTEUuXG4gICAqIEFuZHJvaWQgc3VwcG9ydCBvbmx5LiBpT1Mgd2lsbCByZXR1cm4gZXJyb3IuXG4gICAqIEBwYXJhbSB7eyBhZGRyZXNzOiBzdHJpbmcsIGNvbm5lY3Rpb25Qcmlvcml0eTogQ29ubmVjdGlvblByaW9yaXR5IH19IHBhcmFtc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxEZXZpY2VJbmZvPn1cbiAgICovXG4gIEBDb3Jkb3ZhKHsgY2FsbGJhY2tPcmRlcjogJ3JldmVyc2UnIH0pXG4gIHJlcXVlc3RDb25uZWN0aW9uUHJpb3JpdHkocGFyYW1zOiB7IGFkZHJlc3M6IHN0cmluZzsgY29ubmVjdGlvblByaW9yaXR5OiBDb25uZWN0aW9uUHJpb3JpdHkgfSk6IFByb21pc2U8RGV2aWNlSW5mbz4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbmFtZSBpc0luaXRpYWxpemVkXG4gICAqIERldGVybWluZSB3aGV0aGVyIHRoZSBhZGFwdGVyIGlzIGluaXRpYWxpemVkLiBObyBlcnJvciBjYWxsYmFjay4gUmV0dXJucyB0cnVlIG9yIGZhbHNlXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHsgaXNJbml0aWFsaXplZDogYm9vbGVhbiB9Pn1cbiAgICovXG4gIEBDb3Jkb3ZhKHsgY2FsbGJhY2tPcmRlcjogJ3JldmVyc2UnIH0pXG4gIGlzSW5pdGlhbGl6ZWQoKTogUHJvbWlzZTx7IGlzSW5pdGlhbGl6ZWQ6IGJvb2xlYW4gfT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbmFtZSBpc0VuYWJsZWRcbiAgICogRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGFkYXB0ZXIgaXMgZW5hYmxlZC4gTm8gZXJyb3IgY2FsbGJhY2tcbiAgICogQHJldHVybnMge1Byb21pc2U8eyBpc0VuYWJsZWQ6IGJvb2xlYW4gfT59XG4gICAqL1xuICBAQ29yZG92YSh7IGNhbGxiYWNrT3JkZXI6ICdyZXZlcnNlJyB9KVxuICBpc0VuYWJsZWQoKTogUHJvbWlzZTx7IGlzRW5hYmxlZDogYm9vbGVhbiB9PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIGlzU2Nhbm5pbmdcbiAgICogRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGFkYXB0ZXIgaXMgc2Nhbm5pbmcuIE5vIGVycm9yIGNhbGxiYWNrLiBSZXR1cm5zIHRydWUgb3IgZmFsc2VcbiAgICogQHJldHVybnMge1Byb21pc2U8eyBpc1NjYW5uaW5nOiBib29sZWFuIH0+fVxuICAgKi9cbiAgQENvcmRvdmEoeyBjYWxsYmFja09yZGVyOiAncmV2ZXJzZScgfSlcbiAgaXNTY2FubmluZygpOiBQcm9taXNlPHsgaXNTY2FubmluZzogYm9vbGVhbiB9PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIGlzQm9uZGVkIChBbmRyb2lkKVxuICAgKiBEZXRlcm1pbmUgd2hldGhlciB0aGUgZGV2aWNlIGlzIGJvbmRlZCBvciBub3QsIG9yIGVycm9yIGlmIG5vdCBpbml0aWFsaXplZC4gQW5kcm9pZCBzdXBwb3J0IG9ubHkuXG4gICAqIEBwYXJhbSB7eyBhZGRyZXNzOiBzdHJpbmcgfX0gcGFyYW1zXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPEJvbmRlZFN0YXR1cz59XG4gICAqL1xuICBAQ29yZG92YSh7IGNhbGxiYWNrT3JkZXI6ICdyZXZlcnNlJyB9KVxuICBpc0JvbmRlZChwYXJhbXM6IHsgYWRkcmVzczogc3RyaW5nIH0pOiBQcm9taXNlPEJvbmRlZFN0YXR1cz4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbmFtZSB3YXNDb25uZWN0ZWRcbiAgICogRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGRldmljZSB3YXMgY29ubmVjdGVkLCBvciBlcnJvciBpZiBub3QgaW5pdGlhbGl6ZWQuXG4gICAqIEBwYXJhbSB7eyBhZGRyZXNzOiBzdHJpbmcgfX0gcGFyYW1zXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFByZXZDb25uZWN0aW9uU3RhdHVzPn1cbiAgICovXG4gIEBDb3Jkb3ZhKHsgY2FsbGJhY2tPcmRlcjogJ3JldmVyc2UnIH0pXG4gIHdhc0Nvbm5lY3RlZChwYXJhbXM6IHsgYWRkcmVzczogc3RyaW5nIH0pOiBQcm9taXNlPFByZXZDb25uZWN0aW9uU3RhdHVzPiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIGlzQ29ubmVjdGVkXG4gICAqIERldGVybWluZSB3aGV0aGVyIHRoZSBkZXZpY2UgaXMgY29ubmVjdGVkLCBvciBlcnJvciBpZiBub3QgaW5pdGlhbGl6ZWQgb3IgbmV2ZXIgY29ubmVjdGVkIHRvIGRldmljZVxuICAgKiBAcGFyYW0ge3sgYWRkcmVzczogc3RyaW5nIH19IHBhcmFtc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDdXJyQ29ubmVjdGlvblN0YXR1cz59XG4gICAqL1xuICBAQ29yZG92YSh7IGNhbGxiYWNrT3JkZXI6ICdyZXZlcnNlJyB9KVxuICBpc0Nvbm5lY3RlZChwYXJhbXM6IHsgYWRkcmVzczogc3RyaW5nIH0pOiBQcm9taXNlPEN1cnJDb25uZWN0aW9uU3RhdHVzPiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIGlzRGlzY292ZXJlZFxuICAgKiBEZXRlcm1pbmUgd2hldGhlciB0aGUgZGV2aWNlJ3MgY2hhcmFjdGVyaXN0aWNzIGFuZCBkZXNjcmlwdG9ycyBoYXZlIGJlZW4gZGlzY292ZXJlZCwgb3IgZXJyb3IgaWYgbm90IGluaXRpYWxpemVkIG9yIG5vdCBjb25uZWN0ZWQgdG8gZGV2aWNlLlxuICAgKiBAcGFyYW0ge3sgYWRkcmVzczogc3RyaW5nIH19IHBhcmFtc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxEaXNjb3ZlclN0YXR1cz59XG4gICAqL1xuICBAQ29yZG92YSh7IGNhbGxiYWNrT3JkZXI6ICdyZXZlcnNlJyB9KVxuICBpc0Rpc2NvdmVyZWQocGFyYW1zOiB7IGFkZHJlc3M6IHN0cmluZyB9KTogUHJvbWlzZTxEaXNjb3ZlclN0YXR1cz4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbmFtZSBoYXNQZXJtaXNzaW9uICh1c2VmdWwgb25seSBmb3IgQW5kcm9pZCA2KyAvIEFQSSAyMylcbiAgICogRGV0ZXJtaW5lIHdoZXRoZXIgY29hcnNlIGxvY2F0aW9uIHByaXZpbGVnZXMgYXJlIGdyYW50ZWQgc2luY2Ugc2Nhbm5pbmcgZm9yIHVucGFpcmVkIGRldmljZXMgcmVxdWlyZXMgaXQgaW4gQW5kcm9pZCBBUEkgMjNcbiAgICogQHJldHVybnMge1Byb21pc2U8eyBoYXNQZXJtaXNzaW9uOiBib29sZWFuIH0+fVxuICAgKi9cbiAgQENvcmRvdmEoeyBjYWxsYmFja09yZGVyOiAncmV2ZXJzZScgfSlcbiAgaGFzUGVybWlzc2lvbigpOiBQcm9taXNlPHsgaGFzUGVybWlzc2lvbjogYm9vbGVhbiB9PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIHJlcXVlc3RQZXJtaXNzaW9uICh1c2VmdWwgb25seSBmb3IgQW5kcm9pZCA2KyAvIEFQSSAyMylcbiAgICogUmVxdWVzdCBjb2Fyc2UgbG9jYXRpb24gcHJpdmlsZWdlcyBzaW5jZSBzY2FubmluZyBmb3IgdW5wYWlyZWQgZGV2aWNlcyByZXF1aXJlcyBpdCBpbiBBbmRyb2lkIEFQSSAyMy5cbiAgICogV2lsbCByZXR1cm4gYW4gZXJyb3IgaWYgY2FsbGVkIG9uIGlPUyBvciBBbmRyb2lkIHZlcnNpb25zIHByaW9yIHRvIDYuMC5cbiAgICogQHJldHVybnMge1Byb21pc2U8eyByZXF1ZXN0UGVybWlzc2lvbjogYm9vbGVhbiB9Pn1cbiAgICovXG4gIEBDb3Jkb3ZhKHsgY2FsbGJhY2tPcmRlcjogJ3JldmVyc2UnIH0pXG4gIHJlcXVlc3RQZXJtaXNzaW9uKCk6IFByb21pc2U8eyByZXF1ZXN0UGVybWlzc2lvbjogYm9vbGVhbiB9PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIGlzTG9jYXRpb25FbmFibGVkICh1c2VmdWwgb25seSBmb3IgQW5kcm9pZCA2KyAvIEFQSSAyMylcbiAgICogRGV0ZXJtaW5lIGlmIGxvY2F0aW9uIHNlcnZpY2VzIGFyZSBlbmFibGVkIG9yIG5vdC4gTG9jYXRpb24gU2VydmljZXMgYXJlIHJlcXVpcmVkIHRvIGZpbmQgZGV2aWNlcyBpbiBBbmRyb2lkIEFQSSAyM1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx7IGlzTG9jYXRpb25FbmFibGVkOiBib29sZWFuIH0+fVxuICAgKi9cbiAgQENvcmRvdmEoeyBjYWxsYmFja09yZGVyOiAncmV2ZXJzZScgfSlcbiAgaXNMb2NhdGlvbkVuYWJsZWQoKTogUHJvbWlzZTx7IGlzTG9jYXRpb25FbmFibGVkOiBib29sZWFuIH0+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQG5hbWUgcmVxdWVzdExvY2F0aW9uICh1c2VmdWwgb25seSBmb3IgQW5kcm9pZCA2KyAvIEFQSSAyMylcbiAgICogUHJvbXB0IGxvY2F0aW9uIHNlcnZpY2VzIHNldHRpbmdzIHBhZ2VzLiByZXF1ZXN0TG9jYXRpb24gcHJvcGVydHkgcmV0dXJucyB3aGV0aGVyIGxvY2F0aW9uIHNlcnZpY2VzIGFyZSBlbmFibGVkIG9yIGRpc2FibGVkLlxuICAgKiBMb2NhdGlvbiBTZXJ2aWNlcyBhcmUgcmVxdWlyZWQgdG8gZmluZCBkZXZpY2VzIGluIEFuZHJvaWQgQVBJIDIzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx7IHJlcXVlc3RMb2NhdGlvbjogYm9vbGVhbiB9Pn1cbiAgICovXG4gIEBDb3Jkb3ZhKHsgY2FsbGJhY2tPcmRlcjogJ3JldmVyc2UnIH0pXG4gIHJlcXVlc3RMb2NhdGlvbigpOiBQcm9taXNlPHsgcmVxdWVzdExvY2F0aW9uOiBib29sZWFuIH0+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQG5hbWUgaW5pdGlhbGl6ZVBlcmlwaGVyYWxcbiAgICogSW5pdGlhbGl6ZSBCbHVldG9vdGggb24gdGhlIGRldmljZS4gTXVzdCBiZSBjYWxsZWQgYmVmb3JlIGFueXRoaW5nIGVsc2UuXG4gICAqIENhbGxiYWNrIHdpbGwgY29udGludW91c2x5IGJlIHVzZWQgd2hlbmV2ZXIgQmx1ZXRvb3RoIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQuXG4gICAqIEBwYXJhbSB7SW5pdFBlcmlwaGVyYWxQYXJhbXN9IFtwYXJhbXNdXG4gICAqIEByZXR1cm5zIHtPYnNlcnZhYmxlPEluaXRpYWxpemVSZXN1bHQ+fVxuICAgKi9cbiAgQENvcmRvdmEoeyBjYWxsYmFja09yZGVyOiAncmV2ZXJzZScsIG9ic2VydmFibGU6IHRydWUgfSlcbiAgaW5pdGlhbGl6ZVBlcmlwaGVyYWwocGFyYW1zPzogSW5pdFBlcmlwaGVyYWxQYXJhbXMpOiBPYnNlcnZhYmxlPEluaXRpYWxpemVSZXN1bHQ+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQG5hbWUgYWRkU2VydmljZVxuICAgKiBBZGQgYSBzZXJ2aWNlIHdpdGggY2hhcmFjdGVyaXN0aWNzIGFuZCBkZXNjcmlwdG9ycy4gSWYgbW9yZSB0aGFuIG9uZSBzZXJ2aWNlIGlzIGFkZGVkLCBhZGQgdGhlbSBzZXF1ZW50aWFsbHlcbiAgICogQHBhcmFtIHt7IHNlcnZpY2U6IHN0cmluZywgY2hhcmFjdGVyaXN0aWNzOiBDaGFyYWN0ZXJpc3RpY1tdIH19IHBhcmFtc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx7IHNlcnZpY2U6IHN0cmluZywgc3RhdHVzOiBTdGF0dXMgfT59XG4gICAqL1xuICBAQ29yZG92YSh7IGNhbGxiYWNrT3JkZXI6ICdyZXZlcnNlJyB9KVxuICBhZGRTZXJ2aWNlKHBhcmFtczoge1xuICAgIHNlcnZpY2U6IHN0cmluZztcbiAgICBjaGFyYWN0ZXJpc3RpY3M6IENoYXJhY3RlcmlzdGljW107XG4gIH0pOiBQcm9taXNlPHsgc2VydmljZTogc3RyaW5nOyBzdGF0dXM6IFN0YXR1cyB9PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIHJlbW92ZVNlcnZpY2VcbiAgICogUmVtb3ZlIGEgc2VydmljZVxuICAgKiBAcGFyYW0ge3sgc2VydmljZTogc3RyaW5nIH19IHBhcmFtc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx7IHNlcnZpY2U6IHN0cmluZywgc3RhdHVzOiBTdGF0dXMgfT59XG4gICAqL1xuICBAQ29yZG92YSh7IGNhbGxiYWNrT3JkZXI6ICdyZXZlcnNlJyB9KVxuICByZW1vdmVTZXJ2aWNlKHBhcmFtczogeyBzZXJ2aWNlOiBzdHJpbmcgfSk6IFByb21pc2U8eyBzZXJ2aWNlOiBzdHJpbmc7IHN0YXR1czogU3RhdHVzIH0+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQG5hbWUgcmVtb3ZlQWxsU2VydmljZXNcbiAgICogUmVtb3ZlIGFsbCBzZXJ2aWNlc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx7IHN0YXR1czogU3RhdHVzIH0+fVxuICAgKi9cbiAgQENvcmRvdmEoeyBjYWxsYmFja09yZGVyOiAncmV2ZXJzZScgfSlcbiAgcmVtb3ZlQWxsU2VydmljZXMoKTogUHJvbWlzZTx7IHN0YXR1czogU3RhdHVzIH0+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQG5hbWUgc3RhcnRBZHZlcnRpc2luZyAoZGlmZmVyZW50IGJlaGF2aW9yIG9uIEFuZHJvaWQvaU9TLCByZWFkIGJlbG93KVxuICAgKiBTdGFydCBhZHZlcnRpc2luZyBhcyBhIEJMRSBkZXZpY2UuXG4gICAqIE5vdGU6IFRoaXMgbmVlZHMgdG8gYmUgaW1wcm92ZWQgc28gc2VydmljZXMgY2FuIGJlIHVzZWQgZm9yIGJvdGggQW5kcm9pZCBhbmQgaU9TLlxuICAgKiBPbiBpT1MsIHRoZSBhZHZlcnRpc2luZyBkZXZpY2VzIGxpa2VzIHRvIHJlbmFtZSBpdHNlbGYgYmFjayB0byB0aGUgbmFtZSBvZiB0aGUgZGV2aWNlLCBpLmUuIFJhbmQnIGlQaG9uZVxuICAgKiBAcGFyYW0ge0FkdmVydGlzaW5nUGFyYW1zfSBwYXJhbXNcbiAgICogQHJldHVybnMge1Byb21pc2U8eyBzdGF0dXM6IFN0YXR1cyB9Pn1cbiAgICovXG4gIEBDb3Jkb3ZhKHsgY2FsbGJhY2tPcmRlcjogJ3JldmVyc2UnIH0pXG4gIHN0YXJ0QWR2ZXJ0aXNpbmcocGFyYW1zOiBBZHZlcnRpc2luZ1BhcmFtcyk6IFByb21pc2U8eyBzdGF0dXM6IFN0YXR1cyB9PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIHN0b3BBZHZlcnRpc2luZ1xuICAgKiBTdG9wIGFkdmVydGlzaW5nXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHsgc3RhdHVzOiBTdGF0dXMgfT59XG4gICAqL1xuICBAQ29yZG92YSh7IGNhbGxiYWNrT3JkZXI6ICdyZXZlcnNlJyB9KVxuICBzdG9wQWR2ZXJ0aXNpbmcoKTogUHJvbWlzZTx7IHN0YXR1czogU3RhdHVzIH0+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQG5hbWUgaXNBZHZlcnRpc2luZ1xuICAgKiBEZXRlcm1pbmUgaWYgYXBwIGlzIGFkdmVydGlzaW5nIG9yIG5vdC5cbiAgICogQHJldHVybnMge1Byb21pc2U8eyBzdGF0dXM6IGJvb2xlYW4gfT59XG4gICAqL1xuICBAQ29yZG92YSh7IGNhbGxiYWNrT3JkZXI6ICdyZXZlcnNlJyB9KVxuICBpc0FkdmVydGlzaW5nKCk6IFByb21pc2U8eyBzdGF0dXM6IGJvb2xlYW4gfT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbmFtZSByZXNwb25kXG4gICAqIFJlc3BvbmQgdG8gYSByZWFkIG9yIHdyaXRlIHJlcXVlc3RcbiAgICogQHBhcmFtIHtSZXNwb25kUGFyYW1zfSBwYXJhbXNcbiAgICogQHJldHVybnMge1Byb21pc2U8eyBzdGF0dXM6IFN0YXR1cyB9Pn1cbiAgICovXG4gIEBDb3Jkb3ZhKHsgY2FsbGJhY2tPcmRlcjogJ3JldmVyc2UnIH0pXG4gIHJlc3BvbmQocGFyYW1zOiBSZXNwb25kUGFyYW1zKTogUHJvbWlzZTx7IHN0YXR1czogU3RhdHVzIH0+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQG5hbWUgbm90aWZ5XG4gICAqIFVwZGF0ZSBhIHZhbHVlIGZvciBhIHN1YnNjcmlwdGlvbi4gQ3VycmVudGx5IGFsbCBzdWJzY3JpYmVkIGRldmljZXMgd2lsbCByZWNlaXZlIHVwZGF0ZS5cbiAgICogRGV2aWNlIHNwZWNpZmljIHVwZGF0ZXMgd2lsbCBiZSBhZGRlZCBpbiB0aGUgZnV0dXJlLlxuICAgKiBJZiBzZW50IGVxdWFscyBmYWxzZSBpbiB0aGUgcmV0dXJuIHZhbHVlLCB5b3UgbXVzdCB3YWl0IGZvciB0aGUgcGVyaXBoZXJhbE1hbmFnZXJJc1JlYWR5VG9VcGRhdGVTdWJzY3JpYmVycyBldmVudCBiZWZvcmUgc2VuZGluZyBtb3JlIHVwZGF0ZXMuXG4gICAqIEBwYXJhbSB7Tm90aWZ5UGFyYW1zfSBwYXJhbXNcbiAgICogQHJldHVybnMge1Byb21pc2U8eyBzdGF0dXM6IFN0YXR1cywgc2VudDogYm9vbGVhbiB9Pn1cbiAgICovXG4gIEBDb3Jkb3ZhKHsgY2FsbGJhY2tPcmRlcjogJ3JldmVyc2UnIH0pXG4gIG5vdGlmeShwYXJhbXM6IE5vdGlmeVBhcmFtcyk6IFByb21pc2U8eyBzdGF0dXM6IFN0YXR1czsgc2VudDogYm9vbGVhbiB9PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIGVuY29kZWRTdHJpbmdUb0J5dGVzXG4gICAqIEhlbHBlciBmdW5jdGlvbiB0byBjb252ZXJ0IGEgYmFzZTY0IGVuY29kZWQgc3RyaW5nIGZyb20gYSBjaGFyYWN0ZXJpc3RpYyBvciBkZXNjcmlwdG9yIHZhbHVlIGludG8gYSB1aW50OEFycmF5IG9iamVjdFxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gICAqIEByZXR1cm5zIHtVaW50OEFycmF5fVxuICAgKi9cbiAgQENvcmRvdmEoeyBzeW5jOiB0cnVlIH0pXG4gIGVuY29kZWRTdHJpbmdUb0J5dGVzKHZhbHVlOiBzdHJpbmcpOiBVaW50OEFycmF5IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQG5hbWUgYnl0ZXNUb0VuY29kZWRTdHJpbmdcbiAgICogSGVscGVyIGZ1bmN0aW9uIHRvIGNvbnZlcnQgYSB1bml0OEFycmF5IHRvIGEgYmFzZTY0IGVuY29kZWQgc3RyaW5nIGZvciBhIGNoYXJhY3RlcmljIG9yIGRlc2NyaXB0b3Igd3JpdGVcbiAgICogQHBhcmFtIHtVaW50OEFycmF5fSBieXRlc1xuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgQENvcmRvdmEoeyBzeW5jOiB0cnVlIH0pXG4gIGJ5dGVzVG9FbmNvZGVkU3RyaW5nKHZhbHVlOiBVaW50OEFycmF5KTogc3RyaW5nIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQG5hbWUgc3RyaW5nVG9CeXRlc1xuICAgKiBIZWxwZXIgZnVuY3Rpb24gdG8gY29udmVydCBhIHN0cmluZyB0byBieXRlc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAgICogQHJldHVybnMge1VpbnQ4QXJyYXl9XG4gICAqL1xuICBAQ29yZG92YSh7IHN5bmM6IHRydWUgfSlcbiAgc3RyaW5nVG9CeXRlcyh2YWx1ZTogc3RyaW5nKTogVWludDhBcnJheSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIGJ5dGVzVG9TdHJpbmdcbiAgICogSGVscGVyIGZ1bmN0aW9uIHRvIGNvbnZlcnQgYnl0ZXMgdG8gYSBzdHJpbmcuXG4gICAqIEBwYXJhbSB7VWludDhBcnJheX0gdmFsdWVcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIEBDb3Jkb3ZhKHsgc3luYzogdHJ1ZSB9KVxuICBieXRlc1RvU3RyaW5nKHZhbHVlOiBVaW50OEFycmF5KTogc3RyaW5nIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBAQ29yZG92YVByb3BlcnR5KClcbiAgU0NBTl9NT0RFX09QUE9SVFVOSVNUSUM6IG51bWJlcjtcbiAgQENvcmRvdmFQcm9wZXJ0eSgpXG4gIFNDQU5fTU9ERV9MT1dfUE9XRVI6IG51bWJlcjtcbiAgQENvcmRvdmFQcm9wZXJ0eSgpXG4gIFNDQU5fTU9ERV9CQUxBTkNFRDogbnVtYmVyO1xuICBAQ29yZG92YVByb3BlcnR5KClcbiAgU0NBTl9NT0RFX0xPV19MQVRFTkNZOiBudW1iZXI7XG4gIEBDb3Jkb3ZhUHJvcGVydHkoKVxuICBNQVRDSF9NT0RFX0FHR1JFU1NJVkU6IG51bWJlcjtcbiAgQENvcmRvdmFQcm9wZXJ0eSgpXG4gIE1BVENIX01PREVfU1RJQ0tZOiBudW1iZXI7XG4gIEBDb3Jkb3ZhUHJvcGVydHkoKVxuICBNQVRDSF9OVU1fT05FX0FEVkVSVElTRU1FTlQ6IG51bWJlcjtcbiAgQENvcmRvdmFQcm9wZXJ0eSgpXG4gIE1BVENIX05VTV9GRVdfQURWRVJUSVNFTUVOVDogbnVtYmVyO1xuICBAQ29yZG92YVByb3BlcnR5KClcbiAgTUFUQ0hfTlVNX01BWF9BRFZFUlRJU0VNRU5UOiBudW1iZXI7XG4gIEBDb3Jkb3ZhUHJvcGVydHkoKVxuICBDQUxMQkFDS19UWVBFX0FMTF9NQVRDSEVTOiBudW1iZXI7XG4gIEBDb3Jkb3ZhUHJvcGVydHkoKVxuICBDQUxMQkFDS19UWVBFX0ZJUlNUX01BVENIOiBudW1iZXI7XG4gIEBDb3Jkb3ZhUHJvcGVydHkoKVxuICBDQUxMQkFDS19UWVBFX01BVENIX0xPU1Q6IG51bWJlcjtcbn1cbiJdfQ==

@@ -1,1 +0,1 @@

[{"__symbolic":"module","version":4,"metadata":{"Status":{"__symbolic":"interface"},"ConnectionPriority":{"__symbolic":"interface"},"Params":{"__symbolic":"interface"},"InitPeripheralParams":{"__symbolic":"interface"},"InitParams":{"__symbolic":"interface"},"ScanParams":{"__symbolic":"interface"},"NotifyParams":{"__symbolic":"interface"},"RespondParams":{"__symbolic":"interface"},"CharacteristicParams":{"__symbolic":"interface"},"DescriptorParams":{"__symbolic":"interface"},"OperationDescriptorParams":{"__symbolic":"interface"},"WriteCharacteristicParams":{"__symbolic":"interface"},"WriteDescriptorParams":{"__symbolic":"interface"},"AdvertisingParams":{"__symbolic":"interface"},"AdvertiseMode":{"__symbolic":"interface"},"TxPowerLevel":{"__symbolic":"interface"},"AdvertisingParamsAndroid":{"__symbolic":"interface"},"AdvertisingParamsIOS":{"__symbolic":"interface"},"CommonInfo":{"__symbolic":"interface"},"DeviceInfo":{"__symbolic":"interface"},"RSSI":{"__symbolic":"interface"},"MTU":{"__symbolic":"interface"},"BondedStatus":{"__symbolic":"interface"},"PrevConnectionStatus":{"__symbolic":"interface"},"CurrConnectionStatus":{"__symbolic":"interface"},"DiscoverStatus":{"__symbolic":"interface"},"ScanStatus":{"__symbolic":"interface"},"Service":{"__symbolic":"interface"},"Characteristic":{"__symbolic":"interface"},"Descriptor":{"__symbolic":"interface"},"Device":{"__symbolic":"interface"},"Services":{"__symbolic":"interface"},"Descriptors":{"__symbolic":"interface"},"OperationResult":{"__symbolic":"interface"},"UnsubscribeResult":{"__symbolic":"interface"},"DescriptorResult":{"__symbolic":"interface"},"Characteristics":{"__symbolic":"interface"},"InitializeResult":{"__symbolic":"interface"},"BluetoothScanMode":{"SCAN_MODE_OPPORTUNISTIC":-1,"SCAN_MODE_LOW_POWER":0,"SCAN_MODE_BALANCED":1,"SCAN_MODE_LOW_LATENCY":2},"BluetoothMatchMode":{"MATCH_MODE_AGRESSIVE":1,"MATCH_MODE_STICKY":2},"BluetoothMatchNum":{"MATCH_NUM_ONE_ADVERTISEMENT":1,"MATCH_NUM_FEW_ADVERTISEMENT":2,"MATCH_NUM_MAX_ADVERTISEMENT":3},"BluetoothCallbackType":{"CALLBACK_TYPE_ALL_MATCHES":1,"CALLBACK_TYPE_FIRST_MATCH":2,"CALLBACK_TYPE_MATCH_LOST":4},"Error":{"__symbolic":"interface"},"AdapterInfo":{"__symbolic":"interface"},"BluetoothLE":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"@ionic-native/core","name":"IonicNativePlugin","line":430,"character":33},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":429,"character":1}}],"members":{"initialize":[{"__symbolic":"method"}],"enable":[{"__symbolic":"method"}],"disable":[{"__symbolic":"method"}],"getAdapterInfo":[{"__symbolic":"method"}],"startScan":[{"__symbolic":"method"}],"stopScan":[{"__symbolic":"method"}],"retrieveConnected":[{"__symbolic":"method"}],"bond":[{"__symbolic":"method"}],"unbond":[{"__symbolic":"method"}],"connect":[{"__symbolic":"method"}],"reconnect":[{"__symbolic":"method"}],"disconnect":[{"__symbolic":"method"}],"close":[{"__symbolic":"method"}],"discover":[{"__symbolic":"method"}],"services":[{"__symbolic":"method"}],"characteristics":[{"__symbolic":"method"}],"descriptors":[{"__symbolic":"method"}],"read":[{"__symbolic":"method"}],"subscribe":[{"__symbolic":"method"}],"unsubscribe":[{"__symbolic":"method"}],"write":[{"__symbolic":"method"}],"writeQ":[{"__symbolic":"method"}],"readDescriptor":[{"__symbolic":"method"}],"writeDescriptor":[{"__symbolic":"method"}],"rssi":[{"__symbolic":"method"}],"mtu":[{"__symbolic":"method"}],"requestConnectionPriority":[{"__symbolic":"method"}],"isInitialized":[{"__symbolic":"method"}],"isEnabled":[{"__symbolic":"method"}],"isScanning":[{"__symbolic":"method"}],"isBonded":[{"__symbolic":"method"}],"wasConnected":[{"__symbolic":"method"}],"isConnected":[{"__symbolic":"method"}],"isDiscovered":[{"__symbolic":"method"}],"hasPermission":[{"__symbolic":"method"}],"requestPermission":[{"__symbolic":"method"}],"isLocationEnabled":[{"__symbolic":"method"}],"requestLocation":[{"__symbolic":"method"}],"initializePeripheral":[{"__symbolic":"method"}],"addService":[{"__symbolic":"method"}],"removeService":[{"__symbolic":"method"}],"removeAllServices":[{"__symbolic":"method"}],"startAdvertising":[{"__symbolic":"method"}],"stopAdvertising":[{"__symbolic":"method"}],"isAdvertising":[{"__symbolic":"method"}],"respond":[{"__symbolic":"method"}],"notify":[{"__symbolic":"method"}],"encodedStringToBytes":[{"__symbolic":"method"}],"bytesToEncodedString":[{"__symbolic":"method"}],"stringToBytes":[{"__symbolic":"method"}],"bytesToString":[{"__symbolic":"method"}],"SCAN_MODE_OPPORTUNISTIC":[{"__symbolic":"property"}],"SCAN_MODE_LOW_POWER":[{"__symbolic":"property"}],"SCAN_MODE_BALANCED":[{"__symbolic":"property"}],"SCAN_MODE_LOW_LATENCY":[{"__symbolic":"property"}],"MATCH_MODE_AGGRESSIVE":[{"__symbolic":"property"}],"MATCH_MODE_STICKY":[{"__symbolic":"property"}],"MATCH_NUM_ONE_ADVERTISEMENT":[{"__symbolic":"property"}],"MATCH_NUM_FEW_ADVERTISEMENT":[{"__symbolic":"property"}],"MATCH_NUM_MAX_ADVERTISEMENT":[{"__symbolic":"property"}],"CALLBACK_TYPE_ALL_MATCHES":[{"__symbolic":"property"}],"CALLBACK_TYPE_FIRST_MATCH":[{"__symbolic":"property"}],"CALLBACK_TYPE_MATCH_LOST":[{"__symbolic":"property"}]}}}}]
[{"__symbolic":"module","version":4,"metadata":{"Status":{"__symbolic":"interface"},"ConnectionPriority":{"__symbolic":"interface"},"Params":{"__symbolic":"interface"},"InitPeripheralParams":{"__symbolic":"interface"},"InitParams":{"__symbolic":"interface"},"ScanParams":{"__symbolic":"interface"},"NotifyParams":{"__symbolic":"interface"},"RespondParams":{"__symbolic":"interface"},"CharacteristicParams":{"__symbolic":"interface"},"DescriptorParams":{"__symbolic":"interface"},"OperationDescriptorParams":{"__symbolic":"interface"},"WriteCharacteristicParams":{"__symbolic":"interface"},"WriteDescriptorParams":{"__symbolic":"interface"},"AdvertisingParams":{"__symbolic":"interface"},"AdvertiseMode":{"__symbolic":"interface"},"TxPowerLevel":{"__symbolic":"interface"},"AdvertisingParamsAndroid":{"__symbolic":"interface"},"AdvertisingParamsIOS":{"__symbolic":"interface"},"CommonInfo":{"__symbolic":"interface"},"DeviceInfo":{"__symbolic":"interface"},"RSSI":{"__symbolic":"interface"},"MTU":{"__symbolic":"interface"},"BondedStatus":{"__symbolic":"interface"},"PrevConnectionStatus":{"__symbolic":"interface"},"CurrConnectionStatus":{"__symbolic":"interface"},"DiscoverStatus":{"__symbolic":"interface"},"ScanStatus":{"__symbolic":"interface"},"Service":{"__symbolic":"interface"},"Characteristic":{"__symbolic":"interface"},"Descriptor":{"__symbolic":"interface"},"Device":{"__symbolic":"interface"},"Services":{"__symbolic":"interface"},"Descriptors":{"__symbolic":"interface"},"OperationResult":{"__symbolic":"interface"},"UnsubscribeResult":{"__symbolic":"interface"},"DescriptorResult":{"__symbolic":"interface"},"Characteristics":{"__symbolic":"interface"},"InitializeResult":{"__symbolic":"interface"},"BluetoothScanMode":{"SCAN_MODE_OPPORTUNISTIC":-1,"SCAN_MODE_LOW_POWER":0,"SCAN_MODE_BALANCED":1,"SCAN_MODE_LOW_LATENCY":2},"BluetoothMatchMode":{"MATCH_MODE_AGRESSIVE":1,"MATCH_MODE_STICKY":2},"BluetoothMatchNum":{"MATCH_NUM_ONE_ADVERTISEMENT":1,"MATCH_NUM_FEW_ADVERTISEMENT":2,"MATCH_NUM_MAX_ADVERTISEMENT":3},"BluetoothCallbackType":{"CALLBACK_TYPE_ALL_MATCHES":1,"CALLBACK_TYPE_FIRST_MATCH":2,"CALLBACK_TYPE_MATCH_LOST":4},"Error":{"__symbolic":"interface"},"AdapterInfo":{"__symbolic":"interface"},"BluetoothLE":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"@ionic-native/core","name":"IonicNativePlugin","line":425,"character":33},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":424,"character":1}}],"members":{"initialize":[{"__symbolic":"method"}],"enable":[{"__symbolic":"method"}],"disable":[{"__symbolic":"method"}],"getAdapterInfo":[{"__symbolic":"method"}],"startScan":[{"__symbolic":"method"}],"stopScan":[{"__symbolic":"method"}],"retrieveConnected":[{"__symbolic":"method"}],"bond":[{"__symbolic":"method"}],"unbond":[{"__symbolic":"method"}],"connect":[{"__symbolic":"method"}],"reconnect":[{"__symbolic":"method"}],"disconnect":[{"__symbolic":"method"}],"close":[{"__symbolic":"method"}],"discover":[{"__symbolic":"method"}],"services":[{"__symbolic":"method"}],"characteristics":[{"__symbolic":"method"}],"descriptors":[{"__symbolic":"method"}],"read":[{"__symbolic":"method"}],"subscribe":[{"__symbolic":"method"}],"unsubscribe":[{"__symbolic":"method"}],"write":[{"__symbolic":"method"}],"writeQ":[{"__symbolic":"method"}],"readDescriptor":[{"__symbolic":"method"}],"writeDescriptor":[{"__symbolic":"method"}],"rssi":[{"__symbolic":"method"}],"mtu":[{"__symbolic":"method"}],"requestConnectionPriority":[{"__symbolic":"method"}],"isInitialized":[{"__symbolic":"method"}],"isEnabled":[{"__symbolic":"method"}],"isScanning":[{"__symbolic":"method"}],"isBonded":[{"__symbolic":"method"}],"wasConnected":[{"__symbolic":"method"}],"isConnected":[{"__symbolic":"method"}],"isDiscovered":[{"__symbolic":"method"}],"hasPermission":[{"__symbolic":"method"}],"requestPermission":[{"__symbolic":"method"}],"isLocationEnabled":[{"__symbolic":"method"}],"requestLocation":[{"__symbolic":"method"}],"initializePeripheral":[{"__symbolic":"method"}],"addService":[{"__symbolic":"method"}],"removeService":[{"__symbolic":"method"}],"removeAllServices":[{"__symbolic":"method"}],"startAdvertising":[{"__symbolic":"method"}],"stopAdvertising":[{"__symbolic":"method"}],"isAdvertising":[{"__symbolic":"method"}],"respond":[{"__symbolic":"method"}],"notify":[{"__symbolic":"method"}],"encodedStringToBytes":[{"__symbolic":"method"}],"bytesToEncodedString":[{"__symbolic":"method"}],"stringToBytes":[{"__symbolic":"method"}],"bytesToString":[{"__symbolic":"method"}],"SCAN_MODE_OPPORTUNISTIC":[{"__symbolic":"property"}],"SCAN_MODE_LOW_POWER":[{"__symbolic":"property"}],"SCAN_MODE_BALANCED":[{"__symbolic":"property"}],"SCAN_MODE_LOW_LATENCY":[{"__symbolic":"property"}],"MATCH_MODE_AGGRESSIVE":[{"__symbolic":"property"}],"MATCH_MODE_STICKY":[{"__symbolic":"property"}],"MATCH_NUM_ONE_ADVERTISEMENT":[{"__symbolic":"property"}],"MATCH_NUM_FEW_ADVERTISEMENT":[{"__symbolic":"property"}],"MATCH_NUM_MAX_ADVERTISEMENT":[{"__symbolic":"property"}],"CALLBACK_TYPE_ALL_MATCHES":[{"__symbolic":"property"}],"CALLBACK_TYPE_FIRST_MATCH":[{"__symbolic":"property"}],"CALLBACK_TYPE_MATCH_LOST":[{"__symbolic":"property"}]}}}}]

@@ -1,1 +0,1 @@

{"description":"Ionic Native - Native plugins for ionic apps","module":"index.js","typings":"index.d.ts","author":"ionic","license":"MIT","repository":{"type":"git","url":"https://github.com/ionic-team/ionic-native.git"},"name":"@ionic-native/bluetooth-le","dependencies":{"@types/cordova":"latest"},"peerDependencies":{"rxjs":"^5.5.0 || ^6.5.0","@ionic-native/core":"^5.1.0"},"version":"5.25.0"}
{"description":"Ionic Native - Native plugins for ionic apps","module":"index.js","typings":"index.d.ts","author":"ionic","license":"MIT","repository":{"type":"git","url":"https://github.com/ionic-team/ionic-native.git"},"name":"@ionic-native/bluetooth-le","dependencies":{"@types/cordova":"latest"},"peerDependencies":{"rxjs":"^5.5.0 || ^6.5.0","@ionic-native/core":"^5.1.0"},"version":"5.26.0"}

@@ -1,1 +0,1 @@

{"description":"Ionic Native - Native plugins for ionic apps","module":"index.js","typings":"index.d.ts","author":"ionic","license":"MIT","repository":{"type":"git","url":"https://github.com/ionic-team/ionic-native.git"},"name":"@ionic-native/bluetooth-le","dependencies":{"@types/cordova":"latest"},"peerDependencies":{"rxjs":"^5.5.0 || ^6.5.0","@ionic-native/core":"^5.1.0"},"version":"5.25.0"}
{"description":"Ionic Native - Native plugins for ionic apps","module":"index.js","typings":"index.d.ts","author":"ionic","license":"MIT","repository":{"type":"git","url":"https://github.com/ionic-team/ionic-native.git"},"name":"@ionic-native/bluetooth-le","dependencies":{"@types/cordova":"latest"},"peerDependencies":{"rxjs":"^5.5.0 || ^6.5.0","@ionic-native/core":"^5.1.0"},"version":"5.26.0"}

@@ -1,2 +0,2 @@

<a style="float:right;font-size:12px;" href="http://github.com/ionic-team/ionic-native/edit/master/src/@ionic-native/plugins/bluetooth-le/index.ts#L390">
<a style="float:right;font-size:12px;" href="http://github.com/ionic-team/ionic-native/edit/master/src/@ionic-native/plugins/bluetooth-le/index.ts#L385">
Improve this doc

@@ -21,6 +21,7 @@ </a>

## Supported platforms
- Android
- iOS
- iOS

Sorry, the diff of this file is too big to display

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc