Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(145)

Side by Side Diff: pkg/polymer/lib/src/js/polymer/polymer.js.map

Issue 507653004: update polymer to 0.3.5 (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: code review updates Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « pkg/polymer/lib/src/js/polymer/polymer.concat.js.map ('k') | pkg/polymer/pubspec.yaml » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 {"version":3,"file":"polymer.js","sources":["../polymer-gestures/src/scope.js"," ../polymer-gestures/src/targetfind.js","../polymer-gestures/src/touch-action.js" ,"../polymer-gestures/src/eventFactory.js","../polymer-gestures/src/pointermap.j s","../polymer-gestures/src/dispatcher.js","../polymer-gestures/src/installer.js ","../polymer-gestures/src/mouse.js","../polymer-gestures/src/touch.js","../poly mer-gestures/src/ms.js","../polymer-gestures/src/pointer.js","../polymer-gesture s/src/platform-events.js","../polymer-gestures/src/track.js","../polymer-gesture s/src/hold.js","../polymer-gestures/src/tap.js","../polymer-expressions/third_pa rty/esprima/esprima.js","../polymer-expressions/src/polymer-expressions.js","src /boot.js","src/lib/lang.js","src/lib/job.js","src/lib/dom.js","src/lib/super.js" ,"src/lib/deserialize.js","src/api.js","src/instance/utils.js","src/instance/eve nts.js","src/instance/attributes.js","src/instance/properties.js","src/instance/ mdv.js","src/instance/base.js","src/instance/styles.js","src/declaration/polymer .js","src/declaration/path.js","src/declaration/styles.js","src/declaration/even ts.js","src/declaration/properties.js","src/declaration/attributes.js","src/decl aration/mdv.js","src/declaration/prototype.js","src/declaration/queue.js","src/d eclaration/import.js","src/declaration/polymer-element.js","src/lib/auto-binding .js"],"names":[],"mappings":"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 A","sourcesContent":["/**\n * @license\n * Copyright (c) 2014 The Polymer Projec t Authors. All rights reserved.\n * This code may only be used under the BSD sty le license found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete s et of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject t o an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\nwindow.PolymerGestures = {\n hasSDPolyfill: Boolean(window.ShadowDOMPolyfil l)\n};\nPolymerGestures.wrap = PolymerGestures.hasSDPolyfill ? ShadowDOMPolyfill .wrapIfNeeded : function(a){ return a; };\n","/*\n * Copyright (c) 2014 The Poly mer Project Authors. All rights reserved.\n * This code may only be used under t he BSD style license found at http://polymer.github.io/LICENSE.txt\n * The compl ete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTO RS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATE NTS.txt\n */\n\n(function(scope) {\n var HAS_FULL_PATH = false;\n\n // test fo r full event path support\n var pathTest = document.createElement('meta');\n i f (!scope.hasSDPolyfill && pathTest.createShadowRoot) {\n var sr = pathTest.c reateShadowRoot();\n var s = document.createElement('span');\n sr.appendCh ild(s);\n pathTest.addEventListener('testpath', function(ev) {\n if (ev. path) {\n // if the span is in the event path, then path[0] is the real s ource for all events\n HAS_FULL_PATH = ev.path[0] === s;\n }\n ev.stopPropagation();\n });\n var ev = new CustomEvent('testpath', {bubble s: true});\n // must add node to DOM to trigger event listener\n document. head.appendChild(pathTest);\n s.dispatchEvent(ev);\n pathTest.parentNode.r emoveChild(pathTest);\n sr = s = null;\n }\n pathTest = null;\n\n var targ et = {\n shadow: function(inEl) {\n if (inEl) {\n return inEl.sha dowRoot || inEl.webkitShadowRoot;\n }\n },\n canTarget: function(shad ow) {\n return shadow && Boolean(shadow.elementFromPoint);\n },\n tar getingShadow: function(inEl) {\n var s = this.shadow(inEl);\n if (this .canTarget(s)) {\n return s;\n }\n },\n olderShadow: function( shadow) {\n var os = shadow.olderShadowRoot;\n if (!os) {\n var se = shadow.querySelector('shadow');\n if (se) {\n os = se.olde rShadowRoot;\n }\n }\n return os;\n },\n allShadows: func tion(element) {\n var shadows = [], s = this.shadow(element);\n while( s) {\n shadows.push(s);\n s = this.olderShadow(s);\n }\n return shadows;\n },\n searchRoot: function(inRoot, x, y) {\n var t, st, sr, os;\n if (inRoot) {\n t = inRoot.elementFromPoint(x, y);\n if (t) {\n // found element, check if it has a ShadowRoot\n sr = this.targetingShadow(t);\n } else if (inRoot !== document) {\n // check for sibling roots\n sr = this.olderShadow(inRoot);\n }\n // search other roots, fall back to light dom element\n return this.searchRoot(sr, x, y) || t;\n }\n },\n owner: function(el ement) {\n if (!element) {\n return document;\n }\n var s = element;\n // walk up until you hit the shadow root or document\n wh ile (s.parentNode) {\n s = s.parentNode;\n }\n // the owner ele ment is expected to be a Document or ShadowRoot\n if (s.nodeType != Node.DO CUMENT_NODE && s.nodeType != Node.DOCUMENT_FRAGMENT_NODE) {\n s = documen t;\n }\n return s;\n },\n findTarget: function(inEvent) {\n if (HAS_FULL_PATH && inEvent.path) {\n return inEvent.path[0];\n }\ n var x = inEvent.clientX, y = inEvent.clientY;\n // if the listener i s in the shadow root, it is much faster to start there\n var s = this.owner (inEvent.target);\n // if x, y is not in this root, fall back to document s earch\n if (!s.elementFromPoint(x, y)) {\n s = document;\n }\n return this.searchRoot(s, x, y);\n },\n findScrollAxis: function(inEv ent) {\n var n;\n if (HAS_FULL_PATH && inEvent.path) {\n var pa th = inEvent.path;\n for (var i = 0; i < path.length; i++) {\n n = path[i];\n if (n._scrollType) {\n return n._scrollType;\n }\n }\n } else {\n n = scope.wrap(inEvent.currentTa rget);\n while(n) {\n if (n._scrollType) {\n return n ._scrollType;\n }\n n = n.parentNode || n.host;\n }\n }\n },\n LCA: function(a, b) {\n if (a === b) {\n return a ;\n }\n if (a && !b) {\n return a;\n }\n if (b && !a) {\n return b;\n }\n if (!b && !a) {\n return document;\ n }\n // fast case, a is a direct descendant of b or vice versa\n if (a.contains && a.contains(b)) {\n return a;\n }\n if (b.con tains && b.contains(a)) {\n return b;\n }\n var adepth = this.d epth(a);\n var bdepth = this.depth(b);\n var d = adepth - bdepth;\n if (d >= 0) {\n a = this.walk(a, d);\n } else {\n b = this .walk(b, -d);\n }\n while (a && b && a !== b) {\n a = a.parentN ode || a.host;\n b = b.parentNode || b.host;\n }\n return a;\n },\n walk: function(n, u) {\n for (var i = 0; n && (i < u); i++) {\n n = n.parentNode || n.host;\n }\n return n;\n },\n depth: function(n) {\n var d = 0;\n while(n) {\n d++;\n n = n. parentNode || n.host;\n }\n return d;\n },\n deepContains: funct ion(a, b) {\n var common = this.LCA(a, b);\n // if a is the common anc estor, it must \"deeply\" contain b\n return common === a;\n },\n ins ideNode: function(node, x, y) {\n var rect = node.getBoundingClientRect();\ n return (rect.left <= x) && (x <= rect.right) && (rect.top <= y) && (y <= rect.bottom);\n }\n };\n scope.targetFinding = target;\n /**\n * Given a n event, finds the \"deepest\" node that could have been the original target bef ore ShadowDOM retargetting\n *\n * @param {Event} Event An event object with clientX and clientY properties\n * @return {Element} The probable event orign inator\n */\n scope.findTarget = target.findTarget.bind(target);\n /**\n * Determines if the \"container\" node deeply contains the \"containee\" node, in cluding situations where the \"containee\" is contained by one or more ShadowDOM \n * roots.\n *\n * @param {Node} container\n * @param {Node} containee\ n * @return {Boolean}\n */\n scope.deepContains = target.deepContains.bind( target);\n\n /**\n * Determines if the x/y position is inside the given node. \n *\n * Example:\n *\n * function upHandler(event) {\n * va r innode = PolymerGestures.insideNode(event.target, event.clientX, event.clientY );\n * if (innode) {\n * // wait for tap?\n * } else { \n * // tap will never happen\n * }\n * }\n *\n * @p aram {Node} node\n * @param {Number} x Screen X position\n * @param {Number} y screen Y position\n * @return {Boolean}\n */\n scope.insideNode = target .insideNode;\n\n})(window.PolymerGestures);\n","/*\n *\n * Copyright (c) 2014 Th e Polymer Project Authors. All rights reserved.\n * This code may only be used u nder the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONT RIBUTORS.txt\n * Code distributed by Google as part of the polymer project is al so\n * subject to an additional IP rights grant found at http://polymer.github.i o/PATENTS.txt\n */\n\n(function() {\n function shadowSelector(v) {\n return 'body /deep/ ' + selector(v);\n }\n function selector(v) {\n return '[touch -action=\"' + v + '\"]';\n }\n function rule(v) {\n return '{ -ms-touch-act ion: ' + v + '; touch-action: ' + v + ';}';\n }\n var attrib2css = [\n 'non e',\n 'auto',\n 'pan-x',\n 'pan-y',\n {\n rule: 'pan-x pan-y',\ n selectors: [\n 'pan-x pan-y',\n 'pan-y pan-x'\n ]\n },\n 'manipulation'\n ];\n var styles = '';\n // only install stylesheet if the browser has touch action support\n var head = document.head;\n var hasT ouchAction = typeof document.head.style.touchAction === 'string';\n // only add shadow selectors if shadowdom is supported\n var hasShadowRoot = !window.Shado wDOMPolyfill && document.head.createShadowRoot;\n\n if (hasTouchAction) {\n attrib2css.forEach(function(r) {\n if (String(r) === r) {\n styles + = selector(r) + rule(r) + '\\n';\n if (hasShadowRoot) {\n styles += shadowSelector(r) + rule(r) + '\\n';\n }\n } else {\n sty les += r.selectors.map(selector) + rule(r.rule) + '\\n';\n if (hasShadowR oot) {\n styles += r.selectors.map(shadowSelector) + rule(r.rule) + '\\ n';\n }\n }\n });\n\n var el = document.createElement('style') ;\n el.textContent = styles;\n document.head.appendChild(el);\n }\n})();\ n","/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\ n * This code may only be used under the BSD style license found at http://polym er.github.io/LICENSE.txt\n * The complete set of authors may be found at http:// polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as p art of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n/**\n * This is the constr uctor for new PointerEvents.\n *\n * New Pointer Events must be given a type, an d an optional dictionary of\n * initialization properties.\n *\n * Due to certai n platform requirements, events returned from the constructor\n * identify as Mo useEvents.\n *\n * @constructor\n * @param {String} inType The type of the event to create.\n * @param {Object} [inDict] An optional dictionary of initial event properties.\n * @return {Event} A new PointerEvent of type `inType` and initial ized with properties from `inDict`.\n */\n(function(scope) {\n\n var MOUSE_PROP S = [\n 'bubbles',\n 'cancelable',\n 'view',\n 'detail',\n 'scree nX',\n 'screenY',\n 'clientX',\n 'clientY',\n 'ctrlKey',\n 'altKe y',\n 'shiftKey',\n 'metaKey',\n 'button',\n 'relatedTarget',\n ' pageX',\n 'pageY'\n ];\n\n var MOUSE_DEFAULTS = [\n false,\n false,\n null,\n null,\n 0,\n 0,\n 0,\n 0,\n false,\n false,\n false,\n false,\n 0,\n null,\n 0,\n 0\n ];\n\n var NOP_FACTOR Y = function(){ return function(){}; };\n\n var eventFactory = {\n // TODO(d freedm): this is overridden by tap recognizer, needs review\n preventTap: NOP _FACTORY,\n makeBaseEvent: function(inType, inDict) {\n var e = document .createEvent('Event');\n e.initEvent(inType, inDict.bubbles || false, inDic t.cancelable || false);\n e.preventTap = eventFactory.preventTap(e);\n return e;\n },\n makeGestureEvent: function(inType, inDict) {\n inDi ct = inDict || Object.create(null);\n\n var e = this.makeBaseEvent(inType, inDict);\n for (var i = 0, keys = Object.keys(inDict), k; i < keys.length; i++) {\n k = keys[i];\n e[k] = inDict[k];\n }\n return e ;\n },\n makePointerEvent: function(inType, inDict) {\n inDict = inDi ct || Object.create(null);\n\n var e = this.makeBaseEvent(inType, inDict);\ n // define inherited MouseEvent properties\n for(var i = 0, p; i < MO USE_PROPS.length; i++) {\n p = MOUSE_PROPS[i];\n e[p] = inDict[p] || MOUSE_DEFAULTS[i];\n }\n e.buttons = inDict.buttons || 0;\n\n // Spec requires that pointers without pressure specified use 0.5 for down\n // state and 0 for up state.\n var pressure = 0;\n if (inDict.pressu re) {\n pressure = inDict.pressure;\n } else {\n pressure = e .buttons ? 0.5 : 0;\n }\n\n // add x/y properties aliased to clientX/Y \n e.x = e.clientX;\n e.y = e.clientY;\n\n // define the properti es of the PointerEvent interface\n e.pointerId = inDict.pointerId || 0;\n e.width = inDict.width || 0;\n e.height = inDict.height || 0;\n e. pressure = pressure;\n e.tiltX = inDict.tiltX || 0;\n e.tiltY = inDict .tiltY || 0;\n e.pointerType = inDict.pointerType || '';\n e.hwTimesta mp = inDict.hwTimestamp || 0;\n e.isPrimary = inDict.isPrimary || false;\n e._source = inDict._source || '';\n return e;\n }\n };\n\n scope. eventFactory = eventFactory;\n})(window.PolymerGestures);\n","/*\n * Copyright ( c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.t xt\n * The complete set of authors may be found at http://polymer.github.io/AUTH ORS.txt\n * The complete set of contributors may be found at http://polymer.gith ub.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer pro ject is also\n * subject to an additional IP rights grant found at http://polyme r.github.io/PATENTS.txt\n */\n\n/**\n * This module implements an map of pointer states\n */\n(function(scope) {\n var USE_MAP = window.Map && window.Map.proto type.forEach;\n var POINTERS_FN = function(){ return this.size; };\n function PointerMap() {\n if (USE_MAP) {\n var m = new Map();\n m.pointers = POINTERS_FN;\n return m;\n } else {\n this.keys = [];\n this. values = [];\n }\n }\n\n PointerMap.prototype = {\n set: function(inId, inEvent) {\n var i = this.keys.indexOf(inId);\n if (i > -1) {\n this.values[i] = inEvent;\n } else {\n this.keys.push(inId);\n this.values.push(inEvent);\n }\n },\n has: function(inId) {\n return this.keys.indexOf(inId) > -1;\n },\n 'delete': function(inId) {\n var i = this.keys.indexOf(inId);\n if (i > -1) {\n this.keys.sp lice(i, 1);\n this.values.splice(i, 1);\n }\n },\n get: functi on(inId) {\n var i = this.keys.indexOf(inId);\n return this.values[i]; \n },\n clear: function() {\n this.keys.length = 0;\n this.value s.length = 0;\n },\n // return value, key, map\n forEach: function(call back, thisArg) {\n this.values.forEach(function(v, i) {\n callback.c all(thisArg, v, this.keys[i], this);\n }, this);\n },\n pointers: fun ction() {\n return this.keys.length;\n }\n };\n\n scope.PointerMap = P ointerMap;\n})(window.PolymerGestures);\n","/*\n * Copyright (c) 2014 The Polyme r Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complet e set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The co mplete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS .txt\n * Code distributed by Google as part of the polymer project is also\n * s ubject to an additional IP rights grant found at http://polymer.github.io/PATENT S.txt\n */\n\n(function(scope) {\n var CLONE_PROPS = [\n // MouseEvent\n 'bubbles',\n 'cancelable',\n 'view',\n 'detail',\n 'screenX',\n ' screenY',\n 'clientX',\n 'clientY',\n 'ctrlKey',\n 'altKey',\n 's hiftKey',\n 'metaKey',\n 'button',\n 'relatedTarget',\n // DOM Level 3\n 'buttons',\n // PointerEvent\n 'pointerId',\n 'width',\n 'he ight',\n 'pressure',\n 'tiltX',\n 'tiltY',\n 'pointerType',\n 'hw Timestamp',\n 'isPrimary',\n // event instance\n 'type',\n 'target', \n 'currentTarget',\n 'which',\n 'pageX',\n 'pageY',\n 'timeStamp ',\n // gesture addons\n 'preventTap',\n 'tapPrevented',\n '_source' \n ];\n\n var CLONE_DEFAULTS = [\n // MouseEvent\n false,\n false,\n null,\n null,\n 0,\n 0,\n 0,\n 0,\n false,\n false,\n false,\n false,\n 0,\n null,\n // DOM Level 3\n 0,\n // Point erEvent\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n '',\n 0,\n fa lse,\n // event instance\n '',\n null,\n null,\n 0,\n 0,\n 0,\n 0,\n function(){},\n false\n ];\n\n var HAS_SVG_INSTANCE = (type of SVGElementInstance !== 'undefined');\n\n var eventFactory = scope.eventFacto ry;\n\n var hasSDPolyfill = scope.hasSDPolyfill;\n var wrap = scope.wrap;\n\n /**\n * This module is for normalizing events. Mouse and Touch events will be \n * collected here, and fire PointerEvents that have the same semantics, no\n * matter the source.\n * Events fired:\n * - pointerdown: a pointing is added\n * - pointerup: a pointer is removed\n * - pointermove: a pointe r is moved\n * - pointerover: a pointer crosses into an element\n * - po interout: a pointer leaves an element\n * - pointercancel: a pointer will no longer generate events\n */\n var dispatcher = {\n pointermap: new scope. PointerMap(),\n eventMap: Object.create(null),\n // Scope objects for nati ve events.\n // This exists for ease of testing.\n eventSources: Object.cr eate(null),\n eventSourceList: [],\n gestures: [],\n gestureQueue: [],\ n /**\n * Add a new event source that will generate pointer events.\n *\n * `inSource` must contain an array of event names named `events`, and\n * functions with the names specified in the `events` array.\n * @param {string} name A name for the event source\n * @param {Object} source A new s ource of platform events.\n */\n registerSource: function(name, source) { \n var s = source;\n var newEvents = s.events;\n if (newEvents) { \n newEvents.forEach(function(e) {\n if (s[e]) {\n th is.eventMap[e] = s[e].bind(s);\n }\n }, this);\n this.eve ntSources[name] = s;\n this.eventSourceList.push(s);\n }\n },\n registerGesture: function(name, source) {\n this.gestures.push(source);\n },\n register: function(element) {\n var l = this.eventSourceList.le ngth;\n for (var i = 0, es; (i < l) && (es = this.eventSourceList[i]); i++) {\n // call eventsource register\n es.register.call(es, element); \n }\n },\n unregister: function(element) {\n var l = this.event SourceList.length;\n for (var i = 0, es; (i < l) && (es = this.eventSourceL ist[i]); i++) {\n // call eventsource register\n es.unregister.cal l(es, element);\n }\n },\n // EVENTS\n down: function(inEvent) {\n this.fireEvent('down', inEvent);\n },\n move: function(inEvent) {\n // pipe move events into gesture queue directly\n inEvent.type = 'move ';\n this.fillGestureQueue(inEvent);\n },\n up: function(inEvent) {\n this.fireEvent('up', inEvent);\n },\n cancel: function(inEvent) {\n inEvent.tapPrevented = true;\n this.fireEvent('up', inEvent);\n },\ n // LISTENER LOGIC\n eventHandler: function(inEvent) {\n // This is used to prevent multiple dispatch of events from\n // platform events. This can happen when two elements in different scopes\n // are set up to create pointer events, which is relevant to Shadow DOM.\n if (inEvent._handledByP G) {\n return;\n }\n var type = inEvent.type;\n var fn = t his.eventMap && this.eventMap[type];\n if (fn) {\n fn(inEvent);\n }\n inEvent._handledByPG = true;\n },\n // set up event listeners\ n listen: function(target, events) {\n for (var i = 0, l = events.length , e; (i < l) && (e = events[i]); i++) {\n this.addEvent(target, e);\n }\n },\n // remove event listeners\n unlisten: function(target, event s) {\n for (var i = 0, l = events.length, e; (i < l) && (e = events[i]); i+ +) {\n this.removeEvent(target, e);\n }\n },\n addEvent: funct ion(target, eventName) {\n // NOTE: Work around for #4, use native event li stener in SD Polyfill\n if (hasSDPolyfill) {\n target.addEventListen er_(eventName, this.boundHandler);\n } else {\n target.addEventListe ner(eventName, this.boundHandler);\n }\n },\n removeEvent: function(t arget, eventName) {\n // NOTE: Work around for #4, use native event listene r in SD Polyfill\n if (hasSDPolyfill) {\n target.removeEventListener _(eventName, this.boundHandler);\n } else {\n target.removeEventList ener(eventName, this.boundHandler);\n }\n },\n // EVENT CREATION AND TRACKING\n /**\n * Creates a new Event of type `inType`, based on the inf ormation in\n * `inEvent`.\n *\n * @param {string} inType A string r epresenting the type of event to create\n * @param {Event} inEvent A platfor m event with a target\n * @return {Event} A PointerEvent of type `inType`\n */\n makeEvent: function(inType, inEvent) {\n var e = eventFactory.m akePointerEvent(inType, inEvent);\n e.preventDefault = inEvent.preventDefau lt;\n e.tapPrevented = inEvent.tapPrevented;\n e._target = e._target | | inEvent.target;\n return e;\n },\n // make and dispatch an event in one call\n fireEvent: function(inType, inEvent) {\n var e = this.makeEv ent(inType, inEvent);\n return this.dispatchEvent(e);\n },\n /**\n * Returns a snapshot of inEvent, with writable properties.\n *\n * @pa ram {Event} inEvent An event that contains properties to copy.\n * @return { Object} An object containing shallow copies of `inEvent`'s\n * properties .\n */\n cloneEvent: function(inEvent) {\n var eventCopy = Object.cr eate(null), p;\n for (var i = 0; i < CLONE_PROPS.length; i++) {\n p = CLONE_PROPS[i];\n eventCopy[p] = inEvent[p] || CLONE_DEFAULTS[i];\n // Work around SVGInstanceElement shadow tree\n // Return the <use> e lement that is represented by the instance for Safari, Chrome, IE.\n // T his is the behavior implemented by Firefox.\n if (p === 'target' || p === 'relatedTarget') {\n if (HAS_SVG_INSTANCE && eventCopy[p] instanceof S VGElementInstance) {\n eventCopy[p] = eventCopy[p].correspondingUseEl ement;\n }\n eventCopy[p] = wrap(eventCopy[p]);\n }\n }\n // keep the semantics of preventDefault\n eventCopy.preventDef ault = inEvent.preventDefault;\n return eventCopy;\n },\n /**\n * Dispatches the event to its target.\n *\n * @param {Event} inEvent The event to be dispatched.\n * @return {Boolean} True if an event handler retur ns true, false otherwise.\n */\n dispatchEvent: function(inEvent) {\n var t = inEvent._target;\n if (t) {\n t.dispatchEvent(inEvent);\n // clone the event for the gesture system to process\n // clone af ter dispatch to pick up gesture prevention code\n var clone = this.cloneE vent(inEvent);\n clone.target = t;\n this.fillGestureQueue(clone); \n }\n },\n gestureTrigger: function() {\n // process the gestur e queue\n for (var i = 0, e; i < this.gestureQueue.length; i++) {\n e = this.gestureQueue[i];\n for (var j = 0, g, fn; j < this.gestures.leng th; j++) {\n g = this.gestures[j];\n fn = g[e.type];\n if (fn) {\n fn.call(g, e);\n }\n }\n }\n this.gestureQueue.length = 0;\n },\n fillGestureQueue: function(ev) {\n // only trigger the gesture queue once\n if (!this.gestureQueue.length) {\n requestAnimationFrame(this.boundGestureTrigger);\n }\n this .gestureQueue.push(ev);\n }\n };\n dispatcher.boundHandler = dispatcher.eve ntHandler.bind(dispatcher);\n dispatcher.boundGestureTrigger = dispatcher.gestu reTrigger.bind(dispatcher);\n scope.dispatcher = dispatcher;\n scope.register = function(root) {\n dispatcher.register(root);\n };\n scope.unregister = d ispatcher.unregister.bind(dispatcher);\n scope.wrap = wrap;\n})(window.PolymerG estures);\n","/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at ht tp://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by G oogle as part of the polymer project is also\n * subject to an additional IP rig hts grant found at http://polymer.github.io/PATENTS.txt\n */\n\n/**\n * This mod ule uses Mutation Observers to dynamically adjust which nodes will\n * generate Pointer Events.\n *\n * All nodes that wish to generate Pointer Events must have the attribute\n * `touch-action` set to `none`.\n */\n(function(scope) {\n var forEach = Array.prototype.forEach.call.bind(Array.prototype.forEach);\n var ma p = Array.prototype.map.call.bind(Array.prototype.map);\n var toArray = Array.p rototype.slice.call.bind(Array.prototype.slice);\n var filter = Array.prototype .filter.call.bind(Array.prototype.filter);\n var MO = window.MutationObserver | | window.WebKitMutationObserver;\n var SELECTOR = '[touch-action]';\n var OBSE RVER_INIT = {\n subtree: true,\n childList: true,\n attributes: true,\n attributeOldValue: true,\n attributeFilter: ['touch-action']\n };\n\n f unction Installer(add, remove, changed, binder) {\n this.addCallback = add.bi nd(binder);\n this.removeCallback = remove.bind(binder);\n this.changedCal lback = changed.bind(binder);\n if (MO) {\n this.observer = new MO(this. mutationWatcher.bind(this));\n }\n }\n\n Installer.prototype = {\n watch Subtree: function(target) {\n // Only watch scopes that can target find, as these are top-level.\n // Otherwise we can see duplicate additions and rem ovals that add noise.\n //\n // TODO(dfreedman): For some instances wi th ShadowDOMPolyfill, we can see\n // a removal without an insertion when a node is redistributed among\n // shadows. Since it all ends up correct in the document, watching only\n // the document will yield the correct mutati ons to watch.\n if (scope.targetFinding.canTarget(target)) {\n this. observer.observe(target, OBSERVER_INIT);\n }\n },\n enableOnSubtree: function(target) {\n this.watchSubtree(target);\n if (target === docum ent && document.readyState !== 'complete') {\n this.installOnLoad();\n } else {\n this.installNewSubtree(target);\n }\n },\n insta llNewSubtree: function(target) {\n forEach(this.findElements(target), this. addElement, this);\n },\n findElements: function(target) {\n if (targ et.querySelectorAll) {\n return target.querySelectorAll(SELECTOR);\n }\n return [];\n },\n removeElement: function(el) {\n this.remo veCallback(el);\n },\n addElement: function(el) {\n this.addCallback( el);\n },\n elementChanged: function(el, oldValue) {\n this.changedCa llback(el, oldValue);\n },\n concatLists: function(accum, list) {\n r eturn accum.concat(toArray(list));\n },\n // register all touch-action = n one nodes on document load\n installOnLoad: function() {\n document.addE ventListener('readystatechange', function() {\n if (document.readyState = == 'complete') {\n this.installNewSubtree(document);\n }\n }.bind(this));\n },\n isElement: function(n) {\n return n.nodeType == = Node.ELEMENT_NODE;\n },\n flattenMutationTree: function(inNodes) {\n // find children with touch-action\n var tree = map(inNodes, this.findEle ments, this);\n // make sure the added nodes are accounted for\n tree. push(filter(inNodes, this.isElement));\n // flatten the list\n return tree.reduce(this.concatLists, []);\n },\n mutationWatcher: function(mutati ons) {\n mutations.forEach(this.mutationHandler, this);\n },\n mutati onHandler: function(m) {\n if (m.type === 'childList') {\n var added = this.flattenMutationTree(m.addedNodes);\n added.forEach(this.addElemen t, this);\n var removed = this.flattenMutationTree(m.removedNodes);\n removed.forEach(this.removeElement, this);\n } else if (m.type === 'att ributes') {\n this.elementChanged(m.target, m.oldValue);\n }\n }\ n };\n\n if (!MO) {\n Installer.prototype.watchSubtree = function(){\n console.warn('PolymerGestures: MutationObservers not found, touch-action will n ot be dynamically detected');\n };\n }\n\n scope.Installer = Installer;\n}) (window.PolymerGestures);\n","/*\n * Copyright (c) 2014 The Polymer Project Auth ors. All rights reserved.\n * This code may only be used under the BSD style lic ense found at http://polymer.github.io/LICENSE.txt\n * The complete set of autho rs may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an a dditional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n (function (scope) {\n var dispatcher = scope.dispatcher;\n var pointermap = di spatcher.pointermap;\n // radius around touchend that swallows mouse events\n var DEDUP_DIST = 25;\n\n var WHICH_TO_BUTTONS = [0, 1, 4, 2];\n\n var HAS_BUTT ONS = false;\n try {\n HAS_BUTTONS = new MouseEvent('test', {buttons: 1}).bu ttons === 1;\n } catch (e) {}\n\n // handler block for native mouse events\n var mouseEvents = {\n POINTER_ID: 1,\n POINTER_TYPE: 'mouse',\n events: [\n 'mousedown',\n 'mousemove',\n 'mouseup'\n ],\n registe r: function(target) {\n if (target !== document) {\n return;\n }\n dispatcher.listen(target, this.events);\n },\n unregister: functi on(target) {\n dispatcher.unlisten(target, this.events);\n },\n lastT ouches: [],\n // collide with the global mouse listener\n isEventSimulated FromTouch: function(inEvent) {\n var lts = this.lastTouches;\n var x = inEvent.clientX, y = inEvent.clientY;\n for (var i = 0, l = lts.length, t; i < l && (t = lts[i]); i++) {\n // simulated mouse events will be swallo wed near a primary touchend\n var dx = Math.abs(x - t.x), dy = Math.abs(y - t.y);\n if (dx <= DEDUP_DIST && dy <= DEDUP_DIST) {\n return true;\n }\n }\n },\n prepareEvent: function(inEvent) {\n var e = dispatcher.cloneEvent(inEvent);\n e.pointerId = this.POINTER_ID;\n e.isPrimary = true;\n e.pointerType = this.POINTER_TYPE;\n e._sou rce = 'mouse';\n if (!HAS_BUTTONS) {\n e.buttons = WHICH_TO_BUTTONS[ e.which] || 0;\n }\n return e;\n },\n mousedown: function(inEven t) {\n if (!this.isEventSimulatedFromTouch(inEvent)) {\n var p = poi ntermap.has(this.POINTER_ID);\n // TODO(dfreedman) workaround for some el ements not sending mouseup\n // http://crbug/149091\n if (p) {\n this.mouseup(inEvent);\n }\n var e = this.prepareEvent(inE vent);\n e.target = scope.wrap(scope.findTarget(inEvent));\n point ermap.set(this.POINTER_ID, e.target);\n dispatcher.down(e);\n }\n },\n mousemove: function(inEvent) {\n if (!this.isEventSimulatedFromTou ch(inEvent)) {\n var e = this.prepareEvent(inEvent);\n e.target = pointermap.get(this.POINTER_ID);\n dispatcher.move(e);\n }\n },\n mouseup: function(inEvent) {\n if (!this.isEventSimulatedFromTouch(inEv ent)) {\n var e = this.prepareEvent(inEvent);\n e.relatedTarget = scope.wrap(scope.findTarget(inEvent));\n e.target = pointermap.get(this.P OINTER_ID);\n dispatcher.up(e);\n this.cleanupMouse();\n }\n },\n cleanupMouse: function() {\n pointermap['delete'](this.POINTER_I D);\n }\n };\n\n scope.mouseEvents = mouseEvents;\n})(window.PolymerGesture s);\n","/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserv ed.\n * This code may only be used under the BSD style license found at http://p olymer.github.io/LICENSE.txt\n * The complete set of authors may be found at htt p://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be fo und at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights gr ant found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n var dispatcher = scope.dispatcher;\n var allShadows = scope.targetFinding.allSh adows.bind(scope.targetFinding);\n var pointermap = dispatcher.pointermap;\n v ar touchMap = Array.prototype.map.call.bind(Array.prototype.map);\n // This sho uld be long enough to ignore compat mouse events made by touch\n var DEDUP_TIME OUT = 2500;\n var CLICK_COUNT_TIMEOUT = 200;\n var HYSTERESIS = 20;\n var ATT RIB = 'touch-action';\n var INSTALLER;\n // maybe one day...\n // var CAN_USE _GLOBAL = ATTRIB in document.head.style;\n var CAN_USE_GLOBAL = false;\n\n // handler block for native touch events\n var touchEvents = {\n events: [\n 'touchstart',\n 'touchmove',\n 'touchend',\n 'touchcancel'\n ],\n register: function(target) {\n if (CAN_USE_GLOBAL) {\n dis patcher.listen(target, this.events);\n } else {\n INSTALLER.enableOn Subtree(target);\n }\n },\n unregister: function(target) {\n if (CAN_USE_GLOBAL) {\n dispatcher.unlisten(target, this.events);\n } e lse {\n // TODO(dfreedman): is it worth it to disconnect the MO?\n } \n },\n elementAdded: function(el) {\n var a = el.getAttribute(ATTRIB );\n var st = this.touchActionToScrollType(a);\n if (st) {\n el ._scrollType = st;\n dispatcher.listen(el, this.events);\n // set touch-action on shadows as well\n allShadows(el).forEach(function(s) {\n s._scrollType = st;\n dispatcher.listen(s, this.events);\n }, this);\n }\n },\n elementRemoved: function(el) {\n el._sc rollType = undefined;\n dispatcher.unlisten(el, this.events);\n // rem ove touch-action from shadow\n allShadows(el).forEach(function(s) {\n s._scrollType = undefined;\n dispatcher.unlisten(s, this.events);\n }, this);\n },\n elementChanged: function(el, oldValue) {\n var a = el.getAttribute(ATTRIB);\n var st = this.touchActionToScrollType(a);\n var oldSt = this.touchActionToScrollType(oldValue);\n // simply update sc rollType if listeners are already established\n if (st && oldSt) {\n el._scrollType = st;\n allShadows(el).forEach(function(s) {\n s ._scrollType = st;\n }, this);\n } else if (oldSt) {\n this.e lementRemoved(el);\n } else if (st) {\n this.elementAdded(el);\n }\n },\n scrollTypes: {\n EMITTER: 'none',\n XSCROLLER: 'pan-x ',\n YSCROLLER: 'pan-y',\n SCROLLER: /^(?:pan-x pan-y)|(?:pan-y pan-x) |auto|manipulation$/\n },\n touchActionToScrollType: function(touchAction) {\n var t = touchAction;\n var st = this.scrollTypes;\n if (t == = 'none') {\n return 'none';\n } else if (t === st.XSCROLLER) {\n return 'X';\n } else if (t === st.YSCROLLER) {\n return 'Y';\n } else if (st.SCROLLER.exec(t)) {\n return 'XY';\n }\n },\n POINTER_TYPE: 'touch',\n firstTouch: null,\n isPrimaryTouch: function(i nTouch) {\n return this.firstTouch === inTouch.identifier;\n },\n set PrimaryTouch: function(inTouch) {\n // set primary touch if there no pointe rs, or the only pointer is the mouse\n if (pointermap.pointers() === 0 || ( pointermap.pointers() === 1 && pointermap.has(1))) {\n this.firstTouch = inTouch.identifier;\n this.firstXY = {X: inTouch.clientX, Y: inTouch.clie ntY};\n this.scrolling = null;\n this.cancelResetClickCount();\n }\n },\n removePrimaryPointer: function(inPointer) {\n if (inPoin ter.isPrimary) {\n this.firstTouch = null;\n this.firstXY = null;\ n this.resetClickCount();\n }\n },\n clickCount: 0,\n reset Id: null,\n resetClickCount: function() {\n var fn = function() {\n this.clickCount = 0;\n this.resetId = null;\n }.bind(this);\n this.resetId = setTimeout(fn, CLICK_COUNT_TIMEOUT);\n },\n cancelResetCl ickCount: function() {\n if (this.resetId) {\n clearTimeout(this.res etId);\n }\n },\n typeToButtons: function(type) {\n var ret = 0; \n if (type === 'touchstart' || type === 'touchmove') {\n ret = 1;\n }\n return ret;\n },\n findTarget: function(touch, id) {\n if (this.currentTouchEvent.type === 'touchstart') {\n if (this.isPrimary Touch(touch)) {\n var fastPath = {\n clientX: touch.clientX, \n clientY: touch.clientY,\n path: this.currentTouchEvent. path,\n target: scope.wrap(this.currentTouchEvent.target)\n };\n return scope.findTarget(fastPath);\n } else {\n re turn scope.findTarget(touch);\n }\n }\n // reuse target we foun d in touchstart\n return pointermap.get(id);\n },\n touchToPointer: f unction(inTouch) {\n var cte = this.currentTouchEvent;\n var e = dispa tcher.cloneEvent(inTouch);\n // Spec specifies that pointerId 1 is reserved for Mouse.\n // Touch identifiers can start at 0.\n // Add 2 to the t ouch identifier for compatibility.\n var id = e.pointerId = inTouch.identif ier + 2;\n e.target = scope.wrap(this.findTarget(inTouch, id));\n e.bu bbles = true;\n e.cancelable = true;\n e.detail = this.clickCount;\n e.buttons = this.typeToButtons(cte.type);\n e.width = inTouch.webkitRad iusX || inTouch.radiusX || 0;\n e.height = inTouch.webkitRadiusY || inTouch .radiusY || 0;\n e.pressure = inTouch.webkitForce || inTouch.force || 0.5;\ n e.isPrimary = this.isPrimaryTouch(inTouch);\n e.pointerType = this.P OINTER_TYPE;\n e._source = 'touch';\n // forward touch preventDefaults \n var self = this;\n e.preventDefault = function() {\n self.sc rolling = false;\n self.firstXY = null;\n cte.preventDefault();\n };\n return e;\n },\n processTouches: function(inEvent, inFuncti on) {\n var tl = inEvent.changedTouches;\n this.currentTouchEvent = in Event;\n for (var i = 0, t, p; i < tl.length; i++) {\n t = tl[i];\n p = this.touchToPointer(t);\n if (inEvent.type === 'touchstart') { \n pointermap.set(p.pointerId, p.target);\n }\n if (point ermap.has(p.pointerId)) {\n inFunction.call(this, p);\n }\n if (inEvent.type === 'touchend' || inEvent._cancel) {\n this.cleanUp Pointer(p);\n }\n }\n },\n // For single axis scrollers, deter mines whether the element should emit\n // pointer events or behave as a scro ller\n shouldScroll: function(inEvent) {\n if (this.firstXY) {\n var ret;\n var scrollAxis = scope.targetFinding.findScrollAxis(inEvent);\ n if (scrollAxis === 'none') {\n // this element is a touch-acti on: none, should never scroll\n ret = false;\n } else if (scroll Axis === 'XY') {\n // this element should always scroll\n ret = true;\n } else {\n var t = inEvent.changedTouches[0];\n // check the intended scroll axis, and other axis\n var a = scrollAx is;\n var oa = scrollAxis === 'Y' ? 'X' : 'Y';\n var da = Math .abs(t['client' + a] - this.firstXY[a]);\n var doa = Math.abs(t['client ' + oa] - this.firstXY[oa]);\n // if delta in the scroll axis > delta o ther axis, scroll instead of\n // making events\n ret = da >= doa;\n }\n return ret;\n }\n },\n findTouch: function(i nTL, inId) {\n for (var i = 0, l = inTL.length, t; i < l && (t = inTL[i]); i++) {\n if (t.identifier === inId) {\n return true;\n }\ n }\n },\n // In some instances, a touchstart can happen without a to uchend. This\n // leaves the pointermap in a broken state.\n // Therefore, on every touchstart, we remove the touches that did not fire a\n // touchend event.\n // To keep state globally consistent, we fire a\n // pointercanc el for this \"abandoned\" touch\n vacuumTouches: function(inEvent) {\n v ar tl = inEvent.touches;\n // pointermap.pointers() should be < tl.length h ere, as the touchstart has not\n // been processed yet.\n if (pointerm ap.pointers() >= tl.length) {\n var d = [];\n pointermap.forEach(f unction(value, key) {\n // Never remove pointerId == 1, which is mouse. \n // Touch identifiers are 2 smaller than their pointerId, which is th e\n // index in pointermap.\n if (key !== 1 && !this.findTouch (tl, key - 2)) {\n var p = value;\n d.push(p);\n }\n }, this);\n d.forEach(function(p) {\n this.cancel(p); \n pointermap.delete(p.pointerId);\n });\n }\n },\n t ouchstart: function(inEvent) {\n this.vacuumTouches(inEvent);\n this.s etPrimaryTouch(inEvent.changedTouches[0]);\n this.dedupSynthMouse(inEvent); \n if (!this.scrolling) {\n this.clickCount++;\n this.process Touches(inEvent, this.down);\n }\n },\n down: function(inPointer) {\n dispatcher.down(inPointer);\n },\n touchmove: function(inEvent) {\n if (CAN_USE_GLOBAL) {\n this.processTouches(inEvent, this.move);\n } else {\n if (!this.scrolling) {\n if (this.scrolling === n ull && this.shouldScroll(inEvent)) {\n this.scrolling = true;\n } else {\n this.scrolling = false;\n inEvent.preventDe fault();\n this.processTouches(inEvent, this.move);\n }\n } else if (this.firstXY) {\n var t = inEvent.changedTouches[0];\n var dx = t.clientX - this.firstXY.X;\n var dy = t.clientY - th is.firstXY.Y;\n var dd = Math.sqrt(dx * dx + dy * dy);\n if (d d >= HYSTERESIS) {\n this.touchcancel(inEvent);\n this.scr olling = true;\n this.firstXY = null;\n }\n }\n }\n },\n move: function(inPointer) {\n dispatcher.move(inPointer);\n },\n touchend: function(inEvent) {\n this.dedupSynthMouse(inEvent);\n this.processTouches(inEvent, this.up);\n },\n up: function(inPointer ) {\n inPointer.relatedTarget = scope.wrap(scope.findTarget(inPointer));\n dispatcher.up(inPointer);\n },\n cancel: function(inPointer) {\n dispatcher.cancel(inPointer);\n },\n touchcancel: function(inEvent) {\n inEvent._cancel = true;\n this.processTouches(inEvent, this.cancel);\n },\n cleanUpPointer: function(inPointer) {\n pointermap['delete'](inP ointer.pointerId);\n this.removePrimaryPointer(inPointer);\n },\n // prevent synth mouse events from creating pointer events\n dedupSynthMouse: fu nction(inEvent) {\n var lts = scope.mouseEvents.lastTouches;\n var t = inEvent.changedTouches[0];\n // only the primary finger will synth mouse e vents\n if (this.isPrimaryTouch(t)) {\n // remember x/y of last touc h\n var lt = {x: t.clientX, y: t.clientY};\n lts.push(lt);\n var fn = (function(lts, lt){\n var i = lts.indexOf(lt);\n if (i > -1) {\n lts.splice(i, 1);\n }\n }).bind(null, l ts, lt);\n setTimeout(fn, DEDUP_TIMEOUT);\n }\n }\n };\n\n if ( !CAN_USE_GLOBAL) {\n INSTALLER = new scope.Installer(touchEvents.elementAdded , touchEvents.elementRemoved, touchEvents.elementChanged, touchEvents);\n }\n\n scope.touchEvents = touchEvents;\n})(window.PolymerGestures);\n","/*\n * Copyr ight (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code ma y only be used under the BSD style license found at http://polymer.github.io/LIC ENSE.txt\n * The complete set of authors may be found at http://polymer.github.i o/AUTHORS.txt\n * The complete set of contributors may be found at http://polyme r.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polym er project is also\n * subject to an additional IP rights grant found at http:// polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n var dispatcher = sco pe.dispatcher;\n var pointermap = dispatcher.pointermap;\n var HAS_BITMAP_TYPE = window.MSPointerEvent && typeof window.MSPointerEvent.MSPOINTER_TYPE_MOUSE == = 'number';\n var msEvents = {\n events: [\n 'MSPointerDown',\n 'M SPointerMove',\n 'MSPointerUp',\n 'MSPointerCancel',\n ],\n regi ster: function(target) {\n if (target !== document) {\n return;\n }\n dispatcher.listen(target, this.events);\n },\n unregister: fun ction(target) {\n dispatcher.unlisten(target, this.events);\n },\n PO INTER_TYPES: [\n '',\n 'unavailable',\n 'touch',\n 'pen',\n 'mouse'\n ],\n prepareEvent: function(inEvent) {\n var e = inEve nt;\n e = dispatcher.cloneEvent(inEvent);\n if (HAS_BITMAP_TYPE) {\n e.pointerType = this.POINTER_TYPES[inEvent.pointerType];\n }\n e ._source = 'ms';\n return e;\n },\n cleanup: function(id) {\n po intermap['delete'](id);\n },\n MSPointerDown: function(inEvent) {\n v ar e = this.prepareEvent(inEvent);\n e.target = scope.wrap(scope.findTarget (inEvent));\n pointermap.set(inEvent.pointerId, e.target);\n dispatche r.down(e);\n },\n MSPointerMove: function(inEvent) {\n var e = this.p repareEvent(inEvent);\n e.target = pointermap.get(e.pointerId);\n disp atcher.move(e);\n },\n MSPointerUp: function(inEvent) {\n var e = thi s.prepareEvent(inEvent);\n e.relatedTarget = scope.wrap(scope.findTarget(in Event));\n e.target = pointermap.get(e.pointerId);\n dispatcher.up(e); \n this.cleanup(inEvent.pointerId);\n },\n MSPointerCancel: function( inEvent) {\n var e = this.prepareEvent(inEvent);\n e.relatedTarget = s cope.wrap(scope.findTarget(inEvent));\n e.target = pointermap.get(e.pointer Id);\n dispatcher.cancel(e);\n this.cleanup(inEvent.pointerId);\n } \n };\n\n scope.msEvents = msEvents;\n})(window.PolymerGestures);\n","/*\n * C opyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This cod e may only be used under the BSD style license found at http://polymer.github.io /LICENSE.txt\n * The complete set of authors may be found at http://polymer.gith ub.io/AUTHORS.txt\n * The complete set of contributors may be found at http://po lymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the p olymer project is also\n * subject to an additional IP rights grant found at htt p://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n var dispatcher = scope.dispatcher;\n var pointermap = dispatcher.pointermap;\n var pointerEven ts = {\n events: [\n 'pointerdown',\n 'pointermove',\n 'pointe rup',\n 'pointercancel'\n ],\n prepareEvent: function(inEvent) {\n var e = dispatcher.cloneEvent(inEvent);\n e._source = 'pointer';\n return e;\n },\n register: function(target) {\n if (target !== docume nt) {\n return;\n }\n dispatcher.listen(target, this.events);\n },\n unregister: function(target) {\n dispatcher.unlisten(target, th is.events);\n },\n cleanup: function(id) {\n pointermap['delete'](id) ;\n },\n pointerdown: function(inEvent) {\n var e = this.prepareEvent (inEvent);\n e.target = scope.wrap(scope.findTarget(inEvent));\n point ermap.set(e.pointerId, e.target);\n dispatcher.down(e);\n },\n pointe rmove: function(inEvent) {\n var e = this.prepareEvent(inEvent);\n e.t arget = pointermap.get(e.pointerId);\n dispatcher.move(e);\n },\n poi nterup: function(inEvent) {\n var e = this.prepareEvent(inEvent);\n e. relatedTarget = scope.wrap(scope.findTarget(inEvent));\n e.target = pointer map.get(e.pointerId);\n dispatcher.up(e);\n this.cleanup(inEvent.point erId);\n },\n pointercancel: function(inEvent) {\n var e = this.prepa reEvent(inEvent);\n e.relatedTarget = scope.wrap(scope.findTarget(inEvent)) ;\n e.target = pointermap.get(e.pointerId);\n dispatcher.cancel(e);\n this.cleanup(inEvent.pointerId);\n }\n };\n\n scope.pointerEvents = po interEvents;\n})(window.PolymerGestures);\n","/*\n * Copyright (c) 2014 The Poly mer Project Authors. All rights reserved.\n * This code may only be used under t he BSD style license found at http://polymer.github.io/LICENSE.txt\n * The compl ete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTO RS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATE NTS.txt\n */\n\n/**\n * This module contains the handlers for native platform ev ents.\n * From here, the dispatcher is called to create unified pointer events.\ n * Included are touch events (v1), mouse events, and MSPointerEvents.\n */\n(fu nction(scope) {\n var dispatcher = scope.dispatcher;\n\n if (window.PointerEve nt) {\n dispatcher.registerSource('pointer', scope.pointerEvents);\n } else if (window.navigator.msPointerEnabled) {\n dispatcher.registerSource('ms', sc ope.msEvents);\n } else {\n dispatcher.registerSource('mouse', scope.mouseEv ents);\n if (window.ontouchstart !== undefined) {\n dispatcher.registerS ource('touch', scope.touchEvents);\n }\n }\n\n dispatcher.register(document );\n})(window.PolymerGestures);\n","/*\n * Copyright (c) 2014 The Polymer Projec t Authors. All rights reserved.\n * This code may only be used under the BSD sty le license found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete s et of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject t o an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n/**\n * This event denotes the beginning of a series of tracking events.\n *\n * @module PointerGestures\n * @submodule Events\n * @class trackstart\n */\ n/**\n * Pixels moved in the x direction since trackstart.\n * @type Number\n * @property dx\n */\n/**\n * Pixes moved in the y direction since trackstart.\n * @type Number\n * @property dy\n */\n/**\n * Pixels moved in the x direction sinc e the last track.\n * @type Number\n * @property ddx\n */\n/**\n * Pixles moved in the y direction since the last track.\n * @type Number\n * @property ddy\n */ \n/**\n * The clientX position of the track gesture.\n * @type Number\n * @prope rty clientX\n */\n/**\n * The clientY position of the track gesture.\n * @type N umber\n * @property clientY\n */\n/**\n * The pageX position of the track gestur e.\n * @type Number\n * @property pageX\n */\n/**\n * The pageY position of the track gesture.\n * @type Number\n * @property pageY\n */\n/**\n * The screenX po sition of the track gesture.\n * @type Number\n * @property screenX\n */\n/**\n * The screenY position of the track gesture.\n * @type Number\n * @property scre enY\n */\n/**\n * The last x axis direction of the pointer.\n * @type Number\n * @property xDirection\n */\n/**\n * The last y axis direction of the pointer.\n * @type Number\n * @property yDirection\n */\n/**\n * A shared object between al l tracking events.\n * @type Object\n * @property trackInfo\n */\n/**\n * The el ement currently under the pointer.\n * @type Element\n * @property relatedTarget \n */\n/**\n * The type of pointer that make the track gesture.\n * @type String \n * @property pointerType\n */\n/**\n *\n * This event fires for all pointer mo vement being tracked.\n *\n * @class track\n * @extends trackstart\n */\n/**\n * This event fires when the pointer is no longer being tracked.\n *\n * @class tr ackend\n * @extends trackstart\n */\n\n (function(scope) {\n var dispatcher = scope.dispatcher;\n var eventFactory = scope.eventFactory;\n var pointermap = new scope.PointerMap();\n var track = {\n events: [\n 'down',\n 'move',\n 'up',\n ],\n WIGGLE_THRESHOLD: 4,\n clampDir: fu nction(inDelta) {\n return inDelta > 0 ? 1 : -1;\n },\n calcPositi onDelta: function(inA, inB) {\n var x = 0, y = 0;\n if (inA && inB) {\n x = inB.pageX - inA.pageX;\n y = inB.pageY - inA.pageY;\n }\n return {x: x, y: y};\n },\n fireTrack: function(inType, in Event, inTrackingData) {\n var t = inTrackingData;\n var d = this.ca lcPositionDelta(t.downEvent, inEvent);\n var dd = this.calcPositionDelta(t .lastMoveEvent, inEvent);\n if (dd.x) {\n t.xDirection = this.clam pDir(dd.x);\n }\n if (dd.y) {\n t.yDirection = this.clampDir (dd.y);\n }\n var e = eventFactory.makeGestureEvent(inType, {\n bubbles: true,\n cancelable: true,\n dx: d.x,\n dy: d.y,\n ddx: dd.x,\n ddy: dd.y,\n x: inEvent.x,\n y: inEvent.y,\n clientX: inEvent.clientX,\n clientY: inEvent.cl ientY,\n pageX: inEvent.pageX,\n pageY: inEvent.pageY,\n screenX: inEvent.screenX,\n screenY: inEvent.screenY,\n xDirect ion: t.xDirection,\n yDirection: t.yDirection,\n trackInfo: t.tr ackInfo,\n relatedTarget: inEvent.relatedTarget,\n pointerType: inEvent.pointerType,\n pointerId: inEvent.pointerId,\n _source: 'track'\n });\n t.downTarget.dispatchEvent(e);\n },\n down: function(inEvent) {\n if (inEvent.isPrimary && (inEvent.pointerType === 'm ouse' ? inEvent.buttons === 1 : true)) {\n var p = {\n downEve nt: inEvent,\n downTarget: inEvent.target,\n trackInfo: {},\ n lastMoveEvent: null,\n xDirection: 0,\n yDirecti on: 0,\n tracking: false\n };\n pointermap.set(inEvent .pointerId, p);\n }\n },\n move: function(inEvent) {\n var p = pointermap.get(inEvent.pointerId);\n if (p) {\n if (!p.tracking ) {\n var d = this.calcPositionDelta(p.downEvent, inEvent);\n var move = d.x * d.x + d.y * d.y;\n // start tracking only if finger moves more than WIGGLE_THRESHOLD\n if (move > this.WIGGLE_THRESHOLD) {\n p.tracking = true;\n this.fireTrack('trackstart', p. downEvent, p);\n this.fireTrack('track', inEvent, p);\n }\ n } else {\n this.fireTrack('track', inEvent, p);\n }\ n p.lastMoveEvent = inEvent;\n }\n },\n up: function(inEve nt) {\n var p = pointermap.get(inEvent.pointerId);\n if (p) {\n if (p.tracking) {\n this.fireTrack('trackend', inEvent, p);\n }\n pointermap.delete(inEvent.pointerId);\n }\n }\n };\n dispatcher.registerGesture('track', track);\n })(window.PolymerGestures);\n", "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer. github.io/LICENSE.txt\n * The complete set of authors may be found at http://pol ymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant fou nd at http://polymer.github.io/PATENTS.txt\n */\n\n/**\n * This event is fired w hen a pointer is held down for 200ms.\n *\n * @module PointerGestures\n * @submo dule Events\n * @class hold\n */\n/**\n * Type of pointer that made the holding event.\n * @type String\n * @property pointerType\n */\n/**\n * Screen X axis po sition of the held pointer\n * @type Number\n * @property clientX\n */\n/**\n * Screen Y axis position of the held pointer\n * @type Number\n * @property client Y\n */\n/**\n * Type of pointer that made the holding event.\n * @type String\n * @property pointerType\n */\n/**\n * This event is fired every 200ms while a po inter is held down.\n *\n * @class holdpulse\n * @extends hold\n */\n/**\n * Mil liseconds pointer has been held down.\n * @type Number\n * @property holdTime\n */\n/**\n * This event is fired when a held pointer is released or moved.\n *\n * @class release\n */\n\n(function(scope) {\n var dispatcher = scope.dispatcher ;\n var eventFactory = scope.eventFactory;\n var hold = {\n // wait at leas t HOLD_DELAY ms between hold and pulse events\n HOLD_DELAY: 200,\n // poin ter can move WIGGLE_THRESHOLD pixels before not counting as a hold\n WIGGLE_T HRESHOLD: 16,\n events: [\n 'down',\n 'move',\n 'up',\n ],\ n heldPointer: null,\n holdJob: null,\n pulse: function() {\n var hold = Date.now() - this.heldPointer.timeStamp;\n var type = this.held ? 'h oldpulse' : 'hold';\n this.fireHold(type, hold);\n this.held = true;\n },\n cancel: function() {\n clearInterval(this.holdJob);\n if ( this.held) {\n this.fireHold('release');\n }\n this.held = fals e;\n this.heldPointer = null;\n this.target = null;\n this.holdJo b = null;\n },\n down: function(inEvent) {\n if (inEvent.isPrimary && !this.heldPointer) {\n this.heldPointer = inEvent;\n this.target = inEvent.target;\n this.holdJob = setInterval(this.pulse.bind(this), thi s.HOLD_DELAY);\n }\n },\n up: function(inEvent) {\n if (this.hel dPointer && this.heldPointer.pointerId === inEvent.pointerId) {\n this.ca ncel();\n }\n },\n move: function(inEvent) {\n if (this.heldPoin ter && this.heldPointer.pointerId === inEvent.pointerId) {\n var x = inEv ent.clientX - this.heldPointer.clientX;\n var y = inEvent.clientY - this. heldPointer.clientY;\n if ((x * x + y * y) > this.WIGGLE_THRESHOLD) {\n this.cancel();\n }\n }\n },\n fireHold: function(inTyp e, inHoldTime) {\n var p = {\n bubbles: true,\n cancelable: t rue,\n pointerType: this.heldPointer.pointerType,\n pointerId: thi s.heldPointer.pointerId,\n x: this.heldPointer.clientX,\n y: this. heldPointer.clientY,\n _source: 'hold'\n };\n if (inHoldTime) { \n p.holdTime = inHoldTime;\n }\n var e = eventFactory.makeGest ureEvent(inType, p);\n this.target.dispatchEvent(e);\n }\n };\n dispat cher.registerGesture('hold', hold);\n})(window.PolymerGestures);\n","/*\n * Copy right (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code m ay only be used under the BSD style license found at http://polymer.github.io/LI CENSE.txt\n * The complete set of authors may be found at http://polymer.github. io/AUTHORS.txt\n * The complete set of contributors may be found at http://polym er.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the poly mer project is also\n * subject to an additional IP rights grant found at http:/ /polymer.github.io/PATENTS.txt\n */\n\n/**\n * This event is fired when a pointe r quickly goes down and up, and is used to\n * denote activation.\n *\n * Any ge sture event can prevent the tap event from being created by calling\n * `event.p reventTap`.\n *\n * Any pointer event can prevent the tap by setting the `tapPre vented` property\n * on itself.\n *\n * @module PointerGestures\n * @submodule E vents\n * @class tap\n */\n/**\n * X axis position of the tap.\n * @property x\n * @type Number\n */\n/**\n * Y axis position of the tap.\n * @property y\n * @t ype Number\n */\n/**\n * Type of the pointer that made the tap.\n * @property po interType\n * @type String\n */\n(function(scope) {\n var dispatcher = scope.di spatcher;\n var eventFactory = scope.eventFactory;\n var pointermap = new scop e.PointerMap();\n var tap = {\n events: [\n 'down',\n 'up'\n ], \n down: function(inEvent) {\n if (inEvent.isPrimary && !inEvent.tapPrev ented) {\n pointermap.set(inEvent.pointerId, {\n target: inEvent .target,\n buttons: inEvent.buttons,\n x: inEvent.clientX,\n y: inEvent.clientY\n });\n }\n },\n shouldTap: functio n(e, downState) {\n if (e.pointerType === 'mouse') {\n // only allow left click to tap for mouse\n return downState.buttons === 1;\n }\n return !e.tapPrevented;\n },\n up: function(inEvent) {\n var st art = pointermap.get(inEvent.pointerId);\n if (start && this.shouldTap(inEv ent, start)) {\n // up.relatedTarget is target currently under finger\n var t = scope.targetFinding.LCA(start.target, inEvent.relatedTarget);\n if (t) {\n var e = eventFactory.makeGestureEvent('tap', {\n bubbles: true,\n cancelable: true,\n x: inEvent.clien tX,\n y: inEvent.clientY,\n detail: inEvent.detail,\n pointerType: inEvent.pointerType,\n pointerId: inEvent.pointer Id,\n altKey: inEvent.altKey,\n ctrlKey: inEvent.ctrlKey,\ n metaKey: inEvent.metaKey,\n shiftKey: inEvent.shiftKey,\ n _source: 'tap'\n });\n t.dispatchEvent(e);\n }\n }\n pointermap.delete(inEvent.pointerId);\n }\n };\n // pa tch eventFactory to remove id from tap's pointermap for preventTap calls\n even tFactory.preventTap = function(e) {\n return function() {\n e.tapPrevent ed = true;\n pointermap.delete(e.pointerId);\n };\n };\n dispatcher.re gisterGesture('tap', tap);\n})(window.PolymerGestures);\n","/*\n Copyright (C) 2013 Ariya Hidayat <ariya.hidayat@gmail.com>\n Copyright (C) 2013 Thaddee Tyl < thaddee.tyl@gmail.com>\n Copyright (C) 2012 Ariya Hidayat <ariya.hidayat@gmail. com>\n Copyright (C) 2012 Mathias Bynens <mathias@qiwi.be>\n Copyright (C) 201 2 Joost-Wim Boekesteijn <joost-wim@boekesteijn.nl>\n Copyright (C) 2012 Kris Ko wal <kris.kowal@cixar.com>\n Copyright (C) 2012 Yusuke Suzuki <utatane.tea@gmai l.com>\n Copyright (C) 2012 Arpad Borsos <arpad.borsos@googlemail.com>\n Copyr ight (C) 2011 Ariya Hidayat <ariya.hidayat@gmail.com>\n\n Redistribution and us e in source and binary forms, with or without\n modification, are permitted pro vided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n * Redistributions in binary form must reproduce t he above copyright\n notice, this list of conditions and the following disc laimer in the\n documentation and/or other materials provided with the dist ribution.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTO RS \"AS IS\"\n AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITE D TO, THE\n IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR AN Y\n DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\ n (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\ n LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n(function ( global) {\n 'use strict';\n\n var Token,\n TokenName,\n Synt ax,\n Messages,\n source,\n index,\n length,\n delegate,\n lookahead,\n state;\n\n Token = {\n Boolea nLiteral: 1,\n EOF: 2,\n Identifier: 3,\n Keyword: 4,\n NullLiteral: 5,\n NumericLiteral: 6,\n Punctuator: 7,\n StringLiteral: 8\n };\n\n TokenName = {};\n TokenName[Token.BooleanLit eral] = 'Boolean';\n TokenName[Token.EOF] = '<end>';\n TokenName[Token.Ide ntifier] = 'Identifier';\n TokenName[Token.Keyword] = 'Keyword';\n TokenNa me[Token.NullLiteral] = 'Null';\n TokenName[Token.NumericLiteral] = 'Numeric' ;\n TokenName[Token.Punctuator] = 'Punctuator';\n TokenName[Token.StringLi teral] = 'String';\n\n Syntax = {\n ArrayExpression: 'ArrayExpression' ,\n BinaryExpression: 'BinaryExpression',\n CallExpression: 'CallE xpression',\n ConditionalExpression: 'ConditionalExpression',\n Em ptyStatement: 'EmptyStatement',\n ExpressionStatement: 'ExpressionStateme nt',\n Identifier: 'Identifier',\n Literal: 'Literal',\n La beledStatement: 'LabeledStatement',\n LogicalExpression: 'LogicalExpressi on',\n MemberExpression: 'MemberExpression',\n ObjectExpression: ' ObjectExpression',\n Program: 'Program',\n Property: 'Property',\n ThisExpression: 'ThisExpression',\n UnaryExpression: 'UnaryExpres sion'\n };\n\n // Error messages should be identical to V8.\n Messages = {\n UnexpectedToken: 'Unexpected token %0',\n UnknownLabel: 'Un defined label \\'%0\\'',\n Redeclaration: '%0 \\'%1\\' has already been d eclared'\n };\n\n // Ensure the condition is true, otherwise throw an erro r.\n // This is only to have a better contract semantic, i.e. another safety net\n // to catch a logic error. The condition shall be fulfilled in normal c ase.\n // Do NOT use this to enforce a certain condition on any user input.\n \n function assert(condition, message) {\n if (!condition) {\n throw new Error('ASSERT: ' + message);\n }\n }\n\n function isD ecimalDigit(ch) {\n return (ch >= 48 && ch <= 57); // 0..9\n }\n\n\n // 7.2 White Space\n\n function isWhiteSpace(ch) {\n return (ch == = 32) || // space\n (ch === 9) || // tab\n (ch === 0 xB) ||\n (ch === 0xC) ||\n (ch === 0xA0) ||\n ( ch >= 0x1680 && '\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006 \\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\uFEFF'.indexOf(String.fromCha rCode(ch)) > 0);\n }\n\n // 7.3 Line Terminators\n\n function isLineTer minator(ch) {\n return (ch === 10) || (ch === 13) || (ch === 0x2028) || ( ch === 0x2029);\n }\n\n // 7.6 Identifier Names and Identifiers\n\n fun ction isIdentifierStart(ch) {\n return (ch === 36) || (ch === 95) || // $ (dollar) and _ (underscore)\n (ch >= 65 && ch <= 90) || // A..Z\n (ch >= 97 && ch <= 122); // a..z\n }\n\n functi on isIdentifierPart(ch) {\n return (ch === 36) || (ch === 95) || // $ (d ollar) and _ (underscore)\n (ch >= 65 && ch <= 90) || // A..Z \n (ch >= 97 && ch <= 122) || // a..z\n (ch >= 48 & & ch <= 57); // 0..9\n }\n\n // 7.6.1.1 Keywords\n\n function isKeyword(id) {\n return (id === 'this')\n }\n\n // 7.4 Comments\n \n function skipWhitespace() {\n while (index < length && isWhiteSpace (source.charCodeAt(index))) {\n ++index;\n }\n }\n\n func tion getIdentifier() {\n var start, ch;\n\n start = index++;\n while (index < length) {\n ch = source.charCodeAt(index);\n if (isIdentifierPart(ch)) {\n ++index;\n } else {\n break;\n }\n }\n\n return source.sli ce(start, index);\n }\n\n function scanIdentifier() {\n var start, id, type;\n\n start = index;\n\n id = getIdentifier();\n\n // There is no keyword or literal with only one character.\n // Thus, it must be an identifier.\n if (id.length === 1) {\n type = Token .Identifier;\n } else if (isKeyword(id)) {\n type = Token.Keyw ord;\n } else if (id === 'null') {\n type = Token.NullLiteral; \n } else if (id === 'true' || id === 'false') {\n type = Toke n.BooleanLiteral;\n } else {\n type = Token.Identifier;\n }\n\n return {\n type: type,\n value: id,\n range: [start, index]\n };\n }\n\n\n // 7.7 Punctuators\n\n function scanPunctuator() {\n var start = index,\n code = s ource.charCodeAt(index),\n code2,\n ch1 = source[index],\n ch2;\n\n switch (code) {\n\n // Check for most common single-character punctuators.\n case 46: // . dot\n case 40: / / ( open bracket\n case 41: // ) close bracket\n case 59: // ; semicolon\n case 44: // , comma\n case 123: // { open curly br ace\n case 125: // } close curly brace\n case 91: // [\n case 93: // ]\n case 58: // :\n case 63: // ?\n ++index;\n return {\n type: Token.Punctuator,\n value: String.fromCharCode(code),\n range: [start, index ]\n };\n\n default:\n code2 = source.charCodeAt(ind ex + 1);\n\n // '=' (char #61) marks an assignment or comparison oper ator.\n if (code2 === 61) {\n switch (code) {\n case 37: // %\n case 38: // &\n case 42 : // *:\n case 43: // +\n case 45: // -\n case 47: // /\n case 60: // <\n case 6 2: // >\n case 124: // |\n index += 2;\n return {\n type: Token.Punctuator,\n value: String.fromCharCode(code) + String.fromCharCode(code2), \n range: [start, index]\n };\n\n case 33: // !\n case 61: // =\n ind ex += 2;\n\n // !== and ===\n if (source.c harCodeAt(index) === 61) {\n ++index;\n }\n return {\n type: Token.Punctuato r,\n value: source.slice(start, index),\n range: [start, index]\n };\n default:\ n break;\n }\n }\n break ;\n }\n\n // Peek more characters.\n\n ch2 = source[index + 1];\n\n // Other 2-character punctuators: && ||\n\n if (ch1 === c h2 && ('&|'.indexOf(ch1) >= 0)) {\n index += 2;\n return { \n type: Token.Punctuator,\n value: ch1 + ch2,\n range: [start, index]\n };\n }\n\n if ('< >=!+-*%&|^/'.indexOf(ch1) >= 0) {\n ++index;\n return {\n type: Token.Punctuator,\n value: ch1,\n range: [start, index]\n };\n }\n\n throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n }\n\n // 7.8.3 Numeric Literals\n function scanNumericLiteral() {\n var number, start, ch;\n\n ch = source[index];\n assert(isDecimalDigit(ch.charCodeAt(0)) || (ch === '. '),\n 'Numeric literal must start with a decimal digit or a decimal p oint');\n\n start = index;\n number = '';\n if (ch !== '.') {\n number = source[index++];\n ch = source[index];\n\n // Hex number starts with '0x'.\n // Octal number starts wi th '0'.\n if (number === '0') {\n // decimal number st arts with '0' such as '09' is illegal.\n if (ch && isDecimalDigit (ch.charCodeAt(0))) {\n throwError({}, Messages.UnexpectedTok en, 'ILLEGAL');\n }\n }\n\n while (isDecima lDigit(source.charCodeAt(index))) {\n number += source[index++];\ n }\n ch = source[index];\n }\n\n if (ch === '.') {\n number += source[index++];\n while (isDecimalDig it(source.charCodeAt(index))) {\n number += source[index++];\n }\n ch = source[index];\n }\n\n if (ch === 'e' || ch === 'E') {\n number += source[index++];\n\n ch = so urce[index];\n if (ch === '+' || ch === '-') {\n numbe r += source[index++];\n }\n if (isDecimalDigit(source.char CodeAt(index))) {\n while (isDecimalDigit(source.charCodeAt(index ))) {\n number += source[index++];\n }\n } else {\n throwError({}, Messages.UnexpectedToken, 'ILLEGA L');\n }\n }\n\n if (isIdentifierStart(source.charCodeA t(index))) {\n throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n }\n\n return {\n type: Token.NumericLiteral,\n value: parseFloat(number),\n range: [start, index]\n };\n }\n\n // 7.8.4 String Literals\n\n function scanStringLiteral() {\n var str = '', quote, start, ch, octal = false;\n\n quote = source[ind ex];\n assert((quote === '\\'' || quote === '\"'),\n 'String l iteral must starts with a quote');\n\n start = index;\n ++index;\n \n while (index < length) {\n ch = source[index++];\n\n if (ch === quote) {\n quote = '';\n break;\n } else if (ch === '\\\\') {\n ch = source[index++];\n if (!ch || !isLineTerminator(ch.charCodeAt(0))) {\n switch (ch) {\n case 'n':\n str += '\\n';\n break;\n case 'r':\n str += '\\r';\n break;\n case 't':\n str += '\\t';\n b reak;\n case 'b':\n str += '\\b';\n break;\n case 'f':\n str += '\\f';\n break;\n case 'v': \n str += '\\x0B';\n break;\n\n default:\n str += ch;\n break;\n }\n } else {\n if (ch === '\\r' && source[index] === '\\n') {\n ++i ndex;\n }\n }\n } else if (isLineTe rminator(ch.charCodeAt(0))) {\n break;\n } else {\n str += ch;\n }\n }\n\n if (quote !== '') { \n throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n }\n\ n return {\n type: Token.StringLiteral,\n value: st r,\n octal: octal,\n range: [start, index]\n };\n }\n\n function isIdentifierName(token) {\n return token.type === Tok en.Identifier ||\n token.type === Token.Keyword ||\n token .type === Token.BooleanLiteral ||\n token.type === Token.NullLiteral; \n }\n\n function advance() {\n var ch;\n\n skipWhitespace() ;\n\n if (index >= length) {\n return {\n type: Token.EOF,\n range: [index, index]\n };\n }\n\ n ch = source.charCodeAt(index);\n\n // Very common: ( and ) and ; \n if (ch === 40 || ch === 41 || ch === 58) {\n return scanPun ctuator();\n }\n\n // String literal starts with single quote (#39 ) or double quote (#34).\n if (ch === 39 || ch === 34) {\n ret urn scanStringLiteral();\n }\n\n if (isIdentifierStart(ch)) {\n return scanIdentifier();\n }\n\n // Dot (.) char #46 can also start a floating-point number, hence the need\n // to check the next character.\n if (ch === 46) {\n if (isDecimalDigit(source.cha rCodeAt(index + 1))) {\n return scanNumericLiteral();\n }\n return scanPunctuator();\n }\n\n if (isDecimalDig it(ch)) {\n return scanNumericLiteral();\n }\n\n return scanPunctuator();\n }\n\n function lex() {\n var token;\n\n token = lookahead;\n index = token.range[1];\n\n lookahead = adva nce();\n\n index = token.range[1];\n\n return token;\n }\n\n function peek() {\n var pos;\n\n pos = index;\n lookahead = advance();\n index = pos;\n }\n\n // Throw an exception\n\n fu nction throwError(token, messageFormat) {\n var error,\n args = Array.prototype.slice.call(arguments, 2),\n msg = messageFormat.rep lace(\n /%(\\d)/g,\n function (whole, index) {\n assert(index < args.length, 'Message reference must be in rang e');\n return args[index];\n }\n ); \n\n error = new Error(msg);\n error.index = index;\n error .description = msg;\n throw error;\n }\n\n // Throw an exception be cause of the token.\n\n function throwUnexpected(token) {\n throwError (token, Messages.UnexpectedToken, token.value);\n }\n\n // Expect the next token to match the specified punctuator.\n // If not, an exception will be t hrown.\n\n function expect(value) {\n var token = lex();\n if ( token.type !== Token.Punctuator || token.value !== value) {\n throwUn expected(token);\n }\n }\n\n // Return true if the next token match es the specified punctuator.\n\n function match(value) {\n return look ahead.type === Token.Punctuator && lookahead.value === value;\n }\n\n // R eturn true if the next token matches the specified keyword\n\n function match Keyword(keyword) {\n return lookahead.type === Token.Keyword && lookahead .value === keyword;\n }\n\n function consumeSemicolon() {\n // Catc h the very common case first: immediately a semicolon (char #59).\n if (s ource.charCodeAt(index) === 59) {\n lex();\n return;\n }\n\n skipWhitespace();\n\n if (match(';')) {\n lex ();\n return;\n }\n\n if (lookahead.type !== Token.EOF && !match('}')) {\n throwUnexpected(lookahead);\n }\n }\n\n // 11.1.4 Array Initialiser\n\n function parseArrayInitialiser() {\n var elements = [];\n\n expect('[');\n\n while (!match(']')) {\n if (match(',')) {\n lex();\n elements. push(null);\n } else {\n elements.push(parseExpression ());\n\n if (!match(']')) {\n expect(',');\n }\n }\n }\n\n expect(']');\n\n ret urn delegate.createArrayExpression(elements);\n }\n\n // 11.1.5 Object Ini tialiser\n\n function parseObjectPropertyKey() {\n var token;\n\n skipWhitespace();\n token = lex();\n\n // Note: This function i s called only from parseObjectProperty(), where\n // EOF and Punctuator t okens are already filtered out.\n if (token.type === Token.StringLiteral || token.type === Token.NumericLiteral) {\n return delegate.createLit eral(token);\n }\n\n return delegate.createIdentifier(token.value) ;\n }\n\n function parseObjectProperty() {\n var token, key;\n\n token = lookahead;\n skipWhitespace();\n\n if (token.type === Token.EOF || token.type === Token.Punctuator) {\n throwUnexpected(to ken);\n }\n\n key = parseObjectPropertyKey();\n expect(':') ;\n return delegate.createProperty('init', key, parseExpression());\n }\n\n function parseObjectInitialiser() {\n var properties = [];\n\n expect('{');\n\n while (!match('}')) {\n properties.push (parseObjectProperty());\n\n if (!match('}')) {\n expe ct(',');\n }\n }\n\n expect('}');\n\n return del egate.createObjectExpression(properties);\n }\n\n // 11.1.6 The Grouping O perator\n\n function parseGroupExpression() {\n var expr;\n\n e xpect('(');\n\n expr = parseExpression();\n\n expect(')');\n\n return expr;\n }\n\n\n // 11.1 Primary Expressions\n\n function par sePrimaryExpression() {\n var type, token, expr;\n\n if (match('(' )) {\n return parseGroupExpression();\n }\n\n type = lo okahead.type;\n\n if (type === Token.Identifier) {\n expr = de legate.createIdentifier(lex().value);\n } else if (type === Token.StringL iteral || type === Token.NumericLiteral) {\n expr = delegate.createLi teral(lex());\n } else if (type === Token.Keyword) {\n if (mat chKeyword('this')) {\n lex();\n expr = delegate.cr eateThisExpression();\n }\n } else if (type === Token.BooleanL iteral) {\n token = lex();\n token.value = (token.value == = 'true');\n expr = delegate.createLiteral(token);\n } else if (type === Token.NullLiteral) {\n token = lex();\n token.v alue = null;\n expr = delegate.createLiteral(token);\n } else if (match('[')) {\n expr = parseArrayInitialiser();\n } else i f (match('{')) {\n expr = parseObjectInitialiser();\n }\n\n if (expr) {\n return expr;\n }\n\n throwUnexpected (lex());\n }\n\n // 11.2 Left-Hand-Side Expressions\n\n function parseA rguments() {\n var args = [];\n\n expect('(');\n\n if (!mat ch(')')) {\n while (index < length) {\n args.push(pars eExpression());\n if (match(')')) {\n break;\n }\n expect(',');\n }\n }\n\n expect(')');\n\n return args;\n }\n\n function parseNonCompute dProperty() {\n var token;\n\n token = lex();\n\n if (!isId entifierName(token)) {\n throwUnexpected(token);\n }\n\n return delegate.createIdentifier(token.value);\n }\n\n function parseNon ComputedMember() {\n expect('.');\n\n return parseNonComputedPrope rty();\n }\n\n function parseComputedMember() {\n var expr;\n\n expect('[');\n\n expr = parseExpression();\n\n expect(']');\n\ n return expr;\n }\n\n function parseLeftHandSideExpression() {\n var expr, args, property;\n\n expr = parsePrimaryExpression();\n\n while (true) {\n if (match('[')) {\n property = parseComputedMember();\n expr = delegate.createMemberExpression( '[', expr, property);\n } else if (match('.')) {\n pro perty = parseNonComputedMember();\n expr = delegate.createMemberE xpression('.', expr, property);\n } else if (match('(')) {\n args = parseArguments();\n expr = delegate.createCallExpre ssion(expr, args);\n } else {\n break;\n }\ n }\n\n return expr;\n }\n\n // 11.3 Postfix Expressions\n\n var parsePostfixExpression = parseLeftHandSideExpression;\n\n // 11.4 Una ry Operators\n\n function parseUnaryExpression() {\n var token, expr;\ n\n if (lookahead.type !== Token.Punctuator && lookahead.type !== Token.K eyword) {\n expr = parsePostfixExpression();\n } else if (matc h('+') || match('-') || match('!')) {\n token = lex();\n e xpr = parseUnaryExpression();\n expr = delegate.createUnaryExpression (token.value, expr);\n } else if (matchKeyword('delete') || matchKeyword( 'void') || matchKeyword('typeof')) {\n throwError({}, Messages.Unexpe ctedToken);\n } else {\n expr = parsePostfixExpression();\n }\n\n return expr;\n }\n\n function binaryPrecedence(token) {\ n var prec = 0;\n\n if (token.type !== Token.Punctuator && token.t ype !== Token.Keyword) {\n return 0;\n }\n\n switch (to ken.value) {\n case '||':\n prec = 1;\n break;\n\n case '&&':\n prec = 2;\n break;\n\n case '== ':\n case '!=':\n case '===':\n case '!==':\n pr ec = 6;\n break;\n\n case '<':\n case '>':\n cas e '<=':\n case '>=':\n case 'instanceof':\n prec = 7;\n break;\n\n case 'in':\n prec = 7;\n bre ak;\n\n case '+':\n case '-':\n prec = 9;\n break;\n\n case '*':\n case '/':\n case '%':\n p rec = 11;\n break;\n\n default:\n break;\n } \n\n return prec;\n }\n\n // 11.5 Multiplicative Operators\n // 11.6 Additive Operators\n // 11.7 Bitwise Shift Operators\n // 11.8 Relati onal Operators\n // 11.9 Equality Operators\n // 11.10 Binary Bitwise Oper ators\n // 11.11 Binary Logical Operators\n\n function parseBinaryExpressi on() {\n var expr, token, prec, stack, right, operator, left, i;\n\n left = parseUnaryExpression();\n\n token = lookahead;\n prec = binaryPrecedence(token);\n if (prec === 0) {\n return left;\n }\n token.prec = prec;\n lex();\n\n right = parseUna ryExpression();\n\n stack = [left, token, right];\n\n while ((prec = binaryPrecedence(lookahead)) > 0) {\n\n // Reduce: make a binary e xpression from the three topmost entries.\n while ((stack.length > 2) && (prec <= stack[stack.length - 2].prec)) {\n right = stack.pop ();\n operator = stack.pop().value;\n left = stack .pop();\n expr = delegate.createBinaryExpression(operator, left, right);\n stack.push(expr);\n }\n\n // Shif t.\n token = lex();\n token.prec = prec;\n stac k.push(token);\n expr = parseUnaryExpression();\n stack.pu sh(expr);\n }\n\n // Final reduce to clean-up the stack.\n i = stack.length - 1;\n expr = stack[i];\n while (i > 1) {\n expr = delegate.createBinaryExpression(stack[i - 1].value, stack[i - 2], e xpr);\n i -= 2;\n }\n\n return expr;\n }\n\n\n // 11.12 Conditional Operator\n\n function parseConditionalExpression() {\n var expr, consequent, alternate;\n\n expr = parseBinaryExpression();\ n\n if (match('?')) {\n lex();\n consequent = parse ConditionalExpression();\n expect(':');\n alternate = pars eConditionalExpression();\n\n expr = delegate.createConditionalExpres sion(expr, consequent, alternate);\n }\n\n return expr;\n }\n\n // Simplification since we do not support AssignmentExpression.\n var par seExpression = parseConditionalExpression;\n\n // Polymer Syntax extensions\n \n // Filter ::\n // Identifier\n // Identifier \"(\" \")\"\n // Identifier \"(\" FilterArguments \")\"\n\n function parseFilter() {\n var identifier, args;\n\n identifier = lex();\n\n if (identifie r.type !== Token.Identifier) {\n throwUnexpected(identifier);\n }\n\n args = match('(') ? parseArguments() : [];\n\n return dele gate.createFilter(identifier.value, args);\n }\n\n // Filters ::\n // \"|\" Filter\n // Filters \"|\" Filter\n\n function parseFilters() {\n while (match('|')) {\n lex();\n parseFilter();\n }\n }\n\n // TopLevel ::\n // LabelledExpressions\n // AsEx pression\n // InExpression\n // FilterExpression\n\n // AsExpressio n ::\n // FilterExpression as Identifier\n\n // InExpression ::\n // Identifier, Identifier in FilterExpression\n // Identifier in FilterExpre ssion\n\n // FilterExpression ::\n // Expression\n // Expression Fi lters\n\n function parseTopLevel() {\n skipWhitespace();\n peek ();\n\n var expr = parseExpression();\n if (expr) {\n i f (lookahead.value === ',' || lookahead.value == 'in' &&\n expr.type === Syntax.Identifier) {\n parseInExpression(expr);\n } else {\n parseFilters();\n if (lookah ead.value === 'as') {\n parseAsExpression(expr);\n } else {\n delegate.createTopLevel(expr);\n }\n }\n }\n\n if (lookahead.type !== Token.EOF) {\n throwUnexpected(lookahead);\n }\n }\n\n function parseAs Expression(expr) {\n lex(); // as\n var identifier = lex().value; \n delegate.createAsExpression(expr, identifier);\n }\n\n function parseInExpression(identifier) {\n var indexName;\n if (lookahead.v alue === ',') {\n lex();\n if (lookahead.type !== Token.Id entifier)\n throwUnexpected(lookahead);\n indexName = lex().value;\n }\n\n lex(); // in\n var expr = parseExpres sion();\n parseFilters();\n delegate.createInExpression(identifier .name, indexName, expr);\n }\n\n function parse(code, inDelegate) {\n delegate = inDelegate;\n source = code;\n index = 0;\n l ength = source.length;\n lookahead = null;\n state = {\n labelSet: {}\n };\n\n return parseTopLevel();\n }\n\n glob al.esprima = {\n parse: parse\n };\n})(this);\n","// Copyright (c) 201 4 The Polymer Project Authors. All rights reserved.\n// This code may only be us ed under the BSD style license found at http://polymer.github.io/LICENSE.txt\n// The complete set of authors may be found at http://polymer.github.io/AUTHORS.tx t\n// The complete set of contributors may be found at http://polymer.github.io/ CONTRIBUTORS.txt\n// Code distributed by Google as part of the polymer project i s also\n// subject to an additional IP rights grant found at http://polymer.gith ub.io/PATENTS.txt\n\n(function (global) {\n 'use strict';\n\n function prepare Binding(expressionText, name, node, filterRegistry) {\n var expression;\n try {\n expression = getExpression(expressionText);\n if (expression.s copeIdent &&\n (node.nodeType !== Node.ELEMENT_NODE ||\n node .tagName !== 'TEMPLATE' ||\n (name !== 'bind' && name !== 'repeat'))) {\n throw Error('as and in can only be used within <template bind/repeat> ');\n }\n } catch (ex) {\n console.error('Invalid expression syntax : ' + expressionText, ex);\n return;\n }\n\n return function(model, n ode, oneTime) {\n var binding = expression.getBinding(model, filterRegistry , oneTime);\n if (expression.scopeIdent && binding) {\n node.polymer ExpressionScopeIdent_ = expression.scopeIdent;\n if (expression.indexIden t)\n node.polymerExpressionIndexIdent_ = expression.indexIdent;\n }\n\n return binding;\n }\n }\n\n // TODO(rafaelw): Implement simple L RU.\n var expressionParseCache = Object.create(null);\n\n function getExpressi on(expressionText) {\n var expression = expressionParseCache[expressionText]; \n if (!expression) {\n var delegate = new ASTDelegate();\n esprima .parse(expressionText, delegate);\n expression = new Expression(delegate);\ n expressionParseCache[expressionText] = expression;\n }\n return exp ression;\n }\n\n function Literal(value) {\n this.value = value;\n this. valueFn_ = undefined;\n }\n\n Literal.prototype = {\n valueFn: function() { \n if (!this.valueFn_) {\n var value = this.value;\n this.val ueFn_ = function() {\n return value;\n }\n }\n\n retur n this.valueFn_;\n }\n }\n\n function IdentPath(name) {\n this.name = na me;\n this.path = Path.get(name);\n }\n\n IdentPath.prototype = {\n valu eFn: function() {\n if (!this.valueFn_) {\n var name = this.name;\n var path = this.path;\n this.valueFn_ = function(model, observer) {\n if (observer)\n observer.addPath(model, path);\n\n return path.getValueFrom(model);\n }\n }\n\n return this.va lueFn_;\n },\n\n setValue: function(model, newValue) {\n if (this.pat h.length == 1);\n model = findScope(model, this.path[0]);\n\n return this.path.setValueFrom(model, newValue);\n }\n };\n\n function MemberExpre ssion(object, property, accessor) {\n this.computed = accessor == '[';\n\n this.dynamicDeps = typeof object == 'function' ||\n objec t.dynamicDeps ||\n (this.computed && !(property instanceof Literal));\n\n this.simplePath =\n !this.dynamicDeps &&\n (pro perty instanceof IdentPath || property instanceof Literal) &&\n (object i nstanceof MemberExpression || object instanceof IdentPath);\n\n this.object = this.simplePath ? object : getFn(object);\n this.property = !this.computed | | this.simplePath ?\n property : getFn(property);\n }\n\n MemberExpress ion.prototype = {\n get fullPath() {\n if (!this.fullPath_) {\n\n var parts = this.object instanceof MemberExpression ?\n this.object. fullPath.slice() : [this.object.name];\n parts.push(this.property instanc eof IdentPath ?\n this.property.name : this.property.value);\n this.fullPath_ = Path.get(parts);\n }\n\n return this.fullPath_;\n },\n\n valueFn: function() {\n if (!this.valueFn_) {\n var objec t = this.object;\n\n if (this.simplePath) {\n var path = this.fu llPath;\n\n this.valueFn_ = function(model, observer) {\n if (observer)\n observer.addPath(model, path);\n\n return path.getValueFrom(model);\n };\n } else if (!this.computed) {\n var path = Path.get(this.property.name);\n\n this.valueFn_ = f unction(model, observer, filterRegistry) {\n var context = object(mod el, observer, filterRegistry);\n\n if (observer)\n obser ver.addPath(context, path);\n\n return path.getValueFrom(context);\n }\n } else {\n // Computed property.\n var pro perty = this.property;\n\n this.valueFn_ = function(model, observer, fi lterRegistry) {\n var context = object(model, observer, filterRegistr y);\n var propName = property(model, observer, filterRegistry);\n if (observer)\n observer.addPath(context, [propName]);\n\n return context ? context[propName] : undefined;\n };\n }\n }\n return this.valueFn_;\n },\n\n setValue: function(mode l, newValue) {\n if (this.simplePath) {\n this.fullPath.setValueFrom (model, newValue);\n return newValue;\n }\n\n var object = this .object(model);\n var propName = this.property instanceof IdentPath ? this. property.name :\n this.property(model);\n return object[propName] = newValue;\n }\n };\n\n function Filter(name, args) {\n this.name = nam e;\n this.args = [];\n for (var i = 0; i < args.length; i++) {\n this .args[i] = getFn(args[i]);\n }\n }\n\n Filter.prototype = {\n transform: function(model, observer, filterRegistry, toModelDirection,\n initialArgs) {\n var fn = filterRegistry[this.name];\n var conte xt = model;\n if (fn) {\n context = undefined;\n } else {\n fn = context[this.name];\n if (!fn) {\n console.error('Canno t find function or filter: ' + this.name);\n return;\n }\n }\n\n // If toModelDirection is falsey, then the \"normal\" (dom-bound) dir ection\n // is used. Otherwise, it looks for a 'toModel' property function on the\n // object.\n if (toModelDirection) {\n fn = fn.toModel ;\n } else if (typeof fn.toDOM == 'function') {\n fn = fn.toDOM;\n }\n\n if (typeof fn != 'function') {\n console.error('Cannot fin d function or filter: ' + this.name);\n return;\n }\n\n var arg s = initialArgs || [];\n for (var i = 0; i < this.args.length; i++) {\n args.push(getFn(this.args[i])(model, observer, filterRegistry));\n }\n\ n return fn.apply(context, args);\n }\n };\n\n function notImplemented () { throw Error('Not Implemented'); }\n\n var unaryOperators = {\n '+': fun ction(v) { return +v; },\n '-': function(v) { return -v; },\n '!': functio n(v) { return !v; }\n };\n\n var binaryOperators = {\n '+': function(l, r) { return l+r; },\n '-': function(l, r) { return l-r; },\n '*': function(l, r) { return l*r; },\n '/': function(l, r) { return l/r; },\n '%': functio n(l, r) { return l%r; },\n '<': function(l, r) { return l<r; },\n '>': fun ction(l, r) { return l>r; },\n '<=': function(l, r) { return l<=r; },\n '> =': function(l, r) { return l>=r; },\n '==': function(l, r) { return l==r; }, \n '!=': function(l, r) { return l!=r; },\n '===': function(l, r) { return l===r; },\n '!==': function(l, r) { return l!==r; },\n '&&': function(l, r) { return l&&r; },\n '||': function(l, r) { return l||r; },\n };\n\n func tion getFn(arg) {\n return typeof arg == 'function' ? arg : arg.valueFn();\n }\n\n function ASTDelegate() {\n this.expression = null;\n this.filters = [];\n this.deps = {};\n this.currentPath = undefined;\n this.scopeIde nt = undefined;\n this.indexIdent = undefined;\n this.dynamicDeps = false; \n }\n\n ASTDelegate.prototype = {\n createUnaryExpression: function(op, ar gument) {\n if (!unaryOperators[op])\n throw Error('Disallowed opera tor: ' + op);\n\n argument = getFn(argument);\n\n return function(mode l, observer, filterRegistry) {\n return unaryOperators[op](argument(model , observer, filterRegistry));\n };\n },\n\n createBinaryExpression: f unction(op, left, right) {\n if (!binaryOperators[op])\n throw Error ('Disallowed operator: ' + op);\n\n left = getFn(left);\n right = getF n(right);\n\n return function(model, observer, filterRegistry) {\n r eturn binaryOperators[op](left(model, observer, filterRegistry),\n right(model, observer, filterRegistry));\n };\n },\ n\n createConditionalExpression: function(test, consequent, alternate) {\n test = getFn(test);\n consequent = getFn(consequent);\n alternate = getFn(alternate);\n\n return function(model, observer, filterRegistry) {\n return test(model, observer, filterRegistry) ?\n consequent(m odel, observer, filterRegistry) :\n alternate(model, observer, filter Registry);\n }\n },\n\n createIdentifier: function(name) {\n var ident = new IdentPath(name);\n ident.type = 'Identifier';\n return id ent;\n },\n\n createMemberExpression: function(accessor, object, property) {\n var ex = new MemberExpression(object, property, accessor);\n if ( ex.dynamicDeps)\n this.dynamicDeps = true;\n return ex;\n },\n\n createCallExpression: function(expression, args) {\n if (!(expression in stanceof IdentPath))\n throw Error('Only identifier function invocations are allowed');\n\n var filter = new Filter(expression.name, args);\n\n return function(model, observer, filterRegistry) {\n return filter.trans form(model, observer, filterRegistry, false);\n };\n },\n\n createLit eral: function(token) {\n return new Literal(token.value);\n },\n\n c reateArrayExpression: function(elements) {\n for (var i = 0; i < elements.l ength; i++)\n elements[i] = getFn(elements[i]);\n\n return function( model, observer, filterRegistry) {\n var arr = []\n for (var i = 0 ; i < elements.length; i++)\n arr.push(elements[i](model, observer, fil terRegistry));\n return arr;\n }\n },\n\n createProperty: func tion(kind, key, value) {\n return {\n key: key instanceof IdentPath ? key.name : key.value,\n value: value\n };\n },\n\n createObj ectExpression: function(properties) {\n for (var i = 0; i < properties.leng th; i++)\n properties[i].value = getFn(properties[i].value);\n\n ret urn function(model, observer, filterRegistry) {\n var obj = {};\n for (var i = 0; i < properties.length; i++)\n obj[properties[i].key] =\ n properties[i].value(model, observer, filterRegistry);\n re turn obj;\n }\n },\n\n createFilter: function(name, args) {\n th is.filters.push(new Filter(name, args));\n },\n\n createAsExpression: func tion(expression, scopeIdent) {\n this.expression = expression;\n this. scopeIdent = scopeIdent;\n },\n\n createInExpression: function(scopeIdent, indexIdent, expression) {\n this.expression = expression;\n this.scop eIdent = scopeIdent;\n this.indexIdent = indexIdent;\n },\n\n createT opLevel: function(expression) {\n this.expression = expression;\n },\n\n createThisExpression: notImplemented\n }\n\n function ConstantObservable(v alue) {\n this.value_ = value;\n }\n\n ConstantObservable.prototype = {\n open: function() { return this.value_; },\n discardChanges: function() { re turn this.value_; },\n deliver: function() {},\n close: function() {},\n }\n\n function Expression(delegate) {\n this.scopeIdent = delegate.scopeIden t;\n this.indexIdent = delegate.indexIdent;\n\n if (!delegate.expression)\ n throw Error('No expression found.');\n\n this.expression = delegate.ex pression;\n getFn(this.expression); // forces enumeration of path dependencie s\n\n this.filters = delegate.filters;\n this.dynamicDeps = delegate.dynam icDeps;\n }\n\n Expression.prototype = {\n getBinding: function(model, filt erRegistry, oneTime) {\n if (oneTime)\n return this.getValue(model, undefined, filterRegistry);\n\n var observer = new CompoundObserver();\n // captures deps.\n var firstValue = this.getValue(model, observer, filt erRegistry);\n var firstTime = true;\n var self = this;\n\n funct ion valueFn() {\n // deps cannot have changed on first value retrieval.\n if (firstTime) {\n firstTime = false;\n return firstVa lue;\n }\n\n if (self.dynamicDeps)\n observer.startReset( );\n\n var value = self.getValue(model,\n self.dynamicDeps ? observer : undefined,\n fi lterRegistry);\n if (self.dynamicDeps)\n observer.finishReset(); \n\n return value;\n }\n\n function setValueFn(newValue) {\n self.setValue(model, newValue, filterRegistry);\n return newValue;\n }\n\n return new ObserverTransform(observer, valueFn, setValueFn, tru e);\n },\n\n getValue: function(model, observer, filterRegistry) {\n var value = getFn(this.expression)(model, observer, filterRegistry);\n for (var i = 0; i < this.filters.length; i++) {\n value = this.filters[i].tra nsform(model, observer, filterRegistry,\n false, [value]);\n }\n \n return value;\n },\n\n setValue: function(model, newValue, filterR egistry) {\n var count = this.filters ? this.filters.length : 0;\n whi le (count-- > 0) {\n newValue = this.filters[count].transform(model, unde fined,\n filterRegistry, true, [newValue]);\n }\n\n if (thi s.expression.setValue)\n return this.expression.setValue(model, newValue) ;\n }\n }\n\n /**\n * Converts a style property name to a css property na me. For example:\n * \"WebkitUserSelect\" to \"-webkit-user-select\"\n */\n function convertStylePropertyName(name) {\n return String(name).replace(/[A- Z]/g, function(c) {\n return '-' + c.toLowerCase();\n });\n }\n\n var parentScopeName = '@' + Math.random().toString(36).slice(2);\n\n // Single iden t paths must bind directly to the appropriate scope object.\n // I.e. Pushed va lues in two-bindings need to be assigned to the actual model\n // object.\n fu nction findScope(model, prop) {\n while (model[parentScopeName] &&\n !Object.prototype.hasOwnProperty.call(model, prop)) {\n model = model[par entScopeName];\n }\n\n return model;\n }\n\n function isLiteralExpressio n(pathString) {\n switch (pathString) {\n case '':\n return false ;\n\n case 'false':\n case 'null':\n case 'true':\n return true;\n }\n\n if (!isNaN(Number(pathString)))\n return true;\n\n return false;\n };\n\n function PolymerExpressions() {}\n\n PolymerExpression s.prototype = {\n // \"built-in\" filters\n styleObject: function(value) { \n var parts = [];\n for (var key in value) {\n parts.push(conv ertStylePropertyName(key) + ': ' + value[key]);\n }\n return parts.joi n('; ');\n },\n\n tokenList: function(value) {\n var tokens = [];\n for (var key in value) {\n if (value[key])\n tokens.push(key );\n }\n return tokens.join(' ');\n },\n\n // binding delegate A PI\n prepareInstancePositionChanged: function(template) {\n var indexIde nt = template.polymerExpressionIndexIdent_;\n if (!indexIdent)\n ret urn;\n\n return function(templateInstance, index) {\n templateInstan ce.model[indexIdent] = index;\n };\n },\n\n prepareBinding: function( pathString, name, node) {\n var path = Path.get(pathString);\n\n if (! isLiteralExpression(pathString) && path.valid) {\n if (path.length == 1) {\n return function(model, node, oneTime) {\n if (oneTime)\n return path.getValueFrom(model);\n\n var scope = findSc ope(model, path[0]);\n return new PathObserver(scope, path);\n };\n }\n return; // bail out early if pathString is simple path .\n }\n\n return prepareBinding(pathString, name, node, this);\n }, \n\n prepareInstanceModel: function(template) {\n var scopeName = templa te.polymerExpressionScopeIdent_;\n if (!scopeName)\n return;\n\n var parentScope = template.templateInstance ?\n template.templateInst ance.model :\n template.model;\n\n var indexName = template.polyme rExpressionIndexIdent_;\n\n return function(model) {\n return create ScopeObject(parentScope, model, scopeName, indexName);\n };\n }\n };\n\ n var createScopeObject = ('__proto__' in {}) ?\n function(parentScope, mode l, scopeName, indexName) {\n var scope = {};\n scope[scopeName] = mode l;\n scope[indexName] = undefined;\n scope[parentScopeName] = parentSc ope;\n scope.__proto__ = parentScope;\n return scope;\n } :\n fu nction(parentScope, model, scopeName, indexName) {\n var scope = Object.cre ate(parentScope);\n Object.defineProperty(scope, scopeName,\n { va lue: model, configurable: true, writable: true });\n Object.defineProperty( scope, indexName,\n { value: undefined, configurable: true, writable: t rue });\n Object.defineProperty(scope, parentScopeName,\n { value: parentScope, configurable: true, writable: true });\n return scope;\n } ;\n\n global.PolymerExpressions = PolymerExpressions;\n PolymerExpressions.get Expression = getExpression;\n})(this);\n","/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The com plete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS. txt\n * Code distributed by Google as part of the polymer project is also\n * su bject to an additional IP rights grant found at http://polymer.github.io/PATENTS .txt\n */\n\n// TODO(sorvell): this ensures Polymer is an object and not a funct ion\n// Platform is currently defining it as a function to allow for async loadi ng\n// of polymer; once we refine the loading process this likely goes away.\nif (typeof window.Polymer === 'function') {\n Polymer = {};\n}\n\n","/*\n * Copyr ight (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code ma y only be used under the BSD style license found at http://polymer.github.io/LIC ENSE.txt\n * The complete set of authors may be found at http://polymer.github.i o/AUTHORS.txt\n * The complete set of contributors may be found at http://polyme r.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polym er project is also\n * subject to an additional IP rights grant found at http:// polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n // copy own proper ties from 'api' to 'prototype, with name hinting for 'super'\n function extend( prototype, api) {\n if (prototype && api) {\n // use only own properties of 'api'\n Object.getOwnPropertyNames(api).forEach(function(n) {\n // acquire property descriptor\n var pd = Object.getOwnPropertyDescriptor (api, n);\n if (pd) {\n // clone property via descriptor\n Object.defineProperty(prototype, n, pd);\n // cache name-of-method for 'super' engine\n if (typeof pd.value == 'function') {\n // hint the 'super' engine\n pd.value.nom = n;\n }\n }\n });\n }\n return prototype;\n }\n \n // exports\n\n scope.ext end = extend;\n\n})(Polymer);\n","/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complete set of a uthors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * C ode distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */ \n\n(function(scope) {\n \n // usage\n \n // invoke cb.call(this) in 100ms, unless the job is re-registered,\n // which resets the timer\n // \n // this. myJob = this.job(this.myJob, cb, 100)\n //\n // returns a job handle which can be used to re-register a job\n\n var Job = function(inContext) {\n this.con text = inContext;\n this.boundComplete = this.complete.bind(this)\n };\n Jo b.prototype = {\n go: function(callback, wait) {\n this.callback = callb ack;\n var h;\n if (!wait) {\n h = requestAnimationFrame(this.b oundComplete);\n this.handle = function() {\n cancelAnimationFra me(h);\n }\n } else {\n h = setTimeout(this.boundComplete, wa it);\n this.handle = function() {\n clearTimeout(h);\n }\ n }\n },\n stop: function() {\n if (this.handle) {\n this .handle();\n this.handle = null;\n }\n },\n complete: function () {\n if (this.handle) {\n this.stop();\n this.callback.call (this.context);\n }\n }\n };\n \n function job(job, callback, wait) { \n if (job) {\n job.stop();\n } else {\n job = new Job(this);\n }\n job.go(callback, wait);\n return job;\n }\n \n // exports \n\n scope.job = job;\n \n})(Polymer);\n","/*\n * Copyright (c) 2014 The Polymer Pro ject Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complet e set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\ n * Code distributed by Google as part of the polymer project is also\n * subjec t to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt \n */\n\n(function(scope) {\n\n var registry = {};\n\n HTMLElement.register = function(tag, prototype) {\n registry[tag] = prototype;\n }\n\n // get prot otype mapped to node <tag>\n HTMLElement.getPrototypeForTag = function(tag) {\n var prototype = !tag ? HTMLElement.prototype : registry[tag];\n // TODO(s jmiles): creating <tag> is likely to have wasteful side-effects\n return prot otype || Object.getPrototypeOf(document.createElement(tag));\n };\n\n // we ha ve to flag propagation stoppage for the event dispatcher\n var originalStopProp agation = Event.prototype.stopPropagation;\n Event.prototype.stopPropagation = function() {\n this.cancelBubble = true;\n originalStopPropagation.apply(t his, arguments);\n };\n \n // TODO(sorvell): remove when we're sure imports d oes not need\n // to load stylesheets\n /*\n HTMLImports.importer.preloadSele ctors += \n ', polymer-element link[rel=stylesheet]';\n */\n})(Polymer);\n ","/*\r\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. \r\n * This code may only be used under the BSD style license found at http://po lymer.github.io/LICENSE.txt\r\n * The complete set of authors may be found at ht tp://polymer.github.io/AUTHORS.txt\r\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\r\n * Code distributed by Go ogle as part of the polymer project is also\r\n * subject to an additional IP ri ghts grant found at http://polymer.github.io/PATENTS.txt\r\n */\r\n\r\n (functio n(scope) {\r\n // super\r\n\r\n // `arrayOfArgs` is an optional array of a rgs like one might pass\r\n // to `Function.apply`\r\n\r\n // TODO(sjmiles ):\r\n // $super must be installed on an instance or prototype chain\r\n // as `super`, and invoked via `this`, e.g.\r\n // `this.super();`\ r\n\r\n // will not work if function objects are not unique, for example,\ r\n // when using mixins.\r\n // The memoization strategy assumes ea ch function exists on only one \r\n // prototype chain i.e. we use the fun ction object for memoizing)\r\n // perhaps we can bookkeep on the prototyp e itself instead\r\n function $super(arrayOfArgs) {\r\n // since we are thunking a method call, performance is important here: \r\n // memoize all lookups, once memoized the fast path calls no other \r\n // functions\r\n //\r\n // find the caller (cannot be `strict` because of 'caller')\r\n var caller = $super.caller;\r\n // memoized 'name of method' \r\n var nom = caller.nom;\r\n // memoized next implementation prototype\r\n var _super = caller._super;\r\n if (!_super) {\r\n if (!nom) {\r\ n nom = caller.nom = nameInThis.call(this, caller);\r\n }\r\n if (!nom) {\r\n console.warn('called super() on a method not insta lled declaratively (has no .nom property)');\r\n }\r\n // super pr ototype is either cached or we have to find it\r\n // by searching __prot o__ (at the 'top')\r\n // invariant: because we cache _super on fn below, we never reach \r\n // here from inside a series of calls to super(), so it's ok to \r\n // start searching from the prototype of 'this' (at the 'top')\r\n // we must never memoize a null super for this reason\r\n _super = memoizeSuper(caller, nom, getPrototypeOf(this));\r\n }\r\n // our super function\r\n var fn = _super[nom];\r\n if (fn) {\r\n // memoize information so 'fn' can call 'super'\r\n if (!fn._super) { \r\n // must not memoize null, or we lose our invariant above\r\n memoizeSuper(fn, nom, _super);\r\n }\r\n // invoke the inherit ed method\r\n // if 'fn' is not function valued, this will throw\r\n return fn.apply(this, arrayOfArgs || []);\r\n }\r\n }\r\n\r\n func tion nameInThis(value) {\r\n var p = this.__proto__;\r\n while (p && p !== HTMLElement.prototype) {\r\n // TODO(sjmiles): getOwnPropertyNames i s absurdly expensive\r\n var n$ = Object.getOwnPropertyNames(p);\r\n for (var i=0, l=n$.length, n; i<l && (n=n$[i]); i++) {\r\n var d = O bject.getOwnPropertyDescriptor(p, n);\r\n if (typeof d.value === 'funct ion' && d.value === value) {\r\n return n;\r\n }\r\n }\r\n p = p.__proto__;\r\n }\r\n }\r\n\r\n function memoizeSup er(method, name, proto) {\r\n // find and cache next prototype containing ` name`\r\n // we need the prototype so we can do another lookup\r\n // from here\r\n var s = nextSuper(proto, name, method);\r\n if (s[name]) {\r\n // `s` is a prototype, the actual method is `s[name]`\r\n / / tag super method with it's name for quicker lookups\r\n s[name].nom = n ame;\r\n }\r\n return method._super = s;\r\n }\r\n\r\n function nextSuper(proto, name, caller) {\r\n // look for an inherited prototype tha t implements name\r\n while (proto) {\r\n if ((proto[name] !== calle r) && proto[name]) {\r\n return proto;\r\n }\r\n proto = getPrototypeOf(proto);\r\n }\r\n // must not return null, or we lose o ur invariant above\r\n // in this case, a super() call was invoked where no superclass\r\n // method exists\r\n // TODO(sjmiles): thow an excepti on?\r\n return Object;\r\n }\r\n\r\n // NOTE: In some platforms (IE10 ) the prototype chain is faked via \r\n // __proto__. Therefore, always get p rototype via __proto__ instead of\r\n // the more standard Object.getPrototyp eOf.\r\n function getPrototypeOf(prototype) {\r\n return prototype.__pro to__;\r\n }\r\n\r\n // utility function to precompute name tags for functi ons\r\n // in a (unchained) prototype\r\n function hintSuper(prototype) {\ r\n // tag functions with their prototype name to optimize\r\n // supe r call invocations\r\n for (var n in prototype) {\r\n var pd = Objec t.getOwnPropertyDescriptor(prototype, n);\r\n if (pd && typeof pd.value = == 'function') {\r\n pd.value.nom = n;\r\n }\r\n }\r\n } \r\n\r\n // exports\r\n\r\n scope.super = $super;\r\n\r\n})(Polymer);\r\n" ,"/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer .github.io/LICENSE.txt\n * The complete set of authors may be found at http://po lymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as par t of the polymer project is also\n * subject to an additional IP rights grant fo und at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n var typeHandlers = {\n string: function(value) {\n return value;\n },\n date: function(value) {\n return new Date(Date.parse(value) || Date.now() );\n },\n boolean: function(value) {\n if (value === '') {\n r eturn true;\n }\n return value === 'false' ? false : !!value;\n },\ n number: function(value) {\n var n = parseFloat(value);\n // hex v alues like \"0xFFFF\" parseFloat as 0\n if (n === 0) {\n n = parseIn t(value);\n }\n return isNaN(n) ? value : n;\n // this code disab led because encoded values (like \"0xFFFF\")\n // do not round trip to thei r original format\n //return (String(floatVal) === value) ? floatVal : valu e;\n },\n object: function(value, currentValue) {\n if (currentValue === null) {\n return value;\n }\n try {\n // If the stri ng is an object, we can parse is with the JSON library.\n // include conv enience replace for single-quotes. If the author omits\n // quotes altoge ther, parse will fail.\n return JSON.parse(value.replace(/'/g, '\"'));\n } catch(e) {\n // The object isn't valid JSON, return the raw value\ n return value;\n }\n },\n // avoid deserialization of functio ns\n 'function': function(value, currentValue) {\n return currentValue;\ n }\n };\n\n function deserializeValue(value, currentValue) {\n // attem pt to infer type from default value\n var inferredType = typeof currentValue; \n // invent 'date' type value for Date\n if (currentValue instanceof Date ) {\n inferredType = 'date';\n }\n // delegate deserialization via ty pe string\n return typeHandlers[inferredType](value, currentValue);\n }\n\n // exports\n\n scope.deserializeValue = deserializeValue;\n\n})(Polymer);\n"," /*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.g ithub.io/LICENSE.txt\n * The complete set of authors may be found at http://poly mer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at h ttp://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant foun d at http://polymer.github.io/PATENTS.txt\n */\n(function(scope) {\n\n // impor ts\n\n var extend = scope.extend;\n\n // module\n\n var api = {};\n\n api.de claration = {};\n api.instance = {};\n\n api.publish = function(apis, prototyp e) {\n for (var n in apis) {\n extend(prototype, apis[n]);\n }\n };\ n\n // exports\n\n scope.api = api;\n\n})(Polymer);\n","/*\n * Copyright (c) 2 014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer.github.io/AUTHORS. txt\n * The complete set of contributors may be found at http://polymer.github.i o/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.gi thub.io/PATENTS.txt\n */\n\n(function(scope) {\n\n var utils = {\n /**\n * Invokes a function asynchronously. The context of the callback\n * func tion is bound to 'this' automatically.\n * @method async\n * @param {F unction|String} method\n * @param {any|Array} args\n * @param {number} timeout\n */\n async: function(method, args, timeout) {\n // when polyfilling Object.observe, ensure changes \n // propagate before executing the async method\n Platform.flush();\n // second argument to `apply` must be an array\n args = (args && args.length) ? args : [args];\n // function to invoke\n var fn = function() {\n (this[method] || method ).apply(this, args);\n }.bind(this);\n // execute `fn` sooner or later \n var handle = timeout ? setTimeout(fn, timeout) :\n requestAnima tionFrame(fn);\n // NOTE: switch on inverting handle to determine which tim e is used.\n return timeout ? handle : ~handle;\n },\n cancelAsync: f unction(handle) {\n if (handle < 0) {\n cancelAnimationFrame(~handle );\n } else {\n clearTimeout(handle);\n }\n },\n /**\n * Fire an event.\n * @method fire\n * @returns {Object} event\n * @param {string} type An event name.\n * @param {any} detail\n * @p aram {Node} onNode Target node.\n */\n fire: function(type, detail, onNo de, bubbles, cancelable) {\n var node = onNode || this;\n var detail = detail || {};\n var event = new CustomEvent(type, {\n bubbles: (bub bles !== undefined ? bubbles : true), \n cancelable: (cancelable !== unde fined ? cancelable : true), \n detail: detail\n });\n node.disp atchEvent(event);\n return event;\n },\n /**\n * Fire an event a synchronously.\n * @method asyncFire\n * @param {string} type An event name.\n * @param detail\n * @param {Node} toNode Target node.\n */\n asyncFire: function(/*inType, inDetail*/) {\n this.async(\"fire\", arguments);\n },\n /**\n * Remove class from old, add class to anew, if they exist.\n * @param classFollows\n * @param anew A node.\n * @param old A node\n * @param className\n */\n classFollows: funct ion(anew, old, className) {\n if (old) {\n old.classList.remove(clas sName);\n }\n if (anew) {\n anew.classList.add(className);\n }\n },\n /**\n * Inject HTML which contains markup bound to this e lement into\n * a target element (replacing target element content).\n * @param String html to inject\n * @param Element target element\n */ \n injectBoundHTML: function(html, element) {\n var template = document. createElement('template');\n template.innerHTML = html;\n var fragment = this.instanceTemplate(template);\n if (element) {\n element.textC ontent = '';\n element.appendChild(fragment);\n }\n return frag ment;\n }\n };\n\n // no-operation function for handy stubs\n var nop = fu nction() {};\n\n // null-object for handy stubs\n var nob = {};\n\n // deprec ated\n\n utils.asyncMethod = utils.async;\n\n // exports\n\n scope.api.instan ce.utils = utils;\n scope.nop = nop;\n scope.nob = nob;\n\n})(Polymer);\n","/* \n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * Th is code may only be used under the BSD style license found at http://polymer.git hub.io/LICENSE.txt\n * The complete set of authors may be found at http://polyme r.github.io/AUTHORS.txt\n * The complete set of contributors may be found at htt p://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n // impor ts\n\n var log = window.logFlags || {};\n var EVENT_PREFIX = 'on-';\n\n // in stance events api\n var events = {\n // read-only\n EVENT_PREFIX: EVENT_P REFIX,\n // event listeners on host\n addHostListeners: function() {\n var events = this.eventDelegates;\n log.events && (Object.keys(events).le ngth > 0) && console.log('[%s] addHostListeners:', this.localName, events);\n // NOTE: host events look like bindings but really are not;\n // (1) we don't want the attribute to be set and (2) we want to support\n // multiple event listeners ('host' and 'instance') and Node.bind\n // by default supp orts 1 thing being bound.\n for (var type in events) {\n var methodN ame = events[type];\n this.addEventListener(type, this.element.getEventHa ndler(this, this,\n methodName));\n }\n },\n // call 'method' or function method on ' obj' with 'args', if the method exists\n dispatchMethod: function(obj, method , args) {\n if (obj) {\n log.events && console.group('[%s] dispatch [%s]', obj.localName, method);\n var fn = typeof method === 'function' ? method : obj[method];\n if (fn) {\n fn[args ? 'apply' : 'call']( obj, args);\n }\n log.events && console.groupEnd();\n Platf orm.flush();\n }\n }\n };\n\n // exports\n\n scope.api.instance.event s = events;\n\n})(Polymer);\n","/*\r\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\r\n * This code may only be used under the BSD sty le license found at http://polymer.github.io/LICENSE.txt\r\n * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\r\n * The comple te set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt \r\n * Code distributed by Google as part of the polymer project is also\r\n * s ubject to an additional IP rights grant found at http://polymer.github.io/PATENT S.txt\r\n */\r\n\r\n(function(scope) {\r\n\r\n // instance api for attributes\r \n\r\n var attributes = {\r\n copyInstanceAttributes: function () {\r\n var a$ = this._instanceAttributes;\r\n for (var k in a$) {\r\n if ( !this.hasAttribute(k)) {\r\n this.setAttribute(k, a$[k]);\r\n }\ r\n }\r\n },\r\n // for each attribute on this, deserialize value to property as needed\r\n takeAttributes: function() {\r\n // if we have no publish lookup table, we have no attributes to take\r\n // TODO(sjmiles): ad hoc\r\n if (this._publishLC) {\r\n for (var i=0, a$=this.attribut es, l=a$.length, a; (a=a$[i]) && i<l; i++) {\r\n this.attributeToProper ty(a.name, a.value);\r\n }\r\n }\r\n },\r\n // if attribute 'n ame' is mapped to a property, deserialize\r\n // 'value' into that property\r \n attributeToProperty: function(name, value) {\r\n // try to match this attribute to a property (attributes are\r\n // all lower-case, so this is case-insensitive search)\r\n var name = this.propertyForAttribute(name);\r\ n if (name) {\r\n // filter out 'mustached' values, these are to be\ r\n // replaced with bound-data and are not yet values\r\n // them selves\r\n if (value && value.search(scope.bindPattern) >= 0) {\r\n return;\r\n }\r\n // get original value\r\n var current Value = this[name];\r\n // deserialize Boolean or Number values from attr ibute\r\n var value = this.deserializeValue(value, currentValue);\r\n // only act if the value has changed\r\n if (value !== currentValue) {\r\n // install new value (has side-effects)\r\n this[name] = value;\r\n }\r\n }\r\n },\r\n // return the published propert y matching name, or undefined\r\n propertyForAttribute: function(name) {\r\n var match = this._publishLC && this._publishLC[name];\r\n //console.lo g('propertyForAttribute:', name, 'matches', match);\r\n return match;\r\n },\r\n // convert representation of 'stringValue' based on type of 'current Value'\r\n deserializeValue: function(stringValue, currentValue) {\r\n r eturn scope.deserializeValue(stringValue, currentValue);\r\n },\r\n serial izeValue: function(value, inferredType) {\r\n if (inferredType === 'boolean ') {\r\n return value ? '' : undefined;\r\n } else if (inferredType !== 'object' && inferredType !== 'function'\r\n && value !== undefined) {\r\n return value;\r\n }\r\n },\r\n reflectPropertyToAttribu te: function(name) {\r\n var inferredType = typeof this[name];\r\n // try to intelligently serialize property value\r\n var serializedValue = thi s.serializeValue(this[name], inferredType);\r\n // boolean properties must reflect as boolean attributes\r\n if (serializedValue !== undefined) {\r\n this.setAttribute(name, serializedValue);\r\n // TODO(sorvell): we should remove attr for all properties\r\n // that have undefined seriali zation; however, we will need to\r\n // refine the attr reflection system to achieve this; pica, for example,\r\n // relies on having inferredType object properties not removed as\r\n // attrs.\r\n } else if (infer redType === 'boolean') {\r\n this.removeAttribute(name);\r\n }\r\n }\r\n };\r\n\r\n // exports\r\n\r\n scope.api.instance.attributes = attribu tes;\r\n\r\n})(Polymer);\r\n","/*\n * Copyright (c) 2014 The Polymer Project Aut hors. All rights reserved.\n * This code may only be used under the BSD style li cense found at http://polymer.github.io/LICENSE.txt\n * The complete set of auth ors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\ n(function(scope) {\n\n // imports\n\n var log = window.logFlags || {};\n\n / / magic words\n\n var OBSERVE_SUFFIX = 'Changed';\n\n // element api\n\n var empty = [];\n\n var updateRecord = {\n object: undefined,\n type: 'update ',\n name: undefined,\n oldValue: undefined\n };\n\n var numberIsNaN = N umber.isNaN || function(value) {\n return typeof value === 'number' && isNaN( value);\n }\n\n function areSameValue(left, right) {\n if (left === right)\ n return left !== 0 || 1 / left === 1 / right;\n if (numberIsNaN(left) & & numberIsNaN(right))\n return true;\n\n return left !== left && right ! == right;\n }\n\n // capture A's value if B's value is null or undefined,\n / / otherwise use B's value\n function resolveBindingValue(oldValue, value) {\n if (value === undefined && oldValue === null) {\n return value;\n }\n return (value === null || value === undefined) ? oldValue : value;\n }\n\n var properties = {\n createPropertyObserver: function() {\n var n$ = thi s._observeNames;\n if (n$ && n$.length) {\n var o = this._propertyOb server = new CompoundObserver(true);\n this.registerObserver(o);\n // TODO(sorvell): may not be kosher to access the value here (this[n]);\n // previously we looked at the descriptor on the prototype\n // this do esn't work for inheritance and not for accessors without\n // a value pro perty\n for (var i=0, l=n$.length, n; (i<l) && (n=n$[i]); i++) {\n o.addPath(this, n);\n this.observeArrayValue(n, this[n], null);\n }\n }\n },\n openPropertyObserver: function() {\n if (this. _propertyObserver) {\n this._propertyObserver.open(this.notifyPropertyCha nges, this);\n }\n },\n notifyPropertyChanges: function(newValues, ol dValues, paths) {\n var name, method, called = {};\n for (var i in old Values) {\n // note: paths is of form [object, path, object, path]\n name = paths[2 * i + 1];\n method = this.observe[name];\n if (m ethod) {\n var ov = oldValues[i], nv = newValues[i];\n // obse rves the value if it is an array\n this.observeArrayValue(name, nv, ov) ;\n if (!called[method]) {\n // only invoke change method if one of ov or nv is not (undefined | null)\n if ((ov !== undefined && ov !== null) || (nv !== undefined && nv !== null)) {\n called[meth od] = true;\n // TODO(sorvell): call method with the set of values it's expecting;\n // e.g. 'foo bar': 'invalidate' expects the new a nd old values for\n // foo and bar. Currently we give only one of t hese and then\n // deliver all the arguments.\n this.i nvokeMethod(method, [ov, nv, arguments]);\n }\n }\n } \n }\n },\n deliverChanges: function() {\n if (this._propertyObs erver) {\n this._propertyObserver.deliver();\n }\n },\n proper tyChanged_: function(name, value, oldValue) {\n if (this.reflect[name]) {\n this.reflectPropertyToAttribute(name);\n }\n },\n observeArra yValue: function(name, value, old) {\n // we only care if there are registe red side-effects\n var callbackName = this.observe[name];\n if (callba ckName) {\n // if we are observing the previous value, stop\n if ( Array.isArray(old)) {\n log.observe && console.log('[%s] observeArrayVa lue: unregister observer [%s]', this.localName, name);\n this.closeName dObserver(name + '__array');\n }\n // if the new value is an array , being observing it\n if (Array.isArray(value)) {\n log.observe && console.log('[%s] observeArrayValue: register observer [%s]', this.localName , name, value);\n var observer = new ArrayObserver(value);\n o bserver.open(function(value, old) {\n this.invokeMethod(callbackName, [old]);\n }, this);\n this.registerNamedObserver(name + '__ar ray', observer);\n }\n }\n },\n emitPropertyChangeRecord: func tion(name, value, oldValue) {\n var object = this;\n if (areSameValue( value, oldValue))\n return;\n\n this.propertyChanged_(name, value, o ldValue);\n\n if (!Observer.hasObjectObserve)\n return;\n\n var notifier = this.notifier_;\n if (!notifier)\n notifier = this.notif ier_ = Object.getNotifier(this);\n\n updateRecord.object = this;\n upd ateRecord.name = name;\n updateRecord.oldValue = oldValue;\n\n notifie r.notify(updateRecord);\n },\n bindToAccessor: function(name, observable, resolveFn) {\n var privateName = name + '_';\n var privateObservable = name + 'Observable_';\n\n this[privateObservable] = observable;\n va r oldValue = this[privateName];\n\n var self = this;\n var value = obs ervable.open(function(value, oldValue) {\n self[privateName] = value;\n self.emitPropertyChangeRecord(name, value, oldValue);\n });\n\n if (resolveFn && !areSameValue(oldValue, value)) {\n var resolvedValue = resolveFn(oldValue, value);\n if (!areSameValue(value, resolvedValue)) {\ n value = resolvedValue;\n if (observable.setValue)\n observable.setValue(value);\n }\n }\n\n this[privateName] = value;\n this.emitPropertyChangeRecord(name, value, oldValue);\n\n var observer = {\n close: function() {\n observable.close();\n self[privateObservable] = undefined;\n }\n };\n this.regis terObserver(observer);\n return observer;\n },\n createComputedProper ties: function() {\n if (!this._computedNames) {\n return;\n }\ n\n for (var i = 0; i < this._computedNames.length; i++) {\n var nam e = this._computedNames[i];\n var expressionText = this.computed[name];\n try {\n var expression = PolymerExpressions.getExpression(expre ssionText);\n var observable = expression.getBinding(this, this.element .syntax);\n this.bindToAccessor(name, observable);\n } catch (ex ) {\n console.error('Failed to create computed property', ex);\n }\n }\n },\n bindProperty: function(property, observable, oneTime) { \n if (oneTime) {\n this[property] = observable;\n return;\n }\n return this.bindToAccessor(property, observable, resolveBindingVal ue);\n },\n invokeMethod: function(method, args) {\n var fn = this[me thod] || method;\n if (typeof fn === 'function') {\n fn.apply(this, args);\n }\n },\n registerObserver: function(observer) {\n if (! this._observers) {\n this._observers = [observer];\n return;\n }\n\n this._observers.push(observer);\n },\n // observer array item s are arrays of observers.\n closeObservers: function() {\n if (!this._o bservers) {\n return;\n }\n\n var observers = this._observers;\ n for (var i = 0; i < observers.length; i++) {\n var observer = obse rvers[i];\n if (observer && typeof observer.close == 'function') {\n observer.close();\n }\n }\n\n this._observers = [];\n } ,\n // bookkeeping observers for memory management\n registerNamedObserver : function(name, observer) {\n var o$ = this._namedObservers || (this._name dObservers = {});\n o$[name] = observer;\n },\n closeNamedObserver: f unction(name) {\n var o$ = this._namedObservers;\n if (o$ && o$[name]) {\n o$[name].close();\n o$[name] = null;\n return true;\n }\n },\n closeNamedObservers: function() {\n if (this._namedObse rvers) {\n for (var i in this._namedObservers) {\n this.closeNam edObserver(i);\n }\n this._namedObservers = {};\n }\n }\n };\n\n // logging\n var LOG_OBSERVE = '[%s] watching [%s]';\n var LOG_OBSERV ED = '[%s#%s] watch: [%s] now [%s] was [%s]';\n var LOG_CHANGED = '[%s#%s] prop ertyChanged: [%s] now [%s] was [%s]';\n\n // exports\n\n scope.api.instance.pr operties = properties;\n\n})(Polymer);\n","/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The com plete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS. txt\n * Code distributed by Google as part of the polymer project is also\n * su bject to an additional IP rights grant found at http://polymer.github.io/PATENTS .txt\n */\n\n(function(scope) {\n\n // imports\n\n var log = window.logFlags | | 0;\n\n // element api supporting mdv\n var mdv = {\n instanceTemplate: fu nction(template) {\n // ensure a default bindingDelegate\n var syntax = this.syntax || (!template.bindingDelegate &&\n this.element.syntax);\ n var dom = template.createInstance(this, syntax);\n var observers = d om.bindings_;\n for (var i = 0; i < observers.length; i++) {\n this. registerObserver(observers[i]);\n }\n return dom;\n },\n bind: f unction(name, observable, oneTime) {\n var property = this.propertyForAttri bute(name);\n if (!property) {\n // TODO(sjmiles): this mixin method must use the special form\n // of `super` installed by `mixinMethod` in declaration/prototype.js\n return this.mixinSuper(arguments);\n } el se {\n // use n-way Polymer binding\n var observer = this.bindProp erty(property, observable, oneTime);\n // NOTE: reflecting binding inform ation is typically required only for\n // tooling. It has a performance c ost so it's opt-in in Node.bind.\n if (Platform.enableBindingsReflection && observer) {\n observer.path = observable.path_;\n this._rec ordBinding(property, observer);\n }\n if (this.reflect[property]) {\n this.reflectPropertyToAttribute(property);\n }\n retu rn observer;\n }\n },\n bindFinished: function() {\n this.makeEl ementReady();\n },\n _recordBinding: function(name, observer) {\n thi s.bindings_ = this.bindings_ || {};\n this.bindings_[name] = observer;\n },\n // TODO(sorvell): unbind/unbindAll has been removed, as public api, fro m\n // TemplateBinding. We still need to close/dispose of observers but perha ps\n // we should choose a more explicit name.\n asyncUnbindAll: function( ) {\n if (!this._unbound) {\n log.unbind && console.log('[%s] asyncU nbindAll', this.localName);\n this._unbindAllJob = this.job(this._unbindA llJob, this.unbindAll, 0);\n }\n },\n unbindAll: function() {\n if (!this._unbound) {\n this.closeObservers();\n this.closeNamedOb servers();\n this._unbound = true;\n }\n },\n cancelUnbindAll: function() {\n if (this._unbound) {\n log.unbind && console.warn('[ %s] already unbound, cannot cancel unbindAll', this.localName);\n return; \n }\n log.unbind && console.log('[%s] cancelUnbindAll', this.localNam e);\n if (this._unbindAllJob) {\n this._unbindAllJob = this._unbindA llJob.stop();\n }\n }\n };\n\n function unbindNodeTree(node) {\n fo rNodeTree(node, _nodeUnbindAll);\n }\n\n function _nodeUnbindAll(node) {\n node.unbindAll();\n }\n\n function forNodeTree(node, callback) {\n if (node ) {\n callback(node);\n for (var child = node.firstChild; child; child = child.nextSibling) {\n forNodeTree(child, callback);\n }\n }\n }\n\n var mustachePattern = /\\{\\{([^{}]*)}}/;\n\n // exports\n\n scope.bi ndPattern = mustachePattern;\n scope.api.instance.mdv = mdv;\n\n})(Polymer);\n" ,"/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer .github.io/LICENSE.txt\n * The complete set of authors may be found at http://po lymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as par t of the polymer project is also\n * subject to an additional IP rights grant fo und at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n var base = {\n PolymerBase: true,\n job: function(job, callback, wait) {\n if (typeof job === 'string') {\n var n = '___' + job;\n this[n] = Polymer.job.call(this, this[n], callback, wait);\n } else {\n retu rn Polymer.job.call(this, job, callback, wait);\n }\n },\n super: Pol ymer.super,\n // user entry point for element has had its createdCallback cal led\n created: function() {\n },\n // user entry point for element has shadowRoot and is ready for\n // api interaction\n ready: function() {\n },\n createdCallback: function() {\n if (this.templateInstance && this .templateInstance.model) {\n console.warn('Attributes on ' + this.localNa me + ' were data bound ' +\n 'prior to Polymer upgrading the element. This may result in ' +\n 'incorrect binding types.');\n }\n this.created();\n this.prepareElement();\n // TODO(sorvell): replace when ShadowDOMPolyfill issue is corrected\n // https://github.com/Polymer/ ShadowDOM/issues/420\n if (!this.ownerDocument.isStagingDocument || window. ShadowDOMPolyfill) {\n this.makeElementReady();\n }\n },\n // system entry point, do not override\n prepareElement: function() {\n if (this._elementPrepared) {\n console.warn('Element already prepared', this .localName);\n return;\n }\n this._elementPrepared = true;\n // storage for shadowRoots info\n this.shadowRoots = {};\n // insta ll property observers\n this.createPropertyObserver();\n // TODO (sorv ell): temporarily open observer when created\n this.openPropertyObserver(); \n // install boilerplate attributes\n this.copyInstanceAttributes();\ n // process input attributes\n this.takeAttributes();\n // add e vent listeners\n this.addHostListeners();\n },\n makeElementReady: fu nction() {\n if (this._readied) {\n return;\n }\n this._re adied = true;\n this.createComputedProperties();\n // TODO(sorvell): W e could create an entry point here\n // for the user to compute property va lues.\n // process declarative resources\n this.parseDeclarations(this .__proto__);\n // TODO(sorvell): CE polyfill uses unresolved attribute to s imulate\n // :unresolved; remove this attribute to be compatible with nativ e\n // CE.\n this.removeAttribute('unresolved');\n // user entry point\n this.ready();\n // TODO (sorvell): temporarily open observer w hen created\n // turn on property observation and take any initial changes\ n //this.openPropertyObserver();\n },\n attachedCallback: function() {\n this.cancelUnbindAll();\n // invoke user action\n if (this.at tached) {\n this.attached();\n }\n // TODO(sorvell): bc\n if (this.enteredView) {\n this.enteredView();\n }\n // NOTE: do mReady can be used to access elements in dom (descendants,\n // ancestors, siblings) such that the developer is enured to upgrade\n // ordering. If th e element definitions have loaded, domReady\n // can be used to access upgr aded elements.\n if (!this.hasBeenAttached) {\n this.hasBeenAttached = true;\n if (this.domReady) {\n this.async('domReady');\n }\n }\n },\n detachedCallback: function() {\n if (!this.preve ntDispose) {\n this.asyncUnbindAll();\n }\n // invoke user acti on\n if (this.detached) {\n this.detached();\n }\n // TODO (sorvell): bc\n if (this.leftView) {\n this.leftView();\n }\n },\n // TODO(sorvell): bc\n enteredViewCallback: function() {\n thi s.attachedCallback();\n },\n // TODO(sorvell): bc\n leftViewCallback: f unction() {\n this.detachedCallback();\n },\n // TODO(sorvell): bc\n enteredDocumentCallback: function() {\n this.attachedCallback();\n }, \n // TODO(sorvell): bc\n leftDocumentCallback: function() {\n this.d etachedCallback();\n },\n // recursive ancestral <element> initialization, oldest first\n parseDeclarations: function(p) {\n if (p && p.element) { \n this.parseDeclarations(p.__proto__);\n p.parseDeclaration.call( this, p.element);\n }\n },\n // parse input <element> as needed, over ride for custom behavior\n parseDeclaration: function(elementElement) {\n var template = this.fetchTemplate(elementElement);\n if (template) {\n var root = this.shadowFromTemplate(template);\n this.shadowRoots[ele mentElement.name] = root;\n }\n },\n // return a shadow-root template (if desired), override for custom behavior\n fetchTemplate: function(element Element) {\n return elementElement.querySelector('template');\n },\n // utility function that creates a shadow root from a <template>\n shadowFrom Template: function(template) {\n if (template) {\n // make a shadow root\n var root = this.createShadowRoot();\n // stamp template\n // which includes parsing and applying MDV bindings before being\n // inserted (to avoid {{}} in attribute values)\n // e.g. to prevent <img src=\"images/{{icon}}\"> from generating a 404.\n var dom = this.instanc eTemplate(template);\n // append to shadow dom\n root.appendChild( dom);\n // perform post-construction initialization tasks on shadow root\ n this.shadowRootReady(root, template);\n // return the created sh adow root\n return root;\n }\n },\n // utility function that s tamps a <template> into light-dom\n lightFromTemplate: function(template, ref Node) {\n if (template) {\n // TODO(sorvell): mark this element as a n eventController so that\n // event listeners on bound nodes inside it w ill be called on it.\n // Note, the expectation here is that events on al l descendants\n // should be handled by this element.\n this.event Controller = this;\n // stamp template\n // which includes parsing and applying MDV bindings before being\n // inserted (to avoid {{}} in a ttribute values)\n // e.g. to prevent <img src=\"images/{{icon}}\"> from generating a 404.\n var dom = this.instanceTemplate(template);\n / / append to shadow dom\n if (refNode) {\n this.insertBefore(dom, refNode);\n } else {\n this.appendChild(dom);\n }\n // perform post-construction initialization tasks on ahem, light root\n this.shadowRootReady(this);\n // return the created shadow root\n return dom;\n }\n },\n shadowRootReady: function(root) {\n // locate nodes with id and store references to them in this.$ hash\n this.mar shalNodeReferences(root);\n // set up polymer gestures\n PolymerGestur es.register(root);\n },\n // locate nodes with id and store references to them in this.$ hash\n marshalNodeReferences: function(root) {\n // estab lish $ instance variable\n var $ = this.$ = this.$ || {};\n // populat e $ from nodes with ID from the LOCAL tree\n if (root) {\n var n$ = root.querySelectorAll(\"[id]\");\n for (var i=0, l=n$.length, n; (i<l) && (n=n$[i]); i++) {\n $[n.id] = n;\n };\n }\n },\n att ributeChangedCallback: function(name, oldValue) {\n // TODO(sjmiles): adhoc filter\n if (name !== 'class' && name !== 'style') {\n this.attribu teToProperty(name, this.getAttribute(name));\n }\n if (this.attributeC hanged) {\n this.attributeChanged.apply(this, arguments);\n }\n } ,\n onMutation: function(node, listener) {\n var observer = new Mutation Observer(function(mutations) {\n listener.call(this, observer, mutations) ;\n observer.disconnect();\n }.bind(this));\n observer.observe( node, {childList: true, subtree: true});\n }\n };\n\n // true if object has own PolymerBase api\n function isBase(object) {\n return object.hasOwnPrope rty('PolymerBase')\n }\n\n // name a base constructor for dev tools\n\n funct ion PolymerBase() {};\n PolymerBase.prototype = base;\n base.constructor = Pol ymerBase;\n\n // exports\n\n scope.Base = PolymerBase;\n scope.isBase = isBas e;\n scope.api.instance.base = base;\n\n})(Polymer);\n","/*\n * Copyright (c) 2 014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer.github.io/AUTHORS. txt\n * The complete set of contributors may be found at http://polymer.github.i o/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.gi thub.io/PATENTS.txt\n */\n\n(function(scope) {\n\n // imports\n\n var log = wi ndow.logFlags || {};\n \n // magic words\n \n var STYLE_SCOPE_ATTRIBUTE = 'e lement';\n var STYLE_CONTROLLER_SCOPE = 'controller';\n \n var styles = {\n STYLE_SCOPE_ATTRIBUTE: STYLE_SCOPE_ATTRIBUTE,\n /**\n * Installs extern al stylesheets and <style> elements with the attribute \n * polymer-scope='c ontroller' into the scope of element. This is intended\n * to be a called du ring custom element construction.\n */\n installControllerStyles: function () {\n // apply controller styles, but only if they are not yet applied\n var scope = this.findStyleScope();\n if (scope && !this.scopeHasNamedSt yle(scope, this.localName)) {\n // allow inherited controller styles\n var proto = getPrototypeOf(this), cssText = '';\n while (proto && pr oto.element) {\n cssText += proto.element.cssTextForScope(STYLE_CONTROL LER_SCOPE);\n proto = getPrototypeOf(proto);\n }\n if (cs sText) {\n this.installScopeCssText(cssText, scope);\n }\n }\n },\n installScopeStyle: function(style, name, scope) {\n var scop e = scope || this.findStyleScope(), name = name || '';\n if (scope && !this .scopeHasNamedStyle(scope, this.localName + name)) {\n var cssText = '';\ n if (style instanceof Array) {\n for (var i=0, l=style.length, s; (i<l) && (s=style[i]); i++) {\n cssText += s.textContent + '\\n\\n ';\n }\n } else {\n cssText = style.textContent;\n }\n this.installScopeCssText(cssText, scope, name);\n }\n },\n installScopeCssText: function(cssText, scope, name) {\n scope = scope | | this.findStyleScope();\n name = name || '';\n if (!scope) {\n return;\n }\n if (window.ShadowDOMPolyfill) {\n cssText = shim CssText(cssText, scope.host);\n }\n var style = this.element.cssTextTo ScopeStyle(cssText,\n STYLE_CONTROLLER_SCOPE);\n Polymer.applyStyl eToScope(style, scope);\n // cache that this style has been applied\n this.styleCacheForScope(scope)[this.localName + name] = true;\n },\n findS tyleScope: function(node) {\n // find the shadow root that contains this el ement\n var n = node || this;\n while (n.parentNode) {\n n = n. parentNode;\n }\n return n;\n },\n scopeHasNamedStyle: function( scope, name) {\n var cache = this.styleCacheForScope(scope);\n return cache[name];\n },\n styleCacheForScope: function(scope) {\n if (windo w.ShadowDOMPolyfill) {\n var scopeName = scope.host ? scope.host.localNam e : scope.localName;\n return polyfillScopeStyleCache[scopeName] || (poly fillScopeStyleCache[scopeName] = {});\n } else {\n return scope._sco peStyles = (scope._scopeStyles || {});\n }\n }\n };\n\n var polyfillSc opeStyleCache = {};\n \n // NOTE: use raw prototype traversal so that we ensur e correct traversal\n // on platforms where the protoype chain is simulated via __proto__ (IE10)\n function getPrototypeOf(prototype) {\n return prototype. __proto__;\n }\n\n function shimCssText(cssText, host) {\n var name = '', i s = false;\n if (host) {\n name = host.localName;\n is = host.hasAt tribute('is');\n }\n var selector = Platform.ShadowCSS.makeScopeSelector(n ame, is);\n return Platform.ShadowCSS.shimCssText(cssText, selector);\n }\n\ n // exports\n\n scope.api.instance.styles = styles;\n \n})(Polymer);\n","/*\ n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * Thi s code may only be used under the BSD style license found at http://polymer.gith ub.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer .github.io/AUTHORS.txt\n * The complete set of contributors may be found at http ://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found a t http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n // import s\n\n var extend = scope.extend;\n var api = scope.api;\n\n // imperative imp lementation: Polymer()\n\n // specify an 'own' prototype for tag `name`\n func tion element(name, prototype) {\n if (arguments.length === 1 && typeof argume nts[0] !== 'string') {\n prototype = name;\n var script = document._cu rrentScript;\n name = script && script.parentNode && script.parentNode.getA ttribute ?\n script.parentNode.getAttribute('name') : '';\n if (!n ame) {\n throw 'Element name could not be inferred.';\n }\n }\n if (getRegisteredPrototype[name]) {\n throw 'Already registered (Polymer) prototype for element ' + name;\n }\n // cache the prototype\n registe rPrototype(name, prototype);\n // notify the registrar waiting for 'name', if any\n notifyPrototype(name);\n }\n\n // async prototype source\n\n functi on waitingForPrototype(name, client) {\n waitPrototype[name] = client;\n }\n \n var waitPrototype = {};\n\n function notifyPrototype(name) {\n if (waitP rototype[name]) {\n waitPrototype[name].registerWhenReady();\n delete waitPrototype[name];\n }\n }\n\n // utility and bookkeeping\n\n // maps ta g names to prototypes, as registered with\n // Polymer. Prototypes associated w ith a tag name\n // using document.registerElement are available from\n // HTM LElement.getPrototypeForTag().\n // If an element was fully registered by Polym er, then\n // Polymer.getRegisteredPrototype(name) === \n // HTMLElement.get PrototypeForTag(name)\n\n var prototypesByName = {};\n\n function registerProt otype(name, prototype) {\n return prototypesByName[name] = prototype || {};\n }\n\n function getRegisteredPrototype(name) {\n return prototypesByName[na me];\n }\n\n // exports\n\n scope.getRegisteredPrototype = getRegisteredProto type;\n scope.waitingForPrototype = waitingForPrototype;\n\n // namespace shen anigans so we can expose our scope on the registration \n // function\n\n // m ake window.Polymer reference `element()`\n\n window.Polymer = element;\n\n // TODO(sjmiles): find a way to do this that is less terrible\n // copy window.Pol ymer properties onto `element()`\n\n extend(Polymer, scope);\n\n // Under the HTMLImports polyfill, scripts in the main document\n // do not block on imports ; we want to allow calls to Polymer in the main\n // document. Platform collect s those calls until we can process them, which\n // we do here.\n\n var declar ations = Platform.deliverDeclarations();\n if (declarations) {\n for (var i= 0, l=declarations.length, d; (i<l) && (d=declarations[i]); i++) {\n element .apply(null, d);\n }\n }\n\n})(Polymer);\n","/*\n * Copyright (c) 2014 The P olymer Project Authors. All rights reserved.\n * This code may only be used unde r the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The co mplete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * T he complete set of contributors may be found at http://polymer.github.io/CONTRIB UTORS.txt\n * Code distributed by Google as part of the polymer project is also\ n * subject to an additional IP rights grant found at http://polymer.github.io/P ATENTS.txt\n */\n\n(function(scope) {\n\nvar path = {\n resolveElementPaths: fu nction(node) {\n Platform.urlResolver.resolveDom(node);\n },\n addResolvePa thApi: function() {\n // let assetpath attribute modify the resolve path\n var assetPath = this.getAttribute('assetpath') || '';\n var root = new URL(a ssetPath, this.ownerDocument.baseURI);\n this.prototype.resolvePath = functio n(urlPath, base) {\n var u = new URL(urlPath, base || root);\n return u.href;\n };\n }\n};\n\n// exports\nscope.api.declaration.path = path;\n\n}) (Polymer);\n","/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at h ttp://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors ma y be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP ri ghts grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope ) {\n\n // imports\n\n var log = window.logFlags || {};\n var api = scope.api .instance.styles;\n var STYLE_SCOPE_ATTRIBUTE = api.STYLE_SCOPE_ATTRIBUTE;\n\n // magic words\n\n var STYLE_SELECTOR = 'style';\n var STYLE_LOADABLE_MATCH = '@import';\n var SHEET_SELECTOR = 'link[rel=stylesheet]';\n var STYLE_GLOBAL_ SCOPE = 'global';\n var SCOPE_ATTR = 'polymer-scope';\n\n var styles = {\n // returns true if resources are loading\n loadStyles: function(callback) {\n var template = this.fetchTemplate();\n var content = template && this .templateContent();\n if (content) {\n this.convertSheetsToStyles(co ntent);\n var styles = this.findLoadableStyles(content);\n if (sty les.length) {\n var templateUrl = template.ownerDocument.baseURI;\n return Platform.styleResolver.loadStyles(styles, templateUrl, callback);\n }\n }\n if (callback) {\n callback();\n }\n },\ n convertSheetsToStyles: function(root) {\n var s$ = root.querySelectorA ll(SHEET_SELECTOR);\n for (var i=0, l=s$.length, s, c; (i<l) && (s=s$[i]); i++) {\n c = createStyleElement(importRuleForSheet(s, this.ownerDocument. baseURI),\n this.ownerDocument);\n this.copySheetAttributes(c, s);\n s.parentNode.replaceChild(c, s);\n }\n },\n copySheetAt tributes: function(style, link) {\n for (var i=0, a$=link.attributes, l=a$. length, a; (a=a$[i]) && i<l; i++) {\n if (a.name !== 'rel' && a.name !== 'href') {\n style.setAttribute(a.name, a.value);\n }\n }\n },\n findLoadableStyles: function(root) {\n var loadables = [];\n if (root) {\n var s$ = root.querySelectorAll(STYLE_SELECTOR);\n for (var i=0, l=s$.length, s; (i<l) && (s=s$[i]); i++) {\n if (s.textCo ntent.match(STYLE_LOADABLE_MATCH)) {\n loadables.push(s);\n }\n }\n }\n return loadables;\n },\n /**\n * Install external stylesheets loaded in <polymer-element> elements into the \n * elem ent's template.\n * @param elementElement The <element> element to style.\n */\n installSheets: function() {\n this.cacheSheets();\n this.c acheStyles();\n this.installLocalSheets();\n this.installGlobalStyles( );\n },\n /**\n * Remove all sheets from element and store for later u se.\n */\n cacheSheets: function() {\n this.sheets = this.findNodes( SHEET_SELECTOR);\n this.sheets.forEach(function(s) {\n if (s.parentN ode) {\n s.parentNode.removeChild(s);\n }\n });\n },\n cacheStyles: function() {\n this.styles = this.findNodes(STYLE_SELECTOR + '[' + SCOPE_ATTR + ']');\n this.styles.forEach(function(s) {\n if ( s.parentNode) {\n s.parentNode.removeChild(s);\n }\n });\n },\n /**\n * Takes external stylesheets loaded in an <element> element and moves\n * their content into a <style> element inside the <element>'s t emplate.\n * The sheet is then removed from the <element>. This is done only so \n * that if the element is loaded in the main document, the sheet does\ n * not become active.\n * Note, ignores sheets with the attribute 'poly mer-scope'.\n * @param elementElement The <element> element to style.\n */\n installLocalSheets: function () {\n var sheets = this.sheets.filter (function(s) {\n return !s.hasAttribute(SCOPE_ATTR);\n });\n va r content = this.templateContent();\n if (content) {\n var cssText = '';\n sheets.forEach(function(sheet) {\n cssText += cssTextFrom Sheet(sheet) + '\\n';\n });\n if (cssText) {\n var style = createStyleElement(cssText, this.ownerDocument);\n content.insertBefo re(style, content.firstChild);\n }\n }\n },\n findNodes: funct ion(selector, matcher) {\n var nodes = this.querySelectorAll(selector).arra y();\n var content = this.templateContent();\n if (content) {\n var templateNodes = content.querySelectorAll(selector).array();\n nodes = nodes.concat(templateNodes);\n }\n return matcher ? nodes.filter(mat cher) : nodes;\n },\n /**\n * Promotes external stylesheets and <style > elements with the attribute \n * polymer-scope='global' into global scope. \n * This is particularly useful for defining @keyframe rules which \n * currently do not function in scoped or shadow style elements.\n * (See wkb. ug/72462)\n * @param elementElement The <element> element to style.\n */\ n // TODO(sorvell): remove when wkb.ug/72462 is addressed.\n installGlobal Styles: function() {\n var style = this.styleForScope(STYLE_GLOBAL_SCOPE);\ n applyStyleToScope(style, document.head);\n },\n cssTextForScope: fu nction(scopeDescriptor) {\n var cssText = '';\n // handle stylesheets\ n var selector = '[' + SCOPE_ATTR + '=' + scopeDescriptor + ']';\n var matcher = function(s) {\n return matchesSelector(s, selector);\n }; \n var sheets = this.sheets.filter(matcher);\n sheets.forEach(function (sheet) {\n cssText += cssTextFromSheet(sheet) + '\\n\\n';\n });\n // handle cached style elements\n var styles = this.styles.filter(match er);\n styles.forEach(function(style) {\n cssText += style.textConte nt + '\\n\\n';\n });\n return cssText;\n },\n styleForScope: fun ction(scopeDescriptor) {\n var cssText = this.cssTextForScope(scopeDescript or);\n return this.cssTextToScopeStyle(cssText, scopeDescriptor);\n },\n cssTextToScopeStyle: function(cssText, scopeDescriptor) {\n if (cssText ) {\n var style = createStyleElement(cssText);\n style.setAttribut e(STYLE_SCOPE_ATTRIBUTE, this.getAttribute('name') +\n '-' + scopeDes criptor);\n return style;\n }\n }\n };\n\n function importRuleF orSheet(sheet, baseUrl) {\n var href = new URL(sheet.getAttribute('href'), ba seUrl).href;\n return '@import \\'' + href + '\\';';\n }\n\n function apply StyleToScope(style, scope) {\n if (style) {\n if (scope === document) {\ n scope = document.head;\n }\n if (window.ShadowDOMPolyfill) {\ n scope = document.head;\n }\n // TODO(sorvell): necessary for IE\n // see https://connect.microsoft.com/IE/feedback/details/790212/\n // cloning-a-style-element-and-adding-to-document-produces\n // -unexpect ed-result#details\n // var clone = style.cloneNode(true);\n var clone = createStyleElement(style.textContent);\n var attr = style.getAttribute(ST YLE_SCOPE_ATTRIBUTE);\n if (attr) {\n clone.setAttribute(STYLE_SCOPE _ATTRIBUTE, attr);\n }\n // TODO(sorvell): probably too brittle; try t o figure out \n // where to put the element.\n var refNode = scope.fir stElementChild;\n if (scope === document.head) {\n var selector = 's tyle[' + STYLE_SCOPE_ATTRIBUTE + ']';\n var s$ = document.head.querySelec torAll(selector);\n if (s$.length) {\n refNode = s$[s$.length-1] .nextElementSibling;\n }\n }\n scope.insertBefore(clone, refNod e);\n }\n }\n\n function createStyleElement(cssText, scope) {\n scope = scope || document;\n scope = scope.createElement ? scope : scope.ownerDocumen t;\n var style = scope.createElement('style');\n style.textContent = cssTe xt;\n return style;\n }\n\n function cssTextFromSheet(sheet) {\n return (sheet && sheet.__resource) || '';\n }\n\n function matchesSelector(node, inSe lector) {\n if (matches) {\n return matches.call(node, inSelector);\n }\n }\n var p = HTMLElement.prototype;\n var matches = p.matches || p.matche sSelector || p.webkitMatchesSelector \n || p.mozMatchesSelector;\n \n // exports\n\n scope.api.declaration.styles = styles;\n scope.applyStyleToScope = applyStyleToScope;\n \n})(Polymer);\n","/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the B SD style license found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The comp lete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.t xt\n * Code distributed by Google as part of the polymer project is also\n * sub ject to an additional IP rights grant found at http://polymer.github.io/PATENTS. txt\n */\n\n(function(scope) {\n\n // imports\n\n var log = window.logFlags || {};\n var api = scope.api.instance.events;\n var EVENT_PREFIX = api.EVENT_PRE FIX;\n // polymer-element declarative api: events feature\n\n var mixedCaseEve ntTypes = {};\n [\n 'webkitAnimationStart',\n 'webkitAnimationEnd',\n 'webkitTransitionEnd',\n 'DOMFocusOut',\n 'DOMFocusIn',\n 'DOMMouseScro ll'\n ].forEach(function(e) {\n mixedCaseEventTypes[e.toLowerCase()] = e;\n });\n\n var events = {\n parseHostEvents: function() {\n // our delega tes map\n var delegates = this.prototype.eventDelegates;\n // extract data from attributes into delegates\n this.addAttributeDelegates(delegates) ;\n },\n addAttributeDelegates: function(delegates) {\n // for each a ttribute\n for (var i=0, a; a=this.attributes[i]; i++) {\n // does i t have magic marker identifying it as an event delegate?\n if (this.hasEv entPrefix(a.name)) {\n // if so, add the info to delegates\n d elegates[this.removeEventPrefix(a.name)] = a.value.replace('{{', '')\n .replace('}}', '').trim();\n }\n }\n },\n // starts with ' on-'\n hasEventPrefix: function (n) {\n return n && (n[0] === 'o') && (n [1] === 'n') && (n[2] === '-');\n },\n removeEventPrefix: function(n) {\n return n.slice(prefixLength);\n },\n findController: function(node) { \n while (node.parentNode) {\n if (node.eventController) {\n return node.eventController;\n }\n node = node.parentNode;\n }\n return node.host;\n },\n getEventHandler: function(controller, target, method) {\n var events = this;\n return function(e) {\n if (!controller || !controller.PolymerBase) {\n controller = events.fi ndController(target);\n }\n\n var args = [e, e.detail, e.currentTa rget];\n controller.dispatchMethod(controller, method, args);\n };\n },\n prepareEventBinding: function(pathString, name, node) {\n if (! this.hasEventPrefix(name))\n return;\n\n var eventType = this.remove EventPrefix(name);\n eventType = mixedCaseEventTypes[eventType] || eventTyp e;\n\n var events = this;\n\n return function(model, node, oneTime) {\ n var handler = events.getEventHandler(undefined, node, pathString);\n node.addEventListener(eventType, handler);\n\n if (oneTime)\n return;\n\n // TODO(rafaelw): This is really pointless work. Aside fro m the cost\n // of these allocations, NodeBind is going to setAttribute b ack to its\n // current value. Fixing this would mean changing the Templa teBinding\n // binding delegate API.\n function bindingValue() {\n return '{{ ' + pathString + ' }}';\n }\n\n return {\n open: bindingValue,\n discardChanges: bindingValue,\n c lose: function() {\n node.removeEventListener(eventType, handler);\n }\n };\n };\n }\n };\n\n var prefixLength = EVENT_PREF IX.length;\n\n // exports\n scope.api.declaration.events = events;\n\n})(Polym er);\n","/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reser ved.\n * This code may only be used under the BSD style license found at http:// polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at ht tp://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be f ound at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights g rant found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\ n // element api\n\n var properties = {\n inferObservers: function(prototyp e) {\n // called before prototype.observe is chained to inherited object\n var observe = prototype.observe, property;\n for (var n in prototype) {\n if (n.slice(-7) === 'Changed') {\n if (!observe) {\n observe = (prototype.observe = {});\n }\n property = n.sl ice(0, -7)\n observe[property] = observe[property] || n;\n }\n }\n },\n explodeObservers: function(prototype) {\n // called befo re prototype.observe is chained to inherited object\n var o = prototype.obs erve;\n if (o) {\n var exploded = {};\n for (var n in o) {\n var names = n.split(' ');\n for (var i=0, ni; ni=names[i]; i++ ) {\n exploded[ni] = o[n];\n }\n }\n prototype .observe = exploded;\n }\n },\n optimizePropertyMaps: function(protot ype) {\n if (prototype.observe) {\n // construct name list\n var a = prototype._observeNames = [];\n for (var n in prototype.observe) {\n var names = n.split(' ');\n for (var i=0, ni; ni=names[i]; i++) {\n a.push(ni);\n }\n }\n }\n if (pro totype.publish) {\n // construct name list\n var a = prototype._pu blishNames = [];\n for (var n in prototype.publish) {\n a.push(n );\n }\n }\n if (prototype.computed) {\n // construct na me list\n var a = prototype._computedNames = [];\n for (var n in p rototype.computed) {\n a.push(n);\n }\n }\n },\n publ ishProperties: function(prototype, base) {\n // if we have any properties t o publish\n var publish = prototype.publish;\n if (publish) {\n // transcribe `publish` entries onto own prototype\n this.requirePropert ies(publish, prototype, base);\n // construct map of lower-cased property names\n prototype._publishLC = this.lowerCaseMap(publish);\n }\n },\n // sync prototype to property descriptors;\n // desriptor format con tains default value and optionally a\n // hint for reflecting the property to an attribute.\n // e.g. {foo: 5, bar: {value: true, reflect: true}}\n // reflect: {foo: true} is also supported\n //\n requireProperties: function( propertyDescriptors, prototype, base) {\n // reflected properties\n pr ototype.reflect = prototype.reflect || {};\n // ensure a prototype value fo r each property\n // and update the property's reflect to attribute status\ n for (var n in propertyDescriptors) {\n var propertyDescriptor = pr opertyDescriptors[n];\n var reflects = this.reflectHintForDescriptor(prop ertyDescriptor);\n if (prototype.reflect[n] === undefined && reflects !== undefined) {\n prototype.reflect[n] = reflects;\n }\n if (prototype[n] === undefined) {\n prototype[n] = this.valueForDescripto r(propertyDescriptor);\n }\n }\n },\n valueForDescriptor: func tion(propertyDescriptor) {\n var value = typeof propertyDescriptor === 'obj ect' &&\n propertyDescriptor ? propertyDescriptor.value : propertyDescr iptor;\n return value !== undefined ? value : null;\n },\n // returns the value of the descriptor's 'reflect' property or undefined\n reflectHintF orDescriptor: function(propertyDescriptor) {\n if (typeof propertyDescripto r === 'object' &&\n propertyDescriptor && propertyDescriptor.reflect != = undefined) {\n return propertyDescriptor.reflect;\n }\n },\n lowerCaseMap: function(properties) {\n var map = {};\n for (var n in properties) {\n map[n.toLowerCase()] = n;\n }\n return map;\n },\n createPropertyAccessor: function(name) {\n var proto = this.proto type;\n\n var privateName = name + '_';\n var privateObservable = nam e + 'Observable_';\n proto[privateName] = proto[name];\n\n Object.defi neProperty(proto, name, {\n get: function() {\n var observable = this[privateObservable];\n if (observable)\n observable.del iver();\n\n return this[privateName];\n },\n set: functio n(value) {\n var observable = this[privateObservable];\n if (o bservable) {\n observable.setValue(value);\n return;\n }\n\n var oldValue = this[privateName];\n this[privateNa me] = value;\n this.emitPropertyChangeRecord(name, value, oldValue);\n\ n return value;\n },\n configurable: true\n });\n },\n createPropertyAccessors: function(prototype) {\n var n$ = prototyp e._publishNames;\n if (n$ && n$.length) {\n for (var i=0, l=n$.lengt h, n, fn; (i<l) && (n=n$[i]); i++) {\n this.createPropertyAccessor(n);\ n }\n }\n\n var n$ = prototype._computedNames;\n if (n$ && n$.length) {\n for (var i=0, l=n$.length, n, fn; (i<l) && (n=n$[i]); i++ ) {\n this.createPropertyAccessor(n);\n }\n }\n\n }\n } ;\n\n // exports\n\n scope.api.declaration.properties = properties;\n\n})(Poly mer);\n","/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights rese rved.\n * This code may only be used under the BSD style license found at http:/ /polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at h ttp://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Googl e as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n(function(scope) {\n\n // magic words\n\n var ATTRIBUTES_ATTRIBUTE = 'attributes';\n var ATTRIBUTES _REGEX = /\\s|,/;\n\n // attributes api\n\n var attributes = {\n \n inhe ritAttributesObjects: function(prototype) {\n // chain our lower-cased publ ish map to the inherited version\n this.inheritObject(prototype, 'publishLC ');\n // chain our instance attributes map to the inherited version\n this.inheritObject(prototype, '_instanceAttributes');\n },\n\n publishAttr ibutes: function(prototype, base) {\n // merge names from 'attributes' attr ibute\n var attributes = this.getAttribute(ATTRIBUTES_ATTRIBUTE);\n if (attributes) {\n // get properties to publish\n var publish = pro totype.publish || (prototype.publish = {});\n // names='a b c' or names=' a,b,c'\n var names = attributes.split(ATTRIBUTES_REGEX);\n // reco rd each name for publishing\n for (var i=0, l=names.length, n; i<l; i++) {\n // remove excess ws\n n = names[i].trim();\n // i f the user hasn't specified a value, we want to use the\n // default, u nless a superclass has already chosen one\n if (n && publish[n] === und efined) {\n // TODO(sjmiles): querying native properties on IE11 (and possibly\n // on other browsers) throws an exception because there i s no actual\n // instance.\n // In fact, trying to publish native properties is known bad for this\n // and other reasons, and we need to solve this problem writ large.\n try {\n var hasValue = (base[n] !== undefined);\n } catch(x) {\n has Value = false;\n }\n // supply an empty 'descriptor' objec t and let the publishProperties\n // code determine a default\n if (!hasValue) {\n publish[n] = Polymer.nob;\n }\n }\n }\n }\n },\n\n // record clonable attributes fro m <element>\n accumulateInstanceAttributes: function() {\n // inherit in stance attributes\n var clonable = this.prototype._instanceAttributes;\n // merge attributes from element\n var a$ = this.attributes;\n for (var i=0, l=a$.length, a; (i<l) && (a=a$[i]); i++) { \n if (this.isInsta nceAttribute(a.name)) {\n clonable[a.name] = a.value;\n }\n }\n },\n\n isInstanceAttribute: function(name) {\n return !this.blac kList[name] && name.slice(0,3) !== 'on-';\n },\n\n // do not clone these a ttributes onto instances\n blackList: {\n name: 1,\n 'extends': 1,\ n constructor: 1,\n noscript: 1,\n assetpath: 1,\n 'cache-cs stext': 1\n }\n \n };\n\n // add ATTRIBUTES_ATTRIBUTE to the blacklist\n attributes.blackList[ATTRIBUTES_ATTRIBUTE] = 1;\n\n // exports\n\n scope.api .declaration.attributes = attributes;\n\n})(Polymer);\n","/*\n * Copyright (c) 2 014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer.github.io/AUTHORS. txt\n * The complete set of contributors may be found at http://polymer.github.i o/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.gi thub.io/PATENTS.txt\n */\n\n(function(scope) {\n\n // imports\n var events = s cope.api.declaration.events;\n\n var syntax = new PolymerExpressions();\n var prepareBinding = syntax.prepareBinding;\n\n // Polymer takes a first crack at t he binding to see if it's a declarative\n // event handler.\n syntax.prepareBi nding = function(pathString, name, node) {\n return events.prepareEventBindin g(pathString, name, node) ||\n prepareBinding.call(syntax, pathString, name, node);\n };\n\n // declaration api supporting mdv\n var mdv = {\n s yntax: syntax,\n fetchTemplate: function() {\n return this.querySelector ('template');\n },\n templateContent: function() {\n var template = t his.fetchTemplate();\n return template && Platform.templateContent(template );\n },\n installBindingDelegate: function(template) {\n if (template ) {\n template.bindingDelegate = this.syntax;\n }\n }\n };\n\n // exports\n scope.api.declaration.mdv = mdv;\n\n})(Polymer);\n","/*\n * Copyri ght (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICE NSE.txt\n * The complete set of authors may be found at http://polymer.github.io /AUTHORS.txt\n * The complete set of contributors may be found at http://polymer .github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polyme r project is also\n * subject to an additional IP rights grant found at http://p olymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n // imports\n \n v ar api = scope.api;\n var isBase = scope.isBase;\n var extend = scope.extend;\ n\n // prototype api\n\n var prototype = {\n\n register: function(name, ext endeeName) {\n // build prototype combining extendee, Polymer base, and nam ed api\n this.buildPrototype(name, extendeeName);\n // register our cu stom element with the platform\n this.registerPrototype(name, extendeeName) ;\n // reference constructor in a global named by 'constructor' attribute\n this.publishConstructor();\n },\n\n buildPrototype: function(name, e xtendeeName) {\n // get our custom prototype (before chaining)\n var e xtension = scope.getRegisteredPrototype(name);\n // get basal prototype\n var base = this.generateBasePrototype(extendeeName);\n // implement dec larative features\n this.desugarBeforeChaining(extension, base);\n // join prototypes\n this.prototype = this.chainPrototypes(extension, base);\n // more declarative features\n this.desugarAfterChaining(name, extend eeName);\n },\n\n desugarBeforeChaining: function(prototype, base) {\n // back reference declaration element\n // TODO(sjmiles): replace `elemen t` with `elementElement` or `declaration`\n prototype.element = this;\n // transcribe `attributes` declarations onto own prototype's `publish`\n this.publishAttributes(prototype, base);\n // `publish` properties to the p rototype and to attribute watch\n this.publishProperties(prototype, base);\ n // infer observers for `observe` list based on method names\n this.i nferObservers(prototype);\n // desugar compound observer syntax, e.g. 'a b c' \n this.explodeObservers(prototype);\n },\n\n chainPrototypes: fun ction(prototype, base) {\n // chain various meta-data objects to inherited versions\n this.inheritMetaData(prototype, base);\n // chain custom ap i to inherited\n var chained = this.chainObject(prototype, base);\n // x-platform fixup\n ensurePrototypeTraversal(chained);\n return chaine d;\n },\n\n inheritMetaData: function(prototype, base) {\n // chain o bserve object to inherited\n this.inheritObject('observe', prototype, base) ;\n // chain publish object to inherited\n this.inheritObject('publish ', prototype, base);\n // chain reflect object to inherited\n this.inh eritObject('reflect', prototype, base);\n // chain our lower-cased publish map to the inherited version\n this.inheritObject('_publishLC', prototype, base);\n // chain our instance attributes map to the inherited version\n this.inheritObject('_instanceAttributes', prototype, base);\n // chain o ur event delegates map to the inherited version\n this.inheritObject('event Delegates', prototype, base);\n },\n\n // implement various declarative fe atures\n desugarAfterChaining: function(name, extendee) {\n // build sid e-chained lists to optimize iterations\n this.optimizePropertyMaps(this.pro totype);\n this.createPropertyAccessors(this.prototype);\n // install mdv delegate on template\n this.installBindingDelegate(this.fetchTemplate() );\n // install external stylesheets as if they are inline\n this.inst allSheets();\n // adjust any paths in dom from imports\n this.resolveE lementPaths(this);\n // compile list of attributes to copy to instances\n this.accumulateInstanceAttributes();\n // parse on-* delegates declared on `this` element\n this.parseHostEvents();\n //\n // install a helper method this.resolvePath to aid in \n // setting resource urls. e.g.\ n // this.$.image.src = this.resolvePath('images/foo.png')\n this.addR esolvePathApi();\n // under ShadowDOMPolyfill, transforms to approximate mi ssing CSS features\n if (window.ShadowDOMPolyfill) {\n Platform.Shad owCSS.shimStyling(this.templateContent(), name, extendee);\n }\n // al low custom element access to the declarative context\n if (this.prototype.r egisterCallback) {\n this.prototype.registerCallback(this);\n }\n },\n\n // if a named constructor is requested in element, map a reference\n // to the constructor to the given symbol\n publishConstructor: function() {\n var symbol = this.getAttribute('constructor');\n if (symbol) {\n window[symbol] = this.ctor;\n }\n },\n\n // build prototype co mbining extendee, Polymer base, and named api\n generateBasePrototype: functi on(extnds) {\n var prototype = this.findBasePrototype(extnds);\n if (! prototype) {\n // create a prototype based on tag-name extension\n var prototype = HTMLElement.getPrototypeForTag(extnds);\n // insert base api in inheritance chain (if needed)\n prototype = this.ensureBaseApi(pr ototype);\n // memoize this base\n memoizedBases[extnds] = prototy pe;\n }\n return prototype;\n },\n\n findBasePrototype: function (name) {\n return memoizedBases[name];\n },\n\n // install Polymer in stance api into prototype chain, as needed \n ensureBaseApi: function(prototy pe) {\n if (prototype.PolymerBase) {\n return prototype;\n }\n var extended = Object.create(prototype);\n // we need a unique copy of base api for each base prototype\n // therefore we 'extend' here instead o f simply chaining\n api.publish(api.instance, extended);\n // TODO(sjm iles): sharing methods across prototype chains is\n // not supported by 'su per' implementation which optimizes\n // by memoizing prototype relationshi ps.\n // Probably we should have a version of 'extend' that is \n // s hare-aware: it could study the text of each function,\n // look for usage o f 'super', and wrap those functions in\n // closures.\n // As of now, there is only one problematic method, so \n // we just patch it manually.\n // To avoid re-entrancy problems, the special super method\n // insta lled is called `mixinSuper` and the mixin method\n // must use this method instead of the default `super`.\n this.mixinMethod(extended, prototype, api .instance.mdv, 'bind');\n // return buffed-up prototype\n return exten ded;\n },\n\n mixinMethod: function(extended, prototype, api, name) {\n var $super = function(args) {\n return prototype[name].apply(this, arg s);\n };\n extended[name] = function() {\n this.mixinSuper = $s uper;\n return api[name].apply(this, arguments);\n }\n },\n\n // ensure prototype[name] inherits from a prototype.prototype[name]\n inherit Object: function(name, prototype, base) {\n // require an object\n var source = prototype[name] || {};\n // chain inherited properties onto a new object\n prototype[name] = this.chainObject(source, base[name]);\n },\n \n // register 'prototype' to custom element 'name', store constructor \n registerPrototype: function(name, extendee) { \n var info = {\n prot otype: this.prototype\n }\n // native element must be specified in ext ends\n var typeExtension = this.findTypeExtension(extendee);\n if (typ eExtension) {\n info.extends = typeExtension;\n }\n // register the prototype with HTMLElement for name lookup\n HTMLElement.register(name , this.prototype);\n // register the custom type\n this.ctor = documen t.registerElement(name, info);\n },\n\n findTypeExtension: function(name) {\n if (name && name.indexOf('-') < 0) {\n return name;\n } els e {\n var p = this.findBasePrototype(name);\n if (p.element) {\n return this.findTypeExtension(p.element.extends);\n }\n }\n }\n\n };\n\n // memoize base prototypes\n var memoizedBases = {};\n\n // implementation of 'chainObject' depends on support for __proto__\n if (Object._ _proto__) {\n prototype.chainObject = function(object, inherited) {\n if (object && inherited && object !== inherited) {\n object.__proto__ = inh erited;\n }\n return object;\n }\n } else {\n prototype.chainOb ject = function(object, inherited) {\n if (object && inherited && object != = inherited) {\n var chained = Object.create(inherited);\n object = extend(chained, object);\n }\n return object;\n }\n }\n\n // On platforms that do not support __proto__ (versions of IE), the prototype\n // c hain of a custom element is simulated via installation of __proto__.\n // Altho ugh custom elements manages this, we install it here so it's\n // available dur ing desugaring.\n function ensurePrototypeTraversal(prototype) {\n if (!Obje ct.__proto__) {\n var ancestor = Object.getPrototypeOf(prototype);\n p rototype.__proto__ = ancestor;\n if (isBase(ancestor)) {\n ancestor. __proto__ = Object.getPrototypeOf(ancestor);\n }\n }\n }\n\n // export s\n\n api.declaration.prototype = prototype;\n\n})(Polymer);\n","/*\n * Copyrig ht (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICEN SE.txt\n * The complete set of authors may be found at http://polymer.github.io/ AUTHORS.txt\n * The complete set of contributors may be found at http://polymer. github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://po lymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n /*\n\n Elements a re added to a registration queue so that they register in \n the proper order at the appropriate time. We do this for a few reasons:\n\n * to enable eleme nts to load resources (like stylesheets) \n asynchronously. We need to do thi s until the platform provides an efficient\n alternative. One issue is that r emote @import stylesheets are \n re-fetched whenever stamped into a shadowRoo t.\n\n * to ensure elements loaded 'at the same time' (e.g. via some set of\n imports) are registered as a batch. This allows elements to be enured from\n upgrade ordering as long as they query the dom tree 1 task after\n upgrad e (aka domReady). This is a performance tradeoff. On the one hand,\n elements that could register while imports are loading are prevented from \n doing so . On the other, grouping upgrades into a single task means less\n incremental work (for example style recalcs), Also, we can ensure the \n document is in a known state at the single quantum of time when \n elements upgrade.\n\n * /\n var queue = {\n\n // tell the queue to wait for an element to be ready\n wait: function(element) {\n if (!element.__queue) {\n element.__ queue = {};\n elements.push(element);\n }\n },\n\n // enqueue an element to the next spot in the queue.\n enqueue: function(element, check, go) {\n var shouldAdd = element.__queue && !element.__queue.check;\n if (shouldAdd) {\n queueForElement(element).push(element);\n eleme nt.__queue.check = check;\n element.__queue.go = go;\n }\n retu rn (this.indexOf(element) !== 0);\n },\n\n indexOf: function(element) {\n var i = queueForElement(element).indexOf(element);\n if (i >= 0 && doc ument.contains(element)) {\n i += (HTMLImports.useNative || HTMLImports.r eady) ? \n importQueue.length : 1e9;\n }\n return i; \n } ,\n\n // tell the queue an element is ready to be registered\n go: functio n(element) {\n var readied = this.remove(element);\n if (readied) {\n element.__queue.flushable = true;\n this.addToFlushQueue(readied); \n this.check();\n }\n },\n\n remove: function(element) {\n var i = this.indexOf(element);\n if (i !== 0) {\n //console.warn( 'queue order wrong', i);\n return;\n }\n return queueForElement (element).shift();\n },\n\n check: function() {\n // next\n var element = this.nextElement();\n if (element) {\n element.__queue.che ck.call(element);\n }\n if (this.canReady()) {\n this.ready();\ n return true;\n }\n },\n\n nextElement: function() {\n r eturn nextQueued();\n },\n\n canReady: function() {\n return !this.wa itToReady && this.isEmpty();\n },\n\n isEmpty: function() {\n for (va r i=0, l=elements.length, e; (i<l) && \n (e=elements[i]); i++) {\n if (e.__queue && !e.__queue.flushable) {\n return;\n }\n }\n return true;\n },\n\n addToFlushQueue: function(element) {\n flushQueue.push(element); \n },\n\n flush: function() {\n // preve nt re-entrance\n if (this.flushing) {\n return;\n }\n if ( flushQueue.length) {\n console.warn('flushing %s elements', flushQueue.le ngth);\n }\n this.flushing = true;\n var element;\n while (f lushQueue.length) {\n element = flushQueue.shift();\n element.__qu eue.go.call(element);\n element.__queue = null;\n }\n this.flus hing = false;\n },\n\n ready: function() {\n this.flush();\n // TODO(sorvell): As an optimization, turn off CE polyfill upgrading\n // whil e registering. This way we avoid having to upgrade each document\n // piece meal per registration and can instead register all elements\n // and upgrad e once in a batch. Without this optimization, upgrade time\n // degrades si gnificantly when SD polyfill is used. This is mainly because\n // querying the document tree for elements is slow under the SD polyfill.\n if (CustomE lements.ready === false) {\n CustomElements.upgradeDocumentTree(document) ;\n CustomElements.ready = true;\n }\n Platform.flush();\n requestAnimationFrame(this.flushReadyCallbacks);\n },\n\n addReadyCallbac k: function(callback) {\n if (callback) {\n readyCallbacks.push(call back);\n }\n },\n\n flushReadyCallbacks: function() {\n if (read yCallbacks) {\n var fn;\n while (readyCallbacks.length) {\n fn = readyCallbacks.shift();\n fn();\n }\n }\n },\n\n waitToReady: true\n\n };\n\n var elements = [];\n var flushQueue = [];\n var importQueue = [];\n var mainQueue = [];\n var readyCallbacks = [];\n\n f unction queueForElement(element) {\n return document.contains(element) ? main Queue : importQueue;\n }\n\n function nextQueued() {\n return importQueue.l ength ? importQueue[0] : mainQueue[0];\n }\n\n var polymerReadied = false; \n\ n document.addEventListener('WebComponentsReady', function() {\n CustomEleme nts.ready = false;\n });\n \n function whenPolymerReady(callback) {\n queu e.waitToReady = true;\n CustomElements.ready = false;\n HTMLImports.whenIm portsReady(function() {\n queue.addReadyCallback(callback);\n queue.wa itToReady = false;\n queue.check();\n });\n }\n\n // exports\n scope. elements = elements;\n scope.queue = queue;\n scope.whenReady = scope.whenPoly merReady = whenPolymerReady;\n})(Polymer);\n","/*\n * Copyright (c) 2014 The Pol ymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The comp lete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUT ORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PAT ENTS.txt\n */\n\n(function(scope) {\n\n var whenPolymerReady = scope.whenPolyme rReady;\n\n function importElements(elementOrFragment, callback) {\n if (ele mentOrFragment) {\n document.head.appendChild(elementOrFragment);\n wh enPolymerReady(callback);\n } else if (callback) {\n callback();\n }\ n }\n\n function importUrls(urls, callback) {\n if (urls && urls.length) {\ n var frag = document.createDocumentFragment();\n for (var i=0, l= urls.length, url, link; (i<l) && (url=urls[i]); i++) {\n link = documen t.createElement('link');\n link.rel = 'import';\n link.href = url;\n frag.appendChild(link);\n }\n importElements(frag, callback);\n } else if (callback) {\n callback();\n }\n }\n\n // e xports\n scope.import = importUrls;\n scope.importElements = importElements;\n \n})(Polymer);\n","/*\n * Copyright (c) 2014 The Polymer Project Authors. All ri ghts reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be f ound at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributor s may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional I P rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(s cope) {\n\n // imports\n\n var extend = scope.extend;\n var api = scope.api;\ n var queue = scope.queue;\n var whenPolymerReady = scope.whenPolymerReady;\n var getRegisteredPrototype = scope.getRegisteredPrototype;\n var waitingForPro totype = scope.waitingForPrototype;\n\n // declarative implementation: <polymer -element>\n\n var prototype = extend(Object.create(HTMLElement.prototype), {\n\ n createdCallback: function() {\n if (this.getAttribute('name')) {\n this.init();\n }\n },\n\n init: function() {\n // fetch decl ared values\n this.name = this.getAttribute('name');\n this.extends = this.getAttribute('extends');\n queue.wait(this);\n // initiate any as ync resource fetches\n this.loadResources();\n // register when all co nstraints are met\n this.registerWhenReady();\n },\n\n // TODO(sorvel l): we currently queue in the order the prototypes are \n // registered, but we should queue in the order that polymer-elements\n // are registered. We ar e currently blocked from doing this based on \n // crbug.com/395686.\n reg isterWhenReady: function() {\n if (this.registered\n || this.waitingFo rPrototype(this.name)\n || this.waitingForQueue()\n || this.waitingF orResources()) {\n return;\n }\n queue.go(this);\n },\n\n _register: function() {\n //console.log('registering', this.name);\n // warn if extending from a custom element not registered via Polymer\n i f (isCustomTag(this.extends) && !isRegistered(this.extends)) {\n console. warn('%s is attempting to extend %s, an unregistered element ' +\n 'o r one that was not registered with Polymer.', this.name,\n this.exten ds);\n }\n this.register(this.name, this.extends);\n this.registe red = true;\n },\n\n waitingForPrototype: function(name) {\n if (!get RegisteredPrototype(name)) {\n // then wait for a prototype\n wait ingForPrototype(name, this);\n // emulate script if user is not supplying one\n this.handleNoScript(name);\n // prototype not ready yet\n return true;\n }\n },\n\n handleNoScript: function(name) {\n // if explicitly marked as 'noscript'\n if (this.hasAttribute('noscript' ) && !this.noscript) {\n this.noscript = true;\n // imperative ele ment registration\n Polymer(name);\n }\n },\n\n waitingForReso urces: function() {\n return this._needsResources;\n },\n\n // NOTE: Elements must be queued in proper order for inheritance/composition\n // depe ndency resolution. Previously this was enforced for inheritance,\n // and by rule for composition. It's now entirely by rule.\n waitingForQueue: function( ) {\n return queue.enqueue(this, this.registerWhenReady, this._register);\n },\n\n loadResources: function() {\n this._needsResources = true;\n this.loadStyles(function() {\n this._needsResources = false;\n this.registerWhenReady();\n }.bind(this));\n }\n\n });\n\n // semi-p luggable APIs \n\n // TODO(sjmiles): should be fully pluggable (aka decoupled, currently\n // the various plugins are allowed to depend on each other directly )\n api.publish(api.declaration, prototype);\n\n // utility and bookkeeping\n\ n function isRegistered(name) {\n return Boolean(HTMLElement.getPrototypeFor Tag(name));\n }\n\n function isCustomTag(name) {\n return (name && name.ind exOf('-') >= 0);\n }\n\n // boot tasks\n\n whenPolymerReady(function() {\n document.body.removeAttribute('unresolved');\n document.dispatchEvent(\n new CustomEvent('polymer-ready', {bubbles: true})\n );\n });\n\n // regis ter polymer-element with document\n\n document.registerElement('polymer-element ', {prototype: prototype});\n\n})(Polymer);\n","/*\n * Copyright (c) 2014 The Po lymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The com plete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * Th e complete set of contributors may be found at http://polymer.github.io/CONTRIBU TORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PA TENTS.txt\n */\n\n/**\n * The `auto-binding` element extends the template elemen t. It provides a quick \n * and easy way to do data binding without the need to setup a model. \n * The `auto-binding` element itself serves as the model and co ntroller for the \n * elements it contains. Both data and event handlers can be bound. \n *\n * The `auto-binding` element acts just like a template that is bou nd to \n * a model. It stamps its content in the dom adjacent to itself. When th e \n * content is stamped, the `template-bound` event is fired.\n *\n * Example: \n *\n * <template is=\"auto-binding\">\n * <div>Say something: <input value=\"{{value}}\"></div>\n * <div>You said: {{value}}</div>\n * < button on-tap=\"{{buttonTap}}\">Tap me!</button>\n * </template>\n * <sc ript>\n * var template = document.querySelector('template');\n * tem plate.value = 'something';\n * template.buttonTap = function() {\n * console.log('tap!');\n * };\n * </script>\n *\n * @module Polymer\n * @status stable\n*/\n\n(function() {\n\n var element = document.createElement ('polymer-element');\n element.setAttribute('name', 'auto-binding');\n element .setAttribute('extends', 'template');\n element.init();\n\n Polymer('auto-bind ing', {\n\n createdCallback: function() {\n this.syntax = this.bindingDe legate = this.makeSyntax();\n // delay stamping until polymer-ready so that auto-binding is not\n // required to load last.\n Polymer.whenPolymer Ready(function() {\n this.model = this;\n this.setAttribute('bind' , '');\n // we don't bother with an explicit signal here, we could ust a MO\n // if necessary\n this.async(function() {\n // note: this will marshall *all* the elements in the parentNode\n // rather th an just stamped ones. We'd need to use createInstance\n // to fix this or something else fancier.\n this.marshalNodeReferences(this.parentNode );\n // template stamping is asynchronous so stamping isn't complete\n // by polymer-ready; fire an event so users can use stamped elements\n this.fire('template-bound');\n });\n }.bind(this));\n }, \n\n makeSyntax: function() {\n var events = Object.create(Polymer.api.d eclaration.events);\n var self = this;\n events.findController = funct ion() { return self.model; };\n\n var syntax = new PolymerExpressions();\n var prepareBinding = syntax.prepareBinding; \n syntax.prepareBinding = function(pathString, name, node) {\n return events.prepareEventBinding( pathString, name, node) ||\n prepareBinding.call(syntax, pathStrin g, name, node);\n };\n return syntax;\n }\n\n });\n\n})();\n"]} 1 {"version":3,"file":"polymer.js","sources":["../polymer-gestures/src/scope.js"," ../polymer-gestures/src/targetfind.js","../polymer-gestures/src/touch-action.js" ,"../polymer-gestures/src/eventFactory.js","../polymer-gestures/src/pointermap.j s","../polymer-gestures/src/dispatcher.js","../polymer-gestures/src/mouse.js",". ./polymer-gestures/src/touch.js","../polymer-gestures/src/ms.js","../polymer-ges tures/src/pointer.js","../polymer-gestures/src/platform-events.js","../polymer-g estures/src/track.js","../polymer-gestures/src/hold.js","../polymer-gestures/src /tap.js","../polymer-expressions/third_party/esprima/esprima.js","../polymer-exp ressions/src/polymer-expressions.js","build/polymer-versioned.js","src/boot.js", "src/lib/lang.js","src/lib/job.js","src/lib/dom.js","src/lib/super.js","src/lib/ deserialize.js","src/api.js","src/instance/utils.js","src/instance/events.js","s rc/instance/attributes.js","src/instance/properties.js","src/instance/mdv.js","s rc/instance/base.js","src/instance/styles.js","src/declaration/polymer.js","src/ declaration/path.js","src/declaration/styles.js","src/declaration/events.js","sr c/declaration/properties.js","src/declaration/attributes.js","src/declaration/md v.js","src/declaration/prototype.js","src/declaration/queue.js","src/declaration /import.js","src/declaration/polymer-element.js","src/lib/auto-binding.js"],"nam es":[],"mappings":";;;;;;;;;;AASA,OAAA,mBCAA,SAAA,GACA,GAAA,IAAA,EAGA,EAAA,SAAA, cAAA,OACA,IAAA,EAAA,iBAAA,CACA,GAAA,GAAA,EAAA,mBACA,EAAA,SAAA,cAAA,OACA,GAAA,YAA A,GACA,EAAA,iBAAA,WAAA,SAAA,GACA,EAAA,OAEA,EAAA,EAAA,KAAA,KAAA,GAEA,EAAA,mBAEA,I AAA,GAAA,GAAA,aAAA,YAAA,SAAA,GAEA,UAAA,KAAA,YAAA,GACA,EAAA,cAAA,GACA,EAAA,WAAA,Y AAA,GACA,EAAA,EAAA,KAEA,EAAA,IAEA,IAAA,IACA,OAAA,SAAA,GACA,MAAA,GACA,EAAA,YAAA,E AAA,iBADA,QAIA,UAAA,SAAA,GACA,MAAA,IAAA,QAAA,EAAA,mBAEA,gBAAA,SAAA,GACA,GAAA,GAA A,KAAA,OAAA,EACA,OAAA,MAAA,UAAA,GACA,EADA,QAIA,YAAA,SAAA,GACA,GAAA,GAAA,EAAA,eAC A,KAAA,EAAA,CACA,GAAA,GAAA,EAAA,cAAA,SACA,KACA,EAAA,EAAA,iBAGA,MAAA,IAEA,WAAA,SA AA,GAEA,IADA,GAAA,MAAA,EAAA,KAAA,OAAA,GACA,GACA,EAAA,KAAA,GACA,EAAA,KAAA,YAAA,EA EA,OAAA,IAEA,WAAA,SAAA,EAAA,EAAA,GACA,GAAA,GAAA,CACA,OAAA,IACA,EAAA,EAAA,iBAAA,E AAA,GACA,EAEA,EAAA,KAAA,gBAAA,GACA,IAAA,WAEA,EAAA,KAAA,YAAA,IAGA,KAAA,WAAA,EAAA, EAAA,IAAA,GAVA,QAaA,MAAA,SAAA,GACA,IAAA,EACA,MAAA,SAIA,KAFA,GAAA,GAAA,EAEA,EAAA, YACA,EAAA,EAAA,UAMA,OAHA,GAAA,UAAA,KAAA,eAAA,EAAA,UAAA,KAAA,yBACA,EAAA,UAEA,GAEA ,WAAA,SAAA,GACA,GAAA,GAAA,EAAA,KACA,MAAA,GAAA,KAAA,EAEA,IAAA,GAAA,EAAA,QAAA,EAAA ,EAAA,QAEA,EAAA,KAAA,MAAA,EAAA,OAKA,OAHA,GAAA,iBAAA,EAAA,KACA,EAAA,UAEA,KAAA,WAA A,EAAA,EAAA,IAEA,gBAAA,SAAA,GACA,GAAA,EACA,IAAA,GAAA,EAAA,MAEA,IAAA,GADA,GAAA,EA AA,KACA,EAAA,EAAA,EAAA,EAAA,OAAA,IAEA,GADA,EAAA,EAAA,GACA,EAAA,WAAA,KAAA,cAAA,EA AA,aAAA,gBACA,MAAA,GAAA,aAAA,oBAKA,KADA,EAAA,EAAA,OACA,GAAA,CACA,GAAA,EAAA,aAAA, gBACA,MAAA,GAAA,aAAA,eAEA,GAAA,EAAA,YAAA,EAAA,KAIA,MAAA,QAEA,IAAA,SAAA,EAAA,GACA ,GAAA,IAAA,EACA,MAAA,EAEA,IAAA,IAAA,EACA,MAAA,EAEA,IAAA,IAAA,EACA,MAAA,EAEA,KAAA ,IAAA,EACA,MAAA,SAGA,IAAA,EAAA,UAAA,EAAA,SAAA,GACA,MAAA,EAEA,IAAA,EAAA,UAAA,EAAA ,SAAA,GACA,MAAA,EAEA,IAAA,GAAA,KAAA,MAAA,GACA,EAAA,KAAA,MAAA,GACA,EAAA,EAAA,CAMA ,KALA,GAAA,EACA,EAAA,KAAA,KAAA,EAAA,GAEA,EAAA,KAAA,KAAA,GAAA,GAEA,GAAA,GAAA,IAAA ,GACA,EAAA,EAAA,YAAA,EAAA,KACA,EAAA,EAAA,YAAA,EAAA,IAEA,OAAA,IAEA,KAAA,SAAA,EAAA ,GACA,IAAA,GAAA,GAAA,EAAA,GAAA,EAAA,EAAA,IACA,EAAA,EAAA,YAAA,EAAA,IAEA,OAAA,IAEA ,MAAA,SAAA,GAEA,IADA,GAAA,GAAA,EACA,GACA,IACA,EAAA,EAAA,YAAA,EAAA,IAEA,OAAA,IAEA ,aAAA,SAAA,EAAA,GACA,GAAA,GAAA,KAAA,IAAA,EAAA,EAEA,OAAA,KAAA,GAEA,WAAA,SAAA,EAAA ,EAAA,GACA,GAAA,GAAA,EAAA,uBACA,OAAA,GAAA,MAAA,GAAA,GAAA,EAAA,OAAA,EAAA,KAAA,GAA A,GAAA,EAAA,QAGA,GAAA,cAAA,EAOA,EAAA,WAAA,EAAA,WAAA,KAAA,GASA,EAAA,aAAA,EAAA,aAA A,KAAA,GAqBA,EAAA,WAAA,EAAA,YAEA,OAAA,iBC3NA,WACA,QAAA,GAAA,GACA,MAAA,eAAA,EAAA, GAEA,QAAA,GAAA,GACA,MAAA,kBAAA,EAAA,KAEA,QAAA,GAAA,GACA,MAAA,uBAAA,EAAA,mBAAA,EA AA,KAEA,GAAA,IACA,OACA,OACA,QACA,SAEA,KAAA,cACA,WACA,cACA,gBAGA,gBAEA,EAAA,GAEA, EAAA,gBAAA,UAAA,KAAA,MAAA,YAEA,GAAA,OAAA,mBAAA,SAAA,KAAA,gBAEA,IAAA,EAAA,CACA,EA AA,QAAA,SAAA,GACA,OAAA,KAAA,GACA,GAAA,EAAA,GAAA,EAAA,GAAA,KACA,IACA,GAAA,EAAA,GA AA,EAAA,GAAA,QAGA,GAAA,EAAA,UAAA,IAAA,GAAA,EAAA,EAAA,MAAA,KACA,IACA,GAAA,EAAA,UA AA,IAAA,GAAA,EAAA,EAAA,MAAA,QAKA,IAAA,GAAA,SAAA,cAAA,QACA,GAAA,YAAA,EACA,SAAA,KA AA,YAAA,OClCA,SAAA,GAEA,GAAA,IACA,UACA,aACA,OACA,SACA,UACA,UACA,UACA,UACA,UACA,S ACA,WACA,UACA,SACA,gBACA,QACA,SAGA,IACA,GACA,EACA,KACA,KACA,EACA,EACA,EACA,GACA, GACA,GACA,GACA,EACA,EACA,KACA,EACA,GAGA,EAAA,WAAA,MAAA,eAEA,GAEA,WAAA,EACA,cAAA, SAAA,EAAA,GACA,GAAA,GAAA,SAAA,YAAA,QAGA,OAFA,GAAA,UAAA,EAAA,EAAA,UAAA,EAAA,EAAA, aAAA,GACA,EAAA,WAAA,EAAA,WAAA,GACA,GAEA,iBAAA,SAAA,EAAA,GACA,EAAA,GAAA,OAAA,OAAA ,KAGA,KAAA,GAAA,GADA,EAAA,KAAA,cAAA,EAAA,GACA,EAAA,EAAA,EAAA,OAAA,KAAA,GAAA,EAAA ,EAAA,OAAA,IACA,EAAA,EAAA,GACA,EAAA,GAAA,EAAA,EAEA,OAAA,IAEA,iBAAA,SAAA,EAAA,GAC A,EAAA,GAAA,OAAA,OAAA,KAIA,KAAA,GAAA,GAFA,EAAA,KAAA,cAAA,EAAA,GAEA,EAAA,EAAA,EAA A,EAAA,OAAA,IACA,EAAA,EAAA,GACA,EAAA,GAAA,EAAA,IAAA,EAAA,EAEA,GAAA,QAAA,EAAA,SAA A,CAIA,IAAA,GAAA,CAsBA,OApBA,GADA,EAAA,SACA,EAAA,SAEA,EAAA,QAAA,GAAA,EAIA,EAAA,E AAA,EAAA,QACA,EAAA,EAAA,EAAA,QAGA,EAAA,UAAA,EAAA,WAAA,EACA,EAAA,MAAA,EAAA,OAAA,E ACA,EAAA,OAAA,EAAA,QAAA,EACA,EAAA,SAAA,EACA,EAAA,MAAA,EAAA,OAAA,EACA,EAAA,MAAA,E AAA,OAAA,EACA,EAAA,YAAA,EAAA,aAAA,GACA,EAAA,YAAA,EAAA,aAAA,EACA,EAAA,UAAA,EAAA,Y AAA,EACA,EAAA,QAAA,EAAA,SAAA,GACA,GAIA,GAAA,aAAA,GACA,OAAA,iBChHA,SAAA,GAGA,QAAA ,KACA,GAAA,EAAA,CACA,GAAA,GAAA,GAAA,IAEA,OADA,GAAA,SAAA,EACA,EAEA,KAAA,QACA,KAAA ,UATA,GAAA,GAAA,OAAA,KAAA,OAAA,IAAA,UAAA,QACA,EAAA,WAAA,MAAA,MAAA,KAYA,GAAA,WACA ,IAAA,SAAA,EAAA,GACA,GAAA,GAAA,KAAA,KAAA,QAAA,EACA,GAAA,GACA,KAAA,OAAA,GAAA,GAEA ,KAAA,KAAA,KAAA,GACA,KAAA,OAAA,KAAA,KAGA,IAAA,SAAA,GACA,MAAA,MAAA,KAAA,QAAA,GAAA ,IAEA,SAAA,SAAA,GACA,GAAA,GAAA,KAAA,KAAA,QAAA,EACA,GAAA,KACA,KAAA,KAAA,OAAA,EAAA ,GACA,KAAA,OAAA,OAAA,EAAA,KAGA,IAAA,SAAA,GACA,GAAA,GAAA,KAAA,KAAA,QAAA,EACA,OAAA ,MAAA,OAAA,IAEA,MAAA,WACA,KAAA,KAAA,OAAA,EACA,KAAA,OAAA,OAAA,GAGA,QAAA,SAAA,EAAA ,GACA,KAAA,OAAA,QAAA,SAAA,EAAA,GACA,EAAA,KAAA,EAAA,EAAA,KAAA,KAAA,GAAA,OACA,OAEA ,SAAA,WACA,MAAA,MAAA,KAAA,SAIA,EAAA,WAAA,GACA,OAAA,iBCzDA,SAAA,GACA,GAAA,IAEA,UA CA,aACA,OACA,SACA,UACA,UACA,UACA,UACA,UACA,SACA,WACA,UACA,SACA,gBAEA,UAEA,YACA,Q ACA,SACA,WACA,QACA,QACA,cACA,cACA,YAEA,OACA,SACA,gBACA,QACA,QACA,QACA,YAEA,aACA, eACA,WAGA,IAEA,GACA,EACA,KACA,KACA,EACA,EACA,EACA,GACA,GACA,GACA,GACA,EACA,EACA, KAEA,EAEA,EACA,EACA,EACA,EACA,EACA,EACA,GACA,GACA,EAEA,GACA,KACA,KACA,EACA,EACA, EACA,EACA,cACA,GAGA,EAAA,mBAAA,oBAEA,EAAA,EAAA,aAcA,GACA,WAAA,GAAA,GAAA,WACA,SAA A,OAAA,OAAA,MAGA,aAAA,OAAA,OAAA,MACA,mBACA,YAEA,eAEA,MAAA,UAAA,EAAA,MAAA,IACA,IA AA,UAAA,EAAA,MAAA,KAEA,gBASA,eAAA,SAAA,EAAA,GACA,GAAA,GAAA,EACA,EAAA,EAAA,MACA,K ACA,EAAA,QAAA,SAAA,GACA,EAAA,KACA,KAAA,SAAA,GAAA,EAAA,GAAA,KAAA,KAEA,MACA,KAAA,a AAA,GAAA,EACA,KAAA,gBAAA,KAAA,KAGA,gBAAA,SAAA,EAAA,GACA,GAAA,GAAA,OAAA,OAAA,KACA ,GAAA,UAAA,EACA,EAAA,MAAA,KAAA,SAAA,MACA,KAAA,GAAA,GAAA,EAAA,EAAA,EAAA,EAAA,QAAA ,OAAA,IACA,EAAA,EAAA,QAAA,GAAA,cACA,KAAA,cAAA,GAAA,CAEA,MAAA,SAAA,KAAA,IAEA,SAAA ,SAAA,EAAA,GAEA,IAAA,GAAA,GADA,EAAA,KAAA,gBAAA,OACA,EAAA,EAAA,EAAA,IAAA,EAAA,KAA A,gBAAA,IAAA,IAEA,EAAA,SAAA,KAAA,EAAA,EAAA,IAGA,WAAA,SAAA,GAEA,IAAA,GAAA,GADA,EA AA,KAAA,gBAAA,OACA,EAAA,EAAA,EAAA,IAAA,EAAA,KAAA,gBAAA,IAAA,IAEA,EAAA,WAAA,KAAA, EAAA,IAIA,KAAA,SAAA,GACA,KAAA,UAAA,OAAA,IAEA,KAAA,SAAA,GAEA,EAAA,KAAA,OACA,KAAA, iBAAA,IAEA,GAAA,SAAA,GACA,KAAA,UAAA,KAAA,IAEA,OAAA,SAAA,GACA,EAAA,cAAA,EACA,KAAA ,UAAA,KAAA,IAGA,aAAA,SAAA,GAOA,IAAA,EAAA,aAAA,CAGA,GAAA,GAAA,EAAA,KACA,EAAA,KAAA ,UAAA,KAAA,SAAA,EACA,IACA,EAAA,GAEA,EAAA,cAAA,IAGA,OAAA,SAAA,EAAA,GACA,IAAA,GAAA ,GAAA,EAAA,EAAA,EAAA,EAAA,OAAA,EAAA,IAAA,EAAA,EAAA,IAAA,IACA,KAAA,SAAA,EAAA,IAIA ,SAAA,SAAA,EAAA,GACA,IAAA,GAAA,GAAA,EAAA,EAAA,EAAA,EAAA,OAAA,EAAA,IAAA,EAAA,EAAA ,IAAA,IACA,KAAA,YAAA,EAAA,IAGA,SAAA,SAAA,EAAA,GACA,EAAA,iBAAA,EAAA,KAAA,eAEA,YAA A,SAAA,EAAA,GACA,EAAA,oBAAA,EAAA,KAAA,eAWA,UAAA,SAAA,EAAA,GACA,GAAA,GAAA,EAAA,iB AAA,EAAA,EAIA,OAHA,GAAA,eAAA,EAAA,eACA,EAAA,aAAA,EAAA,aACA,EAAA,QAAA,EAAA,SAAA,E AAA,OACA,GAGA,UAAA,SAAA,EAAA,GACA,GAAA,GAAA,KAAA,UAAA,EAAA,EACA,OAAA,MAAA,cAAA,I ASA,WAAA,SAAA,GAEA,IAAA,GADA,GAAA,EAAA,OAAA,OAAA,MACA,EAAA,EAAA,EAAA,EAAA,OAAA,I ACA,EAAA,EAAA,GACA,EAAA,GAAA,EAAA,IAAA,EAAA,IAIA,WAAA,GAAA,kBAAA,IACA,GAAA,EAAA, YAAA,sBACA,EAAA,GAAA,EAAA,GAAA,wBAQA,OAHA,GAAA,eAAA,WACA,EAAA,kBAEA,GAQA,cAAA,SA AA,GACA,GAAA,GAAA,EAAA,OACA,IAAA,EAAA,CACA,EAAA,cAAA,EAGA,IAAA,GAAA,KAAA,WAAA,EA CA,GAAA,OAAA,EACA,KAAA,iBAAA,KAGA,eAAA,WAEA,IAAA,GAAA,GAAA,EAAA,EAAA,EAAA,KAAA,a AAA,OAAA,IAAA,CACA,EAAA,KAAA,aAAA,EACA,KAAA,GAAA,GAAA,EAAA,EAAA,EAAA,EAAA,KAAA,S AAA,OAAA,IACA,EAAA,KAAA,SAAA,GACA,EAAA,EAAA,EAAA,MACA,EAAA,SAAA,GACA,EAAA,KAAA,E AAA,GAIA,KAAA,aAAA,OAAA,GAEA,iBAAA,SAAA,GAEA,KAAA,aAAA,QACA,sBAAA,KAAA,qBAEA,KAA A,aAAA,KAAA,IAGA,GAAA,aAAA,EAAA,aAAA,KAAA,GACA,EAAA,oBAAA,EAAA,eAAA,KAAA,GACA,EA AA,WAAA,EAWA,EAAA,gBAAA,SAAA,EAAA,GACA,GAAA,GAAA,EAAA,cACA,EAAA,EAAA,cAAA,EACA,I AAA,EAAA,CACA,GAAA,GAAA,EAAA,SAAA,EAAA,MAYA,IAXA,IAAA,EAAA,WACA,IACA,EAAA,SAAA,G AGA,EAAA,YACA,EAAA,eACA,EAAA,SAAA,GACA,EAAA,aAAA,GAGA,EAAA,CACA,GACA,GADA,EAAA,E AAA,gBAAA,EAAA,eAAA,EAEA,QAAA,EAAA,UACA,IAAA,MAAA,aACA,EAAA,CACA,MACA,KAAA,MAAA, uBACA,EAAA,EAAA,IACA,MACA,SACA,EAAA,KAGA,GAAA,IAAA,EAAA,aAAA,iBACA,EAAA,aAAA,eAA A,GAGA,EAAA,eAEA,MAAA,SAAA,IAYA,EAAA,iBAAA,SAAA,EAAA,EAAA,EAAA,GACA,IACA,EAAA,gB AAA,EAAA,GACA,EAAA,iBAAA,EAAA,EAAA,KAaA,EAAA,kBAAA,SAAA,EAAA,GACA,GAAA,GAAA,EAAA ,cACA,EAAA,EAAA,cAAA,EACA,IAAA,EAAA,CAIA,GAHA,EAAA,UAAA,GACA,EAAA,YAEA,IAAA,EAAA ,UAAA,CACA,GAAA,GAAA,EAAA,SAAA,EAAA,MACA,KACA,EAAA,SAAA,GAGA,EAAA,aAAA,GACA,EAAA ,eAEA,IAAA,EAAA,cACA,EAAA,WAAA,GAGA,MAAA,SAAA,IAWA,EAAA,oBAAA,SAAA,EAAA,EAAA,EAA A,GACA,IACA,EAAA,kBAAA,EAAA,GACA,EAAA,oBAAA,EAAA,EAAA,MAGA,OAAA,iBC5ZA,SAAA,GACA ,GAAA,GAAA,EAAA,WACA,EAAA,EAAA,WAEA,EAAA,GAEA,GAAA,EAAA,EAAA,EAAA,GAEA,GAAA,CACA ,KACA,EAAA,IAAA,GAAA,YAAA,QAAA,QAAA,IAAA,QACA,MAAA,IAGA,GAAA,IACA,WAAA,EACA,aAAA ,QACA,QACA,YACA,YACA,WAEA,SACA,OACA,KACA,QAEA,SAAA,SAAA,GACA,EAAA,OAAA,EAAA,KAAA ,SAEA,WAAA,SAAA,GACA,EAAA,SAAA,EAAA,KAAA,SAEA,eAEA,0BAAA,SAAA,GAGA,IAAA,GAAA,GAF A,EAAA,KAAA,YACA,EAAA,EAAA,QAAA,EAAA,EAAA,QACA,EAAA,EAAA,EAAA,EAAA,OAAA,EAAA,IAA A,EAAA,EAAA,IAAA,IAAA,CAEA,GAAA,GAAA,KAAA,IAAA,EAAA,EAAA,GAAA,EAAA,KAAA,IAAA,EAA A,EAAA,EACA,IAAA,GAAA,GAAA,GAAA,EACA,OAAA,IAIA,aAAA,SAAA,GACA,GAAA,GAAA,EAAA,WAA A,EAQA,OAPA,GAAA,UAAA,KAAA,WACA,EAAA,WAAA,EACA,EAAA,YAAA,KAAA,aACA,EAAA,QAAA,QAC A,IACA,EAAA,QAAA,EAAA,EAAA,QAAA,GAEA,GAEA,UAAA,SAAA,GACA,IAAA,KAAA,0BAAA,GAAA,CA CA,GAAA,GAAA,EAAA,IAAA,KAAA,WAGA,IACA,KAAA,QAAA,EAEA,IAAA,GAAA,KAAA,aAAA,EACA,GA AA,OAAA,EAAA,WAAA,GACA,EAAA,IAAA,KAAA,WAAA,EAAA,QACA,EAAA,KAAA,KAGA,UAAA,SAAA,GA CA,IAAA,KAAA,0BAAA,GAAA,CACA,GAAA,GAAA,EAAA,IAAA,KAAA,WACA,IAAA,EAAA,CACA,GAAA,G AAA,KAAA,aAAA,EACA,GAAA,OAAA,EAEA,IAAA,EAAA,SACA,EAAA,OAAA,GACA,KAAA,gBAEA,EAAA, KAAA,MAKA,QAAA,SAAA,GACA,IAAA,KAAA,0BAAA,GAAA,CACA,GAAA,GAAA,KAAA,aAAA,EACA,GAAA ,cAAA,EAAA,WAAA,GACA,EAAA,OAAA,EAAA,IAAA,KAAA,YACA,EAAA,GAAA,GACA,KAAA,iBAGA,aAA A,WACA,EAAA,UAAA,KAAA,aAIA,GAAA,YAAA,GACA,OAAA,iBCtGA,SAAA,GACA,GAAA,GAAA,EAAA,W AEA,GADA,EAAA,cAAA,WAAA,KAAA,EAAA,eACA,EAAA,YAGA,GAFA,MAAA,UAAA,IAAA,KAAA,KAAA,M AAA,UAAA,KAEA,MACA,EAAA,IACA,EAAA,GAIA,GAAA,EAGA,GACA,QACA,aACA,YACA,WACA,eAEA,S ACA,OACA,KACA,QAEA,SAAA,SAAA,EAAA,GACA,GAGA,EAAA,OAAA,EAAA,KAAA,SAEA,WAAA,SAAA,G ACA,EAAA,SAAA,EAAA,KAAA,SAEA,aACA,QAAA,OACA,UAAA,QACA,UAAA,SAEA,wBAAA,SAAA,GACA, GAAA,GAAA,EACA,EAAA,KAAA,WACA,OAAA,KAAA,EAAA,QACA,OACA,IAAA,EAAA,UACA,IACA,IAAA, EAAA,UACA,IAEA,MAGA,aAAA,QACA,WAAA,KACA,eAAA,SAAA,GACA,MAAA,MAAA,aAAA,EAAA,YAEA, gBAAA,SAAA,IAEA,IAAA,EAAA,YAAA,IAAA,EAAA,YAAA,EAAA,IAAA,MACA,KAAA,WAAA,EAAA,WACA ,KAAA,SAAA,EAAA,EAAA,QAAA,EAAA,EAAA,SACA,KAAA,UAAA,KACA,KAAA,0BAGA,qBAAA,SAAA,GA CA,EAAA,YACA,KAAA,WAAA,KACA,KAAA,QAAA,KACA,KAAA,oBAGA,WAAA,EACA,QAAA,KACA,gBAAA, WACA,GAAA,GAAA,WACA,KAAA,WAAA,EACA,KAAA,QAAA,MACA,KAAA,KACA,MAAA,QAAA,WAAA,EAAA, IAEA,sBAAA,WACA,KAAA,SACA,aAAA,KAAA,UAGA,cAAA,SAAA,GACA,GAAA,GAAA,CAIA,QAHA,eAAA ,GAAA,cAAA,KACA,EAAA,GAEA,GAEA,WAAA,SAAA,EAAA,GACA,GAAA,eAAA,KAAA,kBAAA,KAAA,CAC A,GAAA,KAAA,eAAA,GAAA,CACA,GAAA,IACA,QAAA,EAAA,QACA,QAAA,EAAA,QACA,KAAA,KAAA,kBA AA,KACA,OAAA,KAAA,kBAAA,OAEA,OAAA,GAAA,WAAA,GAEA,MAAA,GAAA,WAAA,GAIA,MAAA,GAAA,I AAA,IAEA,eAAA,SAAA,GACA,GAAA,GAAA,KAAA,kBACA,EAAA,EAAA,WAAA,GAIA,EAAA,EAAA,UAAA, EAAA,WAAA,CACA,GAAA,OAAA,KAAA,WAAA,EAAA,GACA,EAAA,SAAA,EACA,EAAA,YAAA,EACA,EAAA, OAAA,KAAA,WACA,EAAA,QAAA,KAAA,cAAA,EAAA,MACA,EAAA,MAAA,EAAA,eAAA,EAAA,SAAA,EACA, EAAA,OAAA,EAAA,eAAA,EAAA,SAAA,EACA,EAAA,SAAA,EAAA,aAAA,EAAA,OAAA,GACA,EAAA,UAAA, KAAA,eAAA,GACA,EAAA,YAAA,KAAA,aACA,EAAA,QAAA,OAEA,IAAA,GAAA,IAMA,OALA,GAAA,eAAA, WACA,EAAA,WAAA,EACA,EAAA,QAAA,KACA,EAAA,kBAEA,GAEA,eAAA,SAAA,EAAA,GACA,GAAA,GAAA ,EAAA,cACA,MAAA,kBAAA,CACA,KAAA,GAAA,GAAA,EAAA,EAAA,EAAA,EAAA,EAAA,OAAA,IACA,EAA A,EAAA,GACA,EAAA,KAAA,eAAA,GACA,eAAA,EAAA,MACA,EAAA,IAAA,EAAA,UAAA,EAAA,QAEA,EAA A,IAAA,EAAA,YACA,EAAA,KAAA,KAAA,IAEA,aAAA,EAAA,MAAA,EAAA,UACA,KAAA,eAAA,IAMA,aAA A,SAAA,GACA,GAAA,KAAA,QAAA,CACA,GAAA,GACA,EAAA,EAAA,cAAA,gBAAA,GACA,EAAA,KAAA,wB AAA,EACA,IAAA,SAAA,EAEA,GAAA,MACA,IAAA,OAAA,EAEA,GAAA,MACA,CACA,GAAA,GAAA,EAAA,e AAA,GAEA,EAAA,EACA,EAAA,MAAA,EAAA,IAAA,IACA,EAAA,KAAA,IAAA,EAAA,SAAA,GAAA,KAAA,Q AAA,IACA,EAAA,KAAA,IAAA,EAAA,SAAA,GAAA,KAAA,QAAA,GAGA,GAAA,GAAA,EAEA,MAAA,KAGA,U AAA,SAAA,EAAA,GACA,IAAA,GAAA,GAAA,EAAA,EAAA,EAAA,EAAA,OAAA,EAAA,IAAA,EAAA,EAAA,I AAA,IACA,GAAA,EAAA,aAAA,EACA,OAAA,GAUA,cAAA,SAAA,GACA,GAAA,GAAA,EAAA,OAGA,IAAA,E AAA,YAAA,EAAA,OAAA,CACA,GAAA,KACA,GAAA,QAAA,SAAA,EAAA,GAIA,GAAA,IAAA,IAAA,KAAA,U AAA,EAAA,EAAA,GAAA,CACA,GAAA,GAAA,CACA,GAAA,KAAA,KAEA,MACA,EAAA,QAAA,SAAA,GACA,K AAA,OAAA,GACA,EAAA,OAAA,EAAA,eAIA,WAAA,SAAA,GACA,KAAA,cAAA,GACA,KAAA,gBAAA,EAAA, eAAA,IACA,KAAA,gBAAA,GACA,KAAA,YACA,KAAA,aACA,KAAA,eAAA,EAAA,KAAA,QAGA,KAAA,SAAA ,GACA,EAAA,KAAA,IAEA,UAAA,SAAA,GACA,GAAA,EAGA,EAAA,YACA,KAAA,eAAA,EAAA,KAAA,UAGA ,IAAA,KAAA,WAQA,GAAA,KAAA,QAAA,CACA,GAAA,GAAA,EAAA,eAAA,GACA,EAAA,EAAA,QAAA,KAAA ,QAAA,EACA,EAAA,EAAA,QAAA,KAAA,QAAA,EACA,EAAA,KAAA,KAAA,EAAA,EAAA,EAAA,EACA,IAAA ,IACA,KAAA,YAAA,GACA,KAAA,WAAA,EACA,KAAA,QAAA,WAfA,QAAA,KAAA,WAAA,KAAA,aAAA,GACA ,KAAA,WAAA,GAEA,KAAA,WAAA,EACA,EAAA,iBACA,KAAA,eAAA,EAAA,KAAA,QAeA,KAAA,SAAA,GAC A,EAAA,KAAA,IAEA,SAAA,SAAA,GACA,KAAA,gBAAA,GACA,KAAA,eAAA,EAAA,KAAA,KAEA,GAAA,SA AA,GACA,EAAA,cAAA,EAAA,WAAA,GACA,EAAA,GAAA,IAEA,OAAA,SAAA,GACA,EAAA,OAAA,IAEA,YA AA,SAAA,GACA,EAAA,SAAA,EACA,KAAA,eAAA,EAAA,KAAA,SAEA,eAAA,SAAA,GACA,EAAA,UAAA,EA AA,WACA,KAAA,qBAAA,IAGA,gBAAA,SAAA,GACA,GAAA,GAAA,EAAA,YAAA,YACA,EAAA,EAAA,eAAA, EAEA,IAAA,KAAA,eAAA,GAAA,CAEA,GAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,QACA,GAAA,KAAA, EACA,IAAA,GAAA,SAAA,EAAA,GACA,GAAA,GAAA,EAAA,QAAA,EACA,GAAA,IACA,EAAA,OAAA,EAAA, IAEA,KAAA,KAAA,EAAA,EACA,YAAA,EAAA,KAKA,GAAA,YAAA,GACA,OAAA,iBC9SA,SAAA,GACA,GAA A,GAAA,EAAA,WACA,EAAA,EAAA,WACA,EAAA,OAAA,gBAAA,gBAAA,QAAA,eAAA,qBACA,GACA,QACA, gBACA,gBACA,cACA,mBAEA,SAAA,SAAA,GACA,IAAA,UAGA,EAAA,OAAA,EAAA,KAAA,SAEA,WAAA,SA AA,GACA,EAAA,SAAA,EAAA,KAAA,SAEA,eACA,GACA,cACA,QACA,MACA,SAEA,aAAA,SAAA,GACA,GA AA,GAAA,CAMA,OALA,GAAA,EAAA,WAAA,GACA,IACA,EAAA,YAAA,KAAA,cAAA,EAAA,cAEA,EAAA,QA AA,KACA,GAEA,QAAA,SAAA,GACA,EAAA,UAAA,IAEA,cAAA,SAAA,GACA,GAAA,GAAA,KAAA,aAAA,EA CA,GAAA,OAAA,EAAA,WAAA,GACA,EAAA,IAAA,EAAA,UAAA,EAAA,QACA,EAAA,KAAA,IAEA,cAAA,SA AA,GACA,GAAA,GAAA,KAAA,aAAA,EACA,GAAA,OAAA,EAAA,IAAA,EAAA,WACA,EAAA,KAAA,IAEA,YA AA,SAAA,GACA,GAAA,GAAA,KAAA,aAAA,EACA,GAAA,cAAA,EAAA,WAAA,GACA,EAAA,OAAA,EAAA,IA AA,EAAA,WACA,EAAA,GAAA,GACA,KAAA,QAAA,EAAA,YAEA,gBAAA,SAAA,GACA,GAAA,GAAA,KAAA,a AAA,EACA,GAAA,cAAA,EAAA,WAAA,GACA,EAAA,OAAA,EAAA,IAAA,EAAA,WACA,EAAA,OAAA,GACA,K AAA,QAAA,EAAA,YAIA,GAAA,SAAA,GACA,OAAA,iBCnEA,SAAA,GACA,GAAA,GAAA,EAAA,WACA,EAAA ,EAAA,WACA,GACA,QACA,cACA,cACA,YACA,iBAEA,aAAA,SAAA,GACA,GAAA,GAAA,EAAA,WAAA,EAE A,OADA,GAAA,QAAA,UACA,GAEA,SAAA,SAAA,GACA,IAAA,UAGA,EAAA,OAAA,EAAA,KAAA,SAEA,WAA A,SAAA,GACA,EAAA,SAAA,EAAA,KAAA,SAEA,QAAA,SAAA,GACA,EAAA,UAAA,IAEA,YAAA,SAAA,GAC A,GAAA,GAAA,KAAA,aAAA,EACA,GAAA,OAAA,EAAA,WAAA,GACA,EAAA,IAAA,EAAA,UAAA,EAAA,QAC A,EAAA,KAAA,IAEA,YAAA,SAAA,GACA,GAAA,GAAA,KAAA,aAAA,EACA,GAAA,OAAA,EAAA,IAAA,EAA A,WACA,EAAA,KAAA,IAEA,UAAA,SAAA,GACA,GAAA,GAAA,KAAA,aAAA,EACA,GAAA,cAAA,EAAA,WAA A,GACA,EAAA,OAAA,EAAA,IAAA,EAAA,WACA,EAAA,GAAA,GACA,KAAA,QAAA,EAAA,YAEA,cAAA,SAA A,GACA,GAAA,GAAA,KAAA,aAAA,EACA,GAAA,cAAA,EAAA,WAAA,GACA,EAAA,OAAA,EAAA,IAAA,EAA A,WACA,EAAA,OAAA,GACA,KAAA,QAAA,EAAA,YAIA,GAAA,cAAA,GACA,OAAA,iBClDA,SAAA,GACA,G AAA,GAAA,EAAA,WACA,EAAA,OAAA,SAEA,IAAA,OAAA,aACA,EAAA,eAAA,UAAA,EAAA,mBACA,IAAA, EAAA,iBACA,EAAA,eAAA,KAAA,EAAA,cAGA,IADA,EAAA,eAAA,QAAA,EAAA,aACA,SAAA,OAAA,aAAA ,CACA,EAAA,eAAA,QAAA,EAAA,YAOA,IAAA,GAAA,EAAA,UAAA,MAAA,YAAA,EAAA,UAAA,MAAA,SACA ,IACA,SAAA,KAAA,iBAAA,aAAA,cAIA,EAAA,SAAA,UAAA,IACA,OAAA,iBCkEA,SAAA,GACA,GAAA,G AAA,EAAA,WACA,EAAA,EAAA,aACA,EAAA,GAAA,GAAA,WACA,GACA,QACA,OACA,OACA,MAEA,SACA,a ACA,QACA,SACA,SACA,YAEA,gBACA,MAAA,OACA,OAAA,QACA,OAAA,SAEA,iBAAA,EACA,SAAA,SAAA ,GACA,MAAA,GAAA,EAAA,EAAA,IAEA,kBAAA,SAAA,EAAA,GACA,GAAA,GAAA,EAAA,EAAA,CAKA,OAJ A,IAAA,IACA,EAAA,EAAA,MAAA,EAAA,MACA,EAAA,EAAA,MAAA,EAAA,QAEA,EAAA,EAAA,EAAA,IAE A,UAAA,SAAA,EAAA,EAAA,GACA,GAAA,GAAA,EACA,EAAA,KAAA,kBAAA,EAAA,UAAA,GACA,EAAA,KA AA,kBAAA,EAAA,cAAA,EACA,IAAA,EAAA,EACA,EAAA,WAAA,KAAA,SAAA,EAAA,OACA,IAAA,WAAA,E ACA,MAEA,IAAA,EAAA,EACA,EAAA,WAAA,KAAA,SAAA,EAAA,OACA,IAAA,WAAA,EACA,MAEA,IAAA,I ACA,SAAA,EACA,YAAA,EACA,UAAA,EAAA,UACA,cAAA,EAAA,cACA,YAAA,EAAA,YACA,UAAA,EAAA,U ACA,QAAA,QAEA,YAAA,IACA,EAAA,EAAA,EAAA,EACA,EAAA,GAAA,EAAA,EACA,EAAA,IAAA,EAAA,E ACA,EAAA,QAAA,EAAA,QACA,EAAA,MAAA,EAAA,MACA,EAAA,QAAA,EAAA,QACA,EAAA,WAAA,EAAA,Y AEA,WAAA,IACA,EAAA,GAAA,EAAA,EACA,EAAA,IAAA,EAAA,EACA,EAAA,EAAA,EAAA,EACA,EAAA,Q AAA,EAAA,QACA,EAAA,MAAA,EAAA,MACA,EAAA,QAAA,EAAA,QACA,EAAA,WAAA,EAAA,WAEA,IAAA,G AAA,EAAA,iBAAA,EAAA,EACA,GAAA,WAAA,cAAA,IAEA,KAAA,SAAA,GACA,GAAA,EAAA,YAAA,UAAA, EAAA,YAAA,IAAA,EAAA,SAAA,GAAA,CACA,GAAA,IACA,UAAA,EACA,WAAA,EAAA,OACA,aACA,cAAA, KACA,WAAA,EACA,WAAA,EACA,UAAA,EAEA,GAAA,IAAA,EAAA,UAAA,KAGA,KAAA,SAAA,GACA,GAAA, GAAA,EAAA,IAAA,EAAA,UACA,IAAA,EAAA,CACA,IAAA,EAAA,SAAA,CACA,GAAA,GAAA,KAAA,kBAAA ,EAAA,UAAA,GACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,CAEA,GAAA,KAAA,mBACA,EAA A,UAAA,EACA,EAAA,cAAA,EAAA,UACA,KAAA,UAAA,aAAA,EAAA,IAGA,EAAA,WACA,KAAA,UAAA,QAA A,EAAA,GACA,KAAA,UAAA,SAAA,EAAA,GACA,KAAA,UAAA,SAAA,EAAA,IAEA,EAAA,cAAA,IAGA,GAA A,SAAA,GACA,GAAA,GAAA,EAAA,IAAA,EAAA,UACA,KACA,EAAA,UACA,KAAA,UAAA,WAAA,EAAA,GAE A,EAAA,OAAA,EAAA,aAIA,GAAA,gBAAA,QAAA,IACA,OAAA,iBChLA,SAAA,GACA,GAAA,GAAA,EAAA, WACA,EAAA,EAAA,aACA,GAEA,WAAA,IAEA,iBAAA,GACA,QACA,OACA,OACA,MAEA,SACA,OACA,YACA ,WAEA,YAAA,KACA,QAAA,KACA,MAAA,WACA,GAAA,GAAA,KAAA,MAAA,KAAA,YAAA,UACA,EAAA,KAAA ,KAAA,YAAA,MACA,MAAA,SAAA,EAAA,GACA,KAAA,MAAA,GAEA,OAAA,WACA,cAAA,KAAA,SACA,KAAA ,MACA,KAAA,SAAA,WAEA,KAAA,MAAA,EACA,KAAA,YAAA,KACA,KAAA,OAAA,KACA,KAAA,QAAA,MAEA ,KAAA,SAAA,GACA,EAAA,YAAA,KAAA,cACA,KAAA,YAAA,EACA,KAAA,OAAA,EAAA,OACA,KAAA,QAAA ,YAAA,KAAA,MAAA,KAAA,MAAA,KAAA,cAGA,GAAA,SAAA,GACA,KAAA,aAAA,KAAA,YAAA,YAAA,EAAA ,WACA,KAAA,UAGA,KAAA,SAAA,GACA,GAAA,KAAA,aAAA,KAAA,YAAA,YAAA,EAAA,UAAA,CACA,GAAA ,GAAA,EAAA,QAAA,KAAA,YAAA,QACA,EAAA,EAAA,QAAA,KAAA,YAAA,OACA,GAAA,EAAA,EAAA,EAAA ,KAAA,kBACA,KAAA,WAIA,SAAA,SAAA,EAAA,GACA,GAAA,IACA,SAAA,EACA,YAAA,EACA,YAAA,KAA A,YAAA,YACA,UAAA,KAAA,YAAA,UACA,EAAA,KAAA,YAAA,QACA,EAAA,KAAA,YAAA,QACA,QAAA,OAE A,KACA,EAAA,SAAA,EAEA,IAAA,GAAA,EAAA,iBAAA,EAAA,EACA,MAAA,OAAA,cAAA,IAGA,GAAA,gB AAA,OAAA,IACA,OAAA,iBC1FA,SAAA,GACA,GAAA,GAAA,EAAA,WACA,EAAA,EAAA,aACA,EAAA,GAAA ,GAAA,WACA,GACA,QACA,OACA,MAEA,SACA,OAEA,KAAA,SAAA,GACA,EAAA,YAAA,EAAA,cACA,EAAA ,IAAA,EAAA,WACA,OAAA,EAAA,OACA,QAAA,EAAA,QACA,EAAA,EAAA,QACA,EAAA,EAAA,WAIA,UAAA ,SAAA,EAAA,GACA,MAAA,UAAA,EAAA,YAEA,IAAA,EAAA,SAEA,EAAA,cAEA,GAAA,SAAA,GACA,GAAA ,GAAA,EAAA,IAAA,EAAA,UACA,IAAA,GAAA,KAAA,UAAA,EAAA,GAAA,CAEA,GAAA,GAAA,EAAA,cAAA ,IAAA,EAAA,OAAA,EAAA,cACA,IAAA,EAAA,CACA,GAAA,GAAA,EAAA,iBAAA,OACA,SAAA,EACA,YAA A,EACA,EAAA,EAAA,QACA,EAAA,EAAA,QACA,OAAA,EAAA,OACA,YAAA,EAAA,YACA,UAAA,EAAA,UAC A,OAAA,EAAA,OACA,QAAA,EAAA,QACA,QAAA,EAAA,QACA,SAAA,EAAA,SACA,QAAA,OAEA,GAAA,cAA A,IAGA,EAAA,OAAA,EAAA,YAIA,GAAA,WAAA,SAAA,GACA,MAAA,YACA,EAAA,cAAA,EACA,EAAA,OAA A,EAAA,aAGA,EAAA,gBAAA,MAAA,IACA,OAAA,iBCrEA,SAAA,GACA,YAiEA,SAAA,GAAA,EAAA,GACA ,IAAA,EACA,KAAA,IAAA,OAAA,WAAA,GAIA,QAAA,GAAA,GACA,MAAA,IAAA,IAAA,IAAA,EAMA,QAAA ,GAAA,GACA,MAAA,MAAA,GACA,IAAA,GACA,KAAA,GACA,KAAA,GACA,MAAA,GACA,GAAA,MAAA,yGAA A,QAAA,OAAA,aAAA,IAAA,EAKA,QAAA,GAAA,GACA,MAAA,MAAA,GAAA,KAAA,GAAA,OAAA,GAAA,OAA A,EAKA,QAAA,GAAA,GACA,MAAA,MAAA,GAAA,KAAA,GACA,GAAA,IAAA,IAAA,GACA,GAAA,IAAA,KAA A,EAGA,QAAA,GAAA,GACA,MAAA,MAAA,GAAA,KAAA,GACA,GAAA,IAAA,IAAA,GACA,GAAA,IAAA,KAA A,GACA,GAAA,IAAA,IAAA,EAKA,QAAA,GAAA,GACA,MAAA,SAAA,EAKA,QAAA,KACA,KAAA,EAAA,GAA A,EAAA,EAAA,WAAA,OACA,EAIA,QAAA,KACA,GAAA,GAAA,CAGA,KADA,EAAA,IACA,EAAA,IACA,EAA A,EAAA,WAAA,GACA,EAAA,OACA,CAMA,OAAA,GAAA,MAAA,EAAA,GAGA,QAAA,KACA,GAAA,GAAA,EAA A,CAoBA,OAlBA,GAAA,EAEA,EAAA,IAKA,EADA,IAAA,EAAA,OACA,EAAA,WACA,EAAA,GACA,EAAA,Q ACA,SAAA,EACA,EAAA,YACA,SAAA,GAAA,UAAA,EACA,EAAA,eAEA,EAAA,YAIA,KAAA,EACA,MAAA,E ACA,OAAA,EAAA,IAOA,QAAA,KACA,GAEA,GAEA,EAJA,EAAA,EACA,EAAA,EAAA,WAAA,GAEA,EAAA,E AAA,EAGA,QAAA,GAGA,IAAA,IACA,IAAA,IACA,IAAA,IACA,IAAA,IACA,IAAA,IACA,IAAA,KACA,I AAA,KACA,IAAA,IACA,IAAA,IACA,IAAA,IACA,IAAA,IAEA,QADA,GAEA,KAAA,EAAA,WACA,MAAA,O AAA,aAAA,GACA,OAAA,EAAA,GAGA,SAIA,GAHA,EAAA,EAAA,WAAA,EAAA,GAGA,KAAA,EACA,OAAA,G ACA,IAAA,IACA,IAAA,IACA,IAAA,IACA,IAAA,IACA,IAAA,IACA,IAAA,IACA,IAAA,IACA,IAAA,I ACA,IAAA,KAEA,MADA,IAAA,GAEA,KAAA,EAAA,WACA,MAAA,OAAA,aAAA,GAAA,OAAA,aAAA,GACA,O AAA,EAAA,GAGA,KAAA,IACA,IAAA,IAOA,MANA,IAAA,EAGA,KAAA,EAAA,WAAA,MACA,GAGA,KAAA,E AAA,WACA,MAAA,EAAA,MAAA,EAAA,GACA,OAAA,EAAA,KAeA,MAJA,GAAA,EAAA,EAAA,GAIA,IAAA,G AAA,KAAA,QAAA,IAAA,GACA,GAAA,GAEA,KAAA,EAAA,WACA,MAAA,EAAA,EACA,OAAA,EAAA,KAIA,e AAA,QAAA,IAAA,KACA,GAEA,KAAA,EAAA,WACA,MAAA,EACA,OAAA,EAAA,SAIA,MAAA,EAAA,gBAAA, WAIA,QAAA,KACA,GAAA,GAAA,EAAA,CAQA,IANA,EAAA,EAAA,GACA,EAAA,EAAA,EAAA,WAAA,KAAA, MAAA,EACA,sEAEA,EAAA,EACA,EAAA,GACA,MAAA,EAAA,CAaA,IAZA,EAAA,EAAA,KACA,EAAA,EAAA ,GAIA,MAAA,GAEA,GAAA,EAAA,EAAA,WAAA,KACA,KAAA,EAAA,gBAAA,WAIA,EAAA,EAAA,WAAA,KAC A,GAAA,EAAA,IAEA,GAAA,EAAA,GAGA,GAAA,MAAA,EAAA,CAEA,IADA,GAAA,EAAA,KACA,EAAA,EAA A,WAAA,KACA,GAAA,EAAA,IAEA,GAAA,EAAA,GAGA,GAAA,MAAA,GAAA,MAAA,EAOA,GANA,GAAA,EAA A,KAEA,EAAA,EAAA,IACA,MAAA,GAAA,MAAA,KACA,GAAA,EAAA,MAEA,EAAA,EAAA,WAAA,IACA,KAA A,EAAA,EAAA,WAAA,KACA,GAAA,EAAA,SAGA,MAAA,EAAA,gBAAA,UAQA,OAJA,GAAA,EAAA,WAAA,KA CA,KAAA,EAAA,gBAAA,YAIA,KAAA,EAAA,eACA,MAAA,WAAA,GACA,OAAA,EAAA,IAMA,QAAA,KACA,G AAA,GAAA,EAAA,EAAA,EAAA,GAAA,GAAA,CASA,KAPA,EAAA,EAAA,GACA,EAAA,MAAA,GAAA,MAAA,E ACA,2CAEA,EAAA,IACA,EAEA,EAAA,GAAA,CAGA,GAFA,EAAA,EAAA,KAEA,IAAA,EAAA,CACA,EAAA, EACA,OACA,GAAA,OAAA,EAEA,GADA,EAAA,EAAA,KACA,GAAA,EAAA,EAAA,WAAA,IA0BA,OAAA,GAAA ,OAAA,EAAA,MACA,MA1BA,QAAA,GACA,IAAA,IACA,GAAA,IACA,MACA,KAAA,IACA,GAAA,IACA,MAC A,KAAA,IACA,GAAA,GACA,MACA,KAAA,IACA,GAAA,IACA,MACA,KAAA,IACA,GAAA,IACA,MACA,KAA A,IACA,GAAA,GACA,MAEA,SACA,GAAA,MAQA,CAAA,GAAA,EAAA,EAAA,WAAA,IACA,KAEA,IAAA,GAQ A,MAJA,KAAA,GACA,KAAA,EAAA,gBAAA,YAIA,KAAA,EAAA,cACA,MAAA,EACA,MAAA,EACA,OAAA,EA AA,IAIA,QAAA,GAAA,GACA,MAAA,GAAA,OAAA,EAAA,YACA,EAAA,OAAA,EAAA,SACA,EAAA,OAAA,EA AA,gBACA,EAAA,OAAA,EAAA,YAGA,QAAA,KACA,GAAA,EAIA,OAFA,KAEA,GAAA,GAEA,KAAA,EAAA,I ACA,OAAA,EAAA,KAIA,EAAA,EAAA,WAAA,GAGA,KAAA,GAAA,KAAA,GAAA,KAAA,EACA,IAIA,KAAA,G AAA,KAAA,EACA,IAGA,EAAA,GACA,IAKA,KAAA,EACA,EAAA,EAAA,WAAA,EAAA,IACA,IAEA,IAGA,E AAA,GACA,IAGA,KAGA,QAAA,KACA,GAAA,EASA,OAPA,GAAA,EACA,EAAA,EAAA,MAAA,GAEA,EAAA,I AEA,EAAA,EAAA,MAAA,GAEA,EAGA,QAAA,KACA,GAAA,EAEA,GAAA,EACA,EAAA,IACA,EAAA,EAKA,Q AAA,GAAA,EAAA,GACA,GAAA,GACA,EAAA,MAAA,UAAA,MAAA,KAAA,UAAA,GACA,EAAA,EAAA,QACA,S ACA,SAAA,EAAA,GAEA,MADA,GAAA,EAAA,EAAA,OAAA,sCACA,EAAA,IAOA,MAHA,GAAA,GAAA,OAAA, GACA,EAAA,MAAA,EACA,EAAA,YAAA,EACA,EAKA,QAAA,GAAA,GACA,EAAA,EAAA,EAAA,gBAAA,EAAA ,OAMA,QAAA,GAAA,GACA,GAAA,GAAA,KACA,EAAA,OAAA,EAAA,YAAA,EAAA,QAAA,IACA,EAAA,GAMA ,QAAA,GAAA,GACA,MAAA,GAAA,OAAA,EAAA,YAAA,EAAA,QAAA,EAKA,QAAA,GAAA,GACA,MAAA,GAAA ,OAAA,EAAA,SAAA,EAAA,QAAA,EAwBA,QAAA,KACA,GAAA,KAIA,KAFA,EAAA,MAEA,EAAA,MACA,EAA A,MACA,IACA,EAAA,KAAA,QAEA,EAAA,KAAA,MAEA,EAAA,MACA,EAAA,KAOA,OAFA,GAAA,KAEA,EAA A,sBAAA,GAKA,QAAA,KACA,GAAA,EAOA,OALA,KACA,EAAA,IAIA,EAAA,OAAA,EAAA,eAAA,EAAA,OA AA,EAAA,eACA,EAAA,cAAA,GAGA,EAAA,iBAAA,EAAA,OAGA,QAAA,KACA,GAAA,GAAA,CAWA,OATA,G AAA,EACA,KAEA,EAAA,OAAA,EAAA,KAAA,EAAA,OAAA,EAAA,aACA,EAAA,GAGA,EAAA,IACA,EAAA,K ACA,EAAA,eAAA,OAAA,EAAA,MAGA,QAAA,KACA,GAAA,KAIA,KAFA,EAAA,MAEA,EAAA,MACA,EAAA,K AAA,KAEA,EAAA,MACA,EAAA,IAMA,OAFA,GAAA,KAEA,EAAA,uBAAA,GAKA,QAAA,KACA,GAAA,EAQA, OANA,GAAA,KAEA,EAAA,KAEA,EAAA,KAEA,EAMA,QAAA,KACA,GAAA,GAAA,EAAA,CAEA,OAAA,GAAA, KACA,KAGA,EAAA,EAAA,KAEA,IAAA,EAAA,WACA,EAAA,EAAA,iBAAA,IAAA,OACA,IAAA,EAAA,eAAA ,IAAA,EAAA,eACA,EAAA,EAAA,cAAA,KACA,IAAA,EAAA,QACA,EAAA,UACA,IACA,EAAA,EAAA,wBAE A,IAAA,EAAA,gBACA,EAAA,IACA,EAAA,MAAA,SAAA,EAAA,MACA,EAAA,EAAA,cAAA,IACA,IAAA,EA AA,aACA,EAAA,IACA,EAAA,MAAA,KACA,EAAA,EAAA,cAAA,IACA,EAAA,KACA,EAAA,IACA,EAAA,OA CA,EAAA,KAGA,EACA,MAGA,GAAA,MAKA,QAAA,KACA,GAAA,KAIA,IAFA,EAAA,MAEA,EAAA,KACA,KA AA,EAAA,IACA,EAAA,KAAA,OACA,EAAA,OAGA,EAAA,IAMA,OAFA,GAAA,KAEA,EAGA,QAAA,KACA,GA AA,EAQA,OANA,GAAA,IAEA,EAAA,IACA,EAAA,GAGA,EAAA,iBAAA,EAAA,OAGA,QAAA,KAGA,MAFA,G AAA,KAEA,IAGA,QAAA,KACA,GAAA,EAQA,OANA,GAAA,KAEA,EAAA,KAEA,EAAA,KAEA,EAGA,QAAA,K ACA,GAAA,GAAA,EAAA,CAIA,KAFA,EAAA,MAGA,GAAA,EAAA,KACA,EAAA,IACA,EAAA,EAAA,uBAAA, IAAA,EAAA,OACA,IAAA,EAAA,KACA,EAAA,IACA,EAAA,EAAA,uBAAA,IAAA,EAAA,OACA,CAAA,IAAA ,EAAA,KAIA,KAHA,GAAA,IACA,EAAA,EAAA,qBAAA,EAAA,GAMA,MAAA,GASA,QAAA,KACA,GAAA,GAA A,CAcA,OAZA,GAAA,OAAA,EAAA,YAAA,EAAA,OAAA,EAAA,QACA,EAAA,KACA,EAAA,MAAA,EAAA,MAA A,EAAA,MACA,EAAA,IACA,EAAA,IACA,EAAA,EAAA,sBAAA,EAAA,MAAA,IACA,EAAA,WAAA,EAAA,SA AA,EAAA,UACA,KAAA,EAAA,iBAEA,EAAA,KAGA,EAGA,QAAA,GAAA,GACA,GAAA,GAAA,CAEA,IAAA,E AAA,OAAA,EAAA,YAAA,EAAA,OAAA,EAAA,QACA,MAAA,EAGA,QAAA,EAAA,OACA,IAAA,KACA,EAAA,C ACA,MAEA,KAAA,KACA,EAAA,CACA,MAEA,KAAA,KACA,IAAA,KACA,IAAA,MACA,IAAA,MACA,EAAA,C ACA,MAEA,KAAA,IACA,IAAA,IACA,IAAA,KACA,IAAA,KACA,IAAA,aACA,EAAA,CACA,MAEA,KAAA,K ACA,EAAA,CACA,MAEA,KAAA,IACA,IAAA,IACA,EAAA,CACA,MAEA,KAAA,IACA,IAAA,IACA,IAAA,I ACA,EAAA,GAOA,MAAA,GAWA,QAAA,KACA,GAAA,GAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,CAMA,I AJA,EAAA,IAEA,EAAA,EACA,EAAA,EAAA,GACA,IAAA,EACA,MAAA,EASA,KAPA,EAAA,KAAA,EACA,I AEA,EAAA,IAEA,GAAA,EAAA,EAAA,IAEA,EAAA,EAAA,IAAA,GAAA,CAGA,KAAA,EAAA,OAAA,GAAA,G AAA,EAAA,EAAA,OAAA,GAAA,MACA,EAAA,EAAA,MACA,EAAA,EAAA,MAAA,MACA,EAAA,EAAA,MACA,E AAA,EAAA,uBAAA,EAAA,EAAA,GACA,EAAA,KAAA,EAIA,GAAA,IACA,EAAA,KAAA,EACA,EAAA,KAAA, GACA,EAAA,IACA,EAAA,KAAA,GAMA,IAFA,EAAA,EAAA,OAAA,EACA,EAAA,EAAA,GACA,EAAA,GACA, EAAA,EAAA,uBAAA,EAAA,EAAA,GAAA,MAAA,EAAA,EAAA,GAAA,GACA,GAAA,CAGA,OAAA,GAMA,QAAA ,KACA,GAAA,GAAA,EAAA,CAaA,OAXA,GAAA,IAEA,EAAA,OACA,IACA,EAAA,IACA,EAAA,KACA,EAAA ,IAEA,EAAA,EAAA,4BAAA,EAAA,EAAA,IAGA,EAaA,QAAA,KACA,GAAA,GAAA,CAUA,OARA,GAAA,IAE A,EAAA,OAAA,EAAA,YACA,EAAA,GAGA,EAAA,EAAA,KAAA,OAEA,EAAA,aAAA,EAAA,MAAA,GAOA,QAA A,KACA,KAAA,EAAA,MACA,IACA,IAqBA,QAAA,KACA,IACA,GAEA,IAAA,GAAA,IACA,KACA,MAAA,EA AA,OAAA,MAAA,EAAA,OACA,EAAA,OAAA,EAAA,WACA,EAAA,IAEA,IACA,OAAA,EAAA,MACA,EAAA,GA EA,EAAA,eAAA,KAKA,EAAA,OAAA,EAAA,KACA,EAAA,GAIA,QAAA,GAAA,GACA,GACA,IAAA,GAAA,IA AA,KACA,GAAA,mBAAA,EAAA,GAGA,QAAA,GAAA,GACA,GAAA,EACA,OAAA,EAAA,QACA,IACA,EAAA,O AAA,EAAA,YACA,EAAA,GACA,EAAA,IAAA,OAGA,GACA,IAAA,GAAA,IACA,KACA,EAAA,mBAAA,EAAA, KAAA,EAAA,GAGA,QAAA,GAAA,EAAA,GAUA,MATA,GAAA,EACA,EAAA,EACA,EAAA,EACA,EAAA,EAAA, OACA,EAAA,KACA,GACA,aAGA,IAx+BA,GAAA,GACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EAC A,CAEA,IACA,eAAA,EACA,IAAA,EACA,WAAA,EACA,QAAA,EACA,YAAA,EACA,eAAA,EACA,WAAA,EAC A,cAAA,GAGA,KACA,EAAA,EAAA,gBAAA,UACA,EAAA,EAAA,KAAA,QACA,EAAA,EAAA,YAAA,aACA,EA AA,EAAA,SAAA,UACA,EAAA,EAAA,aAAA,OACA,EAAA,EAAA,gBAAA,UACA,EAAA,EAAA,YAAA,aACA,E AAA,EAAA,eAAA,SAEA,GACA,gBAAA,kBACA,iBAAA,mBACA,eAAA,iBACA,sBAAA,wBACA,eAAA,iBAC A,oBAAA,sBACA,WAAA,aACA,QAAA,UACA,iBAAA,mBACA,kBAAA,oBACA,iBAAA,mBACA,iBAAA,mBAC A,QAAA,UACA,SAAA,WACA,eAAA,iBACA,gBAAA,mBAIA,GACA,gBAAA,sBACA,aAAA,uBACA,cAAA,oC AgrBA,IAAA,IAAA,EAuJA,GAAA,CA6GA,GAAA,SACA,MAAA,IAEA,MC1gCA,SAAA,GACA,YAEA,SAAA, GAAA,EAAA,EAAA,EAAA,GACA,GAAA,EACA,KAEA,GADA,EAAA,EAAA,GACA,EAAA,aACA,EAAA,WAAA, KAAA,cACA,aAAA,EAAA,SACA,SAAA,GAAA,WAAA,GACA,KAAA,OAAA,4DAEA,MAAA,GAEA,WADA,SAAA ,MAAA,8BAAA,EAAA,GAIA,MAAA,UAAA,EAAA,EAAA,GACA,GAAA,GAAA,EAAA,WAAA,EAAA,EAAA,EAO A,OANA,GAAA,YAAA,IACA,EAAA,6BAAA,EAAA,WACA,EAAA,aACA,EAAA,6BAAA,EAAA,aAGA,GAOA,Q AAA,GAAA,GACA,GAAA,GAAA,EAAA,EACA,KAAA,EAAA,CACA,GAAA,GAAA,GAAA,EACA,SAAA,MAAA,E AAA,GACA,EAAA,GAAA,GAAA,GACA,EAAA,GAAA,EAEA,MAAA,GAGA,QAAA,GAAA,GACA,KAAA,MAAA,E ACA,KAAA,SAAA,OAgBA,QAAA,GAAA,GACA,KAAA,KAAA,EACA,KAAA,KAAA,KAAA,IAAA,GA2BA,QAAA ,GAAA,EAAA,EAAA,GACA,KAAA,SAAA,KAAA,EAEA,KAAA,YAAA,kBAAA,IACA,EAAA,aACA,KAAA,YAA A,YAAA,IAEA,KAAA,YACA,KAAA,cACA,YAAA,IAAA,YAAA,MACA,YAAA,IAAA,YAAA,IAEA,KAAA,OAA A,KAAA,WAAA,EAAA,EAAA,GACA,KAAA,UAAA,KAAA,UAAA,KAAA,WACA,EAAA,EAAA,GAuEA,QAAA,GA AA,EAAA,GACA,KAAA,KAAA,EACA,KAAA,OACA,KAAA,GAAA,GAAA,EAAA,EAAA,EAAA,OAAA,IACA,KA AA,KAAA,GAAA,EAAA,EAAA,IA0CA,QAAA,KAAA,KAAA,OAAA,mBA0BA,QAAA,GAAA,GACA,MAAA,kBAA A,GAAA,EAAA,EAAA,UAGA,QAAA,KACA,KAAA,WAAA,KACA,KAAA,WACA,KAAA,QACA,KAAA,YAAA,OAC A,KAAA,WAAA,OACA,KAAA,WAAA,OACA,KAAA,aAAA,EA2IA,QAAA,GAAA,GACA,KAAA,OAAA,EAUA,QA AA,GAAA,GAIA,GAHA,KAAA,WAAA,EAAA,WACA,KAAA,WAAA,EAAA,YAEA,EAAA,WACA,KAAA,OAAA,uB AEA,MAAA,WAAA,EAAA,WACA,EAAA,KAAA,YAEA,KAAA,QAAA,EAAA,QACA,KAAA,YAAA,EAAA,YAmEA, QAAA,GAAA,GACA,MAAA,QAAA,GAAA,QAAA,SAAA,SAAA,GACA,MAAA,IAAA,EAAA,gBASA,QAAA,GAAA ,EAAA,GACA,KAAA,EAAA,KACA,OAAA,UAAA,eAAA,KAAA,EAAA,IACA,EAAA,EAAA,EAGA,OAAA,GAGA ,QAAA,GAAA,GACA,OAAA,GACA,IAAA,GACA,OAAA,CAEA,KAAA,QACA,IAAA,OACA,IAAA,OACA,OAAA ,EAGA,MAAA,OAAA,OAAA,KAGA,GAFA,EAKA,QAAA,MA7eA,GAAA,GAAA,OAAA,OAAA,KAkBA,GAAA,WA CA,QAAA,WACA,IAAA,KAAA,SAAA,CACA,GAAA,GAAA,KAAA,KACA,MAAA,SAAA,WACA,MAAA,IAIA,MA AA,MAAA,WASA,EAAA,WACA,QAAA,WACA,IAAA,KAAA,SAAA,CACA,GACA,IADA,KAAA,KACA,KAAA,KA CA,MAAA,SAAA,SAAA,EAAA,GAIA,MAHA,IACA,EAAA,QAAA,EAAA,GAEA,EAAA,aAAA,IAIA,MAAA,MA AA,UAGA,SAAA,SAAA,EAAA,GAIA,MAHA,IAAA,KAAA,KAAA,OACA,EAAA,EAAA,EAAA,KAAA,KAAA,IA EA,KAAA,KAAA,aAAA,EAAA,KAqBA,EAAA,WACA,GAAA,YACA,IAAA,KAAA,UAAA,CAEA,GAAA,GAAA,K AAA,iBAAA,GACA,KAAA,OAAA,SAAA,SAAA,KAAA,OAAA,KACA,GAAA,KAAA,KAAA,mBAAA,GACA,KAAA ,SAAA,KAAA,KAAA,SAAA,OACA,KAAA,UAAA,KAAA,IAAA,GAGA,MAAA,MAAA,WAGA,QAAA,WACA,IAAA ,KAAA,SAAA,CACA,GAAA,GAAA,KAAA,MAEA,IAAA,KAAA,WAAA,CACA,GAAA,GAAA,KAAA,QAEA,MAAA ,SAAA,SAAA,EAAA,GAIA,MAHA,IACA,EAAA,QAAA,EAAA,GAEA,EAAA,aAAA,QAEA,IAAA,KAAA,SAWA ,CAEA,GAAA,GAAA,KAAA,QAEA,MAAA,SAAA,SAAA,EAAA,EAAA,GACA,GAAA,GAAA,EAAA,EAAA,EAAA ,GACA,EAAA,EAAA,EAAA,EAAA,EAIA,OAHA,IACA,EAAA,QAAA,GAAA,IAEA,EAAA,EAAA,GAAA,YArB A,CACA,GAAA,GAAA,KAAA,IAAA,KAAA,SAAA,KAEA,MAAA,SAAA,SAAA,EAAA,EAAA,GACA,GAAA,GAA A,EAAA,EAAA,EAAA,EAKA,OAHA,IACA,EAAA,QAAA,EAAA,GAEA,EAAA,aAAA,KAgBA,MAAA,MAAA,UA GA,SAAA,SAAA,EAAA,GACA,GAAA,KAAA,WAEA,MADA,MAAA,SAAA,aAAA,EAAA,GACA,CAGA,IAAA,GA AA,KAAA,OAAA,GACA,EAAA,KAAA,mBAAA,GAAA,KAAA,SAAA,KACA,KAAA,SAAA,EACA,OAAA,GAAA,G AAA,IAYA,EAAA,WACA,UAAA,SAAA,EAAA,EAAA,EAAA,EACA,GACA,GAAA,GAAA,EAAA,KAAA,MACA,E AAA,CACA;GAAA,EACA,EAAA,WAGA,IADA,EAAA,EAAA,KAAA,OACA,EAEA,WADA,SAAA,MAAA,mCAAA, KAAA,KAcA,IANA,EACA,EAAA,EAAA,QACA,kBAAA,GAAA,QACA,EAAA,EAAA,OAGA,kBAAA,GAEA,WAD A,SAAA,MAAA,mCAAA,KAAA,KAKA,KAAA,GADA,GAAA,MACA,EAAA,EAAA,EAAA,KAAA,KAAA,OAAA,IA CA,EAAA,KAAA,EAAA,KAAA,KAAA,IAAA,EAAA,EAAA,GAGA,OAAA,GAAA,MAAA,EAAA,IAMA,IAAA,IA CA,IAAA,SAAA,GAAA,OAAA,GACA,IAAA,SAAA,GAAA,OAAA,GACA,IAAA,SAAA,GAAA,OAAA,IAGA,GA CA,IAAA,SAAA,EAAA,GAAA,MAAA,GAAA,GACA,IAAA,SAAA,EAAA,GAAA,MAAA,GAAA,GACA,IAAA,SA AA,EAAA,GAAA,MAAA,GAAA,GACA,IAAA,SAAA,EAAA,GAAA,MAAA,GAAA,GACA,IAAA,SAAA,EAAA,GA AA,MAAA,GAAA,GACA,IAAA,SAAA,EAAA,GAAA,MAAA,GAAA,GACA,IAAA,SAAA,EAAA,GAAA,MAAA,GA AA,GACA,KAAA,SAAA,EAAA,GAAA,MAAA,IAAA,GACA,KAAA,SAAA,EAAA,GAAA,MAAA,IAAA,GACA,KA AA,SAAA,EAAA,GAAA,MAAA,IAAA,GACA,KAAA,SAAA,EAAA,GAAA,MAAA,IAAA,GACA,MAAA,SAAA,EA AA,GAAA,MAAA,KAAA,GACA,MAAA,SAAA,EAAA,GAAA,MAAA,KAAA,GACA,KAAA,SAAA,EAAA,GAAA,MA AA,IAAA,GACA,KAAA,SAAA,EAAA,GAAA,MAAA,IAAA,GAiBA,GAAA,WACA,sBAAA,SAAA,EAAA,GACA, IAAA,EAAA,GACA,KAAA,OAAA,wBAAA,EAIA,OAFA,GAAA,EAAA,GAEA,SAAA,EAAA,EAAA,GACA,MAAA ,GAAA,GAAA,EAAA,EAAA,EAAA,MAIA,uBAAA,SAAA,EAAA,EAAA,GACA,IAAA,EAAA,GACA,KAAA,OAA A,wBAAA,EAKA,QAHA,EAAA,EAAA,GACA,EAAA,EAAA,GAEA,GACA,IAAA,KAEA,MADA,MAAA,aAAA,EA CA,SAAA,EAAA,EAAA,GACA,MAAA,GAAA,EAAA,EAAA,IACA,EAAA,EAAA,EAAA,GAEA,KAAA,KAEA,MA DA,MAAA,aAAA,EACA,SAAA,EAAA,EAAA,GACA,MAAA,GAAA,EAAA,EAAA,IACA,EAAA,EAAA,EAAA,IA IA,MAAA,UAAA,EAAA,EAAA,GACA,MAAA,GAAA,GAAA,EAAA,EAAA,EAAA,GACA,EAAA,EAAA,EAAA,MA IA,4BAAA,SAAA,EAAA,EAAA,GAOA,MANA,GAAA,EAAA,GACA,EAAA,EAAA,GACA,EAAA,EAAA,GAEA,K AAA,aAAA,EAEA,SAAA,EAAA,EAAA,GACA,MAAA,GAAA,EAAA,EAAA,GACA,EAAA,EAAA,EAAA,GACA,E AAA,EAAA,EAAA,KAIA,iBAAA,SAAA,GACA,GAAA,GAAA,GAAA,GAAA,EAEA,OADA,GAAA,KAAA,aACA, GAGA,uBAAA,SAAA,EAAA,EAAA,GACA,GAAA,GAAA,GAAA,GAAA,EAAA,EAAA,EAGA,OAFA,GAAA,cACA ,KAAA,aAAA,GACA,GAGA,qBAAA,SAAA,EAAA,GACA,KAAA,YAAA,IACA,KAAA,OAAA,mDAEA,IAAA,GA AA,GAAA,GAAA,EAAA,KAAA,EAEA,OAAA,UAAA,EAAA,EAAA,GACA,MAAA,GAAA,UAAA,EAAA,EAAA,GA AA,KAIA,cAAA,SAAA,GACA,MAAA,IAAA,GAAA,EAAA,QAGA,sBAAA,SAAA,GACA,IAAA,GAAA,GAAA,E AAA,EAAA,EAAA,OAAA,IACA,EAAA,GAAA,EAAA,EAAA,GAEA,OAAA,UAAA,EAAA,EAAA,GAEA,IAAA,G ADA,MACA,EAAA,EAAA,EAAA,EAAA,OAAA,IACA,EAAA,KAAA,EAAA,GAAA,EAAA,EAAA,GACA,OAAA,K AIA,eAAA,SAAA,EAAA,EAAA,GACA,OACA,IAAA,YAAA,GAAA,EAAA,KAAA,EAAA,MACA,MAAA,IAIA,u BAAA,SAAA,GACA,IAAA,GAAA,GAAA,EAAA,EAAA,EAAA,OAAA,IACA,EAAA,GAAA,MAAA,EAAA,EAAA, GAAA,MAEA,OAAA,UAAA,EAAA,EAAA,GAEA,IAAA,GADA,MACA,EAAA,EAAA,EAAA,EAAA,OAAA,IACA, EAAA,EAAA,GAAA,KACA,EAAA,GAAA,MAAA,EAAA,EAAA,EACA,OAAA,KAIA,aAAA,SAAA,EAAA,GACA, KAAA,QAAA,KAAA,GAAA,GAAA,EAAA,KAGA,mBAAA,SAAA,EAAA,GACA,KAAA,WAAA,EACA,KAAA,WAAA ,GAGA,mBAAA,SAAA,EAAA,EAAA,GACA,KAAA,WAAA,EACA,KAAA,WAAA,EACA,KAAA,WAAA,GAGA,eAA A,SAAA,GACA,KAAA,WAAA,GAGA,qBAAA,GAOA,EAAA,WACA,KAAA,WAAA,MAAA,MAAA,QACA,eAAA,WA AA,MAAA,MAAA,QACA,QAAA,aACA,MAAA,cAiBA,EAAA,WACA,WAAA,SAAA,EAAA,EAAA,GAUA,QAAA,K AEA,GAAA,EAEA,MADA,IAAA,EACA,CAGA,GAAA,aACA,EAAA,YAEA,IAAA,GAAA,EAAA,SAAA,EACA,E AAA,YAAA,EAAA,OACA,EAIA,OAHA,GAAA,aACA,EAAA,cAEA,EAGA,QAAA,GAAA,GAEA,MADA,GAAA,S AAA,EAAA,EAAA,GACA,EA9BA,GAAA,EACA,MAAA,MAAA,SAAA,EAAA,OAAA,EAEA,IAAA,GAAA,GAAA, kBAEA,EAAA,KAAA,SAAA,EAAA,EAAA,GACA,GAAA,EACA,EAAA,IA0BA,OAAA,IAAA,mBAAA,EAAA,EA AA,GAAA,IAGA,SAAA,SAAA,EAAA,EAAA,GAEA,IAAA,GADA,GAAA,EAAA,KAAA,YAAA,EAAA,EAAA,GA CA,EAAA,EAAA,EAAA,KAAA,QAAA,OAAA,IACA,EAAA,KAAA,QAAA,GAAA,UAAA,EAAA,EAAA,GACA,GA AA,GAGA,OAAA,IAGA,SAAA,SAAA,EAAA,EAAA,GAEA,IADA,GAAA,GAAA,KAAA,QAAA,KAAA,QAAA,OA AA,EACA,IAAA,GACA,EAAA,KAAA,QAAA,GAAA,UAAA,EAAA,OACA,GAAA,GAAA,GAGA,OAAA,MAAA,WA AA,SACA,KAAA,WAAA,SAAA,EAAA,GADA,QAeA,IAAA,GAAA,IAAA,KAAA,SAAA,SAAA,IAAA,MAAA,EA iCA,GAAA,WAEA,YAAA,SAAA,GACA,GAAA,KACA,KAAA,GAAA,KAAA,GACA,EAAA,KAAA,EAAA,GAAA,K AAA,EAAA,GAEA,OAAA,GAAA,KAAA,OAGA,UAAA,SAAA,GACA,GAAA,KACA,KAAA,GAAA,KAAA,GACA,E AAA,IACA,EAAA,KAAA,EAEA,OAAA,GAAA,KAAA,MAIA,+BAAA,SAAA,GACA,GAAA,GAAA,EAAA,4BACA ,IAAA,EAGA,MAAA,UAAA,EAAA,GACA,EAAA,MAAA,GAAA,IAIA,eAAA,SAAA,EAAA,EAAA,GACA,GAAA ,GAAA,KAAA,IAAA,EAEA,EAAA,GAAA,EAAA,KAAA,EAAA,MAaA,MAAA,GAAA,EAAA,EAAA,EAAA,KAZA ,IAAA,GAAA,EAAA,OACA,MAAA,UAAA,EAAA,EAAA,GACA,GAAA,EACA,MAAA,GAAA,aAAA,EAEA,IAAA ,GAAA,EAAA,EAAA,EAAA,GACA,OAAA,IAAA,cAAA,EAAA,MASA,qBAAA,SAAA,GACA,GAAA,GAAA,EAA A,4BACA,IAAA,EAAA,CAGA,GAAA,GAAA,EAAA,iBACA,EAAA,iBAAA,MACA,EAAA,MAEA,EAAA,EAAA, 4BAEA,OAAA,UAAA,GACA,MAAA,GAAA,EAAA,EAAA,EAAA,MAKA,IAAA,GAAA,gBACA,SAAA,EAAA,EAA A,EAAA,GACA,GAAA,KAKA,OAJA,GAAA,GAAA,EACA,EAAA,GAAA,OACA,EAAA,GAAA,EACA,EAAA,UAA A,EACA,GAEA,SAAA,EAAA,EAAA,EAAA,GACA,GAAA,GAAA,OAAA,OAAA,EAOA,OANA,QAAA,eAAA,EAA A,GACA,MAAA,EAAA,cAAA,EAAA,UAAA,IACA,OAAA,eAAA,EAAA,GACA,MAAA,OAAA,cAAA,EAAA,UAA A,IACA,OAAA,eAAA,EAAA,GACA,MAAA,EAAA,cAAA,EAAA,UAAA,IACA,EAGA,GAAA,mBAAA,EACA,EA AA,cAAA,GACA,MCrmBA,SACA,QAAA,iBCGA,kBAAA,QAAA,UACA,YCJA,SAAA,GAGA,QAAA,GAAA,EAA A,GAiBA,MAhBA,IAAA,GAEA,OAAA,oBAAA,GAAA,QAAA,SAAA,GAEA,GAAA,GAAA,OAAA,yBAAA,EAAA ,EACA,KAEA,OAAA,eAAA,EAAA,EAAA,GAEA,kBAAA,GAAA,QAEA,EAAA,MAAA,IAAA,MAKA,EAKA,EAA A,OAAA,GAEA,SC3BA,SAAA,GA6CA,QAAA,GAAA,EAAA,EAAA,GAOA,MANA,GACA,EAAA,OAEA,EAAA,G AAA,GAAA,MAEA,EAAA,GAAA,EAAA,GACA,EAzCA,GAAA,GAAA,SAAA,GACA,KAAA,QAAA,EACA,KAAA, cAAA,KAAA,SAAA,KAAA,MAEA,GAAA,WACA,GAAA,SAAA,EAAA,GACA,KAAA,SAAA,CACA,IAAA,EACA, IAMA,EAAA,WAAA,KAAA,cAAA,GACA,KAAA,OAAA,WACA,aAAA,MAPA,EAAA,sBAAA,KAAA,eACA,KAAA ,OAAA,WACA,qBAAA,MASA,KAAA,WACA,KAAA,SACA,KAAA,SACA,KAAA,OAAA,OAGA,SAAA,WACA,KAA A,SACA,KAAA,OACA,KAAA,SAAA,KAAA,KAAA,YAiBA,EAAA,IAAA,GAEA,SC3DA,WAEA,GAAA,KAEA,a AAA,SAAA,SAAA,EAAA,GACA,EAAA,GAAA,GAIA,YAAA,mBAAA,SAAA,GACA,GAAA,GAAA,EAAA,EAAA, GAAA,YAAA,SAEA,OAAA,IAAA,OAAA,eAAA,SAAA,cAAA,IAIA,IAAA,GAAA,MAAA,UAAA,eACA,OAAA, UAAA,gBAAA,WACA,KAAA,cAAA,EACA,EAAA,MAAA,KAAA,aASA,SC5BA,SAAA,GAgBA,QAAA,GAAA,GA MA,GAAA,GAAA,EAAA,OAEA,EAAA,EAAA,IAEA,EAAA,EAAA,MACA,KACA,IACA,EAAA,EAAA,IAAA,EA AA,KAAA,KAAA,IAEA,GACA,QAAA,KAAA,iFAQA,EAAA,EAAA,EAAA,EAAA,EAAA,OAGA,IAAA,GAAA,E AAA,EACA,OAAA,IAEA,EAAA,QAEA,EAAA,EAAA,EAAA,GAIA,EAAA,MAAA,KAAA,QARA,OAYA,QAAA,G AAA,GAEA,IADA,GAAA,GAAA,KAAA,UACA,GAAA,IAAA,YAAA,WAAA,CAGA,IAAA,GAAA,GADA,EAAA,O AAA,oBAAA,GACA,EAAA,EAAA,EAAA,EAAA,OAAA,EAAA,IAAA,EAAA,EAAA,IAAA,IAAA,CACA,GAAA, GAAA,OAAA,yBAAA,EAAA,EACA,IAAA,kBAAA,GAAA,OAAA,EAAA,QAAA,EACA,MAAA,GAGA,EAAA,EAA A,WAIA,QAAA,GAAA,EAAA,EAAA,GAIA,GAAA,GAAA,EAAA,EAAA,EAAA,EAMA,OALA,GAAA,KAGA,EAA A,GAAA,IAAA,GAEA,EAAA,OAAA,EAGA,QAAA,GAAA,EAAA,EAAA,GAEA,KAAA,GAAA,CACA,GAAA,EAA A,KAAA,GAAA,EAAA,GACA,MAAA,EAEA,GAAA,EAAA,GAMA,MAAA,QAMA,QAAA,GAAA,GACA,MAAA,GAA A,UAkBA,EAAA,MAAA,GAEA,SC3HA,SAAA,GAEA,QAAA,GAAA,GACA,MAAA,GA8CA,QAAA,GAAA,EAAA, GAEA,GAAA,SAAA,EAMA,OAJA,aAAA,QACA,EAAA,QAGA,EAAA,GAAA,EAAA,GAnDA,GAAA,IACA,OAAA ,EACA,UAAA,EACA,KAAA,SAAA,GACA,MAAA,IAAA,MAAA,KAAA,MAAA,IAAA,KAAA,QAEA,UAAA,SAAA ,GACA,MAAA,KAAA,GACA,EAEA,UAAA,GAAA,IAAA,GAEA,OAAA,SAAA,GACA,GAAA,GAAA,WAAA,EAKA ,OAHA,KAAA,IACA,EAAA,SAAA,IAEA,MAAA,GAAA,EAAA,GAKA,OAAA,SAAA,EAAA,GACA,GAAA,OAAA ,EACA,MAAA,EAEA,KAIA,MAAA,MAAA,MAAA,EAAA,QAAA,KAAA,MACA,MAAA,GAEA,MAAA,KAIA,WAAA ,SAAA,EAAA,GACA,MAAA,IAiBA,GAAA,iBAAA,GAEA,SCjEA,SAAA,GAIA,GAAA,GAAA,EAAA,OAIA,I AEA,GAAA,eACA,EAAA,YAEA,EAAA,QAAA,SAAA,EAAA,GACA,IAAA,GAAA,KAAA,GACA,EAAA,EAAA,E AAA,KAMA,EAAA,IAAA,GAEA,SCtBA,SAAA,GAEA,GAAA,IASA,MAAA,SAAA,EAAA,EAAA,GAGA,SAAA, QAEA,EAAA,GAAA,EAAA,OAAA,GAAA,EAEA,IAAA,GAAA,YACA,KAAA,IAAA,GAAA,MAAA,KAAA,IACA, KAAA,MAEA,EAAA,EAAA,WAAA,EAAA,GACA,sBAAA,EAEA,OAAA,GAAA,GAAA,GAEA,YAAA,SAAA,GACA ,EAAA,EACA,sBAAA,GAEA,aAAA,IAaA,KAAA,SAAA,EAAA,EAAA,EAAA,EAAA,GACA,GAAA,GAAA,GAA A,KACA,EAAA,OAAA,GAAA,SAAA,KAAA,EACA,EAAA,GAAA,aAAA,GACA,QAAA,SAAA,EAAA,GAAA,EAC A,WAAA,SAAA,EAAA,GAAA,EACA,OAAA,GAGA,OADA,GAAA,cAAA,GACA,GASA,UAAA,WACA,KAAA,MAA A,OAAA,YASA,aAAA,SAAA,EAAA,EAAA,GACA,GACA,EAAA,UAAA,OAAA,GAEA,GACA,EAAA,UAAA,IAA A,IASA,gBAAA,SAAA,EAAA,GACA,GAAA,GAAA,SAAA,cAAA,WACA,GAAA,UAAA,CACA,IAAA,GAAA,KA AA,iBAAA,EAKA,OAJA,KACA,EAAA,YAAA,GACA,EAAA,YAAA,IAEA,IAKA,EAAA,aAGA,IAIA,GAAA,Y AAA,EAAA,MAIA,EAAA,IAAA,SAAA,MAAA,EACA,EAAA,IAAA,EACA,EAAA,IAAA,GAEA,SClHA,SAAA, GAIA,GAAA,GAAA,OAAA,aACA,EAAA,MAGA,GAEA,aAAA,EAEA,iBAAA,WACA,GAAA,GAAA,KAAA,cACA ,GAAA,QAAA,OAAA,KAAA,GAAA,OAAA,GAAA,QAAA,IAAA,yBAAA,KAAA,UAAA,EAKA,KAAA,GAAA,KAA A,GAAA,CACA,GAAA,GAAA,EAAA,EACA,iBAAA,iBAAA,KAAA,EAAA,KAAA,QAAA,gBAAA,KAAA,KAAA, MAIA,eAAA,SAAA,EAAA,EAAA,GACA,GAAA,EAAA,CACA,EAAA,QAAA,QAAA,MAAA,qBAAA,EAAA,UAAA ,EACA,IAAA,GAAA,kBAAA,GAAA,EAAA,EAAA,EACA,IACA,EAAA,EAAA,QAAA,QAAA,EAAA,GAEA,EAA A,QAAA,QAAA,WACA,SAAA,UAOA,GAAA,IAAA,SAAA,OAAA,EAGA,EAAA,iBAAA,gBAAA,iBACA,EAAA, oBAAA,gBAAA,qBAEA,SC9CA,SAAA,GAIA,GAAA,IACA,uBAAA,WACA,GAAA,GAAA,KAAA,mBACA,KAAA ,GAAA,KAAA,GACA,KAAA,aAAA,IACA,KAAA,aAAA,EAAA,EAAA,KAKA,eAAA,WAGA,GAAA,KAAA,WACA ,IAAA,GAAA,GAAA,EAAA,EAAA,EAAA,KAAA,WAAA,EAAA,EAAA,QAAA,EAAA,EAAA,KAAA,EAAA,EAAA ,IACA,KAAA,oBAAA,EAAA,KAAA,EAAA,QAMA,oBAAA,SAAA,EAAA,GAGA,GAAA,GAAA,KAAA,qBAAA,E ACA,IAAA,EAAA,CAIA,GAAA,GAAA,EAAA,OAAA,EAAA,cAAA,EACA,MAGA,IAAA,GAAA,KAAA,GAEA,E AAA,KAAA,iBAAA,EAAA,EAEA,KAAA,IAEA,KAAA,GAAA,KAKA,qBAAA,SAAA,GACA,GAAA,GAAA,KAAA ,YAAA,KAAA,WAAA,EAEA,OAAA,IAGA,iBAAA,SAAA,EAAA,GACA,MAAA,GAAA,iBAAA,EAAA,IAEA,eA AA,SAAA,EAAA,GACA,MAAA,YAAA,EACA,EAAA,GAAA,OACA,WAAA,GAAA,aAAA,GACA,SAAA,EACA,EA FA,QAKA,2BAAA,SAAA,GACA,GAAA,SAAA,MAAA,GAEA,EAAA,KAAA,eAAA,KAAA,GAAA,EAEA,UAAA,E ACA,KAAA,aAAA,EAAA,GAMA,YAAA,GACA,KAAA,gBAAA,IAOA,GAAA,IAAA,SAAA,WAAA,GAEA,SCvFA ,SAAA,GAyBA,QAAA,GAAA,EAAA,GACA,MAAA,KAAA,EACA,IAAA,GAAA,EAAA,IAAA,EAAA,EACA,EAA A,IAAA,EAAA,IACA,EAEA,IAAA,GAAA,IAAA,EAKA,QAAA,GAAA,EAAA,GACA,MAAA,UAAA,GAAA,OAA A,EACA,EAEA,OAAA,GAAA,SAAA,EAAA,EAAA,EApCA,GAAA,GAAA,OAAA,aAUA,GACA,OAAA,OACA,KA AA,SACA,KAAA,OACA,SAAA,QAGA,EAAA,OAAA,OAAA,SAAA,GACA,MAAA,gBAAA,IAAA,MAAA,IAqBA, GACA,uBAAA,WACA,GAAA,GAAA,KAAA,aACA,IAAA,GAAA,EAAA,OAAA,CACA,GAAA,GAAA,KAAA,kBAA A,GAAA,mBAAA,EACA,MAAA,iBAAA,EAKA,KAAA,GAAA,GAAA,EAAA,EAAA,EAAA,EAAA,OAAA,EAAA,I AAA,EAAA,EAAA,IAAA,IACA,EAAA,QAAA,KAAA,GACA,KAAA,kBAAA,EAAA,KAAA,GAAA,QAIA,qBAAA ,WACA,KAAA,mBACA,KAAA,kBAAA,KAAA,KAAA,sBAAA,OAGA,sBAAA,SAAA,EAAA,EAAA,GACA,GAAA, GAAA,EAAA,IACA,KAAA,GAAA,KAAA,GAIA,GAFA,EAAA,EAAA,EAAA,EAAA,GACA,EAAA,KAAA,QAAA, GACA,CACA,GAAA,GAAA,EAAA,GAAA,EAAA,EAAA,EAEA,MAAA,kBAAA,EAAA,EAAA,GACA,EAAA,KAEA ,SAAA,GAAA,OAAA,GAAA,SAAA,GAAA,OAAA,KACA,EAAA,IAAA,EAKA,KAAA,aAAA,GAAA,EAAA,EAAA ,eAMA,eAAA,WACA,KAAA,mBACA,KAAA,kBAAA,WAGA,iBAAA,SAAA,GACA,KAAA,QAAA,IACA,KAAA,2 BAAA,IAGA,kBAAA,SAAA,EAAA,EAAA,GAEA,GAAA,GAAA,KAAA,QAAA,EACA,IAAA,IAEA,MAAA,QAAA ,KACA,EAAA,SAAA,QAAA,IAAA,mDAAA,KAAA,UAAA,GACA,KAAA,mBAAA,EAAA,YAGA,MAAA,QAAA,IA AA,CACA,EAAA,SAAA,QAAA,IAAA,iDAAA,KAAA,UAAA,EAAA,EACA,IAAA,GAAA,GAAA,eAAA,EACA,G AAA,KAAA,SAAA,EAAA,GACA,KAAA,aAAA,GAAA,KACA,MACA,KAAA,sBAAA,EAAA,UAAA,KAIA,yBAAA ,SAAA,EAAA,EAAA,GAEA,IAAA,EAAA,EAAA,KAGA,KAAA,iBAAA,EAAA,EAAA,GAEA,SAAA,kBAAA,CA GA,GAAA,GAAA,KAAA,SACA,KACA,EAAA,KAAA,UAAA,OAAA,YAAA,OAEA,EAAA,OAAA,KACA,EAAA,KA AA,EACA,EAAA,SAAA,EAEA,EAAA,OAAA,KAEA,eAAA,SAAA,EAAA,EAAA,GACA,GAAA,GAAA,EAAA,IA CA,EAAA,EAAA,aAEA,MAAA,GAAA,CACA,IAAA,GAAA,KAAA,GAEA,EAAA,KACA,EAAA,EAAA,KAAA,SA AA,EAAA,GACA,EAAA,GAAA,EACA,EAAA,yBAAA,EAAA,EAAA,IAGA,IAAA,IAAA,EAAA,EAAA,GAAA,C ACA,GAAA,GAAA,EAAA,EAAA,EACA,GAAA,EAAA,KACA,EAAA,EACA,EAAA,UACA,EAAA,SAAA,IAIA,K AAA,GAAA,EACA,KAAA,yBAAA,EAAA,EAAA,EAEA,IAAA,IACA,MAAA,WACA,EAAA,QACA,EAAA,GAAA, QAIA,OADA,MAAA,iBAAA,GACA,GAEA,yBAAA,WACA,GAAA,KAAA,eAIA,IAAA,GAAA,GAAA,EAAA,EAA A,KAAA,eAAA,OAAA,IAAA,CACA,GAAA,GAAA,KAAA,eAAA,GACA,EAAA,KAAA,SAAA,EACA,KACA,GAA A,GAAA,mBAAA,cAAA,GACA,EAAA,EAAA,WAAA,KAAA,KAAA,QAAA,OACA,MAAA,eAAA,EAAA,GACA,MA AA,GACA,QAAA,MAAA,qCAAA,MAIA,aAAA,SAAA,EAAA,EAAA,GACA,MAAA,QACA,KAAA,GAAA,GAGA,K AAA,eAAA,EAAA,EAAA,IAEA,aAAA,SAAA,EAAA,GACA,GAAA,GAAA,KAAA,IAAA,CACA,mBAAA,IACA, EAAA,MAAA,KAAA,IAGA,iBAAA,SAAA,GACA,MAAA,MAAA,eAKA,MAAA,WAAA,KAAA,QAJA,KAAA,YAAA ,KAOA,eAAA,WACA,GAAA,KAAA,WAAA,CAKA,IAAA,GADA,GAAA,KAAA,WACA,EAAA,EAAA,EAAA,EAAA ,OAAA,IAAA,CACA,GAAA,GAAA,EAAA,EACA,IAAA,kBAAA,GAAA,OACA,EAAA,QAIA,KAAA,gBAGA,sB AAA,SAAA,EAAA,GACA,GAAA,GAAA,KAAA,kBAAA,KAAA,mBACA,GAAA,GAAA,GAEA,mBAAA,SAAA,GAC A,GAAA,GAAA,KAAA,eACA,OAAA,IAAA,EAAA,IACA,EAAA,GAAA,QACA,EAAA,GAAA,MACA,GAHA,QAM A,oBAAA,WACA,GAAA,KAAA,gBAAA,CACA,IAAA,GAAA,KAAA,MAAA,gBACA,KAAA,mBAAA,EAEA,MAAA ,qBAYA,GAAA,IAAA,SAAA,WAAA,GAEA,SClQA,SAAA,GAIA,GAAA,GAAA,OAAA,UAAA,EAGA,GACA,iB AAA,SAAA,GAMA,IAAA,GAJA,GAAA,KAAA,SAAA,EAAA,iBACA,KAAA,QAAA,OACA,EAAA,EAAA,eAAA, KAAA,GACA,EAAA,EAAA,UACA,EAAA,EAAA,EAAA,EAAA,OAAA,IACA,KAAA,iBAAA,EAAA,GAEA,OAAA ,IAEA,KAAA,SAAA,EAAA,EAAA,GACA,GAAA,GAAA,KAAA,qBAAA,EACA,IAAA,EAIA,CAEA,GAAA,GAA A,KAAA,aAAA,EAAA,EAAA,EAUA,OAPA,UAAA,0BAAA,IACA,EAAA,KAAA,EAAA,MACA,KAAA,eAAA,EA AA,IAEA,KAAA,QAAA,IACA,KAAA,2BAAA,GAEA,EAbA,MAAA,MAAA,WAAA,YAgBA,aAAA,WACA,KAAA, oBAEA,eAAA,SAAA,EAAA,GACA,KAAA,UAAA,KAAA,cACA,KAAA,UAAA,GAAA,GAKA,eAAA,WACA,KAAA ,WACA,EAAA,QAAA,QAAA,IAAA,sBAAA,KAAA,WACA,KAAA,cAAA,KAAA,IAAA,KAAA,cAAA,KAAA,UAA A,KAGA,UAAA,WACA,KAAA,WACA,KAAA,iBACA,KAAA,sBACA,KAAA,UAAA,IAGA,gBAAA,WACA,MAAA, MAAA,cACA,EAAA,QAAA,QAAA,KAAA,gDAAA,KAAA,aAGA,EAAA,QAAA,QAAA,IAAA,uBAAA,KAAA,gBA CA,KAAA,gBACA,KAAA,cAAA,KAAA,cAAA,YAsBA,EAAA,gBAIA,GAAA,YAAA,EACA,EAAA,IAAA,SAAA ,IAAA,GAEA,SCnGA,SAAA,GAuNA,QAAA,GAAA,GACA,MAAA,GAAA,eAAA,eAKA,QAAA,MA3NA,GAAA,I ACA,aAAA,EACA,IAAA,SAAA,EAAA,EAAA,GACA,GAAA,gBAAA,GAIA,MAAA,SAAA,IAAA,KAAA,KAAA, EAAA,EAAA,EAHA,IAAA,GAAA,MAAA,CACA,MAAA,GAAA,QAAA,IAAA,KAAA,KAAA,KAAA,GAAA,EAAA, IAKA,QAAA,QAAA,MAEA,QAAA,aAIA,MAAA,aAEA,gBAAA,WACA,KAAA,kBAAA,KAAA,iBAAA,OACA,QA AA,KAAA,iBAAA,KAAA,UAAA,wGAIA,KAAA,UACA,KAAA,iBACA,KAAA,cAAA,mBACA,KAAA,oBAIA,eA AA,WACA,MAAA,MAAA,qBACA,SAAA,KAAA,2BAAA,KAAA,YAGA,KAAA,kBAAA,EAEA,KAAA,eAEA,KAAA ,yBACA,KAAA,uBAEA,KAAA,yBAEA,KAAA,qBAEA,MAAA,qBAEA,iBAAA,WACA,KAAA,WAGA,KAAA,UAA A,EACA,KAAA,2BAIA,KAAA,kBAAA,KAAA,WAIA,KAAA,gBAAA,cAEA,KAAA,UAEA,iBAAA,WACA,KAAA ,kBAEA,KAAA,UACA,KAAA,WAGA,KAAA,aACA,KAAA,cAMA,KAAA,kBACA,KAAA,iBAAA,EACA,KAAA,U ACA,KAAA,MAAA,cAIA,iBAAA,WACA,KAAA,gBACA,KAAA,iBAGA,KAAA,UACA,KAAA,WAGA,KAAA,UAC A,KAAA,YAIA,oBAAA,WACA,KAAA,oBAGA,iBAAA,WACA,KAAA,oBAGA,wBAAA,WACA,KAAA,oBAGA,qB AAA,WACA,KAAA,oBAGA,kBAAA,SAAA,GACA,GAAA,EAAA,UACA,KAAA,kBAAA,EAAA,WACA,EAAA,iBA AA,KAAA,KAAA,EAAA,WAIA,iBAAA,SAAA,GACA,GAAA,GAAA,KAAA,cAAA,EACA,IAAA,EAAA,CACA,G AAA,GAAA,KAAA,mBAAA,EACA,MAAA,YAAA,EAAA,MAAA,IAIA,cAAA,SAAA,GACA,MAAA,GAAA,cAAA, aAGA,mBAAA,SAAA,GACA,GAAA,EAAA,CAEA,GAAA,GAAA,KAAA,mBAKA,EAAA,KAAA,iBAAA,EAMA,OA JA,GAAA,YAAA,GAEA,KAAA,gBAAA,EAAA,GAEA,IAIA,kBAAA,SAAA,EAAA,GACA,GAAA,EAAA,CAKA, KAAA,gBAAA,IAKA,IAAA,GAAA,KAAA,iBAAA,EAUA,OARA,GACA,KAAA,aAAA,EAAA,GAEA,KAAA,YAA A,GAGA,KAAA,gBAAA,MAEA,IAGA,gBAAA,SAAA,GAEA,KAAA,sBAAA,IAGA,sBAAA,SAAA,GAEA,GAAA ,GAAA,KAAA,EAAA,KAAA,KAEA,IAAA,EAEA,IAAA,GAAA,GADA,EAAA,EAAA,iBAAA,QACA,EAAA,EAA A,EAAA,EAAA,OAAA,EAAA,IAAA,EAAA,EAAA,IAAA,IACA,EAAA,EAAA,IAAA,GAIA,yBAAA,SAAA,GA EA,UAAA,GAAA,UAAA,GACA,KAAA,oBAAA,EAAA,KAAA,aAAA,IAEA,KAAA,kBACA,KAAA,iBAAA,MAAA ,KAAA,YAGA,WAAA,SAAA,EAAA,GACA,GAAA,GAAA,GAAA,kBAAA,SAAA,GACA,EAAA,KAAA,KAAA,EAA A,GACA,EAAA,cACA,KAAA,MACA,GAAA,QAAA,GAAA,WAAA,EAAA,SAAA,KAYA,GAAA,UAAA,EACA,EAA A,YAAA,EAIA,EAAA,KAAA,EACA,EAAA,OAAA,EACA,EAAA,IAAA,SAAA,KAAA,GAEA,SCvOA,SAAA,GA yFA,QAAA,GAAA,GACA,MAAA,GAAA,UAGA,QAAA,GAAA,EAAA,GACA,GAAA,GAAA,GAAA,GAAA,CACA,K ACA,EAAA,EAAA,UACA,EAAA,EAAA,aAAA,MAEA,IAAA,GAAA,SAAA,UAAA,kBAAA,EAAA,EACA,OAAA, UAAA,UAAA,YAAA,EAAA,GAhGA,GACA,IADA,OAAA,aACA,OAAA,mBAIA,EAAA,UACA,EAAA,aAEA,GAC A,sBAAA,EAMA,wBAAA,WAEA,GAAA,GAAA,KAAA,gBACA,IAAA,IAAA,KAAA,mBAAA,EAAA,KAAA,WAAA ,CAGA,IADA,GAAA,GAAA,EAAA,MAAA,EAAA,GACA,GAAA,EAAA,SACA,GAAA,EAAA,QAAA,gBAAA,GAC A,EAAA,EAAA,EAEA,IACA,KAAA,oBAAA,EAAA,KAIA,kBAAA,SAAA,EAAA,EAAA,GACA,GAAA,GAAA,G AAA,KAAA,iBAAA,EAAA,GAAA,EACA,IAAA,IAAA,KAAA,mBAAA,EAAA,KAAA,UAAA,GAAA,CACA,GAAA ,GAAA,EACA,IAAA,YAAA,OACA,IAAA,GAAA,GAAA,EAAA,EAAA,EAAA,EAAA,OAAA,EAAA,IAAA,EAAA ,EAAA,IAAA,IACA,GAAA,EAAA,YAAA,WAGA,GAAA,EAAA,WAEA,MAAA,oBAAA,EAAA,EAAA,KAGA,oBA AA,SAAA,EAAA,EAAA,GAGA,GAFA,EAAA,GAAA,KAAA,iBACA,EAAA,GAAA,GACA,EAAA,CAGA,IACA,E AAA,EAAA,EAAA,EAAA,MAEA,IAAA,GAAA,KAAA,QAAA,oBAAA,EACA,EACA,SAAA,kBAAA,EAAA,GAEA ,KAAA,mBAAA,GAAA,KAAA,UAAA,IAAA,IAEA,eAAA,SAAA,GAGA,IADA,GAAA,GAAA,GAAA,KACA,EAA A,YACA,EAAA,EAAA,UAEA,OAAA,IAEA,mBAAA,SAAA,EAAA,GACA,GAAA,GAAA,KAAA,mBAAA,EACA,O AAA,GAAA,IAEA,mBAAA,SAAA,GACA,GAAA,EAAA,CACA,GAAA,GAAA,EAAA,KAAA,EAAA,KAAA,UAAA, EAAA,SACA,OAAA,GAAA,KAAA,EAAA,OAEA,MAAA,GAAA,aAAA,EAAA,mBAKA,IAoBA,GAAA,IAAA,SAA A,OAAA,GAEA,SC3GA,SAAA,GAUA,QAAA,GAAA,EAAA,GACA,GAAA,IAAA,UAAA,QAAA,gBAAA,WAAA,G AAA,CACA,EAAA,CACA,IAAA,GAAA,SAAA,cAGA,IAFA,EAAA,GAAA,EAAA,YAAA,EAAA,WAAA,aACA,E AAA,WAAA,aAAA,QAAA,IACA,EACA,KAAA,sCAGA,GAAA,EAAA,GACA,KAAA,sDAAA,CAGA,GAAA,EAAA ,GAEA,EAAA,GAKA,QAAA,GAAA,EAAA,GACA,EAAA,GAAA,EAKA,QAAA,GAAA,GACA,EAAA,KACA,EAAA ,GAAA,0BACA,GAAA,IAgBA,QAAA,GAAA,EAAA,GACA,MAAA,GAAA,GAAA,MAGA,QAAA,GAAA,GACA,MA AA,GAAA,GAzDA,GAAA,GAAA,EAAA,OA+BA,GA9BA,EAAA,QAiDA,IAYA,GAAA,uBAAA,EACA,EAAA,oB AAA,EAOA,OAAA,QAAA,EAKA,EAAA,QAAA,EAOA,IAAA,GAAA,SAAA,qBACA,IAAA,EACA,IAAA,GAAA, GAAA,EAAA,EAAA,EAAA,EAAA,OAAA,EAAA,IAAA,EAAA,EAAA,IAAA,IACA,EAAA,MAAA,KAAA,IAIA, SC7FA,SAAA,GAEA,GAAA,IACA,oBAAA,SAAA,GACA,SAAA,YAAA,WAAA,IAEA,kBAAA,WAEA,GAAA,GA AA,KAAA,aAAA,cAAA,GACA,EAAA,GAAA,KAAA,EAAA,KAAA,cAAA,QACA,MAAA,UAAA,YAAA,SAAA,EA AA,GACA,GAAA,GAAA,GAAA,KAAA,EAAA,GAAA,EACA,OAAA,GAAA,OAMA,GAAA,IAAA,YAAA,KAAA,GA EA,SCpBA,SAAA,GA4KA,QAAA,GAAA,EAAA,GACA,GAAA,GAAA,GAAA,KAAA,EAAA,aAAA,QAAA,GAAA, IACA,OAAA,YAAA,EAAA,KAGA,QAAA,GAAA,EAAA,GACA,GAAA,EAAA,CACA,IAAA,WACA,EAAA,SAAA, MAEA,IACA,EAAA,SAAA,KAOA,IAAA,GAAA,EAAA,EAAA,aACA,EAAA,EAAA,aAAA,EACA,IACA,EAAA, aAAA,EAAA,EAIA,IAAA,GAAA,EAAA,iBACA,IAAA,IAAA,SAAA,KAAA,CACA,GAAA,GAAA,SAAA,EAAA ,IACA,EAAA,SAAA,KAAA,iBAAA,EACA,GAAA,SACA,EAAA,EAAA,EAAA,OAAA,GAAA,oBAGA,EAAA,aA AA,EAAA,IAIA,QAAA,GAAA,EAAA,GACA,EAAA,GAAA,SACA,EAAA,EAAA,cAAA,EAAA,EAAA,aACA,IA AA,GAAA,EAAA,cAAA,QAEA,OADA,GAAA,YAAA,EACA,EAGA,QAAA,GAAA,GACA,MAAA,IAAA,EAAA,YA AA,GAGA,QAAA,GAAA,EAAA,GACA,MAAA,GACA,EAAA,KAAA,EAAA,GADA,OA1NA,GACA,IADA,OAAA,a ACA,EAAA,IAAA,SAAA,QACA,EAAA,EAAA,sBAEA,EAAA,OAAA,kBAIA,EAAA,QACA,EAAA,UACA,EAAA ,uBACA,EAAA,SACA,EAAA,gBAEA,GAEA,WAAA,SAAA,GACA,GAAA,GAAA,KAAA,gBACA,EAAA,GAAA,K AAA,iBACA,IAAA,EAAA,CACA,KAAA,sBAAA,EACA,IAAA,GAAA,KAAA,mBAAA,EACA,IAAA,EAAA,OAA A,CACA,GAAA,GAAA,EAAA,cAAA,OACA,OAAA,UAAA,cAAA,WAAA,EAAA,EAAA,IAGA,GACA,KAGA,sBA AA,SAAA,GAEA,IAAA,GAAA,GAAA,EADA,EAAA,EAAA,iBAAA,GACA,EAAA,EAAA,EAAA,EAAA,OAAA,E AAA,IAAA,EAAA,EAAA,IAAA,IACA,EAAA,EAAA,EAAA,EAAA,KAAA,cAAA,SACA,KAAA,eACA,KAAA,o BAAA,EAAA,GACA,EAAA,WAAA,aAAA,EAAA,IAGA,oBAAA,SAAA,EAAA,GACA,IAAA,GAAA,GAAA,EAAA ,EAAA,EAAA,EAAA,WAAA,EAAA,EAAA,QAAA,EAAA,EAAA,KAAA,EAAA,EAAA,IACA,QAAA,EAAA,MAAA ,SAAA,EAAA,MACA,EAAA,aAAA,EAAA,KAAA,EAAA,QAIA,mBAAA,SAAA,GACA,GAAA,KACA,IAAA,EAE A,IAAA,GAAA,GADA,EAAA,EAAA,iBAAA,GACA,EAAA,EAAA,EAAA,EAAA,OAAA,EAAA,IAAA,EAAA,EA AA,IAAA,IACA,EAAA,YAAA,MAAA,IACA,EAAA,KAAA,EAIA,OAAA,IAOA,cAAA,WACA,KAAA,cACA,KA AA,cACA,KAAA,qBACA,KAAA,uBAKA,YAAA,WACA,KAAA,OAAA,KAAA,UAAA,GACA,KAAA,OAAA,QAAA, SAAA,GACA,EAAA,YACA,EAAA,WAAA,YAAA,MAIA,YAAA,WACA,KAAA,OAAA,KAAA,UAAA,EAAA,IAAA, EAAA,KACA,KAAA,OAAA,QAAA,SAAA,GACA,EAAA,YACA,EAAA,WAAA,YAAA,MAaA,mBAAA,WACA,GAAA ,GAAA,KAAA,OAAA,OAAA,SAAA,GACA,OAAA,EAAA,aAAA,KAEA,EAAA,KAAA,iBACA,IAAA,EAAA,CAC A,GAAA,GAAA,EAIA,IAHA,EAAA,QAAA,SAAA,GACA,GAAA,EAAA,GAAA,OAEA,EAAA,CACA,GAAA,GAA A,EAAA,EAAA,KAAA,cACA,GAAA,aAAA,EAAA,EAAA,eAIA,UAAA,SAAA,EAAA,GACA,GAAA,GAAA,KAA A,iBAAA,GAAA,QACA,EAAA,KAAA,iBACA,IAAA,EAAA,CACA,GAAA,GAAA,EAAA,iBAAA,GAAA,OACA, GAAA,EAAA,OAAA,GAEA,MAAA,GAAA,EAAA,OAAA,GAAA,GAWA,oBAAA,WACA,GAAA,GAAA,KAAA,cAAA ,EACA,GAAA,EAAA,SAAA,OAEA,gBAAA,SAAA,GACA,GAAA,GAAA,GAEA,EAAA,IAAA,EAAA,IAAA,EAA A,IACA,EAAA,SAAA,GACA,MAAA,GAAA,EAAA,IAEA,EAAA,KAAA,OAAA,OAAA,EACA,GAAA,QAAA,SAA A,GACA,GAAA,EAAA,GAAA,QAGA,IAAA,GAAA,KAAA,OAAA,OAAA,EAIA,OAHA,GAAA,QAAA,SAAA,GAC A,GAAA,EAAA,YAAA,SAEA,GAEA,cAAA,SAAA,GACA,GAAA,GAAA,KAAA,gBAAA,EACA,OAAA,MAAA,oB AAA,EAAA,IAEA,oBAAA,SAAA,EAAA,GACA,GAAA,EAAA,CACA,GAAA,GAAA,EAAA,EAGA,OAFA,GAAA, aAAA,EAAA,KAAA,aAAA,QACA,IAAA,GACA,KA2DA,EAAA,YAAA,UACA,EAAA,EAAA,SAAA,EAAA,iBAA A,EAAA,uBACA,EAAA,kBAIA,GAAA,IAAA,YAAA,OAAA,EACA,EAAA,kBAAA,GAEA,SC3OA,SAAA,GAIA ,GACA,IADA,OAAA,aACA,EAAA,IAAA,SAAA,QACA,EAAA,EAAA,aAGA,MAEA,uBACA,qBACA,sBACA,c ACA,aACA,kBACA,QAAA,SAAA,GACA,EAAA,EAAA,eAAA,GAGA,IAAA,IACA,gBAAA,WAEA,GAAA,GAAA ,KAAA,UAAA,cAEA,MAAA,sBAAA,IAEA,sBAAA,SAAA,GAEA,IAAA,GAAA,GAAA,EAAA,EAAA,EAAA,KA AA,WAAA,GAAA,IAEA,KAAA,eAAA,EAAA,QAEA,EAAA,KAAA,kBAAA,EAAA,OAAA,EAAA,MAAA,QAAA,K AAA,IACA,QAAA,KAAA,IAAA,SAKA,eAAA,SAAA,GACA,MAAA,IAAA,MAAA,EAAA,IAAA,MAAA,EAAA,I AAA,MAAA,EAAA,IAEA,kBAAA,SAAA,GACA,MAAA,GAAA,MAAA,IAEA,eAAA,SAAA,GACA,KAAA,EAAA, YAAA,CACA,GAAA,EAAA,gBACA,MAAA,GAAA,eAEA,GAAA,EAAA,WAEA,MAAA,GAAA,MAEA,gBAAA,SAA A,EAAA,EAAA,GACA,GAAA,GAAA,IACA,OAAA,UAAA,GACA,GAAA,EAAA,cACA,EAAA,EAAA,eAAA,GAG A,IAAA,IAAA,EAAA,EAAA,OAAA,EAAA,cACA,GAAA,eAAA,EAAA,EAAA,KAGA,oBAAA,SAAA,EAAA,GA CA,GAAA,KAAA,eAAA,GAAA,CAGA,GAAA,GAAA,KAAA,kBAAA,EACA,GAAA,EAAA,IAAA,CAEA,IAAA,G AAA,IAEA,OAAA,UAAA,EAAA,EAAA,GAWA,QAAA,KACA,MAAA,MAAA,EAAA,MAXA,GAAA,GAAA,EAAA,g BAAA,OAAA,EAAA,EAGA,OAFA,iBAAA,iBAAA,EAAA,EAAA,GAEA,EAAA,QAYA,KAAA,EACA,eAAA,EAC A,MAAA,WACA,gBAAA,oBAAA,EAAA,EAAA,SAOA,EAAA,EAAA,MAGA,GAAA,IAAA,YAAA,OAAA,GAEA,S C1GA,SAAA,GAIA,GAAA,IACA,eAAA,SAAA,GAEA,GAAA,GAAA,EAAA,EAAA,OACA,KAAA,GAAA,KAAA, GACA,YAAA,EAAA,MAAA,MACA,IACA,EAAA,EAAA,YAEA,EAAA,EAAA,MAAA,EAAA,IACA,EAAA,GAAA, EAAA,IAAA,IAIA,iBAAA,SAAA,GAEA,GAAA,GAAA,EAAA,OACA,IAAA,EAAA,CACA,GAAA,KACA,KAAA ,GAAA,KAAA,GAEA,IAAA,GAAA,GADA,EAAA,EAAA,MAAA,KACA,EAAA,EAAA,EAAA,EAAA,GAAA,IACA ,EAAA,GAAA,EAAA,EAGA,GAAA,QAAA,IAGA,qBAAA,SAAA,GACA,GAAA,EAAA,QAAA,CAEA,GAAA,GAA A,EAAA,gBACA,KAAA,GAAA,KAAA,GAAA,QAEA,IAAA,GAAA,GADA,EAAA,EAAA,MAAA,KACA,EAAA,EA AA,EAAA,EAAA,GAAA,IACA,EAAA,KAAA,GAIA,GAAA,EAAA,QAAA,CAEA,GAAA,GAAA,EAAA,gBACA,K AAA,GAAA,KAAA,GAAA,QACA,EAAA,KAAA,GAGA,GAAA,EAAA,SAAA,CAEA,GAAA,GAAA,EAAA,iBACA, KAAA,GAAA,KAAA,GAAA,SACA,EAAA,KAAA,KAIA,kBAAA,SAAA,EAAA,GAEA,GAAA,GAAA,EAAA,OACA ,KAEA,KAAA,kBAAA,EAAA,EAAA,GAEA,EAAA,WAAA,KAAA,aAAA,KAgCA,kBAAA,SAAA,EAAA,GAEA,E AAA,QAAA,EAAA,WAGA,KAAA,GAAA,KAAA,GAAA,CACA,GAAA,GAAA,EAAA,EAEA,IAAA,SAAA,EAAA,U ACA,EAAA,QAAA,GAAA,QAAA,EAAA,SACA,EAAA,EAAA,OAGA,SAAA,IACA,EAAA,GAAA,KAIA,aAAA,S AAA,GACA,GAAA,KACA,KAAA,GAAA,KAAA,GACA,EAAA,EAAA,eAAA,CAEA,OAAA,IAEA,uBAAA,SAAA, GACA,GAAA,GAAA,KAAA,UAEA,EAAA,EAAA,IACA,EAAA,EAAA,aACA,GAAA,GAAA,EAAA,GAEA,OAAA, eAAA,EAAA,GACA,IAAA,WACA,GAAA,GAAA,KAAA,EAIA,OAHA,IACA,EAAA,UAEA,KAAA,IAEA,IAAA, SAAA,GACA,GAAA,GAAA,KAAA,EACA,IAAA,EAEA,WADA,GAAA,SAAA,EAIA,IAAA,GAAA,KAAA,EAIA, OAHA,MAAA,GAAA,EACA,KAAA,yBAAA,EAAA,EAAA,GAEA,GAEA,cAAA,KAGA,wBAAA,SAAA,GACA,GAA A,GAAA,EAAA,aACA,IAAA,GAAA,EAAA,OACA,IAAA,GAAA,GAAA,EAAA,EAAA,EAAA,EAAA,OAAA,EAA A,IAAA,EAAA,EAAA,IAAA,IACA,KAAA,uBAAA,EAGA,IAAA,GAAA,EAAA,cACA,IAAA,GAAA,EAAA,OA CA,IAAA,GAAA,GAAA,EAAA,EAAA,EAAA,EAAA,OAAA,EAAA,IAAA,EAAA,EAAA,IAAA,IACA,KAAA,uB AAA,IAQA,GAAA,IAAA,YAAA,WAAA,GAEA,SC9KA,SAAA,GAIA,GAAA,GAAA,aACA,EAAA,OAIA,GAEA, yBAAA,SAAA,GAEA,KAAA,cAAA,EAAA,aAEA,KAAA,cAAA,EAAA,wBAGA,kBAAA,SAAA,GAEA,GAAA,GA AA,KAAA,aAAA,EACA,IAAA,EAYA,IAAA,GAAA,GAJA,EAAA,EAAA,UAAA,EAAA,YAEA,EAAA,EAAA,MA AA,GAEA,EAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,IAEA,EAAA,EAAA,GAAA,OAGA,GAAA,SAAA,EA AA,KACA,EAAA,GAAA,SAOA,6BAAA,WAKA,IAAA,GAAA,GAHA,EAAA,KAAA,UAAA,oBAEA,EAAA,KAAA, WACA,EAAA,EAAA,EAAA,EAAA,OAAA,EAAA,IAAA,EAAA,EAAA,IAAA,IACA,KAAA,oBAAA,EAAA,QACA ,EAAA,EAAA,MAAA,EAAA,QAKA,oBAAA,SAAA,GACA,OAAA,KAAA,UAAA,IAAA,QAAA,EAAA,MAAA,EAA A,IAIA,WACA,KAAA,EACA,UAAA,EACA,YAAA,EACA,SAAA,EACA,UAAA,EACA,gBAAA,GAMA,GAAA,UA AA,GAAA,EAIA,EAAA,IAAA,YAAA,WAAA,GAEA,SChFA,SAAA,GAGA,GAAA,GAAA,EAAA,IAAA,YAAA,O AEA,EAAA,GAAA,oBACA,EAAA,EAAA,cAIA,GAAA,eAAA,SAAA,EAAA,EAAA,GACA,MAAA,GAAA,oBAAA ,EAAA,EAAA,IACA,EAAA,KAAA,EAAA,EAAA,EAAA,GAIA,IAAA,IACA,OAAA,EACA,cAAA,WACA,MAAA ,MAAA,cAAA,aAEA,gBAAA,WACA,GAAA,GAAA,KAAA,eACA,OAAA,IAAA,SAAA,gBAAA,IAEA,uBAAA,S AAA,GACA,IACA,EAAA,gBAAA,KAAA,SAMA,GAAA,IAAA,YAAA,IAAA,GAEA,SCnCA,SAAA,GAsOA,QAA A,GAAA,GACA,IAAA,OAAA,UAAA,CACA,GAAA,GAAA,OAAA,eAAA,EACA,GAAA,UAAA,EACA,EAAA,KAC A,EAAA,UAAA,OAAA,eAAA,KAvOA,GAAA,GAAA,EAAA,IACA,EAAA,EAAA,OACA,EAAA,EAAA,OAEA,EA AA,OAAA,kBAIA,GAEA,SAAA,SAAA,EAAA,GAEA,KAAA,eAAA,EAAA,GAEA,KAAA,kBAAA,EAAA,GAEA, KAAA,sBAGA,eAAA,SAAA,EAAA,GAEA,GAAA,GAAA,EAAA,uBAAA,GAEA,EAAA,KAAA,sBAAA,EAEA,MA AA,sBAAA,EAAA,GAEA,KAAA,UAAA,KAAA,gBAAA,EAAA,GAEA,KAAA,qBAAA,EAAA,IAGA,sBAAA,SAA A,EAAA,GAGA,EAAA,QAAA,KAEA,KAAA,kBAAA,EAAA,GAEA,KAAA,kBAAA,EAAA,GAEA,KAAA,eAAA,G AEA,KAAA,iBAAA,IAGA,gBAAA,SAAA,EAAA,GAEA,KAAA,gBAAA,EAAA,EAEA,IAAA,GAAA,KAAA,YAA A,EAAA,EAGA,OADA,GAAA,GACA,GAGA,gBAAA,SAAA,EAAA,GAEA,KAAA,cAAA,UAAA,EAAA,GAEA,KA AA,cAAA,UAAA,EAAA,GAEA,KAAA,cAAA,UAAA,EAAA,GAEA,KAAA,cAAA,aAAA,EAAA,GAEA,KAAA,cA AA,sBAAA,EAAA,GAEA,KAAA,cAAA,iBAAA,EAAA,IAIA,qBAAA,SAAA,EAAA,GAEA,KAAA,qBAAA,KAA A,WACA,KAAA,wBAAA,KAAA,WAEA,KAAA,uBAAA,KAAA,iBAEA,KAAA,gBAEA,KAAA,oBAAA,MAEA,KAA A,+BAEA,KAAA,kBAKA,KAAA,oBAEA,GACA,SAAA,UAAA,YAAA,KAAA,kBAAA,EAAA,GAGA,KAAA,UAAA ,kBACA,KAAA,UAAA,iBAAA,OAMA,mBAAA,WACA,GAAA,GAAA,KAAA,aAAA,cACA,KACA,OAAA,GAAA,K AAA,OAKA,sBAAA,SAAA,GACA,GAAA,GAAA,KAAA,kBAAA,EACA,KAAA,EAAA,CAEA,GAAA,GAAA,YAAA ,mBAAA,EAEA,GAAA,KAAA,cAAA,GAEA,EAAA,GAAA,EAEA,MAAA,IAGA,kBAAA,SAAA,GACA,MAAA,GA AA,IAIA,cAAA,SAAA,GACA,GAAA,EAAA,YACA,MAAA,EAEA,IAAA,GAAA,OAAA,OAAA,EAkBA,OAfA,G AAA,QAAA,EAAA,SAAA,GAaA,KAAA,YAAA,EAAA,EAAA,EAAA,SAAA,IAAA,QAEA,GAGA,YAAA,SAAA,E AAA,EAAA,EAAA,GACA,GAAA,GAAA,SAAA,GACA,MAAA,GAAA,GAAA,MAAA,KAAA,GAEA,GAAA,GAAA,W AEA,MADA,MAAA,WAAA,EACA,EAAA,GAAA,MAAA,KAAA,aAKA,cAAA,SAAA,EAAA,EAAA,GAEA,GAAA,G AAA,EAAA,MAEA,GAAA,GAAA,KAAA,YAAA,EAAA,EAAA,KAIA,kBAAA,SAAA,EAAA,GACA,GAAA,IACA, UAAA,KAAA,WAGA,EAAA,KAAA,kBAAA,EACA,KACA,EAAA,QAAA,GAGA,YAAA,SAAA,EAAA,KAAA,WAEA ,KAAA,KAAA,SAAA,gBAAA,EAAA,IAGA,kBAAA,SAAA,GACA,GAAA,GAAA,EAAA,QAAA,KAAA,EACA,MA AA,EAEA,IAAA,GAAA,KAAA,kBAAA,EACA,OAAA,GAAA,QACA,KAAA,kBAAA,EAAA,QAAA,SADA,SASA, IAIA,GAAA,YADA,OAAA,UACA,SAAA,EAAA,GAIA,MAHA,IAAA,GAAA,IAAA,IACA,EAAA,UAAA,GAEA, GAGA,SAAA,EAAA,GACA,GAAA,GAAA,GAAA,IAAA,EAAA,CACA,GAAA,GAAA,OAAA,OAAA,EACA,GAAA, EAAA,EAAA,GAEA,MAAA,IAoBA,EAAA,YAAA,UAAA,GAEA,SCpPA,SAAA,GAmKA,QAAA,GAAA,GACA,MA AA,UAAA,SAAA,GAAA,EAAA,EAGA,QAAA,KACA,MAAA,GAAA,OAAA,EAAA,GAAA,EAAA,GASA,QAAA,GA AA,GACA,EAAA,aAAA,EACA,eAAA,OAAA,EACA,YAAA,iBAAA,WACA,EAAA,iBAAA,GACA,EAAA,aAAA, EACA,EAAA,UAhKA,GAAA,IAGA,KAAA,SAAA,GACA,EAAA,UACA,EAAA,WACA,EAAA,KAAA,KAKA,QAAA ,SAAA,EAAA,EAAA,GACA,GAAA,GAAA,EAAA,UAAA,EAAA,QAAA,KAMA,OALA,KACA,EAAA,GAAA,KAAA ,GACA,EAAA,QAAA,MAAA,EACA,EAAA,QAAA,GAAA,GAEA,IAAA,KAAA,QAAA,IAGA,QAAA,SAAA,GACA ,GAAA,GAAA,EAAA,GAAA,QAAA,EAKA,OAJA,IAAA,GAAA,SAAA,SAAA,KACA,GAAA,YAAA,WAAA,YAAA ,MACA,EAAA,OAAA,KAEA,GAIA,GAAA,SAAA,GACA,GAAA,GAAA,KAAA,OAAA,EACA,KACA,EAAA,QAAA ,WAAA,EACA,KAAA,gBAAA,GACA,KAAA,UAIA,OAAA,SAAA,GACA,GAAA,GAAA,KAAA,QAAA,EACA,IAA A,IAAA,EAIA,MAAA,GAAA,GAAA,SAGA,MAAA,WAEA,GAAA,GAAA,KAAA,aAIA,OAHA,IACA,EAAA,QAA A,MAAA,KAAA,GAEA,KAAA,YACA,KAAA,SACA,GAFA,QAMA,YAAA,WACA,MAAA,MAGA,SAAA,WACA,OAA A,KAAA,aAAA,KAAA,WAGA,QAAA,WACA,IAAA,GAAA,GAAA,EAAA,EAAA,EAAA,EAAA,OAAA,EAAA,IAC A,EAAA,EAAA,IAAA,IACA,GAAA,EAAA,UAAA,EAAA,QAAA,UACA,MAGA,QAAA,GAGA,gBAAA,SAAA,GA CA,EAAA,KAAA,IAGA,MAAA,WAEA,IAAA,KAAA,SAAA,CAGA,KAAA,UAAA,CAEA,KADA,GAAA,GACA,EA AA,QACA,EAAA,EAAA,QACA,EAAA,QAAA,GAAA,KAAA,GACA,EAAA,QAAA,IAEA,MAAA,UAAA,IAGA,MA AA,WACA,KAAA,QAOA,eAAA,SAAA,IACA,eAAA,oBAAA,UACA,eAAA,OAAA,GAEA,SAAA,QACA,sBAAA, KAAA,sBAGA,iBAAA,SAAA,GACA,GACA,EAAA,KAAA,IAIA,oBAAA,WACA,GAAA,EAEA,IADA,GAAA,GA CA,EAAA,SACA,EAAA,EAAA,YAMA,aAAA,GAIA,KACA,KACA,KACA,KACA,IAYA,UAAA,iBAAA,qBAAA, WACA,eAAA,OAAA,IAcA,EAAA,SAAA,EACA,EAAA,MAAA,EACA,EAAA,UAAA,EAAA,iBAAA,GACA,SC/L A,SAAA,GAIA,QAAA,GAAA,EAAA,GACA,GACA,SAAA,KAAA,YAAA,GACA,EAAA,IACA,GACA,IAIA,QAA A,GAAA,EAAA,GACA,GAAA,GAAA,EAAA,OAAA,CAEA,IAAA,GAAA,GAAA,EADA,EAAA,SAAA,yBACA,EA AA,EAAA,EAAA,EAAA,OAAA,EAAA,IAAA,EAAA,EAAA,IAAA,IACA,EAAA,SAAA,cAAA,QACA,EAAA,IA AA,SACA,EAAA,KAAA,EACA,EAAA,YAAA,EAEA,GAAA,EAAA,OACA,IACA,IAtBA,GAAA,GAAA,EAAA,g BA2BA,GAAA,OAAA,EACA,EAAA,eAAA,GAEA,SChCA,SAAA,GA2GA,QAAA,GAAA,GACA,MAAA,SAAA,YA AA,mBAAA,IAGA,QAAA,GAAA,GACA,MAAA,IAAA,EAAA,QAAA,MAAA,EA5GA,GAAA,GAAA,EAAA,OACA, EAAA,EAAA,IACA,EAAA,EAAA,MACA,EAAA,EAAA,iBACA,EAAA,EAAA,uBACA,EAAA,EAAA,oBAIA,EA AA,EAAA,OAAA,OAAA,YAAA,YAEA,gBAAA,WACA,KAAA,aAAA,SACA,KAAA,QAIA,KAAA,WAEA,KAAA,K AAA,KAAA,aAAA,QACA,KAAA,QAAA,KAAA,aAAA,WACA,EAAA,KAAA,MAEA,KAAA,gBAEA,KAAA;EAOA, kBAAA,WACA,KAAA,YACA,KAAA,oBAAA,KAAA,OACA,KAAA,mBACA,KAAA,uBAGA,EAAA,GAAA,OAGA,U AAA,WAGA,EAAA,KAAA,WAAA,EAAA,KAAA,UACA,QAAA,KAAA,sGACA,KAAA,KACA,KAAA,SAEA,KAAA, SAAA,KAAA,KAAA,KAAA,SACA,KAAA,YAAA,GAGA,oBAAA,SAAA,GACA,MAAA,GAAA,GAAA,QAEA,EAAA ,EAAA,MAEA,KAAA,eAAA,IAEA,IAIA,eAAA,SAAA,GAEA,KAAA,aAAA,cAAA,KAAA,WACA,KAAA,UAAA ,EAEA,QAAA,KAIA,oBAAA,WACA,MAAA,MAAA,iBAMA,gBAAA,WACA,MAAA,GAAA,QAAA,KAAA,KAAA,k BAAA,KAAA,YAGA,cAAA,WACA,KAAA,iBAAA,EACA,KAAA,WAAA,WACA,KAAA,iBAAA,EACA,KAAA,qBA CA,KAAA,SASA,GAAA,QAAA,EAAA,YAAA,GAcA,EAAA,WACA,SAAA,KAAA,gBAAA,cACA,SAAA,cACA,G AAA,aAAA,iBAAA,SAAA,OAMA,SAAA,gBAAA,mBAAA,UAAA,KAEA,SCnGA,WAEA,GAAA,GAAA,SAAA,cA AA,kBACA,GAAA,aAAA,OAAA,gBACA,EAAA,aAAA,UAAA,YACA,EAAA,OAEA,QAAA,gBAEA,gBAAA,WAC A,KAAA,OAAA,KAAA,gBAAA,KAAA,aAGA,QAAA,iBAAA,WACA,KAAA,MAAA,KACA,KAAA,aAAA,OAAA,I AGA,KAAA,MAAA,WAIA,KAAA,sBAAA,KAAA,YAGA,KAAA,KAAA,qBAEA,KAAA,QAGA,WAAA,WACA,GAAA ,GAAA,OAAA,OAAA,QAAA,IAAA,YAAA,QACA,EAAA,IACA,GAAA,eAAA,WAAA,MAAA,GAAA,MAEA,IAAA ,GAAA,GAAA,oBACA,EAAA,EAAA,cAKA,OAJA,GAAA,eAAA,SAAA,EAAA,EAAA,GACA,MAAA,GAAA,oBA AA,EAAA,EAAA,IACA,EAAA,KAAA,EAAA,EAAA,EAAA,IAEA","sourcesContent":["/**\n * @lic ense\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer .github.io/LICENSE.txt\n * The complete set of authors may be found at http://po lymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as par t of the polymer project is also\n * subject to an additional IP rights grant fo und at http://polymer.github.io/PATENTS.txt\n */\nwindow.PolymerGestures = {};\n ","/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polyme r.github.io/LICENSE.txt\n * The complete set of authors may be found at http://p olymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found a t http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as pa rt of the polymer project is also\n * subject to an additional IP rights grant f ound at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n var H AS_FULL_PATH = false;\n\n // test for full event path support\n var pathTest = document.createElement('meta');\n if (pathTest.createShadowRoot) {\n var sr = pathTest.createShadowRoot();\n var s = document.createElement('span');\n sr.appendChild(s);\n pathTest.addEventListener('testpath', function(ev) {\n if (ev.path) {\n // if the span is in the event path, then path[0] is the real source for all events\n HAS_FULL_PATH = ev.path[0] === s;\n }\n ev.stopPropagation();\n });\n var ev = new CustomEvent('testp ath', {bubbles: true});\n // must add node to DOM to trigger event listener\n document.head.appendChild(pathTest);\n s.dispatchEvent(ev);\n pathTest .parentNode.removeChild(pathTest);\n sr = s = null;\n }\n pathTest = null;\ n\n var target = {\n shadow: function(inEl) {\n if (inEl) {\n re turn inEl.shadowRoot || inEl.webkitShadowRoot;\n }\n },\n canTarget: function(shadow) {\n return shadow && Boolean(shadow.elementFromPoint);\n },\n targetingShadow: function(inEl) {\n var s = this.shadow(inEl);\n if (this.canTarget(s)) {\n return s;\n }\n },\n olderShad ow: function(shadow) {\n var os = shadow.olderShadowRoot;\n if (!os) { \n var se = shadow.querySelector('shadow');\n if (se) {\n os = se.olderShadowRoot;\n }\n }\n return os;\n },\n all Shadows: function(element) {\n var shadows = [], s = this.shadow(element);\ n while(s) {\n shadows.push(s);\n s = this.olderShadow(s);\n }\n return shadows;\n },\n searchRoot: function(inRoot, x, y) {\ n var t, st, sr, os;\n if (inRoot) {\n t = inRoot.elementFromPo int(x, y);\n if (t) {\n // found element, check if it has a Shad owRoot\n sr = this.targetingShadow(t);\n } else if (inRoot !== d ocument) {\n // check for sibling roots\n sr = this.olderShado w(inRoot);\n }\n // search other roots, fall back to light dom ele ment\n return this.searchRoot(sr, x, y) || t;\n }\n },\n owner : function(element) {\n if (!element) {\n return document;\n }\ n var s = element;\n // walk up until you hit the shadow root or docum ent\n while (s.parentNode) {\n s = s.parentNode;\n }\n // the owner element is expected to be a Document or ShadowRoot\n if (s.nodeTy pe != Node.DOCUMENT_NODE && s.nodeType != Node.DOCUMENT_FRAGMENT_NODE) {\n s = document;\n }\n return s;\n },\n findTarget: function(inEv ent) {\n if (HAS_FULL_PATH && inEvent.path) {\n return inEvent.path[ 0];\n }\n var x = inEvent.clientX, y = inEvent.clientY;\n // if t he listener is in the shadow root, it is much faster to start there\n var s = this.owner(inEvent.target);\n // if x, y is not in this root, fall back to document search\n if (!s.elementFromPoint(x, y)) {\n s = document ;\n }\n return this.searchRoot(s, x, y);\n },\n findTouchAction: function(inEvent) {\n var n;\n if (HAS_FULL_PATH && inEvent.path) {\n var path = inEvent.path;\n for (var i = 0; i < path.length; i++) {\n n = path[i];\n if (n.nodeType === Node.ELEMENT_NODE && n.h asAttribute('touch-action')) {\n return n.getAttribute('touch-action' );\n }\n }\n } else {\n n = inEvent.target;\n while(n) {\n if (n.hasAttribute('touch-action')) {\n return n.getAttribute('touch-action');\n }\n n = n.parentNode || n.h ost;\n }\n }\n // auto is default\n return \"auto\";\n },\n LCA: function(a, b) {\n if (a === b) {\n return a;\n }\ n if (a && !b) {\n return a;\n }\n if (b && !a) {\n return b;\n }\n if (!b && !a) {\n return document;\n }\n // fast case, a is a direct descendant of b or vice versa\n if (a.cont ains && a.contains(b)) {\n return a;\n }\n if (b.contains && b. contains(a)) {\n return b;\n }\n var adepth = this.depth(a);\n var bdepth = this.depth(b);\n var d = adepth - bdepth;\n if (d >= 0) {\n a = this.walk(a, d);\n } else {\n b = this.walk(b, -d );\n }\n while (a && b && a !== b) {\n a = a.parentNode || a.ho st;\n b = b.parentNode || b.host;\n }\n return a;\n },\n walk: function(n, u) {\n for (var i = 0; n && (i < u); i++) {\n n = n.parentNode || n.host;\n }\n return n;\n },\n depth: function(n ) {\n var d = 0;\n while(n) {\n d++;\n n = n.parentNode || n.host;\n }\n return d;\n },\n deepContains: function(a, b) { \n var common = this.LCA(a, b);\n // if a is the common ancestor, it m ust \"deeply\" contain b\n return common === a;\n },\n insideNode: fu nction(node, x, y) {\n var rect = node.getBoundingClientRect();\n retu rn (rect.left <= x) && (x <= rect.right) && (rect.top <= y) && (y <= rect.bottom );\n }\n };\n scope.targetFinding = target;\n /**\n * Given an event, fi nds the \"deepest\" node that could have been the original target before ShadowD OM retargetting\n *\n * @param {Event} Event An event object with clientX an d clientY properties\n * @return {Element} The probable event origninator\n */\n scope.findTarget = target.findTarget.bind(target);\n /**\n * Determines if the \"container\" node deeply contains the \"containee\" node, including sit uations where the \"containee\" is contained by one or more ShadowDOM\n * root s.\n *\n * @param {Node} container\n * @param {Node} containee\n * @retu rn {Boolean}\n */\n scope.deepContains = target.deepContains.bind(target);\n\ n /**\n * Determines if the x/y position is inside the given node.\n *\n * Example:\n *\n * function upHandler(event) {\n * var innode = PolymerGestures.insideNode(event.target, event.clientX, event.clientY);\n * if (innode) {\n * // wait for tap?\n * } else {\n * // tap will never happen\n * }\n * }\n *\n * @param {Node} node\n * @param {Number} x Screen X position\n * @param {Number} y screen Y position\n * @return {Boolean}\n */\n scope.insideNode = target.insideNode ;\n\n})(window.PolymerGestures);\n","/*\n *\n * Copyright (c) 2014 The Polymer P roject Authors. All rights reserved.\n * This code may only be used under the BS D style license found at http://polymer.github.io/LICENSE.txt\n * The complete s et of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The compl ete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.tx t\n * Code distributed by Google as part of the polymer project is also\n * subj ect to an additional IP rights grant found at http://polymer.github.io/PATENTS.t xt\n */\n\n(function() {\n function shadowSelector(v) {\n return 'html /deep / ' + selector(v);\n }\n function selector(v) {\n return '[touch-action=\"' + v + '\"]';\n }\n function rule(v) {\n return '{ -ms-touch-action: ' + v + '; touch-action: ' + v + ';}';\n }\n var attrib2css = [\n 'none',\n 'a uto',\n 'pan-x',\n 'pan-y',\n {\n rule: 'pan-x pan-y',\n sele ctors: [\n 'pan-x pan-y',\n 'pan-y pan-x'\n ]\n },\n 'm anipulation'\n ];\n var styles = '';\n // only install stylesheet if the brow ser has touch action support\n var hasTouchAction = typeof document.head.style. touchAction === 'string';\n // only add shadow selectors if shadowdom is suppor ted\n var hasShadowRoot = !window.ShadowDOMPolyfill && document.head.createShad owRoot;\n\n if (hasTouchAction) {\n attrib2css.forEach(function(r) {\n if (String(r) === r) {\n styles += selector(r) + rule(r) + '\\n';\n if (hasShadowRoot) {\n styles += shadowSelector(r) + rule(r) + '\\n'; \n }\n } else {\n styles += r.selectors.map(selector) + rule( r.rule) + '\\n';\n if (hasShadowRoot) {\n styles += r.selectors. map(shadowSelector) + rule(r.rule) + '\\n';\n }\n }\n });\n\n var el = document.createElement('style');\n el.textContent = styles;\n doc ument.head.appendChild(el);\n }\n})();\n","/*\n * Copyright (c) 2014 The Polyme r Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complet e set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The co mplete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS .txt\n * Code distributed by Google as part of the polymer project is also\n * s ubject to an additional IP rights grant found at http://polymer.github.io/PATENT S.txt\n */\n\n/**\n * This is the constructor for new PointerEvents.\n *\n * New Pointer Events must be given a type, and an optional dictionary of\n * initiali zation properties.\n *\n * Due to certain platform requirements, events returned from the constructor\n * identify as MouseEvents.\n *\n * @constructor\n * @par am {String} inType The type of the event to create.\n * @param {Object} [inDict] An optional dictionary of initial event properties.\n * @return {Event} A new P ointerEvent of type `inType` and initialized with properties from `inDict`.\n */ \n(function(scope) {\n\n var MOUSE_PROPS = [\n 'bubbles',\n 'cancelable', \n 'view',\n 'detail',\n 'screenX',\n 'screenY',\n 'clientX',\n 'clientY',\n 'ctrlKey',\n 'altKey',\n 'shiftKey',\n 'metaKey',\n 'button',\n 'relatedTarget',\n 'pageX',\n 'pageY'\n ];\n\n var MOUS E_DEFAULTS = [\n false,\n false,\n null,\n null,\n 0,\n 0,\n 0,\n 0,\n false,\n false,\n false,\n false,\n 0,\n null,\ n 0,\n 0\n ];\n\n var NOP_FACTORY = function(){ return function(){}; };\ n\n var eventFactory = {\n // TODO(dfreedm): this is overridden by tap recog nizer, needs review\n preventTap: NOP_FACTORY,\n makeBaseEvent: function(i nType, inDict) {\n var e = document.createEvent('Event');\n e.initEven t(inType, inDict.bubbles || false, inDict.cancelable || false);\n e.prevent Tap = eventFactory.preventTap(e);\n return e;\n },\n makeGestureEvent : function(inType, inDict) {\n inDict = inDict || Object.create(null);\n\n var e = this.makeBaseEvent(inType, inDict);\n for (var i = 0, keys = O bject.keys(inDict), k; i < keys.length; i++) {\n k = keys[i];\n e[ k] = inDict[k];\n }\n return e;\n },\n makePointerEvent: functio n(inType, inDict) {\n inDict = inDict || Object.create(null);\n\n var e = this.makeBaseEvent(inType, inDict);\n // define inherited MouseEvent pr operties\n for(var i = 0, p; i < MOUSE_PROPS.length; i++) {\n p = MO USE_PROPS[i];\n e[p] = inDict[p] || MOUSE_DEFAULTS[i];\n }\n e. buttons = inDict.buttons || 0;\n\n // Spec requires that pointers without p ressure specified use 0.5 for down\n // state and 0 for up state.\n va r pressure = 0;\n if (inDict.pressure) {\n pressure = inDict.pressur e;\n } else {\n pressure = e.buttons ? 0.5 : 0;\n }\n\n // add x/y properties aliased to clientX/Y\n e.x = e.clientX;\n e.y = e. clientY;\n\n // define the properties of the PointerEvent interface\n e.pointerId = inDict.pointerId || 0;\n e.width = inDict.width || 0;\n e.height = inDict.height || 0;\n e.pressure = pressure;\n e.tiltX = in Dict.tiltX || 0;\n e.tiltY = inDict.tiltY || 0;\n e.pointerType = inDi ct.pointerType || '';\n e.hwTimestamp = inDict.hwTimestamp || 0;\n e.i sPrimary = inDict.isPrimary || false;\n e._source = inDict._source || '';\n return e;\n }\n };\n\n scope.eventFactory = eventFactory;\n})(window. PolymerGestures);\n","/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license fou nd at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may b e found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contribu tors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distribu ted by Google as part of the polymer project is also\n * subject to an additiona l IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n/**\n * This module implements an map of pointer states\n */\n(function(scope) {\n var USE_MAP = window.Map && window.Map.prototype.forEach;\n var POINTERS_FN = funct ion(){ return this.size; };\n function PointerMap() {\n if (USE_MAP) {\n var m = new Map();\n m.pointers = POINTERS_FN;\n return m;\n } el se {\n this.keys = [];\n this.values = [];\n }\n }\n\n PointerMap .prototype = {\n set: function(inId, inEvent) {\n var i = this.keys.inde xOf(inId);\n if (i > -1) {\n this.values[i] = inEvent;\n } else {\n this.keys.push(inId);\n this.values.push(inEvent);\n }\n },\n has: function(inId) {\n return this.keys.indexOf(inId) > -1;\n },\n 'delete': function(inId) {\n var i = this.keys.indexOf(inId);\n if (i > -1) {\n this.keys.splice(i, 1);\n this.values.splice( i, 1);\n }\n },\n get: function(inId) {\n var i = this.keys.inde xOf(inId);\n return this.values[i];\n },\n clear: function() {\n this.keys.length = 0;\n this.values.length = 0;\n },\n // return val ue, key, map\n forEach: function(callback, thisArg) {\n this.values.forE ach(function(v, i) {\n callback.call(thisArg, v, this.keys[i], this);\n }, this);\n },\n pointers: function() {\n return this.keys.length ;\n }\n };\n\n scope.PointerMap = PointerMap;\n})(window.PolymerGestures);\ n","/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\ n * This code may only be used under the BSD style license found at http://polym er.github.io/LICENSE.txt\n * The complete set of authors may be found at http:// polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as p art of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n var CLONE_PROPS = [\n // MouseEvent\n 'bubbles',\n 'cancelable',\n 'view ',\n 'detail',\n 'screenX',\n 'screenY',\n 'clientX',\n 'clientY' ,\n 'ctrlKey',\n 'altKey',\n 'shiftKey',\n 'metaKey',\n 'button', \n 'relatedTarget',\n // DOM Level 3\n 'buttons',\n // PointerEvent\ n 'pointerId',\n 'width',\n 'height',\n 'pressure',\n 'tiltX',\n 'tiltY',\n 'pointerType',\n 'hwTimestamp',\n 'isPrimary',\n // ev ent instance\n 'type',\n 'target',\n 'currentTarget',\n 'which',\n 'pageX',\n 'pageY',\n 'timeStamp',\n // gesture addons\n 'preventT ap',\n 'tapPrevented',\n '_source'\n ];\n\n var CLONE_DEFAULTS = [\n // MouseEvent\n false,\n false,\n null,\n null,\n 0,\n 0,\n 0,\n 0,\n false,\n false,\n false,\n false,\n 0,\n null,\n // DOM Level 3\n 0,\n // PointerEvent\n 0,\n 0,\n 0,\n 0,\ n 0,\n 0,\n '',\n 0,\n false,\n // event instance\n '',\n null,\n null,\n 0,\n 0,\n 0,\n 0,\n function(){},\n false \n ];\n\n var HAS_SVG_INSTANCE = (typeof SVGElementInstance !== 'undefined');\ n\n var eventFactory = scope.eventFactory;\n\n /**\n * This module is for no rmalizing events. Mouse and Touch events will be\n * collected here, and fire PointerEvents that have the same semantics, no\n * matter the source.\n * Ev ents fired:\n * - pointerdown: a pointing is added\n * - pointerup: a po inter is removed\n * - pointermove: a pointer is moved\n * - pointerover : a pointer crosses into an element\n * - pointerout: a pointer leaves an el ement\n * - pointercancel: a pointer will no longer generate events\n */\n var dispatcher = {\n pointermap: new scope.PointerMap(),\n eventMap: Obj ect.create(null),\n // Scope objects for native events.\n // This exists f or ease of testing.\n eventSources: Object.create(null),\n eventSourceList : [],\n gestures: [],\n // map gesture event -> {listeners: int, index: ge stures[int]}\n dependencyMap: {\n // make sure down and up are in the ma p to trigger \"register\"\n down: {listeners: 0, index: -1},\n up: {li steners: 0, index: -1}\n },\n gestureQueue: [],\n /**\n * Add a new event source that will generate pointer events.\n *\n * `inSource` must contain an array of event names named `events`, and\n * functions with the names specified in the `events` array.\n * @param {string} name A name for t he event source\n * @param {Object} source A new source of platform events.\ n */\n registerSource: function(name, source) {\n var s = source;\n var newEvents = s.events;\n if (newEvents) {\n newEvents.forEac h(function(e) {\n if (s[e]) {\n this.eventMap[e] = s[e].bind (s);\n }\n }, this);\n this.eventSources[name] = s;\n this.eventSourceList.push(s);\n }\n },\n registerGesture: functio n(name, source) {\n var obj = Object.create(null);\n obj.listeners = 0 ;\n obj.index = this.gestures.length;\n for (var i = 0, g; i < source. exposes.length; i++) {\n g = source.exposes[i].toLowerCase();\n th is.dependencyMap[g] = obj;\n }\n this.gestures.push(source);\n },\n register: function(element, initial) {\n var l = this.eventSourceList.l ength;\n for (var i = 0, es; (i < l) && (es = this.eventSourceList[i]); i++ ) {\n // call eventsource register\n es.register.call(es, element, initial);\n }\n },\n unregister: function(element) {\n var l = this.eventSourceList.length;\n for (var i = 0, es; (i < l) && (es = this.ev entSourceList[i]); i++) {\n // call eventsource register\n es.unre gister.call(es, element);\n }\n },\n // EVENTS\n down: function(in Event) {\n this.fireEvent('down', inEvent);\n },\n move: function(inE vent) {\n // pipe move events into gesture queue directly\n inEvent.ty pe = 'move';\n this.fillGestureQueue(inEvent);\n },\n up: function(in Event) {\n this.fireEvent('up', inEvent);\n },\n cancel: function(inE vent) {\n inEvent.tapPrevented = true;\n this.fireEvent('up', inEvent) ;\n },\n // LISTENER LOGIC\n eventHandler: function(inEvent) {\n / / This is used to prevent multiple dispatch of events from\n // platform ev ents. This can happen when two elements in different scopes\n // are set up to create pointer events, which is relevant to Shadow DOM.\n\n // TODO(dfr eedm): make this check more granular, allow for minimal event generation\n // e.g inEvent._handledByPG['tap'] and inEvent._handledByPG['track'], etc\n if (inEvent._handledByPG) {\n return;\n }\n var type = inEvent .type;\n var fn = this.eventMap && this.eventMap[type];\n if (fn) {\n fn(inEvent);\n }\n inEvent._handledByPG = true;\n },\n // set up event listeners\n listen: function(target, events) {\n for (var i = 0, l = events.length, e; (i < l) && (e = events[i]); i++) {\n this.ad dEvent(target, e);\n }\n },\n // remove event listeners\n unlisten : function(target, events) {\n for (var i = 0, l = events.length, e; (i < l ) && (e = events[i]); i++) {\n this.removeEvent(target, e);\n }\n },\n addEvent: function(target, eventName) {\n target.addEventListener( eventName, this.boundHandler);\n },\n removeEvent: function(target, eventN ame) {\n target.removeEventListener(eventName, this.boundHandler);\n },\ n // EVENT CREATION AND TRACKING\n /**\n * Creates a new Event of type `inType`, based on the information in\n * `inEvent`.\n *\n * @param {string} inType A string representing the type of event to create\n * @para m {Event} inEvent A platform event with a target\n * @return {Event} A Point erEvent of type `inType`\n */\n makeEvent: function(inType, inEvent) {\n var e = eventFactory.makePointerEvent(inType, inEvent);\n e.preventDef ault = inEvent.preventDefault;\n e.tapPrevented = inEvent.tapPrevented;\n e._target = e._target || inEvent.target;\n return e;\n },\n // ma ke and dispatch an event in one call\n fireEvent: function(inType, inEvent) { \n var e = this.makeEvent(inType, inEvent);\n return this.dispatchEven t(e);\n },\n /**\n * Returns a snapshot of inEvent, with writable prop erties.\n *\n * @param {Event} inEvent An event that contains properties to copy.\n * @return {Object} An object containing shallow copies of `inEve nt`'s\n * properties.\n */\n cloneEvent: function(inEvent) {\n var eventCopy = Object.create(null), p;\n for (var i = 0; i < CLONE_PROPS .length; i++) {\n p = CLONE_PROPS[i];\n eventCopy[p] = inEvent[p] || CLONE_DEFAULTS[i];\n // Work around SVGInstanceElement shadow tree\n // Return the <use> element that is represented by the instance for Safari , Chrome, IE.\n // This is the behavior implemented by Firefox.\n if (p === 'target' || p === 'relatedTarget') {\n if (HAS_SVG_INSTANCE & & eventCopy[p] instanceof SVGElementInstance) {\n eventCopy[p] = even tCopy[p].correspondingUseElement;\n }\n }\n }\n // kee p the semantics of preventDefault\n eventCopy.preventDefault = function() { \n inEvent.preventDefault();\n };\n return eventCopy;\n },\n /**\n * Dispatches the event to its target.\n *\n * @param {Even t} inEvent The event to be dispatched.\n * @return {Boolean} True if an even t handler returns true, false otherwise.\n */\n dispatchEvent: function(i nEvent) {\n var t = inEvent._target;\n if (t) {\n t.dispatchEve nt(inEvent);\n // clone the event for the gesture system to process\n // clone after dispatch to pick up gesture prevention code\n var clon e = this.cloneEvent(inEvent);\n clone.target = t;\n this.fillGestu reQueue(clone);\n }\n },\n gestureTrigger: function() {\n // pro cess the gesture queue\n for (var i = 0, e; i < this.gestureQueue.length; i ++) {\n e = this.gestureQueue[i];\n for (var j = 0, g, fn; j < thi s.gestures.length; j++) {\n g = this.gestures[j];\n fn = g[e.t ype];\n if (g.enabled && fn) {\n fn.call(g, e);\n } \n }\n }\n this.gestureQueue.length = 0;\n },\n fillGestu reQueue: function(ev) {\n // only trigger the gesture queue once\n if (!this.gestureQueue.length) {\n requestAnimationFrame(this.boundGestureTr igger);\n }\n this.gestureQueue.push(ev);\n }\n };\n dispatcher.b oundHandler = dispatcher.eventHandler.bind(dispatcher);\n dispatcher.boundGestu reTrigger = dispatcher.gestureTrigger.bind(dispatcher);\n scope.dispatcher = di spatcher;\n\n /**\n * Listen for `gesture` on `node` with the `handler` funct ion\n *\n * If `handler` is the first listener for `gesture`, the underlying gesture recognizer is then enabled.\n *\n * @param {Element} node\n * @pa ram {string} gesture\n * @return Boolean `gesture` is a valid gesture\n */\n scope.activateGesture = function(node, gesture) {\n var g = gesture.toLower Case();\n var dep = dispatcher.dependencyMap[g];\n if (dep) {\n var r ecognizer = dispatcher.gestures[dep.index];\n if (dep.listeners === 0) {\n if (recognizer) {\n recognizer.enabled = true;\n }\n }\n dep.listeners++;\n if (!node._pgListeners) {\n dispatcher. register(node);\n node._pgListeners = 0;\n }\n // TODO(dfreedm) : re-evaluate bookkeeping to avoid using attributes\n if (recognizer) {\n var touchAction = recognizer.defaultActions && recognizer.defaultActions[g ];\n var actionNode;\n switch(node.nodeType) {\n case Nod e.ELEMENT_NODE:\n actionNode = node;\n break;\n cas e Node.DOCUMENT_FRAGMENT_NODE:\n actionNode = node.host;\n b reak;\n default:\n actionNode = null;\n break;\n }\n if (touchAction && actionNode && !actionNode.hasAttribute('touch -action')) {\n actionNode.setAttribute('touch-action', touchAction);\n }\n }\n node._pgListeners++;\n }\n return Boolean(dep);\n };\n\n /**\n *\n * Listen for `gesture` from `node` with `handler` functi on.\n *\n * @param {Element} node\n * @param {string} gesture\n * @param {Function} handler\n * @param {Boolean} capture\n */\n scope.addEventListe ner = function(node, gesture, handler, capture) {\n if (handler) {\n sco pe.activateGesture(node, gesture);\n node.addEventListener(gesture, handler , capture);\n }\n };\n\n /**\n * Tears down the gesture configuration for `node`\n *\n * If `handler` is the last listener for `gesture`, the underly ing gesture recognizer is disabled.\n *\n * @param {Element} node\n * @par am {string} gesture\n * @return Boolean `gesture` is a valid gesture\n */\n scope.deactivateGesture = function(node, gesture) {\n var g = gesture.toLowe rCase();\n var dep = dispatcher.dependencyMap[g];\n if (dep) {\n if ( dep.listeners > 0) {\n dep.listeners--;\n }\n if (dep.listeners === 0) {\n var recognizer = dispatcher.gestures[dep.index];\n if (recognizer) {\n recognizer.enabled = false;\n }\n }\n if (node._pgListeners > 0) {\n node._pgListeners--;\n }\n if ( node._pgListeners === 0) {\n dispatcher.unregister(node);\n }\n } \n return Boolean(dep);\n };\n\n /**\n * Stop listening for `gesture` fro m `node` with `handler` function.\n *\n * @param {Element} node\n * @param {string} gesture\n * @param {Function} handler\n * @param {Boolean} capture \n */\n scope.removeEventListener = function(node, gesture, handler, capture) {\n if (handler) {\n scope.deactivateGesture(node, gesture);\n nod e.removeEventListener(gesture, handler, capture);\n }\n };\n})(window.Polyme rGestures);\n","/*\n * Copyright (c) 2014 The Polymer Project Authors. All right s reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be foun d at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors m ay be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP r ights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(function (sco pe) {\n var dispatcher = scope.dispatcher;\n var pointermap = dispatcher.point ermap;\n // radius around touchend that swallows mouse events\n var DEDUP_DIST = 25;\n\n var WHICH_TO_BUTTONS = [0, 1, 4, 2];\n\n var HAS_BUTTONS = false;\n try {\n HAS_BUTTONS = new MouseEvent('test', {buttons: 1}).buttons === 1;\n } catch (e) {}\n\n // handler block for native mouse events\n var mouseEvent s = {\n POINTER_ID: 1,\n POINTER_TYPE: 'mouse',\n events: [\n 'mou sedown',\n 'mousemove',\n 'mouseup'\n ],\n exposes: [\n 'do wn',\n 'up',\n 'move'\n ],\n register: function(target) {\n dispatcher.listen(target, this.events);\n },\n unregister: function(targe t) {\n dispatcher.unlisten(target, this.events);\n },\n lastTouches: [],\n // collide with the global mouse listener\n isEventSimulatedFromTouc h: function(inEvent) {\n var lts = this.lastTouches;\n var x = inEvent .clientX, y = inEvent.clientY;\n for (var i = 0, l = lts.length, t; i < l & & (t = lts[i]); i++) {\n // simulated mouse events will be swallowed near a primary touchend\n var dx = Math.abs(x - t.x), dy = Math.abs(y - t.y); \n if (dx <= DEDUP_DIST && dy <= DEDUP_DIST) {\n return true;\n }\n }\n },\n prepareEvent: function(inEvent) {\n var e = dispatcher.cloneEvent(inEvent);\n e.pointerId = this.POINTER_ID;\n e.i sPrimary = true;\n e.pointerType = this.POINTER_TYPE;\n e._source = 'm ouse';\n if (!HAS_BUTTONS) {\n e.buttons = WHICH_TO_BUTTONS[e.which] || 0;\n }\n return e;\n },\n mousedown: function(inEvent) {\n if (!this.isEventSimulatedFromTouch(inEvent)) {\n var p = pointermap. has(this.POINTER_ID);\n // TODO(dfreedman) workaround for some elements n ot sending mouseup\n // http://crbug/149091\n if (p) {\n this.mouseup(inEvent);\n }\n var e = this.prepareEvent(inEvent);\n e.target = scope.findTarget(inEvent);\n pointermap.set(this.POINT ER_ID, e.target);\n dispatcher.down(e);\n }\n },\n mousemove: function(inEvent) {\n if (!this.isEventSimulatedFromTouch(inEvent)) {\n var target = pointermap.get(this.POINTER_ID);\n if (target) {\n var e = this.prepareEvent(inEvent);\n e.target = target;\n // handle case where we missed a mouseup\n if (e.buttons === 0) {\n dispatcher.cancel(e);\n this.cleanupMouse();\n } el se {\n dispatcher.move(e);\n }\n }\n }\n },\n mouseup: function(inEvent) {\n if (!this.isEventSimulatedFromTouch(inEv ent)) {\n var e = this.prepareEvent(inEvent);\n e.relatedTarget = scope.findTarget(inEvent);\n e.target = pointermap.get(this.POINTER_ID);\ n dispatcher.up(e);\n this.cleanupMouse();\n }\n },\n c leanupMouse: function() {\n pointermap['delete'](this.POINTER_ID);\n }\n };\n\n scope.mouseEvents = mouseEvents;\n})(window.PolymerGestures);\n","/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.githu b.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer. github.io/AUTHORS.txt\n * The complete set of contributors may be found at http: //polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of t he polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n var dispatch er = scope.dispatcher;\n var allShadows = scope.targetFinding.allShadows.bind(s cope.targetFinding);\n var pointermap = dispatcher.pointermap;\n var touchMap = Array.prototype.map.call.bind(Array.prototype.map);\n // This should be long enough to ignore compat mouse events made by touch\n var DEDUP_TIMEOUT = 2500;\ n var CLICK_COUNT_TIMEOUT = 200;\n var HYSTERESIS = 20;\n var ATTRIB = 'touch -action';\n // TODO(dfreedm): disable until http://crbug.com/399765 is resolved \n // var HAS_TOUCH_ACTION = ATTRIB in document.head.style;\n var HAS_TOUCH_AC TION = false;\n\n // handler block for native touch events\n var touchEvents = {\n events: [\n 'touchstart',\n 'touchmove',\n 'touchend',\n 'touchcancel'\n ],\n exposes: [\n 'down',\n 'up',\n 'm ove'\n ],\n register: function(target, initial) {\n if (initial) {\n return;\n }\n dispatcher.listen(target, this.events);\n },\n unregister: function(target) {\n dispatcher.unlisten(target, this.event s);\n },\n scrollTypes: {\n EMITTER: 'none',\n XSCROLLER: 'pan-x ',\n YSCROLLER: 'pan-y',\n },\n touchActionToScrollType: function(tou chAction) {\n var t = touchAction;\n var st = this.scrollTypes;\n if (t === st.EMITTER) {\n return 'none';\n } else if (t === st.XSCR OLLER) {\n return 'X';\n } else if (t === st.YSCROLLER) {\n r eturn 'Y';\n } else {\n return 'XY';\n }\n },\n POINTER_T YPE: 'touch',\n firstTouch: null,\n isPrimaryTouch: function(inTouch) {\n return this.firstTouch === inTouch.identifier;\n },\n setPrimaryTouch : function(inTouch) {\n // set primary touch if there no pointers, or the o nly pointer is the mouse\n if (pointermap.pointers() === 0 || (pointermap.p ointers() === 1 && pointermap.has(1))) {\n this.firstTouch = inTouch.iden tifier;\n this.firstXY = {X: inTouch.clientX, Y: inTouch.clientY};\n this.scrolling = null;\n this.cancelResetClickCount();\n }\n } ,\n removePrimaryPointer: function(inPointer) {\n if (inPointer.isPrimar y) {\n this.firstTouch = null;\n this.firstXY = null;\n thi s.resetClickCount();\n }\n },\n clickCount: 0,\n resetId: null,\n resetClickCount: function() {\n var fn = function() {\n this.clic kCount = 0;\n this.resetId = null;\n }.bind(this);\n this.reset Id = setTimeout(fn, CLICK_COUNT_TIMEOUT);\n },\n cancelResetClickCount: fu nction() {\n if (this.resetId) {\n clearTimeout(this.resetId);\n }\n },\n typeToButtons: function(type) {\n var ret = 0;\n if ( type === 'touchstart' || type === 'touchmove') {\n ret = 1;\n }\n return ret;\n },\n findTarget: function(touch, id) {\n if (this.cu rrentTouchEvent.type === 'touchstart') {\n if (this.isPrimaryTouch(touch) ) {\n var fastPath = {\n clientX: touch.clientX,\n clientY: touch.clientY,\n path: this.currentTouchEvent.path,\n target: this.currentTouchEvent.target\n };\n return sco pe.findTarget(fastPath);\n } else {\n return scope.findTarget(to uch);\n }\n }\n // reuse target we found in touchstart\n r eturn pointermap.get(id);\n },\n touchToPointer: function(inTouch) {\n var cte = this.currentTouchEvent;\n var e = dispatcher.cloneEvent(inTouch );\n // Spec specifies that pointerId 1 is reserved for Mouse.\n // To uch identifiers can start at 0.\n // Add 2 to the touch identifier for comp atibility.\n var id = e.pointerId = inTouch.identifier + 2;\n e.target = this.findTarget(inTouch, id);\n e.bubbles = true;\n e.cancelable = true;\n e.detail = this.clickCount;\n e.buttons = this.typeToButtons(c te.type);\n e.width = inTouch.webkitRadiusX || inTouch.radiusX || 0;\n e.height = inTouch.webkitRadiusY || inTouch.radiusY || 0;\n e.pressure = i nTouch.webkitForce || inTouch.force || 0.5;\n e.isPrimary = this.isPrimaryT ouch(inTouch);\n e.pointerType = this.POINTER_TYPE;\n e._source = 'tou ch';\n // forward touch preventDefaults\n var self = this;\n e.pr eventDefault = function() {\n self.scrolling = false;\n self.first XY = null;\n cte.preventDefault();\n };\n return e;\n },\n processTouches: function(inEvent, inFunction) {\n var tl = inEvent.change dTouches;\n this.currentTouchEvent = inEvent;\n for (var i = 0, t, p; i < tl.length; i++) {\n t = tl[i];\n p = this.touchToPointer(t);\n if (inEvent.type === 'touchstart') {\n pointermap.set(p.pointer Id, p.target);\n }\n if (pointermap.has(p.pointerId)) {\n inFunction.call(this, p);\n }\n if (inEvent.type === 'touchend' | | inEvent._cancel) {\n this.cleanUpPointer(p);\n }\n }\n },\n // For single axis scrollers, determines whether the element should emi t\n // pointer events or behave as a scroller\n shouldScroll: function(inE vent) {\n if (this.firstXY) {\n var ret;\n var touchAction = scope.targetFinding.findTouchAction(inEvent);\n var scrollAxis = this.tou chActionToScrollType(touchAction);\n if (scrollAxis === 'none') {\n // this element is a touch-action: none, should never scroll\n ret = false;\n } else if (scrollAxis === 'XY') {\n // this element s hould always scroll\n ret = true;\n } else {\n var t = inEvent.changedTouches[0];\n // check the intended scroll axis, and oth er axis\n var a = scrollAxis;\n var oa = scrollAxis === 'Y' ? 'X' : 'Y';\n var da = Math.abs(t['client' + a] - this.firstXY[a]);\n var doa = Math.abs(t['client' + oa] - this.firstXY[oa]);\n // if delta in the scroll axis > delta other axis, scroll instead of\n // ma king events\n ret = da >= doa;\n }\n return ret;\n } \n },\n findTouch: function(inTL, inId) {\n for (var i = 0, l = inTL. length, t; i < l && (t = inTL[i]); i++) {\n if (t.identifier === inId) {\ n return true;\n }\n }\n },\n // In some instances, a touchstart can happen without a touchend. This\n // leaves the pointermap in a broken state.\n // Therefore, on every touchstart, we remove the touches t hat did not fire a\n // touchend event.\n // To keep state globally consis tent, we fire a\n // pointercancel for this \"abandoned\" touch\n vacuumTo uches: function(inEvent) {\n var tl = inEvent.touches;\n // pointermap .pointers() should be < tl.length here, as the touchstart has not\n // been processed yet.\n if (pointermap.pointers() >= tl.length) {\n var d = [];\n pointermap.forEach(function(value, key) {\n // Never rem ove pointerId == 1, which is mouse.\n // Touch identifiers are 2 smalle r than their pointerId, which is the\n // index in pointermap.\n if (key !== 1 && !this.findTouch(tl, key - 2)) {\n var p = value;\ n d.push(p);\n }\n }, this);\n d.forEach(funct ion(p) {\n this.cancel(p);\n pointermap.delete(p.pointerId);\n });\n }\n },\n touchstart: function(inEvent) {\n this.va cuumTouches(inEvent);\n this.setPrimaryTouch(inEvent.changedTouches[0]);\n this.dedupSynthMouse(inEvent);\n if (!this.scrolling) {\n this. clickCount++;\n this.processTouches(inEvent, this.down);\n }\n }, \n down: function(inPointer) {\n dispatcher.down(inPointer);\n },\n touchmove: function(inEvent) {\n if (HAS_TOUCH_ACTION) {\n // touc hevent.cancelable == false is sent when the page is scrolling under native Touch Action in Chrome 36\n // https://groups.google.com/a/chromium.org/d/msg/ input-dev/wHnyukcYBcA/b9kmtwM1jJQJ\n if (inEvent.cancelable) {\n this.processTouches(inEvent, this.move);\n }\n } else {\n if (!this.scrolling) {\n if (this.scrolling === null && this.shouldScroll (inEvent)) {\n this.scrolling = true;\n } else {\n this.scrolling = false;\n inEvent.preventDefault();\n th is.processTouches(inEvent, this.move);\n }\n } else if (this.fir stXY) {\n var t = inEvent.changedTouches[0];\n var dx = t.clie ntX - this.firstXY.X;\n var dy = t.clientY - this.firstXY.Y;\n var dd = Math.sqrt(dx * dx + dy * dy);\n if (dd >= HYSTERESIS) {\n this.touchcancel(inEvent);\n this.scrolling = true;\n this.firstXY = null;\n }\n }\n }\n },\n move: fun ction(inPointer) {\n dispatcher.move(inPointer);\n },\n touchend: fun ction(inEvent) {\n this.dedupSynthMouse(inEvent);\n this.processTouche s(inEvent, this.up);\n },\n up: function(inPointer) {\n inPointer.rel atedTarget = scope.findTarget(inPointer);\n dispatcher.up(inPointer);\n },\n cancel: function(inPointer) {\n dispatcher.cancel(inPointer);\n },\n touchcancel: function(inEvent) {\n inEvent._cancel = true;\n t his.processTouches(inEvent, this.cancel);\n },\n cleanUpPointer: function( inPointer) {\n pointermap['delete'](inPointer.pointerId);\n this.remov ePrimaryPointer(inPointer);\n },\n // prevent synth mouse events from crea ting pointer events\n dedupSynthMouse: function(inEvent) {\n var lts = s cope.mouseEvents.lastTouches;\n var t = inEvent.changedTouches[0];\n / / only the primary finger will synth mouse events\n if (this.isPrimaryTouch (t)) {\n // remember x/y of last touch\n var lt = {x: t.clientX, y : t.clientY};\n lts.push(lt);\n var fn = (function(lts, lt){\n var i = lts.indexOf(lt);\n if (i > -1) {\n lts.splice( i, 1);\n }\n }).bind(null, lts, lt);\n setTimeout(fn, DED UP_TIMEOUT);\n }\n }\n };\n\n scope.touchEvents = touchEvents;\n})(win dow.PolymerGestures);\n","/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors m ay be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of cont ributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code dist ributed by Google as part of the polymer project is also\n * subject to an addit ional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(fun ction(scope) {\n var dispatcher = scope.dispatcher;\n var pointermap = dispatc her.pointermap;\n var HAS_BITMAP_TYPE = window.MSPointerEvent && typeof window. MSPointerEvent.MSPOINTER_TYPE_MOUSE === 'number';\n var msEvents = {\n event s: [\n 'MSPointerDown',\n 'MSPointerMove',\n 'MSPointerUp',\n 'MSPointerCancel',\n ],\n register: function(target) {\n if (target !== document) {\n return;\n }\n dispatcher.listen(target, this .events);\n },\n unregister: function(target) {\n dispatcher.unlisten (target, this.events);\n },\n POINTER_TYPES: [\n '',\n 'unavaila ble',\n 'touch',\n 'pen',\n 'mouse'\n ],\n prepareEvent: fu nction(inEvent) {\n var e = inEvent;\n e = dispatcher.cloneEvent(inEve nt);\n if (HAS_BITMAP_TYPE) {\n e.pointerType = this.POINTER_TYPES[i nEvent.pointerType];\n }\n e._source = 'ms';\n return e;\n },\ n cleanup: function(id) {\n pointermap['delete'](id);\n },\n MSPoi nterDown: function(inEvent) {\n var e = this.prepareEvent(inEvent);\n e.target = scope.findTarget(inEvent);\n pointermap.set(inEvent.pointerId, e .target);\n dispatcher.down(e);\n },\n MSPointerMove: function(inEven t) {\n var e = this.prepareEvent(inEvent);\n e.target = pointermap.get (e.pointerId);\n dispatcher.move(e);\n },\n MSPointerUp: function(inE vent) {\n var e = this.prepareEvent(inEvent);\n e.relatedTarget = scop e.findTarget(inEvent);\n e.target = pointermap.get(e.pointerId);\n dis patcher.up(e);\n this.cleanup(inEvent.pointerId);\n },\n MSPointerCan cel: function(inEvent) {\n var e = this.prepareEvent(inEvent);\n e.rel atedTarget = scope.findTarget(inEvent);\n e.target = pointermap.get(e.point erId);\n dispatcher.cancel(e);\n this.cleanup(inEvent.pointerId);\n }\n };\n\n scope.msEvents = msEvents;\n})(window.PolymerGestures);\n","/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This c ode may only be used under the BSD style license found at http://polymer.github. io/LICENSE.txt\n * The complete set of authors may be found at http://polymer.gi thub.io/AUTHORS.txt\n * The complete set of contributors may be found at http:// polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at h ttp://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n var dispatcher = scope.dispatcher;\n var pointermap = dispatcher.pointermap;\n var pointerEv ents = {\n events: [\n 'pointerdown',\n 'pointermove',\n 'poin terup',\n 'pointercancel'\n ],\n prepareEvent: function(inEvent) {\n var e = dispatcher.cloneEvent(inEvent);\n e._source = 'pointer';\n return e;\n },\n register: function(target) {\n if (target !== docu ment) {\n return;\n }\n dispatcher.listen(target, this.events); \n },\n unregister: function(target) {\n dispatcher.unlisten(target, this.events);\n },\n cleanup: function(id) {\n pointermap['delete'](i d);\n },\n pointerdown: function(inEvent) {\n var e = this.prepareEve nt(inEvent);\n e.target = scope.findTarget(inEvent);\n pointermap.set( e.pointerId, e.target);\n dispatcher.down(e);\n },\n pointermove: fun ction(inEvent) {\n var e = this.prepareEvent(inEvent);\n e.target = po intermap.get(e.pointerId);\n dispatcher.move(e);\n },\n pointerup: fu nction(inEvent) {\n var e = this.prepareEvent(inEvent);\n e.relatedTar get = scope.findTarget(inEvent);\n e.target = pointermap.get(e.pointerId);\ n dispatcher.up(e);\n this.cleanup(inEvent.pointerId);\n },\n po intercancel: function(inEvent) {\n var e = this.prepareEvent(inEvent);\n e.relatedTarget = scope.findTarget(inEvent);\n e.target = pointermap.get (e.pointerId);\n dispatcher.cancel(e);\n this.cleanup(inEvent.pointerI d);\n }\n };\n\n scope.pointerEvents = pointerEvents;\n})(window.PolymerGes tures);\n","/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights re served.\n * This code may only be used under the BSD style license found at http ://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may b e found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Goo gle as part of the polymer project is also\n * subject to an additional IP right s grant found at http://polymer.github.io/PATENTS.txt\n */\n\n/**\n * This modul e contains the handlers for native platform events.\n * From here, the dispatche r is called to create unified pointer events.\n * Included are touch events (v1) , mouse events, and MSPointerEvents.\n */\n(function(scope) {\n var dispatcher = scope.dispatcher;\n var nav = window.navigator;\n\n if (window.PointerEvent) {\n dispatcher.registerSource('pointer', scope.pointerEvents);\n } else if (nav.msPointerEnabled) {\n dispatcher.registerSource('ms', scope.msEvents);\n } else {\n dispatcher.registerSource('mouse', scope.mouseEvents);\n if ( window.ontouchstart !== undefined) {\n dispatcher.registerSource('touch', s cope.touchEvents);\n /*\n * NOTE: an empty touch listener on body wil l reactivate nodes imported from templates with touch listeners\n * Removi ng it will re-break the nodes\n *\n * Work around for https://bugs.w ebkit.org/show_bug.cgi?id=135628\n */\n var isSafari = nav.userAgent. match('Safari') && !nav.userAgent.match('Chrome');\n if (isSafari) {\n document.body.addEventListener('touchstart', function(){});\n }\n }\n }\n dispatcher.register(document, true);\n})(window.PolymerGestures);\n","/*\ n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * Thi s code may only be used under the BSD style license found at http://polymer.gith ub.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer .github.io/AUTHORS.txt\n * The complete set of contributors may be found at http ://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found a t http://polymer.github.io/PATENTS.txt\n */\n\n/**\n * This event denotes the be ginning of a series of tracking events.\n *\n * @module PointerGestures\n * @sub module Events\n * @class trackstart\n */\n/**\n * Pixels moved in the x directio n since trackstart.\n * @type Number\n * @property dx\n */\n/**\n * Pixes moved in the y direction since trackstart.\n * @type Number\n * @property dy\n */\n/** \n * Pixels moved in the x direction since the last track.\n * @type Number\n * @property ddx\n */\n/**\n * Pixles moved in the y direction since the last track .\n * @type Number\n * @property ddy\n */\n/**\n * The clientX position of the t rack gesture.\n * @type Number\n * @property clientX\n */\n/**\n * The clientY p osition of the track gesture.\n * @type Number\n * @property clientY\n */\n/**\n * The pageX position of the track gesture.\n * @type Number\n * @property pageX \n */\n/**\n * The pageY position of the track gesture.\n * @type Number\n * @pr operty pageY\n */\n/**\n * The screenX position of the track gesture.\n * @type Number\n * @property screenX\n */\n/**\n * The screenY position of the track ges ture.\n * @type Number\n * @property screenY\n */\n/**\n * The last x axis direc tion of the pointer.\n * @type Number\n * @property xDirection\n */\n/**\n * The last y axis direction of the pointer.\n * @type Number\n * @property yDirection \n */\n/**\n * A shared object between all tracking events.\n * @type Object\n * @property trackInfo\n */\n/**\n * The element currently under the pointer.\n * @type Element\n * @property relatedTarget\n */\n/**\n * The type of pointer that make the track gesture.\n * @type String\n * @property pointerType\n */\n/**\n *\n * This event fires for all pointer movement being tracked.\n *\n * @class tr ack\n * @extends trackstart\n */\n/**\n * This event fires when the pointer is n o longer being tracked.\n *\n * @class trackend\n * @extends trackstart\n */\n\n (function(scope) {\n var dispatcher = scope.dispatcher;\n var eventFactory = scope.eventFactory;\n var pointermap = new scope.PointerMap();\n var track = {\n events: [\n 'down',\n 'move',\n 'up',\n ],\n exposes: [\n 'trackstart',\n 'track',\n 'trackx',\n 'track y',\n 'trackend'\n ],\n defaultActions: {\n 'track': 'none',\ n 'trackx': 'pan-y',\n 'tracky': 'pan-x'\n },\n WIGGLE_THRES HOLD: 4,\n clampDir: function(inDelta) {\n return inDelta > 0 ? 1 : -1 ;\n },\n calcPositionDelta: function(inA, inB) {\n var x = 0, y = 0;\n if (inA && inB) {\n x = inB.pageX - inA.pageX;\n y = inB.pageY - inA.pageY;\n }\n return {x: x, y: y};\n },\n fir eTrack: function(inType, inEvent, inTrackingData) {\n var t = inTrackingDa ta;\n var d = this.calcPositionDelta(t.downEvent, inEvent);\n var dd = this.calcPositionDelta(t.lastMoveEvent, inEvent);\n if (dd.x) {\n t.xDirection = this.clampDir(dd.x);\n } else if (inType === 'trackx') { \n return;\n }\n if (dd.y) {\n t.yDirection = this.c lampDir(dd.y);\n } else if (inType === 'tracky') {\n return;\n }\n var gestureProto = {\n bubbles: true,\n cancelable: true,\n trackInfo: t.trackInfo,\n relatedTarget: inEvent.relate dTarget,\n pointerType: inEvent.pointerType,\n pointerId: inEven t.pointerId,\n _source: 'track'\n };\n if (inType !== 'track y') {\n gestureProto.x = inEvent.x;\n gestureProto.dx = d.x;\n gestureProto.ddx = dd.x;\n gestureProto.clientX = inEvent.clientX ;\n gestureProto.pageX = inEvent.pageX;\n gestureProto.screenX = inEvent.screenX;\n gestureProto.xDirection = t.xDirection;\n }\n if (inType !== 'trackx') {\n gestureProto.dy = d.y;\n gest ureProto.ddy = dd.y;\n gestureProto.y = inEvent.y;\n gestureProt o.clientY = inEvent.clientY;\n gestureProto.pageY = inEvent.pageY;\n gestureProto.screenY = inEvent.screenY;\n gestureProto.yDirection = t.yDirection;\n }\n var e = eventFactory.makeGestureEvent(inType, g estureProto);\n t.downTarget.dispatchEvent(e);\n },\n down: functi on(inEvent) {\n if (inEvent.isPrimary && (inEvent.pointerType === 'mouse' ? inEvent.buttons === 1 : true)) {\n var p = {\n downEvent: in Event,\n downTarget: inEvent.target,\n trackInfo: {},\n lastMoveEvent: null,\n xDirection: 0,\n yDirection: 0, \n tracking: false\n };\n pointermap.set(inEvent.point erId, p);\n }\n },\n move: function(inEvent) {\n var p = poi ntermap.get(inEvent.pointerId);\n if (p) {\n if (!p.tracking) {\n var d = this.calcPositionDelta(p.downEvent, inEvent);\n var move = d.x * d.x + d.y * d.y;\n // start tracking only if finger moves more than WIGGLE_THRESHOLD\n if (move > this.WIGGLE_THRESHOLD) {\n p.tracking = true;\n p.lastMoveEvent = p.downEvent;\n this.fireTrack('trackstart', inEvent, p);\n }\n }\n if (p.tracking) {\n this.fireTrack('track', inEvent, p);\n this.fireTrack('trackx', inEvent, p);\n this.fireTrack('tracky', inEvent, p);\n }\n p.lastMoveEvent = inEvent;\n }\n }, \n up: function(inEvent) {\n var p = pointermap.get(inEvent.pointerId) ;\n if (p) {\n if (p.tracking) {\n this.fireTrack('track end', inEvent, p);\n }\n pointermap.delete(inEvent.pointerId);\n }\n }\n };\n dispatcher.registerGesture('track', track);\n })(win dow.PolymerGestures);\n","/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors m ay be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of cont ributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code dist ributed by Google as part of the polymer project is also\n * subject to an addit ional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n/**\ n * This event is fired when a pointer is held down for 200ms.\n *\n * @module P ointerGestures\n * @submodule Events\n * @class hold\n */\n/**\n * Type of point er that made the holding event.\n * @type String\n * @property pointerType\n */\ n/**\n * Screen X axis position of the held pointer\n * @type Number\n * @proper ty clientX\n */\n/**\n * Screen Y axis position of the held pointer\n * @type Nu mber\n * @property clientY\n */\n/**\n * Type of pointer that made the holding e vent.\n * @type String\n * @property pointerType\n */\n/**\n * This event is fir ed every 200ms while a pointer is held down.\n *\n * @class holdpulse\n * @exten ds hold\n */\n/**\n * Milliseconds pointer has been held down.\n * @type Number\ n * @property holdTime\n */\n/**\n * This event is fired when a held pointer is released or moved.\n *\n * @class release\n */\n\n(function(scope) {\n var disp atcher = scope.dispatcher;\n var eventFactory = scope.eventFactory;\n var hold = {\n // wait at least HOLD_DELAY ms between hold and pulse events\n HOLD _DELAY: 200,\n // pointer can move WIGGLE_THRESHOLD pixels before not countin g as a hold\n WIGGLE_THRESHOLD: 16,\n events: [\n 'down',\n 'mov e',\n 'up',\n ],\n exposes: [\n 'hold',\n 'holdpulse',\n 'release'\n ],\n heldPointer: null,\n holdJob: null,\n pulse: fun ction() {\n var hold = Date.now() - this.heldPointer.timeStamp;\n var type = this.held ? 'holdpulse' : 'hold';\n this.fireHold(type, hold);\n this.held = true;\n },\n cancel: function() {\n clearInterval(this. holdJob);\n if (this.held) {\n this.fireHold('release');\n }\n this.held = false;\n this.heldPointer = null;\n this.target = nul l;\n this.holdJob = null;\n },\n down: function(inEvent) {\n if (inEvent.isPrimary && !this.heldPointer) {\n this.heldPointer = inEvent;\ n this.target = inEvent.target;\n this.holdJob = setInterval(this. pulse.bind(this), this.HOLD_DELAY);\n }\n },\n up: function(inEvent) {\n if (this.heldPointer && this.heldPointer.pointerId === inEvent.pointerI d) {\n this.cancel();\n }\n },\n move: function(inEvent) {\n if (this.heldPointer && this.heldPointer.pointerId === inEvent.pointerId) {\ n var x = inEvent.clientX - this.heldPointer.clientX;\n var y = in Event.clientY - this.heldPointer.clientY;\n if ((x * x + y * y) > this.WI GGLE_THRESHOLD) {\n this.cancel();\n }\n }\n },\n fir eHold: function(inType, inHoldTime) {\n var p = {\n bubbles: true,\n cancelable: true,\n pointerType: this.heldPointer.pointerType,\n pointerId: this.heldPointer.pointerId,\n x: this.heldPointer.clien tX,\n y: this.heldPointer.clientY,\n _source: 'hold'\n };\n if (inHoldTime) {\n p.holdTime = inHoldTime;\n }\n var e = eventFactory.makeGestureEvent(inType, p);\n this.target.dispatchEvent(e);\n }\n };\n dispatcher.registerGesture('hold', hold);\n})(window.PolymerGestu res);\n","/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights rese rved.\n * This code may only be used under the BSD style license found at http:/ /polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at h ttp://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Googl e as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n/**\n * This event i s fired when a pointer quickly goes down and up, and is used to\n * denote activ ation.\n *\n * Any gesture event can prevent the tap event from being created by calling\n * `event.preventTap`.\n *\n * Any pointer event can prevent the tap b y setting the `tapPrevented` property\n * on itself.\n *\n * @module PointerGest ures\n * @submodule Events\n * @class tap\n */\n/**\n * X axis position of the t ap.\n * @property x\n * @type Number\n */\n/**\n * Y axis position of the tap.\n * @property y\n * @type Number\n */\n/**\n * Type of the pointer that made the tap.\n * @property pointerType\n * @type String\n */\n(function(scope) {\n var dispatcher = scope.dispatcher;\n var eventFactory = scope.eventFactory;\n var pointermap = new scope.PointerMap();\n var tap = {\n events: [\n 'down' ,\n 'up'\n ],\n exposes: [\n 'tap'\n ],\n down: function(i nEvent) {\n if (inEvent.isPrimary && !inEvent.tapPrevented) {\n poin termap.set(inEvent.pointerId, {\n target: inEvent.target,\n bu ttons: inEvent.buttons,\n x: inEvent.clientX,\n y: inEvent.cli entY\n });\n }\n },\n shouldTap: function(e, downState) {\n if (e.pointerType === 'mouse') {\n // only allow left click to tap for mouse\n return downState.buttons === 1;\n }\n return !e.tapPre vented;\n },\n up: function(inEvent) {\n var start = pointermap.get(i nEvent.pointerId);\n if (start && this.shouldTap(inEvent, start)) {\n // up.relatedTarget is target currently under finger\n var t = scope.ta rgetFinding.LCA(start.target, inEvent.relatedTarget);\n if (t) {\n var e = eventFactory.makeGestureEvent('tap', {\n bubbles: true,\n cancelable: true,\n x: inEvent.clientX,\n y: in Event.clientY,\n detail: inEvent.detail,\n pointerType: in Event.pointerType,\n pointerId: inEvent.pointerId,\n altKe y: inEvent.altKey,\n ctrlKey: inEvent.ctrlKey,\n metaKey: inEvent.metaKey,\n shiftKey: inEvent.shiftKey,\n _source: 'tap'\n });\n t.dispatchEvent(e);\n }\n }\n p ointermap.delete(inEvent.pointerId);\n }\n };\n // patch eventFactory to re move id from tap's pointermap for preventTap calls\n eventFactory.preventTap = function(e) {\n return function() {\n e.tapPrevented = true;\n poin termap.delete(e.pointerId);\n };\n };\n dispatcher.registerGesture('tap', t ap);\n})(window.PolymerGestures);\n","/*\n Copyright (C) 2013 Ariya Hidayat <ar iya.hidayat@gmail.com>\n Copyright (C) 2013 Thaddee Tyl <thaddee.tyl@gmail.com> \n Copyright (C) 2012 Ariya Hidayat <ariya.hidayat@gmail.com>\n Copyright (C) 2012 Mathias Bynens <mathias@qiwi.be>\n Copyright (C) 2012 Joost-Wim Boekesteij n <joost-wim@boekesteijn.nl>\n Copyright (C) 2012 Kris Kowal <kris.kowal@cixar. com>\n Copyright (C) 2012 Yusuke Suzuki <utatane.tea@gmail.com>\n Copyright (C ) 2012 Arpad Borsos <arpad.borsos@googlemail.com>\n Copyright (C) 2011 Ariya Hi dayat <ariya.hidayat@gmail.com>\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the followi ng conditions are met:\n\n * Redistributions of source code must retain the a bove copyright\n notice, this list of conditions and the following disclaim er.\n * Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the\n d ocumentation and/or other materials provided with the distribution.\n\n THIS SO FTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n AND AN Y EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n IMPLIED W ARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n ARE DISCLAI MED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n ON ANY THEORY OF LIA BILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n THIS SOFTWARE, EVEN IF ADV ISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n(function (global) {\n 'use st rict';\n\n var Token,\n TokenName,\n Syntax,\n Messages, \n source,\n index,\n length,\n delegate,\n l ookahead,\n state;\n\n Token = {\n BooleanLiteral: 1,\n EOF: 2,\n Identifier: 3,\n Keyword: 4,\n NullLiteral: 5,\n NumericLiteral: 6,\n Punctuator: 7,\n StringLiteral: 8\n };\n\n TokenName = {};\n TokenName[Token.BooleanLiteral] = 'Boolean';\n TokenName[Token.EOF] = '<end>';\n TokenName[Token.Identifier] = 'Identifier ';\n TokenName[Token.Keyword] = 'Keyword';\n TokenName[Token.NullLiteral] = 'Null';\n TokenName[Token.NumericLiteral] = 'Numeric';\n TokenName[Token .Punctuator] = 'Punctuator';\n TokenName[Token.StringLiteral] = 'String';\n\n Syntax = {\n ArrayExpression: 'ArrayExpression',\n BinaryExpre ssion: 'BinaryExpression',\n CallExpression: 'CallExpression',\n C onditionalExpression: 'ConditionalExpression',\n EmptyStatement: 'EmptySt atement',\n ExpressionStatement: 'ExpressionStatement',\n Identifi er: 'Identifier',\n Literal: 'Literal',\n LabeledStatement: 'Label edStatement',\n LogicalExpression: 'LogicalExpression',\n MemberEx pression: 'MemberExpression',\n ObjectExpression: 'ObjectExpression',\n Program: 'Program',\n Property: 'Property',\n ThisExpression : 'ThisExpression',\n UnaryExpression: 'UnaryExpression'\n };\n\n / / Error messages should be identical to V8.\n Messages = {\n Unexpecte dToken: 'Unexpected token %0',\n UnknownLabel: 'Undefined label \\'%0\\' ',\n Redeclaration: '%0 \\'%1\\' has already been declared'\n };\n\n // Ensure the condition is true, otherwise throw an error.\n // This is onl y to have a better contract semantic, i.e. another safety net\n // to catch a logic error. The condition shall be fulfilled in normal case.\n // Do NOT us e this to enforce a certain condition on any user input.\n\n function assert( condition, message) {\n if (!condition) {\n throw new Error('A SSERT: ' + message);\n }\n }\n\n function isDecimalDigit(ch) {\n return (ch >= 48 && ch <= 57); // 0..9\n }\n\n\n // 7.2 White Space \n\n function isWhiteSpace(ch) {\n return (ch === 32) || // space\n (ch === 9) || // tab\n (ch === 0xB) ||\n (c h === 0xC) ||\n (ch === 0xA0) ||\n (ch >= 0x1680 && '\\u16 80\\u180E\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\ \u200A\\u202F\\u205F\\u3000\\uFEFF'.indexOf(String.fromCharCode(ch)) > 0);\n }\n\n // 7.3 Line Terminators\n\n function isLineTerminator(ch) {\n return (ch === 10) || (ch === 13) || (ch === 0x2028) || (ch === 0x2029);\n } \n\n // 7.6 Identifier Names and Identifiers\n\n function isIdentifierStar t(ch) {\n return (ch === 36) || (ch === 95) || // $ (dollar) and _ (unde rscore)\n (ch >= 65 && ch <= 90) || // A..Z\n (ch >= 97 && ch <= 122); // a..z\n }\n\n function isIdentifierPart(ch ) {\n return (ch === 36) || (ch === 95) || // $ (dollar) and _ (undersco re)\n (ch >= 65 && ch <= 90) || // A..Z\n (ch >= 9 7 && ch <= 122) || // a..z\n (ch >= 48 && ch <= 57); // 0..9\n }\n\n // 7.6.1.1 Keywords\n\n function isKeyword(id) {\n return (id === 'this')\n }\n\n // 7.4 Comments\n\n function skipWhi tespace() {\n while (index < length && isWhiteSpace(source.charCodeAt(ind ex))) {\n ++index;\n }\n }\n\n function getIdentifier() { \n var start, ch;\n\n start = index++;\n while (index < len gth) {\n ch = source.charCodeAt(index);\n if (isIdentifier Part(ch)) {\n ++index;\n } else {\n bre ak;\n }\n }\n\n return source.slice(start, index);\n }\n\n function scanIdentifier() {\n var start, id, type;\n\n s tart = index;\n\n id = getIdentifier();\n\n // There is no keyword or literal with only one character.\n // Thus, it must be an identifier. \n if (id.length === 1) {\n type = Token.Identifier;\n } else if (isKeyword(id)) {\n type = Token.Keyword;\n } else i f (id === 'null') {\n type = Token.NullLiteral;\n } else if (i d === 'true' || id === 'false') {\n type = Token.BooleanLiteral;\n } else {\n type = Token.Identifier;\n }\n\n return {\n type: type,\n value: id,\n range: [start, index]\n };\n }\n\n\n // 7.7 Punctuators\n\n function scanPunctu ator() {\n var start = index,\n code = source.charCodeAt(index ),\n code2,\n ch1 = source[index],\n ch2;\n\n switch (code) {\n\n // Check for most common single-character punct uators.\n case 46: // . dot\n case 40: // ( open bracket\n case 41: // ) close bracket\n case 59: // ; semicolon\n ca se 44: // , comma\n case 123: // { open curly brace\n case 125: // } close curly brace\n case 91: // [\n case 93: // ]\n case 58: // :\n case 63: // ?\n ++index;\n return {\n type: Token.Punctuator,\n value: String .fromCharCode(code),\n range: [start, index]\n };\n\n default:\n code2 = source.charCodeAt(index + 1);\n\n // '=' (char #61) marks an assignment or comparison operator.\n if (code2 === 61) {\n switch (code) {\n case 37: // %\n case 38: // &\n case 42: // *:\n case 43: // +\n case 45: // -\n case 47: // /\n case 60: // <\n case 62: // >\n case 124: // |\n index += 2;\n return {\n type: Token.Punctuator,\n valu e: String.fromCharCode(code) + String.fromCharCode(code2),\n range: [start, index]\n };\n\n case 33: // !\n case 61: // =\n index += 2;\n\n // !== and ===\n if (source.charCodeAt(index) === 6 1) {\n ++index;\n }\n return {\n type: Token.Punctuator,\n value: source.slice(start, index),\n range: [start, index]\n };\n default:\n b reak;\n }\n }\n break;\n }\n\n // Peek more characters.\n\n ch2 = source[index + 1];\n\n // Oth er 2-character punctuators: && ||\n\n if (ch1 === ch2 && ('&|'.indexOf(ch 1) >= 0)) {\n index += 2;\n return {\n type : Token.Punctuator,\n value: ch1 + ch2,\n range: [ start, index]\n };\n }\n\n if ('<>=!+-*%&|^/'.indexOf(c h1) >= 0) {\n ++index;\n return {\n type: T oken.Punctuator,\n value: ch1,\n range: [start, in dex]\n };\n }\n\n throwError({}, Messages.UnexpectedTok en, 'ILLEGAL');\n }\n\n // 7.8.3 Numeric Literals\n function scanNumeri cLiteral() {\n var number, start, ch;\n\n ch = source[index];\n assert(isDecimalDigit(ch.charCodeAt(0)) || (ch === '.'),\n 'Nume ric literal must start with a decimal digit or a decimal point');\n\n sta rt = index;\n number = '';\n if (ch !== '.') {\n number = source[index++];\n ch = source[index];\n\n // Hex numbe r starts with '0x'.\n // Octal number starts with '0'.\n i f (number === '0') {\n // decimal number starts with '0' such as '09' is illegal.\n if (ch && isDecimalDigit(ch.charCodeAt(0))) {\ n throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n }\n }\n\n while (isDecimalDigit(source.charCode At(index))) {\n number += source[index++];\n }\n ch = source[index];\n }\n\n if (ch === '.') {\n n umber += source[index++];\n while (isDecimalDigit(source.charCodeAt(i ndex))) {\n number += source[index++];\n }\n ch = source[index];\n }\n\n if (ch === 'e' || ch === 'E') {\n number += source[index++];\n\n ch = source[index];\n if (ch === '+' || ch === '-') {\n number += source[index++];\ n }\n if (isDecimalDigit(source.charCodeAt(index))) {\n while (isDecimalDigit(source.charCodeAt(index))) {\n number += source[index++];\n }\n } else {\n throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n }\n }\n\n if (isIdentifierStart(source.charCodeAt(index))) {\n throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n }\n\n r eturn {\n type: Token.NumericLiteral,\n value: parseFloat( number),\n range: [start, index]\n };\n }\n\n // 7.8.4 S tring Literals\n\n function scanStringLiteral() {\n var str = '', quot e, start, ch, octal = false;\n\n quote = source[index];\n assert(( quote === '\\'' || quote === '\"'),\n 'String literal must starts wit h a quote');\n\n start = index;\n ++index;\n\n while (index < length) {\n ch = source[index++];\n\n if (ch === quote) {\n quote = '';\n break;\n } else if ( ch === '\\\\') {\n ch = source[index++];\n if (!ch || !isLineTerminator(ch.charCodeAt(0))) {\n switch (ch) {\n case 'n':\n str += '\\n';\n break;\n case 'r':\n str += '\\r';\n break;\n case 't':\n str += '\\t';\n break;\n case 'b':\n str += '\\b';\n b reak;\n case 'f':\n str += '\\f';\n break;\n case 'v':\n str += '\\x0B';\n break;\n\n defau lt:\n str += ch;\n break;\n }\n } else {\n if (ch === '\\r' && source[index] === '\\n') {\n ++index;\n }\n }\n } else if (isLineTerminator(ch.charCodeAt (0))) {\n break;\n } else {\n str += ch ;\n }\n }\n\n if (quote !== '') {\n throwErr or({}, Messages.UnexpectedToken, 'ILLEGAL');\n }\n\n return {\n type: Token.StringLiteral,\n value: str,\n octal: octal,\n range: [start, index]\n };\n }\n\n function is IdentifierName(token) {\n return token.type === Token.Identifier ||\n token.type === Token.Keyword ||\n token.type === Token.Boolea nLiteral ||\n token.type === Token.NullLiteral;\n }\n\n functio n advance() {\n var ch;\n\n skipWhitespace();\n\n if (index >= length) {\n return {\n type: Token.EOF,\n range: [index, index]\n };\n }\n\n ch = source.c harCodeAt(index);\n\n // Very common: ( and ) and ;\n if (ch === 4 0 || ch === 41 || ch === 58) {\n return scanPunctuator();\n }\ n\n // String literal starts with single quote (#39) or double quote (#34 ).\n if (ch === 39 || ch === 34) {\n return scanStringLiteral( );\n }\n\n if (isIdentifierStart(ch)) {\n return scanId entifier();\n }\n\n // Dot (.) char #46 can also start a floating- point number, hence the need\n // to check the next character.\n i f (ch === 46) {\n if (isDecimalDigit(source.charCodeAt(index + 1))) { \n return scanNumericLiteral();\n }\n retur n scanPunctuator();\n }\n\n if (isDecimalDigit(ch)) {\n return scanNumericLiteral();\n }\n\n return scanPunctuator();\n }\n\n function lex() {\n var token;\n\n token = lookahead;\n index = token.range[1];\n\n lookahead = advance();\n\n inde x = token.range[1];\n\n return token;\n }\n\n function peek() {\n var pos;\n\n pos = index;\n lookahead = advance();\n index = pos;\n }\n\n // Throw an exception\n\n function throwError(toke n, messageFormat) {\n var error,\n args = Array.prototype.slic e.call(arguments, 2),\n msg = messageFormat.replace(\n /%(\\d)/g,\n function (whole, index) {\n asse rt(index < args.length, 'Message reference must be in range');\n return args[index];\n }\n );\n\n error = ne w Error(msg);\n error.index = index;\n error.description = msg;\n throw error;\n }\n\n // Throw an exception because of the token.\n\ n function throwUnexpected(token) {\n throwError(token, Messages.Unexp ectedToken, token.value);\n }\n\n // Expect the next token to match the sp ecified punctuator.\n // If not, an exception will be thrown.\n\n function expect(value) {\n var token = lex();\n if (token.type !== Token.P unctuator || token.value !== value) {\n throwUnexpected(token);\n }\n }\n\n // Return true if the next token matches the specified punct uator.\n\n function match(value) {\n return lookahead.type === Token.P unctuator && lookahead.value === value;\n }\n\n // Return true if the next token matches the specified keyword\n\n function matchKeyword(keyword) {\n return lookahead.type === Token.Keyword && lookahead.value === keyword;\n }\n\n function consumeSemicolon() {\n // Catch the very common case first: immediately a semicolon (char #59).\n if (source.charCodeAt(index ) === 59) {\n lex();\n return;\n }\n\n skipW hitespace();\n\n if (match(';')) {\n lex();\n retur n;\n }\n\n if (lookahead.type !== Token.EOF && !match('}')) {\n throwUnexpected(lookahead);\n }\n }\n\n // 11.1.4 Array In itialiser\n\n function parseArrayInitialiser() {\n var elements = [];\ n\n expect('[');\n\n while (!match(']')) {\n if (match( ',')) {\n lex();\n elements.push(null);\n } else {\n elements.push(parseExpression());\n\n if (!match(']')) {\n expect(',');\n }\n }\n }\n\n expect(']');\n\n return delegate.createArr ayExpression(elements);\n }\n\n // 11.1.5 Object Initialiser\n\n functi on parseObjectPropertyKey() {\n var token;\n\n skipWhitespace();\n token = lex();\n\n // Note: This function is called only from par seObjectProperty(), where\n // EOF and Punctuator tokens are already filt ered out.\n if (token.type === Token.StringLiteral || token.type === Toke n.NumericLiteral) {\n return delegate.createLiteral(token);\n }\n\n return delegate.createIdentifier(token.value);\n }\n\n functi on parseObjectProperty() {\n var token, key;\n\n token = lookahead ;\n skipWhitespace();\n\n if (token.type === Token.EOF || token.ty pe === Token.Punctuator) {\n throwUnexpected(token);\n }\n\n key = parseObjectPropertyKey();\n expect(':');\n return dele gate.createProperty('init', key, parseExpression());\n }\n\n function pars eObjectInitialiser() {\n var properties = [];\n\n expect('{');\n\n while (!match('}')) {\n properties.push(parseObjectProperty() );\n\n if (!match('}')) {\n expect(',');\n }\n }\n\n expect('}');\n\n return delegate.createObjectExpr ession(properties);\n }\n\n // 11.1.6 The Grouping Operator\n\n functio n parseGroupExpression() {\n var expr;\n\n expect('(');\n\n expr = parseExpression();\n\n expect(')');\n\n return expr;\n }\n\n\n // 11.1 Primary Expressions\n\n function parsePrimaryExpression() {\n var type, token, expr;\n\n if (match('(')) {\n retu rn parseGroupExpression();\n }\n\n type = lookahead.type;\n\n if (type === Token.Identifier) {\n expr = delegate.createIdentifie r(lex().value);\n } else if (type === Token.StringLiteral || type === Tok en.NumericLiteral) {\n expr = delegate.createLiteral(lex());\n } else if (type === Token.Keyword) {\n if (matchKeyword('this')) {\n lex();\n expr = delegate.createThisExpression();\ n }\n } else if (type === Token.BooleanLiteral) {\n token = lex();\n token.value = (token.value === 'true');\n expr = delegate.createLiteral(token);\n } else if (type === Token.NullL iteral) {\n token = lex();\n token.value = null;\n expr = delegate.createLiteral(token);\n } else if (match('[')) {\n expr = parseArrayInitialiser();\n } else if (match('{')) {\n expr = parseObjectInitialiser();\n }\n\n if (expr) {\n return expr;\n }\n\n throwUnexpected(lex());\n }\n\n // 11.2 Left-Hand-Side Expressions\n\n function parseArguments() {\n var args = [];\n\n expect('(');\n\n if (!match(')')) {\n while (index < length) {\n args.push(parseExpression());\n if (match(')')) {\n break;\n }\n expect(',');\n }\n }\n\n expect(')');\n\n return args;\n }\n\n function parseNonComputedProperty() {\n var token;\n\n token = lex();\n\n if (!isIdentifierName(token)) { \n throwUnexpected(token);\n }\n\n return delegate.crea teIdentifier(token.value);\n }\n\n function parseNonComputedMember() {\n expect('.');\n\n return parseNonComputedProperty();\n }\n\n f unction parseComputedMember() {\n var expr;\n\n expect('[');\n\n expr = parseExpression();\n\n expect(']');\n\n return expr;\ n }\n\n function parseLeftHandSideExpression() {\n var expr, args, property;\n\n expr = parsePrimaryExpression();\n\n while (true) {\ n if (match('[')) {\n property = parseComputedMember() ;\n expr = delegate.createMemberExpression('[', expr, property);\ n } else if (match('.')) {\n property = parseNonComput edMember();\n expr = delegate.createMemberExpression('.', expr, p roperty);\n } else if (match('(')) {\n args = parseArg uments();\n expr = delegate.createCallExpression(expr, args);\n } else {\n break;\n }\n }\n\n return expr;\n }\n\n // 11.3 Postfix Expressions\n\n var parsePostfixEx pression = parseLeftHandSideExpression;\n\n // 11.4 Unary Operators\n\n fu nction parseUnaryExpression() {\n var token, expr;\n\n if (lookahe ad.type !== Token.Punctuator && lookahead.type !== Token.Keyword) {\n expr = parsePostfixExpression();\n } else if (match('+') || match('-') | | match('!')) {\n token = lex();\n expr = parseUnaryExpres sion();\n expr = delegate.createUnaryExpression(token.value, expr);\n } else if (matchKeyword('delete') || matchKeyword('void') || matchKeywor d('typeof')) {\n throwError({}, Messages.UnexpectedToken);\n } else {\n expr = parsePostfixExpression();\n }\n\n retu rn expr;\n }\n\n function binaryPrecedence(token) {\n var prec = 0; \n\n if (token.type !== Token.Punctuator && token.type !== Token.Keyword) {\n return 0;\n }\n\n switch (token.value) {\n case '||':\n prec = 1;\n break;\n\n case '&&':\n prec = 2;\n break;\n\n case '==':\n case '!=': \n case '===':\n case '!==':\n prec = 6;\n b reak;\n\n case '<':\n case '>':\n case '<=':\n case '>=':\n case 'instanceof':\n prec = 7;\n break;\n\n case 'in':\n prec = 7;\n break;\n\n case '+ ':\n case '-':\n prec = 9;\n break;\n\n case '*':\n case '/':\n case '%':\n prec = 11;\n break;\n\n default:\n break;\n }\n\n return pre c;\n }\n\n // 11.5 Multiplicative Operators\n // 11.6 Additive Operator s\n // 11.7 Bitwise Shift Operators\n // 11.8 Relational Operators\n // 11.9 Equality Operators\n // 11.10 Binary Bitwise Operators\n // 11.11 Bi nary Logical Operators\n\n function parseBinaryExpression() {\n var ex pr, token, prec, stack, right, operator, left, i;\n\n left = parseUnaryEx pression();\n\n token = lookahead;\n prec = binaryPrecedence(token );\n if (prec === 0) {\n return left;\n }\n toke n.prec = prec;\n lex();\n\n right = parseUnaryExpression();\n\n stack = [left, token, right];\n\n while ((prec = binaryPrecedence(lo okahead)) > 0) {\n\n // Reduce: make a binary expression from the thr ee topmost entries.\n while ((stack.length > 2) && (prec <= stack[sta ck.length - 2].prec)) {\n right = stack.pop();\n o perator = stack.pop().value;\n left = stack.pop();\n expr = delegate.createBinaryExpression(operator, left, right);\n stack.push(expr);\n }\n\n // Shift.\n token = lex();\n token.prec = prec;\n stack.push(token);\n expr = parseUnaryExpression();\n stack.push(expr);\n }\n \n // Final reduce to clean-up the stack.\n i = stack.length - 1;\ n expr = stack[i];\n while (i > 1) {\n expr = delegate. createBinaryExpression(stack[i - 1].value, stack[i - 2], expr);\n i - = 2;\n }\n\n return expr;\n }\n\n\n // 11.12 Conditional Ope rator\n\n function parseConditionalExpression() {\n var expr, conseque nt, alternate;\n\n expr = parseBinaryExpression();\n\n if (match(' ?')) {\n lex();\n consequent = parseConditionalExpression( );\n expect(':');\n alternate = parseConditionalExpression ();\n\n expr = delegate.createConditionalExpression(expr, consequent, alternate);\n }\n\n return expr;\n }\n\n // Simplification since we do not support AssignmentExpression.\n var parseExpression = parseCo nditionalExpression;\n\n // Polymer Syntax extensions\n\n // Filter ::\n // Identifier\n // Identifier \"(\" \")\"\n // Identifier \"(\" Fi lterArguments \")\"\n\n function parseFilter() {\n var identifier, arg s;\n\n identifier = lex();\n\n if (identifier.type !== Token.Ident ifier) {\n throwUnexpected(identifier);\n }\n\n args = match('(') ? parseArguments() : [];\n\n return delegate.createFilter(iden tifier.value, args);\n }\n\n // Filters ::\n // \"|\" Filter\n // Filters \"|\" Filter\n\n function parseFilters() {\n while (match('| ')) {\n lex();\n parseFilter();\n }\n }\n\n / / TopLevel ::\n // LabelledExpressions\n // AsExpression\n // InE xpression\n // FilterExpression\n\n // AsExpression ::\n // FilterE xpression as Identifier\n\n // InExpression ::\n // Identifier, Identifi er in FilterExpression\n // Identifier in FilterExpression\n\n // Filter Expression ::\n // Expression\n // Expression Filters\n\n function parseTopLevel() {\n skipWhitespace();\n peek();\n\n var exp r = parseExpression();\n if (expr) {\n if (lookahead.value === ',' || lookahead.value == 'in' &&\n expr.type === Syntax. Identifier) {\n parseInExpression(expr);\n } else {\n parseFilters();\n if (lookahead.value === 'as') {\ n parseAsExpression(expr);\n } else {\n delegate.createTopLevel(expr);\n }\n }\n }\n\n if (lookahead.type !== Token.EOF) {\n throwUnexpe cted(lookahead);\n }\n }\n\n function parseAsExpression(expr) {\n lex(); // as\n var identifier = lex().value;\n delegate.cre ateAsExpression(expr, identifier);\n }\n\n function parseInExpression(iden tifier) {\n var indexName;\n if (lookahead.value === ',') {\n lex();\n if (lookahead.type !== Token.Identifier)\n throwUnexpected(lookahead);\n indexName = lex().value;\n }\n\n lex(); // in\n var expr = parseExpression();\n parse Filters();\n delegate.createInExpression(identifier.name, indexName, expr );\n }\n\n function parse(code, inDelegate) {\n delegate = inDelega te;\n source = code;\n index = 0;\n length = source.length; \n lookahead = null;\n state = {\n labelSet: {}\n };\n\n return parseTopLevel();\n }\n\n global.esprima = {\n parse: parse\n };\n})(this);\n","// Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n// This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n// The complete set of a uthors may be found at http://polymer.github.io/AUTHORS.txt\n// The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n// C ode distributed by Google as part of the polymer project is also\n// subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n\n( function (global) {\n 'use strict';\n\n function prepareBinding(expressionText , name, node, filterRegistry) {\n var expression;\n try {\n expressio n = getExpression(expressionText);\n if (expression.scopeIdent &&\n (node.nodeType !== Node.ELEMENT_NODE ||\n node.tagName !== 'TEMPLATE ' ||\n (name !== 'bind' && name !== 'repeat'))) {\n throw Error ('as and in can only be used within <template bind/repeat>');\n }\n } ca tch (ex) {\n console.error('Invalid expression syntax: ' + expressionText, ex);\n return;\n }\n\n return function(model, node, oneTime) {\n var binding = expression.getBinding(model, filterRegistry, oneTime);\n if (expression.scopeIdent && binding) {\n node.polymerExpressionScopeIdent_ = expression.scopeIdent;\n if (expression.indexIdent)\n node.pol ymerExpressionIndexIdent_ = expression.indexIdent;\n }\n\n return bind ing;\n }\n }\n\n // TODO(rafaelw): Implement simple LRU.\n var expressionP arseCache = Object.create(null);\n\n function getExpression(expressionText) {\n var expression = expressionParseCache[expressionText];\n if (!expression) {\n var delegate = new ASTDelegate();\n esprima.parse(expressionText, delegate);\n expression = new Expression(delegate);\n expressionParse Cache[expressionText] = expression;\n }\n return expression;\n }\n\n fun ction Literal(value) {\n this.value = value;\n this.valueFn_ = undefined;\ n }\n\n Literal.prototype = {\n valueFn: function() {\n if (!this.valu eFn_) {\n var value = this.value;\n this.valueFn_ = function() {\n return value;\n }\n }\n\n return this.valueFn_;\n }\n }\n\n function IdentPath(name) {\n this.name = name;\n this.path = P ath.get(name);\n }\n\n IdentPath.prototype = {\n valueFn: function() {\n if (!this.valueFn_) {\n var name = this.name;\n var path = this .path;\n this.valueFn_ = function(model, observer) {\n if (obser ver)\n observer.addPath(model, path);\n\n return path.getVal ueFrom(model);\n }\n }\n\n return this.valueFn_;\n },\n\n setValue: function(model, newValue) {\n if (this.path.length == 1);\n model = findScope(model, this.path[0]);\n\n return this.path.setValueFro m(model, newValue);\n }\n };\n\n function MemberExpression(object, property , accessor) {\n this.computed = accessor == '[';\n\n this.dynamicDeps = ty peof object == 'function' ||\n object.dynamicDeps ||\n (this.computed && !(property instanceof Literal));\n\n thi s.simplePath =\n !this.dynamicDeps &&\n (property instanceof Ident Path || property instanceof Literal) &&\n (object instanceof MemberExpres sion || object instanceof IdentPath);\n\n this.object = this.simplePath ? obj ect : getFn(object);\n this.property = !this.computed || this.simplePath ?\n property : getFn(property);\n }\n\n MemberExpression.prototype = {\n get fullPath() {\n if (!this.fullPath_) {\n\n var parts = this.obje ct instanceof MemberExpression ?\n this.object.fullPath.slice() : [th is.object.name];\n parts.push(this.property instanceof IdentPath ?\n this.property.name : this.property.value);\n this.fullPath_ = Path .get(parts);\n }\n\n return this.fullPath_;\n },\n\n valueFn: fu nction() {\n if (!this.valueFn_) {\n var object = this.object;\n\n if (this.simplePath) {\n var path = this.fullPath;\n\n t his.valueFn_ = function(model, observer) {\n if (observer)\n observer.addPath(model, path);\n\n return path.getValueFrom(mode l);\n };\n } else if (!this.computed) {\n var path = Pa th.get(this.property.name);\n\n this.valueFn_ = function(model, observe r, filterRegistry) {\n var context = object(model, observer, filterRe gistry);\n\n if (observer)\n observer.addPath(context, p ath);\n\n return path.getValueFrom(context);\n }\n } else {\n // Computed property.\n var property = this.property; \n\n this.valueFn_ = function(model, observer, filterRegistry) {\n var context = object(model, observer, filterRegistry);\n var p ropName = property(model, observer, filterRegistry);\n if (observer)\ n observer.addPath(context, [propName]);\n\n return cont ext ? context[propName] : undefined;\n };\n }\n }\n re turn this.valueFn_;\n },\n\n setValue: function(model, newValue) {\n if (this.simplePath) {\n this.fullPath.setValueFrom(model, newValue);\n return newValue;\n }\n\n var object = this.object(model);\n var propName = this.property instanceof IdentPath ? this.property.name :\n this.property(model);\n return object[propName] = newValue;\n }\n };\n\n function Filter(name, args) {\n this.name = name;\n this.args = [] ;\n for (var i = 0; i < args.length; i++) {\n this.args[i] = getFn(args[ i]);\n }\n }\n\n Filter.prototype = {\n transform: function(model, obser ver, filterRegistry, toModelDirection,\n initialArgs) {\n var fn = filterRegistry[this.name];\n var context = model;\n if (fn) {\n context = undefined;\n } else {\n fn = context[this. name];\n if (!fn) {\n console.error('Cannot find function or fil ter: ' + this.name);\n return;\n }\n }\n\n // If toMod elDirection is falsey, then the \"normal\" (dom-bound) direction\n // is us ed. Otherwise, it looks for a 'toModel' property function on the\n // objec t.\n if (toModelDirection) {\n fn = fn.toModel;\n } else if (ty peof fn.toDOM == 'function') {\n fn = fn.toDOM;\n }\n\n if (typ eof fn != 'function') {\n console.error('Cannot find function or filter: ' + this.name);\n return;\n }\n\n var args = initialArgs || []; \n for (var i = 0; i < this.args.length; i++) {\n args.push(getFn(th is.args[i])(model, observer, filterRegistry));\n }\n\n return fn.apply (context, args);\n }\n };\n\n function notImplemented() { throw Error('Not Implemented'); }\n\n var unaryOperators = {\n '+': function(v) { return +v; },\n '-': function(v) { return -v; },\n '!': function(v) { return !v; }\n };\n\n var binaryOperators = {\n '+': function(l, r) { return l+r; },\n '-': function(l, r) { return l-r; },\n '*': function(l, r) { return l*r; },\n '/': function(l, r) { return l/r; },\n '%': function(l, r) { return l%r; },\n '<': function(l, r) { return l<r; },\n '>': function(l, r) { return l >r; },\n '<=': function(l, r) { return l<=r; },\n '>=': function(l, r) { r eturn l>=r; },\n '==': function(l, r) { return l==r; },\n '!=': function(l , r) { return l!=r; },\n '===': function(l, r) { return l===r; },\n '!==': function(l, r) { return l!==r; },\n '&&': function(l, r) { return l&&r; },\n '||': function(l, r) { return l||r; },\n };\n\n function getFn(arg) {\n return typeof arg == 'function' ? arg : arg.valueFn();\n }\n\n function ASTDe legate() {\n this.expression = null;\n this.filters = [];\n this.deps = {};\n this.currentPath = undefined;\n this.scopeIdent = undefined;\n t his.indexIdent = undefined;\n this.dynamicDeps = false;\n }\n\n ASTDelegate .prototype = {\n createUnaryExpression: function(op, argument) {\n if (! unaryOperators[op])\n throw Error('Disallowed operator: ' + op);\n\n argument = getFn(argument);\n\n return function(model, observer, filterReg istry) {\n return unaryOperators[op](argument(model, observer, filterRegi stry));\n };\n },\n\n createBinaryExpression: function(op, left, righ t) {\n if (!binaryOperators[op])\n throw Error('Disallowed operator: ' + op);\n\n left = getFn(left);\n right = getFn(right);\n\n swi tch (op) {\n case '||':\n this.dynamicDeps = true;\n re turn function(model, observer, filterRegistry) {\n return left(model, observer, filterRegistry) ||\n right(model, observer, filterRegi stry);\n };\n case '&&':\n this.dynamicDeps = true;\n return function(model, observer, filterRegistry) {\n return l eft(model, observer, filterRegistry) &&\n right(model, observer, filterRegistry);\n };\n }\n\n return function(model, observer , filterRegistry) {\n return binaryOperators[op](left(model, observer, fi lterRegistry),\n right(model, observer, filter Registry));\n };\n },\n\n createConditionalExpression: function(test, consequent, alternate) {\n test = getFn(test);\n consequent = getFn(c onsequent);\n alternate = getFn(alternate);\n\n this.dynamicDeps = tru e;\n\n return function(model, observer, filterRegistry) {\n return t est(model, observer, filterRegistry) ?\n consequent(model, observer, filterRegistry) :\n alternate(model, observer, filterRegistry);\n }\n },\n\n createIdentifier: function(name) {\n var ident = new Ide ntPath(name);\n ident.type = 'Identifier';\n return ident;\n },\n\n createMemberExpression: function(accessor, object, property) {\n var ex = new MemberExpression(object, property, accessor);\n if (ex.dynamicDeps)\ n this.dynamicDeps = true;\n return ex;\n },\n\n createCallExp ression: function(expression, args) {\n if (!(expression instanceof IdentPa th))\n throw Error('Only identifier function invocations are allowed');\n \n var filter = new Filter(expression.name, args);\n\n return function (model, observer, filterRegistry) {\n return filter.transform(model, obse rver, filterRegistry, false);\n };\n },\n\n createLiteral: function(t oken) {\n return new Literal(token.value);\n },\n\n createArrayExpres sion: function(elements) {\n for (var i = 0; i < elements.length; i++)\n elements[i] = getFn(elements[i]);\n\n return function(model, observer, filterRegistry) {\n var arr = []\n for (var i = 0; i < elements.l ength; i++)\n arr.push(elements[i](model, observer, filterRegistry));\n return arr;\n }\n },\n\n createProperty: function(kind, key, value) {\n return {\n key: key instanceof IdentPath ? key.name : key .value,\n value: value\n };\n },\n\n createObjectExpression: f unction(properties) {\n for (var i = 0; i < properties.length; i++)\n properties[i].value = getFn(properties[i].value);\n\n return function(mod el, observer, filterRegistry) {\n var obj = {};\n for (var i = 0; i < properties.length; i++)\n obj[properties[i].key] =\n p roperties[i].value(model, observer, filterRegistry);\n return obj;\n }\n },\n\n createFilter: function(name, args) {\n this.filters.push( new Filter(name, args));\n },\n\n createAsExpression: function(expression, scopeIdent) {\n this.expression = expression;\n this.scopeIdent = sco peIdent;\n },\n\n createInExpression: function(scopeIdent, indexIdent, exp ression) {\n this.expression = expression;\n this.scopeIdent = scopeId ent;\n this.indexIdent = indexIdent;\n },\n\n createTopLevel: functio n(expression) {\n this.expression = expression;\n },\n\n createThisEx pression: notImplemented\n }\n\n function ConstantObservable(value) {\n thi s.value_ = value;\n }\n\n ConstantObservable.prototype = {\n open: function () { return this.value_; },\n discardChanges: function() { return this.value_ ; },\n deliver: function() {},\n close: function() {},\n }\n\n function Expression(delegate) {\n this.scopeIdent = delegate.scopeIdent;\n this.ind exIdent = delegate.indexIdent;\n\n if (!delegate.expression)\n throw Err or('No expression found.');\n\n this.expression = delegate.expression;\n g etFn(this.expression); // forces enumeration of path dependencies\n\n this.fi lters = delegate.filters;\n this.dynamicDeps = delegate.dynamicDeps;\n }\n\n Expression.prototype = {\n getBinding: function(model, filterRegistry, oneT ime) {\n if (oneTime)\n return this.getValue(model, undefined, filte rRegistry);\n\n var observer = new CompoundObserver();\n // captures d eps.\n var firstValue = this.getValue(model, observer, filterRegistry);\n var firstTime = true;\n var self = this;\n\n function valueFn() {\ n // deps cannot have changed on first value retrieval.\n if (firs tTime) {\n firstTime = false;\n return firstValue;\n }\ n\n if (self.dynamicDeps)\n observer.startReset();\n\n va r value = self.getValue(model,\n self.dynamicDe ps ? observer : undefined,\n filterRegistry);\n if (self.dynamicDeps)\n observer.finishReset();\n\n retu rn value;\n }\n\n function setValueFn(newValue) {\n self.setVal ue(model, newValue, filterRegistry);\n return newValue;\n }\n\n return new ObserverTransform(observer, valueFn, setValueFn, true);\n },\n\n getValue: function(model, observer, filterRegistry) {\n var value = getF n(this.expression)(model, observer, filterRegistry);\n for (var i = 0; i < this.filters.length; i++) {\n value = this.filters[i].transform(model, ob server, filterRegistry,\n false, [value]);\n }\n\n return v alue;\n },\n\n setValue: function(model, newValue, filterRegistry) {\n var count = this.filters ? this.filters.length : 0;\n while (count-- > 0) {\n newValue = this.filters[count].transform(model, undefined,\n filterRegistry, true, [newValue]);\n }\n\n if (this.expression.set Value)\n return this.expression.setValue(model, newValue);\n }\n }\n\ n /**\n * Converts a style property name to a css property name. For example: \n * \"WebkitUserSelect\" to \"-webkit-user-select\"\n */\n function conver tStylePropertyName(name) {\n return String(name).replace(/[A-Z]/g, function(c ) {\n return '-' + c.toLowerCase();\n });\n }\n\n var parentScopeName = '@' + Math.random().toString(36).slice(2);\n\n // Single ident paths must bin d directly to the appropriate scope object.\n // I.e. Pushed values in two-bind ings need to be assigned to the actual model\n // object.\n function findScope (model, prop) {\n while (model[parentScopeName] &&\n !Object.protot ype.hasOwnProperty.call(model, prop)) {\n model = model[parentScopeName];\n }\n\n return model;\n }\n\n function isLiteralExpression(pathString) {\ n switch (pathString) {\n case '':\n return false;\n\n case 'false':\n case 'null':\n case 'true':\n return true;\n }\n\ n if (!isNaN(Number(pathString)))\n return true;\n\n return false;\n };\n\n function PolymerExpressions() {}\n\n PolymerExpressions.prototype = {\ n // \"built-in\" filters\n styleObject: function(value) {\n var part s = [];\n for (var key in value) {\n parts.push(convertStyleProperty Name(key) + ': ' + value[key]);\n }\n return parts.join('; ');\n }, \n\n tokenList: function(value) {\n var tokens = [];\n for (var key in value) {\n if (value[key])\n tokens.push(key);\n }\n return tokens.join(' ');\n },\n\n // binding delegate API\n prepareI nstancePositionChanged: function(template) {\n var indexIdent = template.po lymerExpressionIndexIdent_;\n if (!indexIdent)\n return;\n\n re turn function(templateInstance, index) {\n templateInstance.model[indexId ent] = index;\n };\n },\n\n prepareBinding: function(pathString, name , node) {\n var path = Path.get(pathString);\n\n if (!isLiteralExpress ion(pathString) && path.valid) {\n if (path.length == 1) {\n ret urn function(model, node, oneTime) {\n if (oneTime)\n re turn path.getValueFrom(model);\n\n var scope = findScope(model, path[ 0]);\n return new PathObserver(scope, path);\n };\n } \n return; // bail out early if pathString is simple path.\n }\n\n return prepareBinding(pathString, name, node, this);\n },\n\n prepareI nstanceModel: function(template) {\n var scopeName = template.polymerExpres sionScopeIdent_;\n if (!scopeName)\n return;\n\n var parentScop e = template.templateInstance ?\n template.templateInstance.model :\n template.model;\n\n var indexName = template.polymerExpressionIndex Ident_;\n\n return function(model) {\n return createScopeObject(pare ntScope, model, scopeName, indexName);\n };\n }\n };\n\n var createSco peObject = ('__proto__' in {}) ?\n function(parentScope, model, scopeName, in dexName) {\n var scope = {};\n scope[scopeName] = model;\n scope[ indexName] = undefined;\n scope[parentScopeName] = parentScope;\n scop e.__proto__ = parentScope;\n return scope;\n } :\n function(parentSco pe, model, scopeName, indexName) {\n var scope = Object.create(parentScope) ;\n Object.defineProperty(scope, scopeName,\n { value: model, conf igurable: true, writable: true });\n Object.defineProperty(scope, indexName ,\n { value: undefined, configurable: true, writable: true });\n O bject.defineProperty(scope, parentScopeName,\n { value: parentScope, co nfigurable: true, writable: true });\n return scope;\n };\n\n global.Po lymerExpressions = PolymerExpressions;\n PolymerExpressions.getExpression = get Expression;\n})(this);\n","/*\n * Copyright (c) 2014 The Polymer Project Authors . All rights reserved.\n * This code may only be used under the BSD style licens e found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of con tributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code dis tributed by Google as part of the polymer project is also\n * subject to an addi tional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\nPolym er = {\n version: '0.3.5-5d00e4b'\n};\n","/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The com plete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS. txt\n * Code distributed by Google as part of the polymer project is also\n * su bject to an additional IP rights grant found at http://polymer.github.io/PATENTS .txt\n */\n\n// TODO(sorvell): this ensures Polymer is an object and not a funct ion\n// Platform is currently defining it as a function to allow for async loadi ng\n// of polymer; once we refine the loading process this likely goes away.\nif (typeof window.Polymer === 'function') {\n Polymer = {};\n}\n\n","/*\n * Copyr ight (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code ma y only be used under the BSD style license found at http://polymer.github.io/LIC ENSE.txt\n * The complete set of authors may be found at http://polymer.github.i o/AUTHORS.txt\n * The complete set of contributors may be found at http://polyme r.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polym er project is also\n * subject to an additional IP rights grant found at http:// polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n // copy own proper ties from 'api' to 'prototype, with name hinting for 'super'\n function extend( prototype, api) {\n if (prototype && api) {\n // use only own properties of 'api'\n Object.getOwnPropertyNames(api).forEach(function(n) {\n // acquire property descriptor\n var pd = Object.getOwnPropertyDescriptor (api, n);\n if (pd) {\n // clone property via descriptor\n Object.defineProperty(prototype, n, pd);\n // cache name-of-method for 'super' engine\n if (typeof pd.value == 'function') {\n // hint the 'super' engine\n pd.value.nom = n;\n }\n }\n });\n }\n return prototype;\n }\n \n // exports\n\n scope.ext end = extend;\n\n})(Polymer);\n","/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complete set of a uthors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * C ode distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */ \n\n(function(scope) {\n \n // usage\n \n // invoke cb.call(this) in 100ms, unless the job is re-registered,\n // which resets the timer\n // \n // this. myJob = this.job(this.myJob, cb, 100)\n //\n // returns a job handle which can be used to re-register a job\n\n var Job = function(inContext) {\n this.con text = inContext;\n this.boundComplete = this.complete.bind(this)\n };\n Jo b.prototype = {\n go: function(callback, wait) {\n this.callback = callb ack;\n var h;\n if (!wait) {\n h = requestAnimationFrame(this.b oundComplete);\n this.handle = function() {\n cancelAnimationFra me(h);\n }\n } else {\n h = setTimeout(this.boundComplete, wa it);\n this.handle = function() {\n clearTimeout(h);\n }\ n }\n },\n stop: function() {\n if (this.handle) {\n this .handle();\n this.handle = null;\n }\n },\n complete: function () {\n if (this.handle) {\n this.stop();\n this.callback.call (this.context);\n }\n }\n };\n \n function job(job, callback, wait) { \n if (job) {\n job.stop();\n } else {\n job = new Job(this);\n }\n job.go(callback, wait);\n return job;\n }\n \n // exports \n\n scope.job = job;\n \n})(Polymer);\n","/*\n * Copyright (c) 2014 The Polymer Pro ject Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complet e set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\ n * Code distributed by Google as part of the polymer project is also\n * subjec t to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt \n */\n\n(function(scope) {\n\n var registry = {};\n\n HTMLElement.register = function(tag, prototype) {\n registry[tag] = prototype;\n }\n\n // get prot otype mapped to node <tag>\n HTMLElement.getPrototypeForTag = function(tag) {\n var prototype = !tag ? HTMLElement.prototype : registry[tag];\n // TODO(s jmiles): creating <tag> is likely to have wasteful side-effects\n return prot otype || Object.getPrototypeOf(document.createElement(tag));\n };\n\n // we ha ve to flag propagation stoppage for the event dispatcher\n var originalStopProp agation = Event.prototype.stopPropagation;\n Event.prototype.stopPropagation = function() {\n this.cancelBubble = true;\n originalStopPropagation.apply(t his, arguments);\n };\n \n // TODO(sorvell): remove when we're sure imports d oes not need\n // to load stylesheets\n /*\n HTMLImports.importer.preloadSele ctors += \n ', polymer-element link[rel=stylesheet]';\n */\n})(Polymer);\n ","/*\r\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. \r\n * This code may only be used under the BSD style license found at http://po lymer.github.io/LICENSE.txt\r\n * The complete set of authors may be found at ht tp://polymer.github.io/AUTHORS.txt\r\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\r\n * Code distributed by Go ogle as part of the polymer project is also\r\n * subject to an additional IP ri ghts grant found at http://polymer.github.io/PATENTS.txt\r\n */\r\n\r\n (functio n(scope) {\r\n // super\r\n\r\n // `arrayOfArgs` is an optional array of a rgs like one might pass\r\n // to `Function.apply`\r\n\r\n // TODO(sjmiles ):\r\n // $super must be installed on an instance or prototype chain\r\n // as `super`, and invoked via `this`, e.g.\r\n // `this.super();`\ r\n\r\n // will not work if function objects are not unique, for example,\ r\n // when using mixins.\r\n // The memoization strategy assumes ea ch function exists on only one \r\n // prototype chain i.e. we use the fun ction object for memoizing)\r\n // perhaps we can bookkeep on the prototyp e itself instead\r\n function $super(arrayOfArgs) {\r\n // since we are thunking a method call, performance is important here: \r\n // memoize all lookups, once memoized the fast path calls no other \r\n // functions\r\n //\r\n // find the caller (cannot be `strict` because of 'caller')\r\n var caller = $super.caller;\r\n // memoized 'name of method' \r\n var nom = caller.nom;\r\n // memoized next implementation prototype\r\n var _super = caller._super;\r\n if (!_super) {\r\n if (!nom) {\r\ n nom = caller.nom = nameInThis.call(this, caller);\r\n }\r\n if (!nom) {\r\n console.warn('called super() on a method not insta lled declaratively (has no .nom property)');\r\n }\r\n // super pr ototype is either cached or we have to find it\r\n // by searching __prot o__ (at the 'top')\r\n // invariant: because we cache _super on fn below, we never reach \r\n // here from inside a series of calls to super(), so it's ok to \r\n // start searching from the prototype of 'this' (at the 'top')\r\n // we must never memoize a null super for this reason\r\n _super = memoizeSuper(caller, nom, getPrototypeOf(this));\r\n }\r\n // our super function\r\n var fn = _super[nom];\r\n if (fn) {\r\n // memoize information so 'fn' can call 'super'\r\n if (!fn._super) { \r\n // must not memoize null, or we lose our invariant above\r\n memoizeSuper(fn, nom, _super);\r\n }\r\n // invoke the inherit ed method\r\n // if 'fn' is not function valued, this will throw\r\n return fn.apply(this, arrayOfArgs || []);\r\n }\r\n }\r\n\r\n func tion nameInThis(value) {\r\n var p = this.__proto__;\r\n while (p && p !== HTMLElement.prototype) {\r\n // TODO(sjmiles): getOwnPropertyNames i s absurdly expensive\r\n var n$ = Object.getOwnPropertyNames(p);\r\n for (var i=0, l=n$.length, n; i<l && (n=n$[i]); i++) {\r\n var d = O bject.getOwnPropertyDescriptor(p, n);\r\n if (typeof d.value === 'funct ion' && d.value === value) {\r\n return n;\r\n }\r\n }\r\n p = p.__proto__;\r\n }\r\n }\r\n\r\n function memoizeSup er(method, name, proto) {\r\n // find and cache next prototype containing ` name`\r\n // we need the prototype so we can do another lookup\r\n // from here\r\n var s = nextSuper(proto, name, method);\r\n if (s[name]) {\r\n // `s` is a prototype, the actual method is `s[name]`\r\n / / tag super method with it's name for quicker lookups\r\n s[name].nom = n ame;\r\n }\r\n return method._super = s;\r\n }\r\n\r\n function nextSuper(proto, name, caller) {\r\n // look for an inherited prototype tha t implements name\r\n while (proto) {\r\n if ((proto[name] !== calle r) && proto[name]) {\r\n return proto;\r\n }\r\n proto = getPrototypeOf(proto);\r\n }\r\n // must not return null, or we lose o ur invariant above\r\n // in this case, a super() call was invoked where no superclass\r\n // method exists\r\n // TODO(sjmiles): thow an excepti on?\r\n return Object;\r\n }\r\n\r\n // NOTE: In some platforms (IE10 ) the prototype chain is faked via \r\n // __proto__. Therefore, always get p rototype via __proto__ instead of\r\n // the more standard Object.getPrototyp eOf.\r\n function getPrototypeOf(prototype) {\r\n return prototype.__pro to__;\r\n }\r\n\r\n // utility function to precompute name tags for functi ons\r\n // in a (unchained) prototype\r\n function hintSuper(prototype) {\ r\n // tag functions with their prototype name to optimize\r\n // supe r call invocations\r\n for (var n in prototype) {\r\n var pd = Objec t.getOwnPropertyDescriptor(prototype, n);\r\n if (pd && typeof pd.value = == 'function') {\r\n pd.value.nom = n;\r\n }\r\n }\r\n } \r\n\r\n // exports\r\n\r\n scope.super = $super;\r\n\r\n})(Polymer);\r\n" ,"/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer .github.io/LICENSE.txt\n * The complete set of authors may be found at http://po lymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as par t of the polymer project is also\n * subject to an additional IP rights grant fo und at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n func tion noopHandler(value) {\n return value;\n }\n\n var typeHandlers = {\n string: noopHandler,\n 'undefined': noopHandler,\n date: function(value) {\n return new Date(Date.parse(value) || Date.now());\n },\n boolean: function(value) {\n if (value === '') {\n return true;\n }\n return value === 'false' ? false : !!value;\n },\n number: function(va lue) {\n var n = parseFloat(value);\n // hex values like \"0xFFFF\" pa rseFloat as 0\n if (n === 0) {\n n = parseInt(value);\n }\n return isNaN(n) ? value : n;\n // this code disabled because encoded valu es (like \"0xFFFF\")\n // do not round trip to their original format\n //return (String(floatVal) === value) ? floatVal : value;\n },\n object: function(value, currentValue) {\n if (currentValue === null) {\n ret urn value;\n }\n try {\n // If the string is an object, we can parse is with the JSON library.\n // include convenience replace for sing le-quotes. If the author omits\n // quotes altogether, parse will fail.\n return JSON.parse(value.replace(/'/g, '\"'));\n } catch(e) {\n // The object isn't valid JSON, return the raw value\n return value;\n }\n },\n // avoid deserialization of functions\n 'function': func tion(value, currentValue) {\n return currentValue;\n }\n };\n\n functi on deserializeValue(value, currentValue) {\n // attempt to infer type from de fault value\n var inferredType = typeof currentValue;\n // invent 'date' t ype value for Date\n if (currentValue instanceof Date) {\n inferredType = 'date';\n }\n // delegate deserialization via type string\n return ty peHandlers[inferredType](value, currentValue);\n }\n\n // exports\n\n scope.d eserializeValue = deserializeValue;\n\n})(Polymer);\n","/*\n * Copyright (c) 201 4 The Polymer Project Authors. All rights reserved.\n * This code may only be us ed under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer.github.io/AUTHORS.tx t\n * The complete set of contributors may be found at http://polymer.github.io/ CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project i s also\n * subject to an additional IP rights grant found at http://polymer.gith ub.io/PATENTS.txt\n */\n(function(scope) {\n\n // imports\n\n var extend = sco pe.extend;\n\n // module\n\n var api = {};\n\n api.declaration = {};\n api.i nstance = {};\n\n api.publish = function(apis, prototype) {\n for (var n in apis) {\n extend(prototype, apis[n]);\n }\n };\n\n // exports\n\n sco pe.api = api;\n\n})(Polymer);\n","/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complete set of a uthors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * C ode distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */ \n\n(function(scope) {\n\n var utils = {\n /**\n * Invokes a function a synchronously. The context of the callback\n * function is bound to 'this' automatically.\n * @method async\n * @param {Function|String} method\n * @param {any|Array} args\n * @param {number} timeout\n */\n async: function(method, args, timeout) {\n // when polyfilling Object.obser ve, ensure changes \n // propagate before executing the async method\n Platform.flush();\n // second argument to `apply` must be an array\n args = (args && args.length) ? args : [args];\n // function to invoke\n var fn = function() {\n (this[method] || method).apply(this, args);\n }.bind(this);\n // execute `fn` sooner or later\n var handle = tim eout ? setTimeout(fn, timeout) :\n requestAnimationFrame(fn);\n // NOTE: switch on inverting handle to determine which time is used.\n return timeout ? handle : ~handle;\n },\n cancelAsync: function(handle) {\n if (handle < 0) {\n cancelAnimationFrame(~handle);\n } else {\n clearTimeout(handle);\n }\n },\n /**\n * Fire an event.\n * @method fire\n * @returns {Object} event\n * @param {string} type An event name.\n * @param {any} detail\n * @param {Node} onNode Targe t node.\n * @param {Boolean} bubbles Set false to prevent bubbling, default s to true\n * @param {Boolean} cancelable Set false to prevent cancellation , defaults to true\n */\n fire: function(type, detail, onNode, bubbles, cancelable) {\n var node = onNode || this;\n var detail = detail === n ull || detail === undefined ? {} : detail;\n var event = new CustomEvent(ty pe, {\n bubbles: bubbles !== undefined ? bubbles : true,\n cancela ble: cancelable !== undefined ? cancelable : true,\n detail: detail\n });\n node.dispatchEvent(event);\n return event;\n },\n /**\n * Fire an event asynchronously.\n * @method asyncFire\n * @param {string} type An event name.\n * @param detail\n * @param {Node} toNod e Target node.\n */\n asyncFire: function(/*inType, inDetail*/) {\n this.async(\"fire\", arguments);\n },\n /**\n * Remove class from ol d, add class to anew, if they exist.\n * @param classFollows\n * @para m anew A node.\n * @param old A node\n * @param className\n */\n classFollows: function(anew, old, className) {\n if (old) {\n old .classList.remove(className);\n }\n if (anew) {\n anew.classLis t.add(className);\n }\n },\n /**\n * Inject HTML which contains markup bound to this element into\n * a target element (replacing target el ement content).\n * @param String html to inject\n * @param Element ta rget element\n */\n injectBoundHTML: function(html, element) {\n va r template = document.createElement('template');\n template.innerHTML = htm l;\n var fragment = this.instanceTemplate(template);\n if (element) {\ n element.textContent = '';\n element.appendChild(fragment);\n }\n return fragment;\n }\n };\n\n // no-operation function for handy stubs\n var nop = function() {};\n\n // null-object for handy stubs\n var no b = {};\n\n // deprecated\n\n utils.asyncMethod = utils.async;\n\n // exports \n\n scope.api.instance.utils = utils;\n scope.nop = nop;\n scope.nob = nob;\ n\n})(Polymer);\n","/*\n * Copyright (c) 2014 The Polymer Project Authors. All r ights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributo rs may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distribute d by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(function( scope) {\n\n // imports\n\n var log = window.logFlags || {};\n var EVENT_PREF IX = 'on-';\n\n // instance events api\n var events = {\n // read-only\n EVENT_PREFIX: EVENT_PREFIX,\n // event listeners on host\n addHostListene rs: function() {\n var events = this.eventDelegates;\n log.events && ( Object.keys(events).length > 0) && console.log('[%s] addHostListeners:', this.lo calName, events);\n // NOTE: host events look like bindings but really are not;\n // (1) we don't want the attribute to be set and (2) we want to supp ort\n // multiple event listeners ('host' and 'instance') and Node.bind\n // by default supports 1 thing being bound.\n for (var type in events) {\n var methodName = events[type];\n PolymerGestures.addEventListe ner(this, type, this.element.getEventHandler(this, this, methodName));\n }\ n },\n // call 'method' or function method on 'obj' with 'args', if the me thod exists\n dispatchMethod: function(obj, method, args) {\n if (obj) { \n log.events && console.group('[%s] dispatch [%s]', obj.localName, metho d);\n var fn = typeof method === 'function' ? method : obj[method];\n if (fn) {\n fn[args ? 'apply' : 'call'](obj, args);\n }\n log.events && console.groupEnd();\n Platform.flush();\n }\n }\n };\n\n // exports\n\n scope.api.instance.events = events;\n\n // alias P olymerGestures event listener logic\n scope.addEventListener = PolymerGestures. addEventListener;\n scope.removeEventListener = PolymerGestures.removeEventList ener;\n\n})(Polymer);\n","/*\r\n * Copyright (c) 2014 The Polymer Project Author s. All rights reserved.\r\n * This code may only be used under the BSD style lic ense found at http://polymer.github.io/LICENSE.txt\r\n * The complete set of aut hors may be found at http://polymer.github.io/AUTHORS.txt\r\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\r\n * Code distributed by Google as part of the polymer project is also\r\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\ r\n */\r\n\r\n(function(scope) {\r\n\r\n // instance api for attributes\r\n\r\n var attributes = {\r\n copyInstanceAttributes: function () {\r\n var a $ = this._instanceAttributes;\r\n for (var k in a$) {\r\n if (!this. hasAttribute(k)) {\r\n this.setAttribute(k, a$[k]);\r\n }\r\n }\r\n },\r\n // for each attribute on this, deserialize value to proper ty as needed\r\n takeAttributes: function() {\r\n // if we have no publi sh lookup table, we have no attributes to take\r\n // TODO(sjmiles): ad hoc \r\n if (this._publishLC) {\r\n for (var i=0, a$=this.attributes, l= a$.length, a; (a=a$[i]) && i<l; i++) {\r\n this.attributeToProperty(a.n ame, a.value);\r\n }\r\n }\r\n },\r\n // if attribute 'name' i s mapped to a property, deserialize\r\n // 'value' into that property\r\n attributeToProperty: function(name, value) {\r\n // try to match this attri bute to a property (attributes are\r\n // all lower-case, so this is case-i nsensitive search)\r\n var name = this.propertyForAttribute(name);\r\n if (name) {\r\n // filter out 'mustached' values, these are to be\r\n // replaced with bound-data and are not yet values\r\n // themselves \r\n if (value && value.search(scope.bindPattern) >= 0) {\r\n re turn;\r\n }\r\n // get original value\r\n var currentValue = this[name];\r\n // deserialize Boolean or Number values from attribute\ r\n var value = this.deserializeValue(value, currentValue);\r\n // only act if the value has changed\r\n if (value !== currentValue) {\r\n // install new value (has side-effects)\r\n this[name] = value ;\r\n }\r\n }\r\n },\r\n // return the published property matc hing name, or undefined\r\n propertyForAttribute: function(name) {\r\n v ar match = this._publishLC && this._publishLC[name];\r\n //console.log('pro pertyForAttribute:', name, 'matches', match);\r\n return match;\r\n },\r \n // convert representation of 'stringValue' based on type of 'currentValue' \r\n deserializeValue: function(stringValue, currentValue) {\r\n return scope.deserializeValue(stringValue, currentValue);\r\n },\r\n serializeVal ue: function(value, inferredType) {\r\n if (inferredType === 'boolean') {\r \n return value ? '' : undefined;\r\n } else if (inferredType !== 'o bject' && inferredType !== 'function'\r\n && value !== undefined) {\r\n return value;\r\n }\r\n },\r\n reflectPropertyToAttribute: fu nction(name) {\r\n var inferredType = typeof this[name];\r\n // try to intelligently serialize property value\r\n var serializedValue = this.seri alizeValue(this[name], inferredType);\r\n // boolean properties must reflec t as boolean attributes\r\n if (serializedValue !== undefined) {\r\n this.setAttribute(name, serializedValue);\r\n // TODO(sorvell): we shoul d remove attr for all properties\r\n // that have undefined serialization ; however, we will need to\r\n // refine the attr reflection system to ac hieve this; pica, for example,\r\n // relies on having inferredType objec t properties not removed as\r\n // attrs.\r\n } else if (inferredTyp e === 'boolean') {\r\n this.removeAttribute(name);\r\n }\r\n }\r\ n };\r\n\r\n // exports\r\n\r\n scope.api.instance.attributes = attributes;\r \n\r\n})(Polymer);\r\n","/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors ma y be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contr ibutors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distr ibuted by Google as part of the polymer project is also\n * subject to an additi onal IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(func tion(scope) {\n\n // imports\n\n var log = window.logFlags || {};\n\n // magi c words\n\n var OBSERVE_SUFFIX = 'Changed';\n\n // element api\n\n var empty = [];\n\n var updateRecord = {\n object: undefined,\n type: 'update',\n name: undefined,\n oldValue: undefined\n };\n\n var numberIsNaN = Number. isNaN || function(value) {\n return typeof value === 'number' && isNaN(value) ;\n }\n\n function areSameValue(left, right) {\n if (left === right)\n return left !== 0 || 1 / left === 1 / right;\n if (numberIsNaN(left) && numb erIsNaN(right))\n return true;\n\n return left !== left && right !== rig ht;\n }\n\n // capture A's value if B's value is null or undefined,\n // othe rwise use B's value\n function resolveBindingValue(oldValue, value) {\n if ( value === undefined && oldValue === null) {\n return value;\n }\n ret urn (value === null || value === undefined) ? oldValue : value;\n }\n\n var pr operties = {\n createPropertyObserver: function() {\n var n$ = this._obs erveNames;\n if (n$ && n$.length) {\n var o = this._propertyObserver = new CompoundObserver(true);\n this.registerObserver(o);\n // TO DO(sorvell): may not be kosher to access the value here (this[n]);\n // p reviously we looked at the descriptor on the prototype\n // this doesn't work for inheritance and not for accessors without\n // a value property\ n for (var i=0, l=n$.length, n; (i<l) && (n=n$[i]); i++) {\n o.a ddPath(this, n);\n this.observeArrayValue(n, this[n], null);\n } \n }\n },\n openPropertyObserver: function() {\n if (this._prope rtyObserver) {\n this._propertyObserver.open(this.notifyPropertyChanges, this);\n }\n },\n notifyPropertyChanges: function(newValues, oldValue s, paths) {\n var name, method, called = {};\n for (var i in oldValues ) {\n // note: paths is of form [object, path, object, path]\n nam e = paths[2 * i + 1];\n method = this.observe[name];\n if (method) {\n var ov = oldValues[i], nv = newValues[i];\n // observes t he value if it is an array\n this.observeArrayValue(name, nv, ov);\n if (!called[method]) {\n // only invoke change method if one o f ov or nv is not (undefined | null)\n if ((ov !== undefined && ov != = null) || (nv !== undefined && nv !== null)) {\n called[method] = true;\n // TODO(sorvell): call method with the set of values it's e xpecting;\n // e.g. 'foo bar': 'invalidate' expects the new and old values for\n // foo and bar. Currently we give only one of these a nd then\n // deliver all the arguments.\n this.invokeM ethod(method, [ov, nv, arguments]);\n }\n }\n }\n }\n },\n deliverChanges: function() {\n if (this._propertyObserver) {\n this._propertyObserver.deliver();\n }\n },\n propertyChan ged_: function(name, value, oldValue) {\n if (this.reflect[name]) {\n this.reflectPropertyToAttribute(name);\n }\n },\n observeArrayValue : function(name, value, old) {\n // we only care if there are registered si de-effects\n var callbackName = this.observe[name];\n if (callbackName ) {\n // if we are observing the previous value, stop\n if (Array. isArray(old)) {\n log.observe && console.log('[%s] observeArrayValue: u nregister observer [%s]', this.localName, name);\n this.closeNamedObser ver(name + '__array');\n }\n // if the new value is an array, bein g observing it\n if (Array.isArray(value)) {\n log.observe && co nsole.log('[%s] observeArrayValue: register observer [%s]', this.localName, name , value);\n var observer = new ArrayObserver(value);\n observe r.open(function(value, old) {\n this.invokeMethod(callbackName, [old] );\n }, this);\n this.registerNamedObserver(name + '__array', observer);\n }\n }\n },\n emitPropertyChangeRecord: function(n ame, value, oldValue) {\n var object = this;\n if (areSameValue(value, oldValue))\n return;\n\n this.propertyChanged_(name, value, oldValu e);\n\n if (!Observer.hasObjectObserve)\n return;\n\n var notif ier = this.notifier_;\n if (!notifier)\n notifier = this.notifier_ = Object.getNotifier(this);\n\n updateRecord.object = this;\n updateRec ord.name = name;\n updateRecord.oldValue = oldValue;\n\n notifier.noti fy(updateRecord);\n },\n bindToAccessor: function(name, observable, resolv eFn) {\n var privateName = name + '_';\n var privateObservable = name + 'Observable_';\n\n this[privateObservable] = observable;\n var oldV alue = this[privateName];\n\n var self = this;\n var value = observabl e.open(function(value, oldValue) {\n self[privateName] = value;\n self.emitPropertyChangeRecord(name, value, oldValue);\n });\n\n if (re solveFn && !areSameValue(oldValue, value)) {\n var resolvedValue = resolv eFn(oldValue, value);\n if (!areSameValue(value, resolvedValue)) {\n value = resolvedValue;\n if (observable.setValue)\n obs ervable.setValue(value);\n }\n }\n\n this[privateName] = value; \n this.emitPropertyChangeRecord(name, value, oldValue);\n\n var obser ver = {\n close: function() {\n observable.close();\n s elf[privateObservable] = undefined;\n }\n };\n this.registerObs erver(observer);\n return observer;\n },\n createComputedProperties: function() {\n if (!this._computedNames) {\n return;\n }\n\n for (var i = 0; i < this._computedNames.length; i++) {\n var name = th is._computedNames[i];\n var expressionText = this.computed[name];\n try {\n var expression = PolymerExpressions.getExpression(expressionT ext);\n var observable = expression.getBinding(this, this.element.synta x);\n this.bindToAccessor(name, observable);\n } catch (ex) {\n console.error('Failed to create computed property', ex);\n }\n }\n },\n bindProperty: function(property, observable, oneTime) {\n if (oneTime) {\n this[property] = observable;\n return;\n } \n return this.bindToAccessor(property, observable, resolveBindingValue);\n },\n invokeMethod: function(method, args) {\n var fn = this[method] || method;\n if (typeof fn === 'function') {\n fn.apply(this, args); \n }\n },\n registerObserver: function(observer) {\n if (!this._ observers) {\n this._observers = [observer];\n return;\n }\n\ n this._observers.push(observer);\n },\n // observer array items are arrays of observers.\n closeObservers: function() {\n if (!this._observe rs) {\n return;\n }\n\n var observers = this._observers;\n for (var i = 0; i < observers.length; i++) {\n var observer = observers[ i];\n if (observer && typeof observer.close == 'function') {\n o bserver.close();\n }\n }\n\n this._observers = [];\n },\n // bookkeeping observers for memory management\n registerNamedObserver: func tion(name, observer) {\n var o$ = this._namedObservers || (this._namedObser vers = {});\n o$[name] = observer;\n },\n closeNamedObserver: functio n(name) {\n var o$ = this._namedObservers;\n if (o$ && o$[name]) {\n o$[name].close();\n o$[name] = null;\n return true;\n } \n },\n closeNamedObservers: function() {\n if (this._namedObservers) {\n for (var i in this._namedObservers) {\n this.closeNamedObse rver(i);\n }\n this._namedObservers = {};\n }\n }\n };\n\ n // logging\n var LOG_OBSERVE = '[%s] watching [%s]';\n var LOG_OBSERVED = ' [%s#%s] watch: [%s] now [%s] was [%s]';\n var LOG_CHANGED = '[%s#%s] propertyCh anged: [%s] now [%s] was [%s]';\n\n // exports\n\n scope.api.instance.properti es = properties;\n\n})(Polymer);\n","/*\n * Copyright (c) 2014 The Polymer Proje ct Authors. All rights reserved.\n * This code may only be used under the BSD st yle license found at http://polymer.github.io/LICENSE.txt\n * The complete set o f authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n // imports\n\n var log = window.logFlags || 0;\n \n // element api supporting mdv\n var mdv = {\n instanceTemplate: function (template) {\n // ensure a default bindingDelegate\n var syntax = this .syntax || (!template.bindingDelegate &&\n this.element.syntax);\n var dom = template.createInstance(this, syntax);\n var observers = dom.bin dings_;\n for (var i = 0; i < observers.length; i++) {\n this.regist erObserver(observers[i]);\n }\n return dom;\n },\n bind: functio n(name, observable, oneTime) {\n var property = this.propertyForAttribute(n ame);\n if (!property) {\n // TODO(sjmiles): this mixin method must use the special form\n // of `super` installed by `mixinMethod` in declar ation/prototype.js\n return this.mixinSuper(arguments);\n } else {\n // use n-way Polymer binding\n var observer = this.bindProperty(p roperty, observable, oneTime);\n // NOTE: reflecting binding information is typically required only for\n // tooling. It has a performance cost so it's opt-in in Node.bind.\n if (Platform.enableBindingsReflection && obs erver) {\n observer.path = observable.path_;\n this._recordBin ding(property, observer);\n }\n if (this.reflect[property]) {\n this.reflectPropertyToAttribute(property);\n }\n return obs erver;\n }\n },\n bindFinished: function() {\n this.makeElementR eady();\n },\n _recordBinding: function(name, observer) {\n this.bind ings_ = this.bindings_ || {};\n this.bindings_[name] = observer;\n },\n // TODO(sorvell): unbind/unbindAll has been removed, as public api, from\n // TemplateBinding. We still need to close/dispose of observers but perhaps\n // we should choose a more explicit name.\n asyncUnbindAll: function() {\n if (!this._unbound) {\n log.unbind && console.log('[%s] asyncUnbindA ll', this.localName);\n this._unbindAllJob = this.job(this._unbindAllJob, this.unbindAll, 0);\n }\n },\n unbindAll: function() {\n if (!t his._unbound) {\n this.closeObservers();\n this.closeNamedObserver s();\n this._unbound = true;\n }\n },\n cancelUnbindAll: funct ion() {\n if (this._unbound) {\n log.unbind && console.warn('[%s] al ready unbound, cannot cancel unbindAll', this.localName);\n return;\n }\n log.unbind && console.log('[%s] cancelUnbindAll', this.localName);\n if (this._unbindAllJob) {\n this._unbindAllJob = this._unbindAllJob. stop();\n }\n }\n };\n\n function unbindNodeTree(node) {\n forNodeT ree(node, _nodeUnbindAll);\n }\n\n function _nodeUnbindAll(node) {\n node.u nbindAll();\n }\n\n function forNodeTree(node, callback) {\n if (node) {\n callback(node);\n for (var child = node.firstChild; child; child = chi ld.nextSibling) {\n forNodeTree(child, callback);\n }\n }\n }\n\ n var mustachePattern = /\\{\\{([^{}]*)}}/;\n\n // exports\n\n scope.bindPatt ern = mustachePattern;\n scope.api.instance.mdv = mdv;\n\n})(Polymer);\n","/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.githu b.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer. github.io/AUTHORS.txt\n * The complete set of contributors may be found at http: //polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of t he polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n var base = {\n PolymerBase: true,\n job: function(job, callback, wait) {\n if ( typeof job === 'string') {\n var n = '___' + job;\n this[n] = Poly mer.job.call(this, this[n], callback, wait);\n } else {\n return Pol ymer.job.call(this, job, callback, wait);\n }\n },\n super: Polymer.s uper,\n // user entry point for element has had its createdCallback called\n created: function() {\n },\n // user entry point for element has shadow Root and is ready for\n // api interaction\n ready: function() {\n },\n createdCallback: function() {\n if (this.templateInstance && this.templ ateInstance.model) {\n console.warn('Attributes on ' + this.localName + ' were data bound ' +\n 'prior to Polymer upgrading the element. This may result in ' +\n 'incorrect binding types.');\n }\n this .created();\n this.prepareElement();\n if (!this.ownerDocument.isStagi ngDocument) {\n this.makeElementReady();\n }\n },\n // system entry point, do not override\n prepareElement: function() {\n if (this._ elementPrepared) {\n console.warn('Element already prepared', this.localN ame);\n return;\n }\n this._elementPrepared = true;\n // s torage for shadowRoots info\n this.shadowRoots = {};\n // install prop erty observers\n this.createPropertyObserver();\n this.openPropertyObs erver();\n // install boilerplate attributes\n this.copyInstanceAttrib utes();\n // process input attributes\n this.takeAttributes();\n // add event listeners\n this.addHostListeners();\n },\n makeElementR eady: function() {\n if (this._readied) {\n return;\n }\n this._readied = true;\n this.createComputedProperties();\n // TODO(sor vell): We could create an entry point here\n // for the user to compute pro perty values.\n // process declarative resources\n this.parseDeclarati ons(this.__proto__);\n // TODO(sorvell): CE polyfill uses unresolved attrib ute to simulate\n // :unresolved; remove this attribute to be compatible wi th native\n // CE.\n this.removeAttribute('unresolved');\n // use r entry point\n this.ready();\n },\n attachedCallback: function() {\n this.cancelUnbindAll();\n // invoke user action\n if (this.attac hed) {\n this.attached();\n }\n // TODO(sorvell): bc\n if (this.enteredView) {\n this.enteredView();\n }\n // NOTE: domRe ady can be used to access elements in dom (descendants,\n // ancestors, sib lings) such that the developer is enured to upgrade\n // ordering. If the e lement definitions have loaded, domReady\n // can be used to access upgrade d elements.\n if (!this.hasBeenAttached) {\n this.hasBeenAttached = true;\n if (this.domReady) {\n this.async('domReady');\n }\n }\n },\n detachedCallback: function() {\n if (!this.preventD ispose) {\n this.asyncUnbindAll();\n }\n // invoke user action\ n if (this.detached) {\n this.detached();\n }\n // TODO(so rvell): bc\n if (this.leftView) {\n this.leftView();\n }\n } ,\n // TODO(sorvell): bc\n enteredViewCallback: function() {\n this.a ttachedCallback();\n },\n // TODO(sorvell): bc\n leftViewCallback: func tion() {\n this.detachedCallback();\n },\n // TODO(sorvell): bc\n enteredDocumentCallback: function() {\n this.attachedCallback();\n },\n // TODO(sorvell): bc\n leftDocumentCallback: function() {\n this.deta chedCallback();\n },\n // recursive ancestral <element> initialization, ol dest first\n parseDeclarations: function(p) {\n if (p && p.element) {\n this.parseDeclarations(p.__proto__);\n p.parseDeclaration.call(thi s, p.element);\n }\n },\n // parse input <element> as needed, overrid e for custom behavior\n parseDeclaration: function(elementElement) {\n v ar template = this.fetchTemplate(elementElement);\n if (template) {\n var root = this.shadowFromTemplate(template);\n this.shadowRoots[elemen tElement.name] = root;\n }\n },\n // return a shadow-root template (i f desired), override for custom behavior\n fetchTemplate: function(elementEle ment) {\n return elementElement.querySelector('template');\n },\n // utility function that creates a shadow root from a <template>\n shadowFromTem plate: function(template) {\n if (template) {\n // make a shadow roo t\n var root = this.createShadowRoot();\n // stamp template\n // which includes parsing and applying MDV bindings before being\n // inserted (to avoid {{}} in attribute values)\n // e.g. to prevent <img sr c=\"images/{{icon}}\"> from generating a 404.\n var dom = this.instanceTe mplate(template);\n // append to shadow dom\n root.appendChild(dom );\n // perform post-construction initialization tasks on shadow root\n this.shadowRootReady(root, template);\n // return the created shado w root\n return root;\n }\n },\n // utility function that stam ps a <template> into light-dom\n lightFromTemplate: function(template, refNod e) {\n if (template) {\n // TODO(sorvell): mark this element as an e ventController so that\n // event listeners on bound nodes inside it will be called on it.\n // Note, the expectation here is that events on all d escendants\n // should be handled by this element.\n this.eventCon troller = this;\n // stamp template\n // which includes parsing an d applying MDV bindings before being\n // inserted (to avoid {{}} in attr ibute values)\n // e.g. to prevent <img src=\"images/{{icon}}\"> from gen erating a 404.\n var dom = this.instanceTemplate(template);\n // a ppend to shadow dom\n if (refNode) {\n this.insertBefore(dom, re fNode);\n } else {\n this.appendChild(dom);\n }\n // perform post-construction initialization tasks on ahem, light root\n t his.shadowRootReady(this);\n // return the created shadow root\n r eturn dom;\n }\n },\n shadowRootReady: function(root) {\n // loc ate nodes with id and store references to them in this.$ hash\n this.marsha lNodeReferences(root);\n },\n // locate nodes with id and store references to them in this.$ hash\n marshalNodeReferences: function(root) {\n // e stablish $ instance variable\n var $ = this.$ = this.$ || {};\n // pop ulate $ from nodes with ID from the LOCAL tree\n if (root) {\n var n $ = root.querySelectorAll(\"[id]\");\n for (var i=0, l=n$.length, n; (i<l ) && (n=n$[i]); i++) {\n $[n.id] = n;\n };\n }\n },\n attributeChangedCallback: function(name, oldValue) {\n // TODO(sjmiles): a dhoc filter\n if (name !== 'class' && name !== 'style') {\n this.att ributeToProperty(name, this.getAttribute(name));\n }\n if (this.attrib uteChanged) {\n this.attributeChanged.apply(this, arguments);\n }\n },\n onMutation: function(node, listener) {\n var observer = new Muta tionObserver(function(mutations) {\n listener.call(this, observer, mutati ons);\n observer.disconnect();\n }.bind(this));\n observer.obse rve(node, {childList: true, subtree: true});\n }\n };\n\n // true if object has own PolymerBase api\n function isBase(object) {\n return object.hasOwnP roperty('PolymerBase')\n }\n\n // name a base constructor for dev tools\n\n f unction PolymerBase() {};\n PolymerBase.prototype = base;\n base.constructor = PolymerBase;\n\n // exports\n\n scope.Base = PolymerBase;\n scope.isBase = i sBase;\n scope.api.instance.base = base;\n\n})(Polymer);\n","/*\n * Copyright ( c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.t xt\n * The complete set of authors may be found at http://polymer.github.io/AUTH ORS.txt\n * The complete set of contributors may be found at http://polymer.gith ub.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer pro ject is also\n * subject to an additional IP rights grant found at http://polyme r.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n // imports\n\n var log = window.logFlags || {};\n var hasShadowDOMPolyfill = window.ShadowDOMPolyfill; \n\n // magic words\n \n var STYLE_SCOPE_ATTRIBUTE = 'element';\n var STYLE_ CONTROLLER_SCOPE = 'controller';\n \n var styles = {\n STYLE_SCOPE_ATTRIBUT E: STYLE_SCOPE_ATTRIBUTE,\n /**\n * Installs external stylesheets and <st yle> elements with the attribute \n * polymer-scope='controller' into the sc ope of element. This is intended\n * to be a called during custom element co nstruction.\n */\n installControllerStyles: function() {\n // apply c ontroller styles, but only if they are not yet applied\n var scope = this.f indStyleScope();\n if (scope && !this.scopeHasNamedStyle(scope, this.localN ame)) {\n // allow inherited controller styles\n var proto = getPr ototypeOf(this), cssText = '';\n while (proto && proto.element) {\n cssText += proto.element.cssTextForScope(STYLE_CONTROLLER_SCOPE);\n proto = getPrototypeOf(proto);\n }\n if (cssText) {\n th is.installScopeCssText(cssText, scope);\n }\n }\n },\n install ScopeStyle: function(style, name, scope) {\n var scope = scope || this.find StyleScope(), name = name || '';\n if (scope && !this.scopeHasNamedStyle(sc ope, this.localName + name)) {\n var cssText = '';\n if (style ins tanceof Array) {\n for (var i=0, l=style.length, s; (i<l) && (s=style[i ]); i++) {\n cssText += s.textContent + '\\n\\n';\n }\n } else {\n cssText = style.textContent;\n }\n this.ins tallScopeCssText(cssText, scope, name);\n }\n },\n installScopeCssTex t: function(cssText, scope, name) {\n scope = scope || this.findStyleScope( );\n name = name || '';\n if (!scope) {\n return;\n }\n if (hasShadowDOMPolyfill) {\n cssText = shimCssText(cssText, scope.hos t);\n }\n var style = this.element.cssTextToScopeStyle(cssText,\n STYLE_CONTROLLER_SCOPE);\n Polymer.applyStyleToScope(style, scope);\n // cache that this style has been applied\n this.styleCacheForScope(sc ope)[this.localName + name] = true;\n },\n findStyleScope: function(node) {\n // find the shadow root that contains this element\n var n = node || this;\n while (n.parentNode) {\n n = n.parentNode;\n }\n return n;\n },\n scopeHasNamedStyle: function(scope, name) {\n var cache = this.styleCacheForScope(scope);\n return cache[name];\n },\n styleCacheForScope: function(scope) {\n if (hasShadowDOMPolyfill) {\n var scopeName = scope.host ? scope.host.localName : scope.localName;\n return polyfillScopeStyleCache[scopeName] || (polyfillScopeStyleCache[scopeName] = {});\n } else {\n return scope._scopeStyles = (scope._scopeStyles || {});\n }\n }\n };\n\n var polyfillScopeStyleCache = {};\n \n // NOTE: use raw prototype traversal so that we ensure correct traversal\n // on p latforms where the protoype chain is simulated via __proto__ (IE10)\n function getPrototypeOf(prototype) {\n return prototype.__proto__;\n }\n\n function shimCssText(cssText, host) {\n var name = '', is = false;\n if (host) {\n name = host.localName;\n is = host.hasAttribute('is');\n }\n var selector = Platform.ShadowCSS.makeScopeSelector(name, is);\n return Platform .ShadowCSS.shimCssText(cssText, selector);\n }\n\n // exports\n\n scope.api.i nstance.styles = styles;\n \n})(Polymer);\n","/*\n * Copyright (c) 2014 The Pol ymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The comp lete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUT ORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PAT ENTS.txt\n */\n\n(function(scope) {\n\n // imports\n\n var extend = scope.exte nd;\n var api = scope.api;\n\n // imperative implementation: Polymer()\n\n // specify an 'own' prototype for tag `name`\n function element(name, prototype) {\n if (arguments.length === 1 && typeof arguments[0] !== 'string') {\n prototype = name;\n var script = document._currentScript;\n name = scr ipt && script.parentNode && script.parentNode.getAttribute ?\n script.p arentNode.getAttribute('name') : '';\n if (!name) {\n throw 'Element name could not be inferred.';\n }\n }\n if (getRegisteredPrototype[n ame]) {\n throw 'Already registered (Polymer) prototype for element ' + nam e;\n }\n // cache the prototype\n registerPrototype(name, prototype);\n // notify the registrar waiting for 'name', if any\n notifyPrototype(name );\n }\n\n // async prototype source\n\n function waitingForPrototype(name, c lient) {\n waitPrototype[name] = client;\n }\n\n var waitPrototype = {};\n\ n function notifyPrototype(name) {\n if (waitPrototype[name]) {\n waitP rototype[name].registerWhenReady();\n delete waitPrototype[name];\n }\n }\n\n // utility and bookkeeping\n\n // maps tag names to prototypes, as regi stered with\n // Polymer. Prototypes associated with a tag name\n // using doc ument.registerElement are available from\n // HTMLElement.getPrototypeForTag(). \n // If an element was fully registered by Polymer, then\n // Polymer.getRegi steredPrototype(name) === \n // HTMLElement.getPrototypeForTag(name)\n\n var prototypesByName = {};\n\n function registerPrototype(name, prototype) {\n return prototypesByName[name] = prototype || {};\n }\n\n function getRegistere dPrototype(name) {\n return prototypesByName[name];\n }\n\n // exports\n\n scope.getRegisteredPrototype = getRegisteredPrototype;\n scope.waitingForProto type = waitingForPrototype;\n\n // namespace shenanigans so we can expose our s cope on the registration \n // function\n\n // make window.Polymer reference ` element()`\n\n window.Polymer = element;\n\n // TODO(sjmiles): find a way to d o this that is less terrible\n // copy window.Polymer properties onto `element( )`\n\n extend(Polymer, scope);\n\n // Under the HTMLImports polyfill, scripts in the main document\n // do not block on imports; we want to allow calls to Po lymer in the main\n // document. Platform collects those calls until we can pro cess them, which\n // we do here.\n\n var declarations = Platform.deliverDecla rations();\n if (declarations) {\n for (var i=0, l=declarations.length, d; ( i<l) && (d=declarations[i]); i++) {\n element.apply(null, d);\n }\n }\n \n})(Polymer);\n","/*\n * Copyright (c) 2014 The Polymer Project Authors. All ri ghts reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be f ound at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributor s may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional I P rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(s cope) {\n\nvar path = {\n resolveElementPaths: function(node) {\n Platform.u rlResolver.resolveDom(node);\n },\n addResolvePathApi: function() {\n // le t assetpath attribute modify the resolve path\n var assetPath = this.getAttri bute('assetpath') || '';\n var root = new URL(assetPath, this.ownerDocument.b aseURI);\n this.prototype.resolvePath = function(urlPath, base) {\n var u = new URL(urlPath, base || root);\n return u.href;\n };\n }\n};\n\n// exports\nscope.api.declaration.path = path;\n\n})(Polymer);\n","/*\n * Copyrigh t (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may o nly be used under the BSD style license found at http://polymer.github.io/LICENS E.txt\n * The complete set of authors may be found at http://polymer.github.io/A UTHORS.txt\n * The complete set of contributors may be found at http://polymer.g ithub.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://pol ymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n // imports\n\n var l og = window.logFlags || {};\n var api = scope.api.instance.styles;\n var STYLE _SCOPE_ATTRIBUTE = api.STYLE_SCOPE_ATTRIBUTE;\n\n var hasShadowDOMPolyfill = wi ndow.ShadowDOMPolyfill;\n\n // magic words\n\n var STYLE_SELECTOR = 'style';\n var STYLE_LOADABLE_MATCH = '@import';\n var SHEET_SELECTOR = 'link[rel=styles heet]';\n var STYLE_GLOBAL_SCOPE = 'global';\n var SCOPE_ATTR = 'polymer-scope ';\n\n var styles = {\n // returns true if resources are loading\n loadSt yles: function(callback) {\n var template = this.fetchTemplate();\n va r content = template && this.templateContent();\n if (content) {\n t his.convertSheetsToStyles(content);\n var styles = this.findLoadableStyle s(content);\n if (styles.length) {\n var templateUrl = template. ownerDocument.baseURI;\n return Platform.styleResolver.loadStyles(style s, templateUrl, callback);\n }\n }\n if (callback) {\n c allback();\n }\n },\n convertSheetsToStyles: function(root) {\n var s$ = root.querySelectorAll(SHEET_SELECTOR);\n for (var i=0, l=s$.length , s, c; (i<l) && (s=s$[i]); i++) {\n c = createStyleElement(importRuleFor Sheet(s, this.ownerDocument.baseURI),\n this.ownerDocument);\n this.copySheetAttributes(c, s);\n s.parentNode.replaceChild(c, s);\n }\n },\n copySheetAttributes: function(style, link) {\n for (var i= 0, a$=link.attributes, l=a$.length, a; (a=a$[i]) && i<l; i++) {\n if (a.n ame !== 'rel' && a.name !== 'href') {\n style.setAttribute(a.name, a.va lue);\n }\n }\n },\n findLoadableStyles: function(root) {\n var loadables = [];\n if (root) {\n var s$ = root.querySelectorAl l(STYLE_SELECTOR);\n for (var i=0, l=s$.length, s; (i<l) && (s=s$[i]); i+ +) {\n if (s.textContent.match(STYLE_LOADABLE_MATCH)) {\n lo adables.push(s);\n }\n }\n }\n return loadables;\n },\n /**\n * Install external stylesheets loaded in <polymer-element> ele ments into the \n * element's template.\n * @param elementElement The <e lement> element to style.\n */\n installSheets: function() {\n this. cacheSheets();\n this.cacheStyles();\n this.installLocalSheets();\n this.installGlobalStyles();\n },\n /**\n * Remove all sheets from e lement and store for later use.\n */\n cacheSheets: function() {\n t his.sheets = this.findNodes(SHEET_SELECTOR);\n this.sheets.forEach(function (s) {\n if (s.parentNode) {\n s.parentNode.removeChild(s);\n }\n });\n },\n cacheStyles: function() {\n this.styles = thi s.findNodes(STYLE_SELECTOR + '[' + SCOPE_ATTR + ']');\n this.styles.forEach (function(s) {\n if (s.parentNode) {\n s.parentNode.removeChild( s);\n }\n });\n },\n /**\n * Takes external stylesheets lo aded in an <element> element and moves\n * their content into a <style> elem ent inside the <element>'s template.\n * The sheet is then removed from the <element>. This is done only so \n * that if the element is loaded in the ma in document, the sheet does\n * not become active.\n * Note, ignores she ets with the attribute 'polymer-scope'.\n * @param elementElement The <eleme nt> element to style.\n */\n installLocalSheets: function () {\n var sheets = this.sheets.filter(function(s) {\n return !s.hasAttribute(SCOPE _ATTR);\n });\n var content = this.templateContent();\n if (conte nt) {\n var cssText = '';\n sheets.forEach(function(sheet) {\n cssText += cssTextFromSheet(sheet) + '\\n';\n });\n if (cssT ext) {\n var style = createStyleElement(cssText, this.ownerDocument);\n content.insertBefore(style, content.firstChild);\n }\n }\n },\n findNodes: function(selector, matcher) {\n var nodes = this.que rySelectorAll(selector).array();\n var content = this.templateContent();\n if (content) {\n var templateNodes = content.querySelectorAll(select or).array();\n nodes = nodes.concat(templateNodes);\n }\n retur n matcher ? nodes.filter(matcher) : nodes;\n },\n /**\n * Promotes ext ernal stylesheets and <style> elements with the attribute \n * polymer-scope ='global' into global scope.\n * This is particularly useful for defining @k eyframe rules which \n * currently do not function in scoped or shadow style elements.\n * (See wkb.ug/72462)\n * @param elementElement The <element > element to style.\n */\n // TODO(sorvell): remove when wkb.ug/72462 is a ddressed.\n installGlobalStyles: function() {\n var style = this.styleFo rScope(STYLE_GLOBAL_SCOPE);\n applyStyleToScope(style, document.head);\n },\n cssTextForScope: function(scopeDescriptor) {\n var cssText = '';\n // handle stylesheets\n var selector = '[' + SCOPE_ATTR + '=' + scope Descriptor + ']';\n var matcher = function(s) {\n return matchesSele ctor(s, selector);\n };\n var sheets = this.sheets.filter(matcher);\n sheets.forEach(function(sheet) {\n cssText += cssTextFromSheet(sheet ) + '\\n\\n';\n });\n // handle cached style elements\n var style s = this.styles.filter(matcher);\n styles.forEach(function(style) {\n cssText += style.textContent + '\\n\\n';\n });\n return cssText;\n },\n styleForScope: function(scopeDescriptor) {\n var cssText = this.c ssTextForScope(scopeDescriptor);\n return this.cssTextToScopeStyle(cssText, scopeDescriptor);\n },\n cssTextToScopeStyle: function(cssText, scopeDesc riptor) {\n if (cssText) {\n var style = createStyleElement(cssText) ;\n style.setAttribute(STYLE_SCOPE_ATTRIBUTE, this.getAttribute('name') + \n '-' + scopeDescriptor);\n return style;\n }\n }\n };\n\n function importRuleForSheet(sheet, baseUrl) {\n var href = new URL(sh eet.getAttribute('href'), baseUrl).href;\n return '@import \\'' + href + '\\' ;';\n }\n\n function applyStyleToScope(style, scope) {\n if (style) {\n if (scope === document) {\n scope = document.head;\n }\n if ( hasShadowDOMPolyfill) {\n scope = document.head;\n }\n // TODO( sorvell): necessary for IE\n // see https://connect.microsoft.com/IE/feedba ck/details/790212/\n // cloning-a-style-element-and-adding-to-document-prod uces\n // -unexpected-result#details\n // var clone = style.cloneNode( true);\n var clone = createStyleElement(style.textContent);\n var attr = style.getAttribute(STYLE_SCOPE_ATTRIBUTE);\n if (attr) {\n clone. setAttribute(STYLE_SCOPE_ATTRIBUTE, attr);\n }\n // TODO(sorvell): pro bably too brittle; try to figure out \n // where to put the element.\n var refNode = scope.firstElementChild;\n if (scope === document.head) {\n var selector = 'style[' + STYLE_SCOPE_ATTRIBUTE + ']';\n var s$ = document.head.querySelectorAll(selector);\n if (s$.length) {\n r efNode = s$[s$.length-1].nextElementSibling;\n }\n }\n scope.in sertBefore(clone, refNode);\n }\n }\n\n function createStyleElement(cssText , scope) {\n scope = scope || document;\n scope = scope.createElement ? sc ope : scope.ownerDocument;\n var style = scope.createElement('style');\n s tyle.textContent = cssText;\n return style;\n }\n\n function cssTextFromShe et(sheet) {\n return (sheet && sheet.__resource) || '';\n }\n\n function ma tchesSelector(node, inSelector) {\n if (matches) {\n return matches.call (node, inSelector);\n }\n }\n var p = HTMLElement.prototype;\n var matches = p.matches || p.matchesSelector || p.webkitMatchesSelector \n || p.mozMat chesSelector;\n \n // exports\n\n scope.api.declaration.styles = styles;\n s cope.applyStyleToScope = applyStyleToScope;\n \n})(Polymer);\n","/*\n * Copyrig ht (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICEN SE.txt\n * The complete set of authors may be found at http://polymer.github.io/ AUTHORS.txt\n * The complete set of contributors may be found at http://polymer. github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://po lymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n // imports\n\n var log = window.logFlags || {};\n var api = scope.api.instance.events;\n var EVEN T_PREFIX = api.EVENT_PREFIX;\n // polymer-element declarative api: events featu re\n\n var mixedCaseEventTypes = {};\n [\n 'webkitAnimationStart',\n 'we bkitAnimationEnd',\n 'webkitTransitionEnd',\n 'DOMFocusOut',\n 'DOMFocu sIn',\n 'DOMMouseScroll'\n ].forEach(function(e) {\n mixedCaseEventTypes[ e.toLowerCase()] = e;\n });\n\n var events = {\n parseHostEvents: function( ) {\n // our delegates map\n var delegates = this.prototype.eventDeleg ates;\n // extract data from attributes into delegates\n this.addAttri buteDelegates(delegates);\n },\n addAttributeDelegates: function(delegates ) {\n // for each attribute\n for (var i=0, a; a=this.attributes[i]; i ++) {\n // does it have magic marker identifying it as an event delegate? \n if (this.hasEventPrefix(a.name)) {\n // if so, add the info t o delegates\n delegates[this.removeEventPrefix(a.name)] = a.value.repla ce('{{', '')\n .replace('}}', '').trim();\n }\n }\n },\n // starts with 'on-'\n hasEventPrefix: function (n) {\n return n && (n[0] === 'o') && (n[1] === 'n') && (n[2] === '-');\n },\n removeEvent Prefix: function(n) {\n return n.slice(prefixLength);\n },\n findCont roller: function(node) {\n while (node.parentNode) {\n if (node.even tController) {\n return node.eventController;\n }\n node = node.parentNode;\n }\n return node.host;\n },\n getEventHandle r: function(controller, target, method) {\n var events = this;\n retur n function(e) {\n if (!controller || !controller.PolymerBase) {\n controller = events.findController(target);\n }\n\n var args = [ e, e.detail, e.currentTarget];\n controller.dispatchMethod(controller, me thod, args);\n };\n },\n prepareEventBinding: function(pathString, na me, node) {\n if (!this.hasEventPrefix(name))\n return;\n\n var eventType = this.removeEventPrefix(name);\n eventType = mixedCaseEventType s[eventType] || eventType;\n\n var events = this;\n\n return function( model, node, oneTime) {\n var handler = events.getEventHandler(undefined, node, pathString);\n PolymerGestures.addEventListener(node, eventType, h andler);\n\n if (oneTime)\n return;\n\n // TODO(rafaelw): This is really pointless work. Aside from the cost\n // of these allocat ions, NodeBind is going to setAttribute back to its\n // current value. F ixing this would mean changing the TemplateBinding\n // binding delegate API.\n function bindingValue() {\n return '{{ ' + pathString + ' }}';\n }\n\n return {\n open: bindingValue,\n d iscardChanges: bindingValue,\n close: function() {\n Polymer Gestures.removeEventListener(node, eventType, handler);\n }\n }; \n };\n }\n };\n\n var prefixLength = EVENT_PREFIX.length;\n\n // exp orts\n scope.api.declaration.events = events;\n\n})(Polymer);\n","/*\n * Copyri ght (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICE NSE.txt\n * The complete set of authors may be found at http://polymer.github.io /AUTHORS.txt\n * The complete set of contributors may be found at http://polymer .github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polyme r project is also\n * subject to an additional IP rights grant found at http://p olymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n // element api\n\n var properties = {\n inferObservers: function(prototype) {\n // called before prototype.observe is chained to inherited object\n var observe = pro totype.observe, property;\n for (var n in prototype) {\n if (n.slice (-7) === 'Changed') {\n if (!observe) {\n observe = (protot ype.observe = {});\n }\n property = n.slice(0, -7)\n observe[property] = observe[property] || n;\n }\n }\n },\n exp lodeObservers: function(prototype) {\n // called before prototype.observe i s chained to inherited object\n var o = prototype.observe;\n if (o) {\ n var exploded = {};\n for (var n in o) {\n var names = n .split(' ');\n for (var i=0, ni; ni=names[i]; i++) {\n explo ded[ni] = o[n];\n }\n }\n prototype.observe = exploded;\n }\n },\n optimizePropertyMaps: function(prototype) {\n if (prot otype.observe) {\n // construct name list\n var a = prototype._obs erveNames = [];\n for (var n in prototype.observe) {\n var names = n.split(' ');\n for (var i=0, ni; ni=names[i]; i++) {\n a .push(ni);\n }\n }\n }\n if (prototype.publish) {\n // construct name list\n var a = prototype._publishNames = [];\n for (var n in prototype.publish) {\n a.push(n);\n }\n } \n if (prototype.computed) {\n // construct name list\n var a = prototype._computedNames = [];\n for (var n in prototype.computed) {\n a.push(n);\n }\n }\n },\n publishProperties: functio n(prototype, base) {\n // if we have any properties to publish\n var p ublish = prototype.publish;\n if (publish) {\n // transcribe `publis h` entries onto own prototype\n this.requireProperties(publish, prototype , base);\n // construct map of lower-cased property names\n protot ype._publishLC = this.lowerCaseMap(publish);\n }\n },\n //\n // `n ame: value` entries in the `publish` object may need to generate \n // matchi ng properties on the prototype.\n //\n // Values that are objects may have a `reflect` property, which\n // signals that the value describes property c ontrol metadata.\n // In metadata objects, the prototype default value (if an y)\n // is encoded in the `value` property.\n //\n // publish: {\n / / foo: 5, \n // bar: {value: true, reflect: true},\n // zot: {}\n // }\n //\n // `reflect` metadata property controls whether changes to th e property\n // are reflected back to the attribute (default false). \n // \n // A value is stored on the prototype unless it's === `undefined`,\n // in which case the base chain is checked for a value.\n // If the basal value is also undefined, `null` is stored on the prototype.\n //\n // The refle ction data is stored on another prototype object, `reflect`\n // which also c an be specified directly.\n //\n // reflect: {\n // foo: true\n // }\n //\n requireProperties: function(propertyInfos, prototype, base) {\n // per-prototype storage for reflected properties\n prototype.reflect = prototype.reflect || {};\n // ensure a prototype value for each property\ n // and update the property's reflect to attribute status\n for (var n in propertyInfos) {\n var value = propertyInfos[n];\n // value h as metadata if it has a `reflect` property\n if (value && value.reflect ! == undefined) {\n prototype.reflect[n] = Boolean(value.reflect);\n value = value.value;\n }\n // only set a value if one is spec ified\n if (value !== undefined) {\n prototype[n] = value;\n }\n }\n },\n lowerCaseMap: function(properties) {\n var map = {};\n for (var n in properties) {\n map[n.toLowerCase()] = n;\n }\n return map;\n },\n createPropertyAccessor: function(name) {\n var proto = this.prototype;\n\n var privateName = name + '_';\n v ar privateObservable = name + 'Observable_';\n proto[privateName] = proto[ name];\n\n Object.defineProperty(proto, name, {\n get: function() {\ n var observable = this[privateObservable];\n if (observable)\ n observable.deliver();\n\n return this[privateName];\n },\n set: function(value) {\n var observable = this[privateOb servable];\n if (observable) {\n observable.setValue(value); \n return;\n }\n\n var oldValue = this[privateName] ;\n this[privateName] = value;\n this.emitPropertyChangeRecord (name, value, oldValue);\n\n return value;\n },\n configu rable: true\n });\n },\n createPropertyAccessors: function(prototype) {\n var n$ = prototype._publishNames;\n if (n$ && n$.length) {\n for (var i=0, l=n$.length, n, fn; (i<l) && (n=n$[i]); i++) {\n this. createPropertyAccessor(n);\n }\n }\n var n$ = prototype._comput edNames;\n if (n$ && n$.length) {\n for (var i=0, l=n$.length, n, fn ; (i<l) && (n=n$[i]); i++) {\n this.createPropertyAccessor(n);\n }\n }\n }\n };\n\n // exports\n\n scope.api.declaration.properties = properties;\n\n})(Polymer);\n","/*\n * Copyright (c) 2014 The Polymer Project A uthors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complete set of au thors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Co de distributed by Google as part of the polymer project is also\n * subject to a n additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\ n(function(scope) {\n\n // magic words\n\n var ATTRIBUTES_ATTRIBUTE = 'attribu tes';\n var ATTRIBUTES_REGEX = /\\s|,/;\n\n // attributes api\n\n var attribu tes = {\n \n inheritAttributesObjects: function(prototype) {\n // cha in our lower-cased publish map to the inherited version\n this.inheritObjec t(prototype, 'publishLC');\n // chain our instance attributes map to the in herited version\n this.inheritObject(prototype, '_instanceAttributes');\n },\n\n publishAttributes: function(prototype, base) {\n // merge names from 'attributes' attribute into the 'publish' object\n var attributes = t his.getAttribute(ATTRIBUTES_ATTRIBUTE);\n if (attributes) {\n // cre ate a `publish` object if needed.\n // the `publish` object is only relev ant to this prototype, the \n // publishing logic in `declaration/propert ies.js` is responsible for\n // managing property values on the prototype chain.\n // TODO(sjmiles): the `publish` object is later chained to it's \n // ancestor object, presumably this is only for \n // reflection or other non-library uses. \n var publis h = prototype.publish || (prototype.publish = {}); \n // names='a b c' or names='a,b,c'\n var names = attributes.split(ATTRIBUTES_REGEX);\n // record each name for publishing\n for (var i=0, l=names.length, n; i< l; i++) {\n // remove excess ws\n n = names[i].trim();\n // looks weird, but causes n to exist on `publish` if it does not;\n // a more careful test would need expensive `in` operator\n if (n && publish[n] === undefined) {\n publish[n] = undefined;\n }\n }\n }\n },\n\n // record clonable attributes from <element>\n accumulateInstanceAttributes: function() {\n // inherit instance attribu tes\n var clonable = this.prototype._instanceAttributes;\n // merge at tributes from element\n var a$ = this.attributes;\n for (var i=0, l=a$ .length, a; (i<l) && (a=a$[i]); i++) { \n if (this.isInstanceAttribute(a .name)) {\n clonable[a.name] = a.value;\n }\n }\n },\n\n isInstanceAttribute: function(name) {\n return !this.blackList[name] && name.slice(0,3) !== 'on-';\n },\n\n // do not clone these attributes onto instances\n blackList: {\n name: 1,\n 'extends': 1,\n constru ctor: 1,\n noscript: 1,\n assetpath: 1,\n 'cache-csstext': 1\n }\n \n };\n\n // add ATTRIBUTES_ATTRIBUTE to the blacklist\n attributes.b lackList[ATTRIBUTES_ATTRIBUTE] = 1;\n\n // exports\n\n scope.api.declaration.a ttributes = attributes;\n\n})(Polymer);\n","/*\n * Copyright (c) 2014 The Polyme r Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complet e set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The co mplete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS .txt\n * Code distributed by Google as part of the polymer project is also\n * s ubject to an additional IP rights grant found at http://polymer.github.io/PATENT S.txt\n */\n\n(function(scope) {\n\n // imports\n var events = scope.api.decla ration.events;\n\n var syntax = new PolymerExpressions();\n var prepareBinding = syntax.prepareBinding;\n\n // Polymer takes a first crack at the binding to see if it's a declarative\n // event handler.\n syntax.prepareBinding = functi on(pathString, name, node) {\n return events.prepareEventBinding(pathString, name, node) ||\n prepareBinding.call(syntax, pathString, name, node);\ n };\n\n // declaration api supporting mdv\n var mdv = {\n syntax: syntax, \n fetchTemplate: function() {\n return this.querySelector('template');\ n },\n templateContent: function() {\n var template = this.fetchTempl ate();\n return template && Platform.templateContent(template);\n },\n installBindingDelegate: function(template) {\n if (template) {\n t emplate.bindingDelegate = this.syntax;\n }\n }\n };\n\n // exports\n scope.api.declaration.mdv = mdv;\n\n})(Polymer);\n","/*\n * Copyright (c) 2014 T he Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * Th e complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CON TRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is a lso\n * subject to an additional IP rights grant found at http://polymer.github. io/PATENTS.txt\n */\n\n(function(scope) {\n\n // imports\n \n var api = scope .api;\n var isBase = scope.isBase;\n var extend = scope.extend;\n\n var hasSh adowDOMPolyfill = window.ShadowDOMPolyfill;\n\n // prototype api\n\n var proto type = {\n\n register: function(name, extendeeName) {\n // build prototy pe combining extendee, Polymer base, and named api\n this.buildPrototype(na me, extendeeName);\n // register our custom element with the platform\n this.registerPrototype(name, extendeeName);\n // reference constructor in a global named by 'constructor' attribute\n this.publishConstructor();\n },\n\n buildPrototype: function(name, extendeeName) {\n // get our cus tom prototype (before chaining)\n var extension = scope.getRegisteredProtot ype(name);\n // get basal prototype\n var base = this.generateBaseProt otype(extendeeName);\n // implement declarative features\n this.desuga rBeforeChaining(extension, base);\n // join prototypes\n this.prototyp e = this.chainPrototypes(extension, base);\n // more declarative features\n this.desugarAfterChaining(name, extendeeName);\n },\n\n desugarBefor eChaining: function(prototype, base) {\n // back reference declaration elem ent\n // TODO(sjmiles): replace `element` with `elementElement` or `declara tion`\n prototype.element = this;\n // transcribe `attributes` declara tions onto own prototype's `publish`\n this.publishAttributes(prototype, ba se);\n // `publish` properties to the prototype and to attribute watch\n this.publishProperties(prototype, base);\n // infer observers for `obser ve` list based on method names\n this.inferObservers(prototype);\n // desugar compound observer syntax, e.g. 'a b c' \n this.explodeObservers(pro totype);\n },\n\n chainPrototypes: function(prototype, base) {\n // c hain various meta-data objects to inherited versions\n this.inheritMetaData (prototype, base);\n // chain custom api to inherited\n var chained = this.chainObject(prototype, base);\n // x-platform fixup\n ensureProto typeTraversal(chained);\n return chained;\n },\n\n inheritMetaData: f unction(prototype, base) {\n // chain observe object to inherited\n th is.inheritObject('observe', prototype, base);\n // chain publish object to inherited\n this.inheritObject('publish', prototype, base);\n // chain reflect object to inherited\n this.inheritObject('reflect', prototype, bas e);\n // chain our lower-cased publish map to the inherited version\n this.inheritObject('_publishLC', prototype, base);\n // chain our instance attributes map to the inherited version\n this.inheritObject('_instanceAttr ibutes', prototype, base);\n // chain our event delegates map to the inheri ted version\n this.inheritObject('eventDelegates', prototype, base);\n } ,\n\n // implement various declarative features\n desugarAfterChaining: fu nction(name, extendee) {\n // build side-chained lists to optimize iteratio ns\n this.optimizePropertyMaps(this.prototype);\n this.createPropertyA ccessors(this.prototype);\n // install mdv delegate on template\n this .installBindingDelegate(this.fetchTemplate());\n // install external styles heets as if they are inline\n this.installSheets();\n // adjust any pa ths in dom from imports\n this.resolveElementPaths(this);\n // compile list of attributes to copy to instances\n this.accumulateInstanceAttribute s();\n // parse on-* delegates declared on `this` element\n this.parse HostEvents();\n //\n // install a helper method this.resolvePath to ai d in \n // setting resource urls. e.g.\n // this.$.image.src = this.re solvePath('images/foo.png')\n this.addResolvePathApi();\n // under Sha dowDOMPolyfill, transforms to approximate missing CSS features\n if (hasSha dowDOMPolyfill) {\n Platform.ShadowCSS.shimStyling(this.templateContent() , name, extendee);\n }\n // allow custom element access to the declara tive context\n if (this.prototype.registerCallback) {\n this.prototy pe.registerCallback(this);\n }\n },\n\n // if a named constructor is requested in element, map a reference\n // to the constructor to the given sy mbol\n publishConstructor: function() {\n var symbol = this.getAttribute ('constructor');\n if (symbol) {\n window[symbol] = this.ctor;\n }\n },\n\n // build prototype combining extendee, Polymer base, and name d api\n generateBasePrototype: function(extnds) {\n var prototype = this .findBasePrototype(extnds);\n if (!prototype) {\n // create a protot ype based on tag-name extension\n var prototype = HTMLElement.getPrototyp eForTag(extnds);\n // insert base api in inheritance chain (if needed)\n prototype = this.ensureBaseApi(prototype);\n // memoize this base\ n memoizedBases[extnds] = prototype;\n }\n return prototype;\n },\n\n findBasePrototype: function(name) {\n return memoizedBases[nam e];\n },\n\n // install Polymer instance api into prototype chain, as need ed \n ensureBaseApi: function(prototype) {\n if (prototype.PolymerBase) {\n return prototype;\n }\n var extended = Object.create(protot ype);\n // we need a unique copy of base api for each base prototype\n // therefore we 'extend' here instead of simply chaining\n api.publish(api .instance, extended);\n // TODO(sjmiles): sharing methods across prototype chains is\n // not supported by 'super' implementation which optimizes\n // by memoizing prototype relationships.\n // Probably we should have a version of 'extend' that is \n // share-aware: it could study the text of e ach function,\n // look for usage of 'super', and wrap those functions in\n // closures.\n // As of now, there is only one problematic method, so \n // we just patch it manually.\n // To avoid re-entrancy problems, the special super method\n // installed is called `mixinSuper` and the mixi n method\n // must use this method instead of the default `super`.\n t his.mixinMethod(extended, prototype, api.instance.mdv, 'bind');\n // return buffed-up prototype\n return extended;\n },\n\n mixinMethod: functio n(extended, prototype, api, name) {\n var $super = function(args) {\n return prototype[name].apply(this, args);\n };\n extended[name] = fu nction() {\n this.mixinSuper = $super;\n return api[name].apply(th is, arguments);\n }\n },\n\n // ensure prototype[name] inherits from a prototype.prototype[name]\n inheritObject: function(name, prototype, base) {\n // require an object\n var source = prototype[name] || {};\n // chain inherited properties onto a new object\n prototype[name] = this.ch ainObject(source, base[name]);\n },\n\n // register 'prototype' to custom element 'name', store constructor \n registerPrototype: function(name, extend ee) { \n var info = {\n prototype: this.prototype\n }\n // native element must be specified in extends\n var typeExtension = this.fin dTypeExtension(extendee);\n if (typeExtension) {\n info.extends = ty peExtension;\n }\n // register the prototype with HTMLElement for name lookup\n HTMLElement.register(name, this.prototype);\n // register th e custom type\n this.ctor = document.registerElement(name, info);\n },\n \n findTypeExtension: function(name) {\n if (name && name.indexOf('-') < 0) {\n return name;\n } else {\n var p = this.findBaseProtot ype(name);\n if (p.element) {\n return this.findTypeExtension(p. element.extends);\n }\n }\n }\n\n };\n\n // memoize base protot ypes\n var memoizedBases = {};\n\n // implementation of 'chainObject' depends on support for __proto__\n if (Object.__proto__) {\n prototype.chainObject = function(object, inherited) {\n if (object && inherited && object !== inhe rited) {\n object.__proto__ = inherited;\n }\n return object;\n }\n } else {\n prototype.chainObject = function(object, inherited) {\n if (object && inherited && object !== inherited) {\n var chained = Ob ject.create(inherited);\n object = extend(chained, object);\n }\n return object;\n }\n }\n\n // On platforms that do not support __proto__ (versions of IE), the prototype\n // chain of a custom element is simulated vi a installation of __proto__.\n // Although custom elements manages this, we ins tall it here so it's\n // available during desugaring.\n function ensureProtot ypeTraversal(prototype) {\n if (!Object.__proto__) {\n var ancestor = Ob ject.getPrototypeOf(prototype);\n prototype.__proto__ = ancestor;\n if (isBase(ancestor)) {\n ancestor.__proto__ = Object.getPrototypeOf(ancest or);\n }\n }\n }\n\n // exports\n\n api.declaration.prototype = proto type;\n\n})(Polymer);\n","/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors m ay be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of cont ributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code dist ributed by Google as part of the polymer project is also\n * subject to an addit ional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(fun ction(scope) {\n\n /*\n\n Elements are added to a registration queue so that they register in \n the proper order at the appropriate time. We do this for a few reasons:\n\n * to enable elements to load resources (like stylesheets) \n asynchronously. We need to do this until the platform provides an efficie nt\n alternative. One issue is that remote @import stylesheets are \n re-f etched whenever stamped into a shadowRoot.\n\n * to ensure elements loaded 'a t the same time' (e.g. via some set of\n imports) are registered as a batch. This allows elements to be enured from\n upgrade ordering as long as they que ry the dom tree 1 task after\n upgrade (aka domReady). This is a performance tradeoff. On the one hand,\n elements that could register while imports are l oading are prevented from \n doing so. On the other, grouping upgrades into a single task means less\n incremental work (for example style recalcs), Also , we can ensure the \n document is in a known state at the single quantum of time when \n elements upgrade.\n\n */\n var queue = {\n\n // tell the qu eue to wait for an element to be ready\n wait: function(element) {\n if (!element.__queue) {\n element.__queue = {};\n elements.push(eleme nt);\n }\n },\n\n // enqueue an element to the next spot in the queue .\n enqueue: function(element, check, go) {\n var shouldAdd = element.__ queue && !element.__queue.check;\n if (shouldAdd) {\n queueForElemen t(element).push(element);\n element.__queue.check = check;\n eleme nt.__queue.go = go;\n }\n return (this.indexOf(element) !== 0);\n } ,\n\n indexOf: function(element) {\n var i = queueForElement(element).in dexOf(element);\n if (i >= 0 && document.contains(element)) {\n i += (HTMLImports.useNative || HTMLImports.ready) ? \n importQueue.length : 1e9;\n }\n return i; \n },\n\n // tell the queue an element is ready to be registered\n go: function(element) {\n var readied = this.r emove(element);\n if (readied) {\n element.__queue.flushable = true; \n this.addToFlushQueue(readied);\n this.check();\n }\n }, \n\n remove: function(element) {\n var i = this.indexOf(element);\n if (i !== 0) {\n //console.warn('queue order wrong', i);\n return ;\n }\n return queueForElement(element).shift();\n },\n\n check: function() {\n // next\n var element = this.nextElement();\n if (element) {\n element.__queue.check.call(element);\n }\n if (th is.canReady()) {\n this.ready();\n return true;\n }\n },\n \n nextElement: function() {\n return nextQueued();\n },\n\n canRe ady: function() {\n return !this.waitToReady && this.isEmpty();\n },\n\n isEmpty: function() {\n for (var i=0, l=elements.length, e; (i<l) && \n (e=elements[i]); i++) {\n if (e.__queue && !e.__queue.flushable ) {\n return;\n }\n }\n return true;\n },\n\n ad dToFlushQueue: function(element) {\n flushQueue.push(element); \n },\n\ n flush: function() {\n // prevent re-entrance\n if (this.flushing) {\n return;\n }\n this.flushing = true;\n var element;\n while (flushQueue.length) {\n element = flushQueue.shift();\n element.__queue.go.call(element);\n element.__queue = null;\n }\n this.flushing = false;\n },\n\n ready: function() {\n this.flush( );\n // TODO(sorvell): As an optimization, turn off CE polyfill upgrading\n // while registering. This way we avoid having to upgrade each document\n // piecemeal per registration and can instead register all elements\n // and upgrade once in a batch. Without this optimization, upgrade time\n / / degrades significantly when SD polyfill is used. This is mainly because\n // querying the document tree for elements is slow under the SD polyfill.\n if (CustomElements.ready === false) {\n CustomElements.upgradeDocumentT ree(document);\n CustomElements.ready = true;\n }\n Platform.fl ush();\n requestAnimationFrame(this.flushReadyCallbacks);\n },\n\n ad dReadyCallback: function(callback) {\n if (callback) {\n readyCallba cks.push(callback);\n }\n },\n\n flushReadyCallbacks: function() {\n if (readyCallbacks) {\n var fn;\n while (readyCallbacks.lengt h) {\n fn = readyCallbacks.shift();\n fn();\n }\n }\n },\n\n waitToReady: true\n\n };\n\n var elements = [];\n var flushQ ueue = [];\n var importQueue = [];\n var mainQueue = [];\n var readyCallbacks = [];\n\n function queueForElement(element) {\n return document.contains(el ement) ? mainQueue : importQueue;\n }\n\n function nextQueued() {\n return importQueue.length ? importQueue[0] : mainQueue[0];\n }\n\n var polymerReadied = false; \n\n document.addEventListener('WebComponentsReady', function() {\n CustomElements.ready = false;\n });\n \n function whenPolymerReady(callback ) {\n queue.waitToReady = true;\n CustomElements.ready = false;\n HTMLI mports.whenImportsReady(function() {\n queue.addReadyCallback(callback);\n queue.waitToReady = false;\n queue.check();\n });\n }\n\n // expo rts\n scope.elements = elements;\n scope.queue = queue;\n scope.whenReady = s cope.whenPolymerReady = whenPolymerReady;\n})(Polymer);\n","/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only b e used under the BSD style license found at http://polymer.github.io/LICENSE.txt \n * The complete set of authors may be found at http://polymer.github.io/AUTHOR S.txt\n * The complete set of contributors may be found at http://polymer.github .io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer proje ct is also\n * subject to an additional IP rights grant found at http://polymer. github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n var whenPolymerReady = sco pe.whenPolymerReady;\n\n function importElements(elementOrFragment, callback) { \n if (elementOrFragment) {\n document.head.appendChild(elementOrFragmen t);\n whenPolymerReady(callback);\n } else if (callback) {\n callba ck();\n }\n }\n\n function importUrls(urls, callback) {\n if (urls && ur ls.length) {\n var frag = document.createDocumentFragment();\n for (var i=0, l=urls.length, url, link; (i<l) && (url=urls[i]); i++) {\n l ink = document.createElement('link');\n link.rel = 'import';\n link.href = url;\n frag.appendChild(link);\n }\n importE lements(frag, callback);\n } else if (callback) {\n callback();\n }\n }\n\n // exports\n scope.import = importUrls;\n scope.importElements = impo rtElements;\n\n})(Polymer);\n","/*\n * Copyright (c) 2014 The Polymer Project Au thors. All rights reserved.\n * This code may only be used under the BSD style l icense found at http://polymer.github.io/LICENSE.txt\n * The complete set of aut hors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set o f contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Cod e distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n \n(function(scope) {\n\n // imports\n\n var extend = scope.extend;\n var api = scope.api;\n var queue = scope.queue;\n var whenPolymerReady = scope.whenPol ymerReady;\n var getRegisteredPrototype = scope.getRegisteredPrototype;\n var waitingForPrototype = scope.waitingForPrototype;\n\n // declarative implementat ion: <polymer-element>\n\n var prototype = extend(Object.create(HTMLElement.pro totype), {\n\n createdCallback: function() {\n if (this.getAttribute('na me')) {\n this.init();\n }\n },\n\n init: function() {\n // fetch declared values\n this.name = this.getAttribute('name');\n th is.extends = this.getAttribute('extends');\n queue.wait(this);\n // in itiate any async resource fetches\n this.loadResources();\n // registe r when all constraints are met\n this.registerWhenReady();\n },\n\n / / TODO(sorvell): we currently queue in the order the prototypes are \n // reg istered, but we should queue in the order that polymer-elements\n // are regi stered. We are currently blocked from doing this based on \n // crbug.com/395 686.\n registerWhenReady: function() {\n if (this.registered\n || t his.waitingForPrototype(this.name)\n || this.waitingForQueue()\n || this.waitingForResources()) {\n return;\n }\n queue.go(this); \n },\n\n _register: function() {\n //console.log('registering', this .name);\n // warn if extending from a custom element not registered via Pol ymer\n if (isCustomTag(this.extends) && !isRegistered(this.extends)) {\n console.warn('%s is attempting to extend %s, an unregistered element ' +\n 'or one that was not registered with Polymer.', this.name,\n this.extends);\n }\n this.register(this.name, this.extends);\n this.registered = true;\n },\n\n waitingForPrototype: function(name) {\n if (!getRegisteredPrototype(name)) {\n // then wait for a prototype\ n waitingForPrototype(name, this);\n // emulate script if user is not supplying one\n this.handleNoScript(name);\n // prototype not ready yet\n return true;\n }\n },\n\n handleNoScript: function (name) {\n // if explicitly marked as 'noscript'\n if (this.hasAttribu te('noscript') && !this.noscript) {\n this.noscript = true;\n // i mperative element registration\n Polymer(name);\n }\n },\n\n w aitingForResources: function() {\n return this._needsResources;\n },\n\n // NOTE: Elements must be queued in proper order for inheritance/composition \n // dependency resolution. Previously this was enforced for inheritance,\n // and by rule for composition. It's now entirely by rule.\n waitingForQue ue: function() {\n return queue.enqueue(this, this.registerWhenReady, this. _register);\n },\n\n loadResources: function() {\n this._needsResourc es = true;\n this.loadStyles(function() {\n this._needsResources = f alse;\n this.registerWhenReady();\n }.bind(this));\n }\n\n });\n \n // semi-pluggable APIs \n\n // TODO(sjmiles): should be fully pluggable (ak a decoupled, currently\n // the various plugins are allowed to depend on each o ther directly)\n api.publish(api.declaration, prototype);\n\n // utility and b ookkeeping\n\n function isRegistered(name) {\n return Boolean(HTMLElement.ge tPrototypeForTag(name));\n }\n\n function isCustomTag(name) {\n return (nam e && name.indexOf('-') >= 0);\n }\n\n // boot tasks\n\n whenPolymerReady(func tion() {\n document.body.removeAttribute('unresolved');\n document.dispatc hEvent(\n new CustomEvent('polymer-ready', {bubbles: true})\n );\n });\ n\n // register polymer-element with document\n\n document.registerElement('po lymer-element', {prototype: prototype});\n\n})(Polymer);\n","/*\n * Copyright (c ) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.tx t\n * The complete set of authors may be found at http://polymer.github.io/AUTHO RS.txt\n * The complete set of contributors may be found at http://polymer.githu b.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer proj ect is also\n * subject to an additional IP rights grant found at http://polymer .github.io/PATENTS.txt\n */\n\n/**\n * The `auto-binding` element extends the te mplate element. It provides a quick \n * and easy way to do data binding without the need to setup a model. \n * The `auto-binding` element itself serves as the model and controller for the \n * elements it contains. Both data and event han dlers can be bound. \n *\n * The `auto-binding` element acts just like a templat e that is bound to \n * a model. It stamps its content in the dom adjacent to it self. When the \n * content is stamped, the `template-bound` event is fired.\n * \n * Example:\n *\n * <template is=\"auto-binding\">\n * <div>Say some thing: <input value=\"{{value}}\"></div>\n * <div>You said: {{value}}</div >\n * <button on-tap=\"{{buttonTap}}\">Tap me!</button>\n * </template >\n * <script>\n * var template = document.querySelector('template');\ n * template.value = 'something';\n * template.buttonTap = function( ) {\n * console.log('tap!');\n * };\n * </script>\n *\n * @mod ule Polymer\n * @status stable\n*/\n\n(function() {\n\n var element = document. createElement('polymer-element');\n element.setAttribute('name', 'auto-binding' );\n element.setAttribute('extends', 'template');\n element.init();\n\n Polym er('auto-binding', {\n\n createdCallback: function() {\n this.syntax = t his.bindingDelegate = this.makeSyntax();\n // delay stamping until polymer- ready so that auto-binding is not\n // required to load last.\n Polyme r.whenPolymerReady(function() {\n this.model = this;\n this.setAtt ribute('bind', '');\n // we don't bother with an explicit signal here, we could ust a MO\n // if necessary\n this.async(function() {\n // note: this will marshall *all* the elements in the parentNode\n // rather than just stamped ones. We'd need to use createInstance\n // to fix this or something else fancier.\n this.marshalNodeReferences(th is.parentNode);\n // template stamping is asynchronous so stamping isn' t complete\n // by polymer-ready; fire an event so users can use stampe d elements\n this.fire('template-bound');\n });\n }.bind(th is));\n },\n\n makeSyntax: function() {\n var events = Object.create( Polymer.api.declaration.events);\n var self = this;\n events.findContr oller = function() { return self.model; };\n\n var syntax = new PolymerExpr essions();\n var prepareBinding = syntax.prepareBinding; \n syntax.pr epareBinding = function(pathString, name, node) {\n return events.prepare EventBinding(pathString, name, node) ||\n prepareBinding.call(synt ax, pathString, name, node);\n };\n return syntax;\n }\n\n });\n\n })();\n"]}
OLDNEW
« no previous file with comments | « pkg/polymer/lib/src/js/polymer/polymer.concat.js.map ('k') | pkg/polymer/pubspec.yaml » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698