OLD | NEW |
1 { | 1 { |
2 "version": 3, | 2 "version": 3, |
3 "file": "polymer.concat.js", | 3 "file": "polymer.concat.js", |
4 "sources": [ | 4 "sources": [ |
5 "../polymer-gestures/src/scope.js", | 5 "../polymer-gestures/src/scope.js", |
6 "../polymer-gestures/src/targetfind.js", | 6 "../polymer-gestures/src/targetfind.js", |
7 "../polymer-gestures/src/touch-action.js", | 7 "../polymer-gestures/src/touch-action.js", |
8 "../polymer-gestures/src/eventFactory.js", | 8 "../polymer-gestures/src/eventFactory.js", |
9 "../polymer-gestures/src/pointermap.js", | 9 "../polymer-gestures/src/pointermap.js", |
10 "../polymer-gestures/src/dispatcher.js", | 10 "../polymer-gestures/src/dispatcher.js", |
11 "../polymer-gestures/src/installer.js", | |
12 "../polymer-gestures/src/mouse.js", | 11 "../polymer-gestures/src/mouse.js", |
13 "../polymer-gestures/src/touch.js", | 12 "../polymer-gestures/src/touch.js", |
14 "../polymer-gestures/src/ms.js", | 13 "../polymer-gestures/src/ms.js", |
15 "../polymer-gestures/src/pointer.js", | 14 "../polymer-gestures/src/pointer.js", |
16 "../polymer-gestures/src/platform-events.js", | 15 "../polymer-gestures/src/platform-events.js", |
17 "../polymer-gestures/src/track.js", | 16 "../polymer-gestures/src/track.js", |
18 "../polymer-gestures/src/hold.js", | 17 "../polymer-gestures/src/hold.js", |
19 "../polymer-gestures/src/tap.js", | 18 "../polymer-gestures/src/tap.js", |
20 "../polymer-expressions/third_party/esprima/esprima.js", | 19 "../polymer-expressions/third_party/esprima/esprima.js", |
21 "../polymer-expressions/src/polymer-expressions.js", | 20 "../polymer-expressions/src/polymer-expressions.js", |
| 21 "build/polymer-versioned.js", |
22 "src/boot.js", | 22 "src/boot.js", |
23 "src/lib/lang.js", | 23 "src/lib/lang.js", |
24 "src/lib/job.js", | 24 "src/lib/job.js", |
25 "src/lib/dom.js", | 25 "src/lib/dom.js", |
26 "src/lib/super.js", | 26 "src/lib/super.js", |
27 "src/lib/deserialize.js", | 27 "src/lib/deserialize.js", |
28 "src/api.js", | 28 "src/api.js", |
29 "src/instance/utils.js", | 29 "src/instance/utils.js", |
30 "src/instance/events.js", | 30 "src/instance/events.js", |
31 "src/instance/attributes.js", | 31 "src/instance/attributes.js", |
32 "src/instance/properties.js", | 32 "src/instance/properties.js", |
33 "src/instance/mdv.js", | 33 "src/instance/mdv.js", |
34 "src/instance/base.js", | 34 "src/instance/base.js", |
35 "src/instance/styles.js", | 35 "src/instance/styles.js", |
36 "src/declaration/polymer.js", | 36 "src/declaration/polymer.js", |
37 "src/declaration/path.js", | 37 "src/declaration/path.js", |
38 "src/declaration/styles.js", | 38 "src/declaration/styles.js", |
39 "src/declaration/events.js", | 39 "src/declaration/events.js", |
40 "src/declaration/properties.js", | 40 "src/declaration/properties.js", |
41 "src/declaration/attributes.js", | 41 "src/declaration/attributes.js", |
42 "src/declaration/mdv.js", | 42 "src/declaration/mdv.js", |
43 "src/declaration/prototype.js", | 43 "src/declaration/prototype.js", |
44 "src/declaration/queue.js", | 44 "src/declaration/queue.js", |
45 "src/declaration/import.js", | 45 "src/declaration/import.js", |
46 "src/declaration/polymer-element.js", | 46 "src/declaration/polymer-element.js", |
47 "src/lib/auto-binding.js" | 47 "src/lib/auto-binding.js" |
48 ], | 48 ], |
49 "names": [], | 49 "names": [], |
50 "mappings": "AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
A;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;A;ACnOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;A;AC5DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;
AC5HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;A;AClEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACvTA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC3HA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACpGA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC9VA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC5EA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AChEA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC7BA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC7MA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC3HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AClGA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACjhCA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC5lBA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACfA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;A;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;A;ACpEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACrCA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;A;ACpIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACtEA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC/BA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;A;ACzHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACpDA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AChGA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC3QA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC5GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;A;ACxPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;A;ACnHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACtGA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC7BA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AClP
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;A;ACnHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
A;AC3KA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;A;ACjGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;A;AC5CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC3PA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC3MA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;A;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACzIA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;A", | 50 "mappings": "AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACTA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;A;ACrOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
A;AC3DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC5HA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;A;AClEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACraA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC/GA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;A;ACvTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC5EA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;A;AChEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACvCA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;A
CrOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;A;AChIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACrGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACjhCA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC7mBA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;A;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;A;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACpCA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;A;ACpEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACpIA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACzEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;A;AC3HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACvDA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AChGA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC3QA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC5GA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AChPA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
;ACpHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACtGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;A;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACpPA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;A;ACnHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACtLA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;A;ACzFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
A;AC5CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC7PA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACxMA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;A;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACzIA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;A", |
51 "sourcesContent": [ | 51 "sourcesContent": [ |
52 "/**\n * @license\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 */\nwindow.Polyme
rGestures = {\n hasSDPolyfill: Boolean(window.ShadowDOMPolyfill)\n};\nPolymerGe
stures.wrap = PolymerGestures.hasSDPolyfill ? ShadowDOMPolyfill.wrapIfNeeded : f
unction(a){ return a; };\n", | 52 "/**\n * @license\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 */\nwindow.Polyme
rGestures = {};\n", |
53 "/*\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://poly
mer.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
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 var
HAS_FULL_PATH = false;\n\n // test for full event path support\n var pathTest
= document.createElement('meta');\n if (!scope.hasSDPolyfill && pathTest.creat
eShadowRoot) {\n var sr = pathTest.createShadowRoot();\n var s = document.
createElement('span');\n sr.appendChild(s);\n pathTest.addEventListener('t
estpath', 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_PA
TH = ev.path[0] === s;\n }\n ev.stopPropagation();\n });\n var e
v = new CustomEvent('testpath', {bubbles: true});\n // must add node to DOM t
o trigger event listener\n document.head.appendChild(pathTest);\n s.dispat
chEvent(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 return inEl.shadowRoot || inEl.webkitShadowRoot;\n
}\n },\n canTarget: function(shadow) {\n return shadow && Boolean(sha
dow.elementFromPoint);\n },\n targetingShadow: 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.olderSha
dowRoot;\n if (!os) {\n var se = shadow.querySelector('shadow');\n
if (se) {\n os = se.olderShadowRoot;\n }\n }\n r
eturn os;\n },\n allShadows: 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.elementFromPoint(x, y);\n if (t) {\n // found eleme
nt, 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(element) {\n if (!element) {\n
return document;\n }\n var s = element;\n // walk up until you hi
t the shadow root or document\n while (s.parentNode) {\n s = s.paren
tNode;\n }\n // the owner element is expected to be a Document or Shad
owRoot\n if (s.nodeType != Node.DOCUMENT_NODE && s.nodeType != Node.DOCUMEN
T_FRAGMENT_NODE) {\n s = document;\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 = inEve
nt.clientY;\n // if the listener is in the shadow root, it is much faster t
o start there\n var s = this.owner(inEvent.target);\n // if x, y is no
t 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 findScrollAxis: 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._scrollType)
{\n return n._scrollType;\n }\n }\n } else {\n
n = scope.wrap(inEvent.currentTarget);\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 dire
ct descendant of b or vice versa\n if (a.contains && 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.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 w
hile(n) {\n d++;\n n = n.parentNode || n.host;\n }\n ret
urn d;\n },\n deepContains: function(a, b) {\n var common = this.LCA(
a, b);\n // if a is the common ancestor, it must \"deeply\" contain b\n
return common === a;\n },\n insideNode: function(node, x, y) {\n va
r rect = node.getBoundingClientRect();\n return (rect.left <= x) && (x <= r
ect.right) && (rect.top <= y) && (y <= rect.bottom);\n }\n };\n scope.targe
tFinding = target;\n /**\n * Given an event, finds the \"deepest\" node that
could have been the original target before ShadowDOM retargetting\n *\n * @p
aram {Event} Event An event object with clientX and clientY properties\n * @re
turn {Element} The probable event origninator\n */\n scope.findTarget = targe
t.findTarget.bind(target);\n /**\n * Determines if the \"container\" node dee
ply contains the \"containee\" node, including situations where the \"containee\
" is contained by one or more ShadowDOM\n * roots.\n *\n * @param {Node} c
ontainer\n * @param {Node} containee\n * @return {Boolean}\n */\n scope.d
eepContains = target.deepContains.bind(target);\n\n /**\n * Determines if the
x/y position is inside the given node.\n *\n * Example:\n *\n * fun
ction upHandler(event) {\n * var innode = PolymerGestures.insideNode(eve
nt.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 {Boole
an}\n */\n scope.insideNode = target.insideNode;\n\n})(window.PolymerGestures
);\n", | 53 "/*\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://poly
mer.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
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 var
HAS_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('tes
tpath', {bubbles: true});\n // must add node to DOM to trigger event listener
\n document.head.appendChild(pathTest);\n s.dispatchEvent(ev);\n pathTe
st.parentNode.removeChild(pathTest);\n sr = s = null;\n }\n pathTest = null
;\n\n var target = {\n shadow: function(inEl) {\n if (inEl) {\n
return 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 olderSh
adow: 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 a
llShadows: 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.elementFrom
Point(x, y);\n if (t) {\n // found element, check if it has a Sh
adowRoot\n sr = this.targetingShadow(t);\n } else if (inRoot !==
document) {\n // check for sibling roots\n sr = this.olderSha
dow(inRoot);\n }\n // search other roots, fall back to light dom e
lement\n return this.searchRoot(sr, x, y) || t;\n }\n },\n own
er: function(element) {\n if (!element) {\n return document;\n
}\n var s = element;\n // walk up until you hit the shadow root or doc
ument\n while (s.parentNode) {\n s = s.parentNode;\n }\n /
/ the owner element is expected to be a Document or ShadowRoot\n if (s.node
Type != Node.DOCUMENT_NODE && s.nodeType != Node.DOCUMENT_FRAGMENT_NODE) {\n
s = document;\n }\n return s;\n },\n findTarget: function(in
Event) {\n if (HAS_FULL_PATH && inEvent.path) {\n return inEvent.pat
h[0];\n }\n var x = inEvent.clientX, y = inEvent.clientY;\n // if
the 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 bac
k to document search\n if (!s.elementFromPoint(x, y)) {\n s = docume
nt;\n }\n return this.searchRoot(s, x, y);\n },\n findTouchActio
n: 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
.hasAttribute('touch-action')) {\n return n.getAttribute('touch-actio
n');\n }\n }\n } else {\n n = inEvent.target;\n
while(n) {\n if (n.hasAttribute('touch-action')) {\n retu
rn n.getAttribute('touch-action');\n }\n n = n.parentNode || n
.host;\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.co
ntains && 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.
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.parentNod
e || 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
must \"deeply\" contain b\n return common === a;\n },\n insideNode:
function(node, x, y) {\n var rect = node.getBoundingClientRect();\n re
turn (rect.left <= x) && (x <= rect.right) && (rect.top <= y) && (y <= rect.bott
om);\n }\n };\n scope.targetFinding = target;\n /**\n * Given an event,
finds the \"deepest\" node that could have been the original target before Shado
wDOM retargetting\n *\n * @param {Event} Event An event object with clientX
and clientY properties\n * @return {Element} The probable event origninator\n
*/\n scope.findTarget = target.findTarget.bind(target);\n /**\n * Determin
es if the \"container\" node deeply contains the \"containee\" node, including s
ituations where the \"containee\" is contained by one or more ShadowDOM\n * ro
ots.\n *\n * @param {Node} container\n * @param {Node} containee\n * @re
turn {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 {Nod
e} node\n * @param {Number} x Screen X position\n * @param {Number} y screen
Y position\n * @return {Boolean}\n */\n scope.insideNode = target.insideNo
de;\n\n})(window.PolymerGestures);\n", |
54 "/*\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() {\n func
tion shadowSelector(v) {\n return 'body /deep/ ' + selector(v);\n }\n funct
ion selector(v) {\n return '[touch-action=\"' + v + '\"]';\n }\n function r
ule(v) {\n return '{ -ms-touch-action: ' + v + '; touch-action: ' + v + ';}';
\n }\n var attrib2css = [\n 'none',\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 hasTouchAction = typeof document.head.style.tou
chAction === 'string';\n // only add shadow selectors if shadowdom is supported
\n var hasShadowRoot = !window.ShadowDOMPolyfill && document.head.createShadowR
oot;\n\n if (hasTouchAction) {\n attrib2css.forEach(function(r) {\n if
(String(r) === r) {\n styles += selector(r) + rule(r) + '\\n';\n i
f (hasShadowRoot) {\n styles += shadowSelector(r) + rule(r) + '\\n';\n
}\n } else {\n styles += r.selectors.map(selector) + rule(r.r
ule) + '\\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 docume
nt.head.appendChild(el);\n }\n})();\n", | 54 "/*\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() {\n func
tion shadowSelector(v) {\n return 'html /deep/ ' + selector(v);\n }\n funct
ion selector(v) {\n return '[touch-action=\"' + v + '\"]';\n }\n function r
ule(v) {\n return '{ -ms-touch-action: ' + v + '; touch-action: ' + v + ';}';
\n }\n var attrib2css = [\n 'none',\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 hasTouchAction = typeof document.head.style.touchAction === 'string';\n //
only add shadow selectors if shadowdom is supported\n var hasShadowRoot = !wind
ow.ShadowDOMPolyfill && 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
styles += r.selectors.map(selector) + rule(r.rule) + '\\n';\n if (ha
sShadowRoot) {\n styles += r.selectors.map(shadowSelector) + rule(r.rul
e) + '\\n';\n }\n }\n });\n\n var el = document.createElement(
'style');\n el.textContent = styles;\n document.head.appendChild(el);\n }
\n})();\n", |
55 "/*\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://poly
mer.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
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 is the const
ructor for new PointerEvents.\n *\n * New Pointer Events must be given a type, a
nd an optional dictionary of\n * initialization properties.\n *\n * Due to certa
in platform requirements, events returned from the constructor\n * identify as M
ouseEvents.\n *\n * @constructor\n * @param {String} inType The type of the even
t to create.\n * @param {Object} [inDict] An optional dictionary of initial even
t properties.\n * @return {Event} A new PointerEvent of type `inType` and initia
lized with properties from `inDict`.\n */\n(function(scope) {\n\n var MOUSE_PRO
PS = [\n 'bubbles',\n 'cancelable',\n 'view',\n 'detail',\n 'scre
enX',\n 'screenY',\n 'clientX',\n 'clientY',\n 'ctrlKey',\n 'altK
ey',\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_FACTO
RY = function(){ return function(){}; };\n\n var eventFactory = {\n // TODO(
dfreedm): this is overridden by tap recognizer, needs review\n preventTap: NO
P_FACTORY,\n makeBaseEvent: function(inType, inDict) {\n var e = documen
t.createEvent('Event');\n e.initEvent(inType, inDict.bubbles || false, inDi
ct.cancelable || false);\n e.preventTap = eventFactory.preventTap(e);\n
return e;\n },\n makeGestureEvent: function(inType, inDict) {\n inD
ict = 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 = inD
ict || Object.create(null);\n\n var e = this.makeBaseEvent(inType, inDict);
\n // define inherited MouseEvent properties\n for(var i = 0, p; i < M
OUSE_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.press
ure) {\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 propert
ies 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 = inDic
t.tiltY || 0;\n e.pointerType = inDict.pointerType || '';\n e.hwTimest
amp = 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", | 55 "/*\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://poly
mer.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
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 is the const
ructor for new PointerEvents.\n *\n * New Pointer Events must be given a type, a
nd an optional dictionary of\n * initialization properties.\n *\n * Due to certa
in platform requirements, events returned from the constructor\n * identify as M
ouseEvents.\n *\n * @constructor\n * @param {String} inType The type of the even
t to create.\n * @param {Object} [inDict] An optional dictionary of initial even
t properties.\n * @return {Event} A new PointerEvent of type `inType` and initia
lized with properties from `inDict`.\n */\n(function(scope) {\n\n var MOUSE_PRO
PS = [\n 'bubbles',\n 'cancelable',\n 'view',\n 'detail',\n 'scre
enX',\n 'screenY',\n 'clientX',\n 'clientY',\n 'ctrlKey',\n 'altK
ey',\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_FACTO
RY = function(){ return function(){}; };\n\n var eventFactory = {\n // TODO(
dfreedm): this is overridden by tap recognizer, needs review\n preventTap: NO
P_FACTORY,\n makeBaseEvent: function(inType, inDict) {\n var e = documen
t.createEvent('Event');\n e.initEvent(inType, inDict.bubbles || false, inDi
ct.cancelable || false);\n e.preventTap = eventFactory.preventTap(e);\n
return e;\n },\n makeGestureEvent: function(inType, inDict) {\n inD
ict = 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 = inD
ict || Object.create(null);\n\n var e = this.makeBaseEvent(inType, inDict);
\n // define inherited MouseEvent properties\n for(var i = 0, p; i < M
OUSE_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.press
ure) {\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 propert
ies 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 = inDic
t.tiltY || 0;\n e.pointerType = inDict.pointerType || '';\n e.hwTimest
amp = 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", |
56 "/*\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://poly
mer.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
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 module imple
ments an map of pointer states\n */\n(function(scope) {\n var USE_MAP = window.
Map && window.Map.prototype.forEach;\n var POINTERS_FN = function(){ return thi
s.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 'delet
e': 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.indexOf(inId);\n
return this.values[i];\n },\n clear: function() {\n this.keys.length
= 0;\n this.values.length = 0;\n },\n // return value, key, map\n
forEach: function(callback, thisArg) {\n this.values.forEach(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", | 56 "/*\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://poly
mer.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
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 module imple
ments an map of pointer states\n */\n(function(scope) {\n var USE_MAP = window.
Map && window.Map.prototype.forEach;\n var POINTERS_FN = function(){ return thi
s.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 'delet
e': 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.indexOf(inId);\n
return this.values[i];\n },\n clear: function() {\n this.keys.length
= 0;\n this.values.length = 0;\n },\n // return value, key, map\n
forEach: function(callback, thisArg) {\n this.values.forEach(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", |
57 "/*\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://poly
mer.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
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 var
CLONE_PROPS = [\n // MouseEvent\n 'bubbles',\n 'cancelable',\n 'vie
w',\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 // e
vent instance\n 'type',\n 'target',\n 'currentTarget',\n 'which',\n
'pageX',\n 'pageY',\n 'timeStamp',\n // gesture addons\n 'prevent
Tap',\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 fals
e\n ];\n\n var HAS_SVG_INSTANCE = (typeof SVGElementInstance !== 'undefined');
\n\n var eventFactory = scope.eventFactory;\n\n var hasSDPolyfill = scope.hasS
DPolyfill;\n var wrap = scope.wrap;\n\n /**\n * This module is for normalizi
ng events. Mouse and Touch events will be\n * collected here, and fire Pointer
Events that have the same semantics, no\n * matter the source.\n * Events fi
red:\n * - pointerdown: a pointing is added\n * - pointerup: a pointer i
s removed\n * - pointermove: a pointer is moved\n * - pointerover: a poi
nter crosses into an element\n * - pointerout: a pointer leaves an element\n
* - pointercancel: a pointer will no longer generate events\n */\n var d
ispatcher = {\n pointermap: new scope.PointerMap(),\n eventMap: Object.cre
ate(null),\n // Scope objects for native events.\n // This exists for ease
of testing.\n eventSources: Object.create(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 a
rray of event names named `events`, and\n * functions with the names specifi
ed in the `events` array.\n * @param {string} name A name for the event sour
ce\n * @param {Object} source A new source of platform events.\n */\n
registerSource: function(name, source) {\n var s = source;\n var newE
vents = s.events;\n if (newEvents) {\n newEvents.forEach(function(e)
{\n if (s[e]) {\n this.eventMap[e] = s[e].bind(s);\n
}\n }, this);\n this.eventSources[name] = s;\n this.even
tSourceList.push(s);\n }\n },\n registerGesture: function(name, sourc
e) {\n this.gestures.push(source);\n },\n register: function(element)
{\n var l = this.eventSourceList.length;\n for (var i = 0, es; (i < l
) && (es = this.eventSourceList[i]); i++) {\n // call eventsource registe
r\n es.register.call(es, element);\n }\n },\n unregister: func
tion(element) {\n var l = this.eventSourceList.length;\n for (var i =
0, es; (i < l) && (es = this.eventSourceList[i]); i++) {\n // call events
ource register\n es.unregister.call(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 q
ueue 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 eventHandle
r: function(inEvent) {\n // This is used to prevent multiple dispatch of ev
ents from\n // platform events. This can happen when two elements in differ
ent scopes\n // are set up to create pointer events, which is relevant to S
hadow DOM.\n if (inEvent._handledByPG) {\n return;\n }\n v
ar 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.addEvent(target, e);\n }\n },\n // remove event listen
ers\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 // NOTE
: Work around for #4, use native event listener in SD Polyfill\n if (hasSDP
olyfill) {\n target.addEventListener_(eventName, this.boundHandler);\n
} else {\n target.addEventListener(eventName, this.boundHandler);\n
}\n },\n removeEvent: function(target, eventName) {\n // NOTE: Wor
k around for #4, use native event listener in SD Polyfill\n if (hasSDPolyfi
ll) {\n target.removeEventListener_(eventName, this.boundHandler);\n
} else {\n target.removeEventListener(eventName, this.boundHandler);\n
}\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 * @param {Event} inEvent A platform event with a target\n * @return {
Event} A PointerEvent of type `inType`\n */\n makeEvent: function(inType,
inEvent) {\n var e = eventFactory.makePointerEvent(inType, inEvent);\n
e.preventDefault = inEvent.preventDefault;\n e.tapPrevented = inEvent.tap
Prevented;\n e._target = e._target || inEvent.target;\n return e;\n
},\n // make and dispatch an event in one call\n fireEvent: function(inTy
pe, inEvent) {\n var e = this.makeEvent(inType, inEvent);\n return thi
s.dispatchEvent(e);\n },\n /**\n * Returns a snapshot of inEvent, with
writable properties.\n *\n * @param {Event} inEvent An event that conta
ins properties to copy.\n * @return {Object} An object containing shallow co
pies of `inEvent`'s\n * properties.\n */\n cloneEvent: function(in
Event) {\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 s
hadow tree\n // Return the <use> element that is represented by the insta
nce for Safari, Chrome, IE.\n // This is the behavior implemented by Fire
fox.\n if (p === 'target' || p === 'relatedTarget') {\n if (HAS_
SVG_INSTANCE && eventCopy[p] instanceof SVGElementInstance) {\n event
Copy[p] = eventCopy[p].correspondingUseElement;\n }\n eventCop
y[p] = wrap(eventCopy[p]);\n }\n }\n // keep the semantics of p
reventDefault\n eventCopy.preventDefault = inEvent.preventDefault;\n r
eturn 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 returns 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 gestu
re system to process\n // clone after dispatch to pick up gesture prevent
ion code\n var clone = this.cloneEvent(inEvent);\n clone.target =
t;\n this.fillGestureQueue(clone);\n }\n },\n gestureTrigger:
function() {\n // process the gesture queue\n for (var i = 0, e; i < t
his.gestureQueue.length; i++) {\n e = this.gestureQueue[i];\n for
(var j = 0, g, fn; j < this.gestures.length; 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 on
ce\n if (!this.gestureQueue.length) {\n requestAnimationFrame(this.b
oundGestureTrigger);\n }\n this.gestureQueue.push(ev);\n }\n };\n
dispatcher.boundHandler = dispatcher.eventHandler.bind(dispatcher);\n dispatch
er.boundGestureTrigger = dispatcher.gestureTrigger.bind(dispatcher);\n scope.di
spatcher = dispatcher;\n scope.register = function(root) {\n dispatcher.regi
ster(root);\n };\n scope.unregister = dispatcher.unregister.bind(dispatcher);\
n scope.wrap = wrap;\n})(window.PolymerGestures);\n", | 57 "/*\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://poly
mer.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
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 var
CLONE_PROPS = [\n // MouseEvent\n 'bubbles',\n 'cancelable',\n 'vie
w',\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 // e
vent instance\n 'type',\n 'target',\n 'currentTarget',\n 'which',\n
'pageX',\n 'pageY',\n 'timeStamp',\n // gesture addons\n 'prevent
Tap',\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 fals
e\n ];\n\n var HAS_SVG_INSTANCE = (typeof SVGElementInstance !== 'undefined');
\n\n var eventFactory = scope.eventFactory;\n\n /**\n * This module is for n
ormalizing events. Mouse and Touch events will be\n * collected here, and fire
PointerEvents that have the same semantics, no\n * matter the source.\n * E
vents fired:\n * - pointerdown: a pointing is added\n * - pointerup: a p
ointer is removed\n * - pointermove: a pointer is moved\n * - pointerove
r: a pointer crosses into an element\n * - pointerout: a pointer leaves an e
lement\n * - pointercancel: a pointer will no longer generate events\n */\
n var dispatcher = {\n pointermap: new scope.PointerMap(),\n eventMap: Ob
ject.create(null),\n // Scope objects for native events.\n // This exists
for ease of testing.\n eventSources: Object.create(null),\n eventSourceLis
t: [],\n gestures: [],\n // map gesture event -> {listeners: int, index: g
estures[int]}\n dependencyMap: {\n // make sure down and up are in the m
ap to trigger \"register\"\n down: {listeners: 0, index: -1},\n up: {l
isteners: 0, index: -1}\n },\n gestureQueue: [],\n /**\n * Add a ne
w event source that will generate pointer events.\n *\n * `inSource` mus
t 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 source of platform events.
\n */\n registerSource: function(name, source) {\n var s = source;\n
var newEvents = s.events;\n if (newEvents) {\n newEvents.forEa
ch(function(e) {\n if (s[e]) {\n this.eventMap[e] = s[e].bin
d(s);\n }\n }, this);\n this.eventSources[name] = s;\n
this.eventSourceList.push(s);\n }\n },\n registerGesture: functi
on(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 t
his.dependencyMap[g] = obj;\n }\n this.gestures.push(source);\n },\
n register: function(element, initial) {\n var l = this.eventSourceList.
length;\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.e
ventSourceList[i]); i++) {\n // call eventsource register\n es.unr
egister.call(es, element);\n }\n },\n // EVENTS\n down: function(i
nEvent) {\n this.fireEvent('down', inEvent);\n },\n move: function(in
Event) {\n // pipe move events into gesture queue directly\n inEvent.t
ype = 'move';\n this.fillGestureQueue(inEvent);\n },\n up: function(i
nEvent) {\n this.fireEvent('up', inEvent);\n },\n cancel: function(in
Event) {\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 e
vents. This can happen when two elements in different scopes\n // are set u
p to create pointer events, which is relevant to Shadow DOM.\n\n // TODO(df
reedm): 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 = inEven
t.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.a
ddEvent(target, e);\n }\n },\n // remove event listeners\n unliste
n: 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, event
Name) {\n target.removeEventListener(eventName, this.boundHandler);\n },
\n // EVENT CREATION AND TRACKING\n /**\n * Creates a new Event of typ
e `inType`, based on the information in\n * `inEvent`.\n *\n * @para
m {string} inType A string representing the type of event to create\n * @par
am {Event} inEvent A platform event with a target\n * @return {Event} A Poin
terEvent of type `inType`\n */\n makeEvent: function(inType, inEvent) {\n
var e = eventFactory.makePointerEvent(inType, inEvent);\n e.preventDe
fault = inEvent.preventDefault;\n e.tapPrevented = inEvent.tapPrevented;\n
e._target = e._target || inEvent.target;\n return e;\n },\n // m
ake and dispatch an event in one call\n fireEvent: function(inType, inEvent)
{\n var e = this.makeEvent(inType, inEvent);\n return this.dispatchEve
nt(e);\n },\n /**\n * Returns a snapshot of inEvent, with writable pro
perties.\n *\n * @param {Event} inEvent An event that contains propertie
s to copy.\n * @return {Object} An object containing shallow copies of `inEv
ent`'s\n * properties.\n */\n cloneEvent: function(inEvent) {\n
var eventCopy = Object.create(null), p;\n for (var i = 0; i < CLONE_PROP
S.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 Safar
i, 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] = eve
ntCopy[p].correspondingUseElement;\n }\n }\n }\n // ke
ep 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 {Eve
nt} inEvent The event to be dispatched.\n * @return {Boolean} True if an eve
nt handler returns true, false otherwise.\n */\n dispatchEvent: function(
inEvent) {\n var t = inEvent._target;\n if (t) {\n t.dispatchEv
ent(inEvent);\n // clone the event for the gesture system to process\n
// clone after dispatch to pick up gesture prevention code\n var clo
ne = this.cloneEvent(inEvent);\n clone.target = t;\n this.fillGest
ureQueue(clone);\n }\n },\n gestureTrigger: function() {\n // pr
ocess 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 < th
is.gestures.length; j++) {\n g = this.gestures[j];\n fn = g[e.
type];\n if (g.enabled && fn) {\n fn.call(g, e);\n
}\n }\n }\n this.gestureQueue.length = 0;\n },\n fillGest
ureQueue: function(ev) {\n // only trigger the gesture queue once\n if
(!this.gestureQueue.length) {\n requestAnimationFrame(this.boundGestureT
rigger);\n }\n this.gestureQueue.push(ev);\n }\n };\n dispatcher.
boundHandler = dispatcher.eventHandler.bind(dispatcher);\n dispatcher.boundGest
ureTrigger = dispatcher.gestureTrigger.bind(dispatcher);\n scope.dispatcher = d
ispatcher;\n\n /**\n * Listen for `gesture` on `node` with the `handler` func
tion\n *\n * If `handler` is the first listener for `gesture`, the underlyin
g gesture recognizer is then enabled.\n *\n * @param {Element} node\n * @p
aram {string} gesture\n * @return Boolean `gesture` is a valid gesture\n */\
n scope.activateGesture = function(node, gesture) {\n var g = gesture.toLowe
rCase();\n var dep = dispatcher.dependencyMap[g];\n if (dep) {\n var
recognizer = 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 No
de.ELEMENT_NODE:\n actionNode = node;\n break;\n ca
se Node.DOCUMENT_FRAGMENT_NODE:\n actionNode = node.host;\n
break;\n default:\n actionNode = null;\n break;\n
}\n if (touchAction && actionNode && !actionNode.hasAttribute('touc
h-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` funct
ion.\n *\n * @param {Element} node\n * @param {string} gesture\n * @para
m {Function} handler\n * @param {Boolean} capture\n */\n scope.addEventList
ener = function(node, gesture, handler, capture) {\n if (handler) {\n sc
ope.activateGesture(node, gesture);\n node.addEventListener(gesture, handle
r, capture);\n }\n };\n\n /**\n * Tears down the gesture configuration fo
r `node`\n *\n * If `handler` is the last listener for `gesture`, the underl
ying gesture recognizer is disabled.\n *\n * @param {Element} node\n * @pa
ram {string} gesture\n * @return Boolean `gesture` is a valid gesture\n */\n
scope.deactivateGesture = function(node, gesture) {\n var g = gesture.toLow
erCase();\n var dep = dispatcher.dependencyMap[g];\n if (dep) {\n if
(dep.listeners > 0) {\n dep.listeners--;\n }\n if (dep.listener
s === 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` fr
om `node` with `handler` function.\n *\n * @param {Element} node\n * @para
m {string} gesture\n * @param {Function} handler\n * @param {Boolean} captur
e\n */\n scope.removeEventListener = function(node, gesture, handler, capture
) {\n if (handler) {\n scope.deactivateGesture(node, gesture);\n no
de.removeEventListener(gesture, handler, capture);\n }\n };\n})(window.Polym
erGestures);\n", |
58 "/*\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://poly
mer.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
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 module uses
Mutation Observers to dynamically adjust which nodes will\n * generate Pointer E
vents.\n *\n * All nodes that wish to generate Pointer Events must have the attr
ibute\n * `touch-action` set to `none`.\n */\n(function(scope) {\n var forEach
= Array.prototype.forEach.call.bind(Array.prototype.forEach);\n var map = Array
.prototype.map.call.bind(Array.prototype.map);\n var toArray = Array.prototype.
slice.call.bind(Array.prototype.slice);\n var filter = Array.prototype.filter.c
all.bind(Array.prototype.filter);\n var MO = window.MutationObserver || window.
WebKitMutationObserver;\n var SELECTOR = '[touch-action]';\n var OBSERVER_INIT
= {\n subtree: true,\n childList: true,\n attributes: true,\n attri
buteOldValue: true,\n attributeFilter: ['touch-action']\n };\n\n function I
nstaller(add, remove, changed, binder) {\n this.addCallback = add.bind(binder
);\n this.removeCallback = remove.bind(binder);\n this.changedCallback = c
hanged.bind(binder);\n if (MO) {\n this.observer = new MO(this.mutationW
atcher.bind(this));\n }\n }\n\n Installer.prototype = {\n watchSubtree:
function(target) {\n // Only watch scopes that can target find, as these ar
e top-level.\n // Otherwise we can see duplicate additions and removals tha
t add noise.\n //\n // TODO(dfreedman): For some instances with Shadow
DOMPolyfill, 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 docum
ent, watching only\n // the document will yield the correct mutations to wa
tch.\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 === document && do
cument.readyState !== 'complete') {\n this.installOnLoad();\n } else
{\n this.installNewSubtree(target);\n }\n },\n installNewSubt
ree: function(target) {\n forEach(this.findElements(target), this.addElemen
t, this);\n },\n findElements: function(target) {\n if (target.queryS
electorAll) {\n return target.querySelectorAll(SELECTOR);\n }\n
return [];\n },\n removeElement: function(el) {\n this.removeCallbac
k(el);\n },\n addElement: function(el) {\n this.addCallback(el);\n
},\n elementChanged: function(el, oldValue) {\n this.changedCallback(el
, oldValue);\n },\n concatLists: function(accum, list) {\n return acc
um.concat(toArray(list));\n },\n // register all touch-action = none nodes
on document load\n installOnLoad: function() {\n document.addEventListe
ner('readystatechange', function() {\n if (document.readyState === 'compl
ete') {\n this.installNewSubtree(document);\n }\n }.bind(th
is));\n },\n isElement: function(n) {\n return n.nodeType === Node.EL
EMENT_NODE;\n },\n flattenMutationTree: function(inNodes) {\n // find
children with touch-action\n var tree = map(inNodes, this.findElements, th
is);\n // make sure the added nodes are accounted for\n tree.push(filt
er(inNodes, this.isElement));\n // flatten the list\n return tree.redu
ce(this.concatLists, []);\n },\n mutationWatcher: function(mutations) {\n
mutations.forEach(this.mutationHandler, this);\n },\n mutationHandler
: function(m) {\n if (m.type === 'childList') {\n var added = this.f
lattenMutationTree(m.addedNodes);\n added.forEach(this.addElement, this);
\n var removed = this.flattenMutationTree(m.removedNodes);\n remov
ed.forEach(this.removeElement, this);\n } else if (m.type === 'attributes')
{\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 not be dyn
amically detected');\n };\n }\n\n scope.Installer = Installer;\n})(window.P
olymerGestures);\n", | 58 "/*\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://poly
mer.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
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 va
r dispatcher = scope.dispatcher;\n var pointermap = dispatcher.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_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 mouseEvents = {\n
POINTER_ID: 1,\n POINTER_TYPE: 'mouse',\n events: [\n 'mousedown',\n
'mousemove',\n 'mouseup'\n ],\n exposes: [\n 'down',\n
'up',\n 'move'\n ],\n register: function(target) {\n dispatcher
.listen(target, this.events);\n },\n unregister: function(target) {\n
dispatcher.unlisten(target, this.events);\n },\n lastTouches: [],\n //
collide with the global mouse listener\n isEventSimulatedFromTouch: 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 i
f (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._source = 'mouse';\n
if (!HAS_BUTTONS) {\n e.buttons = WHICH_TO_BUTTONS[e.which] || 0;\n
}\n return e;\n },\n mousedown: function(inEvent) {\n if (!th
is.isEventSimulatedFromTouch(inEvent)) {\n var p = pointermap.has(this.PO
INTER_ID);\n // TODO(dfreedman) workaround for some elements not sending
mouseup\n // http://crbug/149091\n if (p) {\n this.mouseu
p(inEvent);\n }\n var e = this.prepareEvent(inEvent);\n e.t
arget = scope.findTarget(inEvent);\n pointermap.set(this.POINTER_ID, e.ta
rget);\n dispatcher.down(e);\n }\n },\n mousemove: function(in
Event) {\n if (!this.isEventSimulatedFromTouch(inEvent)) {\n var tar
get = 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 di
spatcher.cancel(e);\n this.cleanupMouse();\n } else {\n
dispatcher.move(e);\n }\n }\n }\n },\n mouseup
: function(inEvent) {\n if (!this.isEventSimulatedFromTouch(inEvent)) {\n
var e = this.prepareEvent(inEvent);\n e.relatedTarget = scope.findT
arget(inEvent);\n e.target = pointermap.get(this.POINTER_ID);\n di
spatcher.up(e);\n this.cleanupMouse();\n }\n },\n cleanupMouse
: function() {\n pointermap['delete'](this.POINTER_ID);\n }\n };\n\n s
cope.mouseEvents = mouseEvents;\n})(window.PolymerGestures);\n", |
59 "/*\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://poly
mer.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
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 va
r dispatcher = scope.dispatcher;\n var pointermap = dispatcher.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_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 mouseEvents = {\n
POINTER_ID: 1,\n POINTER_TYPE: 'mouse',\n events: [\n 'mousedown',\n
'mousemove',\n 'mouseup'\n ],\n register: function(target) {\n
if (target !== document) {\n return;\n }\n dispatcher.liste
n(target, this.events);\n },\n unregister: function(target) {\n dispa
tcher.unlisten(target, this.events);\n },\n lastTouches: [],\n // colli
de with the global mouse listener\n isEventSimulatedFromTouch: function(inEve
nt) {\n var lts = this.lastTouches;\n var x = inEvent.clientX, y = inE
vent.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 touche
nd\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.cloneE
vent(inEvent);\n e.pointerId = this.POINTER_ID;\n e.isPrimary = true;\
n e.pointerType = this.POINTER_TYPE;\n e._source = 'mouse';\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.isE
ventSimulatedFromTouch(inEvent)) {\n var p = pointermap.has(this.POINTER_
ID);\n // TODO(dfreedman) workaround for some elements not sending mouseu
p\n // http://crbug/149091\n if (p) {\n this.mouseup(inEv
ent);\n }\n var e = this.prepareEvent(inEvent);\n e.target
= scope.wrap(scope.findTarget(inEvent));\n pointermap.set(this.POINTER_ID
, e.target);\n dispatcher.down(e);\n }\n },\n mousemove: funct
ion(inEvent) {\n if (!this.isEventSimulatedFromTouch(inEvent)) {\n v
ar e = this.prepareEvent(inEvent);\n e.target = pointermap.get(this.POINT
ER_ID);\n dispatcher.move(e);\n }\n },\n mouseup: function(inE
vent) {\n if (!this.isEventSimulatedFromTouch(inEvent)) {\n var e =
this.prepareEvent(inEvent);\n e.relatedTarget = scope.wrap(scope.findTarg
et(inEvent));\n e.target = pointermap.get(this.POINTER_ID);\n disp
atcher.up(e);\n this.cleanupMouse();\n }\n },\n cleanupMouse:
function() {\n pointermap['delete'](this.POINTER_ID);\n }\n };\n\n sco
pe.mouseEvents = mouseEvents;\n})(window.PolymerGestures);\n", | 59 "/*\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://poly
mer.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
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 var
dispatcher = scope.dispatcher;\n var allShadows = scope.targetFinding.allShado
ws.bind(scope.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_ACTION = false;\n\n // handler block for native touch events\n var touc
hEvents = {\n events: [\n 'touchstart',\n 'touchmove',\n 'touc
hend',\n 'touchcancel'\n ],\n exposes: [\n 'down',\n 'up',\
n 'move'\n ],\n register: function(target, initial) {\n if (init
ial) {\n return;\n }\n dispatcher.listen(target, this.events);\
n },\n unregister: function(target) {\n dispatcher.unlisten(target, t
his.events);\n },\n scrollTypes: {\n EMITTER: 'none',\n XSCROLLE
R: 'pan-x',\n YSCROLLER: 'pan-y',\n },\n touchActionToScrollType: fun
ction(touchAction) {\n var t = touchAction;\n var st = this.scrollType
s;\n if (t === st.EMITTER) {\n return 'none';\n } else if (t ==
= st.XSCROLLER) {\n return 'X';\n } else if (t === st.YSCROLLER) {\n
return 'Y';\n } else {\n return 'XY';\n }\n },\n
POINTER_TYPE: 'touch',\n firstTouch: null,\n isPrimaryTouch: function(inTo
uch) {\n return this.firstTouch === inTouch.identifier;\n },\n setPri
maryTouch: function(inTouch) {\n // set primary touch if there no pointers,
or the only pointer is the mouse\n if (pointermap.pointers() === 0 || (poi
ntermap.pointers() === 1 && pointermap.has(1))) {\n this.firstTouch = inT
ouch.identifier;\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
.isPrimary) {\n this.firstTouch = null;\n this.firstXY = null;\n
this.resetClickCount();\n }\n },\n clickCount: 0,\n resetId:
null,\n resetClickCount: function() {\n var fn = function() {\n
this.clickCount = 0;\n this.resetId = null;\n }.bind(this);\n t
his.resetId = setTimeout(fn, CLICK_COUNT_TIMEOUT);\n },\n cancelResetClick
Count: function() {\n if (this.resetId) {\n clearTimeout(this.resetI
d);\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.isPrimaryTou
ch(touch)) {\n var fastPath = {\n clientX: touch.clientX,\n
clientY: touch.clientY,\n path: this.currentTouchEvent.pat
h,\n target: this.currentTouchEvent.target\n };\n r
eturn scope.findTarget(fastPath);\n } else {\n return scope.find
Target(touch);\n }\n }\n // reuse target we found in touchstart
\n return pointermap.get(id);\n },\n touchToPointer: function(inTouch
) {\n var cte = this.currentTouchEvent;\n var e = dispatcher.cloneEven
t(inTouch);\n // Spec specifies that pointerId 1 is reserved for Mouse.\n
// Touch identifiers can start at 0.\n // Add 2 to the touch identifier
for compatibility.\n var id = e.pointerId = inTouch.identifier + 2;\n
e.target = this.findTarget(inTouch, id);\n e.bubbles = true;\n e.canc
elable = true;\n e.detail = this.clickCount;\n e.buttons = this.typeTo
Buttons(cte.type);\n e.width = inTouch.webkitRadiusX || inTouch.radiusX ||
0;\n e.height = inTouch.webkitRadiusY || inTouch.radiusY || 0;\n e.pre
ssure = inTouch.webkitForce || inTouch.force || 0.5;\n e.isPrimary = this.i
sPrimaryTouch(inTouch);\n e.pointerType = this.POINTER_TYPE;\n e._sour
ce = 'touch';\n // forward touch preventDefaults\n var self = this;\n
e.preventDefault = function() {\n self.scrolling = false;\n s
elf.firstXY = null;\n cte.preventDefault();\n };\n return e;\n
},\n processTouches: function(inEvent, inFunction) {\n var tl = inEve
nt.changedTouches;\n this.currentTouchEvent = inEvent;\n for (var i =
0, t, p; i < tl.length; i++) {\n t = tl[i];\n p = this.touchToPoin
ter(t);\n if (inEvent.type === 'touchstart') {\n pointermap.set(
p.pointerId, p.target);\n }\n if (pointermap.has(p.pointerId)) {\n
inFunction.call(this, p);\n }\n if (inEvent.type === 'to
uchend' || inEvent._cancel) {\n this.cleanUpPointer(p);\n }\n
}\n },\n // For single axis scrollers, determines whether the element s
hould emit\n // pointer events or behave as a scroller\n shouldScroll: fun
ction(inEvent) {\n if (this.firstXY) {\n var ret;\n var touch
Action = scope.targetFinding.findTouchAction(inEvent);\n var scrollAxis =
this.touchActionToScrollType(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 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 = 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
// making 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 ins
tances, a touchstart can happen without a touchend. This\n // leaves the poin
termap 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 global
ly consistent, we fire a\n // pointercancel for this \"abandoned\" touch\n
vacuumTouches: function(inEvent) {\n var tl = inEvent.touches;\n // p
ointermap.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 remove pointerId == 1, which is mouse.\n // Touch identifiers are
2 smaller 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.forE
ach(function(p) {\n this.cancel(p);\n pointermap.delete(p.poin
terId);\n });\n }\n },\n touchstart: function(inEvent) {\n
this.vacuumTouches(inEvent);\n this.setPrimaryTouch(inEvent.changedTouche
s[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
// touchevent.cancelable == false is sent when the page is scrolling under nat
ive Touch Action in Chrome 36\n // https://groups.google.com/a/chromium.o
rg/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.sho
uldScroll(inEvent)) {\n this.scrolling = true;\n } else {\n
this.scrolling = false;\n inEvent.preventDefault();\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 - 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: function(inPointer) {\n dispatcher.move(inPointer);\n },\n touc
hend: function(inEvent) {\n this.dedupSynthMouse(inEvent);\n this.proc
essTouches(inEvent, this.up);\n },\n up: function(inPointer) {\n inPo
inter.relatedTarget = scope.findTarget(inPointer);\n dispatcher.up(inPointe
r);\n },\n cancel: function(inPointer) {\n dispatcher.cancel(inPointe
r);\n },\n touchcancel: function(inEvent) {\n inEvent._cancel = true;
\n this.processTouches(inEvent, this.cancel);\n },\n cleanUpPointer:
function(inPointer) {\n pointermap['delete'](inPointer.pointerId);\n t
his.removePrimaryPointer(inPointer);\n },\n // prevent synth mouse events
from creating pointer events\n dedupSynthMouse: function(inEvent) {\n va
r lts = scope.mouseEvents.lastTouches;\n var t = inEvent.changedTouches[0];
\n // only the primary finger will synth mouse events\n if (this.isPri
maryTouch(t)) {\n // remember x/y of last touch\n var lt = {x: t.c
lientX, y: t.clientY};\n lts.push(lt);\n var fn = (function(lts, l
t){\n var i = lts.indexOf(lt);\n if (i > -1) {\n lt
s.splice(i, 1);\n }\n }).bind(null, lts, lt);\n setTimeou
t(fn, DEDUP_TIMEOUT);\n }\n }\n };\n\n scope.touchEvents = touchEvents
;\n})(window.PolymerGestures);\n", |
60 "/*\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://poly
mer.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
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 var
dispatcher = scope.dispatcher;\n var allShadows = scope.targetFinding.allShado
ws.bind(scope.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 var INSTALLER;\n // maybe one day...\n // var CAN_USE_GL
OBAL = ATTRIB in document.head.style;\n var CAN_USE_GLOBAL = false;\n\n // han
dler 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 dispat
cher.listen(target, this.events);\n } else {\n INSTALLER.enableOnSub
tree(target);\n }\n },\n unregister: function(target) {\n if (CA
N_USE_GLOBAL) {\n dispatcher.unlisten(target, this.events);\n } else
{\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._s
crollType = st;\n dispatcher.listen(el, this.events);\n // set tou
ch-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._scrol
lType = undefined;\n dispatcher.unlisten(el, this.events);\n // remove
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 v
ar oldSt = this.touchActionToScrollType(oldValue);\n // simply update scrol
lType if listeners are already established\n if (st && oldSt) {\n el
._scrollType = st;\n allShadows(el).forEach(function(s) {\n s._s
crollType = st;\n }, this);\n } else if (oldSt) {\n this.elem
entRemoved(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)|au
to|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(inTo
uch) {\n return this.firstTouch === inTouch.identifier;\n },\n setPri
maryTouch: function(inTouch) {\n // set primary touch if there no pointers,
or the only pointer is the mouse\n if (pointermap.pointers() === 0 || (poi
ntermap.pointers() === 1 && pointermap.has(1))) {\n this.firstTouch = inT
ouch.identifier;\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
.isPrimary) {\n this.firstTouch = null;\n this.firstXY = null;\n
this.resetClickCount();\n }\n },\n clickCount: 0,\n resetId:
null,\n resetClickCount: function() {\n var fn = function() {\n
this.clickCount = 0;\n this.resetId = null;\n }.bind(this);\n t
his.resetId = setTimeout(fn, CLICK_COUNT_TIMEOUT);\n },\n cancelResetClick
Count: function() {\n if (this.resetId) {\n clearTimeout(this.resetI
d);\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.isPrimaryTou
ch(touch)) {\n var fastPath = {\n clientX: touch.clientX,\n
clientY: touch.clientY,\n path: this.currentTouchEvent.pat
h,\n target: scope.wrap(this.currentTouchEvent.target)\n };\
n return scope.findTarget(fastPath);\n } else {\n retur
n scope.findTarget(touch);\n }\n }\n // reuse target we found i
n touchstart\n return pointermap.get(id);\n },\n touchToPointer: func
tion(inTouch) {\n var cte = this.currentTouchEvent;\n var e = dispatch
er.cloneEvent(inTouch);\n // Spec specifies that pointerId 1 is reserved fo
r Mouse.\n // Touch identifiers can start at 0.\n // Add 2 to the touc
h identifier for compatibility.\n var id = e.pointerId = inTouch.identifier
+ 2;\n e.target = scope.wrap(this.findTarget(inTouch, id));\n e.bubbl
es = true;\n e.cancelable = true;\n e.detail = this.clickCount;\n
e.buttons = this.typeToButtons(cte.type);\n e.width = inTouch.webkitRadius
X || inTouch.radiusX || 0;\n e.height = inTouch.webkitRadiusY || inTouch.ra
diusY || 0;\n e.pressure = inTouch.webkitForce || inTouch.force || 0.5;\n
e.isPrimary = this.isPrimaryTouch(inTouch);\n e.pointerType = this.POIN
TER_TYPE;\n e._source = 'touch';\n // forward touch preventDefaults\n
var self = this;\n e.preventDefault = function() {\n self.scrol
ling = false;\n self.firstXY = null;\n cte.preventDefault();\n
};\n return e;\n },\n processTouches: function(inEvent, inFunction)
{\n var tl = inEvent.changedTouches;\n this.currentTouchEvent = inEve
nt;\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 (pointerm
ap.has(p.pointerId)) {\n inFunction.call(this, p);\n }\n
if (inEvent.type === 'touchend' || inEvent._cancel) {\n this.cleanUpPoi
nter(p);\n }\n }\n },\n // For single axis scrollers, determin
es whether the element should emit\n // pointer events or behave as a scrolle
r\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-action:
none, should never scroll\n ret = false;\n } else if (scrollAxi
s === 'XY') {\n // this element should always scroll\n ret = t
rue;\n } else {\n var t = inEvent.changedTouches[0];\n
// check the intended scroll axis, and other axis\n var a = scrollAxis;
\n var oa = scrollAxis === 'Y' ? 'X' : 'Y';\n var da = Math.ab
s(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 othe
r axis, scroll instead of\n // making 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 touch
end. 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 ev
ent.\n // To keep state globally consistent, we fire a\n // pointercancel
for this \"abandoned\" touch\n vacuumTouches: 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(func
tion(value, key) {\n // Never remove pointerId == 1, which is mouse.\n
// Touch identifiers are 2 smaller 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(function(p) {\n this.cancel(p);\n
pointermap.delete(p.pointerId);\n });\n }\n },\n touc
hstart: function(inEvent) {\n this.vacuumTouches(inEvent);\n this.setP
rimaryTouch(inEvent.changedTouches[0]);\n this.dedupSynthMouse(inEvent);\n
if (!this.scrolling) {\n this.clickCount++;\n this.processTou
ches(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 === null
&& this.shouldScroll(inEvent)) {\n this.scrolling = true;\n
} else {\n this.scrolling = false;\n inEvent.preventDefau
lt();\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 - this.
firstXY.Y;\n var dd = Math.sqrt(dx * dx + dy * dy);\n if (dd >
= HYSTERESIS) {\n this.touchcancel(inEvent);\n this.scroll
ing = 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 di
spatcher.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'](inPoin
ter.pointerId);\n this.removePrimaryPointer(inPointer);\n },\n // pre
vent synth mouse events from creating pointer events\n dedupSynthMouse: funct
ion(inEvent) {\n var lts = scope.mouseEvents.lastTouches;\n var t = in
Event.changedTouches[0];\n // only the primary finger will synth mouse even
ts\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 v
ar 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, DEDUP_TIMEOUT);\n }\n }\n };\n\n if (!CA
N_USE_GLOBAL) {\n INSTALLER = new scope.Installer(touchEvents.elementAdded, t
ouchEvents.elementRemoved, touchEvents.elementChanged, touchEvents);\n }\n\n s
cope.touchEvents = touchEvents;\n})(window.PolymerGestures);\n", | 60 "/*\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://poly
mer.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
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 var
dispatcher = scope.dispatcher;\n var pointermap = dispatcher.pointermap;\n va
r HAS_BITMAP_TYPE = window.MSPointerEvent && typeof window.MSPointerEvent.MSPOIN
TER_TYPE_MOUSE === 'number';\n var msEvents = {\n events: [\n 'MSPointe
rDown',\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 'unavailable',\n 'touch',
\n 'pen',\n 'mouse'\n ],\n prepareEvent: function(inEvent) {\n
var e = inEvent;\n e = dispatcher.cloneEvent(inEvent);\n if (HAS_B
ITMAP_TYPE) {\n e.pointerType = this.POINTER_TYPES[inEvent.pointerType];\
n }\n e._source = 'ms';\n return e;\n },\n cleanup: functio
n(id) {\n pointermap['delete'](id);\n },\n MSPointerDown: function(in
Event) {\n var e = this.prepareEvent(inEvent);\n e.target = scope.find
Target(inEvent);\n pointermap.set(inEvent.pointerId, e.target);\n disp
atcher.down(e);\n },\n MSPointerMove: function(inEvent) {\n var e = t
his.prepareEvent(inEvent);\n e.target = pointermap.get(e.pointerId);\n
dispatcher.move(e);\n },\n MSPointerUp: function(inEvent) {\n var e
= this.prepareEvent(inEvent);\n e.relatedTarget = scope.findTarget(inEvent)
;\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 = scope.fi
ndTarget(inEvent);\n e.target = pointermap.get(e.pointerId);\n dispatc
her.cancel(e);\n this.cleanup(inEvent.pointerId);\n }\n };\n\n scope.m
sEvents = msEvents;\n})(window.PolymerGestures);\n", |
61 "/*\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://poly
mer.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
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 var
dispatcher = scope.dispatcher;\n var pointermap = dispatcher.pointermap;\n va
r HAS_BITMAP_TYPE = window.MSPointerEvent && typeof window.MSPointerEvent.MSPOIN
TER_TYPE_MOUSE === 'number';\n var msEvents = {\n events: [\n 'MSPointe
rDown',\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 'unavailable',\n 'touch',
\n 'pen',\n 'mouse'\n ],\n prepareEvent: function(inEvent) {\n
var e = inEvent;\n e = dispatcher.cloneEvent(inEvent);\n if (HAS_B
ITMAP_TYPE) {\n e.pointerType = this.POINTER_TYPES[inEvent.pointerType];\
n }\n e._source = 'ms';\n return e;\n },\n cleanup: functio
n(id) {\n pointermap['delete'](id);\n },\n MSPointerDown: function(in
Event) {\n var e = this.prepareEvent(inEvent);\n e.target = scope.wrap
(scope.findTarget(inEvent));\n pointermap.set(inEvent.pointerId, e.target);
\n dispatcher.down(e);\n },\n MSPointerMove: function(inEvent) {\n
var e = this.prepareEvent(inEvent);\n e.target = pointermap.get(e.pointe
rId);\n dispatcher.move(e);\n },\n MSPointerUp: function(inEvent) {\n
var e = this.prepareEvent(inEvent);\n e.relatedTarget = scope.wrap(sc
ope.findTarget(inEvent));\n e.target = pointermap.get(e.pointerId);\n
dispatcher.up(e);\n this.cleanup(inEvent.pointerId);\n },\n MSPointer
Cancel: 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.cancel(e);\n this.cleanup(inEvent.p
ointerId);\n }\n };\n\n scope.msEvents = msEvents;\n})(window.PolymerGestur
es);\n", | 61 "/*\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://poly
mer.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
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 var
dispatcher = scope.dispatcher;\n var pointermap = dispatcher.pointermap;\n va
r pointerEvents = {\n events: [\n 'pointerdown',\n 'pointermove',\n
'pointerup',\n 'pointercancel'\n ],\n prepareEvent: function(in
Event) {\n var e = dispatcher.cloneEvent(inEvent);\n e._source = 'poin
ter';\n return e;\n },\n register: function(target) {\n if (targ
et !== document) {\n return;\n }\n dispatcher.listen(target, th
is.events);\n },\n unregister: function(target) {\n dispatcher.unlist
en(target, this.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.findTarget(inEvent);\n poin
termap.set(e.pointerId, e.target);\n dispatcher.down(e);\n },\n point
ermove: function(inEvent) {\n var e = this.prepareEvent(inEvent);\n e.
target = pointermap.get(e.pointerId);\n dispatcher.move(e);\n },\n po
interup: function(inEvent) {\n var e = this.prepareEvent(inEvent);\n e
.relatedTarget = scope.findTarget(inEvent);\n e.target = pointermap.get(e.p
ointerId);\n dispatcher.up(e);\n this.cleanup(inEvent.pointerId);\n
},\n pointercancel: function(inEvent) {\n var e = this.prepareEvent(inE
vent);\n e.relatedTarget = scope.findTarget(inEvent);\n e.target = poi
ntermap.get(e.pointerId);\n dispatcher.cancel(e);\n this.cleanup(inEve
nt.pointerId);\n }\n };\n\n scope.pointerEvents = pointerEvents;\n})(window
.PolymerGestures);\n", |
62 "/*\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://poly
mer.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
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 var
dispatcher = scope.dispatcher;\n var pointermap = dispatcher.pointermap;\n va
r pointerEvents = {\n events: [\n 'pointerdown',\n 'pointermove',\n
'pointerup',\n 'pointercancel'\n ],\n prepareEvent: function(in
Event) {\n var e = dispatcher.cloneEvent(inEvent);\n e._source = 'poin
ter';\n return e;\n },\n register: function(target) {\n if (targ
et !== document) {\n return;\n }\n dispatcher.listen(target, th
is.events);\n },\n unregister: function(target) {\n dispatcher.unlist
en(target, this.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 pointermap.set(e.pointerId, e.target);\n dispatcher.down(e);\n }
,\n pointermove: function(inEvent) {\n var e = this.prepareEvent(inEvent
);\n e.target = pointermap.get(e.pointerId);\n dispatcher.move(e);\n
},\n pointerup: function(inEvent) {\n var e = this.prepareEvent(inEven
t);\n e.relatedTarget = scope.wrap(scope.findTarget(inEvent));\n e.tar
get = pointermap.get(e.pointerId);\n dispatcher.up(e);\n this.cleanup(
inEvent.pointerId);\n },\n pointercancel: function(inEvent) {\n var e
= this.prepareEvent(inEvent);\n e.relatedTarget = scope.wrap(scope.findTar
get(inEvent));\n e.target = pointermap.get(e.pointerId);\n dispatcher.
cancel(e);\n this.cleanup(inEvent.pointerId);\n }\n };\n\n scope.point
erEvents = pointerEvents;\n})(window.PolymerGestures);\n", | 62 "/*\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://poly
mer.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
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 module conta
ins the handlers for native platform events.\n * From here, the dispatcher is ca
lled 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.ms
PointerEnabled) {\n dispatcher.registerSource('ms', scope.msEvents);\n } els
e {\n dispatcher.registerSource('mouse', scope.mouseEvents);\n if (window.
ontouchstart !== undefined) {\n dispatcher.registerSource('touch', scope.to
uchEvents);\n /*\n * NOTE: an empty touch listener on body will react
ivate nodes imported from templates with touch listeners\n * Removing it w
ill re-break the nodes\n *\n * Work around for https://bugs.webkit.o
rg/show_bug.cgi?id=135628\n */\n var isSafari = nav.userAgent.match('
Safari') && !nav.userAgent.match('Chrome');\n if (isSafari) {\n docu
ment.body.addEventListener('touchstart', function(){});\n }\n }\n }\n
dispatcher.register(document, true);\n})(window.PolymerGestures);\n", |
63 "/*\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://poly
mer.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
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 module conta
ins the handlers for native platform events.\n * From here, the dispatcher is ca
lled 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\n if (window.PointerEvent) {\n dispatcher.registerSource('poi
nter', scope.pointerEvents);\n } else if (window.navigator.msPointerEnabled) {\
n dispatcher.registerSource('ms', scope.msEvents);\n } else {\n dispatche
r.registerSource('mouse', scope.mouseEvents);\n if (window.ontouchstart !== u
ndefined) {\n dispatcher.registerSource('touch', scope.touchEvents);\n }
\n }\n\n dispatcher.register(document);\n})(window.PolymerGestures);\n", | 63 "/*\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://poly
mer.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
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 denote
s 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 * Pixe
s 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 Num
ber\n * @property ddx\n */\n/**\n * Pixles moved in the y direction since the la
st track.\n * @type Number\n * @property ddy\n */\n/**\n * The clientX position
of the track gesture.\n * @type Number\n * @property clientX\n */\n/**\n * The c
lientY position of the track gesture.\n * @type Number\n * @property clientY\n *
/\n/**\n * The pageX position of the track gesture.\n * @type Number\n * @proper
ty pageX\n */\n/**\n * The pageY position of the track gesture.\n * @type Number
\n * @property 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 t
rack gesture.\n * @type Number\n * @property screenY\n */\n/**\n * The last x ax
is 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 yD
irection\n */\n/**\n * A shared object between all tracking events.\n * @type Ob
ject\n * @property trackInfo\n */\n/**\n * The element currently under the point
er.\n * @type Element\n * @property relatedTarget\n */\n/**\n * The type of poin
ter 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 track\n * @extends trackstart\n */\n/**\n * This event fires when the poin
ter is no longer being tracked.\n *\n * @class trackend\n * @extends trackstart\
n */\n\n (function(scope) {\n var dispatcher = scope.dispatcher;\n var event
Factory = scope.eventFactory;\n var pointermap = new scope.PointerMap();\n v
ar track = {\n events: [\n 'down',\n 'move',\n 'up',\n
],\n exposes: [\n 'trackstart',\n 'track',\n 'trackx',\n
'tracky',\n 'trackend'\n ],\n defaultActions: {\n 'track':
'none',\n 'trackx': 'pan-y',\n 'tracky': 'pan-x'\n },\n WIGG
LE_THRESHOLD: 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
fireTrack: function(inType, inEvent, inTrackingData) {\n var t = inTr
ackingData;\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 === 'tr
ackx') {\n return;\n }\n if (dd.y) {\n t.yDirection
= this.clampDir(dd.y);\n } else if (inType === 'tracky') {\n retur
n;\n }\n var gestureProto = {\n bubbles: true,\n can
celable: true,\n trackInfo: t.trackInfo,\n relatedTarget: inEven
t.relatedTarget,\n pointerType: inEvent.pointerType,\n pointerId
: inEvent.pointerId,\n _source: 'track'\n };\n if (inType !=
= 'tracky') {\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.s
creenX = inEvent.screenX;\n gestureProto.xDirection = t.xDirection;\n
}\n if (inType !== 'trackx') {\n gestureProto.dy = d.y;\n
gestureProto.ddy = dd.y;\n gestureProto.y = inEvent.y;\n ges
tureProto.clientY = inEvent.clientY;\n gestureProto.pageY = inEvent.page
Y;\n gestureProto.screenY = inEvent.screenY;\n gestureProto.yDir
ection = t.yDirection;\n }\n var e = eventFactory.makeGestureEvent(i
nType, gestureProto);\n t.downTarget.dispatchEvent(e);\n },\n down
: function(inEvent) {\n if (inEvent.isPrimary && (inEvent.pointerType ===
'mouse' ? inEvent.buttons === 1 : true)) {\n var p = {\n downE
vent: inEvent,\n downTarget: inEvent.target,\n trackInfo: {}
,\n lastMoveEvent: null,\n xDirection: 0,\n yDirec
tion: 0,\n tracking: false\n };\n pointermap.set(inEve
nt.pointerId, p);\n }\n },\n move: function(inEvent) {\n var
p = pointermap.get(inEvent.pointerId);\n if (p) {\n if (!p.tracki
ng) {\n var d = this.calcPositionDelta(p.downEvent, inEvent);\n
var move = d.x * d.x + d.y * d.y;\n // start tracking only if fing
er 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('t
racky', inEvent, p);\n }\n p.lastMoveEvent = inEvent;\n }\
n },\n up: function(inEvent) {\n var p = pointermap.get(inEvent.po
interId);\n if (p) {\n if (p.tracking) {\n this.fireTrac
k('trackend', inEvent, p);\n }\n pointermap.delete(inEvent.point
erId);\n }\n }\n };\n dispatcher.registerGesture('track', track);\
n })(window.PolymerGestures);\n", |
64 "/*\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://poly
mer.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
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 denote
s 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 * Pixe
s 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 Num
ber\n * @property ddx\n */\n/**\n * Pixles moved in the y direction since the la
st track.\n * @type Number\n * @property ddy\n */\n/**\n * The clientX position
of the track gesture.\n * @type Number\n * @property clientX\n */\n/**\n * The c
lientY position of the track gesture.\n * @type Number\n * @property clientY\n *
/\n/**\n * The pageX position of the track gesture.\n * @type Number\n * @proper
ty pageX\n */\n/**\n * The pageY position of the track gesture.\n * @type Number
\n * @property 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 t
rack gesture.\n * @type Number\n * @property screenY\n */\n/**\n * The last x ax
is 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 yD
irection\n */\n/**\n * A shared object between all tracking events.\n * @type Ob
ject\n * @property trackInfo\n */\n/**\n * The element currently under the point
er.\n * @type Element\n * @property relatedTarget\n */\n/**\n * The type of poin
ter 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 track\n * @extends trackstart\n */\n/**\n * This event fires when the poin
ter is no longer being tracked.\n *\n * @class trackend\n * @extends trackstart\
n */\n\n (function(scope) {\n var dispatcher = scope.dispatcher;\n var event
Factory = scope.eventFactory;\n var pointermap = new scope.PointerMap();\n v
ar track = {\n events: [\n 'down',\n 'move',\n 'up',\n
],\n WIGGLE_THRESHOLD: 4,\n clampDir: function(inDelta) {\n retur
n 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 fireTrack: function(inType, inEvent, inTrackingData) {\n
var t = inTrackingData;\n var d = this.calcPositionDelta(t.downEvent, in
Event);\n var dd = this.calcPositionDelta(t.lastMoveEvent, inEvent);\n
if (dd.x) {\n t.xDirection = this.clampDir(dd.x);\n }\n i
f (dd.y) {\n t.yDirection = this.clampDir(dd.y);\n }\n var e
= eventFactory.makeGestureEvent(inType, {\n bubbles: true,\n ca
ncelable: 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 client
X: inEvent.clientX,\n clientY: inEvent.clientY,\n pageX: inEvent
.pageX,\n pageY: inEvent.pageY,\n screenX: inEvent.screenX,\n
screenY: inEvent.screenY,\n xDirection: t.xDirection,\n yD
irection: t.yDirection,\n trackInfo: t.trackInfo,\n relatedTarge
t: inEvent.relatedTarget,\n pointerType: inEvent.pointerType,\n
pointerId: inEvent.pointerId,\n _source: 'track'\n });\n t.d
ownTarget.dispatchEvent(e);\n },\n down: function(inEvent) {\n if
(inEvent.isPrimary && (inEvent.pointerType === 'mouse' ? inEvent.buttons === 1 :
true)) {\n var p = {\n downEvent: inEvent,\n downTa
rget: inEvent.target,\n trackInfo: {},\n lastMoveEvent: null
,\n xDirection: 0,\n yDirection: 0,\n tracking: fa
lse\n };\n pointermap.set(inEvent.pointerId, p);\n }\n
},\n move: function(inEvent) {\n var p = pointermap.get(inEvent.point
erId);\n if (p) {\n if (!p.tracking) {\n var d = this.ca
lcPositionDelta(p.downEvent, inEvent);\n var move = d.x * d.x + d.y *
d.y;\n // start tracking only if finger moves more than WIGGLE_THRESHO
LD\n if (move > this.WIGGLE_THRESHOLD) {\n p.tracking = tr
ue;\n this.fireTrack('trackstart', p.downEvent, p);\n th
is.fireTrack('track', inEvent, p);\n }\n } else {\n
this.fireTrack('track', inEvent, p);\n }\n p.lastMoveEvent = inE
vent;\n }\n },\n up: function(inEvent) {\n var p = pointerma
p.get(inEvent.pointerId);\n if (p) {\n if (p.tracking) {\n
this.fireTrack('trackend', inEvent, p);\n }\n pointermap.dele
te(inEvent.pointerId);\n }\n }\n };\n dispatcher.registerGesture('
track', track);\n })(window.PolymerGestures);\n", | 64 "/*\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://poly
mer.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
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 is fir
ed when a pointer is held down for 200ms.\n *\n * @module PointerGestures\n * @s
ubmodule Events\n * @class hold\n */\n/**\n * Type of pointer that made the hold
ing event.\n * @type String\n * @property pointerType\n */\n/**\n * Screen X axi
s position 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 cl
ientY\n */\n/**\n * Type of pointer that made the holding event.\n * @type Strin
g\n * @property pointerType\n */\n/**\n * This event is fired every 200ms while
a pointer is held down.\n *\n * @class holdpulse\n * @extends hold\n */\n/**\n *
Milliseconds pointer has been held down.\n * @type Number\n * @property holdTim
e\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.dispat
cher;\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 counting as a hold\n WIGG
LE_THRESHOLD: 16,\n events: [\n 'down',\n 'move',\n 'up',\n
],\n exposes: [\n 'hold',\n 'holdpulse',\n 'release'\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", |
65 "/*\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://poly
mer.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
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 is fir
ed when a pointer is held down for 200ms.\n *\n * @module PointerGestures\n * @s
ubmodule Events\n * @class hold\n */\n/**\n * Type of pointer that made the hold
ing event.\n * @type String\n * @property pointerType\n */\n/**\n * Screen X axi
s position 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 cl
ientY\n */\n/**\n * Type of pointer that made the holding event.\n * @type Strin
g\n * @property pointerType\n */\n/**\n * This event is fired every 200ms while
a pointer is held down.\n *\n * @class holdpulse\n * @extends hold\n */\n/**\n *
Milliseconds pointer has been held down.\n * @type Number\n * @property holdTim
e\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.dispat
cher;\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 counting as a hold\n WIGG
LE_THRESHOLD: 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
? 'holdpulse' : 'hold';\n this.fireHold(type, hold);\n this.held = tru
e;\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 = null;\n this.ho
ldJob = null;\n },\n down: function(inEvent) {\n if (inEvent.isPrimar
y && !this.heldPointer) {\n this.heldPointer = inEvent;\n this.tar
get = 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.pointerId) {\n thi
s.cancel();\n }\n },\n move: function(inEvent) {\n if (this.held
Pointer && this.heldPointer.pointerId === inEvent.pointerId) {\n var x =
inEvent.clientX - this.heldPointer.clientX;\n var y = inEvent.clientY - t
his.heldPointer.clientY;\n if ((x * x + y * y) > this.WIGGLE_THRESHOLD) {
\n this.cancel();\n }\n }\n },\n fireHold: function(i
nType, inHoldTime) {\n var p = {\n bubbles: true,\n cancelabl
e: true,\n pointerType: this.heldPointer.pointerType,\n pointerId:
this.heldPointer.pointerId,\n x: this.heldPointer.clientX,\n y: t
his.heldPointer.clientY,\n _source: 'hold'\n };\n if (inHoldTim
e) {\n p.holdTime = inHoldTime;\n }\n var e = eventFactory.make
GestureEvent(inType, p);\n this.target.dispatchEvent(e);\n }\n };\n di
spatcher.registerGesture('hold', hold);\n})(window.PolymerGestures);\n", | 65 "/*\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://poly
mer.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
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 is fir
ed when a pointer quickly goes down and up, and is used to\n * denote activation
.\n *\n * Any gesture event can prevent the tap event from being created by call
ing\n * `event.preventTap`.\n *\n * Any pointer event can prevent the tap by set
ting the `tapPrevented` property\n * on itself.\n *\n * @module PointerGestures\
n * @submodule Events\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 * @p
roperty 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 dispa
tcher = scope.dispatcher;\n var eventFactory = scope.eventFactory;\n var point
ermap = new scope.PointerMap();\n var tap = {\n events: [\n 'down',\n
'up'\n ],\n exposes: [\n 'tap'\n ],\n down: function(inEven
t) {\n if (inEvent.isPrimary && !inEvent.tapPrevented) {\n pointerma
p.set(inEvent.pointerId, {\n target: inEvent.target,\n buttons
: inEvent.buttons,\n x: inEvent.clientX,\n y: inEvent.clientY\
n });\n }\n },\n shouldTap: function(e, downState) {\n if
(e.pointerType === 'mouse') {\n // only allow left click to tap for mous
e\n return downState.buttons === 1;\n }\n return !e.tapPrevente
d;\n },\n up: function(inEvent) {\n var start = pointermap.get(inEven
t.pointerId);\n if (start && this.shouldTap(inEvent, start)) {\n //
up.relatedTarget is target currently under finger\n var t = scope.targetF
inding.LCA(start.target, inEvent.relatedTarget);\n if (t) {\n va
r e = eventFactory.makeGestureEvent('tap', {\n bubbles: true,\n
cancelable: true,\n x: inEvent.clientX,\n y: inEvent
.clientY,\n detail: inEvent.detail,\n pointerType: inEvent
.pointerType,\n pointerId: inEvent.pointerId,\n altKey: in
Event.altKey,\n ctrlKey: inEvent.ctrlKey,\n metaKey: inEve
nt.metaKey,\n shiftKey: inEvent.shiftKey,\n _source: 'tap'
\n });\n t.dispatchEvent(e);\n }\n }\n pointe
rmap.delete(inEvent.pointerId);\n }\n };\n // patch eventFactory to remove
id from tap's pointermap for preventTap calls\n eventFactory.preventTap = funct
ion(e) {\n return function() {\n e.tapPrevented = true;\n pointerma
p.delete(e.pointerId);\n };\n };\n dispatcher.registerGesture('tap', tap);\
n})(window.PolymerGestures);\n", |
66 "/*\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://poly
mer.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
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 is fir
ed when a pointer quickly goes down and up, and is used to\n * denote activation
.\n *\n * Any gesture event can prevent the tap event from being created by call
ing\n * `event.preventTap`.\n *\n * Any pointer event can prevent the tap by set
ting the `tapPrevented` property\n * on itself.\n *\n * @module PointerGestures\
n * @submodule Events\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 * @p
roperty 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 dispa
tcher = scope.dispatcher;\n var eventFactory = scope.eventFactory;\n var point
ermap = new scope.PointerMap();\n var tap = {\n events: [\n 'down',\n
'up'\n ],\n down: function(inEvent) {\n if (inEvent.isPrimary &&
!inEvent.tapPrevented) {\n pointermap.set(inEvent.pointerId, {\n
target: inEvent.target,\n buttons: inEvent.buttons,\n x: inEv
ent.clientX,\n y: inEvent.clientY\n });\n }\n },\n sh
ouldTap: 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.tapPrevented;\n },\n up: function(inEvent)
{\n var start = pointermap.get(inEvent.pointerId);\n if (start && thi
s.shouldTap(inEvent, start)) {\n // up.relatedTarget is target currently
under finger\n var t = scope.targetFinding.LCA(start.target, inEvent.rela
tedTarget);\n if (t) {\n var e = eventFactory.makeGestureEvent('
tap', {\n bubbles: true,\n cancelable: true,\n
x: inEvent.clientX,\n y: inEvent.clientY,\n detail: inEven
t.detail,\n pointerType: inEvent.pointerType,\n pointerId:
inEvent.pointerId,\n altKey: inEvent.altKey,\n ctrlKey: i
nEvent.ctrlKey,\n metaKey: inEvent.metaKey,\n shiftKey: in
Event.shiftKey,\n _source: 'tap'\n });\n t.dispatch
Event(e);\n }\n }\n pointermap.delete(inEvent.pointerId);\n
}\n };\n // patch eventFactory to remove id from tap's pointermap for preventT
ap calls\n eventFactory.preventTap = function(e) {\n return function() {\n
e.tapPrevented = true;\n pointermap.delete(e.pointerId);\n };\n };\
n dispatcher.registerGesture('tap', tap);\n})(window.PolymerGestures);\n", | |
67 "/*\n Copyright (C) 2013 Ariya Hidayat <ariya.hidayat@gmail.com>\n Copyrig
ht (C) 2013 Thaddee Tyl <thaddee.tyl@gmail.com>\n Copyright (C) 2012 Ariya Hida
yat <ariya.hidayat@gmail.com>\n Copyright (C) 2012 Mathias Bynens <mathias@qiwi
.be>\n Copyright (C) 2012 Joost-Wim Boekesteijn <joost-wim@boekesteijn.nl>\n C
opyright (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 Hidayat <ariya.hidayat@gmail.com>\n
\n Redistribution and use in source and binary forms, with or without\n modifi
cation, are permitted provided that the following conditions are met:\n\n * R
edistributions of source code must retain the above copyright\n notice, thi
s list of conditions and the following disclaimer.\n * Redistributions in bin
ary form must reproduce the above copyright\n notice, this list of conditio
ns and the following disclaimer in the\n documentation and/or other materia
ls provided with the distribution.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIG
HT HOLDERS AND CONTRIBUTORS \"AS IS\"\n AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED 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 ANY\n DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
OR CONSEQUENTIAL DAMAGES\n (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBST
ITUTE GOODS OR SERVICES;\n LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPT
ION) HOWEVER CAUSED AND\n ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRI
CT 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 D
AMAGE.\n*/\n\n(function (global) {\n 'use strict';\n\n var Token,\n
TokenName,\n Syntax,\n Messages,\n source,\n index,
\n length,\n delegate,\n lookahead,\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 T
okenName[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.Nu
mericLiteral] = 'Numeric';\n TokenName[Token.Punctuator] = 'Punctuator';\n
TokenName[Token.StringLiteral] = 'String';\n\n Syntax = {\n ArrayExpr
ession: 'ArrayExpression',\n BinaryExpression: 'BinaryExpression',\n
CallExpression: 'CallExpression',\n ConditionalExpression: 'Conditiona
lExpression',\n EmptyStatement: 'EmptyStatement',\n ExpressionStat
ement: 'ExpressionStatement',\n Identifier: 'Identifier',\n Litera
l: 'Literal',\n LabeledStatement: 'LabeledStatement',\n LogicalExp
ression: 'LogicalExpression',\n MemberExpression: 'MemberExpression',\n
ObjectExpression: 'ObjectExpression',\n Program: 'Program',\n
Property: 'Property',\n ThisExpression: 'ThisExpression',\n Unar
yExpression: 'UnaryExpression'\n };\n\n // Error messages should be identi
cal to V8.\n Messages = {\n UnexpectedToken: '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 only to have a better contract seman
tic, i.e. another safety net\n // to catch a logic error. The condition shall
be fulfilled in normal case.\n // Do NOT use this to enforce a certain condi
tion on any user input.\n\n function assert(condition, message) {\n if
(!condition) {\n throw new Error('ASSERT: ' + 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) || // t
ab\n (ch === 0xB) ||\n (ch === 0xC) ||\n (ch ==
= 0xA0) ||\n (ch >= 0x1680 && '\\u1680\\u180E\\u2000\\u2001\\u2002\\u
2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\uFEF
F'.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 a
nd Identifiers\n\n function isIdentifierStart(ch) {\n return (ch === 3
6) || (ch === 95) || // $ (dollar) and _ (underscore)\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 _ (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 function getIdentifier() {\n var start, ch;\n\n
start = index++;\n while (index < length) {\n ch = source.c
harCodeAt(index);\n if (isIdentifierPart(ch)) {\n ++in
dex;\n } else {\n break;\n }\n }\n\n
return source.slice(start, index);\n }\n\n function scanIdentifier
() {\n var start, id, type;\n\n start = index;\n\n id = get
Identifier();\n\n // There is no keyword or literal with only one charact
er.\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 if (id === 'null') {\n
type = Token.NullLiteral;\n } else if (id === '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 scanPunctuator() {\n var start = ind
ex,\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 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 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: T
oken.Punctuator,\n value: String.fromCharCode(code),\n
range: [start, index]\n };\n\n default:\n code
2 = source.charCodeAt(index + 1);\n\n // '=' (char #61) marks an assi
gnment 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 value: String.fromCharCode(code) + St
ring.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) === 61) {\n ++i
ndex;\n }\n return {\n
type: Token.Punctuator,\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 === ch2 && ('&|'.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.cha
rCodeAt(0)) || (ch === '.'),\n 'Numeric literal must start with a dec
imal digit or a decimal point');\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 with '0'.\n if (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.charCodeAt(index))) {\n nu
mber += source[index++];\n }\n ch = source[index];\n
}\n\n if (ch === '.') {\n number += source[index++];\n
while (isDecimalDigit(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 = source[index];\n if (ch === '+' || ch === '-')
{\n number += source[index++];\n }\n if (i
sDecimalDigit(source.charCodeAt(index))) {\n while (isDecimalDigi
t(source.charCodeAt(index))) {\n number += source[index++];\n
}\n } else {\n throwError({}, Messages
.UnexpectedToken, 'ILLEGAL');\n }\n }\n\n if (isIdentif
ierStart(source.charCodeAt(index))) {\n throwError({}, Messages.Unexp
ectedToken, 'ILLEGAL');\n }\n\n return {\n type: Token.
NumericLiteral,\n value: parseFloat(number),\n range: [sta
rt, index]\n };\n }\n\n // 7.8.4 String Literals\n\n function sc
anStringLiteral() {\n var str = '', quote, start, ch, octal = false;\n\n
quote = source[index];\n assert((quote === '\\'' || quote === '\"'
),\n 'String literal must starts with a quote');\n\n start = i
ndex;\n ++index;\n\n while (index < length) {\n ch = so
urce[index++];\n\n if (ch === quote) {\n quote = '';\n
break;\n } else if (ch === '\\\\') {\n
ch = source[index++];\n if (!ch || !isLineTerminator(ch.charCode
At(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 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
++index;\n }\n }\n
} else if (isLineTerminator(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.StringLitera
l,\n value: str,\n octal: octal,\n range: [star
t, index]\n };\n }\n\n function isIdentifierName(token) {\n
return token.type === Token.Identifier ||\n token.type === Token.Keyw
ord ||\n token.type === Token.BooleanLiteral ||\n token.ty
pe === 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 // V
ery common: ( and ) and ;\n if (ch === 40 || ch === 41 || ch === 58) {\n
return scanPunctuator();\n }\n\n // String literal star
ts with single quote (#39) or double quote (#34).\n if (ch === 39 || ch =
== 34) {\n return scanStringLiteral();\n }\n\n if (isId
entifierStart(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.charCodeAt(index + 1))) {\n return scanNume
ricLiteral();\n }\n return 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 index = token.range[1];\n\n re
turn token;\n }\n\n function peek() {\n var pos;\n\n pos = i
ndex;\n lookahead = advance();\n index = pos;\n }\n\n // Thr
ow an exception\n\n function throwError(token, messageFormat) {\n var
error,\n args = Array.prototype.slice.call(arguments, 2),\n
msg = messageFormat.replace(\n /%(\\d)/g,\n func
tion (whole, index) {\n assert(index < args.length, 'Message
reference must be in range');\n return args[index];\n
}\n );\n\n error = new Error(msg);\n error.inde
x = index;\n error.description = msg;\n throw error;\n }\n\n
// Throw an exception because of the token.\n\n function throwUnexpected(tok
en) {\n throwError(token, Messages.UnexpectedToken, token.value);\n }\
n\n // Expect the next token to match the specified punctuator.\n // If no
t, an exception will be thrown.\n\n function expect(value) {\n var tok
en = lex();\n if (token.type !== Token.Punctuator || token.value !== valu
e) {\n throwUnexpected(token);\n }\n }\n\n // Return tru
e if the next token matches the specified punctuator.\n\n function match(valu
e) {\n return lookahead.type === Token.Punctuator && lookahead.value ===
value;\n }\n\n // Return true if the next token matches the specified keyw
ord\n\n function matchKeyword(keyword) {\n return lookahead.type === T
oken.Keyword && lookahead.value === keyword;\n }\n\n function consumeSemic
olon() {\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 skipWhitespace();\n\n if (match
(';')) {\n lex();\n return;\n }\n\n if (look
ahead.type !== Token.EOF && !match('}')) {\n throwUnexpected(lookahea
d);\n }\n }\n\n // 11.1.4 Array Initialiser\n\n function parseAr
rayInitialiser() {\n var elements = [];\n\n expect('[');\n\n
while (!match(']')) {\n if (match(',')) {\n lex();\n
elements.push(null);\n } else {\n elem
ents.push(parseExpression());\n\n if (!match(']')) {\n
expect(',');\n }\n }\n }\n\n ex
pect(']');\n\n return delegate.createArrayExpression(elements);\n }\n\
n // 11.1.5 Object Initialiser\n\n function parseObjectPropertyKey() {\n
var token;\n\n skipWhitespace();\n token = lex();\n\n
// Note: This function is called only from parseObjectProperty(), where\n
// EOF and Punctuator tokens are already filtered out.\n if (token.type
=== Token.StringLiteral || token.type === Token.NumericLiteral) {\n
return delegate.createLiteral(token);\n }\n\n return delegate.crea
teIdentifier(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(token);\n }\n\n key = parseObjectPropertyKe
y();\n expect(':');\n return delegate.createProperty('init', key,
parseExpression());\n }\n\n function parseObjectInitialiser() {\n v
ar 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.createObjectExpression(properties);\n }\n\n
// 11.1.6 The Grouping Operator\n\n function 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 Expres
sions\n\n function parsePrimaryExpression() {\n var type, token, expr;
\n\n if (match('(')) {\n return parseGroupExpression();\n
}\n\n type = lookahead.type;\n\n if (type === Token.Identifier)
{\n expr = delegate.createIdentifier(lex().value);\n } else i
f (type === Token.StringLiteral || type === Token.NumericLiteral) {\n
expr = delegate.createLiteral(lex());\n } else if (type === Token.Keywor
d) {\n if (matchKeyword('this')) {\n lex();\n
expr = delegate.createThisExpression();\n }\n } else if
(type === Token.BooleanLiteral) {\n token = lex();\n toke
n.value = (token.value === 'true');\n expr = delegate.createLiteral(t
oken);\n } else if (type === Token.NullLiteral) {\n token = le
x();\n token.value = null;\n expr = delegate.createLiteral
(token);\n } else if (match('[')) {\n expr = parseArrayInitial
iser();\n } else if (match('{')) {\n expr = parseObjectInitial
iser();\n }\n\n if (expr) {\n return expr;\n }\n
\n throwUnexpected(lex());\n }\n\n // 11.2 Left-Hand-Side Expressio
ns\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 = le
x();\n\n if (!isIdentifierName(token)) {\n throwUnexpected(tok
en);\n }\n\n return delegate.createIdentifier(token.value);\n }
\n\n function parseNonComputedMember() {\n expect('.');\n\n ret
urn parseNonComputedProperty();\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 parseLeftH
andSideExpression() {\n var expr, args, property;\n\n expr = parse
PrimaryExpression();\n\n while (true) {\n if (match('[')) {\n
property = parseComputedMember();\n expr = delegat
e.createMemberExpression('[', expr, property);\n } else if (match('.'
)) {\n property = parseNonComputedMember();\n expr
= delegate.createMemberExpression('.', expr, property);\n } else if
(match('(')) {\n args = parseArguments();\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 parsePostfixExpression = parseLeftHandSideExpre
ssion;\n\n // 11.4 Unary Operators\n\n function parseUnaryExpression() {\n
var token, expr;\n\n if (lookahead.type !== Token.Punctuator && l
ookahead.type !== Token.Keyword) {\n expr = parsePostfixExpression();
\n } else if (match('+') || match('-') || match('!')) {\n toke
n = lex();\n expr = parseUnaryExpression();\n expr = deleg
ate.createUnaryExpression(token.value, expr);\n } else if (matchKeyword('
delete') || matchKeyword('void') || matchKeyword('typeof')) {\n throw
Error({}, Messages.UnexpectedToken);\n } else {\n expr = parse
PostfixExpression();\n }\n\n return expr;\n }\n\n function b
inaryPrecedence(token) {\n var prec = 0;\n\n if (token.type !== To
ken.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 b
reak;\n\n case '==':\n case '!=':\n case '===':\n ca
se '!==':\n prec = 6;\n break;\n\n case '<':\n
case '>':\n case '<=':\n case '>=':\n case 'instanceof':
\n prec = 7;\n break;\n\n case 'in':\n p
rec = 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 prec;\n }\n\n // 11.5 Multipli
cative Operators\n // 11.6 Additive Operators\n // 11.7 Bitwise Shift Oper
ators\n // 11.8 Relational Operators\n // 11.9 Equality Operators\n //
11.10 Binary Bitwise Operators\n // 11.11 Binary Logical Operators\n\n fun
ction parseBinaryExpression() {\n var expr, token, prec, stack, right, op
erator, left, i;\n\n left = parseUnaryExpression();\n\n token = lo
okahead;\n prec = binaryPrecedence(token);\n if (prec === 0) {\n
return left;\n }\n token.prec = prec;\n lex();\n\
n right = parseUnaryExpression();\n\n stack = [left, token, right]
;\n\n while ((prec = binaryPrecedence(lookahead)) > 0) {\n\n /
/ Reduce: make a binary expression 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.createBinaryEx
pression(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 clea
n-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 Operator\n\n function parseCondit
ionalExpression() {\n var expr, consequent, alternate;\n\n expr =
parseBinaryExpression();\n\n if (match('?')) {\n lex();\n
consequent = parseConditionalExpression();\n expect(':');\n
alternate = parseConditionalExpression();\n\n expr = delegat
e.createConditionalExpression(expr, consequent, alternate);\n }\n\n
return expr;\n }\n\n // Simplification since we do not support Assignmen
tExpression.\n var parseExpression = parseConditionalExpression;\n\n // Po
lymer Syntax extensions\n\n // Filter ::\n // Identifier\n // Ident
ifier \"(\" \")\"\n // Identifier \"(\" FilterArguments \")\"\n\n functi
on parseFilter() {\n var identifier, args;\n\n identifier = lex();
\n\n if (identifier.type !== Token.Identifier) {\n throwUnexpe
cted(identifier);\n }\n\n args = match('(') ? parseArguments() : [
];\n\n return delegate.createFilter(identifier.value, args);\n }\n\n
// Filters ::\n // \"|\" Filter\n // Filters \"|\" Filter\n\n fun
ction parseFilters() {\n while (match('|')) {\n lex();\n
parseFilter();\n }\n }\n\n // TopLevel ::\n // LabelledE
xpressions\n // AsExpression\n // InExpression\n // FilterExpress
ion\n\n // AsExpression ::\n // FilterExpression as Identifier\n\n //
InExpression ::\n // Identifier, Identifier in FilterExpression\n //
Identifier in FilterExpression\n\n // FilterExpression ::\n // Expressio
n\n // Expression Filters\n\n function parseTopLevel() {\n skipWh
itespace();\n peek();\n\n var expr = parseExpression();\n i
f (expr) {\n if (lookahead.value === ',' || lookahead.value == 'in' &
&\n expr.type === Syntax.Identifier) {\n pa
rseInExpression(expr);\n } else {\n parseFilters();\n
if (lookahead.value === 'as') {\n parseAsExpre
ssion(expr);\n } else {\n delegate.createTopLe
vel(expr);\n }\n }\n }\n\n if (lookahead
.type !== Token.EOF) {\n throwUnexpected(lookahead);\n }\n
}\n\n function parseAsExpression(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.value === ',') {\n lex();\n if (lo
okahead.type !== Token.Identifier)\n throwUnexpected(lookahead);\
n indexName = lex().value;\n }\n\n lex(); // in\n
var expr = parseExpression();\n parseFilters();\n delegate.crea
teInExpression(identifier.name, indexName, expr);\n }\n\n function parse(c
ode, inDelegate) {\n delegate = inDelegate;\n source = code;\n
index = 0;\n length = source.length;\n lookahead = null;\n
state = {\n labelSet: {}\n };\n\n return parseTopLe
vel();\n }\n\n global.esprima = {\n parse: parse\n };\n})(this);
\n", | 66 "/*\n Copyright (C) 2013 Ariya Hidayat <ariya.hidayat@gmail.com>\n Copyrig
ht (C) 2013 Thaddee Tyl <thaddee.tyl@gmail.com>\n Copyright (C) 2012 Ariya Hida
yat <ariya.hidayat@gmail.com>\n Copyright (C) 2012 Mathias Bynens <mathias@qiwi
.be>\n Copyright (C) 2012 Joost-Wim Boekesteijn <joost-wim@boekesteijn.nl>\n C
opyright (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 Hidayat <ariya.hidayat@gmail.com>\n
\n Redistribution and use in source and binary forms, with or without\n modifi
cation, are permitted provided that the following conditions are met:\n\n * R
edistributions of source code must retain the above copyright\n notice, thi
s list of conditions and the following disclaimer.\n * Redistributions in bin
ary form must reproduce the above copyright\n notice, this list of conditio
ns and the following disclaimer in the\n documentation and/or other materia
ls provided with the distribution.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIG
HT HOLDERS AND CONTRIBUTORS \"AS IS\"\n AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED 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 ANY\n DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
OR CONSEQUENTIAL DAMAGES\n (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBST
ITUTE GOODS OR SERVICES;\n LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPT
ION) HOWEVER CAUSED AND\n ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRI
CT 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 D
AMAGE.\n*/\n\n(function (global) {\n 'use strict';\n\n var Token,\n
TokenName,\n Syntax,\n Messages,\n source,\n index,
\n length,\n delegate,\n lookahead,\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 T
okenName[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.Nu
mericLiteral] = 'Numeric';\n TokenName[Token.Punctuator] = 'Punctuator';\n
TokenName[Token.StringLiteral] = 'String';\n\n Syntax = {\n ArrayExpr
ession: 'ArrayExpression',\n BinaryExpression: 'BinaryExpression',\n
CallExpression: 'CallExpression',\n ConditionalExpression: 'Conditiona
lExpression',\n EmptyStatement: 'EmptyStatement',\n ExpressionStat
ement: 'ExpressionStatement',\n Identifier: 'Identifier',\n Litera
l: 'Literal',\n LabeledStatement: 'LabeledStatement',\n LogicalExp
ression: 'LogicalExpression',\n MemberExpression: 'MemberExpression',\n
ObjectExpression: 'ObjectExpression',\n Program: 'Program',\n
Property: 'Property',\n ThisExpression: 'ThisExpression',\n Unar
yExpression: 'UnaryExpression'\n };\n\n // Error messages should be identi
cal to V8.\n Messages = {\n UnexpectedToken: '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 only to have a better contract seman
tic, i.e. another safety net\n // to catch a logic error. The condition shall
be fulfilled in normal case.\n // Do NOT use this to enforce a certain condi
tion on any user input.\n\n function assert(condition, message) {\n if
(!condition) {\n throw new Error('ASSERT: ' + 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) || // t
ab\n (ch === 0xB) ||\n (ch === 0xC) ||\n (ch ==
= 0xA0) ||\n (ch >= 0x1680 && '\\u1680\\u180E\\u2000\\u2001\\u2002\\u
2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\uFEF
F'.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 a
nd Identifiers\n\n function isIdentifierStart(ch) {\n return (ch === 3
6) || (ch === 95) || // $ (dollar) and _ (underscore)\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 _ (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 function getIdentifier() {\n var start, ch;\n\n
start = index++;\n while (index < length) {\n ch = source.c
harCodeAt(index);\n if (isIdentifierPart(ch)) {\n ++in
dex;\n } else {\n break;\n }\n }\n\n
return source.slice(start, index);\n }\n\n function scanIdentifier
() {\n var start, id, type;\n\n start = index;\n\n id = get
Identifier();\n\n // There is no keyword or literal with only one charact
er.\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 if (id === 'null') {\n
type = Token.NullLiteral;\n } else if (id === '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 scanPunctuator() {\n var start = ind
ex,\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 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 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: T
oken.Punctuator,\n value: String.fromCharCode(code),\n
range: [start, index]\n };\n\n default:\n code
2 = source.charCodeAt(index + 1);\n\n // '=' (char #61) marks an assi
gnment 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 value: String.fromCharCode(code) + St
ring.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) === 61) {\n ++i
ndex;\n }\n return {\n
type: Token.Punctuator,\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 === ch2 && ('&|'.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.cha
rCodeAt(0)) || (ch === '.'),\n 'Numeric literal must start with a dec
imal digit or a decimal point');\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 with '0'.\n if (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.charCodeAt(index))) {\n nu
mber += source[index++];\n }\n ch = source[index];\n
}\n\n if (ch === '.') {\n number += source[index++];\n
while (isDecimalDigit(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 = source[index];\n if (ch === '+' || ch === '-')
{\n number += source[index++];\n }\n if (i
sDecimalDigit(source.charCodeAt(index))) {\n while (isDecimalDigi
t(source.charCodeAt(index))) {\n number += source[index++];\n
}\n } else {\n throwError({}, Messages
.UnexpectedToken, 'ILLEGAL');\n }\n }\n\n if (isIdentif
ierStart(source.charCodeAt(index))) {\n throwError({}, Messages.Unexp
ectedToken, 'ILLEGAL');\n }\n\n return {\n type: Token.
NumericLiteral,\n value: parseFloat(number),\n range: [sta
rt, index]\n };\n }\n\n // 7.8.4 String Literals\n\n function sc
anStringLiteral() {\n var str = '', quote, start, ch, octal = false;\n\n
quote = source[index];\n assert((quote === '\\'' || quote === '\"'
),\n 'String literal must starts with a quote');\n\n start = i
ndex;\n ++index;\n\n while (index < length) {\n ch = so
urce[index++];\n\n if (ch === quote) {\n quote = '';\n
break;\n } else if (ch === '\\\\') {\n
ch = source[index++];\n if (!ch || !isLineTerminator(ch.charCode
At(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 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
++index;\n }\n }\n
} else if (isLineTerminator(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.StringLitera
l,\n value: str,\n octal: octal,\n range: [star
t, index]\n };\n }\n\n function isIdentifierName(token) {\n
return token.type === Token.Identifier ||\n token.type === Token.Keyw
ord ||\n token.type === Token.BooleanLiteral ||\n token.ty
pe === 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 // V
ery common: ( and ) and ;\n if (ch === 40 || ch === 41 || ch === 58) {\n
return scanPunctuator();\n }\n\n // String literal star
ts with single quote (#39) or double quote (#34).\n if (ch === 39 || ch =
== 34) {\n return scanStringLiteral();\n }\n\n if (isId
entifierStart(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.charCodeAt(index + 1))) {\n return scanNume
ricLiteral();\n }\n return 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 index = token.range[1];\n\n re
turn token;\n }\n\n function peek() {\n var pos;\n\n pos = i
ndex;\n lookahead = advance();\n index = pos;\n }\n\n // Thr
ow an exception\n\n function throwError(token, messageFormat) {\n var
error,\n args = Array.prototype.slice.call(arguments, 2),\n
msg = messageFormat.replace(\n /%(\\d)/g,\n func
tion (whole, index) {\n assert(index < args.length, 'Message
reference must be in range');\n return args[index];\n
}\n );\n\n error = new Error(msg);\n error.inde
x = index;\n error.description = msg;\n throw error;\n }\n\n
// Throw an exception because of the token.\n\n function throwUnexpected(tok
en) {\n throwError(token, Messages.UnexpectedToken, token.value);\n }\
n\n // Expect the next token to match the specified punctuator.\n // If no
t, an exception will be thrown.\n\n function expect(value) {\n var tok
en = lex();\n if (token.type !== Token.Punctuator || token.value !== valu
e) {\n throwUnexpected(token);\n }\n }\n\n // Return tru
e if the next token matches the specified punctuator.\n\n function match(valu
e) {\n return lookahead.type === Token.Punctuator && lookahead.value ===
value;\n }\n\n // Return true if the next token matches the specified keyw
ord\n\n function matchKeyword(keyword) {\n return lookahead.type === T
oken.Keyword && lookahead.value === keyword;\n }\n\n function consumeSemic
olon() {\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 skipWhitespace();\n\n if (match
(';')) {\n lex();\n return;\n }\n\n if (look
ahead.type !== Token.EOF && !match('}')) {\n throwUnexpected(lookahea
d);\n }\n }\n\n // 11.1.4 Array Initialiser\n\n function parseAr
rayInitialiser() {\n var elements = [];\n\n expect('[');\n\n
while (!match(']')) {\n if (match(',')) {\n lex();\n
elements.push(null);\n } else {\n elem
ents.push(parseExpression());\n\n if (!match(']')) {\n
expect(',');\n }\n }\n }\n\n ex
pect(']');\n\n return delegate.createArrayExpression(elements);\n }\n\
n // 11.1.5 Object Initialiser\n\n function parseObjectPropertyKey() {\n
var token;\n\n skipWhitespace();\n token = lex();\n\n
// Note: This function is called only from parseObjectProperty(), where\n
// EOF and Punctuator tokens are already filtered out.\n if (token.type
=== Token.StringLiteral || token.type === Token.NumericLiteral) {\n
return delegate.createLiteral(token);\n }\n\n return delegate.crea
teIdentifier(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(token);\n }\n\n key = parseObjectPropertyKe
y();\n expect(':');\n return delegate.createProperty('init', key,
parseExpression());\n }\n\n function parseObjectInitialiser() {\n v
ar 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.createObjectExpression(properties);\n }\n\n
// 11.1.6 The Grouping Operator\n\n function 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 Expres
sions\n\n function parsePrimaryExpression() {\n var type, token, expr;
\n\n if (match('(')) {\n return parseGroupExpression();\n
}\n\n type = lookahead.type;\n\n if (type === Token.Identifier)
{\n expr = delegate.createIdentifier(lex().value);\n } else i
f (type === Token.StringLiteral || type === Token.NumericLiteral) {\n
expr = delegate.createLiteral(lex());\n } else if (type === Token.Keywor
d) {\n if (matchKeyword('this')) {\n lex();\n
expr = delegate.createThisExpression();\n }\n } else if
(type === Token.BooleanLiteral) {\n token = lex();\n toke
n.value = (token.value === 'true');\n expr = delegate.createLiteral(t
oken);\n } else if (type === Token.NullLiteral) {\n token = le
x();\n token.value = null;\n expr = delegate.createLiteral
(token);\n } else if (match('[')) {\n expr = parseArrayInitial
iser();\n } else if (match('{')) {\n expr = parseObjectInitial
iser();\n }\n\n if (expr) {\n return expr;\n }\n
\n throwUnexpected(lex());\n }\n\n // 11.2 Left-Hand-Side Expressio
ns\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 = le
x();\n\n if (!isIdentifierName(token)) {\n throwUnexpected(tok
en);\n }\n\n return delegate.createIdentifier(token.value);\n }
\n\n function parseNonComputedMember() {\n expect('.');\n\n ret
urn parseNonComputedProperty();\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 parseLeftH
andSideExpression() {\n var expr, args, property;\n\n expr = parse
PrimaryExpression();\n\n while (true) {\n if (match('[')) {\n
property = parseComputedMember();\n expr = delegat
e.createMemberExpression('[', expr, property);\n } else if (match('.'
)) {\n property = parseNonComputedMember();\n expr
= delegate.createMemberExpression('.', expr, property);\n } else if
(match('(')) {\n args = parseArguments();\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 parsePostfixExpression = parseLeftHandSideExpre
ssion;\n\n // 11.4 Unary Operators\n\n function parseUnaryExpression() {\n
var token, expr;\n\n if (lookahead.type !== Token.Punctuator && l
ookahead.type !== Token.Keyword) {\n expr = parsePostfixExpression();
\n } else if (match('+') || match('-') || match('!')) {\n toke
n = lex();\n expr = parseUnaryExpression();\n expr = deleg
ate.createUnaryExpression(token.value, expr);\n } else if (matchKeyword('
delete') || matchKeyword('void') || matchKeyword('typeof')) {\n throw
Error({}, Messages.UnexpectedToken);\n } else {\n expr = parse
PostfixExpression();\n }\n\n return expr;\n }\n\n function b
inaryPrecedence(token) {\n var prec = 0;\n\n if (token.type !== To
ken.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 b
reak;\n\n case '==':\n case '!=':\n case '===':\n ca
se '!==':\n prec = 6;\n break;\n\n case '<':\n
case '>':\n case '<=':\n case '>=':\n case 'instanceof':
\n prec = 7;\n break;\n\n case 'in':\n p
rec = 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 prec;\n }\n\n // 11.5 Multipli
cative Operators\n // 11.6 Additive Operators\n // 11.7 Bitwise Shift Oper
ators\n // 11.8 Relational Operators\n // 11.9 Equality Operators\n //
11.10 Binary Bitwise Operators\n // 11.11 Binary Logical Operators\n\n fun
ction parseBinaryExpression() {\n var expr, token, prec, stack, right, op
erator, left, i;\n\n left = parseUnaryExpression();\n\n token = lo
okahead;\n prec = binaryPrecedence(token);\n if (prec === 0) {\n
return left;\n }\n token.prec = prec;\n lex();\n\
n right = parseUnaryExpression();\n\n stack = [left, token, right]
;\n\n while ((prec = binaryPrecedence(lookahead)) > 0) {\n\n /
/ Reduce: make a binary expression 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.createBinaryEx
pression(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 clea
n-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 Operator\n\n function parseCondit
ionalExpression() {\n var expr, consequent, alternate;\n\n expr =
parseBinaryExpression();\n\n if (match('?')) {\n lex();\n
consequent = parseConditionalExpression();\n expect(':');\n
alternate = parseConditionalExpression();\n\n expr = delegat
e.createConditionalExpression(expr, consequent, alternate);\n }\n\n
return expr;\n }\n\n // Simplification since we do not support Assignmen
tExpression.\n var parseExpression = parseConditionalExpression;\n\n // Po
lymer Syntax extensions\n\n // Filter ::\n // Identifier\n // Ident
ifier \"(\" \")\"\n // Identifier \"(\" FilterArguments \")\"\n\n functi
on parseFilter() {\n var identifier, args;\n\n identifier = lex();
\n\n if (identifier.type !== Token.Identifier) {\n throwUnexpe
cted(identifier);\n }\n\n args = match('(') ? parseArguments() : [
];\n\n return delegate.createFilter(identifier.value, args);\n }\n\n
// Filters ::\n // \"|\" Filter\n // Filters \"|\" Filter\n\n fun
ction parseFilters() {\n while (match('|')) {\n lex();\n
parseFilter();\n }\n }\n\n // TopLevel ::\n // LabelledE
xpressions\n // AsExpression\n // InExpression\n // FilterExpress
ion\n\n // AsExpression ::\n // FilterExpression as Identifier\n\n //
InExpression ::\n // Identifier, Identifier in FilterExpression\n //
Identifier in FilterExpression\n\n // FilterExpression ::\n // Expressio
n\n // Expression Filters\n\n function parseTopLevel() {\n skipWh
itespace();\n peek();\n\n var expr = parseExpression();\n i
f (expr) {\n if (lookahead.value === ',' || lookahead.value == 'in' &
&\n expr.type === Syntax.Identifier) {\n pa
rseInExpression(expr);\n } else {\n parseFilters();\n
if (lookahead.value === 'as') {\n parseAsExpre
ssion(expr);\n } else {\n delegate.createTopLe
vel(expr);\n }\n }\n }\n\n if (lookahead
.type !== Token.EOF) {\n throwUnexpected(lookahead);\n }\n
}\n\n function parseAsExpression(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.value === ',') {\n lex();\n if (lo
okahead.type !== Token.Identifier)\n throwUnexpected(lookahead);\
n indexName = lex().value;\n }\n\n lex(); // in\n
var expr = parseExpression();\n parseFilters();\n delegate.crea
teInExpression(identifier.name, indexName, expr);\n }\n\n function parse(c
ode, inDelegate) {\n delegate = inDelegate;\n source = code;\n
index = 0;\n length = source.length;\n lookahead = null;\n
state = {\n labelSet: {}\n };\n\n return parseTopLe
vel();\n }\n\n global.esprima = {\n parse: parse\n };\n})(this);
\n", |
68 "// 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(function (global) {\n 'use stric
t';\n\n function prepareBinding(expressionText, name, node, filterRegistry) {\n
var expression;\n try {\n expression = 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 with
in <template bind/repeat>');\n }\n } catch (ex) {\n console.error('
Invalid expression syntax: ' + expressionText, ex);\n return;\n }\n\n
return function(model, node, oneTime) {\n var binding = expression.getBind
ing(model, filterRegistry, oneTime);\n if (expression.scopeIdent && binding
) {\n node.polymerExpressionScopeIdent_ = expression.scopeIdent;\n
if (expression.indexIdent)\n node.polymerExpressionIndexIdent_ = expre
ssion.indexIdent;\n }\n\n return binding;\n }\n }\n\n // TODO(raf
aelw): Implement simple LRU.\n var expressionParseCache = Object.create(null);\
n\n function getExpression(expressionText) {\n var expression = expressionPa
rseCache[expressionText];\n if (!expression) {\n var delegate = new ASTD
elegate();\n esprima.parse(expressionText, delegate);\n expression = n
ew Expression(delegate);\n expressionParseCache[expressionText] = expressio
n;\n }\n return expression;\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.valueFn_ = function() {\n return value;\n
}\n }\n\n return this.valueFn_;\n }\n }\n\n function IdentPath(na
me) {\n this.name = name;\n this.path = Path.get(name);\n }\n\n IdentPat
h.prototype = {\n valueFn: function() {\n if (!this.valueFn_) {\n
var name = this.name;\n var path = this.path;\n this.valueFn_ = f
unction(model, observer) {\n if (observer)\n observer.addPat
h(model, path);\n\n return path.getValueFrom(model);\n }\n
}\n\n return this.valueFn_;\n },\n\n setValue: function(model, newVal
ue) {\n if (this.path.length == 1);\n model = findScope(model, this.
path[0]);\n\n return this.path.setValueFrom(model, newValue);\n }\n };\
n\n function MemberExpression(object, property, accessor) {\n this.computed
= accessor == '[';\n\n this.dynamicDeps = typeof object == 'function' ||\n
object.dynamicDeps ||\n (this.computed
&& !(property instanceof Literal));\n\n this.simplePath =\n !this.dyn
amicDeps &&\n (property instanceof IdentPath || property instanceof Liter
al) &&\n (object instanceof MemberExpression || object instanceof IdentPa
th);\n\n this.object = this.simplePath ? object : getFn(object);\n this.pr
operty = !this.computed || this.simplePath ?\n property : getFn(property)
;\n }\n\n MemberExpression.prototype = {\n get fullPath() {\n if (!thi
s.fullPath_) {\n\n var parts = this.object instanceof MemberExpression ?\
n this.object.fullPath.slice() : [this.object.name];\n parts.p
ush(this.property instanceof IdentPath ?\n this.property.name : this.
property.value);\n this.fullPath_ = Path.get(parts);\n }\n\n re
turn this.fullPath_;\n },\n\n valueFn: function() {\n if (!this.value
Fn_) {\n var object = this.object;\n\n if (this.simplePath) {\n
var path = this.fullPath;\n\n this.valueFn_ = function(model, ob
server) {\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_ = function(model, observer, filterRegistry) {\n
var context = object(model, observer, filterRegistry);\n\n if (obser
ver)\n observer.addPath(context, path);\n\n return path.
getValueFrom(context);\n }\n } else {\n // Computed pro
perty.\n var property = this.property;\n\n this.valueFn_ = fun
ction(model, observer, filterRegistry) {\n var context = object(model
, observer, filterRegistry);\n var propName = property(model, observe
r, filterRegistry);\n if (observer)\n observer.addPath(c
ontext, [propName]);\n\n return context ? context[propName] : undefin
ed;\n };\n }\n }\n return this.valueFn_;\n },\n\n
setValue: function(model, newValue) {\n if (this.simplePath) {\n t
his.fullPath.setValueFrom(model, newValue);\n return newValue;\n }\n
\n var object = this.object(model);\n var propName = this.property ins
tanceof IdentPath ? this.property.name :\n this.property(model);\n
return object[propName] = newValue;\n }\n };\n\n function Filter(name, arg
s) {\n this.name = name;\n this.args = [];\n for (var i = 0; i < args.l
ength; i++) {\n this.args[i] = getFn(args[i]);\n }\n }\n\n Filter.prot
otype = {\n transform: function(model, observer, filterRegistry, toModelDirec
tion,\n initialArgs) {\n var fn = filterRegistry[thi
s.name];\n var context = model;\n if (fn) {\n context = undefin
ed;\n } else {\n fn = context[this.name];\n if (!fn) {\n
console.error('Cannot find function or filter: ' + this.name);\n r
eturn;\n }\n }\n\n // If toModelDirection is falsey, then the \
"normal\" (dom-bound) direction\n // is used. Otherwise, it looks for a 'to
Model' 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 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(this.args[i])(model, observer, filt
erRegistry));\n }\n\n return fn.apply(context, args);\n }\n };\n\n
function notImplemented() { throw Error('Not Implemented'); }\n\n var unaryOp
erators = {\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) { ret
urn 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 '==='
: 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 ASTDelegate() {\n this.expression =
null;\n this.filters = [];\n this.deps = {};\n this.currentPath = unde
fined;\n this.scopeIdent = undefined;\n this.indexIdent = undefined;\n
this.dynamicDeps = false;\n }\n\n ASTDelegate.prototype = {\n createUnaryEx
pression: function(op, argument) {\n if (!unaryOperators[op])\n thro
w Error('Disallowed operator: ' + op);\n\n argument = getFn(argument);\n\n
return function(model, observer, filterRegistry) {\n return unaryOpe
rators[op](argument(model, observer, filterRegistry));\n };\n },\n\n
createBinaryExpression: function(op, left, right) {\n if (!binaryOperators[
op])\n throw Error('Disallowed operator: ' + op);\n\n left = getFn(l
eft);\n right = getFn(right);\n\n return function(model, observer, fil
terRegistry) {\n return binaryOperators[op](left(model, observer, filterR
egistry),\n right(model, observer, filterRegis
try));\n };\n },\n\n createConditionalExpression: function(test, cons
equent, alternate) {\n test = getFn(test);\n consequent = getFn(conseq
uent);\n alternate = getFn(alternate);\n\n return function(model, obse
rver, filterRegistry) {\n return test(model, observer, filterRegistry) ?\
n consequent(model, observer, filterRegistry) :\n alternat
e(model, observer, filterRegistry);\n }\n },\n\n createIdentifier: fu
nction(name) {\n var ident = new IdentPath(name);\n ident.type = 'Iden
tifier';\n return ident;\n },\n\n createMemberExpression: function(ac
cessor, object, property) {\n var ex = new MemberExpression(object, propert
y, accessor);\n if (ex.dynamicDeps)\n this.dynamicDeps = true;\n
return ex;\n },\n\n createCallExpression: function(expression, args) {\n
if (!(expression instanceof IdentPath))\n throw Error('Only identif
ier function invocations are allowed');\n\n var filter = new Filter(express
ion.name, args);\n\n return function(model, observer, filterRegistry) {\n
return filter.transform(model, observer, filterRegistry, false);\n };
\n },\n\n createLiteral: function(token) {\n return new Literal(token
.value);\n },\n\n createArrayExpression: 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.length; i++)\n arr.push(element
s[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: function(properties) {\n for (var i
= 0; i < properties.length; i++)\n properties[i].value = getFn(propertie
s[i].value);\n\n return 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, fil
terRegistry);\n return obj;\n }\n },\n\n createFilter: functio
n(name, args) {\n this.filters.push(new Filter(name, args));\n },\n\n
createAsExpression: function(expression, scopeIdent) {\n this.expression =
expression;\n this.scopeIdent = scopeIdent;\n },\n\n createInExpress
ion: function(scopeIdent, indexIdent, expression) {\n this.expression = exp
ression;\n this.scopeIdent = scopeIdent;\n this.indexIdent = indexIden
t;\n },\n\n createTopLevel: function(expression) {\n this.expression
= expression;\n },\n\n createThisExpression: notImplemented\n }\n\n func
tion ConstantObservable(value) {\n this.value_ = value;\n }\n\n ConstantObs
ervable.prototype = {\n open: function() { return this.value_; },\n discar
dChanges: function() { return this.value_; },\n deliver: function() {},\n
close: function() {},\n }\n\n function Expression(delegate) {\n this.scopeI
dent = delegate.scopeIdent;\n this.indexIdent = delegate.indexIdent;\n\n i
f (!delegate.expression)\n throw Error('No expression found.');\n\n this
.expression = delegate.expression;\n getFn(this.expression); // forces enumer
ation of path dependencies\n\n this.filters = delegate.filters;\n this.dyn
amicDeps = delegate.dynamicDeps;\n }\n\n Expression.prototype = {\n getBind
ing: function(model, filterRegistry, oneTime) {\n if (oneTime)\n ret
urn this.getValue(model, undefined, filterRegistry);\n\n var observer = new
CompoundObserver();\n // captures deps.\n var firstValue = this.getVa
lue(model, observer, filterRegistry);\n var firstTime = true;\n var se
lf = this;\n\n function valueFn() {\n // deps cannot have changed on
first value retrieval.\n if (firstTime) {\n firstTime = false;\
n return firstValue;\n }\n\n if (self.dynamicDeps)\n
observer.startReset();\n\n var value = self.getValue(model,\n
self.dynamicDeps ? observer : undefined,\n
filterRegistry);\n if (self.dynamicDeps)\n
observer.finishReset();\n\n return value;\n }\n\n function se
tValueFn(newValue) {\n self.setValue(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 = getFn(this.expression)(model, observer, fil
terRegistry);\n for (var i = 0; i < this.filters.length; i++) {\n va
lue = this.filters[i].transform(model, observer, filterRegistry,\n fa
lse, [value]);\n }\n\n return value;\n },\n\n setValue: function
(model, newValue, filterRegistry) {\n var count = this.filters ? this.filte
rs.length : 0;\n while (count-- > 0) {\n newValue = this.filters[cou
nt].transform(model, undefined,\n filterRegistry, true, [newValue]);\
n }\n\n if (this.expression.setValue)\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 \"-webki
t-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).slic
e(2);\n\n // Single ident paths must bind directly to the appropriate scope obj
ect.\n // I.e. Pushed values in two-bindings need to be assigned to the actual
model\n // object.\n function findScope(model, prop) {\n while (model[paren
tScopeName] &&\n !Object.prototype.hasOwnProperty.call(model, prop)) {
\n model = model[parentScopeName];\n }\n\n return model;\n }\n\n fu
nction isLiteralExpression(pathString) {\n switch (pathString) {\n case
'':\n return false;\n\n case 'false':\n case 'null':\n cas
e '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 style
Object: function(value) {\n var parts = [];\n for (var key in value) {
\n parts.push(convertStylePropertyName(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 prepareInstancePositionChanged: function(templa
te) {\n var indexIdent = template.polymerExpressionIndexIdent_;\n if (
!indexIdent)\n return;\n\n return function(templateInstance, index)
{\n templateInstance.model[indexIdent] = index;\n };\n },\n\n
prepareBinding: function(pathString, name, node) {\n var path = Path.get(pa
thString);\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 = findScope(model, path[0]);\n return new PathObserv
er(scope, path);\n };\n }\n return; // bail out early if
pathString is simple path.\n }\n\n return prepareBinding(pathString, n
ame, node, this);\n },\n\n prepareInstanceModel: function(template) {\n
var scopeName = template.polymerExpressionScopeIdent_;\n if (!scopeName)
\n return;\n\n var parentScope = template.templateInstance ?\n
template.templateInstance.model :\n template.model;\n\n var in
dexName = template.polymerExpressionIndexIdent_;\n\n return function(model)
{\n return createScopeObject(parentScope, model, scopeName, indexName);\
n };\n }\n };\n\n var createScopeObject = ('__proto__' in {}) ?\n f
unction(parentScope, model, scopeName, indexName) {\n var scope = {};\n
scope[scopeName] = model;\n scope[indexName] = undefined;\n scope[pa
rentScopeName] = parentScope;\n scope.__proto__ = parentScope;\n retur
n scope;\n } :\n function(parentScope, model, scopeName, indexName) {\n
var scope = Object.create(parentScope);\n Object.defineProperty(scope, s
copeName,\n { value: model, configurable: true, writable: true });\n
Object.defineProperty(scope, indexName,\n { value: undefined, config
urable: true, writable: true });\n Object.defineProperty(scope, parentScope
Name,\n { value: parentScope, configurable: true, writable: true });\n
return scope;\n };\n\n global.PolymerExpressions = PolymerExpressions;\
n PolymerExpressions.getExpression = getExpression;\n})(this);\n", | 67 "// 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(function (global) {\n 'use stric
t';\n\n function prepareBinding(expressionText, name, node, filterRegistry) {\n
var expression;\n try {\n expression = 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 with
in <template bind/repeat>');\n }\n } catch (ex) {\n console.error('
Invalid expression syntax: ' + expressionText, ex);\n return;\n }\n\n
return function(model, node, oneTime) {\n var binding = expression.getBind
ing(model, filterRegistry, oneTime);\n if (expression.scopeIdent && binding
) {\n node.polymerExpressionScopeIdent_ = expression.scopeIdent;\n
if (expression.indexIdent)\n node.polymerExpressionIndexIdent_ = expre
ssion.indexIdent;\n }\n\n return binding;\n }\n }\n\n // TODO(raf
aelw): Implement simple LRU.\n var expressionParseCache = Object.create(null);\
n\n function getExpression(expressionText) {\n var expression = expressionPa
rseCache[expressionText];\n if (!expression) {\n var delegate = new ASTD
elegate();\n esprima.parse(expressionText, delegate);\n expression = n
ew Expression(delegate);\n expressionParseCache[expressionText] = expressio
n;\n }\n return expression;\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.valueFn_ = function() {\n return value;\n
}\n }\n\n return this.valueFn_;\n }\n }\n\n function IdentPath(na
me) {\n this.name = name;\n this.path = Path.get(name);\n }\n\n IdentPat
h.prototype = {\n valueFn: function() {\n if (!this.valueFn_) {\n
var name = this.name;\n var path = this.path;\n this.valueFn_ = f
unction(model, observer) {\n if (observer)\n observer.addPat
h(model, path);\n\n return path.getValueFrom(model);\n }\n
}\n\n return this.valueFn_;\n },\n\n setValue: function(model, newVal
ue) {\n if (this.path.length == 1);\n model = findScope(model, this.
path[0]);\n\n return this.path.setValueFrom(model, newValue);\n }\n };\
n\n function MemberExpression(object, property, accessor) {\n this.computed
= accessor == '[';\n\n this.dynamicDeps = typeof object == 'function' ||\n
object.dynamicDeps ||\n (this.computed
&& !(property instanceof Literal));\n\n this.simplePath =\n !this.dyn
amicDeps &&\n (property instanceof IdentPath || property instanceof Liter
al) &&\n (object instanceof MemberExpression || object instanceof IdentPa
th);\n\n this.object = this.simplePath ? object : getFn(object);\n this.pr
operty = !this.computed || this.simplePath ?\n property : getFn(property)
;\n }\n\n MemberExpression.prototype = {\n get fullPath() {\n if (!thi
s.fullPath_) {\n\n var parts = this.object instanceof MemberExpression ?\
n this.object.fullPath.slice() : [this.object.name];\n parts.p
ush(this.property instanceof IdentPath ?\n this.property.name : this.
property.value);\n this.fullPath_ = Path.get(parts);\n }\n\n re
turn this.fullPath_;\n },\n\n valueFn: function() {\n if (!this.value
Fn_) {\n var object = this.object;\n\n if (this.simplePath) {\n
var path = this.fullPath;\n\n this.valueFn_ = function(model, ob
server) {\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_ = function(model, observer, filterRegistry) {\n
var context = object(model, observer, filterRegistry);\n\n if (obser
ver)\n observer.addPath(context, path);\n\n return path.
getValueFrom(context);\n }\n } else {\n // Computed pro
perty.\n var property = this.property;\n\n this.valueFn_ = fun
ction(model, observer, filterRegistry) {\n var context = object(model
, observer, filterRegistry);\n var propName = property(model, observe
r, filterRegistry);\n if (observer)\n observer.addPath(c
ontext, [propName]);\n\n return context ? context[propName] : undefin
ed;\n };\n }\n }\n return this.valueFn_;\n },\n\n
setValue: function(model, newValue) {\n if (this.simplePath) {\n t
his.fullPath.setValueFrom(model, newValue);\n return newValue;\n }\n
\n var object = this.object(model);\n var propName = this.property ins
tanceof IdentPath ? this.property.name :\n this.property(model);\n
return object[propName] = newValue;\n }\n };\n\n function Filter(name, arg
s) {\n this.name = name;\n this.args = [];\n for (var i = 0; i < args.l
ength; i++) {\n this.args[i] = getFn(args[i]);\n }\n }\n\n Filter.prot
otype = {\n transform: function(model, observer, filterRegistry, toModelDirec
tion,\n initialArgs) {\n var fn = filterRegistry[thi
s.name];\n var context = model;\n if (fn) {\n context = undefin
ed;\n } else {\n fn = context[this.name];\n if (!fn) {\n
console.error('Cannot find function or filter: ' + this.name);\n r
eturn;\n }\n }\n\n // If toModelDirection is falsey, then the \
"normal\" (dom-bound) direction\n // is used. Otherwise, it looks for a 'to
Model' 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 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(this.args[i])(model, observer, filt
erRegistry));\n }\n\n return fn.apply(context, args);\n }\n };\n\n
function notImplemented() { throw Error('Not Implemented'); }\n\n var unaryOp
erators = {\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) { ret
urn 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 '==='
: 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 ASTDelegate() {\n this.expression =
null;\n this.filters = [];\n this.deps = {};\n this.currentPath = unde
fined;\n this.scopeIdent = undefined;\n this.indexIdent = undefined;\n
this.dynamicDeps = false;\n }\n\n ASTDelegate.prototype = {\n createUnaryEx
pression: function(op, argument) {\n if (!unaryOperators[op])\n thro
w Error('Disallowed operator: ' + op);\n\n argument = getFn(argument);\n\n
return function(model, observer, filterRegistry) {\n return unaryOpe
rators[op](argument(model, observer, filterRegistry));\n };\n },\n\n
createBinaryExpression: function(op, left, right) {\n if (!binaryOperators[
op])\n throw Error('Disallowed operator: ' + op);\n\n left = getFn(l
eft);\n right = getFn(right);\n\n switch (op) {\n case '||':\n
this.dynamicDeps = true;\n return function(model, observer, fi
lterRegistry) {\n return left(model, observer, filterRegistry) ||\n
right(model, observer, filterRegistry);\n };\n cas
e '&&':\n this.dynamicDeps = true;\n return function(model, ob
server, filterRegistry) {\n return left(model, observer, filterRegist
ry) &&\n right(model, observer, filterRegistry);\n };\n
}\n\n return function(model, observer, filterRegistry) {\n retu
rn 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 = ge
tFn(alternate);\n\n this.dynamicDeps = true;\n\n return function(model
, observer, filterRegistry) {\n return test(model, observer, filterRegist
ry) ?\n consequent(model, observer, filterRegistry) :\n al
ternate(model, observer, filterRegistry);\n }\n },\n\n createIdentifi
er: function(name) {\n var ident = new IdentPath(name);\n ident.type =
'Identifier';\n return ident;\n },\n\n createMemberExpression: funct
ion(accessor, object, property) {\n var ex = new MemberExpression(object, p
roperty, accessor);\n if (ex.dynamicDeps)\n this.dynamicDeps = true;
\n return ex;\n },\n\n createCallExpression: function(expression, arg
s) {\n if (!(expression instanceof IdentPath))\n throw Error('Only i
dentifier function invocations are allowed');\n\n var filter = new Filter(e
xpression.name, args);\n\n return function(model, observer, filterRegistry)
{\n return filter.transform(model, observer, filterRegistry, false);\n
};\n },\n\n createLiteral: function(token) {\n return new Literal
(token.value);\n },\n\n createArrayExpression: 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 a
rr = []\n for (var i = 0; i < elements.length; i++)\n arr.push(e
lements[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: function(properties) {\n for
(var i = 0; i < properties.length; i++)\n properties[i].value = getFn(pro
perties[i].value);\n\n return 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, observe
r, filterRegistry);\n return obj;\n }\n },\n\n createFilter: f
unction(name, args) {\n this.filters.push(new Filter(name, args));\n },\
n\n createAsExpression: function(expression, scopeIdent) {\n this.expres
sion = expression;\n this.scopeIdent = scopeIdent;\n },\n\n createInE
xpression: function(scopeIdent, indexIdent, expression) {\n this.expression
= expression;\n this.scopeIdent = scopeIdent;\n this.indexIdent = ind
exIdent;\n },\n\n createTopLevel: function(expression) {\n this.expre
ssion = expression;\n },\n\n createThisExpression: notImplemented\n }\n\n
function ConstantObservable(value) {\n this.value_ = value;\n }\n\n Const
antObservable.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.indexIdent = delegate.indexIdent;\n\
n if (!delegate.expression)\n throw Error('No expression found.');\n\n
this.expression = delegate.expression;\n getFn(this.expression); // forces
enumeration of path dependencies\n\n this.filters = delegate.filters;\n th
is.dynamicDeps = delegate.dynamicDeps;\n }\n\n Expression.prototype = {\n g
etBinding: function(model, filterRegistry, 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, filterRegistry);\n var firstTime = true;\n
var self = this;\n\n function valueFn() {\n // deps cannot have chan
ged on first value retrieval.\n if (firstTime) {\n firstTime = f
alse;\n return firstValue;\n }\n\n if (self.dynamicDeps)\
n observer.startReset();\n\n var value = self.getValue(model,\n
self.dynamicDeps ? observer : undefined,\n
filterRegistry);\n if (self.dynamicDeps)\n
observer.finishReset();\n\n return value;\n }\n\n funct
ion setValueFn(newValue) {\n self.setValue(model, newValue, filterRegistr
y);\n return newValue;\n }\n\n return new ObserverTransform(obs
erver, valueFn, setValueFn, true);\n },\n\n getValue: function(model, obse
rver, filterRegistry) {\n var value = getFn(this.expression)(model, observe
r, filterRegistry);\n for (var i = 0; i < this.filters.length; i++) {\n
value = this.filters[i].transform(model, observer, filterRegistry,\n
false, [value]);\n }\n\n return value;\n },\n\n setValue: fu
nction(model, newValue, filterRegistry) {\n var count = this.filters ? this
.filters.length : 0;\n while (count-- > 0) {\n newValue = this.filte
rs[count].transform(model, undefined,\n filterRegistry, true, [newVal
ue]);\n }\n\n if (this.expression.setValue)\n return this.expre
ssion.setValue(model, newValue);\n }\n }\n\n /**\n * Converts a style pro
perty name to a css property name. For example:\n * \"WebkitUserSelect\" to \"
-webkit-user-select\"\n */\n function convertStylePropertyName(name) {\n r
eturn String(name).replace(/[A-Z]/g, function(c) {\n return '-' + c.toLower
Case();\n });\n }\n\n var parentScopeName = '@' + Math.random().toString(36
).slice(2);\n\n // Single ident paths must bind directly to the appropriate sco
pe object.\n // I.e. Pushed values in two-bindings need to be assigned to the a
ctual model\n // object.\n function findScope(model, prop) {\n while (model
[parentScopeName] &&\n !Object.prototype.hasOwnProperty.call(model, pr
op)) {\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 PolymerExpressi
ons() {}\n\n PolymerExpressions.prototype = {\n // \"built-in\" filters\n
styleObject: function(value) {\n var parts = [];\n for (var key in va
lue) {\n parts.push(convertStylePropertyName(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[k
ey])\n tokens.push(key);\n }\n return tokens.join(' ');\n
},\n\n // binding delegate API\n prepareInstancePositionChanged: function(
template) {\n var indexIdent = template.polymerExpressionIndexIdent_;\n
if (!indexIdent)\n return;\n\n return function(templateInstance, i
ndex) {\n templateInstance.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 = findScope(model, path[0]);\n return new Path
Observer(scope, path);\n };\n }\n return; // bail out ear
ly if pathString is simple path.\n }\n\n return prepareBinding(pathStr
ing, name, node, this);\n },\n\n prepareInstanceModel: function(template)
{\n var scopeName = template.polymerExpressionScopeIdent_;\n if (!scop
eName)\n return;\n\n var parentScope = template.templateInstance ?\n
template.templateInstance.model :\n template.model;\n\n
var indexName = template.polymerExpressionIndexIdent_;\n\n return function(
model) {\n return createScopeObject(parentScope, model, scopeName, indexN
ame);\n };\n }\n };\n\n var createScopeObject = ('__proto__' in {}) ?\
n function(parentScope, model, scopeName, indexName) {\n var scope = {};
\n scope[scopeName] = model;\n scope[indexName] = undefined;\n sc
ope[parentScopeName] = parentScope;\n scope.__proto__ = parentScope;\n
return scope;\n } :\n function(parentScope, model, scopeName, indexName)
{\n var scope = Object.create(parentScope);\n Object.defineProperty(sc
ope, scopeName,\n { value: model, configurable: true, writable: true })
;\n Object.defineProperty(scope, indexName,\n { value: undefined,
configurable: true, writable: true });\n Object.defineProperty(scope, paren
tScopeName,\n { value: parentScope, configurable: true, writable: true
});\n return scope;\n };\n\n global.PolymerExpressions = PolymerExpress
ions;\n PolymerExpressions.getExpression = getExpression;\n})(this);\n", |
| 68 "/*\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://poly
mer.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
part of the polymer project is also\n * subject to an additional IP rights grant
found at http://polymer.github.io/PATENTS.txt\n */\nPolymer = {\n version: '0.
3.5-5d00e4b'\n};\n", |
69 "/*\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://poly
mer.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
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// TODO(sorvell): this en
sures Polymer is an object and not a function\n// Platform is currently defining
it as a function to allow for async loading\n// of polymer; once we refine the
loading process this likely goes away.\nif (typeof window.Polymer === 'function'
) {\n Polymer = {};\n}\n\n", | 69 "/*\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://poly
mer.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
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// TODO(sorvell): this en
sures Polymer is an object and not a function\n// Platform is currently defining
it as a function to allow for async loading\n// of polymer; once we refine the
loading process this likely goes away.\nif (typeof window.Polymer === 'function'
) {\n Polymer = {};\n}\n\n", |
70 "/*\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://poly
mer.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
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 /
/ copy own properties from 'api' to 'prototype, with name hinting for 'super'\n
function extend(prototype, api) {\n if (prototype && api) {\n // use on
ly own properties of 'api'\n Object.getOwnPropertyNames(api).forEach(functi
on(n) {\n // acquire property descriptor\n var pd = Object.getOwnP
ropertyDescriptor(api, n);\n if (pd) {\n // clone property via d
escriptor\n Object.defineProperty(prototype, n, pd);\n // cach
e 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 // expor
ts\n\n scope.extend = extend;\n\n})(Polymer);\n", | 70 "/*\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://poly
mer.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
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 /
/ copy own properties from 'api' to 'prototype, with name hinting for 'super'\n
function extend(prototype, api) {\n if (prototype && api) {\n // use on
ly own properties of 'api'\n Object.getOwnPropertyNames(api).forEach(functi
on(n) {\n // acquire property descriptor\n var pd = Object.getOwnP
ropertyDescriptor(api, n);\n if (pd) {\n // clone property via d
escriptor\n Object.defineProperty(prototype, n, pd);\n // cach
e 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 // expor
ts\n\n scope.extend = extend;\n\n})(Polymer);\n", |
71 "/*\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://poly
mer.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
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-register
ed,\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.context = inContext;\n this.b
oundComplete = this.complete.bind(this)\n };\n Job.prototype = {\n go: func
tion(callback, wait) {\n this.callback = callback;\n var h;\n if
(!wait) {\n h = requestAnimationFrame(this.boundComplete);\n this.
handle = function() {\n cancelAnimationFrame(h);\n }\n } el
se {\n h = setTimeout(this.boundComplete, wait);\n this.handle = f
unction() {\n clearTimeout(h);\n }\n }\n },\n stop: f
unction() {\n if (this.handle) {\n this.handle();\n this.hand
le = 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.s
top();\n } else {\n job = new Job(this);\n }\n job.go(callback, wa
it);\n return job;\n }\n \n // exports \n\n scope.job = job;\n \n})(Poly
mer);\n", | 71 "/*\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://poly
mer.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
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-register
ed,\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.context = inContext;\n this.b
oundComplete = this.complete.bind(this)\n };\n Job.prototype = {\n go: func
tion(callback, wait) {\n this.callback = callback;\n var h;\n if
(!wait) {\n h = requestAnimationFrame(this.boundComplete);\n this.
handle = function() {\n cancelAnimationFrame(h);\n }\n } el
se {\n h = setTimeout(this.boundComplete, wait);\n this.handle = f
unction() {\n clearTimeout(h);\n }\n }\n },\n stop: f
unction() {\n if (this.handle) {\n this.handle();\n this.hand
le = 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.s
top();\n } else {\n job = new Job(this);\n }\n job.go(callback, wa
it);\n return job;\n }\n \n // exports \n\n scope.job = job;\n \n})(Poly
mer);\n", |
72 "/*\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://poly
mer.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
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 v
ar registry = {};\n\n HTMLElement.register = function(tag, prototype) {\n re
gistry[tag] = prototype;\n }\n\n // get prototype mapped to node <tag>\n HTML
Element.getPrototypeForTag = function(tag) {\n var prototype = !tag ? HTMLEle
ment.prototype : registry[tag];\n // TODO(sjmiles): creating <tag> is likely
to have wasteful side-effects\n return prototype || Object.getPrototypeOf(doc
ument.createElement(tag));\n };\n\n // we have to flag propagation stoppage fo
r the event dispatcher\n var originalStopPropagation = Event.prototype.stopProp
agation;\n Event.prototype.stopPropagation = function() {\n this.cancelBubbl
e = true;\n originalStopPropagation.apply(this, arguments);\n };\n \n // T
ODO(sorvell): remove when we're sure imports does not need\n // to load stylesh
eets\n /*\n HTMLImports.importer.preloadSelectors += \n ', polymer-elemen
t link[rel=stylesheet]';\n */\n})(Polymer);\n", | 72 "/*\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://poly
mer.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
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 v
ar registry = {};\n\n HTMLElement.register = function(tag, prototype) {\n re
gistry[tag] = prototype;\n }\n\n // get prototype mapped to node <tag>\n HTML
Element.getPrototypeForTag = function(tag) {\n var prototype = !tag ? HTMLEle
ment.prototype : registry[tag];\n // TODO(sjmiles): creating <tag> is likely
to have wasteful side-effects\n return prototype || Object.getPrototypeOf(doc
ument.createElement(tag));\n };\n\n // we have to flag propagation stoppage fo
r the event dispatcher\n var originalStopPropagation = Event.prototype.stopProp
agation;\n Event.prototype.stopPropagation = function() {\n this.cancelBubbl
e = true;\n originalStopPropagation.apply(this, arguments);\n };\n \n // T
ODO(sorvell): remove when we're sure imports does not need\n // to load stylesh
eets\n /*\n HTMLImports.importer.preloadSelectors += \n ', polymer-elemen
t link[rel=stylesheet]';\n */\n})(Polymer);\n", |
73 "/*\r\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserve
d.\r\n * This code may only be used under the BSD style 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 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 (funct
ion(scope) {\r\n // super\r\n\r\n // `arrayOfArgs` is an optional array of
args like one might pass\r\n // to `Function.apply`\r\n\r\n // TODO(sjmil
es):\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
each function exists on only one \r\n // prototype chain i.e. we use the f
unction object for memoizing)\r\n // perhaps we can bookkeep on the protot
ype itself instead\r\n function $super(arrayOfArgs) {\r\n // since we ar
e thunking a method call, performance is important here: \r\n // memoize al
l 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 ins
talled declaratively (has no .nom property)');\r\n }\r\n // super
prototype is either cached or we have to find it\r\n // by searching __pr
oto__ (at the 'top')\r\n // invariant: because we cache _super on fn belo
w, 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 th
e '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 inher
ited 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 fu
nction nameInThis(value) {\r\n var p = this.__proto__;\r\n while (p &&
p !== HTMLElement.prototype) {\r\n // TODO(sjmiles): getOwnPropertyNames
is 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 =
Object.getOwnPropertyDescriptor(p, n);\r\n if (typeof d.value === 'fun
ction' && 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 memoizeS
uper(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 =
name;\r\n }\r\n return method._super = s;\r\n }\r\n\r\n functio
n nextSuper(proto, name, caller) {\r\n // look for an inherited prototype t
hat implements name\r\n while (proto) {\r\n if ((proto[name] !== cal
ler) && proto[name]) {\r\n return proto;\r\n }\r\n proto
= getPrototypeOf(proto);\r\n }\r\n // must not return null, or we lose
our 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 excep
tion?\r\n return Object;\r\n }\r\n\r\n // NOTE: In some platforms (IE
10) the prototype chain is faked via \r\n // __proto__. Therefore, always get
prototype via __proto__ instead of\r\n // the more standard Object.getProtot
ypeOf.\r\n function getPrototypeOf(prototype) {\r\n return prototype.__p
roto__;\r\n }\r\n\r\n // utility function to precompute name tags for func
tions\r\n // in a (unchained) prototype\r\n function hintSuper(prototype)
{\r\n // tag functions with their prototype name to optimize\r\n // su
per call invocations\r\n for (var n in prototype) {\r\n var pd = Obj
ect.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", | 73 "/*\r\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserve
d.\r\n * This code may only be used under the BSD style 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 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 (funct
ion(scope) {\r\n // super\r\n\r\n // `arrayOfArgs` is an optional array of
args like one might pass\r\n // to `Function.apply`\r\n\r\n // TODO(sjmil
es):\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
each function exists on only one \r\n // prototype chain i.e. we use the f
unction object for memoizing)\r\n // perhaps we can bookkeep on the protot
ype itself instead\r\n function $super(arrayOfArgs) {\r\n // since we ar
e thunking a method call, performance is important here: \r\n // memoize al
l 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 ins
talled declaratively (has no .nom property)');\r\n }\r\n // super
prototype is either cached or we have to find it\r\n // by searching __pr
oto__ (at the 'top')\r\n // invariant: because we cache _super on fn belo
w, 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 th
e '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 inher
ited 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 fu
nction nameInThis(value) {\r\n var p = this.__proto__;\r\n while (p &&
p !== HTMLElement.prototype) {\r\n // TODO(sjmiles): getOwnPropertyNames
is 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 =
Object.getOwnPropertyDescriptor(p, n);\r\n if (typeof d.value === 'fun
ction' && 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 memoizeS
uper(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 =
name;\r\n }\r\n return method._super = s;\r\n }\r\n\r\n functio
n nextSuper(proto, name, caller) {\r\n // look for an inherited prototype t
hat implements name\r\n while (proto) {\r\n if ((proto[name] !== cal
ler) && proto[name]) {\r\n return proto;\r\n }\r\n proto
= getPrototypeOf(proto);\r\n }\r\n // must not return null, or we lose
our 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 excep
tion?\r\n return Object;\r\n }\r\n\r\n // NOTE: In some platforms (IE
10) the prototype chain is faked via \r\n // __proto__. Therefore, always get
prototype via __proto__ instead of\r\n // the more standard Object.getProtot
ypeOf.\r\n function getPrototypeOf(prototype) {\r\n return prototype.__p
roto__;\r\n }\r\n\r\n // utility function to precompute name tags for func
tions\r\n // in a (unchained) prototype\r\n function hintSuper(prototype)
{\r\n // tag functions with their prototype name to optimize\r\n // su
per call invocations\r\n for (var n in prototype) {\r\n var pd = Obj
ect.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", |
74 "/*\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://poly
mer.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
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 v
ar typeHandlers = {\n string: function(value) {\n return value;\n },\
n date: function(value) {\n return new Date(Date.parse(value) || Date.no
w());\n },\n boolean: function(value) {\n if (value === '') {\n
return true;\n }\n return value === 'false' ? false : !!value;\n
},\n number: function(value) {\n var n = parseFloat(value);\n // he
x values like \"0xFFFF\" parseFloat as 0\n if (n === 0) {\n n = pars
eInt(value);\n }\n return isNaN(n) ? value : n;\n // this code di
sabled because encoded values (like \"0xFFFF\")\n // do not round trip to t
heir original format\n //return (String(floatVal) === value) ? floatVal : v
alue;\n },\n object: function(value, currentValue) {\n if (currentVal
ue === null) {\n return value;\n }\n try {\n // If the s
tring is an object, we can parse is with the JSON library.\n // include c
onvenience replace for single-quotes. If the author omits\n // quotes alt
ogether, parse will fail.\n return JSON.parse(value.replace(/'/g, '\"'));
\n } catch(e) {\n // The object isn't valid JSON, return the raw val
ue\n return value;\n }\n },\n // avoid deserialization of func
tions\n 'function': function(value, currentValue) {\n return currentValu
e;\n }\n };\n\n function deserializeValue(value, currentValue) {\n // at
tempt to infer type from default value\n var inferredType = typeof currentVal
ue;\n // invent 'date' type value for Date\n if (currentValue instanceof D
ate) {\n inferredType = 'date';\n }\n // delegate deserialization via
type string\n return typeHandlers[inferredType](value, currentValue);\n }\n
\n // exports\n\n scope.deserializeValue = deserializeValue;\n\n})(Polymer);\n
", | 74 "/*\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://poly
mer.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
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 f
unction noopHandler(value) {\n return value;\n }\n\n var typeHandlers = {\n
string: noopHandler,\n 'undefined': noopHandler,\n date: function(valu
e) {\n return new Date(Date.parse(value) || Date.now());\n },\n boole
an: function(value) {\n if (value === '') {\n return true;\n }\
n return value === 'false' ? false : !!value;\n },\n number: function
(value) {\n var n = parseFloat(value);\n // hex values like \"0xFFFF\"
parseFloat as 0\n if (n === 0) {\n n = parseInt(value);\n }\n
return isNaN(n) ? value : n;\n // this code disabled because encoded v
alues (like \"0xFFFF\")\n // do not round trip to their original format\n
//return (String(floatVal) === value) ? floatVal : value;\n },\n objec
t: function(value, currentValue) {\n if (currentValue === null) {\n
return value;\n }\n try {\n // If the string is an object, we c
an parse is with the JSON library.\n // include convenience replace for s
ingle-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': f
unction(value, currentValue) {\n return currentValue;\n }\n };\n\n fun
ction deserializeValue(value, currentValue) {\n // attempt to infer type from
default value\n var inferredType = typeof currentValue;\n // invent 'date
' type value for Date\n if (currentValue instanceof Date) {\n inferredTy
pe = 'date';\n }\n // delegate deserialization via type string\n return
typeHandlers[inferredType](value, currentValue);\n }\n\n // exports\n\n scop
e.deserializeValue = deserializeValue;\n\n})(Polymer);\n", |
75 "/*\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://poly
mer.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
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 //
imports\n\n var extend = scope.extend;\n\n // module\n\n var api = {};\n\n a
pi.declaration = {};\n api.instance = {};\n\n api.publish = function(apis, pro
totype) {\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", | 75 "/*\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://poly
mer.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
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 //
imports\n\n var extend = scope.extend;\n\n // module\n\n var api = {};\n\n a
pi.declaration = {};\n api.instance = {};\n\n api.publish = function(apis, pro
totype) {\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", |
76 "/*\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://poly
mer.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
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 v
ar utils = {\n /**\n * Invokes a function asynchronously. The context of
the callback\n * function is bound to 'this' automatically.\n * @meth
od async\n * @param {Function|String} method\n * @param {any|Array} ar
gs\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 // e
xecute `fn` sooner or later\n var handle = timeout ? setTimeout(fn, timeout
) :\n requestAnimationFrame(fn);\n // NOTE: switch on inverting ha
ndle to determine which time is used.\n return timeout ? handle : ~handle;\
n },\n cancelAsync: function(handle) {\n if (handle < 0) {\n c
ancelAnimationFrame(~handle);\n } else {\n clearTimeout(handle);\n
}\n },\n /**\n * Fire an event.\n * @method fire\n * @r
eturns {Object} event\n * @param {string} type An event name.\n * @par
am {any} detail\n * @param {Node} onNode Target node.\n */\n fire:
function(type, detail, onNode, bubbles, cancelable) {\n var node = onNode |
| this;\n var detail = detail || {};\n var event = new CustomEvent(typ
e, {\n bubbles: (bubbles !== undefined ? bubbles : true), \n cance
lable: (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 * @p
aram {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 fr
om 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: function(anew, old, className) {\n if (old) {\n
old.classList.remove(className);\n }\n if (anew) {\n anew.cla
ssList.add(className);\n }\n },\n /**\n * Inject HTML which cont
ains markup bound to this element into\n * a target element (replacing targ
et element content).\n * @param String html to inject\n * @param Eleme
nt 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 (elemen
t) {\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 v
ar nob = {};\n\n // deprecated\n\n utils.asyncMethod = utils.async;\n\n // ex
ports\n\n scope.api.instance.utils = utils;\n scope.nop = nop;\n scope.nob =
nob;\n\n})(Polymer);\n", | 76 "/*\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://poly
mer.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
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 v
ar utils = {\n /**\n * Invokes a function asynchronously. The context of
the callback\n * function is bound to 'this' automatically.\n * @meth
od async\n * @param {Function|String} method\n * @param {any|Array} ar
gs\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 // e
xecute `fn` sooner or later\n var handle = timeout ? setTimeout(fn, timeout
) :\n requestAnimationFrame(fn);\n // NOTE: switch on inverting ha
ndle to determine which time is used.\n return timeout ? handle : ~handle;\
n },\n cancelAsync: function(handle) {\n if (handle < 0) {\n c
ancelAnimationFrame(~handle);\n } else {\n clearTimeout(handle);\n
}\n },\n /**\n * Fire an event.\n * @method fire\n * @r
eturns {Object} event\n * @param {string} type An event name.\n * @par
am {any} detail\n * @param {Node} onNode Target node.\n * @param {Bool
ean} bubbles Set false to prevent bubbling, defaults to true\n * @param {Bo
olean} 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 === null || detail === undefined ?
{} : detail;\n var event = new CustomEvent(type, {\n bubbles: bubbl
es !== undefined ? bubbles : true,\n cancelable: cancelable !== undefined
? cancelable : true,\n detail: detail\n });\n node.dispatchEve
nt(event);\n return event;\n },\n /**\n * Fire an event asynchro
nously.\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\", argumen
ts);\n },\n /**\n * Remove class from old, add class to anew, if they
exist.\n * @param classFollows\n * @param anew A node.\n * @para
m old A node\n * @param className\n */\n classFollows: function(ane
w, old, className) {\n if (old) {\n old.classList.remove(className);
\n }\n if (anew) {\n anew.classList.add(className);\n }\n
},\n /**\n * Inject HTML which contains markup bound to this element
into\n * a target element (replacing target element content).\n * @par
am String html to inject\n * @param Element target element\n */\n i
njectBoundHTML: function(html, element) {\n var template = document.createE
lement('template');\n template.innerHTML = html;\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 nob = {};\n\n // deprecated\n\
n utils.asyncMethod = utils.async;\n\n // exports\n\n scope.api.instance.util
s = utils;\n scope.nop = nop;\n scope.nob = nob;\n\n})(Polymer);\n", |
77 "/*\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://poly
mer.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
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_PREFIX = 'on-';\n\n
// instance events api\n var events = {\n // read-only\n EVENT_PREFIX:
EVENT_PREFIX,\n // event listeners on host\n addHostListeners: function()
{\n var events = this.eventDelegates;\n log.events && (Object.keys(eve
nts).length > 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 // m
ultiple event listeners ('host' and 'instance') and Node.bind\n // by defau
lt supports 1 thing being bound.\n for (var type in events) {\n var
methodName = events[type];\n this.addEventListener(type, this.element.get
EventHandler(this, this,\n
methodName));\n }\n },\n // call 'method' or function meth
od on 'obj' with 'args', if the method exists\n dispatchMethod: function(obj,
method, args) {\n if (obj) {\n log.events && console.group('[%s] di
spatch [%s]', obj.localName, method);\n var fn = typeof method === 'funct
ion' ? 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.instanc
e.events = events;\n\n})(Polymer);\n", | 77 "/*\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://poly
mer.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
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_PREFIX = 'on-';\n\n
// instance events api\n var events = {\n // read-only\n EVENT_PREFIX:
EVENT_PREFIX,\n // event listeners on host\n addHostListeners: function()
{\n var events = this.eventDelegates;\n log.events && (Object.keys(eve
nts).length > 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 // m
ultiple event listeners ('host' and 'instance') and Node.bind\n // by defau
lt supports 1 thing being bound.\n for (var type in events) {\n var
methodName = events[type];\n PolymerGestures.addEventListener(this, type,
this.element.getEventHandler(this, this, 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.e
vents && console.group('[%s] dispatch [%s]', obj.localName, method);\n va
r 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 PolymerGestures
event listener logic\n scope.addEventListener = PolymerGestures.addEventListene
r;\n scope.removeEventListener = PolymerGestures.removeEventListener;\n\n})(Pol
ymer);\n", |
78 "/*\r\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserve
d.\r\n * This code may only be used under the BSD style 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 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(functi
on(scope) {\r\n\r\n // instance api for attributes\r\n\r\n var attributes = {\
r\n copyInstanceAttributes: function () {\r\n var a$ = this._instanceAtt
ributes;\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 t
akeAttributes: function() {\r\n // if we have no publish lookup table, we h
ave no attributes to take\r\n // TODO(sjmiles): ad hoc\r\n if (this._p
ublishLC) {\r\n for (var i=0, a$=this.attributes, l=a$.length, a; (a=a$[i
]) && i<l; i++) {\r\n this.attributeToProperty(a.name, a.value);\r\n
}\r\n }\r\n },\r\n // if attribute 'name' is mapped to a propert
y, deserialize\r\n // 'value' into that property\r\n attributeToProperty:
function(name, value) {\r\n // try to match this attribute to a property (a
ttributes 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 // themselves\r\n if (value
&& value.search(scope.bindPattern) >= 0) {\r\n return;\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 valu
e has changed\r\n if (value !== currentValue) {\r\n // install n
ew value (has side-effects)\r\n this[name] = value;\r\n }\r\n
}\r\n },\r\n // return the published property matching name, or undefin
ed\r\n propertyForAttribute: function(name) {\r\n var match = this._publ
ishLC && this._publishLC[name];\r\n //console.log('propertyForAttribute:',
name, 'matches', match);\r\n return match;\r\n },\r\n // convert repr
esentation of 'stringValue' based on type of 'currentValue'\r\n deserializeVa
lue: function(stringValue, currentValue) {\r\n return scope.deserializeValu
e(stringValue, currentValue);\r\n },\r\n serializeValue: function(value, i
nferredType) {\r\n if (inferredType === 'boolean') {\r\n return valu
e ? '' : undefined;\r\n } else if (inferredType !== 'object' && inferredTyp
e !== 'function'\r\n && value !== undefined) {\r\n return value;
\r\n }\r\n },\r\n reflectPropertyToAttribute: function(name) {\r\n
var inferredType = typeof this[name];\r\n // try to intelligently serial
ize property value\r\n var serializedValue = this.serializeValue(this[name]
, inferredType);\r\n // boolean properties must reflect as boolean attribut
es\r\n if (serializedValue !== undefined) {\r\n this.setAttribute(na
me, serializedValue);\r\n // TODO(sorvell): we should remove attr for all
properties\r\n // that have undefined serialization; however, we will ne
ed to\r\n // refine the attr reflection system to achieve this; pica, for
example,\r\n // relies on having inferredType object properties not remo
ved as\r\n // attrs.\r\n } else if (inferredType === 'boolean') {\r\
n this.removeAttribute(name);\r\n }\r\n }\r\n };\r\n\r\n // exp
orts\r\n\r\n scope.api.instance.attributes = attributes;\r\n\r\n})(Polymer);\r\
n", | 78 "/*\r\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserve
d.\r\n * This code may only be used under the BSD style 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 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(functi
on(scope) {\r\n\r\n // instance api for attributes\r\n\r\n var attributes = {\
r\n copyInstanceAttributes: function () {\r\n var a$ = this._instanceAtt
ributes;\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 t
akeAttributes: function() {\r\n // if we have no publish lookup table, we h
ave no attributes to take\r\n // TODO(sjmiles): ad hoc\r\n if (this._p
ublishLC) {\r\n for (var i=0, a$=this.attributes, l=a$.length, a; (a=a$[i
]) && i<l; i++) {\r\n this.attributeToProperty(a.name, a.value);\r\n
}\r\n }\r\n },\r\n // if attribute 'name' is mapped to a propert
y, deserialize\r\n // 'value' into that property\r\n attributeToProperty:
function(name, value) {\r\n // try to match this attribute to a property (a
ttributes 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 // themselves\r\n if (value
&& value.search(scope.bindPattern) >= 0) {\r\n return;\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 valu
e has changed\r\n if (value !== currentValue) {\r\n // install n
ew value (has side-effects)\r\n this[name] = value;\r\n }\r\n
}\r\n },\r\n // return the published property matching name, or undefin
ed\r\n propertyForAttribute: function(name) {\r\n var match = this._publ
ishLC && this._publishLC[name];\r\n //console.log('propertyForAttribute:',
name, 'matches', match);\r\n return match;\r\n },\r\n // convert repr
esentation of 'stringValue' based on type of 'currentValue'\r\n deserializeVa
lue: function(stringValue, currentValue) {\r\n return scope.deserializeValu
e(stringValue, currentValue);\r\n },\r\n serializeValue: function(value, i
nferredType) {\r\n if (inferredType === 'boolean') {\r\n return valu
e ? '' : undefined;\r\n } else if (inferredType !== 'object' && inferredTyp
e !== 'function'\r\n && value !== undefined) {\r\n return value;
\r\n }\r\n },\r\n reflectPropertyToAttribute: function(name) {\r\n
var inferredType = typeof this[name];\r\n // try to intelligently serial
ize property value\r\n var serializedValue = this.serializeValue(this[name]
, inferredType);\r\n // boolean properties must reflect as boolean attribut
es\r\n if (serializedValue !== undefined) {\r\n this.setAttribute(na
me, serializedValue);\r\n // TODO(sorvell): we should remove attr for all
properties\r\n // that have undefined serialization; however, we will ne
ed to\r\n // refine the attr reflection system to achieve this; pica, for
example,\r\n // relies on having inferredType object properties not remo
ved as\r\n // attrs.\r\n } else if (inferredType === 'boolean') {\r\
n this.removeAttribute(name);\r\n }\r\n }\r\n };\r\n\r\n // exp
orts\r\n\r\n scope.api.instance.attributes = attributes;\r\n\r\n})(Polymer);\r\
n", |
79 "/*\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://poly
mer.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
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 OBS
ERVE_SUFFIX = 'Changed';\n\n // element api\n\n var empty = [];\n\n var updat
eRecord = {\n object: undefined,\n type: 'update',\n name: undefined,\n
oldValue: undefined\n };\n\n var numberIsNaN = Number.isNaN || function(va
lue) {\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 // cap
ture 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 cr
eatePropertyObserver: function() {\n var n$ = this._observeNames;\n if
(n$ && n$.length) {\n var o = this._propertyObserver = new CompoundObser
ver(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 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.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.notifyPropertyChanges, this);\n }\n
},\n notifyPropertyChanges: function(newValues, oldValues, paths) {\n v
ar name, method, called = {};\n for (var i in oldValues) {\n // note
: paths is of form [object, path, object, path]\n name = paths[2 * i + 1]
;\n method = this.observe[name];\n if (method) {\n var ov
= oldValues[i], nv = newValues[i];\n // observes the value if it is an
array\n this.observeArrayValue(name, nv, ov);\n if (!called[m
ethod]) {\n // only invoke change method if one of ov or nv is not (u
ndefined | null)\n if ((ov !== undefined && ov !== null) || (nv !== u
ndefined && nv !== null)) {\n called[method] = true;\n
// TODO(sorvell): call method with the set of values it's expecting;\n
// e.g. 'foo bar': 'invalidate' expects the new and old values for\n
// foo and bar. Currently we give only one of these and then\n
// deliver all the arguments.\n this.invokeMethod(method, [ov, n
v, arguments]);\n }\n }\n }\n }\n },\n del
iverChanges: function() {\n if (this._propertyObserver) {\n this._pr
opertyObserver.deliver();\n }\n },\n propertyChanged_: function(name,
value, oldValue) {\n if (this.reflect[name]) {\n this.reflectProper
tyToAttribute(name);\n }\n },\n observeArrayValue: function(name, val
ue, old) {\n // we only care if there are registered side-effects\n va
r callbackName = this.observe[name];\n if (callbackName) {\n // if w
e are observing the previous value, stop\n if (Array.isArray(old)) {\n
log.observe && console.log('[%s] observeArrayValue: unregister observer [
%s]', this.localName, name);\n this.closeNamedObserver(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] obse
rveArrayValue: register observer [%s]', this.localName, name, value);\n
var observer = new ArrayObserver(value);\n observer.open(function(valu
e, old) {\n this.invokeMethod(callbackName, [old]);\n }, thi
s);\n this.registerNamedObserver(name + '__array', observer);\n
}\n }\n },\n emitPropertyChangeRecord: function(name, value, oldValue
) {\n var object = this;\n if (areSameValue(value, oldValue))\n
return;\n\n this.propertyChanged_(name, value, oldValue);\n\n if (!Ob
server.hasObjectObserve)\n return;\n\n var notifier = this.notifier_
;\n if (!notifier)\n notifier = this.notifier_ = Object.getNotifier(
this);\n\n updateRecord.object = this;\n updateRecord.name = name;\n
updateRecord.oldValue = oldValue;\n\n notifier.notify(updateRecord);\n
},\n bindToAccessor: function(name, observable, resolveFn) {\n var pr
ivateName = name + '_';\n var privateObservable = name + 'Observable_';\n\
n this[privateObservable] = observable;\n var oldValue = this[privateN
ame];\n\n var self = this;\n var value = observable.open(function(valu
e, oldValue) {\n self[privateName] = value;\n self.emitPropertyCha
ngeRecord(name, value, oldValue);\n });\n\n if (resolveFn && !areSameV
alue(oldValue, value)) {\n var resolvedValue = resolveFn(oldValue, value)
;\n if (!areSameValue(value, resolvedValue)) {\n value = resolve
dValue;\n if (observable.setValue)\n observable.setValue(val
ue);\n }\n }\n\n this[privateName] = value;\n this.emitPro
pertyChangeRecord(name, value, oldValue);\n\n var observer = {\n clo
se: function() {\n observable.close();\n self[privateObservabl
e] = undefined;\n }\n };\n this.registerObserver(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 = this._computedNames[i]
;\n var expressionText = this.computed[name];\n try {\n v
ar expression = PolymerExpressions.getExpression(expressionText);\n var
observable = expression.getBinding(this, this.element.syntax);\n this.
bindToAccessor(name, observable);\n } catch (ex) {\n console.err
or('Failed to create computed property', ex);\n }\n }\n },\n b
indProperty: function(property, observable, oneTime) {\n if (oneTime) {\n
this[property] = observable;\n return;\n }\n return this.
bindToAccessor(property, observable, resolveBindingValue);\n },\n invokeMe
thod: 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._observe
rs.push(observer);\n },\n // observer array items are arrays of observers.
\n closeObservers: function() {\n if (!this._observers) {\n retur
n;\n }\n\n var observers = this._observers;\n for (var i = 0; i <
observers.length; i++) {\n var observer = observers[i];\n if (obs
erver && typeof observer.close == 'function') {\n observer.close();\n
}\n }\n\n this._observers = [];\n },\n // bookkeeping obse
rvers for memory management\n registerNamedObserver: function(name, observer)
{\n var o$ = this._namedObservers || (this._namedObservers = {});\n o
$[name] = observer;\n },\n closeNamedObserver: function(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 closeN
amedObservers: function() {\n if (this._namedObservers) {\n for (var
i in this._namedObservers) {\n this.closeNamedObserver(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] propertyChanged: [%s] now [%s]
was [%s]';\n\n // exports\n\n scope.api.instance.properties = properties;\n\n
})(Polymer);\n", | 79 "/*\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://poly
mer.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
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 OBS
ERVE_SUFFIX = 'Changed';\n\n // element api\n\n var empty = [];\n\n var updat
eRecord = {\n object: undefined,\n type: 'update',\n name: undefined,\n
oldValue: undefined\n };\n\n var numberIsNaN = Number.isNaN || function(va
lue) {\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 // cap
ture 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 cr
eatePropertyObserver: function() {\n var n$ = this._observeNames;\n if
(n$ && n$.length) {\n var o = this._propertyObserver = new CompoundObser
ver(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 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.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.notifyPropertyChanges, this);\n }\n
},\n notifyPropertyChanges: function(newValues, oldValues, paths) {\n v
ar name, method, called = {};\n for (var i in oldValues) {\n // note
: paths is of form [object, path, object, path]\n name = paths[2 * i + 1]
;\n method = this.observe[name];\n if (method) {\n var ov
= oldValues[i], nv = newValues[i];\n // observes the value if it is an
array\n this.observeArrayValue(name, nv, ov);\n if (!called[m
ethod]) {\n // only invoke change method if one of ov or nv is not (u
ndefined | null)\n if ((ov !== undefined && ov !== null) || (nv !== u
ndefined && nv !== null)) {\n called[method] = true;\n
// TODO(sorvell): call method with the set of values it's expecting;\n
// e.g. 'foo bar': 'invalidate' expects the new and old values for\n
// foo and bar. Currently we give only one of these and then\n
// deliver all the arguments.\n this.invokeMethod(method, [ov, n
v, arguments]);\n }\n }\n }\n }\n },\n del
iverChanges: function() {\n if (this._propertyObserver) {\n this._pr
opertyObserver.deliver();\n }\n },\n propertyChanged_: function(name,
value, oldValue) {\n if (this.reflect[name]) {\n this.reflectProper
tyToAttribute(name);\n }\n },\n observeArrayValue: function(name, val
ue, old) {\n // we only care if there are registered side-effects\n va
r callbackName = this.observe[name];\n if (callbackName) {\n // if w
e are observing the previous value, stop\n if (Array.isArray(old)) {\n
log.observe && console.log('[%s] observeArrayValue: unregister observer [
%s]', this.localName, name);\n this.closeNamedObserver(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] obse
rveArrayValue: register observer [%s]', this.localName, name, value);\n
var observer = new ArrayObserver(value);\n observer.open(function(valu
e, old) {\n this.invokeMethod(callbackName, [old]);\n }, thi
s);\n this.registerNamedObserver(name + '__array', observer);\n
}\n }\n },\n emitPropertyChangeRecord: function(name, value, oldValue
) {\n var object = this;\n if (areSameValue(value, oldValue))\n
return;\n\n this.propertyChanged_(name, value, oldValue);\n\n if (!Ob
server.hasObjectObserve)\n return;\n\n var notifier = this.notifier_
;\n if (!notifier)\n notifier = this.notifier_ = Object.getNotifier(
this);\n\n updateRecord.object = this;\n updateRecord.name = name;\n
updateRecord.oldValue = oldValue;\n\n notifier.notify(updateRecord);\n
},\n bindToAccessor: function(name, observable, resolveFn) {\n var pr
ivateName = name + '_';\n var privateObservable = name + 'Observable_';\n\
n this[privateObservable] = observable;\n var oldValue = this[privateN
ame];\n\n var self = this;\n var value = observable.open(function(valu
e, oldValue) {\n self[privateName] = value;\n self.emitPropertyCha
ngeRecord(name, value, oldValue);\n });\n\n if (resolveFn && !areSameV
alue(oldValue, value)) {\n var resolvedValue = resolveFn(oldValue, value)
;\n if (!areSameValue(value, resolvedValue)) {\n value = resolve
dValue;\n if (observable.setValue)\n observable.setValue(val
ue);\n }\n }\n\n this[privateName] = value;\n this.emitPro
pertyChangeRecord(name, value, oldValue);\n\n var observer = {\n clo
se: function() {\n observable.close();\n self[privateObservabl
e] = undefined;\n }\n };\n this.registerObserver(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 = this._computedNames[i]
;\n var expressionText = this.computed[name];\n try {\n v
ar expression = PolymerExpressions.getExpression(expressionText);\n var
observable = expression.getBinding(this, this.element.syntax);\n this.
bindToAccessor(name, observable);\n } catch (ex) {\n console.err
or('Failed to create computed property', ex);\n }\n }\n },\n b
indProperty: function(property, observable, oneTime) {\n if (oneTime) {\n
this[property] = observable;\n return;\n }\n return this.
bindToAccessor(property, observable, resolveBindingValue);\n },\n invokeMe
thod: 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._observe
rs.push(observer);\n },\n // observer array items are arrays of observers.
\n closeObservers: function() {\n if (!this._observers) {\n retur
n;\n }\n\n var observers = this._observers;\n for (var i = 0; i <
observers.length; i++) {\n var observer = observers[i];\n if (obs
erver && typeof observer.close == 'function') {\n observer.close();\n
}\n }\n\n this._observers = [];\n },\n // bookkeeping obse
rvers for memory management\n registerNamedObserver: function(name, observer)
{\n var o$ = this._namedObservers || (this._namedObservers = {});\n o
$[name] = observer;\n },\n closeNamedObserver: function(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 closeN
amedObservers: function() {\n if (this._namedObservers) {\n for (var
i in this._namedObservers) {\n this.closeNamedObserver(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] propertyChanged: [%s] now [%s]
was [%s]';\n\n // exports\n\n scope.api.instance.properties = properties;\n\n
})(Polymer);\n", |
80 "/*\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://poly
mer.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
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 md
v\n var mdv = {\n instanceTemplate: function(template) {\n // ensure a
default bindingDelegate\n var syntax = this.syntax || (!template.bindingDel
egate &&\n this.element.syntax);\n var dom = template.createInstan
ce(this, syntax);\n var observers = dom.bindings_;\n for (var i = 0; i
< observers.length; i++) {\n this.registerObserver(observers[i]);\n
}\n return dom;\n },\n bind: function(name, observable, oneTime) {\n
var property = this.propertyForAttribute(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 retu
rn this.mixinSuper(arguments);\n } else {\n // use n-way Polymer bin
ding\n var observer = this.bindProperty(property, 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 && observer) {\n observer.pat
h = observable.path_;\n this._recordBinding(property, observer);\n
}\n if (this.reflect[property]) {\n this.reflectPropertyToAtt
ribute(property);\n }\n return observer;\n }\n },\n bin
dFinished: function() {\n this.makeElementReady();\n },\n _recordBind
ing: function(name, observer) {\n this.bindings_ = this.bindings_ || {};\n
this.bindings_[name] = observer;\n },\n // TODO(sorvell): unbind/unbi
ndAll has been removed, as public api, from\n // TemplateBinding. We still ne
ed to close/dispose of observers but perhaps\n // we should choose a more exp
licit name.\n asyncUnbindAll: function() {\n if (!this._unbound) {\n
log.unbind && console.log('[%s] asyncUnbindAll', this.localName);\n t
his._unbindAllJob = this.job(this._unbindAllJob, this.unbindAll, 0);\n }\n
},\n unbindAll: function() {\n if (!this._unbound) {\n this.cl
oseObservers();\n this.closeNamedObservers();\n this._unbound = tr
ue;\n }\n },\n cancelUnbindAll: function() {\n if (this._unbound
) {\n log.unbind && console.warn('[%s] already unbound, cannot cancel unb
indAll', 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 forNodeTree(node, _nodeUnbindAll);\n }\
n\n function _nodeUnbindAll(node) {\n node.unbindAll();\n }\n\n function f
orNodeTree(node, callback) {\n if (node) {\n callback(node);\n for
(var child = node.firstChild; child; child = child.nextSibling) {\n forNo
deTree(child, callback);\n }\n }\n }\n\n var mustachePattern = /\\{\\{
([^{}]*)}}/;\n\n // exports\n\n scope.bindPattern = mustachePattern;\n scope.
api.instance.mdv = mdv;\n\n})(Polymer);\n", | 80 "/*\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://poly
mer.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
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 md
v\n var mdv = {\n instanceTemplate: function(template) {\n // ensure a
default bindingDelegate\n var syntax = this.syntax || (!template.bindingDel
egate &&\n this.element.syntax);\n var dom = template.createInstan
ce(this, syntax);\n var observers = dom.bindings_;\n for (var i = 0; i
< observers.length; i++) {\n this.registerObserver(observers[i]);\n
}\n return dom;\n },\n bind: function(name, observable, oneTime) {\n
var property = this.propertyForAttribute(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 retu
rn this.mixinSuper(arguments);\n } else {\n // use n-way Polymer bin
ding\n var observer = this.bindProperty(property, 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 && observer) {\n observer.pat
h = observable.path_;\n this._recordBinding(property, observer);\n
}\n if (this.reflect[property]) {\n this.reflectPropertyToAtt
ribute(property);\n }\n return observer;\n }\n },\n bin
dFinished: function() {\n this.makeElementReady();\n },\n _recordBind
ing: function(name, observer) {\n this.bindings_ = this.bindings_ || {};\n
this.bindings_[name] = observer;\n },\n // TODO(sorvell): unbind/unbi
ndAll has been removed, as public api, from\n // TemplateBinding. We still ne
ed to close/dispose of observers but perhaps\n // we should choose a more exp
licit name.\n asyncUnbindAll: function() {\n if (!this._unbound) {\n
log.unbind && console.log('[%s] asyncUnbindAll', this.localName);\n t
his._unbindAllJob = this.job(this._unbindAllJob, this.unbindAll, 0);\n }\n
},\n unbindAll: function() {\n if (!this._unbound) {\n this.cl
oseObservers();\n this.closeNamedObservers();\n this._unbound = tr
ue;\n }\n },\n cancelUnbindAll: function() {\n if (this._unbound
) {\n log.unbind && console.warn('[%s] already unbound, cannot cancel unb
indAll', 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 forNodeTree(node, _nodeUnbindAll);\n }\
n\n function _nodeUnbindAll(node) {\n node.unbindAll();\n }\n\n function f
orNodeTree(node, callback) {\n if (node) {\n callback(node);\n for
(var child = node.firstChild; child; child = child.nextSibling) {\n forNo
deTree(child, callback);\n }\n }\n }\n\n var mustachePattern = /\\{\\{
([^{}]*)}}/;\n\n // exports\n\n scope.bindPattern = mustachePattern;\n scope.
api.instance.mdv = mdv;\n\n})(Polymer);\n", |
81 "/*\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://poly
mer.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
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 v
ar 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 r
eturn Polymer.job.call(this, job, callback, wait);\n }\n },\n super:
Polymer.super,\n // user entry point for element has had its createdCallback
called\n created: function() {\n },\n // user entry point for element h
as shadowRoot and is ready for\n // api interaction\n ready: function() {\
n },\n createdCallback: function() {\n if (this.templateInstance && t
his.templateInstance.model) {\n console.warn('Attributes on ' + this.loca
lName + ' were data bound ' +\n 'prior to Polymer upgrading the eleme
nt. This may result in ' +\n 'incorrect binding types.');\n }\n
this.created();\n this.prepareElement();\n // TODO(sorvell): repl
ace when ShadowDOMPolyfill issue is corrected\n // https://github.com/Polym
er/ShadowDOM/issues/420\n if (!this.ownerDocument.isStagingDocument || wind
ow.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', t
his.localName);\n return;\n }\n this._elementPrepared = true;\n
// storage for shadowRoots info\n this.shadowRoots = {};\n // in
stall property observers\n this.createPropertyObserver();\n // TODO (s
orvell): temporarily open observer when created\n this.openPropertyObserver
();\n // install boilerplate attributes\n this.copyInstanceAttributes(
);\n // process input attributes\n this.takeAttributes();\n // ad
d event listeners\n this.addHostListeners();\n },\n makeElementReady:
function() {\n if (this._readied) {\n return;\n }\n this.
_readied = true;\n this.createComputedProperties();\n // TODO(sorvell)
: We could create an entry point here\n // for the user to compute property
values.\n // process declarative resources\n this.parseDeclarations(t
his.__proto__);\n // TODO(sorvell): CE polyfill uses unresolved attribute t
o simulate\n // :unresolved; remove this attribute to be compatible with na
tive\n // CE.\n this.removeAttribute('unresolved');\n // user ent
ry point\n this.ready();\n // TODO (sorvell): temporarily open observe
r when created\n // turn on property observation and take any initial chang
es\n //this.openPropertyObserver();\n },\n attachedCallback: function
() {\n this.cancelUnbindAll();\n // invoke user action\n if (this
.attached) {\n this.attached();\n }\n // TODO(sorvell): bc\n
if (this.enteredView) {\n this.enteredView();\n }\n // NOTE:
domReady can be used to access elements in dom (descendants,\n // ancestor
s, siblings) such that the developer is enured to upgrade\n // ordering. If
the element definitions have loaded, domReady\n // can be used to access u
pgraded elements.\n if (!this.hasBeenAttached) {\n this.hasBeenAttac
hed = true;\n if (this.domReady) {\n this.async('domReady');\n
}\n }\n },\n detachedCallback: function() {\n if (!this.pr
eventDispose) {\n this.asyncUnbindAll();\n }\n // invoke user a
ction\n if (this.detached) {\n this.detached();\n }\n // T
ODO(sorvell): bc\n if (this.leftView) {\n this.leftView();\n }\
n },\n // TODO(sorvell): bc\n enteredViewCallback: function() {\n
this.attachedCallback();\n },\n // TODO(sorvell): bc\n leftViewCallback
: function() {\n this.detachedCallback();\n },\n // TODO(sorvell): bc
\n enteredDocumentCallback: function() {\n this.attachedCallback();\n
},\n // TODO(sorvell): bc\n leftDocumentCallback: function() {\n thi
s.detachedCallback();\n },\n // recursive ancestral <element> initializati
on, oldest first\n parseDeclarations: function(p) {\n if (p && p.element
) {\n this.parseDeclarations(p.__proto__);\n p.parseDeclaration.ca
ll(this, p.element);\n }\n },\n // parse input <element> as needed, o
verride 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[
elementElement.name] = root;\n }\n },\n // return a shadow-root templ
ate (if desired), override for custom behavior\n fetchTemplate: function(elem
entElement) {\n return elementElement.querySelector('template');\n },\n
// utility function that creates a shadow root from a <template>\n shadowF
romTemplate: function(template) {\n if (template) {\n // make a shad
ow 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.inst
anceTemplate(template);\n // append to shadow dom\n root.appendChi
ld(dom);\n // perform post-construction initialization tasks on shadow ro
ot\n this.shadowRootReady(root, template);\n // return the created
shadow root\n return root;\n }\n },\n // utility function tha
t stamps a <template> into light-dom\n lightFromTemplate: function(template,
refNode) {\n if (template) {\n // TODO(sorvell): mark this element a
s an eventController so that\n // event listeners on bound nodes inside i
t will be called on it.\n // Note, the expectation here is that events on
all descendants\n // should be handled by this element.\n this.ev
entController = this;\n // stamp template\n // which includes pars
ing and applying MDV bindings before being\n // inserted (to avoid {{}} i
n attribute values)\n // e.g. to prevent <img src=\"images/{{icon}}\"> fr
om generating a 404.\n var dom = this.instanceTemplate(template);\n
// append to shadow dom\n if (refNode) {\n this.insertBefore(d
om, 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.
marshalNodeReferences(root);\n // set up polymer gestures\n PolymerGes
tures.register(root);\n },\n // locate nodes with id and store references
to them in this.$ hash\n marshalNodeReferences: function(root) {\n // es
tablish $ instance variable\n var $ = this.$ = this.$ || {};\n // popu
late $ 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): ad
hoc filter\n if (name !== 'class' && name !== 'style') {\n this.attr
ibuteToProperty(name, this.getAttribute(name));\n }\n if (this.attribu
teChanged) {\n this.attributeChanged.apply(this, arguments);\n }\n
},\n onMutation: function(node, listener) {\n var observer = new Mutat
ionObserver(function(mutations) {\n listener.call(this, observer, mutatio
ns);\n observer.disconnect();\n }.bind(this));\n observer.obser
ve(node, {childList: true, subtree: true});\n }\n };\n\n // true if object
has own PolymerBase api\n function isBase(object) {\n return object.hasOwnPr
operty('PolymerBase')\n }\n\n // name a base constructor for dev tools\n\n fu
nction PolymerBase() {};\n PolymerBase.prototype = base;\n base.constructor =
PolymerBase;\n\n // exports\n\n scope.Base = PolymerBase;\n scope.isBase = is
Base;\n scope.api.instance.base = base;\n\n})(Polymer);\n", | 81 "/*\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://poly
mer.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
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 v
ar 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 r
eturn Polymer.job.call(this, job, callback, wait);\n }\n },\n super:
Polymer.super,\n // user entry point for element has had its createdCallback
called\n created: function() {\n },\n // user entry point for element h
as shadowRoot and is ready for\n // api interaction\n ready: function() {\
n },\n createdCallback: function() {\n if (this.templateInstance && t
his.templateInstance.model) {\n console.warn('Attributes on ' + this.loca
lName + ' were data bound ' +\n 'prior to Polymer upgrading the eleme
nt. This may result in ' +\n 'incorrect binding types.');\n }\n
this.created();\n this.prepareElement();\n if (!this.ownerDocumen
t.isStagingDocument) {\n this.makeElementReady();\n }\n },\n /
/ system entry point, do not override\n prepareElement: function() {\n i
f (this._elementPrepared) {\n console.warn('Element already prepared', th
is.localName);\n return;\n }\n this._elementPrepared = true;\n
// storage for shadowRoots info\n this.shadowRoots = {};\n // ins
tall property observers\n this.createPropertyObserver();\n this.openPr
opertyObserver();\n // install boilerplate attributes\n this.copyInsta
nceAttributes();\n // process input attributes\n this.takeAttributes()
;\n // add event listeners\n this.addHostListeners();\n },\n mak
eElementReady: function() {\n if (this._readied) {\n return;\n
}\n this._readied = true;\n this.createComputedProperties();\n //
TODO(sorvell): We could create an entry point here\n // for the user to co
mpute property values.\n // process declarative resources\n this.parse
Declarations(this.__proto__);\n // TODO(sorvell): CE polyfill uses unresolv
ed attribute to simulate\n // :unresolved; remove this attribute to be comp
atible with native\n // CE.\n this.removeAttribute('unresolved');\n
// user entry point\n this.ready();\n },\n attachedCallback: funct
ion() {\n this.cancelUnbindAll();\n // invoke user action\n if (t
his.attached) {\n this.attached();\n }\n // TODO(sorvell): bc\n
if (this.enteredView) {\n this.enteredView();\n }\n // NO
TE: domReady can be used to access elements in dom (descendants,\n // ances
tors, siblings) such that the developer is enured to upgrade\n // ordering.
If the element definitions have loaded, domReady\n // can be used to acces
s upgraded elements.\n if (!this.hasBeenAttached) {\n this.hasBeenAt
tached = true;\n if (this.domReady) {\n this.async('domReady');\
n }\n }\n },\n detachedCallback: function() {\n if (!this
.preventDispose) {\n this.asyncUnbindAll();\n }\n // invoke use
r action\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
this.attachedCallback();\n },\n // TODO(sorvell): bc\n leftViewCallb
ack: function() {\n this.detachedCallback();\n },\n // TODO(sorvell):
bc\n enteredDocumentCallback: function() {\n this.attachedCallback();\n
},\n // TODO(sorvell): bc\n leftDocumentCallback: function() {\n
this.detachedCallback();\n },\n // recursive ancestral <element> initializ
ation, oldest first\n parseDeclarations: function(p) {\n if (p && p.elem
ent) {\n this.parseDeclarations(p.__proto__);\n p.parseDeclaration
.call(this, p.element);\n }\n },\n // parse input <element> as needed
, override for custom behavior\n parseDeclaration: function(elementElement) {
\n var template = this.fetchTemplate(elementElement);\n if (template)
{\n var root = this.shadowFromTemplate(template);\n this.shadowRoo
ts[elementElement.name] = root;\n }\n },\n // return a shadow-root te
mplate (if desired), override for custom behavior\n fetchTemplate: function(e
lementElement) {\n return elementElement.querySelector('template');\n },
\n // utility function that creates a shadow root from a <template>\n shad
owFromTemplate: function(template) {\n if (template) {\n // make a s
hadow root\n var root = this.createShadowRoot();\n // stamp templa
te\n // which includes parsing and applying MDV bindings before being\n
// inserted (to avoid {{}} in attribute values)\n // e.g. to preven
t <img src=\"images/{{icon}}\"> from generating a 404.\n var dom = this.i
nstanceTemplate(template);\n // append to shadow dom\n root.append
Child(dom);\n // perform post-construction initialization tasks on shadow
root\n this.shadowRootReady(root, template);\n // return the crea
ted shadow root\n return root;\n }\n },\n // utility function
that stamps a <template> into light-dom\n lightFromTemplate: function(templat
e, refNode) {\n if (template) {\n // TODO(sorvell): mark this elemen
t as an eventController so that\n // event listeners on bound nodes insid
e it will be called on it.\n // Note, the expectation here is that events
on all descendants\n // should be handled by this element.\n this
.eventController = this;\n // stamp template\n // which includes p
arsing 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.instanceTemplate(template);\n
// append to shadow dom\n if (refNode) {\n this.insertBefor
e(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 th
is.marshalNodeReferences(root);\n },\n // locate nodes with id and store r
eferences to them in this.$ hash\n marshalNodeReferences: function(root) {\n
// establish $ instance variable\n var $ = this.$ = this.$ || {};\n
// populate $ 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(sj
miles): adhoc filter\n if (name !== 'class' && name !== 'style') {\n
this.attributeToProperty(name, this.getAttribute(name));\n }\n if (th
is.attributeChanged) {\n this.attributeChanged.apply(this, arguments);\n
}\n },\n onMutation: function(node, listener) {\n var observer =
new MutationObserver(function(mutations) {\n listener.call(this, observe
r, mutations);\n observer.disconnect();\n }.bind(this));\n obse
rver.observe(node, {childList: true, subtree: true});\n }\n };\n\n // true
if object has own PolymerBase api\n function isBase(object) {\n return objec
t.hasOwnProperty('PolymerBase')\n }\n\n // name a base constructor for dev too
ls\n\n function PolymerBase() {};\n PolymerBase.prototype = base;\n base.cons
tructor = PolymerBase;\n\n // exports\n\n scope.Base = PolymerBase;\n scope.i
sBase = isBase;\n scope.api.instance.base = base;\n\n})(Polymer);\n", |
82 "/*\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://poly
mer.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
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
STYLE_SCOPE_ATTRIBUTE = 'element';\n var STYLE_CONTROLLER_SCOPE = 'controller'
;\n \n var styles = {\n STYLE_SCOPE_ATTRIBUTE: STYLE_SCOPE_ATTRIBUTE,\n
/**\n * Installs external stylesheets and <style> elements with the attribut
e \n * polymer-scope='controller' into the scope of element. This is intende
d\n * to be a called during custom element construction.\n */\n instal
lControllerStyles: function() {\n // apply controller styles, but only if t
hey are not yet applied\n var scope = this.findStyleScope();\n if (sco
pe && !this.scopeHasNamedStyle(scope, this.localName)) {\n // allow inher
ited controller styles\n var proto = getPrototypeOf(this), cssText = '';\
n while (proto && proto.element) {\n cssText += proto.element.cs
sTextForScope(STYLE_CONTROLLER_SCOPE);\n proto = getPrototypeOf(proto);
\n }\n if (cssText) {\n this.installScopeCssText(cssText,
scope);\n }\n }\n },\n installScopeStyle: function(style, nam
e, scope) {\n var scope = 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, nam
e) {\n scope = scope || this.findStyleScope();\n name = name || '';\n
if (!scope) {\n return;\n }\n if (window.ShadowDOMPolyfill
) {\n cssText = shimCssText(cssText, scope.host);\n }\n var sty
le = this.element.cssTextToScopeStyle(cssText,\n STYLE_CONTROLLER_SCOPE
);\n Polymer.applyStyleToScope(style, scope);\n // cache that this sty
le has been applied\n this.styleCacheForScope(scope)[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.pa
rentNode) {\n n = n.parentNode;\n }\n return n;\n },\n sc
opeHasNamedStyle: function(scope, name) {\n var cache = this.styleCacheForS
cope(scope);\n return cache[name];\n },\n styleCacheForScope: functio
n(scope) {\n if (window.ShadowDOMPolyfill) {\n var scopeName = scope
.host ? scope.host.localName : scope.localName;\n return polyfillScopeSty
leCache[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 platforms where the prot
oype chain is simulated via __proto__ (IE10)\n function getPrototypeOf(prototyp
e) {\n return prototype.__proto__;\n }\n\n function shimCssText(cssText, ho
st) {\n var name = '', is = false;\n if (host) {\n name = host.localN
ame;\n is = host.hasAttribute('is');\n }\n var selector = Platform.Sh
adowCSS.makeScopeSelector(name, is);\n return Platform.ShadowCSS.shimCssText(
cssText, selector);\n }\n\n // exports\n\n scope.api.instance.styles = styles
;\n \n})(Polymer);\n", | 82 "/*\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://poly
mer.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
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 hasShadowDOMPolyfill = wi
ndow.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_ATTRIBUTE: STYLE_SCOPE_ATTRIBUTE,\n /**\n * Installs exter
nal stylesheets and <style> elements with the attribute \n * polymer-scope='
controller' into the scope of element. This is intended\n * to be a called d
uring custom element construction.\n */\n installControllerStyles: functio
n() {\n // apply controller styles, but only if they are not yet applied\n
var scope = this.findStyleScope();\n if (scope && !this.scopeHasNamedS
tyle(scope, this.localName)) {\n // allow inherited controller styles\n
var proto = getPrototypeOf(this), cssText = '';\n while (proto && p
roto.element) {\n cssText += proto.element.cssTextForScope(STYLE_CONTRO
LLER_SCOPE);\n proto = getPrototypeOf(proto);\n }\n if (c
ssText) {\n this.installScopeCssText(cssText, scope);\n }\n
}\n },\n installScopeStyle: function(style, name, scope) {\n var sco
pe = scope || this.findStyleScope(), name = name || '';\n if (scope && !thi
s.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 (hasShadowDOMPolyfill) {\n cssText = shimCss
Text(cssText, scope.host);\n }\n var style = this.element.cssTextToSco
peStyle(cssText,\n STYLE_CONTROLLER_SCOPE);\n Polymer.applyStyleTo
Scope(style, scope);\n // cache that this style has been applied\n thi
s.styleCacheForScope(scope)[this.localName + name] = true;\n },\n findStyl
eScope: function(node) {\n // find the shadow root that contains this eleme
nt\n var n = node || this;\n while (n.parentNode) {\n n = n.par
entNode;\n }\n return n;\n },\n scopeHasNamedStyle: function(sco
pe, name) {\n var cache = this.styleCacheForScope(scope);\n return cac
he[name];\n },\n styleCacheForScope: function(scope) {\n if (hasShado
wDOMPolyfill) {\n var scopeName = scope.host ? scope.host.localName : sco
pe.localName;\n return polyfillScopeStyleCache[scopeName] || (polyfillSco
peStyleCache[scopeName] = {});\n } else {\n return scope._scopeStyle
s = (scope._scopeStyles || {});\n }\n }\n };\n\n var polyfillScopeStyl
eCache = {};\n \n // NOTE: use raw prototype traversal so that we ensure corre
ct traversal\n // on platforms where the protoype chain is simulated via __prot
o__ (IE10)\n function getPrototypeOf(prototype) {\n return prototype.__proto
__;\n }\n\n function shimCssText(cssText, host) {\n var name = '', is = fal
se;\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 // e
xports\n\n scope.api.instance.styles = styles;\n \n})(Polymer);\n", |
83 "/*\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://poly
mer.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
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\n // impera
tive implementation: Polymer()\n\n // specify an 'own' prototype for tag `name`
\n function element(name, prototype) {\n if (arguments.length === 1 && typeo
f arguments[0] !== 'string') {\n prototype = name;\n var script = docu
ment._currentScript;\n name = script && script.parentNode && script.parentN
ode.getAttribute ?\n script.parentNode.getAttribute('name') : '';\n
if (!name) {\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
registerPrototype(name, prototype);\n // notify the registrar waiting for 'n
ame', if any\n notifyPrototype(name);\n }\n\n // async prototype source\n\n
function waitingForPrototype(name, client) {\n waitPrototype[name] = client
;\n }\n\n var waitPrototype = {};\n\n function notifyPrototype(name) {\n i
f (waitPrototype[name]) {\n waitPrototype[name].registerWhenReady();\n
delete waitPrototype[name];\n }\n }\n\n // utility and bookkeeping\n\n //
maps tag names to prototypes, as registered with\n // Polymer. Prototypes asso
ciated with a tag name\n // using document.registerElement are available from\n
// HTMLElement.getPrototypeForTag().\n // If an element was fully registered
by Polymer, then\n // Polymer.getRegisteredPrototype(name) === \n // HTMLEle
ment.getPrototypeForTag(name)\n\n var prototypesByName = {};\n\n function regi
sterPrototype(name, prototype) {\n return prototypesByName[name] = prototype
|| {};\n }\n\n function getRegisteredPrototype(name) {\n return prototypesB
yName[name];\n }\n\n // exports\n\n scope.getRegisteredPrototype = getRegiste
redPrototype;\n scope.waitingForPrototype = waitingForPrototype;\n\n // namesp
ace shenanigans so we can expose our scope 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 do this that is less terrible\n // copy wi
ndow.Polymer properties onto `element()`\n\n extend(Polymer, scope);\n\n // Un
der 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
collects those calls until we can process them, which\n // we do here.\n\n va
r declarations = 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", | 83 "/*\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://poly
mer.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
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\n // impera
tive implementation: Polymer()\n\n // specify an 'own' prototype for tag `name`
\n function element(name, prototype) {\n if (arguments.length === 1 && typeo
f arguments[0] !== 'string') {\n prototype = name;\n var script = docu
ment._currentScript;\n name = script && script.parentNode && script.parentN
ode.getAttribute ?\n script.parentNode.getAttribute('name') : '';\n
if (!name) {\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
registerPrototype(name, prototype);\n // notify the registrar waiting for 'n
ame', if any\n notifyPrototype(name);\n }\n\n // async prototype source\n\n
function waitingForPrototype(name, client) {\n waitPrototype[name] = client
;\n }\n\n var waitPrototype = {};\n\n function notifyPrototype(name) {\n i
f (waitPrototype[name]) {\n waitPrototype[name].registerWhenReady();\n
delete waitPrototype[name];\n }\n }\n\n // utility and bookkeeping\n\n //
maps tag names to prototypes, as registered with\n // Polymer. Prototypes asso
ciated with a tag name\n // using document.registerElement are available from\n
// HTMLElement.getPrototypeForTag().\n // If an element was fully registered
by Polymer, then\n // Polymer.getRegisteredPrototype(name) === \n // HTMLEle
ment.getPrototypeForTag(name)\n\n var prototypesByName = {};\n\n function regi
sterPrototype(name, prototype) {\n return prototypesByName[name] = prototype
|| {};\n }\n\n function getRegisteredPrototype(name) {\n return prototypesB
yName[name];\n }\n\n // exports\n\n scope.getRegisteredPrototype = getRegiste
redPrototype;\n scope.waitingForPrototype = waitingForPrototype;\n\n // namesp
ace shenanigans so we can expose our scope 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 do this that is less terrible\n // copy wi
ndow.Polymer properties onto `element()`\n\n extend(Polymer, scope);\n\n // Un
der 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
collects those calls until we can process them, which\n // we do here.\n\n va
r declarations = 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", |
84 "/*\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://poly
mer.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
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\nvar
path = {\n resolveElementPaths: function(node) {\n Platform.urlResolver.res
olveDom(node);\n },\n addResolvePathApi: function() {\n // let assetpath at
tribute modify the resolve path\n var assetPath = this.getAttribute('assetpat
h') || '';\n var root = new URL(assetPath, this.ownerDocument.baseURI);\n
this.prototype.resolvePath = function(urlPath, base) {\n var u = new URL(ur
lPath, base || root);\n return u.href;\n };\n }\n};\n\n// exports\nscop
e.api.declaration.path = path;\n\n})(Polymer);\n", | 84 "/*\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://poly
mer.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
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\nvar
path = {\n resolveElementPaths: function(node) {\n Platform.urlResolver.res
olveDom(node);\n },\n addResolvePathApi: function() {\n // let assetpath at
tribute modify the resolve path\n var assetPath = this.getAttribute('assetpat
h') || '';\n var root = new URL(assetPath, this.ownerDocument.baseURI);\n
this.prototype.resolvePath = function(urlPath, base) {\n var u = new URL(ur
lPath, base || root);\n return u.href;\n };\n }\n};\n\n// exports\nscop
e.api.declaration.path = path;\n\n})(Polymer);\n", |
85 "/*\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://poly
mer.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
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 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 = 'g
lobal';\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.templateC
ontent();\n if (content) {\n this.convertSheetsToStyles(content);\n
var styles = this.findLoadableStyles(content);\n if (styles.length
) {\n var templateUrl = template.ownerDocument.baseURI;\n retu
rn Platform.styleResolver.loadStyles(styles, templateUrl, callback);\n }\
n }\n if (callback) {\n callback();\n }\n },\n conve
rtSheetsToStyles: function(root) {\n var s$ = root.querySelectorAll(SHEET_S
ELECTOR);\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 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.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.textContent.matc
h(STYLE_LOADABLE_MATCH)) {\n loadables.push(s);\n }\n
}\n }\n return loadables;\n },\n /**\n * Install external s
tylesheets loaded in <polymer-element> elements into the \n * element's temp
late.\n * @param elementElement The <element> 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 element and store for later use.\n
*/\n cacheSheets: function() {\n this.sheets = this.findNodes(SHEET_SELE
CTOR);\n this.sheets.forEach(function(s) {\n if (s.parentNode) {\n
s.parentNode.removeChild(s);\n }\n });\n },\n cacheSty
les: function() {\n this.styles = this.findNodes(STYLE_SELECTOR + '[' + SCO
PE_ATTR + ']');\n this.styles.forEach(function(s) {\n if (s.parentNo
de) {\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 template.\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 * no
t become active.\n * Note, ignores sheets with the attribute 'polymer-scope'
.\n * @param elementElement The <element> element to style.\n */\n in
stallLocalSheets: function () {\n var sheets = this.sheets.filter(function(
s) {\n return !s.hasAttribute(SCOPE_ATTR);\n });\n var content
= this.templateContent();\n if (content) {\n var cssText = '';\n
sheets.forEach(function(sheet) {\n cssText += cssTextFromSheet(shee
t) + '\\n';\n });\n if (cssText) {\n var style = createSt
yleElement(cssText, this.ownerDocument);\n content.insertBefore(style,
content.firstChild);\n }\n }\n },\n findNodes: function(select
or, matcher) {\n var nodes = this.querySelectorAll(selector).array();\n
var content = this.templateContent();\n if (content) {\n var templ
ateNodes = content.querySelectorAll(selector).array();\n nodes = nodes.co
ncat(templateNodes);\n }\n return matcher ? nodes.filter(matcher) : no
des;\n },\n /**\n * Promotes external stylesheets and <style> elements
with the attribute \n * polymer-scope='global' into global scope.\n * T
his 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 // TO
DO(sorvell): remove when wkb.ug/72462 is addressed.\n installGlobalStyles: fu
nction() {\n var style = this.styleForScope(STYLE_GLOBAL_SCOPE);\n app
lyStyleToScope(style, document.head);\n },\n cssTextForScope: function(sco
peDescriptor) {\n var cssText = '';\n // handle stylesheets\n var
selector = '[' + SCOPE_ATTR + '=' + scopeDescriptor + ']';\n var matcher =
function(s) {\n return matchesSelector(s, selector);\n };\n va
r sheets = this.sheets.filter(matcher);\n sheets.forEach(function(sheet) {\
n cssText += cssTextFromSheet(sheet) + '\\n\\n';\n });\n // han
dle cached style elements\n var styles = this.styles.filter(matcher);\n
styles.forEach(function(style) {\n cssText += style.textContent + '\\n\
\n';\n });\n return cssText;\n },\n styleForScope: function(scop
eDescriptor) {\n var cssText = this.cssTextForScope(scopeDescriptor);\n
return this.cssTextToScopeStyle(cssText, scopeDescriptor);\n },\n cssTex
tToScopeStyle: function(cssText, scopeDescriptor) {\n if (cssText) {\n
var style = createStyleElement(cssText);\n style.setAttribute(STYLE_SC
OPE_ATTRIBUTE, this.getAttribute('name') +\n '-' + scopeDescriptor);\
n return style;\n }\n }\n };\n\n function importRuleForSheet(sh
eet, baseUrl) {\n var href = new URL(sheet.getAttribute('href'), baseUrl).hre
f;\n return '@import \\'' + href + '\\';';\n }\n\n function applyStyleToSco
pe(style, scope) {\n if (style) {\n if (scope === document) {\n s
cope = document.head;\n }\n if (window.ShadowDOMPolyfill) {\n s
cope = document.head;\n }\n // TODO(sorvell): necessary for IE\n
// see https://connect.microsoft.com/IE/feedback/details/790212/\n // cloni
ng-a-style-element-and-adding-to-document-produces\n // -unexpected-result#
details\n // var clone = style.cloneNode(true);\n var clone = createSt
yleElement(style.textContent);\n var attr = style.getAttribute(STYLE_SCOPE_
ATTRIBUTE);\n if (attr) {\n clone.setAttribute(STYLE_SCOPE_ATTRIBUTE
, attr);\n }\n // TODO(sorvell): probably too brittle; try to figure o
ut \n // where to put the element.\n var refNode = scope.firstElementC
hild;\n if (scope === document.head) {\n var selector = 'style[' + S
TYLE_SCOPE_ATTRIBUTE + ']';\n var s$ = document.head.querySelectorAll(sel
ector);\n if (s$.length) {\n refNode = s$[s$.length-1].nextEleme
ntSibling;\n }\n }\n scope.insertBefore(clone, refNode);\n }
\n }\n\n function createStyleElement(cssText, scope) {\n scope = scope || d
ocument;\n scope = scope.createElement ? scope : scope.ownerDocument;\n va
r style = scope.createElement('style');\n style.textContent = cssText;\n r
eturn style;\n }\n\n function cssTextFromSheet(sheet) {\n return (sheet &&
sheet.__resource) || '';\n }\n\n function matchesSelector(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.mozMatchesSelector;\n \n // exports\n\
n scope.api.declaration.styles = styles;\n scope.applyStyleToScope = applyStyl
eToScope;\n \n})(Polymer);\n", | 85 "/*\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://poly
mer.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
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 api = scope.api.instance.
styles;\n var STYLE_SCOPE_ATTRIBUTE = api.STYLE_SCOPE_ATTRIBUTE;\n\n var hasSh
adowDOMPolyfill = window.ShadowDOMPolyfill;\n\n // magic words\n\n var STYLE_S
ELECTOR = 'style';\n var STYLE_LOADABLE_MATCH = '@import';\n var SHEET_SELECTO
R = 'link[rel=stylesheet]';\n var STYLE_GLOBAL_SCOPE = 'global';\n var SCOPE_A
TTR = 'polymer-scope';\n\n var styles = {\n // returns true if resources are
loading\n loadStyles: function(callback) {\n var template = this.fetchT
emplate();\n var content = template && this.templateContent();\n if (c
ontent) {\n this.convertSheetsToStyles(content);\n var styles = th
is.findLoadableStyles(content);\n if (styles.length) {\n var tem
plateUrl = template.ownerDocument.baseURI;\n return Platform.styleResol
ver.loadStyles(styles, templateUrl, callback);\n }\n }\n if (ca
llback) {\n callback();\n }\n },\n convertSheetsToStyles: func
tion(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 = createStyleE
lement(importRuleForSheet(s, this.ownerDocument.baseURI),\n this.owne
rDocument);\n this.copySheetAttributes(c, s);\n s.parentNode.repla
ceChild(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.name !== 'rel' && a.name !== 'href') {\n style.setAt
tribute(a.name, a.value);\n }\n }\n },\n findLoadableStyles: f
unction(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.textContent.match(STYLE_LOADABLE_MATCH
)) {\n loadables.push(s);\n }\n }\n }\n ret
urn loadables;\n },\n /**\n * Install external stylesheets loaded in <
polymer-element> elements into the \n * element's template.\n * @param e
lementElement The <element> element to style.\n */\n installSheets: funct
ion() {\n this.cacheSheets();\n this.cacheStyles();\n this.instal
lLocalSheets();\n this.installGlobalStyles();\n },\n /**\n * Remo
ve all sheets from element and store for later use.\n */\n cacheSheets: f
unction() {\n this.sheets = this.findNodes(SHEET_SELECTOR);\n this.she
ets.forEach(function(s) {\n if (s.parentNode) {\n s.parentNode.r
emoveChild(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.par
entNode.removeChild(s);\n }\n });\n },\n /**\n * Takes ext
ernal stylesheets loaded in an <element> element and moves\n * their content
into a <style> element inside the <element>'s template.\n * The sheet is th
en 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 'polymer-scope'.\n * @param eleme
ntElement The <element> element to style.\n */\n installLocalSheets: func
tion () {\n var sheets = this.sheets.filter(function(s) {\n return !
s.hasAttribute(SCOPE_ATTR);\n });\n var content = this.templateContent
();\n if (content) {\n var cssText = '';\n sheets.forEach(fun
ction(sheet) {\n cssText += cssTextFromSheet(sheet) + '\\n';\n }
);\n if (cssText) {\n var style = createStyleElement(cssText, th
is.ownerDocument);\n content.insertBefore(style, content.firstChild);\n
}\n }\n },\n findNodes: function(selector, matcher) {\n
var nodes = this.querySelectorAll(selector).array();\n var content = this.t
emplateContent();\n if (content) {\n var templateNodes = content.que
rySelectorAll(selector).array();\n nodes = nodes.concat(templateNodes);\n
}\n return matcher ? nodes.filter(matcher) : nodes;\n },\n /**\
n * Promotes external stylesheets and <style> elements with the attribute \n
* polymer-scope='global' into global scope.\n * This is particularly us
eful for defining @keyframe rules which \n * currently do not function in sc
oped or shadow style elements.\n * (See wkb.ug/72462)\n * @param element
Element The <element> element to style.\n */\n // TODO(sorvell): remove wh
en wkb.ug/72462 is addressed.\n installGlobalStyles: function() {\n var
style = this.styleForScope(STYLE_GLOBAL_SCOPE);\n applyStyleToScope(style,
document.head);\n },\n cssTextForScope: function(scopeDescriptor) {\n
var cssText = '';\n // handle stylesheets\n var selector = '[' + SCOP
E_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 += cs
sTextFromSheet(sheet) + '\\n\\n';\n });\n // handle cached style eleme
nts\n var styles = this.styles.filter(matcher);\n styles.forEach(funct
ion(style) {\n cssText += style.textContent + '\\n\\n';\n });\n
return cssText;\n },\n styleForScope: function(scopeDescriptor) {\n
var cssText = this.cssTextForScope(scopeDescriptor);\n return this.cssTextT
oScopeStyle(cssText, scopeDescriptor);\n },\n cssTextToScopeStyle: functio
n(cssText, scopeDescriptor) {\n if (cssText) {\n var style = createS
tyleElement(cssText);\n style.setAttribute(STYLE_SCOPE_ATTRIBUTE, this.ge
tAttribute('name') +\n '-' + scopeDescriptor);\n return style;
\n }\n }\n };\n\n function importRuleForSheet(sheet, baseUrl) {\n v
ar href = new URL(sheet.getAttribute('href'), baseUrl).href;\n return '@impor
t \\'' + 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.mic
rosoft.com/IE/feedback/details/790212/\n // cloning-a-style-element-and-add
ing-to-document-produces\n // -unexpected-result#details\n // var clon
e = style.cloneNode(true);\n var clone = createStyleElement(style.textConte
nt);\n var attr = style.getAttribute(STYLE_SCOPE_ATTRIBUTE);\n if (att
r) {\n clone.setAttribute(STYLE_SCOPE_ATTRIBUTE, attr);\n }\n /
/ TODO(sorvell): probably 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$.le
ngth) {\n refNode = s$[s$.length-1].nextElementSibling;\n }\n
}\n scope.insertBefore(clone, refNode);\n }\n }\n\n function create
StyleElement(cssText, scope) {\n scope = scope || document;\n scope = scop
e.createElement ? scope : scope.ownerDocument;\n var style = scope.createElem
ent('style');\n style.textContent = cssText;\n return style;\n }\n\n fun
ction cssTextFromSheet(sheet) {\n return (sheet && sheet.__resource) || '';\n
}\n\n function matchesSelector(node, inSelector) {\n if (matches) {\n
return matches.call(node, inSelector);\n }\n }\n var p = HTMLElement.proto
type;\n var matches = p.matches || p.matchesSelector || p.webkitMatchesSelector
\n || p.mozMatchesSelector;\n \n // exports\n\n scope.api.declaration.s
tyles = styles;\n scope.applyStyleToScope = applyStyleToScope;\n \n})(Polymer)
;\n", |
86 "/*\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://poly
mer.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
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 api = scope.api.instance.
events;\n var EVENT_PREFIX = api.EVENT_PREFIX;\n // polymer-element declarativ
e api: events feature\n\n var mixedCaseEventTypes = {};\n [\n 'webkitAnimat
ionStart',\n 'webkitAnimationEnd',\n 'webkitTransitionEnd',\n 'DOMFocus
Out',\n 'DOMFocusIn',\n 'DOMMouseScroll'\n ].forEach(function(e) {\n m
ixedCaseEventTypes[e.toLowerCase()] = e;\n });\n\n var events = {\n parseHo
stEvents: function() {\n // our delegates map\n var delegates = this.p
rototype.eventDelegates;\n // extract data from attributes into delegates\n
this.addAttributeDelegates(delegates);\n },\n addAttributeDelegates:
function(delegates) {\n // for each attribute\n for (var i=0, a; a=th
is.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 to delegates\n delegates[this.removeEventPrefix(a.nam
e)] = 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.Polym
erBase) {\n controller = events.findController(target);\n }\n\n
var args = [e, e.detail, e.currentTarget];\n controller.dispatchMe
thod(controller, method, args);\n };\n },\n prepareEventBinding: func
tion(pathString, name, node) {\n if (!this.hasEventPrefix(name))\n r
eturn;\n\n var eventType = this.removeEventPrefix(name);\n eventType =
mixedCaseEventTypes[eventType] || eventType;\n\n var events = this;\n\n
return function(model, node, oneTime) {\n var handler = events.getEven
tHandler(undefined, node, pathString);\n node.addEventListener(eventType,
handler);\n\n if (oneTime)\n return;\n\n // TODO(rafaelw
): This is really pointless work. Aside from the cost\n // of these alloc
ations, NodeBind is going to setAttribute back to its\n // current value.
Fixing this would mean changing the TemplateBinding\n // binding delegat
e API.\n function bindingValue() {\n return '{{ ' + pathString +
' }}';\n }\n\n return {\n open: bindingValue,\n
discardChanges: bindingValue,\n close: function() {\n node.
removeEventListener(eventType, handler);\n }\n };\n };\n
}\n };\n\n var prefixLength = EVENT_PREFIX.length;\n\n // exports\n scope.a
pi.declaration.events = events;\n\n})(Polymer);\n", | 86 "/*\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://poly
mer.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
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 api = scope.api.instance.
events;\n var EVENT_PREFIX = api.EVENT_PREFIX;\n // polymer-element declarativ
e api: events feature\n\n var mixedCaseEventTypes = {};\n [\n 'webkitAnimat
ionStart',\n 'webkitAnimationEnd',\n 'webkitTransitionEnd',\n 'DOMFocus
Out',\n 'DOMFocusIn',\n 'DOMMouseScroll'\n ].forEach(function(e) {\n m
ixedCaseEventTypes[e.toLowerCase()] = e;\n });\n\n var events = {\n parseHo
stEvents: function() {\n // our delegates map\n var delegates = this.p
rototype.eventDelegates;\n // extract data from attributes into delegates\n
this.addAttributeDelegates(delegates);\n },\n addAttributeDelegates:
function(delegates) {\n // for each attribute\n for (var i=0, a; a=th
is.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 to delegates\n delegates[this.removeEventPrefix(a.nam
e)] = 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.Polym
erBase) {\n controller = events.findController(target);\n }\n\n
var args = [e, e.detail, e.currentTarget];\n controller.dispatchMe
thod(controller, method, args);\n };\n },\n prepareEventBinding: func
tion(pathString, name, node) {\n if (!this.hasEventPrefix(name))\n r
eturn;\n\n var eventType = this.removeEventPrefix(name);\n eventType =
mixedCaseEventTypes[eventType] || eventType;\n\n var events = this;\n\n
return function(model, node, oneTime) {\n var handler = events.getEven
tHandler(undefined, node, pathString);\n PolymerGestures.addEventListener
(node, eventType, handler);\n\n if (oneTime)\n return;\n\n
// TODO(rafaelw): This is really pointless work. Aside from the cost\n
// of these allocations, NodeBind is going to setAttribute back to its\n
// current value. Fixing this would mean changing the TemplateBinding\n /
/ binding delegate API.\n function bindingValue() {\n return '{{
' + pathString + ' }}';\n }\n\n return {\n open: binding
Value,\n discardChanges: bindingValue,\n close: function() {\n
PolymerGestures.removeEventListener(node, eventType, handler);\n
}\n };\n };\n }\n };\n\n var prefixLength = EVENT_PREFIX.
length;\n\n // exports\n scope.api.declaration.events = events;\n\n})(Polymer)
;\n", |
87 "/*\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://poly
mer.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
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 /
/ element api\n\n var properties = {\n inferObservers: function(prototype) {
\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.slice(
0, -7)\n observe[property] = observe[property] || n;\n }\n
}\n },\n explodeObservers: function(prototype) {\n // called before p
rototype.observe is 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 exploded[ni] = o[n];\n }\n }\n prototype.obs
erve = exploded;\n }\n },\n optimizePropertyMaps: function(prototype)
{\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 (prototy
pe.publish) {\n // construct name list\n var a = prototype._publis
hNames = [];\n for (var n in prototype.publish) {\n a.push(n);\n
}\n }\n if (prototype.computed) {\n // construct name l
ist\n var a = prototype._computedNames = [];\n for (var n in proto
type.computed) {\n a.push(n);\n }\n }\n },\n publishP
roperties: function(prototype, base) {\n // if we have any properties to pu
blish\n var publish = prototype.publish;\n if (publish) {\n //
transcribe `publish` entries onto own prototype\n this.requireProperties(
publish, prototype, base);\n // construct map of lower-cased property nam
es\n prototype._publishLC = this.lowerCaseMap(publish);\n }\n },\
n // sync prototype to property descriptors;\n // desriptor format contain
s 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 // refl
ect: {foo: true} is also supported\n //\n requireProperties: function(prop
ertyDescriptors, prototype, base) {\n // reflected properties\n protot
ype.reflect = prototype.reflect || {};\n // ensure a prototype value for ea
ch property\n // and update the property's reflect to attribute status\n
for (var n in propertyDescriptors) {\n var propertyDescriptor = proper
tyDescriptors[n];\n var reflects = this.reflectHintForDescriptor(property
Descriptor);\n if (prototype.reflect[n] === undefined && reflects !== und
efined) {\n prototype.reflect[n] = reflects;\n }\n if (pr
ototype[n] === undefined) {\n prototype[n] = this.valueForDescriptor(pr
opertyDescriptor);\n }\n }\n },\n valueForDescriptor: function
(propertyDescriptor) {\n var value = typeof propertyDescriptor === 'object'
&&\n propertyDescriptor ? propertyDescriptor.value : propertyDescripto
r;\n return value !== undefined ? value : null;\n },\n // returns the
value of the descriptor's 'reflect' property or undefined\n reflectHintForDe
scriptor: function(propertyDescriptor) {\n if (typeof propertyDescriptor ==
= 'object' &&\n propertyDescriptor && propertyDescriptor.reflect !== un
defined) {\n return propertyDescriptor.reflect;\n }\n },\n low
erCaseMap: function(properties) {\n var map = {};\n for (var n in prop
erties) {\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 var privateObservable = name +
'Observable_';\n proto[privateName] = proto[name];\n\n Object.definePr
operty(proto, name, {\n get: function() {\n var observable = thi
s[privateObservable];\n if (observable)\n observable.deliver
();\n\n return this[privateName];\n },\n set: function(va
lue) {\n var observable = this[privateObservable];\n if (obser
vable) {\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 configurable: true\n });\n },\
n createPropertyAccessors: function(prototype) {\n var n$ = prototype._p
ublishNames;\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 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})(Polymer)
;\n", | 87 "/*\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://poly
mer.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
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 /
/ element api\n\n var properties = {\n inferObservers: function(prototype) {
\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.slice(
0, -7)\n observe[property] = observe[property] || n;\n }\n
}\n },\n explodeObservers: function(prototype) {\n // called before p
rototype.observe is 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 exploded[ni] = o[n];\n }\n }\n prototype.obs
erve = exploded;\n }\n },\n optimizePropertyMaps: function(prototype)
{\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 (prototy
pe.publish) {\n // construct name list\n var a = prototype._publis
hNames = [];\n for (var n in prototype.publish) {\n a.push(n);\n
}\n }\n if (prototype.computed) {\n // construct name l
ist\n var a = prototype._computedNames = [];\n for (var n in proto
type.computed) {\n a.push(n);\n }\n }\n },\n publishP
roperties: function(prototype, base) {\n // if we have any properties to pu
blish\n var publish = prototype.publish;\n if (publish) {\n //
transcribe `publish` entries onto own prototype\n this.requireProperties(
publish, prototype, base);\n // construct map of lower-cased property nam
es\n prototype._publishLC = this.lowerCaseMap(publish);\n }\n },\
n //\n // `name: value` entries in the `publish` object may need to genera
te \n // matching properties on the prototype.\n //\n // Values that ar
e objects may have a `reflect` property, which\n // signals that the value de
scribes property control metadata.\n // In metadata objects, the prototype de
fault value (if any)\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 whe
ther changes to the property\n // are reflected back to the attribute (defaul
t false). \n //\n // A value is stored on the prototype unless it's === `u
ndefined`,\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 reflection data is stored on another prototype object, `reflect`\n
// which also can be specified directly.\n //\n // reflect: {\n //
foo: true\n // }\n //\n requireProperties: function(propertyInfos, pro
totype, 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 statu
s\n for (var n in propertyInfos) {\n var value = propertyInfos[n];\n
// value has metadata if it has a `reflect` property\n if (value
&& value.reflect !== undefined) {\n prototype.reflect[n] = Boolean(valu
e.reflect);\n value = value.value;\n }\n // only set a va
lue if one is specified\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.toLowe
rCase()] = n;\n }\n return map;\n },\n createPropertyAccessor: f
unction(name) {\n var proto = this.prototype;\n\n var privateName = na
me + '_';\n var privateObservable = name + 'Observable_';\n proto[pri
vateName] = 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[pr
ivateName];\n },\n set: function(value) {\n var observabl
e = this[privateObservable];\n if (observable) {\n observabl
e.setValue(value);\n return;\n }\n\n var oldValue =
this[privateName];\n this[privateName] = value;\n this.emitPr
opertyChangeRecord(name, value, oldValue);\n\n return value;\n }
,\n configurable: true\n });\n },\n createPropertyAccessors: f
unction(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._computedNames;\n if (n$ && n$.length) {\n for (var i=0,
l=n$.length, n, fn; (i<l) && (n=n$[i]); i++) {\n this.createPropertyAcc
essor(n);\n }\n }\n }\n };\n\n // exports\n\n scope.api.declar
ation.properties = properties;\n\n})(Polymer);\n", |
88 "/*\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://poly
mer.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
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_REGE
X = /\\s|,/;\n\n // attributes api\n\n var attributes = {\n \n inheritAt
tributesObjects: function(prototype) {\n // chain our lower-cased publish m
ap 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 publishAttribute
s: function(prototype, base) {\n // merge names from 'attributes' attribute
\n var attributes = this.getAttribute(ATTRIBUTES_ATTRIBUTE);\n if (att
ributes) {\n // get properties to publish\n var publish = prototyp
e.publish || (prototype.publish = {});\n // names='a b c' or names='a,b,c
'\n var names = attributes.split(ATTRIBUTES_REGEX);\n // record ea
ch 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 // if the
user hasn't specified a value, we want to use the\n // default, unless
a superclass has already chosen one\n if (n && publish[n] === undefine
d) {\n // TODO(sjmiles): querying native properties on IE11 (and poss
ibly\n // on other browsers) throws an exception because there is no
actual\n // instance.\n // In fact, trying to publish nati
ve properties is known bad for this\n // and other reasons, and we ne
ed to solve this problem writ large.\n try {\n var hasVa
lue = (base[n] !== undefined);\n } catch(x) {\n hasValue
= false;\n }\n // supply an empty 'descriptor' object 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 from <el
ement>\n accumulateInstanceAttributes: function() {\n // inherit instanc
e 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.isInstanceAt
tribute(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 attrib
utes onto instances\n blackList: {\n name: 1,\n 'extends': 1,\n
constructor: 1,\n noscript: 1,\n assetpath: 1,\n 'cache-csstext
': 1\n }\n \n };\n\n // add ATTRIBUTES_ATTRIBUTE to the blacklist\n att
ributes.blackList[ATTRIBUTES_ATTRIBUTE] = 1;\n\n // exports\n\n scope.api.decl
aration.attributes = attributes;\n\n})(Polymer);\n", | 88 "/*\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://poly
mer.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
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_REGE
X = /\\s|,/;\n\n // attributes api\n\n var attributes = {\n \n inheritAt
tributesObjects: function(prototype) {\n // chain our lower-cased publish m
ap 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 publishAttribute
s: function(prototype, base) {\n // merge names from 'attributes' attribute
into the 'publish' object\n var attributes = this.getAttribute(ATTRIBUTES_
ATTRIBUTE);\n if (attributes) {\n // create a `publish` object if ne
eded.\n // the `publish` object is only relevant to this prototype, the \
n // publishing logic in `declaration/properties.js` is responsible for\n
// managing property values on the prototype chain.\n // TODO(sjm
iles): the `publish` object is later chained to it's \n //
ancestor object, presumably this is only for \n // reflec
tion or other non-library uses. \n var publish = prototype.publish || (pr
ototype.publish = {}); \n // names='a b c' or names='a,b,c'\n var
names = attributes.split(ATTRIBUTES_REGEX);\n // record each name for pub
lishing\n for (var i=0, l=names.length, n; i<l; i++) {\n // remo
ve excess ws\n n = names[i].trim();\n // looks weird, but caus
es n to exist on `publish` if it does not;\n // a more careful test wou
ld 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 accumulateInstanceAttribu
tes: function() {\n // inherit instance attributes\n var clonable = th
is.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.isInstanceAttribute(a.name)) {\n clonabl
e[a.name] = a.value;\n }\n }\n },\n\n isInstanceAttribute: fun
ction(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 constructor: 1,\n noscript: 1,
\n assetpath: 1,\n 'cache-csstext': 1\n }\n \n };\n\n // add A
TTRIBUTES_ATTRIBUTE to the blacklist\n attributes.blackList[ATTRIBUTES_ATTRIBUT
E] = 1;\n\n // exports\n\n scope.api.declaration.attributes = attributes;\n\n}
)(Polymer);\n", |
89 "/*\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://poly
mer.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
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 var events = scope.api.declaration.events;\n\n var syntax = new Po
lymerExpressions();\n var prepareBinding = syntax.prepareBinding;\n\n // Polym
er takes a first crack at the binding to see if it's a declarative\n // event h
andler.\n syntax.prepareBinding = function(pathString, name, node) {\n retur
n events.prepareEventBinding(pathString, name, node) ||\n prepareBindi
ng.call(syntax, pathString, name, node);\n };\n\n // declaration api supportin
g mdv\n var mdv = {\n syntax: syntax,\n fetchTemplate: function() {\n
return this.querySelector('template');\n },\n templateContent: function(
) {\n var template = this.fetchTemplate();\n return template && Platfo
rm.templateContent(template);\n },\n installBindingDelegate: function(temp
late) {\n if (template) {\n template.bindingDelegate = this.syntax;\
n }\n }\n };\n\n // exports\n scope.api.declaration.mdv = mdv;\n\n})(
Polymer);\n", | 89 "/*\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://poly
mer.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
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 var events = scope.api.declaration.events;\n\n var syntax = new Po
lymerExpressions();\n var prepareBinding = syntax.prepareBinding;\n\n // Polym
er takes a first crack at the binding to see if it's a declarative\n // event h
andler.\n syntax.prepareBinding = function(pathString, name, node) {\n retur
n events.prepareEventBinding(pathString, name, node) ||\n prepareBindi
ng.call(syntax, pathString, name, node);\n };\n\n // declaration api supportin
g mdv\n var mdv = {\n syntax: syntax,\n fetchTemplate: function() {\n
return this.querySelector('template');\n },\n templateContent: function(
) {\n var template = this.fetchTemplate();\n return template && Platfo
rm.templateContent(template);\n },\n installBindingDelegate: function(temp
late) {\n if (template) {\n template.bindingDelegate = this.syntax;\
n }\n }\n };\n\n // exports\n scope.api.declaration.mdv = mdv;\n\n})(
Polymer);\n", |
90 "/*\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://poly
mer.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
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 api = scope.api;\n var isBase = scope.isBase;\n var exten
d = scope.extend;\n\n // prototype api\n\n var prototype = {\n\n register:
function(name, extendeeName) {\n // build prototype combining extendee, Pol
ymer base, and named api\n this.buildPrototype(name, extendeeName);\n
// register our custom element with the platform\n this.registerPrototype(n
ame, extendeeName);\n // reference constructor in a global named by 'constr
uctor' attribute\n this.publishConstructor();\n },\n\n buildPrototype
: function(name, extendeeName) {\n // get our custom prototype (before chai
ning)\n var extension = scope.getRegisteredPrototype(name);\n // get b
asal prototype\n var base = this.generateBasePrototype(extendeeName);\n
// implement declarative features\n this.desugarBeforeChaining(extension,
base);\n // join prototypes\n this.prototype = this.chainPrototypes(e
xtension, base);\n // more declarative features\n this.desugarAfterCha
ining(name, extendeeName);\n },\n\n desugarBeforeChaining: function(protot
ype, base) {\n // back reference declaration element\n // TODO(sjmiles
): replace `element` with `elementElement` or `declaration`\n prototype.ele
ment = this;\n // transcribe `attributes` declarations onto own prototype's
`publish`\n this.publishAttributes(prototype, base);\n // `publish` p
roperties to the prototype and to attribute watch\n this.publishProperties(
prototype, base);\n // infer observers for `observe` list based on method n
ames\n this.inferObservers(prototype);\n // desugar compound observer
syntax, e.g. 'a b c' \n this.explodeObservers(prototype);\n },\n\n ch
ainPrototypes: function(prototype, base) {\n // chain various meta-data obj
ects 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 ensurePrototypeTraversal(chained);\n
return chained;\n },\n\n inheritMetaData: function(prototype, base) {
\n // chain observe object to inherited\n this.inheritObject('observe'
, prototype, base);\n // chain publish object to inherited\n this.inhe
ritObject('publish', prototype, base);\n // chain reflect object to inherit
ed\n this.inheritObject('reflect', prototype, base);\n // chain our lo
wer-cased publish map to the inherited version\n this.inheritObject('_publi
shLC', prototype, base);\n // chain our instance attributes map to the inhe
rited version\n this.inheritObject('_instanceAttributes', prototype, base);
\n // chain our event delegates map to the inherited version\n this.in
heritObject('eventDelegates', prototype, base);\n },\n\n // implement vari
ous declarative features\n desugarAfterChaining: function(name, extendee) {\n
// build side-chained lists to optimize iterations\n this.optimizePro
pertyMaps(this.prototype);\n this.createPropertyAccessors(this.prototype);\
n // install mdv delegate on template\n this.installBindingDelegate(th
is.fetchTemplate());\n // install external stylesheets as if they are inlin
e\n this.installSheets();\n // adjust any paths in dom from imports\n
this.resolveElementPaths(this);\n // compile list of attributes to cop
y 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 re
source urls. e.g.\n // this.$.image.src = this.resolvePath('images/foo.png'
)\n this.addResolvePathApi();\n // under ShadowDOMPolyfill, transforms
to approximate missing CSS features\n if (window.ShadowDOMPolyfill) {\n
Platform.ShadowCSS.shimStyling(this.templateContent(), name, extendee);\n
}\n // allow custom element access to the declarative context\n if
(this.prototype.registerCallback) {\n this.prototype.registerCallback(th
is);\n }\n },\n\n // if a named constructor is requested in element,
map a reference\n // to the constructor to the given symbol\n publishConst
ructor: 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 named api\n generateBas
ePrototype: function(extnds) {\n var prototype = this.findBasePrototype(ext
nds);\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 = thi
s.ensureBaseApi(prototype);\n // memoize this base\n memoizedBases
[extnds] = prototype;\n }\n return prototype;\n },\n\n findBaseP
rototype: function(name) {\n return memoizedBases[name];\n },\n\n //
install Polymer instance api into prototype chain, as needed \n ensureBaseApi
: function(prototype) {\n if (prototype.PolymerBase) {\n return prot
otype;\n }\n var extended = Object.create(prototype);\n // we nee
d a unique copy of base api for each base prototype\n // therefore we 'exte
nd' here instead of simply chaining\n api.publish(api.instance, extended);\
n // TODO(sjmiles): sharing methods across prototype chains is\n // no
t supported by 'super' implementation which optimizes\n // by memoizing pro
totype relationships.\n // Probably we should have a version of 'extend' th
at is \n // share-aware: it could study the text of each 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 pa
tch it manually.\n // To avoid re-entrancy problems, the special super meth
od\n // installed is called `mixinSuper` and the mixin method\n // mus
t use this method instead of the default `super`.\n this.mixinMethod(extend
ed, prototype, api.instance.mdv, 'bind');\n // return buffed-up prototype\n
return extended;\n },\n\n mixinMethod: function(extended, prototype,
api, name) {\n var $super = function(args) {\n return prototype[nam
e].apply(this, args);\n };\n extended[name] = function() {\n th
is.mixinSuper = $super;\n return api[name].apply(this, 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 pro
perties 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 prototype: this.prototype\n }\n // native element must b
e specified in extends\n var typeExtension = this.findTypeExtension(extende
e);\n if (typeExtension) {\n info.extends = typeExtension;\n }\
n // register the prototype with HTMLElement for name lookup\n HTMLEle
ment.register(name, this.prototype);\n // register the custom type\n t
his.ctor = document.registerElement(name, info);\n },\n\n findTypeExtensio
n: function(name) {\n if (name && name.indexOf('-') < 0) {\n return
name;\n } else {\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 memoizedBa
ses = {};\n\n // implementation of 'chainObject' depends on support for __proto
__\n if (Object.__proto__) {\n prototype.chainObject = function(object, inhe
rited) {\n if (object && inherited && object !== inherited) {\n obje
ct.__proto__ = inherited;\n }\n return object;\n }\n } else {\n
prototype.chainObject = function(object, inherited) {\n if (object && inhe
rited && 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 // chain of a custom element is simulated via installation of __pr
oto__.\n // Although custom elements manages this, we install it here so it's\n
// available during desugaring.\n function ensurePrototypeTraversal(prototype
) {\n if (!Object.__proto__) {\n var ancestor = Object.getPrototypeOf(pr
ototype);\n prototype.__proto__ = ancestor;\n if (isBase(ancestor)) {\
n ancestor.__proto__ = Object.getPrototypeOf(ancestor);\n }\n }\n
}\n\n // exports\n\n api.declaration.prototype = prototype;\n\n})(Polymer);\
n", | 90 "/*\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://poly
mer.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
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 api = scope.api;\n var isBase = scope.isBase;\n var exten
d = scope.extend;\n\n var hasShadowDOMPolyfill = window.ShadowDOMPolyfill;\n\n
// prototype api\n\n var prototype = {\n\n register: function(name, extende
eName) {\n // build prototype combining extendee, Polymer base, and named a
pi\n this.buildPrototype(name, 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, exten
deeName) {\n // get our custom prototype (before chaining)\n var exten
sion = scope.getRegisteredPrototype(name);\n // get basal prototype\n
var base = this.generateBasePrototype(extendeeName);\n // implement declara
tive features\n this.desugarBeforeChaining(extension, base);\n // join
prototypes\n this.prototype = this.chainPrototypes(extension, base);\n
// more declarative features\n this.desugarAfterChaining(name, extendeeNa
me);\n },\n\n desugarBeforeChaining: function(prototype, base) {\n //
back reference declaration element\n // TODO(sjmiles): replace `element` w
ith `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 proto
type and to attribute watch\n this.publishProperties(prototype, base);\n
// infer observers for `observe` list based on method names\n this.infer
Observers(prototype);\n // desugar compound observer syntax, e.g. 'a b c' \
n this.explodeObservers(prototype);\n },\n\n chainPrototypes: functio
n(prototype, base) {\n // chain various meta-data objects to inherited vers
ions\n this.inheritMetaData(prototype, base);\n // chain custom api to
inherited\n var chained = this.chainObject(prototype, base);\n // x-p
latform fixup\n ensurePrototypeTraversal(chained);\n return chained;\n
},\n\n inheritMetaData: function(prototype, base) {\n // chain obser
ve object to inherited\n this.inheritObject('observe', prototype, base);\n
// chain publish object to inherited\n this.inheritObject('publish', p
rototype, base);\n // chain reflect object to inherited\n this.inherit
Object('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 t
his.inheritObject('_instanceAttributes', prototype, base);\n // chain our e
vent delegates map to the inherited version\n this.inheritObject('eventDele
gates', prototype, base);\n },\n\n // implement various declarative featur
es\n desugarAfterChaining: function(name, extendee) {\n // build side-ch
ained lists to optimize iterations\n this.optimizePropertyMaps(this.prototy
pe);\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.installS
heets();\n // adjust any paths in dom from imports\n this.resolveEleme
ntPaths(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 help
er method this.resolvePath to aid in \n // setting resource urls. e.g.\n
// this.$.image.src = this.resolvePath('images/foo.png')\n this.addResol
vePathApi();\n // under ShadowDOMPolyfill, transforms to approximate missin
g CSS features\n if (hasShadowDOMPolyfill) {\n Platform.ShadowCSS.sh
imStyling(this.templateContent(), name, extendee);\n }\n // allow cust
om element access to the declarative context\n if (this.prototype.registerC
allback) {\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 w
indow[symbol] = this.ctor;\n }\n },\n\n // build prototype combining
extendee, Polymer base, and named api\n generateBasePrototype: function(extnd
s) {\n var prototype = this.findBasePrototype(extnds);\n if (!prototyp
e) {\n // create a prototype based on tag-name extension\n var pro
totype = HTMLElement.getPrototypeForTag(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[name];\n },\n\n // install Polymer instance a
pi into prototype chain, as needed \n ensureBaseApi: function(prototype) {\n
if (prototype.PolymerBase) {\n return prototype;\n }\n var
extended = Object.create(prototype);\n // we need a unique copy of base ap
i for each base prototype\n // therefore we 'extend' here instead of simply
chaining\n api.publish(api.instance, extended);\n // TODO(sjmiles): s
haring methods across prototype chains is\n // not supported by 'super' imp
lementation which optimizes\n // by memoizing prototype relationships.\n
// Probably we should have a version of 'extend' that is \n // share-awa
re: it could study the text of each 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 mixin method\n // must use this method instead
of the default `super`.\n this.mixinMethod(extended, prototype, api.instanc
e.mdv, 'bind');\n // return buffed-up prototype\n return extended;\n
},\n\n mixinMethod: function(extended, prototype, api, name) {\n var $
super = function(args) {\n return prototype[name].apply(this, args);\n
};\n extended[name] = function() {\n this.mixinSuper = $super;\n
return api[name].apply(this, arguments);\n }\n },\n\n // ensur
e 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.chainObject(source, base[name]);\n },\n\n //
register 'prototype' to custom element 'name', store constructor \n register
Prototype: function(name, extendee) { \n var info = {\n prototype: t
his.prototype\n }\n // native element must be specified in extends\n
var typeExtension = this.findTypeExtension(extendee);\n if (typeExtensi
on) {\n info.extends = typeExtension;\n }\n // register the pro
totype with HTMLElement for name lookup\n HTMLElement.register(name, this.p
rototype);\n // register the custom type\n this.ctor = document.regist
erElement(name, info);\n },\n\n findTypeExtension: function(name) {\n
if (name && name.indexOf('-') < 0) {\n return name;\n } else {\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 // implemen
tation 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__ = inherited;\
n }\n return object;\n }\n } else {\n prototype.chainObject = f
unction(object, inherited) {\n if (object && inherited && object !== inheri
ted) {\n var chained = Object.create(inherited);\n object = extend
(chained, object);\n }\n return object;\n }\n }\n\n // On platfor
ms that do not support __proto__ (versions of IE), the prototype\n // chain of
a custom element is simulated via installation of __proto__.\n // Although cust
om elements manages this, we install it here so it's\n // available during desu
garing.\n function ensurePrototypeTraversal(prototype) {\n if (!Object.__pro
to__) {\n var ancestor = Object.getPrototypeOf(prototype);\n prototype
.__proto__ = ancestor;\n if (isBase(ancestor)) {\n ancestor.__proto_
_ = Object.getPrototypeOf(ancestor);\n }\n }\n }\n\n // exports\n\n a
pi.declaration.prototype = prototype;\n\n})(Polymer);\n", |
91 "/*\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://poly
mer.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
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 /
*\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 efficient\n alternative.
One issue is that remote @import stylesheets are \n re-fetched whenever stamp
ed into a shadowRoot.\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 tas
k after\n upgrade (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 le
ss\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 eleme
nts upgrade.\n\n */\n var queue = {\n\n // tell the queue to wait for an el
ement 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: funct
ion(element, check, go) {\n var shouldAdd = element.__queue && !element.__q
ueue.check;\n if (shouldAdd) {\n queueForElement(element).push(eleme
nt);\n element.__queue.check = check;\n element.__queue.go = go;\n
}\n return (this.indexOf(element) !== 0);\n },\n\n indexOf: fun
ction(element) {\n var i = queueForElement(element).indexOf(element);\n
if (i >= 0 && document.contains(element)) {\n i += (HTMLImports.useNati
ve || HTMLImports.ready) ? \n importQueue.length : 1e9;\n }\n
return i; \n },\n\n // tell the queue an element is ready to be register
ed\n go: function(element) {\n var readied = this.remove(element);\n
if (readied) {\n element.__queue.flushable = true;\n this.addToF
lushQueue(readied);\n this.check();\n }\n },\n\n remove: funct
ion(element) {\n var i = this.indexOf(element);\n if (i !== 0) {\n
//console.warn('queue order wrong', i);\n return;\n }\n ret
urn 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 (this.canReady()) {\n
this.ready();\n return true;\n }\n },\n\n nextElement: fu
nction() {\n return nextQueued();\n },\n\n canReady: 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 addToFlushQueue: functi
on(element) {\n flushQueue.push(element); \n },\n\n flush: function(
) {\n // prevent re-entrance\n if (this.flushing) {\n return;\n
}\n if (flushQueue.length) {\n console.warn('flushing %s eleme
nts', flushQueue.length);\n }\n this.flushing = true;\n var eleme
nt;\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 upgra
ding\n // while registering. This way we avoid having to upgrade each docum
ent\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.upgradeDoc
umentTree(document);\n CustomElements.ready = true;\n }\n Platf
orm.flush();\n requestAnimationFrame(this.flushReadyCallbacks);\n },\n\n
addReadyCallback: function(callback) {\n if (callback) {\n ready
Callbacks.push(callback);\n }\n },\n\n flushReadyCallbacks: function(
) {\n if (readyCallbacks) {\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 readyCal
lbacks = [];\n\n function queueForElement(element) {\n return document.conta
ins(element) ? mainQueue : importQueue;\n }\n\n function nextQueued() {\n r
eturn importQueue.length ? importQueue[0] : mainQueue[0];\n }\n\n var polymerR
eadied = false; \n\n document.addEventListener('WebComponentsReady', function()
{\n CustomElements.ready = false;\n });\n \n function whenPolymerReady(ca
llback) {\n queue.waitToReady = true;\n CustomElements.ready = false;\n
HTMLImports.whenImportsReady(function() {\n queue.addReadyCallback(callbac
k);\n queue.waitToReady = false;\n queue.check();\n });\n }\n\n /
/ exports\n scope.elements = elements;\n scope.queue = queue;\n scope.whenRea
dy = scope.whenPolymerReady = whenPolymerReady;\n})(Polymer);\n", | 91 "/*\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://poly
mer.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
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 /
*\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 efficient\n alternative.
One issue is that remote @import stylesheets are \n re-fetched whenever stamp
ed into a shadowRoot.\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 tas
k after\n upgrade (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 le
ss\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 eleme
nts upgrade.\n\n */\n var queue = {\n\n // tell the queue to wait for an el
ement 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: funct
ion(element, check, go) {\n var shouldAdd = element.__queue && !element.__q
ueue.check;\n if (shouldAdd) {\n queueForElement(element).push(eleme
nt);\n element.__queue.check = check;\n element.__queue.go = go;\n
}\n return (this.indexOf(element) !== 0);\n },\n\n indexOf: fun
ction(element) {\n var i = queueForElement(element).indexOf(element);\n
if (i >= 0 && document.contains(element)) {\n i += (HTMLImports.useNati
ve || HTMLImports.ready) ? \n importQueue.length : 1e9;\n }\n
return i; \n },\n\n // tell the queue an element is ready to be register
ed\n go: function(element) {\n var readied = this.remove(element);\n
if (readied) {\n element.__queue.flushable = true;\n this.addToF
lushQueue(readied);\n this.check();\n }\n },\n\n remove: funct
ion(element) {\n var i = this.indexOf(element);\n if (i !== 0) {\n
//console.warn('queue order wrong', i);\n return;\n }\n ret
urn 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 (this.canReady()) {\n
this.ready();\n return true;\n }\n },\n\n nextElement: fu
nction() {\n return nextQueued();\n },\n\n canReady: 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 addToFlushQueue: functi
on(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 (flushQueu
e.length) {\n element = flushQueue.shift();\n element.__queue.go.c
all(element);\n element.__queue = null;\n }\n this.flushing = f
alse;\n },\n\n ready: function() {\n this.flush();\n // TODO(sor
vell): As an optimization, turn off CE polyfill upgrading\n // while regist
ering. This way we avoid having to upgrade each document\n // piecemeal per
registration and can instead register all elements\n // and upgrade once i
n a batch. Without this optimization, upgrade time\n // degrades significan
tly when SD polyfill is used. This is mainly because\n // querying the docu
ment tree for elements is slow under the SD polyfill.\n if (CustomElements.
ready === false) {\n CustomElements.upgradeDocumentTree(document);\n
CustomElements.ready = true;\n }\n Platform.flush();\n request
AnimationFrame(this.flushReadyCallbacks);\n },\n\n addReadyCallback: funct
ion(callback) {\n if (callback) {\n readyCallbacks.push(callback);\n
}\n },\n\n flushReadyCallbacks: function() {\n if (readyCallbac
ks) {\n var fn;\n while (readyCallbacks.length) {\n fn =
readyCallbacks.shift();\n fn();\n }\n }\n },\n\n wait
ToReady: true\n\n };\n\n var elements = [];\n var flushQueue = [];\n var imp
ortQueue = [];\n var mainQueue = [];\n var readyCallbacks = [];\n\n function
queueForElement(element) {\n return document.contains(element) ? mainQueue :
importQueue;\n }\n\n function nextQueued() {\n return importQueue.length ?
importQueue[0] : mainQueue[0];\n }\n\n var polymerReadied = false; \n\n docum
ent.addEventListener('WebComponentsReady', function() {\n CustomElements.read
y = false;\n });\n \n function whenPolymerReady(callback) {\n queue.waitTo
Ready = true;\n CustomElements.ready = false;\n HTMLImports.whenImportsRea
dy(function() {\n queue.addReadyCallback(callback);\n queue.waitToRead
y = false;\n queue.check();\n });\n }\n\n // exports\n scope.elements
= elements;\n scope.queue = queue;\n scope.whenReady = scope.whenPolymerReady
= whenPolymerReady;\n})(Polymer);\n", |
92 "/*\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://poly
mer.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
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 v
ar whenPolymerReady = scope.whenPolymerReady;\n\n function importElements(eleme
ntOrFragment, callback) {\n if (elementOrFragment) {\n document.head.app
endChild(elementOrFragment);\n whenPolymerReady(callback);\n } else if (
callback) {\n callback();\n }\n }\n\n function importUrls(urls, callba
ck) {\n if (urls && urls.length) {\n var frag = document.createDocumen
tFragment();\n for (var i=0, l=urls.length, url, link; (i<l) && (url=urls
[i]); i++) {\n link = document.createElement('link');\n link.r
el = 'import';\n link.href = url;\n frag.appendChild(link);\n
}\n importElements(frag, callback);\n } else if (callback) {\n
callback();\n }\n }\n\n // exports\n scope.import = importUrls;\n sc
ope.importElements = importElements;\n\n})(Polymer);\n", | 92 "/*\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://poly
mer.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
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 v
ar whenPolymerReady = scope.whenPolymerReady;\n\n function importElements(eleme
ntOrFragment, callback) {\n if (elementOrFragment) {\n document.head.app
endChild(elementOrFragment);\n whenPolymerReady(callback);\n } else if (
callback) {\n callback();\n }\n }\n\n function importUrls(urls, callba
ck) {\n if (urls && urls.length) {\n var frag = document.createDocumen
tFragment();\n for (var i=0, l=urls.length, url, link; (i<l) && (url=urls
[i]); i++) {\n link = document.createElement('link');\n link.r
el = 'import';\n link.href = url;\n frag.appendChild(link);\n
}\n importElements(frag, callback);\n } else if (callback) {\n
callback();\n }\n }\n\n // exports\n scope.import = importUrls;\n sc
ope.importElements = importElements;\n\n})(Polymer);\n", |
93 "/*\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://poly
mer.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
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.whenPolymerReady;\n var getRegist
eredPrototype = scope.getRegisteredPrototype;\n var waitingForPrototype = scope
.waitingForPrototype;\n\n // declarative implementation: <polymer-element>\n\n
var prototype = extend(Object.create(HTMLElement.prototype), {\n\n createdCa
llback: function() {\n if (this.getAttribute('name')) {\n this.init(
);\n }\n },\n\n init: function() {\n // fetch declared values\n
this.name = this.getAttribute('name');\n this.extends = this.getAttrib
ute('extends');\n queue.wait(this);\n // initiate any async resource f
etches\n this.loadResources();\n // register when all constraints are
met\n this.registerWhenReady();\n },\n\n // TODO(sorvell): we current
ly queue in the order the prototypes are \n // registered, but we should queu
e in the order that polymer-elements\n // are registered. We are currently bl
ocked from doing this based on \n // crbug.com/395686.\n registerWhenReady
: function() {\n if (this.registered\n || this.waitingForPrototype(thi
s.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 e
xtending from a custom element not registered via Polymer\n if (isCustomTag
(this.extends) && !isRegistered(this.extends)) {\n console.warn('%s is at
tempting 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 (!getRegisteredProt
otype(name)) {\n // then wait for a prototype\n waitingForPrototyp
e(name, this);\n // emulate script if user is not supplying one\n
this.handleNoScript(name);\n // prototype not ready yet\n return t
rue;\n }\n },\n\n handleNoScript: function(name) {\n // if expli
citly marked as 'noscript'\n if (this.hasAttribute('noscript') && !this.nos
cript) {\n this.noscript = true;\n // imperative element registrat
ion\n Polymer(name);\n }\n },\n\n waitingForResources: functio
n() {\n return this._needsResources;\n },\n\n // NOTE: Elements must
be queued in proper order for inheritance/composition\n // dependency resolut
ion. Previously this was enforced for inheritance,\n // and by rule for compo
sition. It's now entirely by rule.\n waitingForQueue: function() {\n ret
urn queue.enqueue(this, this.registerWhenReady, this._register);\n },\n\n
loadResources: function() {\n this._needsResources = true;\n this.load
Styles(function() {\n this._needsResources = false;\n this.registe
rWhenReady();\n }.bind(this));\n }\n\n });\n\n // semi-pluggable 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.publi
sh(api.declaration, prototype);\n\n // utility and bookkeeping\n\n function is
Registered(name) {\n return Boolean(HTMLElement.getPrototypeForTag(name));\n
}\n\n function isCustomTag(name) {\n return (name && name.indexOf('-') >= 0
);\n }\n\n // boot tasks\n\n whenPolymerReady(function() {\n document.body
.removeAttribute('unresolved');\n document.dispatchEvent(\n new CustomEv
ent('polymer-ready', {bubbles: true})\n );\n });\n\n // register polymer-el
ement with document\n\n document.registerElement('polymer-element', {prototype:
prototype});\n\n})(Polymer);\n", | 93 "/*\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://poly
mer.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
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.whenPolymerReady;\n var getRegist
eredPrototype = scope.getRegisteredPrototype;\n var waitingForPrototype = scope
.waitingForPrototype;\n\n // declarative implementation: <polymer-element>\n\n
var prototype = extend(Object.create(HTMLElement.prototype), {\n\n createdCa
llback: function() {\n if (this.getAttribute('name')) {\n this.init(
);\n }\n },\n\n init: function() {\n // fetch declared values\n
this.name = this.getAttribute('name');\n this.extends = this.getAttrib
ute('extends');\n queue.wait(this);\n // initiate any async resource f
etches\n this.loadResources();\n // register when all constraints are
met\n this.registerWhenReady();\n },\n\n // TODO(sorvell): we current
ly queue in the order the prototypes are \n // registered, but we should queu
e in the order that polymer-elements\n // are registered. We are currently bl
ocked from doing this based on \n // crbug.com/395686.\n registerWhenReady
: function() {\n if (this.registered\n || this.waitingForPrototype(thi
s.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 e
xtending from a custom element not registered via Polymer\n if (isCustomTag
(this.extends) && !isRegistered(this.extends)) {\n console.warn('%s is at
tempting 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 (!getRegisteredProt
otype(name)) {\n // then wait for a prototype\n waitingForPrototyp
e(name, this);\n // emulate script if user is not supplying one\n
this.handleNoScript(name);\n // prototype not ready yet\n return t
rue;\n }\n },\n\n handleNoScript: function(name) {\n // if expli
citly marked as 'noscript'\n if (this.hasAttribute('noscript') && !this.nos
cript) {\n this.noscript = true;\n // imperative element registrat
ion\n Polymer(name);\n }\n },\n\n waitingForResources: functio
n() {\n return this._needsResources;\n },\n\n // NOTE: Elements must
be queued in proper order for inheritance/composition\n // dependency resolut
ion. Previously this was enforced for inheritance,\n // and by rule for compo
sition. It's now entirely by rule.\n waitingForQueue: function() {\n ret
urn queue.enqueue(this, this.registerWhenReady, this._register);\n },\n\n
loadResources: function() {\n this._needsResources = true;\n this.load
Styles(function() {\n this._needsResources = false;\n this.registe
rWhenReady();\n }.bind(this));\n }\n\n });\n\n // semi-pluggable 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.publi
sh(api.declaration, prototype);\n\n // utility and bookkeeping\n\n function is
Registered(name) {\n return Boolean(HTMLElement.getPrototypeForTag(name));\n
}\n\n function isCustomTag(name) {\n return (name && name.indexOf('-') >= 0
);\n }\n\n // boot tasks\n\n whenPolymerReady(function() {\n document.body
.removeAttribute('unresolved');\n document.dispatchEvent(\n new CustomEv
ent('polymer-ready', {bubbles: true})\n );\n });\n\n // register polymer-el
ement with document\n\n document.registerElement('polymer-element', {prototype:
prototype});\n\n})(Polymer);\n", |
94 "/*\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://poly
mer.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
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 * The `auto-binding
` element extends the template element. It provides a quick \n * and easy way to
do data binding without the need to setup a model. \n * The `auto-binding` elem
ent itself serves as the model and controller 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 bound to \n * a model. It stamps its content i
n the dom adjacent to itself. When the \n * content is stamped, the `template-bo
und` 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!</bu
tton>\n * </template>\n * <script>\n * var template = document.que
rySelector('template');\n * template.value = 'something';\n * templa
te.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.setAttribut
e('name', 'auto-binding');\n element.setAttribute('extends', 'template');\n el
ement.init();\n\n Polymer('auto-binding', {\n\n createdCallback: function()
{\n this.syntax = this.bindingDelegate = this.makeSyntax();\n // delay
stamping until polymer-ready so that auto-binding is not\n // required to
load last.\n Polymer.whenPolymerReady(function() {\n this.model = th
is;\n this.setAttribute('bind', '');\n // we don't bother with an
explicit signal here, we could ust a MO\n // if necessary\n this.a
sync(function() {\n // note: this will marshall *all* the elements in t
he parentNode\n // rather than just stamped ones. We'd need to use crea
teInstance\n // to fix this or something else fancier.\n this.
marshalNodeReferences(this.parentNode);\n // template stamping is async
hronous 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.declaration.events);\n var self = this;
\n events.findController = function() { return self.model; };\n\n var
syntax = new PolymerExpressions();\n var prepareBinding = syntax.prepareBin
ding; \n syntax.prepareBinding = function(pathString, name, node) {\n
return events.prepareEventBinding(pathString, name, node) ||\n
prepareBinding.call(syntax, pathString, name, node);\n };\n return syn
tax;\n }\n\n });\n\n})();\n" | 94 "/*\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://poly
mer.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
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 * The `auto-binding
` element extends the template element. It provides a quick \n * and easy way to
do data binding without the need to setup a model. \n * The `auto-binding` elem
ent itself serves as the model and controller 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 bound to \n * a model. It stamps its content i
n the dom adjacent to itself. When the \n * content is stamped, the `template-bo
und` 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!</bu
tton>\n * </template>\n * <script>\n * var template = document.que
rySelector('template');\n * template.value = 'something';\n * templa
te.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.setAttribut
e('name', 'auto-binding');\n element.setAttribute('extends', 'template');\n el
ement.init();\n\n Polymer('auto-binding', {\n\n createdCallback: function()
{\n this.syntax = this.bindingDelegate = this.makeSyntax();\n // delay
stamping until polymer-ready so that auto-binding is not\n // required to
load last.\n Polymer.whenPolymerReady(function() {\n this.model = th
is;\n this.setAttribute('bind', '');\n // we don't bother with an
explicit signal here, we could ust a MO\n // if necessary\n this.a
sync(function() {\n // note: this will marshall *all* the elements in t
he parentNode\n // rather than just stamped ones. We'd need to use crea
teInstance\n // to fix this or something else fancier.\n this.
marshalNodeReferences(this.parentNode);\n // template stamping is async
hronous 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.declaration.events);\n var self = this;
\n events.findController = function() { return self.model; };\n\n var
syntax = new PolymerExpressions();\n var prepareBinding = syntax.prepareBin
ding; \n syntax.prepareBinding = function(pathString, name, node) {\n
return events.prepareEventBinding(pathString, name, node) ||\n
prepareBinding.call(syntax, pathString, name, node);\n };\n return syn
tax;\n }\n\n });\n\n})();\n" |
95 ] | 95 ] |
96 } | 96 } |
OLD | NEW |