UNPKG

@sam17896/ngx-speech-recognition

Version:

Angular 5+ speech recognition service (based on browser implementation such as Chrome).

64 lines 25.5 kB
/** * @fileoverview added by tsickle * Generated from: lib/speech-recognition.module.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; import { NgModule, Inject, PLATFORM_ID, } from '@angular/core'; import { isPlatformBrowser, } from '@angular/common'; import { SpeechRecognitionGrammars, SpeechRecognitionLang, SpeechRecognitionContinuous, SpeechRecognitionInterimResults, SpeechRecognitionMaxAlternatives, SpeechRecognitionServiceUri, SpeechRecognitionAudiostartHandler, SpeechRecognitionSoundstartHandler, SpeechRecognitionSpeechstartHandler, SpeechRecognitionSpeechendHandler, SpeechRecognitionSoundendHandler, SpeechRecognitionAudioendHandler, SpeechRecognitionResultHandler, SpeechRecognitionNomatchHandler, SpeechRecognitionErrorHandler, SpeechRecognitionStartHandler, SpeechRecognitionEndHandler, } from './service/speech-recognition.token'; import { RxSpeechRecognitionService, } from './service/rx-speech-recognition.service'; import { SpeechRecognitionService, } from './service/speech-recognition.service'; import { SPEECH_RECOGNITION_DEFAULT } from './speech-recognition.provider'; var SpeechRecognitionModule = /** @class */ (function () { function SpeechRecognitionModule(platformId) { if (isPlatformBrowser(platformId) === false) { throw new Error('SpeechRecognitionModule: it run on PlatformBrowser.'); } } /** * @param {?} config * @return {?} */ SpeechRecognitionModule.forRoot = /** * @param {?} config * @return {?} */ function (config) { return { ngModule: SpeechRecognitionModule, providers: tslib_1.__spread((config.grammars !== undefined && config.grammars != null ? [{ useValue: config.grammars, provide: SpeechRecognitionGrammars }] : []), (config.lang !== undefined && config.lang != null ? [{ useValue: config.lang, provide: SpeechRecognitionLang }] : []), (config.continuous !== undefined && config.continuous != null ? [{ useValue: config.continuous, provide: SpeechRecognitionContinuous }] : []), (config.interimResults !== undefined && config.interimResults != null ? [{ useValue: config.interimResults, provide: SpeechRecognitionInterimResults }] : []), (config.maxAlternatives !== undefined && config.maxAlternatives != null ? [{ useValue: config.maxAlternatives, provide: SpeechRecognitionMaxAlternatives }] : []), (config.serviceURI !== undefined && config.serviceURI != null ? [{ useValue: config.serviceURI, provide: SpeechRecognitionServiceUri }] : []), (config.onaudiostart instanceof Function ? [{ useValue: config.onaudiostart, provide: SpeechRecognitionAudiostartHandler }] : []), (config.onsoundstart instanceof Function ? [{ useValue: config.onsoundstart, provide: SpeechRecognitionSoundstartHandler }] : []), (config.onspeechstart instanceof Function ? [{ useValue: config.onspeechstart, provide: SpeechRecognitionSpeechstartHandler }] : []), (config.onspeechend instanceof Function ? [{ useValue: config.onspeechend, provide: SpeechRecognitionSpeechendHandler }] : []), (config.onsoundend instanceof Function ? [{ useValue: config.onsoundend, provide: SpeechRecognitionSoundendHandler }] : []), (config.onaudioend instanceof Function ? [{ useValue: config.onaudioend, provide: SpeechRecognitionAudioendHandler }] : []), (config.onresult instanceof Function ? [{ useValue: config.onresult, provide: SpeechRecognitionResultHandler }] : []), (config.onnomatch instanceof Function ? [{ useValue: config.onnomatch, provide: SpeechRecognitionNomatchHandler }] : []), (config.onerror instanceof Function ? [{ useValue: config.onerror, provide: SpeechRecognitionErrorHandler }] : []), (config.onstart instanceof Function ? [{ useValue: config.onstart, provide: SpeechRecognitionStartHandler }] : []), (config.onend instanceof Function ? [{ useValue: config.onend, provide: SpeechRecognitionEndHandler }] : []), [ { useClass: SpeechRecognitionService, provide: SpeechRecognitionService }, { useClass: RxSpeechRecognitionService, provide: RxSpeechRecognitionService } ]), }; }; /** * @param {?} config * @return {?} */ SpeechRecognitionModule.withConfig = /** * @param {?} config * @return {?} */ function (config) { return { ngModule: SpeechRecognitionModule, providers: tslib_1.__spread((config.grammars !== undefined && config.grammars != null ? [{ useValue: config.grammars, provide: SpeechRecognitionGrammars }] : []), (config.lang !== undefined && config.lang != null ? [{ useValue: config.lang, provide: SpeechRecognitionLang }] : []), (config.continuous !== undefined && config.continuous != null ? [{ useValue: config.continuous, provide: SpeechRecognitionContinuous }] : []), (config.interimResults !== undefined && config.interimResults != null ? [{ useValue: config.interimResults, provide: SpeechRecognitionInterimResults }] : []), (config.maxAlternatives !== undefined && config.maxAlternatives != null ? [{ useValue: config.maxAlternatives, provide: SpeechRecognitionMaxAlternatives }] : []), (config.serviceURI !== undefined && config.serviceURI != null ? [{ useValue: config.serviceURI, provide: SpeechRecognitionServiceUri }] : []), (config.onaudiostart instanceof Function ? [{ useValue: config.onaudiostart, provide: SpeechRecognitionAudiostartHandler }] : []), (config.onsoundstart instanceof Function ? [{ useValue: config.onsoundstart, provide: SpeechRecognitionSoundstartHandler }] : []), (config.onspeechstart instanceof Function ? [{ useValue: config.onspeechstart, provide: SpeechRecognitionSpeechstartHandler }] : []), (config.onspeechend instanceof Function ? [{ useValue: config.onspeechend, provide: SpeechRecognitionSpeechendHandler }] : []), (config.onsoundend instanceof Function ? [{ useValue: config.onsoundend, provide: SpeechRecognitionSoundendHandler }] : []), (config.onaudioend instanceof Function ? [{ useValue: config.onaudioend, provide: SpeechRecognitionAudioendHandler }] : []), (config.onresult instanceof Function ? [{ useValue: config.onresult, provide: SpeechRecognitionResultHandler }] : []), (config.onnomatch instanceof Function ? [{ useValue: config.onnomatch, provide: SpeechRecognitionNomatchHandler }] : []), (config.onerror instanceof Function ? [{ useValue: config.onerror, provide: SpeechRecognitionErrorHandler }] : []), (config.onstart instanceof Function ? [{ useValue: config.onstart, provide: SpeechRecognitionStartHandler }] : []), (config.onend instanceof Function ? [{ useValue: config.onend, provide: SpeechRecognitionEndHandler }] : [])) }; }; SpeechRecognitionModule.decorators = [ { type: NgModule, args: [{ providers: [ SPEECH_RECOGNITION_DEFAULT, ], },] } ]; /** @nocollapse */ SpeechRecognitionModule.ctorParameters = function () { return [ { type: String, decorators: [{ type: Inject, args: [PLATFORM_ID,] }] } ]; }; return SpeechRecognitionModule; }()); export { SpeechRecognitionModule }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BlZWNoLXJlY29nbml0aW9uLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzYW0xNzg5Ni9uZ3gtc3BlZWNoLXJlY29nbml0aW9uLyIsInNvdXJjZXMiOlsibGliL3NwZWVjaC1yZWNvZ25pdGlvbi5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsT0FBTyxFQUNMLFFBQVEsRUFFUixNQUFNLEVBQ04sV0FBVyxHQUNaLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFDTCxpQkFBaUIsR0FDbEIsTUFBTSxpQkFBaUIsQ0FBQztBQUV6QixPQUFPLEVBQ0wseUJBQXlCLEVBQ3pCLHFCQUFxQixFQUNyQiwyQkFBMkIsRUFDM0IsK0JBQStCLEVBQy9CLGdDQUFnQyxFQUNoQywyQkFBMkIsRUFDM0Isa0NBQWtDLEVBQ2xDLGtDQUFrQyxFQUNsQyxtQ0FBbUMsRUFDbkMsaUNBQWlDLEVBQ2pDLGdDQUFnQyxFQUNoQyxnQ0FBZ0MsRUFDaEMsOEJBQThCLEVBQzlCLCtCQUErQixFQUMvQiw2QkFBNkIsRUFDN0IsNkJBQTZCLEVBQzdCLDJCQUEyQixHQUM1QixNQUFNLG9DQUFvQyxDQUFDO0FBRTVDLE9BQU8sRUFDTCwwQkFBMEIsR0FDM0IsTUFBTSx5Q0FBeUMsQ0FBQztBQUNqRCxPQUFPLEVBQ0wsd0JBQXdCLEdBQ3pCLE1BQU0sc0NBQXNDLENBQUM7QUFHOUMsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFM0U7SUFPRSxpQ0FDdUIsVUFBa0I7UUFFdkMsSUFBSSxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsS0FBSyxLQUFLLEVBQUU7WUFDM0MsTUFBTSxJQUFJLEtBQUssQ0FBQyxxREFBcUQsQ0FBQyxDQUFDO1NBQ3hFO0lBQ0gsQ0FBQzs7Ozs7SUFFTSwrQkFBTzs7OztJQUFkLFVBQWUsTUFBK0I7UUFDNUMsT0FBTztZQUNMLFFBQVEsRUFBRSx1QkFBdUI7WUFDakMsU0FBUyxtQkFFSixDQUFDLE1B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QyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FDaEg7U0FDRixDQUFDO0lBQ0osQ0FBQzs7Z0JBbkVGLFFBQVEsU0FBQztvQkFDUixTQUFTLEVBQUU7d0JBQ1QsMEJBQTBCO3FCQUMzQjtpQkFDRjs7Ozs2Q0FJSSxNQUFNLFNBQUMsV0FBVzs7SUE0RHZCLDhCQUFDO0NBQUEsQUFwRUQsSUFvRUM7U0EvRFksdUJBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBOZ01vZHVsZSxcclxuICBNb2R1bGVXaXRoUHJvdmlkZXJzLFxyXG4gIEluamVjdCxcclxuICBQTEFURk9STV9JRCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7XHJcbiAgaXNQbGF0Zm9ybUJyb3dzZXIsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuXHJcbmltcG9ydCB7XHJcbiAgU3BlZWNoUmVjb2duaXRpb25HcmFtbWFycyxcclxuICBTcGVlY2hSZWNvZ25pdGlvbkxhbmcsXHJcbiAgU3BlZWNoUmVjb2duaXRpb25Db250aW51b3VzLFxyXG4gIFNwZWVjaFJlY29nbml0aW9uSW50ZXJpbVJlc3VsdHMsXHJcbiAgU3BlZWNoUmVjb2duaXRpb25NYXhBbHRlcm5hdGl2ZXMsXHJcbiAgU3BlZWNoUmVjb2duaXRpb25TZXJ2aWNlVXJpLFxyXG4gIFNwZWVjaFJlY29nbml0aW9uQXVkaW9zdGFydEhhbmRsZXIsXHJcbiAgU3BlZWNoUmVjb2duaXRpb25Tb3VuZHN0YXJ0SGFuZGxlcixcclxuICBTcGVlY2hSZWNvZ25pdGlvblNwZWVjaHN0YXJ0SGFuZGxlcixcclxuICBTcGVlY2hSZWNvZ25pdGlvblNwZWVjaGVuZEhhbmRsZXIsXHJcbiAgU3BlZWNoUmVjb2duaXRpb25Tb3VuZGVuZEhhbmRsZXIsXHJcbiAgU3BlZWNoUmVjb2duaXRpb25BdWRpb2VuZEhhbmRsZXIsXHJcbiAgU3BlZWNoUmVjb2duaXRpb25SZXN1bHRIYW5kbGVyLFxyXG4gIFNwZWVjaFJlY29nbml0aW9uTm9tYXRjaEhhbmRsZXIsXHJcbiAgU3BlZWNoUmVjb2duaXRpb25FcnJvckhhbmRsZXIsXHJcbiAgU3BlZWNoUmVjb2duaXRpb25TdGFydEhhbmRsZXIsXHJcbiAgU3BlZWNoUmVjb2duaXRpb25FbmRIYW5kbGVyLFxyXG59IGZyb20gJy4vc2VydmljZS9zcGVlY2gtcmVjb2duaXRpb24udG9rZW4nO1xyXG5cclxuaW1wb3J0IHtcclxuICBSeFNwZWVjaFJlY29nbml0aW9uU2VydmljZSxcclxufSBmcm9tICcuL3NlcnZpY2Uvcngtc3BlZWNoLXJlY29nbml0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQge1xyXG4gIFNwZWVjaFJlY29nbml0aW9uU2VydmljZSxcclxufSBmcm9tICcuL3NlcnZpY2Uvc3BlZWNoLXJlY29nbml0aW9uLnNlcnZpY2UnO1xyXG5cclxuaW1wb3J0IHsgU3BlZWNoUmVjb2duaXRpb25Db25maWcgfSBmcm9tICcuL3NwZWVjaC1yZWNvZ25pdGlvbi5jb25maWcnO1xyXG5pbXBvcnQgeyBTUEVFQ0hfUkVDT0dOSVRJT05fREVGQVVMVCB9IGZyb20gJy4vc3BlZWNoLXJlY29nbml0aW9uLnByb3ZpZGVyJztcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICBTUEVFQ0hfUkVDT0dOSVRJT05fREVGQVVMVCxcclxuICBdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU3BlZWNoUmVjb2duaXRpb25Nb2R1bGUge1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIEBJbmplY3QoUExBVEZPUk1fSUQpIHBsYXRmb3JtSWQ6IHN0cmluZ1xyXG4gICkge1xyXG4gICAgaWYgKGlzUGxhdGZvcm1Ccm93c2VyKHBsYXRmb3JtSWQpID09PSBmYWxzZSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NwZWVjaFJlY29nbml0aW9uTW9kdWxlOiBpdCBydW4gb24gUGxhdGZvcm1Ccm93c2VyLicpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIGZvclJvb3QoY29uZmlnOiBTcGVlY2hSZWNvZ25pdGlvbkNvbmZpZyk6IE1vZHVsZVdpdGhQcm92aWRlcnMge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgbmdNb2R1bGU6IFNwZWVjaFJlY29nbml0aW9uTW9kdWxlLFxyXG4gICAgICBwcm92aWRlcnM6IFtcclxuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZTptYXgtbGluZS1sZW5ndGhcclxuICAgICAgICAuLi4oY29uZmlnLmdyYW1tYXJzICE9PSB1bmRlZmluZWQgJiYgY29uZmlnLmdyYW1tYXJzICE9IG51bGwgPyBbeyB1c2VWYWx1ZTogY29uZmlnLmdyYW1tYXJzLCBwcm92aWRlOiBTcGVlY2hSZWNvZ25pdGlvbkdyYW1tYXJzIH1dIDogW10pLFxyXG4gICAgICAgIC4uLihjb25maWcubGFuZyAhPT0gdW5kZWZpbmVkICYmIGNvbmZpZy5sYW5nICE9IG51bGwgPyBbeyB1c2VWYWx1ZTogY29uZmlnLmxhbmcsIHByb3ZpZGU6IFNwZWVjaFJlY29nbml0aW9uTGFuZyB9XSA6IFtdKSxcclxuICAgICAgICAuLi4oY29uZmlnLmNvbnRpbnVvdXMgIT09IHVuZGVmaW5lZCAmJiBjb25maWcuY29udGludW91cyAhPSBudWxsID8gW3sgdXNlVmFsdWU6IGNvbmZpZy5jb250aW51b3VzLCBwcm92aWRlOiBTcGVlY2hSZWNvZ25pdGlvbkNvbnRpbnVvdXMgfV0gOiBbXSksXHJcbiAgICAgICAgLi4uKGNvbmZpZy5pbnRlcmltUmVzdWx0cyAhPT0gdW5kZWZpbmVkICYmIGNvbmZpZy5pbnRlcmltUmVzdWx0cyAhPSBudWxsID8gW3sgdXNlVmFsdWU6IGNvbmZpZy5pbnRlcmltUmVzdWx0cywgcHJvdmlkZTogU3BlZWNoUmVjb2duaXRpb25JbnRlcmltUmVzdWx0cyB9XSA6IFtdKSxcclxuICAgICAgICAuLi4oY29uZmlnLm1heEFsdGVybmF0aXZlcyAhPT0gdW5kZWZpbmVkICYmIGNvbmZpZy5tYXhBbHRlcm5hdGl2ZXMgIT0gbnVsbCA/IFt7IHVzZVZhbHVlOiBjb25maWcubWF4QWx0ZXJuYXRpdmVzLCBwcm92aWRlOiBTcGVlY2hSZWNvZ25pdGlvbk1heEFsdGVybmF0aXZlcyB9XSA6IFtdKSxcclxuICAgICAgICAuLi4oY29uZmlnLnNlcnZpY2VVUkkgIT09IHVuZGVmaW5lZCAmJiBjb25maWcuc2VydmljZVVSSSAhPSBudWxsID8gW3sgdXNlVmFsdWU6IGNvbmZpZy5zZXJ2aWNlVVJJLCBwcm92aWRlOiBTcGVlY2hSZWNvZ25pdGlvblNlcnZpY2VVcmkgfV0gOiBbXSksXHJcbiAgICAgICAgLi4uKGNvbmZpZy5vbmF1ZGlvc3RhcnQgaW5zdGFuY2VvZiBGdW5jdGlvbiA/IFt7IHVzZVZhbHVlOiBjb25maWcub25hdWRpb3N0YXJ0LCBwcm92aWRlOiBTcGVlY2hSZWNvZ25pdGlvbkF1ZGlvc3RhcnRIYW5kbGVyIH1dIDogW10pLFxyXG4gICAgICAgIC4uLihjb25maWcub25zb3VuZHN0YXJ0IGluc3RhbmNlb2YgRnVuY3Rpb24gPyBbeyB1c2VWYWx1ZTogY29uZmlnLm9uc291bmRzdGFydCwgcHJvdmlkZTogU3BlZWNoUmVjb2duaXRpb25Tb3VuZHN0YXJ0SGFuZGxlciB9XSA6IFtdKSxcclxuICAgICAgICAuLi4oY29uZmlnLm9uc3BlZWNoc3RhcnQgaW5zdGFuY2VvZiBGdW5jdGlvbiA/IFt7IHVzZVZhbHVlOiBjb25maWcub25zcGVlY2hzdGFydCwgcHJvdmlkZTogU3BlZWNoUmVjb2duaXRpb25TcGVlY2hzdGFydEhhbmRsZXIgfV0gOiBbXSksXHJcbiAgICAgICAgLi4uKGNvbmZpZy5vbnNwZWVjaGVuZCBpbnN0YW5jZW9mIEZ1bmN0aW9uID8gW3sgdXNlVmFsdWU6IGNvbmZpZy5vbnNwZWVjaGVuZCwgcHJvdmlkZTogU3BlZWNoUmVjb2duaXRpb25TcGVlY2hlbmRIYW5kbGVyIH1dIDogW10pLFxyXG4gICAgICAgIC4uLihjb25maWcub25zb3VuZGVuZCBpbnN0YW5jZW9mIEZ1bmN0aW9uID8gW3sgdXNlVmFsdWU6IGNvbmZpZy5vbnNvdW5kZW5kLCBwcm92aWRlOiBTcGVlY2hSZWNvZ25pdGlvblNvdW5kZW5kSGFuZGxlciB9XSA6IFtdKSxcclxuICAgICAgICAuLi4oY29uZmlnLm9uYXVkaW9lbmQgaW5zdGFuY2VvZiBGdW5jdGlvbiA/IFt7IHVzZVZhbHVlOiBjb25maWcub25hdWRpb2VuZCwgcHJvdmlkZTogU3BlZWNoUmVjb2duaXRpb25BdWRpb2VuZEhhbmRsZXIgfV0gOiBbXSksXHJcbiAgICAgICAgLi4uKGNvbmZpZy5vbnJlc3VsdCBpbnN0YW5jZW9mIEZ1bmN0aW9uID8gW3sgdXNlVmFsdWU6IGNvbmZpZy5vbnJlc3VsdCwgcHJvdmlkZTogU3BlZWNoUmVjb2duaXRpb25SZXN1bHRIYW5kbGVyIH1dIDogW10pLFxyXG4gICAgICAgIC4uLihjb25maWcub25ub21hdGNoIGluc3RhbmNlb2YgRnVuY3Rpb24gPyBbeyB1c2VWYWx1ZTogY29uZmlnLm9ubm9tYXRjaCwgcHJvdmlkZTogU3BlZWNoUmVjb2duaXRpb25Ob21hdGNoSGFuZGxlciB9XSA6IFtdKSxcclxuICAgICAgICAuLi4oY29uZmlnLm9uZXJyb3IgaW5zdGFuY2VvZiBGdW5jdGlvbiA/IFt7IHVzZVZhbHVlOiBjb25maWcub25lcnJvciwgcHJvdmlkZTogU3BlZWNoUmVjb2duaXRpb25FcnJvckhhbmRsZXIgfV0gOiBbXSksXHJcbiAgICAgICAgLi4uKGNvbmZpZy5vbnN0YXJ0IGluc3RhbmNlb2YgRnVuY3Rpb24gPyBbeyB1c2VWYWx1ZTogY29uZmlnLm9uc3RhcnQsIHByb3ZpZGU6IFNwZWVjaFJlY29nbml0aW9uU3RhcnRIYW5kbGVyIH1dIDogW10pLFxyXG4gICAgICAgIC4uLihjb25maWcub25lbmQgaW5zdGFuY2VvZiBGdW5jdGlvbiA/IFt7IHVzZVZhbHVlOiBjb25maWcub25lbmQsIHByb3ZpZGU6IFNwZWVjaFJlY29nbml0aW9uRW5kSGFuZGxlciB9XSA6IFtdKSxcclxuICAgICAgICB7IHVzZUNsYXNzOiBTcGVlY2hSZWNvZ25pdGlvblNlcnZpY2UsIHByb3ZpZGU6IFNwZWVjaFJlY29nbml0aW9uU2VydmljZSB9LFxyXG4gICAgICAgIHsgdXNlQ2xhc3M6IFJ4U3BlZWNoUmVjb2duaXRpb25TZXJ2aWNlLCBwcm92aWRlOiBSeFNwZWVjaFJlY29nbml0aW9uU2VydmljZSB9XHJcbiAgICAgIF0sXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIHdpdGhDb25maWcoY29uZmlnOiBTcGVlY2hSZWNvZ25pdGlvbkNvbmZpZyk6IE1vZHVsZVdpdGhQcm92aWRlcnMge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgbmdNb2R1bGU6IFNwZWVjaFJlY29nbml0aW9uTW9kdWxlLFxyXG4gICAgICBwcm92aWRlcnM6IFtcclxuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZTptYXgtbGluZS1sZW5ndGhcclxuICAgICAgICAuLi4oY29uZmlnLmdyYW1tYXJzICE9PSB1bmRlZmluZWQgJiYgY29uZmlnLmdyYW1tYXJzICE9IG51bGwgPyBbeyB1c2VWYWx1ZTogY29uZmlnLmdyYW1tYXJzLCBwcm92aWRlOiBTcGVlY2hSZWNvZ25pdGlvbkdyYW1tYXJzIH1dIDogW10pLFxyXG4gICAgICAgIC4uLihjb25maWcubGFuZyAhPT0gdW5kZWZpbmVkICYmIGNvbmZpZy5sYW5nICE9IG51bGwgPyBbeyB1c2VWYWx1ZTogY29uZmlnLmxhbmcsIHByb3ZpZGU6IFNwZWVjaFJlY29nbml0aW9uTGFuZyB9XSA6IFtdKSxcclxuICAgICAgICAuLi4oY29uZmlnLmNvbnRpbnVvdXMgIT09IHVuZGVmaW5lZCAmJiBjb25maWcuY29udGludW91cyAhPSBudWxsID8gW3sgdXNlVmFsdWU6IGNvbmZpZy5jb250aW51b3VzLCBwcm92aWRlOiBTcGVlY2hSZWNvZ25pdGlvbkNvbnRpbnVvdXMgfV0gOiBbXSksXHJcbiAgICAgICAgLi4uKGNvbmZpZy5pbnRlcmltUmVzdWx0cyAhPT0gdW5kZWZpbmVkICYmIGNvbmZpZy5pbnRlcmltUmVzdWx0cyAhPSBudWxsID8gW3sgdXNlVmFsdWU6IGNvbmZpZy5pbnRlcmltUmVzdWx0cywgcHJvdmlkZTogU3BlZWNoUmVjb2duaXRpb25JbnRlcmltUmVzdWx0cyB9XSA6IFtdKSxcclxuICAgICAgICAuLi4oY29uZmlnLm1heEFsdGVybmF0aXZlcyAhPT0gdW5kZWZpbmVkICYmIGNvbmZpZy5tYXhBbHRlcm5hdGl2ZXMgIT0gbnVsbCA/IFt7IHVzZVZhbHVlOiBjb25maWcubWF4QWx0ZXJuYXRpdmVzLCBwcm92aWRlOiBTcGVlY2hSZWNvZ25pdGlvbk1heEFsdGVybmF0aXZlcyB9XSA6IFtdKSxcclxuICAgICAgICAuLi4oY29uZmlnLnNlcnZpY2VVUkkgIT09IHVuZGVmaW5lZCAmJiBjb25maWcuc2VydmljZVVSSSAhPSBudWxsID8gW3sgdXNlVmFsdWU6IGNvbmZpZy5zZXJ2aWNlVVJJLCBwcm92aWRlOiBTcGVlY2hSZWNvZ25pdGlvblNlcnZpY2VVcmkgfV0gOiBbXSksXHJcbiAgICAgICAgLi4uKGNvbmZpZy5vbmF1ZGlvc3RhcnQgaW5zdGFuY2VvZiBGdW5jdGlvbiA/IFt7IHVzZVZhbHVlOiBjb25maWcub25hdWRpb3N0YXJ0LCBwcm92aWRlOiBTcGVlY2hSZWNvZ25pdGlvbkF1ZGlvc3RhcnRIYW5kbGVyIH1dIDogW10pLFxyXG4gICAgICAgIC4uLihjb25maWcub25zb3VuZHN0YXJ0IGluc3RhbmNlb2YgRnVuY3Rpb24gPyBbeyB1c2VWYWx1ZTogY29uZmlnLm9uc291bmRzdGFydCwgcHJvdmlkZTogU3BlZWNoUmVjb2duaXRpb25Tb3VuZHN0YXJ0SGFuZGxlciB9XSA6IFtdKSxcclxuICAgICAgICAuLi4oY29uZmlnLm9uc3BlZWNoc3RhcnQgaW5zdGFuY2VvZiBGdW5jdGlvbiA/IFt7IHVzZVZhbHVlOiBjb25maWcub25zcGVlY2hzdGFydCwgcHJvdmlkZTogU3BlZWNoUmVjb2duaXRpb25TcGVlY2hzdGFydEhhbmRsZXIgfV0gOiBbXSksXHJcbiAgICAgICAgLi4uKGNvbmZpZy5vbnNwZWVjaGVuZCBpbnN0YW5jZW9mIEZ1bmN0aW9uID8gW3sgdXNlVmFsdWU6IGNvbmZpZy5vbnNwZWVjaGVuZCwgcHJvdmlkZTogU3BlZWNoUmVjb2duaXRpb25TcGVlY2hlbmRIYW5kbGVyIH1dIDogW10pLFxyXG4gICAgICAgIC4uLihjb25maWcub25zb3VuZGVuZCBpbnN0YW5jZW9mIEZ1bmN0aW9uID8gW3sgdXNlVmFsdWU6IGNvbmZpZy5vbnNvdW5kZW5kLCBwcm92aWRlOiBTcGVlY2hSZWNvZ25pdGlvblNvdW5kZW5kSGFuZGxlciB9XSA6IFtdKSxcclxuICAgICAgICAuLi4oY29uZmlnLm9uYXVkaW9lbmQgaW5zdGFuY2VvZiBGdW5jdGlvbiA/IFt7IHVzZVZhbHVlOiBjb25maWcub25hdWRpb2VuZCwgcHJvdmlkZTogU3BlZWNoUmVjb2duaXRpb25BdWRpb2VuZEhhbmRsZXIgfV0gOiBbXSksXHJcbiAgICAgICAgLi4uKGNvbmZpZy5vbnJlc3VsdCBpbnN0YW5jZW9mIEZ1bmN0aW9uID8gW3sgdXNlVmFsdWU6IGNvbmZpZy5vbnJlc3VsdCwgcHJvdmlkZTogU3BlZWNoUmVjb2duaXRpb25SZXN1bHRIYW5kbGVyIH1dIDogW10pLFxyXG4gICAgICAgIC4uLihjb25maWcub25ub21hdGNoIGluc3RhbmNlb2YgRnVuY3Rpb24gPyBbeyB1c2VWYWx1ZTogY29uZmlnLm9ubm9tYXRjaCwgcHJvdmlkZTogU3BlZWNoUmVjb2duaXRpb25Ob21hdGNoSGFuZGxlciB9XSA6IFtdKSxcclxuICAgICAgICAuLi4oY29uZmlnLm9uZXJyb3IgaW5zdGFuY2VvZiBGdW5jdGlvbiA/IFt7IHVzZVZhbHVlOiBjb25maWcub25lcnJvciwgcHJvdmlkZTogU3BlZWNoUmVjb2duaXRpb25FcnJvckhhbmRsZXIgfV0gOiBbXSksXHJcbiAgICAgICAgLi4uKGNvbmZpZy5vbnN0YXJ0IGluc3RhbmNlb2YgRnVuY3Rpb24gPyBbeyB1c2VWYWx1ZTogY29uZmlnLm9uc3RhcnQsIHByb3ZpZGU6IFNwZWVjaFJlY29nbml0aW9uU3RhcnRIYW5kbGVyIH1dIDogW10pLFxyXG4gICAgICAgIC4uLihjb25maWcub25lbmQgaW5zdGFuY2VvZiBGdW5jdGlvbiA/IFt7IHVzZVZhbHVlOiBjb25maWcub25lbmQsIHByb3ZpZGU6IFNwZWVjaFJlY29nbml0aW9uRW5kSGFuZGxlciB9XSA6IFtdKSxcclxuICAgICAgXVxyXG4gICAgfTtcclxuICB9XHJcbn1cclxuIl19