123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248 |
- import { __decorate, __extends } from "tslib";
- import { Injectable } from '@angular/core';
- import { AwesomeCordovaNativePlugin, cordova, cordovaPropertyGet, cordovaPropertySet } from '@awesome-cordova-plugins/core';
- import * as i0 from "@angular/core";
- var Diagnostic = /** @class */ (function (_super) {
- __extends(Diagnostic, _super);
- function Diagnostic() {
- var _this = _super !== null && _super.apply(this, arguments) || this;
- _this.permission = {
- ACCEPT_HANDOVER: 'ACCEPT_HANDOVER',
- ACCESS_BACKGROUND_LOCATION: 'ACCESS_BACKGROUND_LOCATION',
- ACCESS_COARSE_LOCATION: 'ACCESS_COARSE_LOCATION',
- ACCESS_FINE_LOCATION: 'ACCESS_FINE_LOCATION',
- ACCESS_MEDIA_LOCATION: 'ACCESS_MEDIA_LOCATION',
- ACTIVITY_RECOGNITION: 'ACTIVITY_RECOGNITION',
- ADD_VOICEMAIL: 'ADD_VOICEMAIL',
- ANSWER_PHONE_CALLS: 'ANSWER_PHONE_CALLS',
- BLUETOOTH_ADVERTISE: 'BLUETOOTH_ADVERTISE',
- BLUETOOTH_CONNECT: 'BLUETOOTH_CONNECT',
- BLUETOOTH_SCAN: 'BLUETOOTH_SCAN',
- BODY_SENSORS: 'BODY_SENSORS',
- BODY_SENSORS_BACKGROUND: 'BODY_SENSORS_BACKGROUND',
- CALL_PHONE: 'CALL_PHONE',
- CAMERA: 'CAMERA',
- GET_ACCOUNTS: 'GET_ACCOUNTS',
- NEARBY_WIFI_DEVICES: 'NEARBY_WIFI_DEVICES',
- POST_NOTIFICATIONS: 'POST_NOTIFICATIONS',
- PROCESS_OUTGOING_CALLS: 'PROCESS_OUTGOING_CALLS',
- READ_CALENDAR: 'READ_CALENDAR',
- READ_CALL_LOG: 'READ_CALL_LOG',
- READ_CONTACTS: 'READ_CONTACTS',
- READ_EXTERNAL_STORAGE: 'READ_EXTERNAL_STORAGE',
- READ_MEDIA_AUDIO: 'READ_MEDIA_AUDIO',
- READ_MEDIA_IMAGES: 'READ_MEDIA_IMAGES',
- READ_MEDIA_VIDEO: 'READ_MEDIA_VIDEO',
- READ_PHONE_NUMBERS: 'READ_PHONE_NUMBERS',
- READ_PHONE_STATE: 'READ_PHONE_STATE',
- READ_SMS: 'READ_SMS',
- RECEIVE_MMS: 'RECEIVE_MMS',
- RECEIVE_SMS: 'RECEIVE_SMS',
- RECEIVE_WAP_PUSH: 'RECEIVE_WAP_PUSH',
- RECORD_AUDIO: 'RECORD_AUDIO',
- SEND_SMS: 'SEND_SMS',
- USE_SIP: 'USE_SIP',
- UWB_RANGING: 'UWB_RANGING',
- WRITE_CALENDAR: 'WRITE_CALENDAR',
- WRITE_CALL_LOG: 'WRITE_CALL_LOG',
- WRITE_CONTACTS: 'WRITE_CONTACTS',
- WRITE_EXTERNAL_STORAGE: 'WRITE_EXTERNAL_STORAGE',
- };
- _this.locationAuthorizationMode = {
- ALWAYS: 'always',
- WHEN_IN_USE: 'when_in_use',
- };
- /**
- * Location accuracy authorization
- */
- _this.locationAccuracyAuthorization = {
- FULL: 'full',
- REDUCED: 'reduced',
- };
- _this.permissionGroups = {
- CALENDAR: ['READ_CALENDAR', 'WRITE_CALENDAR'],
- CAMERA: ['CAMERA'],
- CONTACTS: ['READ_CONTACTS', 'WRITE_CONTACTS', 'GET_ACCOUNTS'],
- LOCATION: ['ACCESS_FINE_LOCATION', 'ACCESS_COARSE_LOCATION'],
- MICROPHONE: ['RECORD_AUDIO'],
- PHONE: [
- 'READ_PHONE_STATE',
- 'CALL_PHONE',
- 'ADD_VOICEMAIL',
- 'USE_SIP',
- 'PROCESS_OUTGOING_CALLS',
- 'READ_CALL_LOG',
- 'WRITE_CALL_LOG',
- ],
- SENSORS: ['BODY_SENSORS'],
- SMS: ['SEND_SMS', 'RECEIVE_SMS', 'READ_SMS', 'RECEIVE_WAP_PUSH', 'RECEIVE_MMS'],
- STORAGE: ['READ_EXTERNAL_STORAGE', 'WRITE_EXTERNAL_STORAGE'],
- NEARBY_DEVICES: ["BLUETOOTH_ADVERTISE", "BLUETOOTH_SCAN", "BLUETOOTH_CONNECT"],
- };
- _this.locationMode = {
- HIGH_ACCURACY: 'high_accuracy',
- DEVICE_ONLY: 'device_only',
- BATTERY_SAVING: 'battery_saving',
- LOCATION_OFF: 'location_off',
- };
- _this.bluetoothState = {
- UNKNOWN: 'unknown',
- RESETTING: 'resetting',
- UNSUPPORTED: 'unsupported',
- UNAUTHORIZED: 'unauthorized',
- POWERED_OFF: 'powered_off',
- POWERED_ON: 'powered_on',
- POWERING_OFF: 'powering_off',
- POWERING_ON: 'powering_on',
- };
- /**
- * Access to the photo library (iOS 14+)
- *
- * ADD_ONLY - can add to but not read from Photo Library
- * READ_WRITE - can both add to and read from Photo Library
- *
- */
- _this.photoLibraryAccessLevel = {
- ADD_ONLY: 'add_only',
- READ_WRITE: 'read_write',
- };
- return _this;
- }
- Diagnostic.prototype.isLocationAvailable = function () { return cordova(this, "isLocationAvailable", {}, arguments); };
- Diagnostic.prototype.isWifiAvailable = function () { return cordova(this, "isWifiAvailable", {}, arguments); };
- Diagnostic.prototype.isCameraAvailable = function (externalStorage) { return cordova(this, "isCameraAvailable", { "callbackOrder": "reverse" }, arguments); };
- Diagnostic.prototype.isBluetoothAvailable = function () { return cordova(this, "isBluetoothAvailable", {}, arguments); };
- Diagnostic.prototype.switchToLocationSettings = function () { return cordova(this, "switchToLocationSettings", { "sync": true, "platforms": ["Android", "Windows 10", "iOS"] }, arguments); };
- Diagnostic.prototype.switchToMobileDataSettings = function () { return cordova(this, "switchToMobileDataSettings", { "sync": true, "platforms": ["Android", "Windows 10"] }, arguments); };
- Diagnostic.prototype.switchToBluetoothSettings = function () { return cordova(this, "switchToBluetoothSettings", { "sync": true, "platforms": ["Android", "Windows 10"] }, arguments); };
- Diagnostic.prototype.switchToWifiSettings = function () { return cordova(this, "switchToWifiSettings", { "sync": true, "platforms": ["Android", "Windows 10"] }, arguments); };
- Diagnostic.prototype.isWifiEnabled = function () { return cordova(this, "isWifiEnabled", { "platforms": ["Android", "Windows 10"] }, arguments); };
- Diagnostic.prototype.setWifiState = function (state) { return cordova(this, "setWifiState", { "callbackOrder": "reverse", "platforms": ["Android", "Windows 10"] }, arguments); };
- Diagnostic.prototype.setBluetoothState = function (state) { return cordova(this, "setBluetoothState", { "callbackOrder": "reverse", "platforms": ["Android", "Windows 10"] }, arguments); };
- Diagnostic.prototype.enableDebug = function () { return cordova(this, "enableDebug", { "platforms": ["Android", "iOS"] }, arguments); };
- Diagnostic.prototype.isLocationEnabled = function () { return cordova(this, "isLocationEnabled", { "platforms": ["Android", "iOS"] }, arguments); };
- Diagnostic.prototype.isLocationAuthorized = function () { return cordova(this, "isLocationAuthorized", {}, arguments); };
- Diagnostic.prototype.getLocationAuthorizationStatus = function () { return cordova(this, "getLocationAuthorizationStatus", { "platforms": ["Android", "iOS"] }, arguments); };
- Diagnostic.prototype.getLocationAuthorizationStatuses = function () { return cordova(this, "getLocationAuthorizationStatuses", { "platforms": ["Android", "iOS"] }, arguments); };
- Diagnostic.prototype.requestLocationAuthorization = function (mode, accuracy) { return cordova(this, "requestLocationAuthorization", { "platforms": ["Android", "iOS"], "callbackOrder": "reverse" }, arguments); };
- Diagnostic.prototype.isCameraPresent = function () { return cordova(this, "isCameraPresent", { "platforms": ["Android", "iOS"] }, arguments); };
- Diagnostic.prototype.isCameraAuthorized = function (externalStorage) { return cordova(this, "isCameraAuthorized", { "platforms": ["Android", "iOS"], "callbackOrder": "reverse" }, arguments); };
- Diagnostic.prototype.getCameraAuthorizationStatus = function (externalStorage) { return cordova(this, "getCameraAuthorizationStatus", { "platforms": ["Android", "iOS"], "callbackOrder": "reverse" }, arguments); };
- Diagnostic.prototype.requestCameraAuthorization = function (externalStorage) { return cordova(this, "requestCameraAuthorization", { "platforms": ["Android", "iOS"], "callbackOrder": "reverse" }, arguments); };
- Diagnostic.prototype.isMicrophoneAuthorized = function () { return cordova(this, "isMicrophoneAuthorized", { "platforms": ["Android", "iOS"] }, arguments); };
- Diagnostic.prototype.getMicrophoneAuthorizationStatus = function () { return cordova(this, "getMicrophoneAuthorizationStatus", { "platforms": ["Android", "iOS"] }, arguments); };
- Diagnostic.prototype.requestMicrophoneAuthorization = function () { return cordova(this, "requestMicrophoneAuthorization", { "platforms": ["Android", "iOS"] }, arguments); };
- Diagnostic.prototype.isContactsAuthorized = function () { return cordova(this, "isContactsAuthorized", { "platforms": ["Android", "iOS"] }, arguments); };
- Diagnostic.prototype.getContactsAuthorizationStatus = function () { return cordova(this, "getContactsAuthorizationStatus", { "platforms": ["Android", "iOS"] }, arguments); };
- Diagnostic.prototype.requestContactsAuthorization = function () { return cordova(this, "requestContactsAuthorization", { "platforms": ["Android", "iOS"] }, arguments); };
- Diagnostic.prototype.isCalendarAuthorized = function () { return cordova(this, "isCalendarAuthorized", { "platforms": ["Android", "iOS"] }, arguments); };
- Diagnostic.prototype.getCalendarAuthorizationStatus = function () { return cordova(this, "getCalendarAuthorizationStatus", { "platforms": ["Android", "iOS"] }, arguments); };
- Diagnostic.prototype.requestCalendarAuthorization = function () { return cordova(this, "requestCalendarAuthorization", { "platforms": ["Android", "iOS"] }, arguments); };
- Diagnostic.prototype.switchToSettings = function () { return cordova(this, "switchToSettings", { "platforms": ["Android", "iOS"] }, arguments); };
- Diagnostic.prototype.getBluetoothState = function () { return cordova(this, "getBluetoothState", { "platforms": ["Android", "iOS"] }, arguments); };
- Diagnostic.prototype.registerBluetoothStateChangeHandler = function (handler) { return cordova(this, "registerBluetoothStateChangeHandler", { "platforms": ["Android", "iOS"], "sync": true }, arguments); };
- Diagnostic.prototype.registerLocationStateChangeHandler = function (handler) { return cordova(this, "registerLocationStateChangeHandler", { "platforms": ["Android", "iOS"], "sync": true }, arguments); };
- Diagnostic.prototype.getArchitecture = function () { return cordova(this, "getArchitecture", { "platforms": ["Android", "iOS"] }, arguments); };
- Diagnostic.prototype.getCurrentBatteryLevel = function () { return cordova(this, "getCurrentBatteryLevel", { "platforms": ["Android", "iOS"] }, arguments); };
- Diagnostic.prototype.restart = function (cold) { return cordova(this, "restart", { "platforms": ["Android"], "callbackOrder": "reverse" }, arguments); };
- Diagnostic.prototype.isGpsLocationAvailable = function () { return cordova(this, "isGpsLocationAvailable", { "platforms": ["Android"] }, arguments); };
- Diagnostic.prototype.isGpsLocationEnabled = function () { return cordova(this, "isGpsLocationEnabled", { "platforms": ["Android"] }, arguments); };
- Diagnostic.prototype.isNetworkLocationAvailable = function () { return cordova(this, "isNetworkLocationAvailable", { "platforms": ["Android"] }, arguments); };
- Diagnostic.prototype.isNetworkLocationEnabled = function () { return cordova(this, "isNetworkLocationEnabled", { "platforms": ["Android"] }, arguments); };
- Diagnostic.prototype.isAirplaneModeEnabled = function () { return cordova(this, "isAirplaneModeEnabled", { "platforms": ["Android"] }, arguments); };
- Diagnostic.prototype.isMobileDataEnabled = function () { return cordova(this, "isMobileDataEnabled", { "platforms": ["Android"] }, arguments); };
- Diagnostic.prototype.getLocationMode = function () { return cordova(this, "getLocationMode", { "platforms": ["Android"] }, arguments); };
- Diagnostic.prototype.getDeviceOSVersion = function () { return cordova(this, "getDeviceOSVersion", { "platforms": ["Android"] }, arguments); };
- Diagnostic.prototype.getBuildOSVersion = function () { return cordova(this, "getBuildOSVersion", { "platforms": ["Android"] }, arguments); };
- Diagnostic.prototype.getPermissionAuthorizationStatus = function (permission) { return cordova(this, "getPermissionAuthorizationStatus", { "platforms": ["Android"], "callbackOrder": "reverse" }, arguments); };
- Diagnostic.prototype.getPermissionsAuthorizationStatus = function (permissions) { return cordova(this, "getPermissionsAuthorizationStatus", { "platforms": ["Android"], "callbackOrder": "reverse" }, arguments); };
- Diagnostic.prototype.requestRuntimePermission = function (permission) { return cordova(this, "requestRuntimePermission", { "platforms": ["Android"], "callbackOrder": "reverse" }, arguments); };
- Diagnostic.prototype.requestRuntimePermissions = function (permissions) { return cordova(this, "requestRuntimePermissions", { "platforms": ["Android"], "callbackOrder": "reverse" }, arguments); };
- Diagnostic.prototype.isRequestingPermission = function () { return cordova(this, "isRequestingPermission", { "sync": true }, arguments); };
- Diagnostic.prototype.registerPermissionRequestCompleteHandler = function (handler) { return cordova(this, "registerPermissionRequestCompleteHandler", { "sync": true }, arguments); };
- Diagnostic.prototype.isBluetoothEnabled = function () { return cordova(this, "isBluetoothEnabled", { "platforms": ["Android"] }, arguments); };
- Diagnostic.prototype.hasBluetoothSupport = function () { return cordova(this, "hasBluetoothSupport", { "platforms": ["Android"] }, arguments); };
- Diagnostic.prototype.hasBluetoothLESupport = function () { return cordova(this, "hasBluetoothLESupport", { "platforms": ["Android"] }, arguments); };
- Diagnostic.prototype.hasBluetoothLEPeripheralSupport = function () { return cordova(this, "hasBluetoothLEPeripheralSupport", { "platforms": ["Android"] }, arguments); };
- Diagnostic.prototype.getBluetoothAuthorizationStatus = function () { return cordova(this, "getBluetoothAuthorizationStatus", { "platforms": ["Android", "iOS"] }, arguments); };
- Diagnostic.prototype.getBluetoothAuthorizationStatuses = function () { return cordova(this, "getBluetoothAuthorizationStatuses", { "platforms": ["Android"] }, arguments); };
- Diagnostic.prototype.isExternalStorageAuthorized = function () { return cordova(this, "isExternalStorageAuthorized", { "platforms": ["Android"] }, arguments); };
- Diagnostic.prototype.getExternalStorageAuthorizationStatus = function () { return cordova(this, "getExternalStorageAuthorizationStatus", { "platforms": ["Android"] }, arguments); };
- Diagnostic.prototype.requestExternalStorageAuthorization = function () { return cordova(this, "requestExternalStorageAuthorization", { "platforms": ["Android"] }, arguments); };
- Diagnostic.prototype.getExternalSdCardDetails = function () { return cordova(this, "getExternalSdCardDetails", { "platforms": ["Android"] }, arguments); };
- Diagnostic.prototype.switchToWirelessSettings = function () { return cordova(this, "switchToWirelessSettings", { "platforms": ["Android"], "sync": true }, arguments); };
- Diagnostic.prototype.switchToNFCSettings = function () { return cordova(this, "switchToNFCSettings", { "platforms": ["Android"], "sync": true }, arguments); };
- Diagnostic.prototype.isNFCPresent = function () { return cordova(this, "isNFCPresent", { "platforms": ["Android"] }, arguments); };
- Diagnostic.prototype.isNFCEnabled = function () { return cordova(this, "isNFCEnabled", { "platforms": ["Android"] }, arguments); };
- Diagnostic.prototype.isNFCAvailable = function () { return cordova(this, "isNFCAvailable", { "platforms": ["Android"] }, arguments); };
- Diagnostic.prototype.registerNFCStateChangeHandler = function (handler) { return cordova(this, "registerNFCStateChangeHandler", { "platforms": ["Android"], "sync": true }, arguments); };
- Diagnostic.prototype.isDataRoamingEnabled = function () { return cordova(this, "isDataRoamingEnabled", { "platforms": ["Android"] }, arguments); };
- Diagnostic.prototype.isADBModeEnabled = function () { return cordova(this, "isADBModeEnabled", { "platforms": ["Android"] }, arguments); };
- Diagnostic.prototype.isDeviceRooted = function () { return cordova(this, "isDeviceRooted", { "platforms": ["Android"] }, arguments); };
- Diagnostic.prototype.isCameraRollAuthorized = function (accessLevel) { return cordova(this, "isCameraRollAuthorized", { "platforms": ["iOS"], "callbackOrder": "reverse" }, arguments); };
- Diagnostic.prototype.getCameraRollAuthorizationStatus = function (accessLevel) { return cordova(this, "getCameraRollAuthorizationStatus", { "platforms": ["iOS"], "callbackOrder": "reverse" }, arguments); };
- Diagnostic.prototype.requestCameraRollAuthorization = function (accessLevel) { return cordova(this, "requestCameraRollAuthorization", { "platforms": ["iOS"], "callbackOrder": "reverse" }, arguments); };
- Diagnostic.prototype.presentLimitedLibraryPicker = function () { return cordova(this, "presentLimitedLibraryPicker", { "platforms": ["iOS"] }, arguments); };
- Diagnostic.prototype.isRemoteNotificationsEnabled = function () { return cordova(this, "isRemoteNotificationsEnabled", { "platforms": ["iOS", "Android"] }, arguments); };
- Diagnostic.prototype.isRegisteredForRemoteNotifications = function () { return cordova(this, "isRegisteredForRemoteNotifications", { "platforms": ["iOS"] }, arguments); };
- Diagnostic.prototype.getRemoteNotificationsAuthorizationStatus = function () { return cordova(this, "getRemoteNotificationsAuthorizationStatus", { "platforms": ["iOS"] }, arguments); };
- Diagnostic.prototype.requestRemoteNotificationsAuthorization = function (types, omitRegistration) { return cordova(this, "requestRemoteNotificationsAuthorization", { "platforms": ["iOS"] }, arguments); };
- Diagnostic.prototype.getRemoteNotificationTypes = function () { return cordova(this, "getRemoteNotificationTypes", { "platforms": ["iOS"] }, arguments); };
- Diagnostic.prototype.isRemindersAuthorized = function () { return cordova(this, "isRemindersAuthorized", { "platforms": ["iOS"] }, arguments); };
- Diagnostic.prototype.getRemindersAuthorizationStatus = function () { return cordova(this, "getRemindersAuthorizationStatus", { "platforms": ["iOS"] }, arguments); };
- Diagnostic.prototype.requestRemindersAuthorization = function () { return cordova(this, "requestRemindersAuthorization", { "platforms": ["iOS"] }, arguments); };
- Diagnostic.prototype.isBackgroundRefreshAuthorized = function () { return cordova(this, "isBackgroundRefreshAuthorized", { "platforms": ["iOS"] }, arguments); };
- Diagnostic.prototype.getBackgroundRefreshStatus = function () { return cordova(this, "getBackgroundRefreshStatus", { "platforms": ["iOS"] }, arguments); };
- Diagnostic.prototype.requestBluetoothAuthorization = function () { return cordova(this, "requestBluetoothAuthorization", { "platforms": ["iOS"] }, arguments); };
- Diagnostic.prototype.isMotionAvailable = function () { return cordova(this, "isMotionAvailable", { "platforms": ["iOS"] }, arguments); };
- Diagnostic.prototype.isMotionRequestOutcomeAvailable = function () { return cordova(this, "isMotionRequestOutcomeAvailable", { "platforms": ["iOS"] }, arguments); };
- Diagnostic.prototype.requestMotionAuthorization = function () { return cordova(this, "requestMotionAuthorization", { "platforms": ["iOS"] }, arguments); };
- Diagnostic.prototype.getMotionAuthorizationStatus = function () { return cordova(this, "getMotionAuthorizationStatus", { "platforms": ["iOS"] }, arguments); };
- Diagnostic.prototype.getLocationAccuracyAuthorization = function () { return cordova(this, "getLocationAccuracyAuthorization", { "platforms": ["iOS", "Android"] }, arguments); };
- Diagnostic.prototype.requestTemporaryFullAccuracyAuthorization = function (purpose) { return cordova(this, "requestTemporaryFullAccuracyAuthorization", { "platforms": ["iOS"] }, arguments); };
- Diagnostic.prototype.registerLocationAccuracyAuthorizationChangeHandler = function (handler) { return cordova(this, "registerLocationAccuracyAuthorizationChangeHandler", { "platforms": ["iOS"], "sync": true }, arguments); };
- Object.defineProperty(Diagnostic.prototype, "permissionStatus", {
- get: function () { return cordovaPropertyGet(this, "permissionStatus"); },
- set: function (value) { cordovaPropertySet(this, "permissionStatus", value); },
- enumerable: false,
- configurable: true
- });
- Object.defineProperty(Diagnostic.prototype, "NFCState", {
- get: function () { return cordovaPropertyGet(this, "NFCState"); },
- set: function (value) { cordovaPropertySet(this, "NFCState", value); },
- enumerable: false,
- configurable: true
- });
- Object.defineProperty(Diagnostic.prototype, "cpuArchitecture", {
- get: function () { return cordovaPropertyGet(this, "cpuArchitecture"); },
- set: function (value) { cordovaPropertySet(this, "cpuArchitecture", value); },
- enumerable: false,
- configurable: true
- });
- Object.defineProperty(Diagnostic.prototype, "remoteNotificationType", {
- get: function () { return cordovaPropertyGet(this, "remoteNotificationType"); },
- set: function (value) { cordovaPropertySet(this, "remoteNotificationType", value); },
- enumerable: false,
- configurable: true
- });
- Object.defineProperty(Diagnostic.prototype, "motionStatus", {
- get: function () { return cordovaPropertyGet(this, "motionStatus"); },
- set: function (value) { cordovaPropertySet(this, "motionStatus", value); },
- enumerable: false,
- configurable: true
- });
- Diagnostic.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: Diagnostic, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
- Diagnostic.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: Diagnostic });
- Diagnostic.pluginName = "Diagnostic";
- Diagnostic.plugin = "cordova.plugins.diagnostic";
- Diagnostic.pluginRef = "cordova.plugins.diagnostic";
- Diagnostic.repo = "https://github.com/dpa99c/cordova-diagnostic-plugin";
- Diagnostic.platforms = ["Android", "iOS", "Windows"];
- Diagnostic = __decorate([], Diagnostic);
- return Diagnostic;
- }(AwesomeCordovaNativePlugin));
- export { Diagnostic };
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: Diagnostic, decorators: [{
- type: Injectable
- }], propDecorators: { permissionStatus: [], NFCState: [], cpuArchitecture: [], remoteNotificationType: [], motionStatus: [], isLocationAvailable: [], isWifiAvailable: [], isCameraAvailable: [], isBluetoothAvailable: [], switchToLocationSettings: [], switchToMobileDataSettings: [], switchToBluetoothSettings: [], switchToWifiSettings: [], isWifiEnabled: [], setWifiState: [], setBluetoothState: [], enableDebug: [], isLocationEnabled: [], isLocationAuthorized: [], getLocationAuthorizationStatus: [], getLocationAuthorizationStatuses: [], requestLocationAuthorization: [], isCameraPresent: [], isCameraAuthorized: [], getCameraAuthorizationStatus: [], requestCameraAuthorization: [], isMicrophoneAuthorized: [], getMicrophoneAuthorizationStatus: [], requestMicrophoneAuthorization: [], isContactsAuthorized: [], getContactsAuthorizationStatus: [], requestContactsAuthorization: [], isCalendarAuthorized: [], getCalendarAuthorizationStatus: [], requestCalendarAuthorization: [], switchToSettings: [], getBluetoothState: [], registerBluetoothStateChangeHandler: [], registerLocationStateChangeHandler: [], getArchitecture: [], getCurrentBatteryLevel: [], restart: [], isGpsLocationAvailable: [], isGpsLocationEnabled: [], isNetworkLocationAvailable: [], isNetworkLocationEnabled: [], isAirplaneModeEnabled: [], isMobileDataEnabled: [], getLocationMode: [], getDeviceOSVersion: [], getBuildOSVersion: [], getPermissionAuthorizationStatus: [], getPermissionsAuthorizationStatus: [], requestRuntimePermission: [], requestRuntimePermissions: [], isRequestingPermission: [], registerPermissionRequestCompleteHandler: [], isBluetoothEnabled: [], hasBluetoothSupport: [], hasBluetoothLESupport: [], hasBluetoothLEPeripheralSupport: [], getBluetoothAuthorizationStatus: [], getBluetoothAuthorizationStatuses: [], isExternalStorageAuthorized: [], getExternalStorageAuthorizationStatus: [], requestExternalStorageAuthorization: [], getExternalSdCardDetails: [], switchToWirelessSettings: [], switchToNFCSettings: [], isNFCPresent: [], isNFCEnabled: [], isNFCAvailable: [], registerNFCStateChangeHandler: [], isDataRoamingEnabled: [], isADBModeEnabled: [], isDeviceRooted: [], isCameraRollAuthorized: [], getCameraRollAuthorizationStatus: [], requestCameraRollAuthorization: [], presentLimitedLibraryPicker: [], isRemoteNotificationsEnabled: [], isRegisteredForRemoteNotifications: [], getRemoteNotificationsAuthorizationStatus: [], requestRemoteNotificationsAuthorization: [], getRemoteNotificationTypes: [], isRemindersAuthorized: [], getRemindersAuthorizationStatus: [], requestRemindersAuthorization: [], isBackgroundRefreshAuthorized: [], getBackgroundRefreshStatus: [], requestBluetoothAuthorization: [], isMotionAvailable: [], isMotionRequestOutcomeAvailable: [], requestMotionAuthorization: [], getMotionAuthorizationStatus: [], getLocationAccuracyAuthorization: [], requestTemporaryFullAccuracyAuthorization: [], registerLocationAccuracyAuthorizationChangeHandler: [] } });
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvQGF3ZXNvbWUtY29yZG92YS1wbHVnaW5zL3BsdWdpbnMvZGlhZ25vc3RpYy9uZ3gvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTywrRUFBZ0UsTUFBTSwrQkFBK0IsQ0FBQzs7O0lBeUM3RSw4QkFBMEI7OztRQUN4RCxnQkFBVSxHQUFHO1lBQ1gsZUFBZSxFQUFFLGlCQUFpQjtZQUNsQywwQkFBMEIsRUFBRSw0QkFBNEI7WUFDeEQsc0JBQXNCLEVBQUUsd0JBQXdCO1lBQ2hELG9CQUFvQixFQUFFLHNCQUFzQjtZQUM1QyxxQkFBcUIsRUFBRSx1QkFBdUI7WUFDOUMsb0JBQW9CLEVBQUUsc0JBQXNCO1lBQzVDLGFBQWEsRUFBRSxlQUFlO1lBQzlCLGtCQUFrQixFQUFFLG9CQUFvQjtZQUN4QyxtQkFBbUIsRUFBRSxxQkFBcUI7WUFDMUMsaUJBQWlCLEVBQUUsbUJBQW1CO1lBQ3RDLGNBQWMsRUFBRSxnQkFBZ0I7WUFDaEMsWUFBWSxFQUFFLGNBQWM7WUFDNUIsdUJBQXVCLEVBQUUseUJBQXlCO1lBQ2xELFVBQVUsRUFBRSxZQUFZO1lBQ3hCLE1BQU0sRUFBRSxRQUFRO1lBQ2hCLFlBQVksRUFBRSxjQUFjO1lBQzVCLG1CQUFtQixFQUFFLHFCQUFxQjtZQUMxQyxrQkFBa0IsRUFBRSxvQkFBb0I7WUFDeEMsc0JBQXNCLEVBQUUsd0JBQXdCO1lBQ2hELGFBQWEsRUFBRSxlQUFlO1lBQzlCLGFBQWEsRUFBRSxlQUFlO1lBQzlCLGFBQWEsRUFBRSxlQUFlO1lBQzlCLHFCQUFxQixFQUFFLHVCQUF1QjtZQUM5QyxnQkFBZ0IsRUFBRSxrQkFBa0I7WUFDcEMsaUJBQWlCLEVBQUUsbUJBQW1CO1lBQ3RDLGdCQUFnQixFQUFFLGtCQUFrQjtZQUNwQyxrQkFBa0IsRUFB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LDBCQUEwQixNQWExQix3QkFBd0IsTUFVeEIscUJBQXFCLE1BVXJCLG1CQUFtQixNQVVuQixlQUFlLE1BVWYsa0JBQWtCLE1BVWxCLGlCQUFpQixNQVlqQixnQ0FBZ0MsTUFZaEMsaUNBQWlDLE1BWWpDLHdCQUF3QixNQVl4Qix5QkFBeUIsTUFhekIsc0JBQXNCLE1BV3RCLHdDQUF3QyxNQVd4QyxrQkFBa0IsTUFVbEIsbUJBQW1CLE1BVW5CLHFCQUFxQixNQVVyQiwrQkFBK0IsTUFVL0IsK0JBQStCLE1BVy9CLGlDQUFpQyxNQVVqQywyQkFBMkIsTUFVM0IscUNBQXFDLE1BVXJDLG1DQUFtQyxNQWVuQyx3QkFBd0IsTUFXeEIsd0JBQXdCLE1BU3hCLG1CQUFtQixNQVFuQixZQUFZLE1BV1osWUFBWSxNQVdaLGNBQWMsTUFlZCw2QkFBNkIsTUFRN0Isb0JBQW9CLE1BVXBCLGdCQUFnQixNQVVoQixjQUFjLE1BbUJkLHNCQUFzQixNQWlCdEIsZ0NBQWdDLE1BbUJoQyw4QkFBOEIsTUFVOUIsMkJBQTJCLE1BVTNCLDRCQUE0QixNQVU1QixrQ0FBa0MsTUFXbEMseUNBQXlDLE1BWXpDLHVDQUF1QyxNQVd2QywwQkFBMEIsTUFVMUIscUJBQXFCLE1BVXJCLCtCQUErQixNQVUvQiw2QkFBNkIsTUFVN0IsNkJBQTZCLE1BVTdCLDBCQUEwQixNQVkxQiw2QkFBNkIsTUFVN0IsaUJBQWlCLE1BWWpCLCtCQUErQixNQVkvQiwwQkFBMEIsTUFZMUIsNEJBQTRCLE1BWTVCLGdDQUFnQyxNQWFoQyx5Q0FBeUMsTUFZekMsa0RBQWtEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29yZG92YSwgQ29yZG92YVByb3BlcnR5LCBBd2Vzb21lQ29yZG92YU5hdGl2ZVBsdWdpbiwgUGx1Z2luIH0gZnJvbSAnQGF3ZXNvbWUtY29yZG92YS1wbHVnaW5zL2NvcmUnO1xuXG4vKipcbiAqIEBuYW1lIERpYWdub3N0aWNcbiAqIEBkZXNjcmlwdGlvblxuICogQ2hlY2tzIHdoZXRoZXIgZGV2aWNlIGhhcmR3YXJlIGZlYXR1cmVzIGFyZSBlbmFibGVkIG9yIGF2YWlsYWJsZSB0byB0aGUgYXBwLCBlLmcuIGNhbWVyYSwgR1BTLCB3aWZpXG4gKiBAdXNhZ2VcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IERpYWdub3N0aWMgfSBmcm9tICdAYXdlc29tZS1jb3Jkb3ZhLXBsdWdpbnMvZGlhZ25vc3RpYy9uZ3gnO1xuICpcbiAqIGNvbnN0cnVjdG9yKHByaXZhdGUgZGlhZ25vc3RpYzogRGlhZ25vc3RpYykgeyB9XG4gKlxuICogLi4uXG4gKlxuICogbGV0IHN1Y2Nlc3NDYWxsYmFjayA9IChpc0F2YWlsYWJsZSkgPT4geyBjb25zb2xlLmxvZygnSXMgYXZhaWxhYmxlPyAnICsgaXNBdmFpbGFibGUpOyB9XG4gKiBsZXQgZXJyb3JDYWxsYmFjayA9IChlKSA9PiBjb25zb2xlLmVycm9yKGUpO1xuICpcbiAqIHRoaXMuZGlhZ25vc3RpYy5pc0NhbWVyYUF2YWlsYWJsZSgpLnRoZW4oc3VjY2Vzc0NhbGxiYWNrKS5jYXRjaChlcnJvckNhbGxiYWNrKTtcbiAqXG4gKiB0aGlzLmRpYWdub3N0aWMuaXNCbHVldG9vdGhBdmFpbGFibGUoKS50aGVuKHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjayk7XG4gKlxuICpcbiAqIHRoaXMuZGlhZ25vc3RpYy5nZXRCbHVldG9vdGhTdGF0ZSgpXG4gKiAgIC50aGVuKChzdGF0ZSkgPT4ge1xuICogICAgIGlmIChzdGF0ZSA9PSB0aGlzLmRpYWdub3N0aWMuYmx1ZXRvb3RoU3RhdGUuUE9XRVJFRF9PTil7XG4gKiAgICAgICAvLyBkbyBzb21ldGhpbmdcbiAqICAgICB9IGVsc2Uge1xuICogICAgICAgLy8gZG8gc29tZXRoaW5nIGVsc2VcbiAqICAgICB9XG4gKiAgIH0pLmNhdGNoKGUgPT4gY29uc29sZS5lcnJvcihlKSk7XG4gKlxuICogYGBgXG4gKi9cbkBQbHVnaW4oe1xuICBwbHVnaW5OYW1lOiAnRGlhZ25vc3RpYycsXG4gIHBsdWdpbjogJ2NvcmRvdmEucGx1Z2lucy5kaWFnbm9zdGljJyxcbiAgcGx1Z2luUmVmOiAnY29yZG92YS5wbHVnaW5zLmRpYWdub3N0aWMnLFxuICByZXBvOiAnaHR0cHM6Ly9naXRodWIuY29tL2RwYTk5Yy9jb3Jkb3ZhLWRpYWdub3N0aWMtcGx1Z2luJyxcbiAgcGxhdGZvcm1zOiBbJ0FuZHJvaWQnLCAnaU9TJywgJ1dpbmRvd3MnXSxcbn0pXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRGlhZ25vc3RpYyBleHRlbmRzIEF3ZXNvbWVDb3Jkb3ZhTmF0aXZlUGx1Z2luIHtcbiAgcGVybWlzc2lvbiA9IHtcbiAgICBBQ0NFUFRfSEFORE9WRVI6ICdBQ0NFUFRfSEFORE9WRVInLFxuICAgIEFDQ0VTU19CQUNLR1JPVU5EX0xPQ0FUSU9OOiAnQUNDRVNTX0JBQ0tHUk9VTkRfTE9DQVRJT04nLFxuICAgIEFDQ0VTU19DT0FSU0VfTE9DQVRJT046ICdBQ0NFU1NfQ09BUlNFX0xPQ0FUSU9OJyxcbiAgICBBQ0NFU1NfRklORV9MT0NBVElPTjogJ0FDQ0VTU19GSU5FX0xPQ0FUSU9OJyxcbiAgICBBQ0NFU1NfTUVESUFfTE9DQVRJT046ICdBQ0NFU1NfTUVESUFfTE9DQVRJT04nLFxuICAgIEFDVElWSVRZX1JFQ09HTklUSU9OOiAnQUNUSVZJVFlfUkVDT0dOSVRJT04nLFxuICAgIEFERF9WT0lDRU1BSUw6ICdBRERfVk9JQ0VNQUlMJyxcbiAgICBBTlNXRVJfUEhPTkVfQ0FMTFM6ICdBTlNXRVJfUEhPTkVfQ0FMTFMnLFxuICAgIEJMVUVUT09USF9BRFZFUlRJU0U6ICdCTFVFVE9PVEhfQURWRVJUSVNFJyxcbiAgICBCTFVFVE9PVEhfQ09OTkVDVDogJ0JMVUVUT09USF9DT05ORUNUJyxcbiAgICBCTFVFVE9PVEhfU0NBTjogJ0JMVUVUT09USF9TQ0FOJyxcbiAgICBCT0RZX1NFTlNPUlM6ICdCT0RZX1NFTlNPUlMnLFxuICAgIEJPRFlfU0VOU09SU19CQUNLR1JPVU5EOiAnQk9EWV9TRU5TT1JTX0JBQ0tHUk9VTkQnLFxuICAgIENBTExfUEhPTkU6ICdDQUxMX1BIT05FJyxcbiAgICBDQU1FUkE6ICdDQU1FUkEnLFxuICAgIEdFVF9BQ0NPVU5UUzogJ0dFVF9BQ0NPVU5UUycsXG4gICAgTkVBUkJZX1dJRklfREVWSUNFUzogJ05FQVJCWV9XSUZJX0RFVklDRVMnLFxuICAgIFBPU1RfTk9USUZJQ0FUSU9OUzogJ1BPU1RfTk9USUZJQ0FUSU9OUycsXG4gICAgUFJPQ0VTU19PVVRHT0lOR19DQUxMUzogJ1BST0NFU1NfT1VUR09JTkdfQ0FMTFMnLFxuICAgIFJFQURfQ0FMRU5EQVI6ICdSRUFEX0NBTEVOREFSJyxcbiAgICBSRUFEX0NBTExfTE9HOiAnUkVBRF9DQUxMX0xPRycsXG4gICAgUkVBRF9DT05UQUNUUzogJ1JFQURfQ09OVEFDVFMnLFxuICAgIFJFQURfRVhURVJOQUxfU1RPUkFHRTogJ1JFQURfRVhURVJOQUxfU1RPUkFHRScsXG4gICAgUkVBRF9NRURJQV9BVURJTzogJ1JFQURfTUVESUFfQVVESU8nLFxuICAgIFJFQURfTUVESUFfSU1BR0VTOiAnUkVBRF9NRURJQV9JTUFHRVMnLFxuICAgIFJFQURfTUVESUFfVklERU86ICdSRUFEX01FRElBX1ZJREVPJyxcbiAgICBSRUFEX1BIT05FX05VTUJFUlM6ICdSRUFEX1BIT05FX05VTUJFUlMnLFxuICAgIFJFQURfUEhPTkVfU1RBVEU6ICdSRUFEX1BIT05FX1NUQVRFJyxcbiAgICBSRUFEX1NNUzogJ1JFQURfU01TJyxcbiAgICBSRUNFSVZFX01NUzogJ1JFQ0VJVkVfTU1TJyxcbiAgICBSRUNFSVZFX1NNUzogJ1JFQ0VJVkVfU01TJyxcbiAgICBSRUNFSVZFX1dBUF9QVVNIOiAnUkVDRUlWRV9XQVBfUFVTSCcsXG4gICAgUkVDT1JEX0FVRElPOiAnUkVDT1JEX0FVRElPJyxcbiAgICBTRU5EX1NNUzogJ1NFTkRfU01TJyxcbiAgICBVU0VfU0lQOiAnVVNFX1NJUCcsXG4gICAgVVdCX1JBTkdJTkc6ICdVV0JfUkFOR0lORycsXG4gICAgV1JJVEVfQ0FMRU5EQVI6ICdXUklURV9DQUxFTkRBUicsXG4gICAgV1JJVEVfQ0FMTF9MT0c6ICdXUklURV9DQUxMX0xPRycsXG4gICAgV1JJVEVfQ09OVEFDVFM6ICdXUklURV9DT05UQUNUUycsXG4gICAgV1JJVEVfRVhURVJOQUxfU1RPUkFHRTogJ1dSSVRFX0VYVEVSTkFMX1NUT1JBR0UnLFxuICB9O1xuXG4gIEBDb3Jkb3ZhUHJvcGVydHkoKVxuICBwZXJtaXNzaW9uU3RhdHVzOiB7XG4gICAgR1JBTlRFRDogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIGNvcmRvdmEucGx1Z2lucy5kaWFnbm9zdGljQDUuMC4wIHVzZXMgREVOSUVEX09OQ0UgdG8gdW5pZnkgREVOSUVEKiBzdGF0dXNlcyBhY3Jvc3MgaU9TL0FuZHJvaWRcbiAgICAgKi9cbiAgICBERU5JRUQ6IHN0cmluZztcbiAgICBERU5JRURfT05DRTogc3RyaW5nO1xuICAgIE5PVF9SRVFVRVNURUQ6IHN0cmluZztcbiAgICBERU5JRURfQUxXQVlTOiBzdHJpbmc7XG4gICAgUkVTVFJJQ1RFRDogc3RyaW5nO1xuICAgIEdSQU5URURfV0hFTl9JTl9VU0U6IHN0cmluZztcbiAgICBFUEhFTUVSQUw6IHN0cmluZztcbiAgICBQUk9WSVNJT05BTDogc3RyaW5nO1xuICAgIExJTUlURUQ6IHN0cmluZztcbiAgfTtcblxuICBsb2NhdGlvbkF1dGhvcml6YXRpb25Nb2RlID0ge1xuICAgIEFMV0FZUzogJ2Fsd2F5cycsXG4gICAgV0hFTl9JTl9VU0U6ICd3aGVuX2luX3VzZScsXG4gIH07XG5cbiAgLyoqXG4gICAqIExvY2F0aW9uIGFjY3VyYWN5IGF1dGhvcml6YXRpb25cbiAgICovXG4gIGxvY2F0aW9uQWNjdXJhY3lBdXRob3JpemF0aW9uID0ge1xuICAgIEZVTEw6ICdmdWxsJyxcbiAgICBSRURVQ0VEOiAncmVkdWNlZCcsXG4gIH07XG5cbiAgcGVybWlzc2lvbkdyb3VwcyA9IHtcbiAgICBDQUxFTkRBUjogWydSRUFEX0NBTEVOREFSJywgJ1dSSVRFX0NBTEVOREFSJ10sXG4gICAgQ0FNRVJBOiBbJ0NBTUVSQSddLFxuICAgIENPTlRBQ1RTOiBbJ1JFQURfQ09OVEFDVFMnLCAnV1JJVEVfQ09OVEFDVFMnLCAnR0VUX0FDQ09VTlRTJ10sXG4gICAgTE9DQVRJT046IFsnQUNDRVNTX0ZJTkVfTE9DQVRJT04nLCAnQUNDRVNTX0NPQVJTRV9MT0NBVElPTiddLFxuICAgIE1JQ1JPUEhPTkU6IFsnUkVDT1JEX0FVRElPJ10sXG4gICAgUEhPTkU6IFtcbiAgICAgICdSRUFEX1BIT05FX1NUQVRFJyxcbiAgICAgICdDQUxMX1BIT05FJyxcbiAgICAgICdBRERfVk9JQ0VNQUlMJyxcbiAgICAgICdVU0VfU0lQJyxcbiAgICAgICdQUk9DRVNTX09VVEdPSU5HX0NBTExTJyxcbiAgICAgICdSRUFEX0NBTExfTE9HJyxcbiAgICAgICdXUklURV9DQUxMX0xPRycsXG4gICAgXSxcbiAgICBTRU5TT1JTOiBbJ0JPRFlfU0VOU09SUyddLFxuICAgIFNNUzogWydTRU5EX1NNUycsICdSRUNFSVZFX1NNUycsICdSRUFEX1NNUycsICdSRUNFSVZFX1dBUF9QVVNIJywgJ1JFQ0VJVkVfTU1TJ10sXG4gICAgU1RPUkFHRTogWydSRUFEX0VYVEVSTkFMX1NUT1JBR0UnLCAnV1JJVEVfRVhURVJOQUxfU1RPUkFHRSddLFxuICAgIE5FQVJCWV9ERVZJQ0VTOiBbXCJCTFVFVE9PVEhfQURWRVJUSVNFXCIsIFwiQkxVRVRPT1RIX1NDQU5cIiwgXCJCTFVFVE9PVEhfQ09OTkVDVFwiXSxcbiAgfTtcblxuICBsb2NhdGlvbk1vZGUgPSB7XG4gICAgSElHSF9BQ0NVUkFDWTogJ2hpZ2hfYWNjdXJhY3knLFxuICAgIERFVklDRV9PTkxZOiAnZGV2aWNlX29ubHknLFxuICAgIEJBVFRFUllfU0FWSU5HOiAnYmF0dGVyeV9zYXZpbmcnLFxuICAgIExPQ0FUSU9OX09GRjogJ2xvY2F0aW9uX29mZicsXG4gIH07XG5cbiAgYmx1ZXRvb3RoU3RhdGUgPSB7XG4gICAgVU5LTk9XTjogJ3Vua25vd24nLFxuICAgIFJFU0VUVElORzogJ3Jlc2V0dGluZycsIC8vIGlPU1xuICAgIFVOU1VQUE9SVEVEOiAndW5zdXBwb3J0ZWQnLCAvLyBpT1NcbiAgICBVTkFVVEhPUklaRUQ6ICd1bmF1dGhvcml6ZWQnLCAvLyBpT1NcbiAgICBQT1dFUkVEX09GRjogJ3Bvd2VyZWRfb2ZmJyxcbiAgICBQT1dFUkVEX09OOiAncG93ZXJlZF9vbicsXG4gICAgUE9XRVJJTkdfT0ZGOiAncG93ZXJpbmdfb2ZmJyxcbiAgICBQT1dFUklOR19PTjogJ3Bvd2VyaW5nX29uJyxcbiAgfTtcblxuICBAQ29yZG92YVByb3BlcnR5KClcbiAgTkZDU3RhdGU6IHtcbiAgICBVTktOT1dOOiBzdHJpbmc7XG4gICAgUE9XRVJFRF9PRkY6IHN0cmluZztcbiAgICBQT1dFUkVEX09OOiBzdHJpbmc7XG4gICAgUE9XRVJJTkdfT046IHN0cmluZztcbiAgICBQT1dFUklOR19PRkY6IHN0cmluZztcbiAgfTtcblxuICBAQ29yZG92YVByb3BlcnR5KClcbiAgY3B1QXJjaGl0ZWN0dXJlOiB7XG4gICAgICBNSVBTOiBzdHJpbmc7XG4gICAgICBNSVBTXzY0OiBzdHJpbmc7XG4gICAgICBVTktOT1dOOiBzdHJpbmc7XG4gICAgICBBUk12Njogc3RyaW5nO1xuICAgICAgQVJNdjc6IHN0cmluZztcbiAgICAgIEFSTXY4OiBzdHJpbmc7XG4gICAgICBYODY6IHN0cmluZztcbiAgICAgIFg4Nl82NDogc3RyaW5nO1xuICB9O1xuXG4gIEBDb3Jkb3ZhUHJvcGVydHkoKVxuICByZW1vdGVOb3RpZmljYXRpb25UeXBlOiB7XG4gICAgICBBTEVSVDogc3RyaW5nO1xuICAgICAgU09VTkQ6IHN0cmluZztcbiAgICAgIEJBREdFOiBzdHJpbmc7XG4gIH07XG5cbiAgQENvcmRvdmFQcm9wZXJ0eSgpXG4gIG1vdGlvblN0YXR1czoge1xuICAgIE5PVF9SRVFVRVNURUQ6IHN0cmluZztcbiAgICBHUkFOVEVEOiBzdHJpbmc7XG4gICAgREVOSUVEOiBzdHJpbmc7XG4gICAgUkVTVFJJQ1RFRDogc3RyaW5nO1xuICAgIE5PVF9BVkFJTEFCTEU6IHN0cmluZztcbiAgICBOT1RfREVURVJNSU5FRDogc3RyaW5nO1xuICAgIFVOS05PV046IHN0cmluZztcbiAgfTtcblxuICAvKipcbiAgICogQWNjZXNzIHRvIHRoZSBwaG90byBsaWJyYXJ5IChpT1MgMTQrKVxuICAgKlxuICAgKiBBRERfT05MWSAtIGNhbiBhZGQgdG8gYnV0IG5vdCByZWFkIGZyb20gUGhvdG8gTGlicmFyeVxuICAgKiBSRUFEX1dSSVRFIC0gY2FuIGJvdGggYWRkIHRvIGFuZCByZWFkIGZyb20gUGhvdG8gTGlicmFyeVxuICAgKlxuICAgKi9cbiAgcGhvdG9MaWJyYXJ5QWNjZXNzTGV2ZWwgPSB7XG4gICAgQUREX09OTFk6ICdhZGRfb25seScsXG4gICAgUkVBRF9XUklURTogJ3JlYWRfd3JpdGUnLFxuICB9O1xuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYXBwIGlzIGFibGUgdG8gYWNjZXNzIGRldmljZSBsb2NhdGlvbi5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8YW55Pn1cbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgaXNMb2NhdGlvbkF2YWlsYWJsZSgpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgV2lmaSBpcyBjb25uZWN0ZWQvZW5hYmxlZC4gT24gaU9TIHRoaXMgcmV0dXJucyB0cnVlIGlmIHRoZSBkZXZpY2UgaXMgY29ubmVjdGVkIHRvIGEgbmV0d29yayBieSBXaUZpLiBPbiBBbmRyb2lkIGFuZCBXaW5kb3dzIDEwIE1vYmlsZSB0aGlzIHJldHVybnMgdHJ1ZSBpZiB0aGUgV2lGaSBzZXR0aW5nIGlzIHNldCB0byBlbmFibGVkLlxuICAgKiBPbiBBbmRyb2lkIHRoaXMgcmVxdWlyZXMgcGVybWlzc2lvbi4gYDx1c2VzLXBlcm1pc3Npb24gYW5kcm9pZDpuYW1lPVwiYW5kcm9pZC5wZXJtaXNzaW9uLkFDQ0VTU19XSUZJX1NUQVRFXCIgLz5gXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59XG4gICAqL1xuICBAQ29yZG92YSgpXG4gIGlzV2lmaUF2YWlsYWJsZSgpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIGRldmljZSBoYXMgYSBjYW1lcmEuIE9uIEFuZHJvaWQgdGhpcyByZXR1cm5zIHRydWUgaWYgdGhlIGRldmljZSBoYXMgYSBjYW1lcmEuIE9uIGlPUyB0aGlzIHJldHVybnMgdHJ1ZSBpZiBib3RoIHRoZSBkZXZpY2UgaGFzIGEgY2FtZXJhIEFORCB0aGUgYXBwbGljYXRpb24gaXMgYXV0aG9yaXplZCB0byB1c2UgaXQuIE9uIFdpbmRvd3MgMTAgTW9iaWxlIHRoaXMgcmV0dXJucyB0cnVlIGlmIGJvdGggdGhlIGRldmljZSBoYXMgYSByZWFyLWZhY2luZyBjYW1lcmEgQU5EIHRoZVxuICAgKiBhcHBsaWNhdGlvbiBpcyBhdXRob3JpemVkIHRvIHVzZSBpdC5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBbZXh0ZXJuYWxTdG9yYWdlXSBBbmRyb2lkIG9ubHk6IElmIHRydWUsIGNoZWNrcyBwZXJtaXNzaW9uIGZvciBSRUFEX0VYVEVSTkFMX1NUT1JBR0UgaW4gYWRkaXRpb24gdG8gQ0FNRVJBIHJ1bi10aW1lIHBlcm1pc3Npb24uXG4gICAqICBjb3Jkb3ZhLXBsdWdpbi1jYW1lcmFAMi4yKyByZXF1aXJlcyBib3RoIG9mIHRoZXNlIHBlcm1pc3Npb25zLiBEZWZhdWx0cyB0byB0cnVlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgQENvcmRvdmEoeyBjYWxsYmFja09yZGVyOiAncmV2ZXJzZScgfSlcbiAgaXNDYW1lcmFBdmFpbGFibGUoZXh0ZXJuYWxTdG9yYWdlPzogYm9vbGVhbik6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGUgZGV2aWNlIGhhcyBCbHVldG9vdGggY2FwYWJpbGl0aWVzIGFuZCBpZiBzbyB0aGF0IEJsdWV0b290aCBpcyBzd2l0Y2hlZCBvbiAoc2FtZSBvbiBBbmRyb2lkLCBpT1MgYW5kIFdpbmRvd3MgMTAgTW9iaWxlKVxuICAgKiBPbiBBbmRyb2lkIHRoaXMgcmVxdWlyZXMgcGVybWlzc2lvbiA8dXNlcy1wZXJtaXNzaW9uIGFuZHJvaWQ6bmFtZT1cImFuZHJvaWQucGVybWlzc2lvbi5CTFVFVE9PVEhcIiAvPlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBpc0JsdWV0b290aEF2YWlsYWJsZSgpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwbGF5cyB0aGUgZGV2aWNlIGxvY2F0aW9uIHNldHRpbmdzIHRvIGFsbG93IHVzZXIgdG8gZW5hYmxlIGxvY2F0aW9uIHNlcnZpY2VzL2NoYW5nZSBsb2NhdGlvbiBtb2RlLlxuICAgKi9cbiAgQENvcmRvdmEoeyBzeW5jOiB0cnVlLCBwbGF0Zm9ybXM6IFsnQW5kcm9pZCcsICdXaW5kb3dzIDEwJywgJ2lPUyddIH0pXG4gIHN3aXRjaFRvTG9jYXRpb25TZXR0aW5ncygpOiB2b2lkIHt9XG5cbiAgLyoqXG4gICAqIERpc3BsYXlzIG1vYmlsZSBzZXR0aW5ncyB0byBhbGxvdyB1c2VyIHRvIGVuYWJsZSBtb2JpbGUgZGF0YS5cbiAgICovXG4gIEBDb3Jkb3ZhKHsgc3luYzogdHJ1ZSwgcGxhdGZvcm1zOiBbJ0FuZHJvaWQnLCAnV2luZG93cyAxMCddIH0pXG4gIHN3aXRjaFRvTW9iaWxlRGF0YVNldHRpbmdzKCk6IHZvaWQge31cblxuICAvKipcbiAgICogRGlzcGxheXMgQmx1ZXRvb3RoIHNldHRpbmdzIHRvIGFsbG93IHVzZXIgdG8gZW5hYmxlIEJsdWV0b290aC5cbiAgICovXG4gIEBDb3Jkb3ZhKHsgc3luYzogdHJ1ZSwgcGxhdGZvcm1zOiBbJ0FuZHJvaWQnLCAnV2luZG93cyAxMCddIH0pXG4gIHN3aXRjaFRvQmx1ZXRvb3RoU2V0dGluZ3MoKTogdm9pZCB7fVxuXG4gIC8qKlxuICAgKiBEaXNwbGF5cyBXaUZpIHNldHRpbmdzIHRvIGFsbG93IHVzZXIgdG8gZW5hYmxlIFdpRmkuXG4gICAqL1xuICBAQ29yZG92YSh7IHN5bmM6IHRydWUsIHBsYXRmb3JtczogWydBbmRyb2lkJywgJ1dpbmRvd3MgMTAnXSB9KVxuICBzd2l0Y2hUb1dpZmlTZXR0aW5ncygpOiB2b2lkIHt9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgV2lGaSBzZXR0aW5nIGlzIHNldCB0byBlbmFibGVkLCBhbmQgaXMgdGhlIHNhbWUgYXMgYGlzV2lmaUF2YWlsYWJsZSgpYFxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxib29sZWFuPn1cbiAgICovXG4gIEBDb3Jkb3ZhKHsgcGxhdGZvcm1zOiBbJ0FuZHJvaWQnLCAnV2luZG93cyAxMCddIH0pXG4gIGlzV2lmaUVuYWJsZWQoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuYWJsZXMvZGlzYWJsZXMgV2lGaSBvbiB0aGUgZGV2aWNlLlxuICAgKiBSZXF1aXJlcyBgQUNDRVNTX1dJRklfU1RBVEVgIGFuZCBgQ0hBTkdFX1dJRklfU1RBVEVgIHBlcm1pc3Npb25zIG9uIEFuZHJvaWRcbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBzdGF0ZVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgQENvcmRvdmEoeyBjYWxsYmFja09yZGVyOiAncmV2ZXJzZScsIHBsYXRmb3JtczogWydBbmRyb2lkJywgJ1dpbmRvd3MgMTAnXSB9KVxuICBzZXRXaWZpU3RhdGUoc3RhdGU6IGJvb2xlYW4pOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmFibGVzL2Rpc2FibGVzIEJsdWV0b290aCBvbiB0aGUgZGV2aWNlLlxuICAgKiBSZXF1aXJlcyBgQkxVRVRPT1RIYCBhbmQgYEJMVUVUT09USF9BRE1JTmAgcGVybWlzc2lvbnMgb24gQW5kcm9pZFxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHN0YXRlXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59XG4gICAqL1xuICBAQ29yZG92YSh7IGNhbGxiYWNrT3JkZXI6ICdyZXZlcnNlJywgcGxhdGZvcm1zOiBbJ0FuZHJvaWQnLCAnV2luZG93cyAxMCddIH0pXG4gIHNldEJsdWV0b290aFN0YXRlKHN0YXRlOiBib29sZWFuKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuXG4gIC8vIEFORFJPSUQgQU5EIElPUyBPTkxZXG5cbiAgLyoqXG4gICAqIEVuYWJsZXMgZGVidWcgbW9kZSwgd2hpY2ggbG9ncyBuYXRpdmUgcGx1Z2luIGRlYnVnIG1lc3NhZ2VzIHRvIHRoZSBuYXRpdmUgYW5kIEpTIGNvbnNvbGVzLlxuICAgKiBEZWJ1ZyBtb2RlIGlzIGluaXRpYWxseSBkaXNhYmxlZCBvbiBwbHVnaW4gaW5pdGlhbGlzYXRpb24uXG4gICAqL1xuICBAQ29yZG92YSh7IHBsYXRmb3JtczogWydBbmRyb2lkJywgJ2lPUyddIH0pXG4gIGVuYWJsZURlYnVnKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGRldmljZSBzZXR0aW5nIGZvciBsb2NhdGlvbiBpcyBvbi4gT24gQW5kcm9pZCB0aGlzIHJldHVybnMgdHJ1ZSBpZiBMb2NhdGlvbiBNb2RlIGlzIHN3aXRjaGVkIG9uLiBPbiBpT1MgdGhpcyByZXR1cm5zIHRydWUgaWYgTG9jYXRpb24gU2VydmljZXMgaXMgc3dpdGNoZWQgb24uXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fVxuICAgKi9cbiAgQENvcmRvdmEoeyBwbGF0Zm9ybXM6IFsnQW5kcm9pZCcsICdpT1MnXSB9KVxuICBpc0xvY2F0aW9uRW5hYmxlZCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBhcHBsaWNhdGlvbiBpcyBhdXRob3JpemVkIHRvIHVzZSBsb2NhdGlvbi5cbiAgICogTm90ZSBmb3IgQW5kcm9pZDogdGhpcyBpcyBpbnRlbmRlZCBmb3IgQW5kcm9pZCA2IC8gQVBJIDIzIGFuZCBhYm92ZS4gQ2FsbGluZyBvbiBBbmRyb2lkIDUgLyBBUEkgMjIgYW5kIGJlbG93IHdpbGwgYWx3YXlzIHJldHVybiBHUkFOVEVEIHN0YXR1cyBhcyBwZXJtaXNzaW9ucyBhcmUgYWxyZWFkeSBncmFudGVkIGF0IGluc3RhbGxhdGlvbiB0aW1lLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBpc0xvY2F0aW9uQXV0aG9yaXplZCgpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBsb2NhdGlvbiBhdXRob3JpemF0aW9uIHN0YXR1cyBmb3IgdGhlIGFwcGxpY2F0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgQENvcmRvdmEoeyBwbGF0Zm9ybXM6IFsnQW5kcm9pZCcsICdpT1MnXSB9KVxuICBnZXRMb2NhdGlvbkF1dGhvcml6YXRpb25TdGF0dXMoKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgaW5kaXZpZHVhbCBsb2NhdGlvbiBhdXRob3JpemF0aW9uIHN0YXR1cyBmb3IgZWFjaCB0eXBlIG9mIGxvY2F0aW9uIGFjY2VzcyAoRklORSwgQ09BUlNFIGFuZCBCQUNLR1JPVU5EKS5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8YW55Pn1cbiAgICovXG4gIEBDb3Jkb3ZhKHsgcGxhdGZvcm1zOiBbJ0FuZHJvaWQnLCAnaU9TJ10gfSlcbiAgZ2V0TG9jYXRpb25BdXRob3JpemF0aW9uU3RhdHVzZXMoKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBsb2NhdGlvbiBhdXRob3JpemF0aW9uIHN0YXR1cyBmb3IgdGhlIGFwcGxpY2F0aW9uLlxuICAgKiBOb3RlIGZvciBBbmRyb2lkOiB0aGlzIGlzIGludGVuZGVkIGZvciBBbmRyb2lkIDYgLyBBUEkgMjMgYW5kIGFib3ZlLiBDYWxsaW5nIG9uIEFuZHJvaWQgNSAvIEFQSSAyMiBhbmQgYmVsb3cgd2lsbCBhbHdheXMgcmV0dXJuIEdSQU5URUQgc3RhdHVzIGFzIHBlcm1pc3Npb25zIGFyZSBhbHJlYWR5IGdyYW50ZWQgYXQgaW5zdGFsbGF0aW9uIHRpbWUuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbbW9kZV0gbG9jYXRpb24gYXV0aG9yaXphdGlvbiBtb2RlOiBcImFsd2F5c1wiIG9yIFwid2hlbl9pbl91c2VcIi4gSWYgbm90IHNwZWNpZmllZCwgZGVmYXVsdHMgdG8gXCJ3aGVuX2luX3VzZVwiLiAodGhpcy5sb2NhdGlvbkF1dGhvcml6YXRpb25Nb2RlKVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2FjY3VyYWN5XSByZXF1ZXN0ZWQgbG9jYXRpb24gYWNjdXJhY3k6IFwiZnVsbFwiIG9yIFwicmVkdWNlZFwiLiBJZiBub3Qgc3BlY2lmaWVkLCBkZWZhdWx0cyB0byBcImZ1bGxcIi4gKHRoaXMubG9jYXRpb25BY2N1cmFjeUF1dGhvcml6YXRpb24pXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59XG4gICAqL1xuICBAQ29yZG92YSh7IHBsYXRmb3JtczogWydBbmRyb2lkJywgJ2lPUyddLCBjYWxsYmFja09yZGVyOiAncmV2ZXJzZScgfSlcbiAgcmVxdWVzdExvY2F0aW9uQXV0aG9yaXphdGlvbihtb2RlPzogc3RyaW5nLCBhY2N1cmFjeT86IHN0cmluZyk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBjYW1lcmEgaGFyZHdhcmUgaXMgcHJlc2VudCBvbiBkZXZpY2UuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59XG4gICAqL1xuICBAQ29yZG92YSh7IHBsYXRmb3JtczogWydBbmRyb2lkJywgJ2lPUyddIH0pXG4gIGlzQ2FtZXJhUHJlc2VudCgpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIGFwcGxpY2F0aW9uIGlzIGF1dGhvcml6ZWQgdG8gdXNlIHRoZSBjYW1lcmEuXG4gICAqIE5vdGUgZm9yIEFuZHJvaWQ6IHRoaXMgaXMgaW50ZW5kZWQgZm9yIEFuZHJvaWQgNiAvIEFQSSAyMyBhbmQgYWJvdmUuIENhbGxpbmcgb24gQW5kcm9pZCA1IC8gQVBJIDIyIGFuZCBiZWxvdyB3aWxsIGFsd2F5cyByZXR1cm4gVFJVRSBhcyBwZXJtaXNzaW9ucyBhcmUgYWxyZWFkeSBncmFudGVkIGF0IGluc3RhbGxhdGlvbiB0aW1lLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtleHRlcm5hbFN0b3JhZ2VdIEFuZHJvaWQgb25seTogSWYgdHJ1ZSwgY2hlY2tzIHBlcm1pc3Npb24gZm9yIFJFQURfRVhURVJOQUxfU1RPUkFHRSBpbiBhZGRpdGlvbiB0byBDQU1FUkEgcnVuLXRpbWUgcGVybWlzc2lvbi5cbiAgICogIGNvcmRvdmEtcGx1Z2luLWNhbWVyYUAyLjIrIHJlcXVpcmVzIGJvdGggb2YgdGhlc2UgcGVybWlzc2lvbnMuIERlZmF1bHRzIHRvIHRydWUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59XG4gICAqL1xuICBAQ29yZG92YSh7IHBsYXRmb3JtczogWydBbmRyb2lkJywgJ2lPUyddLCBjYWxsYmFja09yZGVyOiAncmV2ZXJzZScgfSlcbiAgaXNDYW1lcmFBdXRob3JpemVkKGV4dGVybmFsU3RvcmFnZT86IGJvb2xlYW4pOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjYW1lcmEgYXV0aG9yaXphdGlvbiBzdGF0dXMgZm9yIHRoZSBhcHBsaWNhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBbZXh0ZXJuYWxTdG9yYWdlXSBBbmRyb2lkIG9ubHk6IElmIHRydWUsIGNoZWNrcyBwZXJtaXNzaW9uIGZvciBSRUFEX0VYVEVSTkFMX1NUT1JBR0UgaW4gYWRkaXRpb24gdG8gQ0FNRVJBIHJ1bi10aW1lIHBlcm1pc3Npb24uXG4gICAqICBjb3Jkb3ZhLXBsdWdpbi1jYW1lcmFAMi4yKyByZXF1aXJlcyBib3RoIG9mIHRoZXNlIHBlcm1pc3Npb25zLiBEZWZhdWx0cyB0byB0cnVlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgQENvcmRvdmEoeyBwbGF0Zm9ybXM6IFsnQW5kcm9pZCcsICdpT1MnXSwgY2FsbGJhY2tPcmRlcjogJ3JldmVyc2UnIH0pXG4gIGdldENhbWVyYUF1dGhvcml6YXRpb25TdGF0dXMoZXh0ZXJuYWxTdG9yYWdlPzogYm9vbGVhbik6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcXVlc3RzIGNhbWVyYSBhdXRob3JpemF0aW9uIGZvciB0aGUgYXBwbGljYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2V4dGVybmFsU3RvcmFnZV0gQW5kcm9pZCBvbmx5OiBJZiB0cnVlLCByZXF1ZXN0cyBwZXJtaXNzaW9uIGZvciBSRUFEX0VYVEVSTkFMX1NUT1JBR0UgaW4gYWRkaXRpb24gdG8gQ0FNRVJBIHJ1bi10aW1lIHBlcm1pc3Npb24uXG4gICAqICBjb3Jkb3ZhLXBsdWdpbi1jYW1lcmFAMi4yKyByZXF1aXJlcyBib3RoIG9mIHRoZXNlIHBlcm1pc3Npb25zLiBEZWZhdWx0cyB0byB0cnVlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgQENvcmRvdmEoeyBwbGF0Zm9ybXM6IFsnQW5kcm9pZCcsICdpT1MnXSwgY2FsbGJhY2tPcmRlcjogJ3JldmVyc2UnIH0pXG4gIHJlcXVlc3RDYW1lcmFBdXRob3JpemF0aW9uKGV4dGVybmFsU3RvcmFnZT86IGJvb2xlYW4pOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIGFwcGxpY2F0aW9uIGlzIGF1dGhvcml6ZWQgdG8gdXNlIHRoZSBtaWNyb3Bob25lLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxib29sZWFuPn1cbiAgICovXG4gIEBDb3Jkb3ZhKHsgcGxhdGZvcm1zOiBbJ0FuZHJvaWQnLCAnaU9TJ10gfSlcbiAgaXNNaWNyb3Bob25lQXV0aG9yaXplZCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbWljcm9waG9uZSBhdXRob3JpemF0aW9uIHN0YXR1cyBmb3IgdGhlIGFwcGxpY2F0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgQENvcmRvdmEoeyBwbGF0Zm9ybXM6IFsnQW5kcm9pZCcsICdpT1MnXSB9KVxuICBnZXRNaWNyb3Bob25lQXV0aG9yaXphdGlvblN0YXR1cygpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXF1ZXN0cyBtaWNyb3Bob25lIGF1dGhvcml6YXRpb24gZm9yIHRoZSBhcHBsaWNhdGlvbi5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8YW55Pn1cbiAgICovXG4gIEBDb3Jkb3ZhKHsgcGxhdGZvcm1zOiBbJ0FuZHJvaWQnLCAnaU9TJ10gfSlcbiAgcmVxdWVzdE1pY3JvcGhvbmVBdXRob3JpemF0aW9uKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGUgYXBwbGljYXRpb24gaXMgYXV0aG9yaXplZCB0byB1c2UgY29udGFjdHMgKGFkZHJlc3MgYm9vaykuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fVxuICAgKi9cbiAgQENvcmRvdmEoeyBwbGF0Zm9ybXM6IFsnQW5kcm9pZCcsICdpT1MnXSB9KVxuICBpc0NvbnRhY3RzQXV0aG9yaXplZCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY29udGFjdHMgYXV0aG9yaXphdGlvbiBzdGF0dXMgZm9yIHRoZSBhcHBsaWNhdGlvbi5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8YW55Pn1cbiAgICovXG4gIEBDb3Jkb3ZhKHsgcGxhdGZvcm1zOiBbJ0FuZHJvaWQnLCAnaU9TJ10gfSlcbiAgZ2V0Q29udGFjdHNBdXRob3JpemF0aW9uU3RhdHVzKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcXVlc3RzIGNvbnRhY3RzIGF1dGhvcml6YXRpb24gZm9yIHRoZSBhcHBsaWNhdGlvbi5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8YW55Pn1cbiAgICovXG4gIEBDb3Jkb3ZhKHsgcGxhdGZvcm1zOiBbJ0FuZHJvaWQnLCAnaU9TJ10gfSlcbiAgcmVxdWVzdENvbnRhY3RzQXV0aG9yaXphdGlvbigpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIGFwcGxpY2F0aW9uIGlzIGF1dGhvcml6ZWQgdG8gdXNlIHRoZSBjYWxlbmRhci5cbiAgICpcbiAgICogTm90ZXMgZm9yIEFuZHJvaWQ6XG4gICAqICAgLSBUaGlzIGlzIGludGVuZGVkIGZvciBBbmRyb2lkIDYgLyBBUEkgMjMgYW5kIGFib3ZlLiBDYWxsaW5nIG9uIEFuZHJvaWQgNSAvIEFQSSAyMiBhbmQgYmVsb3cgd2lsbCBhbHdheXMgcmV0dXJuIFRSVUUgYXMgcGVybWlzc2lvbnMgYXJlIGFscmVhZHkgZ3JhbnRlZCBhdCBpbnN0YWxsYXRpb24gdGltZS5cbiAgICpcbiAgICogTm90ZXMgZm9yIGlPUzpcbiAgICogICAtIFRoaXMgcmVsYXRlcyB0byBDYWxlbmRhciBFdmVudHMgKG5vdCBDYWxlbmRhciBSZW1pbmRlcnMpXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fVxuICAgKi9cbiAgQENvcmRvdmEoeyBwbGF0Zm9ybXM6IFsnQW5kcm9pZCcsICdpT1MnXSB9KVxuICBpc0NhbGVuZGFyQXV0aG9yaXplZCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY2FsZW5kYXIgYXV0aG9yaXphdGlvbiBzdGF0dXMgZm9yIHRoZSBhcHBsaWNhdGlvbi5cbiAgICpcbiAgICogTm90ZXMgZm9yIEFuZHJvaWQ6XG4gICAqICAgLSBUaGlzIGlzIGludGVuZGVkIGZvciBBbmRyb2lkIDYgLyBBUEkgMjMgYW5kIGFib3ZlLiBDYWxsaW5nIG9uIEFuZHJvaWQgNSAvIEFQSSAyMiBhbmQgYmVsb3cgd2lsbCBhbHdheXMgcmV0dXJuIGBHUkFOVEVEYCBzdGF0dXMgYXMgcGVybWlzc2lvbnMgYXJlIGFscmVhZHkgZ3JhbnRlZCBhdCBpbnN0YWxsYXRpb24gdGltZS5cbiAgICpcbiAgICogTm90ZXMgZm9yIGlPUzpcbiAgICogICAtIFRoaXMgcmVsYXRlcyB0byBDYWxlbmRhciBFdmVudHMgKG5vdCBDYWxlbmRhciBSZW1pbmRlcnMpXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59XG4gICAqL1xuICBAQ29yZG92YSh7IHBsYXRmb3JtczogWydBbmRyb2lkJywgJ2lPUyddIH0pXG4gIGdldENhbGVuZGFyQXV0aG9yaXphdGlvblN0YXR1cygpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXF1ZXN0cyBjYWxlbmRhciBhdXRob3JpemF0aW9uIGZvciB0aGUgYXBwbGljYXRpb24uXG4gICAqXG4gICAqIE5vdGVzIGZvciBpT1M6XG4gICAqICAgLSBTaG91bGQgb25seSBiZSBjYWxsZWQgaWYgYXV0aG9yaXphdGlvbiBzdGF0dXMgaXMgTk9UX0RFVEVSTUlORUQuIENhbGxpbmcgaXQgd2hlbiBpbiBhbnkgb3RoZXIgc3RhdGUgd2lsbCBoYXZlIG5vIGVmZmVjdCBhbmQganVzdCByZXR1cm4gdGhlIGN1cnJlbnQgYXV0aG9yaXphdGlvbiBzdGF0dXMuXG4gICAqICAgLSBUaGlzIHJlbGF0ZXMgdG8gQ2FsZW5kYXIgRXZlbnRzIChub3QgQ2FsZW5kYXIgUmVtaW5kZXJzKVxuICAgKlxuICAgKiBOb3RlcyBmb3IgQW5kcm9pZDpcbiAgICogICAtIFRoaXMgaXMgaW50ZW5kZWQgZm9yIEFuZHJvaWQgNiAvIEFQSSAyMyBhbmQgYWJvdmUuIENhbGxpbmcgb24gQW5kcm9pZCA1IC8gQVBJIDIyIGFuZCBiZWxvdyB3aWxsIGhhdmUgbm8gZWZmZWN0IGFzIHRoZSBwZXJtaXNzaW9ucyBhcmUgYWxyZWFkeSBncmFudGVkIGF0IGluc3RhbGxhdGlvbiB0aW1lLlxuICAgKiAgIC0gVGhpcyByZXF1ZXN0cyBwZXJtaXNzaW9uIGZvciBgUkVBRF9DQUxFTkRBUmAgcnVuLXRpbWUgcGVybWlzc2lvblxuICAgKiAgIC0gUmVxdWlyZWQgcGVybWlzc2lvbnMgbXVzdCBiZSBhZGRlZCB0byBgQW5kcm9pZE1hbmlmZXN0LnhtbGAgYXMgYXBwcm9wcmlhdGUgLSBzZWUgQW5kcm9pZCBwZXJtaXNzaW9uczogYFJFQURfQ0FMRU5EQVJgLCBgV1JJVEVfQ0FMRU5EQVJgXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59XG4gICAqL1xuICBAQ29yZG92YSh7IHBsYXRmb3JtczogWydBbmRyb2lkJywgJ2lPUyddIH0pXG4gIHJlcXVlc3RDYWxlbmRhckF1dGhvcml6YXRpb24oKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogT3BlbnMgc2V0dGluZ3MgcGFnZSBmb3IgdGhpcyBhcHAuXG4gICAqIE9uIEFuZHJvaWQsIHRoaXMgb3BlbnMgdGhlIFwiQXBwIEluZm9cIiBwYWdlIGluIHRoZSBTZXR0aW5ncyBhcHAuXG4gICAqIE9uIGlPUywgdGhpcyBvcGVucyB0aGUgYXBwIHNldHRpbmdzIHBhZ2UgaW4gdGhlIFNldHRpbmdzIGFwcC4gVGhpcyB3b3JrcyBvbmx5IG9uIGlPUyA4KyAtIGlPUyA3IGFuZCBiZWxvdyB3aWxsIGludm9rZSB0aGUgZXJyb3JDYWxsYmFjay5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8YW55Pn1cbiAgICovXG4gIEBDb3Jkb3ZhKHsgcGxhdGZvcm1zOiBbJ0FuZHJvaWQnLCAnaU9TJ10gfSlcbiAgc3dpdGNoVG9TZXR0aW5ncygpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBzdGF0ZSBvZiBCbHVldG9vdGggb24gdGhlIGRldmljZS5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8YW55Pn1cbiAgICovXG4gIEBDb3Jkb3ZhKHsgcGxhdGZvcm1zOiBbJ0FuZHJvaWQnLCAnaU9TJ10gfSlcbiAgZ2V0Qmx1ZXRvb3RoU3RhdGUoKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIGEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gYSBjaGFuZ2UgaW4gQmx1ZXRvb3RoIHN0YXRlIG9jY3Vycy5cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gaGFuZGxlclxuICAgKi9cbiAgQENvcmRvdmEoeyBwbGF0Zm9ybXM6IFsnQW5kcm9pZCcsICdpT1MnXSwgc3luYzogdHJ1ZSB9KVxuICByZWdpc3RlckJsdWV0b290aFN0YXRlQ2hhbmdlSGFuZGxlcihoYW5kbGVyOiBGdW5jdGlvbik6IHZvaWQge31cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIGEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gYSBjaGFuZ2UgaW4gTG9jYXRpb24gc3RhdGUgb2NjdXJzLlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBoYW5kbGVyXG4gICAqL1xuICBAQ29yZG92YSh7IHBsYXRmb3JtczogWydBbmRyb2lkJywgJ2lPUyddLCBzeW5jOiB0cnVlIH0pXG4gIHJlZ2lzdGVyTG9jYXRpb25TdGF0ZUNoYW5nZUhhbmRsZXIoaGFuZGxlcjogRnVuY3Rpb24pOiB2b2lkIHt9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgQ1BVIGFyY2hpdGVjdHVyZSBvZiB0aGUgY3VycmVudCBkZXZpY2UuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59XG4gICAqL1xuICBAQ29yZG92YSh7IHBsYXRmb3JtczogWydBbmRyb2lkJywgJ2lPUyddIH0pXG4gIGdldEFyY2hpdGVjdHVyZSgpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfSAgXG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGN1cnJlbnQgYmF0dGVyeSBsZXZlbCBvZiB0aGUgZGV2aWNlIGFzIGEgcGVyY2VudGFnZS5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8YW55Pn1cbiAgICovXG4gIEBDb3Jkb3ZhKHsgcGxhdGZvcm1zOiBbJ0FuZHJvaWQnLCAnaU9TJ10gfSlcbiAgZ2V0Q3VycmVudEJhdHRlcnlMZXZlbCgpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfSAgXG5cbiAgLy8gQU5EUk9JRCBPTkxZXG5cbiAgLyoqXG4gICAqIFJlc3RhcnRzIHRoZSBhcHBsaWNhdGlvbi5cbiAgICogQnkgZGVmYXVsdCwgYSBcIndhcm1cIiByZXN0YXJ0IHdpbGwgYmUgcGVyZm9ybWVkIGluIHdoaWNoIHRoZSBtYWluIENvcmRvdmEgYWN0aXZpdHkgaXMgaW1tZWRpYXRlbHkgcmVzdGFydGVkLCBjYXVzaW5nIHRoZSBXZWJ2aWV3IGluc3RhbmNlIHRvIGJlIHJlY3JlYXRlZC5cbiAgICogSG93ZXZlciwgaWYgdGhlIGBjb2xkYCBwYXJhbWV0ZXIgaXMgc2V0IHRvIHRydWUsIHRoZW4gdGhlIGFwcGxpY2F0aW9uIHdpbGwgYmUgXCJjb2xkXCIgcmVzdGFydGVkLCBtZWFuaW5nIGEgc3lzdGVtIGV4aXQgd2lsbCBiZSBwZXJmb3JtZWQsIGNhdXNpbmcgdGhlIGVudGlyZSBhcHBsaWNhdGlvbiB0byBiZSByZXN0YXJ0ZWQuXG4gICAqIFRoaXMgaXMgdXNlZnVsIGlmIHlvdSB3YW50IHRvIGZ1bGx5IHJlc2V0IHRoZSBuYXRpdmUgYXBwbGljYXRpb24gc3RhdGUgYnV0IHdpbGwgY2F1c2UgdGhlIGFwcGxpY2F0aW9uIHRvIGJyaWVmbHkgZGlzYXBwZWFyIGFuZCByZS1hcHBlYXIuLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgQENvcmRvdmEoeyBwbGF0Zm9ybXM6IFsnQW5kcm9pZCddLCBjYWxsYmFja09yZGVyOiAncmV2ZXJzZScgfSlcbiAgcmVzdGFydChjb2xkOiBib29sZWFuKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgaGlnaC1hY2N1cmFjeSBsb2NhdGlvbnMgYXJlIGF2YWlsYWJsZSB0byB0aGUgYXBwIGZyb20gR1BTIGhhcmR3YXJlLlxuICAgKiBSZXR1cm5zIHRydWUgaWYgTG9jYXRpb24gbW9kZSBpcyBlbmFibGVkIGFuZCBpcyBzZXQgdG8gXCJEZXZpY2Ugb25seVwiIG9yIFwiSGlnaCBhY2N1cmFjeVwiIEFORCBpZiB0aGUgYXBwIGlzIGF1dGhvcml6ZWQgdG8gdXNlIGxvY2F0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxib29sZWFuPn1cbiAgICovXG4gIEBDb3Jkb3ZhKHsgcGxhdGZvcm1zOiBbJ0FuZHJvaWQnXSB9KVxuICBpc0dwc0xvY2F0aW9uQXZhaWxhYmxlKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgbG9jYXRpb24gbW9kZSBpcyBzZXQgdG8gcmV0dXJuIGhpZ2gtYWNjdXJhY3kgbG9jYXRpb25zIGZyb20gR1BTIGhhcmR3YXJlLlxuICAgKiAgIFJldHVybnMgdHJ1ZSBpZiBMb2NhdGlvbiBtb2RlIGlzIGVuYWJsZWQgYW5kIGlzIHNldCB0byBlaXRoZXI6XG4gICAqICAgLSBEZXZpY2Ugb25seSA9IEdQUyBoYXJkd2FyZSBvbmx5IChoaWdoIGFjY3VyYWN5KVxuICAgKiAgIC0gSGlnaCBhY2N1cmFjeSA9IEdQUyBoYXJkd2FyZSwgbmV0d29yayB0cmlhbmd1bGF0aW9uIGFuZCBXaWZpIG5ldHdvcmsgSURzIChoaWdoIGFuZCBsb3cgYWNjdXJhY3kpXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59XG4gICAqL1xuICBAQ29yZG92YSh7IHBsYXRmb3JtczogWydBbmRyb2lkJ10gfSlcbiAgaXNHcHNMb2NhdGlvbkVuYWJsZWQoKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGxvdy1hY2N1cmFjeSBsb2NhdGlvbnMgYXJlIGF2YWlsYWJsZSB0byB0aGUgYXBwIGZyb20gbmV0d29yayB0cmlhbmd1bGF0aW9uL1dpRmkgYWNjZXNzIHBvaW50cy5cbiAgICogUmV0dXJucyB0cnVlIGlmIExvY2F0aW9uIG1vZGUgaXMgZW5hYmxlZCBhbmQgaXMgc2V0IHRvIFwiQmF0dGVyeSBzYXZpbmdcIiBvciBcIkhpZ2ggYWNjdXJhY3lcIiBBTkQgaWYgdGhlIGFwcCBpcyBhdXRob3JpemVkIHRvIHVzZSBsb2NhdGlvbi5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8YW55Pn1cbiAgICovXG4gIEBDb3Jkb3ZhKHsgcGxhdGZvcm1zOiBbJ0FuZHJvaWQnXSB9KVxuICBpc05ldHdvcmtMb2NhdGlvbkF2YWlsYWJsZSgpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgbG9jYXRpb24gbW9kZSBpcyBzZXQgdG8gcmV0dXJuIGxvdy1hY2N1cmFjeSBsb2NhdGlvbnMgZnJvbSBuZXR3b3JrIHRyaWFuZ3VsYXRpb24vV2lGaSBhY2Nlc3MgcG9pbnRzLlxuICAgKiBSZXR1cm5zIHRydWUgaWYgTG9jYXRpb24gbW9kZSBpcyBlbmFibGVkIGFuZCBpcyBzZXQgdG8gZWl0aGVyOlxuICAgKiAgIC0gQmF0dGVyeSBzYXZpbmcgPSBuZXR3b3JrIHRyaWFuZ3VsYXRpb24gYW5kIFdpZmkgbmV0d29yayBJRHMgKGxvdyBhY2N1cmFjeSlcbiAgICogICAtIEhpZ2ggYWNjdXJhY3kgPSBHUFMgaGFyZHdhcmUsIG5ldHdvcmsgdHJpYW5ndWxhdGlvbiBhbmQgV2lmaSBuZXR3b3JrIElEcyAoaGlnaCBhbmQgbG93IGFjY3VyYWN5KVxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgQENvcmRvdmEoeyBwbGF0Zm9ybXM6IFsnQW5kcm9pZCddIH0pXG4gIGlzTmV0d29ya0xvY2F0aW9uRW5hYmxlZCgpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYWlycGxhbmUgbW9kZSBpcyBlbmFibGVkIG9uIGRldmljZS5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8YW55Pn1cbiAgICovXG4gIEBDb3Jkb3ZhKHsgcGxhdGZvcm1zOiBbJ0FuZHJvaWQnXSB9KVxuICBpc0FpcnBsYW5lTW9kZUVuYWJsZWQoKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKiogXG4gICAqIENoZWNrcyBpZiBtb2JpbGUgZGF0YSBpcyBlbmFibGVkIG9uIGRldmljZS5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8YW55Pn1cbiAgICovXG4gIEBDb3Jkb3ZhKHsgcGxhdGZvcm1zOiBbJ0FuZHJvaWQnXSB9KVxuICBpc01vYmlsZURhdGFFbmFibGVkKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGN1cnJlbnQgbG9jYXRpb24gbW9kZSBzZXR0aW5nIGZvciB0aGUgZGV2aWNlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgQENvcmRvdmEoeyBwbGF0Zm9ybXM6IFsnQW5kcm9pZCddIH0pXG4gIGdldExvY2F0aW9uTW9kZSgpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGRldGFpbHMgb2YgdGhlIE9TIG9mIHRoZSBkZXZpY2Ugb24gd2hpY2ggdGhlIGFwcCBpcyBjdXJyZW50bHkgcnVubmluZ1xuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgQENvcmRvdmEoeyBwbGF0Zm9ybXM6IFsnQW5kcm9pZCddIH0pXG4gIGdldERldmljZU9TVmVyc2lvbigpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGRldGFpbHMgb2YgdGhlIFNESyBsZXZlbHMgdXNlZCB0byBidWlsZCB0aGUgYXBwLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgQENvcmRvdmEoeyBwbGF0Zm9ybXM6IFsnQW5kcm9pZCddIH0pXG4gIGdldEJ1aWxkT1NWZXJzaW9uKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGN1cnJlbnQgYXV0aG9yaXphdGlvbiBzdGF0dXMgZm9yIGEgZ2l2ZW4gcGVybWlzc2lvbi5cbiAgICogTm90ZTogdGhpcyBpcyBpbnRlbmRlZCBmb3IgQW5kcm9pZCA2IC8gQVBJIDIzIGFuZCBhYm92ZS4gQ2FsbGluZyBvbiBBbmRyb2lkIDUgLyBBUEkgMjIgYW5kIGJlbG93IHdpbGwgYWx3YXlzIHJldHVybiBHUkFOVEVEIHN0YXR1cyBhcyBwZXJtaXNzaW9ucyBhcmUgYWxyZWFkeSBncmFudGVkIGF0IGluc3RhbGxhdGlvbiB0aW1lLlxuICAgKlxuICAgKiBAcGFyYW0gcGVybWlzc2lvblxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgQENvcmRvdmEoeyBwbGF0Zm9ybXM6IFsnQW5kcm9pZCddLCBjYWxsYmFja09yZGVyOiAncmV2ZXJzZScgfSlcbiAgZ2V0UGVybWlzc2lvbkF1dGhvcml6YXRpb25TdGF0dXMocGVybWlzc2lvbjogYW55KTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY3VycmVudCBhdXRob3JpemF0aW9uIHN0YXR1cyBmb3IgbXVsdGlwbGUgcGVybWlzc2lvbnMuXG4gICAqIE5vdGU6IHRoaXMgaXMgaW50ZW5kZWQgZm9yIEFuZHJvaWQgNiAvIEFQSSAyMyBhbmQgYWJvdmUuIENhbGxpbmcgb24gQW5kcm9pZCA1IC8gQVBJIDIyIGFuZCBiZWxvdyB3aWxsIGFsd2F5cyByZXR1cm4gR1JBTlRFRCBzdGF0dXMgYXMgcGVybWlzc2lvbnMgYXJlIGFscmVhZHkgZ3JhbnRlZCBhdCBpbnN0YWxsYXRpb24gdGltZS5cbiAgICpcbiAgICogQHBhcmFtIHthbnlbXX0gcGVybWlzc2lvbnNcbiAgICogQHJldHVybnMge1Byb21pc2U8YW55Pn1cbiAgICovXG4gIEBDb3Jkb3ZhKHsgcGxhdGZvcm1zOiBbJ0FuZHJvaWQnXSwgY2FsbGJhY2tPcmRlcjogJ3JldmVyc2UnIH0pXG4gIGdldFBlcm1pc3Npb25zQXV0aG9yaXphdGlvblN0YXR1cyhwZXJtaXNzaW9uczogYW55W10pOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXF1ZXN0cyBhcHAgdG8gYmUgZ3JhbnRlZCBhdXRob3JpemF0aW9uIGZvciBhIHJ1bnRpbWUgcGVybWlzc2lvbi5cbiAgICogTm90ZTogdGhpcyBpcyBpbnRlbmRlZCBmb3IgQW5kcm9pZCA2IC8gQVBJIDIzIGFuZCBhYm92ZS4gQ2FsbGluZyBvbiBBbmRyb2lkIDUgLyBBUEkgMjIgYW5kIGJlbG93IHdpbGwgaGF2ZSBubyBlZmZlY3QgYXMgdGhlIHBlcm1pc3Npb25zIGFyZSBhbHJlYWR5IGdyYW50ZWQgYXQgaW5zdGFsbGF0aW9uIHRpbWUuXG4gICAqXG4gICAqIEBwYXJhbSBwZXJtaXNzaW9uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59XG4gICAqL1xuICBAQ29yZG92YSh7IHBsYXRmb3JtczogWydBbmRyb2lkJ10sIGNhbGxiYWNrT3JkZXI6ICdyZXZlcnNlJyB9KVxuICByZXF1ZXN0UnVudGltZVBlcm1pc3Npb24ocGVybWlzc2lvbjogYW55KTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogUmVxdWVzdHMgYXBwIHRvIGJlIGdyYW50ZWQgYXV0aG9yaXphdGlvbiBmb3IgbXVsdGlwbGUgcnVudGltZSBwZXJtaXNzaW9ucy5cbiAgICogTm90ZTogdGhpcyBpcyBpbnRlbmRlZCBmb3IgQW5kcm9pZCA2IC8gQVBJIDIzIGFuZCBhYm92ZS4gQ2FsbGluZyBvbiBBbmRyb2lkIDUgLyBBUEkgMjIgYW5kIGJlbG93IHdpbGwgYWx3YXlzIHJldHVybiBHUkFOVEVEIHN0YXR1cyBhcyBwZXJtaXNzaW9ucyBhcmUgYWxyZWFkeSBncmFudGVkIGF0IGluc3RhbGxhdGlvbiB0aW1lLlxuICAgKlxuICAgKiBAcGFyYW0ge2FueVtdfSBwZXJtaXNzaW9uc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgQENvcmRvdmEoeyBwbGF0Zm9ybXM6IFsnQW5kcm9pZCddLCBjYWxsYmFja09yZGVyOiAncmV2ZXJzZScgfSlcbiAgcmVxdWVzdFJ1bnRpbWVQZXJtaXNzaW9ucyhwZXJtaXNzaW9uczogYW55W10pOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgaWYgdGhlIHBsdWdpbiBpcyBjdXJyZW50bHkgcmVxdWVzdGluZyBhIHJ1bnRpbWUgcGVybWlzc2lvbiB2aWEgdGhlIG5hdGl2ZSBBUEkuXG4gICAqIE5vdGUgdGhhdCBvbmx5IG9uZSByZXF1ZXN0IGNhbiBiZSBtYWRlIGNvbmN1cnJlbnRseSBiZWNhdXNlIHRoZSBuYXRpdmUgQVBJIGNhbm5vdCBoYW5kbGUgY29uY3VycmVudCByZXF1ZXN0cyxcbiAgICogc28gdGhlIHBsdWdpbiB3aWxsIGludm9rZSB0aGUgZXJyb3IgY2FsbGJhY2sgaWYgYXR0ZW1wdGluZyB0byBtYWtlIG1vcmUgdGhhbiBvbmUgc2ltdWx0YW5lb3VzIHJlcXVlc3QuXG4gICAqIE11bHRpcGxlIHBlcm1pc3Npb24gcmVxdWVzdHMgc2hvdWxkIGJlIGdyb3VwZWQgaW50byBhIHNpbmdsZSBjYWxsIHNpbmNlIHRoZSBuYXRpdmUgQVBJIGlzIHNldHVwIHRvIGhhbmRsZSBiYXRjaCByZXF1ZXN0cyBvZiBtdWx0aXBsZSBwZXJtaXNzaW9uIGdyb3Vwcy5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBAQ29yZG92YSh7IHN5bmM6IHRydWUgfSlcbiAgaXNSZXF1ZXN0aW5nUGVybWlzc2lvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIGEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gYSBydW50aW1lIHBlcm1pc3Npb24gcmVxdWVzdCBoYXMgY29tcGxldGVkLlxuICAgKiBQYXNzIGluIGEgZmFsc3kgdmFsdWUgdG8gZGUtcmVnaXN0ZXIgdGhlIGN1cnJlbnRseSByZWdpc3RlcmVkIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBoYW5kbGVyXG4gICAqL1xuICBAQ29yZG92YSh7IHN5bmM6IHRydWUgfSlcbiAgcmVnaXN0ZXJQZXJtaXNzaW9uUmVxdWVzdENvbXBsZXRlSGFuZGxlcihoYW5kbGVyOiBGdW5jdGlvbik6IHZvaWQge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIGRldmljZSBzZXR0aW5nIGZvciBCbHVldG9vdGggaXMgc3dpdGNoZWQgb24uXG4gICAqIFRoaXMgcmVxdWlyZXMgYEJMVUVUT09USGAgcGVybWlzc2lvbiBvbiBBbmRyb2lkXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fVxuICAgKi9cbiAgQENvcmRvdmEoeyBwbGF0Zm9ybXM6IFsnQW5kcm9pZCddIH0pXG4gIGlzQmx1ZXRvb3RoRW5hYmxlZCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBkZXZpY2UgaGFzIEJsdWV0b290aCBjYXBhYmlsaXRpZXMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fVxuICAgKi9cbiAgQENvcmRvdmEoeyBwbGF0Zm9ybXM6IFsnQW5kcm9pZCddIH0pXG4gIGhhc0JsdWV0b290aFN1cHBvcnQoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGUgZGV2aWNlIGhhcyBCbHVldG9vdGggTG93IEVuZXJneSAoTEUpIGNhcGFiaWxpdGllcy5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Ym9vbGVhbj59XG4gICAqL1xuICBAQ29yZG92YSh7IHBsYXRmb3JtczogWydBbmRyb2lkJ10gfSlcbiAgaGFzQmx1ZXRvb3RoTEVTdXBwb3J0KCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIGRldmljZSBzdXBwb3J0cyBCbHVldG9vdGggTG93IEVuZXJneSAoTEUpIFBlcmlwaGVyYWwgbW9kZS5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Ym9vbGVhbj59XG4gICAqL1xuICBAQ29yZG92YSh7IHBsYXRmb3JtczogWydBbmRyb2lkJ10gfSlcbiAgaGFzQmx1ZXRvb3RoTEVQZXJpcGhlcmFsU3VwcG9ydCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgQmx1ZXRvb3RoIGF1dGhvcml6YXRpb24gc3RhdHVzIG9mIHRoZSBhcHBsaWNhdGlvbiBvbiB0aGUgZGV2aWNlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgQENvcmRvdmEoeyBwbGF0Zm9ybXM6IFsnQW5kcm9pZCcsICdpT1MnXSB9KVxuICBnZXRCbHVldG9vdGhBdXRob3JpemF0aW9uU3RhdHVzKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG4gIFxuICAvKipcbiAgICogUmV0dXJucyB0aGUgaW5kaXZpZHVhbCBhdXRob3JpemF0aW9uIHN0YXR1cyBmb3IgZWFjaCBCbHVldG9vdGggcnVuLXRpbWUgcGVybWlzc2lvbiBvbiBBbmRyb2lkIDEyKyAvIEFQSSAzMStcbiAgICogT24gQW5kcm9pZCAxMSAvIEFQSSAzMCBhbmQgYmVsb3csIGFsbCB3aWxsIGJlIHJldHVybmVkIGFzIEdSQU5URUQgaWYgdGhlIG1hbmlmZXN0IGhhcyBCTFVFVE9PVEggc2luY2UgdGhleSBhcmUgaW1wbGljaXRseSBncmFudGVkIGF0IGJ1aWxkLXRpbWUuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59XG4gICAqL1xuICBAQ29yZG92YSh7IHBsYXRmb3JtczogWydBbmRyb2lkJ10gfSlcbiAgZ2V0Qmx1ZXRvb3RoQXV0aG9yaXphdGlvblN0YXR1c2VzKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGUgYXBwbGljYXRpb24gaXMgYXV0aG9yaXplZCB0byB1c2UgZXh0ZXJuYWwgc3RvcmFnZS5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Ym9vbGVhbj59XG4gICAqL1xuICBAQ29yZG92YSh7IHBsYXRmb3JtczogWydBbmRyb2lkJ10gfSlcbiAgaXNFeHRlcm5hbFN0b3JhZ2VBdXRob3JpemVkKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDUmV0dXJucyB0aGUgZXh0ZXJuYWwgc3RvcmFnZSBhdXRob3JpemF0aW9uIHN0YXR1cyBmb3IgdGhlIGFwcGxpY2F0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxib29sZWFuPn1cbiAgICovXG4gIEBDb3Jkb3ZhKHsgcGxhdGZvcm1zOiBbJ0FuZHJvaWQnXSB9KVxuICBnZXRFeHRlcm5hbFN0b3JhZ2VBdXRob3JpemF0aW9uU3RhdHVzKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcXVlc3RzIGV4dGVybmFsIHN0b3JhZ2UgYXV0aG9yaXphdGlvbiBmb3IgdGhlIGFwcGxpY2F0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgQENvcmRvdmEoeyBwbGF0Zm9ybXM6IFsnQW5kcm9pZCddIH0pXG4gIHJlcXVlc3RFeHRlcm5hbFN0b3JhZ2VBdXRob3JpemF0aW9uKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgZGV0YWlscyBvZiBleHRlcm5hbCBTRCBjYXJkKHMpOiBhYnNvbHV0ZSBwYXRoLCBpcyB3cml0YWJsZSwgZnJlZSBzcGFjZS5cbiAgICpcbiAgICogVGhlIGludGVudGlvbiBvZiB0aGlzIG1ldGhvZCBpcyB0byByZXR1cm4gdGhlIGxvY2F0aW9uIGFuZCBkZXRhaWxzIG9mIHJlbW92YWJsZSBleHRlcm5hbCBTRCBjYXJkcy5cbiAgICogVGhpcyBkaWZmZXJzIGZyb20gdGhlIFwiZXh0ZXJuYWwgZGlyZWN0b3JpZXNcIiByZXR1cm5lZCBieSBjb3Jkb3ZhLXBsdWdpbi1maWxlIHdoaWNoIHJldHVybiBtb3VudCBwb2ludHMgcmVsYXRpbmcgdG8gbm9uLXJlbW92YWJsZSAoaW50ZXJuYWwpIHN0b3JhZ2UuXG4gICAqXG4gICAqIExlYXJuIG1vcmUgYWJvdXQgdGhpcyBtZXRob2QgW2hlcmVdKGh0dHBzOi8vZ2l0aHViLmNvbS9kcGE5OWMvY29yZG92YS1kaWFnbm9zdGljLXBsdWdpbiNnZXRleHRlcm5hbHNkY2FyZGRldGFpbHMpXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59XG4gICAqL1xuICBAQ29yZG92YSh7IHBsYXRmb3JtczogWydBbmRyb2lkJ10gfSlcbiAgZ2V0RXh0ZXJuYWxTZENhcmREZXRhaWxzKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIFN3aXRjaGVzIHRvIHRoZSB3aXJlbGVzcyBzZXR0aW5ncyBwYWdlIGluIHRoZSBTZXR0aW5ncyBhcHAuIEFsbG93cyBjb25maWd1cmF0aW9uIG9mIHdpcmVsZXNzIGNvbnRyb2xzIHN1Y2ggYXMgV2ktRmksIEJsdWV0b290aCBhbmQgTW9iaWxlIG5ldHdvcmtzLlxuICAgKi9cbiAgQENvcmRvdmEoe1xuICAgIHBsYXRmb3JtczogWydBbmRyb2lkJ10sXG4gICAgc3luYzogdHJ1ZSxcbiAgfSlcbiAgc3dpdGNoVG9XaXJlbGVzc1NldHRpbmdzKCk6IHZvaWQge31cblxuICAvKipcbiAgICogRGlzcGxheXMgTkZDIHNldHRpbmdzIHRvIGFsbG93IHVzZXIgdG8gZW5hYmxlIE5GQy5cbiAgICovXG4gIEBDb3Jkb3ZhKHtcbiAgICBwbGF0Zm9ybXM6IFsnQW5kcm9pZCddLFxuICAgIHN5bmM6IHRydWUsXG4gIH0pXG4gIHN3aXRjaFRvTkZDU2V0dGluZ3MoKTogdm9pZCB7fVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgTkZDIGhhcmR3YXJlIGlzIHByZXNlbnQgb24gZGV2aWNlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxib29sZWFuPn1cbiAgICovXG4gIEBDb3Jkb3ZhKHsgcGxhdGZvcm1zOiBbJ0FuZHJvaWQnXSB9KVxuICBpc05GQ1ByZXNlbnQoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGUgZGV2aWNlIHNldHRpbmcgZm9yIE5GQyBpcyBzd2l0Y2hlZCBvbi5cbiAgICogTm90ZTogdGhpcyBvcGVyYXRpb24gZG9lcyBub3QgcmVxdWlyZSBORkMgcGVybWlzc2lvbiBpbiB0aGUgbWFuaWZlc3QuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fVxuICAgKi9cbiAgQENvcmRvdmEoeyBwbGF0Zm9ybXM6IFsnQW5kcm9pZCddIH0pXG4gIGlzTkZDRW5hYmxlZCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIE5GQyBpcyBhdmFpbGFibGUgdG8gdGhlIGFwcC4gUmV0dXJucyB0cnVlIGlmIHRoZSBkZXZpY2UgaGFzIE5GQyBjYXBhYmlsaXRpZXMgQU5EIGlmIE5GQyBzZXR0aW5nIGlzIHN3aXRjaGVkIG9uLlxuICAgKiBOb3RlOiB0aGlzIG9wZXJhdGlvbiBkb2VzIG5vdCByZXF1aXJlIE5GQyBwZXJtaXNzaW9uIGluIHRoZSBtYW5pZmVzdC5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8YW55Pn1cbiAgICovXG4gIEBDb3Jkb3ZhKHsgcGxhdGZvcm1zOiBbJ0FuZHJvaWQnXSB9KVxuICBpc05GQ0F2YWlsYWJsZSgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIGEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gYSBjaGFuZ2UgaW4gTkZDIHN0YXRlIG9jY3Vycy4gUGFzcyBpbiBhIGZhbHN5IHZhbHVlIHRvIGRlLXJlZ2lzdGVyIHRoZSBjdXJyZW50bHkgcmVnaXN0ZXJlZCBmdW5jdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gaGFuZGVyIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIE5GQyBzdGF0ZSBjaGFuZ2VzXG4gICAqIEBwYXJhbSBoYW5kbGVyXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59XG4gICAqL1xuICBAQ29yZG92YSh7XG4gICAgcGxhdGZvcm1zOiBbJ0FuZHJvaWQnXSxcbiAgICBzeW5jOiB0cnVlLFxuICB9KVxuICByZWdpc3Rlck5GQ1N0YXRlQ2hhbmdlSGFuZGxlcihoYW5kbGVyOiBGdW5jdGlvbik6IHZvaWQge31cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBkZXZpY2UgZGF0YSByb2FtaW5nIHNldHRpbmcgaXMgZW5hYmxlZC5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Ym9vbGVhbj59XG4gICAqL1xuICBAQ29yZG92YSh7IHBsYXRmb3JtczogWydBbmRyb2lkJ10gfSlcbiAgaXNEYXRhUm9hbWluZ0VuYWJsZWQoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGUgZGV2aWNlIHNldHRpbmcgZm9yIEFEQihkZWJ1ZykgaXMgc3dpdGNoZWQgb24uXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fVxuICAgKi9cbiAgQENvcmRvdmEoeyBwbGF0Zm9ybXM6IFsnQW5kcm9pZCddIH0pXG4gIGlzQURCTW9kZUVuYWJsZWQoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGUgZGV2aWNlIGlzIHJvb3RlZC5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Ym9vbGVhbj59XG4gICAqL1xuICBAQ29yZG92YSh7IHBsYXRmb3JtczogWydBbmRyb2lkJ10gfSlcbiAgaXNEZXZpY2VSb290ZWQoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gSU9TIE9OTFlcblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBhcHBsaWNhdGlvbiBpcyBhdXRob3JpemVkIHRvIHVzZSB0aGUgQ2FtZXJhIFJvbGwgaW4gUGhvdG9zIGFwcC5cbiAgICpcbiAgICogQHBhcmFtIGFjY2Vzc0xldmVsIC0gKG9wdGlvbmFsKSBPbiBpT1MgMTQrLCBzcGVjaWZpZXMgdGhlIGxldmVsIG9mIGFjY2VzcyB0byB0aGUgcGhvdG8gbGlicmFyeSB0byBxdWVyeSBhcyBhIGNvbnN0YW50IGluIGNvcmRvdmEucGx1Z2lucy5kaWFnbm9zdGljLnBob3RvTGlicmFyeUFjY2Vzc0xldmVsYFxuICAgKiBQb3NzaWJsZSB2YWx1ZXMgYXJlOlxuICAgKiBBRERfT05MWSAtIGNhbiBhZGQgdG8gYnV0IG5vdCByZWFkIGZyb20gUGhvdG8gTGlicmFyeVxuICAgKiBSRUFEX1dSSVRFIC0gY2FuIGJvdGggYWRkIHRvIGFuZCByZWFkIGZyb20gUGhvdG8gTGlicmFyeVxuICAgKiBEZWZhdWx0cyB0byBBRERfT05MWSBpZiBub3Qgc3BlY2lmaWVkXG4gICAqIEhhcyBubyBlZmZlY3Qgb24gaU9TIDEzIG9yIGJlbG93XG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fVxuICAgKi9cbiAgQENvcmRvdmEoeyBwbGF0Zm9ybXM6IFsnaU9TJ10sIGNhbGxiYWNrT3JkZXI6ICdyZXZlcnNlJyB9KVxuICBpc0NhbWVyYVJvbGxBdXRob3JpemVkKGFjY2Vzc0xldmVsPzogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGF1dGhvcml6YXRpb24gc3RhdHVzIGZvciB0aGUgYXBwbGljYXRpb24gdG8gdXNlIHRoZSBDYW1lcmEgUm9sbCBpbiBQaG90b3MgYXBwLlxuICAgKlxuICAgKiBAcGFyYW0gYWNjZXNzTGV2ZWwgLSAob3B0aW9uYWwpIE9uIGlPUyAxNCssIHNwZWNpZmllcyB0aGUgbGV2ZWwgb2YgYWNjZXNzIHRvIHRoZSBwaG90byBsaWJyYXJ5IHRvIHF1ZXJ5IGFzIGEgY29uc3RhbnQgaW4gY29yZG92YS5wbHVnaW5zLmRpYWdub3N0aWMucGhvdG9MaWJyYXJ5QWNjZXNzTGV2ZWxgXG4gICAqIFBvc3NpYmxlIHZhbHVlcyBhcmU6XG4gICAqIEFERF9PTkxZIC0gY2FuIGFkZCB0byBidXQgbm90IHJlYWQgZnJvbSBQaG90byBMaWJyYXJ5XG4gICAqIFJFQURfV1JJVEUgLSBjYW4gYm90aCBhZGQgdG8gYW5kIHJlYWQgZnJvbSBQaG90byBMaWJyYXJ5XG4gICAqIERlZmF1bHRzIHRvIEFERF9PTkxZIGlmIG5vdCBzcGVjaWZpZWRcbiAgICogSGFzIG5vIGVmZmVjdCBvbiBpT1MgMTMgb3IgYmVsb3dcbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nPn1cbiAgICovXG4gIEBDb3Jkb3ZhKHsgcGxhdGZvcm1zOiBbJ2lPUyddLCBjYWxsYmFja09yZGVyOiAncmV2ZXJzZScgfSlcbiAgZ2V0Q2FtZXJhUm9sbEF1dGhvcml6YXRpb25TdGF0dXMoYWNjZXNzTGV2ZWw/OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXF1ZXN0cyBjYW1lcmEgcm9sbCBhdXRob3JpemF0aW9uIGZvciB0aGUgYXBwbGljYXRpb24uXG4gICAqIFNob3VsZCBvbmx5IGJlIGNhbGxlZCBpZiBhdXRob3JpemF0aW9uIHN0YXR1cyBpcyBOT1RfUkVRVUVTVEVELlxuICAgKiBDYWxsaW5nIGl0IHdoZW4gaW4gYW55IG90aGVyIHN0YXRlIHdpbGwgaGF2ZSBubyBlZmZlY3QuXG4gICAqXG4gICAqIEBwYXJhbSBhY2Nlc3NMZXZlbCAtIChvcHRpb25hbCkgT24gaU9TIDE0Kywgc3BlY2lmaWVzIHRoZSBsZXZlbCBvZiBhY2Nlc3MgdG8gdGhlIHBob3RvIGxpYnJhcnkgdG8gcXVlcnkgYXMgYSBjb25zdGFudCBpbiBjb3Jkb3ZhLnBsdWdpbnMuZGlhZ25vc3RpYy5waG90b0xpYnJhcnlBY2Nlc3NMZXZlbGBcbiAgICogUG9zc2libGUgdmFsdWVzIGFyZTpcbiAgICogQUREX09OTFkgLSBjYW4gYWRkIHRvIGJ1dCBub3QgcmVhZCBmcm9tIFBob3RvIExpYnJhcnlcbiAgICogUkVBRF9XUklURSAtIGNhbiBib3RoIGFkZCB0byBhbmQgcmVhZCBmcm9tIFBob3RvIExpYnJhcnlcbiAgICogRGVmYXVsdHMgdG8gQUREX09OTFkgaWYgbm90IHNwZWNpZmllZFxuICAgKiBIYXMgbm8gZWZmZWN0IG9uIGlPUyAxMyBvciBiZWxvd1xuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgQENvcmRvdmEoeyBwbGF0Zm9ybXM6IFsnaU9TJ10sIGNhbGxiYWNrT3JkZXI6ICdyZXZlcnNlJyB9KVxuICByZXF1ZXN0Q2FtZXJhUm9sbEF1dGhvcml6YXRpb24oYWNjZXNzTGV2ZWw/OiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gLyoqXG4gICAqIFByZXNlbnRzIGxpbWl0ZWQgbGlicmFyeSBwaWNrZXIgVUkgb24gaU9TIDE0K1xuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgQENvcmRvdmEoeyBwbGF0Zm9ybXM6IFsnaU9TJ10gfSlcbiAgcHJlc2VudExpbWl0ZWRMaWJyYXJ5UGlja2VyKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiByZW1vdGUgKHB1c2gpIG5vdGlmaWNhdGlvbnMgYXJlIGVuYWJsZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fVxuICAgKi9cbiAgQENvcmRvdmEoeyBwbGF0Zm9ybXM6IFsnaU9TJywgJ0FuZHJvaWQnXSB9KVxuICBpc1JlbW90ZU5vdGlmaWNhdGlvbnNFbmFibGVkKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgaWYgdGhlIGFwcCBpcyByZWdpc3RlcmVkIGZvciByZW1vdGUgKHB1c2gpIG5vdGlmaWNhdGlvbnMgb24gdGhlIGRldmljZS5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Ym9vbGVhbj59XG4gICAqL1xuICBAQ29yZG92YSh7IHBsYXRmb3JtczogWydpT1MnXSB9KVxuICBpc1JlZ2lzdGVyZWRGb3JSZW1vdGVOb3RpZmljYXRpb25zKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBhdXRob3JpemF0aW9uIHN0YXR1cyBmb3IgdGhlIGFwcGxpY2F0aW9uIHRvIHVzZSBSZW1vdGUgTm90aWZpY2F0aW9ucy5cbiAgICogTm90ZTogV29ya3Mgb24gaU9TIDEwKyBvbmx5IChpT1MgOSBhbmQgYmVsb3cgd2lsbCBpbnZva2UgdGhlIGVycm9yIGNhbGxiYWNrKS5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nPn1cbiAgICovXG4gIEBDb3Jkb3ZhKHsgcGxhdGZvcm1zOiBbJ2lPUyddIH0pXG4gIGdldFJlbW90ZU5vdGlmaWNhdGlvbnNBdXRob3JpemF0aW9uU3RhdHVzKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcXVlc3RzIHJlbWluZGVycyBhdXRob3JpemF0aW9uIGZvciB0aGUgYXBwbGljYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB0eXBlc1xuICAgKiBAcGFyYW0gb21pdFJlZ2lzdHJhdGlvblxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgQENvcmRvdmEoeyBwbGF0Zm9ybXM6IFsnaU9TJ10gfSlcbiAgcmVxdWVzdFJlbW90ZU5vdGlmaWNhdGlvbnNBdXRob3JpemF0aW9uKHR5cGVzPzogc3RyaW5nW10sIG9taXRSZWdpc3RyYXRpb24/OiBib29sZWFuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogSW5kaWNhdGVzIHRoZSBjdXJyZW50IHNldHRpbmcgb2Ygbm90aWZpY2F0aW9uIHR5cGVzIGZvciB0aGUgYXBwIGluIHRoZSBTZXR0aW5ncyBhcHAuXG4gICAqIE5vdGU6IG9uIGlPUyA4KywgaWYgXCJBbGxvdyBOb3RpZmljYXRpb25zXCIgc3dpdGNoIGlzIE9GRiwgYWxsIHR5cGVzIHdpbGwgYmUgcmV0dXJuZWQgYXMgZGlzYWJsZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59XG4gICAqL1xuICBAQ29yZG92YSh7IHBsYXRmb3JtczogWydpT1MnXSB9KVxuICBnZXRSZW1vdGVOb3RpZmljYXRpb25UeXBlcygpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIGFwcGxpY2F0aW9uIGlzIGF1dGhvcml6ZWQgdG8gdXNlIHJlbWluZGVycy5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Ym9vbGVhbj59XG4gICAqL1xuICBAQ29yZG92YSh7IHBsYXRmb3JtczogWydpT1MnXSB9KVxuICBpc1JlbWluZGVyc0F1dGhvcml6ZWQoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHJlbWluZGVycyBhdXRob3JpemF0aW9uIHN0YXR1cyBmb3IgdGhlIGFwcGxpY2F0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgQENvcmRvdmEoeyBwbGF0Zm9ybXM6IFsnaU9TJ10gfSlcbiAgZ2V0UmVtaW5kZXJzQXV0aG9yaXphdGlvblN0YXR1cygpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXF1ZXN0cyByZW1pbmRlcnMgYXV0aG9yaXphdGlvbiBmb3IgdGhlIGFwcGxpY2F0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgQENvcmRvdmEoeyBwbGF0Zm9ybXM6IFsnaU9TJ10gfSlcbiAgcmVxdWVzdFJlbWluZGVyc0F1dGhvcml6YXRpb24oKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBhcHBsaWNhdGlvbiBpcyBhdXRob3JpemVkIGZvciBiYWNrZ3JvdW5kIHJlZnJlc2guXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fVxuICAgKi9cbiAgQENvcmRvdmEoeyBwbGF0Zm9ybXM6IFsnaU9TJ10gfSlcbiAgaXNCYWNrZ3JvdW5kUmVmcmVzaEF1dGhvcml6ZWQoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGJhY2tncm91bmQgcmVmcmVzaCBhdXRob3JpemF0aW9uIHN0YXR1cyBmb3IgdGhlIGFwcGxpY2F0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgQENvcmRvdmEoeyBwbGF0Zm9ybXM6IFsnaU9TJ10gfSlcbiAgZ2V0QmFja2dyb3VuZFJlZnJlc2hTdGF0dXMoKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogUmVxdWVzdHMgQmx1ZXRvb3RoIGF1dGhvcml6YXRpb24gZm9yIHRoZSBhcHBsaWNhdGlvbi5cbiAgICpcbiAgICogTGVhcm4gbW9yZSBhYm91dCB0aGlzIG1ldGhvZCBbaGVyZV0oaHR0cHM6Ly9naXRodWIuY29tL2RwYTk5Yy9jb3Jkb3ZhLWRpYWdub3N0aWMtcGx1Z2luI3JlcXVlc3RibHVldG9vdGhhdXRob3JpemF0aW9uKVxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgQENvcmRvdmEoeyBwbGF0Zm9ybXM6IFsnaU9TJ10gfSlcbiAgcmVxdWVzdEJsdWV0b290aEF1dGhvcml6YXRpb24oKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIG1vdGlvbiB0cmFja2luZyBpcyBhdmFpbGFibGUgb24gdGhlIGN1cnJlbnQgZGV2aWNlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxib29sZWFuPn1cbiAgICovXG4gIEBDb3Jkb3ZhKHsgcGxhdGZvcm1zOiBbJ2lPUyddIH0pXG4gIGlzTW90aW9uQXZhaWxhYmxlKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgaXQncyBwb3NzaWJsZSB0byBkZXRlcm1pbmUgdGhlIG91dGNvbWUgb2YgYSBtb3Rpb24gYXV0aG9yaXphdGlvbiByZXF1ZXN0IG9uIHRoZSBjdXJyZW50IGRldmljZS5cbiAgICogVGhlcmUncyBubyBkaXJlY3Qgd2F5IHRvIGRldGVybWluZSBpZiBhdXRob3JpemF0aW9uIHdhcyBncmFudGVkIG9yIGRlbmllZCwgc28gdGhlIFBlZG9tZXRlciBBUEkgbXVzdCBiZSB1c2VkIHRvIGluZGlyZWN0bHkgZGV0ZXJtaW5lIHRoaXM6XG4gICAqIHRoZXJlZm9yZSwgaWYgdGhlIGRldmljZSBzdXBwb3J0cyBtb3Rpb24gdHJhY2tpbmcgYnV0IG5vdCBQZWRvbWV0ZXIgRXZlbnQgVHJhY2tpbmcsIHRoZSBvdXRjb21lIG9mIHJlcXVlc3RpbmcgbW90aW9uIGRldGVjdGlvbiBjYW5ub3QgYmUgZGV0ZXJtaW5lZC5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Ym9vbGVhbj59XG4gICAqL1xuICBAQ29yZG92YSh7IHBsYXRmb3JtczogWydpT1MnXSB9KVxuICBpc01vdGlvblJlcXVlc3RPdXRjb21lQXZhaWxhYmxlKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXF1ZXN0cyBtb3Rpb24gdHJhY2tpbmcgYXV0aG9yaXphdGlvbiBmb3IgdGhlIGFwcGxpY2F0aW9uLlxuICAgKlxuICAgKiBMZWFybiBtb3JlIGFib3V0IHRoaXMgbWV0aG9kIFtoZXJlXShodHRwczovL2dpdGh1Yi5jb20vZHBhOTljL2NvcmRvdmEtZGlhZ25vc3RpYy1wbHVnaW4jcmVxdWVzdG1vdGlvbmF1dGhvcml6YXRpb24pXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZz59XG4gICAqL1xuICBAQ29yZG92YSh7IHBsYXRmb3JtczogWydpT1MnXSB9KVxuICByZXF1ZXN0TW90aW9uQXV0aG9yaXphdGlvbigpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgbW90aW9uIGF1dGhvcml6YXRpb24gc3RhdHVzIGZvciB0aGUgYXBwbGljYXRpb24uXG4gICAqXG4gICAqIExlYXJuIG1vcmUgYWJvdXQgdGhpcyBtZXRob2QgW2hlcmVdKGh0dHBzOi8vZ2l0aHViLmNvbS9kcGE5OWMvY29yZG92YS1kaWFnbm9zdGljLXBsdWdpbiNnZXRtb3Rpb25hdXRob3JpemF0aW9uc3RhdHVzKVxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmc+fVxuICAgKi9cbiAgQENvcmRvdmEoeyBwbGF0Zm9ybXM6IFsnaU9TJ10gfSlcbiAgZ2V0TW90aW9uQXV0aG9yaXphdGlvblN0YXR1cygpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBsb2NhdGlvbiBhY2N1cmFjeSBhdXRob3JpemF0aW9uIGZvciB0aGUgYXBwbGljYXRpb24gb24gaU9TIDE0KyBhbmQgQW5kcm9pZCAxMisuIE5vdGU6IGNhbGxpbmcgb24gaU9TIDwxNCBvciBBbmRyb2lkIDwxMiB3aWxsIGFsd2F5cyByZXR1cm4gY29yZG92YS5wbHVnaW5zLmRpYWdub3N0aWMubG9jYXRpb25BY2N1cmFjeUF1dGhvcml6YXRpb24uRlVMTFxuICAgKlxuICAgKiBMZWFybiBtb3JlIGFib3V0IHRoaXMgbWV0aG9kIFtoZXJlXShodHRwczovL2dpdGh1Yi5jb20vZHBhOTljL2NvcmRvdmEtZGlhZ25vc3RpYy1wbHVnaW4jZ2V0bG9jYXRpb25hY2N1cmFjeWF1dGhvcml6YXRpb24pXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZz59XG4gICAqL1xuICBAQ29yZG92YSh7IHBsYXRmb3JtczogWydpT1MnLCAnQW5kcm9pZCddIH0pXG4gIGdldExvY2F0aW9uQWNjdXJhY3lBdXRob3JpemF0aW9uKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcXVlc3RzIHRlbXBvcmFyeSBhY2Nlc3MgdG8gZnVsbCBsb2NhdGlvbiBhY2N1cmFjeSBmb3IgdGhlIGFwcGxpY2F0aW9uIG9uIGlPUyAxNCsuXG4gICAqXG4gICAqIExlYXJuIG1vcmUgYWJvdXQgdGhpcyBtZXRob2QgW2hlcmVdKGh0dHBzOi8vZ2l0aHViLmNvbS9kcGE5OWMvY29yZG92YS1kaWFnbm9zdGljLXBsdWdpbiNyZXF1ZXN0dGVtcG9yYXJ5ZnVsbGFjY3VyYWN5YXV0aG9yaXphdGlvbilcbiAgICpcbiAgICogQHBhcmFtIHB1cnBvc2VcbiAgICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nPn1cbiAgICovXG4gIEBDb3Jkb3ZhKHsgcGxhdGZvcm1zOiBbJ2lPUyddIH0pXG4gIHJlcXVlc3RUZW1wb3JhcnlGdWxsQWNjdXJhY3lBdXRob3JpemF0aW9uKHB1cnBvc2U6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIGEgY2hhbmdlIGluIGxvY2F0aW9uIGFjY3VyYWN5IGF1dGhvcml6YXRpb24gb2NjdXJzIG9uIGlPUyAxNCsuXG4gICAqXG4gICAqIExlYXJuIG1vcmUgYWJvdXQgdGhpcyBtZXRob2QgW2hlcmVdKGh0dHBzOi8vZ2l0aHViLmNvbS9kcGE5OWMvY29yZG92YS1kaWFnbm9zdGljLXBsdWdpbiNyZWdpc3RlckxvY2F0aW9uQWNjdXJhY3lBdXRob3JpemF0aW9uQ2hhbmdlSGFuZGxlcilcbiAgICpcbiAgICogQHBhcmFtIGhhbmRsZXJcbiAgICovXG4gIEBDb3Jkb3ZhKHsgcGxhdGZvcm1zOiBbJ2lPUyddLCBzeW5jOiB0cnVlIH0pXG4gIHJlZ2lzdGVyTG9jYXRpb25BY2N1cmFjeUF1dGhvcml6YXRpb25DaGFuZ2VIYW5kbGVyKGhhbmRsZXI6IEZ1bmN0aW9uKTogdm9pZCB7fVxufVxuIl19
|