@angular/platform-browser 5.2.1 → 5.2.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["platform-browser.umd.js"],"names":["global","factory","exports","module","require","define","amd","ng","platformBrowser","common","core","this","_angular_common","_angular_core","__extends","d","b","__","constructor","extendStatics","prototype","Object","create","getDOM","_DOM","setRootDomAdapter","adapter","getBaseElementHref","baseElement","document","querySelector","getAttribute","relativePath","url","urlParsingNode","createElement","setAttribute","pathname","charAt","supportsState","window","history","pushState","appInitializerFactory","transitionId","injector","get","ApplicationInitStatus","donePromise","then","dom","Array","slice","apply","querySelectorAll","filter","el","forEach","remove","exportNgVar","name","value","COMPILED","ɵglobal","inspectNativeElement","element","getDebugNode","_createNgProbe","coreTokens","INSPECT_GLOBAL_NAME","CORE_TOKENS_GLOBAL_NAME","__assign","CORE_TOKENS","_ngProbeTokensToMap","tokens","reduce","prev","t","token","shimContentAttribute","componentShortId","CONTENT_ATTR","replace","COMPONENT_REGEX","shimHostAttribute","HOST_ATTR","flattenStyles","compId","styles","target","i","length","style","isArray","push","decoratePreventDefault","eventHandler","event","preventDefault","returnValue","checkNoSyntheticProp","nameKind","charCodeAt","AT_CHARCODE","Error","sanitizeUrl","String","match","SAFE_URL_PATTERN","DATA_URL_PATTERN","isDevMode","log","sanitizeSrcset","srcset","split","map","trim","join","getInertElement","inertElement","DOM","templateEl","doc","createHtmlDocument","html","appendChild","tagSet","tags","res","_i","_a","merge","sets","arguments","sets_1","s","v","hasOwnProperty","checkClobberedElement","node","nextNode","contains","getOuterHTML","encodeEntities","SURROGATE_PAIR_REGEXP","NON_ALPHANUMERIC_REGEXP","stripCustomNsAttrs","attributeMap","_","attrName","indexOf","removeAttribute","childNodesAsList","n","isElementNode","sanitizeHtml","defaultDoc","unsafeHtmlInput","containerEl","unsafeHtml","mXSSAttempts","parsedHtml","setInnerHTML","documentMode","getInnerHTML","sanitizer","SanitizingHtmlSerializer","safeHtml","sanitizeChildren","getTemplateContent","parent_1","child","removeChild","sanitizedSomething","e","hasBalancedQuotes","outsideSingle","outsideDouble","c","sanitizeStyle","urlMatch","URL_RE","SAFE_STYLE_VALUE","initDomAdapter","BrowserDomAdapter","makeCurrent","BrowserGetTestability","init","errorHandler","ErrorHandler","_document","enableDebugTools","ref","PROFILER_GLOBAL_NAME","AngularProfiler","disableDebugTools","escapeHtml","text","escapedText","&","\"","'","<",">","unescapeHtml","unescapedText","&a;","&q;","&s;","&l;","&g;","makeStateKey","key","initTransferState","appId","script","getElementById","initialState","textContent","JSON","parse","console","warn","TransferState","nodeContains","setPrototypeOf","__proto__","p","assign","call","DomAdapter","resourceLoaderType","defineProperty","_attrToPropMap","set","enumerable","configurable","GenericBrowserDomAdapter","_super","_this","_animationPrefix","_transitionEnd","element_1","getStyle","domPrefixes","toLowerCase","transEndEventNames_1","WebkitTransition","MozTransition","OTransition","transition","keys","getDistributedNodes","resolveAndSetHref","baseUrl","href","supportsDOMEvents","supportsNativeShadowDOM","createShadowRoot","getAnimationPrefix","getTransitionEnd","supportsAnimation","class","innerHtml","readonly","tabindex","_keyMap","\b","\t","","\u001b","Del","Esc","Left","Right","Up","Down","Menu","Scroll","Win","_chromeNumKeyPadMap","A","B","C","D","E","F","G","H","I","J","K","M","N","O","`","","compareDocumentPosition","blackListedMap","templateHtml","hasProperty","setProperty","getProperty","invoke","methodName","args","logError","error","logGroup","group","logGroupEnd","groupEnd","nodeA","nodeB","selector","on","evt","listener","addEventListener","onAndCancel","removeEventListener","dispatchEvent","createMouseEvent","eventType","getDefaultDocument","createEvent","initEvent","isPrevented","defaultPrevented","innerHTML","isTemplateElement","content","outerHTML","nodeName","nodeValue","type","firstChild","nextSibling","parentElement","parentNode","childNodes","clearNodes","replaceChild","newChild","oldChild","insertBefore","parent","insertAllBefore","nodes","insertAfter","getText","setText","getValue","setValue","getChecked","checked","setChecked","createComment","createTemplate","tagName","createElementNS","ns","createTextNode","createScriptTag","attrValue","createStyleElement","css","getShadowRoot","shadowRoot","getHost","host","clone","cloneNode","getElementsByClassName","getElementsByTagName","classList","addClass","className","add","removeClass","hasClass","setStyle","styleName","styleValue","removeStyle","stylename","hasStyle","Map","elAttrs","attributes","attrib","item","hasAttribute","attribute","hasAttributeNS","getAttributeNS","setAttributeNS","removeAttributeNS","templateAwareRoot","implementation","createHTMLDocument","getBoundingClientRect","top","bottom","left","right","width","height","getTitle","title","setTitle","newTitle","elementMatches","matches","msMatchesSelector","webkitMatchesSelector","isTextNode","nodeType","Node","TEXT_NODE","isCommentNode","COMMENT_NODE","ELEMENT_NODE","hasShadowRoot","HTMLElement","isShadowRoot","DocumentFragment","importIntoDoc","importNode","adoptNode","getHref","getEventKey","keyIdentifier","startsWith","fromCharCode","parseInt","substring","location","getGlobalEventTarget","body","getHistory","getLocation","getBaseHref","resetBaseElement","getUserAgent","navigator","userAgent","setData","getData","getComputedStyle","supportsWebAnimation","performanceNow","performance","now","Date","getTime","supportsCookies","getCookie","ɵparseCookieValue","cookie","setCookie","encodeURIComponent","DOCUMENT$1","DOCUMENT","BrowserPlatformLocation","_doc","_init","_history","getBaseHrefFromDOM","onPopState","fn","onHashChange","newPath","search","hash","state","replaceState","forward","back","decorators","Injectable","ctorParameters","undefined","Inject","PlatformLocation","Meta","_dom","addTag","tag","forceCreation","_getOrCreateElement","addTags","result","getTag","attrSelector","getTags","list","updateTag","_parseSelector","meta","_setMetaElementAttributes","removeTag","removeTagElement","elem","_containsAttributes","head","prop","attr","every","TRANSITION_ID","InjectionToken","SERVER_TRANSITION_PROVIDERS","provide","APP_INITIALIZER","useFactory","deps","Injector","multi","setTestabilityGetter","addToWindow","registry","findInAncestors","testability","findTestabilityInTree","getAllTestabilities","getAllRootElements","whenAllStable","callback","testabilities","count","didWork","decrement","didWork_","whenStable","getTestability","Title","ApplicationRef","NgZone","ELEMENT_PROBE_PROVIDERS","NgProbeToken","Optional","EVENT_MANAGER_PLUGINS","EventManager","plugins","_zone","_eventNameToPlugin","manager","_plugins","reverse","eventName","handler","_findPluginFor","addGlobalEventListener","getZone","plugin","plugin_1","supports","EventManagerPlugin","SharedStylesHost","_stylesSet","Set","addStyles","additions","has","onStylesAdded","getAllStyles","from","DomSharedStylesHost","_hostNodes","_styleNodes","_addStylesToHost","styleEl","addHost","hostNode","removeHost","delete","ngOnDestroy","styleNode","NAMESPACE_URIS","svg","xhtml","xlink","xml","xmlns","DomRendererFactory2","eventManager","sharedStylesHost","rendererByCompId","defaultRenderer","DefaultDomRenderer2","createRenderer","encapsulation","ViewEncapsulation","Emulated","renderer","id","EmulatedEncapsulationDomRenderer2","applyToHost","Native","ShadowDomRenderer","begin","end","data","destroy","namespace","createText","refChild","selectRootElement","selectorOrNode","namespaceUri","flags","RendererStyleFlags2","DashCase","Important","removeProperty","listen","component","contentAttr","hostAttr","hostEl","nodeOrShadowRoot","ɵ0","__symbol__","Zone","ADD_EVENT_LISTENER","REMOVE_EVENT_LISTENER","symbolNames","stopSymbol","blackListedEvents","isBlackListedEvent","globalListener","symbolName","taskDatas","taskData","zone","current","run","copiedTasks","DomEventsPlugin","ngZone","patchEvent","Event","delegate","stopImmediatePropagation","zoneJsLoaded","isInAngularZone","globalListenerRegistered","root","callbackRegistered","underlyingRemove","found","splice","EVENT_NAMES","pan","panstart","panmove","panend","pancancel","panleft","panright","panup","pandown","pinch","pinchstart","pinchmove","pinchend","pinchcancel","pinchin","pinchout","press","pressup","rotate","rotatestart","rotatemove","rotateend","rotatecancel","swipe","swipeleft","swiperight","swipeup","swipedown","tap","HAMMER_GESTURE_CONFIG","HammerGestureConfig","events","overrides","buildHammer","mc","Hammer","enable","HammerGesturesPlugin","_config","isCustomEvent","runOutsideAngular","eventObj","runGuarded","off","MODIFIER_KEYS","ɵ0$1","altKey","ɵ1$1","ctrlKey","ɵ2$1","metaKey","ɵ3","shiftKey","MODIFIER_KEY_GETTERS","alt","control","shift","KeyEventsPlugin","parseEventName","parsedEvent","outsideHandler","eventCallback","parts","domEventName","_normalizeKey","pop","fullKey","modifierName","index","getEventFullKey","modifierGetter","keyName","VOID_ELEMENTS","OPTIONAL_END_TAG_BLOCK_ELEMENTS","OPTIONAL_END_TAG_INLINE_ELEMENTS","OPTIONAL_END_TAG_ELEMENTS","BLOCK_ELEMENTS","INLINE_ELEMENTS","VALID_ELEMENTS","URI_ATTRS","SRCSET_ATTRS","HTML_ATTRS","VALID_ATTRS","buf","startElement","chars","endElement","next","lower","RegExp","DomSanitizer","DomSanitizerImpl","sanitize","ctx","SecurityContext","NONE","HTML","SafeHtmlImpl","changingThisBreaksApplicationSecurity","checkNotSafeValue","STYLE","SafeStyleImpl","SCRIPT","SafeScriptImpl","URL","SafeResourceUrlImpl","SafeUrlImpl","RESOURCE_URL","expectedType","SafeValueImpl","getTypeName","bypassSecurityTrustHtml","bypassSecurityTrustStyle","bypassSecurityTrustScript","bypassSecurityTrustUrl","bypassSecurityTrustResourceUrl","toString","INTERNAL_BROWSER_PLATFORM_PROVIDERS","PLATFORM_ID","useValue","ɵPLATFORM_BROWSER_ID","PLATFORM_INITIALIZER","useClass","BROWSER_SANITIZATION_PROVIDERS","Sanitizer","useExisting","createPlatformFactory","platformCore","BrowserModule","parentModule","withServerTransition","params","ngModule","providers","APP_ID","NgModule","RendererFactory2","Testability","CommonModule","ApplicationModule","SkipSelf","win","ChangeDetectionPerfRecord","msPerTick","numTicks","appRef","timeChangeDetection","config","record","isProfilerAvailable","profile","start","tick","toFixed","store","onSerializeCallbacks","initState","transferState","defaultValue","hasKey","onSerialize","toJson","stringify","BrowserTransferStateModule","By","all","debugElement","nativeElement","directive","VERSION","Version","ɵBROWSER_SANITIZATION_PROVIDERS","ɵINTERNAL_BROWSER_PLATFORM_PROVIDERS","ɵinitDomAdapter","ɵBrowserDomAdapter","ɵBrowserPlatformLocation","ɵTRANSITION_ID","ɵBrowserGetTestability","ɵescapeHtml","ɵELEMENT_PROBE_PROVIDERS","ɵDomAdapter","ɵgetDOM","ɵsetRootDomAdapter","ɵDomRendererFactory2","ɵNAMESPACE_URIS","ɵflattenStyles","ɵshimContentAttribute","ɵshimHostAttribute","ɵDomEventsPlugin","ɵHammerGesturesPlugin","ɵKeyEventsPlugin","ɵDomSharedStylesHost","ɵSharedStylesHost","ɵb","ɵa","ɵi","ɵg","ɵf","ɵc","ɵh","ɵd","ɵe"],"mappings":"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","file":"platform-browser.umd.min.js","sourcesContent":["/**\n * @license Angular v5.2.1\n * (c) 2010-2018 Google, Inc. https://angular.io/\n * License: MIT\n */\n(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/common'), require('@angular/core')) :\n\ttypeof define === 'function' && define.amd ? define('@angular/platform-browser', ['exports', '@angular/common', '@angular/core'], factory) :\n\t(factory((global.ng = global.ng || {}, global.ng.platformBrowser = {}),global.ng.common,global.ng.core));\n}(this, (function (exports,_angular_common,_angular_core) { 'use strict';\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n\r\nfunction __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nvar __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n};\n\n/**\n * @license Angular v5.2.1\n * (c) 2010-2018 Google, Inc. https://angular.io/\n * License: MIT\n */\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\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 */\nvar _DOM = /** @type {?} */ ((null));\n/**\n * @return {?}\n */\nfunction getDOM() {\n return _DOM;\n}\n/**\n * @param {?} adapter\n * @return {?}\n */\n\n/**\n * @param {?} adapter\n * @return {?}\n */\nfunction setRootDomAdapter(adapter) {\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 */\nvar DomAdapter = /** @class */ (function () {\n function DomAdapter() {\n this.resourceLoaderType = /** @type {?} */ ((null));\n }\n Object.defineProperty(DomAdapter.prototype, \"attrToPropMap\", {\n /**\n * Maps attribute names to their corresponding property names for cases\n * where attribute name doesn't match property name.\n */\n get: /**\n * Maps attribute names to their corresponding property names for cases\n * where attribute name doesn't match property name.\n * @return {?}\n */\n function () { return this._attrToPropMap; },\n set: /**\n * @param {?} value\n * @return {?}\n */\n function (value) { this._attrToPropMap = value; },\n enumerable: true,\n configurable: true\n });\n return DomAdapter;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\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 * 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 */\nvar GenericBrowserDomAdapter = /** @class */ (function (_super) {\n __extends(GenericBrowserDomAdapter, _super);\n function GenericBrowserDomAdapter() {\n var _this = _super.call(this) || this;\n _this._animationPrefix = null;\n _this._transitionEnd = null;\n try {\n var /** @type {?} */ element_1 = _this.createElement('div', document);\n if (_this.getStyle(element_1, 'animationName') != null) {\n _this._animationPrefix = '';\n }\n else {\n var /** @type {?} */ domPrefixes = ['Webkit', 'Moz', 'O', 'ms'];\n for (var /** @type {?} */ i = 0; i < domPrefixes.length; i++) {\n if (_this.getStyle(element_1, domPrefixes[i] + 'AnimationName') != null) {\n _this._animationPrefix = '-' + domPrefixes[i].toLowerCase() + '-';\n break;\n }\n }\n }\n var /** @type {?} */ transEndEventNames_1 = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend'\n };\n Object.keys(transEndEventNames_1).forEach(function (key) {\n if (_this.getStyle(element_1, key) != null) {\n _this._transitionEnd = transEndEventNames_1[key];\n }\n });\n }\n catch (/** @type {?} */ e) {\n _this._animationPrefix = null;\n _this._transitionEnd = null;\n }\n return _this;\n }\n /**\n * @param {?} el\n * @return {?}\n */\n GenericBrowserDomAdapter.prototype.getDistributedNodes = /**\n * @param {?} el\n * @return {?}\n */\n function (el) { return (/** @type {?} */ (el)).getDistributedNodes(); };\n /**\n * @param {?} el\n * @param {?} baseUrl\n * @param {?} href\n * @return {?}\n */\n GenericBrowserDomAdapter.prototype.resolveAndSetHref = /**\n * @param {?} el\n * @param {?} baseUrl\n * @param {?} href\n * @return {?}\n */\n function (el, baseUrl, href) {\n el.href = href == null ? baseUrl : baseUrl + '/../' + href;\n };\n /**\n * @return {?}\n */\n GenericBrowserDomAdapter.prototype.supportsDOMEvents = /**\n * @return {?}\n */\n function () { return true; };\n /**\n * @return {?}\n */\n GenericBrowserDomAdapter.prototype.supportsNativeShadowDOM = /**\n * @return {?}\n */\n function () {\n return typeof (/** @type {?} */ (document.body)).createShadowRoot === 'function';\n };\n /**\n * @return {?}\n */\n GenericBrowserDomAdapter.prototype.getAnimationPrefix = /**\n * @return {?}\n */\n function () { return this._animationPrefix ? this._animationPrefix : ''; };\n /**\n * @return {?}\n */\n GenericBrowserDomAdapter.prototype.getTransitionEnd = /**\n * @return {?}\n */\n function () { return this._transitionEnd ? this._transitionEnd : ''; };\n /**\n * @return {?}\n */\n GenericBrowserDomAdapter.prototype.supportsAnimation = /**\n * @return {?}\n */\n function () {\n return this._animationPrefix != null && this._transitionEnd != null;\n };\n return GenericBrowserDomAdapter;\n}(DomAdapter));\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\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 */\nvar _attrToPropMap = {\n 'class': 'className',\n 'innerHtml': 'innerHTML',\n 'readonly': 'readOnly',\n 'tabindex': 'tabIndex',\n};\nvar DOM_KEY_LOCATION_NUMPAD = 3;\n// Map to convert some key or keyIdentifier values to what will be returned by getEventKey\nvar _keyMap = {\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// 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 ...\nvar _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};\nvar nodeContains;\nif (_angular_core.ɵglobal['Node']) {\n nodeContains = _angular_core.ɵglobal['Node'].prototype.contains || function (node) {\n return !!(this.compareDocumentPosition(node) & 16);\n };\n}\n/**\n * A `DomAdapter` powered by full browser DOM APIs.\n *\n * \\@security Tread carefully! Interacting with the DOM directly is dangerous and\n * can introduce XSS risks.\n */\nvar BrowserDomAdapter = /** @class */ (function (_super) {\n __extends(BrowserDomAdapter, _super);\n function BrowserDomAdapter() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {?} templateHtml\n * @return {?}\n */\n BrowserDomAdapter.prototype.parse = /**\n * @param {?} templateHtml\n * @return {?}\n */\n function (templateHtml) { throw new Error('parse not implemented'); };\n /**\n * @return {?}\n */\n BrowserDomAdapter.makeCurrent = /**\n * @return {?}\n */\n function () { setRootDomAdapter(new BrowserDomAdapter()); };\n /**\n * @param {?} element\n * @param {?} name\n * @return {?}\n */\n BrowserDomAdapter.prototype.hasProperty = /**\n * @param {?} element\n * @param {?} name\n * @return {?}\n */\n function (element, name) { return name in element; };\n /**\n * @param {?} el\n * @param {?} name\n * @param {?} value\n * @return {?}\n */\n BrowserDomAdapter.prototype.setProperty = /**\n * @param {?} el\n * @param {?} name\n * @param {?} value\n * @return {?}\n */\n function (el, name, value) { (/** @type {?} */ (el))[name] = value; };\n /**\n * @param {?} el\n * @param {?} name\n * @return {?}\n */\n BrowserDomAdapter.prototype.getProperty = /**\n * @param {?} el\n * @param {?} name\n * @return {?}\n */\n function (el, name) { return (/** @type {?} */ (el))[name]; };\n /**\n * @param {?} el\n * @param {?} methodName\n * @param {?} args\n * @return {?}\n */\n BrowserDomAdapter.prototype.invoke = /**\n * @param {?} el\n * @param {?} methodName\n * @param {?} args\n * @return {?}\n */\n function (el, methodName, args) {\n (_a = (/** @type {?} */ (el)))[methodName].apply(_a, args);\n var _a;\n };\n // TODO(tbosch): move this into a separate environment class once we have it\n /**\n * @param {?} error\n * @return {?}\n */\n BrowserDomAdapter.prototype.logError = /**\n * @param {?} error\n * @return {?}\n */\n function (error) {\n if (window.console) {\n if (console.error) {\n console.error(error);\n }\n else {\n console.log(error);\n }\n }\n };\n /**\n * @param {?} error\n * @return {?}\n */\n BrowserDomAdapter.prototype.log = /**\n * @param {?} error\n * @return {?}\n */\n function (error) {\n if (window.console) {\n window.console.log && window.console.log(error);\n }\n };\n /**\n * @param {?} error\n * @return {?}\n */\n BrowserDomAdapter.prototype.logGroup = /**\n * @param {?} error\n * @return {?}\n */\n function (error) {\n if (window.console) {\n window.console.group && window.console.group(error);\n }\n };\n /**\n * @return {?}\n */\n BrowserDomAdapter.prototype.logGroupEnd = /**\n * @return {?}\n */\n function () {\n if (window.console) {\n window.console.groupEnd && window.console.groupEnd();\n }\n };\n Object.defineProperty(BrowserDomAdapter.prototype, \"attrToPropMap\", {\n get: /**\n * @return {?}\n */\n function () { return _attrToPropMap; },\n enumerable: true,\n configurable: true\n });\n /**\n * @param {?} nodeA\n * @param {?} nodeB\n * @return {?}\n */\n BrowserDomAdapter.prototype.contains = /**\n * @param {?} nodeA\n * @param {?} nodeB\n * @return {?}\n */\n function (nodeA, nodeB) { return nodeContains.call(nodeA, nodeB); };\n /**\n * @param {?} el\n * @param {?} selector\n * @return {?}\n */\n BrowserDomAdapter.prototype.querySelector = /**\n * @param {?} el\n * @param {?} selector\n * @return {?}\n */\n function (el, selector) { return el.querySelector(selector); };\n /**\n * @param {?} el\n * @param {?} selector\n * @return {?}\n */\n BrowserDomAdapter.prototype.querySelectorAll = /**\n * @param {?} el\n * @param {?} selector\n * @return {?}\n */\n function (el, selector) { return el.querySelectorAll(selector); };\n /**\n * @param {?} el\n * @param {?} evt\n * @param {?} listener\n * @return {?}\n */\n BrowserDomAdapter.prototype.on = /**\n * @param {?} el\n * @param {?} evt\n * @param {?} listener\n * @return {?}\n */\n function (el, evt, listener) { el.addEventListener(evt, listener, false); };\n /**\n * @param {?} el\n * @param {?} evt\n * @param {?} listener\n * @return {?}\n */\n BrowserDomAdapter.prototype.onAndCancel = /**\n * @param {?} el\n * @param {?} evt\n * @param {?} listener\n * @return {?}\n */\n function (el, evt, listener) {\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 function () { el.removeEventListener(evt, listener, false); };\n };\n /**\n * @param {?} el\n * @param {?} evt\n * @return {?}\n */\n BrowserDomAdapter.prototype.dispatchEvent = /**\n * @param {?} el\n * @param {?} evt\n * @return {?}\n */\n function (el, evt) { el.dispatchEvent(evt); };\n /**\n * @param {?} eventType\n * @return {?}\n */\n BrowserDomAdapter.prototype.createMouseEvent = /**\n * @param {?} eventType\n * @return {?}\n */\n function (eventType) {\n var /** @type {?} */ evt = this.getDefaultDocument().createEvent('MouseEvent');\n evt.initEvent(eventType, true, true);\n return evt;\n };\n /**\n * @param {?} eventType\n * @return {?}\n */\n BrowserDomAdapter.prototype.createEvent = /**\n * @param {?} eventType\n * @return {?}\n */\n function (eventType) {\n var /** @type {?} */ evt = this.getDefaultDocument().createEvent('Event');\n evt.initEvent(eventType, true, true);\n return evt;\n };\n /**\n * @param {?} evt\n * @return {?}\n */\n BrowserDomAdapter.prototype.preventDefault = /**\n * @param {?} evt\n * @return {?}\n */\n function (evt) {\n evt.preventDefault();\n evt.returnValue = false;\n };\n /**\n * @param {?} evt\n * @return {?}\n */\n BrowserDomAdapter.prototype.isPrevented = /**\n * @param {?} evt\n * @return {?}\n */\n function (evt) {\n return evt.defaultPrevented || evt.returnValue != null && !evt.returnValue;\n };\n /**\n * @param {?} el\n * @return {?}\n */\n BrowserDomAdapter.prototype.getInnerHTML = /**\n * @param {?} el\n * @return {?}\n */\n function (el) { return el.innerHTML; };\n /**\n * @param {?} el\n * @return {?}\n */\n BrowserDomAdapter.prototype.getTemplateContent = /**\n * @param {?} el\n * @return {?}\n */\n function (el) {\n return 'content' in el && this.isTemplateElement(el) ? (/** @type {?} */ (el)).content : null;\n };\n /**\n * @param {?} el\n * @return {?}\n */\n BrowserDomAdapter.prototype.getOuterHTML = /**\n * @param {?} el\n * @return {?}\n */\n function (el) { return el.outerHTML; };\n /**\n * @param {?} node\n * @return {?}\n */\n BrowserDomAdapter.prototype.nodeName = /**\n * @param {?} node\n * @return {?}\n */\n function (node) { return node.nodeName; };\n /**\n * @param {?} node\n * @return {?}\n */\n BrowserDomAdapter.prototype.nodeValue = /**\n * @param {?} node\n * @return {?}\n */\n function (node) { return node.nodeValue; };\n /**\n * @param {?} node\n * @return {?}\n */\n BrowserDomAdapter.prototype.type = /**\n * @param {?} node\n * @return {?}\n */\n function (node) { return node.type; };\n /**\n * @param {?} node\n * @return {?}\n */\n BrowserDomAdapter.prototype.content = /**\n * @param {?} node\n * @return {?}\n */\n function (node) {\n if (this.hasProperty(node, 'content')) {\n return (/** @type {?} */ (node)).content;\n }\n else {\n return node;\n }\n };\n /**\n * @param {?} el\n * @return {?}\n */\n BrowserDomAdapter.prototype.firstChild = /**\n * @param {?} el\n * @return {?}\n */\n function (el) { return el.firstChild; };\n /**\n * @param {?} el\n * @return {?}\n */\n BrowserDomAdapter.prototype.nextSibling = /**\n * @param {?} el\n * @return {?}\n */\n function (el) { return el.nextSibling; };\n /**\n * @param {?} el\n * @return {?}\n */\n BrowserDomAdapter.prototype.parentElement = /**\n * @param {?} el\n * @return {?}\n */\n function (el) { return el.parentNode; };\n /**\n * @param {?} el\n * @return {?}\n */\n BrowserDomAdapter.prototype.childNodes = /**\n * @param {?} el\n * @return {?}\n */\n function (el) { return el.childNodes; };\n /**\n * @param {?} el\n * @return {?}\n */\n BrowserDomAdapter.prototype.childNodesAsList = /**\n * @param {?} el\n * @return {?}\n */\n function (el) {\n var /** @type {?} */ childNodes = el.childNodes;\n var /** @type {?} */ res = new Array(childNodes.length);\n for (var /** @type {?} */ i = 0; i < childNodes.length; i++) {\n res[i] = childNodes[i];\n }\n return res;\n };\n /**\n * @param {?} el\n * @return {?}\n */\n BrowserDomAdapter.prototype.clearNodes = /**\n * @param {?} el\n * @return {?}\n */\n function (el) {\n while (el.firstChild) {\n el.removeChild(el.firstChild);\n }\n };\n /**\n * @param {?} el\n * @param {?} node\n * @return {?}\n */\n BrowserDomAdapter.prototype.appendChild = /**\n * @param {?} el\n * @param {?} node\n * @return {?}\n */\n function (el, node) { el.appendChild(node); };\n /**\n * @param {?} el\n * @param {?} node\n * @return {?}\n */\n BrowserDomAdapter.prototype.removeChild = /**\n * @param {?} el\n * @param {?} node\n * @return {?}\n */\n function (el, node) { el.removeChild(node); };\n /**\n * @param {?} el\n * @param {?} newChild\n * @param {?} oldChild\n * @return {?}\n */\n BrowserDomAdapter.prototype.replaceChild = /**\n * @param {?} el\n * @param {?} newChild\n * @param {?} oldChild\n * @return {?}\n */\n function (el, newChild, oldChild) { el.replaceChild(newChild, oldChild); };\n /**\n * @param {?} node\n * @return {?}\n */\n BrowserDomAdapter.prototype.remove = /**\n * @param {?} node\n * @return {?}\n */\n function (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 */\n BrowserDomAdapter.prototype.insertBefore = /**\n * @param {?} parent\n * @param {?} ref\n * @param {?} node\n * @return {?}\n */\n function (parent, ref, node) { parent.insertBefore(node, ref); };\n /**\n * @param {?} parent\n * @param {?} ref\n * @param {?} nodes\n * @return {?}\n */\n BrowserDomAdapter.prototype.insertAllBefore = /**\n * @param {?} parent\n * @param {?} ref\n * @param {?} nodes\n * @return {?}\n */\n function (parent, ref, nodes) {\n nodes.forEach(function (n) { return parent.insertBefore(n, ref); });\n };\n /**\n * @param {?} parent\n * @param {?} ref\n * @param {?} node\n * @return {?}\n */\n BrowserDomAdapter.prototype.insertAfter = /**\n * @param {?} parent\n * @param {?} ref\n * @param {?} node\n * @return {?}\n */\n function (parent, ref, node) { parent.insertBefore(node, ref.nextSibling); };\n /**\n * @param {?} el\n * @param {?} value\n * @return {?}\n */\n BrowserDomAdapter.prototype.setInnerHTML = /**\n * @param {?} el\n * @param {?} value\n * @return {?}\n */\n function (el, value) { el.innerHTML = value; };\n /**\n * @param {?} el\n * @return {?}\n */\n BrowserDomAdapter.prototype.getText = /**\n * @param {?} el\n * @return {?}\n */\n function (el) { return el.textContent; };\n /**\n * @param {?} el\n * @param {?} value\n * @return {?}\n */\n BrowserDomAdapter.prototype.setText = /**\n * @param {?} el\n * @param {?} value\n * @return {?}\n */\n function (el, value) { el.textContent = value; };\n /**\n * @param {?} el\n * @return {?}\n */\n BrowserDomAdapter.prototype.getValue = /**\n * @param {?} el\n * @return {?}\n */\n function (el) { return el.value; };\n /**\n * @param {?} el\n * @param {?} value\n * @return {?}\n */\n BrowserDomAdapter.prototype.setValue = /**\n * @param {?} el\n * @param {?} value\n * @return {?}\n */\n function (el, value) { el.value = value; };\n /**\n * @param {?} el\n * @return {?}\n */\n BrowserDomAdapter.prototype.getChecked = /**\n * @param {?} el\n * @return {?}\n */\n function (el) { return el.checked; };\n /**\n * @param {?} el\n * @param {?} value\n * @return {?}\n */\n BrowserDomAdapter.prototype.setChecked = /**\n * @param {?} el\n * @param {?} value\n * @return {?}\n */\n function (el, value) { el.checked = value; };\n /**\n * @param {?} text\n * @return {?}\n */\n BrowserDomAdapter.prototype.createComment = /**\n * @param {?} text\n * @return {?}\n */\n function (text) { return this.getDefaultDocument().createComment(text); };\n /**\n * @param {?} html\n * @return {?}\n */\n BrowserDomAdapter.prototype.createTemplate = /**\n * @param {?} html\n * @return {?}\n */\n function (html) {\n var /** @type {?} */ t = this.getDefaultDocument().createElement('template');\n t.innerHTML = html;\n return t;\n };\n /**\n * @param {?} tagName\n * @param {?=} doc\n * @return {?}\n */\n BrowserDomAdapter.prototype.createElement = /**\n * @param {?} tagName\n * @param {?=} doc\n * @return {?}\n */\n function (tagName, doc) {\n doc = doc || this.getDefaultDocument();\n return doc.createElement(tagName);\n };\n /**\n * @param {?} ns\n * @param {?} tagName\n * @param {?=} doc\n * @return {?}\n */\n BrowserDomAdapter.prototype.createElementNS = /**\n * @param {?} ns\n * @param {?} tagName\n * @param {?=} doc\n * @return {?}\n */\n function (ns, tagName, doc) {\n doc = doc || this.getDefaultDocument();\n return doc.createElementNS(ns, tagName);\n };\n /**\n * @param {?} text\n * @param {?=} doc\n * @return {?}\n */\n BrowserDomAdapter.prototype.createTextNode = /**\n * @param {?} text\n * @param {?=} doc\n * @return {?}\n */\n function (text, doc) {\n doc = doc || this.getDefaultDocument();\n return doc.createTextNode(text);\n };\n /**\n * @param {?} attrName\n * @param {?} attrValue\n * @param {?=} doc\n * @return {?}\n */\n BrowserDomAdapter.prototype.createScriptTag = /**\n * @param {?} attrName\n * @param {?} attrValue\n * @param {?=} doc\n * @return {?}\n */\n function (attrName, attrValue, doc) {\n doc = doc || this.getDefaultDocument();\n var /** @type {?} */ el = /** @type {?} */ (doc.createElement('SCRIPT'));\n el.setAttribute(attrName, attrValue);\n return el;\n };\n /**\n * @param {?} css\n * @param {?=} doc\n * @return {?}\n */\n BrowserDomAdapter.prototype.createStyleElement = /**\n * @param {?} css\n * @param {?=} doc\n * @return {?}\n */\n function (css, doc) {\n doc = doc || this.getDefaultDocument();\n var /** @type {?} */ style = /** @type {?} */ (doc.createElement('style'));\n this.appendChild(style, this.createTextNode(css, doc));\n return style;\n };\n /**\n * @param {?} el\n * @return {?}\n */\n BrowserDomAdapter.prototype.createShadowRoot = /**\n * @param {?} el\n * @return {?}\n */\n function (el) { return (/** @type {?} */ (el)).createShadowRoot(); };\n /**\n * @param {?} el\n * @return {?}\n */\n BrowserDomAdapter.prototype.getShadowRoot = /**\n * @param {?} el\n * @return {?}\n */\n function (el) { return (/** @type {?} */ (el)).shadowRoot; };\n /**\n * @param {?} el\n * @return {?}\n */\n BrowserDomAdapter.prototype.getHost = /**\n * @param {?} el\n * @return {?}\n */\n function (el) { return (/** @type {?} */ (el)).host; };\n /**\n * @param {?} node\n * @return {?}\n */\n BrowserDomAdapter.prototype.clone = /**\n * @param {?} node\n * @return {?}\n */\n function (node) { return node.cloneNode(true); };\n /**\n * @param {?} element\n * @param {?} name\n * @return {?}\n */\n BrowserDomAdapter.prototype.getElementsByClassName = /**\n * @param {?} element\n * @param {?} name\n * @return {?}\n */\n function (element, name) {\n return element.getElementsByClassName(name);\n };\n /**\n * @param {?} element\n * @param {?} name\n * @return {?}\n */\n BrowserDomAdapter.prototype.getElementsByTagName = /**\n * @param {?} element\n * @param {?} name\n * @return {?}\n */\n function (element, name) {\n return element.getElementsByTagName(name);\n };\n /**\n * @param {?} element\n * @return {?}\n */\n BrowserDomAdapter.prototype.classList = /**\n * @param {?} element\n * @return {?}\n */\n function (element) { return Array.prototype.slice.call(element.classList, 0); };\n /**\n * @param {?} element\n * @param {?} className\n * @return {?}\n */\n BrowserDomAdapter.prototype.addClass = /**\n * @param {?} element\n * @param {?} className\n * @return {?}\n */\n function (element, className) { element.classList.add(className); };\n /**\n * @param {?} element\n * @param {?} className\n * @return {?}\n */\n BrowserDomAdapter.prototype.removeClass = /**\n * @param {?} element\n * @param {?} className\n * @return {?}\n */\n function (element, className) { element.classList.remove(className); };\n /**\n * @param {?} element\n * @param {?} className\n * @return {?}\n */\n BrowserDomAdapter.prototype.hasClass = /**\n * @param {?} element\n * @param {?} className\n * @return {?}\n */\n function (element, className) {\n return element.classList.contains(className);\n };\n /**\n * @param {?} element\n * @param {?} styleName\n * @param {?} styleValue\n * @return {?}\n */\n BrowserDomAdapter.prototype.setStyle = /**\n * @param {?} element\n * @param {?} styleName\n * @param {?} styleValue\n * @return {?}\n */\n function (element, styleName, styleValue) {\n element.style[styleName] = styleValue;\n };\n /**\n * @param {?} element\n * @param {?} stylename\n * @return {?}\n */\n BrowserDomAdapter.prototype.removeStyle = /**\n * @param {?} element\n * @param {?} stylename\n * @return {?}\n */\n function (element, stylename) {\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 */\n BrowserDomAdapter.prototype.getStyle = /**\n * @param {?} element\n * @param {?} stylename\n * @return {?}\n */\n function (element, stylename) { return element.style[stylename]; };\n /**\n * @param {?} element\n * @param {?} styleName\n * @param {?=} styleValue\n * @return {?}\n */\n BrowserDomAdapter.prototype.hasStyle = /**\n * @param {?} element\n * @param {?} styleName\n * @param {?=} styleValue\n * @return {?}\n */\n function (element, styleName, styleValue) {\n var /** @type {?} */ value = this.getStyle(element, styleName) || '';\n return styleValue ? value == styleValue : value.length > 0;\n };\n /**\n * @param {?} element\n * @return {?}\n */\n BrowserDomAdapter.prototype.tagName = /**\n * @param {?} element\n * @return {?}\n */\n function (element) { return element.tagName; };\n /**\n * @param {?} element\n * @return {?}\n */\n BrowserDomAdapter.prototype.attributeMap = /**\n * @param {?} element\n * @return {?}\n */\n function (element) {\n var /** @type {?} */ res = new Map();\n var /** @type {?} */ elAttrs = element.attributes;\n for (var /** @type {?} */ i = 0; i < elAttrs.length; i++) {\n var /** @type {?} */ attrib = elAttrs.item(i);\n res.set(attrib.name, attrib.value);\n }\n return res;\n };\n /**\n * @param {?} element\n * @param {?} attribute\n * @return {?}\n */\n BrowserDomAdapter.prototype.hasAttribute = /**\n * @param {?} element\n * @param {?} attribute\n * @return {?}\n */\n function (element, attribute) {\n return element.hasAttribute(attribute);\n };\n /**\n * @param {?} element\n * @param {?} ns\n * @param {?} attribute\n * @return {?}\n */\n BrowserDomAdapter.prototype.hasAttributeNS = /**\n * @param {?} element\n * @param {?} ns\n * @param {?} attribute\n * @return {?}\n */\n function (element, ns, attribute) {\n return element.hasAttributeNS(ns, attribute);\n };\n /**\n * @param {?} element\n * @param {?} attribute\n * @return {?}\n */\n BrowserDomAdapter.prototype.getAttribute = /**\n * @param {?} element\n * @param {?} attribute\n * @return {?}\n */\n function (element, attribute) {\n return element.getAttribute(attribute);\n };\n /**\n * @param {?} element\n * @param {?} ns\n * @param {?} name\n * @return {?}\n */\n BrowserDomAdapter.prototype.getAttributeNS = /**\n * @param {?} element\n * @param {?} ns\n * @param {?} name\n * @return {?}\n */\n function (element, ns, name) {\n return element.getAttributeNS(ns, name);\n };\n /**\n * @param {?} element\n * @param {?} name\n * @param {?} value\n * @return {?}\n */\n BrowserDomAdapter.prototype.setAttribute = /**\n * @param {?} element\n * @param {?} name\n * @param {?} value\n * @return {?}\n */\n function (element, name, value) { element.setAttribute(name, value); };\n /**\n * @param {?} element\n * @param {?} ns\n * @param {?} name\n * @param {?} value\n * @return {?}\n */\n BrowserDomAdapter.prototype.setAttributeNS = /**\n * @param {?} element\n * @param {?} ns\n * @param {?} name\n * @param {?} value\n * @return {?}\n */\n function (element, ns, name, value) {\n element.setAttributeNS(ns, name, value);\n };\n /**\n * @param {?} element\n * @param {?} attribute\n * @return {?}\n */\n BrowserDomAdapter.prototype.removeAttribute = /**\n * @param {?} element\n * @param {?} attribute\n * @return {?}\n */\n function (element, attribute) { element.removeAttribute(attribute); };\n /**\n * @param {?} element\n * @param {?} ns\n * @param {?} name\n * @return {?}\n */\n BrowserDomAdapter.prototype.removeAttributeNS = /**\n * @param {?} element\n * @param {?} ns\n * @param {?} name\n * @return {?}\n */\n function (element, ns, name) {\n element.removeAttributeNS(ns, name);\n };\n /**\n * @param {?} el\n * @return {?}\n */\n BrowserDomAdapter.prototype.templateAwareRoot = /**\n * @param {?} el\n * @return {?}\n */\n function (el) { return this.isTemplateElement(el) ? this.content(el) : el; };\n /**\n * @return {?}\n */\n BrowserDomAdapter.prototype.createHtmlDocument = /**\n * @return {?}\n */\n function () {\n return document.implementation.createHTMLDocument('fakeTitle');\n };\n /**\n * @return {?}\n */\n BrowserDomAdapter.prototype.getDefaultDocument = /**\n * @return {?}\n */\n function () { return document; };\n /**\n * @param {?} el\n * @return {?}\n */\n BrowserDomAdapter.prototype.getBoundingClientRect = /**\n * @param {?} el\n * @return {?}\n */\n function (el) {\n try {\n return el.getBoundingClientRect();\n }\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 */\n BrowserDomAdapter.prototype.getTitle = /**\n * @param {?} doc\n * @return {?}\n */\n function (doc) { return doc.title; };\n /**\n * @param {?} doc\n * @param {?} newTitle\n * @return {?}\n */\n BrowserDomAdapter.prototype.setTitle = /**\n * @param {?} doc\n * @param {?} newTitle\n * @return {?}\n */\n function (doc, newTitle) { doc.title = newTitle || ''; };\n /**\n * @param {?} n\n * @param {?} selector\n * @return {?}\n */\n BrowserDomAdapter.prototype.elementMatches = /**\n * @param {?} n\n * @param {?} selector\n * @return {?}\n */\n function (n, selector) {\n if (this.isElementNode(n)) {\n return n.matches && n.matches(selector) ||\n n.msMatchesSelector && n.msMatchesSelector(selector) ||\n n.webkitMatchesSelector && n.webkitMatchesSelector(selector);\n }\n return false;\n };\n /**\n * @param {?} el\n * @return {?}\n */\n BrowserDomAdapter.prototype.isTemplateElement = /**\n * @param {?} el\n * @return {?}\n */\n function (el) {\n return this.isElementNode(el) && el.nodeName === 'TEMPLATE';\n };\n /**\n * @param {?} node\n * @return {?}\n */\n BrowserDomAdapter.prototype.isTextNode = /**\n * @param {?} node\n * @return {?}\n */\n function (node) { return node.nodeType === Node.TEXT_NODE; };\n /**\n * @param {?} node\n * @return {?}\n */\n BrowserDomAdapter.prototype.isCommentNode = /**\n * @param {?} node\n * @return {?}\n */\n function (node) { return node.nodeType === Node.COMMENT_NODE; };\n /**\n * @param {?} node\n * @return {?}\n */\n BrowserDomAdapter.prototype.isElementNode = /**\n * @param {?} node\n * @return {?}\n */\n function (node) { return node.nodeType === Node.ELEMENT_NODE; };\n /**\n * @param {?} node\n * @return {?}\n */\n BrowserDomAdapter.prototype.hasShadowRoot = /**\n * @param {?} node\n * @return {?}\n */\n function (node) {\n return node.shadowRoot != null && node instanceof HTMLElement;\n };\n /**\n * @param {?} node\n * @return {?}\n */\n BrowserDomAdapter.prototype.isShadowRoot = /**\n * @param {?} node\n * @return {?}\n */\n function (node) { return node instanceof DocumentFragment; };\n /**\n * @param {?} node\n * @return {?}\n */\n BrowserDomAdapter.prototype.importIntoDoc = /**\n * @param {?} node\n * @return {?}\n */\n function (node) { return document.importNode(this.templateAwareRoot(node), true); };\n /**\n * @param {?} node\n * @return {?}\n */\n BrowserDomAdapter.prototype.adoptNode = /**\n * @param {?} node\n * @return {?}\n */\n function (node) { return document.adoptNode(node); };\n /**\n * @param {?} el\n * @return {?}\n */\n BrowserDomAdapter.prototype.getHref = /**\n * @param {?} el\n * @return {?}\n */\n function (el) { return /** @type {?} */ ((el.getAttribute('href'))); };\n /**\n * @param {?} event\n * @return {?}\n */\n BrowserDomAdapter.prototype.getEventKey = /**\n * @param {?} event\n * @return {?}\n */\n function (event) {\n var /** @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))[key];\n }\n }\n }\n return _keyMap[key] || key;\n };\n /**\n * @param {?} doc\n * @param {?} target\n * @return {?}\n */\n BrowserDomAdapter.prototype.getGlobalEventTarget = /**\n * @param {?} doc\n * @param {?} target\n * @return {?}\n */\n function (doc, target) {\n if (target === 'window') {\n return window;\n }\n if (target === 'document') {\n return doc;\n }\n if (target === 'body') {\n return doc.body;\n }\n return null;\n };\n /**\n * @return {?}\n */\n BrowserDomAdapter.prototype.getHistory = /**\n * @return {?}\n */\n function () { return window.history; };\n /**\n * @return {?}\n */\n BrowserDomAdapter.prototype.getLocation = /**\n * @return {?}\n */\n function () { return window.location; };\n /**\n * @param {?} doc\n * @return {?}\n */\n BrowserDomAdapter.prototype.getBaseHref = /**\n * @param {?} doc\n * @return {?}\n */\n function (doc) {\n var /** @type {?} */ href = getBaseElementHref();\n return href == null ? null : relativePath(href);\n };\n /**\n * @return {?}\n */\n BrowserDomAdapter.prototype.resetBaseElement = /**\n * @return {?}\n */\n function () { baseElement = null; };\n /**\n * @return {?}\n */\n BrowserDomAdapter.prototype.getUserAgent = /**\n * @return {?}\n */\n function () { return window.navigator.userAgent; };\n /**\n * @param {?} element\n * @param {?} name\n * @param {?} value\n * @return {?}\n */\n BrowserDomAdapter.prototype.setData = /**\n * @param {?} element\n * @param {?} name\n * @param {?} value\n * @return {?}\n */\n function (element, name, value) {\n this.setAttribute(element, 'data-' + name, value);\n };\n /**\n * @param {?} element\n * @param {?} name\n * @return {?}\n */\n BrowserDomAdapter.prototype.getData = /**\n * @param {?} element\n * @param {?} name\n * @return {?}\n */\n function (element, name) {\n return this.getAttribute(element, 'data-' + name);\n };\n /**\n * @param {?} element\n * @return {?}\n */\n BrowserDomAdapter.prototype.getComputedStyle = /**\n * @param {?} element\n * @return {?}\n */\n function (element) { return getComputedStyle(element); };\n // TODO(tbosch): move this into a separate environment class once we have it\n /**\n * @return {?}\n */\n BrowserDomAdapter.prototype.supportsWebAnimation = /**\n * @return {?}\n */\n function () {\n return typeof (/** @type {?} */ (Element)).prototype['animate'] === 'function';\n };\n /**\n * @return {?}\n */\n BrowserDomAdapter.prototype.performanceNow = /**\n * @return {?}\n */\n function () {\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 */\n BrowserDomAdapter.prototype.supportsCookies = /**\n * @return {?}\n */\n function () { return true; };\n /**\n * @param {?} name\n * @return {?}\n */\n BrowserDomAdapter.prototype.getCookie = /**\n * @param {?} name\n * @return {?}\n */\n function (name) { return _angular_common.ɵparseCookieValue(document.cookie, name); };\n /**\n * @param {?} name\n * @param {?} value\n * @return {?}\n */\n BrowserDomAdapter.prototype.setCookie = /**\n * @param {?} name\n * @param {?} value\n * @return {?}\n */\n function (name, value) {\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 return BrowserDomAdapter;\n}(GenericBrowserDomAdapter));\nvar baseElement = null;\n/**\n * @return {?}\n */\nfunction getBaseElementHref() {\n if (!baseElement) {\n baseElement = /** @type {?} */ ((document.querySelector('base')));\n if (!baseElement) {\n return null;\n }\n }\n return baseElement.getAttribute('href');\n}\n// based on urlUtils.js in AngularJS 1\nvar urlParsingNode;\n/**\n * @param {?} url\n * @return {?}\n */\nfunction relativePath(url) {\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/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\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 * 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 * @deprecated import from `\\@angular/common` instead.\n */\nvar DOCUMENT$1 = _angular_common.DOCUMENT;\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\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 * @return {?}\n */\nfunction supportsState() {\n return !!window.history.pushState;\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\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 * `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 */\nvar BrowserPlatformLocation = /** @class */ (function (_super) {\n __extends(BrowserPlatformLocation, _super);\n function BrowserPlatformLocation(_doc) {\n var _this = _super.call(this) || this;\n _this._doc = _doc;\n _this._init();\n return _this;\n }\n // This is moved to its own method so that `MockPlatformLocationStrategy` can overwrite it\n /** @internal */\n /**\n * \\@internal\n * @return {?}\n */\n BrowserPlatformLocation.prototype._init = /**\n * \\@internal\n * @return {?}\n */\n function () {\n (/** @type {?} */ (this)).location = getDOM().getLocation();\n this._history = getDOM().getHistory();\n };\n /**\n * @return {?}\n */\n BrowserPlatformLocation.prototype.getBaseHrefFromDOM = /**\n * @return {?}\n */\n function () { return /** @type {?} */ ((getDOM().getBaseHref(this._doc))); };\n /**\n * @param {?} fn\n * @return {?}\n */\n BrowserPlatformLocation.prototype.onPopState = /**\n * @param {?} fn\n * @return {?}\n */\n function (fn) {\n getDOM().getGlobalEventTarget(this._doc, 'window').addEventListener('popstate', fn, false);\n };\n /**\n * @param {?} fn\n * @return {?}\n */\n BrowserPlatformLocation.prototype.onHashChange = /**\n * @param {?} fn\n * @return {?}\n */\n function (fn) {\n getDOM().getGlobalEventTarget(this._doc, 'window').addEventListener('hashchange', fn, false);\n };\n Object.defineProperty(BrowserPlatformLocation.prototype, \"pathname\", {\n get: /**\n * @return {?}\n */\n function () { return this.location.pathname; },\n set: /**\n * @param {?} newPath\n * @return {?}\n */\n function (newPath) { this.location.pathname = newPath; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BrowserPlatformLocation.prototype, \"search\", {\n get: /**\n * @return {?}\n */\n function () { return this.location.search; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BrowserPlatformLocation.prototype, \"hash\", {\n get: /**\n * @return {?}\n */\n function () { return this.location.hash; },\n enumerable: true,\n configurable: true\n });\n /**\n * @param {?} state\n * @param {?} title\n * @param {?} url\n * @return {?}\n */\n BrowserPlatformLocation.prototype.pushState = /**\n * @param {?} state\n * @param {?} title\n * @param {?} url\n * @return {?}\n */\n function (state, title, url) {\n if (supportsState()) {\n this._history.pushState(state, title, url);\n }\n else {\n this.location.hash = url;\n }\n };\n /**\n * @param {?} state\n * @param {?} title\n * @param {?} url\n * @return {?}\n */\n BrowserPlatformLocation.prototype.replaceState = /**\n * @param {?} state\n * @param {?} title\n * @param {?} url\n * @return {?}\n */\n function (state, title, url) {\n if (supportsState()) {\n this._history.replaceState(state, title, url);\n }\n else {\n this.location.hash = url;\n }\n };\n /**\n * @return {?}\n */\n BrowserPlatformLocation.prototype.forward = /**\n * @return {?}\n */\n function () { this._history.forward(); };\n /**\n * @return {?}\n */\n BrowserPlatformLocation.prototype.back = /**\n * @return {?}\n */\n function () { this._history.back(); };\n BrowserPlatformLocation.decorators = [\n { type: _angular_core.Injectable },\n ];\n /** @nocollapse */\n BrowserPlatformLocation.ctorParameters = function () { return [\n { type: undefined, decorators: [{ type: _angular_core.Inject, args: [DOCUMENT$1,] },] },\n ]; };\n return BrowserPlatformLocation;\n}(_angular_common.PlatformLocation));\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\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 * A service that can be used to get and add meta tags.\n *\n * \\@experimental\n */\nvar Meta = /** @class */ (function () {\n function Meta(_doc) {\n this._doc = _doc;\n this._dom = getDOM();\n }\n /**\n * @param {?} tag\n * @param {?=} forceCreation\n * @return {?}\n */\n Meta.prototype.addTag = /**\n * @param {?} tag\n * @param {?=} forceCreation\n * @return {?}\n */\n function (tag, forceCreation) {\n if (forceCreation === void 0) { forceCreation = false; }\n if (!tag)\n return null;\n return this._getOrCreateElement(tag, forceCreation);\n };\n /**\n * @param {?} tags\n * @param {?=} forceCreation\n * @return {?}\n */\n Meta.prototype.addTags = /**\n * @param {?} tags\n * @param {?=} forceCreation\n * @return {?}\n */\n function (tags, forceCreation) {\n var _this = this;\n if (forceCreation === void 0) { forceCreation = false; }\n if (!tags)\n return [];\n return tags.reduce(function (result, tag) {\n if (tag) {\n result.push(_this._getOrCreateElement(tag, forceCreation));\n }\n return result;\n }, []);\n };\n /**\n * @param {?} attrSelector\n * @return {?}\n */\n Meta.prototype.getTag = /**\n * @param {?} attrSelector\n * @return {?}\n */\n function (attrSelector) {\n if (!attrSelector)\n return null;\n return this._dom.querySelector(this._doc, \"meta[\" + attrSelector + \"]\") || null;\n };\n /**\n * @param {?} attrSelector\n * @return {?}\n */\n Meta.prototype.getTags = /**\n * @param {?} attrSelector\n * @return {?}\n */\n function (attrSelector) {\n if (!attrSelector)\n return [];\n var /** @type {?} */ list = this._dom.querySelectorAll(this._doc, \"meta[\" + attrSelector + \"]\");\n return list ? [].slice.call(list) : [];\n };\n /**\n * @param {?} tag\n * @param {?=} selector\n * @return {?}\n */\n Meta.prototype.updateTag = /**\n * @param {?} tag\n * @param {?=} selector\n * @return {?}\n */\n function (tag, selector) {\n if (!tag)\n return null;\n selector = selector || this._parseSelector(tag);\n var /** @type {?} */ meta = /** @type {?} */ ((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 */\n Meta.prototype.removeTag = /**\n * @param {?} attrSelector\n * @return {?}\n */\n function (attrSelector) { this.removeTagElement(/** @type {?} */ ((this.getTag(attrSelector)))); };\n /**\n * @param {?} meta\n * @return {?}\n */\n Meta.prototype.removeTagElement = /**\n * @param {?} meta\n * @return {?}\n */\n function (meta) {\n if (meta) {\n this._dom.remove(meta);\n }\n };\n /**\n * @param {?} meta\n * @param {?=} forceCreation\n * @return {?}\n */\n Meta.prototype._getOrCreateElement = /**\n * @param {?} meta\n * @param {?=} forceCreation\n * @return {?}\n */\n function (meta, forceCreation) {\n if (forceCreation === void 0) { forceCreation = false; }\n if (!forceCreation) {\n var /** @type {?} */ selector = this._parseSelector(meta);\n var /** @type {?} */ elem = /** @type {?} */ ((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))\n return elem;\n }\n var /** @type {?} */ element = /** @type {?} */ (this._dom.createElement('meta'));\n this._setMetaElementAttributes(meta, element);\n var /** @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 */\n Meta.prototype._setMetaElementAttributes = /**\n * @param {?} tag\n * @param {?} el\n * @return {?}\n */\n function (tag, el) {\n var _this = this;\n Object.keys(tag).forEach(function (prop) { return _this._dom.setAttribute(el, prop, tag[prop]); });\n return el;\n };\n /**\n * @param {?} tag\n * @return {?}\n */\n Meta.prototype._parseSelector = /**\n * @param {?} tag\n * @return {?}\n */\n function (tag) {\n var /** @type {?} */ attr = tag.name ? 'name' : 'property';\n return attr + \"=\\\"\" + tag[attr] + \"\\\"\";\n };\n /**\n * @param {?} tag\n * @param {?} elem\n * @return {?}\n */\n Meta.prototype._containsAttributes = /**\n * @param {?} tag\n * @param {?} elem\n * @return {?}\n */\n function (tag, elem) {\n var _this = this;\n return Object.keys(tag).every(function (key) { return _this._dom.getAttribute(elem, key) === tag[key]; });\n };\n Meta.decorators = [\n { type: _angular_core.Injectable },\n ];\n /** @nocollapse */\n Meta.ctorParameters = function () { return [\n { type: undefined, decorators: [{ type: _angular_core.Inject, args: [DOCUMENT$1,] },] },\n ]; };\n return Meta;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\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 * An id that identifies a particular application being bootstrapped, that should\n * match across the client/server boundary.\n */\nvar TRANSITION_ID = new _angular_core.InjectionToken('TRANSITION_ID');\n/**\n * @param {?} transitionId\n * @param {?} document\n * @param {?} injector\n * @return {?}\n */\nfunction appInitializerFactory(transitionId, document, injector) {\n return function () {\n // Wait for all application initializers to be completed before removing the styles set by\n // the server.\n injector.get(_angular_core.ApplicationInitStatus).donePromise.then(function () {\n var /** @type {?} */ dom = getDOM();\n var /** @type {?} */ styles = Array.prototype.slice.apply(dom.querySelectorAll(document, \"style[ng-transition]\"));\n styles.filter(function (el) { return dom.getAttribute(el, 'ng-transition') === transitionId; })\n .forEach(function (el) { return dom.remove(el); });\n });\n };\n}\nvar SERVER_TRANSITION_PROVIDERS = [\n {\n provide: _angular_core.APP_INITIALIZER,\n useFactory: appInitializerFactory,\n deps: [TRANSITION_ID, DOCUMENT$1, _angular_core.Injector],\n multi: true\n },\n];\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\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 */\nvar BrowserGetTestability = /** @class */ (function () {\n function BrowserGetTestability() {\n }\n /**\n * @return {?}\n */\n BrowserGetTestability.init = /**\n * @return {?}\n */\n function () { _angular_core.setTestabilityGetter(new BrowserGetTestability()); };\n /**\n * @param {?} registry\n * @return {?}\n */\n BrowserGetTestability.prototype.addToWindow = /**\n * @param {?} registry\n * @return {?}\n */\n function (registry) {\n _angular_core.ɵglobal['getAngularTestability'] = function (elem, findInAncestors) {\n if (findInAncestors === void 0) { findInAncestors = true; }\n var /** @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 _angular_core.ɵglobal['getAllAngularTestabilities'] = function () { return registry.getAllTestabilities(); };\n _angular_core.ɵglobal['getAllAngularRootElements'] = function () { return registry.getAllRootElements(); };\n var /** @type {?} */ whenAllStable = function (callback /** TODO #9100 */) {\n var /** @type {?} */ testabilities = _angular_core.ɵglobal['getAllAngularTestabilities']();\n var /** @type {?} */ count = testabilities.length;\n var /** @type {?} */ didWork = false;\n var /** @type {?} */ decrement = function (didWork_ /** TODO #9100 */) {\n didWork = didWork || didWork_;\n count--;\n if (count == 0) {\n callback(didWork);\n }\n };\n testabilities.forEach(function (testability /** TODO #9100 */) {\n testability.whenStable(decrement);\n });\n };\n if (!_angular_core.ɵglobal['frameworkStabilizers']) {\n _angular_core.ɵglobal['frameworkStabilizers'] = [];\n }\n _angular_core.ɵglobal['frameworkStabilizers'].push(whenAllStable);\n };\n /**\n * @param {?} registry\n * @param {?} elem\n * @param {?} findInAncestors\n * @return {?}\n */\n BrowserGetTestability.prototype.findTestabilityInTree = /**\n * @param {?} registry\n * @param {?} elem\n * @param {?} findInAncestors\n * @return {?}\n */\n function (registry, elem, findInAncestors) {\n if (elem == null) {\n return null;\n }\n var /** @type {?} */ t = registry.getTestability(elem);\n if (t != null) {\n return t;\n }\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 return BrowserGetTestability;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\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 * 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 */\nvar Title = /** @class */ (function () {\n function Title(_doc) {\n this._doc = _doc;\n }\n /**\n * Get the title of the current HTML document.\n */\n /**\n * Get the title of the current HTML document.\n * @return {?}\n */\n Title.prototype.getTitle = /**\n * Get the title of the current HTML document.\n * @return {?}\n */\n function () { return getDOM().getTitle(this._doc); };\n /**\n * Set the title of the current HTML document.\n * @param newTitle\n */\n /**\n * Set the title of the current HTML document.\n * @param {?} newTitle\n * @return {?}\n */\n Title.prototype.setTitle = /**\n * Set the title of the current HTML document.\n * @param {?} newTitle\n * @return {?}\n */\n function (newTitle) { getDOM().setTitle(this._doc, newTitle); };\n Title.decorators = [\n { type: _angular_core.Injectable },\n ];\n /** @nocollapse */\n Title.ctorParameters = function () { return [\n { type: undefined, decorators: [{ type: _angular_core.Inject, args: [DOCUMENT$1,] },] },\n ]; };\n return Title;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\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 * @param {?} input\n * @return {?}\n */\n\n/**\n * @param {?} input\n * @return {?}\n */\n\n/**\n * Exports the value under a given `name` in the global property `ng`. For example `ng.probe` if\n * `name` is `'probe'`.\n * @param {?} name Name under which it will be exported. Keep in mind this will be a property of the\n * global `ng` object.\n * @param {?} value The value to export.\n * @return {?}\n */\nfunction exportNgVar(name, value) {\n if (typeof COMPILED === 'undefined' || !COMPILED) {\n // Note: we can't export `ng` when using closure enhanced optimization as:\n // - closure declares globals itself for minified names, which sometimes clobber our `ng` global\n // - we can't declare a closure extern as the namespace `ng` is already used within Google\n // for typings for angularJS (via `goog.provide('ng....')`).\n var /** @type {?} */ ng = _angular_core.ɵglobal['ng'] = (/** @type {?} */ (_angular_core.ɵglobal['ng'])) || {};\n ng[name] = value;\n }\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\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 */\nvar CORE_TOKENS = {\n 'ApplicationRef': _angular_core.ApplicationRef,\n 'NgZone': _angular_core.NgZone,\n};\nvar INSPECT_GLOBAL_NAME = 'probe';\nvar CORE_TOKENS_GLOBAL_NAME = '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 */\nfunction inspectNativeElement(element) {\n return _angular_core.getDebugNode(element);\n}\n/**\n * @param {?} coreTokens\n * @return {?}\n */\nfunction _createNgProbe(coreTokens) {\n exportNgVar(INSPECT_GLOBAL_NAME, inspectNativeElement);\n exportNgVar(CORE_TOKENS_GLOBAL_NAME, __assign({}, CORE_TOKENS, _ngProbeTokensToMap(coreTokens || [])));\n return function () { return inspectNativeElement; };\n}\n/**\n * @param {?} tokens\n * @return {?}\n */\nfunction _ngProbeTokensToMap(tokens) {\n return tokens.reduce(function (prev, t) { return (prev[t.name] = t.token, prev); }, {});\n}\n/**\n * Providers which support debugging Angular applications (e.g. via `ng.probe`).\n */\nvar ELEMENT_PROBE_PROVIDERS = [\n {\n provide: _angular_core.APP_INITIALIZER,\n useFactory: _createNgProbe,\n deps: [\n [_angular_core.NgProbeToken, new _angular_core.Optional()],\n ],\n multi: true,\n },\n];\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\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 * \\@stable\n */\nvar EVENT_MANAGER_PLUGINS = new _angular_core.InjectionToken('EventManagerPlugins');\n/**\n * \\@stable\n */\nvar EventManager = /** @class */ (function () {\n function EventManager(plugins, _zone) {\n var _this = this;\n this._zone = _zone;\n this._eventNameToPlugin = new Map();\n plugins.forEach(function (p) { return p.manager = _this; });\n this._plugins = plugins.slice().reverse();\n }\n /**\n * @param {?} element\n * @param {?} eventName\n * @param {?} handler\n * @return {?}\n */\n EventManager.prototype.addEventListener = /**\n * @param {?} element\n * @param {?} eventName\n * @param {?} handler\n * @return {?}\n */\n function (element, eventName, handler) {\n var /** @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 */\n EventManager.prototype.addGlobalEventListener = /**\n * @param {?} target\n * @param {?} eventName\n * @param {?} handler\n * @return {?}\n */\n function (target, eventName, handler) {\n var /** @type {?} */ plugin = this._findPluginFor(eventName);\n return plugin.addGlobalEventListener(target, eventName, handler);\n };\n /**\n * @return {?}\n */\n EventManager.prototype.getZone = /**\n * @return {?}\n */\n function () { return this._zone; };\n /** @internal */\n /**\n * \\@internal\n * @param {?} eventName\n * @return {?}\n */\n EventManager.prototype._findPluginFor = /**\n * \\@internal\n * @param {?} eventName\n * @return {?}\n */\n function (eventName) {\n var /** @type {?} */ plugin = this._eventNameToPlugin.get(eventName);\n if (plugin) {\n return plugin;\n }\n var /** @type {?} */ plugins = this._plugins;\n for (var /** @type {?} */ i = 0; i < plugins.length; i++) {\n var /** @type {?} */ plugin_1 = plugins[i];\n if (plugin_1.supports(eventName)) {\n this._eventNameToPlugin.set(eventName, plugin_1);\n return plugin_1;\n }\n }\n throw new Error(\"No event manager plugin found for event \" + eventName);\n };\n EventManager.decorators = [\n { type: _angular_core.Injectable },\n ];\n /** @nocollapse */\n EventManager.ctorParameters = function () { return [\n { type: Array, decorators: [{ type: _angular_core.Inject, args: [EVENT_MANAGER_PLUGINS,] },] },\n { type: _angular_core.NgZone, },\n ]; };\n return EventManager;\n}());\n/**\n * @abstract\n */\nvar EventManagerPlugin = /** @class */ (function () {\n function EventManagerPlugin(_doc) {\n this._doc = _doc;\n }\n /**\n * @param {?} element\n * @param {?} eventName\n * @param {?} handler\n * @return {?}\n */\n EventManagerPlugin.prototype.addGlobalEventListener = /**\n * @param {?} element\n * @param {?} eventName\n * @param {?} handler\n * @return {?}\n */\n function (element, eventName, handler) {\n var /** @type {?} */ target = 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 return EventManagerPlugin;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\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 */\nvar SharedStylesHost = /** @class */ (function () {\n function SharedStylesHost() {\n /**\n * \\@internal\n */\n this._stylesSet = new Set();\n }\n /**\n * @param {?} styles\n * @return {?}\n */\n SharedStylesHost.prototype.addStyles = /**\n * @param {?} styles\n * @return {?}\n */\n function (styles) {\n var _this = this;\n var /** @type {?} */ additions = new Set();\n styles.forEach(function (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 */\n SharedStylesHost.prototype.onStylesAdded = /**\n * @param {?} additions\n * @return {?}\n */\n function (additions) { };\n /**\n * @return {?}\n */\n SharedStylesHost.prototype.getAllStyles = /**\n * @return {?}\n */\n function () { return Array.from(this._stylesSet); };\n SharedStylesHost.decorators = [\n { type: _angular_core.Injectable },\n ];\n /** @nocollapse */\n SharedStylesHost.ctorParameters = function () { return []; };\n return SharedStylesHost;\n}());\nvar DomSharedStylesHost = /** @class */ (function (_super) {\n __extends(DomSharedStylesHost, _super);\n function DomSharedStylesHost(_doc) {\n var _this = _super.call(this) || this;\n _this._doc = _doc;\n _this._hostNodes = new Set();\n _this._styleNodes = new Set();\n _this._hostNodes.add(_doc.head);\n return _this;\n }\n /**\n * @param {?} styles\n * @param {?} host\n * @return {?}\n */\n DomSharedStylesHost.prototype._addStylesToHost = /**\n * @param {?} styles\n * @param {?} host\n * @return {?}\n */\n function (styles, host) {\n var _this = this;\n styles.forEach(function (style) {\n var /** @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 */\n DomSharedStylesHost.prototype.addHost = /**\n * @param {?} hostNode\n * @return {?}\n */\n function (hostNode) {\n this._addStylesToHost(this._stylesSet, hostNode);\n this._hostNodes.add(hostNode);\n };\n /**\n * @param {?} hostNode\n * @return {?}\n */\n DomSharedStylesHost.prototype.removeHost = /**\n * @param {?} hostNode\n * @return {?}\n */\n function (hostNode) { this._hostNodes.delete(hostNode); };\n /**\n * @param {?} additions\n * @return {?}\n */\n DomSharedStylesHost.prototype.onStylesAdded = /**\n * @param {?} additions\n * @return {?}\n */\n function (additions) {\n var _this = this;\n this._hostNodes.forEach(function (hostNode) { return _this._addStylesToHost(additions, hostNode); });\n };\n /**\n * @return {?}\n */\n DomSharedStylesHost.prototype.ngOnDestroy = /**\n * @return {?}\n */\n function () { this._styleNodes.forEach(function (styleNode) { return getDOM().remove(styleNode); }); };\n DomSharedStylesHost.decorators = [\n { type: _angular_core.Injectable },\n ];\n /** @nocollapse */\n DomSharedStylesHost.ctorParameters = function () { return [\n { type: undefined, decorators: [{ type: _angular_core.Inject, args: [DOCUMENT$1,] },] },\n ]; };\n return DomSharedStylesHost;\n}(SharedStylesHost));\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\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 */\nvar NAMESPACE_URIS = {\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};\nvar COMPONENT_REGEX = /%COMP%/g;\nvar COMPONENT_VARIABLE = '%COMP%';\nvar HOST_ATTR = \"_nghost-\" + COMPONENT_VARIABLE;\nvar CONTENT_ATTR = \"_ngcontent-\" + COMPONENT_VARIABLE;\n/**\n * @param {?} componentShortId\n * @return {?}\n */\nfunction shimContentAttribute(componentShortId) {\n return CONTENT_ATTR.replace(COMPONENT_REGEX, componentShortId);\n}\n/**\n * @param {?} componentShortId\n * @return {?}\n */\nfunction shimHostAttribute(componentShortId) {\n return HOST_ATTR.replace(COMPONENT_REGEX, componentShortId);\n}\n/**\n * @param {?} compId\n * @param {?} styles\n * @param {?} target\n * @return {?}\n */\nfunction flattenStyles(compId, styles, target) {\n for (var /** @type {?} */ i = 0; i < styles.length; i++) {\n var /** @type {?} */ style = styles[i];\n if (Array.isArray(style)) {\n flattenStyles(compId, style, target);\n }\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) {\n return function (event) {\n var /** @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}\nvar DomRendererFactory2 = /** @class */ (function () {\n function DomRendererFactory2(eventManager, sharedStylesHost) {\n this.eventManager = eventManager;\n this.sharedStylesHost = sharedStylesHost;\n this.rendererByCompId = new Map();\n this.defaultRenderer = new DefaultDomRenderer2(eventManager);\n }\n /**\n * @param {?} element\n * @param {?} type\n * @return {?}\n */\n DomRendererFactory2.prototype.createRenderer = /**\n * @param {?} element\n * @param {?} type\n * @return {?}\n */\n function (element, type) {\n if (!element || !type) {\n return this.defaultRenderer;\n }\n switch (type.encapsulation) {\n case _angular_core.ViewEncapsulation.Emulated: {\n var /** @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 {?} */ (renderer)).applyToHost(element);\n return renderer;\n }\n case _angular_core.ViewEncapsulation.Native:\n return new ShadowDomRenderer(this.eventManager, this.sharedStylesHost, element, type);\n default: {\n if (!this.rendererByCompId.has(type.id)) {\n var /** @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 };\n /**\n * @return {?}\n */\n DomRendererFactory2.prototype.begin = /**\n * @return {?}\n */\n function () { };\n /**\n * @return {?}\n */\n DomRendererFactory2.prototype.end = /**\n * @return {?}\n */\n function () { };\n DomRendererFactory2.decorators = [\n { type: _angular_core.Injectable },\n ];\n /** @nocollapse */\n DomRendererFactory2.ctorParameters = function () { return [\n { type: EventManager, },\n { type: DomSharedStylesHost, },\n ]; };\n return DomRendererFactory2;\n}());\nvar DefaultDomRenderer2 = /** @class */ (function () {\n function DefaultDomRenderer2(eventManager) {\n this.eventManager = eventManager;\n this.data = Object.create(null);\n }\n /**\n * @return {?}\n */\n DefaultDomRenderer2.prototype.destroy = /**\n * @return {?}\n */\n function () { };\n /**\n * @param {?} name\n * @param {?=} namespace\n * @return {?}\n */\n DefaultDomRenderer2.prototype.createElement = /**\n * @param {?} name\n * @param {?=} namespace\n * @return {?}\n */\n function (name, namespace) {\n if (namespace) {\n return document.createElementNS(NAMESPACE_URIS[namespace], name);\n }\n return document.createElement(name);\n };\n /**\n * @param {?} value\n * @return {?}\n */\n DefaultDomRenderer2.prototype.createComment = /**\n * @param {?} value\n * @return {?}\n */\n function (value) { return document.createComment(value); };\n /**\n * @param {?} value\n * @return {?}\n */\n DefaultDomRenderer2.prototype.createText = /**\n * @param {?} value\n * @return {?}\n */\n function (value) { return document.createTextNode(value); };\n /**\n * @param {?} parent\n * @param {?} newChild\n * @return {?}\n */\n DefaultDomRenderer2.prototype.appendChild = /**\n * @param {?} parent\n * @param {?} newChild\n * @return {?}\n */\n function (parent, newChild) { parent.appendChild(newChild); };\n /**\n * @param {?} parent\n * @param {?} newChild\n * @param {?} refChild\n * @return {?}\n */\n DefaultDomRenderer2.prototype.insertBefore = /**\n * @param {?} parent\n * @param {?} newChild\n * @param {?} refChild\n * @return {?}\n */\n function (parent, newChild, refChild) {\n if (parent) {\n parent.insertBefore(newChild, refChild);\n }\n };\n /**\n * @param {?} parent\n * @param {?} oldChild\n * @return {?}\n */\n DefaultDomRenderer2.prototype.removeChild = /**\n * @param {?} parent\n * @param {?} oldChild\n * @return {?}\n */\n function (parent, oldChild) {\n if (parent) {\n parent.removeChild(oldChild);\n }\n };\n /**\n * @param {?} selectorOrNode\n * @return {?}\n */\n DefaultDomRenderer2.prototype.selectRootElement = /**\n * @param {?} selectorOrNode\n * @return {?}\n */\n function (selectorOrNode) {\n var /** @type {?} */ el = 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 */\n DefaultDomRenderer2.prototype.parentNode = /**\n * @param {?} node\n * @return {?}\n */\n function (node) { return node.parentNode; };\n /**\n * @param {?} node\n * @return {?}\n */\n DefaultDomRenderer2.prototype.nextSibling = /**\n * @param {?} node\n * @return {?}\n */\n function (node) { return node.nextSibling; };\n /**\n * @param {?} el\n * @param {?} name\n * @param {?} value\n * @param {?=} namespace\n * @return {?}\n */\n DefaultDomRenderer2.prototype.setAttribute = /**\n * @param {?} el\n * @param {?} name\n * @param {?} value\n * @param {?=} namespace\n * @return {?}\n */\n function (el, name, value, namespace) {\n if (namespace) {\n name = namespace + \":\" + name;\n var /** @type {?} */ namespaceUri = NAMESPACE_URIS[namespace];\n if (namespaceUri) {\n el.setAttributeNS(namespaceUri, name, value);\n }\n else {\n el.setAttribute(name, value);\n }\n }\n else {\n el.setAttribute(name, value);\n }\n };\n /**\n * @param {?} el\n * @param {?} name\n * @param {?=} namespace\n * @return {?}\n */\n DefaultDomRenderer2.prototype.removeAttribute = /**\n * @param {?} el\n * @param {?} name\n * @param {?=} namespace\n * @return {?}\n */\n function (el, name, namespace) {\n if (namespace) {\n var /** @type {?} */ namespaceUri = NAMESPACE_URIS[namespace];\n if (namespaceUri) {\n el.removeAttributeNS(namespaceUri, name);\n }\n else {\n el.removeAttribute(namespace + \":\" + name);\n }\n }\n else {\n el.removeAttribute(name);\n }\n };\n /**\n * @param {?} el\n * @param {?} name\n * @return {?}\n */\n DefaultDomRenderer2.prototype.addClass = /**\n * @param {?} el\n * @param {?} name\n * @return {?}\n */\n function (el, name) { el.classList.add(name); };\n /**\n * @param {?} el\n * @param {?} name\n * @return {?}\n */\n DefaultDomRenderer2.prototype.removeClass = /**\n * @param {?} el\n * @param {?} name\n * @return {?}\n */\n function (el, name) { el.classList.remove(name); };\n /**\n * @param {?} el\n * @param {?} style\n * @param {?} value\n * @param {?} flags\n * @return {?}\n */\n DefaultDomRenderer2.prototype.setStyle = /**\n * @param {?} el\n * @param {?} style\n * @param {?} value\n * @param {?} flags\n * @return {?}\n */\n function (el, style, value, flags) {\n if (flags & _angular_core.RendererStyleFlags2.DashCase) {\n el.style.setProperty(style, value, !!(flags & _angular_core.RendererStyleFlags2.Important) ? 'important' : '');\n }\n else {\n el.style[style] = value;\n }\n };\n /**\n * @param {?} el\n * @param {?} style\n * @param {?} flags\n * @return {?}\n */\n DefaultDomRenderer2.prototype.removeStyle = /**\n * @param {?} el\n * @param {?} style\n * @param {?} flags\n * @return {?}\n */\n function (el, style, flags) {\n if (flags & _angular_core.RendererStyleFlags2.DashCase) {\n el.style.removeProperty(style);\n }\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 */\n DefaultDomRenderer2.prototype.setProperty = /**\n * @param {?} el\n * @param {?} name\n * @param {?} value\n * @return {?}\n */\n function (el, name, value) {\n checkNoSyntheticProp(name, 'property');\n el[name] = value;\n };\n /**\n * @param {?} node\n * @param {?} value\n * @return {?}\n */\n DefaultDomRenderer2.prototype.setValue = /**\n * @param {?} node\n * @param {?} value\n * @return {?}\n */\n function (node, value) { node.nodeValue = value; };\n /**\n * @param {?} target\n * @param {?} event\n * @param {?} callback\n * @return {?}\n */\n DefaultDomRenderer2.prototype.listen = /**\n * @param {?} target\n * @param {?} event\n * @param {?} callback\n * @return {?}\n */\n function (target, event, callback) {\n checkNoSyntheticProp(event, 'listener');\n if (typeof target === 'string') {\n return /** @type {?} */ (this.eventManager.addGlobalEventListener(target, event, decoratePreventDefault(callback)));\n }\n return /** @type {?} */ ((this.eventManager.addEventListener(target, event, decoratePreventDefault(callback))));\n };\n return DefaultDomRenderer2;\n}());\nvar AT_CHARCODE = '@'.charCodeAt(0);\n/**\n * @param {?} name\n * @param {?} nameKind\n * @return {?}\n */\nfunction checkNoSyntheticProp(name, nameKind) {\n if (name.charCodeAt(0) === AT_CHARCODE) {\n throw new Error(\"Found the synthetic \" + nameKind + \" \" + name + \". Please include either \\\"BrowserAnimationsModule\\\" or \\\"NoopAnimationsModule\\\" in your application.\");\n }\n}\nvar EmulatedEncapsulationDomRenderer2 = /** @class */ (function (_super) {\n __extends(EmulatedEncapsulationDomRenderer2, _super);\n function EmulatedEncapsulationDomRenderer2(eventManager, sharedStylesHost, component) {\n var _this = _super.call(this, eventManager) || this;\n _this.component = component;\n var /** @type {?} */ styles = flattenStyles(component.id, component.styles, []);\n sharedStylesHost.addStyles(styles);\n _this.contentAttr = shimContentAttribute(component.id);\n _this.hostAttr = shimHostAttribute(component.id);\n return _this;\n }\n /**\n * @param {?} element\n * @return {?}\n */\n EmulatedEncapsulationDomRenderer2.prototype.applyToHost = /**\n * @param {?} element\n * @return {?}\n */\n function (element) { _super.prototype.setAttribute.call(this, element, this.hostAttr, ''); };\n /**\n * @param {?} parent\n * @param {?} name\n * @return {?}\n */\n EmulatedEncapsulationDomRenderer2.prototype.createElement = /**\n * @param {?} parent\n * @param {?} name\n * @return {?}\n */\n function (parent, name) {\n var /** @type {?} */ el = _super.prototype.createElement.call(this, parent, name);\n _super.prototype.setAttribute.call(this, el, this.contentAttr, '');\n return el;\n };\n return EmulatedEncapsulationDomRenderer2;\n}(DefaultDomRenderer2));\nvar ShadowDomRenderer = /** @class */ (function (_super) {\n __extends(ShadowDomRenderer, _super);\n function ShadowDomRenderer(eventManager, sharedStylesHost, hostEl, component) {\n var _this = _super.call(this, eventManager) || this;\n _this.sharedStylesHost = sharedStylesHost;\n _this.hostEl = hostEl;\n _this.component = component;\n _this.shadowRoot = (/** @type {?} */ (hostEl)).createShadowRoot();\n _this.sharedStylesHost.addHost(_this.shadowRoot);\n var /** @type {?} */ styles = flattenStyles(component.id, component.styles, []);\n for (var /** @type {?} */ i = 0; i < styles.length; i++) {\n var /** @type {?} */ styleEl = document.createElement('style');\n styleEl.textContent = styles[i];\n _this.shadowRoot.appendChild(styleEl);\n }\n return _this;\n }\n /**\n * @param {?} node\n * @return {?}\n */\n ShadowDomRenderer.prototype.nodeOrShadowRoot = /**\n * @param {?} node\n * @return {?}\n */\n function (node) { return node === this.hostEl ? this.shadowRoot : node; };\n /**\n * @return {?}\n */\n ShadowDomRenderer.prototype.destroy = /**\n * @return {?}\n */\n function () { this.sharedStylesHost.removeHost(this.shadowRoot); };\n /**\n * @param {?} parent\n * @param {?} newChild\n * @return {?}\n */\n ShadowDomRenderer.prototype.appendChild = /**\n * @param {?} parent\n * @param {?} newChild\n * @return {?}\n */\n function (parent, newChild) {\n return _super.prototype.appendChild.call(this, this.nodeOrShadowRoot(parent), newChild);\n };\n /**\n * @param {?} parent\n * @param {?} newChild\n * @param {?} refChild\n * @return {?}\n */\n ShadowDomRenderer.prototype.insertBefore = /**\n * @param {?} parent\n * @param {?} newChild\n * @param {?} refChild\n * @return {?}\n */\n function (parent, newChild, refChild) {\n return _super.prototype.insertBefore.call(this, this.nodeOrShadowRoot(parent), newChild, refChild);\n };\n /**\n * @param {?} parent\n * @param {?} oldChild\n * @return {?}\n */\n ShadowDomRenderer.prototype.removeChild = /**\n * @param {?} parent\n * @param {?} oldChild\n * @return {?}\n */\n function (parent, oldChild) {\n return _super.prototype.removeChild.call(this, this.nodeOrShadowRoot(parent), oldChild);\n };\n /**\n * @param {?} node\n * @return {?}\n */\n ShadowDomRenderer.prototype.parentNode = /**\n * @param {?} node\n * @return {?}\n */\n function (node) {\n return this.nodeOrShadowRoot(_super.prototype.parentNode.call(this, this.nodeOrShadowRoot(node)));\n };\n return ShadowDomRenderer;\n}(DefaultDomRenderer2));\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\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 */\nvar ɵ0 = function (v) {\n return '__zone_symbol__' + v;\n};\n/**\n * Detect if Zone is present. If it is then use simple zone aware 'addEventListener'\n * since Angular can do much more\n * efficient bookkeeping than Zone can, because we have additional information. This speeds up\n * addEventListener by 3x.\n */\nvar __symbol__ = (typeof Zone !== 'undefined') && (/** @type {?} */ (Zone))['__symbol__'] || ɵ0;\nvar ADD_EVENT_LISTENER = __symbol__('addEventListener');\nvar REMOVE_EVENT_LISTENER = __symbol__('removeEventListener');\nvar symbolNames = {};\nvar FALSE = 'FALSE';\nvar ANGULAR = 'ANGULAR';\nvar NATIVE_ADD_LISTENER = 'addEventListener';\nvar NATIVE_REMOVE_LISTENER = 'removeEventListener';\n// use the same symbol string which is used in zone.js\nvar stopSymbol = '__zone_symbol__propagationStopped';\nvar stopMethodSymbol = '__zone_symbol__stopImmediatePropagation';\nvar blackListedEvents = (typeof Zone !== 'undefined') && (/** @type {?} */ (Zone))[__symbol__('BLACK_LISTED_EVENTS')];\nvar blackListedMap;\nif (blackListedEvents) {\n blackListedMap = {};\n blackListedEvents.forEach(function (eventName) { blackListedMap[eventName] = eventName; });\n}\nvar isBlackListedEvent = function (eventName) {\n if (!blackListedMap) {\n return false;\n }\n return blackListedMap.hasOwnProperty(eventName);\n};\n// a global listener to handle all dom event,\n// so we do not need to create a closure everytime\nvar globalListener = function (event) {\n var /** @type {?} */ symbolName = symbolNames[event.type];\n if (!symbolName) {\n return;\n }\n var /** @type {?} */ taskDatas = this[symbolName];\n if (!taskDatas) {\n return;\n }\n var /** @type {?} */ args = [event];\n if (taskDatas.length === 1) {\n // if taskDatas only have one element, just invoke it\n var /** @type {?} */ taskData = taskDatas[0];\n if (taskData.zone !== Zone.current) {\n // only use Zone.run when Zone.current not equals to stored zone\n return taskData.zone.run(taskData.handler, this, args);\n }\n else {\n return taskData.handler.apply(this, args);\n }\n }\n else {\n // copy tasks as a snapshot to avoid event handlers remove\n // itself or others\n var /** @type {?} */ copiedTasks = taskDatas.slice();\n for (var /** @type {?} */ i = 0; i < copiedTasks.length; i++) {\n // if other listener call event.stopImmediatePropagation\n // just break\n if ((/** @type {?} */ (event))[stopSymbol] === true) {\n break;\n }\n var /** @type {?} */ taskData = copiedTasks[i];\n if (taskData.zone !== Zone.current) {\n // only use Zone.run when Zone.current not equals to stored zone\n taskData.zone.run(taskData.handler, this, args);\n }\n else {\n taskData.handler.apply(this, args);\n }\n }\n }\n};\nvar DomEventsPlugin = /** @class */ (function (_super) {\n __extends(DomEventsPlugin, _super);\n function DomEventsPlugin(doc, ngZone) {\n var _this = _super.call(this, doc) || this;\n _this.ngZone = ngZone;\n _this.patchEvent();\n return _this;\n }\n /**\n * @return {?}\n */\n DomEventsPlugin.prototype.patchEvent = /**\n * @return {?}\n */\n function () {\n if (!Event || !Event.prototype) {\n return;\n }\n if ((/** @type {?} */ (Event.prototype))[stopMethodSymbol]) {\n // already patched by zone.js\n return;\n }\n var /** @type {?} */ delegate = (/** @type {?} */ (Event.prototype))[stopMethodSymbol] =\n Event.prototype.stopImmediatePropagation;\n Event.prototype.stopImmediatePropagation = function () {\n if (this) {\n this[stopSymbol] = true;\n }\n // should call native delegate in case\n // in some enviroment part of the application\n // will not use the patched Event\n delegate && delegate.apply(this, arguments);\n };\n };\n // This plugin should come last in the list of plugins, because it accepts all\n // events.\n /**\n * @param {?} eventName\n * @return {?}\n */\n DomEventsPlugin.prototype.supports = /**\n * @param {?} eventName\n * @return {?}\n */\n function (eventName) { return true; };\n /**\n * @param {?} element\n * @param {?} eventName\n * @param {?} handler\n * @return {?}\n */\n DomEventsPlugin.prototype.addEventListener = /**\n * @param {?} element\n * @param {?} eventName\n * @param {?} handler\n * @return {?}\n */\n function (element, eventName, handler) {\n var _this = this;\n /**\n * This code is about to add a listener to the DOM. If Zone.js is present, than\n * `addEventListener` has been patched. The patched code adds overhead in both\n * memory and speed (3x slower) than native. For this reason if we detect that\n * Zone.js is present we use a simple version of zone aware addEventListener instead.\n * The result is faster registration and the zone will be restored.\n * But ZoneSpec.onScheduleTask, ZoneSpec.onInvokeTask, ZoneSpec.onCancelTask\n * will not be invoked\n * We also do manual zone restoration in element.ts renderEventHandlerClosure method.\n *\n * NOTE: it is possible that the element is from different iframe, and so we\n * have to check before we execute the method.\n */\n var /** @type {?} */ self = this;\n var /** @type {?} */ zoneJsLoaded = element[ADD_EVENT_LISTENER];\n var /** @type {?} */ callback = /** @type {?} */ (handler);\n // if zonejs is loaded and current zone is not ngZone\n // we keep Zone.current on target for later restoration.\n if (zoneJsLoaded && (!_angular_core.NgZone.isInAngularZone() || isBlackListedEvent(eventName))) {\n var /** @type {?} */ symbolName = symbolNames[eventName];\n if (!symbolName) {\n symbolName = symbolNames[eventName] = __symbol__(ANGULAR + eventName + FALSE);\n }\n var /** @type {?} */ taskDatas = (/** @type {?} */ (element))[symbolName];\n var /** @type {?} */ globalListenerRegistered = taskDatas && taskDatas.length > 0;\n if (!taskDatas) {\n taskDatas = (/** @type {?} */ (element))[symbolName] = [];\n }\n var /** @type {?} */ zone = isBlackListedEvent(eventName) ? Zone.root : Zone.current;\n if (taskDatas.length === 0) {\n taskDatas.push({ zone: zone, handler: callback });\n }\n else {\n var /** @type {?} */ callbackRegistered = false;\n for (var /** @type {?} */ i = 0; i < taskDatas.length; i++) {\n if (taskDatas[i].handler === callback) {\n callbackRegistered = true;\n break;\n }\n }\n if (!callbackRegistered) {\n taskDatas.push({ zone: zone, handler: callback });\n }\n }\n if (!globalListenerRegistered) {\n element[ADD_EVENT_LISTENER](eventName, globalListener, false);\n }\n }\n else {\n element[NATIVE_ADD_LISTENER](eventName, callback, false);\n }\n return function () { return _this.removeEventListener(element, eventName, callback); };\n };\n /**\n * @param {?} target\n * @param {?} eventName\n * @param {?} callback\n * @return {?}\n */\n DomEventsPlugin.prototype.removeEventListener = /**\n * @param {?} target\n * @param {?} eventName\n * @param {?} callback\n * @return {?}\n */\n function (target, eventName, callback) {\n var /** @type {?} */ underlyingRemove = target[REMOVE_EVENT_LISTENER];\n // zone.js not loaded, use native removeEventListener\n if (!underlyingRemove) {\n return target[NATIVE_REMOVE_LISTENER].apply(target, [eventName, callback, false]);\n }\n var /** @type {?} */ symbolName = symbolNames[eventName];\n var /** @type {?} */ taskDatas = symbolName && target[symbolName];\n if (!taskDatas) {\n // addEventListener not using patched version\n // just call native removeEventListener\n return target[NATIVE_REMOVE_LISTENER].apply(target, [eventName, callback, false]);\n }\n // fix issue 20532, should be able to remove\n // listener which was added inside of ngZone\n var /** @type {?} */ found = false;\n for (var /** @type {?} */ i = 0; i < taskDatas.length; i++) {\n // remove listener from taskDatas if the callback equals\n if (taskDatas[i].handler === callback) {\n found = true;\n taskDatas.splice(i, 1);\n break;\n }\n }\n if (found) {\n if (taskDatas.length === 0) {\n // all listeners are removed, we can remove the globalListener from target\n underlyingRemove.apply(target, [eventName, globalListener, false]);\n }\n }\n else {\n // not found in taskDatas, the callback may be added inside of ngZone\n // use native remove listener to remove the calback\n target[NATIVE_REMOVE_LISTENER].apply(target, [eventName, callback, false]);\n }\n };\n DomEventsPlugin.decorators = [\n { type: _angular_core.Injectable },\n ];\n /** @nocollapse */\n DomEventsPlugin.ctorParameters = function () { return [\n { type: undefined, decorators: [{ type: _angular_core.Inject, args: [DOCUMENT$1,] },] },\n { type: _angular_core.NgZone, },\n ]; };\n return DomEventsPlugin;\n}(EventManagerPlugin));\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\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 */\nvar 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 */\nvar HAMMER_GESTURE_CONFIG = new _angular_core.InjectionToken('HammerGestureConfig');\n/**\n * @record\n */\n\n/**\n * \\@experimental\n */\nvar HammerGestureConfig = /** @class */ (function () {\n function HammerGestureConfig() {\n this.events = [];\n this.overrides = {};\n }\n /**\n * @param {?} element\n * @return {?}\n */\n HammerGestureConfig.prototype.buildHammer = /**\n * @param {?} element\n * @return {?}\n */\n function (element) {\n var /** @type {?} */ mc = new Hammer(element);\n mc.get('pinch').set({ enable: true });\n mc.get('rotate').set({ enable: true });\n for (var /** @type {?} */ eventName in this.overrides) {\n mc.get(eventName).set(this.overrides[eventName]);\n }\n return mc;\n };\n HammerGestureConfig.decorators = [\n { type: _angular_core.Injectable },\n ];\n /** @nocollapse */\n HammerGestureConfig.ctorParameters = function () { return []; };\n return HammerGestureConfig;\n}());\nvar HammerGesturesPlugin = /** @class */ (function (_super) {\n __extends(HammerGesturesPlugin, _super);\n function HammerGesturesPlugin(doc, _config) {\n var _this = _super.call(this, doc) || this;\n _this._config = _config;\n return _this;\n }\n /**\n * @param {?} eventName\n * @return {?}\n */\n HammerGesturesPlugin.prototype.supports = /**\n * @param {?} eventName\n * @return {?}\n */\n function (eventName) {\n if (!EVENT_NAMES.hasOwnProperty(eventName.toLowerCase()) && !this.isCustomEvent(eventName)) {\n return false;\n }\n if (!(/** @type {?} */ (window)).Hammer) {\n throw new Error(\"Hammer.js is not loaded, can not bind \" + eventName + \" event\");\n }\n return true;\n };\n /**\n * @param {?} element\n * @param {?} eventName\n * @param {?} handler\n * @return {?}\n */\n HammerGesturesPlugin.prototype.addEventListener = /**\n * @param {?} element\n * @param {?} eventName\n * @param {?} handler\n * @return {?}\n */\n function (element, eventName, handler) {\n var _this = this;\n var /** @type {?} */ zone = this.manager.getZone();\n eventName = eventName.toLowerCase();\n return zone.runOutsideAngular(function () {\n // Creating the manager bind events, must be done outside of angular\n var /** @type {?} */ mc = _this._config.buildHammer(element);\n var /** @type {?} */ callback = function (eventObj) {\n zone.runGuarded(function () { handler(eventObj); });\n };\n mc.on(eventName, callback);\n return function () { return mc.off(eventName, callback); };\n });\n };\n /**\n * @param {?} eventName\n * @return {?}\n */\n HammerGesturesPlugin.prototype.isCustomEvent = /**\n * @param {?} eventName\n * @return {?}\n */\n function (eventName) { return this._config.events.indexOf(eventName) > -1; };\n HammerGesturesPlugin.decorators = [\n { type: _angular_core.Injectable },\n ];\n /** @nocollapse */\n HammerGesturesPlugin.ctorParameters = function () { return [\n { type: undefined, decorators: [{ type: _angular_core.Inject, args: [DOCUMENT$1,] },] },\n { type: HammerGestureConfig, decorators: [{ type: _angular_core.Inject, args: [HAMMER_GESTURE_CONFIG,] },] },\n ]; };\n return HammerGesturesPlugin;\n}(EventManagerPlugin));\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\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 */\nvar MODIFIER_KEYS = ['alt', 'control', 'meta', 'shift'];\nvar ɵ0$1 = function (event) { return event.altKey; };\nvar ɵ1$1 = function (event) { return event.ctrlKey; };\nvar ɵ2$1 = function (event) { return event.metaKey; };\nvar ɵ3 = function (event) { return event.shiftKey; };\nvar MODIFIER_KEY_GETTERS = {\n 'alt': ɵ0$1,\n 'control': ɵ1$1,\n 'meta': ɵ2$1,\n 'shift': ɵ3\n};\n/**\n * \\@experimental\n */\nvar KeyEventsPlugin = /** @class */ (function (_super) {\n __extends(KeyEventsPlugin, _super);\n function KeyEventsPlugin(doc) {\n return _super.call(this, doc) || this;\n }\n /**\n * @param {?} eventName\n * @return {?}\n */\n KeyEventsPlugin.prototype.supports = /**\n * @param {?} eventName\n * @return {?}\n */\n function (eventName) { return KeyEventsPlugin.parseEventName(eventName) != null; };\n /**\n * @param {?} element\n * @param {?} eventName\n * @param {?} handler\n * @return {?}\n */\n KeyEventsPlugin.prototype.addEventListener = /**\n * @param {?} element\n * @param {?} eventName\n * @param {?} handler\n * @return {?}\n */\n function (element, eventName, handler) {\n var /** @type {?} */ parsedEvent = /** @type {?} */ ((KeyEventsPlugin.parseEventName(eventName)));\n var /** @type {?} */ outsideHandler = KeyEventsPlugin.eventCallback(parsedEvent['fullKey'], handler, this.manager.getZone());\n return this.manager.getZone().runOutsideAngular(function () {\n return getDOM().onAndCancel(element, parsedEvent['domEventName'], outsideHandler);\n });\n };\n /**\n * @param {?} eventName\n * @return {?}\n */\n KeyEventsPlugin.parseEventName = /**\n * @param {?} eventName\n * @return {?}\n */\n function (eventName) {\n var /** @type {?} */ parts = eventName.toLowerCase().split('.');\n var /** @type {?} */ domEventName = parts.shift();\n if ((parts.length === 0) || !(domEventName === 'keydown' || domEventName === 'keyup')) {\n return null;\n }\n var /** @type {?} */ key = KeyEventsPlugin._normalizeKey(/** @type {?} */ ((parts.pop())));\n var /** @type {?} */ fullKey = '';\n MODIFIER_KEYS.forEach(function (modifierName) {\n var /** @type {?} */ index = parts.indexOf(modifierName);\n if (index > -1) {\n parts.splice(index, 1);\n fullKey += modifierName + '.';\n }\n });\n fullKey += key;\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 var /** @type {?} */ result = {};\n result['domEventName'] = domEventName;\n result['fullKey'] = fullKey;\n return result;\n };\n /**\n * @param {?} event\n * @return {?}\n */\n KeyEventsPlugin.getEventFullKey = /**\n * @param {?} event\n * @return {?}\n */\n function (event) {\n var /** @type {?} */ fullKey = '';\n var /** @type {?} */ key = getDOM().getEventKey(event);\n key = key.toLowerCase();\n if (key === ' ') {\n key = 'space'; // for readability\n }\n else if (key === '.') {\n key = 'dot'; // because '.' is used as a separator in event names\n }\n MODIFIER_KEYS.forEach(function (modifierName) {\n if (modifierName != key) {\n var /** @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 */\n KeyEventsPlugin.eventCallback = /**\n * @param {?} fullKey\n * @param {?} handler\n * @param {?} zone\n * @return {?}\n */\n function (fullKey, handler, zone) {\n return function (event /** TODO #9100 */) {\n if (KeyEventsPlugin.getEventFullKey(event) === fullKey) {\n zone.runGuarded(function () { return handler(event); });\n }\n };\n };\n /** @internal */\n /**\n * \\@internal\n * @param {?} keyName\n * @return {?}\n */\n KeyEventsPlugin._normalizeKey = /**\n * \\@internal\n * @param {?} keyName\n * @return {?}\n */\n function (keyName) {\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 };\n KeyEventsPlugin.decorators = [\n { type: _angular_core.Injectable },\n ];\n /** @nocollapse */\n KeyEventsPlugin.ctorParameters = function () { return [\n { type: undefined, decorators: [{ type: _angular_core.Inject, args: [DOCUMENT$1,] },] },\n ]; };\n return KeyEventsPlugin;\n}(EventManagerPlugin));\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\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 * 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. \"h&#116;tp\" for \"http\".\n * It also disallows HTML entities in the first path part of a relative path,\n * e.g. \"foo&lt;bar/baz\". Our existing escaping functions should not produce\n * that. More importantly, it disallows masking of a colon,\n * e.g. \"javascript&#58;...\".\n *\n * This regular expression was taken from the Closure sanitization library.\n */\nvar SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi;\n/**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n */\nvar DATA_URL_PATTERN = /^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 */\nfunction sanitizeUrl(url) {\n url = String(url);\n if (url.match(SAFE_URL_PATTERN) || url.match(DATA_URL_PATTERN))\n return url;\n if (_angular_core.isDevMode()) {\n getDOM().log(\"WARNING: sanitizing unsafe URL value \" + url + \" (see http://g.co/ng/security#xss)\");\n }\n return 'unsafe:' + url;\n}\n/**\n * @param {?} srcset\n * @return {?}\n */\nfunction sanitizeSrcset(srcset) {\n srcset = String(srcset);\n return srcset.split(',').map(function (srcset) { return sanitizeUrl(srcset.trim()); }).join(', ');\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\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 * A <body> element that can be safely used to parse untrusted HTML. Lazily initialized below.\n */\nvar inertElement = null;\n/**\n * Lazily initialized to make sure the DOM adapter gets set before use.\n */\nvar DOM = /** @type {?} */ ((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)\n return inertElement;\n DOM = getDOM();\n // Prefer using <template> element if supported.\n var /** @type {?} */ templateEl = DOM.createElement('template');\n if ('content' in templateEl)\n return templateEl;\n var /** @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 var /** @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) {\n var /** @type {?} */ res = {};\n for (var _i = 0, _a = tags.split(','); _i < _a.length; _i++) {\n var t = _a[_i];\n res[t] = true;\n }\n return res;\n}\n/**\n * @param {...?} sets\n * @return {?}\n */\nfunction merge() {\n var sets = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n sets[_i] = arguments[_i];\n }\n var /** @type {?} */ res = {};\n for (var _a = 0, sets_1 = sets; _a < sets_1.length; _a++) {\n var s = sets_1[_a];\n for (var /** @type {?} */ v in s) {\n if (s.hasOwnProperty(v))\n res[v] = true;\n }\n }\n return res;\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// Safe Void Elements - HTML5\n// http://dev.w3.org/html5/spec/Overview.html#void-elements\nvar VOID_ELEMENTS = tagSet('area,br,col,hr,img,wbr');\n// Elements that you can, intentionally, leave open (and which close themselves)\n// http://dev.w3.org/html5/spec/Overview.html#optional-tags\nvar OPTIONAL_END_TAG_BLOCK_ELEMENTS = tagSet('colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr');\nvar OPTIONAL_END_TAG_INLINE_ELEMENTS = tagSet('rp,rt');\nvar OPTIONAL_END_TAG_ELEMENTS = merge(OPTIONAL_END_TAG_INLINE_ELEMENTS, OPTIONAL_END_TAG_BLOCK_ELEMENTS);\n// Safe Block Elements - HTML5\nvar BLOCK_ELEMENTS = merge(OPTIONAL_END_TAG_BLOCK_ELEMENTS, tagSet('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// Inline Elements - HTML5\nvar INLINE_ELEMENTS = merge(OPTIONAL_END_TAG_INLINE_ELEMENTS, tagSet('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'));\nvar VALID_ELEMENTS = merge(VOID_ELEMENTS, BLOCK_ELEMENTS, INLINE_ELEMENTS, OPTIONAL_END_TAG_ELEMENTS);\n// Attributes that have href and hence need to be sanitized\nvar URI_ATTRS = tagSet('background,cite,href,itemtype,longdesc,poster,src,xlink:href');\n// Attributes that have special href set hence need to be sanitized\nvar SRCSET_ATTRS = tagSet('srcset');\nvar HTML_ATTRS = tagSet('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// NB: This currently consciously 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// 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.\nvar 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 */\nvar SanitizingHtmlSerializer = /** @class */ (function () {\n function SanitizingHtmlSerializer() {\n this.sanitizedSomething = false;\n this.buf = [];\n }\n /**\n * @param {?} el\n * @return {?}\n */\n SanitizingHtmlSerializer.prototype.sanitizeChildren = /**\n * @param {?} el\n * @return {?}\n */\n function (el) {\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 var /** @type {?} */ current = /** @type {?} */ ((el.firstChild));\n while (current) {\n if (DOM.isElementNode(current)) {\n this.startElement(/** @type {?} */ (current));\n }\n else if (DOM.isTextNode(current)) {\n this.chars(/** @type {?} */ ((DOM.nodeValue(current))));\n }\n else {\n // Strip non-element, non-text nodes.\n this.sanitizedSomething = true;\n }\n if (DOM.firstChild(current)) {\n current = /** @type {?} */ ((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));\n }\n var /** @type {?} */ next = checkClobberedElement(current, /** @type {?} */ ((DOM.nextSibling(current))));\n if (next) {\n current = next;\n break;\n }\n current = checkClobberedElement(current, /** @type {?} */ ((DOM.parentElement(current))));\n }\n }\n return this.buf.join('');\n };\n /**\n * @param {?} element\n * @return {?}\n */\n SanitizingHtmlSerializer.prototype.startElement = /**\n * @param {?} element\n * @return {?}\n */\n function (element) {\n var _this = this;\n var /** @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(function (value, attrName) {\n var /** @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])\n value = sanitizeUrl(value);\n if (SRCSET_ATTRS[lower])\n 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 */\n SanitizingHtmlSerializer.prototype.endElement = /**\n * @param {?} current\n * @return {?}\n */\n function (current) {\n var /** @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 */\n SanitizingHtmlSerializer.prototype.chars = /**\n * @param {?} chars\n * @return {?}\n */\n function (chars) { this.buf.push(encodeEntities(chars)); };\n return SanitizingHtmlSerializer;\n}());\n/**\n * @param {?} node\n * @param {?} nextNode\n * @return {?}\n */\nfunction checkClobberedElement(node, nextNode) {\n if (nextNode && DOM.contains(node, nextNode)) {\n throw new Error(\"Failed to sanitize html because the element is clobbered: \" + DOM.getOuterHTML(node));\n }\n return nextNode;\n}\n// Regular Expressions for parsing tags and attributes\nvar SURROGATE_PAIR_REGEXP = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\n// ! to ~ is the ASCII range.\nvar 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) {\n return value.replace(/&/g, '&amp;')\n .replace(SURROGATE_PAIR_REGEXP, function (match) {\n var /** @type {?} */ hi = match.charCodeAt(0);\n var /** @type {?} */ low = match.charCodeAt(1);\n return '&#' + (((hi - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000) + ';';\n })\n .replace(NON_ALPHANUMERIC_REGEXP, function (match) { return '&#' + match.charCodeAt(0) + ';'; })\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;');\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) {\n DOM.attributeMap(el).forEach(function (_, attrName) {\n if (attrName === 'xmlns:ns1' || attrName.indexOf('ns1:') === 0) {\n DOM.removeAttribute(el, attrName);\n }\n });\n for (var _i = 0, _a = DOM.childNodesAsList(el); _i < _a.length; _i++) {\n var n = _a[_i];\n if (DOM.isElementNode(n))\n stripCustomNsAttrs(/** @type {?} */ (n));\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 */\nfunction sanitizeHtml(defaultDoc, unsafeHtmlInput) {\n try {\n var /** @type {?} */ containerEl = getInertElement();\n // Make sure unsafeHtml is actually a string (TypeScript types are not enforced at runtime).\n var /** @type {?} */ unsafeHtml = unsafeHtmlInput ? String(unsafeHtmlInput) : '';\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 var /** @type {?} */ mXSSAttempts = 5;\n var /** @type {?} */ parsedHtml = unsafeHtml;\n do {\n if (mXSSAttempts === 0) {\n throw new Error('Failed to sanitize html because the input is unstable');\n }\n mXSSAttempts--;\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 var /** @type {?} */ sanitizer = new SanitizingHtmlSerializer();\n var /** @type {?} */ safeHtml = sanitizer.sanitizeChildren(DOM.getTemplateContent(containerEl) || containerEl);\n // Clear out the body element.\n var /** @type {?} */ parent_1 = DOM.getTemplateContent(containerEl) || containerEl;\n for (var _i = 0, _a = DOM.childNodesAsList(parent_1); _i < _a.length; _i++) {\n var child = _a[_i];\n DOM.removeChild(parent_1, child);\n }\n if (_angular_core.isDevMode() && sanitizer.sanitizedSomething) {\n DOM.log('WARNING: sanitizing HTML stripped some content (see http://g.co/ng/security#xss).');\n }\n return safeHtml;\n }\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/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\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 * 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 */\nvar VALUES = '[-,.\"\\'%_!# a-zA-Z0-9]+';\nvar TRANSFORMATION_FNS = '(?:matrix|translate|scale|rotate|skew|perspective)(?:X|Y|3d)?';\nvar COLOR_FNS = '(?:rgb|hsl)a?';\nvar GRADIENTS = '(?:repeating-)?(?:linear|radial)-gradient';\nvar CSS3_FNS = '(?:calc|attr)';\nvar FN_ARGS = '\\\\([-0-9.%, #a-zA-Z]+\\\\)';\nvar SAFE_STYLE_VALUE = new RegExp(\"^(\" + VALUES + \"|\" +\n (\"(?:\" + TRANSFORMATION_FNS + \"|\" + COLOR_FNS + \"|\" + GRADIENTS + \"|\" + CSS3_FNS + \")\") +\n (FN_ARGS + \")$\"), 'g');\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 */\nvar 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) {\n var /** @type {?} */ outsideSingle = true;\n var /** @type {?} */ outsideDouble = true;\n for (var /** @type {?} */ i = 0; i < value.length; i++) {\n var /** @type {?} */ c = value.charAt(i);\n if (c === '\\'' && outsideDouble) {\n outsideSingle = !outsideSingle;\n }\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 */\nfunction sanitizeStyle(value) {\n value = String(value).trim(); // Make sure it's actually a string.\n if (!value)\n return '';\n // Single url(...) values are supported, but only for URLs that sanitize cleanly. See above for\n // reasoning behind this.\n var /** @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 if (_angular_core.isDevMode()) {\n getDOM().log(\"WARNING: sanitizing unsafe style value \" + value + \" (see http://g.co/ng/security#xss).\");\n }\n return 'unsafe';\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\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 * Marker interface for a value that's safe to use in a particular context.\n *\n * \\@stable\n * @record\n */\n\n/**\n * Marker interface for a value that's safe to use as HTML.\n *\n * \\@stable\n * @record\n */\n\n/**\n * Marker interface for a value that's safe to use as style (CSS).\n *\n * \\@stable\n * @record\n */\n\n/**\n * Marker interface for a value that's safe to use as JavaScript.\n *\n * \\@stable\n * @record\n */\n\n/**\n * Marker interface for a value that's safe to use as a URL linking to a document.\n *\n * \\@stable\n * @record\n */\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 * @record\n */\n\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 */\nvar DomSanitizer = /** @class */ (function () {\n function DomSanitizer() {\n }\n return DomSanitizer;\n}());\nvar DomSanitizerImpl = /** @class */ (function (_super) {\n __extends(DomSanitizerImpl, _super);\n function DomSanitizerImpl(_doc) {\n var _this = _super.call(this) || this;\n _this._doc = _doc;\n return _this;\n }\n /**\n * @param {?} ctx\n * @param {?} value\n * @return {?}\n */\n DomSanitizerImpl.prototype.sanitize = /**\n * @param {?} ctx\n * @param {?} value\n * @return {?}\n */\n function (ctx, value) {\n if (value == null)\n return null;\n switch (ctx) {\n case _angular_core.SecurityContext.NONE:\n return /** @type {?} */ (value);\n case _angular_core.SecurityContext.HTML:\n if (value instanceof SafeHtmlImpl)\n return value.changingThisBreaksApplicationSecurity;\n this.checkNotSafeValue(value, 'HTML');\n return sanitizeHtml(this._doc, String(value));\n case _angular_core.SecurityContext.STYLE:\n if (value instanceof SafeStyleImpl)\n return value.changingThisBreaksApplicationSecurity;\n this.checkNotSafeValue(value, 'Style');\n return sanitizeStyle(/** @type {?} */ (value));\n case _angular_core.SecurityContext.SCRIPT:\n if (value instanceof SafeScriptImpl)\n return value.changingThisBreaksApplicationSecurity;\n this.checkNotSafeValue(value, 'Script');\n throw new Error('unsafe value used in a script context');\n case _angular_core.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 _angular_core.SecurityContext.RESOURCE_URL:\n if (value instanceof SafeResourceUrlImpl) {\n return value.changingThisBreaksApplicationSecurity;\n }\n this.checkNotSafeValue(value, 'ResourceURL');\n throw new Error('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 */\n DomSanitizerImpl.prototype.checkNotSafeValue = /**\n * @param {?} value\n * @param {?} expectedType\n * @return {?}\n */\n function (value, expectedType) {\n if (value instanceof SafeValueImpl) {\n throw new Error(\"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 */\n DomSanitizerImpl.prototype.bypassSecurityTrustHtml = /**\n * @param {?} value\n * @return {?}\n */\n function (value) { return new SafeHtmlImpl(value); };\n /**\n * @param {?} value\n * @return {?}\n */\n DomSanitizerImpl.prototype.bypassSecurityTrustStyle = /**\n * @param {?} value\n * @return {?}\n */\n function (value) { return new SafeStyleImpl(value); };\n /**\n * @param {?} value\n * @return {?}\n */\n DomSanitizerImpl.prototype.bypassSecurityTrustScript = /**\n * @param {?} value\n * @return {?}\n */\n function (value) { return new SafeScriptImpl(value); };\n /**\n * @param {?} value\n * @return {?}\n */\n DomSanitizerImpl.prototype.bypassSecurityTrustUrl = /**\n * @param {?} value\n * @return {?}\n */\n function (value) { return new SafeUrlImpl(value); };\n /**\n * @param {?} value\n * @return {?}\n */\n DomSanitizerImpl.prototype.bypassSecurityTrustResourceUrl = /**\n * @param {?} value\n * @return {?}\n */\n function (value) {\n return new SafeResourceUrlImpl(value);\n };\n DomSanitizerImpl.decorators = [\n { type: _angular_core.Injectable },\n ];\n /** @nocollapse */\n DomSanitizerImpl.ctorParameters = function () { return [\n { type: undefined, decorators: [{ type: _angular_core.Inject, args: [DOCUMENT$1,] },] },\n ]; };\n return DomSanitizerImpl;\n}(DomSanitizer));\n/**\n * @abstract\n */\nvar SafeValueImpl = /** @class */ (function () {\n function SafeValueImpl(changingThisBreaksApplicationSecurity) {\n // empty\n this.changingThisBreaksApplicationSecurity = changingThisBreaksApplicationSecurity;\n }\n /**\n * @return {?}\n */\n SafeValueImpl.prototype.toString = /**\n * @return {?}\n */\n function () {\n return \"SafeValue must use [property]=binding: \" + this.changingThisBreaksApplicationSecurity +\n \" (see http://g.co/ng/security#xss)\";\n };\n return SafeValueImpl;\n}());\nvar SafeHtmlImpl = /** @class */ (function (_super) {\n __extends(SafeHtmlImpl, _super);\n function SafeHtmlImpl() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @return {?}\n */\n SafeHtmlImpl.prototype.getTypeName = /**\n * @return {?}\n */\n function () { return 'HTML'; };\n return SafeHtmlImpl;\n}(SafeValueImpl));\nvar SafeStyleImpl = /** @class */ (function (_super) {\n __extends(SafeStyleImpl, _super);\n function SafeStyleImpl() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @return {?}\n */\n SafeStyleImpl.prototype.getTypeName = /**\n * @return {?}\n */\n function () { return 'Style'; };\n return SafeStyleImpl;\n}(SafeValueImpl));\nvar SafeScriptImpl = /** @class */ (function (_super) {\n __extends(SafeScriptImpl, _super);\n function SafeScriptImpl() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @return {?}\n */\n SafeScriptImpl.prototype.getTypeName = /**\n * @return {?}\n */\n function () { return 'Script'; };\n return SafeScriptImpl;\n}(SafeValueImpl));\nvar SafeUrlImpl = /** @class */ (function (_super) {\n __extends(SafeUrlImpl, _super);\n function SafeUrlImpl() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @return {?}\n */\n SafeUrlImpl.prototype.getTypeName = /**\n * @return {?}\n */\n function () { return 'URL'; };\n return SafeUrlImpl;\n}(SafeValueImpl));\nvar SafeResourceUrlImpl = /** @class */ (function (_super) {\n __extends(SafeResourceUrlImpl, _super);\n function SafeResourceUrlImpl() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @return {?}\n */\n SafeResourceUrlImpl.prototype.getTypeName = /**\n * @return {?}\n */\n function () { return 'ResourceURL'; };\n return SafeResourceUrlImpl;\n}(SafeValueImpl));\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\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 */\nvar INTERNAL_BROWSER_PLATFORM_PROVIDERS = [\n { provide: _angular_core.PLATFORM_ID, useValue: _angular_common.ɵPLATFORM_BROWSER_ID },\n { provide: _angular_core.PLATFORM_INITIALIZER, useValue: initDomAdapter, multi: true },\n { provide: _angular_common.PlatformLocation, useClass: BrowserPlatformLocation, deps: [DOCUMENT$1] },\n { provide: DOCUMENT$1, 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 */\nvar BROWSER_SANITIZATION_PROVIDERS = [\n { provide: _angular_core.Sanitizer, useExisting: DomSanitizer },\n { provide: DomSanitizer, useClass: DomSanitizerImpl, deps: [DOCUMENT$1] },\n];\n/**\n * \\@stable\n */\nvar platformBrowser = _angular_core.createPlatformFactory(_angular_core.platformCore, 'browser', INTERNAL_BROWSER_PLATFORM_PROVIDERS);\n/**\n * @return {?}\n */\nfunction initDomAdapter() {\n BrowserDomAdapter.makeCurrent();\n BrowserGetTestability.init();\n}\n/**\n * @return {?}\n */\nfunction errorHandler() {\n return new _angular_core.ErrorHandler();\n}\n/**\n * @return {?}\n */\nfunction _document() {\n return document;\n}\n/**\n * The ng module for the browser.\n *\n * \\@stable\n */\nvar BrowserModule = /** @class */ (function () {\n function BrowserModule(parentModule) {\n if (parentModule) {\n throw new Error(\"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 */\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 */\n BrowserModule.withServerTransition = /**\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 */\n function (params) {\n return {\n ngModule: BrowserModule,\n providers: [\n { provide: _angular_core.APP_ID, useValue: params.appId },\n { provide: TRANSITION_ID, useExisting: _angular_core.APP_ID },\n SERVER_TRANSITION_PROVIDERS,\n ],\n };\n };\n BrowserModule.decorators = [\n { type: _angular_core.NgModule, args: [{\n providers: [\n BROWSER_SANITIZATION_PROVIDERS,\n { provide: _angular_core.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: _angular_core.RendererFactory2, useExisting: DomRendererFactory2 },\n { provide: SharedStylesHost, useExisting: DomSharedStylesHost },\n DomSharedStylesHost,\n _angular_core.Testability,\n EventManager,\n ELEMENT_PROBE_PROVIDERS,\n Meta,\n Title,\n ],\n exports: [_angular_common.CommonModule, _angular_core.ApplicationModule]\n },] },\n ];\n /** @nocollapse */\n BrowserModule.ctorParameters = function () { return [\n { type: BrowserModule, decorators: [{ type: _angular_core.Optional }, { type: _angular_core.SkipSelf },] },\n ]; };\n return BrowserModule;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\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 */\nvar win = typeof window !== 'undefined' && window || /** @type {?} */ ({});\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\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 */\nvar ChangeDetectionPerfRecord = /** @class */ (function () {\n function ChangeDetectionPerfRecord(msPerTick, numTicks) {\n this.msPerTick = msPerTick;\n this.numTicks = numTicks;\n }\n return ChangeDetectionPerfRecord;\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 */\nvar AngularProfiler = /** @class */ (function () {\n function AngularProfiler(ref) {\n this.appRef = ref.injector.get(_angular_core.ApplicationRef);\n }\n // tslint:disable:no-console\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 */\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 */\n AngularProfiler.prototype.timeChangeDetection = /**\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 */\n function (config) {\n var /** @type {?} */ record = config && config['record'];\n var /** @type {?} */ profileName = 'Change Detection';\n // Profiler is not available in Android browsers, nor in IE 9 without dev tools opened\n var /** @type {?} */ isProfilerAvailable = win.console.profile != null;\n if (record && isProfilerAvailable) {\n win.console.profile(profileName);\n }\n var /** @type {?} */ start = getDOM().performanceNow();\n var /** @type {?} */ numTicks = 0;\n while (numTicks < 5 || (getDOM().performanceNow() - start) < 500) {\n this.appRef.tick();\n numTicks++;\n }\n var /** @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 {?} */ (win.console.profileEnd))(profileName);\n }\n var /** @type {?} */ msPerTick = (end - start) / numTicks;\n win.console.log(\"ran \" + numTicks + \" change detection cycles\");\n win.console.log(msPerTick.toFixed(2) + \" ms per check\");\n return new ChangeDetectionPerfRecord(msPerTick, numTicks);\n };\n return AngularProfiler;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\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 */\nvar PROFILER_GLOBAL_NAME = '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 */\nfunction enableDebugTools(ref) {\n exportNgVar(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 */\nfunction disableDebugTools() {\n exportNgVar(PROFILER_GLOBAL_NAME, null);\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\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 * @param {?} text\n * @return {?}\n */\nfunction escapeHtml(text) {\n var /** @type {?} */ escapedText = {\n '&': '&a;',\n '\"': '&q;',\n '\\'': '&s;',\n '<': '&l;',\n '>': '&g;',\n };\n return text.replace(/[&\"'<>]/g, function (s) { return escapedText[s]; });\n}\n/**\n * @param {?} text\n * @return {?}\n */\nfunction unescapeHtml(text) {\n var /** @type {?} */ unescapedText = {\n '&a;': '&',\n '&q;': '\"',\n '&s;': '\\'',\n '&l;': '<',\n '&g;': '>',\n };\n return text.replace(/&[^;]+;/g, function (s) { return unescapedText[s]; });\n}\n/**\n * Create a `StateKey<T>` that can be used to store value of type T with `TransferState`.\n *\n * Example:\n *\n * ```\n * const COUNTER_KEY = makeStateKey<number>('counter');\n * let value = 10;\n *\n * transferState.set(COUNTER_KEY, value);\n * ```\n *\n * \\@experimental\n * @template T\n * @param {?} key\n * @return {?}\n */\nfunction makeStateKey(key) {\n return /** @type {?} */ (key);\n}\n/**\n * A key value store that is transferred from the application on the server side to the application\n * on the client side.\n *\n * `TransferState` will be available as an injectable token. To use it import\n * `ServerTransferStateModule` on the server and `BrowserTransferStateModule` on the client.\n *\n * The values in the store are serialized/deserialized using JSON.stringify/JSON.parse. So only\n * boolean, number, string, null and non-class objects will be serialized and deserialzied in a\n * non-lossy manner.\n *\n * \\@experimental\n */\nvar TransferState = /** @class */ (function () {\n function TransferState() {\n this.store = {};\n this.onSerializeCallbacks = {};\n }\n /** @internal */\n /**\n * \\@internal\n * @param {?} initState\n * @return {?}\n */\n TransferState.init = /**\n * \\@internal\n * @param {?} initState\n * @return {?}\n */\n function (initState) {\n var /** @type {?} */ transferState = new TransferState();\n transferState.store = initState;\n return transferState;\n };\n /**\n * Get the value corresponding to a key. Return `defaultValue` if key is not found.\n */\n /**\n * Get the value corresponding to a key. Return `defaultValue` if key is not found.\n * @template T\n * @param {?} key\n * @param {?} defaultValue\n * @return {?}\n */\n TransferState.prototype.get = /**\n * Get the value corresponding to a key. Return `defaultValue` if key is not found.\n * @template T\n * @param {?} key\n * @param {?} defaultValue\n * @return {?}\n */\n function (key, defaultValue) { return /** @type {?} */ (this.store[key]) || defaultValue; };\n /**\n * Set the value corresponding to a key.\n */\n /**\n * Set the value corresponding to a key.\n * @template T\n * @param {?} key\n * @param {?} value\n * @return {?}\n */\n TransferState.prototype.set = /**\n * Set the value corresponding to a key.\n * @template T\n * @param {?} key\n * @param {?} value\n * @return {?}\n */\n function (key, value) { this.store[key] = value; };\n /**\n * Remove a key from the store.\n */\n /**\n * Remove a key from the store.\n * @template T\n * @param {?} key\n * @return {?}\n */\n TransferState.prototype.remove = /**\n * Remove a key from the store.\n * @template T\n * @param {?} key\n * @return {?}\n */\n function (key) { delete this.store[key]; };\n /**\n * Test whether a key exists in the store.\n */\n /**\n * Test whether a key exists in the store.\n * @template T\n * @param {?} key\n * @return {?}\n */\n TransferState.prototype.hasKey = /**\n * Test whether a key exists in the store.\n * @template T\n * @param {?} key\n * @return {?}\n */\n function (key) { return this.store.hasOwnProperty(key); };\n /**\n * Register a callback to provide the value for a key when `toJson` is called.\n */\n /**\n * Register a callback to provide the value for a key when `toJson` is called.\n * @template T\n * @param {?} key\n * @param {?} callback\n * @return {?}\n */\n TransferState.prototype.onSerialize = /**\n * Register a callback to provide the value for a key when `toJson` is called.\n * @template T\n * @param {?} key\n * @param {?} callback\n * @return {?}\n */\n function (key, callback) {\n this.onSerializeCallbacks[key] = callback;\n };\n /**\n * Serialize the current state of the store to JSON.\n */\n /**\n * Serialize the current state of the store to JSON.\n * @return {?}\n */\n TransferState.prototype.toJson = /**\n * Serialize the current state of the store to JSON.\n * @return {?}\n */\n function () {\n // Call the onSerialize callbacks and put those values into the store.\n for (var /** @type {?} */ key in this.onSerializeCallbacks) {\n if (this.onSerializeCallbacks.hasOwnProperty(key)) {\n try {\n this.store[key] = this.onSerializeCallbacks[key]();\n }\n catch (/** @type {?} */ e) {\n console.warn('Exception in onSerialize callback: ', e);\n }\n }\n }\n return JSON.stringify(this.store);\n };\n TransferState.decorators = [\n { type: _angular_core.Injectable },\n ];\n /** @nocollapse */\n TransferState.ctorParameters = function () { return []; };\n return TransferState;\n}());\n/**\n * @param {?} doc\n * @param {?} appId\n * @return {?}\n */\nfunction initTransferState(doc, appId) {\n // Locate the script tag with the JSON data transferred from the server.\n // The id of the script tag is set to the Angular appId + 'state'.\n var /** @type {?} */ script = doc.getElementById(appId + '-state');\n var /** @type {?} */ initialState = {};\n if (script && script.textContent) {\n try {\n initialState = JSON.parse(unescapeHtml(script.textContent));\n }\n catch (/** @type {?} */ e) {\n console.warn('Exception while restoring TransferState for app ' + appId, e);\n }\n }\n return TransferState.init(initialState);\n}\n/**\n * NgModule to install on the client side while using the `TransferState` to transfer state from\n * server to client.\n *\n * \\@experimental\n */\nvar BrowserTransferStateModule = /** @class */ (function () {\n function BrowserTransferStateModule() {\n }\n BrowserTransferStateModule.decorators = [\n { type: _angular_core.NgModule, args: [{\n providers: [{ provide: TransferState, useFactory: initTransferState, deps: [DOCUMENT$1, _angular_core.APP_ID] }],\n },] },\n ];\n /** @nocollapse */\n BrowserTransferStateModule.ctorParameters = function () { return []; };\n return BrowserTransferStateModule;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\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 * Predicates for use with {\\@link DebugElement}'s query functions.\n *\n * \\@experimental All debugging apis are currently experimental.\n */\nvar By = /** @class */ (function () {\n function By() {\n }\n /**\n * Match all elements.\n *\n * ## Example\n *\n * {@example platform-browser/dom/debug/ts/by/by.ts region='by_all'}\n */\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 */\n By.all = /**\n * Match all elements.\n *\n * ## Example\n *\n * {\\@example platform-browser/dom/debug/ts/by/by.ts region='by_all'}\n * @return {?}\n */\n function () { return function (debugElement) { return 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 */\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 */\n By.css = /**\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 */\n function (selector) {\n return function (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 */\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 */\n By.directive = /**\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 */\n function (type) {\n return function (debugElement) { return ((debugElement.providerTokens)).indexOf(type) !== -1; };\n };\n return By;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\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/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\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 * \\@stable\n */\nvar VERSION = new _angular_core.Version('5.2.1');\n\nexports.BrowserModule = BrowserModule;\nexports.platformBrowser = platformBrowser;\nexports.Meta = Meta;\nexports.Title = Title;\nexports.disableDebugTools = disableDebugTools;\nexports.enableDebugTools = enableDebugTools;\nexports.BrowserTransferStateModule = BrowserTransferStateModule;\nexports.TransferState = TransferState;\nexports.makeStateKey = makeStateKey;\nexports.By = By;\nexports.DOCUMENT = DOCUMENT$1;\nexports.EVENT_MANAGER_PLUGINS = EVENT_MANAGER_PLUGINS;\nexports.EventManager = EventManager;\nexports.HAMMER_GESTURE_CONFIG = HAMMER_GESTURE_CONFIG;\nexports.HammerGestureConfig = HammerGestureConfig;\nexports.DomSanitizer = DomSanitizer;\nexports.VERSION = VERSION;\nexports.ɵBROWSER_SANITIZATION_PROVIDERS = BROWSER_SANITIZATION_PROVIDERS;\nexports.ɵINTERNAL_BROWSER_PLATFORM_PROVIDERS = INTERNAL_BROWSER_PLATFORM_PROVIDERS;\nexports.ɵinitDomAdapter = initDomAdapter;\nexports.ɵBrowserDomAdapter = BrowserDomAdapter;\nexports.ɵBrowserPlatformLocation = BrowserPlatformLocation;\nexports.ɵTRANSITION_ID = TRANSITION_ID;\nexports.ɵBrowserGetTestability = BrowserGetTestability;\nexports.ɵescapeHtml = escapeHtml;\nexports.ɵELEMENT_PROBE_PROVIDERS = ELEMENT_PROBE_PROVIDERS;\nexports.ɵDomAdapter = DomAdapter;\nexports.ɵgetDOM = getDOM;\nexports.ɵsetRootDomAdapter = setRootDomAdapter;\nexports.ɵDomRendererFactory2 = DomRendererFactory2;\nexports.ɵNAMESPACE_URIS = NAMESPACE_URIS;\nexports.ɵflattenStyles = flattenStyles;\nexports.ɵshimContentAttribute = shimContentAttribute;\nexports.ɵshimHostAttribute = shimHostAttribute;\nexports.ɵDomEventsPlugin = DomEventsPlugin;\nexports.ɵHammerGesturesPlugin = HammerGesturesPlugin;\nexports.ɵKeyEventsPlugin = KeyEventsPlugin;\nexports.ɵDomSharedStylesHost = DomSharedStylesHost;\nexports.ɵSharedStylesHost = SharedStylesHost;\nexports.ɵb = _document;\nexports.ɵa = errorHandler;\nexports.ɵi = GenericBrowserDomAdapter;\nexports.ɵg = SERVER_TRANSITION_PROVIDERS;\nexports.ɵf = appInitializerFactory;\nexports.ɵc = initTransferState;\nexports.ɵh = _createNgProbe;\nexports.ɵd = EventManagerPlugin;\nexports.ɵe = DomSanitizerImpl;\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n})));\n//# sourceMappingURL=platform-browser.umd.js.map\n"]}
1
+ {"version":3,"sources":["platform-browser.umd.js"],"names":["global","factory","exports","module","require","define","amd","ng","platformBrowser","common","core","this","_angular_common","_angular_core","__extends","d","b","__","constructor","extendStatics","prototype","Object","create","getDOM","_DOM","setRootDomAdapter","adapter","getBaseElementHref","baseElement","document","querySelector","getAttribute","relativePath","url","urlParsingNode","createElement","setAttribute","pathname","charAt","supportsState","window","history","pushState","appInitializerFactory","transitionId","injector","get","ApplicationInitStatus","donePromise","then","dom","Array","slice","apply","querySelectorAll","filter","el","forEach","remove","exportNgVar","name","value","COMPILED","ɵglobal","inspectNativeElement","element","getDebugNode","_createNgProbe","coreTokens","INSPECT_GLOBAL_NAME","CORE_TOKENS_GLOBAL_NAME","__assign","CORE_TOKENS","_ngProbeTokensToMap","tokens","reduce","prev","t","token","shimContentAttribute","componentShortId","CONTENT_ATTR","replace","COMPONENT_REGEX","shimHostAttribute","HOST_ATTR","flattenStyles","compId","styles","target","i","length","style","isArray","push","decoratePreventDefault","eventHandler","event","preventDefault","returnValue","checkNoSyntheticProp","nameKind","charCodeAt","AT_CHARCODE","Error","isDOMParserAvailable","DOMParser","e","sanitizeUrl","String","match","SAFE_URL_PATTERN","DATA_URL_PATTERN","isDevMode","log","sanitizeSrcset","srcset","split","map","trim","join","tagSet","tags","res","_i","_a","merge","sets","arguments","sets_1","s","v","hasOwnProperty","encodeEntities","SURROGATE_PAIR_REGEXP","NON_ALPHANUMERIC_REGEXP","sanitizeHtml","defaultDoc","unsafeHtmlInput","DOM","inertBodyElement","inertBodyHelper","InertBodyHelper","unsafeHtml","getInertBodyElement","mXSSAttempts","parsedHtml","getInnerHTML","sanitizer","SanitizingHtmlSerializer","safeHtml","sanitizeChildren","getTemplateContent","sanitizedSomething","parent_1","childNodesAsList","child","removeChild","hasBalancedQuotes","outsideSingle","outsideDouble","c","sanitizeStyle","urlMatch","URL_RE","SAFE_STYLE_VALUE","initDomAdapter","BrowserDomAdapter","makeCurrent","BrowserGetTestability","init","errorHandler","ErrorHandler","_document","enableDebugTools","ref","PROFILER_GLOBAL_NAME","AngularProfiler","disableDebugTools","escapeHtml","text","escapedText","&","\"","'","<",">","unescapeHtml","unescapedText","&a;","&q;","&s;","&l;","&g;","makeStateKey","key","initTransferState","doc","appId","script","getElementById","initialState","textContent","JSON","parse","console","warn","TransferState","nodeContains","setPrototypeOf","__proto__","p","assign","n","call","DomAdapter","resourceLoaderType","defineProperty","_attrToPropMap","set","enumerable","configurable","GenericBrowserDomAdapter","_super","_this","_animationPrefix","_transitionEnd","element_1","getStyle","domPrefixes","toLowerCase","transEndEventNames_1","WebkitTransition","MozTransition","OTransition","transition","keys","getDistributedNodes","resolveAndSetHref","baseUrl","href","supportsDOMEvents","supportsNativeShadowDOM","createShadowRoot","getAnimationPrefix","getTransitionEnd","supportsAnimation","class","innerHtml","readonly","tabindex","_keyMap","\b","\t","","\u001b","Del","Esc","Left","Right","Up","Down","Menu","Scroll","Win","_chromeNumKeyPadMap","A","B","C","D","E","F","G","H","I","J","K","M","N","O","`","","contains","node","compareDocumentPosition","blackListedMap","templateHtml","hasProperty","setProperty","getProperty","invoke","methodName","args","logError","error","logGroup","group","logGroupEnd","groupEnd","nodeA","nodeB","selector","on","evt","listener","addEventListener","onAndCancel","removeEventListener","dispatchEvent","createMouseEvent","eventType","getDefaultDocument","createEvent","initEvent","isPrevented","defaultPrevented","innerHTML","isTemplateElement","content","getOuterHTML","outerHTML","nodeName","nodeValue","type","firstChild","nextSibling","parentElement","parentNode","childNodes","clearNodes","appendChild","replaceChild","newChild","oldChild","insertBefore","parent","insertAllBefore","nodes","insertAfter","setInnerHTML","getText","setText","getValue","setValue","getChecked","checked","setChecked","createComment","createTemplate","html","tagName","createElementNS","ns","createTextNode","createScriptTag","attrName","attrValue","createStyleElement","css","getShadowRoot","shadowRoot","getHost","host","clone","cloneNode","getElementsByClassName","getElementsByTagName","classList","addClass","className","add","removeClass","hasClass","setStyle","styleName","styleValue","removeStyle","stylename","hasStyle","attributeMap","Map","elAttrs","attributes","attrib","item","hasAttribute","attribute","hasAttributeNS","getAttributeNS","setAttributeNS","removeAttribute","removeAttributeNS","templateAwareRoot","createHtmlDocument","implementation","createHTMLDocument","getBoundingClientRect","top","bottom","left","right","width","height","getTitle","title","setTitle","newTitle","elementMatches","isElementNode","matches","msMatchesSelector","webkitMatchesSelector","isTextNode","nodeType","Node","TEXT_NODE","isCommentNode","COMMENT_NODE","ELEMENT_NODE","hasShadowRoot","HTMLElement","isShadowRoot","DocumentFragment","importIntoDoc","importNode","adoptNode","getHref","getEventKey","keyIdentifier","startsWith","fromCharCode","parseInt","substring","location","getGlobalEventTarget","body","getHistory","getLocation","getBaseHref","resetBaseElement","getUserAgent","navigator","userAgent","setData","getData","getComputedStyle","supportsWebAnimation","performanceNow","performance","now","Date","getTime","supportsCookies","getCookie","ɵparseCookieValue","cookie","setCookie","encodeURIComponent","DOCUMENT$1","DOCUMENT","BrowserPlatformLocation","_doc","_init","_history","getBaseHrefFromDOM","onPopState","fn","onHashChange","newPath","search","hash","state","replaceState","forward","back","decorators","Injectable","ctorParameters","undefined","Inject","PlatformLocation","Meta","_dom","addTag","tag","forceCreation","_getOrCreateElement","addTags","result","getTag","attrSelector","getTags","list","updateTag","_parseSelector","meta","_setMetaElementAttributes","removeTag","removeTagElement","elem","_containsAttributes","head","prop","attr","every","TRANSITION_ID","InjectionToken","SERVER_TRANSITION_PROVIDERS","provide","APP_INITIALIZER","useFactory","deps","Injector","multi","setTestabilityGetter","addToWindow","registry","findInAncestors","testability","findTestabilityInTree","getAllTestabilities","getAllRootElements","whenAllStable","callback","testabilities","count","didWork","decrement","didWork_","whenStable","getTestability","Title","ApplicationRef","NgZone","ELEMENT_PROBE_PROVIDERS","NgProbeToken","Optional","EVENT_MANAGER_PLUGINS","EventManager","plugins","_zone","_eventNameToPlugin","manager","_plugins","reverse","eventName","handler","_findPluginFor","addGlobalEventListener","getZone","plugin","plugin_1","supports","EventManagerPlugin","SharedStylesHost","_stylesSet","Set","addStyles","additions","has","onStylesAdded","getAllStyles","from","DomSharedStylesHost","_hostNodes","_styleNodes","_addStylesToHost","styleEl","addHost","hostNode","removeHost","delete","ngOnDestroy","styleNode","NAMESPACE_URIS","svg","xhtml","xlink","xml","xmlns","DomRendererFactory2","eventManager","sharedStylesHost","rendererByCompId","defaultRenderer","DefaultDomRenderer2","createRenderer","encapsulation","ViewEncapsulation","Emulated","renderer","id","EmulatedEncapsulationDomRenderer2","applyToHost","Native","ShadowDomRenderer","begin","end","data","destroy","namespace","createText","refChild","selectRootElement","selectorOrNode","namespaceUri","flags","RendererStyleFlags2","DashCase","Important","removeProperty","listen","component","contentAttr","hostAttr","hostEl","nodeOrShadowRoot","ɵ0","__symbol__","Zone","ADD_EVENT_LISTENER","REMOVE_EVENT_LISTENER","symbolNames","stopSymbol","blackListedEvents","isBlackListedEvent","globalListener","symbolName","taskDatas","taskData","zone","current","run","copiedTasks","DomEventsPlugin","ngZone","patchEvent","Event","delegate","stopImmediatePropagation","zoneJsLoaded","isInAngularZone","globalListenerRegistered","root","callbackRegistered","underlyingRemove","found","splice","EVENT_NAMES","pan","panstart","panmove","panend","pancancel","panleft","panright","panup","pandown","pinch","pinchstart","pinchmove","pinchend","pinchcancel","pinchin","pinchout","press","pressup","rotate","rotatestart","rotatemove","rotateend","rotatecancel","swipe","swipeleft","swiperight","swipeup","swipedown","tap","HAMMER_GESTURE_CONFIG","HammerGestureConfig","events","overrides","buildHammer","mc","Hammer","enable","HammerGesturesPlugin","_config","isCustomEvent","runOutsideAngular","eventObj","runGuarded","off","indexOf","MODIFIER_KEYS","ɵ0$1","altKey","ɵ1$1","ctrlKey","ɵ2$1","metaKey","ɵ3","shiftKey","MODIFIER_KEY_GETTERS","alt","control","shift","KeyEventsPlugin","parseEventName","parsedEvent","outsideHandler","eventCallback","parts","domEventName","_normalizeKey","pop","fullKey","modifierName","index","getEventFullKey","modifierGetter","keyName","inertDocument","inertHtml","getInertBodyElement_XHR","getInertBodyElement_DOMParser","getInertBodyElement_InertDocument","encodeURI","xhr","XMLHttpRequest","responseType","open","send","response","parseFromString","templateEl","documentMode","stripCustomNsAttrs","_","VOID_ELEMENTS","OPTIONAL_END_TAG_BLOCK_ELEMENTS","OPTIONAL_END_TAG_INLINE_ELEMENTS","OPTIONAL_END_TAG_ELEMENTS","BLOCK_ELEMENTS","INLINE_ELEMENTS","VALID_ELEMENTS","URI_ATTRS","SRCSET_ATTRS","HTML_ATTRS","VALID_ATTRS","buf","startElement","chars","endElement","next","checkClobberedElement","lower","nextNode","RegExp","DomSanitizer","DomSanitizerImpl","sanitize","ctx","SecurityContext","NONE","HTML","SafeHtmlImpl","changingThisBreaksApplicationSecurity","checkNotSafeValue","STYLE","SafeStyleImpl","SCRIPT","SafeScriptImpl","URL","SafeResourceUrlImpl","SafeUrlImpl","RESOURCE_URL","expectedType","SafeValueImpl","getTypeName","bypassSecurityTrustHtml","bypassSecurityTrustStyle","bypassSecurityTrustScript","bypassSecurityTrustUrl","bypassSecurityTrustResourceUrl","toString","INTERNAL_BROWSER_PLATFORM_PROVIDERS","PLATFORM_ID","useValue","ɵPLATFORM_BROWSER_ID","PLATFORM_INITIALIZER","useClass","BROWSER_SANITIZATION_PROVIDERS","Sanitizer","useExisting","createPlatformFactory","platformCore","BrowserModule","parentModule","withServerTransition","params","ngModule","providers","APP_ID","NgModule","RendererFactory2","Testability","CommonModule","ApplicationModule","SkipSelf","win","ChangeDetectionPerfRecord","msPerTick","numTicks","appRef","timeChangeDetection","config","record","isProfilerAvailable","profile","start","tick","toFixed","store","onSerializeCallbacks","initState","transferState","defaultValue","hasKey","onSerialize","toJson","stringify","BrowserTransferStateModule","By","all","debugElement","nativeElement","directive","VERSION","Version","ɵBROWSER_SANITIZATION_PROVIDERS","ɵINTERNAL_BROWSER_PLATFORM_PROVIDERS","ɵinitDomAdapter","ɵBrowserDomAdapter","ɵBrowserPlatformLocation","ɵTRANSITION_ID","ɵBrowserGetTestability","ɵescapeHtml","ɵELEMENT_PROBE_PROVIDERS","ɵDomAdapter","ɵgetDOM","ɵsetRootDomAdapter","ɵDomRendererFactory2","ɵNAMESPACE_URIS","ɵflattenStyles","ɵshimContentAttribute","ɵshimHostAttribute","ɵDomEventsPlugin","ɵHammerGesturesPlugin","ɵKeyEventsPlugin","ɵDomSharedStylesHost","ɵSharedStylesHost","ɵb","ɵa","ɵi","ɵg","ɵf","ɵc","ɵh","ɵd","ɵe"],"mappings":"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","file":"platform-browser.umd.min.js","sourcesContent":["/**\n * @license Angular v5.2.5\n * (c) 2010-2018 Google, Inc. https://angular.io/\n * License: MIT\n */\n(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/common'), require('@angular/core')) :\n\ttypeof define === 'function' && define.amd ? define('@angular/platform-browser', ['exports', '@angular/common', '@angular/core'], factory) :\n\t(factory((global.ng = global.ng || {}, global.ng.platformBrowser = {}),global.ng.common,global.ng.core));\n}(this, (function (exports,_angular_common,_angular_core) { 'use strict';\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n\r\nfunction __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nvar __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n};\n\n/**\n * @license Angular v5.2.5\n * (c) 2010-2018 Google, Inc. https://angular.io/\n * License: MIT\n */\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\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 */\nvar _DOM = /** @type {?} */ ((null));\n/**\n * @return {?}\n */\nfunction getDOM() {\n return _DOM;\n}\n/**\n * @param {?} adapter\n * @return {?}\n */\n\n/**\n * @param {?} adapter\n * @return {?}\n */\nfunction setRootDomAdapter(adapter) {\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 */\nvar DomAdapter = /** @class */ (function () {\n function DomAdapter() {\n this.resourceLoaderType = /** @type {?} */ ((null));\n }\n Object.defineProperty(DomAdapter.prototype, \"attrToPropMap\", {\n /**\n * Maps attribute names to their corresponding property names for cases\n * where attribute name doesn't match property name.\n */\n get: /**\n * Maps attribute names to their corresponding property names for cases\n * where attribute name doesn't match property name.\n * @return {?}\n */\n function () { return this._attrToPropMap; },\n set: /**\n * @param {?} value\n * @return {?}\n */\n function (value) { this._attrToPropMap = value; },\n enumerable: true,\n configurable: true\n });\n return DomAdapter;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\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 * 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 */\nvar GenericBrowserDomAdapter = /** @class */ (function (_super) {\n __extends(GenericBrowserDomAdapter, _super);\n function GenericBrowserDomAdapter() {\n var _this = _super.call(this) || this;\n _this._animationPrefix = null;\n _this._transitionEnd = null;\n try {\n var /** @type {?} */ element_1 = _this.createElement('div', document);\n if (_this.getStyle(element_1, 'animationName') != null) {\n _this._animationPrefix = '';\n }\n else {\n var /** @type {?} */ domPrefixes = ['Webkit', 'Moz', 'O', 'ms'];\n for (var /** @type {?} */ i = 0; i < domPrefixes.length; i++) {\n if (_this.getStyle(element_1, domPrefixes[i] + 'AnimationName') != null) {\n _this._animationPrefix = '-' + domPrefixes[i].toLowerCase() + '-';\n break;\n }\n }\n }\n var /** @type {?} */ transEndEventNames_1 = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend'\n };\n Object.keys(transEndEventNames_1).forEach(function (key) {\n if (_this.getStyle(element_1, key) != null) {\n _this._transitionEnd = transEndEventNames_1[key];\n }\n });\n }\n catch (/** @type {?} */ e) {\n _this._animationPrefix = null;\n _this._transitionEnd = null;\n }\n return _this;\n }\n /**\n * @param {?} el\n * @return {?}\n */\n GenericBrowserDomAdapter.prototype.getDistributedNodes = /**\n * @param {?} el\n * @return {?}\n */\n function (el) { return (/** @type {?} */ (el)).getDistributedNodes(); };\n /**\n * @param {?} el\n * @param {?} baseUrl\n * @param {?} href\n * @return {?}\n */\n GenericBrowserDomAdapter.prototype.resolveAndSetHref = /**\n * @param {?} el\n * @param {?} baseUrl\n * @param {?} href\n * @return {?}\n */\n function (el, baseUrl, href) {\n el.href = href == null ? baseUrl : baseUrl + '/../' + href;\n };\n /**\n * @return {?}\n */\n GenericBrowserDomAdapter.prototype.supportsDOMEvents = /**\n * @return {?}\n */\n function () { return true; };\n /**\n * @return {?}\n */\n GenericBrowserDomAdapter.prototype.supportsNativeShadowDOM = /**\n * @return {?}\n */\n function () {\n return typeof (/** @type {?} */ (document.body)).createShadowRoot === 'function';\n };\n /**\n * @return {?}\n */\n GenericBrowserDomAdapter.prototype.getAnimationPrefix = /**\n * @return {?}\n */\n function () { return this._animationPrefix ? this._animationPrefix : ''; };\n /**\n * @return {?}\n */\n GenericBrowserDomAdapter.prototype.getTransitionEnd = /**\n * @return {?}\n */\n function () { return this._transitionEnd ? this._transitionEnd : ''; };\n /**\n * @return {?}\n */\n GenericBrowserDomAdapter.prototype.supportsAnimation = /**\n * @return {?}\n */\n function () {\n return this._animationPrefix != null && this._transitionEnd != null;\n };\n return GenericBrowserDomAdapter;\n}(DomAdapter));\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\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 */\nvar _attrToPropMap = {\n 'class': 'className',\n 'innerHtml': 'innerHTML',\n 'readonly': 'readOnly',\n 'tabindex': 'tabIndex',\n};\nvar DOM_KEY_LOCATION_NUMPAD = 3;\n// Map to convert some key or keyIdentifier values to what will be returned by getEventKey\nvar _keyMap = {\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// 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 ...\nvar _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};\nvar nodeContains;\nif (_angular_core.ɵglobal['Node']) {\n nodeContains = _angular_core.ɵglobal['Node'].prototype.contains || function (node) {\n return !!(this.compareDocumentPosition(node) & 16);\n };\n}\n/**\n * A `DomAdapter` powered by full browser DOM APIs.\n *\n * \\@security Tread carefully! Interacting with the DOM directly is dangerous and\n * can introduce XSS risks.\n */\nvar BrowserDomAdapter = /** @class */ (function (_super) {\n __extends(BrowserDomAdapter, _super);\n function BrowserDomAdapter() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {?} templateHtml\n * @return {?}\n */\n BrowserDomAdapter.prototype.parse = /**\n * @param {?} templateHtml\n * @return {?}\n */\n function (templateHtml) { throw new Error('parse not implemented'); };\n /**\n * @return {?}\n */\n BrowserDomAdapter.makeCurrent = /**\n * @return {?}\n */\n function () { setRootDomAdapter(new BrowserDomAdapter()); };\n /**\n * @param {?} element\n * @param {?} name\n * @return {?}\n */\n BrowserDomAdapter.prototype.hasProperty = /**\n * @param {?} element\n * @param {?} name\n * @return {?}\n */\n function (element, name) { return name in element; };\n /**\n * @param {?} el\n * @param {?} name\n * @param {?} value\n * @return {?}\n */\n BrowserDomAdapter.prototype.setProperty = /**\n * @param {?} el\n * @param {?} name\n * @param {?} value\n * @return {?}\n */\n function (el, name, value) { (/** @type {?} */ (el))[name] = value; };\n /**\n * @param {?} el\n * @param {?} name\n * @return {?}\n */\n BrowserDomAdapter.prototype.getProperty = /**\n * @param {?} el\n * @param {?} name\n * @return {?}\n */\n function (el, name) { return (/** @type {?} */ (el))[name]; };\n /**\n * @param {?} el\n * @param {?} methodName\n * @param {?} args\n * @return {?}\n */\n BrowserDomAdapter.prototype.invoke = /**\n * @param {?} el\n * @param {?} methodName\n * @param {?} args\n * @return {?}\n */\n function (el, methodName, args) {\n (_a = (/** @type {?} */ (el)))[methodName].apply(_a, args);\n var _a;\n };\n // TODO(tbosch): move this into a separate environment class once we have it\n /**\n * @param {?} error\n * @return {?}\n */\n BrowserDomAdapter.prototype.logError = /**\n * @param {?} error\n * @return {?}\n */\n function (error) {\n if (window.console) {\n if (console.error) {\n console.error(error);\n }\n else {\n console.log(error);\n }\n }\n };\n /**\n * @param {?} error\n * @return {?}\n */\n BrowserDomAdapter.prototype.log = /**\n * @param {?} error\n * @return {?}\n */\n function (error) {\n if (window.console) {\n window.console.log && window.console.log(error);\n }\n };\n /**\n * @param {?} error\n * @return {?}\n */\n BrowserDomAdapter.prototype.logGroup = /**\n * @param {?} error\n * @return {?}\n */\n function (error) {\n if (window.console) {\n window.console.group && window.console.group(error);\n }\n };\n /**\n * @return {?}\n */\n BrowserDomAdapter.prototype.logGroupEnd = /**\n * @return {?}\n */\n function () {\n if (window.console) {\n window.console.groupEnd && window.console.groupEnd();\n }\n };\n Object.defineProperty(BrowserDomAdapter.prototype, \"attrToPropMap\", {\n get: /**\n * @return {?}\n */\n function () { return _attrToPropMap; },\n enumerable: true,\n configurable: true\n });\n /**\n * @param {?} nodeA\n * @param {?} nodeB\n * @return {?}\n */\n BrowserDomAdapter.prototype.contains = /**\n * @param {?} nodeA\n * @param {?} nodeB\n * @return {?}\n */\n function (nodeA, nodeB) { return nodeContains.call(nodeA, nodeB); };\n /**\n * @param {?} el\n * @param {?} selector\n * @return {?}\n */\n BrowserDomAdapter.prototype.querySelector = /**\n * @param {?} el\n * @param {?} selector\n * @return {?}\n */\n function (el, selector) { return el.querySelector(selector); };\n /**\n * @param {?} el\n * @param {?} selector\n * @return {?}\n */\n BrowserDomAdapter.prototype.querySelectorAll = /**\n * @param {?} el\n * @param {?} selector\n * @return {?}\n */\n function (el, selector) { return el.querySelectorAll(selector); };\n /**\n * @param {?} el\n * @param {?} evt\n * @param {?} listener\n * @return {?}\n */\n BrowserDomAdapter.prototype.on = /**\n * @param {?} el\n * @param {?} evt\n * @param {?} listener\n * @return {?}\n */\n function (el, evt, listener) { el.addEventListener(evt, listener, false); };\n /**\n * @param {?} el\n * @param {?} evt\n * @param {?} listener\n * @return {?}\n */\n BrowserDomAdapter.prototype.onAndCancel = /**\n * @param {?} el\n * @param {?} evt\n * @param {?} listener\n * @return {?}\n */\n function (el, evt, listener) {\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 function () { el.removeEventListener(evt, listener, false); };\n };\n /**\n * @param {?} el\n * @param {?} evt\n * @return {?}\n */\n BrowserDomAdapter.prototype.dispatchEvent = /**\n * @param {?} el\n * @param {?} evt\n * @return {?}\n */\n function (el, evt) { el.dispatchEvent(evt); };\n /**\n * @param {?} eventType\n * @return {?}\n */\n BrowserDomAdapter.prototype.createMouseEvent = /**\n * @param {?} eventType\n * @return {?}\n */\n function (eventType) {\n var /** @type {?} */ evt = this.getDefaultDocument().createEvent('MouseEvent');\n evt.initEvent(eventType, true, true);\n return evt;\n };\n /**\n * @param {?} eventType\n * @return {?}\n */\n BrowserDomAdapter.prototype.createEvent = /**\n * @param {?} eventType\n * @return {?}\n */\n function (eventType) {\n var /** @type {?} */ evt = this.getDefaultDocument().createEvent('Event');\n evt.initEvent(eventType, true, true);\n return evt;\n };\n /**\n * @param {?} evt\n * @return {?}\n */\n BrowserDomAdapter.prototype.preventDefault = /**\n * @param {?} evt\n * @return {?}\n */\n function (evt) {\n evt.preventDefault();\n evt.returnValue = false;\n };\n /**\n * @param {?} evt\n * @return {?}\n */\n BrowserDomAdapter.prototype.isPrevented = /**\n * @param {?} evt\n * @return {?}\n */\n function (evt) {\n return evt.defaultPrevented || evt.returnValue != null && !evt.returnValue;\n };\n /**\n * @param {?} el\n * @return {?}\n */\n BrowserDomAdapter.prototype.getInnerHTML = /**\n * @param {?} el\n * @return {?}\n */\n function (el) { return el.innerHTML; };\n /**\n * @param {?} el\n * @return {?}\n */\n BrowserDomAdapter.prototype.getTemplateContent = /**\n * @param {?} el\n * @return {?}\n */\n function (el) {\n return 'content' in el && this.isTemplateElement(el) ? (/** @type {?} */ (el)).content : null;\n };\n /**\n * @param {?} el\n * @return {?}\n */\n BrowserDomAdapter.prototype.getOuterHTML = /**\n * @param {?} el\n * @return {?}\n */\n function (el) { return el.outerHTML; };\n /**\n * @param {?} node\n * @return {?}\n */\n BrowserDomAdapter.prototype.nodeName = /**\n * @param {?} node\n * @return {?}\n */\n function (node) { return node.nodeName; };\n /**\n * @param {?} node\n * @return {?}\n */\n BrowserDomAdapter.prototype.nodeValue = /**\n * @param {?} node\n * @return {?}\n */\n function (node) { return node.nodeValue; };\n /**\n * @param {?} node\n * @return {?}\n */\n BrowserDomAdapter.prototype.type = /**\n * @param {?} node\n * @return {?}\n */\n function (node) { return node.type; };\n /**\n * @param {?} node\n * @return {?}\n */\n BrowserDomAdapter.prototype.content = /**\n * @param {?} node\n * @return {?}\n */\n function (node) {\n if (this.hasProperty(node, 'content')) {\n return (/** @type {?} */ (node)).content;\n }\n else {\n return node;\n }\n };\n /**\n * @param {?} el\n * @return {?}\n */\n BrowserDomAdapter.prototype.firstChild = /**\n * @param {?} el\n * @return {?}\n */\n function (el) { return el.firstChild; };\n /**\n * @param {?} el\n * @return {?}\n */\n BrowserDomAdapter.prototype.nextSibling = /**\n * @param {?} el\n * @return {?}\n */\n function (el) { return el.nextSibling; };\n /**\n * @param {?} el\n * @return {?}\n */\n BrowserDomAdapter.prototype.parentElement = /**\n * @param {?} el\n * @return {?}\n */\n function (el) { return el.parentNode; };\n /**\n * @param {?} el\n * @return {?}\n */\n BrowserDomAdapter.prototype.childNodes = /**\n * @param {?} el\n * @return {?}\n */\n function (el) { return el.childNodes; };\n /**\n * @param {?} el\n * @return {?}\n */\n BrowserDomAdapter.prototype.childNodesAsList = /**\n * @param {?} el\n * @return {?}\n */\n function (el) {\n var /** @type {?} */ childNodes = el.childNodes;\n var /** @type {?} */ res = new Array(childNodes.length);\n for (var /** @type {?} */ i = 0; i < childNodes.length; i++) {\n res[i] = childNodes[i];\n }\n return res;\n };\n /**\n * @param {?} el\n * @return {?}\n */\n BrowserDomAdapter.prototype.clearNodes = /**\n * @param {?} el\n * @return {?}\n */\n function (el) {\n while (el.firstChild) {\n el.removeChild(el.firstChild);\n }\n };\n /**\n * @param {?} el\n * @param {?} node\n * @return {?}\n */\n BrowserDomAdapter.prototype.appendChild = /**\n * @param {?} el\n * @param {?} node\n * @return {?}\n */\n function (el, node) { el.appendChild(node); };\n /**\n * @param {?} el\n * @param {?} node\n * @return {?}\n */\n BrowserDomAdapter.prototype.removeChild = /**\n * @param {?} el\n * @param {?} node\n * @return {?}\n */\n function (el, node) { el.removeChild(node); };\n /**\n * @param {?} el\n * @param {?} newChild\n * @param {?} oldChild\n * @return {?}\n */\n BrowserDomAdapter.prototype.replaceChild = /**\n * @param {?} el\n * @param {?} newChild\n * @param {?} oldChild\n * @return {?}\n */\n function (el, newChild, oldChild) { el.replaceChild(newChild, oldChild); };\n /**\n * @param {?} node\n * @return {?}\n */\n BrowserDomAdapter.prototype.remove = /**\n * @param {?} node\n * @return {?}\n */\n function (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 */\n BrowserDomAdapter.prototype.insertBefore = /**\n * @param {?} parent\n * @param {?} ref\n * @param {?} node\n * @return {?}\n */\n function (parent, ref, node) { parent.insertBefore(node, ref); };\n /**\n * @param {?} parent\n * @param {?} ref\n * @param {?} nodes\n * @return {?}\n */\n BrowserDomAdapter.prototype.insertAllBefore = /**\n * @param {?} parent\n * @param {?} ref\n * @param {?} nodes\n * @return {?}\n */\n function (parent, ref, nodes) {\n nodes.forEach(function (n) { return parent.insertBefore(n, ref); });\n };\n /**\n * @param {?} parent\n * @param {?} ref\n * @param {?} node\n * @return {?}\n */\n BrowserDomAdapter.prototype.insertAfter = /**\n * @param {?} parent\n * @param {?} ref\n * @param {?} node\n * @return {?}\n */\n function (parent, ref, node) { parent.insertBefore(node, ref.nextSibling); };\n /**\n * @param {?} el\n * @param {?} value\n * @return {?}\n */\n BrowserDomAdapter.prototype.setInnerHTML = /**\n * @param {?} el\n * @param {?} value\n * @return {?}\n */\n function (el, value) { el.innerHTML = value; };\n /**\n * @param {?} el\n * @return {?}\n */\n BrowserDomAdapter.prototype.getText = /**\n * @param {?} el\n * @return {?}\n */\n function (el) { return el.textContent; };\n /**\n * @param {?} el\n * @param {?} value\n * @return {?}\n */\n BrowserDomAdapter.prototype.setText = /**\n * @param {?} el\n * @param {?} value\n * @return {?}\n */\n function (el, value) { el.textContent = value; };\n /**\n * @param {?} el\n * @return {?}\n */\n BrowserDomAdapter.prototype.getValue = /**\n * @param {?} el\n * @return {?}\n */\n function (el) { return el.value; };\n /**\n * @param {?} el\n * @param {?} value\n * @return {?}\n */\n BrowserDomAdapter.prototype.setValue = /**\n * @param {?} el\n * @param {?} value\n * @return {?}\n */\n function (el, value) { el.value = value; };\n /**\n * @param {?} el\n * @return {?}\n */\n BrowserDomAdapter.prototype.getChecked = /**\n * @param {?} el\n * @return {?}\n */\n function (el) { return el.checked; };\n /**\n * @param {?} el\n * @param {?} value\n * @return {?}\n */\n BrowserDomAdapter.prototype.setChecked = /**\n * @param {?} el\n * @param {?} value\n * @return {?}\n */\n function (el, value) { el.checked = value; };\n /**\n * @param {?} text\n * @return {?}\n */\n BrowserDomAdapter.prototype.createComment = /**\n * @param {?} text\n * @return {?}\n */\n function (text) { return this.getDefaultDocument().createComment(text); };\n /**\n * @param {?} html\n * @return {?}\n */\n BrowserDomAdapter.prototype.createTemplate = /**\n * @param {?} html\n * @return {?}\n */\n function (html) {\n var /** @type {?} */ t = this.getDefaultDocument().createElement('template');\n t.innerHTML = html;\n return t;\n };\n /**\n * @param {?} tagName\n * @param {?=} doc\n * @return {?}\n */\n BrowserDomAdapter.prototype.createElement = /**\n * @param {?} tagName\n * @param {?=} doc\n * @return {?}\n */\n function (tagName, doc) {\n doc = doc || this.getDefaultDocument();\n return doc.createElement(tagName);\n };\n /**\n * @param {?} ns\n * @param {?} tagName\n * @param {?=} doc\n * @return {?}\n */\n BrowserDomAdapter.prototype.createElementNS = /**\n * @param {?} ns\n * @param {?} tagName\n * @param {?=} doc\n * @return {?}\n */\n function (ns, tagName, doc) {\n doc = doc || this.getDefaultDocument();\n return doc.createElementNS(ns, tagName);\n };\n /**\n * @param {?} text\n * @param {?=} doc\n * @return {?}\n */\n BrowserDomAdapter.prototype.createTextNode = /**\n * @param {?} text\n * @param {?=} doc\n * @return {?}\n */\n function (text, doc) {\n doc = doc || this.getDefaultDocument();\n return doc.createTextNode(text);\n };\n /**\n * @param {?} attrName\n * @param {?} attrValue\n * @param {?=} doc\n * @return {?}\n */\n BrowserDomAdapter.prototype.createScriptTag = /**\n * @param {?} attrName\n * @param {?} attrValue\n * @param {?=} doc\n * @return {?}\n */\n function (attrName, attrValue, doc) {\n doc = doc || this.getDefaultDocument();\n var /** @type {?} */ el = /** @type {?} */ (doc.createElement('SCRIPT'));\n el.setAttribute(attrName, attrValue);\n return el;\n };\n /**\n * @param {?} css\n * @param {?=} doc\n * @return {?}\n */\n BrowserDomAdapter.prototype.createStyleElement = /**\n * @param {?} css\n * @param {?=} doc\n * @return {?}\n */\n function (css, doc) {\n doc = doc || this.getDefaultDocument();\n var /** @type {?} */ style = /** @type {?} */ (doc.createElement('style'));\n this.appendChild(style, this.createTextNode(css, doc));\n return style;\n };\n /**\n * @param {?} el\n * @return {?}\n */\n BrowserDomAdapter.prototype.createShadowRoot = /**\n * @param {?} el\n * @return {?}\n */\n function (el) { return (/** @type {?} */ (el)).createShadowRoot(); };\n /**\n * @param {?} el\n * @return {?}\n */\n BrowserDomAdapter.prototype.getShadowRoot = /**\n * @param {?} el\n * @return {?}\n */\n function (el) { return (/** @type {?} */ (el)).shadowRoot; };\n /**\n * @param {?} el\n * @return {?}\n */\n BrowserDomAdapter.prototype.getHost = /**\n * @param {?} el\n * @return {?}\n */\n function (el) { return (/** @type {?} */ (el)).host; };\n /**\n * @param {?} node\n * @return {?}\n */\n BrowserDomAdapter.prototype.clone = /**\n * @param {?} node\n * @return {?}\n */\n function (node) { return node.cloneNode(true); };\n /**\n * @param {?} element\n * @param {?} name\n * @return {?}\n */\n BrowserDomAdapter.prototype.getElementsByClassName = /**\n * @param {?} element\n * @param {?} name\n * @return {?}\n */\n function (element, name) {\n return element.getElementsByClassName(name);\n };\n /**\n * @param {?} element\n * @param {?} name\n * @return {?}\n */\n BrowserDomAdapter.prototype.getElementsByTagName = /**\n * @param {?} element\n * @param {?} name\n * @return {?}\n */\n function (element, name) {\n return element.getElementsByTagName(name);\n };\n /**\n * @param {?} element\n * @return {?}\n */\n BrowserDomAdapter.prototype.classList = /**\n * @param {?} element\n * @return {?}\n */\n function (element) { return Array.prototype.slice.call(element.classList, 0); };\n /**\n * @param {?} element\n * @param {?} className\n * @return {?}\n */\n BrowserDomAdapter.prototype.addClass = /**\n * @param {?} element\n * @param {?} className\n * @return {?}\n */\n function (element, className) { element.classList.add(className); };\n /**\n * @param {?} element\n * @param {?} className\n * @return {?}\n */\n BrowserDomAdapter.prototype.removeClass = /**\n * @param {?} element\n * @param {?} className\n * @return {?}\n */\n function (element, className) { element.classList.remove(className); };\n /**\n * @param {?} element\n * @param {?} className\n * @return {?}\n */\n BrowserDomAdapter.prototype.hasClass = /**\n * @param {?} element\n * @param {?} className\n * @return {?}\n */\n function (element, className) {\n return element.classList.contains(className);\n };\n /**\n * @param {?} element\n * @param {?} styleName\n * @param {?} styleValue\n * @return {?}\n */\n BrowserDomAdapter.prototype.setStyle = /**\n * @param {?} element\n * @param {?} styleName\n * @param {?} styleValue\n * @return {?}\n */\n function (element, styleName, styleValue) {\n element.style[styleName] = styleValue;\n };\n /**\n * @param {?} element\n * @param {?} stylename\n * @return {?}\n */\n BrowserDomAdapter.prototype.removeStyle = /**\n * @param {?} element\n * @param {?} stylename\n * @return {?}\n */\n function (element, stylename) {\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 */\n BrowserDomAdapter.prototype.getStyle = /**\n * @param {?} element\n * @param {?} stylename\n * @return {?}\n */\n function (element, stylename) { return element.style[stylename]; };\n /**\n * @param {?} element\n * @param {?} styleName\n * @param {?=} styleValue\n * @return {?}\n */\n BrowserDomAdapter.prototype.hasStyle = /**\n * @param {?} element\n * @param {?} styleName\n * @param {?=} styleValue\n * @return {?}\n */\n function (element, styleName, styleValue) {\n var /** @type {?} */ value = this.getStyle(element, styleName) || '';\n return styleValue ? value == styleValue : value.length > 0;\n };\n /**\n * @param {?} element\n * @return {?}\n */\n BrowserDomAdapter.prototype.tagName = /**\n * @param {?} element\n * @return {?}\n */\n function (element) { return element.tagName; };\n /**\n * @param {?} element\n * @return {?}\n */\n BrowserDomAdapter.prototype.attributeMap = /**\n * @param {?} element\n * @return {?}\n */\n function (element) {\n var /** @type {?} */ res = new Map();\n var /** @type {?} */ elAttrs = element.attributes;\n for (var /** @type {?} */ i = 0; i < elAttrs.length; i++) {\n var /** @type {?} */ attrib = elAttrs.item(i);\n res.set(attrib.name, attrib.value);\n }\n return res;\n };\n /**\n * @param {?} element\n * @param {?} attribute\n * @return {?}\n */\n BrowserDomAdapter.prototype.hasAttribute = /**\n * @param {?} element\n * @param {?} attribute\n * @return {?}\n */\n function (element, attribute) {\n return element.hasAttribute(attribute);\n };\n /**\n * @param {?} element\n * @param {?} ns\n * @param {?} attribute\n * @return {?}\n */\n BrowserDomAdapter.prototype.hasAttributeNS = /**\n * @param {?} element\n * @param {?} ns\n * @param {?} attribute\n * @return {?}\n */\n function (element, ns, attribute) {\n return element.hasAttributeNS(ns, attribute);\n };\n /**\n * @param {?} element\n * @param {?} attribute\n * @return {?}\n */\n BrowserDomAdapter.prototype.getAttribute = /**\n * @param {?} element\n * @param {?} attribute\n * @return {?}\n */\n function (element, attribute) {\n return element.getAttribute(attribute);\n };\n /**\n * @param {?} element\n * @param {?} ns\n * @param {?} name\n * @return {?}\n */\n BrowserDomAdapter.prototype.getAttributeNS = /**\n * @param {?} element\n * @param {?} ns\n * @param {?} name\n * @return {?}\n */\n function (element, ns, name) {\n return element.getAttributeNS(ns, name);\n };\n /**\n * @param {?} element\n * @param {?} name\n * @param {?} value\n * @return {?}\n */\n BrowserDomAdapter.prototype.setAttribute = /**\n * @param {?} element\n * @param {?} name\n * @param {?} value\n * @return {?}\n */\n function (element, name, value) { element.setAttribute(name, value); };\n /**\n * @param {?} element\n * @param {?} ns\n * @param {?} name\n * @param {?} value\n * @return {?}\n */\n BrowserDomAdapter.prototype.setAttributeNS = /**\n * @param {?} element\n * @param {?} ns\n * @param {?} name\n * @param {?} value\n * @return {?}\n */\n function (element, ns, name, value) {\n element.setAttributeNS(ns, name, value);\n };\n /**\n * @param {?} element\n * @param {?} attribute\n * @return {?}\n */\n BrowserDomAdapter.prototype.removeAttribute = /**\n * @param {?} element\n * @param {?} attribute\n * @return {?}\n */\n function (element, attribute) { element.removeAttribute(attribute); };\n /**\n * @param {?} element\n * @param {?} ns\n * @param {?} name\n * @return {?}\n */\n BrowserDomAdapter.prototype.removeAttributeNS = /**\n * @param {?} element\n * @param {?} ns\n * @param {?} name\n * @return {?}\n */\n function (element, ns, name) {\n element.removeAttributeNS(ns, name);\n };\n /**\n * @param {?} el\n * @return {?}\n */\n BrowserDomAdapter.prototype.templateAwareRoot = /**\n * @param {?} el\n * @return {?}\n */\n function (el) { return this.isTemplateElement(el) ? this.content(el) : el; };\n /**\n * @return {?}\n */\n BrowserDomAdapter.prototype.createHtmlDocument = /**\n * @return {?}\n */\n function () {\n return document.implementation.createHTMLDocument('fakeTitle');\n };\n /**\n * @return {?}\n */\n BrowserDomAdapter.prototype.getDefaultDocument = /**\n * @return {?}\n */\n function () { return document; };\n /**\n * @param {?} el\n * @return {?}\n */\n BrowserDomAdapter.prototype.getBoundingClientRect = /**\n * @param {?} el\n * @return {?}\n */\n function (el) {\n try {\n return el.getBoundingClientRect();\n }\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 */\n BrowserDomAdapter.prototype.getTitle = /**\n * @param {?} doc\n * @return {?}\n */\n function (doc) { return doc.title; };\n /**\n * @param {?} doc\n * @param {?} newTitle\n * @return {?}\n */\n BrowserDomAdapter.prototype.setTitle = /**\n * @param {?} doc\n * @param {?} newTitle\n * @return {?}\n */\n function (doc, newTitle) { doc.title = newTitle || ''; };\n /**\n * @param {?} n\n * @param {?} selector\n * @return {?}\n */\n BrowserDomAdapter.prototype.elementMatches = /**\n * @param {?} n\n * @param {?} selector\n * @return {?}\n */\n function (n, selector) {\n if (this.isElementNode(n)) {\n return n.matches && n.matches(selector) ||\n n.msMatchesSelector && n.msMatchesSelector(selector) ||\n n.webkitMatchesSelector && n.webkitMatchesSelector(selector);\n }\n return false;\n };\n /**\n * @param {?} el\n * @return {?}\n */\n BrowserDomAdapter.prototype.isTemplateElement = /**\n * @param {?} el\n * @return {?}\n */\n function (el) {\n return this.isElementNode(el) && el.nodeName === 'TEMPLATE';\n };\n /**\n * @param {?} node\n * @return {?}\n */\n BrowserDomAdapter.prototype.isTextNode = /**\n * @param {?} node\n * @return {?}\n */\n function (node) { return node.nodeType === Node.TEXT_NODE; };\n /**\n * @param {?} node\n * @return {?}\n */\n BrowserDomAdapter.prototype.isCommentNode = /**\n * @param {?} node\n * @return {?}\n */\n function (node) { return node.nodeType === Node.COMMENT_NODE; };\n /**\n * @param {?} node\n * @return {?}\n */\n BrowserDomAdapter.prototype.isElementNode = /**\n * @param {?} node\n * @return {?}\n */\n function (node) { return node.nodeType === Node.ELEMENT_NODE; };\n /**\n * @param {?} node\n * @return {?}\n */\n BrowserDomAdapter.prototype.hasShadowRoot = /**\n * @param {?} node\n * @return {?}\n */\n function (node) {\n return node.shadowRoot != null && node instanceof HTMLElement;\n };\n /**\n * @param {?} node\n * @return {?}\n */\n BrowserDomAdapter.prototype.isShadowRoot = /**\n * @param {?} node\n * @return {?}\n */\n function (node) { return node instanceof DocumentFragment; };\n /**\n * @param {?} node\n * @return {?}\n */\n BrowserDomAdapter.prototype.importIntoDoc = /**\n * @param {?} node\n * @return {?}\n */\n function (node) { return document.importNode(this.templateAwareRoot(node), true); };\n /**\n * @param {?} node\n * @return {?}\n */\n BrowserDomAdapter.prototype.adoptNode = /**\n * @param {?} node\n * @return {?}\n */\n function (node) { return document.adoptNode(node); };\n /**\n * @param {?} el\n * @return {?}\n */\n BrowserDomAdapter.prototype.getHref = /**\n * @param {?} el\n * @return {?}\n */\n function (el) { return /** @type {?} */ ((el.getAttribute('href'))); };\n /**\n * @param {?} event\n * @return {?}\n */\n BrowserDomAdapter.prototype.getEventKey = /**\n * @param {?} event\n * @return {?}\n */\n function (event) {\n var /** @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))[key];\n }\n }\n }\n return _keyMap[key] || key;\n };\n /**\n * @param {?} doc\n * @param {?} target\n * @return {?}\n */\n BrowserDomAdapter.prototype.getGlobalEventTarget = /**\n * @param {?} doc\n * @param {?} target\n * @return {?}\n */\n function (doc, target) {\n if (target === 'window') {\n return window;\n }\n if (target === 'document') {\n return doc;\n }\n if (target === 'body') {\n return doc.body;\n }\n return null;\n };\n /**\n * @return {?}\n */\n BrowserDomAdapter.prototype.getHistory = /**\n * @return {?}\n */\n function () { return window.history; };\n /**\n * @return {?}\n */\n BrowserDomAdapter.prototype.getLocation = /**\n * @return {?}\n */\n function () { return window.location; };\n /**\n * @param {?} doc\n * @return {?}\n */\n BrowserDomAdapter.prototype.getBaseHref = /**\n * @param {?} doc\n * @return {?}\n */\n function (doc) {\n var /** @type {?} */ href = getBaseElementHref();\n return href == null ? null : relativePath(href);\n };\n /**\n * @return {?}\n */\n BrowserDomAdapter.prototype.resetBaseElement = /**\n * @return {?}\n */\n function () { baseElement = null; };\n /**\n * @return {?}\n */\n BrowserDomAdapter.prototype.getUserAgent = /**\n * @return {?}\n */\n function () { return window.navigator.userAgent; };\n /**\n * @param {?} element\n * @param {?} name\n * @param {?} value\n * @return {?}\n */\n BrowserDomAdapter.prototype.setData = /**\n * @param {?} element\n * @param {?} name\n * @param {?} value\n * @return {?}\n */\n function (element, name, value) {\n this.setAttribute(element, 'data-' + name, value);\n };\n /**\n * @param {?} element\n * @param {?} name\n * @return {?}\n */\n BrowserDomAdapter.prototype.getData = /**\n * @param {?} element\n * @param {?} name\n * @return {?}\n */\n function (element, name) {\n return this.getAttribute(element, 'data-' + name);\n };\n /**\n * @param {?} element\n * @return {?}\n */\n BrowserDomAdapter.prototype.getComputedStyle = /**\n * @param {?} element\n * @return {?}\n */\n function (element) { return getComputedStyle(element); };\n // TODO(tbosch): move this into a separate environment class once we have it\n /**\n * @return {?}\n */\n BrowserDomAdapter.prototype.supportsWebAnimation = /**\n * @return {?}\n */\n function () {\n return typeof (/** @type {?} */ (Element)).prototype['animate'] === 'function';\n };\n /**\n * @return {?}\n */\n BrowserDomAdapter.prototype.performanceNow = /**\n * @return {?}\n */\n function () {\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 */\n BrowserDomAdapter.prototype.supportsCookies = /**\n * @return {?}\n */\n function () { return true; };\n /**\n * @param {?} name\n * @return {?}\n */\n BrowserDomAdapter.prototype.getCookie = /**\n * @param {?} name\n * @return {?}\n */\n function (name) { return _angular_common.ɵparseCookieValue(document.cookie, name); };\n /**\n * @param {?} name\n * @param {?} value\n * @return {?}\n */\n BrowserDomAdapter.prototype.setCookie = /**\n * @param {?} name\n * @param {?} value\n * @return {?}\n */\n function (name, value) {\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 return BrowserDomAdapter;\n}(GenericBrowserDomAdapter));\nvar baseElement = null;\n/**\n * @return {?}\n */\nfunction getBaseElementHref() {\n if (!baseElement) {\n baseElement = /** @type {?} */ ((document.querySelector('base')));\n if (!baseElement) {\n return null;\n }\n }\n return baseElement.getAttribute('href');\n}\n// based on urlUtils.js in AngularJS 1\nvar urlParsingNode;\n/**\n * @param {?} url\n * @return {?}\n */\nfunction relativePath(url) {\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/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\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 * 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 * @deprecated import from `\\@angular/common` instead.\n */\nvar DOCUMENT$1 = _angular_common.DOCUMENT;\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\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 * @return {?}\n */\nfunction supportsState() {\n return !!window.history.pushState;\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\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 * `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 */\nvar BrowserPlatformLocation = /** @class */ (function (_super) {\n __extends(BrowserPlatformLocation, _super);\n function BrowserPlatformLocation(_doc) {\n var _this = _super.call(this) || this;\n _this._doc = _doc;\n _this._init();\n return _this;\n }\n // This is moved to its own method so that `MockPlatformLocationStrategy` can overwrite it\n /** @internal */\n /**\n * \\@internal\n * @return {?}\n */\n BrowserPlatformLocation.prototype._init = /**\n * \\@internal\n * @return {?}\n */\n function () {\n (/** @type {?} */ (this)).location = getDOM().getLocation();\n this._history = getDOM().getHistory();\n };\n /**\n * @return {?}\n */\n BrowserPlatformLocation.prototype.getBaseHrefFromDOM = /**\n * @return {?}\n */\n function () { return /** @type {?} */ ((getDOM().getBaseHref(this._doc))); };\n /**\n * @param {?} fn\n * @return {?}\n */\n BrowserPlatformLocation.prototype.onPopState = /**\n * @param {?} fn\n * @return {?}\n */\n function (fn) {\n getDOM().getGlobalEventTarget(this._doc, 'window').addEventListener('popstate', fn, false);\n };\n /**\n * @param {?} fn\n * @return {?}\n */\n BrowserPlatformLocation.prototype.onHashChange = /**\n * @param {?} fn\n * @return {?}\n */\n function (fn) {\n getDOM().getGlobalEventTarget(this._doc, 'window').addEventListener('hashchange', fn, false);\n };\n Object.defineProperty(BrowserPlatformLocation.prototype, \"pathname\", {\n get: /**\n * @return {?}\n */\n function () { return this.location.pathname; },\n set: /**\n * @param {?} newPath\n * @return {?}\n */\n function (newPath) { this.location.pathname = newPath; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BrowserPlatformLocation.prototype, \"search\", {\n get: /**\n * @return {?}\n */\n function () { return this.location.search; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BrowserPlatformLocation.prototype, \"hash\", {\n get: /**\n * @return {?}\n */\n function () { return this.location.hash; },\n enumerable: true,\n configurable: true\n });\n /**\n * @param {?} state\n * @param {?} title\n * @param {?} url\n * @return {?}\n */\n BrowserPlatformLocation.prototype.pushState = /**\n * @param {?} state\n * @param {?} title\n * @param {?} url\n * @return {?}\n */\n function (state, title, url) {\n if (supportsState()) {\n this._history.pushState(state, title, url);\n }\n else {\n this.location.hash = url;\n }\n };\n /**\n * @param {?} state\n * @param {?} title\n * @param {?} url\n * @return {?}\n */\n BrowserPlatformLocation.prototype.replaceState = /**\n * @param {?} state\n * @param {?} title\n * @param {?} url\n * @return {?}\n */\n function (state, title, url) {\n if (supportsState()) {\n this._history.replaceState(state, title, url);\n }\n else {\n this.location.hash = url;\n }\n };\n /**\n * @return {?}\n */\n BrowserPlatformLocation.prototype.forward = /**\n * @return {?}\n */\n function () { this._history.forward(); };\n /**\n * @return {?}\n */\n BrowserPlatformLocation.prototype.back = /**\n * @return {?}\n */\n function () { this._history.back(); };\n BrowserPlatformLocation.decorators = [\n { type: _angular_core.Injectable },\n ];\n /** @nocollapse */\n BrowserPlatformLocation.ctorParameters = function () { return [\n { type: undefined, decorators: [{ type: _angular_core.Inject, args: [DOCUMENT$1,] },] },\n ]; };\n return BrowserPlatformLocation;\n}(_angular_common.PlatformLocation));\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\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 * A service that can be used to get and add meta tags.\n *\n * \\@experimental\n */\nvar Meta = /** @class */ (function () {\n function Meta(_doc) {\n this._doc = _doc;\n this._dom = getDOM();\n }\n /**\n * @param {?} tag\n * @param {?=} forceCreation\n * @return {?}\n */\n Meta.prototype.addTag = /**\n * @param {?} tag\n * @param {?=} forceCreation\n * @return {?}\n */\n function (tag, forceCreation) {\n if (forceCreation === void 0) { forceCreation = false; }\n if (!tag)\n return null;\n return this._getOrCreateElement(tag, forceCreation);\n };\n /**\n * @param {?} tags\n * @param {?=} forceCreation\n * @return {?}\n */\n Meta.prototype.addTags = /**\n * @param {?} tags\n * @param {?=} forceCreation\n * @return {?}\n */\n function (tags, forceCreation) {\n var _this = this;\n if (forceCreation === void 0) { forceCreation = false; }\n if (!tags)\n return [];\n return tags.reduce(function (result, tag) {\n if (tag) {\n result.push(_this._getOrCreateElement(tag, forceCreation));\n }\n return result;\n }, []);\n };\n /**\n * @param {?} attrSelector\n * @return {?}\n */\n Meta.prototype.getTag = /**\n * @param {?} attrSelector\n * @return {?}\n */\n function (attrSelector) {\n if (!attrSelector)\n return null;\n return this._dom.querySelector(this._doc, \"meta[\" + attrSelector + \"]\") || null;\n };\n /**\n * @param {?} attrSelector\n * @return {?}\n */\n Meta.prototype.getTags = /**\n * @param {?} attrSelector\n * @return {?}\n */\n function (attrSelector) {\n if (!attrSelector)\n return [];\n var /** @type {?} */ list = this._dom.querySelectorAll(this._doc, \"meta[\" + attrSelector + \"]\");\n return list ? [].slice.call(list) : [];\n };\n /**\n * @param {?} tag\n * @param {?=} selector\n * @return {?}\n */\n Meta.prototype.updateTag = /**\n * @param {?} tag\n * @param {?=} selector\n * @return {?}\n */\n function (tag, selector) {\n if (!tag)\n return null;\n selector = selector || this._parseSelector(tag);\n var /** @type {?} */ meta = /** @type {?} */ ((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 */\n Meta.prototype.removeTag = /**\n * @param {?} attrSelector\n * @return {?}\n */\n function (attrSelector) { this.removeTagElement(/** @type {?} */ ((this.getTag(attrSelector)))); };\n /**\n * @param {?} meta\n * @return {?}\n */\n Meta.prototype.removeTagElement = /**\n * @param {?} meta\n * @return {?}\n */\n function (meta) {\n if (meta) {\n this._dom.remove(meta);\n }\n };\n /**\n * @param {?} meta\n * @param {?=} forceCreation\n * @return {?}\n */\n Meta.prototype._getOrCreateElement = /**\n * @param {?} meta\n * @param {?=} forceCreation\n * @return {?}\n */\n function (meta, forceCreation) {\n if (forceCreation === void 0) { forceCreation = false; }\n if (!forceCreation) {\n var /** @type {?} */ selector = this._parseSelector(meta);\n var /** @type {?} */ elem = /** @type {?} */ ((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))\n return elem;\n }\n var /** @type {?} */ element = /** @type {?} */ (this._dom.createElement('meta'));\n this._setMetaElementAttributes(meta, element);\n var /** @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 */\n Meta.prototype._setMetaElementAttributes = /**\n * @param {?} tag\n * @param {?} el\n * @return {?}\n */\n function (tag, el) {\n var _this = this;\n Object.keys(tag).forEach(function (prop) { return _this._dom.setAttribute(el, prop, tag[prop]); });\n return el;\n };\n /**\n * @param {?} tag\n * @return {?}\n */\n Meta.prototype._parseSelector = /**\n * @param {?} tag\n * @return {?}\n */\n function (tag) {\n var /** @type {?} */ attr = tag.name ? 'name' : 'property';\n return attr + \"=\\\"\" + tag[attr] + \"\\\"\";\n };\n /**\n * @param {?} tag\n * @param {?} elem\n * @return {?}\n */\n Meta.prototype._containsAttributes = /**\n * @param {?} tag\n * @param {?} elem\n * @return {?}\n */\n function (tag, elem) {\n var _this = this;\n return Object.keys(tag).every(function (key) { return _this._dom.getAttribute(elem, key) === tag[key]; });\n };\n Meta.decorators = [\n { type: _angular_core.Injectable },\n ];\n /** @nocollapse */\n Meta.ctorParameters = function () { return [\n { type: undefined, decorators: [{ type: _angular_core.Inject, args: [DOCUMENT$1,] },] },\n ]; };\n return Meta;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\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 * An id that identifies a particular application being bootstrapped, that should\n * match across the client/server boundary.\n */\nvar TRANSITION_ID = new _angular_core.InjectionToken('TRANSITION_ID');\n/**\n * @param {?} transitionId\n * @param {?} document\n * @param {?} injector\n * @return {?}\n */\nfunction appInitializerFactory(transitionId, document, injector) {\n return function () {\n // Wait for all application initializers to be completed before removing the styles set by\n // the server.\n injector.get(_angular_core.ApplicationInitStatus).donePromise.then(function () {\n var /** @type {?} */ dom = getDOM();\n var /** @type {?} */ styles = Array.prototype.slice.apply(dom.querySelectorAll(document, \"style[ng-transition]\"));\n styles.filter(function (el) { return dom.getAttribute(el, 'ng-transition') === transitionId; })\n .forEach(function (el) { return dom.remove(el); });\n });\n };\n}\nvar SERVER_TRANSITION_PROVIDERS = [\n {\n provide: _angular_core.APP_INITIALIZER,\n useFactory: appInitializerFactory,\n deps: [TRANSITION_ID, DOCUMENT$1, _angular_core.Injector],\n multi: true\n },\n];\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\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 */\nvar BrowserGetTestability = /** @class */ (function () {\n function BrowserGetTestability() {\n }\n /**\n * @return {?}\n */\n BrowserGetTestability.init = /**\n * @return {?}\n */\n function () { _angular_core.setTestabilityGetter(new BrowserGetTestability()); };\n /**\n * @param {?} registry\n * @return {?}\n */\n BrowserGetTestability.prototype.addToWindow = /**\n * @param {?} registry\n * @return {?}\n */\n function (registry) {\n _angular_core.ɵglobal['getAngularTestability'] = function (elem, findInAncestors) {\n if (findInAncestors === void 0) { findInAncestors = true; }\n var /** @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 _angular_core.ɵglobal['getAllAngularTestabilities'] = function () { return registry.getAllTestabilities(); };\n _angular_core.ɵglobal['getAllAngularRootElements'] = function () { return registry.getAllRootElements(); };\n var /** @type {?} */ whenAllStable = function (callback /** TODO #9100 */) {\n var /** @type {?} */ testabilities = _angular_core.ɵglobal['getAllAngularTestabilities']();\n var /** @type {?} */ count = testabilities.length;\n var /** @type {?} */ didWork = false;\n var /** @type {?} */ decrement = function (didWork_ /** TODO #9100 */) {\n didWork = didWork || didWork_;\n count--;\n if (count == 0) {\n callback(didWork);\n }\n };\n testabilities.forEach(function (testability /** TODO #9100 */) {\n testability.whenStable(decrement);\n });\n };\n if (!_angular_core.ɵglobal['frameworkStabilizers']) {\n _angular_core.ɵglobal['frameworkStabilizers'] = [];\n }\n _angular_core.ɵglobal['frameworkStabilizers'].push(whenAllStable);\n };\n /**\n * @param {?} registry\n * @param {?} elem\n * @param {?} findInAncestors\n * @return {?}\n */\n BrowserGetTestability.prototype.findTestabilityInTree = /**\n * @param {?} registry\n * @param {?} elem\n * @param {?} findInAncestors\n * @return {?}\n */\n function (registry, elem, findInAncestors) {\n if (elem == null) {\n return null;\n }\n var /** @type {?} */ t = registry.getTestability(elem);\n if (t != null) {\n return t;\n }\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 return BrowserGetTestability;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\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 * 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 */\nvar Title = /** @class */ (function () {\n function Title(_doc) {\n this._doc = _doc;\n }\n /**\n * Get the title of the current HTML document.\n */\n /**\n * Get the title of the current HTML document.\n * @return {?}\n */\n Title.prototype.getTitle = /**\n * Get the title of the current HTML document.\n * @return {?}\n */\n function () { return getDOM().getTitle(this._doc); };\n /**\n * Set the title of the current HTML document.\n * @param newTitle\n */\n /**\n * Set the title of the current HTML document.\n * @param {?} newTitle\n * @return {?}\n */\n Title.prototype.setTitle = /**\n * Set the title of the current HTML document.\n * @param {?} newTitle\n * @return {?}\n */\n function (newTitle) { getDOM().setTitle(this._doc, newTitle); };\n Title.decorators = [\n { type: _angular_core.Injectable },\n ];\n /** @nocollapse */\n Title.ctorParameters = function () { return [\n { type: undefined, decorators: [{ type: _angular_core.Inject, args: [DOCUMENT$1,] },] },\n ]; };\n return Title;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\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 * @param {?} input\n * @return {?}\n */\n\n/**\n * @param {?} input\n * @return {?}\n */\n\n/**\n * Exports the value under a given `name` in the global property `ng`. For example `ng.probe` if\n * `name` is `'probe'`.\n * @param {?} name Name under which it will be exported. Keep in mind this will be a property of the\n * global `ng` object.\n * @param {?} value The value to export.\n * @return {?}\n */\nfunction exportNgVar(name, value) {\n if (typeof COMPILED === 'undefined' || !COMPILED) {\n // Note: we can't export `ng` when using closure enhanced optimization as:\n // - closure declares globals itself for minified names, which sometimes clobber our `ng` global\n // - we can't declare a closure extern as the namespace `ng` is already used within Google\n // for typings for angularJS (via `goog.provide('ng....')`).\n var /** @type {?} */ ng = _angular_core.ɵglobal['ng'] = (/** @type {?} */ (_angular_core.ɵglobal['ng'])) || {};\n ng[name] = value;\n }\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\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 */\nvar CORE_TOKENS = {\n 'ApplicationRef': _angular_core.ApplicationRef,\n 'NgZone': _angular_core.NgZone,\n};\nvar INSPECT_GLOBAL_NAME = 'probe';\nvar CORE_TOKENS_GLOBAL_NAME = '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 */\nfunction inspectNativeElement(element) {\n return _angular_core.getDebugNode(element);\n}\n/**\n * @param {?} coreTokens\n * @return {?}\n */\nfunction _createNgProbe(coreTokens) {\n exportNgVar(INSPECT_GLOBAL_NAME, inspectNativeElement);\n exportNgVar(CORE_TOKENS_GLOBAL_NAME, __assign({}, CORE_TOKENS, _ngProbeTokensToMap(coreTokens || [])));\n return function () { return inspectNativeElement; };\n}\n/**\n * @param {?} tokens\n * @return {?}\n */\nfunction _ngProbeTokensToMap(tokens) {\n return tokens.reduce(function (prev, t) { return (prev[t.name] = t.token, prev); }, {});\n}\n/**\n * Providers which support debugging Angular applications (e.g. via `ng.probe`).\n */\nvar ELEMENT_PROBE_PROVIDERS = [\n {\n provide: _angular_core.APP_INITIALIZER,\n useFactory: _createNgProbe,\n deps: [\n [_angular_core.NgProbeToken, new _angular_core.Optional()],\n ],\n multi: true,\n },\n];\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\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 * \\@stable\n */\nvar EVENT_MANAGER_PLUGINS = new _angular_core.InjectionToken('EventManagerPlugins');\n/**\n * \\@stable\n */\nvar EventManager = /** @class */ (function () {\n function EventManager(plugins, _zone) {\n var _this = this;\n this._zone = _zone;\n this._eventNameToPlugin = new Map();\n plugins.forEach(function (p) { return p.manager = _this; });\n this._plugins = plugins.slice().reverse();\n }\n /**\n * @param {?} element\n * @param {?} eventName\n * @param {?} handler\n * @return {?}\n */\n EventManager.prototype.addEventListener = /**\n * @param {?} element\n * @param {?} eventName\n * @param {?} handler\n * @return {?}\n */\n function (element, eventName, handler) {\n var /** @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 */\n EventManager.prototype.addGlobalEventListener = /**\n * @param {?} target\n * @param {?} eventName\n * @param {?} handler\n * @return {?}\n */\n function (target, eventName, handler) {\n var /** @type {?} */ plugin = this._findPluginFor(eventName);\n return plugin.addGlobalEventListener(target, eventName, handler);\n };\n /**\n * @return {?}\n */\n EventManager.prototype.getZone = /**\n * @return {?}\n */\n function () { return this._zone; };\n /** @internal */\n /**\n * \\@internal\n * @param {?} eventName\n * @return {?}\n */\n EventManager.prototype._findPluginFor = /**\n * \\@internal\n * @param {?} eventName\n * @return {?}\n */\n function (eventName) {\n var /** @type {?} */ plugin = this._eventNameToPlugin.get(eventName);\n if (plugin) {\n return plugin;\n }\n var /** @type {?} */ plugins = this._plugins;\n for (var /** @type {?} */ i = 0; i < plugins.length; i++) {\n var /** @type {?} */ plugin_1 = plugins[i];\n if (plugin_1.supports(eventName)) {\n this._eventNameToPlugin.set(eventName, plugin_1);\n return plugin_1;\n }\n }\n throw new Error(\"No event manager plugin found for event \" + eventName);\n };\n EventManager.decorators = [\n { type: _angular_core.Injectable },\n ];\n /** @nocollapse */\n EventManager.ctorParameters = function () { return [\n { type: Array, decorators: [{ type: _angular_core.Inject, args: [EVENT_MANAGER_PLUGINS,] },] },\n { type: _angular_core.NgZone, },\n ]; };\n return EventManager;\n}());\n/**\n * @abstract\n */\nvar EventManagerPlugin = /** @class */ (function () {\n function EventManagerPlugin(_doc) {\n this._doc = _doc;\n }\n /**\n * @param {?} element\n * @param {?} eventName\n * @param {?} handler\n * @return {?}\n */\n EventManagerPlugin.prototype.addGlobalEventListener = /**\n * @param {?} element\n * @param {?} eventName\n * @param {?} handler\n * @return {?}\n */\n function (element, eventName, handler) {\n var /** @type {?} */ target = 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 return EventManagerPlugin;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\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 */\nvar SharedStylesHost = /** @class */ (function () {\n function SharedStylesHost() {\n /**\n * \\@internal\n */\n this._stylesSet = new Set();\n }\n /**\n * @param {?} styles\n * @return {?}\n */\n SharedStylesHost.prototype.addStyles = /**\n * @param {?} styles\n * @return {?}\n */\n function (styles) {\n var _this = this;\n var /** @type {?} */ additions = new Set();\n styles.forEach(function (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 */\n SharedStylesHost.prototype.onStylesAdded = /**\n * @param {?} additions\n * @return {?}\n */\n function (additions) { };\n /**\n * @return {?}\n */\n SharedStylesHost.prototype.getAllStyles = /**\n * @return {?}\n */\n function () { return Array.from(this._stylesSet); };\n SharedStylesHost.decorators = [\n { type: _angular_core.Injectable },\n ];\n /** @nocollapse */\n SharedStylesHost.ctorParameters = function () { return []; };\n return SharedStylesHost;\n}());\nvar DomSharedStylesHost = /** @class */ (function (_super) {\n __extends(DomSharedStylesHost, _super);\n function DomSharedStylesHost(_doc) {\n var _this = _super.call(this) || this;\n _this._doc = _doc;\n _this._hostNodes = new Set();\n _this._styleNodes = new Set();\n _this._hostNodes.add(_doc.head);\n return _this;\n }\n /**\n * @param {?} styles\n * @param {?} host\n * @return {?}\n */\n DomSharedStylesHost.prototype._addStylesToHost = /**\n * @param {?} styles\n * @param {?} host\n * @return {?}\n */\n function (styles, host) {\n var _this = this;\n styles.forEach(function (style) {\n var /** @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 */\n DomSharedStylesHost.prototype.addHost = /**\n * @param {?} hostNode\n * @return {?}\n */\n function (hostNode) {\n this._addStylesToHost(this._stylesSet, hostNode);\n this._hostNodes.add(hostNode);\n };\n /**\n * @param {?} hostNode\n * @return {?}\n */\n DomSharedStylesHost.prototype.removeHost = /**\n * @param {?} hostNode\n * @return {?}\n */\n function (hostNode) { this._hostNodes.delete(hostNode); };\n /**\n * @param {?} additions\n * @return {?}\n */\n DomSharedStylesHost.prototype.onStylesAdded = /**\n * @param {?} additions\n * @return {?}\n */\n function (additions) {\n var _this = this;\n this._hostNodes.forEach(function (hostNode) { return _this._addStylesToHost(additions, hostNode); });\n };\n /**\n * @return {?}\n */\n DomSharedStylesHost.prototype.ngOnDestroy = /**\n * @return {?}\n */\n function () { this._styleNodes.forEach(function (styleNode) { return getDOM().remove(styleNode); }); };\n DomSharedStylesHost.decorators = [\n { type: _angular_core.Injectable },\n ];\n /** @nocollapse */\n DomSharedStylesHost.ctorParameters = function () { return [\n { type: undefined, decorators: [{ type: _angular_core.Inject, args: [DOCUMENT$1,] },] },\n ]; };\n return DomSharedStylesHost;\n}(SharedStylesHost));\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\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 */\nvar NAMESPACE_URIS = {\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};\nvar COMPONENT_REGEX = /%COMP%/g;\nvar COMPONENT_VARIABLE = '%COMP%';\nvar HOST_ATTR = \"_nghost-\" + COMPONENT_VARIABLE;\nvar CONTENT_ATTR = \"_ngcontent-\" + COMPONENT_VARIABLE;\n/**\n * @param {?} componentShortId\n * @return {?}\n */\nfunction shimContentAttribute(componentShortId) {\n return CONTENT_ATTR.replace(COMPONENT_REGEX, componentShortId);\n}\n/**\n * @param {?} componentShortId\n * @return {?}\n */\nfunction shimHostAttribute(componentShortId) {\n return HOST_ATTR.replace(COMPONENT_REGEX, componentShortId);\n}\n/**\n * @param {?} compId\n * @param {?} styles\n * @param {?} target\n * @return {?}\n */\nfunction flattenStyles(compId, styles, target) {\n for (var /** @type {?} */ i = 0; i < styles.length; i++) {\n var /** @type {?} */ style = styles[i];\n if (Array.isArray(style)) {\n flattenStyles(compId, style, target);\n }\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) {\n return function (event) {\n var /** @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}\nvar DomRendererFactory2 = /** @class */ (function () {\n function DomRendererFactory2(eventManager, sharedStylesHost) {\n this.eventManager = eventManager;\n this.sharedStylesHost = sharedStylesHost;\n this.rendererByCompId = new Map();\n this.defaultRenderer = new DefaultDomRenderer2(eventManager);\n }\n /**\n * @param {?} element\n * @param {?} type\n * @return {?}\n */\n DomRendererFactory2.prototype.createRenderer = /**\n * @param {?} element\n * @param {?} type\n * @return {?}\n */\n function (element, type) {\n if (!element || !type) {\n return this.defaultRenderer;\n }\n switch (type.encapsulation) {\n case _angular_core.ViewEncapsulation.Emulated: {\n var /** @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 {?} */ (renderer)).applyToHost(element);\n return renderer;\n }\n case _angular_core.ViewEncapsulation.Native:\n return new ShadowDomRenderer(this.eventManager, this.sharedStylesHost, element, type);\n default: {\n if (!this.rendererByCompId.has(type.id)) {\n var /** @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 };\n /**\n * @return {?}\n */\n DomRendererFactory2.prototype.begin = /**\n * @return {?}\n */\n function () { };\n /**\n * @return {?}\n */\n DomRendererFactory2.prototype.end = /**\n * @return {?}\n */\n function () { };\n DomRendererFactory2.decorators = [\n { type: _angular_core.Injectable },\n ];\n /** @nocollapse */\n DomRendererFactory2.ctorParameters = function () { return [\n { type: EventManager, },\n { type: DomSharedStylesHost, },\n ]; };\n return DomRendererFactory2;\n}());\nvar DefaultDomRenderer2 = /** @class */ (function () {\n function DefaultDomRenderer2(eventManager) {\n this.eventManager = eventManager;\n this.data = Object.create(null);\n }\n /**\n * @return {?}\n */\n DefaultDomRenderer2.prototype.destroy = /**\n * @return {?}\n */\n function () { };\n /**\n * @param {?} name\n * @param {?=} namespace\n * @return {?}\n */\n DefaultDomRenderer2.prototype.createElement = /**\n * @param {?} name\n * @param {?=} namespace\n * @return {?}\n */\n function (name, namespace) {\n if (namespace) {\n return document.createElementNS(NAMESPACE_URIS[namespace], name);\n }\n return document.createElement(name);\n };\n /**\n * @param {?} value\n * @return {?}\n */\n DefaultDomRenderer2.prototype.createComment = /**\n * @param {?} value\n * @return {?}\n */\n function (value) { return document.createComment(value); };\n /**\n * @param {?} value\n * @return {?}\n */\n DefaultDomRenderer2.prototype.createText = /**\n * @param {?} value\n * @return {?}\n */\n function (value) { return document.createTextNode(value); };\n /**\n * @param {?} parent\n * @param {?} newChild\n * @return {?}\n */\n DefaultDomRenderer2.prototype.appendChild = /**\n * @param {?} parent\n * @param {?} newChild\n * @return {?}\n */\n function (parent, newChild) { parent.appendChild(newChild); };\n /**\n * @param {?} parent\n * @param {?} newChild\n * @param {?} refChild\n * @return {?}\n */\n DefaultDomRenderer2.prototype.insertBefore = /**\n * @param {?} parent\n * @param {?} newChild\n * @param {?} refChild\n * @return {?}\n */\n function (parent, newChild, refChild) {\n if (parent) {\n parent.insertBefore(newChild, refChild);\n }\n };\n /**\n * @param {?} parent\n * @param {?} oldChild\n * @return {?}\n */\n DefaultDomRenderer2.prototype.removeChild = /**\n * @param {?} parent\n * @param {?} oldChild\n * @return {?}\n */\n function (parent, oldChild) {\n if (parent) {\n parent.removeChild(oldChild);\n }\n };\n /**\n * @param {?} selectorOrNode\n * @return {?}\n */\n DefaultDomRenderer2.prototype.selectRootElement = /**\n * @param {?} selectorOrNode\n * @return {?}\n */\n function (selectorOrNode) {\n var /** @type {?} */ el = 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 */\n DefaultDomRenderer2.prototype.parentNode = /**\n * @param {?} node\n * @return {?}\n */\n function (node) { return node.parentNode; };\n /**\n * @param {?} node\n * @return {?}\n */\n DefaultDomRenderer2.prototype.nextSibling = /**\n * @param {?} node\n * @return {?}\n */\n function (node) { return node.nextSibling; };\n /**\n * @param {?} el\n * @param {?} name\n * @param {?} value\n * @param {?=} namespace\n * @return {?}\n */\n DefaultDomRenderer2.prototype.setAttribute = /**\n * @param {?} el\n * @param {?} name\n * @param {?} value\n * @param {?=} namespace\n * @return {?}\n */\n function (el, name, value, namespace) {\n if (namespace) {\n name = namespace + \":\" + name;\n var /** @type {?} */ namespaceUri = NAMESPACE_URIS[namespace];\n if (namespaceUri) {\n el.setAttributeNS(namespaceUri, name, value);\n }\n else {\n el.setAttribute(name, value);\n }\n }\n else {\n el.setAttribute(name, value);\n }\n };\n /**\n * @param {?} el\n * @param {?} name\n * @param {?=} namespace\n * @return {?}\n */\n DefaultDomRenderer2.prototype.removeAttribute = /**\n * @param {?} el\n * @param {?} name\n * @param {?=} namespace\n * @return {?}\n */\n function (el, name, namespace) {\n if (namespace) {\n var /** @type {?} */ namespaceUri = NAMESPACE_URIS[namespace];\n if (namespaceUri) {\n el.removeAttributeNS(namespaceUri, name);\n }\n else {\n el.removeAttribute(namespace + \":\" + name);\n }\n }\n else {\n el.removeAttribute(name);\n }\n };\n /**\n * @param {?} el\n * @param {?} name\n * @return {?}\n */\n DefaultDomRenderer2.prototype.addClass = /**\n * @param {?} el\n * @param {?} name\n * @return {?}\n */\n function (el, name) { el.classList.add(name); };\n /**\n * @param {?} el\n * @param {?} name\n * @return {?}\n */\n DefaultDomRenderer2.prototype.removeClass = /**\n * @param {?} el\n * @param {?} name\n * @return {?}\n */\n function (el, name) { el.classList.remove(name); };\n /**\n * @param {?} el\n * @param {?} style\n * @param {?} value\n * @param {?} flags\n * @return {?}\n */\n DefaultDomRenderer2.prototype.setStyle = /**\n * @param {?} el\n * @param {?} style\n * @param {?} value\n * @param {?} flags\n * @return {?}\n */\n function (el, style, value, flags) {\n if (flags & _angular_core.RendererStyleFlags2.DashCase) {\n el.style.setProperty(style, value, !!(flags & _angular_core.RendererStyleFlags2.Important) ? 'important' : '');\n }\n else {\n el.style[style] = value;\n }\n };\n /**\n * @param {?} el\n * @param {?} style\n * @param {?} flags\n * @return {?}\n */\n DefaultDomRenderer2.prototype.removeStyle = /**\n * @param {?} el\n * @param {?} style\n * @param {?} flags\n * @return {?}\n */\n function (el, style, flags) {\n if (flags & _angular_core.RendererStyleFlags2.DashCase) {\n el.style.removeProperty(style);\n }\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 */\n DefaultDomRenderer2.prototype.setProperty = /**\n * @param {?} el\n * @param {?} name\n * @param {?} value\n * @return {?}\n */\n function (el, name, value) {\n checkNoSyntheticProp(name, 'property');\n el[name] = value;\n };\n /**\n * @param {?} node\n * @param {?} value\n * @return {?}\n */\n DefaultDomRenderer2.prototype.setValue = /**\n * @param {?} node\n * @param {?} value\n * @return {?}\n */\n function (node, value) { node.nodeValue = value; };\n /**\n * @param {?} target\n * @param {?} event\n * @param {?} callback\n * @return {?}\n */\n DefaultDomRenderer2.prototype.listen = /**\n * @param {?} target\n * @param {?} event\n * @param {?} callback\n * @return {?}\n */\n function (target, event, callback) {\n checkNoSyntheticProp(event, 'listener');\n if (typeof target === 'string') {\n return /** @type {?} */ (this.eventManager.addGlobalEventListener(target, event, decoratePreventDefault(callback)));\n }\n return /** @type {?} */ ((this.eventManager.addEventListener(target, event, decoratePreventDefault(callback))));\n };\n return DefaultDomRenderer2;\n}());\nvar AT_CHARCODE = '@'.charCodeAt(0);\n/**\n * @param {?} name\n * @param {?} nameKind\n * @return {?}\n */\nfunction checkNoSyntheticProp(name, nameKind) {\n if (name.charCodeAt(0) === AT_CHARCODE) {\n throw new Error(\"Found the synthetic \" + nameKind + \" \" + name + \". Please include either \\\"BrowserAnimationsModule\\\" or \\\"NoopAnimationsModule\\\" in your application.\");\n }\n}\nvar EmulatedEncapsulationDomRenderer2 = /** @class */ (function (_super) {\n __extends(EmulatedEncapsulationDomRenderer2, _super);\n function EmulatedEncapsulationDomRenderer2(eventManager, sharedStylesHost, component) {\n var _this = _super.call(this, eventManager) || this;\n _this.component = component;\n var /** @type {?} */ styles = flattenStyles(component.id, component.styles, []);\n sharedStylesHost.addStyles(styles);\n _this.contentAttr = shimContentAttribute(component.id);\n _this.hostAttr = shimHostAttribute(component.id);\n return _this;\n }\n /**\n * @param {?} element\n * @return {?}\n */\n EmulatedEncapsulationDomRenderer2.prototype.applyToHost = /**\n * @param {?} element\n * @return {?}\n */\n function (element) { _super.prototype.setAttribute.call(this, element, this.hostAttr, ''); };\n /**\n * @param {?} parent\n * @param {?} name\n * @return {?}\n */\n EmulatedEncapsulationDomRenderer2.prototype.createElement = /**\n * @param {?} parent\n * @param {?} name\n * @return {?}\n */\n function (parent, name) {\n var /** @type {?} */ el = _super.prototype.createElement.call(this, parent, name);\n _super.prototype.setAttribute.call(this, el, this.contentAttr, '');\n return el;\n };\n return EmulatedEncapsulationDomRenderer2;\n}(DefaultDomRenderer2));\nvar ShadowDomRenderer = /** @class */ (function (_super) {\n __extends(ShadowDomRenderer, _super);\n function ShadowDomRenderer(eventManager, sharedStylesHost, hostEl, component) {\n var _this = _super.call(this, eventManager) || this;\n _this.sharedStylesHost = sharedStylesHost;\n _this.hostEl = hostEl;\n _this.component = component;\n _this.shadowRoot = (/** @type {?} */ (hostEl)).createShadowRoot();\n _this.sharedStylesHost.addHost(_this.shadowRoot);\n var /** @type {?} */ styles = flattenStyles(component.id, component.styles, []);\n for (var /** @type {?} */ i = 0; i < styles.length; i++) {\n var /** @type {?} */ styleEl = document.createElement('style');\n styleEl.textContent = styles[i];\n _this.shadowRoot.appendChild(styleEl);\n }\n return _this;\n }\n /**\n * @param {?} node\n * @return {?}\n */\n ShadowDomRenderer.prototype.nodeOrShadowRoot = /**\n * @param {?} node\n * @return {?}\n */\n function (node) { return node === this.hostEl ? this.shadowRoot : node; };\n /**\n * @return {?}\n */\n ShadowDomRenderer.prototype.destroy = /**\n * @return {?}\n */\n function () { this.sharedStylesHost.removeHost(this.shadowRoot); };\n /**\n * @param {?} parent\n * @param {?} newChild\n * @return {?}\n */\n ShadowDomRenderer.prototype.appendChild = /**\n * @param {?} parent\n * @param {?} newChild\n * @return {?}\n */\n function (parent, newChild) {\n return _super.prototype.appendChild.call(this, this.nodeOrShadowRoot(parent), newChild);\n };\n /**\n * @param {?} parent\n * @param {?} newChild\n * @param {?} refChild\n * @return {?}\n */\n ShadowDomRenderer.prototype.insertBefore = /**\n * @param {?} parent\n * @param {?} newChild\n * @param {?} refChild\n * @return {?}\n */\n function (parent, newChild, refChild) {\n return _super.prototype.insertBefore.call(this, this.nodeOrShadowRoot(parent), newChild, refChild);\n };\n /**\n * @param {?} parent\n * @param {?} oldChild\n * @return {?}\n */\n ShadowDomRenderer.prototype.removeChild = /**\n * @param {?} parent\n * @param {?} oldChild\n * @return {?}\n */\n function (parent, oldChild) {\n return _super.prototype.removeChild.call(this, this.nodeOrShadowRoot(parent), oldChild);\n };\n /**\n * @param {?} node\n * @return {?}\n */\n ShadowDomRenderer.prototype.parentNode = /**\n * @param {?} node\n * @return {?}\n */\n function (node) {\n return this.nodeOrShadowRoot(_super.prototype.parentNode.call(this, this.nodeOrShadowRoot(node)));\n };\n return ShadowDomRenderer;\n}(DefaultDomRenderer2));\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\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 */\nvar ɵ0 = function (v) {\n return '__zone_symbol__' + v;\n};\n/**\n * Detect if Zone is present. If it is then use simple zone aware 'addEventListener'\n * since Angular can do much more\n * efficient bookkeeping than Zone can, because we have additional information. This speeds up\n * addEventListener by 3x.\n */\nvar __symbol__ = (typeof Zone !== 'undefined') && (/** @type {?} */ (Zone))['__symbol__'] || ɵ0;\nvar ADD_EVENT_LISTENER = __symbol__('addEventListener');\nvar REMOVE_EVENT_LISTENER = __symbol__('removeEventListener');\nvar symbolNames = {};\nvar FALSE = 'FALSE';\nvar ANGULAR = 'ANGULAR';\nvar NATIVE_ADD_LISTENER = 'addEventListener';\nvar NATIVE_REMOVE_LISTENER = 'removeEventListener';\n// use the same symbol string which is used in zone.js\nvar stopSymbol = '__zone_symbol__propagationStopped';\nvar stopMethodSymbol = '__zone_symbol__stopImmediatePropagation';\nvar blackListedEvents = (typeof Zone !== 'undefined') && (/** @type {?} */ (Zone))[__symbol__('BLACK_LISTED_EVENTS')];\nvar blackListedMap;\nif (blackListedEvents) {\n blackListedMap = {};\n blackListedEvents.forEach(function (eventName) { blackListedMap[eventName] = eventName; });\n}\nvar isBlackListedEvent = function (eventName) {\n if (!blackListedMap) {\n return false;\n }\n return blackListedMap.hasOwnProperty(eventName);\n};\n// a global listener to handle all dom event,\n// so we do not need to create a closure everytime\nvar globalListener = function (event) {\n var /** @type {?} */ symbolName = symbolNames[event.type];\n if (!symbolName) {\n return;\n }\n var /** @type {?} */ taskDatas = this[symbolName];\n if (!taskDatas) {\n return;\n }\n var /** @type {?} */ args = [event];\n if (taskDatas.length === 1) {\n // if taskDatas only have one element, just invoke it\n var /** @type {?} */ taskData = taskDatas[0];\n if (taskData.zone !== Zone.current) {\n // only use Zone.run when Zone.current not equals to stored zone\n return taskData.zone.run(taskData.handler, this, args);\n }\n else {\n return taskData.handler.apply(this, args);\n }\n }\n else {\n // copy tasks as a snapshot to avoid event handlers remove\n // itself or others\n var /** @type {?} */ copiedTasks = taskDatas.slice();\n for (var /** @type {?} */ i = 0; i < copiedTasks.length; i++) {\n // if other listener call event.stopImmediatePropagation\n // just break\n if ((/** @type {?} */ (event))[stopSymbol] === true) {\n break;\n }\n var /** @type {?} */ taskData = copiedTasks[i];\n if (taskData.zone !== Zone.current) {\n // only use Zone.run when Zone.current not equals to stored zone\n taskData.zone.run(taskData.handler, this, args);\n }\n else {\n taskData.handler.apply(this, args);\n }\n }\n }\n};\nvar DomEventsPlugin = /** @class */ (function (_super) {\n __extends(DomEventsPlugin, _super);\n function DomEventsPlugin(doc, ngZone) {\n var _this = _super.call(this, doc) || this;\n _this.ngZone = ngZone;\n _this.patchEvent();\n return _this;\n }\n /**\n * @return {?}\n */\n DomEventsPlugin.prototype.patchEvent = /**\n * @return {?}\n */\n function () {\n if (!Event || !Event.prototype) {\n return;\n }\n if ((/** @type {?} */ (Event.prototype))[stopMethodSymbol]) {\n // already patched by zone.js\n return;\n }\n var /** @type {?} */ delegate = (/** @type {?} */ (Event.prototype))[stopMethodSymbol] =\n Event.prototype.stopImmediatePropagation;\n Event.prototype.stopImmediatePropagation = function () {\n if (this) {\n this[stopSymbol] = true;\n }\n // should call native delegate in case\n // in some enviroment part of the application\n // will not use the patched Event\n delegate && delegate.apply(this, arguments);\n };\n };\n // This plugin should come last in the list of plugins, because it accepts all\n // events.\n /**\n * @param {?} eventName\n * @return {?}\n */\n DomEventsPlugin.prototype.supports = /**\n * @param {?} eventName\n * @return {?}\n */\n function (eventName) { return true; };\n /**\n * @param {?} element\n * @param {?} eventName\n * @param {?} handler\n * @return {?}\n */\n DomEventsPlugin.prototype.addEventListener = /**\n * @param {?} element\n * @param {?} eventName\n * @param {?} handler\n * @return {?}\n */\n function (element, eventName, handler) {\n var _this = this;\n /**\n * This code is about to add a listener to the DOM. If Zone.js is present, than\n * `addEventListener` has been patched. The patched code adds overhead in both\n * memory and speed (3x slower) than native. For this reason if we detect that\n * Zone.js is present we use a simple version of zone aware addEventListener instead.\n * The result is faster registration and the zone will be restored.\n * But ZoneSpec.onScheduleTask, ZoneSpec.onInvokeTask, ZoneSpec.onCancelTask\n * will not be invoked\n * We also do manual zone restoration in element.ts renderEventHandlerClosure method.\n *\n * NOTE: it is possible that the element is from different iframe, and so we\n * have to check before we execute the method.\n */\n var /** @type {?} */ self = this;\n var /** @type {?} */ zoneJsLoaded = element[ADD_EVENT_LISTENER];\n var /** @type {?} */ callback = /** @type {?} */ (handler);\n // if zonejs is loaded and current zone is not ngZone\n // we keep Zone.current on target for later restoration.\n if (zoneJsLoaded && (!_angular_core.NgZone.isInAngularZone() || isBlackListedEvent(eventName))) {\n var /** @type {?} */ symbolName = symbolNames[eventName];\n if (!symbolName) {\n symbolName = symbolNames[eventName] = __symbol__(ANGULAR + eventName + FALSE);\n }\n var /** @type {?} */ taskDatas = (/** @type {?} */ (element))[symbolName];\n var /** @type {?} */ globalListenerRegistered = taskDatas && taskDatas.length > 0;\n if (!taskDatas) {\n taskDatas = (/** @type {?} */ (element))[symbolName] = [];\n }\n var /** @type {?} */ zone = isBlackListedEvent(eventName) ? Zone.root : Zone.current;\n if (taskDatas.length === 0) {\n taskDatas.push({ zone: zone, handler: callback });\n }\n else {\n var /** @type {?} */ callbackRegistered = false;\n for (var /** @type {?} */ i = 0; i < taskDatas.length; i++) {\n if (taskDatas[i].handler === callback) {\n callbackRegistered = true;\n break;\n }\n }\n if (!callbackRegistered) {\n taskDatas.push({ zone: zone, handler: callback });\n }\n }\n if (!globalListenerRegistered) {\n element[ADD_EVENT_LISTENER](eventName, globalListener, false);\n }\n }\n else {\n element[NATIVE_ADD_LISTENER](eventName, callback, false);\n }\n return function () { return _this.removeEventListener(element, eventName, callback); };\n };\n /**\n * @param {?} target\n * @param {?} eventName\n * @param {?} callback\n * @return {?}\n */\n DomEventsPlugin.prototype.removeEventListener = /**\n * @param {?} target\n * @param {?} eventName\n * @param {?} callback\n * @return {?}\n */\n function (target, eventName, callback) {\n var /** @type {?} */ underlyingRemove = target[REMOVE_EVENT_LISTENER];\n // zone.js not loaded, use native removeEventListener\n if (!underlyingRemove) {\n return target[NATIVE_REMOVE_LISTENER].apply(target, [eventName, callback, false]);\n }\n var /** @type {?} */ symbolName = symbolNames[eventName];\n var /** @type {?} */ taskDatas = symbolName && target[symbolName];\n if (!taskDatas) {\n // addEventListener not using patched version\n // just call native removeEventListener\n return target[NATIVE_REMOVE_LISTENER].apply(target, [eventName, callback, false]);\n }\n // fix issue 20532, should be able to remove\n // listener which was added inside of ngZone\n var /** @type {?} */ found = false;\n for (var /** @type {?} */ i = 0; i < taskDatas.length; i++) {\n // remove listener from taskDatas if the callback equals\n if (taskDatas[i].handler === callback) {\n found = true;\n taskDatas.splice(i, 1);\n break;\n }\n }\n if (found) {\n if (taskDatas.length === 0) {\n // all listeners are removed, we can remove the globalListener from target\n underlyingRemove.apply(target, [eventName, globalListener, false]);\n }\n }\n else {\n // not found in taskDatas, the callback may be added inside of ngZone\n // use native remove listener to remove the calback\n target[NATIVE_REMOVE_LISTENER].apply(target, [eventName, callback, false]);\n }\n };\n DomEventsPlugin.decorators = [\n { type: _angular_core.Injectable },\n ];\n /** @nocollapse */\n DomEventsPlugin.ctorParameters = function () { return [\n { type: undefined, decorators: [{ type: _angular_core.Inject, args: [DOCUMENT$1,] },] },\n { type: _angular_core.NgZone, },\n ]; };\n return DomEventsPlugin;\n}(EventManagerPlugin));\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\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 */\nvar 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 */\nvar HAMMER_GESTURE_CONFIG = new _angular_core.InjectionToken('HammerGestureConfig');\n/**\n * @record\n */\n\n/**\n * \\@experimental\n */\nvar HammerGestureConfig = /** @class */ (function () {\n function HammerGestureConfig() {\n this.events = [];\n this.overrides = {};\n }\n /**\n * @param {?} element\n * @return {?}\n */\n HammerGestureConfig.prototype.buildHammer = /**\n * @param {?} element\n * @return {?}\n */\n function (element) {\n var /** @type {?} */ mc = new Hammer(element);\n mc.get('pinch').set({ enable: true });\n mc.get('rotate').set({ enable: true });\n for (var /** @type {?} */ eventName in this.overrides) {\n mc.get(eventName).set(this.overrides[eventName]);\n }\n return mc;\n };\n HammerGestureConfig.decorators = [\n { type: _angular_core.Injectable },\n ];\n /** @nocollapse */\n HammerGestureConfig.ctorParameters = function () { return []; };\n return HammerGestureConfig;\n}());\nvar HammerGesturesPlugin = /** @class */ (function (_super) {\n __extends(HammerGesturesPlugin, _super);\n function HammerGesturesPlugin(doc, _config) {\n var _this = _super.call(this, doc) || this;\n _this._config = _config;\n return _this;\n }\n /**\n * @param {?} eventName\n * @return {?}\n */\n HammerGesturesPlugin.prototype.supports = /**\n * @param {?} eventName\n * @return {?}\n */\n function (eventName) {\n if (!EVENT_NAMES.hasOwnProperty(eventName.toLowerCase()) && !this.isCustomEvent(eventName)) {\n return false;\n }\n if (!(/** @type {?} */ (window)).Hammer) {\n throw new Error(\"Hammer.js is not loaded, can not bind \" + eventName + \" event\");\n }\n return true;\n };\n /**\n * @param {?} element\n * @param {?} eventName\n * @param {?} handler\n * @return {?}\n */\n HammerGesturesPlugin.prototype.addEventListener = /**\n * @param {?} element\n * @param {?} eventName\n * @param {?} handler\n * @return {?}\n */\n function (element, eventName, handler) {\n var _this = this;\n var /** @type {?} */ zone = this.manager.getZone();\n eventName = eventName.toLowerCase();\n return zone.runOutsideAngular(function () {\n // Creating the manager bind events, must be done outside of angular\n var /** @type {?} */ mc = _this._config.buildHammer(element);\n var /** @type {?} */ callback = function (eventObj) {\n zone.runGuarded(function () { handler(eventObj); });\n };\n mc.on(eventName, callback);\n return function () { return mc.off(eventName, callback); };\n });\n };\n /**\n * @param {?} eventName\n * @return {?}\n */\n HammerGesturesPlugin.prototype.isCustomEvent = /**\n * @param {?} eventName\n * @return {?}\n */\n function (eventName) { return this._config.events.indexOf(eventName) > -1; };\n HammerGesturesPlugin.decorators = [\n { type: _angular_core.Injectable },\n ];\n /** @nocollapse */\n HammerGesturesPlugin.ctorParameters = function () { return [\n { type: undefined, decorators: [{ type: _angular_core.Inject, args: [DOCUMENT$1,] },] },\n { type: HammerGestureConfig, decorators: [{ type: _angular_core.Inject, args: [HAMMER_GESTURE_CONFIG,] },] },\n ]; };\n return HammerGesturesPlugin;\n}(EventManagerPlugin));\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\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 */\nvar MODIFIER_KEYS = ['alt', 'control', 'meta', 'shift'];\nvar ɵ0$1 = function (event) { return event.altKey; };\nvar ɵ1$1 = function (event) { return event.ctrlKey; };\nvar ɵ2$1 = function (event) { return event.metaKey; };\nvar ɵ3 = function (event) { return event.shiftKey; };\nvar MODIFIER_KEY_GETTERS = {\n 'alt': ɵ0$1,\n 'control': ɵ1$1,\n 'meta': ɵ2$1,\n 'shift': ɵ3\n};\n/**\n * \\@experimental\n */\nvar KeyEventsPlugin = /** @class */ (function (_super) {\n __extends(KeyEventsPlugin, _super);\n function KeyEventsPlugin(doc) {\n return _super.call(this, doc) || this;\n }\n /**\n * @param {?} eventName\n * @return {?}\n */\n KeyEventsPlugin.prototype.supports = /**\n * @param {?} eventName\n * @return {?}\n */\n function (eventName) { return KeyEventsPlugin.parseEventName(eventName) != null; };\n /**\n * @param {?} element\n * @param {?} eventName\n * @param {?} handler\n * @return {?}\n */\n KeyEventsPlugin.prototype.addEventListener = /**\n * @param {?} element\n * @param {?} eventName\n * @param {?} handler\n * @return {?}\n */\n function (element, eventName, handler) {\n var /** @type {?} */ parsedEvent = /** @type {?} */ ((KeyEventsPlugin.parseEventName(eventName)));\n var /** @type {?} */ outsideHandler = KeyEventsPlugin.eventCallback(parsedEvent['fullKey'], handler, this.manager.getZone());\n return this.manager.getZone().runOutsideAngular(function () {\n return getDOM().onAndCancel(element, parsedEvent['domEventName'], outsideHandler);\n });\n };\n /**\n * @param {?} eventName\n * @return {?}\n */\n KeyEventsPlugin.parseEventName = /**\n * @param {?} eventName\n * @return {?}\n */\n function (eventName) {\n var /** @type {?} */ parts = eventName.toLowerCase().split('.');\n var /** @type {?} */ domEventName = parts.shift();\n if ((parts.length === 0) || !(domEventName === 'keydown' || domEventName === 'keyup')) {\n return null;\n }\n var /** @type {?} */ key = KeyEventsPlugin._normalizeKey(/** @type {?} */ ((parts.pop())));\n var /** @type {?} */ fullKey = '';\n MODIFIER_KEYS.forEach(function (modifierName) {\n var /** @type {?} */ index = parts.indexOf(modifierName);\n if (index > -1) {\n parts.splice(index, 1);\n fullKey += modifierName + '.';\n }\n });\n fullKey += key;\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 var /** @type {?} */ result = {};\n result['domEventName'] = domEventName;\n result['fullKey'] = fullKey;\n return result;\n };\n /**\n * @param {?} event\n * @return {?}\n */\n KeyEventsPlugin.getEventFullKey = /**\n * @param {?} event\n * @return {?}\n */\n function (event) {\n var /** @type {?} */ fullKey = '';\n var /** @type {?} */ key = getDOM().getEventKey(event);\n key = key.toLowerCase();\n if (key === ' ') {\n key = 'space'; // for readability\n }\n else if (key === '.') {\n key = 'dot'; // because '.' is used as a separator in event names\n }\n MODIFIER_KEYS.forEach(function (modifierName) {\n if (modifierName != key) {\n var /** @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 */\n KeyEventsPlugin.eventCallback = /**\n * @param {?} fullKey\n * @param {?} handler\n * @param {?} zone\n * @return {?}\n */\n function (fullKey, handler, zone) {\n return function (event /** TODO #9100 */) {\n if (KeyEventsPlugin.getEventFullKey(event) === fullKey) {\n zone.runGuarded(function () { return handler(event); });\n }\n };\n };\n /** @internal */\n /**\n * \\@internal\n * @param {?} keyName\n * @return {?}\n */\n KeyEventsPlugin._normalizeKey = /**\n * \\@internal\n * @param {?} keyName\n * @return {?}\n */\n function (keyName) {\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 };\n KeyEventsPlugin.decorators = [\n { type: _angular_core.Injectable },\n ];\n /** @nocollapse */\n KeyEventsPlugin.ctorParameters = function () { return [\n { type: undefined, decorators: [{ type: _angular_core.Inject, args: [DOCUMENT$1,] },] },\n ]; };\n return KeyEventsPlugin;\n}(EventManagerPlugin));\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\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 * This helper class is used to get hold of an inert tree of DOM elements containing dirty HTML\n * that needs sanitizing.\n * Depending upon browser support we must use one of three strategies for doing this.\n * Support: Safari 10.x -> XHR strategy\n * Support: Firefox -> DomParser strategy\n * Default: InertDocument strategy\n */\nvar InertBodyHelper = /** @class */ (function () {\n function InertBodyHelper(defaultDoc, DOM) {\n this.defaultDoc = defaultDoc;\n this.DOM = DOM;\n var /** @type {?} */ inertDocument = this.DOM.createHtmlDocument();\n this.inertBodyElement = inertDocument.body;\n if (this.inertBodyElement == null) {\n // usually there should be only one body element in the document, but IE doesn't have any, so\n // we need to create one.\n var /** @type {?} */ inertHtml = this.DOM.createElement('html', inertDocument);\n this.inertBodyElement = this.DOM.createElement('body', inertDocument);\n this.DOM.appendChild(inertHtml, this.inertBodyElement);\n this.DOM.appendChild(inertDocument, inertHtml);\n }\n this.DOM.setInnerHTML(this.inertBodyElement, '<svg><g onload=\"this.parentNode.remove()\"></g></svg>');\n if (this.inertBodyElement.querySelector && !this.inertBodyElement.querySelector('svg')) {\n // We just hit the Safari 10.1 bug - which allows JS to run inside the SVG G element\n // so use the XHR strategy.\n this.getInertBodyElement = this.getInertBodyElement_XHR;\n return;\n }\n this.DOM.setInnerHTML(this.inertBodyElement, '<svg><p><style><img src=\"</style><img src=x onerror=alert(1)//\">');\n if (this.inertBodyElement.querySelector && this.inertBodyElement.querySelector('svg img')) {\n // We just hit the Firefox bug - which prevents the inner img JS from being sanitized\n // so use the DOMParser strategy, if it is available.\n // If the DOMParser is not available then we are not in Firefox (Server/WebWorker?) so we\n // fall through to the default strategy below.\n if (isDOMParserAvailable()) {\n this.getInertBodyElement = this.getInertBodyElement_DOMParser;\n return;\n }\n }\n // None of the bugs were hit so it is safe for us to use the default InertDocument strategy\n this.getInertBodyElement = this.getInertBodyElement_InertDocument;\n }\n /**\n * Use XHR to create and fill an inert body element (on Safari 10.1)\n * See\n * https://github.com/cure53/DOMPurify/blob/a992d3a75031cb8bb032e5ea8399ba972bdf9a65/src/purify.js#L439-L449\n * @param {?} html\n * @return {?}\n */\n InertBodyHelper.prototype.getInertBodyElement_XHR = /**\n * Use XHR to create and fill an inert body element (on Safari 10.1)\n * See\n * https://github.com/cure53/DOMPurify/blob/a992d3a75031cb8bb032e5ea8399ba972bdf9a65/src/purify.js#L439-L449\n * @param {?} html\n * @return {?}\n */\n function (html) {\n // We add these extra elements to ensure that the rest of the content is parsed as expected\n // e.g. leading whitespace is maintained and tags like `<meta>` do not get hoisted to the\n // `<head>` tag.\n html = '<body><remove></remove>' + html + '</body>';\n try {\n html = encodeURI(html);\n }\n catch (/** @type {?} */ e) {\n return null;\n }\n var /** @type {?} */ xhr = new XMLHttpRequest();\n xhr.responseType = 'document';\n xhr.open('GET', 'data:text/html;charset=utf-8,' + html, false);\n xhr.send(null);\n var /** @type {?} */ body = xhr.response.body;\n body.removeChild(/** @type {?} */ ((body.firstChild)));\n return body;\n };\n /**\n * Use DOMParser to create and fill an inert body element (on Firefox)\n * See https://github.com/cure53/DOMPurify/releases/tag/0.6.7\n *\n * @param {?} html\n * @return {?}\n */\n InertBodyHelper.prototype.getInertBodyElement_DOMParser = /**\n * Use DOMParser to create and fill an inert body element (on Firefox)\n * See https://github.com/cure53/DOMPurify/releases/tag/0.6.7\n *\n * @param {?} html\n * @return {?}\n */\n function (html) {\n // We add these extra elements to ensure that the rest of the content is parsed as expected\n // e.g. leading whitespace is maintained and tags like `<meta>` do not get hoisted to the\n // `<head>` tag.\n html = '<body><remove></remove>' + html + '</body>';\n try {\n var /** @type {?} */ body = /** @type {?} */ (new (/** @type {?} */ (window))\n .DOMParser()\n .parseFromString(html, 'text/html')\n .body);\n body.removeChild(/** @type {?} */ ((body.firstChild)));\n return body;\n }\n catch (/** @type {?} */ e) {\n return null;\n }\n };\n /**\n * Use an HTML5 `template` element, if supported, or an inert body element created via\n * `createHtmlDocument` to create and fill an inert DOM element.\n * This is the default sane strategy to use if the browser does not require one of the specialised\n * strategies above.\n * @param {?} html\n * @return {?}\n */\n InertBodyHelper.prototype.getInertBodyElement_InertDocument = /**\n * Use an HTML5 `template` element, if supported, or an inert body element created via\n * `createHtmlDocument` to create and fill an inert DOM element.\n * This is the default sane strategy to use if the browser does not require one of the specialised\n * strategies above.\n * @param {?} html\n * @return {?}\n */\n function (html) {\n // Prefer using <template> element if supported.\n var /** @type {?} */ templateEl = this.DOM.createElement('template');\n if ('content' in templateEl) {\n this.DOM.setInnerHTML(templateEl, html);\n return templateEl;\n }\n this.DOM.setInnerHTML(this.inertBodyElement, html);\n // Support: IE 9-11 only\n // strip custom-namespaced attributes on IE<=11\n if (this.defaultDoc.documentMode) {\n this.stripCustomNsAttrs(this.inertBodyElement);\n }\n return this.inertBodyElement;\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.\n * '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 */\n InertBodyHelper.prototype.stripCustomNsAttrs = /**\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.\n * '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 */\n function (el) {\n var _this = this;\n this.DOM.attributeMap(el).forEach(function (_, attrName) {\n if (attrName === 'xmlns:ns1' || attrName.indexOf('ns1:') === 0) {\n _this.DOM.removeAttribute(el, attrName);\n }\n });\n for (var _i = 0, _a = this.DOM.childNodesAsList(el); _i < _a.length; _i++) {\n var n = _a[_i];\n if (this.DOM.isElementNode(n))\n this.stripCustomNsAttrs(/** @type {?} */ (n));\n }\n };\n return InertBodyHelper;\n}());\n/**\n * We need to determine whether the DOMParser exists in the global context.\n * The try-catch is because, on some browsers, trying to access this property\n * on window can actually throw an error.\n *\n * @suppress {uselessCode}\n * @return {?}\n */\nfunction isDOMParserAvailable() {\n try {\n return !!(/** @type {?} */ (window)).DOMParser;\n }\n catch (/** @type {?} */ e) {\n return false;\n }\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\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 * 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. \"h&#116;tp\" for \"http\".\n * It also disallows HTML entities in the first path part of a relative path,\n * e.g. \"foo&lt;bar/baz\". Our existing escaping functions should not produce\n * that. More importantly, it disallows masking of a colon,\n * e.g. \"javascript&#58;...\".\n *\n * This regular expression was taken from the Closure sanitization library.\n */\nvar SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi;\n/**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n */\nvar DATA_URL_PATTERN = /^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 */\nfunction sanitizeUrl(url) {\n url = String(url);\n if (url.match(SAFE_URL_PATTERN) || url.match(DATA_URL_PATTERN))\n return url;\n if (_angular_core.isDevMode()) {\n getDOM().log(\"WARNING: sanitizing unsafe URL value \" + url + \" (see http://g.co/ng/security#xss)\");\n }\n return 'unsafe:' + url;\n}\n/**\n * @param {?} srcset\n * @return {?}\n */\nfunction sanitizeSrcset(srcset) {\n srcset = String(srcset);\n return srcset.split(',').map(function (srcset) { return sanitizeUrl(srcset.trim()); }).join(', ');\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\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 * @param {?} tags\n * @return {?}\n */\nfunction tagSet(tags) {\n var /** @type {?} */ res = {};\n for (var _i = 0, _a = tags.split(','); _i < _a.length; _i++) {\n var t = _a[_i];\n res[t] = true;\n }\n return res;\n}\n/**\n * @param {...?} sets\n * @return {?}\n */\nfunction merge() {\n var sets = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n sets[_i] = arguments[_i];\n }\n var /** @type {?} */ res = {};\n for (var _a = 0, sets_1 = sets; _a < sets_1.length; _a++) {\n var s = sets_1[_a];\n for (var /** @type {?} */ v in s) {\n if (s.hasOwnProperty(v))\n res[v] = true;\n }\n }\n return res;\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// Safe Void Elements - HTML5\n// http://dev.w3.org/html5/spec/Overview.html#void-elements\nvar VOID_ELEMENTS = tagSet('area,br,col,hr,img,wbr');\n// Elements that you can, intentionally, leave open (and which close themselves)\n// http://dev.w3.org/html5/spec/Overview.html#optional-tags\nvar OPTIONAL_END_TAG_BLOCK_ELEMENTS = tagSet('colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr');\nvar OPTIONAL_END_TAG_INLINE_ELEMENTS = tagSet('rp,rt');\nvar OPTIONAL_END_TAG_ELEMENTS = merge(OPTIONAL_END_TAG_INLINE_ELEMENTS, OPTIONAL_END_TAG_BLOCK_ELEMENTS);\n// Safe Block Elements - HTML5\nvar BLOCK_ELEMENTS = merge(OPTIONAL_END_TAG_BLOCK_ELEMENTS, tagSet('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// Inline Elements - HTML5\nvar INLINE_ELEMENTS = merge(OPTIONAL_END_TAG_INLINE_ELEMENTS, tagSet('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'));\nvar VALID_ELEMENTS = merge(VOID_ELEMENTS, BLOCK_ELEMENTS, INLINE_ELEMENTS, OPTIONAL_END_TAG_ELEMENTS);\n// Attributes that have href and hence need to be sanitized\nvar URI_ATTRS = tagSet('background,cite,href,itemtype,longdesc,poster,src,xlink:href');\n// Attributes that have special href set hence need to be sanitized\nvar SRCSET_ATTRS = tagSet('srcset');\nvar HTML_ATTRS = tagSet('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// NB: This currently consciously 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// 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.\nvar 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 */\nvar SanitizingHtmlSerializer = /** @class */ (function () {\n function SanitizingHtmlSerializer() {\n this.sanitizedSomething = false;\n this.buf = [];\n this.DOM = getDOM();\n }\n /**\n * @param {?} el\n * @return {?}\n */\n SanitizingHtmlSerializer.prototype.sanitizeChildren = /**\n * @param {?} el\n * @return {?}\n */\n function (el) {\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 var /** @type {?} */ current = /** @type {?} */ ((this.DOM.firstChild(el)));\n while (current) {\n if (this.DOM.isElementNode(current)) {\n this.startElement(/** @type {?} */ (current));\n }\n else if (this.DOM.isTextNode(current)) {\n this.chars(/** @type {?} */ ((this.DOM.nodeValue(current))));\n }\n else {\n // Strip non-element, non-text nodes.\n this.sanitizedSomething = true;\n }\n if (this.DOM.firstChild(current)) {\n current = /** @type {?} */ ((this.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 (this.DOM.isElementNode(current)) {\n this.endElement(/** @type {?} */ (current));\n }\n var /** @type {?} */ next = this.checkClobberedElement(current, /** @type {?} */ ((this.DOM.nextSibling(current))));\n if (next) {\n current = next;\n break;\n }\n current = this.checkClobberedElement(current, /** @type {?} */ ((this.DOM.parentElement(current))));\n }\n }\n return this.buf.join('');\n };\n /**\n * @param {?} element\n * @return {?}\n */\n SanitizingHtmlSerializer.prototype.startElement = /**\n * @param {?} element\n * @return {?}\n */\n function (element) {\n var _this = this;\n var /** @type {?} */ tagName = this.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 this.DOM.attributeMap(element).forEach(function (value, attrName) {\n var /** @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])\n value = sanitizeUrl(value);\n if (SRCSET_ATTRS[lower])\n 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 */\n SanitizingHtmlSerializer.prototype.endElement = /**\n * @param {?} current\n * @return {?}\n */\n function (current) {\n var /** @type {?} */ tagName = this.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 */\n SanitizingHtmlSerializer.prototype.chars = /**\n * @param {?} chars\n * @return {?}\n */\n function (chars) { this.buf.push(encodeEntities(chars)); };\n /**\n * @param {?} node\n * @param {?} nextNode\n * @return {?}\n */\n SanitizingHtmlSerializer.prototype.checkClobberedElement = /**\n * @param {?} node\n * @param {?} nextNode\n * @return {?}\n */\n function (node, nextNode) {\n if (nextNode && this.DOM.contains(node, nextNode)) {\n throw new Error(\"Failed to sanitize html because the element is clobbered: \" + this.DOM.getOuterHTML(node));\n }\n return nextNode;\n };\n return SanitizingHtmlSerializer;\n}());\n// Regular Expressions for parsing tags and attributes\nvar SURROGATE_PAIR_REGEXP = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\n// ! to ~ is the ASCII range.\nvar 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) {\n return value.replace(/&/g, '&amp;')\n .replace(SURROGATE_PAIR_REGEXP, function (match) {\n var /** @type {?} */ hi = match.charCodeAt(0);\n var /** @type {?} */ low = match.charCodeAt(1);\n return '&#' + (((hi - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000) + ';';\n })\n .replace(NON_ALPHANUMERIC_REGEXP, function (match) { return '&#' + match.charCodeAt(0) + ';'; })\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;');\n}\nvar inertBodyHelper;\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 */\nfunction sanitizeHtml(defaultDoc, unsafeHtmlInput) {\n var /** @type {?} */ DOM = getDOM();\n var /** @type {?} */ inertBodyElement = null;\n try {\n inertBodyHelper = inertBodyHelper || new InertBodyHelper(defaultDoc, DOM);\n // Make sure unsafeHtml is actually a string (TypeScript types are not enforced at runtime).\n var /** @type {?} */ unsafeHtml = unsafeHtmlInput ? String(unsafeHtmlInput) : '';\n inertBodyElement = inertBodyHelper.getInertBodyElement(unsafeHtml);\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 var /** @type {?} */ mXSSAttempts = 5;\n var /** @type {?} */ parsedHtml = unsafeHtml;\n do {\n if (mXSSAttempts === 0) {\n throw new Error('Failed to sanitize html because the input is unstable');\n }\n mXSSAttempts--;\n unsafeHtml = parsedHtml;\n parsedHtml = DOM.getInnerHTML(inertBodyElement);\n inertBodyElement = inertBodyHelper.getInertBodyElement(unsafeHtml);\n } while (unsafeHtml !== parsedHtml);\n var /** @type {?} */ sanitizer = new SanitizingHtmlSerializer();\n var /** @type {?} */ safeHtml = sanitizer.sanitizeChildren(DOM.getTemplateContent(inertBodyElement) || inertBodyElement);\n if (_angular_core.isDevMode() && sanitizer.sanitizedSomething) {\n DOM.log('WARNING: sanitizing HTML stripped some content (see http://g.co/ng/security#xss).');\n }\n return safeHtml;\n }\n finally {\n // In case anything goes wrong, clear out inertElement to reset the entire DOM structure.\n if (inertBodyElement) {\n var /** @type {?} */ parent_1 = DOM.getTemplateContent(inertBodyElement) || inertBodyElement;\n for (var _i = 0, _a = DOM.childNodesAsList(parent_1); _i < _a.length; _i++) {\n var child = _a[_i];\n DOM.removeChild(parent_1, child);\n }\n }\n }\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\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 * 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 */\nvar VALUES = '[-,.\"\\'%_!# a-zA-Z0-9]+';\nvar TRANSFORMATION_FNS = '(?:matrix|translate|scale|rotate|skew|perspective)(?:X|Y|3d)?';\nvar COLOR_FNS = '(?:rgb|hsl)a?';\nvar GRADIENTS = '(?:repeating-)?(?:linear|radial)-gradient';\nvar CSS3_FNS = '(?:calc|attr)';\nvar FN_ARGS = '\\\\([-0-9.%, #a-zA-Z]+\\\\)';\nvar SAFE_STYLE_VALUE = new RegExp(\"^(\" + VALUES + \"|\" +\n (\"(?:\" + TRANSFORMATION_FNS + \"|\" + COLOR_FNS + \"|\" + GRADIENTS + \"|\" + CSS3_FNS + \")\") +\n (FN_ARGS + \")$\"), 'g');\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 */\nvar 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) {\n var /** @type {?} */ outsideSingle = true;\n var /** @type {?} */ outsideDouble = true;\n for (var /** @type {?} */ i = 0; i < value.length; i++) {\n var /** @type {?} */ c = value.charAt(i);\n if (c === '\\'' && outsideDouble) {\n outsideSingle = !outsideSingle;\n }\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 */\nfunction sanitizeStyle(value) {\n value = String(value).trim(); // Make sure it's actually a string.\n if (!value)\n return '';\n // Single url(...) values are supported, but only for URLs that sanitize cleanly. See above for\n // reasoning behind this.\n var /** @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 if (_angular_core.isDevMode()) {\n getDOM().log(\"WARNING: sanitizing unsafe style value \" + value + \" (see http://g.co/ng/security#xss).\");\n }\n return 'unsafe';\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\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 * Marker interface for a value that's safe to use in a particular context.\n *\n * \\@stable\n * @record\n */\n\n/**\n * Marker interface for a value that's safe to use as HTML.\n *\n * \\@stable\n * @record\n */\n\n/**\n * Marker interface for a value that's safe to use as style (CSS).\n *\n * \\@stable\n * @record\n */\n\n/**\n * Marker interface for a value that's safe to use as JavaScript.\n *\n * \\@stable\n * @record\n */\n\n/**\n * Marker interface for a value that's safe to use as a URL linking to a document.\n *\n * \\@stable\n * @record\n */\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 * @record\n */\n\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 */\nvar DomSanitizer = /** @class */ (function () {\n function DomSanitizer() {\n }\n return DomSanitizer;\n}());\nvar DomSanitizerImpl = /** @class */ (function (_super) {\n __extends(DomSanitizerImpl, _super);\n function DomSanitizerImpl(_doc) {\n var _this = _super.call(this) || this;\n _this._doc = _doc;\n return _this;\n }\n /**\n * @param {?} ctx\n * @param {?} value\n * @return {?}\n */\n DomSanitizerImpl.prototype.sanitize = /**\n * @param {?} ctx\n * @param {?} value\n * @return {?}\n */\n function (ctx, value) {\n if (value == null)\n return null;\n switch (ctx) {\n case _angular_core.SecurityContext.NONE:\n return /** @type {?} */ (value);\n case _angular_core.SecurityContext.HTML:\n if (value instanceof SafeHtmlImpl)\n return value.changingThisBreaksApplicationSecurity;\n this.checkNotSafeValue(value, 'HTML');\n return sanitizeHtml(this._doc, String(value));\n case _angular_core.SecurityContext.STYLE:\n if (value instanceof SafeStyleImpl)\n return value.changingThisBreaksApplicationSecurity;\n this.checkNotSafeValue(value, 'Style');\n return sanitizeStyle(/** @type {?} */ (value));\n case _angular_core.SecurityContext.SCRIPT:\n if (value instanceof SafeScriptImpl)\n return value.changingThisBreaksApplicationSecurity;\n this.checkNotSafeValue(value, 'Script');\n throw new Error('unsafe value used in a script context');\n case _angular_core.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 _angular_core.SecurityContext.RESOURCE_URL:\n if (value instanceof SafeResourceUrlImpl) {\n return value.changingThisBreaksApplicationSecurity;\n }\n this.checkNotSafeValue(value, 'ResourceURL');\n throw new Error('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 */\n DomSanitizerImpl.prototype.checkNotSafeValue = /**\n * @param {?} value\n * @param {?} expectedType\n * @return {?}\n */\n function (value, expectedType) {\n if (value instanceof SafeValueImpl) {\n throw new Error(\"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 */\n DomSanitizerImpl.prototype.bypassSecurityTrustHtml = /**\n * @param {?} value\n * @return {?}\n */\n function (value) { return new SafeHtmlImpl(value); };\n /**\n * @param {?} value\n * @return {?}\n */\n DomSanitizerImpl.prototype.bypassSecurityTrustStyle = /**\n * @param {?} value\n * @return {?}\n */\n function (value) { return new SafeStyleImpl(value); };\n /**\n * @param {?} value\n * @return {?}\n */\n DomSanitizerImpl.prototype.bypassSecurityTrustScript = /**\n * @param {?} value\n * @return {?}\n */\n function (value) { return new SafeScriptImpl(value); };\n /**\n * @param {?} value\n * @return {?}\n */\n DomSanitizerImpl.prototype.bypassSecurityTrustUrl = /**\n * @param {?} value\n * @return {?}\n */\n function (value) { return new SafeUrlImpl(value); };\n /**\n * @param {?} value\n * @return {?}\n */\n DomSanitizerImpl.prototype.bypassSecurityTrustResourceUrl = /**\n * @param {?} value\n * @return {?}\n */\n function (value) {\n return new SafeResourceUrlImpl(value);\n };\n DomSanitizerImpl.decorators = [\n { type: _angular_core.Injectable },\n ];\n /** @nocollapse */\n DomSanitizerImpl.ctorParameters = function () { return [\n { type: undefined, decorators: [{ type: _angular_core.Inject, args: [DOCUMENT$1,] },] },\n ]; };\n return DomSanitizerImpl;\n}(DomSanitizer));\n/**\n * @abstract\n */\nvar SafeValueImpl = /** @class */ (function () {\n function SafeValueImpl(changingThisBreaksApplicationSecurity) {\n // empty\n this.changingThisBreaksApplicationSecurity = changingThisBreaksApplicationSecurity;\n }\n /**\n * @return {?}\n */\n SafeValueImpl.prototype.toString = /**\n * @return {?}\n */\n function () {\n return \"SafeValue must use [property]=binding: \" + this.changingThisBreaksApplicationSecurity +\n \" (see http://g.co/ng/security#xss)\";\n };\n return SafeValueImpl;\n}());\nvar SafeHtmlImpl = /** @class */ (function (_super) {\n __extends(SafeHtmlImpl, _super);\n function SafeHtmlImpl() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @return {?}\n */\n SafeHtmlImpl.prototype.getTypeName = /**\n * @return {?}\n */\n function () { return 'HTML'; };\n return SafeHtmlImpl;\n}(SafeValueImpl));\nvar SafeStyleImpl = /** @class */ (function (_super) {\n __extends(SafeStyleImpl, _super);\n function SafeStyleImpl() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @return {?}\n */\n SafeStyleImpl.prototype.getTypeName = /**\n * @return {?}\n */\n function () { return 'Style'; };\n return SafeStyleImpl;\n}(SafeValueImpl));\nvar SafeScriptImpl = /** @class */ (function (_super) {\n __extends(SafeScriptImpl, _super);\n function SafeScriptImpl() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @return {?}\n */\n SafeScriptImpl.prototype.getTypeName = /**\n * @return {?}\n */\n function () { return 'Script'; };\n return SafeScriptImpl;\n}(SafeValueImpl));\nvar SafeUrlImpl = /** @class */ (function (_super) {\n __extends(SafeUrlImpl, _super);\n function SafeUrlImpl() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @return {?}\n */\n SafeUrlImpl.prototype.getTypeName = /**\n * @return {?}\n */\n function () { return 'URL'; };\n return SafeUrlImpl;\n}(SafeValueImpl));\nvar SafeResourceUrlImpl = /** @class */ (function (_super) {\n __extends(SafeResourceUrlImpl, _super);\n function SafeResourceUrlImpl() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @return {?}\n */\n SafeResourceUrlImpl.prototype.getTypeName = /**\n * @return {?}\n */\n function () { return 'ResourceURL'; };\n return SafeResourceUrlImpl;\n}(SafeValueImpl));\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\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 */\nvar INTERNAL_BROWSER_PLATFORM_PROVIDERS = [\n { provide: _angular_core.PLATFORM_ID, useValue: _angular_common.ɵPLATFORM_BROWSER_ID },\n { provide: _angular_core.PLATFORM_INITIALIZER, useValue: initDomAdapter, multi: true },\n { provide: _angular_common.PlatformLocation, useClass: BrowserPlatformLocation, deps: [DOCUMENT$1] },\n { provide: DOCUMENT$1, 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 */\nvar BROWSER_SANITIZATION_PROVIDERS = [\n { provide: _angular_core.Sanitizer, useExisting: DomSanitizer },\n { provide: DomSanitizer, useClass: DomSanitizerImpl, deps: [DOCUMENT$1] },\n];\n/**\n * \\@stable\n */\nvar platformBrowser = _angular_core.createPlatformFactory(_angular_core.platformCore, 'browser', INTERNAL_BROWSER_PLATFORM_PROVIDERS);\n/**\n * @return {?}\n */\nfunction initDomAdapter() {\n BrowserDomAdapter.makeCurrent();\n BrowserGetTestability.init();\n}\n/**\n * @return {?}\n */\nfunction errorHandler() {\n return new _angular_core.ErrorHandler();\n}\n/**\n * @return {?}\n */\nfunction _document() {\n return document;\n}\n/**\n * The ng module for the browser.\n *\n * \\@stable\n */\nvar BrowserModule = /** @class */ (function () {\n function BrowserModule(parentModule) {\n if (parentModule) {\n throw new Error(\"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 */\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 */\n BrowserModule.withServerTransition = /**\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 */\n function (params) {\n return {\n ngModule: BrowserModule,\n providers: [\n { provide: _angular_core.APP_ID, useValue: params.appId },\n { provide: TRANSITION_ID, useExisting: _angular_core.APP_ID },\n SERVER_TRANSITION_PROVIDERS,\n ],\n };\n };\n BrowserModule.decorators = [\n { type: _angular_core.NgModule, args: [{\n providers: [\n BROWSER_SANITIZATION_PROVIDERS,\n { provide: _angular_core.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: _angular_core.RendererFactory2, useExisting: DomRendererFactory2 },\n { provide: SharedStylesHost, useExisting: DomSharedStylesHost },\n DomSharedStylesHost,\n _angular_core.Testability,\n EventManager,\n ELEMENT_PROBE_PROVIDERS,\n Meta,\n Title,\n ],\n exports: [_angular_common.CommonModule, _angular_core.ApplicationModule]\n },] },\n ];\n /** @nocollapse */\n BrowserModule.ctorParameters = function () { return [\n { type: BrowserModule, decorators: [{ type: _angular_core.Optional }, { type: _angular_core.SkipSelf },] },\n ]; };\n return BrowserModule;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\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 */\nvar win = typeof window !== 'undefined' && window || /** @type {?} */ ({});\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\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 */\nvar ChangeDetectionPerfRecord = /** @class */ (function () {\n function ChangeDetectionPerfRecord(msPerTick, numTicks) {\n this.msPerTick = msPerTick;\n this.numTicks = numTicks;\n }\n return ChangeDetectionPerfRecord;\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 */\nvar AngularProfiler = /** @class */ (function () {\n function AngularProfiler(ref) {\n this.appRef = ref.injector.get(_angular_core.ApplicationRef);\n }\n // tslint:disable:no-console\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 */\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 */\n AngularProfiler.prototype.timeChangeDetection = /**\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 */\n function (config) {\n var /** @type {?} */ record = config && config['record'];\n var /** @type {?} */ profileName = 'Change Detection';\n // Profiler is not available in Android browsers, nor in IE 9 without dev tools opened\n var /** @type {?} */ isProfilerAvailable = win.console.profile != null;\n if (record && isProfilerAvailable) {\n win.console.profile(profileName);\n }\n var /** @type {?} */ start = getDOM().performanceNow();\n var /** @type {?} */ numTicks = 0;\n while (numTicks < 5 || (getDOM().performanceNow() - start) < 500) {\n this.appRef.tick();\n numTicks++;\n }\n var /** @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 {?} */ (win.console.profileEnd))(profileName);\n }\n var /** @type {?} */ msPerTick = (end - start) / numTicks;\n win.console.log(\"ran \" + numTicks + \" change detection cycles\");\n win.console.log(msPerTick.toFixed(2) + \" ms per check\");\n return new ChangeDetectionPerfRecord(msPerTick, numTicks);\n };\n return AngularProfiler;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\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 */\nvar PROFILER_GLOBAL_NAME = '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 */\nfunction enableDebugTools(ref) {\n exportNgVar(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 */\nfunction disableDebugTools() {\n exportNgVar(PROFILER_GLOBAL_NAME, null);\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\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 * @param {?} text\n * @return {?}\n */\nfunction escapeHtml(text) {\n var /** @type {?} */ escapedText = {\n '&': '&a;',\n '\"': '&q;',\n '\\'': '&s;',\n '<': '&l;',\n '>': '&g;',\n };\n return text.replace(/[&\"'<>]/g, function (s) { return escapedText[s]; });\n}\n/**\n * @param {?} text\n * @return {?}\n */\nfunction unescapeHtml(text) {\n var /** @type {?} */ unescapedText = {\n '&a;': '&',\n '&q;': '\"',\n '&s;': '\\'',\n '&l;': '<',\n '&g;': '>',\n };\n return text.replace(/&[^;]+;/g, function (s) { return unescapedText[s]; });\n}\n/**\n * Create a `StateKey<T>` that can be used to store value of type T with `TransferState`.\n *\n * Example:\n *\n * ```\n * const COUNTER_KEY = makeStateKey<number>('counter');\n * let value = 10;\n *\n * transferState.set(COUNTER_KEY, value);\n * ```\n *\n * \\@experimental\n * @template T\n * @param {?} key\n * @return {?}\n */\nfunction makeStateKey(key) {\n return /** @type {?} */ (key);\n}\n/**\n * A key value store that is transferred from the application on the server side to the application\n * on the client side.\n *\n * `TransferState` will be available as an injectable token. To use it import\n * `ServerTransferStateModule` on the server and `BrowserTransferStateModule` on the client.\n *\n * The values in the store are serialized/deserialized using JSON.stringify/JSON.parse. So only\n * boolean, number, string, null and non-class objects will be serialized and deserialzied in a\n * non-lossy manner.\n *\n * \\@experimental\n */\nvar TransferState = /** @class */ (function () {\n function TransferState() {\n this.store = {};\n this.onSerializeCallbacks = {};\n }\n /** @internal */\n /**\n * \\@internal\n * @param {?} initState\n * @return {?}\n */\n TransferState.init = /**\n * \\@internal\n * @param {?} initState\n * @return {?}\n */\n function (initState) {\n var /** @type {?} */ transferState = new TransferState();\n transferState.store = initState;\n return transferState;\n };\n /**\n * Get the value corresponding to a key. Return `defaultValue` if key is not found.\n */\n /**\n * Get the value corresponding to a key. Return `defaultValue` if key is not found.\n * @template T\n * @param {?} key\n * @param {?} defaultValue\n * @return {?}\n */\n TransferState.prototype.get = /**\n * Get the value corresponding to a key. Return `defaultValue` if key is not found.\n * @template T\n * @param {?} key\n * @param {?} defaultValue\n * @return {?}\n */\n function (key, defaultValue) {\n return this.store[key] !== undefined ? /** @type {?} */ (this.store[key]) : defaultValue;\n };\n /**\n * Set the value corresponding to a key.\n */\n /**\n * Set the value corresponding to a key.\n * @template T\n * @param {?} key\n * @param {?} value\n * @return {?}\n */\n TransferState.prototype.set = /**\n * Set the value corresponding to a key.\n * @template T\n * @param {?} key\n * @param {?} value\n * @return {?}\n */\n function (key, value) { this.store[key] = value; };\n /**\n * Remove a key from the store.\n */\n /**\n * Remove a key from the store.\n * @template T\n * @param {?} key\n * @return {?}\n */\n TransferState.prototype.remove = /**\n * Remove a key from the store.\n * @template T\n * @param {?} key\n * @return {?}\n */\n function (key) { delete this.store[key]; };\n /**\n * Test whether a key exists in the store.\n */\n /**\n * Test whether a key exists in the store.\n * @template T\n * @param {?} key\n * @return {?}\n */\n TransferState.prototype.hasKey = /**\n * Test whether a key exists in the store.\n * @template T\n * @param {?} key\n * @return {?}\n */\n function (key) { return this.store.hasOwnProperty(key); };\n /**\n * Register a callback to provide the value for a key when `toJson` is called.\n */\n /**\n * Register a callback to provide the value for a key when `toJson` is called.\n * @template T\n * @param {?} key\n * @param {?} callback\n * @return {?}\n */\n TransferState.prototype.onSerialize = /**\n * Register a callback to provide the value for a key when `toJson` is called.\n * @template T\n * @param {?} key\n * @param {?} callback\n * @return {?}\n */\n function (key, callback) {\n this.onSerializeCallbacks[key] = callback;\n };\n /**\n * Serialize the current state of the store to JSON.\n */\n /**\n * Serialize the current state of the store to JSON.\n * @return {?}\n */\n TransferState.prototype.toJson = /**\n * Serialize the current state of the store to JSON.\n * @return {?}\n */\n function () {\n // Call the onSerialize callbacks and put those values into the store.\n for (var /** @type {?} */ key in this.onSerializeCallbacks) {\n if (this.onSerializeCallbacks.hasOwnProperty(key)) {\n try {\n this.store[key] = this.onSerializeCallbacks[key]();\n }\n catch (/** @type {?} */ e) {\n console.warn('Exception in onSerialize callback: ', e);\n }\n }\n }\n return JSON.stringify(this.store);\n };\n TransferState.decorators = [\n { type: _angular_core.Injectable },\n ];\n /** @nocollapse */\n TransferState.ctorParameters = function () { return []; };\n return TransferState;\n}());\n/**\n * @param {?} doc\n * @param {?} appId\n * @return {?}\n */\nfunction initTransferState(doc, appId) {\n // Locate the script tag with the JSON data transferred from the server.\n // The id of the script tag is set to the Angular appId + 'state'.\n var /** @type {?} */ script = doc.getElementById(appId + '-state');\n var /** @type {?} */ initialState = {};\n if (script && script.textContent) {\n try {\n initialState = JSON.parse(unescapeHtml(script.textContent));\n }\n catch (/** @type {?} */ e) {\n console.warn('Exception while restoring TransferState for app ' + appId, e);\n }\n }\n return TransferState.init(initialState);\n}\n/**\n * NgModule to install on the client side while using the `TransferState` to transfer state from\n * server to client.\n *\n * \\@experimental\n */\nvar BrowserTransferStateModule = /** @class */ (function () {\n function BrowserTransferStateModule() {\n }\n BrowserTransferStateModule.decorators = [\n { type: _angular_core.NgModule, args: [{\n providers: [{ provide: TransferState, useFactory: initTransferState, deps: [DOCUMENT$1, _angular_core.APP_ID] }],\n },] },\n ];\n /** @nocollapse */\n BrowserTransferStateModule.ctorParameters = function () { return []; };\n return BrowserTransferStateModule;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\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 * Predicates for use with {\\@link DebugElement}'s query functions.\n *\n * \\@experimental All debugging apis are currently experimental.\n */\nvar By = /** @class */ (function () {\n function By() {\n }\n /**\n * Match all elements.\n *\n * ## Example\n *\n * {@example platform-browser/dom/debug/ts/by/by.ts region='by_all'}\n */\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 */\n By.all = /**\n * Match all elements.\n *\n * ## Example\n *\n * {\\@example platform-browser/dom/debug/ts/by/by.ts region='by_all'}\n * @return {?}\n */\n function () { return function (debugElement) { return 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 */\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 */\n By.css = /**\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 */\n function (selector) {\n return function (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 */\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 */\n By.directive = /**\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 */\n function (type) {\n return function (debugElement) { return ((debugElement.providerTokens)).indexOf(type) !== -1; };\n };\n return By;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\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/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\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 * \\@stable\n */\nvar VERSION = new _angular_core.Version('5.2.5');\n\nexports.BrowserModule = BrowserModule;\nexports.platformBrowser = platformBrowser;\nexports.Meta = Meta;\nexports.Title = Title;\nexports.disableDebugTools = disableDebugTools;\nexports.enableDebugTools = enableDebugTools;\nexports.BrowserTransferStateModule = BrowserTransferStateModule;\nexports.TransferState = TransferState;\nexports.makeStateKey = makeStateKey;\nexports.By = By;\nexports.DOCUMENT = DOCUMENT$1;\nexports.EVENT_MANAGER_PLUGINS = EVENT_MANAGER_PLUGINS;\nexports.EventManager = EventManager;\nexports.HAMMER_GESTURE_CONFIG = HAMMER_GESTURE_CONFIG;\nexports.HammerGestureConfig = HammerGestureConfig;\nexports.DomSanitizer = DomSanitizer;\nexports.VERSION = VERSION;\nexports.ɵBROWSER_SANITIZATION_PROVIDERS = BROWSER_SANITIZATION_PROVIDERS;\nexports.ɵINTERNAL_BROWSER_PLATFORM_PROVIDERS = INTERNAL_BROWSER_PLATFORM_PROVIDERS;\nexports.ɵinitDomAdapter = initDomAdapter;\nexports.ɵBrowserDomAdapter = BrowserDomAdapter;\nexports.ɵBrowserPlatformLocation = BrowserPlatformLocation;\nexports.ɵTRANSITION_ID = TRANSITION_ID;\nexports.ɵBrowserGetTestability = BrowserGetTestability;\nexports.ɵescapeHtml = escapeHtml;\nexports.ɵELEMENT_PROBE_PROVIDERS = ELEMENT_PROBE_PROVIDERS;\nexports.ɵDomAdapter = DomAdapter;\nexports.ɵgetDOM = getDOM;\nexports.ɵsetRootDomAdapter = setRootDomAdapter;\nexports.ɵDomRendererFactory2 = DomRendererFactory2;\nexports.ɵNAMESPACE_URIS = NAMESPACE_URIS;\nexports.ɵflattenStyles = flattenStyles;\nexports.ɵshimContentAttribute = shimContentAttribute;\nexports.ɵshimHostAttribute = shimHostAttribute;\nexports.ɵDomEventsPlugin = DomEventsPlugin;\nexports.ɵHammerGesturesPlugin = HammerGesturesPlugin;\nexports.ɵKeyEventsPlugin = KeyEventsPlugin;\nexports.ɵDomSharedStylesHost = DomSharedStylesHost;\nexports.ɵSharedStylesHost = SharedStylesHost;\nexports.ɵb = _document;\nexports.ɵa = errorHandler;\nexports.ɵi = GenericBrowserDomAdapter;\nexports.ɵg = SERVER_TRANSITION_PROVIDERS;\nexports.ɵf = appInitializerFactory;\nexports.ɵc = initTransferState;\nexports.ɵh = _createNgProbe;\nexports.ɵd = EventManagerPlugin;\nexports.ɵe = DomSanitizerImpl;\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n})));\n//# sourceMappingURL=platform-browser.umd.js.map\n"]}