{"version":3,"file":"platform-browser.umd.js","sources":["../../../../packages/platform-browser/src/private_export.ts","../../../../packages/platform-browser/src/dom/debug/by.ts","../../../../packages/platform-browser/src/browser/tools/tools.ts","../../../../packages/platform-browser/src/browser/tools/common_tools.ts","../../../../packages/platform-browser/src/browser.ts","../../../../packages/platform-browser/src/security/dom_sanitization_service.ts","../../../../packages/platform-browser/src/security/style_sanitizer.ts","../../../../packages/platform-browser/src/security/html_sanitizer.ts","../../../../packages/platform-browser/src/security/url_sanitizer.ts","../../../../packages/platform-browser/src/dom/events/key_events.ts","../../../../packages/platform-browser/src/dom/events/hammer_gestures.ts","../../../../packages/platform-browser/src/dom/events/dom_events.ts","../../../../packages/platform-browser/src/dom/dom_renderer.ts","../../../../packages/platform-browser/src/dom/shared_styles_host.ts","../../../../packages/platform-browser/src/dom/events/event_manager.ts","../../../../packages/platform-browser/src/dom/debug/ng_probe.ts","../../../../packages/platform-browser/src/browser/title.ts","../../../../packages/platform-browser/src/browser/testability.ts","../../../../packages/platform-browser/src/browser/server-transition.ts","../../../../packages/platform-browser/src/browser/meta.ts","../../../../packages/platform-browser/src/browser/location/browser_platform_location.ts","../../../../packages/platform-browser/src/dom/dom_tokens.ts","../../../../packages/platform-browser/src/browser/browser_adapter.ts","../../../../packages/platform-browser/src/browser/generic_browser_adapter.ts","../../../../packages/platform-browser/src/dom/dom_adapter.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexport {BROWSER_SANITIZATION_PROVIDERS as ɵBROWSER_SANITIZATION_PROVIDERS, INTERNAL_BROWSER_PLATFORM_PROVIDERS as ɵINTERNAL_BROWSER_PLATFORM_PROVIDERS, initDomAdapter as ɵinitDomAdapter} from './browser';\nexport {BrowserDomAdapter as ɵBrowserDomAdapter} from './browser/browser_adapter';\nexport {setValueOnPath as ɵsetValueOnPath} from './browser/browser_adapter';\nexport {BrowserPlatformLocation as ɵBrowserPlatformLocation} from './browser/location/browser_platform_location';\nexport {TRANSITION_ID as ɵTRANSITION_ID} from './browser/server-transition';\nexport {BrowserGetTestability as ɵBrowserGetTestability} from './browser/testability';\nexport {ELEMENT_PROBE_PROVIDERS as ɵELEMENT_PROBE_PROVIDERS} from './dom/debug/ng_probe';\nexport {DomAdapter as ɵDomAdapter, getDOM as ɵgetDOM, setRootDomAdapter as ɵsetRootDomAdapter} from './dom/dom_adapter';\nexport {DomRendererFactory2 as ɵDomRendererFactory2, NAMESPACE_URIS as ɵNAMESPACE_URIS, flattenStyles as ɵflattenStyles, shimContentAttribute as ɵshimContentAttribute, shimHostAttribute as ɵshimHostAttribute} from './dom/dom_renderer';\nexport {DomEventsPlugin as ɵDomEventsPlugin} from './dom/events/dom_events';\nexport {HammerGesturesPlugin as ɵHammerGesturesPlugin} from './dom/events/hammer_gestures';\nexport {KeyEventsPlugin as ɵKeyEventsPlugin} from './dom/events/key_events';\nexport {DomSharedStylesHost as ɵDomSharedStylesHost, SharedStylesHost as ɵSharedStylesHost} from './dom/shared_styles_host';\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nimport {DebugElement, Predicate, Type} from '@angular/core';\nimport {getDOM} from '../../dom/dom_adapter';\n/**\n * Predicates for use with {\\@link DebugElement}'s query functions.\n * \n * \\@experimental All debugging apis are currently experimental.\n */\nexport class By {\n/**\n * Match all elements.\n * \n * ## Example\n * \n * {\\@example platform-browser/dom/debug/ts/by/by.ts region='by_all'}\n * @return {?}\n */\nstatic all(): Predicate<DebugElement> { return (debugElement) => true; }\n/**\n * Match elements by the given CSS selector.\n * \n * ## Example\n * \n * {\\@example platform-browser/dom/debug/ts/by/by.ts region='by_css'}\n * @param {?} selector\n * @return {?}\n */\nstatic css(selector: string): Predicate<DebugElement> {\n return (debugElement) => {\n return debugElement.nativeElement != null ?\n getDOM().elementMatches(debugElement.nativeElement, selector) :\n false;\n };\n }\n/**\n * Match elements that have the given directive present.\n * \n * ## Example\n * \n * {\\@example platform-browser/dom/debug/ts/by/by.ts region='by_directive'}\n * @param {?} type\n * @return {?}\n */\nstatic directive(type: Type<any>): Predicate<DebugElement> {\n return (debugElement) => debugElement.providerTokens.indexOf(type) !== -1;\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nimport {ComponentRef} from '@angular/core';\nimport {getDOM} from '../../dom/dom_adapter';\n\nimport {AngularProfiler} from './common_tools';\n\nconst /** @type {?} */ PROFILER_GLOBAL_NAME = 'ng.profiler';\n/**\n * Enabled Angular debug tools that are accessible via your browser's\n * developer console.\n * \n * Usage:\n * \n * 1. Open developer console (e.g. in Chrome Ctrl + Shift + j)\n * 1. Type `ng.` (usually the console will show auto-complete suggestion)\n * 1. Try the change detection profiler `ng.profiler.timeChangeDetection()`\n * then hit Enter.\n * \n * \\@experimental All debugging apis are currently experimental.\n * @template T\n * @param {?} ref\n * @return {?}\n */\nexport function enableDebugTools<T>(ref: ComponentRef<T>): ComponentRef<T> {\n getDOM().setGlobalVar(PROFILER_GLOBAL_NAME, new AngularProfiler(ref));\n return ref;\n}\n/**\n * Disables Angular tools.\n * \n * \\@experimental All debugging apis are currently experimental.\n * @return {?}\n */\nexport function disableDebugTools(): void {\n getDOM().setGlobalVar(PROFILER_GLOBAL_NAME, null);\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nimport {ApplicationRef, ComponentRef} from '@angular/core';\nimport {getDOM} from '../../dom/dom_adapter';\nimport {window} from './browser';\nexport class ChangeDetectionPerfRecord {\n/**\n * @param {?} msPerTick\n * @param {?} numTicks\n */\nconstructor(public msPerTick: number,\npublic numTicks: number) {}\n}\n\nfunction ChangeDetectionPerfRecord_tsickle_Closure_declarations() {\n/** @type {?} */\nChangeDetectionPerfRecord.prototype.msPerTick;\n/** @type {?} */\nChangeDetectionPerfRecord.prototype.numTicks;\n}\n\n/**\n * Entry point for all Angular profiling-related debug tools. This object\n * corresponds to the `ng.profiler` in the dev console.\n */\nexport class AngularProfiler {\n appRef: ApplicationRef;\n/**\n * @param {?} ref\n */\nconstructor(ref: ComponentRef<any>) { this.appRef = ref.injector.get(ApplicationRef); }\n/**\n * Exercises change detection in a loop and then prints the average amount of\n * time in milliseconds how long a single round of change detection takes for\n * the current state of the UI. It runs a minimum of 5 rounds for a minimum\n * of 500 milliseconds.\n * \n * Optionally, a user may pass a `config` parameter containing a map of\n * options. Supported options are:\n * \n * `record` (boolean) - causes the profiler to record a CPU profile while\n * it exercises the change detector. Example:\n * \n * ```\n * ng.profiler.timeChangeDetection({record: true})\n * ```\n * @param {?} config\n * @return {?}\n */\ntimeChangeDetection(config: any): ChangeDetectionPerfRecord {\n const /** @type {?} */ record = config && config['record'];\n const /** @type {?} */ profileName = 'Change Detection';\n // Profiler is not available in Android browsers, nor in IE 9 without dev tools opened\n const /** @type {?} */ isProfilerAvailable = window.console.profile != null;\n if (record && isProfilerAvailable) {\n window.console.profile(profileName);\n }\n const /** @type {?} */ start = getDOM().performanceNow();\n let /** @type {?} */ numTicks = 0;\n while (numTicks < 5 || (getDOM().performanceNow() - start) < 500) {\n this.appRef.tick();\n numTicks++;\n }\n const /** @type {?} */ end = getDOM().performanceNow();\n if (record && isProfilerAvailable) {\n // need to cast to <any> because type checker thinks there's no argument\n // while in fact there is:\n //\n // https://developer.mozilla.org/en-US/docs/Web/API/Console/profileEnd\n ( /** @type {?} */((<any>window.console.profileEnd)))(profileName);\n }\n const /** @type {?} */ msPerTick = (end - start) / numTicks;\n window.console.log(`ran ${numTicks} change detection cycles`);\n window.console.log(`${msPerTick.toFixed(2)} ms per check`);\n\n return new ChangeDetectionPerfRecord(msPerTick, numTicks);\n }\n}\n\nfunction AngularProfiler_tsickle_Closure_declarations() {\n/** @type {?} */\nAngularProfiler.prototype.appRef;\n}\n\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nimport {CommonModule, PlatformLocation, ɵPLATFORM_BROWSER_ID as PLATFORM_BROWSER_ID} from '@angular/common';\nimport {APP_ID, ApplicationModule, ErrorHandler, ModuleWithProviders, NgModule, Optional, PLATFORM_ID, PLATFORM_INITIALIZER, PlatformRef, Provider, RendererFactory2, RootRenderer, Sanitizer, SkipSelf, Testability, createPlatformFactory, platformCore} from '@angular/core';\n\nimport {BrowserDomAdapter} from './browser/browser_adapter';\nimport {BrowserPlatformLocation} from './browser/location/browser_platform_location';\nimport {Meta} from './browser/meta';\nimport {SERVER_TRANSITION_PROVIDERS, TRANSITION_ID} from './browser/server-transition';\nimport {BrowserGetTestability} from './browser/testability';\nimport {Title} from './browser/title';\nimport {ELEMENT_PROBE_PROVIDERS} from './dom/debug/ng_probe';\nimport {getDOM} from './dom/dom_adapter';\nimport {DomRendererFactory2} from './dom/dom_renderer';\nimport {DOCUMENT} from './dom/dom_tokens';\nimport {DomEventsPlugin} from './dom/events/dom_events';\nimport {EVENT_MANAGER_PLUGINS, EventManager} from './dom/events/event_manager';\nimport {HAMMER_GESTURE_CONFIG, HammerGestureConfig, HammerGesturesPlugin} from './dom/events/hammer_gestures';\nimport {KeyEventsPlugin} from './dom/events/key_events';\nimport {DomSharedStylesHost, SharedStylesHost} from './dom/shared_styles_host';\nimport {DomSanitizer, DomSanitizerImpl} from './security/dom_sanitization_service';\n\nexport const /** @type {?} */ INTERNAL_BROWSER_PLATFORM_PROVIDERS: Provider[] = [\n {provide: PLATFORM_ID, useValue: PLATFORM_BROWSER_ID},\n {provide: PLATFORM_INITIALIZER, useValue: initDomAdapter, multi: true},\n {provide: PlatformLocation, useClass: BrowserPlatformLocation},\n {provide: DOCUMENT, useFactory: _document, deps: []},\n];\n/**\n * \\@security Replacing built-in sanitization providers exposes the application to XSS risks.\n * Attacker-controlled data introduced by an unsanitized provider could expose your\n * application to XSS risks. For more detail, see the [Security Guide](http://g.co/ng/security).\n * \\@experimental\n */\nexport const BROWSER_SANITIZATION_PROVIDERS: Array<any> = [\n {provide: Sanitizer, useExisting: DomSanitizer},\n {provide: DomSanitizer, useClass: DomSanitizerImpl},\n];\n/**\n * \\@stable\n */\nexport const platformBrowser: (extraProviders?: Provider[]) => PlatformRef =\n createPlatformFactory(platformCore, 'browser', INTERNAL_BROWSER_PLATFORM_PROVIDERS);\n/**\n * @return {?}\n */\nexport function initDomAdapter() {\n BrowserDomAdapter.makeCurrent();\n BrowserGetTestability.init();\n}\n/**\n * @return {?}\n */\nexport function errorHandler(): ErrorHandler {\n return new ErrorHandler();\n}\n/**\n * @return {?}\n */\nexport function _document(): any {\n return document;\n}\n/**\n * The ng module for the browser.\n * \n * \\@stable\n */\nexport class BrowserModule {\n/**\n * @param {?} parentModule\n */\nconstructor( parentModule: BrowserModule) {\n if (parentModule) {\n throw new Error(\n `BrowserModule has already been loaded. If you need access to common directives such as NgIf and NgFor from a lazy loaded module, import CommonModule instead.`);\n }\n }\n/**\n * Configures a browser-based application to transition from a server-rendered app, if\n * one is present on the page. The specified parameters must include an application id,\n * which must match between the client and server applications.\n * \n * \\@experimental\n * @param {?} params\n * @return {?}\n */\nstatic withServerTransition(params: {appId: string}): ModuleWithProviders {\n return {\n ngModule: BrowserModule,\n providers: [\n {provide: APP_ID, useValue: params.appId},\n {provide: TRANSITION_ID, useExisting: APP_ID},\n SERVER_TRANSITION_PROVIDERS,\n ],\n };\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: NgModule, args: [{\n providers: [\n BROWSER_SANITIZATION_PROVIDERS,\n {provide: ErrorHandler, useFactory: errorHandler, deps: []},\n {provide: EVENT_MANAGER_PLUGINS, useClass: DomEventsPlugin, multi: true},\n {provide: EVENT_MANAGER_PLUGINS, useClass: KeyEventsPlugin, multi: true},\n {provide: EVENT_MANAGER_PLUGINS, useClass: HammerGesturesPlugin, multi: true},\n {provide: HAMMER_GESTURE_CONFIG, useClass: HammerGestureConfig},\n DomRendererFactory2,\n {provide: RendererFactory2, useExisting: DomRendererFactory2},\n {provide: SharedStylesHost, useExisting: DomSharedStylesHost},\n DomSharedStylesHost,\n Testability,\n EventManager,\n ELEMENT_PROBE_PROVIDERS,\n Meta,\n Title,\n ],\n exports: [CommonModule, ApplicationModule]\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: BrowserModule, decorators: [{ type: Optional }, { type: SkipSelf }, ]},\n];\n}\n\nfunction BrowserModule_tsickle_Closure_declarations() {\n/** @type {?} */\nBrowserModule.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nBrowserModule.ctorParameters;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nimport {Inject, Injectable, Sanitizer, SecurityContext} from '@angular/core';\n\nimport {DOCUMENT} from '../dom/dom_tokens';\n\nimport {sanitizeHtml} from './html_sanitizer';\nimport {sanitizeStyle} from './style_sanitizer';\nimport {sanitizeUrl} from './url_sanitizer';\n\nexport {SecurityContext};\n\n\n\n/**\n * Marker interface for a value that's safe to use in a particular context.\n *\n * @stable\n */\nexport interface SafeValue {}\n\n/**\n * Marker interface for a value that's safe to use as HTML.\n *\n * @stable\n */\nexport interface SafeHtml extends SafeValue {}\n\n/**\n * Marker interface for a value that's safe to use as style (CSS).\n *\n * @stable\n */\nexport interface SafeStyle extends SafeValue {}\n\n/**\n * Marker interface for a value that's safe to use as JavaScript.\n *\n * @stable\n */\nexport interface SafeScript extends SafeValue {}\n\n/**\n * Marker interface for a value that's safe to use as a URL linking to a document.\n *\n * @stable\n */\nexport interface SafeUrl extends SafeValue {}\n\n/**\n * Marker interface for a value that's safe to use as a URL to load executable code from.\n *\n * @stable\n */\nexport interface SafeResourceUrl extends SafeValue {}\n/**\n * DomSanitizer helps preventing Cross Site Scripting Security bugs (XSS) by sanitizing\n * values to be safe to use in the different DOM contexts.\n * \n * For example, when binding a URL in an `<a [href]=\"someValue\">` hyperlink, `someValue` will be\n * sanitized so that an attacker cannot inject e.g. a `javascript:` URL that would execute code on\n * the website.\n * \n * In specific situations, it might be necessary to disable sanitization, for example if the\n * application genuinely needs to produce a `javascript:` style link with a dynamic value in it.\n * Users can bypass security by constructing a value with one of the `bypassSecurityTrust...`\n * methods, and then binding to that value from the template.\n * \n * These situations should be very rare, and extraordinary care must be taken to avoid creating a\n * Cross Site Scripting (XSS) security bug!\n * \n * When using `bypassSecurityTrust...`, make sure to call the method as early as possible and as\n * close as possible to the source of the value, to make it easy to verify no security bug is\n * created by its use.\n * \n * It is not required (and not recommended) to bypass security if the value is safe, e.g. a URL that\n * does not start with a suspicious protocol, or an HTML snippet that does not contain dangerous\n * code. The sanitizer leaves safe values intact.\n * \n * \\@security Calling any of the `bypassSecurityTrust...` APIs disables Angular's built-in\n * sanitization for the value passed in. Carefully check and audit all values and code paths going\n * into this call. Make sure any user data is appropriately escaped for this security context.\n * For more detail, see the [Security Guide](http://g.co/ng/security).\n * \n * \\@stable\n * @abstract\n */\nexport abstract class DomSanitizer implements Sanitizer {\n/**\n * Sanitizes a value for use in the given SecurityContext.\n * \n * If value is trusted for the context, this method will unwrap the contained safe value and use\n * it directly. Otherwise, value will be sanitized to be safe in the given context, for example\n * by replacing URLs that have an unsafe protocol part (such as `javascript:`). The implementation\n * is responsible to make sure that the value can definitely be safely used in the given context.\n * @abstract\n * @param {?} context\n * @param {?} value\n * @return {?}\n */\nsanitize(context: SecurityContext, value: any) {}\n/**\n * Bypass security and trust the given value to be safe HTML. Only use this when the bound HTML\n * is unsafe (e.g. contains `<script>` tags) and the code should be executed. The sanitizer will\n * leave safe HTML intact, so in most situations this method should not be used.\n * \n * **WARNING:** calling this method with untrusted user data exposes your application to XSS\n * security risks!\n * @abstract\n * @param {?} value\n * @return {?}\n */\nbypassSecurityTrustHtml(value: string) {}\n/**\n * Bypass security and trust the given value to be safe style value (CSS).\n * \n * **WARNING:** calling this method with untrusted user data exposes your application to XSS\n * security risks!\n * @abstract\n * @param {?} value\n * @return {?}\n */\nbypassSecurityTrustStyle(value: string) {}\n/**\n * Bypass security and trust the given value to be safe JavaScript.\n * \n * **WARNING:** calling this method with untrusted user data exposes your application to XSS\n * security risks!\n * @abstract\n * @param {?} value\n * @return {?}\n */\nbypassSecurityTrustScript(value: string) {}\n/**\n * Bypass security and trust the given value to be a safe style URL, i.e. a value that can be used\n * in hyperlinks or `<img src>`.\n * \n * **WARNING:** calling this method with untrusted user data exposes your application to XSS\n * security risks!\n * @abstract\n * @param {?} value\n * @return {?}\n */\nbypassSecurityTrustUrl(value: string) {}\n/**\n * Bypass security and trust the given value to be a safe resource URL, i.e. a location that may\n * be used to load executable code from, like `<script src>`, or `<iframe src>`.\n * \n * **WARNING:** calling this method with untrusted user data exposes your application to XSS\n * security risks!\n * @abstract\n * @param {?} value\n * @return {?}\n */\nbypassSecurityTrustResourceUrl(value: string) {}\n}\nexport class DomSanitizerImpl extends DomSanitizer {\n/**\n * @param {?} _doc\n */\nconstructor(\nprivate _doc: any) { super(); }\n/**\n * @param {?} ctx\n * @param {?} value\n * @return {?}\n */\nsanitize(ctx: SecurityContext, value: any): string {\n if (value == null) return null;\n switch (ctx) {\n case SecurityContext.NONE:\n return value;\n case SecurityContext.HTML:\n if (value instanceof SafeHtmlImpl) return value.changingThisBreaksApplicationSecurity;\n this.checkNotSafeValue(value, 'HTML');\n return sanitizeHtml(this._doc, String(value));\n case SecurityContext.STYLE:\n if (value instanceof SafeStyleImpl) return value.changingThisBreaksApplicationSecurity;\n this.checkNotSafeValue(value, 'Style');\n return sanitizeStyle(value);\n case SecurityContext.SCRIPT:\n if (value instanceof SafeScriptImpl) return value.changingThisBreaksApplicationSecurity;\n this.checkNotSafeValue(value, 'Script');\n throw new Error('unsafe value used in a script context');\n case SecurityContext.URL:\n if (value instanceof SafeResourceUrlImpl || value instanceof SafeUrlImpl) {\n // Allow resource URLs in URL contexts, they are strictly more trusted.\n return value.changingThisBreaksApplicationSecurity;\n }\n this.checkNotSafeValue(value, 'URL');\n return sanitizeUrl(String(value));\n case SecurityContext.RESOURCE_URL:\n if (value instanceof SafeResourceUrlImpl) {\n return value.changingThisBreaksApplicationSecurity;\n }\n this.checkNotSafeValue(value, 'ResourceURL');\n throw new Error(\n 'unsafe value used in a resource URL context (see http://g.co/ng/security#xss)');\n default:\n throw new Error(`Unexpected SecurityContext ${ctx} (see http://g.co/ng/security#xss)`);\n }\n }\n/**\n * @param {?} value\n * @param {?} expectedType\n * @return {?}\n */\nprivate checkNotSafeValue(value: any, expectedType: string) {\n if (value instanceof SafeValueImpl) {\n throw new Error(\n `Required a safe ${expectedType}, got a ${value.getTypeName()} ` +\n `(see http://g.co/ng/security#xss)`);\n }\n }\n/**\n * @param {?} value\n * @return {?}\n */\nbypassSecurityTrustHtml(value: string): SafeHtml { return new SafeHtmlImpl(value); }\n/**\n * @param {?} value\n * @return {?}\n */\nbypassSecurityTrustStyle(value: string): SafeStyle { return new SafeStyleImpl(value); }\n/**\n * @param {?} value\n * @return {?}\n */\nbypassSecurityTrustScript(value: string): SafeScript { return new SafeScriptImpl(value); }\n/**\n * @param {?} value\n * @return {?}\n */\nbypassSecurityTrustUrl(value: string): SafeUrl { return new SafeUrlImpl(value); }\n/**\n * @param {?} value\n * @return {?}\n */\nbypassSecurityTrustResourceUrl(value: string): SafeResourceUrl {\n return new SafeResourceUrlImpl(value);\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Injectable },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: undefined, decorators: [{ type: Inject, args: [DOCUMENT, ] }, ]},\n];\n}\n\nfunction DomSanitizerImpl_tsickle_Closure_declarations() {\n/** @type {?} */\nDomSanitizerImpl.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nDomSanitizerImpl.ctorParameters;\n/** @type {?} */\nDomSanitizerImpl.prototype._doc;\n}\n\n/**\n * @abstract\n */\nabstract class SafeValueImpl implements SafeValue {\n/**\n * @param {?} changingThisBreaksApplicationSecurity\n */\nconstructor(public changingThisBreaksApplicationSecurity: string) {\n // empty\n }\n/**\n * @abstract\n * @return {?}\n */\ngetTypeName() {}\n/**\n * @return {?}\n */\ntoString() {\n return `SafeValue must use [property]=binding: ${this.changingThisBreaksApplicationSecurity}` +\n ` (see http://g.co/ng/security#xss)`;\n }\n}\n\nfunction SafeValueImpl_tsickle_Closure_declarations() {\n/** @type {?} */\nSafeValueImpl.prototype.changingThisBreaksApplicationSecurity;\n}\n\nclass SafeHtmlImpl extends SafeValueImpl implements SafeHtml {\n/**\n * @return {?}\n */\ngetTypeName() { return 'HTML'; }\n}\nclass SafeStyleImpl extends SafeValueImpl implements SafeStyle {\n/**\n * @return {?}\n */\ngetTypeName() { return 'Style'; }\n}\nclass SafeScriptImpl extends SafeValueImpl implements SafeScript {\n/**\n * @return {?}\n */\ngetTypeName() { return 'Script'; }\n}\nclass SafeUrlImpl extends SafeValueImpl implements SafeUrl {\n/**\n * @return {?}\n */\ngetTypeName() { return 'URL'; }\n}\nclass SafeResourceUrlImpl extends SafeValueImpl implements SafeResourceUrl {\n/**\n * @return {?}\n */\ngetTypeName() { return 'ResourceURL'; }\n}\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nimport {isDevMode} from '@angular/core';\n\nimport {getDOM} from '../dom/dom_adapter';\n\nimport {sanitizeUrl} from './url_sanitizer';\n\n\n/**\n * Regular expression for safe style values.\n *\n * Quotes (\" and ') are allowed, but a check must be done elsewhere to ensure they're balanced.\n *\n * ',' allows multiple values to be assigned to the same property (e.g. background-attachment or\n * font-family) and hence could allow multiple values to get injected, but that should pose no risk\n * of XSS.\n *\n * The function expression checks only for XSS safety, not for CSS validity.\n *\n * This regular expression was taken from the Closure sanitization library, and augmented for\n * transformation values.\n */\nconst /** @type {?} */ VALUES = '[-,.\"\\'%_!# a-zA-Z0-9]+';\nconst /** @type {?} */ TRANSFORMATION_FNS = '(?:matrix|translate|scale|rotate|skew|perspective)(?:X|Y|3d)?';\nconst /** @type {?} */ COLOR_FNS = '(?:rgb|hsl)a?';\nconst /** @type {?} */ GRADIENTS = '(?:repeating-)?(?:linear|radial)-gradient';\nconst /** @type {?} */ CSS3_FNS = '(?:calc|attr)';\nconst /** @type {?} */ FN_ARGS = '\\\\([-0-9.%, #a-zA-Z]+\\\\)';\nconst /** @type {?} */ SAFE_STYLE_VALUE = new RegExp(\n `^(${VALUES}|` +\n `(?:${TRANSFORMATION_FNS}|${COLOR_FNS}|${GRADIENTS}|${CSS3_FNS})` +\n `${FN_ARGS})$`,\n 'g');\n\n/**\n * Matches a `url(...)` value with an arbitrary argument as long as it does\n * not contain parentheses.\n *\n * The URL value still needs to be sanitized separately.\n *\n * `url(...)` values are a very common use case, e.g. for `background-image`. With carefully crafted\n * CSS style rules, it is possible to construct an information leak with `url` values in CSS, e.g.\n * by observing whether scroll bars are displayed, or character ranges used by a font face\n * definition.\n *\n * Angular only allows binding CSS values (as opposed to entire CSS rules), so it is unlikely that\n * binding a URL value without further cooperation from the page will cause an information leak, and\n * if so, it is just a leak, not a full blown XSS vulnerability.\n *\n * Given the common use case, low likelihood of attack vector, and low impact of an attack, this\n * code is permissive and allows URLs that sanitize otherwise.\n */\nconst /** @type {?} */ URL_RE = /^url\\(([^)]+)\\)$/;\n/**\n * Checks that quotes (\" and ') are properly balanced inside a string. Assumes\n * that neither escape (\\) nor any other character that could result in\n * breaking out of a string parsing context are allowed;\n * see http://www.w3.org/TR/css3-syntax/#string-token-diagram.\n * \n * This code was taken from the Closure sanitization library.\n * @param {?} value\n * @return {?}\n */\nfunction hasBalancedQuotes(value: string) {\n let /** @type {?} */ outsideSingle = true;\n let /** @type {?} */ outsideDouble = true;\n for (let /** @type {?} */ i = 0; i < value.length; i++) {\n const /** @type {?} */ c = value.charAt(i);\n if (c === '\\'' && outsideDouble) {\n outsideSingle = !outsideSingle;\n } else if (c === '\"' && outsideSingle) {\n outsideDouble = !outsideDouble;\n }\n }\n return outsideSingle && outsideDouble;\n}\n/**\n * Sanitizes the given untrusted CSS style property value (i.e. not an entire object, just a single\n * value) and returns a value that is safe to use in a browser environment.\n * @param {?} value\n * @return {?}\n */\nexport function sanitizeStyle(value: string): string {\n value = String(value).trim(); // Make sure it's actually a string.\n if (!value) return '';\n\n // Single url(...) values are supported, but only for URLs that sanitize cleanly. See above for\n // reasoning behind this.\n const /** @type {?} */ urlMatch = value.match(URL_RE);\n if ((urlMatch && sanitizeUrl(urlMatch[1]) === urlMatch[1]) ||\n value.match(SAFE_STYLE_VALUE) && hasBalancedQuotes(value)) {\n return value; // Safe style values.\n }\n\n if (isDevMode()) {\n getDOM().log(\n `WARNING: sanitizing unsafe style value ${value} (see http://g.co/ng/security#xss).`);\n }\n\n return 'unsafe';\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nimport {isDevMode} from '@angular/core';\n\nimport {DomAdapter, getDOM} from '../dom/dom_adapter';\n\nimport {sanitizeSrcset, sanitizeUrl} from './url_sanitizer';\n\n/** A <body> element that can be safely used to parse untrusted HTML. Lazily initialized below. */\nlet /** @type {?} */ inertElement: HTMLElement = null;\n/** Lazily initialized to make sure the DOM adapter gets set before use. */\nlet /** @type {?} */ DOM: DomAdapter = null;\n/**\n * Returns an HTML element that is guaranteed to not execute code when creating elements in it.\n * @return {?}\n */\nfunction getInertElement() {\n if (inertElement) return inertElement;\n DOM = getDOM();\n\n // Prefer using <template> element if supported.\n const /** @type {?} */ templateEl = DOM.createElement('template');\n if ('content' in templateEl) return templateEl;\n\n const /** @type {?} */ doc = DOM.createHtmlDocument();\n inertElement = DOM.querySelector(doc, 'body');\n if (inertElement == null) {\n // usually there should be only one body element in the document, but IE doesn't have any, so we\n // need to create one.\n const /** @type {?} */ html = DOM.createElement('html', doc);\n inertElement = DOM.createElement('body', doc);\n DOM.appendChild(html, inertElement);\n DOM.appendChild(doc, html);\n }\n return inertElement;\n}\n/**\n * @param {?} tags\n * @return {?}\n */\nfunction tagSet(tags: string): {[k: string]: boolean} {\n const /** @type {?} */ res: {[k: string]: boolean} = {};\n for (const /** @type {?} */ t of tags.split(',')) res[t] = true;\n return res;\n}\n/**\n * @param {...?} sets\n * @return {?}\n */\nfunction merge(...sets: {[k: string]: boolean}[]): {[k: string]: boolean} {\n const /** @type {?} */ res: {[k: string]: boolean} = {};\n for (const /** @type {?} */ s of sets) {\n for (const /** @type {?} */ v in s) {\n if (s.hasOwnProperty(v)) res[v] = true;\n }\n }\n return res;\n}\n\n// Good source of info about elements and attributes\n// http://dev.w3.org/html5/spec/Overview.html#semantics\n// http://simon.html5.org/html-elements\n\n// Safe Void Elements - HTML5\n// http://dev.w3.org/html5/spec/Overview.html#void-elements\nconst /** @type {?} */ VOID_ELEMENTS = tagSet('area,br,col,hr,img,wbr');\n\n// Elements that you can, intentionally, leave open (and which close themselves)\n// http://dev.w3.org/html5/spec/Overview.html#optional-tags\nconst /** @type {?} */ OPTIONAL_END_TAG_BLOCK_ELEMENTS = tagSet('colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr');\nconst /** @type {?} */ OPTIONAL_END_TAG_INLINE_ELEMENTS = tagSet('rp,rt');\nconst /** @type {?} */ OPTIONAL_END_TAG_ELEMENTS =\n merge(OPTIONAL_END_TAG_INLINE_ELEMENTS, OPTIONAL_END_TAG_BLOCK_ELEMENTS);\n\n// Safe Block Elements - HTML5\nconst /** @type {?} */ BLOCK_ELEMENTS = merge(\n OPTIONAL_END_TAG_BLOCK_ELEMENTS,\n tagSet(\n 'address,article,' +\n 'aside,blockquote,caption,center,del,details,dialog,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5,' +\n 'h6,header,hgroup,hr,ins,main,map,menu,nav,ol,pre,section,summary,table,ul'));\n\n// Inline Elements - HTML5\nconst /** @type {?} */ INLINE_ELEMENTS = merge(\n OPTIONAL_END_TAG_INLINE_ELEMENTS,\n tagSet(\n 'a,abbr,acronym,audio,b,' +\n 'bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,picture,q,ruby,rp,rt,s,' +\n 'samp,small,source,span,strike,strong,sub,sup,time,track,tt,u,var,video'));\n\nconst /** @type {?} */ VALID_ELEMENTS =\n merge(VOID_ELEMENTS, BLOCK_ELEMENTS, INLINE_ELEMENTS, OPTIONAL_END_TAG_ELEMENTS);\n\n// Attributes that have href and hence need to be sanitized\nconst /** @type {?} */ URI_ATTRS = tagSet('background,cite,href,itemtype,longdesc,poster,src,xlink:href');\n\n// Attributes that have special href set hence need to be sanitized\nconst /** @type {?} */ SRCSET_ATTRS = tagSet('srcset');\n\nconst /** @type {?} */ HTML_ATTRS = tagSet(\n 'abbr,accesskey,align,alt,autoplay,axis,bgcolor,border,cellpadding,cellspacing,class,clear,color,cols,colspan,' +\n 'compact,controls,coords,datetime,default,dir,download,face,headers,height,hidden,hreflang,hspace,' +\n 'ismap,itemscope,itemprop,kind,label,lang,language,loop,media,muted,nohref,nowrap,open,preload,rel,rev,role,rows,rowspan,rules,' +\n 'scope,scrolling,shape,size,sizes,span,srclang,start,summary,tabindex,target,title,translate,type,usemap,' +\n 'valign,value,vspace,width');\n\n// NB: This currently conciously doesn't support SVG. SVG sanitization has had several security\n// issues in the past, so it seems safer to leave it out if possible. If support for binding SVG via\n// innerHTML is required, SVG attributes should be added here.\n\n// NB: Sanitization does not allow <form> elements or other active elements (<button> etc). Those\n// can be sanitized, but they increase security surface area without a legitimate use case, so they\n// are left out here.\n\nconst /** @type {?} */ VALID_ATTRS = merge(URI_ATTRS, SRCSET_ATTRS, HTML_ATTRS);\n/**\n * SanitizingHtmlSerializer serializes a DOM fragment, stripping out any unsafe elements and unsafe\n * attributes.\n */\nclass SanitizingHtmlSerializer {\npublic sanitizedSomething = false;\nprivate buf: string[] = [];\n/**\n * @param {?} el\n * @return {?}\n */\nsanitizeChildren(el: Element): string {\n // This cannot use a TreeWalker, as it has to run on Angular's various DOM adapters.\n // However this code never accesses properties off of `document` before deleting its contents\n // again, so it shouldn't be vulnerable to DOM clobbering.\n let /** @type {?} */ current: Node = el.firstChild;\n while (current) {\n if (DOM.isElementNode(current)) {\n this.startElement( /** @type {?} */((current as Element)));\n } else if (DOM.isTextNode(current)) {\n this.chars(DOM.nodeValue(current));\n } else {\n // Strip non-element, non-text nodes.\n this.sanitizedSomething = true;\n }\n if (DOM.firstChild(current)) {\n current = DOM.firstChild(current);\n continue;\n }\n while (current) {\n // Leaving the element. Walk up and to the right, closing tags as we go.\n if (DOM.isElementNode(current)) {\n this.endElement( /** @type {?} */((current as Element)));\n }\n\n let /** @type {?} */ next = checkClobberedElement(current, DOM.nextSibling(current));\n\n if (next) {\n current = next;\n break;\n }\n\n current = checkClobberedElement(current, DOM.parentElement(current));\n }\n }\n return this.buf.join('');\n }\n/**\n * @param {?} element\n * @return {?}\n */\nprivate startElement(element: Element) {\n const /** @type {?} */ tagName = DOM.nodeName(element).toLowerCase();\n if (!VALID_ELEMENTS.hasOwnProperty(tagName)) {\n this.sanitizedSomething = true;\n return;\n }\n this.buf.push('<');\n this.buf.push(tagName);\n DOM.attributeMap(element).forEach((value: string, attrName: string) => {\n const /** @type {?} */ lower = attrName.toLowerCase();\n if (!VALID_ATTRS.hasOwnProperty(lower)) {\n this.sanitizedSomething = true;\n return;\n }\n // TODO(martinprobst): Special case image URIs for data:image/...\n if (URI_ATTRS[lower]) value = sanitizeUrl(value);\n if (SRCSET_ATTRS[lower]) value = sanitizeSrcset(value);\n this.buf.push(' ');\n this.buf.push(attrName);\n this.buf.push('=\"');\n this.buf.push(encodeEntities(value));\n this.buf.push('\"');\n });\n this.buf.push('>');\n }\n/**\n * @param {?} current\n * @return {?}\n */\nprivate endElement(current: Element) {\n const /** @type {?} */ tagName = DOM.nodeName(current).toLowerCase();\n if (VALID_ELEMENTS.hasOwnProperty(tagName) && !VOID_ELEMENTS.hasOwnProperty(tagName)) {\n this.buf.push('</');\n this.buf.push(tagName);\n this.buf.push('>');\n }\n }\n/**\n * @param {?} chars\n * @return {?}\n */\nprivate chars(chars: string) { this.buf.push(encodeEntities(chars)); }\n}\n\nfunction SanitizingHtmlSerializer_tsickle_Closure_declarations() {\n/** @type {?} */\nSanitizingHtmlSerializer.prototype.sanitizedSomething;\n/** @type {?} */\nSanitizingHtmlSerializer.prototype.buf;\n}\n\n/**\n * @param {?} node\n * @param {?} nextNode\n * @return {?}\n */\nfunction checkClobberedElement(node: Node, nextNode: Node): Node {\n if (nextNode && DOM.contains(node, nextNode)) {\n throw new Error(\n `Failed to sanitize html because the element is clobbered: ${DOM.getOuterHTML(node)}`);\n }\n return nextNode;\n}\n\n// Regular Expressions for parsing tags and attributes\nconst /** @type {?} */ SURROGATE_PAIR_REGEXP = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\n// ! to ~ is the ASCII range.\nconst /** @type {?} */ NON_ALPHANUMERIC_REGEXP = /([^\\#-~ |!])/g;\n/**\n * Escapes all potentially dangerous characters, so that the\n * resulting string can be safely inserted into attribute or\n * element text.\n * @param {?} value\n * @return {?}\n */\nfunction encodeEntities(value: string) {\n return value.replace(/&/g, '&')\n .replace(\n SURROGATE_PAIR_REGEXP,\n function(match: string) {\n const /** @type {?} */ hi = match.charCodeAt(0);\n const /** @type {?} */ low = match.charCodeAt(1);\n return '&#' + (((hi - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000) + ';';\n })\n .replace(\n NON_ALPHANUMERIC_REGEXP,\n function(match: string) { return '&#' + match.charCodeAt(0) + ';'; })\n .replace(/</g, '<')\n .replace(/>/g, '>');\n}\n/**\n * When IE9-11 comes across an unknown namespaced attribute e.g. 'xlink:foo' it adds 'xmlns:ns1'\n * attribute to declare ns1 namespace and prefixes the attribute with 'ns1' (e.g. 'ns1:xlink:foo').\n * \n * This is undesirable since we don't want to allow any of these custom attributes. This method\n * strips them all.\n * @param {?} el\n * @return {?}\n */\nfunction stripCustomNsAttrs(el: Element) {\n DOM.attributeMap(el).forEach((_, attrName) => {\n if (attrName === 'xmlns:ns1' || attrName.indexOf('ns1:') === 0) {\n DOM.removeAttribute(el, attrName);\n }\n });\n for (const /** @type {?} */ n of DOM.childNodesAsList(el)) {\n if (DOM.isElementNode(n)) stripCustomNsAttrs( /** @type {?} */((n as Element)));\n }\n}\n/**\n * Sanitizes the given unsafe, untrusted HTML fragment, and returns HTML text that is safe to add to\n * the DOM in a browser environment.\n * @param {?} defaultDoc\n * @param {?} unsafeHtmlInput\n * @return {?}\n */\nexport function sanitizeHtml(defaultDoc: any, unsafeHtmlInput: string): string {\n try {\n const /** @type {?} */ containerEl = getInertElement();\n // Make sure unsafeHtml is actually a string (TypeScript types are not enforced at runtime).\n let /** @type {?} */ unsafeHtml = unsafeHtmlInput ? String(unsafeHtmlInput) : '';\n\n // mXSS protection. Repeatedly parse the document to make sure it stabilizes, so that a browser\n // trying to auto-correct incorrect HTML cannot cause formerly inert HTML to become dangerous.\n let /** @type {?} */ mXSSAttempts = 5;\n let /** @type {?} */ parsedHtml = unsafeHtml;\n\n do {\n if (mXSSAttempts === 0) {\n throw new Error('Failed to sanitize html because the input is unstable');\n }\n mXSSAttempts--;\n\n unsafeHtml = parsedHtml;\n DOM.setInnerHTML(containerEl, unsafeHtml);\n if (defaultDoc.documentMode) {\n // strip custom-namespaced attributes on IE<=11\n stripCustomNsAttrs(containerEl);\n }\n parsedHtml = DOM.getInnerHTML(containerEl);\n } while (unsafeHtml !== parsedHtml);\n\n const /** @type {?} */ sanitizer = new SanitizingHtmlSerializer();\n const /** @type {?} */ safeHtml = sanitizer.sanitizeChildren(DOM.getTemplateContent(containerEl) || containerEl);\n\n // Clear out the body element.\n const /** @type {?} */ parent = DOM.getTemplateContent(containerEl) || containerEl;\n for (const /** @type {?} */ child of DOM.childNodesAsList(parent)) {\n DOM.removeChild(parent, child);\n }\n\n if (isDevMode() && sanitizer.sanitizedSomething) {\n DOM.log('WARNING: sanitizing HTML stripped some content (see http://g.co/ng/security#xss).');\n }\n\n return safeHtml;\n } catch ( /** @type {?} */e) {\n // In case anything goes wrong, clear out inertElement to reset the entire DOM structure.\n inertElement = null;\n throw e;\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nimport {isDevMode} from '@angular/core';\n\nimport {getDOM} from '../dom/dom_adapter';\n\n\n/**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * This regular expression matches a subset of URLs that will not cause script\n * execution if used in URL context within a HTML document. Specifically, this\n * regular expression matches if (comment from here on and regex copied from\n * Soy's EscapingConventions):\n * (1) Either a protocol in a whitelist (http, https, mailto or ftp).\n * (2) or no protocol. A protocol must be followed by a colon. The below\n * allows that by allowing colons only after one of the characters [/?#].\n * A colon after a hash (#) must be in the fragment.\n * Otherwise, a colon after a (?) must be in a query.\n * Otherwise, a colon after a single solidus (/) must be in a path.\n * Otherwise, a colon after a double solidus (//) must be in the authority\n * (before port).\n *\n * The pattern disallows &, used in HTML entity declarations before\n * one of the characters in [/?#]. This disallows HTML entities used in the\n * protocol name, which should never happen, e.g. \"http\" for \"http\".\n * It also disallows HTML entities in the first path part of a relative path,\n * e.g. \"foo<bar/baz\". Our existing escaping functions should not produce\n * that. More importantly, it disallows masking of a colon,\n * e.g. \"javascript:...\".\n *\n * This regular expression was taken from the Closure sanitization library.\n */\nconst /** @type {?} */ SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi;\n\n/* A pattern that matches safe srcset values */\nconst /** @type {?} */ SAFE_SRCSET_PATTERN = /^(?:(?:https?|file):|[^&:/?#]*(?:[/?#]|$))/gi;\n\n/** A pattern that matches safe data URLs. Only matches image, video and audio types. */\nconst /** @type {?} */ DATA_URL_PATTERN =\n /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+\\/]+=*$/i;\n/**\n * @param {?} url\n * @return {?}\n */\nexport function sanitizeUrl(url: string): string {\n url = String(url);\n if (url.match(SAFE_URL_PATTERN) || url.match(DATA_URL_PATTERN)) return url;\n\n if (isDevMode()) {\n getDOM().log(`WARNING: sanitizing unsafe URL value ${url} (see http://g.co/ng/security#xss)`);\n }\n\n return 'unsafe:' + url;\n}\n/**\n * @param {?} srcset\n * @return {?}\n */\nexport function sanitizeSrcset(srcset: string): string {\n srcset = String(srcset);\n return srcset.split(',').map((srcset) => sanitizeUrl(srcset.trim())).join(', ');\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nimport {Inject, Injectable, NgZone} from '@angular/core';\n\nimport {getDOM} from '../dom_adapter';\nimport {DOCUMENT} from '../dom_tokens';\n\nimport {EventManagerPlugin} from './event_manager';\n\nconst /** @type {?} */ MODIFIER_KEYS = ['alt', 'control', 'meta', 'shift'];\nconst /** @type {?} */ MODIFIER_KEY_GETTERS: {[key: string]: (event: KeyboardEvent) => boolean} = {\n 'alt': (event: KeyboardEvent) => event.altKey,\n 'control': (event: KeyboardEvent) => event.ctrlKey,\n 'meta': (event: KeyboardEvent) => event.metaKey,\n 'shift': (event: KeyboardEvent) => event.shiftKey\n};\n/**\n * \\@experimental\n */\nexport class KeyEventsPlugin extends EventManagerPlugin {\n/**\n * @param {?} doc\n */\nconstructor( doc: any) { super(doc); }\n/**\n * @param {?} eventName\n * @return {?}\n */\nsupports(eventName: string): boolean { return KeyEventsPlugin.parseEventName(eventName) != null; }\n/**\n * @param {?} element\n * @param {?} eventName\n * @param {?} handler\n * @return {?}\n */\naddEventListener(element: HTMLElement, eventName: string, handler: Function): Function {\n const /** @type {?} */ parsedEvent = KeyEventsPlugin.parseEventName(eventName);\n\n const /** @type {?} */ outsideHandler =\n KeyEventsPlugin.eventCallback(parsedEvent['fullKey'], handler, this.manager.getZone());\n\n return this.manager.getZone().runOutsideAngular(() => {\n return getDOM().onAndCancel(element, parsedEvent['domEventName'], outsideHandler);\n });\n }\n/**\n * @param {?} eventName\n * @return {?}\n */\nstatic parseEventName(eventName: string): {[key: string]: string} {\n const /** @type {?} */ parts: string[] = eventName.toLowerCase().split('.');\n\n const /** @type {?} */ domEventName = parts.shift();\n if ((parts.length === 0) || !(domEventName === 'keydown' || domEventName === 'keyup')) {\n return null;\n }\n\n const /** @type {?} */ key = KeyEventsPlugin._normalizeKey(parts.pop());\n\n let /** @type {?} */ fullKey = '';\n MODIFIER_KEYS.forEach(modifierName => {\n const /** @type {?} */ index: number = parts.indexOf(modifierName);\n if (index > -1) {\n parts.splice(index, 1);\n fullKey += modifierName + '.';\n }\n });\n fullKey += key;\n\n if (parts.length != 0 || key.length === 0) {\n // returning null instead of throwing to let another plugin process the event\n return null;\n }\n\n const /** @type {?} */ result: {[k: string]: string} = {};\n result['domEventName'] = domEventName;\n result['fullKey'] = fullKey;\n return result;\n }\n/**\n * @param {?} event\n * @return {?}\n */\nstatic getEventFullKey(event: KeyboardEvent): string {\n let /** @type {?} */ fullKey = '';\n let /** @type {?} */ key = getDOM().getEventKey(event);\n key = key.toLowerCase();\n if (key === ' ') {\n key = 'space'; // for readability\n } else if (key === '.') {\n key = 'dot'; // because '.' is used as a separator in event names\n }\n MODIFIER_KEYS.forEach(modifierName => {\n if (modifierName != key) {\n const /** @type {?} */ modifierGetter = MODIFIER_KEY_GETTERS[modifierName];\n if (modifierGetter(event)) {\n fullKey += modifierName + '.';\n }\n }\n });\n fullKey += key;\n return fullKey;\n }\n/**\n * @param {?} fullKey\n * @param {?} handler\n * @param {?} zone\n * @return {?}\n */\nstatic eventCallback(fullKey: any, handler: Function, zone: NgZone): Function {\n return (event: any /** TODO #9100 */) => {\n if (KeyEventsPlugin.getEventFullKey(event) === fullKey) {\n zone.runGuarded(() => handler(event));\n }\n };\n }\n/**\n * \\@internal\n * @param {?} keyName\n * @return {?}\n */\nstatic _normalizeKey(keyName: string): string {\n // TODO: switch to a Map if the mapping grows too much\n switch (keyName) {\n case 'esc':\n return 'escape';\n default:\n return keyName;\n }\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Injectable },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: undefined, decorators: [{ type: Inject, args: [DOCUMENT, ] }, ]},\n];\n}\n\nfunction KeyEventsPlugin_tsickle_Closure_declarations() {\n/** @type {?} */\nKeyEventsPlugin.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nKeyEventsPlugin.ctorParameters;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nimport {Inject, Injectable, InjectionToken} from '@angular/core';\n\nimport {DOCUMENT} from '../dom_tokens';\n\nimport {EventManagerPlugin} from './event_manager';\n\nconst /** @type {?} */ EVENT_NAMES = {\n // pan\n 'pan': true,\n 'panstart': true,\n 'panmove': true,\n 'panend': true,\n 'pancancel': true,\n 'panleft': true,\n 'panright': true,\n 'panup': true,\n 'pandown': true,\n // pinch\n 'pinch': true,\n 'pinchstart': true,\n 'pinchmove': true,\n 'pinchend': true,\n 'pinchcancel': true,\n 'pinchin': true,\n 'pinchout': true,\n // press\n 'press': true,\n 'pressup': true,\n // rotate\n 'rotate': true,\n 'rotatestart': true,\n 'rotatemove': true,\n 'rotateend': true,\n 'rotatecancel': true,\n // swipe\n 'swipe': true,\n 'swipeleft': true,\n 'swiperight': true,\n 'swipeup': true,\n 'swipedown': true,\n // tap\n 'tap': true,\n};\n/**\n * A DI token that you can use to provide{\\@link HammerGestureConfig} to Angular. Use it to configure\n * Hammer gestures.\n * \n * \\@experimental\n */\nexport const HAMMER_GESTURE_CONFIG = new InjectionToken<HammerGestureConfig>('HammerGestureConfig');\n\nexport interface HammerInstance {\n on(eventName: string, callback: Function): void;\n off(eventName: string, callback: Function): void;\n}\n/**\n * \\@experimental\n */\nexport class HammerGestureConfig {\n events: string[] = [];\n\n overrides: {[key: string]: Object} = {};\n/**\n * @param {?} element\n * @return {?}\n */\nbuildHammer(element: HTMLElement): HammerInstance {\n const /** @type {?} */ mc = new Hammer(element);\n\n mc.get('pinch').set({enable: true});\n mc.get('rotate').set({enable: true});\n\n for (const /** @type {?} */ eventName in this.overrides) {\n mc.get(eventName).set(this.overrides[eventName]);\n }\n\n return mc;\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Injectable },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction HammerGestureConfig_tsickle_Closure_declarations() {\n/** @type {?} */\nHammerGestureConfig.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nHammerGestureConfig.ctorParameters;\n/** @type {?} */\nHammerGestureConfig.prototype.events;\n/** @type {?} */\nHammerGestureConfig.prototype.overrides;\n}\n\nexport class HammerGesturesPlugin extends EventManagerPlugin {\n/**\n * @param {?} doc\n * @param {?} _config\n */\nconstructor(\n doc: any,\nprivate _config: HammerGestureConfig) {\n super(doc);\n }\n/**\n * @param {?} eventName\n * @return {?}\n */\nsupports(eventName: string): boolean {\n if (!EVENT_NAMES.hasOwnProperty(eventName.toLowerCase()) && !this.isCustomEvent(eventName)) {\n return false;\n }\n\n if (!( /** @type {?} */((window as any))).Hammer) {\n throw new Error(`Hammer.js is not loaded, can not bind ${eventName} event`);\n }\n\n return true;\n }\n/**\n * @param {?} element\n * @param {?} eventName\n * @param {?} handler\n * @return {?}\n */\naddEventListener(element: HTMLElement, eventName: string, handler: Function): Function {\n const /** @type {?} */ zone = this.manager.getZone();\n eventName = eventName.toLowerCase();\n\n return zone.runOutsideAngular(() => {\n // Creating the manager bind events, must be done outside of angular\n const /** @type {?} */ mc = this._config.buildHammer(element);\n const /** @type {?} */ callback = function(eventObj: HammerInput) {\n zone.runGuarded(function() { handler(eventObj); });\n };\n mc.on(eventName, callback);\n return () => mc.off(eventName, callback);\n });\n }\n/**\n * @param {?} eventName\n * @return {?}\n */\nisCustomEvent(eventName: string): boolean { return this._config.events.indexOf(eventName) > -1; }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Injectable },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: undefined, decorators: [{ type: Inject, args: [DOCUMENT, ] }, ]},\n{type: HammerGestureConfig, decorators: [{ type: Inject, args: [HAMMER_GESTURE_CONFIG, ] }, ]},\n];\n}\n\nfunction HammerGesturesPlugin_tsickle_Closure_declarations() {\n/** @type {?} */\nHammerGesturesPlugin.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nHammerGesturesPlugin.ctorParameters;\n/** @type {?} */\nHammerGesturesPlugin.prototype._config;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nimport {Inject, Injectable} from '@angular/core';\n\nimport {DOCUMENT} from '../dom_tokens';\n\nimport {EventManagerPlugin} from './event_manager';\nexport class DomEventsPlugin extends EventManagerPlugin {\n/**\n * @param {?} doc\n */\nconstructor( doc: any) { super(doc); }\n/**\n * @param {?} eventName\n * @return {?}\n */\nsupports(eventName: string): boolean { return true; }\n/**\n * @param {?} element\n * @param {?} eventName\n * @param {?} handler\n * @return {?}\n */\naddEventListener(element: HTMLElement, eventName: string, handler: Function): Function {\n element.addEventListener(eventName, /** @type {?} */(( handler as any)), false);\n return () => element.removeEventListener(eventName, /** @type {?} */(( handler as any)), false);\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Injectable },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: undefined, decorators: [{ type: Inject, args: [DOCUMENT, ] }, ]},\n];\n}\n\nfunction DomEventsPlugin_tsickle_Closure_declarations() {\n/** @type {?} */\nDomEventsPlugin.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nDomEventsPlugin.ctorParameters;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nimport {Injectable, Renderer2, RendererFactory2, RendererStyleFlags2, RendererType2, ViewEncapsulation} from '@angular/core';\n\nimport {EventManager} from './events/event_manager';\nimport {DomSharedStylesHost} from './shared_styles_host';\n\nexport const /** @type {?} */ NAMESPACE_URIS: {[ns: string]: string} = {\n 'svg': 'http://www.w3.org/2000/svg',\n 'xhtml': 'http://www.w3.org/1999/xhtml',\n 'xlink': 'http://www.w3.org/1999/xlink',\n 'xml': 'http://www.w3.org/XML/1998/namespace',\n 'xmlns': 'http://www.w3.org/2000/xmlns/',\n};\n\nconst /** @type {?} */ COMPONENT_REGEX = /%COMP%/g;\nexport const /** @type {?} */ COMPONENT_VARIABLE = '%COMP%';\nexport const /** @type {?} */ HOST_ATTR = `_nghost-${COMPONENT_VARIABLE}`;\nexport const /** @type {?} */ CONTENT_ATTR = `_ngcontent-${COMPONENT_VARIABLE}`;\n/**\n * @param {?} componentShortId\n * @return {?}\n */\nexport function shimContentAttribute(componentShortId: string): string {\n return CONTENT_ATTR.replace(COMPONENT_REGEX, componentShortId);\n}\n/**\n * @param {?} componentShortId\n * @return {?}\n */\nexport function shimHostAttribute(componentShortId: string): string {\n return HOST_ATTR.replace(COMPONENT_REGEX, componentShortId);\n}\n/**\n * @param {?} compId\n * @param {?} styles\n * @param {?} target\n * @return {?}\n */\nexport function flattenStyles(\n compId: string, styles: Array<any|any[]>, target: string[]): string[] {\n for (let /** @type {?} */ i = 0; i < styles.length; i++) {\n let /** @type {?} */ style = styles[i];\n\n if (Array.isArray(style)) {\n flattenStyles(compId, style, target);\n } else {\n style = style.replace(COMPONENT_REGEX, compId);\n target.push(style);\n }\n }\n return target;\n}\n/**\n * @param {?} eventHandler\n * @return {?}\n */\nfunction decoratePreventDefault(eventHandler: Function): Function {\n return (event: any) => {\n const /** @type {?} */ allowDefaultBehavior = eventHandler(event);\n if (allowDefaultBehavior === false) {\n // TODO(tbosch): move preventDefault into event plugins...\n event.preventDefault();\n event.returnValue = false;\n }\n };\n}\nexport class DomRendererFactory2 implements RendererFactory2 {\nprivate rendererByCompId = new Map<string, Renderer2>();\nprivate defaultRenderer: Renderer2;\n/**\n * @param {?} eventManager\n * @param {?} sharedStylesHost\n */\nconstructor(private eventManager: EventManager,\nprivate sharedStylesHost: DomSharedStylesHost) {\n this.defaultRenderer = new DefaultDomRenderer2(eventManager);\n };\n/**\n * @param {?} element\n * @param {?} type\n * @return {?}\n */\ncreateRenderer(element: any, type: RendererType2): Renderer2 {\n if (!element || !type) {\n return this.defaultRenderer;\n }\n switch (type.encapsulation) {\n case ViewEncapsulation.Emulated: {\n let /** @type {?} */ renderer = this.rendererByCompId.get(type.id);\n if (!renderer) {\n renderer =\n new EmulatedEncapsulationDomRenderer2(this.eventManager, this.sharedStylesHost, type);\n this.rendererByCompId.set(type.id, renderer);\n }\n ( /** @type {?} */((<EmulatedEncapsulationDomRenderer2>renderer))).applyToHost(element);\n return renderer;\n }\n case ViewEncapsulation.Native:\n return new ShadowDomRenderer(this.eventManager, this.sharedStylesHost, element, type);\n default: {\n if (!this.rendererByCompId.has(type.id)) {\n const /** @type {?} */ styles = flattenStyles(type.id, type.styles, []);\n this.sharedStylesHost.addStyles(styles);\n this.rendererByCompId.set(type.id, this.defaultRenderer);\n }\n return this.defaultRenderer;\n }\n }\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Injectable },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: EventManager, },\n{type: DomSharedStylesHost, },\n];\n}\n\nfunction DomRendererFactory2_tsickle_Closure_declarations() {\n/** @type {?} */\nDomRendererFactory2.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nDomRendererFactory2.ctorParameters;\n/** @type {?} */\nDomRendererFactory2.prototype.rendererByCompId;\n/** @type {?} */\nDomRendererFactory2.prototype.defaultRenderer;\n/** @type {?} */\nDomRendererFactory2.prototype.eventManager;\n/** @type {?} */\nDomRendererFactory2.prototype.sharedStylesHost;\n}\n\nclass DefaultDomRenderer2 implements Renderer2 {\n data: {[key: string]: any} = Object.create(null);\n/**\n * @param {?} eventManager\n */\nconstructor(private eventManager: EventManager) {}\n/**\n * @return {?}\n */\ndestroy(): void {}\n\n destroyNode: null;\n/**\n * @param {?} name\n * @param {?=} namespace\n * @return {?}\n */\ncreateElement(name: string, namespace?: string): any {\n if (namespace) {\n return document.createElementNS(NAMESPACE_URIS[namespace], name);\n }\n\n return document.createElement(name);\n }\n/**\n * @param {?} value\n * @return {?}\n */\ncreateComment(value: string): any { return document.createComment(value); }\n/**\n * @param {?} value\n * @return {?}\n */\ncreateText(value: string): any { return document.createTextNode(value); }\n/**\n * @param {?} parent\n * @param {?} newChild\n * @return {?}\n */\nappendChild(parent: any, newChild: any): void { parent.appendChild(newChild); }\n/**\n * @param {?} parent\n * @param {?} newChild\n * @param {?} refChild\n * @return {?}\n */\ninsertBefore(parent: any, newChild: any, refChild: any): void {\n if (parent) {\n parent.insertBefore(newChild, refChild);\n }\n }\n/**\n * @param {?} parent\n * @param {?} oldChild\n * @return {?}\n */\nremoveChild(parent: any, oldChild: any): void {\n if (parent) {\n parent.removeChild(oldChild);\n }\n }\n/**\n * @param {?} selectorOrNode\n * @return {?}\n */\nselectRootElement(selectorOrNode: string|any): any {\n let /** @type {?} */ el: any = typeof selectorOrNode === 'string' ? document.querySelector(selectorOrNode) :\n selectorOrNode;\n if (!el) {\n throw new Error(`The selector \"${selectorOrNode}\" did not match any elements`);\n }\n el.textContent = '';\n return el;\n }\n/**\n * @param {?} node\n * @return {?}\n */\nparentNode(node: any): any { return node.parentNode; }\n/**\n * @param {?} node\n * @return {?}\n */\nnextSibling(node: any): any { return node.nextSibling; }\n/**\n * @param {?} el\n * @param {?} name\n * @param {?} value\n * @param {?=} namespace\n * @return {?}\n */\nsetAttribute(el: any, name: string, value: string, namespace?: string): void {\n if (namespace) {\n name = `${namespace}:${name}`;\n const /** @type {?} */ namespaceUri = NAMESPACE_URIS[namespace];\n if (namespaceUri) {\n el.setAttributeNS(namespaceUri, name, value);\n } else {\n el.setAttribute(name, value);\n }\n } else {\n el.setAttribute(name, value);\n }\n }\n/**\n * @param {?} el\n * @param {?} name\n * @param {?=} namespace\n * @return {?}\n */\nremoveAttribute(el: any, name: string, namespace?: string): void {\n if (namespace) {\n const /** @type {?} */ namespaceUri = NAMESPACE_URIS[namespace];\n if (namespaceUri) {\n el.removeAttributeNS(namespaceUri, name);\n } else {\n el.removeAttribute(`${namespace}:${name}`);\n }\n } else {\n el.removeAttribute(name);\n }\n }\n/**\n * @param {?} el\n * @param {?} name\n * @return {?}\n */\naddClass(el: any, name: string): void { el.classList.add(name); }\n/**\n * @param {?} el\n * @param {?} name\n * @return {?}\n */\nremoveClass(el: any, name: string): void { el.classList.remove(name); }\n/**\n * @param {?} el\n * @param {?} style\n * @param {?} value\n * @param {?} flags\n * @return {?}\n */\nsetStyle(el: any, style: string, value: any, flags: RendererStyleFlags2): void {\n if (flags & RendererStyleFlags2.DashCase) {\n el.style.setProperty(\n style, value, !!(flags & RendererStyleFlags2.Important) ? 'important' : '');\n } else {\n el.style[style] = value;\n }\n }\n/**\n * @param {?} el\n * @param {?} style\n * @param {?} flags\n * @return {?}\n */\nremoveStyle(el: any, style: string, flags: RendererStyleFlags2): void {\n if (flags & RendererStyleFlags2.DashCase) {\n el.style.removeProperty(style);\n } else {\n // IE requires '' instead of null\n // see https://github.com/angular/angular/issues/7916\n el.style[style] = '';\n }\n }\n/**\n * @param {?} el\n * @param {?} name\n * @param {?} value\n * @return {?}\n */\nsetProperty(el: any, name: string, value: any): void {\n checkNoSyntheticProp(name, 'property');\n el[name] = value;\n }\n/**\n * @param {?} node\n * @param {?} value\n * @return {?}\n */\nsetValue(node: any, value: string): void { node.nodeValue = value; }\n/**\n * @param {?} target\n * @param {?} event\n * @param {?} callback\n * @return {?}\n */\nlisten(target: 'window'|'document'|'body'|any, event: string, callback: (event: any) => boolean):\n () => void {\n checkNoSyntheticProp(event, 'listener');\n if (typeof target === 'string') {\n return /** @type {?} */(( <() => void>this.eventManager.addGlobalEventListener(\n target, event, decoratePreventDefault(callback))));\n }\n return /** @type {?} */(( /** @type {?} */(( <() => void>this.eventManager.addEventListener(\n target, event, decoratePreventDefault(callback)))) as() => void));\n }\n}\n\nfunction DefaultDomRenderer2_tsickle_Closure_declarations() {\n/** @type {?} */\nDefaultDomRenderer2.prototype.data;\n/** @type {?} */\nDefaultDomRenderer2.prototype.destroyNode;\n/** @type {?} */\nDefaultDomRenderer2.prototype.eventManager;\n}\n\n\nconst /** @type {?} */ AT_CHARCODE = '@'.charCodeAt(0);\n/**\n * @param {?} name\n * @param {?} nameKind\n * @return {?}\n */\nfunction checkNoSyntheticProp(name: string, nameKind: string) {\n if (name.charCodeAt(0) === AT_CHARCODE) {\n throw new Error(\n `Found the synthetic ${nameKind} ${name}. Please include either \"BrowserAnimationsModule\" or \"NoopAnimationsModule\" in your application.`);\n }\n}\nclass EmulatedEncapsulationDomRenderer2 extends DefaultDomRenderer2 {\nprivate contentAttr: string;\nprivate hostAttr: string;\n/**\n * @param {?} eventManager\n * @param {?} sharedStylesHost\n * @param {?} component\n */\nconstructor(\n eventManager: EventManager, sharedStylesHost: DomSharedStylesHost,\nprivate component: RendererType2) {\n super(eventManager);\n const styles = flattenStyles(component.id, component.styles, []);\n sharedStylesHost.addStyles(styles);\n\n this.contentAttr = shimContentAttribute(component.id);\n this.hostAttr = shimHostAttribute(component.id);\n }\n/**\n * @param {?} element\n * @return {?}\n */\napplyToHost(element: any) { super.setAttribute(element, this.hostAttr, ''); }\n/**\n * @param {?} parent\n * @param {?} name\n * @return {?}\n */\ncreateElement(parent: any, name: string): Element {\n const /** @type {?} */ el = super.createElement(parent, name);\n super.setAttribute(el, this.contentAttr, '');\n return el;\n }\n}\n\nfunction EmulatedEncapsulationDomRenderer2_tsickle_Closure_declarations() {\n/** @type {?} */\nEmulatedEncapsulationDomRenderer2.prototype.contentAttr;\n/** @type {?} */\nEmulatedEncapsulationDomRenderer2.prototype.hostAttr;\n/** @type {?} */\nEmulatedEncapsulationDomRenderer2.prototype.component;\n}\n\nclass ShadowDomRenderer extends DefaultDomRenderer2 {\nprivate shadowRoot: any;\n/**\n * @param {?} eventManager\n * @param {?} sharedStylesHost\n * @param {?} hostEl\n * @param {?} component\n */\nconstructor(\n eventManager: EventManager,\nprivate sharedStylesHost: DomSharedStylesHost,\nprivate hostEl: any,\nprivate component: RendererType2) {\n super(eventManager);\n this.shadowRoot = (hostEl as any).createShadowRoot();\n this.sharedStylesHost.addHost(this.shadowRoot);\n const styles = flattenStyles(component.id, component.styles, []);\n for (let i = 0; i < styles.length; i++) {\n const styleEl = document.createElement('style');\n styleEl.textContent = styles[i];\n this.shadowRoot.appendChild(styleEl);\n }\n }\n/**\n * @param {?} node\n * @return {?}\n */\nprivate nodeOrShadowRoot(node: any): any { return node === this.hostEl ? this.shadowRoot : node; }\n/**\n * @return {?}\n */\ndestroy() { this.sharedStylesHost.removeHost(this.shadowRoot); }\n/**\n * @param {?} parent\n * @param {?} newChild\n * @return {?}\n */\nappendChild(parent: any, newChild: any): void {\n return super.appendChild(this.nodeOrShadowRoot(parent), newChild);\n }\n/**\n * @param {?} parent\n * @param {?} newChild\n * @param {?} refChild\n * @return {?}\n */\ninsertBefore(parent: any, newChild: any, refChild: any): void {\n return super.insertBefore(this.nodeOrShadowRoot(parent), newChild, refChild);\n }\n/**\n * @param {?} parent\n * @param {?} oldChild\n * @return {?}\n */\nremoveChild(parent: any, oldChild: any): void {\n return super.removeChild(this.nodeOrShadowRoot(parent), oldChild);\n }\n/**\n * @param {?} node\n * @return {?}\n */\nparentNode(node: any): any {\n return this.nodeOrShadowRoot(super.parentNode(this.nodeOrShadowRoot(node)));\n }\n}\n\nfunction ShadowDomRenderer_tsickle_Closure_declarations() {\n/** @type {?} */\nShadowDomRenderer.prototype.shadowRoot;\n/** @type {?} */\nShadowDomRenderer.prototype.sharedStylesHost;\n/** @type {?} */\nShadowDomRenderer.prototype.hostEl;\n/** @type {?} */\nShadowDomRenderer.prototype.component;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nimport {Inject, Injectable, OnDestroy} from '@angular/core';\nimport {getDOM} from './dom_adapter';\nimport {DOCUMENT} from './dom_tokens';\nexport class SharedStylesHost {\n/**\n * \\@internal\n */\nprotected _stylesSet = new Set<string>();\n/**\n * @param {?} styles\n * @return {?}\n */\naddStyles(styles: string[]): void {\n const /** @type {?} */ additions = new Set<string>();\n styles.forEach(style => {\n if (!this._stylesSet.has(style)) {\n this._stylesSet.add(style);\n additions.add(style);\n }\n });\n this.onStylesAdded(additions);\n }\n/**\n * @param {?} additions\n * @return {?}\n */\nonStylesAdded(additions: Set<string>): void {}\n/**\n * @return {?}\n */\ngetAllStyles(): string[] { return Array.from(this._stylesSet); }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Injectable },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction SharedStylesHost_tsickle_Closure_declarations() {\n/** @type {?} */\nSharedStylesHost.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nSharedStylesHost.ctorParameters;\n/**\n * \\@internal\n * @type {?}\n */\nSharedStylesHost.prototype._stylesSet;\n}\n\nexport class DomSharedStylesHost extends SharedStylesHost implements OnDestroy {\nprivate _hostNodes = new Set<Node>();\nprivate _styleNodes = new Set<Node>();\n/**\n * @param {?} _doc\n */\nconstructor(\nprivate _doc: any) {\n super();\n this._hostNodes.add(_doc.head);\n }\n/**\n * @param {?} styles\n * @param {?} host\n * @return {?}\n */\nprivate _addStylesToHost(styles: Set<string>, host: Node): void {\n styles.forEach((style: string) => {\n const /** @type {?} */ styleEl = this._doc.createElement('style');\n styleEl.textContent = style;\n this._styleNodes.add(host.appendChild(styleEl));\n });\n }\n/**\n * @param {?} hostNode\n * @return {?}\n */\naddHost(hostNode: Node): void {\n this._addStylesToHost(this._stylesSet, hostNode);\n this._hostNodes.add(hostNode);\n }\n/**\n * @param {?} hostNode\n * @return {?}\n */\nremoveHost(hostNode: Node): void { this._hostNodes.delete(hostNode); }\n/**\n * @param {?} additions\n * @return {?}\n */\nonStylesAdded(additions: Set<string>): void {\n this._hostNodes.forEach(hostNode => this._addStylesToHost(additions, hostNode));\n }\n/**\n * @return {?}\n */\nngOnDestroy(): void { this._styleNodes.forEach(styleNode => getDOM().remove(styleNode)); }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Injectable },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: undefined, decorators: [{ type: Inject, args: [DOCUMENT, ] }, ]},\n];\n}\n\nfunction DomSharedStylesHost_tsickle_Closure_declarations() {\n/** @type {?} */\nDomSharedStylesHost.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nDomSharedStylesHost.ctorParameters;\n/** @type {?} */\nDomSharedStylesHost.prototype._hostNodes;\n/** @type {?} */\nDomSharedStylesHost.prototype._styleNodes;\n/** @type {?} */\nDomSharedStylesHost.prototype._doc;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nimport {Inject, Injectable, InjectionToken, NgZone} from '@angular/core';\n\nimport {getDOM} from '../dom_adapter';\n/**\n * \\@stable\n */\nexport const EVENT_MANAGER_PLUGINS =\n new InjectionToken<EventManagerPlugin[]>('EventManagerPlugins');\n/**\n * \\@stable\n */\nexport class EventManager {\nprivate _plugins: EventManagerPlugin[];\nprivate _eventNameToPlugin = new Map<string, EventManagerPlugin>();\n/**\n * @param {?} plugins\n * @param {?} _zone\n */\nconstructor( plugins: EventManagerPlugin[],\nprivate _zone: NgZone) {\n plugins.forEach(p => p.manager = this);\n this._plugins = plugins.slice().reverse();\n }\n/**\n * @param {?} element\n * @param {?} eventName\n * @param {?} handler\n * @return {?}\n */\naddEventListener(element: HTMLElement, eventName: string, handler: Function): Function {\n const /** @type {?} */ plugin = this._findPluginFor(eventName);\n return plugin.addEventListener(element, eventName, handler);\n }\n/**\n * @param {?} target\n * @param {?} eventName\n * @param {?} handler\n * @return {?}\n */\naddGlobalEventListener(target: string, eventName: string, handler: Function): Function {\n const /** @type {?} */ plugin = this._findPluginFor(eventName);\n return plugin.addGlobalEventListener(target, eventName, handler);\n }\n/**\n * @return {?}\n */\ngetZone(): NgZone { return this._zone; }\n/**\n * \\@internal\n * @param {?} eventName\n * @return {?}\n */\n_findPluginFor(eventName: string): EventManagerPlugin {\n const /** @type {?} */ plugin = this._eventNameToPlugin.get(eventName);\n if (plugin) {\n return plugin;\n }\n\n const /** @type {?} */ plugins = this._plugins;\n for (let /** @type {?} */ i = 0; i < plugins.length; i++) {\n const /** @type {?} */ plugin = plugins[i];\n if (plugin.supports(eventName)) {\n this._eventNameToPlugin.set(eventName, plugin);\n return plugin;\n }\n }\n throw new Error(`No event manager plugin found for event ${eventName}`);\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Injectable },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: Array, decorators: [{ type: Inject, args: [EVENT_MANAGER_PLUGINS, ] }, ]},\n{type: NgZone, },\n];\n}\n\nfunction EventManager_tsickle_Closure_declarations() {\n/** @type {?} */\nEventManager.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nEventManager.ctorParameters;\n/** @type {?} */\nEventManager.prototype._plugins;\n/** @type {?} */\nEventManager.prototype._eventNameToPlugin;\n/** @type {?} */\nEventManager.prototype._zone;\n}\n\n/**\n * @abstract\n */\nexport abstract class EventManagerPlugin {\n/**\n * @param {?} _doc\n */\nconstructor(private _doc: any) {}\n\n manager: EventManager;\n/**\n * @abstract\n * @param {?} eventName\n * @return {?}\n */\nsupports(eventName: string) {}\n/**\n * @abstract\n * @param {?} element\n * @param {?} eventName\n * @param {?} handler\n * @return {?}\n */\naddEventListener(element: HTMLElement, eventName: string, handler: Function) {}\n/**\n * @param {?} element\n * @param {?} eventName\n * @param {?} handler\n * @return {?}\n */\naddGlobalEventListener(element: string, eventName: string, handler: Function): Function {\n const /** @type {?} */ target: HTMLElement = getDOM().getGlobalEventTarget(this._doc, element);\n if (!target) {\n throw new Error(`Unsupported event target ${target} for event ${eventName}`);\n }\n return this.addEventListener(target, eventName, handler);\n };\n}\n\nfunction EventManagerPlugin_tsickle_Closure_declarations() {\n/** @type {?} */\nEventManagerPlugin.prototype.manager;\n/** @type {?} */\nEventManagerPlugin.prototype._doc;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nimport * as core from '@angular/core';\nimport {getDOM} from '../dom_adapter';\n\nconst /** @type {?} */ CORE_TOKENS = {\n 'ApplicationRef': core.ApplicationRef,\n 'NgZone': core.NgZone,\n};\n\nconst /** @type {?} */ INSPECT_GLOBAL_NAME = 'ng.probe';\nconst /** @type {?} */ CORE_TOKENS_GLOBAL_NAME = 'ng.coreTokens';\n/**\n * Returns a {\\@link DebugElement} for the given native DOM element, or\n * null if the given native element does not have an Angular view associated\n * with it.\n * @param {?} element\n * @return {?}\n */\nexport function inspectNativeElement(element: any): core.DebugNode {\n return core.getDebugNode(element);\n}\n/**\n * Deprecated. Use the one from '\\@angular/core'.\n * @deprecated\n */\nexport class NgProbeToken {\n/**\n * @param {?} name\n * @param {?} token\n */\nconstructor(public name: string,\npublic token: any) {}\n}\n\nfunction NgProbeToken_tsickle_Closure_declarations() {\n/** @type {?} */\nNgProbeToken.prototype.name;\n/** @type {?} */\nNgProbeToken.prototype.token;\n}\n\n/**\n * @param {?} extraTokens\n * @param {?} coreTokens\n * @return {?}\n */\nexport function _createNgProbe(extraTokens: NgProbeToken[], coreTokens: core.NgProbeToken[]): any {\n const /** @type {?} */ tokens = (extraTokens || []).concat(coreTokens || []);\n getDOM().setGlobalVar(INSPECT_GLOBAL_NAME, inspectNativeElement);\n getDOM().setGlobalVar(\n CORE_TOKENS_GLOBAL_NAME, {...CORE_TOKENS, ..._ngProbeTokensToMap(tokens || [])});\n return () => inspectNativeElement;\n}\n/**\n * @param {?} tokens\n * @return {?}\n */\nfunction _ngProbeTokensToMap(tokens: NgProbeToken[]): {[name: string]: any} {\n return tokens.reduce((prev: any, t: any) => (prev[t.name] = t.token, prev), {});\n}\n\n/**\n * Providers which support debugging Angular applications (e.g. via `ng.probe`).\n */\nexport const /** @type {?} */ ELEMENT_PROBE_PROVIDERS: core.Provider[] = [\n {\n provide: core.APP_INITIALIZER,\n useFactory: _createNgProbe,\n deps: [\n [NgProbeToken, new core.Optional()],\n [core.NgProbeToken, new core.Optional()],\n ],\n multi: true,\n },\n];\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nimport {Inject, Injectable} from '@angular/core';\n\nimport {getDOM} from '../dom/dom_adapter';\nimport {DOCUMENT} from '../dom/dom_tokens';\n/**\n * A service that can be used to get and set the title of a current HTML document.\n * \n * Since an Angular application can't be bootstrapped on the entire HTML document (`<html>` tag)\n * it is not possible to bind to the `text` property of the `HTMLTitleElement` elements\n * (representing the `<title>` tag). Instead, this service can be used to set and get the current\n * title value.\n * \n * \\@experimental\n */\nexport class Title {\n/**\n * @param {?} _doc\n */\nconstructor(\nprivate _doc: any) {}\n/**\n * Get the title of the current HTML document.\n * @return {?}\n */\ngetTitle(): string { return getDOM().getTitle(this._doc); }\n/**\n * Set the title of the current HTML document.\n * @param {?} newTitle\n * @return {?}\n */\nsetTitle(newTitle: string) { getDOM().setTitle(this._doc, newTitle); }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Injectable },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: undefined, decorators: [{ type: Inject, args: [DOCUMENT, ] }, ]},\n];\n}\n\nfunction Title_tsickle_Closure_declarations() {\n/** @type {?} */\nTitle.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nTitle.ctorParameters;\n/** @type {?} */\nTitle.prototype._doc;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nimport {GetTestability, Testability, TestabilityRegistry, setTestabilityGetter, ɵglobal as global} from '@angular/core';\n\nimport {getDOM} from '../dom/dom_adapter';\nexport class BrowserGetTestability implements GetTestability {\n/**\n * @return {?}\n */\nstatic init() { setTestabilityGetter(new BrowserGetTestability()); }\n/**\n * @param {?} registry\n * @return {?}\n */\naddToWindow(registry: TestabilityRegistry): void {\n global['getAngularTestability'] = (elem: any, findInAncestors: boolean = true) => {\n const /** @type {?} */ testability = registry.findTestabilityInTree(elem, findInAncestors);\n if (testability == null) {\n throw new Error('Could not find testability for element.');\n }\n return testability;\n };\n\n global['getAllAngularTestabilities'] = () => registry.getAllTestabilities();\n\n global['getAllAngularRootElements'] = () => registry.getAllRootElements();\n\n const /** @type {?} */ whenAllStable = (callback: any /** TODO #9100 */) => {\n const /** @type {?} */ testabilities = global['getAllAngularTestabilities']();\n let /** @type {?} */ count = testabilities.length;\n let /** @type {?} */ didWork = false;\n const /** @type {?} */ decrement = function(didWork_: any /** TODO #9100 */) {\n didWork = didWork || didWork_;\n count--;\n if (count == 0) {\n callback(didWork);\n }\n };\n testabilities.forEach(function(testability: any /** TODO #9100 */) {\n testability.whenStable(decrement);\n });\n };\n\n if (!global['frameworkStabilizers']) {\n global['frameworkStabilizers'] = [];\n }\n global['frameworkStabilizers'].push(whenAllStable);\n }\n/**\n * @param {?} registry\n * @param {?} elem\n * @param {?} findInAncestors\n * @return {?}\n */\nfindTestabilityInTree(registry: TestabilityRegistry, elem: any, findInAncestors: boolean):\n Testability {\n if (elem == null) {\n return null;\n }\n const /** @type {?} */ t = registry.getTestability(elem);\n if (t != null) {\n return t;\n } else if (!findInAncestors) {\n return null;\n }\n if (getDOM().isShadowRoot(elem)) {\n return this.findTestabilityInTree(registry, getDOM().getHost(elem), true);\n }\n return this.findTestabilityInTree(registry, getDOM().parentElement(elem), true);\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nimport {APP_INITIALIZER, Inject, InjectionToken, Provider} from '@angular/core';\n\nimport {getDOM} from '../dom/dom_adapter';\nimport {DOCUMENT} from '../dom/dom_tokens';\n\n/**\n * An id that identifies a particular application being bootstrapped, that should\n * match across the client/server boundary.\n */\nexport const /** @type {?} */ TRANSITION_ID = new InjectionToken('TRANSITION_ID');\n/**\n * @param {?} transitionId\n * @param {?} document\n * @return {?}\n */\nexport function bootstrapListenerFactory(transitionId: string, document: any) {\n const /** @type {?} */ factory = () => {\n const /** @type {?} */ dom = getDOM();\n const /** @type {?} */ styles: any[] =\n Array.prototype.slice.apply(dom.querySelectorAll(document, `style[ng-transition]`));\n styles.filter(el => dom.getAttribute(el, 'ng-transition') === transitionId)\n .forEach(el => dom.remove(el));\n };\n return factory;\n}\n\nexport const /** @type {?} */ SERVER_TRANSITION_PROVIDERS: Provider[] = [\n {\n provide: APP_INITIALIZER,\n useFactory: bootstrapListenerFactory,\n deps: [TRANSITION_ID, DOCUMENT],\n multi: true\n },\n];\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nimport {Inject, Injectable} from '@angular/core';\n\nimport {DomAdapter, getDOM} from '../dom/dom_adapter';\nimport {DOCUMENT} from '../dom/dom_tokens';\n\n\n/**\n * Represents a meta element.\n *\n * @experimental\n */\nexport type MetaDefinition = {\n charset?: string; content?: string; httpEquiv?: string; id?: string; itemprop?: string;\n name?: string;\n property?: string;\n scheme?: string;\n url?: string;\n} &\n{\n // TODO(IgorMinar): this type looks wrong\n [prop: string]: string;\n};\n/**\n * A service that can be used to get and add meta tags.\n * \n * \\@experimental\n */\nexport class Meta {\nprivate _dom: DomAdapter;\n/**\n * @param {?} _doc\n */\nconstructor(\nprivate _doc: any) { this._dom = getDOM(); }\n/**\n * @param {?} tag\n * @param {?=} forceCreation\n * @return {?}\n */\naddTag(tag: MetaDefinition, forceCreation: boolean = false): HTMLMetaElement {\n if (!tag) return null;\n return this._getOrCreateElement(tag, forceCreation);\n }\n/**\n * @param {?} tags\n * @param {?=} forceCreation\n * @return {?}\n */\naddTags(tags: MetaDefinition[], forceCreation: boolean = false): HTMLMetaElement[] {\n if (!tags) return [];\n return tags.reduce((result: HTMLMetaElement[], tag: MetaDefinition) => {\n if (tag) {\n result.push(this._getOrCreateElement(tag, forceCreation));\n }\n return result;\n }, []);\n }\n/**\n * @param {?} attrSelector\n * @return {?}\n */\ngetTag(attrSelector: string): HTMLMetaElement {\n if (!attrSelector) return null;\n return this._dom.querySelector(this._doc, `meta[${attrSelector}]`);\n }\n/**\n * @param {?} attrSelector\n * @return {?}\n */\ngetTags(attrSelector: string): HTMLMetaElement[] {\n if (!attrSelector) return [];\n const /** @type {?} */ list /*NodeList*/ = this._dom.querySelectorAll(this._doc, `meta[${attrSelector}]`);\n return list ? [].slice.call(list) : [];\n }\n/**\n * @param {?} tag\n * @param {?=} selector\n * @return {?}\n */\nupdateTag(tag: MetaDefinition, selector?: string): HTMLMetaElement {\n if (!tag) return null;\n selector = selector || this._parseSelector(tag);\n const /** @type {?} */ meta: HTMLMetaElement = this.getTag(selector);\n if (meta) {\n return this._setMetaElementAttributes(tag, meta);\n }\n return this._getOrCreateElement(tag, true);\n }\n/**\n * @param {?} attrSelector\n * @return {?}\n */\nremoveTag(attrSelector: string): void { this.removeTagElement(this.getTag(attrSelector)); }\n/**\n * @param {?} meta\n * @return {?}\n */\nremoveTagElement(meta: HTMLMetaElement): void {\n if (meta) {\n this._dom.remove(meta);\n }\n }\n/**\n * @param {?} meta\n * @param {?=} forceCreation\n * @return {?}\n */\nprivate _getOrCreateElement(meta: MetaDefinition, forceCreation: boolean = false):\n HTMLMetaElement {\n if (!forceCreation) {\n const /** @type {?} */ selector: string = this._parseSelector(meta);\n const /** @type {?} */ elem: HTMLMetaElement = this.getTag(selector);\n // It's allowed to have multiple elements with the same name so it's not enough to\n // just check that element with the same name already present on the page. We also need to\n // check if element has tag attributes\n if (elem && this._containsAttributes(meta, elem)) return elem;\n }\n const /** @type {?} */ element: HTMLMetaElement = /** @type {?} */(( this._dom.createElement('meta') as HTMLMetaElement));\n this._setMetaElementAttributes(meta, element);\n const /** @type {?} */ head = this._dom.getElementsByTagName(this._doc, 'head')[0];\n this._dom.appendChild(head, element);\n return element;\n }\n/**\n * @param {?} tag\n * @param {?} el\n * @return {?}\n */\nprivate _setMetaElementAttributes(tag: MetaDefinition, el: HTMLMetaElement): HTMLMetaElement {\n Object.keys(tag).forEach((prop: string) => this._dom.setAttribute(el, prop, tag[prop]));\n return el;\n }\n/**\n * @param {?} tag\n * @return {?}\n */\nprivate _parseSelector(tag: MetaDefinition): string {\n const /** @type {?} */ attr: string = tag.name ? 'name' : 'property';\n return `${attr}=\"${tag[attr]}\"`;\n }\n/**\n * @param {?} tag\n * @param {?} elem\n * @return {?}\n */\nprivate _containsAttributes(tag: MetaDefinition, elem: HTMLMetaElement): boolean {\n return Object.keys(tag).every((key: string) => this._dom.getAttribute(elem, key) === tag[key]);\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Injectable },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: undefined, decorators: [{ type: Inject, args: [DOCUMENT, ] }, ]},\n];\n}\n\nfunction Meta_tsickle_Closure_declarations() {\n/** @type {?} */\nMeta.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMeta.ctorParameters;\n/** @type {?} */\nMeta.prototype._dom;\n/** @type {?} */\nMeta.prototype._doc;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nimport {LocationChangeListener, PlatformLocation} from '@angular/common';\nimport {Inject, Injectable} from '@angular/core';\n\nimport {getDOM} from '../../dom/dom_adapter';\nimport {DOCUMENT} from '../../dom/dom_tokens';\n\nimport {supportsState} from './history';\n/**\n * `PlatformLocation` encapsulates all of the direct calls to platform APIs.\n * This class should not be used directly by an application developer. Instead, use\n * {\\@link Location}.\n */\nexport class BrowserPlatformLocation extends PlatformLocation {\nprivate _location: Location;\nprivate _history: History;\n/**\n * @param {?} _doc\n */\nconstructor(\nprivate _doc: any) {\n super();\n this._init();\n }\n/**\n * \\@internal\n * @return {?}\n */\n_init() {\n this._location = getDOM().getLocation();\n this._history = getDOM().getHistory();\n }\n/**\n * @return {?}\n */\nget location(): Location { return this._location; }\n/**\n * @return {?}\n */\ngetBaseHrefFromDOM(): string { return getDOM().getBaseHref(this._doc); }\n/**\n * @param {?} fn\n * @return {?}\n */\nonPopState(fn: LocationChangeListener): void {\n getDOM().getGlobalEventTarget(this._doc, 'window').addEventListener('popstate', fn, false);\n }\n/**\n * @param {?} fn\n * @return {?}\n */\nonHashChange(fn: LocationChangeListener): void {\n getDOM().getGlobalEventTarget(this._doc, 'window').addEventListener('hashchange', fn, false);\n }\n/**\n * @return {?}\n */\nget pathname(): string { return this._location.pathname; }\n/**\n * @return {?}\n */\nget search(): string { return this._location.search; }\n/**\n * @return {?}\n */\nget hash(): string { return this._location.hash; }\n/**\n * @param {?} newPath\n * @return {?}\n */\nset pathname(newPath: string) { this._location.pathname = newPath; }\n/**\n * @param {?} state\n * @param {?} title\n * @param {?} url\n * @return {?}\n */\npushState(state: any, title: string, url: string): void {\n if (supportsState()) {\n this._history.pushState(state, title, url);\n } else {\n this._location.hash = url;\n }\n }\n/**\n * @param {?} state\n * @param {?} title\n * @param {?} url\n * @return {?}\n */\nreplaceState(state: any, title: string, url: string): void {\n if (supportsState()) {\n this._history.replaceState(state, title, url);\n } else {\n this._location.hash = url;\n }\n }\n/**\n * @return {?}\n */\nforward(): void { this._history.forward(); }\n/**\n * @return {?}\n */\nback(): void { this._history.back(); }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Injectable },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: undefined, decorators: [{ type: Inject, args: [DOCUMENT, ] }, ]},\n];\n}\n\nfunction BrowserPlatformLocation_tsickle_Closure_declarations() {\n/** @type {?} */\nBrowserPlatformLocation.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nBrowserPlatformLocation.ctorParameters;\n/** @type {?} */\nBrowserPlatformLocation.prototype._location;\n/** @type {?} */\nBrowserPlatformLocation.prototype._history;\n/** @type {?} */\nBrowserPlatformLocation.prototype._doc;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nimport {InjectionToken} from '@angular/core';\n/**\n * A DI Token representing the main rendering context. In a browser this is the DOM Document.\n * \n * Note: Document might not be available in the Application Context when Application and Rendering\n * Contexts are not the same (e.g. when running the application into a Web Worker).\n * \n * \\@stable\n */\nexport const DOCUMENT = new InjectionToken<Document>('DocumentToken');\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nimport {ɵglobal as global} from '@angular/core';\nimport {setRootDomAdapter} from '../dom/dom_adapter';\n\nimport {GenericBrowserDomAdapter} from './generic_browser_adapter';\n\nconst /** @type {?} */ _attrToPropMap = {\n 'class': 'className',\n 'innerHtml': 'innerHTML',\n 'readonly': 'readOnly',\n 'tabindex': 'tabIndex',\n};\n\nconst /** @type {?} */ DOM_KEY_LOCATION_NUMPAD = 3;\n\n// Map to convert some key or keyIdentifier values to what will be returned by getEventKey\nconst /** @type {?} */ _keyMap: {[k: string]: string} = {\n // The following values are here for cross-browser compatibility and to match the W3C standard\n // cf http://www.w3.org/TR/DOM-Level-3-Events-key/\n '\\b': 'Backspace',\n '\\t': 'Tab',\n '\\x7F': 'Delete',\n '\\x1B': 'Escape',\n 'Del': 'Delete',\n 'Esc': 'Escape',\n 'Left': 'ArrowLeft',\n 'Right': 'ArrowRight',\n 'Up': 'ArrowUp',\n 'Down': 'ArrowDown',\n 'Menu': 'ContextMenu',\n 'Scroll': 'ScrollLock',\n 'Win': 'OS'\n};\n\n// There is a bug in Chrome for numeric keypad keys:\n// https://code.google.com/p/chromium/issues/detail?id=155654\n// 1, 2, 3 ... are reported as A, B, C ...\nconst /** @type {?} */ _chromeNumKeyPadMap = {\n 'A': '1',\n 'B': '2',\n 'C': '3',\n 'D': '4',\n 'E': '5',\n 'F': '6',\n 'G': '7',\n 'H': '8',\n 'I': '9',\n 'J': '*',\n 'K': '+',\n 'M': '-',\n 'N': '.',\n 'O': '/',\n '\\x60': '0',\n '\\x90': 'NumLock'\n};\n\nlet /** @type {?} */ nodeContains: (a: any, b: any) => boolean;\n\nif (global['Node']) {\n nodeContains = global['Node'].prototype.contains || function(node) {\n return !!(this.compareDocumentPosition(node) & 16);\n };\n}\nexport class BrowserDomAdapter extends GenericBrowserDomAdapter {\n/**\n * @param {?} templateHtml\n * @return {?}\n */\nparse(templateHtml: string) { throw new Error('parse not implemented'); }\n/**\n * @return {?}\n */\nstatic makeCurrent() { setRootDomAdapter(new BrowserDomAdapter()); }\n/**\n * @param {?} element\n * @param {?} name\n * @return {?}\n */\nhasProperty(element: Node, name: string): boolean { return name in element; }\n/**\n * @param {?} el\n * @param {?} name\n * @param {?} value\n * @return {?}\n */\nsetProperty(el: Node, name: string, value: any) { ( /** @type {?} */((<any>el)))[name] = value; }\n/**\n * @param {?} el\n * @param {?} name\n * @return {?}\n */\ngetProperty(el: Node, name: string): any { return ( /** @type {?} */((<any>el)))[name]; }\n/**\n * @param {?} el\n * @param {?} methodName\n * @param {?} args\n * @return {?}\n */\ninvoke(el: Node, methodName: string, args: any[]): any { ( /** @type {?} */((<any>el)))[methodName](...args); }\n/**\n * @param {?} error\n * @return {?}\n */\nlogError(error: string): void {\n if (window.console) {\n if (console.error) {\n console.error(error);\n } else {\n console.log(error);\n }\n }\n }\n/**\n * @param {?} error\n * @return {?}\n */\nlog(error: string): void {\n if (window.console) {\n window.console.log && window.console.log(error);\n }\n }\n/**\n * @param {?} error\n * @return {?}\n */\nlogGroup(error: string): void {\n if (window.console) {\n window.console.group && window.console.group(error);\n }\n }\n/**\n * @return {?}\n */\nlogGroupEnd(): void {\n if (window.console) {\n window.console.groupEnd && window.console.groupEnd();\n }\n }\n/**\n * @return {?}\n */\nget attrToPropMap(): any { return _attrToPropMap; }\n/**\n * @param {?} nodeA\n * @param {?} nodeB\n * @return {?}\n */\ncontains(nodeA: any, nodeB: any): boolean { return nodeContains.call(nodeA, nodeB); }\n/**\n * @param {?} el\n * @param {?} selector\n * @return {?}\n */\nquerySelector(el: Element, selector: string): any { return el.querySelector(selector); }\n/**\n * @param {?} el\n * @param {?} selector\n * @return {?}\n */\nquerySelectorAll(el: any, selector: string): any[] { return el.querySelectorAll(selector); }\n/**\n * @param {?} el\n * @param {?} evt\n * @param {?} listener\n * @return {?}\n */\non(el: Node, evt: any, listener: any) { el.addEventListener(evt, listener, false); }\n/**\n * @param {?} el\n * @param {?} evt\n * @param {?} listener\n * @return {?}\n */\nonAndCancel(el: Node, evt: any, listener: any): Function {\n el.addEventListener(evt, listener, false);\n // Needed to follow Dart's subscription semantic, until fix of\n // https://code.google.com/p/dart/issues/detail?id=17406\n return () => { el.removeEventListener(evt, listener, false); };\n }\n/**\n * @param {?} el\n * @param {?} evt\n * @return {?}\n */\ndispatchEvent(el: Node, evt: any) { el.dispatchEvent(evt); }\n/**\n * @param {?} eventType\n * @return {?}\n */\ncreateMouseEvent(eventType: string): MouseEvent {\n const /** @type {?} */ evt: MouseEvent = document.createEvent('MouseEvent');\n evt.initEvent(eventType, true, true);\n return evt;\n }\n/**\n * @param {?} eventType\n * @return {?}\n */\ncreateEvent(eventType: any): Event {\n const /** @type {?} */ evt: Event = document.createEvent('Event');\n evt.initEvent(eventType, true, true);\n return evt;\n }\n/**\n * @param {?} evt\n * @return {?}\n */\npreventDefault(evt: Event) {\n evt.preventDefault();\n evt.returnValue = false;\n }\n/**\n * @param {?} evt\n * @return {?}\n */\nisPrevented(evt: Event): boolean {\n return evt.defaultPrevented || evt.returnValue != null && !evt.returnValue;\n }\n/**\n * @param {?} el\n * @return {?}\n */\ngetInnerHTML(el: HTMLElement): string { return el.innerHTML; }\n/**\n * @param {?} el\n * @return {?}\n */\ngetTemplateContent(el: Node): Node {\n return 'content' in el && el instanceof HTMLTemplateElement ? el.content : null;\n }\n/**\n * @param {?} el\n * @return {?}\n */\ngetOuterHTML(el: HTMLElement): string { return el.outerHTML; }\n/**\n * @param {?} node\n * @return {?}\n */\nnodeName(node: Node): string { return node.nodeName; }\n/**\n * @param {?} node\n * @return {?}\n */\nnodeValue(node: Node): string { return node.nodeValue; }\n/**\n * @param {?} node\n * @return {?}\n */\ntype(node: HTMLInputElement): string { return node.type; }\n/**\n * @param {?} node\n * @return {?}\n */\ncontent(node: Node): Node {\n if (this.hasProperty(node, 'content')) {\n return ( /** @type {?} */((<any>node))).content;\n } else {\n return node;\n }\n }\n/**\n * @param {?} el\n * @return {?}\n */\nfirstChild(el: Node): Node { return el.firstChild; }\n/**\n * @param {?} el\n * @return {?}\n */\nnextSibling(el: Node): Node { return el.nextSibling; }\n/**\n * @param {?} el\n * @return {?}\n */\nparentElement(el: Node): Node { return el.parentNode; }\n/**\n * @param {?} el\n * @return {?}\n */\nchildNodes(el: any): Node[] { return el.childNodes; }\n/**\n * @param {?} el\n * @return {?}\n */\nchildNodesAsList(el: Node): any[] {\n const /** @type {?} */ childNodes = el.childNodes;\n const /** @type {?} */ res = new Array(childNodes.length);\n for (let /** @type {?} */ i = 0; i < childNodes.length; i++) {\n res[i] = childNodes[i];\n }\n return res;\n }\n/**\n * @param {?} el\n * @return {?}\n */\nclearNodes(el: Node) {\n while (el.firstChild) {\n el.removeChild(el.firstChild);\n }\n }\n/**\n * @param {?} el\n * @param {?} node\n * @return {?}\n */\nappendChild(el: Node, node: Node) { el.appendChild(node); }\n/**\n * @param {?} el\n * @param {?} node\n * @return {?}\n */\nremoveChild(el: Node, node: Node) { el.removeChild(node); }\n/**\n * @param {?} el\n * @param {?} newChild\n * @param {?} oldChild\n * @return {?}\n */\nreplaceChild(el: Node, newChild: Node, oldChild: Node) { el.replaceChild(newChild, oldChild); }\n/**\n * @param {?} node\n * @return {?}\n */\nremove(node: Node): Node {\n if (node.parentNode) {\n node.parentNode.removeChild(node);\n }\n return node;\n }\n/**\n * @param {?} parent\n * @param {?} ref\n * @param {?} node\n * @return {?}\n */\ninsertBefore(parent: Node, ref: Node, node: Node) { parent.insertBefore(node, ref); }\n/**\n * @param {?} parent\n * @param {?} ref\n * @param {?} nodes\n * @return {?}\n */\ninsertAllBefore(parent: Node, ref: Node, nodes: Node[]) {\n nodes.forEach((n: any) => parent.insertBefore(n, ref));\n }\n/**\n * @param {?} parent\n * @param {?} ref\n * @param {?} node\n * @return {?}\n */\ninsertAfter(parent: Node, ref: Node, node: any) { parent.insertBefore(node, ref.nextSibling); }\n/**\n * @param {?} el\n * @param {?} value\n * @return {?}\n */\nsetInnerHTML(el: Element, value: string) { el.innerHTML = value; }\n/**\n * @param {?} el\n * @return {?}\n */\ngetText(el: Node): string { return el.textContent; }\n/**\n * @param {?} el\n * @param {?} value\n * @return {?}\n */\nsetText(el: Node, value: string) { el.textContent = value; }\n/**\n * @param {?} el\n * @return {?}\n */\ngetValue(el: any): string { return el.value; }\n/**\n * @param {?} el\n * @param {?} value\n * @return {?}\n */\nsetValue(el: any, value: string) { el.value = value; }\n/**\n * @param {?} el\n * @return {?}\n */\ngetChecked(el: any): boolean { return el.checked; }\n/**\n * @param {?} el\n * @param {?} value\n * @return {?}\n */\nsetChecked(el: any, value: boolean) { el.checked = value; }\n/**\n * @param {?} text\n * @return {?}\n */\ncreateComment(text: string): Comment { return document.createComment(text); }\n/**\n * @param {?} html\n * @return {?}\n */\ncreateTemplate(html: any): HTMLElement {\n const /** @type {?} */ t = document.createElement('template');\n t.innerHTML = html;\n return t;\n }\n/**\n * @param {?} tagName\n * @param {?=} doc\n * @return {?}\n */\ncreateElement(tagName: string, doc = document): HTMLElement { return doc.createElement(tagName); }\n/**\n * @param {?} ns\n * @param {?} tagName\n * @param {?=} doc\n * @return {?}\n */\ncreateElementNS(ns: string, tagName: string, doc = document): Element {\n return doc.createElementNS(ns, tagName);\n }\n/**\n * @param {?} text\n * @param {?=} doc\n * @return {?}\n */\ncreateTextNode(text: string, doc = document): Text { return doc.createTextNode(text); }\n/**\n * @param {?} attrName\n * @param {?} attrValue\n * @param {?=} doc\n * @return {?}\n */\ncreateScriptTag(attrName: string, attrValue: string, doc = document): HTMLScriptElement {\n const /** @type {?} */ el = /** @type {?} */(( <HTMLScriptElement>doc.createElement('SCRIPT')));\n el.setAttribute(attrName, attrValue);\n return el;\n }\n/**\n * @param {?} css\n * @param {?=} doc\n * @return {?}\n */\ncreateStyleElement(css: string, doc = document): HTMLStyleElement {\n const /** @type {?} */ style = /** @type {?} */(( <HTMLStyleElement>doc.createElement('style')));\n this.appendChild(style, this.createTextNode(css));\n return style;\n }\n/**\n * @param {?} el\n * @return {?}\n */\ncreateShadowRoot(el: HTMLElement): DocumentFragment { return ( /** @type {?} */((<any>el))).createShadowRoot(); }\n/**\n * @param {?} el\n * @return {?}\n */\ngetShadowRoot(el: HTMLElement): DocumentFragment { return ( /** @type {?} */((<any>el))).shadowRoot; }\n/**\n * @param {?} el\n * @return {?}\n */\ngetHost(el: HTMLElement): HTMLElement { return ( /** @type {?} */((<any>el))).host; }\n/**\n * @param {?} node\n * @return {?}\n */\nclone(node: Node): Node { return node.cloneNode(true); }\n/**\n * @param {?} element\n * @param {?} name\n * @return {?}\n */\ngetElementsByClassName(element: any, name: string): HTMLElement[] {\n return element.getElementsByClassName(name);\n }\n/**\n * @param {?} element\n * @param {?} name\n * @return {?}\n */\ngetElementsByTagName(element: any, name: string): HTMLElement[] {\n return element.getElementsByTagName(name);\n }\n/**\n * @param {?} element\n * @return {?}\n */\nclassList(element: any): any[] { return Array.prototype.slice.call(element.classList, 0); }\n/**\n * @param {?} element\n * @param {?} className\n * @return {?}\n */\naddClass(element: any, className: string) { element.classList.add(className); }\n/**\n * @param {?} element\n * @param {?} className\n * @return {?}\n */\nremoveClass(element: any, className: string) { element.classList.remove(className); }\n/**\n * @param {?} element\n * @param {?} className\n * @return {?}\n */\nhasClass(element: any, className: string): boolean {\n return element.classList.contains(className);\n }\n/**\n * @param {?} element\n * @param {?} styleName\n * @param {?} styleValue\n * @return {?}\n */\nsetStyle(element: any, styleName: string, styleValue: string) {\n element.style[styleName] = styleValue;\n }\n/**\n * @param {?} element\n * @param {?} stylename\n * @return {?}\n */\nremoveStyle(element: any, stylename: string) {\n // IE requires '' instead of null\n // see https://github.com/angular/angular/issues/7916\n element.style[stylename] = '';\n }\n/**\n * @param {?} element\n * @param {?} stylename\n * @return {?}\n */\ngetStyle(element: any, stylename: string): string { return element.style[stylename]; }\n/**\n * @param {?} element\n * @param {?} styleName\n * @param {?=} styleValue\n * @return {?}\n */\nhasStyle(element: any, styleName: string, styleValue: string = null): boolean {\n const /** @type {?} */ value = this.getStyle(element, styleName) || '';\n return styleValue ? value == styleValue : value.length > 0;\n }\n/**\n * @param {?} element\n * @return {?}\n */\ntagName(element: any): string { return element.tagName; }\n/**\n * @param {?} element\n * @return {?}\n */\nattributeMap(element: any): Map<string, string> {\n const /** @type {?} */ res = new Map<string, string>();\n const /** @type {?} */ elAttrs = element.attributes;\n for (let /** @type {?} */ i = 0; i < elAttrs.length; i++) {\n const /** @type {?} */ attrib = elAttrs[i];\n res.set(attrib.name, attrib.value);\n }\n return res;\n }\n/**\n * @param {?} element\n * @param {?} attribute\n * @return {?}\n */\nhasAttribute(element: Element, attribute: string): boolean {\n return element.hasAttribute(attribute);\n }\n/**\n * @param {?} element\n * @param {?} ns\n * @param {?} attribute\n * @return {?}\n */\nhasAttributeNS(element: Element, ns: string, attribute: string): boolean {\n return element.hasAttributeNS(ns, attribute);\n }\n/**\n * @param {?} element\n * @param {?} attribute\n * @return {?}\n */\ngetAttribute(element: Element, attribute: string): string {\n return element.getAttribute(attribute);\n }\n/**\n * @param {?} element\n * @param {?} ns\n * @param {?} name\n * @return {?}\n */\ngetAttributeNS(element: Element, ns: string, name: string): string {\n return element.getAttributeNS(ns, name);\n }\n/**\n * @param {?} element\n * @param {?} name\n * @param {?} value\n * @return {?}\n */\nsetAttribute(element: Element, name: string, value: string) { element.setAttribute(name, value); }\n/**\n * @param {?} element\n * @param {?} ns\n * @param {?} name\n * @param {?} value\n * @return {?}\n */\nsetAttributeNS(element: Element, ns: string, name: string, value: string) {\n element.setAttributeNS(ns, name, value);\n }\n/**\n * @param {?} element\n * @param {?} attribute\n * @return {?}\n */\nremoveAttribute(element: Element, attribute: string) { element.removeAttribute(attribute); }\n/**\n * @param {?} element\n * @param {?} ns\n * @param {?} name\n * @return {?}\n */\nremoveAttributeNS(element: Element, ns: string, name: string) {\n element.removeAttributeNS(ns, name);\n }\n/**\n * @param {?} el\n * @return {?}\n */\ntemplateAwareRoot(el: Node): any { return this.isTemplateElement(el) ? this.content(el) : el; }\n/**\n * @return {?}\n */\ncreateHtmlDocument(): HTMLDocument {\n return document.implementation.createHTMLDocument('fakeTitle');\n }\n/**\n * @param {?} el\n * @return {?}\n */\ngetBoundingClientRect(el: Element): any {\n try {\n return el.getBoundingClientRect();\n } catch ( /** @type {?} */e) {\n return {top: 0, bottom: 0, left: 0, right: 0, width: 0, height: 0};\n }\n }\n/**\n * @param {?} doc\n * @return {?}\n */\ngetTitle(doc: Document): string { return document.title; }\n/**\n * @param {?} doc\n * @param {?} newTitle\n * @return {?}\n */\nsetTitle(doc: Document, newTitle: string) { document.title = newTitle || ''; }\n/**\n * @param {?} n\n * @param {?} selector\n * @return {?}\n */\nelementMatches(n: any, selector: string): boolean {\n if (n instanceof HTMLElement) {\n return n.matches && n.matches(selector) ||\n n.msMatchesSelector && n.msMatchesSelector(selector) ||\n n.webkitMatchesSelector && n.webkitMatchesSelector(selector);\n }\n\n return false;\n }\n/**\n * @param {?} el\n * @return {?}\n */\nisTemplateElement(el: Node): boolean {\n return el instanceof HTMLElement && el.nodeName == 'TEMPLATE';\n }\n/**\n * @param {?} node\n * @return {?}\n */\nisTextNode(node: Node): boolean { return node.nodeType === Node.TEXT_NODE; }\n/**\n * @param {?} node\n * @return {?}\n */\nisCommentNode(node: Node): boolean { return node.nodeType === Node.COMMENT_NODE; }\n/**\n * @param {?} node\n * @return {?}\n */\nisElementNode(node: Node): boolean { return node.nodeType === Node.ELEMENT_NODE; }\n/**\n * @param {?} node\n * @return {?}\n */\nhasShadowRoot(node: any): boolean {\n return node.shadowRoot != null && node instanceof HTMLElement;\n }\n/**\n * @param {?} node\n * @return {?}\n */\nisShadowRoot(node: any): boolean { return node instanceof DocumentFragment; }\n/**\n * @param {?} node\n * @return {?}\n */\nimportIntoDoc(node: Node): any { return document.importNode(this.templateAwareRoot(node), true); }\n/**\n * @param {?} node\n * @return {?}\n */\nadoptNode(node: Node): any { return document.adoptNode(node); }\n/**\n * @param {?} el\n * @return {?}\n */\ngetHref(el: Element): string { return ( /** @type {?} */((<any>el))).href; }\n/**\n * @param {?} event\n * @return {?}\n */\ngetEventKey(event: any): string {\n let /** @type {?} */ key = event.key;\n if (key == null) {\n key = event.keyIdentifier;\n // keyIdentifier is defined in the old draft of DOM Level 3 Events implemented by Chrome and\n // Safari cf\n // http://www.w3.org/TR/2007/WD-DOM-Level-3-Events-20071221/events.html#Events-KeyboardEvents-Interfaces\n if (key == null) {\n return 'Unidentified';\n }\n if (key.startsWith('U+')) {\n key = String.fromCharCode(parseInt(key.substring(2), 16));\n if (event.location === DOM_KEY_LOCATION_NUMPAD && _chromeNumKeyPadMap.hasOwnProperty(key)) {\n // There is a bug in Chrome for numeric keypad keys:\n // https://code.google.com/p/chromium/issues/detail?id=155654\n // 1, 2, 3 ... are reported as A, B, C ...\n key = ( /** @type {?} */((_chromeNumKeyPadMap as any)))[key];\n }\n }\n }\n\n return _keyMap[key] || key;\n }\n/**\n * @param {?} doc\n * @param {?} target\n * @return {?}\n */\ngetGlobalEventTarget(doc: Document, target: string): EventTarget {\n if (target === 'window') {\n return window;\n }\n if (target === 'document') {\n return document;\n }\n if (target === 'body') {\n return document.body;\n }\n }\n/**\n * @return {?}\n */\ngetHistory(): History { return window.history; }\n/**\n * @return {?}\n */\ngetLocation(): Location { return window.location; }\n/**\n * @param {?} doc\n * @return {?}\n */\ngetBaseHref(doc: Document): string {\n const /** @type {?} */ href = getBaseElementHref();\n return href == null ? null : relativePath(href);\n }\n/**\n * @return {?}\n */\nresetBaseElement(): void { baseElement = null; }\n/**\n * @return {?}\n */\ngetUserAgent(): string { return window.navigator.userAgent; }\n/**\n * @param {?} element\n * @param {?} name\n * @param {?} value\n * @return {?}\n */\nsetData(element: Element, name: string, value: string) {\n this.setAttribute(element, 'data-' + name, value);\n }\n/**\n * @param {?} element\n * @param {?} name\n * @return {?}\n */\ngetData(element: Element, name: string): string {\n return this.getAttribute(element, 'data-' + name);\n }\n/**\n * @param {?} element\n * @return {?}\n */\ngetComputedStyle(element: any): any { return getComputedStyle(element); }\n/**\n * @param {?} path\n * @param {?} value\n * @return {?}\n */\nsetGlobalVar(path: string, value: any) { setValueOnPath(global, path, value); }\n/**\n * @return {?}\n */\nsupportsWebAnimation(): boolean {\n return typeof( /** @type {?} */((<any>Element))).prototype['animate'] === 'function';\n }\n/**\n * @return {?}\n */\nperformanceNow(): number {\n // performance.now() is not available in all browsers, see\n // http://caniuse.com/#search=performance.now\n return window.performance && window.performance.now ? window.performance.now() :\n new Date().getTime();\n }\n/**\n * @return {?}\n */\nsupportsCookies(): boolean { return true; }\n/**\n * @param {?} name\n * @return {?}\n */\ngetCookie(name: string): string { return parseCookieValue(document.cookie, name); }\n/**\n * @param {?} name\n * @param {?} value\n * @return {?}\n */\nsetCookie(name: string, value: string) {\n // document.cookie is magical, assigning into it assigns/overrides one cookie value, but does\n // not clear other cookies.\n document.cookie = encodeURIComponent(name) + '=' + encodeURIComponent(value);\n }\n}\n\nlet /** @type {?} */ baseElement: HTMLElement = null;\n/**\n * @return {?}\n */\nfunction getBaseElementHref(): string {\n if (!baseElement) {\n baseElement = document.querySelector('base');\n if (!baseElement) {\n return null;\n }\n }\n return baseElement.getAttribute('href');\n}\n\n// based on urlUtils.js in AngularJS 1\nlet /** @type {?} */ urlParsingNode: any;\n/**\n * @param {?} url\n * @return {?}\n */\nfunction relativePath(url: any): string {\n if (!urlParsingNode) {\n urlParsingNode = document.createElement('a');\n }\n urlParsingNode.setAttribute('href', url);\n return (urlParsingNode.pathname.charAt(0) === '/') ? urlParsingNode.pathname :\n '/' + urlParsingNode.pathname;\n}\n/**\n * @param {?} cookieStr\n * @param {?} name\n * @return {?}\n */\nexport function parseCookieValue(cookieStr: string, name: string): string {\n name = encodeURIComponent(name);\n for (const /** @type {?} */ cookie of cookieStr.split(';')) {\n const /** @type {?} */ eqIndex = cookie.indexOf('=');\n const [cookieName, cookieValue]: string[] =\n eqIndex == -1 ? [cookie, ''] : [cookie.slice(0, eqIndex), cookie.slice(eqIndex + 1)];\n if (cookieName.trim() === name) {\n return decodeURIComponent(cookieValue);\n }\n }\n return null;\n}\n/**\n * @param {?} global\n * @param {?} path\n * @param {?} value\n * @return {?}\n */\nexport function setValueOnPath(global: any, path: string, value: any) {\n const /** @type {?} */ parts = path.split('.');\n let /** @type {?} */ obj: any = global;\n while (parts.length > 1) {\n const /** @type {?} */ name = parts.shift();\n if (obj.hasOwnProperty(name) && obj[name] != null) {\n obj = obj[name];\n } else {\n obj = obj[name] = {};\n }\n }\n if (obj === undefined || obj === null) {\n obj = {};\n }\n obj[parts.shift()] = value;\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nimport {DomAdapter} from '../dom/dom_adapter';\n/**\n * Provides DOM operations in any browser environment.\n * \n * \\@security Tread carefully! Interacting with the DOM directly is dangerous and\n * can introduce XSS risks.\n * @abstract\n */\nexport abstract class GenericBrowserDomAdapter extends DomAdapter {\nprivate _animationPrefix: string = null;\nprivate _transitionEnd: string = null;\nconstructor() {\n super();\n try {\n const element = this.createElement('div', document);\n if (this.getStyle(element, 'animationName') != null) {\n this._animationPrefix = '';\n } else {\n const domPrefixes = ['Webkit', 'Moz', 'O', 'ms'];\n\n for (let i = 0; i < domPrefixes.length; i++) {\n if (this.getStyle(element, domPrefixes[i] + 'AnimationName') != null) {\n this._animationPrefix = '-' + domPrefixes[i].toLowerCase() + '-';\n break;\n }\n }\n }\n\n const transEndEventNames: {[key: string]: string} = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend'\n };\n\n Object.keys(transEndEventNames).forEach((key: string) => {\n if (this.getStyle(element, key) != null) {\n this._transitionEnd = transEndEventNames[key];\n }\n });\n } catch (e) {\n this._animationPrefix = null;\n this._transitionEnd = null;\n }\n }\n/**\n * @param {?} el\n * @return {?}\n */\ngetDistributedNodes(el: HTMLElement): Node[] { return ( /** @type {?} */((<any>el))).getDistributedNodes(); }\n/**\n * @param {?} el\n * @param {?} baseUrl\n * @param {?} href\n * @return {?}\n */\nresolveAndSetHref(el: HTMLAnchorElement, baseUrl: string, href: string) {\n el.href = href == null ? baseUrl : baseUrl + '/../' + href;\n }\n/**\n * @return {?}\n */\nsupportsDOMEvents(): boolean { return true; }\n/**\n * @return {?}\n */\nsupportsNativeShadowDOM(): boolean {\n return typeof( /** @type {?} */((<any>document.body))).createShadowRoot === 'function';\n }\n/**\n * @return {?}\n */\ngetAnimationPrefix(): string { return this._animationPrefix ? this._animationPrefix : ''; }\n/**\n * @return {?}\n */\ngetTransitionEnd(): string { return this._transitionEnd ? this._transitionEnd : ''; }\n/**\n * @return {?}\n */\nsupportsAnimation(): boolean {\n return this._animationPrefix != null && this._transitionEnd != null;\n }\n}\n\nfunction GenericBrowserDomAdapter_tsickle_Closure_declarations() {\n/** @type {?} */\nGenericBrowserDomAdapter.prototype._animationPrefix;\n/** @type {?} */\nGenericBrowserDomAdapter.prototype._transitionEnd;\n}\n\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nimport {Type} from '@angular/core';\n\nlet /** @type {?} */ _DOM: DomAdapter = null;\n/**\n * @return {?}\n */\nexport function getDOM() {\n return _DOM;\n}\n/**\n * @param {?} adapter\n * @return {?}\n */\nexport function setDOM(adapter: DomAdapter) {\n _DOM = adapter;\n}\n/**\n * @param {?} adapter\n * @return {?}\n */\nexport function setRootDomAdapter(adapter: DomAdapter) {\n if (!_DOM) {\n _DOM = adapter;\n }\n}\n/**\n * Provides DOM operations in an environment-agnostic way.\n * \n * \\@security Tread carefully! Interacting with the DOM directly is dangerous and\n * can introduce XSS risks.\n * @abstract\n */\nexport abstract class DomAdapter {\npublic resourceLoaderType: Type<any> = null;\n/**\n * @abstract\n * @param {?} element\n * @param {?} name\n * @return {?}\n */\nhasProperty(element: any, name: string) {}\n/**\n * @abstract\n * @param {?} el\n * @param {?} name\n * @param {?} value\n * @return {?}\n */\nsetProperty(el: Element, name: string, value: any) {}\n/**\n * @abstract\n * @param {?} el\n * @param {?} name\n * @return {?}\n */\ngetProperty(el: Element, name: string) {}\n/**\n * @abstract\n * @param {?} el\n * @param {?} methodName\n * @param {?} args\n * @return {?}\n */\ninvoke(el: Element, methodName: string, args: any[]) {}\n/**\n * @abstract\n * @param {?} error\n * @return {?}\n */\nlogError(error: any) {}\n/**\n * @abstract\n * @param {?} error\n * @return {?}\n */\nlog(error: any) {}\n/**\n * @abstract\n * @param {?} error\n * @return {?}\n */\nlogGroup(error: any) {}\n/**\n * @abstract\n * @return {?}\n */\nlogGroupEnd() {}\n/**\n * Maps attribute names to their corresponding property names for cases\n * where attribute name doesn't match property name.\n * @return {?}\n */\nget attrToPropMap(): {[key: string]: string} { return this._attrToPropMap; };\n/**\n * @param {?} value\n * @return {?}\n */\nset attrToPropMap(value: {[key: string]: string}) { this._attrToPropMap = value; };\n/**\n * \\@internal\n */\n_attrToPropMap: {[key: string]: string};\n/**\n * @abstract\n * @param {?} nodeA\n * @param {?} nodeB\n * @return {?}\n */\ncontains(nodeA: any, nodeB: any) {}\n/**\n * @abstract\n * @param {?} templateHtml\n * @return {?}\n */\nparse(templateHtml: string) {}\n/**\n * @abstract\n * @param {?} el\n * @param {?} selector\n * @return {?}\n */\nquerySelector(el: any, selector: string) {}\n/**\n * @abstract\n * @param {?} el\n * @param {?} selector\n * @return {?}\n */\nquerySelectorAll(el: any, selector: string) {}\n/**\n * @abstract\n * @param {?} el\n * @param {?} evt\n * @param {?} listener\n * @return {?}\n */\non(el: any, evt: any, listener: any) {}\n/**\n * @abstract\n * @param {?} el\n * @param {?} evt\n * @param {?} listener\n * @return {?}\n */\nonAndCancel(el: any, evt: any, listener: any) {}\n/**\n * @abstract\n * @param {?} el\n * @param {?} evt\n * @return {?}\n */\ndispatchEvent(el: any, evt: any) {}\n/**\n * @abstract\n * @param {?} eventType\n * @return {?}\n */\ncreateMouseEvent(eventType: any) {}\n/**\n * @abstract\n * @param {?} eventType\n * @return {?}\n */\ncreateEvent(eventType: string) {}\n/**\n * @abstract\n * @param {?} evt\n * @return {?}\n */\npreventDefault(evt: any) {}\n/**\n * @abstract\n * @param {?} evt\n * @return {?}\n */\nisPrevented(evt: any) {}\n/**\n * @abstract\n * @param {?} el\n * @return {?}\n */\ngetInnerHTML(el: any) {}\n/**\n * Returns content if el is a <template> element, null otherwise.\n * @abstract\n * @param {?} el\n * @return {?}\n */\ngetTemplateContent(el: any) {}\n/**\n * @abstract\n * @param {?} el\n * @return {?}\n */\ngetOuterHTML(el: any) {}\n/**\n * @abstract\n * @param {?} node\n * @return {?}\n */\nnodeName(node: any) {}\n/**\n * @abstract\n * @param {?} node\n * @return {?}\n */\nnodeValue(node: any) {}\n/**\n * @abstract\n * @param {?} node\n * @return {?}\n */\ntype(node: any) {}\n/**\n * @abstract\n * @param {?} node\n * @return {?}\n */\ncontent(node: any) {}\n/**\n * @abstract\n * @param {?} el\n * @return {?}\n */\nfirstChild(el: any) {}\n/**\n * @abstract\n * @param {?} el\n * @return {?}\n */\nnextSibling(el: any) {}\n/**\n * @abstract\n * @param {?} el\n * @return {?}\n */\nparentElement(el: any) {}\n/**\n * @abstract\n * @param {?} el\n * @return {?}\n */\nchildNodes(el: any) {}\n/**\n * @abstract\n * @param {?} el\n * @return {?}\n */\nchildNodesAsList(el: any) {}\n/**\n * @abstract\n * @param {?} el\n * @return {?}\n */\nclearNodes(el: any) {}\n/**\n * @abstract\n * @param {?} el\n * @param {?} node\n * @return {?}\n */\nappendChild(el: any, node: any) {}\n/**\n * @abstract\n * @param {?} el\n * @param {?} node\n * @return {?}\n */\nremoveChild(el: any, node: any) {}\n/**\n * @abstract\n * @param {?} el\n * @param {?} newNode\n * @param {?} oldNode\n * @return {?}\n */\nreplaceChild(el: any, newNode: any, oldNode: any) {}\n/**\n * @abstract\n * @param {?} el\n * @return {?}\n */\nremove(el: any) {}\n/**\n * @abstract\n * @param {?} parent\n * @param {?} ref\n * @param {?} node\n * @return {?}\n */\ninsertBefore(parent: any, ref: any, node: any) {}\n/**\n * @abstract\n * @param {?} parent\n * @param {?} ref\n * @param {?} nodes\n * @return {?}\n */\ninsertAllBefore(parent: any, ref: any, nodes: any) {}\n/**\n * @abstract\n * @param {?} parent\n * @param {?} el\n * @param {?} node\n * @return {?}\n */\ninsertAfter(parent: any, el: any, node: any) {}\n/**\n * @abstract\n * @param {?} el\n * @param {?} value\n * @return {?}\n */\nsetInnerHTML(el: any, value: any) {}\n/**\n * @abstract\n * @param {?} el\n * @return {?}\n */\ngetText(el: any) {}\n/**\n * @abstract\n * @param {?} el\n * @param {?} value\n * @return {?}\n */\nsetText(el: any, value: string) {}\n/**\n * @abstract\n * @param {?} el\n * @return {?}\n */\ngetValue(el: any) {}\n/**\n * @abstract\n * @param {?} el\n * @param {?} value\n * @return {?}\n */\nsetValue(el: any, value: string) {}\n/**\n * @abstract\n * @param {?} el\n * @return {?}\n */\ngetChecked(el: any) {}\n/**\n * @abstract\n * @param {?} el\n * @param {?} value\n * @return {?}\n */\nsetChecked(el: any, value: boolean) {}\n/**\n * @abstract\n * @param {?} text\n * @return {?}\n */\ncreateComment(text: string) {}\n/**\n * @abstract\n * @param {?} html\n * @return {?}\n */\ncreateTemplate(html: any) {}\n/**\n * @abstract\n * @param {?} tagName\n * @param {?=} doc\n * @return {?}\n */\ncreateElement(tagName: any, doc?: any) {}\n/**\n * @abstract\n * @param {?} ns\n * @param {?} tagName\n * @param {?=} doc\n * @return {?}\n */\ncreateElementNS(ns: string, tagName: string, doc?: any) {}\n/**\n * @abstract\n * @param {?} text\n * @param {?=} doc\n * @return {?}\n */\ncreateTextNode(text: string, doc?: any) {}\n/**\n * @abstract\n * @param {?} attrName\n * @param {?} attrValue\n * @param {?=} doc\n * @return {?}\n */\ncreateScriptTag(attrName: string, attrValue: string, doc?: any) {}\n/**\n * @abstract\n * @param {?} css\n * @param {?=} doc\n * @return {?}\n */\ncreateStyleElement(css: string, doc?: any) {}\n/**\n * @abstract\n * @param {?} el\n * @return {?}\n */\ncreateShadowRoot(el: any) {}\n/**\n * @abstract\n * @param {?} el\n * @return {?}\n */\ngetShadowRoot(el: any) {}\n/**\n * @abstract\n * @param {?} el\n * @return {?}\n */\ngetHost(el: any) {}\n/**\n * @abstract\n * @param {?} el\n * @return {?}\n */\ngetDistributedNodes(el: any) {}\n/**\n * @abstract\n * @param {?} node\n * @return {?}\n */\nclone /*<T extends Node>*/ (node: Node) {}\n/**\n * @abstract\n * @param {?} element\n * @param {?} name\n * @return {?}\n */\ngetElementsByClassName(element: any, name: string) {}\n/**\n * @abstract\n * @param {?} element\n * @param {?} name\n * @return {?}\n */\ngetElementsByTagName(element: any, name: string) {}\n/**\n * @abstract\n * @param {?} element\n * @return {?}\n */\nclassList(element: any) {}\n/**\n * @abstract\n * @param {?} element\n * @param {?} className\n * @return {?}\n */\naddClass(element: any, className: string) {}\n/**\n * @abstract\n * @param {?} element\n * @param {?} className\n * @return {?}\n */\nremoveClass(element: any, className: string) {}\n/**\n * @abstract\n * @param {?} element\n * @param {?} className\n * @return {?}\n */\nhasClass(element: any, className: string) {}\n/**\n * @abstract\n * @param {?} element\n * @param {?} styleName\n * @param {?} styleValue\n * @return {?}\n */\nsetStyle(element: any, styleName: string, styleValue: string) {}\n/**\n * @abstract\n * @param {?} element\n * @param {?} styleName\n * @return {?}\n */\nremoveStyle(element: any, styleName: string) {}\n/**\n * @abstract\n * @param {?} element\n * @param {?} styleName\n * @return {?}\n */\ngetStyle(element: any, styleName: string) {}\n/**\n * @abstract\n * @param {?} element\n * @param {?} styleName\n * @param {?=} styleValue\n * @return {?}\n */\nhasStyle(element: any, styleName: string, styleValue?: string) {}\n/**\n * @abstract\n * @param {?} element\n * @return {?}\n */\ntagName(element: any) {}\n/**\n * @abstract\n * @param {?} element\n * @return {?}\n */\nattributeMap(element: any) {}\n/**\n * @abstract\n * @param {?} element\n * @param {?} attribute\n * @return {?}\n */\nhasAttribute(element: any, attribute: string) {}\n/**\n * @abstract\n * @param {?} element\n * @param {?} ns\n * @param {?} attribute\n * @return {?}\n */\nhasAttributeNS(element: any, ns: string, attribute: string) {}\n/**\n * @abstract\n * @param {?} element\n * @param {?} attribute\n * @return {?}\n */\ngetAttribute(element: any, attribute: string) {}\n/**\n * @abstract\n * @param {?} element\n * @param {?} ns\n * @param {?} attribute\n * @return {?}\n */\ngetAttributeNS(element: any, ns: string, attribute: string) {}\n/**\n * @abstract\n * @param {?} element\n * @param {?} name\n * @param {?} value\n * @return {?}\n */\nsetAttribute(element: any, name: string, value: string) {}\n/**\n * @abstract\n * @param {?} element\n * @param {?} ns\n * @param {?} name\n * @param {?} value\n * @return {?}\n */\nsetAttributeNS(element: any, ns: string, name: string, value: string) {}\n/**\n * @abstract\n * @param {?} element\n * @param {?} attribute\n * @return {?}\n */\nremoveAttribute(element: any, attribute: string) {}\n/**\n * @abstract\n * @param {?} element\n * @param {?} ns\n * @param {?} attribute\n * @return {?}\n */\nremoveAttributeNS(element: any, ns: string, attribute: string) {}\n/**\n * @abstract\n * @param {?} el\n * @return {?}\n */\ntemplateAwareRoot(el: any) {}\n/**\n * @abstract\n * @return {?}\n */\ncreateHtmlDocument() {}\n/**\n * @abstract\n * @param {?} el\n * @return {?}\n */\ngetBoundingClientRect(el: any) {}\n/**\n * @abstract\n * @param {?} doc\n * @return {?}\n */\ngetTitle(doc: Document) {}\n/**\n * @abstract\n * @param {?} doc\n * @param {?} newTitle\n * @return {?}\n */\nsetTitle(doc: Document, newTitle: string) {}\n/**\n * @abstract\n * @param {?} n\n * @param {?} selector\n * @return {?}\n */\nelementMatches(n: any, selector: string) {}\n/**\n * @abstract\n * @param {?} el\n * @return {?}\n */\nisTemplateElement(el: any) {}\n/**\n * @abstract\n * @param {?} node\n * @return {?}\n */\nisTextNode(node: any) {}\n/**\n * @abstract\n * @param {?} node\n * @return {?}\n */\nisCommentNode(node: any) {}\n/**\n * @abstract\n * @param {?} node\n * @return {?}\n */\nisElementNode(node: any) {}\n/**\n * @abstract\n * @param {?} node\n * @return {?}\n */\nhasShadowRoot(node: any) {}\n/**\n * @abstract\n * @param {?} node\n * @return {?}\n */\nisShadowRoot(node: any) {}\n/**\n * @abstract\n * @param {?} node\n * @return {?}\n */\nimportIntoDoc /*<T extends Node>*/ (node: Node) {}\n/**\n * @abstract\n * @param {?} node\n * @return {?}\n */\nadoptNode /*<T extends Node>*/ (node: Node) {}\n/**\n * @abstract\n * @param {?} element\n * @return {?}\n */\ngetHref(element: any) {}\n/**\n * @abstract\n * @param {?} event\n * @return {?}\n */\ngetEventKey(event: any) {}\n/**\n * @abstract\n * @param {?} element\n * @param {?} baseUrl\n * @param {?} href\n * @return {?}\n */\nresolveAndSetHref(element: any, baseUrl: string, href: string) {}\n/**\n * @abstract\n * @return {?}\n */\nsupportsDOMEvents() {}\n/**\n * @abstract\n * @return {?}\n */\nsupportsNativeShadowDOM() {}\n/**\n * @abstract\n * @param {?} doc\n * @param {?} target\n * @return {?}\n */\ngetGlobalEventTarget(doc: Document, target: string) {}\n/**\n * @abstract\n * @return {?}\n */\ngetHistory() {}\n/**\n * @abstract\n * @return {?}\n */\ngetLocation() {}\n/**\n * @abstract\n * @param {?} doc\n * @return {?}\n */\ngetBaseHref(doc: Document) {}\n/**\n * @abstract\n * @return {?}\n */\nresetBaseElement() {}\n/**\n * @abstract\n * @return {?}\n */\ngetUserAgent() {}\n/**\n * @abstract\n * @param {?} element\n * @param {?} name\n * @param {?} value\n * @return {?}\n */\nsetData(element: any, name: string, value: string) {}\n/**\n * @abstract\n * @param {?} element\n * @return {?}\n */\ngetComputedStyle(element: any) {}\n/**\n * @abstract\n * @param {?} element\n * @param {?} name\n * @return {?}\n */\ngetData(element: any, name: string) {}\n/**\n * @abstract\n * @param {?} name\n * @param {?} value\n * @return {?}\n */\nsetGlobalVar(name: string, value: any) {}\n/**\n * @abstract\n * @return {?}\n */\nsupportsWebAnimation() {}\n/**\n * @abstract\n * @return {?}\n */\nperformanceNow() {}\n/**\n * @abstract\n * @return {?}\n */\ngetAnimationPrefix() {}\n/**\n * @abstract\n * @return {?}\n */\ngetTransitionEnd() {}\n/**\n * @abstract\n * @return {?}\n */\nsupportsAnimation() {}\n/**\n * @abstract\n * @return {?}\n */\nsupportsCookies() {}\n/**\n * @abstract\n * @param {?} name\n * @return {?}\n */\ngetCookie(name: string) {}\n/**\n * @abstract\n * @param {?} name\n * @param {?} value\n * @return {?}\n */\nsetCookie(name: string, value: string) {}\n}\n\nfunction DomAdapter_tsickle_Closure_declarations() {\n/** @type {?} */\nDomAdapter.prototype.resourceLoaderType;\n/**\n * \\@internal\n * @type {?}\n */\nDomAdapter.prototype._attrToPropMap;\n}\n\n"],"names":["window","Testability","RendererFactory2","ErrorHandler","NgModule","APP_ID","createPlatformFactory","platformCore","Inject","Injectable","SecurityContext","isDevMode","InjectionToken","RendererStyleFlags2","ViewEncapsulation","NgZone","Optional","APP_INITIALIZER","core.ApplicationRef","global","ɵglobal","setTestabilityGetter","PlatformLocation"],"mappings":"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"}