{
  "lighthouseVersion": "13.0.3",
  "requestedUrl": "https://dispatch.com/",
  "mainDocumentUrl": "https://eu.dispatch.com/",
  "finalDisplayedUrl": "https://eu.dispatch.com/",
  "finalUrl": "https://eu.dispatch.com/",
  "fetchTime": "2026-04-22T20:06:45.823Z",
  "gatherMode": "navigation",
  "runWarnings": [
    "The page may not be loading as expected because your test URL (https://dispatch.com/) was redirected to https://eu.dispatch.com/. Try testing the second URL directly."
  ],
  "userAgent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/147.0.0.0 Safari/537.36",
  "environment": {
    "networkUserAgent": "Mozilla/5.0 (Linux; Android 11; moto g power (2022)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Mobile Safari/537.36",
    "hostUserAgent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/147.0.0.0 Safari/537.36",
    "benchmarkIndex": 2324.5,
    "credits": {
      "axe-core": "4.11.2"
    }
  },
  "audits": {
    "is-on-https": {
      "id": "is-on-https",
      "title": "Uses HTTPS",
      "description": "All sites should be protected with HTTPS, even ones that don't handle sensitive data. This includes avoiding [mixed content](https://developers.google.com/web/fundamentals/security/prevent-mixed-content/what-is-mixed-content), where some resources are loaded over HTTP despite the initial request being served over HTTPS. HTTPS prevents intruders from tampering with or passively listening in on the communications between your app and your users, and is a prerequisite for HTTP/2 and many new web platform APIs. [Learn more about HTTPS](https://developer.chrome.com/docs/lighthouse/pwa/is-on-https/).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "url",
            "valueType": "url",
            "label": "Insecure URL"
          },
          {
            "key": "resolution",
            "valueType": "text",
            "label": "Request Resolution"
          }
        ],
        "items": []
      }
    },
    "redirects-http": {
      "id": "redirects-http",
      "title": "Redirects HTTP traffic to HTTPS",
      "description": "Make sure that you redirect all HTTP traffic to HTTPS in order to enable secure web features for all your users. [Learn more](https://developer.chrome.com/docs/lighthouse/pwa/redirects-http/).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "first-contentful-paint": {
      "id": "first-contentful-paint",
      "title": "First Contentful Paint",
      "description": "First Contentful Paint marks the time at which the first text or image is painted. [Learn more about the First Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/first-contentful-paint/).",
      "score": 0.16,
      "scoreDisplayMode": "numeric",
      "numericValue": 4423.58005,
      "numericUnit": "millisecond",
      "displayValue": "4.4 s",
      "scoringOptions": {
        "p10": 1800,
        "median": 3000
      }
    },
    "largest-contentful-paint": {
      "id": "largest-contentful-paint",
      "title": "Largest Contentful Paint",
      "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
      "score": 0,
      "scoreDisplayMode": "numeric",
      "numericValue": 17233.09155,
      "numericUnit": "millisecond",
      "displayValue": "17.2 s",
      "scoringOptions": {
        "p10": 2500,
        "median": 4000
      }
    },
    "speed-index": {
      "id": "speed-index",
      "title": "Speed Index",
      "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
      "score": 0.54,
      "scoreDisplayMode": "numeric",
      "numericValue": 5532.920862800753,
      "numericUnit": "millisecond",
      "displayValue": "5.5 s",
      "scoringOptions": {
        "p10": 3387,
        "median": 5800
      }
    },
    "screenshot-thumbnails": {
      "id": "screenshot-thumbnails",
      "title": "Screenshot Thumbnails",
      "description": "This is what the load of your site looked like.",
      "score": 1,
      "scoreDisplayMode": "informative",
      "details": {
        "type": "filmstrip",
        "scale": 3000,
        "items": [
          {
            "timing": 375,
            "timestamp": 5984991842378,
            "data": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2MBERISGBUYLxoaL2NCOEJjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY//AABEIAfIA+gMBEQACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4+Tl5ufo6ery8/T19vf4+fr/2gAMAwEAAhEDEQA/APQKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoA//9k="
          },
          {
            "timing": 750,
            "timestamp": 5984992217378,
            "data": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2MBERISGBUYLxoaL2NCOEJjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY//AABEIAfIA+gMBEQACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4+Tl5ufo6ery8/T19vf4+fr/2gAMAwEAAhEDEQA/APQKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoA//9k="
          },
          {
            "timing": 1125,
            "timestamp": 5984992592378,
            "data": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2MBERISGBUYLxoaL2NCOEJjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY//AABEIAfIA+gMBEQACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4+Tl5ufo6ery8/T19vf4+fr/2gAMAwEAAhEDEQA/APQKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoA//9k="
          },
          {
            "timing": 1500,
            "timestamp": 5984992967378,
            "data": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2MBERISGBUYLxoaL2NCOEJjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY//AABEIAfIA+gMBEQACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4+Tl5ufo6ery8/T19vf4+fr/2gAMAwEAAhEDEQA/APQKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoA//9k="
          },
          {
            "timing": 1875,
            "timestamp": 5984993342378,
            "data": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2MBERISGBUYLxoaL2NCOEJjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY//AABEIAfIA+gMBEQACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4+Tl5ufo6ery8/T19vf4+fr/2gAMAwEAAhEDEQA/APQKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoA//9k="
          },
          {
            "timing": 2250,
            "timestamp": 5984993717378,
            "data": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2MBERISGBUYLxoaL2NCOEJjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY//AABEIAfIA+gMBEQACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4+Tl5ufo6ery8/T19vf4+fr/2gAMAwEAAhEDEQA/APQKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoA//9k="
          },
          {
            "timing": 2625,
            "timestamp": 5984994092378,
            "data": "data:image/jpeg;base64,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"
          },
          {
            "timing": 3000,
            "timestamp": 5984994467378,
            "data": "data:image/jpeg;base64,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"
          }
        ]
      }
    },
    "final-screenshot": {
      "id": "final-screenshot",
      "title": "Final Screenshot",
      "description": "The last screenshot captured of the pageload.",
      "score": 1,
      "scoreDisplayMode": "informative",
      "details": {
        "type": "screenshot",
        "timing": 2660,
        "timestamp": 5984994127302,
        "data": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAHyAPoDASIAAhEBAxEB/8QAHQAAAQQDAQEAAAAAAAAAAAAAAAQFBgcBAgMICf/EAFIQAAEDAwMBBQQECgYFCwQDAAECAwQABREGEiExBxMiQVEUYXGBFTKRoRcjQlJVk7HB0dIIFiQzYnJUgpLC4SU0NUNEY3OUovDxRVOEsjZ0g//EABoBAQADAQEBAAAAAAAAAAAAAAABAgMEBQb/xAA0EQACAgEDAQcCBQIHAQAAAAAAAQIDERIhMQQTFCJBUVKRBWFxgaGx8CPBFSQyQlPR4TP/2gAMAwEAAhEDEQA/APVNFFFAFFRZzUd9S4pKdFXZaQSAoS4eD7+XqeLHPmT47jk+0ybW4lW1Lch1pwqGPrAtqUMeXJzxQDjRSG83A22GXks98vISlG8I3E9ACfOmmwawgXhcJCWn4rktgyGkv7BvSFBPBCiDknjHUCgJJRSCddocRht1bqVh13uGw2dxWvnwjHmMHPpg+lIoGpocq0G6LQtiEprv2FuFOX2tm/clIOemeCAeOlAPlFIYd1hyoLEpL7aG3W0uALWAQCAeftFcV363pu0a3+0ILz7TjyFBQKcIUhJGc9cuJ4oB0oriJcY7MSGTvO1PjHiOM4Hy5qN6h1nHsc2U1It815iK2h2RIYLaktIUcBSk7933UBKqKQQbtEltFxKy143EbXh3ajsUUqIB5xkdfTFdjPhhIUZTGCcA94Ovp9xoBTRTRL1Jao0WJJMtpxmU42hpTagoHvFYSrr9X307JUFJCkkFJGQR50BmiiigCiiigCiiigCiiigCiiigCiiigCiiigCiiigCiiigKpkaIeW+4v8AqNp9e5RO5V9kAnnqR3HFTLQtoXZrfIZXZ4VpK3d/dRJi5KV8AbipaEkHjGMeVSSigGHV1pl3OPCdtrrSJsGSJLaXshtzwLQpKiMkZStWDg4IFRKf2fzH02RERyPHYt7DbGxTilqAS8lf1tozwk+Q5qy6KAgTGiZELSdjiW5cZm6Wx1Mk5Kiy873ZbczxkBQUrkDg84NNl07OZk1y2ojvR4sWHBbjIQVqcUkoStKRnAyCF8njp0OatCigKgj9mF1Q/uXJg7N7a+FKP1VsKI+r/wB0v7RRbey25MrgJflwg2wUbincT4fZTkDA6mModeigfdVv0UBUtp7NrrDTBK34HfMPsK7wKUrahDUdCsJKcEnuCPL63XjBetV6QuF3uN6SwmKIt1ioYU+t07mCjodm3xZ5/KFWBRQFSXXQd1jxpkppURxQamFYTuWtaVGQpCEpKep74cjBBTjnPHOH2fXxTMDLsFMbvhKcZXkLbVlBxnbzwk5GcZ+2rfooCq4HZ3cWLH7C4q3l4PQnEuhSvqtMtoWn6vQqbJHrnnFWFpiA7a9OWuBJUhT0WK0wtSCSklKQCRny4pyooAooooAooooAooooAooooAooooAooooAooooAooooDyOntR1qf8A647+pb/lroO0/WfnfHf1Lf8ALUNQ3XZLdfcLpKPYvhHyz6m33P5Jf+E7WX6bd/Ut/wAtZHadrL9Nu/qW/wCWokEVtsqe6UexfCK95t9z+SWfhN1l+m3f1Tf8tH4TdZfpt39U3/LUU2UbajulHsXwh3m33P5ZLPwm6y/Tbv6lv+Wj8Jusf027+pb/AJaiYRWQindKPYvhEd5t9z+WSv8ACZrH9Nu/qm/5az+EzWP6bd/VN/y1E9tG2ndKPYvhDvNvvfyyWfhM1j+m3f1Tf8tZ/CZrH9Nu/qm/5aie2jbTulHsXwh3m33v5ZLPwmax/TTv6pv+Wj8Jmsf007+qb/lqKbaNlO6UexfCHebfe/lkr/CZrH9NO/qm/wCWj8Jmsf007+qb/lqK7Kxsp3Sj2L4RHebfe/lkr/CZrH9NO/qm/wCWsfhM1l+mnf1Tf8tRXZWdgp3Sj2L4Q7zb738slP4TNY/pp39U3/LR+EzWP6ad/VN/y1FdlARk07pR7F8Id5t97+WSr8Jmsf007+qb/loPaZrH9Nu/qm/5aT2HRV6vZSqLEUhk/wDWu+BP/H5Up1Lo36IARFnsT5DaN0htrGW/vrmm+hhNVtRy/sjoiurlFzTePxZr+E3WP6bd/VN/y1j8Jusf007+qb/lqLFFY2V1d0o9i+Ec/ebfe/lkqPabrH9Nu/qm/wCWsfhO1l+m3f1Tf8tRUorGwU7pR7F8Id5t97+WSs9pusv027+pb/lrH4TtZfpt39U3/LUV2Vr3fNT3Oj/jXwh3m33v5ZKz2n6z/Tbv6lv+WtFdqGtP047+pb/lqKlHurVSKdzo/wCNfCHebfe/lkoV2pa1H/1x39S1/LWv4U9a/p139S1/LUUW3XPu/dTulH/GvhE95t9z+WOCUVuEV3S3W4RWxhkThutgiu4RW2z3UGRPso2Uo2e6s7KAThFGynmz2WXdXVJjIAbQMuPLO1DY9VKPSt5ES0LlKjW28MyXW/CoqGxKlee0nyrlu62iiShZLDOirpbrYuUI5Qx7KNlOcm3SY3LrSgnyUOQfnSbu66ITjYsxeUYSjKDxJYYmCKNlKdlZ2VYqJgis7PdSkN1nu6ECbZ7qNnupV3dPVl0pdrwQYcRfdebrnhQPmevyqk7IVrVN4ReEJTeIrLI33ddosJ+W6GorDjzh6JbSVE1NpFq0nphHeakvCZkhPJixDkZ9Cf8A4qM3zttjW1lcbSdujwW8Y3gBSz8SeP214/UfW6obVLU/0PTp+k2S3seESK29nkkRxL1BMj2mKOT3qgVn5ZxWJWqdEaSym1RPpSaj/tEg4QD6jP7hVKztQap1bJUtJlP56rJO0fM8CkabNFiLS7frs2pzqY8b8arPoT0Brxb+v6nqNpSwvRHq09HRRvFZf3JzqztevF4C2WZC22Dx3UXwIx8epqI2zUVxt01uWQ4wtR8KyDtX6g561q3eI8dKk2SzoyDj2iUd/wA/JIpv1Bcb04wwLi+H4zw7wIGNo6jyHurkVGdzp7bBacdyLqKKqXbkpamoGX4o8/8AEn1FN+w5IIxVfWW7v26S04hbjKkHKHM8p/iKt3S8i16sktolSBBmf9ZsTlLg/OTz9te50H1V1f0eo8uGeV1v05Wf1aPgYyitSj3Utda2OrR5pURWhbr6OElNao8Hgyi4PTLkSbM9KCilfd1ju6uVEZRWpbpYUe6sFvmpGRApuufdGnBTfurTu/hUjIsDdbBulIRWwbrLJbAnDdZ7ulPd0d3TJOBNsrdtkrWlKRkk4FKA3Tlp2OHb7BSr6vfJUfgDk/sqk56YuXoWhHVJL1EWv7Zqq53j6AtAaYsTY4W34EccEr81KqHan0gNMOx22ZS5DhQC6vodx5492MVfzh3PuKJSeRn3+tVdrktSdQOtLBCM7DjjgYB//Q18hRBTeZb5PpbZuO0dsEPs+pLpbQEtvl1sDlC+R0Hl86lETUNpuGE3CMYjp47xrpn4VCH2lR5GxW09FfI4P7Ky3ylIwfL93/Gt+7ut6qZOLMu2U1ptSZPZUdlt0CM8H2yAQsDFcu791PNm0/PuCEiHGUW0jBcV4UAD1J4ra4ytI6aBN9vCZkhP/ZYJ3c+hX0r3LOtq6aKVssv9TyIdJZfJuuOENDEV2Q6ltltbjiuiUDJNSNnSC4rAlagmR7TFxn8eob1fBNQS89tTzSFRdIW5m2tnw94lO90/FRqESnr/AH+UXJbsuU8s8qyef9Y/uFeTd9YutemiOP3PSr+mVVrVdLJb9y13o3TI22iGq5yx0fl8Jz7kf/FQjUPaZqjUivZ2HHG2nB4GW/xaSPckcqpib0ymEkPXicxASedoOXD8zz9mKXRGbaoKZs0CS+6v60xzCAkeatyvnXnyqsulm6WX8ndGcKliuOF8EfmWtzKl3+8NMLHVls96sfIcCsR3rdG/6LtftK+gkTVApz8Pq/fUo+ibQzHW3FadlPEjPszJdJ925XHzFad01A8am4FvUBnvJbntDw/1RwPhVZ1RreE/gRsc1nA0Bi+3sbN762U8FtlOxtI+4Y+3rSiFpqIh8NrmxluYyUM/jlj5/VHPw61vMvEB1Qbddn3ZzHhbKu6az7kJpOm93BGGrczGtuRjYwgbyD9qvOoW3CJe/LJQ3ZI8VsOPRmkJb8KXpzg48/qg49/B9a4yrNH1ElwWq4RJc9lHijJwkuJ89nrioy3ZrpdVh1ftUlSiRlZwB08zk+fpWblajBYiKiOpZltkqLjLhUUqzxznrjHpW1GvX4OTKzRjxCeRpuY1a1zo6BIjNKKJDKc97GI/OSRkUx265P26WhSFLRg7kEH7wakrupLym6R7mq44uYR3SgpAw6kfkq4wsH3805CPZ9ZtLTBbag3hPLkFSsIcPmWleX+U/KrWVKx4nsyYTcFmO5J7Dd2dSRm0vKQ1cvyXDwl73H0V+2lTjK21lK0kKHBB8qrWKy7B2pb3BSOFJJ64qyNN3Ry/W58PsrU9FQD358xkJwr1Pvrs+ndTPpbFRbunwzl6/p49RDta+VyY7s1jZ7qWFusd3X0uT5/Aj7usFulnd+6tS37qnJGBGUVp3dLSitdlTkjAr2VsG6VBv3VuG/dXPqN8CTu6yGzSzu62DVRqJwIw0aftGMA3tLh47ttav/SR++m4NVJNHsbVTHcdEJR9pz+6uXrbNNE39jo6SOq6K+47EAvr4ByrHx8qp6/P9/epTgHi8R+PCj/virbW6lmO48U/VQpfHzNU1Jllya+GUBPiCc9T9ZKf3Gvn6XpPYsWWYnWsTEFK1oZ2LO1R8/EE/sTTHcGVwYri2G+/2IKt5OAOAenzFOyVb0BaipR2hR+xxX+8K53gBq2yUuqCGylSCSM4yCnp8UitXKTWCqSyRu9681bqtAYflOIipGBHjJ2tpHwHH20xs2xreFSni655pR+MV8M9Ke0IhFtA3yZoT0bTwj7uP2V39tDPgZDLCehDWVK+7kH51xOEYs69bZi1wVR1td3Ejw2Mj8ZIOVK9wHv+dPbvta1KbeuyYzRx+Jho/GY9CRyPupvtiC7LQpiE4rncp548/fn91PDarnhXs8KHGTnh1854+HH35rqqhtnT/PlHNZNrz/nwcYNsitq7yNbS85n++mLyc/DzpRLmuxAUvS424gBMVISlJPv88VwcjmTgXK8SJA5y1GBCf/TxW8diFBQt5iApjanIkPEbh8B6/GtsSfnt8/tsZ5S/H4/fcQ3K336XFClznu7KwNjCdiEA+fl0qPtWdiOVKuE+Mg9SgLLqz7sJ/fTpebi0+wpS4dxmJ3AbnnVYPwAzj5GmZq6yydlvixYmeAUpBV9pya47cavCv5+Z0V5xux4YixFJxFt8+Yg85XhhofIfKlrU0x1gyTbISPJtgd4v3c8+lR1cC83F0985Ke6jwpOP/UR+yu6NOKbeAddjI44D0jJBx6DFZ7l9hyn6itoJSsypbmc4WrCfhg5GM58hW9s1LBUwpF6szgtiztS4yohTKh5pB4PUZHFc2LJDA2uzl5BJKo7W0H/DnH76WSrczIgBu3MOrQ2StaVELPOATwSfLzNa0w1TSzgpOaUdlkytnTaVCDcJbMi3yQVs3FltYdYPkl1B4I94ppvmi3bcGpTbgkxVHczNYVuQseQJH7+a4t2iW7CectraXGGVfjEhIUEn0OORXOx3S92N9xdv2rirOHoL43NrHw/+DXW4yi9/F/PUxUoyW3hHxdqMyAxc7elLSwtSHIu8kZHUpJ9fQ/bVk9nVo2aU1LILZGC2lOfju/eKjFlTF7neyWFe0+JSGc7W1cnbhXI6+dXVpqGwNAzy19Z/ctefUJAH3JFc07XG1fijdQzW/wACsy1WpbrvKebYeabc4355yOMetcxMhKziUzx6rAr6vtIrlnzWhvfBz7utS37qUh2Oro+0fgsVkFtX1VoPwUKspr1KuLERarTuvdTgWwRWndVbUVcTZDC3VKWl5xA3EADGOOPMUoaZdSvxuJWn/Jg/bn91d4bfdRW0uEbgkFWT5+dLG2goAjp6158ZYSOufLEgarIapZ3ODWwbq/aGekR91UisbfdWl9ePrL/YP+NMUyQmGEFbMlxKupZaLm34gc04MX20otTLLs1LC1kkpeBaPKsdFAeQrg+o2p1afVo7ugrfa6vRM73hSWLLLONuGtg+fH76ptC97rjmfy92RwD9df7xVp6nmx3NOvOsPIcyoDwqCs45/dVWNtpSxt6k7k4z1IQlP7zXmwaSbZ3y3eEKW2SGgkZwQU/DCW0/7xpDqIJNudKnAgHBJxu/Lz/vCnBIy7uO7bncM/8AiE/sRTVqBJXBbb71DRCk8qGcgI+f5orQqhiBhZbQXZMs4A2Zwnp7s4+yu4nBkFLbUeKnyUcbh9uQfurgPYu8G+ZIfB42tgJ+7j9lLI4gpIQxDBWDjLh/aOP31hN78my44MxJLT8kBTsiUtPiG7O0Y/w8D7KcWpkdw5Tb5cp4HAHUD5qx9wrpDmR2nhtLQHKVIabJUc9Mg4OPWnZE5K2g4m5NssqPGAG8j581vTj1/Ywtb9P3EaW71JwIkBiGjGQVqJI/ZQm1OpfS7cbq34VBRZbxlXu4H763dlwQdnfPSSR4jhagfhwRWGj7U57PFiPJS4cFQbSOPmr91bNJvPPy/wDwzy0vT4R0vyoaIJC2GlqQtKkpdfGVY8/LH31HXbzDjpdRGVBipA8O1PeKT88Yp2vOkmfYFBCcPFQzucSk48+gpvt/Z1cHRubhKXj8xhxwH4Yz94rj6nOvxM6KMOOyGmbqNDqh3k2Y8MYKU4QD+39lNzVyDT6lQ4K96ud5KlHn3jFTmZoN+2bVTmpjAUNwCGUpOPhwRTS4za0KG9lx5QO0944eg46EY5rBOJs8kfTOuLr+cpZSeN2UoOfj1pztL95gNruEC4LQ6Fd3jO4L88KBGCOlOjEiNGcBYgMNtnnK0rPP+yB99d++cubJjRUtd6SSEgIGB7gFkk/KtK3DPi4KS1NeHkanLu4qazcYzDVpurfC3mPClzPqgkgj4fZStWorZNfDGoYyYUpXSdER+LV/nR+8fZXFBie2KiXtL0Vw8Jcca8B/zc7kj5Gus2wqZtS3I4akMqJ3OMqDrYSCDxjOPP0rocoRx2T3/nyUUZS/+i2H+w21LM51sOokQ3ilSHEg4VwMEZq/NDpDmkZLITwARgf5aojT8t1E2BHVu7gMNFtKh08uPkBV5dnKwYElhXBUcYPnwa5+om5bs6aoqKwiDuM+I8dDXFyI2v67aVfFINPMhja8sehNcS1X00bFJJnzEouLaGRdqinoylP+XKf2U52nRcR1tp+XJEaKTgIVtUpfpjcDXUte6nWCqULdIUFpcW2oKQgNggdPXPNcXXWuEUobN+Z2dFXrk3PdIbn9PWTvUNRREV/4kNRJyD+UlQx9lcxouNgf2dJ9/eLH+5TsXbkrw/jh5cJx6DyHuNKY7cjuG+9Q/wB5tG7xnrjmvKjZZH/eelKEJf7SnO2ee1DnGPHSvDbiUhsKIQRtBPzya49ml+mPvRbchG5pSlLIUc7Uc9D16j76iWutQxb5enHGHO8QVOOAEfnK44x6YqZdkELN0fcAyGmgnPocDj7zXR08korcyvTedi1EtJI54+NNTV8tDlzNvEvbK3FIStBCSR1wrGKR6/key2xlOVbluZATnnANUzqWZ7OqN4sqDe7B9SSf31FvWOFihEtT0UZ1ucj0M2ELSFtuNrQeikKBBpzuDSVMx46iCnakEEZ8ia8qW6ZKdltsNvKSnjGFY5Pwr1Lcrxpq2tRxctQR2SlsBPVRVgAZHr0rn6jqu0ST8jWnpeyy0+SAa4s8Ba1lUJtpC2hh1tAQSrJGARj1FV8/HTGhLRH74uSQEJAKl43O8nk8eFJq1tQ6z7OpYaEy5TZKW+QmOyoZ5B8wPzaaWda9nrTjUeDp+4ylqwhCneB5gHlXvPlXDKEJxlHL3x+h01665Ka8iENsXJLYUiWleEg4dbB/IUryI/ONJ7tbrrNeZa9mYcAWeUZ5AyDwR6e+p2jtbtEJBbt2j4+5rCSt1acnyz0z5UmuHbVe5DLkaLabaw06O7UDuVwQfTFdLuljwRZkqo58TIb/AFZuUt2Q7Ct1zMJtSmu9jxFLSpSVYIBSM+VL7fpdmQ0VOzmW3mxn2eRIS24SPLYTmuMXtR1LYIDMC2GLGjnc6EJbJOVZUeVZJ5zXJ3tE1Fe+8TPkFYR5K5HI9MDFckr7q68PeSX6nSqqrJ5WybLO0r2TIkRGZyJsZLEllKwU5Udqhkenkac5/ZhYbSyuWbg0koBUpKylIPHxqgfbY8NiOxAckBwpw7seWgIV8AQKS/TMltexp5xbigf78JWPP3Z8qtHq7cYTx/PsU7vW92j0bpONoZOm7ZKuc2H7W7HQt1PfbiFEc8CnVzUnZ/EQUsht89CEx1HP+0MV57t78hmHGQ69EZBaT9d5vpj3ciu6nxvSld1hlJ5SA64r19Pgaidt8uWWjXTHhF9p7RdMxEn2G1PnAydjCED9tNr3bTCJKYtvQT5b3x+4VSakx3F7DdI7i1A4SlCiTgH1T7jSJ5plp7L7qmkkbQpIzyeg61hJWG8dDRbd27Rzc5SHX4TAQlO3CHDn76ROXrTtyaLc2OW93UlGR9qeap5Kg02tbq3BlJCSn87yrvbbhFi+O7e0OIUMIDawnkeuQaQlPgmcYosCboHTl1XvtdwLLvXahwK/9J5pkuvZbcY0RS7c57W8FAgbgjjnPXz6edN6NR2NtClphLVtUkeKScnIJzwPIjFJZPaHMjvNmzqXGSBlTfeqWn7FV0qUlyc7jDyMzE6gszCI9yiSlMpCdpdBKUnHTPIpG3KL9xUqI79FSENqIUhW0LWPI49akkLtemtpS3cobMhKhyQME07Oah0Zcm0SLnAEOQ6VDKEc8cHJGKv2za0vgr2aTyjhbrmFtwJExtxUx1lC+8bbylQSSDjHnkVcGg7wqPImpFsuDwR4vChCcckflKGT7qr9q3WCZHtarXdm0oYbUhlK1AbhuJI5wfdVnaUfjxnXWJuE9740u9QCQKzvnNw/pYb+7x+yZaMcckd1Fd3LcmZJl296O02pWVvuN4BzwDtUaaLJe5l2jbosKM4+3gPp9o2hCvT6pzxU+1HYW9QMTWW5Wxl5Zw60rkefBpLZ9JG2pI9sU7lO3xIHqeeK373dHqINS8GFn+5yPpa3TJafFkjSvp1X1YVuT/mkrP7EUg1JN1JZg4ptbDSi814YqC6SkjkeIpqxxZ8dXfurnNsEO4PKXOC3AQnASooIUPysir/Uro9RBRhL+bDoaZ0tycRphruj8EPvusvJcShTbbaS2ofnBSiojPPl6U+tytraQplOQAD4/wDhWzEJmIwlmOFJaRwlJVnzz1Na7f8AEr7q5KpaYRjLlI65xbk2jyFbbey033ickjjKuTVg6Eu6LQZSlqKVPAABJ6n1+NVu5dG4zSW3T3bm0KVvV1J68Upgagg7jh094DjcvhOP31zQ7WE8o0ahKOGWNqu6uXFbSd61hI8zjBJ9PlUF1K2HZSAV4Qnrzzjgc/ZS2Jf4i0oXcZbaDxt3JVkjyHSuE+VFTd2S7LabZWjc1hJJUDnk8etaN2anLBbwqCihBCZbipSGW1KeJyFgZJ+HpUhhxWpcZszlKdeQeCFHp51wjBD6Q4zIYTwcb8j3elOEKOsRHnCkcDqk5GetYVW2qedJE4wa5D6GtRIIjDOPNRpfboEFEhtbURoKQrIPXpzSCW1KRsUULAKc8J9RTjbm97WMrQsIUrd0zwa6675vKaMHGPkInX2UvFDMJocEqwgE4HrxxSuPKbUEqR3H1h0T7qbxFy7KK3ckIKcn/MOtIH5SIoaVuTgpKhg+QI/40hKxeKQcU9kJdTRHrvcm246kh9TjMdshW0eLfnP2Uo05pObKtN+ucTLkaE+Glla8qV7wMc8VvplxUi8QXlHdse3qyfzW14/bVldmTihoW7uez7GHpSCleRhSgk5H7PtqLbc/mXqhuUBbGVCfNKs43DBPvyakOgdNtXO4yjcnw033QfQUq6gqwBnHXnpXNSI5BcZKMlIKgk/MfdThZZj0a2XF2IvYWobCt20E7sJI8vfSicMqU1sL4zUdMOSMa9itWnV823WyWuRGYKUoVv3ZykHGfcTio9Hce73aVrSoHHJPH/vNOroekagMm7qQt94F4kEJCzxjpx5dK5S3GkXQtIQ0orISdo+r8PfV5WKVmI8FIQagnLk7WOA6vV0S3F7xqmtxy4nJHKwnI93NWt22aNd0mxF2SPaWnVIyvZt2nd0qE9nMRub2u22M+CUfSIUQDg+FRUPvFXr/AEipKRaSp5lDoQtnCFkgElRweKhovFlD3NsiE3jj8YnP20jvrTSoMRC3+48aipZSVeXAwKk/aJOZusx2fChtQoy3mgllrASnGBxgAc4zUV1QtItUUI+v3hKiR5Y4FRGKTLSllDS7G9juKW3XO/a2pXlJ27gpOR1+NaSUpD+9obUK6AnJFTLtGmsuT7C5DTHeKbejeloA85PXHuIqITVl93vO7LSSMlO3hJ6VplGW50mJCfZikjxNBR+008SEEiEN4QtLivER5+FWfvqPOLUURykgYTgEdcZNSafcH34URyfIdecSpQCnFlWAUI45qWwhxvZQdO25Tq0KfDzuXUjHGEnGfnTlaLrOials/s859Md9uOlSEuHaobEpPHyNNQUhzTzKXlqIS8s5yDjKU4/ZWHVht6zPtLVujJSlaeOodUoHp6EVVSi3hlsNIva06yuKG0x4dudSynO9x9Cgc46j3GusHWN1uCR7OlsuYypDaAvafMdaqi6a5uTVwWUyVpKCU4bV6E4z7vdSWxaoMG8F50KVHf3bzz1UDyB08zWcnD1JTfBcC9WXhLy0YGEA78tDg+nX3j7aaInaXIVFWuS4y24SpCUoT3gCh6kDjrXeDKjyJUptgoUuV/dIOE7ipJx16c7agerWHLEFNuyt7i3u8CI7ydqB6KKOvT41Lwlq8id3sTp/VGp0pyvDSdufqJPJ+r5edJRrK+AALkoCh1HdDr9lQmBqyO+yozWA2tJ427iD8s0r/rDbFcpIweRhCqopRYeUVImzTp1xtkZllLk27qQplKlZJClEDPoM/dVgRdEWWEZsSLfVz7xFbcU6w3GCGiUDKwlaj4gCMeWa9jf1L0wJDb407aA+2QUOext7kkDAwccYFaHQ+lCtSzpqzblJKVH2JvJB6g8eddOrdMpgovst0JA1dZF3+Vd3xJfcdYywgIUztJQME55wAeR6VIobGidPXRzRt0uVzuz8woQVTlhYaWoeFIcABST7vdVsRNIabhs9zEsNqYaznY3EQlOfgBXN7ROlnnC49pyzuLJBKlQ2ySR0OcVDm5PLCilwecdbCDbLsqxQVQ5e07U/2lRcCeCAojpz6Unkx57mmH2Gwy3KcAwGydw6eZV5c16Vi6J0tEUoxdN2ZkqOSW4Tac/YKWDTdkAwLRb/APy6P4VSSysFovDyeZbWm5RwpuVtfSAkd4pQODtG4pGfXPlUgYhH2cD2xtQKdqVd2kKHvOQf2VfX9XLJ+iLf/wCXR/Cj+rll/RFv/wDLo/hVNBftG+ShU2ZL9ww67lsIHCWEDrnPOPEePlRM0Lp2S4hbrEkKbGE7DjHJP76vr+rlk/RFv/8ALo/hWf6vWbOfomBn/wDro/hU6X6kal6HnVzRdrg3Bhy1xJCUJ3qU6pYCUEgDhPU5GaX26E9bLOLGwpJiOSlOKcIO5slOCTyBgYxwKv76DtQGBbIWP/AT/CtfoCz79/0VB3evcJz+yocW1hsKSTyjxZZdGSn5jjbqkGO0gkIAJWtIxtKeByf40s1PYk2FTjERZDaoTby+8cGF42thBSPPIyT769gHSmni4lZsdrK08JV7KjI+HFDmk9POO945YrWpzbt3KioJx6Zx0rR7vKK59TxWdDqvd2kRpNwZaTb1ISVqSAHAvxYBz7/WtInZRLTcmHGp0d5lLgJJUE8A/HNe1jpLThWVmw2recc+yN546eVdBpmxDpZrcP8A8ZH8KPLGx5M0joOfau02Je+/hCI3KW8cunISQrHz5qY9s09My2vBCESVI7tZTuIQUgnOVe7PSvQf9W7H+h7f/wCWR/CsO6YsLram3bLbVoUMFKoyCD8sVG42R487RLZbYlg041EdUma+2hclkK3HvBySPd91QLUcKTFjsPzEISw4ra0hS0lZ4znbnOPfXvh/RmmJCm1P6dtDqmxhBXDbO0e7jiuLugtIOjDul7GsZ3eKA0efX6tXi1FFZLUeAbROYVeWUuLcbScN7hwQkDGDnjHFTb2NpSn3BKdCEpCiSjwlC+ivd7ua9io7PNGIWFo0nYErByFC3tZH/ppadJadPWw2r0/5o3/CsLqlbLUy8GorDWTxaxZe+U20nelCVlkbmkkFXWn+0aJjXdmC2uXBMqYoqjMPtuJQ4EjaclHIPHTI6V60Gk9OjpYrWP8A8Rv+Faf1O013ve/1ftPefneyN5+3FRXSoPORJprZHizU7TEV5yyQ40ESWX9ji2Fr2bgCk43qyMEnr6ZqPfTzsZxtiQ2y53Q2lSBnIPPJHWvda+z/AEctxTi9K2JTijkqMBokn47aDoDR5GDpaxkDy9ga+H5vuFdGceRTB5QvOnJItMe43a3w48OVl5LzL5KnO8O4Ajbkj09M1F51sTCgpeYicLUXGXHXSNyASPDz0HTkV7fc0bpl1CUOaftK0JG0JVDbIA9Olaq0VpZTSG1acs5bQkpSkwm8AHkgDHSqvD5QweKImsLnDIdwh1TO04yFjAPQnGRwKU2uU3qy4GPJdhQpLoDhcU4EJV8MDGceXHSvSXa9pLStq0iH42n7TGX7SgbmYyGjyFcZAHHuqkfZrQhRcYtcMqVwcJSSanOzilsSk+ckBnWsNmUE3aMO7dKUIP1lpHQjy6eWaUtadui20KRJhbVAEf2pscfDdU9TEaUgKRDaaQfLuRXYR04+sP1R/hVOzj7SfzPXlFFFWIEF8u8CxWt643aSiNDZGVuL6DJwB6k58qQaZ1fZNSx5L1omh1EYgPBxCmijPIyFAHB9abO1TTEvVWmW41tcZTNiympjKH/7txSCfAr3EE/dUc1PZNX6s08lNztVriqYnsyfo1EsqExpAO9txYGBk4I+/pmgLP8AaWPB+Oa8YJR4h4gOpHrWnt0QAH2pjBTuH4wcjOM/CqUj9n2qba1aZcGJCccakTiLf7VhERqQgJSlKyOQnBJAHnxSvRvZlKRfbA9qa3MOw4FjEUpU4lYEkPKUOAeRtUeelAWlbdQ2y6WuRcLbKTKjMbwst9QUZBGD8D8axpjUEHUdji3SApSWJDfehDuAtKckeIAnHSob2a6Sn6b0zfLTJtkSO64t0MyWHAfakq3bdwwCnaCAM1B9Mdmmp7dGSG7VbITzNofiukyO9TPdc+qHE9Bt+zgeXQC/EyWFMl5LzRaHVYWNo+dNB1PbxqdVjKliSmF7eXTjuu737PrZ65Pp86peD2Z6qZt1wbdhRlxlToc36MMlCGpSUIUHWzsSlKeSn8nHHnjJV6o7N9QXOZFk261w4MZi2ttKtzcoKZdUmT3hYUo4O0p5z0yMUBbtq1Pb7neLzbmCtLlqLQfcXgNnvEbklJzyMeuKeC+yG0LLrYQsgJVuGFfA1TF90Bf7lcNQS2YMdEaVOgS029x9KUSm2mSlbKinO3kjrxxUX1PpyRpO12d/UKbc7FMma63Z3pKw1HDiU7EoWEkEoIzjzzxQF8ao1LA05p528zO8ehtqQkmOAskqWEDHIHU+tO4eaLvdBxHe43bNw3Y9cVTdt0xdrt/R0ttmixSLi4ltwNOkIO32jvOc9PDzXBns61E12hzbo4nvm1zXZbMz2ltI2KSQlpaSguFPISUhQTjpQF1IksOIWtDzSkI+soLBCfj6Uz2nVNuud1vMBhS0OWpbaH3HNobVvTuSUnPIx64qkofZfq76PvLao0SKZkNkKjtPIS064h4KKMISMApBGTnryr0Wfg0vblvv4+go8QSpsaXEiR5yChvY2sEHekpWAVAFKgAcnB4FAXbfb3brFa13G6ykR4aSkFw88qIAwByeT5UsElg93h9r8byjxjx/D1qttUaJud67HYtidj243qOhpxLaAENBaVZITxgEp3DPTk+VRvUvZzfrrPW9FtVvYEqNFajK9rINlLZyoNhI8QP+HHNAWlqrWFm0quEi8vutuTCsMJaYW6VlON3CAfUU42y8QblDYkxXxseSFoS4C2vBzjKVYI6HqKhXaHo6fqTUOj1svSG4kBT/ALXKjvhl1G5CQCk9ckpPSkL+gJK9a3W6KjNzEt2duLbnpru8qfSgpy4OpyDySPM0BZglxlN94JDJbzt3BYxn0z601XXU1vttzs0F0uOuXV5bLC2sKQFJTuO454+WapKF2X6o+jbnHkwIzbc1UFxTDT7aUbm3MuYCQkDj4nnqTSu49lmoHVuQ7YlFvhJu82RGW28n8Sw4ylKCBnIBIwQOQKAtS/a5tNmnGK8mTIc9icnAxUBwFCDggYP1snp99P8AFuEaQ0ytDqEl1KVBCyAsZGQCOoOPKqWuWgdQTbRCaYs8aEtnTz1tUy2+jb3xWCCDnorBVn381rc+zO8yJtwuDcFr6QEi2uQ3u/SFIS0gB3HPHT54oC9aKKKAKKKKAhHa/EZmaRDUhG9HtCDjOOcGqIe03b1dEuoP+FVehe0i2zLrpz2e3Mqef75KtoIHAB9TVUnROp88Wx39Yj+aoaLKTRAntNspyWZchB99J/oKT5XRz/ZP8asI6I1Rni1uEe91H8a1/qVqn9EL/Wo/jQamehKKKKkqRzX2qWtI2H29cZct915EaPHQcF11Z8Kc+XQ8+6m5rWUu1Wl+Zra0/QxS6hlhLL4lGSpQ4SgJG7d7sU8az0zD1ZY122et1pO9LrTzJwtpxJylST6j99R2R2duzbWGbpqa7Tbg1KbmRpjmwGM42MJKUAYx6g9etAOEPtD0/NMFMaQ8pcsP7EFlSVIUync4lYPKSAehpvldrOlozMV116ZskRBOQUxVqw0VlG44Bxgg9aRO9k8buYi497uDNybfkSHpoSgrfU+kJcykjCcgADHSiN2TxGIao4uj5BsirJktD6qnCvvOvXnGKAWM9p1vXqG9W8wZxjW2MmSZTbKlJWnaVE4xwMDIOfF5U/2LV1pvtxMK1uuPuiI1NUoIO1LbgygE/nEc4pmj6MXYrpIvNrkyZa1W9uK/biG0pllpspR4lfU+3FcOx7Rbmk7LOMxvuZk98uloOBwsNDhtrcODtGeRxzQC4dpGnEvTm5L8qIuGyqSsSYrje9tJ2lSMjxDJA4psvPaVGjSdPPx0li1TX3m5bs6O40ttKGt+U5x7ueR86R2vsgi2+4PzEXmS486w/HKnI7SlFLis5USk7yOnizx6VhHY1a1WuHAlz334zMl+SpvukpQS63s2pSOEAcEY86AWvdpkZq7tOOILVjVZ1XQqcZWJGA5sBCem0jn1pa32n6Wet8yX7TICIq2m1NLirDi1ODLexBGVbsHGPSm2V2WJmRktzr5IfcTaFWfvSyAS2XNwUeeSBge/FI9W9nDiY0yfalS5tyUqCphDS22lNKjgpCwV+E8E+E4+NAS+062tV3sl1udsEp9m3KW28juFJc3pSCUhJGc8+lRDSXa0xI08zcdTt+zPS3FmLGhxXVrLSQCVnruA81DinTsn0xdrRp68jUKlJn3Wa9KWlS0rWkLAHiKfCVcE8cVzHZawzaLLHgXmbDnWyO5ETMaQklxlwkqSUnI8+COlAPUbtAsEu+QrTDkPSJUxlEhktMqUhTa84UVY4HHOcYpv1fre46c1DCirsJdtcmSzFTLMlIW4tz/7bfJUE+ecfvpbpTQcDTF59tt77pbTb27ehpYBwlCircVeZJPPFIr/AKCl3XWzGo2tRSIzkdIQxHMZDqGU8btu7oVc5OM80A56s13ZdKzWot2XJDzjCpCQywpzwJOCTtHGOtcJHaPplibHjKnLV3yGnC6hlammku47vvF4wjdkYz6101Potm/Xr6RdmOMr+jn7dsSgEYd6qz6j0qM/gbtabhBlJmBXcsR2H0Pw2Xg8GUhIIK0nYSAM4oB7c7UNMNP9y7KebdBkhSFNEFJjglwH5A49a66h1j7FF0tMgpa9kvMpts+0IWFhpaCrKQOisY68VHtQdjNrvFwvcxVwkMu3J9L6diB+IPPeAc8heeaddb2C4Xa96ShwIA+irdKRKflF1KUoSlJTsCM7iTxyBigF0btF06+xCe9pdbZlxXpra3GiAGmiQsn0xg8VH4Pa1bpGoLj3qgxp+JbUTO+djuIeK1OBIAB6ggjGBznrWtv7HYUcoak3mdLhNxJEJqO4hA7tp0k4CgM5BJOTny9KR3XsnWi0XJxy5T73NXAahsNEtsKSG3EqQUq6DG0devPPNASdntP005EmP99LR7K40ytpcVaXVOOAlKEoI3FXB4xXRXaVpvuoSmn5T65e/ayzFcW4jYcL3oAynB61BrD2X3K/wb49rN55ibNmMSWFOdy84ktIKQVpSC2QQojb6U/zuySHMskG2quXcojuKdWtiBHaKlKUDuTtSChWABkHoOc0BZiSFJChnBGeRis1q0gNtoQCSEgDJOSfjW1AFFFFAFFFFAFFFFAFFFFAFFMesWJkm1st24vB/wBqYJLalDCA4N+dqgSNucjNM8hrUENx9iG9MdZbS0lsgIUMkEuEKWCogEADOfrH4gCaEgDJ4FGQcYI56VBEO6mktoM1qRsdaaQ9GDTewFUdXeYOM8OBPn5nqOjMq3ahdsERp6HJ9ujRHmUJ2NqQkGMAhIJHOVcHdnxZ8sGgLUoqL2ty9i/f2kyFW9brqQlbaAlCAhBQcgA/WKxz5AfGkTEe9tQluFM5V2Q+4HHO9y0povDlCCdpIb5SMcEYPvAmtFQhbuqkONqV7SppTjQGxtrcECUd5UMcEsFJOPMHGDxSdpOqn246JT89IBjPOLQhpKgQ8sOI4TyNmw4/+KAn9FQ+0fSk5m5OSJipQhuOJhuIDZDyxuKV4SBnAUlGMgbkq+NCk6ge08wJXfGUia37R3SwlbrAUN20gJx8ODgEZPGQJhRURUm9x5qEW9MtMIrbUhLykuEguq73epWVABvaUgHqcHPSkFtd1Yn2RUxyYvKWO9SWGR4ld4HOifycNke8nqOABPaKr+E9rJDEZbin3pBaa3tvNNJR3imV7wSkA4S4G+nqeo6byXdXbD7OuWEht1SCplnetYZSUpUMYA7zcBjy+RoCe0DnpURvttul1v1u9nkyoMUwnO/cbKsJc3tlIACgN2AvkhQxkEc012pvU1vYDEaMtqM2XnG2tqD3hU+8opOenhLZTyBzznpQFhUVBo8nVilxQtp7YiUUuZS2C60e6wSrbgYJd42pyB1BAy4zIk92+TVOiapsqYXCUy+UNpCcbwsA+oJOQcpIAoCUUVA0O6w7lpxzv8Bsd6lLbW/vSy5uCRjGxLndbT7znIrZDWpZTKHJEq4MluVFJbbQ0klvu0Fw/V58ZXx7qAnVB461ENVt3qVO3WVEth2NGkbHAtIbdWUILfhJIPO4eIcYPTg00alb1JcrfdYoYmKiOh7uEhtreo/i+7Sc9E8r568cn1Asaiq1YveoZt1kNw5Lqm0vOILSWkZS0l5ad6DsPIHdjCiSfEQKkVgXf1XR1F5HeQywCClCUJC9qARtwScnec7j6YHBIEooquLUjVNtsjEJhqUoIjM7CUNAtLw7uRyDkApa6gnxdcZwuW5rAtuqRvztafAKWhwvYHGgNvVGHVAnrlA8XIoCc0Uisplm2M/SKt0nncrbtJGTjI9cYz058h0pbQBRRRQBRRRQDfe7qzaIiX30LcCl7AlBSCTgn8ogdAajt31tHbjvCAFpdbDDu99ICVtLW0CUjO4+F3rjAIxUkvKLcYgXd0sGOhQILwBAUfCMZ8zkj51xbsloWynZAilopTtw2MYG0px/sp/2R6UA1K1vbkNqccYmJaSwJC1bEqCEFKlJJwonkIJ92RnFCdSym7dfpb8BZNvkJbbYylKykttq8R3EZys9D08qeGrHa2jlu3xU+Ep4bHIOcj4eJX2mt2LPbmGJDDMKOhmR/fICBhzgDxevAA+VAMCdXphyLk3do7raGHlpaWhKcKCUNq2HxHxfjMZ4BxS9/UI7i3mPFc76bKMRCHzsCFJCySSM8YQcYznIpaqx2tZUVwIyioqKtzYOSpISrPxAA+Vdl22GuImKuM0qOkhQbKcgEHIPxzQEWb1m4i6hqVEIipS426WsK7txMgNbtxIyg7h0GRSuHrCKpXdSG3u8S8GnVJbAS1ufWy3u8RJypBHGfU4p2NmtC/xXsMRWxARs2DhO7fjHpuGfiM1q3As7U9thEWKmWlJfQnuxuA35Kh/rKz8TmgGm66sFquM1h+GfZ4yVLCkk5dCWu8IQcbd3+EqBxz0rtK1hFjyH2TCmrUyXdxQG8YbbQ4o8qHG1wY8+tOki32sSw/IixfaJCijcpAy4ooII952gj4DFIpGk7S9OjyDFbSlrvMspQnu3StKUkqBGScJA69KATK1nCG8iJNWAtSEbUoPebU7yUjdk+EpOOp3AAZzjV3WsNpwpcgz0tgu5cKUbcNrShavr5wCtPlnnpwaelWe3KCgqFHOXC8fAPrkYKvjjj4Vo5YbU5u7y3xlbt+ctjncQpX2lIJ+AoBAnVcNyDc5bTElTUFlx8q2DDqUFQO0565SeDg8isOahfhuNIuENJW+hKmERHg4pR2rUoHdtAACOuec8U7MwoMZxxLTDDa5G4qSAB3nmePPqSfjSWXb7NCgYkxIjcRJSMKbG0H6o/wD2x86AaV66t4iLkpjTFsJQ44FJSjxJQyl3IBV5pWMfPOKXQtQOyZN0aNskNexModG9aMrKklW3AUcHilT9ls8l5aXoENx3ZhSS2knapOzkehSNvwGPKu+yBGnNp2NNypKO7T4eXEpGce/AoBnter4s0wkORZDLkgtIUTtUltxxvvEoJBycp5yBjkZwa6J1ZEVcHIaY8nvm5CYygdgIKioBWCrO0lJwcc5GKWuQrRbAzJXGix+6KGm3NgG0k7Ugen1sD413VabeouFUNglwhSyUDxEK3A/aSfjQDFG1vCfZS8IU5LSktHcQ3gFwEoH1+pII9M+7msNa4gOJbAizQ+4ymShkpRuLSkKWF/WxjCTxnOfKljGlLWxKkvsspbLraWm0JQgJYCQoDu+OPrHrnrXa3aZtMK1sQBDZeaaQlG51tJUvanaCrAHOMj5mgELerm5M2IzCt8p5p+UmN35KEp5ZLwIBVk+HaeQOvqMU5N32Mu+rtWxwSEg4V4dpISlRHBz0WOoFbtxLUZrsdDEf2lCkSlpCBkKIKUr+OEkZ92K7C2QRO9sERgS8lXfBA3ZIAJz8AB8hQDJ/XCEh3YYU1K1OPIACEEqDSwhagAokgKIHqfIVmPrGFIdjoaiyyJHdltZCAFIWsoSv62cEjp191K0t2ExW5AaihkSVNpUW8YeU5tUOnUr4PqayjTNtRdHpqWEjvWktKZ2J7vwrKwrGM7sk+dAIGNbQHmgtuLOX+KDqkobCijKFLCSAeuEnpkZIGeaU2TUrd4uPcRYrvcdx33flxsjO9SCkhKj5pP78UvasdraADVvioAR3YCWwBt58Pw5P2mu8e3Q4ziXI8ZptxIICkpAOCcn7TzQCqiiigCiiigCiiigIvr963tQIBuk+1wWkzGnAu4SEspVtOSElXVWPKoha12uU9Fab1ZYZ4ZWyt5tu5gl1LYcC3jgk7lb05HTwjJNb/wBIWzQ7zpq2tz2A8luYFpBURg7SM8e6vN1iRb9P6/uaGx3EVuG8RgE+QNQ3glLKbPS9yu9lmahfkwNXaebW4toNlN0R3iAlC0rwkZGfEk489ozjApPKhW9i0wzP1bboJcKkLkG4pw40W0glskJwoqQk+eMq5JNUhYNI2VWm37wxE/tyFb0ulR8wPLPvNZ7RvxegtOOdSphY5HuHT7KzdjUmmjWurtK1NPl4L7ly7ZcNKMRomqrIqaytT8l9uc33XeKSoqJHi8OVZAOCABggjNNyp1qKZixrWwvJW8Vb1XVAStBc37VAAgFIwkElYI4wK866L2sWK8hbiEgoSo5I53MmmnUEEM2iUragKS01u24wSpPu+Fc8Oqk5zi1/pa/U6KukVk9Kfk/0PUcCNFnWp0w9R2OTKKI6X5keehRLjbZT4jtUCFYCsH3+YBp2v/sE1cSQ1f7MhTEUxVPqlhBZWVIV3iME8jZwCR169c+W+wfvSiay4V90p9CvPCvAr5Gp4Y26JMaAOUyT8vCPsrqlJxwzhX+potCPcrOxIbdXrHT0lSJG9ZdvDYDqMO8lIHCvxgB5OQkcjAFM024wY1pYjsan0/JaLbTTvd3ULTvDDiHFnAJCiVJIODykE15ZvAbVc0KQfCG0pUceeylVngs/QtyWh/epAbXgJxgk4PSunp61bLS3jZv4M7ZuCyvsexF3/T06TBdb1Np8tiK20Yrl2RuYWk7spKDhRP1T04HmCQWuHLs8UREK1rYEutxENK/5YT4XglYUr85SVlQJGUkYHXAx5y7H7Yn6TanFDeO+W0lR6/UOf21HNSQg/qd/u0jcqQ5gJHJPeYHx61zRnnK9Dotr7NReeVk9WIetLiFJVrLTQkp79DDibk2pUdLjSE5TwOUqSTjj6xOQa7vLtk5hTMbVGn33ANxjruyVJjkOJXuRtSOCBjBSMZ8xkHzTpewwmFXR6bGV30RDjiCsFKkFKk4OPmRSK0RUO3G+PM5SlcR45A8klHOPnUxlmWkOCVes9Z3246ef1A7NY1NpxtT7UdKm3LghCne6cWooOMkpUFAE/wCEcEUmudysMq1WyIrV+nXn4qH0lx26ISQ4tCkoxgknaVDk88A9a8n3S3sMSLU4eX1BAODxtIJPzpgltFMqLtJwqStI8vQdavYtFjh6FYLVSrfuezHH4LqX3XtWWN9S1oUFquqNisONrKCNvO3uyEnPmeBk100RcrfJhyVI1Ja47jkZ1kIZmpW4CXFFDqkk8FIIAxnjz6AeYLDFL1lYaDqEHvHD4ufNdLeyxlz6VuxcaUltDSUpWE8KIX61zK7KbxwaKrMoxzyei5c+2tmF3WrNMw3mFoccSLuOSFNkkbs8LS2QeB9Y8qyc8nXbcCpCtbWQIU4pQZ+lG0qIUkjdv29Ukkpykn1VnBHlHWMRRvy2SjapSWiB6DYDT5fW0f1ifbbSkbGUnHoe6Tn766orVFyOfL1qHqep75eNPSb+mWzq3TrSu6jtlblyQl1sNuqWSADg7grb1HU9elNEefa45Lc7WemXGcgqjKu6UpJLexSs9QQcKGcnJOTkBVeUL60n+sZQgJx7QynGOvAzT5rGwQmtPM3cs7Z780tlYUSnbzwB8qrX44Kfqa3R7OyUF5M9OQ3YSm5bzWo9NSI5lpld6Lkk9ylMrvynIGMEHz5z5kYwzXm626NGYS1rCxSwcNupFzSUu4Q8FPLxkhai4noCAUjJ6Yo/SluSdAXhaUklaVcDjdnioCuK3GadAQkJMVBUfzdy/wCFQ3jYz3xlns3Tuo7Lb5y5a9VacQl5tAVFeuzS1M8p3DcMdEg8EkZ6bRUuVr3R6Dheq7Ak++4sj/er54FkG4OBvxoVvwr7akcGxx5rz3trOSN2Eg46N5HNSD3xatUafu8v2W03y1zpO3f3UaW26vb64SSce+nivF39ElpY7WVuFBCBbnBk/wCpXtGhKCiiigCiiigKy7fLg1bNLwpD4UW/a0pOBnkggffXkK+zY91vlyej5KNikZKcKOEYNer/AOkpbp1z0bAYtsZUlwT21rQlQB2DJOMmvLcDQWqg7IUbQtHed7gKcR+UOMndRJtolNYaZaGgHB/UCalaVHxNAA+hQmkuvIinNFWEKUFoDLwAI6eAmnHSlnuUDSj0GTF2yF91tCnkeSADnn1FLNX2W5TNG2eNATFXMYS4l1vv0ApBSR5qrKaavbxtg3paXSqOd8/2KWiAi3Xo5x/ZWPPplIHFP81tLyHWkp3IW02paUgDJDZ+XnWW9D6mEW4NqiQvx7DbQ3TWuCnz+tXe3aEv6LLJiOKgpcePQzWuuAPI1lbCTi0vsdP06yMLtUn5P8OCx7LGYTChREI7tgsKG0DGdpSM565wabV/8zuLCTsS0+EAgnIA/fxT5YWG0vMtvSYaPZW3W3Ct9KQCSkDz56GuEm1tqh3hCZtqUuSvvAUzUg9D9U7sA59a0lGTZwNptnn5h9TlyKFpAU2ot4PO7CSMn38U4W1xtmDc5LTnekJaKkgYBORkH7BT9+Du5C5lxuXbkNLWVKUq4MlQ6+/0Irq5oCcYboaNrZecaQlf/KLRC1g8q68cV6XSyjGabeNn+xy3JyhsvQz2ZPrn32PPcUGWS64FNNjgHZwcfKoldVj+s02QwV7RIWeBz/ejpVlaB0rMsK0e1zbVtQ8pQPtzX1dpGetRiZoa8mVNUmXZlB5SlIV7e0MZXn1rhqW71erO7qWtMdHojtpyW42bwt0qWPxqMuHKj+MT1+6uOkJJb1He2w4hsogySkKHG7wn7BinOx6TujMSYibOtSXHUrUFCc0dylKSfX3V2tOh3Xb1JcmXe1xGFNOJC0y21FW4Dg4V0NIxxJNEuxOpx89v2I9fmHHBb3iCUqW2kEDAyUKqLXVtSXLckgqPfu7gB5gjNXJqa0LuEOA3FkWZoRXGThE1sAhKFAqPPXJphvWlJC1w5Nvk2REpuQ464fb0AEK8utVss1Wt45Jrqx0rjqWU8jTaHI7Gn4wdypW104x0OV4qYaDfCtDW0jaFKHeEk4z+Ncz9wpimaWmGxRUNXKz+3YWHkmc1tAOcYOeetSXRUJu32Fi1TbhCbkRWTvxIRt5WvoroeFCueMG65euWWU0rIan5Ir7VLwlauQVqwnuWeMYyO74pVdGsXS+OKA7xqIFpJ88oTilF20lNmXkzfpCz4AbQjE9oZSlOORnrThfNPS5lyur7Fzs3dvx0to/tzY5ASPX3Gu+ieMJ+ZxWQ3cl5FdRpZnX+MXUBLjktOcDCasrtNQ0zoW2d0CoKuLgAT6BJwajkPQtwS7HcXcrTuQ+VqzcGsBPl881LdQ2V646TtMEXO1pfZkLdd2TW+AQQMEnHUipg0oYJbcnliTTIbb7Lp7qicK259wymoRaYsZ+wXiQ8hTi0hppCyvplQyMVZVut6WdBybU7c7Sia5tT/wA8bIOCMnOfdUFb0dK9kebdutmSpZR0ntgYBGaz4JaT4I4z3bQuDZQlO0rDZz9YeKn7Tqw5diouNPEtLJQokJP4rr8a4SNFOh4uJu9lzhSU5nIOM5x91OmntPGDLU5LvtlShTak5bmJJyUY6fGi2jgmaWckq/olg/hLkknpCI+5P8K9iV5T/ox2Ju19oTzhuMKS6qItOyPKS4eAnJwBXqyhCCiiihIUUUUBR/8ASptj120/p+JHk+zqM1ayrJ5CWlEjj4V5ge0hdpN0EW0uOuhbhbbLrm3cQOeSa9edvLYchWbdjalySok+X9nXVE6NMdV5tLRZCiZ7vdOFX1TnBz8RWd8uzr1m3TQ7SbWM4WSDas08uJ7FGhKC5To5S2sqIVjkUxuaSvsewpvL4SICnQ0MrwoqKiMbfiDVjzth1TDCiMNyFn06ZqOXe8yxpmTCKtzb1y3pKllWwJKiAkZxjKjWfSqU4tyOz6rUqbIxS5SHzQOlbVMszkm4Q1vqcjbkqWs8KKsAjB4pgvOj0G0z51rDiERXPGFu9U5wMcZJq0tLMqhaJQSUgIYYT6ZwlSz+ymjUSJEbRbDLLJ2TJbba3QQMY8Shg+ZxWFOqy1RT5ZtfTCqhyxv/AOFcaMs7M+dOROlugxyhHgAVu3Kxzu8hxUfnwCxc3WGVq2pbLhCR5Z54q/YmlLZYtPN3JhBdnTn2kOrUrKQOFcDy5NU7eGN+se4aUlKXIy0E7uOij1r0boqM2vI8eDcl9zrqTSCbQ6wE3BJS7GD+XQE5PoAKa5NiSxa48pEpT3e7wEJHIwCc/dVh63cYuabeCkNlFvDZcUPrK2oVkevWk1y0ou3XyFYxNbf8bpQ6G8AhTIVwM/EZrayEI2OGPLY56pSlUpt8Pcr6PbGjNRGUFuKU6hAVyMhQz6V2m2qExEjud3JK3mVHj6qVBZTk+6pBcQ/EuFufCoquYq0hCt4BHh59/HSttWq72zW15lRaLjcgOpSng/jM4+HNVoqU4uRac5RaT5wRByxOtzfZytKyVBIU2oKT9XPX4VINO2KFKuEDcw442sNhe4+EkhX8KdtKMtwpLEpUFLifa0o2qHgO5o8c/H7q7aSUlOprGhC8svJQstkDjBcFYuLjJqXkd9EE5wx5id7QMSYttyFJLYVhS0IG7GVbQAKb79YbdbkBthl1x5uOouqUk43gjxdeOtWhpB0OXa5MuBIDfdhvIHB7403X/Tj93cvcuO+02mKwt1SCeXBkEAen1TWaWbVHPmdNVCj0tk5Ldf8AZW7tmYUtaUxEJ/tCUZA5+rkjmk0y0qml9TTqUJipBeCs9CoJHHuqfFphQbfUhCXFz04GcgYR5mlTtphN6Ju90S24qW86lKilWU7Q+sef+UV6F1UVFv7nkqS1JfYqly2x2VISpXeFQQRz6qwf2VOdE6Ys9x1YqO9D71nv3Ed050CQP41FZCGVp79W9DjAaPiGMHvDnA8+KtfshWw/qyTI8Tiu/eUHVYBUMAYwOK8j6lYqqZyi+P8Ao7ekq7SzD+5Tl9gssXSQ2013TQLikkDjAVxikku3KZVDTuURIS2rOOBuzx91TXWLqHH0I24xDcxn13mu+srQ4m16feYjlMfEdCnM/l4PFd3ZtVa2vJYORS1XqC9SPWnSDc+13SY5IcbXAxlG0EOnKvPPA8NOjWi4qr8yph5AhuOd1tVzsOzdzUy0ha3m9HanDrRB25C148QCnAcU3QHW2dcR4jiFjLiHCpPP/VEdKpOP+VlZ+B09M/8AOxg0RWRZICNQW5ss5St9SXfzSAE44+dSi+aatMPs5gzUw2RKdfA7xKcEpKlcfYKZWpbs3WcdlbaO6blvbFZ5IGOCPlUy127FOhbBbmXC1KXh4lSSUJThfU9BzxW1MV2EJy9Tl6py7xZBLy/uLP6KKGF6+acZQEqEF8K4HPiQK9e15B/oiZVrt9KgnDUF3BA5OXE5zXr6sE85Zo1p2CiiipICiiigKr7fvDZYDn5gkq56f3C6ovs6SJEyI5HQ44kTFKJQk4xv9aur+klqOTpvTNrfhxIcpb8pTKkym96QktqzjkfCvPcftPvtpf7q36ds8d9HiCG4RSU8Zzjd6Vj1FfbVuvJr09jqm5pGt/kezaiaKUqz3r6yM4JwlXSoYp12TBiLSjcgyStSVHON3AzxU/c1tqN+Am5K0/psp2qcJVDBWkZ2nPPqaZFdpl9aS0luxafCXMlOLejnaeeM+VWoShW458sG3X9Q+ovVjWEsbFpy30DRkNptsBEiS5wr0CQgfZk02a4ZdPZhY+9yZBdekLQTt8ISevwFRu7do+r4sVgtxLQ+ygBQAt6cIJ545NdLFr3tD1NMVCbtdrcdaQV7H4SUjGR03fEVSmh0TUn5F+p6zvEFXFY3f6lxaJjsTtPRGpDaHUhQICgDjDbeK8tajSYetkF9sqbUsq2JUMkEkeXSrBi9pOsbJIuiJKICXGHQlxpLSD3alEDA5xjikMrW2tQ2mc7Y7X7G8tSW31W5ohZBwefjXTJqTycEYuIw6l1aLvbrNCeglr2GMtsLTyVEJwDx6ba4aOu0drVdvmXRT+EObVuKznBbIwD8alsbXd8kPLaRGsDT7W3elduRnxfAV0VrDUZZcc7vTS1NpK9htqQTj04qZXaHrkVhTq8ESFXSYhybHLJdKFoYJGABgLOM0u1S+lzS9pbZaJUhchLit2cDf6U+y9b6gjWVu5vw9N7SQO6+jk7k84H7Kd16h1Q7oMaiXGsOwSO4EVdrSCAfysnyqYXYzp8w4eq4I1pSDKuupINoQ8FvPSG3QcYSAlpXX5Y+NdLXDXbdY2VmSgoXHC293kvapeSKzau03VHtneRoNiYeYG7vk29AIHTjHxp2uWttVR5IdQ1p53u3gyl32BOQtQzgDk85qLLFOxzztydFFiqlGSjwK9E3BTt81M2hCQWVtpbBPLn4wmpRpdDjlv1W86ju0+zFRBPQYVUGl6/1bbIkaciFYVGWpW0t28biUnqfma2c7UNXMwGloYtBXLOxbIgpBUc4IIzz86zrg5z7SO6W/wCR1T6pQqnS1/q/TfIlvL7qJEdbfMVVwUAsDr4QKeUpLnZfNWGw4QQrBHP/ADl3p76ZLjr3V7DqYVwslmaO7cWlQE5HTKsZ9CKVXXW2p7RfpEGGm1Nj2QKLKYiQ3tGV52nz5NdkrFYnOK2/7PHjXplu9yBT0R1nLC3wAlBeHUbu85Cj5efSrK7D3tuq30hPgSp5e4Djyp4vsrUtu0/Y7ki4Wda7oAdjlraSEZRv6+f/ABrim8a3j2S3Xa2vwXUy0qKyxbGwWkgclR9M8V5PWKFlDpm8anyeh0rkrNcVnYrTWV0HtCPZS4hQillRSAAcqOc1LNRz47mlIUUH+0MyYRCQrjlBJOKxP1NrcN95ENjn4UG1pahsrUgkZ6Y6AU4Rr9qyVFDrsy1tktBxCfo1o564HTyxXd3iL6aXt2/LyOXQ49TGUed9hbpB1b9g1+0l0q7hlaghfRHicPh99Vrabq+5f0y3+7dlhxCUcbcp2EdPsqbP6r1nDQ2DPtqFSHA24n2BsEgqwCcCm2NrLVT2o/o1cm1oKVOJ7wW5o/UTk+Q61ha1XDs5SwsZOumTlPt4xzuV83c5bOpHZLTiUuIdWpAIyAT1qf3vUedF2dt5ZWlO1RCBk52kfvrlL1fqli7GIiTbFqMgsBX0ayMkDOT4enNcndb6rLrjXtNuIbbW5gwWhwnqPq1pW9UFpeUYWz8bclu/5gmv9DzK9Z3BZGCmEQc+pWDXruvLP9G/WdyvnaOYU1EUI9hccKm2ENkkFOOgHrXqaoWPImakn4goooqSoUUUUBTv9JBgSYGl2SEELuKshf1T+KX1qjNQIUO0SItZWFSIIRxjr3JH7U1df9KOUYentPPoxvTchjP+RVUleZu/UOlZ4Vw6ygBIOM/XT++sZNuTXlg6IqKrUlznBxixnV215x5zLTiXm1gc7sePnHvqPXa0BuxsXRsEJTKksbQDwCkmrK1ZPYZnKiJwPaG1EpSOAlbPPPTOR99Vs86hhCLcnvW4XtDzndrVhY/FjGf9o1l0KlZBY23aNOvcYzWd8pCu5JeVFZZPdhBDbg3rwCQnirW07Hc/CvPX3idht7Z27vPCKqO+yGm/ZG2FKJ7kFO/xchIB/b51aGn57MftUlLkvIZbNsbOXVhIJ2oPma9S5p2L7Z/scVO1sWQTtQ05KtV4vU91Y7mW4FoQk9CkpVz8lCnjvjN7MVsIe7xLD8hKAFDGFIK/305dsrym7VDVwsqeeSD1H9ygj49Kr2xy1pXFtjIdSzJCHsJ5A3NlJ+8VhZXFYed9w7JOT22yJNLR95nKYR+MBSAAc5SAFY+41KYEF52apsJKkKKkkJTu8JOc/YaatE2x5N6dfbS8tlLbRcXnCUbtyTn0qydO26TFnQW5jexMuOlbfjzkbFjIwfcKw6pOVLN+nkl1EX5ZKwcfQnTPcpbysKxuWcjAUeNvzqwLsJM7syWzFQpyQp6OEA9D4cUlGgbhJ0kt7CW3OGUoUMBaisAK3emKl+mLfNf043Ht7KZEmM6zuTnaklB5OT8KvCPghlebOaUnql+X7nniBIQhTjO1SHlJDatnJSdwzn51LJiDEXHdlvLDf0ijfIcVjokeXTFN1qthma0uNudSG3hJDDgyDtUXucGnPW8d+DrH+rzjiHWmp28ZQcnKM5JzjoRVFhajTLaQnvX42LpnLikIVuVkHG8F0Dn3UXRlLt3tjYUMO3BTxx670p6+nFLdQxZDDGkO+YdCFxQ6AtIKRlzOeflSCW4Y15sLxQVJ3hwgDgZeHX05rfoq9FM5P0x+pt1SUrXjdevwS7XlkULiieXg4pwoZDaU8gYTyT6cUi7Y7IuyasRdJm1MSRHMdG0Z8QbqT3WX39vE5LaUhKVrSCeg3AAe+mHtXu7150faJkop70yVkkDjo4Mf+mtHKSraivD/AHOCmrVdKTfmkP2s3ko7NdBPOElsKaBUPQtEU9aKfYd7LYrXiW6th1nAIykFasH/ANNV1eHkPdnmi3ESHg80ppAb3fi+i+SPXgUq7Kbu87qY2JwF1ooe2t9fEkqIx9prhugrVj03O+jwTRBbNJVbbk1KjKSy8pKWTuGUgKQQTj1yKm+nipdmi7lBwmOeD6gkcfbUAkFtMgtpXtWh1KVD0IUsHiptpCYzcCi2MK/tDKXASobUnx+R8+tTfOMOltTfkv0ZlXXOXUV4Xn/YQ6nC2tQJyeoirwBkZ3n+NJtNNB7tJIXykLkqwrp/dmuuqFOfT0VDiD3riI4BHTIcPU+VdLDHdb7RHO+QUIV7SkKPqUe741n9QfiefadXRNPp392Ml5Kla1OzIT9IueFJ8gBTa5laZD5JOYzpyVdQSB++try+81qp9xpTBU3KfWhKlYOenNP2k7eiVoe8SnzudaSltpSEbgM8kE+XOK6OkaVeHyzhtjJzTXkTb+jBFDXbFILJKmkW5YOfIkp4r2BXkX+jA8R2tz2ghO32VYJz0wE8V66q+McFtTlvIKKKKAKKKKApr+k8myK0vZxqKbLiMe3ZbVGZ7xSlBBOMeXGaoudd+z2QiyJN0vDX0WgIbPsOSvCirnn31cv9K/d9A6YCDgm5464/6pVeeWYLE+12V59pDpEXcrd+UA4vPI9QMVSdirWWWjFy4ZK2rxoFy3vxDcb486te/vRB5TxjGP30yOOdm6ZhkPX3UKniFJJVEST4k7fWuVlixYhYQ00AUtvBZ8z+M8OSevFWjpDSOmZtnTIcskRTpIBU5lSicAk5qldv9R1RXG/yb3UqNMLZN5llfBBZV07M3UNLFxvaAhnuMqiJUDkEZwfOsXe6dnF9md4m6ahbeLaWt3sqVDaBjzOa119Z7bD1BfWYcBhtpiGothCOEK2oORnz5NQi1Qmm1xnO5Dged2lPn/epH3g1tCcrMyfKOScVHCLRu160hqGIm1XCZdIbURzvGHEMArdSEJRuI6DgdM0wQ4fZ7CuTEZq6alMoKGxsxB4iMkYGenNOukrUk6wvD0i395BRHLaS60FJCyoYAz58GnW76eifSXtyowElD7KEHBGEFJz099aW5q6edz5XBHTxV/URoXmNVmumgba9OisXbUS3H9rTjaoYVghWQMZ9TinaTqrR8WXAL1zvSZEBtDLSXoJwAAeMZ44V0qPS7fFjaojDaloOLbW4oDGVd+OorOuUNLlFxvlK5zakgJGMFA59a8r/ABB2KMGtpG3U1d16ns87rcfz2j6KVbF256+XgxipB2exYSNpzj63TIp30b2maI09EU2ifdpLbyipJXCIGPkTn41DJtitjlmtDjcBkuFreAlIBUraj6x8+SetI58aOzf7XFZShLSUyAAlOAnknAGPKuzpOr73BtbYzj9il9HYSy9/X9xZd/wdfT0i5uXTUsN+ZIL20wSnKirdgdD1rafI7O5Dsd527XwSWHVrDi4OSrI6HJ5xT/2pvQ2LhBTJZS44SVsrxuKVBSOn2molddp1g/uwvxTTtKBzlgY4/wDeKjpZS6ilWtYeS0pKOEnnK+CTva00M5b47D14urrMdhtjx2/cNqDwevFMTVz0GIU1uPfruGHwkLX9H5KML3DHi45qFXS3Mx9NzFojBv8AFtKznJ5SOfnUkssRiTpi8tBpCgtmMv8ANHKgD06VtZ1VlUXBcPk36To49TOUm8YQ9O3/AEU5aGIDupbx3CW9jKjbQOM+ZzzyK1uMzStwgs2gTrlLixcSC+1b8ncoucbScD64GaidvDCbjEt79tiuJSpDJCgVdXtp2ny61P1RoWlu2Fy3wbcPomTEb3NYK/Ft3cE+8Vk7moPC+5SNUXNZZFZNy0Gq0xbS/er0luGrLe6CNwIz18XUZrppG96HsGpY16hXe8uuxd2UqgJ53Z6nd764avhwu9jzG4TDG8rKgEAlWVcE+nWochtpKLkWFIO+K5vbCPq4UMVeqLshrwZ3Ls7NGfwJr3WgZE919Nw1Et6Q8XEtpgoI3KycDnPnT1ptrR+lXvpV9OpHmACnc/bglG5Xn165qC3GY7FEaaclxtthedvH1R1x0qwpbqZfZDKeI2qRKTwR6OI4x/rVnNQknGSNnqhpnGXIzvTdA3GaXkzdSLdRg4REScYOR5+ppRbJuh7RqAXVb2pXH1lYHexANxUAD5jn+NRBERTKpb44C5DqC2ABjkHrUn16PZtIWGUEpOYoVjIySFI4qbtFqhlZ1Zj+mTCuxwjKCeMb/nnA0XROgZtydkql34OOOuLKRBQeVeR8VPenrhpuBpabaYatROxpmCp1MAAp2444OD86iEgcKX3LSCtlhRAbwQrcOn8atS0pZXGuCvZkocQoFJ5zgjnzx5ela1Y4S4MbZtTS9Rd/R4t9jidpfewVXr2x6G6pPtsUNIUnKM4OfhXqKqG7LHEK7RbajHKbc8U56jlGavmmcmiCiiihIUUUUBU/9Ii1ouNgtC1gkxZnfDCsc7CPn1rzBYSF2S2kuBDaWVpKt3n3i8V7A7V7bNudmjNW9lby0ulSkp9Npry/I7KdYr0mIjNhf9oGcBW0H65Pr76xsg57HT09yonGznHkNcFL78ltOxS2koWULSd24FYzwKmX9dHNMaaSpqEmQUrCcqcIyNoOa4af7OtZMWmFFXY3mVsNKSpZUASSrPkfSnPV/Zlq64WVDCIZlSSpJKkYQMbMYIPpXPSrVfJtbbHodZbTZ08WsZy3+GSt9QXleprrdbkEriJVFcV3IVu+rtTyce6o3di5ATDWhXjDYe8PvUCPvFWXbOyPWiU3BDtpKA5GcQ3+MHJUoHBpDfux3XHskVDdrekBDZSEoWnwEnpnzFd8U1lL1PEcslm2uT3mkoylcKdLW8nz/Eg/tUT86R39cqRcYSIKEezPhsuunkIX0SM9RT5YtJ3VyxotsmDJbfZLWctnGUtJB5PB5GKQo0trVV3iA2ltEJKm1uKUckbCT5HPn0rL6hqs6d117t/sbdDiq9Wy8isbvMWjUEcANubSApZPUh8n/drjdJiLo5HaLXduOTmj15Cdg4zUlunZPrd7U/tSrc27E78kbHAPD3hVznnzpbP7MNYKfT9H21pEZt9LyApYyCE4864+n6OPb1RawkuTl6y2Vl/aPfKGl0vv2eyiBKab7hkKeKvJADefn50hu11Zj3m3OezJSjfIAUQckFPJ+2pw72baqjWqExGt7by3Gg1KBXjYMIztOf8ADUb1L2aa7m3hHslqSpDJc2unASoLTjHX+FbdBVo6dxS38XP4nX1FnaTzJ+n7G+tJzEm8ArZK9scuIxjKQSMq/ZTBqhYhajbmqif2Pe4lKUHxHewE4IOPMZ60/O6B7QVS3JEq0vvZZSwAko8PTOPF9Xw/GlWvNBatkPu/R9qkvIbU2UFLfJyghXOfI4GKmGqiKqgti39Oel2PCyUsxJgp0xdGpIcVOWUBslR2pGPTOOtTbTfevWRa2ULUPYmlkpXtSClRPPr0rgx2T6zcS5Gc05PHtBRlagkBBAOec9Oamlj0BrKx292K3ZXXg+wWV+EcDnoc++ouqlJLPqdv0y2MJzWVunjJW6pD679FdaaT3q3tyU7sAHv8gZ+NWN2orlKZalSI/ss8rQkBp3eQAtQGFD3KpnT2c6qjzIz6rDcVOhe5SUtja3+MCvCRyfnUo1hYtSXCCwqNZLm/IbUlwoLCgogOgnk8dK0cHnC9GcPaYeV6laJmP3GyJjr8PdNICSoZJysZPxqOzUqCHWnOO7ZfCVoGCsBX5Q8qmcDQmtkQZfeaVuKnFBOwFvHRe71pMezbtBe7+QdOTAh1txCWyASkK59a3hKUKnBeZlYoWWaxl07JJ0nqFGUq3RUZKyVKGOmM9KksCdMc7JpcdhDbxcklTi1q8aAFNkEDzPupNadFa2ttnusQ6UuTxltdyPxJG33inLTuitax7O6lemrjgPIUG1N4KgCnPBPurGSklnGToc4NtrbOBlbjyHFtQ1HLqpjivF4c5Tmld4vce6aeftz2VG3x1ISFcgEFA4qSydK6nk6lbuCtMXVEZLmdvdcgbMeXxqIP6E1kzcboWdLXRbD6VJH9nV0UQft4q/TTk4JWLjJhfCKm3HjYQ3phuHJjIaKwh2OzkOZVgjB4qyoaCzbbi625ncTwpGQcJ8uffUEven7z7KpVytdxiOpaSlht6Osb8DBAJA6fOptoez3A9njzYaWJS++2pXkFXkMA/H7qp0snh6uTTroQdqnDgkvYxcHpXa/Gadb2BuDKSnnqkFrB/bXpevP3ZLZH4faixKcYdCBb3Ud4T4QSpPHx4r0DW81hmC+wUUUVUkKKKKARXa6wbQw29c5TUVlx1LKVuHAK1HAGffWYd0hTQ97LKac7l5UdzB+q4nqn4jNMuv8AS6NXWmJb3lIEdExp95K8+NtJO5Ix0JB61XjvY5cFxozb15alqalvukvpX4kuFGF5SQQ4NnXzzQFy+0M5x3zef8w9cft4pJEvEGXc5tuYfCpkMoD7ZBBSVJ3DGevHPGarVvsokI1l9Lm6IMMzu/Mbaf7nvO+CPj3vOfSld/7NZV21rLvCZ8aMzIeadDrTavamghko2pXnACicn4CgLK79nYV963sBwVbhgGkcW8wJNxmwWZCTKhqQl5BBG0rTuSATwcjnjNVXH7I5rNtLftlrW4l5lYimOv2V0NtKb3OJ3ZK1b9xPqBXaF2TTYd2RL+lWZaExkxS3JSohSfZgyV8HIWCOCDnaSM+dAWi5doDcyLEXMYEmVu7lveMubeuPhSj2hjbu75vbnGdw6+lVRbOyeREZtBXKtvtENyQFLTEAKWnEpSnaoYJWjbkKPmftxZeyNcZ2B9JSID0ZiUy65GaaUlt1LTK0BRBJy4oqClHocUBbaXW1btq0nb9bB6fGkFwvVvt4imTJSBKkIitFIK9zis7RxnHTqeKgmk+z2VplWonjKbmLmsOttKTuDjm4qUO8ydpVzjNR/THZZdm7LBcfkwYEvMN1TDbBwktIXkrGSFOEr5PQ7aAucyWAkKLzQSeAd4wayHmisoDqCsfk7hmqZt3Y3MbhpjTptvfZDjrvdBpQQFqjFoKCTwDvIXx6cUtR2SyVK7xdyZbmKGxctpB73YYfcEA/5vFj99AWnNuMSFAemyX0JjMoUtawc4CRk4x14HQU3P6ps7As++Uc3faYaUtLUp0EAg4AyBgjJOMedVkOx6aLGxDEy2F1C3iptbTi2D3jSW+8CSeHAU5GOMmpRdezxNzZ0y3IdjhdpgLhre7rK9xaCErQT02qG4elATv2hnaFd83gnAO4dfSm+TqO0RZi4siew3IQ81HU2o4IccGUJ+KsHFV1YuyZcWVbnLk/AejR5SH3IjLKktKCGFNhWCT41KIUo9DinPXXZ09qPUa7nGntxkmIEhBST/am9/cu/wCr3h+wUBO7fdINxYS9ClNPNKUpKVJPUpJSrHwIIrnKvdtiPtMvzWEvPJWttG7JUEDKsAegqtIvZPIjTrQ6i4x1JiojF1xTai6lbRUpYaVnCUOKWdwNKIXZUiBG00YotgmW5DyJTi4+7vy4MbweoUnHBPTNATtjUtpfhW2WzKC49xUlEZQQrxFSSoAjHh4BPOKcxIZKNwebKc4yFDGaqO39kcmCiKiNNhttt+zqcShCgFuNsPNrX8VF0H5U2XnsxuFmtTKrbHZuRSYwMFpkFpxaGHG1uLSpSQeVBQOc5HNAXO1dYDs56G3LZVKZbS842FDKUKzhR9xwaUe0M+H8c34vq+Ic/CqfgdlEw2dtK3bfHkv2mJFkBbO5aXWSFFO4HlCgAlXqAK3e7IZLsXCpsEPhl0MhLSgiK4uQl0d0OSlKQCkefNAXFRRRQFDf0oobT6LK+t55tbLUkpDbhSDwk84+Ary/aFS5l4RGM+T3XfoaP41ecH517e7Uez4a7ZiI+kjALCXE5DHe7t4A/OHpVaWf+jYi3XNMxWqC7h4O7Po/b0BGM95WdmrS9POC0GlJZ4IX/RvbfjdtUiOZr70dMN9CUOLUrkFHPJ99euqqfs/7HhpDXLuoxezL7xt1Hs/svd43lJzu3npt9POrYq0NWlauSJYy8BRRRViAooooCH9qd3ulj001Os8iPGUiYwh959ouJQ0pwBRI8hzyfTOMHBFa3bXWoYEfUrHtLbjDsicIklCld6wWg0cDPGzC+B1q+jz1rGB6CgIFpfWU6537UduksxB9GoUtoNkncASBvWCQCccghJHoRzUPPbBc2bOZcmPbgstSgkpQstqfbS2pCEqSshQO9WSD5fk4Iq7sD0rG0egoCmJ3ajqGPIuCkQbUuLGXLwD3gWpDCkA85xkhwY+Hyraf2o6gjTbiW4NrXDiuytoV3gcU2w8hB5zjcQ4PdwfhVzYHoKMD0FAU292qXtS78lm1Qm1wnA2028540nv0NjvEhW7Ckq3A4A/zVb0L2j2Nn24tGVsHe9yCEbsc7c84z612wPQUUAUUUUAUUUUAUUUUAUUUUAUUUUAUUUUAUUUUAUUUUAUUUUAUUUUAUUUUAUUUUAUVF9f3CVbrdGchPqZUp3apSRnjBqGN6ku5xmc99g/hVJWKLwWUWy26Kqkaiu3lNe+7+Fbp1BdyfFNcH2fwqO0ROhlp0VWJv10BGZjv3fwoN/um4YmODnzx/CnaIaGWdRVY/Tt1AGZrnU+n8K3Re7nsAM14q+X8KdqhoZZdFVqLzdf9Nd+eP4Vt9M3XHM1z7BUdqiNDLIoqtfpq5jkznfsH8Kwq9XQjic79gp2qJ0Msuiqw+m7qlJJnu/YP4Vk3u6nBE93Hy/hU9qhoZZ1FVgq+XUD/AJ+79g/hWqb7dSP+kHfsTUdqhoZaNFVYb7diP+kXh/qprX6du6Rk3B4j1wmnaoaGWrRVT/1hu/lcHPsFH9Ybx/p6/sH8KdqhoZbFFVGvUV5zxcXB8h/CtU6lvH6QcP2fwp2qGhlvUVUC9TXgdLg4PkP4VyVqa9g/9IO/YP4U7VDQy5KKp06nvOT/AMoO9PQfwriNT3sj/pJ0fIfwp2qGhl0UVW+gL9crjfzHmzFvNBpStqgOoIqyK0i87lWsBRRRUkBRRRQEL7UVbbVEOAfx3n/lNV21IVjGwfbVjdp4zaomfJ7/AHTVbpHmKwsXiNY8ClL5/MTn41kyTkAo+/iuKQc/GupQAOetVLHb2kbsBOB5c1siQCspLecDPWuJwMcZpTbIa5U8Jb4SU+JR6JHvoQzrHDspaEMsrU4egFO7keLbmd15mNRleTaTuV9lNdxv4j5t2nQEE+FcpQ5Wr0FR7uktqdff3uq4G9xeSskZ4+Yx6VdRKuRJF3y0J3CPCnScflHCR99JxqGGskfRctAHXasGmaMl5SnfZmXC0tQUlRTjb+6ujkWWEEmITvASTvBzt9KYRXI9RbzaX1Ad+pgn8mQnaPt6UteRtRvKCptXIWk5B+dQ6UpILbLzIaI8I7wcDOOvFFumSICy7FdS20pRT3S+UL92PKowXySZTiMZwcVzDiAeAqiO+xc2FGOnun08rYJ+9PqK54x8qpglG63EqwPF86594gDGCKFcjg81rgc8dKYJAOIz1VWhdSFEDn41r0o5ySkUwDHe8/VrRboHUGtnRnIPBpKpKEg9CahoZOineD5/KuSXEJB4Vn4VlAA+r9lc1LAURUEmFyOSdhI9a1VJQU9DWFkqzjzrGMJ56VOAZU8EpyUnB9K596nZ4Qfiay4rOOeK4kHHu9anAJf2YOBWpcAg/iF/tFW1VQ9ln/8AJz/4C/2irerevgynyFFFFXKBRRRQEM7TyBaomenff7pquEqBPHSrG7UWg9a4aT0771/wmq3TFQPqpzj31hPk1jwdwvAwK69QM0nDaMYIHwrdLLfUtcY/OqpLOyclaUoBUtRCUpHmTSnUbyrZH+ioi09+tO+S7nG0ema204lliU9MUgBMRor5/OPT7BmowJQlynZLi0h55ZLhWfyMcDHmKsuCBa0dqUMRQpbiiNqcDJ8+fI4zSlaGrUWXltJmqcOVLBygY6pA9R7/AErFsaeahCUhhl+S6Npa3AFLWMcAc8/upM0pCFvIiBRQrl2G99YH1B8z7xzViBQpxxTz8d15bzEpvLJUeOOU/sIpIgIctcZopSFB9WRxxnHNJnlbhsSpRaCiUAjBTmsmM4eqCCfInBoB2ckFcya8te6K2SlLZ5So9AMffSNLK3I6ZCG0tBSsdwpXDuOu3NJW3CkBt0q7rfuUlPBJpYtSS6lTzYedTju4zZ4SPLJ/hzUshHBtS0hD8VToeQoncvqPj7vdT83KFwjd8lIQ8khLrY8j6j40zTG3eJBUyiUDl1tog8Z4OPI1zjS/Z5YcUtISvwOJCudh8yfXNVaJ8x6wtHGM++sjfkjjmka7ancU+0TOOOHyM0JtjeOZE39eaoXFCifFgdKEkhXi4GBSJ+1oTu2S7gnI8pBrkxBLLgUZUt0eSXXioD9lALnXfxoBHB4rRR4PuritjCwcr59VH+NbBnnnfz/iP8aA0WT9YHFaqWk48PNYcYw34d2Qem8/xrQtNnAG4cfnmowDOcmsK5TitS0kcgrPX8o1z2IxnKv9o0JNiAmubh8xXLcclO/GK5lWOCo0BNey0j+s3HXuF/tFW7VOdlKgrVfBz/Z1/tFXHW9fBlPkKKKKuUCiiigIT2qEi1Q8AH8f5/5TVah1wHyNWR2rki0wsf8A3/8AdNViFE1hY/Eax4FKXFHPhFC1EhKj6+Vc0Ejz8q26tHPkTiqknRiSRpy6OA4717uzj04H8ajrDZcfaZTyXFAceWTS6E8F6alISrxJmc/7RrrFhOwb7bkSUJBU4hYweozV48FRbODEmQtS4MxksnukPtuDGE8DwnGPtpPJW53YDzpkDHBfZUlY+Cv+JqVm7MrYdaRaDIYJO5LK0Lz6nr99R4RIbTgdbt90iLJ3AMIyBz67v3VIEMFlxqQlbzewbSoBZx8M+nNJyhTjilOKbW8eSreMn/38ad/pGNImpdmGU44k5JejZSQPPCf31ly9QHVJ3892QcKZUE/7OcUA3rbcWhIBQtzorxDkeVd0tOso7ta3I46FDDZ3K+JH8ad4+ooBOEllISNqdwUjj0ziu7moIHBS40pQ81Lx9/lQDE061HdSlqHsKhtJe37lA8HCQAOlN8xnuH3GyOhIB9alDl8hq8br0XcOmMuEfMUzXbZOu7S46kkSEpIUeAT08/hQCyG6t+FGdChv5QrPPIpYiTkfVTn7KabZuajyWlkFTTwBweOR/wAKU5VnI8qpLksuBYtSlenwripRSBjGfMGhpZPWtV43nNQSauBXB8J+IrKS4CMJRg81jwhJ5PWtmxkAAcmgOKy4knIBrh3qwScJru6pSeo5pFvwpWehoDJdVk+EVo46dpBSMeVBwSSCcUnVkk8kioJOLqVqcKhtGawAsflD7K6OHAzmuSjk5zQEx7JARqtWf9HX+0Vc9Uv2Sqzqwg9fZ1/tFXRW9fBlPkKKKKuUCiiigID2wKeTZ4PcNJcV7RyFL2/kn3GqoLs/kiG3gDn8f/wq2+1tW20Qv/H/AN01V4Uc89K57F4jWPBvHkBTQWpAz5gGtFSwhtzCeT05rgwMMJx51hxIAxjOagsNmnJgkJvcJQCVhReSM+hB/ea6tynES2HlrWtTSgrxHOACDio81KFm1k08s4jyDscz0weD+2pCuGlEl1p94oCMgYGSodQQenIq0HlFWK5KlRbq6pgvICFZStCz0PI8/SstPSkpXtLym1ZykrJJ8/jW6Fe0RUuhTinY/wCKcCfyk/kqPy4pwtSErnIjuIbQpXOUZJA/xGrEDaZlwYUSlb6E46rcJwPnXVu6y8JUtpp5BPVSEqz8+Kkt5jsQILq3UNqUcJQhQ+saiKWtqmklHJPOAcnHkB86AWMy2HVEKtqFKzn8Wsj7q6j2Ur3PW+U2k8nYd2PlW1udjR98e5NKDK1jC8bQPQHzxzUqj+xsoUplCUbMhZwAeKZBD1rtIRu7qWAAec4pPeHGlOsCOCGg0nAPXnn99LbkpFwuW5hAb3EIUk4Sr4+dNklxqVIWshIQte1JJ2+EDAI8j0oBXbXA3bncn6zqAPsNOCHFHBIIx8802I/FRYLQwS8pTx+AGB++nZtaRtOzgeY61SW5ZcG6Vr6hCftrVx71SnPuNbl5IOEda4bj0IGagkwtxzjwAfOtkSSlf1Bx765qxnjPzrktQzweRQCl1xSgCtCR6c0kWvkhCUc1s4+ogDJyPWky148+vnigN1bk7irGPLFcC6cYCU/bW7igUgn9tcFLG7gVBJlTmUkFAB8ua4ryAVrAHHAzRvySfccVgrK2VcZUOKkEw7IV7tW84/5uv9oq7Ko7scydXnI4EdY+8VeNbV8GU+Qoooq5QKKKKAgXa9n6Ig4/0j/dNVeDhWVccVZ/bESLLCUnyf8A901UpeyAVqB9MVhPk1jwdYxUkEHkAnHFdVqB5Ka4BO5O0LUD14rCmkgYLjpPuViqliNatgGS0FJThQBIOPMUs09cjdLS26FgzoQ2PJUkHKegVg9cdPsp0kMhxhaNzhz+cahEn2nT14RcYgKk5w6gjIKfPPu9alPBBO++UlYmNKSs/ULedynAeSCcY4+7inC2xUypkf2PctlYypahynnJ3ehpnhzmX4yZ9uK1w1Z3NpPibJHKfcPfW4kqguiTbXS2Nu5zjCDjgjHnWnJRE8v0FE2GdoKltglODjORUNDYS46V9EICSMjr124+Rp3t+rGnGx7ayth1XIOCUHj7RTakx3nHnFOxCpxZWlW9Ix9oyB18upqCTVtlyRKS1wlKhnw+WPl1qR21PeolMOqOxQG3Jzgf+xUbDrEd1l4y4yXEHedp3fLA867T7648hz6PbEdvHidWOffgUBpdHEMFxhCk+0lJDrhOO7QPUjzNIGGBIeYiRycr+sr3epHQjHnSUtr7/dHc7xSwCOMlWeuPX4U4Snjbo5jJINwfSEr29GUfm/E1PBHmdir2q7LUwklhlIZbwOgHnTokEYGDj303W1gMsgc7iOaWj6uMnFZZzuaHV0HjAGPWubmdox1rQjjqftrRR2+tQyQwo1hYwOcVqVHPhHFc3OU++oTBhaykDHGa5uPeFWVHJGOtaugBwJ91GB64qQJ1OfnEEeuea0U4kIPNb4GT51otIKTgDNSDlvCAcnnyrAWjpu61oUHcEHg1rgJKipPSgJt2NYGsVAEn+zuftFXnVGdjYA1iSD1jL/amrzraHBlPkKKKKuUCiiigK/7ZFBNkhZz/AH/l/lNVFgKKSR4fMetW52zf9BwuM/jz/wDqapxC8g9eDisJ8m0OBc2vkgVv3yvMdKRgnaCK7heccVUk6lW/nGKbJ8NEhGVdfSnEZyPfWVjyFQSVz/yhp2cZNpJLZJ7xhQyFA9Rj091SK13q2XkKaZdRAlODDkd8/i1n/Cry+BpylQkvjkeI+VRG72BK3SNgCuuU8VZSwVayTWQZDLK0yGCMglKh4kg4wCD6YpK04xhkLLWwDxBQJVnJ+6obDmXuzjEK4upbB/u1+JP2GnFnV14Ry/Dtz3+IsgH7qvqTIwSZLjI2d4We9A3K2JJTnn7+ld0xpEoh1LSWUDJU84QhG0jkGov/AFwvCsdxHgRifykMgn76SOLud4UFXCXIkDP1SrCfsqNSRGCSv32LbwpiyH2meTgySPA3/l9/vrnaGZRdLj60lavEVlOSVZrja7UlsDCdo8/WpBHQGgMHPHT51VvJZLB2QZZRw+EnyIbHFakTRnMsEDy7oVkFWTtOM9a2CST9bj31BJxWJQXn21QH/hprkTJKiDNcPwbT/CuiiclOQT61jgDk8+ooDiRLK+J7u3/In+FAYluFWLg6B/kT/CtyBn69bMKxuFAcmmH21kvSnHh5bkgY+yu+MA7icUKPOfKttwU0sDGcVIOTiBjhXFcHN3meK6KztFcVEY+t91Acnc8YKiaQuh1S1ErIGeffSxbgyK4L5Khx1qCxN+xbcNZlKiD/AGZf7U1fFUN2LY/rqrH+jOftTV81tDgxs5CiiirlAooooBn1Np+JqKK0xNW+hDa94LSgDnGPMGo4ey+yH/r5/wCsR/LS7tNvUzTmnmrxDc2sRJbKpiAgK3sFW1YGRwfEDxzxVc2btF1SwiV9KpZW9bm2I8wvIDbKHn3sodcUkZCENYziocUyctE6HZlZQMe0T8f+Ij+Wj8GVlzn2if8ArE/y1E2u1O/S3IaYlrtqUvdw2S645hSnXnGkrQQOUHYFDjOD86wz2xSnZdobFui7ZkYLdT3hCm3CHMYyfEnLfkPPkg8GNKGpkvHZrZwR/aJ/H+NH8tZPZtZyf7+d+sT/AC0yWnXV7u2kdSSVx4UW4wrY1PYW0VKRh1kuDIP5Qx8KZLV2lXayP2y0XBlF4kKhB91xCyHlOLaU8kAflcAJ4GMnrnimlDLJr+DSzYx38/494n+WtF9l9iX9Z2b/ALaf5ahs3tMuwi2+6suW54GFKeXGjOKU0VJLG1KyQFBSe8UDg/wrreu1m72yLKS9AtbcqIqUhxx11YaeU0UBKG+MlZ35wfJJ+TShqZI3OyLTrgO5yfz/AN4j+WuCuxjTKhgvXL5Oo/lrbW2urvZL7GhW2FAebXEjyFl9S0nc6/3WBjyBIP200p7Vrl3ttbVa4YW6Qh1vvVbpCvaVMKTHGOSnbvIPQH500oamOjfYzpptQIeuJx6uo/lpcx2WWBgYbcmj/wD0T/LUWm9qt+hWu3THrRblInPyENKL5bRtaVt2lSiAFq5xyenQ+Uq1NrKXb9TwrO03DjNyInfl2U6pKnFElOxrAIKh1OfUdOtNKGWdvwa2YZw9NGf8aP5ax+DWz5z7RP8A9tH8tV/b+1a92vSzAuMeFJnhmK426txX45DrbijvJwAv8X6454yer6O027vQbjcGbdb2reyuG0hx91Y7tT7bS9zhHAQgLOTxnjpzTShlkkT2bWgf9qnn/XR/LWFdm1nV1kz/AJOI/lqIwO1y5yZ9mj/RUJSZq1BTokbEOASFNYaKiNxASFeZOeg60vj68uV57PtW3ACPEnW1CggxF7wk7cjx8pV8R8wKaUMsfVdmdnUfFKuB93eI/lrH4MbL/pNw/WJ/lpDpXXVzuWq0WqZEiCI69LjNOoUrvNzAbJKh0wQ55eYqIr7Rr/pmNKm3VyNcVybpLZQwSUJbaYWEKSg8evGck+nWmlDLJ2ezCyn/ALRcP1if5a2T2ZWVPSRP/WI/lqHz+0y9WVu/GYq2SZMe6mNHjKBbUhru1LGTkDBCeCTknPXgUs/rndX9G64vcSQtl2MGHoaVBKwwFxmVlIyMHlZ6jzppQyySns0s5/7TPHwcR/LWD2ZWfn+13Hn/ALxH8tJNdaqutp0zPlvlNiSy4hEaWvu5BmZz4UozhBOByroM+lMh1Dqh64MPW+8tTQxYzdZUVhhpbDi9hShttYG47lpUc56DA600oZZIj2W2UjHtdy/Wo/lrH4K7J/pNx/Wo/lrXsi1LcNRRbmZ8xu4NR1M91MbZDQWVtJWtvA48CiU+vrVgVOlDUyhe0vSsHTL1vTAckLEgLKu+UDjbtxjAHrUHWkbh76t3tuZcefs/dMOO4S7nYknHKPSqtXEk5GIMk/BB/hWMlhm0XsS7sXSE62OP9Gc/amr5qkOx+O63q8qciutD2ZfiWkjzFXfWkODOfIUUUVcoFFFFAYUkKBCgCD5GsbEeLwp8XXjrRRQB3aOPAnj3Vjum+PAjj3UUUBkIQAQEpAIwePKju0ZB2JyOhxRRQB3TeMbE4+FU12/LUL1o2KFKEaTKWh9rPgdTlHCh0UPjRRQFy92g4ylJ4x0o7tHHgTx046UUUAFtBSAUJwOQMVkpSSCUgkdMjpRRQGO6b/MT9lQLtzedh9mN3ehuLYdT3ZC2lFKh4x5iiigHTsvYZRoCxbGm0/2cL4SB4iSSfiTzmpSEICSkJSEnqMdaKKAAhIOQlIPrigtoPVCT59KKKAC2gkkoSSfUUd2jBGxOD1GOtFFAZWhKxhaQoehGaEoSn6qQOMcCiigBKUoGEpCR6AYrNFFAFFFFAFFFFAFFFFAf/9k="
      }
    },
    "total-blocking-time": {
      "id": "total-blocking-time",
      "title": "Total Blocking Time",
      "description": "Sum of all time periods between FCP and Time to Interactive, when task length exceeded 50ms, expressed in milliseconds. [Learn more about the Total Blocking Time metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-total-blocking-time/).",
      "score": 0.99,
      "scoreDisplayMode": "numeric",
      "numericValue": 68,
      "numericUnit": "millisecond",
      "displayValue": "70 ms",
      "scoringOptions": {
        "p10": 200,
        "median": 600
      }
    },
    "max-potential-fid": {
      "id": "max-potential-fid",
      "title": "Max Potential First Input Delay",
      "description": "The maximum potential First Input Delay that your users could experience is the duration of the longest task. [Learn more about the Maximum Potential First Input Delay metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-max-potential-fid/).",
      "score": 0.94,
      "scoreDisplayMode": "numeric",
      "numericValue": 113,
      "numericUnit": "millisecond",
      "displayValue": "110 ms"
    },
    "cumulative-layout-shift": {
      "id": "cumulative-layout-shift",
      "title": "Cumulative Layout Shift",
      "description": "Cumulative Layout Shift measures the movement of visible elements within the viewport. [Learn more about the Cumulative Layout Shift metric](https://web.dev/articles/cls).",
      "score": 1,
      "scoreDisplayMode": "numeric",
      "numericValue": 0,
      "numericUnit": "unitless",
      "displayValue": "0",
      "scoringOptions": {
        "p10": 0.1,
        "median": 0.25
      },
      "details": {
        "type": "debugdata",
        "items": [
          {
            "cumulativeLayoutShiftMainFrame": 0,
            "newEngineResult": {
              "cumulativeLayoutShift": 0,
              "cumulativeLayoutShiftMainFrame": 0
            },
            "newEngineResultDiffered": false
          }
        ]
      }
    },
    "errors-in-console": {
      "id": "errors-in-console",
      "title": "Browser errors were logged to the console",
      "description": "Errors logged to the console indicate unresolved problems. They can come from network request failures and other browser concerns. [Learn more about this errors in console diagnostic audit](https://developer.chrome.com/docs/lighthouse/best-practices/errors-in-console/)",
      "score": 0,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "sourceLocation",
            "valueType": "source-location",
            "label": "Source"
          },
          {
            "key": "description",
            "valueType": "code",
            "label": "Description"
          }
        ],
        "items": [
          {
            "source": "javascript",
            "description": "Access to fetch at 'https://user.dispatch.com/NCOD-GUP/user/' from origin 'https://eu.dispatch.com' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.",
            "sourceLocation": {
              "type": "source-location",
              "url": "https://eu.dispatch.com/",
              "urlProvider": "network",
              "line": 0,
              "column": 0
            }
          },
          {
            "source": "security",
            "description": "Error with Permissions-Policy header: Parse of permissions policy failed because of errors reported by structured header parser."
          },
          {
            "source": "network",
            "description": "Failed to load resource: net::ERR_FAILED",
            "sourceLocation": {
              "type": "source-location",
              "url": "https://user.dispatch.com/NCOD-GUP/user/",
              "urlProvider": "network",
              "line": 0,
              "column": 0
            }
          }
        ]
      }
    },
    "server-response-time": {
      "id": "server-response-time",
      "title": "Initial server response time was short",
      "description": "Keep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).",
      "score": 1,
      "scoreDisplayMode": "metricSavings",
      "numericValue": 29,
      "numericUnit": "millisecond",
      "displayValue": "Root document took 30 ms",
      "metricSavings": {
        "FCP": 0,
        "LCP": 0
      },
      "details": {
        "type": "opportunity",
        "headings": [
          {
            "key": "url",
            "valueType": "url",
            "label": "URL"
          },
          {
            "key": "responseTime",
            "valueType": "timespanMs",
            "label": "Time Spent"
          }
        ],
        "items": [
          {
            "url": "https://eu.dispatch.com/",
            "responseTime": 29
          }
        ],
        "overallSavingsMs": 0
      },
      "guidanceLevel": 1
    },
    "interactive": {
      "id": "interactive",
      "title": "Time to Interactive",
      "description": "Time to Interactive is the amount of time it takes for the page to become fully interactive. [Learn more about the Time to Interactive metric](https://developer.chrome.com/docs/lighthouse/performance/interactive/).",
      "score": 0.04,
      "scoreDisplayMode": "numeric",
      "numericValue": 17233.091550000005,
      "numericUnit": "millisecond",
      "displayValue": "17.2 s"
    },
    "user-timings": {
      "id": "user-timings",
      "title": "User Timing marks and measures",
      "description": "Consider instrumenting your app with the User Timing API to measure your app's real-world performance during key user experiences. [Learn more about User Timing marks](https://developer.chrome.com/docs/lighthouse/performance/user-timings/).",
      "score": null,
      "scoreDisplayMode": "notApplicable",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "name",
            "valueType": "text",
            "label": "Name"
          },
          {
            "key": "timingType",
            "valueType": "text",
            "label": "Type"
          },
          {
            "key": "startTime",
            "valueType": "ms",
            "granularity": 0.01,
            "label": "Start Time"
          },
          {
            "key": "duration",
            "valueType": "ms",
            "granularity": 0.01,
            "label": "Duration"
          }
        ],
        "items": []
      },
      "guidanceLevel": 2
    },
    "redirects": {
      "id": "redirects",
      "title": "Avoid multiple page redirects",
      "description": "Redirects introduce additional delays before the page can be loaded. [Learn how to avoid page redirects](https://developer.chrome.com/docs/lighthouse/performance/redirects/).",
      "score": 0,
      "scoreDisplayMode": "metricSavings",
      "numericValue": 1581.016,
      "numericUnit": "millisecond",
      "displayValue": "Est savings of 1,580 ms",
      "metricSavings": {
        "LCP": 1600,
        "FCP": 1600
      },
      "details": {
        "type": "opportunity",
        "headings": [
          {
            "key": "url",
            "valueType": "url",
            "label": "URL"
          },
          {
            "key": "wastedMs",
            "valueType": "timespanMs",
            "label": "Time Spent"
          }
        ],
        "items": [
          {
            "url": "https://dispatch.com/",
            "wastedMs": 827.7460000000001
          },
          {
            "url": "https://www.dispatch.com/",
            "wastedMs": 753.27
          },
          {
            "url": "https://eu.dispatch.com/",
            "wastedMs": 0
          }
        ],
        "overallSavingsMs": 1581.016
      },
      "guidanceLevel": 2
    },
    "image-aspect-ratio": {
      "id": "image-aspect-ratio",
      "title": "Displays images with correct aspect ratio",
      "description": "Image display dimensions should match natural aspect ratio. [Learn more about image aspect ratio](https://developer.chrome.com/docs/lighthouse/best-practices/image-aspect-ratio/).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "label": ""
          },
          {
            "key": "url",
            "valueType": "url",
            "label": "URL"
          },
          {
            "key": "displayedAspectRatio",
            "valueType": "text",
            "label": "Aspect Ratio (Displayed)"
          },
          {
            "key": "actualAspectRatio",
            "valueType": "text",
            "label": "Aspect Ratio (Actual)"
          }
        ],
        "items": []
      }
    },
    "image-size-responsive": {
      "id": "image-size-responsive",
      "title": "Serves images with low resolution",
      "description": "Image natural dimensions should be proportional to the display size and the pixel ratio to maximize image clarity. [Learn how to provide responsive images](https://web.dev/articles/serve-responsive-images).",
      "score": 0,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "label": ""
          },
          {
            "key": "url",
            "valueType": "url",
            "label": "URL"
          },
          {
            "key": "displayedSize",
            "valueType": "text",
            "label": "Displayed size"
          },
          {
            "key": "actualSize",
            "valueType": "text",
            "label": "Actual size"
          },
          {
            "key": "expectedSize",
            "valueType": "text",
            "label": "Expected size"
          }
        ],
        "items": [
          {
            "url": "https://www.gannett-cdn.com/authoring/2019/12/17/NCOD/ghows-OH-ca4157f4-725c-4088-8574-12d94085ff21-92b15e53.jpeg?crop=1999,1130,x0,y125&quality=50&width=270",
            "node": {
              "type": "node",
              "lhId": "1-21-IMG",
              "path": "1,HTML,1,BODY,3,HEADER,0,DIV,0,DIV,0,DIV,0,DIV,1,DIV,1,DIV,0,A,0,PICTURE,5,IMG",
              "selector": "div.hero-slot-three > a.section-helper-flex > picture.section-helper-column > img",
              "boundingRect": {
                "top": 624,
                "bottom": 819,
                "left": 34,
                "right": 378,
                "width": 343,
                "height": 195
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/2019/12/17/NCOD/ghows-OH-ca4157f4-72…\" alt=\"Woman facing more charges in fatal I-270 crash after running from scene\">",
              "nodeLabel": "Woman facing more charges in fatal I-270 crash after running from scene"
            },
            "displayedSize": "343 x 195",
            "actualSize": "270 x 153",
            "actualPixels": 41310,
            "expectedSize": "515 x 293",
            "expectedPixels": 150895
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/01/12/USAT/88148416007-usatsi-27919432.jpg?crop=3999,2250,x0,y400&quality=50&width=270",
            "node": {
              "type": "node",
              "lhId": "1-20-IMG",
              "path": "1,HTML,1,BODY,3,HEADER,0,DIV,0,DIV,0,DIV,0,DIV,1,DIV,0,DIV,0,A,0,PICTURE,5,IMG",
              "selector": "div.hero-slot-two > a.section-helper-flex > picture.section-helper-column > img",
              "boundingRect": {
                "top": 382,
                "bottom": 575,
                "left": 34,
                "right": 378,
                "width": 343,
                "height": 193
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/01/12/USAT/881…\" alt=\"New bookstore planned for Worthington this summer\">",
              "nodeLabel": "New bookstore planned for Worthington this summer"
            },
            "displayedSize": "343 x 193",
            "actualSize": "270 x 152",
            "actualPixels": 41040,
            "expectedSize": "515 x 290",
            "expectedPixels": 149350
          }
        ]
      }
    },
    "deprecations": {
      "id": "deprecations",
      "title": "Avoids deprecated APIs",
      "description": "Deprecated APIs will eventually be removed from the browser. [Learn more about deprecated APIs](https://developer.chrome.com/docs/lighthouse/best-practices/deprecations/).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "value",
            "valueType": "text",
            "label": "Deprecation / Warning"
          },
          {
            "key": "source",
            "valueType": "source-location",
            "label": "Source"
          }
        ],
        "items": []
      }
    },
    "third-party-cookies": {
      "id": "third-party-cookies",
      "title": "Avoids third-party cookies",
      "description": "Third-party cookies may be blocked in some contexts. [Learn more about preparing for third-party cookie restrictions](https://privacysandbox.google.com/cookies/prepare/overview).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "name",
            "valueType": "text",
            "label": "Name"
          },
          {
            "key": "url",
            "valueType": "url",
            "label": "URL"
          }
        ],
        "items": []
      }
    },
    "mainthread-work-breakdown": {
      "id": "mainthread-work-breakdown",
      "title": "Minimizes main-thread work",
      "description": "Consider reducing the time spent parsing, compiling and executing JS. You may find delivering smaller JS payloads helps with this. [Learn how to minimize main-thread work](https://developer.chrome.com/docs/lighthouse/performance/mainthread-work-breakdown/)",
      "score": 1,
      "scoreDisplayMode": "metricSavings",
      "numericValue": 1851.0400000000006,
      "numericUnit": "millisecond",
      "displayValue": "1.9 s",
      "metricSavings": {
        "TBT": 50
      },
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "groupLabel",
            "valueType": "text",
            "label": "Category"
          },
          {
            "key": "duration",
            "valueType": "ms",
            "granularity": 1,
            "label": "Time Spent"
          }
        ],
        "items": [
          {
            "group": "scriptEvaluation",
            "groupLabel": "Script Evaluation",
            "duration": 742.8320000000053
          },
          {
            "group": "other",
            "groupLabel": "Other",
            "duration": 650.2959999999952
          },
          {
            "group": "styleLayout",
            "groupLabel": "Style & Layout",
            "duration": 230.36000000000007
          },
          {
            "group": "scriptParseCompile",
            "groupLabel": "Script Parsing & Compilation",
            "duration": 128.90400000000008
          },
          {
            "group": "parseHTML",
            "groupLabel": "Parse HTML & CSS",
            "duration": 70.62400000000001
          },
          {
            "group": "paintCompositeRender",
            "groupLabel": "Rendering",
            "duration": 28.023999999999994
          }
        ],
        "sortedBy": [
          "duration"
        ]
      },
      "guidanceLevel": 1
    },
    "bootup-time": {
      "id": "bootup-time",
      "title": "JavaScript execution time",
      "description": "Consider reducing the time spent parsing, compiling, and executing JS. You may find delivering smaller JS payloads helps with this. [Learn how to reduce Javascript execution time](https://developer.chrome.com/docs/lighthouse/performance/bootup-time/).",
      "score": 1,
      "scoreDisplayMode": "metricSavings",
      "numericValue": 616.0200000000007,
      "numericUnit": "millisecond",
      "displayValue": "0.6 s",
      "metricSavings": {
        "TBT": 50
      },
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "url",
            "valueType": "url",
            "label": "URL"
          },
          {
            "key": "total",
            "granularity": 1,
            "valueType": "ms",
            "label": "Total CPU Time"
          },
          {
            "key": "scripting",
            "granularity": 1,
            "valueType": "ms",
            "label": "Script Evaluation"
          },
          {
            "key": "scriptParseCompile",
            "granularity": 1,
            "valueType": "ms",
            "label": "Script Parse"
          }
        ],
        "items": [
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/webcomponentsjs/webcomponents-hi.js",
            "total": 451.7520000000006,
            "scripting": 246.69200000000052,
            "scriptParseCompile": 1.6680000000000001
          },
          {
            "url": "Unattributable",
            "total": 408,
            "scripting": 25.007999999999985,
            "scriptParseCompile": 0
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/bundles/section.js",
            "total": 317.72000000000014,
            "scripting": 260.8640000000002,
            "scriptParseCompile": 1.016
          },
          {
            "url": "https://eu.dispatch.com/",
            "total": 311.776,
            "scripting": 72.96400000000001,
            "scriptParseCompile": 7.808
          }
        ],
        "summary": {
          "wastedMs": 616.0200000000007
        },
        "sortedBy": [
          "total"
        ]
      },
      "guidanceLevel": 1
    },
    "diagnostics": {
      "id": "diagnostics",
      "title": "Diagnostics",
      "description": "Collection of useful page vitals.",
      "score": 1,
      "scoreDisplayMode": "informative",
      "details": {
        "type": "debugdata",
        "items": [
          {
            "numRequests": 151,
            "numScripts": 55,
            "numStylesheets": 0,
            "numFonts": 4,
            "numTasks": 1568,
            "numTasksOver10ms": 5,
            "numTasksOver25ms": 2,
            "numTasksOver50ms": 1,
            "numTasksOver100ms": 0,
            "numTasksOver500ms": 0,
            "rtt": 0.3780000000000001,
            "throughput": 64518873.63639738,
            "maxRtt": 25.189999999999998,
            "maxServerLatency": 186.352,
            "totalByteWeight": 3325705,
            "totalTaskTime": 462.7599999999984,
            "mainDocumentTransferSize": 34464
          }
        ]
      }
    },
    "network-requests": {
      "id": "network-requests",
      "title": "Network Requests",
      "description": "Lists the network requests that were made during page load.",
      "score": 1,
      "scoreDisplayMode": "informative",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "url",
            "valueType": "url",
            "label": "URL"
          },
          {
            "key": "protocol",
            "valueType": "text",
            "label": "Protocol"
          },
          {
            "key": "networkRequestTime",
            "valueType": "ms",
            "granularity": 1,
            "label": "Network Request Time"
          },
          {
            "key": "networkEndTime",
            "valueType": "ms",
            "granularity": 1,
            "label": "Network End Time"
          },
          {
            "key": "transferSize",
            "valueType": "bytes",
            "displayUnit": "kb",
            "granularity": 1,
            "label": "Transfer Size"
          },
          {
            "key": "resourceSize",
            "valueType": "bytes",
            "displayUnit": "kb",
            "granularity": 1,
            "label": "Resource Size"
          },
          {
            "key": "statusCode",
            "valueType": "text",
            "label": "Status Code"
          },
          {
            "key": "mimeType",
            "valueType": "text",
            "label": "MIME Type"
          },
          {
            "key": "resourceType",
            "valueType": "text",
            "label": "Resource Type"
          }
        ],
        "items": [
          {
            "url": "https://dispatch.com/",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 0,
            "networkRequestTime": 0.8660011291503906,
            "networkEndTime": 88.54000091552734,
            "finished": true,
            "transferSize": 370,
            "resourceSize": 0,
            "statusCode": 301,
            "mimeType": "",
            "priority": "VeryHigh",
            "experimentalFromMainFrame": true,
            "entity": "dispatch.com"
          },
          {
            "url": "https://www.dispatch.com/",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 88.54000091552734,
            "networkRequestTime": 89.03000068664551,
            "networkEndTime": 103.59000015258789,
            "finished": true,
            "transferSize": 690,
            "resourceSize": 0,
            "statusCode": 302,
            "mimeType": "",
            "priority": "VeryHigh",
            "experimentalFromMainFrame": true,
            "entity": "dispatch.com"
          },
          {
            "url": "https://eu.dispatch.com/",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 103.59000015258789,
            "networkRequestTime": 104.00200080871582,
            "networkEndTime": 141.30300045013428,
            "finished": true,
            "transferSize": 34464,
            "resourceSize": 158915,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "Document",
            "priority": "VeryHigh",
            "experimentalFromMainFrame": true,
            "entity": "dispatch.com"
          },
          {
            "url": "https://polyfill-fastly.io/v2/polyfill.min.js?features=default,fetch,Array.prototype.find,IntersectionObserver,IntersectionObserverEntry,Intl,Intl.~locale.en-US",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 152.2100009918213,
            "networkRequestTime": 153.23600101470947,
            "networkEndTime": 474.54700088500977,
            "finished": true,
            "transferSize": 354,
            "resourceSize": 103,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "polyfill-fastly.io"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/scripts/gallium.js",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 152.64200019836426,
            "networkRequestTime": 155.74000072479248,
            "networkEndTime": 398.1470003128052,
            "finished": true,
            "transferSize": 3754,
            "resourceSize": 11823,
            "statusCode": 200,
            "mimeType": "application/javascript",
            "resourceType": "Script",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/webcomponentsjs/custom-elements-es5-adapter.js",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 152.75699996948242,
            "networkRequestTime": 156.1840009689331,
            "networkEndTime": 186.76700115203857,
            "finished": true,
            "transferSize": 1107,
            "resourceSize": 938,
            "statusCode": 200,
            "mimeType": "application/javascript",
            "resourceType": "Script",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/bundles/section.js",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 152.8740005493164,
            "networkRequestTime": 156.4409999847412,
            "networkEndTime": 288.7200002670288,
            "finished": true,
            "transferSize": 84378,
            "resourceSize": 335587,
            "statusCode": 200,
            "mimeType": "application/javascript",
            "resourceType": "Script",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2025/10/03/NCOD/86497290007-common-pleas-court.jpg?crop=7007,3943,x0,y364",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 152.97900104522705,
            "networkRequestTime": 156.64400100708008,
            "networkEndTime": 365.19900035858154,
            "finished": true,
            "transferSize": 2234391,
            "resourceSize": 2233026,
            "statusCode": 200,
            "mimeType": "image/webp",
            "resourceType": "Image",
            "priority": "Medium",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/01/12/USAT/88148416007-usatsi-27919432.jpg?crop=3999,2250,x0,y400&quality=50&width=270",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 153.04600048065186,
            "networkRequestTime": 157.05599975585938,
            "networkEndTime": 288.5350008010864,
            "finished": true,
            "transferSize": 11654,
            "resourceSize": 11364,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Medium",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/2019/12/17/NCOD/ghows-OH-ca4157f4-725c-4088-8574-12d94085ff21-92b15e53.jpeg?crop=1999,1130,x0,y125&quality=50&width=270",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 153.09800052642822,
            "networkRequestTime": 291.04300022125244,
            "networkEndTime": 396.51800060272217,
            "finished": true,
            "transferSize": 4340,
            "resourceSize": 4192,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Medium",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/03/09/USAT/89063884007-1321427.jpg?crop=1029,1028,x485,y0&quality=50&width=270",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 153.153000831604,
            "networkRequestTime": 367.9290008544922,
            "networkEndTime": 474.07999992370605,
            "finished": true,
            "transferSize": 9218,
            "resourceSize": 8802,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Medium",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/01/USAT/89418718007-20190909-t-095808-z-1460425915-rc-1-dc-47491-a-0-rtrmadp-3-foodmeatalternative.JPG?crop=2334,2333,x875,y0&quality=50&width=270",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 153.35400009155273,
            "networkRequestTime": 398.4310007095337,
            "networkEndTime": 504.1240005493164,
            "finished": true,
            "transferSize": 6263,
            "resourceSize": 5918,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Medium",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/22/NCOD/89732829007-amanda-wampler.jpg?crop=3959,3959,x0,y0&quality=50&width=270",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 153.42000007629395,
            "networkRequestTime": 476.0629997253418,
            "networkEndTime": 573.3760013580322,
            "finished": true,
            "transferSize": 7307,
            "resourceSize": 6907,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/01/09/NCOD/88099461007-news-bp-submetering-main-bar-01.jpg?crop=4673,4671,x1167,y0&quality=50&width=270",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 153.4670009613037,
            "networkRequestTime": 478.9670009613037,
            "networkEndTime": 583.9750003814697,
            "finished": true,
            "transferSize": 11357,
            "resourceSize": 11137,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/21/NCOD/89722651007-nwsl-columbus-announcement-ac-031.JPG?crop=3001,2999,x749,y0&quality=50&width=270",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 153.5270004272461,
            "networkRequestTime": 479.371000289917,
            "networkEndTime": 586.3780012130737,
            "finished": true,
            "transferSize": 11128,
            "resourceSize": 10713,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/21/NCOD/89709919007-entertainment-worthington-inn-preview-01.jpg?crop=3331,3330,x734,y0&quality=50&width=270",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 153.58200073242188,
            "networkRequestTime": 479.72200107574463,
            "networkEndTime": 589.492000579834,
            "finished": true,
            "transferSize": 8238,
            "resourceSize": 7993,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/20/USAT/89701336007-20260420-t-105621-z-81997381-rc-2-xskaig-2-sx-rtrmadp-3-irancrisislebanonisrael.JPG?crop=4001,3999,x999,y0&quality=50&width=270",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 153.6220006942749,
            "networkRequestTime": 480.0350008010864,
            "networkEndTime": 484.8760004043579,
            "finished": true,
            "transferSize": 11746,
            "resourceSize": 11450,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/17/NCOD/89665462007-earth-day-7566-amanda-carberry-columbus-zoo-and-aquarium.jpg?crop=1080,1079,x324,y0&quality=50&width=270",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 153.72700119018555,
            "networkRequestTime": 480.246000289917,
            "networkEndTime": 585.2630004882812,
            "finished": true,
            "transferSize": 17037,
            "resourceSize": 16696,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/21/NCOD/89722614007-nwsl-columbus-announcement-ac-004.JPG?crop=3000,2999,x675,y0&quality=50&width=270",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 153.82600021362305,
            "networkRequestTime": 480.44700050354004,
            "networkEndTime": 591.9890003204346,
            "finished": true,
            "transferSize": 8830,
            "resourceSize": 8516,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/21/NCOD/89719919007-10205.jpg?crop=3000,2999,x400,y0&quality=50&width=270",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 153.89100074768066,
            "networkRequestTime": 480.70400047302246,
            "networkEndTime": 587.9220008850098,
            "finished": true,
            "transferSize": 12290,
            "resourceSize": 12078,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/presto/2023/05/12/NCOD/109c95af-b9cd-4ac2-8660-0cb3a7c86351-impound_lot_ac_05.JPG?crop=3000,3000,x675,y0&quality=50&width=270",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 153.9390001296997,
            "networkRequestTime": 480.9680004119873,
            "networkEndTime": 590.6950006484985,
            "finished": true,
            "transferSize": 10525,
            "resourceSize": 10234,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://cdn.cookielaw.org/scripttemplates/otSDKStub.js",
            "sessionTargetType": "page",
            "protocol": "",
            "rendererStartTime": 158.69500064849854,
            "networkRequestTime": 158.69500064849854,
            "networkEndTime": 219.17200088500977,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 0,
            "statusCode": -1,
            "mimeType": "",
            "resourceType": "Script",
            "priority": "High",
            "isLinkPreload": true,
            "experimentalFromMainFrame": true,
            "entity": "Optanon"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/webcomponentsjs/webcomponents-loader.js",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 161.18099975585938,
            "networkRequestTime": 481.17100048065186,
            "networkEndTime": 578.0950002670288,
            "finished": true,
            "transferSize": 1881,
            "resourceSize": 3664,
            "statusCode": 200,
            "mimeType": "application/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://www.gannett-cdn.com/gannett-web/properties/dispatch/logos-and-branding/logo-default.svg",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 481.01100063323975,
            "networkRequestTime": 481.58000087738037,
            "networkEndTime": 487.07300090789795,
            "finished": true,
            "transferSize": 4833,
            "resourceSize": 12425,
            "statusCode": 200,
            "mimeType": "image/svg+xml",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/scripts/partner.js",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 484.2850008010864,
            "networkRequestTime": 487.41800117492676,
            "networkEndTime": 665.6020002365112,
            "finished": true,
            "transferSize": 17815,
            "resourceSize": 78891,
            "statusCode": 200,
            "mimeType": "application/javascript",
            "resourceType": "Script",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/scripts/utils.js",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 484.4300003051758,
            "networkRequestTime": 487.8120002746582,
            "networkEndTime": 695.1400003433228,
            "finished": true,
            "transferSize": 5495,
            "resourceSize": 18995,
            "statusCode": 200,
            "mimeType": "application/javascript",
            "resourceType": "Script",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/gallium/themes/assets/universal/fonts/UnifySans_W_Bd.woff2",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 508.9890012741089,
            "networkRequestTime": 528.9440011978149,
            "networkEndTime": 715.9890003204346,
            "finished": true,
            "transferSize": 18590,
            "resourceSize": 17984,
            "statusCode": 200,
            "mimeType": "binary/octet-stream",
            "resourceType": "Font",
            "priority": "VeryHigh",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/gallium/themes/assets/universal/fonts/UnifySerif_W_Rg.woff2",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 509.10600090026855,
            "networkRequestTime": 529.2720003128052,
            "networkEndTime": 740.2370004653931,
            "finished": true,
            "transferSize": 20872,
            "resourceSize": 20664,
            "statusCode": 200,
            "mimeType": "binary/octet-stream",
            "resourceType": "Font",
            "priority": "VeryHigh",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/gallium/themes/assets/universal/fonts/UnifySans_W_SBd.woff2",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 509.2360010147095,
            "networkRequestTime": 529.5539999008179,
            "networkEndTime": 723.8200006484985,
            "finished": true,
            "transferSize": 18045,
            "resourceSize": 17876,
            "statusCode": 200,
            "mimeType": "binary/octet-stream",
            "resourceType": "Font",
            "priority": "VeryHigh",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/gallium/themes/assets/universal/fonts/UnifySans_W_Rg.woff2",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 509.4060001373291,
            "networkRequestTime": 529.8140001296997,
            "networkEndTime": 745.996000289917,
            "finished": true,
            "transferSize": 16788,
            "resourceSize": 16620,
            "statusCode": 200,
            "mimeType": "binary/octet-stream",
            "resourceType": "Font",
            "priority": "VeryHigh",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/webcomponentsjs/webcomponents-hi.js",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 580.4360008239746,
            "networkRequestTime": 580.9050006866455,
            "networkEndTime": 772.0830001831055,
            "finished": true,
            "transferSize": 4225,
            "resourceSize": 10912,
            "statusCode": 200,
            "mimeType": "application/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://api.gannett-cdn.com/thorium/popular/NCOD/10?apiKey=TGgXAxAcR3ktiGl6cRsHSGsLS6ySi6yz&searchtype=socialReferrals",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 705.4630002975464,
            "networkRequestTime": 705.9660005569458,
            "networkEndTime": 854.5860004425049,
            "finished": true,
            "transferSize": 1139,
            "resourceSize": 3359,
            "statusCode": 200,
            "mimeType": "application/json",
            "resourceType": "Fetch",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://api.gannett-cdn.com/argon/navreimagined/ncod/top_nav_primary/?apiKey=f6YYPA1hPnB9Y9chky5GOmrZKmaguLVh",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 706.064001083374,
            "networkRequestTime": 706.6520004272461,
            "networkEndTime": 754.9870004653931,
            "finished": true,
            "transferSize": 1837,
            "resourceSize": 5810,
            "statusCode": 200,
            "mimeType": "application/json",
            "resourceType": "Fetch",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://api.gannett-cdn.com/thorium/popular/NCOD/10?assettype=video&searchtype=pageViews&ssts=home&apiKey=TGgXAxAcR3ktiGl6cRsHSGsLS6ySi6yz",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 712.1650009155273,
            "networkRequestTime": 712.6620006561279,
            "networkEndTime": 857.9000005722046,
            "finished": true,
            "transferSize": 3257,
            "resourceSize": 16290,
            "statusCode": 200,
            "mimeType": "application/json",
            "resourceType": "Fetch",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://api.gannett-cdn.com/thorium/popular/NCOD/10?assettype=gallery&searchtype=pageViews&ssts=home&apiKey=TGgXAxAcR3ktiGl6cRsHSGsLS6ySi6yz",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 712.5980005264282,
            "networkRequestTime": 712.9870004653931,
            "networkEndTime": 847.5820007324219,
            "finished": true,
            "transferSize": 3303,
            "resourceSize": 17292,
            "statusCode": 200,
            "mimeType": "application/json",
            "resourceType": "Fetch",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://user.dispatch.com/NCOD-GUP/user/",
            "sessionTargetType": "page",
            "protocol": "",
            "rendererStartTime": 726.1280012130737,
            "networkRequestTime": 726.1280012130737,
            "networkEndTime": 770.3830003738403,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 0,
            "statusCode": -1,
            "mimeType": "",
            "resourceType": "Fetch",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "dispatch.com"
          },
          {
            "url": "https://api.gannett-cdn.com/thorium/breaking-news/?apiKey=TGgXAxAcR3ktiGl6cRsHSGsLS6ySi6yz&site-code=NCOD",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 727.2670011520386,
            "networkRequestTime": 727.7010011672974,
            "networkEndTime": 853.2170000076294,
            "finished": true,
            "transferSize": 211,
            "resourceSize": 56,
            "statusCode": 200,
            "mimeType": "application/json",
            "resourceType": "Fetch",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://atoms.dispatch.com/atoms-library/prod/dist/gannett-atoms-library.js",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 771.4320001602173,
            "networkRequestTime": 772.298999786377,
            "networkEndTime": 914.7800006866455,
            "finished": true,
            "transferSize": 16464,
            "resourceSize": 58540,
            "statusCode": 200,
            "mimeType": "application/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "dispatch.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/gallium/themes/universal.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 774.6410007476807,
            "networkRequestTime": 775.1720008850098,
            "networkEndTime": 961.9420003890991,
            "finished": true,
            "transferSize": 6000,
            "resourceSize": 25631,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/polymer.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 774.8900003433228,
            "networkRequestTime": 775.4479999542236,
            "networkEndTime": 982.109001159668,
            "finished": true,
            "transferSize": 779,
            "resourceSize": 1403,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/22/NCOD/89734860007-earth-day-019-earth-day-1-wildart-eric-earthday.JPG?crop=1807,1018,x0,y108&width=420&quality=50",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 859.170000076294,
            "networkRequestTime": 859.5800008773804,
            "networkEndTime": 967.3000011444092,
            "finished": true,
            "transferSize": 15590,
            "resourceSize": 15158,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/21/NCOD/89709842007-entertainment-worthington-inn-preview-01.jpg?crop=4799,2700,x0,y315&width=384&quality=50&crop=16%3A9",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 860.0590009689331,
            "networkRequestTime": 860.4670009613037,
            "networkEndTime": 968.8780002593994,
            "finished": true,
            "transferSize": 9570,
            "resourceSize": 9325,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/21/NCOD/89719206007-60-print-dji-20251103111509-0328-d.jpg?crop=2999,1688,x0,y112&width=384&quality=50&crop=16%3A9",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 860.2710008621216,
            "networkRequestTime": 860.9900007247925,
            "networkEndTime": 972.2340002059937,
            "finished": true,
            "transferSize": 14201,
            "resourceSize": 13969,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/20/NCOD/89708113007-2026-new-albany-rose-run-park-expansion-6.jpg?crop=1192,670,x44,y0&width=384&quality=50&crop=16%3A9",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 860.4900007247925,
            "networkRequestTime": 861.2700004577637,
            "networkEndTime": 959.2700004577637,
            "finished": true,
            "transferSize": 14221,
            "resourceSize": 13900,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/22/NCOD/89726543007-20260211-t-163223-z-1613164333-rc-2-rjja-76-udm-rtrmadp-3-usatrumpstatue.JPG?crop=5471,3078,x0,y364&width=384&quality=50&crop=16%3A9",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 860.6990013122559,
            "networkRequestTime": 861.4990005493164,
            "networkEndTime": 970.9660005569458,
            "finished": true,
            "transferSize": 8433,
            "resourceSize": 8091,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/22/NCOD/89725089007-turning-point-skm-04212026-23.JPG?crop=4009,2256,x0,y208&width=384&quality=50&crop=16%3A9",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 860.8629999160767,
            "networkRequestTime": 861.7160005569458,
            "networkEndTime": 969.9140005111694,
            "finished": true,
            "transferSize": 10427,
            "resourceSize": 10090,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/21/NCOD/89722651007-nwsl-columbus-announcement-ac-031.JPG?crop=4499,2531,x0,y234&width=384&quality=50&crop=16%3A9",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 861.0170011520386,
            "networkRequestTime": 861.9090003967285,
            "networkEndTime": 966.0380010604858,
            "finished": true,
            "transferSize": 12144,
            "resourceSize": 11914,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/21/NCOD/89717322007-usatsi-28654407.jpg?crop=4522,2544,x0,y0&width=384&quality=50&crop=16%3A9",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 861.2170009613037,
            "networkRequestTime": 862.0939998626709,
            "networkEndTime": 976.8940010070801,
            "finished": true,
            "transferSize": 9516,
            "resourceSize": 9194,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/21/NCOD/89709939007-softball-3.JPG?crop=2922,1644,x0,y78&width=384&quality=50&crop=16%3A9",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 861.4150009155273,
            "networkRequestTime": 862.2830009460449,
            "networkEndTime": 973.8110008239746,
            "finished": true,
            "transferSize": 10258,
            "resourceSize": 9861,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/20/NCOD/89701887007-15-cmha-grove-city-clh-31.JPG?crop=2999,1687,x0,y156&width=384&quality=50&crop=16%3A9",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 861.6300001144409,
            "networkRequestTime": 862.4780006408691,
            "networkEndTime": 975.4450006484985,
            "finished": true,
            "transferSize": 14402,
            "resourceSize": 14174,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/22/USAT/89735475007-trnd-gold-trump-statue-battle.jpg?crop=1919,1079,x0,y0&width=420&quality=50",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 871.4820003509521,
            "networkRequestTime": 872.1100006103516,
            "networkEndTime": 878.2790002822876,
            "finished": true,
            "transferSize": 9515,
            "resourceSize": 9175,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/videos/wochit/thumbnails/89710141007.jpg?width=384&quality=50&crop=16%3A9",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 872.1070003509521,
            "networkRequestTime": 872.4830007553101,
            "networkEndTime": 986.3320007324219,
            "finished": true,
            "transferSize": 7670,
            "resourceSize": 7469,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/21/NCOD/89719198007-50-print-dji-20251103110740-0302-dhdr.jpg?crop=2999,1687,x0,y281&width=384&quality=50&crop=16%3A9",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 872.3280000686646,
            "networkRequestTime": 872.6730003356934,
            "networkEndTime": 979.7250003814697,
            "finished": true,
            "transferSize": 16006,
            "resourceSize": 15760,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/21/NCOD/89710238007-softball-22.JPG?crop=5751,3238,x0,y302&width=384&quality=50&crop=16%3A9",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 872.5640001296997,
            "networkRequestTime": 872.899001121521,
            "networkEndTime": 991.4140005111694,
            "finished": true,
            "transferSize": 9775,
            "resourceSize": 9380,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/21/NCOD/89718012007-dublin-scioto-softball-avery-reynolds.png?crop=554,312,x0,y18&width=384&quality=50&crop=16%3A9",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 872.7870006561279,
            "networkRequestTime": 873.0930004119873,
            "networkEndTime": 993.202000617981,
            "finished": true,
            "transferSize": 137179,
            "resourceSize": 136861,
            "statusCode": 200,
            "mimeType": "image/png",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/21/NCOD/89717712007-dublin-coffman-baseball-evan-blasinski.png?crop=599,337,x0,y16&width=384&quality=50&crop=16%3A9",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 872.9980001449585,
            "networkRequestTime": 873.4930009841919,
            "networkEndTime": 991.1670007705688,
            "finished": true,
            "transferSize": 171938,
            "resourceSize": 171422,
            "statusCode": 200,
            "mimeType": "image/png",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/21/NCOD/89725638007-screen-shot-1776820992978.jpg?crop=1919,1079,x0,y0&width=384&quality=50&crop=16%3A9",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 873.1990003585815,
            "networkRequestTime": 873.725001335144,
            "networkEndTime": 992.8470001220703,
            "finished": true,
            "transferSize": 9973,
            "resourceSize": 9747,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/21/NCOD/89721586007-nwsl-columbus-ac-02.JPG?crop=2499,1406,x0,y177&width=384&quality=50&crop=16%3A9",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 873.420000076294,
            "networkRequestTime": 874.1180000305176,
            "networkEndTime": 985.2030010223389,
            "finished": true,
            "transferSize": 8358,
            "resourceSize": 8031,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/20/NCOC/89704391007-21-inspiring-women-2026.jpg?crop=2967,1669,x0,y65&width=384&quality=50&crop=16%3A9",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 873.6450004577637,
            "networkRequestTime": 874.710000038147,
            "networkEndTime": 984.0230007171631,
            "finished": true,
            "transferSize": 18457,
            "resourceSize": 18219,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/21/NCOD/89715032007-downtown-fire-kwr-01.JPG?crop=2499,1406,x0,y250&width=384&quality=50&crop=16%3A9",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 873.867000579834,
            "networkRequestTime": 875.0210008621216,
            "networkEndTime": 979.4450006484985,
            "finished": true,
            "transferSize": 16058,
            "resourceSize": 15734,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://atoms.dispatch.com/atoms-configs/prod/dist/uw/NCOD/(null)/journey.json",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 924.2410011291504,
            "networkRequestTime": 924.867000579834,
            "networkEndTime": 930.4860000610352,
            "finished": true,
            "transferSize": 423,
            "resourceSize": 0,
            "statusCode": 302,
            "mimeType": "application/xml",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "dispatch.com"
          },
          {
            "url": "https://atoms.dispatch.com/atoms-configs/prod/dist/uw/ncod/control/journey.json?originalSegment=(null)",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 930.4860000610352,
            "networkRequestTime": 930.8290004730225,
            "networkEndTime": 1035.5500001907349,
            "finished": true,
            "transferSize": 396,
            "resourceSize": 130,
            "statusCode": 200,
            "mimeType": "application/json",
            "resourceType": "Fetch",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "dispatch.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/elements/custom-style.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 964.0180006027222,
            "networkRequestTime": 964.5180006027222,
            "networkEndTime": 1235.204999923706,
            "finished": true,
            "transferSize": 2752,
            "resourceSize": 5518,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/legacy/legacy-element-mixin.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 984.0030012130737,
            "networkRequestTime": 987.2830009460449,
            "networkEndTime": 1163.8260011672974,
            "finished": true,
            "transferSize": 9770,
            "resourceSize": 37955,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/legacy/polymer-fn.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 984.2630004882812,
            "networkRequestTime": 987.7360010147095,
            "networkEndTime": 1181.1450004577637,
            "finished": true,
            "transferSize": 968,
            "resourceSize": 1536,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/legacy/templatizer-behavior.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 984.4409999847412,
            "networkRequestTime": 987.9280004501343,
            "networkEndTime": 1201.3550004959106,
            "finished": true,
            "transferSize": 2310,
            "resourceSize": 6013,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/elements/dom-bind.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 984.6579999923706,
            "networkRequestTime": 988.1000003814697,
            "networkEndTime": 1158.626000404358,
            "finished": true,
            "transferSize": 2288,
            "resourceSize": 5635,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/elements/dom-repeat.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 984.8680000305176,
            "networkRequestTime": 988.282000541687,
            "networkEndTime": 1200.1410007476807,
            "finished": true,
            "transferSize": 8496,
            "resourceSize": 26333,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/elements/dom-if.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 985.0630006790161,
            "networkRequestTime": 988.6090002059937,
            "networkEndTime": 1188.5300006866455,
            "finished": true,
            "transferSize": 4562,
            "resourceSize": 10725,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/elements/array-selector.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 985.3010005950928,
            "networkRequestTime": 988.7660007476807,
            "networkEndTime": 1171.4029998779297,
            "finished": true,
            "transferSize": 4160,
            "resourceSize": 14055,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/legacy/mutable-data-behavior.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 985.653000831604,
            "networkRequestTime": 988.9350004196167,
            "networkEndTime": 1161.992000579834,
            "finished": true,
            "transferSize": 2509,
            "resourceSize": 7229,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/utils/html-tag.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 985.903000831604,
            "networkRequestTime": 989.1050004959106,
            "networkEndTime": 1160.2399997711182,
            "finished": true,
            "transferSize": 2038,
            "resourceSize": 5533,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://www.gannett-cdn.com/sites/dispatch/images/favicon.png",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1007.9790000915527,
            "networkRequestTime": 1008.5060005187988,
            "networkEndTime": 1011.4610013961792,
            "finished": true,
            "transferSize": 481,
            "resourceSize": 254,
            "statusCode": 200,
            "mimeType": "image/webp",
            "resourceType": "Other",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/utils/boot.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1160.0820007324219,
            "networkRequestTime": 1164.2010011672974,
            "networkEndTime": 1350.3960008621216,
            "finished": true,
            "transferSize": 1220,
            "resourceSize": 2576,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/mixins/property-effects.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1160.3210000991821,
            "networkRequestTime": 1164.4460000991821,
            "networkEndTime": 1347.770001411438,
            "finished": true,
            "transferSize": 25908,
            "resourceSize": 101693,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/mixins/mutable-data.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1160.5550003051758,
            "networkRequestTime": 1164.6940002441406,
            "networkEndTime": 1342.7320003509521,
            "finished": true,
            "transferSize": 3128,
            "resourceSize": 10630,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/mixins/gesture-event-listeners.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1160.823000907898,
            "networkRequestTime": 1164.9000005722046,
            "networkEndTime": 1364.7190008163452,
            "finished": true,
            "transferSize": 2218,
            "resourceSize": 4946,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/shadycss/apply-shim.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1167.6940002441406,
            "networkRequestTime": 1168.4000005722046,
            "networkEndTime": 1369.6360006332397,
            "finished": true,
            "transferSize": 536,
            "resourceSize": 555,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/mixins/element-mixin.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1167.9720001220703,
            "networkRequestTime": 1168.746000289917,
            "networkEndTime": 1348.1650009155273,
            "finished": true,
            "transferSize": 9924,
            "resourceSize": 31453,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/mixins/dir-mixin.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1168.201000213623,
            "networkRequestTime": 1169.0180006027222,
            "networkEndTime": 1344.1459999084473,
            "finished": true,
            "transferSize": 2769,
            "resourceSize": 7216,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/utils/mixin.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1168.376000404358,
            "networkRequestTime": 1169.1920003890991,
            "networkEndTime": 1349.3140001296997,
            "finished": true,
            "transferSize": 1193,
            "resourceSize": 2293,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/utils/import-href.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1168.5880002975464,
            "networkRequestTime": 1169.367000579834,
            "networkEndTime": 1367.1910009384155,
            "finished": true,
            "transferSize": 1692,
            "resourceSize": 3414,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/utils/render-status.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1168.8000001907349,
            "networkRequestTime": 1169.5840005874634,
            "networkEndTime": 1365.9360008239746,
            "finished": true,
            "transferSize": 1439,
            "resourceSize": 3543,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/utils/unresolved.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1169.0670003890991,
            "networkRequestTime": 1169.8050003051758,
            "networkEndTime": 1378.0660009384155,
            "finished": true,
            "transferSize": 1032,
            "resourceSize": 867,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/legacy/polymer.dom.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1169.2640008926392,
            "networkRequestTime": 1170.0100002288818,
            "networkEndTime": 1363.3080005645752,
            "finished": true,
            "transferSize": 3864,
            "resourceSize": 11727,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/polymer-element.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1172.662000656128,
            "networkRequestTime": 1174.4440002441406,
            "networkEndTime": 1378.331000328064,
            "finished": true,
            "transferSize": 887,
            "resourceSize": 1479,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/utils/array-splice.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1172.9580011367798,
            "networkRequestTime": 1174.6520013809204,
            "networkEndTime": 1351.4640007019043,
            "finished": true,
            "transferSize": 3095,
            "resourceSize": 8392,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/legacy/class.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1182.3909997940063,
            "networkRequestTime": 1182.9660005569458,
            "networkEndTime": 1355.3240003585815,
            "finished": true,
            "transferSize": 6657,
            "resourceSize": 19488,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/utils/templatize.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1190.201000213623,
            "networkRequestTime": 1190.8929996490479,
            "networkEndTime": 1194.1050004959106,
            "finished": true,
            "transferSize": 7746,
            "resourceSize": 25151,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/utils/debounce.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1190.523000717163,
            "networkRequestTime": 1191.2100009918213,
            "networkEndTime": 1363.5920009613037,
            "finished": true,
            "transferSize": 1827,
            "resourceSize": 4464,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/utils/flush.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1190.7410011291504,
            "networkRequestTime": 1191.4860000610352,
            "networkEndTime": 1388.5340003967285,
            "finished": true,
            "transferSize": 910,
            "resourceSize": 1543,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/shadycss/custom-style-interface.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1236.6340007781982,
            "networkRequestTime": 1237.1630010604858,
            "networkEndTime": 1435.0900011062622,
            "finished": true,
            "transferSize": 892,
            "resourceSize": 567,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/utils/style-gather.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1236.8370008468628,
            "networkRequestTime": 1237.5020008087158,
            "networkEndTime": 1425.7650003433228,
            "finished": true,
            "transferSize": 2679,
            "resourceSize": 9685,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/mixins/property-accessors.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1352.737000465393,
            "networkRequestTime": 1353.3510007858276,
            "networkEndTime": 1541.6830005645752,
            "finished": true,
            "transferSize": 4505,
            "resourceSize": 13445,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/utils/settings.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1355.1360006332397,
            "networkRequestTime": 1355.9420003890991,
            "networkEndTime": 1550.3880014419556,
            "finished": true,
            "transferSize": 2069,
            "resourceSize": 4154,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/utils/resolve-url.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1355.412000656128,
            "networkRequestTime": 1356.1240005493164,
            "networkEndTime": 1857.6750001907349,
            "finished": true,
            "transferSize": 1483,
            "resourceSize": 3096,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/elements/dom-module.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1355.693000793457,
            "networkRequestTime": 1356.9309997558594,
            "networkEndTime": 1360.8790006637573,
            "finished": true,
            "transferSize": 2862,
            "resourceSize": 6682,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/mixins/properties-mixin.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1355.9440002441406,
            "networkRequestTime": 1357.1820011138916,
            "networkEndTime": 1549.0490007400513,
            "finished": true,
            "transferSize": 3299,
            "resourceSize": 10244,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/utils/path.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1359.4850006103516,
            "networkRequestTime": 1367.5880002975464,
            "networkEndTime": 1571.114001274109,
            "finished": true,
            "transferSize": 2235,
            "resourceSize": 7567,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/utils/case-map.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1359.9510011672974,
            "networkRequestTime": 1367.906000137329,
            "networkEndTime": 1555.8370008468628,
            "finished": true,
            "transferSize": 981,
            "resourceSize": 1820,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/mixins/template-stamp.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1360.5120010375977,
            "networkRequestTime": 1368.152000427246,
            "networkEndTime": 1539.238000869751,
            "finished": true,
            "transferSize": 6226,
            "resourceSize": 20406,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/utils/async.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1370.7660007476807,
            "networkRequestTime": 1371.3050003051758,
            "networkEndTime": 1565.5980005264282,
            "finished": true,
            "transferSize": 1854,
            "resourceSize": 6112,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/utils/flattened-nodes-observer.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1372.1250009536743,
            "networkRequestTime": 1378.8250007629395,
            "networkEndTime": 1561.532000541687,
            "finished": true,
            "transferSize": 3194,
            "resourceSize": 10247,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/utils/gestures.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1373.8830003738403,
            "networkRequestTime": 1379.158000946045,
            "networkEndTime": 1583.158000946045,
            "finished": true,
            "transferSize": 8455,
            "resourceSize": 27357,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/mixins/properties-changed.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1543.4050006866455,
            "networkRequestTime": 1544.0209999084473,
            "networkEndTime": 1718.1060009002686,
            "finished": true,
            "transferSize": 5782,
            "resourceSize": 21020,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/utils/telemetry.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1551.9890003204346,
            "networkRequestTime": 1552.862000465393,
            "networkEndTime": 1746.4530000686646,
            "finished": true,
            "transferSize": 934,
            "resourceSize": 1781,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/shadycss/custom-style-interface.min.js",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1861.152000427246,
            "networkRequestTime": 1861.7240009307861,
            "networkEndTime": 1864.7970008850098,
            "finished": true,
            "transferSize": 1772,
            "resourceSize": 3075,
            "statusCode": 200,
            "mimeType": "application/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3Bvar%20userPolymer%3Dwindow.Polyme…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 1866.784999847412,
            "networkRequestTime": 1866.784999847412,
            "networkEndTime": 1867.0070009231567,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 2183,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3Bvar%20CSS_URL_RX%3D%2F(url%5C()(%…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 1867.7410011291504,
            "networkRequestTime": 1867.7410011291504,
            "networkEndTime": 1867.9720010757446,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 2672,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,function%20_toConsumableArray(arr)%7Bif(Array.isArray(arr))%7Bfo…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 1868.8410005569458,
            "networkRequestTime": 1868.8410005569458,
            "networkEndTime": 1869.1090002059937,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 9256,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(ta…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 1870.32200050354,
            "networkRequestTime": 1870.32200050354,
            "networkEndTime": 1870.5470008850098,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 5009,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,'use%20strict'%3Bvar%20siteColor%3Dwindow.ga_data.site.colors.si…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 1871.684000968933,
            "networkRequestTime": 1871.684000968933,
            "networkEndTime": 1871.8300008773804,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 361,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/shadycss/apply-shim.min.js",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1872.4510011672974,
            "networkRequestTime": 1872.923999786377,
            "networkEndTime": 2087.029001235962,
            "finished": true,
            "transferSize": 4619,
            "resourceSize": 10617,
            "statusCode": 200,
            "mimeType": "application/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "data:text/javascript;charset=utf-8,%2F**%20%40suppress%20%7Bdeprecated%7D%20*%2F(function()%7B'use%…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 2090.216000556946,
            "networkRequestTime": 2090.216000556946,
            "networkEndTime": 2090.4710006713867,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 3665,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3B%2F%2F%20unique%20global%20id%20f…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 2091.651000022888,
            "networkRequestTime": 2091.651000022888,
            "networkEndTime": 2091.831000328064,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 1863,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(ta…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 2092.6020002365112,
            "networkRequestTime": 2092.6020002365112,
            "networkEndTime": 2092.768000602722,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 6199,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3B%2F**%0A%20%20%20*%20Module%20wit…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 2096.653000831604,
            "networkRequestTime": 2096.653000831604,
            "networkEndTime": 2097.0160007476807,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 7136,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3Bvar%20caseMap%3D%7B%7D%3Bvar%20DA…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 2098.4900007247925,
            "networkRequestTime": 2098.4900007247925,
            "networkEndTime": 2098.667000770569,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 1394,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3B%2F%2F%20Microtask%20implemented%…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 2099.4800004959106,
            "networkRequestTime": 2099.4800004959106,
            "networkEndTime": 2099.6940002441406,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 5682,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_typeof%3Dtypeof%20Symbol%3D%3D%3D%22function%22%26%26type…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 2101.112000465393,
            "networkRequestTime": 2101.112000465393,
            "networkEndTime": 2101.6500005722046,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 20501,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_typeof%3Dtypeof%20Symbol%3D%3D%3D%22function%22%26%26type…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 2104.211000442505,
            "networkRequestTime": 2104.211000442505,
            "networkEndTime": 2104.5350008010864,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 12872,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(ta…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 2106.201000213623,
            "networkRequestTime": 2106.201000213623,
            "networkEndTime": 2106.6280012130737,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 19930,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(ta…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 2110.2630004882812,
            "networkRequestTime": 2110.2630004882812,
            "networkEndTime": 2111.8780002593994,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 100964,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3B%2F**%0A%20%20%20*%20Provides%20b…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 2119.751001358032,
            "networkRequestTime": 2119.751001358032,
            "networkEndTime": 2119.938000679016,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 1356,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(ta…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 2121.2810010910034,
            "networkRequestTime": 2121.2810010910034,
            "networkEndTime": 2121.5380001068115,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 9658,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(ta…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 2123.0890007019043,
            "networkRequestTime": 2123.0890007019043,
            "networkEndTime": 2123.55500125885,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 30666,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(ta…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 2125.738000869751,
            "networkRequestTime": 2125.738000869751,
            "networkEndTime": 2125.9560012817383,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 3961,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3B%2F%2F%20detect%20native%20touch%…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 2127.4310007095337,
            "networkRequestTime": 2127.4310007095337,
            "networkEndTime": 2127.903000831604,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 26851,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(ta…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 2131.005000114441,
            "networkRequestTime": 2131.005000114441,
            "networkEndTime": 2131.1900005340576,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 4429,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(ta…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 2132.0800008773804,
            "networkRequestTime": 2132.0800008773804,
            "networkEndTime": 2132.251000404358,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 6777,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3B%2F%2F%20run%20a%20callback%20whe…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 2133.3600006103516,
            "networkRequestTime": 2133.3600006103516,
            "networkEndTime": 2133.6370010375977,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 2990,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3Bvar%20scheduled%3Dfalse%3Bvar%20b…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 2134.3380012512207,
            "networkRequestTime": 2134.3380012512207,
            "networkEndTime": 2134.4540004730225,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 3121,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3B%2F%2F%20unresolved%0Afunction%20…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 2135.1850004196167,
            "networkRequestTime": 2135.1850004196167,
            "networkEndTime": 2135.314001083374,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 480,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3Bfunction%20newSplice(index%2Cremo…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 2136.2170009613037,
            "networkRequestTime": 2136.2170009613037,
            "networkEndTime": 2136.515001296997,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 7970,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(ta…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 2137.880000114441,
            "networkRequestTime": 2137.880000114441,
            "networkEndTime": 2138.198000907898,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 9727,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3Bvar%20debouncerQueue%3D%5B%5D%3B%…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 2139.6140003204346,
            "networkRequestTime": 2139.6140003204346,
            "networkEndTime": 2139.7740001678467,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 1114,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(ta…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 2140.5209999084473,
            "networkRequestTime": 2140.5209999084473,
            "networkEndTime": 2140.773000717163,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 11133,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(ta…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 2143.0450010299683,
            "networkRequestTime": 2143.0450010299683,
            "networkEndTime": 2143.881000518799,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 37092,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(ta…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 2147.83300113678,
            "networkRequestTime": 2147.83300113678,
            "networkEndTime": 2148.100001335144,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 19044,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3B%2F**%0A%20%20%20%20%20*%20Legacy…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 2150.091000556946,
            "networkRequestTime": 2150.091000556946,
            "networkEndTime": 2150.2300004959106,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 1111,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(ta…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 2151.0040006637573,
            "networkRequestTime": 2151.0040006637573,
            "networkEndTime": 2151.246000289917,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 10198,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(ta…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 2152.8210010528564,
            "networkRequestTime": 2152.8210010528564,
            "networkEndTime": 2153.243000984192,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 24612,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3Bvar%20TemplateInstanceBase%3DPoly…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 2156.381000518799,
            "networkRequestTime": 2156.381000518799,
            "networkEndTime": 2156.526000022888,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 5584,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(ta…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 2157.5920009613037,
            "networkRequestTime": 2157.5920009613037,
            "networkEndTime": 2157.805000305176,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 5022,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(ta…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 2159.176000595093,
            "networkRequestTime": 2159.176000595093,
            "networkEndTime": 2159.380000114441,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 5107,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3B%2F**%0A%20%20%20*%20Base%20class…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 2160.3820009231567,
            "networkRequestTime": 2160.3820009231567,
            "networkEndTime": 2160.533000946045,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 939,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_get%3Dfunction%20get(object%2Cproperty%2Creceiver)%7Bif(o…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 2161.7180004119873,
            "networkRequestTime": 2161.7180004119873,
            "networkEndTime": 2162.28600025177,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 25690,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_get%3Dfunction%20get(object%2Cproperty%2Creceiver)%7Bif(o…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 2165.443000793457,
            "networkRequestTime": 2165.443000793457,
            "networkEndTime": 2165.6610012054443,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 10133,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(ta…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 2167.1500005722046,
            "networkRequestTime": 2167.1500005722046,
            "networkEndTime": 2167.381000518799,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 13519,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3Bvar%20mutablePropertyChange%3Dvoi…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 2169.023000717163,
            "networkRequestTime": 2169.023000717163,
            "networkEndTime": 2169.192000389099,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 6798,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,%2F%2F%20bc%0APolymer.Base%3DPolymer.LegacyElementMixin(HTMLElem…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 2170.171000480652,
            "networkRequestTime": 2170.171000480652,
            "networkEndTime": 2170.292000770569,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 314,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          }
        ],
        "debugData": {
          "type": "debugdata",
          "networkStartTimeTs": 5984991468507.999,
          "initiators": [
            {
              "type": "parser",
              "url": "https://eu.dispatch.com/",
              "lineNumber": 220,
              "columnNumber": 214
            },
            {
              "type": "parser",
              "url": "https://eu.dispatch.com/",
              "lineNumber": 220,
              "columnNumber": 356
            },
            {
              "type": "parser",
              "url": "https://eu.dispatch.com/",
              "lineNumber": 220,
              "columnNumber": 766
            },
            {
              "type": "parser",
              "url": "https://eu.dispatch.com/",
              "lineNumber": 220,
              "columnNumber": 1215
            },
            {
              "type": "parser",
              "url": "https://eu.dispatch.com/",
              "lineNumber": 522,
              "columnNumber": 891
            },
            {
              "type": "parser",
              "url": "https://eu.dispatch.com/",
              "lineNumber": 523,
              "columnNumber": 1139
            },
            {
              "type": "parser",
              "url": "https://eu.dispatch.com/",
              "lineNumber": 524,
              "columnNumber": 1227
            },
            {
              "type": "parser",
              "url": "https://eu.dispatch.com/",
              "lineNumber": 530,
              "columnNumber": 1241
            },
            {
              "type": "parser",
              "url": "https://eu.dispatch.com/",
              "lineNumber": 532,
              "columnNumber": 1726
            },
            {
              "type": "parser",
              "url": "https://eu.dispatch.com/",
              "lineNumber": 534,
              "columnNumber": 1270
            },
            {
              "type": "parser",
              "url": "https://eu.dispatch.com/",
              "lineNumber": 536,
              "columnNumber": 1420
            },
            {
              "type": "parser",
              "url": "https://eu.dispatch.com/",
              "lineNumber": 538,
              "columnNumber": 1437
            },
            {
              "type": "parser",
              "url": "https://eu.dispatch.com/",
              "lineNumber": 540,
              "columnNumber": 1475
            },
            {
              "type": "parser",
              "url": "https://eu.dispatch.com/",
              "lineNumber": 542,
              "columnNumber": 1751
            },
            {
              "type": "parser",
              "url": "https://eu.dispatch.com/",
              "lineNumber": 544,
              "columnNumber": 1562
            },
            {
              "type": "parser",
              "url": "https://eu.dispatch.com/",
              "lineNumber": 546,
              "columnNumber": 1416
            },
            {
              "type": "parser",
              "url": "https://eu.dispatch.com/",
              "lineNumber": 548,
              "columnNumber": 1228
            },
            {
              "type": "parser",
              "url": "https://eu.dispatch.com/",
              "lineNumber": 550,
              "columnNumber": 1345
            },
            {
              "type": "script",
              "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/scripts/gallium.js",
              "lineNumber": 0,
              "columnNumber": 22
            },
            {
              "type": "script",
              "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/scripts/gallium.js",
              "lineNumber": 1,
              "columnNumber": 20
            },
            {
              "type": "parser",
              "url": "https://eu.dispatch.com/",
              "lineNumber": 588,
              "columnNumber": 655
            },
            {
              "type": "parser",
              "url": "https://eu.dispatch.com/",
              "lineNumber": 588,
              "columnNumber": 655
            },
            {
              "type": "parser",
              "url": "https://eu.dispatch.com/",
              "lineNumber": 588,
              "columnNumber": 655
            },
            {
              "type": "parser",
              "url": "https://eu.dispatch.com/",
              "lineNumber": 588,
              "columnNumber": 655
            },
            {
              "type": "parser",
              "url": "https://eu.dispatch.com/",
              "lineNumber": 588,
              "columnNumber": 655
            },
            {
              "type": "parser",
              "url": "https://eu.dispatch.com/",
              "lineNumber": 588,
              "columnNumber": 655
            },
            {
              "type": "parser",
              "url": "https://eu.dispatch.com/",
              "lineNumber": 588,
              "columnNumber": 655
            },
            {
              "type": "parser",
              "url": "https://eu.dispatch.com/",
              "lineNumber": 588,
              "columnNumber": 655
            },
            {
              "type": "parser",
              "url": "https://eu.dispatch.com/",
              "lineNumber": 588,
              "columnNumber": 655
            },
            {
              "type": "parser",
              "url": "https://eu.dispatch.com/",
              "lineNumber": 588,
              "columnNumber": 655
            },
            {
              "type": "parser",
              "url": "https://eu.dispatch.com/",
              "lineNumber": 588,
              "columnNumber": 655
            },
            {
              "type": "parser",
              "url": "https://eu.dispatch.com/",
              "lineNumber": 588,
              "columnNumber": 655
            },
            {
              "type": "parser",
              "url": "https://eu.dispatch.com/",
              "lineNumber": 588,
              "columnNumber": 655
            },
            {
              "type": "parser",
              "url": "https://eu.dispatch.com/",
              "lineNumber": 588,
              "columnNumber": 655
            },
            {
              "type": "parser",
              "url": "https://eu.dispatch.com/",
              "lineNumber": 588,
              "columnNumber": 655
            },
            {
              "type": "parser",
              "url": "https://eu.dispatch.com/",
              "lineNumber": 588,
              "columnNumber": 655
            },
            {
              "type": "parser",
              "url": "https://eu.dispatch.com/",
              "lineNumber": 588,
              "columnNumber": 655
            },
            {
              "type": "parser",
              "url": "https://eu.dispatch.com/",
              "lineNumber": 588,
              "columnNumber": 655
            },
            {
              "type": "parser",
              "url": "https://eu.dispatch.com/",
              "lineNumber": 588,
              "columnNumber": 655
            },
            {
              "type": "parser",
              "url": "https://eu.dispatch.com/",
              "lineNumber": 588,
              "columnNumber": 655
            },
            {
              "type": "parser",
              "url": "https://eu.dispatch.com/",
              "lineNumber": 588,
              "columnNumber": 655
            },
            {
              "type": "parser",
              "url": "https://eu.dispatch.com/",
              "lineNumber": 588,
              "columnNumber": 655
            },
            {
              "type": "parser",
              "url": "https://eu.dispatch.com/",
              "lineNumber": 588,
              "columnNumber": 655
            },
            {
              "type": "parser",
              "url": "https://eu.dispatch.com/",
              "lineNumber": 588,
              "columnNumber": 655
            }
          ]
        }
      }
    },
    "network-rtt": {
      "id": "network-rtt",
      "title": "Network Round Trip Times",
      "description": "Network round trip times (RTT) have a large impact on performance. If the RTT to an origin is high, it's an indication that servers closer to the user could improve performance. [Learn more about the Round Trip Time](https://hpbn.co/primer-on-latency-and-bandwidth/).",
      "score": 1,
      "scoreDisplayMode": "informative",
      "numericValue": 25.189999999999998,
      "numericUnit": "millisecond",
      "displayValue": "30 ms",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "origin",
            "valueType": "text",
            "label": "URL"
          },
          {
            "key": "rtt",
            "valueType": "ms",
            "granularity": 1,
            "label": "Time Spent"
          }
        ],
        "items": [
          {
            "origin": "https://dispatch.com",
            "rtt": 25.189999999999998
          },
          {
            "origin": "https://api.gannett-cdn.com",
            "rtt": 1.420859999999999
          },
          {
            "origin": "https://eu.dispatch.com",
            "rtt": 1.0588499999999996
          },
          {
            "origin": "https://www.gannett-cdn.com",
            "rtt": 0.5970000000000013
          },
          {
            "origin": "https://www.dispatch.com",
            "rtt": 0.47799999999999976
          },
          {
            "origin": "https://cpt-static.gannettdigital.com",
            "rtt": 0.4410000000000025
          },
          {
            "origin": "https://atoms.dispatch.com",
            "rtt": 0.42200000000000004
          },
          {
            "origin": "https://polyfill-fastly.io",
            "rtt": 0.3780000000000001
          }
        ],
        "sortedBy": [
          "rtt"
        ]
      }
    },
    "network-server-latency": {
      "id": "network-server-latency",
      "title": "Server Backend Latencies",
      "description": "Server latencies can impact web performance. If the server latency of an origin is high, it's an indication the server is overloaded or has poor backend performance. [Learn more about server response time](https://hpbn.co/primer-on-web-performance/#analyzing-the-resource-waterfall).",
      "score": 1,
      "scoreDisplayMode": "informative",
      "numericValue": 186.352,
      "numericUnit": "millisecond",
      "displayValue": "190 ms",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "origin",
            "valueType": "text",
            "label": "URL"
          },
          {
            "key": "serverResponseTime",
            "valueType": "ms",
            "granularity": 1,
            "label": "Time Spent"
          }
        ],
        "items": [
          {
            "origin": "https://cpt-static.gannettdigital.com",
            "serverResponseTime": 186.352
          },
          {
            "origin": "https://www.gannett-cdn.com",
            "serverResponseTime": 104.0615
          },
          {
            "origin": "https://atoms.dispatch.com",
            "serverResponseTime": 102.804
          },
          {
            "origin": "https://api.gannett-cdn.com",
            "serverResponseTime": 97.55313999999998
          },
          {
            "origin": "https://eu.dispatch.com",
            "serverResponseTime": 27.890150000000002
          },
          {
            "origin": "https://dispatch.com",
            "serverResponseTime": 3.3100000000000023
          },
          {
            "origin": "https://www.dispatch.com",
            "serverResponseTime": 2.969999999999999
          },
          {
            "origin": "https://polyfill-fastly.io",
            "serverResponseTime": 1.6170000000000009
          }
        ],
        "sortedBy": [
          "serverResponseTime"
        ]
      }
    },
    "main-thread-tasks": {
      "id": "main-thread-tasks",
      "title": "Tasks",
      "description": "Lists the toplevel main thread tasks that executed during page load.",
      "score": 1,
      "scoreDisplayMode": "informative",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "startTime",
            "valueType": "ms",
            "granularity": 1,
            "label": "Start Time"
          },
          {
            "key": "duration",
            "valueType": "ms",
            "granularity": 1,
            "label": "End Time"
          }
        ],
        "items": [
          {
            "duration": 10.75,
            "startTime": 144.9
          },
          {
            "duration": 5.918,
            "startTime": 156.719
          },
          {
            "duration": 8.187,
            "startTime": 477.141
          },
          {
            "duration": 8.786,
            "startTime": 486.024
          },
          {
            "duration": 7.25,
            "startTime": 498.717
          },
          {
            "duration": 22.333,
            "startTime": 507.255
          },
          {
            "duration": 56.442,
            "startTime": 703.052
          },
          {
            "duration": 13.146,
            "startTime": 850.015
          },
          {
            "duration": 7.833,
            "startTime": 867.553
          },
          {
            "duration": 7.259,
            "startTime": 918.588
          },
          {
            "duration": 9.406,
            "startTime": 998.051
          },
          {
            "duration": 6.748,
            "startTime": 1307.305
          },
          {
            "duration": 5.157,
            "startTime": 1358.543
          },
          {
            "duration": 6.625,
            "startTime": 2108.242
          },
          {
            "duration": 6.85,
            "startTime": 2114.914
          },
          {
            "duration": 25.788,
            "startTime": 2324.249
          }
        ]
      }
    },
    "metrics": {
      "id": "metrics",
      "title": "Metrics",
      "description": "Collects all available metrics.",
      "score": 1,
      "scoreDisplayMode": "informative",
      "numericValue": 17233,
      "numericUnit": "millisecond",
      "details": {
        "type": "debugdata",
        "items": [
          {
            "firstContentfulPaint": 4424,
            "largestContentfulPaint": 17233,
            "interactive": 17233,
            "speedIndex": 5533,
            "totalBlockingTime": 68,
            "maxPotentialFID": 113,
            "cumulativeLayoutShift": 0,
            "cumulativeLayoutShiftMainFrame": 0,
            "lcpLoadDelay": 1168,
            "lcpLoadDuration": 2711,
            "timeToFirstByte": 628,
            "observedTimeOrigin": 0,
            "observedTimeOriginTs": 5984991467378,
            "observedNavigationStart": 0,
            "observedNavigationStartTs": 5984991467378,
            "observedFirstPaint": 2329,
            "observedFirstPaintTs": 5984993796198,
            "observedFirstContentfulPaint": 2329,
            "observedFirstContentfulPaintTs": 5984993796198,
            "observedFirstContentfulPaintAllFrames": 2329,
            "observedFirstContentfulPaintAllFramesTs": 5984993796198,
            "observedLargestContentfulPaint": 2329,
            "observedLargestContentfulPaintTs": 5984993796198,
            "observedLargestContentfulPaintAllFrames": 2329,
            "observedLargestContentfulPaintAllFramesTs": 5984993796198,
            "observedTraceEnd": 4673,
            "observedTraceEndTs": 5984996140795,
            "observedLoad": 998,
            "observedLoadTs": 5984992465537,
            "observedDomContentLoaded": 758,
            "observedDomContentLoadedTs": 5984992225397,
            "observedCumulativeLayoutShift": 0,
            "observedCumulativeLayoutShiftMainFrame": 0,
            "observedFirstVisualChange": 2329,
            "observedFirstVisualChangeTs": 5984993796378,
            "observedLastVisualChange": 2643,
            "observedLastVisualChangeTs": 5984994110378,
            "observedSpeedIndex": 2332,
            "observedSpeedIndexTs": 5984993799802
          },
          {
            "lcpInvalidated": false
          }
        ]
      }
    },
    "resource-summary": {
      "id": "resource-summary",
      "title": "Resources Summary",
      "description": "Aggregates all network requests and groups them by type",
      "score": 1,
      "scoreDisplayMode": "informative",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "label",
            "valueType": "text",
            "label": "Resource Type"
          },
          {
            "key": "requestCount",
            "valueType": "numeric",
            "label": "Requests"
          },
          {
            "key": "transferSize",
            "valueType": "bytes",
            "label": "Transfer Size"
          }
        ],
        "items": [
          {
            "resourceType": "total",
            "label": "Total",
            "requestCount": 108,
            "transferSize": 3325705
          },
          {
            "resourceType": "image",
            "label": "Image",
            "requestCount": 35,
            "transferSize": 2892848
          },
          {
            "resourceType": "other",
            "label": "Other",
            "requestCount": 56,
            "transferSize": 182234
          },
          {
            "resourceType": "script",
            "label": "Script",
            "requestCount": 12,
            "transferSize": 141864
          },
          {
            "resourceType": "font",
            "label": "Font",
            "requestCount": 4,
            "transferSize": 74295
          },
          {
            "resourceType": "document",
            "label": "Document",
            "requestCount": 1,
            "transferSize": 34464
          },
          {
            "resourceType": "stylesheet",
            "label": "Stylesheet",
            "requestCount": 0,
            "transferSize": 0
          },
          {
            "resourceType": "media",
            "label": "Media",
            "requestCount": 0,
            "transferSize": 0
          },
          {
            "resourceType": "third-party",
            "label": "Third-party",
            "requestCount": 101,
            "transferSize": 3272898
          }
        ]
      }
    },
    "layout-shifts": {
      "id": "layout-shifts",
      "title": "Avoid large layout shifts",
      "description": "These are the largest layout shifts observed on the page. Each table item represents a single layout shift, and shows the element that shifted the most. Below each item are possible root causes that led to the layout shift. Some of these layout shifts may not be included in the CLS metric value due to [windowing](https://web.dev/articles/cls#what_is_cls). [Learn how to improve CLS](https://web.dev/articles/optimize-cls)",
      "score": null,
      "scoreDisplayMode": "notApplicable",
      "metricSavings": {
        "CLS": 0
      },
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "subItemsHeading": {
              "key": "extra"
            },
            "label": "Element"
          },
          {
            "key": "score",
            "valueType": "numeric",
            "subItemsHeading": {
              "key": "cause",
              "valueType": "text"
            },
            "granularity": 0.001,
            "label": "Layout shift score"
          }
        ],
        "items": []
      },
      "guidanceLevel": 2
    },
    "long-tasks": {
      "id": "long-tasks",
      "title": "Avoid long main-thread tasks",
      "description": "Lists the longest tasks on the main thread, useful for identifying worst contributors to input delay. [Learn how to avoid long main-thread tasks](https://web.dev/articles/optimize-long-tasks)",
      "score": 1,
      "scoreDisplayMode": "informative",
      "displayValue": "3 long tasks found",
      "metricSavings": {
        "TBT": 50
      },
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "url",
            "valueType": "url",
            "label": "URL"
          },
          {
            "key": "startTime",
            "valueType": "ms",
            "granularity": 1,
            "label": "Start Time"
          },
          {
            "key": "duration",
            "valueType": "ms",
            "granularity": 1,
            "label": "Duration"
          }
        ],
        "items": [
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/bundles/section.js",
            "duration": 113,
            "startTime": 5398.98955
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/bundles/section.js",
            "duration": 53,
            "startTime": 4498.61155
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/shadycss/custom-style-interface.min.js",
            "duration": 52,
            "startTime": 8222.12355
          }
        ],
        "sortedBy": [
          "duration"
        ],
        "skipSumming": [
          "startTime"
        ],
        "debugData": {
          "type": "debugdata",
          "urls": [
            "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/bundles/section.js",
            "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/shadycss/custom-style-interface.min.js"
          ],
          "tasks": [
            {
              "urlIndex": 0,
              "startTime": 5399,
              "duration": 113,
              "other": 113,
              "scriptEvaluation": 0,
              "styleLayout": 0
            },
            {
              "urlIndex": 0,
              "startTime": 4498.6,
              "duration": 53,
              "other": 53,
              "scriptEvaluation": 0
            },
            {
              "urlIndex": 1,
              "startTime": 8222.1,
              "duration": 52,
              "other": 52,
              "paintCompositeRender": 0,
              "scriptEvaluation": 0,
              "styleLayout": 0
            }
          ]
        }
      },
      "guidanceLevel": 1
    },
    "non-composited-animations": {
      "id": "non-composited-animations",
      "title": "Avoid non-composited animations",
      "description": "Animations which are not composited can be janky and increase CLS. [Learn how to avoid non-composited animations](https://developer.chrome.com/docs/lighthouse/performance/non-composited-animations/)",
      "score": null,
      "scoreDisplayMode": "notApplicable",
      "metricSavings": {
        "CLS": 0
      },
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "subItemsHeading": {
              "key": "failureReason",
              "valueType": "text"
            },
            "label": "Element"
          }
        ],
        "items": []
      },
      "guidanceLevel": 2
    },
    "unsized-images": {
      "id": "unsized-images",
      "title": "Image elements do not have explicit `width` and `height`",
      "description": "Set an explicit width and height on image elements to reduce layout shifts and improve CLS. [Learn how to set image dimensions](https://web.dev/articles/optimize-cls#images_without_dimensions)",
      "score": 0.5,
      "scoreDisplayMode": "metricSavings",
      "metricSavings": {
        "CLS": 0
      },
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "label": ""
          },
          {
            "key": "url",
            "valueType": "url",
            "label": "URL"
          }
        ],
        "items": [
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2025/10/03/NCOD/86497290007-common-pleas-court.jpg?crop=7007,3943,x0,y364",
            "node": {
              "type": "node",
              "lhId": "1-19-IMG",
              "path": "1,HTML,1,BODY,3,HEADER,0,DIV,0,DIV,0,DIV,0,DIV,0,DIV,0,DIV,0,A,0,DIV,0,PICTURE,4,IMG",
              "selector": "a.p12-container-link > div.section-helper-column > picture.p12-photo > img.p12-photo",
              "boundingRect": {
                "top": 56,
                "bottom": 288,
                "left": 0,
                "right": 412,
                "width": 412,
                "height": 232
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2025/10/03/NCOD/864…\" alt=\"Court backlog leads to Franklin County asking for 2 new judges\" class=\"p12-photo\">",
              "nodeLabel": "Court backlog leads to Franklin County asking for 2 new judges"
            }
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/2019/12/17/NCOD/ghows-OH-ca4157f4-725c-4088-8574-12d94085ff21-92b15e53.jpeg?crop=1999,1130,x0,y125&quality=50&width=270",
            "node": {
              "type": "node",
              "lhId": "1-21-IMG",
              "path": "1,HTML,1,BODY,3,HEADER,0,DIV,0,DIV,0,DIV,0,DIV,1,DIV,1,DIV,0,A,0,PICTURE,5,IMG",
              "selector": "div.hero-slot-three > a.section-helper-flex > picture.section-helper-column > img",
              "boundingRect": {
                "top": 624,
                "bottom": 819,
                "left": 34,
                "right": 378,
                "width": 343,
                "height": 195
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/2019/12/17/NCOD/ghows-OH-ca4157f4-72…\" alt=\"Woman facing more charges in fatal I-270 crash after running from scene\">",
              "nodeLabel": "Woman facing more charges in fatal I-270 crash after running from scene"
            }
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/01/12/USAT/88148416007-usatsi-27919432.jpg?crop=3999,2250,x0,y400&quality=50&width=270",
            "node": {
              "type": "node",
              "lhId": "1-20-IMG",
              "path": "1,HTML,1,BODY,3,HEADER,0,DIV,0,DIV,0,DIV,0,DIV,1,DIV,0,DIV,0,A,0,PICTURE,5,IMG",
              "selector": "div.hero-slot-two > a.section-helper-flex > picture.section-helper-column > img",
              "boundingRect": {
                "top": 382,
                "bottom": 575,
                "left": 34,
                "right": 378,
                "width": 343,
                "height": 193
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/01/12/USAT/881…\" alt=\"New bookstore planned for Worthington this summer\">",
              "nodeLabel": "New bookstore planned for Worthington this summer"
            }
          },
          {
            "url": "https://www.gannett-cdn.com/gannett-web/properties/dispatch/logos-and-branding/logo-default.svg",
            "node": {
              "type": "node",
              "lhId": "1-98-IMG",
              "path": "1,HTML,1,BODY,2,UTIL-STICKY-MODULE,2,DIV,1,DIV,0,DIV,0,DIV,2,A,0,IMG",
              "selector": "div#navRibbon > div#toggleSticky > a#logoContainer > img#logo",
              "boundingRect": {
                "top": 12,
                "bottom": 44,
                "left": 60,
                "right": 200,
                "width": 140,
                "height": 32
              },
              "snippet": "<img alt=\"The Columbus Dispatch\" class=\"expand-icon\" id=\"logo\" src=\"https://www.gannett-cdn.com/gannett-web/properties/dispatch/logos-and-bran…\">",
              "nodeLabel": "The Columbus Dispatch"
            }
          },
          {
            "url": "https://www.gannett-cdn.com/gannett-web/properties/dispatch/logos-and-branding/logo-default.svg",
            "node": {
              "type": "node",
              "lhId": "1-99-IMG",
              "path": "1,HTML,1,BODY,2,UTIL-STICKY-MODULE,2,DIV,1,DIV,1,DIV,0,DIV,0,DIV,1,A,0,IMG",
              "selector": "div.expand-wrap-top > div#logoWrap > a#hubLogo > img#sidebarLogo",
              "boundingRect": {
                "top": 32,
                "bottom": 77,
                "left": -378,
                "right": -181,
                "width": 197,
                "height": 45
              },
              "snippet": "<img id=\"sidebarLogo\" class=\"full-height-logo\" alt=\"The Columbus Dispatch\" src=\"https://www.gannett-cdn.com/gannett-web/properties/dispatch/logos-and-bran…\">",
              "nodeLabel": "The Columbus Dispatch"
            }
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/03/09/USAT/89063884007-1321427.jpg?crop=1029,1028,x485,y0&quality=50&width=270",
            "node": {
              "type": "node",
              "lhId": "1-100-IMG",
              "path": "1,HTML,1,BODY,4,SECTION,0,DIV,0,DIV,1,DIV,0,DIV,1,A,1,DIV,0,DIV,0,PICTURE,3,IMG",
              "selector": "div.section-helper-flex > div.nonflexDiv > picture.p1-image > img.p1-image",
              "boundingRect": {
                "top": 892,
                "bottom": 996,
                "left": 273,
                "right": 378,
                "width": 104,
                "height": 104
              },
              "snippet": "<img srcset=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/03/09/USAT/890…\" class=\"p1-image\" alt=\"Who gets tariff refunds? FedEx, UPS, Costco to pass along savings\">",
              "nodeLabel": "Who gets tariff refunds? FedEx, UPS, Costco to pass along savings"
            }
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/01/USAT/89418718007-20190909-t-095808-z-1460425915-rc-1-dc-47491-a-0-rtrmadp-3-foodmeatalternative.JPG?crop=2334,2333,x875,y0&quality=50&width=270",
            "node": {
              "type": "node",
              "lhId": "1-101-IMG",
              "path": "1,HTML,1,BODY,4,SECTION,0,DIV,0,DIV,1,DIV,0,DIV,2,A,1,DIV,0,DIV,0,PICTURE,3,IMG",
              "selector": "div.section-helper-flex > div.nonflexDiv > picture.p1-image > img.p1-image",
              "boundingRect": {
                "top": 1012,
                "bottom": 1117,
                "left": 273,
                "right": 378,
                "width": 104,
                "height": 104
              },
              "snippet": "<img srcset=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/04/01/USAT/894…\" class=\"p1-image\" alt=\"Here's where to find food deals in Columbus for Earth Day\">",
              "nodeLabel": "Here's where to find food deals in Columbus for Earth Day"
            }
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/22/NCOD/89732829007-amanda-wampler.jpg?crop=3959,3959,x0,y0&quality=50&width=270",
            "node": {
              "type": "node",
              "lhId": "1-102-IMG",
              "path": "1,HTML,1,BODY,4,SECTION,0,DIV,0,DIV,1,DIV,0,DIV,4,A,1,DIV,0,DIV,0,PICTURE,3,IMG",
              "selector": "div.section-helper-flex > div.nonflexDiv > picture.p1-image > img.p1-image",
              "boundingRect": {
                "top": 1133,
                "bottom": 1237,
                "left": 273,
                "right": 378,
                "width": 104,
                "height": 104
              },
              "snippet": "<img srcset=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/04/22/NCOD/897…\" class=\"p1-image\" alt=\"Humane Society of Delaware County names new CEO\">",
              "nodeLabel": "Humane Society of Delaware County names new CEO"
            }
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/01/09/NCOD/88099461007-news-bp-submetering-main-bar-01.jpg?crop=4673,4671,x1167,y0&quality=50&width=270",
            "node": {
              "type": "node",
              "lhId": "1-103-IMG",
              "path": "1,HTML,1,BODY,4,SECTION,0,DIV,0,DIV,1,DIV,0,DIV,5,A,1,DIV,0,DIV,0,PICTURE,3,IMG",
              "selector": "div.section-helper-flex > div.nonflexDiv > picture.p1-image > img.p1-image",
              "boundingRect": {
                "top": 1253,
                "bottom": 1358,
                "left": 273,
                "right": 378,
                "width": 104,
                "height": 104
              },
              "snippet": "<img srcset=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/01/09/NCOD/880…\" class=\"p1-image\" alt=\"Ruling shields Ohio tenants From high bills by regulating submetering\">",
              "nodeLabel": "Ruling shields Ohio tenants From high bills by regulating submetering"
            }
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/21/NCOD/89722651007-nwsl-columbus-announcement-ac-031.JPG?crop=3001,2999,x749,y0&quality=50&width=270",
            "node": {
              "type": "node",
              "lhId": "1-104-IMG",
              "path": "1,HTML,1,BODY,4,SECTION,0,DIV,0,DIV,1,DIV,0,DIV,8,A,1,DIV,0,DIV,0,PICTURE,3,IMG",
              "selector": "div.section-helper-flex > div.nonflexDiv > picture.p1-image > img.p1-image",
              "boundingRect": {
                "top": 1374,
                "bottom": 1478,
                "left": 273,
                "right": 378,
                "width": 104,
                "height": 104
              },
              "snippet": "<img srcset=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/04/21/NCOD/897…\" class=\"p1-image\" alt=\"Billionaire Haslams should pay own way in bringing NWSL to Columbus | Oller\">",
              "nodeLabel": "Billionaire Haslams should pay own way in bringing NWSL to Columbus | Oller"
            }
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/21/NCOD/89709919007-entertainment-worthington-inn-preview-01.jpg?crop=3331,3330,x734,y0&quality=50&width=270",
            "node": {
              "type": "node",
              "lhId": "1-105-IMG",
              "path": "1,HTML,1,BODY,4,SECTION,0,DIV,0,DIV,1,DIV,0,DIV,9,A,1,DIV,0,DIV,0,PICTURE,3,IMG",
              "selector": "div.section-helper-flex > div.nonflexDiv > picture.p1-image > img.p1-image",
              "boundingRect": {
                "top": 1494,
                "bottom": 1599,
                "left": 273,
                "right": 378,
                "width": 104,
                "height": 104
              },
              "snippet": "<img srcset=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/04/21/NCOD/897…\" class=\"p1-image\" alt=\"Wolf's Ridge at Worthington Inn is ready to make its debut again\">",
              "nodeLabel": "Wolf's Ridge at Worthington Inn is ready to make its debut again"
            }
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/20/USAT/89701336007-20260420-t-105621-z-81997381-rc-2-xskaig-2-sx-rtrmadp-3-irancrisislebanonisrael.JPG?crop=4001,3999,x999,y0&quality=50&width=270",
            "node": {
              "type": "node",
              "lhId": "1-106-IMG",
              "path": "1,HTML,1,BODY,4,SECTION,0,DIV,0,DIV,1,DIV,0,DIV,11,A,1,DIV,0,DIV,0,PICTURE,3,IMG",
              "selector": "div.section-helper-flex > div.nonflexDiv > picture.p1-image > img.p1-image",
              "boundingRect": {
                "top": 1615,
                "bottom": 1719,
                "left": 273,
                "right": 378,
                "width": 104,
                "height": 104
              },
              "snippet": "<img srcset=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/04/20/USAT/897…\" class=\"p1-image\" alt=\"Iran seizes 2 ships after Trump extends ceasefire: Iran war updates\">",
              "nodeLabel": "Iran seizes 2 ships after Trump extends ceasefire: Iran war updates"
            }
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/17/NCOD/89665462007-earth-day-7566-amanda-carberry-columbus-zoo-and-aquarium.jpg?crop=1080,1079,x324,y0&quality=50&width=270",
            "node": {
              "type": "node",
              "lhId": "1-107-IMG",
              "path": "1,HTML,1,BODY,4,SECTION,0,DIV,0,DIV,1,DIV,0,DIV,12,A,1,DIV,0,DIV,0,PICTURE,3,IMG",
              "selector": "div.section-helper-flex > div.nonflexDiv > picture.p1-image > img.p1-image",
              "boundingRect": {
                "top": 1735,
                "bottom": 1840,
                "left": 273,
                "right": 378,
                "width": 104,
                "height": 104
              },
              "snippet": "<img srcset=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/04/17/NCOD/896…\" class=\"p1-image\" alt=\"Earth Day celebration to roar into Columbus Zoo\">",
              "nodeLabel": "Earth Day celebration to roar into Columbus Zoo"
            }
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/21/NCOD/89722614007-nwsl-columbus-announcement-ac-004.JPG?crop=3000,2999,x675,y0&quality=50&width=270",
            "node": {
              "type": "node",
              "lhId": "1-108-IMG",
              "path": "1,HTML,1,BODY,4,SECTION,0,DIV,0,DIV,1,DIV,0,DIV,13,A,1,DIV,0,DIV,0,PICTURE,3,IMG",
              "selector": "div.section-helper-flex > div.nonflexDiv > picture.p1-image > img.p1-image",
              "boundingRect": {
                "top": 1856,
                "bottom": 1960,
                "left": 273,
                "right": 378,
                "width": 104,
                "height": 104
              },
              "snippet": "<img srcset=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/04/21/NCOD/897…\" class=\"p1-image\" alt=\"What to know about Columbus' newly announced NWSL team\">",
              "nodeLabel": "What to know about Columbus' newly announced NWSL team"
            }
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/21/NCOD/89719919007-10205.jpg?crop=3000,2999,x400,y0&quality=50&width=270",
            "node": {
              "type": "node",
              "lhId": "1-109-IMG",
              "path": "1,HTML,1,BODY,4,SECTION,0,DIV,0,DIV,1,DIV,0,DIV,15,A,1,DIV,0,DIV,0,PICTURE,3,IMG",
              "selector": "div.section-helper-flex > div.nonflexDiv > picture.p1-image > img.p1-image",
              "boundingRect": {
                "top": 1976,
                "bottom": 2080,
                "left": 273,
                "right": 378,
                "width": 104,
                "height": 104
              },
              "snippet": "<img srcset=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/04/21/NCOD/897…\" class=\"p1-image\" alt=\"Columbus Council, City Schools announce new formal partnership\">",
              "nodeLabel": "Columbus Council, City Schools announce new formal partnership"
            }
          },
          {
            "url": "https://www.gannett-cdn.com/presto/2023/05/12/NCOD/109c95af-b9cd-4ac2-8660-0cb3a7c86351-impound_lot_ac_05.JPG?crop=3000,3000,x675,y0&quality=50&width=270",
            "node": {
              "type": "node",
              "lhId": "1-110-IMG",
              "path": "1,HTML,1,BODY,4,SECTION,0,DIV,0,DIV,1,DIV,0,DIV,16,A,1,DIV,0,DIV,0,PICTURE,3,IMG",
              "selector": "div.section-helper-flex > div.nonflexDiv > picture.p1-image > img.p1-image",
              "boundingRect": {
                "top": 2096,
                "bottom": 2201,
                "left": 273,
                "right": 378,
                "width": 104,
                "height": 104
              },
              "snippet": "<img srcset=\"https://www.gannett-cdn.com/presto/2023/05/12/NCOD/109c95af-b9cd-4ac2-8660…\" class=\"p1-image\" alt=\"Columbus police auctioning about 130 impounded cars April 25\">",
              "nodeLabel": "Columbus police auctioning about 130 impounded cars April 25"
            }
          }
        ]
      },
      "guidanceLevel": 4
    },
    "valid-source-maps": {
      "id": "valid-source-maps",
      "title": "Page has valid source maps",
      "description": "Source maps translate minified code to the original source code. This helps developers debug in production. In addition, Lighthouse is able to provide further insights. Consider deploying source maps to take advantage of these benefits. [Learn more about source maps](https://developer.chrome.com/docs/devtools/javascript/source-maps/).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "scriptUrl",
            "valueType": "url",
            "subItemsHeading": {
              "key": "error"
            },
            "label": "URL"
          },
          {
            "key": "sourceMapUrl",
            "valueType": "url",
            "label": "Map URL"
          }
        ],
        "items": [
          {
            "scriptUrl": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/webcomponentsjs/webcomponents-hi.js",
            "sourceMapUrl": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/webcomponentsjs/webcomponents-hi.js.map",
            "subItems": {
              "type": "subitems",
              "items": [
                {
                  "error": "Error: Failed fetching source map (403)"
                }
              ]
            }
          },
          {
            "scriptUrl": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/shadycss/custom-style-interface.min.js",
            "sourceMapUrl": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/shadycss/custom-style-interface.min.js.map",
            "subItems": {
              "type": "subitems",
              "items": [
                {
                  "error": "Error: Failed fetching source map (403)"
                }
              ]
            }
          },
          {
            "scriptUrl": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/shadycss/apply-shim.min.js",
            "sourceMapUrl": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/shadycss/apply-shim.min.js.map",
            "subItems": {
              "type": "subitems",
              "items": [
                {
                  "error": "Error: Failed fetching source map (403)"
                }
              ]
            }
          },
          {
            "scriptUrl": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/bundles/section.js",
            "sourceMapUrl": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/bundles/section.js.map",
            "subItems": {
              "type": "subitems",
              "items": []
            }
          },
          {
            "scriptUrl": "https://atoms.dispatch.com/atoms-library/prod/dist/gannett-atoms-library.js",
            "sourceMapUrl": "https://atoms.dispatch.com/atoms-library/prod/dist/gannett-atoms-library.js.map",
            "subItems": {
              "type": "subitems",
              "items": []
            }
          },
          {
            "scriptUrl": "data:text/javascript;charset=utf-8,'use%20strict'%3Bvar%20siteColor%3Dwindow.ga_data.site.colors.siteColor%3Bif(siteColor!%3D%3Dundefined)%7Bdocument.documentElement.style.setProperty('--color-theme'%2CsiteColor)%3B%7D%0A%2F%2F%23%20sourceMappingURL%3D..%2F..%2Fmaps%2Fgallium%2Fthemes%2Funiversal.html_script_0.js.map%0A%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fgallium%2Fthemes%2Funiversal.html.js%0A",
            "sourceMapUrl": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/maps/gallium/themes/universal.html_script_0.js.map",
            "subItems": {
              "type": "subitems",
              "items": []
            }
          }
        ]
      }
    },
    "csp-xss": {
      "id": "csp-xss",
      "title": "Ensure CSP is effective against XSS attacks",
      "description": "A strong Content Security Policy (CSP) significantly reduces the risk of cross-site scripting (XSS) attacks. [Learn how to use a CSP to prevent XSS](https://developer.chrome.com/docs/lighthouse/best-practices/csp-xss/)",
      "score": 1,
      "scoreDisplayMode": "informative",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "description",
            "valueType": "text",
            "subItemsHeading": {
              "key": "description"
            },
            "label": "Description"
          },
          {
            "key": "directive",
            "valueType": "code",
            "subItemsHeading": {
              "key": "directive"
            },
            "label": "Directive"
          },
          {
            "key": "severity",
            "valueType": "text",
            "subItemsHeading": {
              "key": "severity"
            },
            "label": "Severity"
          }
        ],
        "items": [
          {
            "directive": "script-src",
            "description": "`script-src` directive is missing. This can allow the execution of unsafe scripts.",
            "severity": "High"
          },
          {
            "directive": "object-src",
            "description": "Missing `object-src` allows the injection of plugins that execute unsafe scripts. Consider setting `object-src` to `'none'` if you can.",
            "severity": "High"
          }
        ]
      }
    },
    "has-hsts": {
      "id": "has-hsts",
      "title": "Use a strong HSTS policy",
      "description": "Deployment of the HSTS header significantly reduces the risk of downgrading HTTP connections and eavesdropping attacks. A rollout in stages, starting with a low max-age is recommended. [Learn more about using a strong HSTS policy.](https://developer.chrome.com/docs/lighthouse/best-practices/has-hsts)",
      "score": 1,
      "scoreDisplayMode": "informative",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "description",
            "valueType": "text",
            "subItemsHeading": {
              "key": "description"
            },
            "label": "Description"
          },
          {
            "key": "directive",
            "valueType": "code",
            "subItemsHeading": {
              "key": "directive"
            },
            "label": "Directive"
          },
          {
            "key": "severity",
            "valueType": "text",
            "subItemsHeading": {
              "key": "severity"
            },
            "label": "Severity"
          }
        ],
        "items": [
          {
            "directive": "max-age",
            "description": "`max-age` is too low",
            "severity": "High"
          },
          {
            "directive": "includeSubDomains",
            "description": "No `includeSubDomains` directive found",
            "severity": "Medium"
          },
          {
            "directive": "preload",
            "description": "No `preload` directive found",
            "severity": "Medium"
          }
        ]
      }
    },
    "origin-isolation": {
      "id": "origin-isolation",
      "title": "Ensure proper origin isolation with COOP",
      "description": "The Cross-Origin-Opener-Policy (COOP) can be used to isolate the top-level window from other documents such as pop-ups. [Learn more about deploying the COOP header.](https://web.dev/articles/why-coop-coep#coop)",
      "score": 1,
      "scoreDisplayMode": "informative",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "description",
            "valueType": "text",
            "subItemsHeading": {
              "key": "description"
            },
            "label": "Description"
          },
          {
            "key": "directive",
            "valueType": "code",
            "subItemsHeading": {
              "key": "directive"
            },
            "label": "Directive"
          },
          {
            "key": "severity",
            "valueType": "text",
            "subItemsHeading": {
              "key": "severity"
            },
            "label": "Severity"
          }
        ],
        "items": [
          {
            "description": "No COOP header found",
            "severity": "High"
          }
        ]
      }
    },
    "clickjacking-mitigation": {
      "id": "clickjacking-mitigation",
      "title": "Mitigate clickjacking with XFO or CSP",
      "description": "The `X-Frame-Options` (XFO) header or the `frame-ancestors` directive in the `Content-Security-Policy` (CSP) header control where a page can be embedded. These can mitigate clickjacking attacks by blocking some or all sites from embedding the page. [Learn more about mitigating clickjacking](https://developer.chrome.com/docs/lighthouse/best-practices/clickjacking-mitigation).",
      "score": 1,
      "scoreDisplayMode": "informative",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "description",
            "valueType": "text",
            "subItemsHeading": {
              "key": "description"
            },
            "label": "Description"
          },
          {
            "key": "severity",
            "valueType": "text",
            "subItemsHeading": {
              "key": "severity"
            },
            "label": "Severity"
          }
        ],
        "items": [
          {
            "severity": "High",
            "description": "No frame control policy found"
          }
        ]
      }
    },
    "trusted-types-xss": {
      "id": "trusted-types-xss",
      "title": "Mitigate DOM-based XSS with Trusted Types",
      "description": "The `require-trusted-types-for` directive in the `Content-Security-Policy` (CSP) header instructs user agents to control the data passed to DOM XSS sink functions. [Learn more about mitigating DOM-based XSS with Trusted Types](https://developer.chrome.com/docs/lighthouse/best-practices/trusted-types-xss).",
      "score": 1,
      "scoreDisplayMode": "informative",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "description",
            "valueType": "text",
            "subItemsHeading": {
              "key": "description"
            },
            "label": "Description"
          },
          {
            "key": "severity",
            "valueType": "text",
            "subItemsHeading": {
              "key": "severity"
            },
            "label": "Severity"
          }
        ],
        "items": [
          {
            "severity": "High",
            "description": "No `Content-Security-Policy` header with Trusted Types directive found"
          }
        ]
      }
    },
    "script-treemap-data": {
      "id": "script-treemap-data",
      "title": "Script Treemap Data",
      "description": "Used for treemap app",
      "score": 1,
      "scoreDisplayMode": "informative",
      "details": {
        "type": "treemap-data",
        "nodes": [
          {
            "name": "https://eu.dispatch.com/",
            "resourceBytes": 27253,
            "encodedBytes": 5753,
            "unusedBytes": 10915,
            "children": [
              {
                "name": "(inline) (function() {\n …",
                "resourceBytes": 11602,
                "unusedBytes": 2513
              },
              {
                "name": "(inline) function Optano…",
                "resourceBytes": 29,
                "unusedBytes": 29
              },
              {
                "name": "(inline) // Define Serve…",
                "resourceBytes": 2874,
                "unusedBytes": 268
              },
              {
                "name": "(inline) var _toggleNav;…",
                "resourceBytes": 11344,
                "unusedBytes": 6784
              },
              {
                "name": "(inline) let docAnalytic…",
                "resourceBytes": 156,
                "unusedBytes": 85
              },
              {
                "name": "(inline) function firePr…",
                "resourceBytes": 1248,
                "unusedBytes": 1236
              }
            ]
          },
          {
            "name": "https://polyfill-fastly.io/v2/polyfill.min.js?features=default,fetch,Array.prototype.find,IntersectionObserver,IntersectionObserverEntry,Intl,Intl.~locale.en-US",
            "resourceBytes": 103,
            "encodedBytes": 116,
            "unusedBytes": 0
          },
          {
            "name": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/webcomponentsjs/custom-elements-es5-adapter.js",
            "resourceBytes": 938,
            "encodedBytes": 502,
            "unusedBytes": 0
          },
          {
            "name": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/bundles/section.js",
            "resourceBytes": 335571,
            "encodedBytes": 83693,
            "children": [
              {
                "name": "../../..",
                "resourceBytes": 335506,
                "children": [
                  {
                    "name": "node_modules",
                    "resourceBytes": 147522,
                    "children": [
                      {
                        "name": "lit-html",
                        "resourceBytes": 15109,
                        "children": [
                          {
                            "name": "lib",
                            "resourceBytes": 12373,
                            "children": [
                              {
                                "name": "dom.js",
                                "resourceBytes": 282
                              },
                              {
                                "name": "template.js",
                                "resourceBytes": 1767
                              },
                              {
                                "name": "modify-template.js",
                                "resourceBytes": 932,
                                "unusedBytes": 914
                              },
                              {
                                "name": "directive.js",
                                "resourceBytes": 108
                              },
                              {
                                "name": "part.js",
                                "resourceBytes": 10
                              },
                              {
                                "name": "template-instance.js",
                                "resourceBytes": 955
                              },
                              {
                                "name": "template-result.js",
                                "resourceBytes": 791
                              },
                              {
                                "name": "parts.js",
                                "resourceBytes": 4806,
                                "unusedBytes": 144
                              },
                              {
                                "name": "template-factory.js",
                                "resourceBytes": 343,
                                "unusedBytes": 327
                              },
                              {
                                "name": "render.js",
                                "resourceBytes": 169
                              },
                              {
                                "name": "default-template-processor.js",
                                "resourceBytes": 247
                              },
                              {
                                "name": "shady-render.js",
                                "resourceBytes": 1963,
                                "unusedBytes": 815
                              }
                            ],
                            "unusedBytes": 2200
                          },
                          {
                            "name": "lit-html.js",
                            "resourceBytes": 165
                          },
                          {
                            "name": "directives",
                            "resourceBytes": 2571,
                            "unusedBytes": 670,
                            "children": [
                              {
                                "name": "class-map.js",
                                "resourceBytes": 962,
                                "unusedBytes": 354
                              },
                              {
                                "name": "if-defined.js",
                                "resourceBytes": 214
                              },
                              {
                                "name": "live.js",
                                "resourceBytes": 508
                              },
                              {
                                "name": "style-map.js",
                                "resourceBytes": 539
                              },
                              {
                                "name": "unsafe-html.js",
                                "resourceBytes": 348,
                                "unusedBytes": 316
                              }
                            ]
                          }
                        ],
                        "unusedBytes": 2870
                      },
                      {
                        "name": "lit-element",
                        "resourceBytes": 9575,
                        "unusedBytes": 1309,
                        "children": [
                          {
                            "name": "lib",
                            "resourceBytes": 7774,
                            "unusedBytes": 1180,
                            "children": [
                              {
                                "name": "updating-element.js",
                                "resourceBytes": 5501,
                                "unusedBytes": 366
                              },
                              {
                                "name": "decorators.js",
                                "resourceBytes": 1381,
                                "unusedBytes": 481
                              },
                              {
                                "name": "css-tag.js",
                                "resourceBytes": 892,
                                "unusedBytes": 333
                              }
                            ]
                          },
                          {
                            "name": "lit-element.js",
                            "resourceBytes": 1801,
                            "unusedBytes": 129
                          }
                        ]
                      },
                      {
                        "name": "tslib/tslib.es6.js",
                        "resourceBytes": 852,
                        "unusedBytes": 235
                      },
                      {
                        "name": "@material",
                        "resourceBytes": 87347,
                        "unusedBytes": 12379,
                        "children": [
                          {
                            "name": "mwc-base",
                            "resourceBytes": 1320,
                            "unusedBytes": 325,
                            "children": [
                              {
                                "name": "utils.js",
                                "resourceBytes": 239,
                                "unusedBytes": 81
                              },
                              {
                                "name": "base-element.js",
                                "resourceBytes": 259
                              },
                              {
                                "name": "form-element.js",
                                "resourceBytes": 385,
                                "unusedBytes": 204
                              },
                              {
                                "name": "observer.js",
                                "resourceBytes": 437,
                                "unusedBytes": 40
                              }
                            ]
                          },
                          {
                            "name": "base/foundation.js",
                            "resourceBytes": 519,
                            "unusedBytes": 104
                          },
                          {
                            "name": "notched-outline",
                            "resourceBytes": 1138,
                            "children": [
                              {
                                "name": "constants.js",
                                "resourceBytes": 229
                              },
                              {
                                "name": "foundation.js",
                                "resourceBytes": 909,
                                "unusedBytes": 531
                              }
                            ],
                            "unusedBytes": 531
                          },
                          {
                            "name": "mwc-notched-outline",
                            "resourceBytes": 4347,
                            "unusedBytes": 817,
                            "children": [
                              {
                                "name": "mwc-notched-outline-base.js",
                                "resourceBytes": 1091,
                                "unusedBytes": 817
                              },
                              {
                                "name": "mwc-notched-outline-css.js",
                                "resourceBytes": 3183
                              },
                              {
                                "name": "mwc-notched-outline.js",
                                "resourceBytes": 73
                              }
                            ]
                          },
                          {
                            "name": "floating-label",
                            "resourceBytes": 1542,
                            "children": [
                              {
                                "name": "constants.js",
                                "resourceBytes": 173
                              },
                              {
                                "name": "foundation.js",
                                "resourceBytes": 1369,
                                "unusedBytes": 1016
                              }
                            ],
                            "unusedBytes": 1016
                          },
                          {
                            "name": "mwc-floating-label/mwc-floating-label-directive.js",
                            "resourceBytes": 425,
                            "unusedBytes": 397
                          },
                          {
                            "name": "line-ripple",
                            "resourceBytes": 1429,
                            "children": [
                              {
                                "name": "constants.js",
                                "resourceBytes": 111
                              },
                              {
                                "name": "foundation.js",
                                "resourceBytes": 1318,
                                "unusedBytes": 680
                              }
                            ],
                            "unusedBytes": 680
                          },
                          {
                            "name": "mwc-line-ripple/mwc-line-ripple-directive.js",
                            "resourceBytes": 440,
                            "unusedBytes": 137
                          },
                          {
                            "name": "textfield",
                            "resourceBytes": 9541,
                            "children": [
                              {
                                "name": "constants.js",
                                "resourceBytes": 1001
                              },
                              {
                                "name": "foundation.js",
                                "resourceBytes": 8540,
                                "unusedBytes": 4735
                              }
                            ],
                            "unusedBytes": 4735
                          },
                          {
                            "name": "mwc-textfield",
                            "resourceBytes": 54616,
                            "unusedBytes": 3213,
                            "children": [
                              {
                                "name": "mwc-textfield-base.js",
                                "resourceBytes": 10901,
                                "unusedBytes": 3213
                              },
                              {
                                "name": "mwc-textfield-css.js",
                                "resourceBytes": 43648
                              },
                              {
                                "name": "mwc-textfield.js",
                                "resourceBytes": 67
                              }
                            ]
                          },
                          {
                            "name": "animation/util.js",
                            "resourceBytes": 421
                          },
                          {
                            "name": "linear-progress",
                            "resourceBytes": 2823,
                            "children": [
                              {
                                "name": "constants.js",
                                "resourceBytes": 327
                              },
                              {
                                "name": "foundation.js",
                                "resourceBytes": 2496,
                                "unusedBytes": 340
                              }
                            ],
                            "unusedBytes": 340
                          },
                          {
                            "name": "mwc-linear-progress",
                            "resourceBytes": 8786,
                            "unusedBytes": 84,
                            "children": [
                              {
                                "name": "mwc-linear-progress-base.js",
                                "resourceBytes": 2244,
                                "unusedBytes": 84
                              },
                              {
                                "name": "mwc-linear-progress-css.js",
                                "resourceBytes": 6465
                              },
                              {
                                "name": "mwc-linear-progress.js",
                                "resourceBytes": 77
                              }
                            ]
                          }
                        ]
                      },
                      {
                        "name": "@glidejs/glide/dist/glide.esm.js",
                        "resourceBytes": 27383,
                        "unusedBytes": 24432
                      },
                      {
                        "name": "@polymer/lit-element",
                        "resourceBytes": 7256,
                        "unusedBytes": 943,
                        "children": [
                          {
                            "name": "lib",
                            "resourceBytes": 5963,
                            "unusedBytes": 772,
                            "children": [
                              {
                                "name": "updating-element.js",
                                "resourceBytes": 5629,
                                "unusedBytes": 728
                              },
                              {
                                "name": "decorators.js",
                                "resourceBytes": 289,
                                "unusedBytes": 44
                              },
                              {
                                "name": "css-tag.js",
                                "resourceBytes": 45
                              }
                            ]
                          },
                          {
                            "name": "lit-element.js",
                            "resourceBytes": 1293,
                            "unusedBytes": 171
                          }
                        ]
                      }
                    ],
                    "unusedBytes": 42168
                  },
                  {
                    "name": "elements-lit",
                    "resourceBytes": 187984,
                    "unusedBytes": 101986,
                    "children": [
                      {
                        "name": "alerts",
                        "resourceBytes": 15919,
                        "unusedBytes": 11799,
                        "children": [
                          {
                            "name": "alerts-atoms/alerts-atoms.js",
                            "resourceBytes": 2353,
                            "unusedBytes": 380
                          },
                          {
                            "name": "alerts-banner/alerts-banner.js",
                            "resourceBytes": 3260,
                            "unusedBytes": 2893
                          },
                          {
                            "name": "alerts-manager/alerts-manager.js",
                            "resourceBytes": 4470,
                            "unusedBytes": 2974
                          },
                          {
                            "name": "alerts-ad-free-modal/alerts-ad-free-modal.js",
                            "resourceBytes": 1546,
                            "unusedBytes": 1441
                          },
                          {
                            "name": "alerts-cc-decline-modal/alerts-cc-decline-modal.js",
                            "resourceBytes": 4290,
                            "unusedBytes": 4111
                          }
                        ]
                      },
                      {
                        "name": "util",
                        "resourceBytes": 12585,
                        "unusedBytes": 5322,
                        "children": [
                          {
                            "name": "util-lit/util-lit.js",
                            "resourceBytes": 612,
                            "unusedBytes": 351
                          },
                          {
                            "name": "util-analytics/util-analytics.js",
                            "resourceBytes": 3850,
                            "unusedBytes": 2846
                          },
                          {
                            "name": "util-pcs/util-pcs.js",
                            "resourceBytes": 3735
                          },
                          {
                            "name": "util-shared-analytics/util-shared-analytics.js",
                            "resourceBytes": 44,
                            "unusedBytes": 44
                          },
                          {
                            "name": "util-modal/util-modal.js",
                            "resourceBytes": 504,
                            "unusedBytes": 259
                          },
                          {
                            "name": "util-page-reload/util-page-reload.js",
                            "resourceBytes": 816,
                            "unusedBytes": 421
                          },
                          {
                            "name": "util-section-color/util-section-color.js",
                            "resourceBytes": 939,
                            "unusedBytes": 344
                          },
                          {
                            "name": "util-sticky-module/util-sticky-module.js",
                            "resourceBytes": 641
                          },
                          {
                            "name": "util-user-subscription-manager/util-user-subscription-manager.js",
                            "resourceBytes": 1444,
                            "unusedBytes": 1057
                          }
                        ]
                      },
                      {
                        "name": "ui",
                        "resourceBytes": 5473,
                        "children": [
                          {
                            "name": "ui-icon/ui-icon.js",
                            "resourceBytes": 2969
                          },
                          {
                            "name": "ui-label-bucket/ui-label-bucket.js",
                            "resourceBytes": 2504
                          }
                        ]
                      },
                      {
                        "name": "cta",
                        "resourceBytes": 3968,
                        "children": [
                          {
                            "name": "cta-atoms-container-aux/cta-atoms-container-aux.js",
                            "resourceBytes": 206
                          },
                          {
                            "name": "cta-atoms-container-inline/cta-atoms-container-inline.js",
                            "resourceBytes": 403,
                            "unusedBytes": 292
                          },
                          {
                            "name": "cta-atoms-container-inline-roadblock/cta-atoms-container-inline-roadblock.js",
                            "resourceBytes": 406,
                            "unusedBytes": 285
                          },
                          {
                            "name": "cta-atoms-container-post-content/cta-atoms-container-post-content.js",
                            "resourceBytes": 215,
                            "unusedBytes": 98
                          },
                          {
                            "name": "cta-generic-text/cta-generic-text.js",
                            "resourceBytes": 2738,
                            "unusedBytes": 2560
                          }
                        ],
                        "unusedBytes": 3235
                      },
                      {
                        "name": "nav",
                        "resourceBytes": 40585,
                        "unusedBytes": 26091,
                        "children": [
                          {
                            "name": "nav-global-login/nav-global-login.js",
                            "resourceBytes": 5812,
                            "unusedBytes": 5308
                          },
                          {
                            "name": "nav-global-login-piano/nav-global-login-piano.js",
                            "resourceBytes": 6300,
                            "unusedBytes": 5790
                          },
                          {
                            "name": "nav-tree/nav-tree.js",
                            "resourceBytes": 5831,
                            "unusedBytes": 1426
                          },
                          {
                            "name": "nav-promo-item/nav-promo-item.js",
                            "resourceBytes": 1810
                          },
                          {
                            "name": "nav-hub/nav-hub.js",
                            "resourceBytes": 2980,
                            "unusedBytes": 203
                          },
                          {
                            "name": "nav-manager/nav-manager.js",
                            "resourceBytes": 3617,
                            "unusedBytes": 2713
                          },
                          {
                            "name": "nav-search-bar/nav-search-bar.js",
                            "resourceBytes": 1171,
                            "unusedBytes": 322
                          },
                          {
                            "name": "nav-sense-of-place/nav-sense-of-place.js",
                            "resourceBytes": 2989,
                            "unusedBytes": 2674
                          },
                          {
                            "name": "nav-search-bucket/nav-search-bucket.js",
                            "resourceBytes": 2935,
                            "unusedBytes": 778
                          },
                          {
                            "name": "nav-share-buttons/nav-share-buttons.js",
                            "resourceBytes": 7140,
                            "unusedBytes": 6877
                          }
                        ]
                      },
                      {
                        "name": "media/media-badge/media-badge.js",
                        "resourceBytes": 1468
                      },
                      {
                        "name": "promo",
                        "resourceBytes": 39642,
                        "unusedBytes": 20230,
                        "children": [
                          {
                            "name": "promo-story-card/promo-story-card.js",
                            "resourceBytes": 11606,
                            "unusedBytes": 3179
                          },
                          {
                            "name": "promo-story-thumb-large/promo-story-thumb-large.js",
                            "resourceBytes": 4619
                          },
                          {
                            "name": "promo-story-bucket-short/promo-story-bucket-short.js",
                            "resourceBytes": 5568,
                            "unusedBytes": 1143
                          },
                          {
                            "name": "lit-carousel-card/lit-carousel-card.js",
                            "resourceBytes": 4308,
                            "unusedBytes": 3474
                          },
                          {
                            "name": "lit-story-carousel/lit-story-carousel.js",
                            "resourceBytes": 3967,
                            "unusedBytes": 3419
                          },
                          {
                            "name": "promo-story-thumb-small/promo-story-thumb-small.js",
                            "resourceBytes": 7156,
                            "unusedBytes": 6922
                          },
                          {
                            "name": "promo-story-bucket/promo-story-bucket.js",
                            "resourceBytes": 2418,
                            "unusedBytes": 2093
                          }
                        ]
                      },
                      {
                        "name": "story/story-timestamp/story-timestamp.js",
                        "resourceBytes": 2086,
                        "unusedBytes": 493
                      },
                      {
                        "name": "partner",
                        "resourceBytes": 66258,
                        "unusedBytes": 34816,
                        "children": [
                          {
                            "name": "partner-slot/partner-slot.js",
                            "resourceBytes": 22965,
                            "unusedBytes": 9159
                          },
                          {
                            "name": "partner-bid/partner-bid.js",
                            "resourceBytes": 10311,
                            "unusedBytes": 3116
                          },
                          {
                            "name": "partner-banner/partner-banner.js",
                            "resourceBytes": 1302
                          },
                          {
                            "name": "partner-branded-content-tile/partner-branded-content-tile.js",
                            "resourceBytes": 740
                          },
                          {
                            "name": "partner-feedback/partner-feedback.js",
                            "resourceBytes": 660,
                            "unusedBytes": 599
                          },
                          {
                            "name": "partner-flipp/partner-flipp.js",
                            "resourceBytes": 2474,
                            "unusedBytes": 2407
                          },
                          {
                            "name": "partner-gci-analytics/partner-gci-analytics.js",
                            "resourceBytes": 10118,
                            "unusedBytes": 9784
                          },
                          {
                            "name": "partner-high-impact/partner-high-impact.js",
                            "resourceBytes": 1422,
                            "unusedBytes": 190
                          },
                          {
                            "name": "partner-inline/partner-inline.js",
                            "resourceBytes": 1354,
                            "unusedBytes": 134
                          },
                          {
                            "name": "partner-leaderboard/partner-leaderboard.js",
                            "resourceBytes": 1062
                          },
                          {
                            "name": "partner-piano/partner-piano.js",
                            "resourceBytes": 3863,
                            "unusedBytes": 3721
                          },
                          {
                            "name": "partner-poster/partner-poster.js",
                            "resourceBytes": 685
                          },
                          {
                            "name": "partner-posterscroll/partner-posterscroll.js",
                            "resourceBytes": 2496,
                            "unusedBytes": 757
                          },
                          {
                            "name": "partner-recommendations/partner-recommendations.js",
                            "resourceBytes": 2040,
                            "unusedBytes": 1049
                          },
                          {
                            "name": "partner-sponsor-logo/partner-sponsor-logo.js",
                            "resourceBytes": 805,
                            "unusedBytes": 257
                          },
                          {
                            "name": "partner-admiral/partner-admiral.js",
                            "resourceBytes": 812,
                            "unusedBytes": 743
                          },
                          {
                            "name": "partner-contest-bucket/partner-contest-bucket.js",
                            "resourceBytes": 3149,
                            "unusedBytes": 2900
                          }
                        ]
                      }
                    ]
                  }
                ],
                "unusedBytes": 144154
              },
              {
                "name": "(unmapped)",
                "resourceBytes": 65
              }
            ],
            "unusedBytes": 144154
          },
          {
            "name": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/webcomponentsjs/webcomponents-loader.js",
            "resourceBytes": 3664,
            "encodedBytes": 1533,
            "unusedBytes": 305
          },
          {
            "name": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/scripts/gallium.js",
            "resourceBytes": 11823,
            "encodedBytes": 3572,
            "unusedBytes": 5024
          },
          {
            "name": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/scripts/partner.js",
            "resourceBytes": 78889,
            "encodedBytes": 17664,
            "unusedBytes": 75426
          },
          {
            "name": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/scripts/utils.js",
            "resourceBytes": 18995,
            "encodedBytes": 5322,
            "unusedBytes": 12071
          },
          {
            "name": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/webcomponentsjs/webcomponents-hi.js",
            "resourceBytes": 10912,
            "encodedBytes": 3659,
            "unusedBytes": 840
          },
          {
            "name": "https://atoms.dispatch.com/atoms-library/prod/dist/gannett-atoms-library.js",
            "resourceBytes": 58540,
            "encodedBytes": 16036,
            "unusedBytes": 39202,
            "children": [
              {
                "name": "webpack:/atoms-library",
                "resourceBytes": 58269,
                "unusedBytes": 39202,
                "children": [
                  {
                    "name": ".",
                    "resourceBytes": 57974,
                    "unusedBytes": 39058,
                    "children": [
                      {
                        "name": "src",
                        "resourceBytes": 34512,
                        "unusedBytes": 21390,
                        "children": [
                          {
                            "name": "api/api.js",
                            "resourceBytes": 762,
                            "unusedBytes": 34
                          },
                          {
                            "name": "cookies",
                            "resourceBytes": 6658,
                            "unusedBytes": 5185,
                            "children": [
                              {
                                "name": "gnt_atoms_rate/gnt_atoms_rate.js",
                                "resourceBytes": 3855,
                                "unusedBytes": 3026
                              },
                              {
                                "name": "gnt_cec/gnt_cec.js",
                                "resourceBytes": 645,
                                "unusedBytes": 433
                              },
                              {
                                "name": "gnt_region/gnt_region.js",
                                "resourceBytes": 949,
                                "unusedBytes": 738
                              },
                              {
                                "name": "gup_lng/gup_lng.js",
                                "resourceBytes": 1209,
                                "unusedBytes": 988
                              }
                            ]
                          },
                          {
                            "name": "journey/journey.js",
                            "resourceBytes": 2595,
                            "unusedBytes": 830
                          },
                          {
                            "name": "module",
                            "resourceBytes": 16947,
                            "unusedBytes": 13233,
                            "children": [
                              {
                                "name": "components",
                                "resourceBytes": 1794,
                                "unusedBytes": 1401,
                                "children": [
                                  {
                                    "name": "component.js",
                                    "resourceBytes": 509,
                                    "unusedBytes": 331
                                  },
                                  {
                                    "name": "library.js",
                                    "resourceBytes": 1285,
                                    "unusedBytes": 1070
                                  }
                                ]
                              },
                              {
                                "name": "links/link.js",
                                "resourceBytes": 4223,
                                "unusedBytes": 3913
                              },
                              {
                                "name": "module.js",
                                "resourceBytes": 6643,
                                "unusedBytes": 5685
                              },
                              {
                                "name": "types",
                                "resourceBytes": 2992,
                                "unusedBytes": 2234,
                                "children": [
                                  {
                                    "name": "bar/bar.js",
                                    "resourceBytes": 1234,
                                    "unusedBytes": 941
                                  },
                                  {
                                    "name": "modal/modal.js",
                                    "resourceBytes": 1253,
                                    "unusedBytes": 960
                                  },
                                  {
                                    "name": "target/target.js",
                                    "resourceBytes": 505,
                                    "unusedBytes": 333
                                  }
                                ]
                              },
                              {
                                "name": "user/user.js",
                                "resourceBytes": 1295
                              }
                            ]
                          },
                          {
                            "name": "setup/setup.js",
                            "resourceBytes": 3294
                          },
                          {
                            "name": "utils/utils.js",
                            "resourceBytes": 2129,
                            "unusedBytes": 1068
                          },
                          {
                            "name": "index.js",
                            "resourceBytes": 2127,
                            "unusedBytes": 1040
                          }
                        ]
                      },
                      {
                        "name": "node_modules",
                        "resourceBytes": 23462,
                        "children": [
                          {
                            "name": "@babel/runtime",
                            "resourceBytes": 9638,
                            "children": [
                              {
                                "name": "helpers",
                                "resourceBytes": 9473,
                                "children": [
                                  {
                                    "name": "arrayLikeToArray.js",
                                    "resourceBytes": 182
                                  },
                                  {
                                    "name": "arrayWithoutHoles.js",
                                    "resourceBytes": 129
                                  },
                                  {
                                    "name": "asyncToGenerator.js",
                                    "resourceBytes": 386,
                                    "unusedBytes": 294
                                  },
                                  {
                                    "name": "classCallCheck.js",
                                    "resourceBytes": 164
                                  },
                                  {
                                    "name": "createClass.js",
                                    "resourceBytes": 344
                                  },
                                  {
                                    "name": "defineProperty.js",
                                    "resourceBytes": 190,
                                    "unusedBytes": 118
                                  },
                                  {
                                    "name": "interopRequireDefault.js",
                                    "resourceBytes": 121
                                  },
                                  {
                                    "name": "iterableToArray.js",
                                    "resourceBytes": 184,
                                    "unusedBytes": 112
                                  },
                                  {
                                    "name": "nonIterableSpread.js",
                                    "resourceBytes": 244,
                                    "unusedBytes": 167
                                  },
                                  {
                                    "name": "regeneratorRuntime.js",
                                    "resourceBytes": 6630,
                                    "unusedBytes": 5205
                                  },
                                  {
                                    "name": "toConsumableArray.js",
                                    "resourceBytes": 153
                                  },
                                  {
                                    "name": "typeof.js",
                                    "resourceBytes": 371,
                                    "unusedBytes": 112
                                  },
                                  {
                                    "name": "unsupportedIterableToArray.js",
                                    "resourceBytes": 375,
                                    "unusedBytes": 284
                                  }
                                ],
                                "unusedBytes": 6292
                              },
                              {
                                "name": "regenerator/index.js",
                                "resourceBytes": 165
                              }
                            ],
                            "unusedBytes": 6292
                          },
                          {
                            "name": "@ungap/url-search-params/esm/index.js",
                            "resourceBytes": 4397,
                            "unusedBytes": 3368
                          },
                          {
                            "name": "whatwg-fetch/fetch.js",
                            "resourceBytes": 8953,
                            "unusedBytes": 7699
                          },
                          {
                            "name": "polyfill-array-includes/index.js",
                            "resourceBytes": 474,
                            "unusedBytes": 309
                          }
                        ],
                        "unusedBytes": 17668
                      }
                    ]
                  },
                  {
                    "name": "webpack",
                    "resourceBytes": 295,
                    "children": [
                      {
                        "name": "bootstrap",
                        "resourceBytes": 122
                      },
                      {
                        "name": "runtime",
                        "resourceBytes": 173,
                        "unusedBytes": 144,
                        "children": [
                          {
                            "name": "define property getters",
                            "resourceBytes": 101,
                            "unusedBytes": 96
                          },
                          {
                            "name": "hasOwnProperty shorthand",
                            "resourceBytes": 72,
                            "unusedBytes": 48
                          }
                        ]
                      }
                    ],
                    "unusedBytes": 144
                  }
                ]
              },
              {
                "name": "(unmapped)",
                "resourceBytes": 271
              }
            ]
          },
          {
            "name": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/shadycss/custom-style-interface.min.js",
            "resourceBytes": 3075,
            "encodedBytes": 1355,
            "unusedBytes": 429
          },
          {
            "name": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3Bvar%20userPolymer%3Dwindow.Polymer%3B%2F**%0A%20%20%20*%20%40namespace%20Polymer%0A%20%20%20*%20%40summary%20Polymer%20is%20a%20lightweight%20library%20built%20on%20top%20of%20the%20web%0A%20%20%20*%20%20%20standards-based%20Web%20Components%20API's%2C%20and%20makes%20it%20easy%20to%20build%20your%0A%20%20%20*%20%20%20own%20custom%20HTML%20elements.%0A%20%20%20*%20%40param%20%7B!PolymerInit%7D%20info%20Prototype%20for%20the%20custom%20element.%20It%20must%20contain%0A%20%20%20*%20%20%20an%20%60is%60%20property%20to%20specify%20the%20element%20name.%20Other%20properties%20populate%0A%20%20%20*%20%20%20the%20element%20prototype.%20The%20%60properties%60%2C%20%60observers%60%2C%20%60hostAttributes%60%2C%0A%20%20%20*%20%20%20and%20%60listeners%60%20properties%20are%20processed%20to%20create%20element%20features.%0A%20%20%20*%20%40return%20%7B!Object%7D%20Returns%20a%20custom%20element%20class%20for%20the%20given%20provided%0A%20%20%20*%20%20%20prototype%20%60info%60%20object.%20The%20name%20of%20the%20element%20if%20given%20by%20%60info.is%60.%0A%20%20%20*%2Fwindow.Polymer%3Dfunction(info)%7Breturn%20window.Polymer._polymerFn(info)%3B%7D%3B%2F%2F%20support%20user%20settings%20on%20the%20Polymer%20object%0Aif(userPolymer)%7BObject.assign(Polymer%2CuserPolymer)%3B%7D%2F%2F%20To%20be%20plugged%20by%20legacy%20implementation%20if%20loaded%0A%2F*%20eslint-disable%20valid-jsdoc%20*%2F%2F**%0A%20%20%20*%20%40param%20%7B!PolymerInit%7D%20info%20Prototype%20for%20the%20custom%20element.%20It%20must%20contain%0A%20%20%20*%20%20%20an%20%60is%60%20property%20to%20specify%20the%20element%20name.%20Other%20properties%20populate%0A%20%20%20*%20%20%20the%20element%20prototype.%20The%20%60properties%60%2C%20%60observers%60%2C%20%60hostAttributes%60%2C%0A%20%20%20*%20%20%20and%20%60listeners%60%20properties%20are%20processed%20to%20create%20element%20features.%0A%20%20%20*%20%40return%20%7B!Object%7D%20Returns%20a%20custom%20element%20class%20for%20the%20given%20provided%0A%20%20%20*%20%20%20prototype%20%60info%60%20object.%20The%20name%20of%20the%20element%20if%20given%20by%20%60info.is%60.%0A%20%20%20*%2Fwindow.Polymer._polymerFn%3Dfunction(info)%7B%2F%2F%20eslint-disable-line%20no-unused-vars%0Athrow%20new%20Error('Load%20polymer.html%20to%20use%20the%20Polymer()%20function.')%3B%7D%3B%2F*%20eslint-enable%20*%2Fwindow.Polymer.version%3D'2.7.0'%3B%2F*%20eslint-disable%20no-unused-vars%20*%2F%2F*%0A%20%20When%20using%20Closure%20Compiler%2C%20JSCompiler_renameProperty(property%2C%20object)%20is%20replaced%20by%20the%20munged%20name%20for%20object%5Bproperty%5D%0A%20%20We%20cannot%20alias%20this%20function%2C%20so%20we%20have%20to%20use%20a%20small%20shim%20that%20has%20the%20same%20behavior%20when%20not%20compiling.%0A%20%20*%2Fwindow.JSCompiler_renameProperty%3Dfunction(prop%2Cobj)%7Breturn%20prop%3B%7D%3B%2F*%20eslint-enable%20*%2F%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Fboot.html.js%0A",
            "resourceBytes": 2183,
            "encodedBytes": 0,
            "unusedBytes": 177
          },
          {
            "name": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3Bvar%20CSS_URL_RX%3D%2F(url%5C()(%5B%5E)%5D*)(%5C))%2Fg%3Bvar%20ABS_URL%3D%2F(%5E%5C%2F)%7C(%5E%23)%7C(%5E%5B%5Cw-%5Cd%5D*%3A)%2F%3Bvar%20workingURL%3Dvoid%200%3Bvar%20resolveDoc%3Dvoid%200%3B%2F**%0A%20%20%20%20%20*%20Resolves%20the%20given%20URL%20against%20the%20provided%20%60baseUri'.%0A%20%20%20%20%20*%20%0A%20%20%20%20%20*%20Note%20that%20this%20function%20performs%20no%20resolution%20for%20URLs%20that%20start%0A%20%20%20%20%20*%20with%20%60%2F%60%20(absolute%20URLs)%20or%20%60%23%60%20(hash%20identifiers).%20%20For%20general%20purpose%0A%20%20%20%20%20*%20URL%20resolution%2C%20use%20%60window.URL%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.ResolveUrl%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20url%20Input%20URL%20to%20resolve%0A%20%20%20%20%20*%20%40param%20%7B%3Fstring%3D%7D%20baseURI%20Base%20URI%20to%20resolve%20the%20URL%20against%0A%20%20%20%20%20*%20%40return%20%7Bstring%7D%20resolved%20URL%0A%20%20%20%20%20*%2Ffunction%20resolveUrl(url%2CbaseURI)%7Bif(url%26%26ABS_URL.test(url))%7Breturn%20url%3B%7D%2F%2F%20Lazy%20feature%20detection.%0Aif(workingURL%3D%3D%3Dundefined)%7BworkingURL%3Dfalse%3Btry%7Bvar%20u%3Dnew%20URL('b'%2C'http%3A%2F%2Fa')%3Bu.pathname%3D'c%2520d'%3BworkingURL%3Du.href%3D%3D%3D'http%3A%2F%2Fa%2Fc%2520d'%3B%7Dcatch(e)%7B%2F%2F%20silently%20fail%0A%7D%7Dif(!baseURI)%7BbaseURI%3Ddocument.baseURI%7C%7Cwindow.location.href%3B%7Dif(workingURL)%7Breturn%20new%20URL(url%2CbaseURI).href%3B%7D%2F%2F%20Fallback%20to%20creating%20an%20anchor%20into%20a%20disconnected%20document.%0Aif(!resolveDoc)%7BresolveDoc%3Ddocument.implementation.createHTMLDocument('temp')%3BresolveDoc.base%3DresolveDoc.createElement('base')%3BresolveDoc.head.appendChild(resolveDoc.base)%3BresolveDoc.anchor%3DresolveDoc.createElement('a')%3BresolveDoc.body.appendChild(resolveDoc.anchor)%3B%7DresolveDoc.base.href%3DbaseURI%3BresolveDoc.anchor.href%3Durl%3Breturn%20resolveDoc.anchor.href%7C%7Curl%3B%7D%2F**%0A%20%20%20%20%20*%20Resolves%20any%20relative%20URL's%20in%20the%20given%20CSS%20text%20against%20the%20provided%0A%20%20%20%20%20*%20%60ownerDocument%60's%20%60baseURI%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.ResolveUrl%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20cssText%20CSS%20text%20to%20process%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20baseURI%20Base%20URI%20to%20resolve%20the%20URL%20against%0A%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Processed%20CSS%20text%20with%20resolved%20URL's%0A%20%20%20%20%20*%2Ffunction%20resolveCss(cssText%2CbaseURI)%7Breturn%20cssText.replace(CSS_URL_RX%2Cfunction(m%2Cpre%2Curl%2Cpost)%7Breturn%20pre%2B'%5C''%2BresolveUrl(url.replace(%2F%5B%22'%5D%2Fg%2C'')%2CbaseURI)%2B'%5C''%2Bpost%3B%7D)%3B%7D%2F**%0A%20%20%20%20%20*%20Returns%20a%20path%20from%20a%20given%20%60url%60.%20The%20path%20includes%20the%20trailing%0A%20%20%20%20%20*%20%60%2F%60%20from%20the%20url.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.ResolveUrl%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20url%20Input%20URL%20to%20transform%0A%20%20%20%20%20*%20%40return%20%7Bstring%7D%20resolved%20path%0A%20%20%20%20%20*%2Ffunction%20pathFromUrl(url)%7Breturn%20url.substring(0%2Curl.lastIndexOf('%2F')%2B1)%3B%7D%2F**%0A%20%20%20%20%20*%20Module%20with%20utilities%20for%20resolving%20relative%20URL's.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40namespace%0A%20%20%20%20%20*%20%40memberof%20Polymer%0A%20%20%20%20%20*%20%40summary%20Module%20with%20utilities%20for%20resolving%20relative%20URL's.%0A%20%20%20%20%20*%2FPolymer.ResolveUrl%3D%7BresolveCss%3AresolveCss%2CresolveUrl%3AresolveUrl%2CpathFromUrl%3ApathFromUrl%7D%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Fresolve-url.html.js%0A",
            "resourceBytes": 2672,
            "encodedBytes": 0,
            "unusedBytes": 966
          },
          {
            "name": "data:text/javascript;charset=utf-8,function%20_toConsumableArray(arr)%7Bif(Array.isArray(arr))%7Bfor(var%20i%3D0%2Carr2%3DArray(arr.length)%3Bi%3Carr.length%3Bi%2B%2B)%7Barr2%5Bi%5D%3Darr%5Bi%5D%3B%7Dreturn%20arr2%3B%7Delse%7Breturn%20Array.from(arr)%3B%7D%7D(function()%7B'use%20strict'%3Bvar%20MODULE_STYLE_LINK_SELECTOR%3D'link%5Brel%3Dimport%5D%5Btype~%3Dcss%5D'%3Bvar%20INCLUDE_ATTR%3D'include'%3Bvar%20SHADY_UNSCOPED_ATTR%3D'shady-unscoped'%3Bfunction%20importModule(moduleId)%7Bvar%2F**%20Polymer.DomModule%20*%2FPolymerDomModule%3DcustomElements.get('dom-module')%3Bif(!PolymerDomModule)%7Breturn%20null%3B%7Dreturn%20PolymerDomModule.import(moduleId)%3B%7Dfunction%20styleForImport(importDoc)%7B%2F%2F%20NOTE%3A%20polyfill%20affordance.%0A%2F%2F%20under%20the%20HTMLImports%20polyfill%2C%20there%20will%20be%20no%20'body'%2C%0A%2F%2F%20but%20the%20import%20pseudo-doc%20can%20be%20used%20directly.%0Avar%20container%3DimportDoc.body%3FimportDoc.body%3AimportDoc%3Bvar%20importCss%3DPolymer.ResolveUrl.resolveCss(container.textContent%2CimportDoc.baseURI)%3Bvar%20style%3Ddocument.createElement('style')%3Bstyle.textContent%3DimportCss%3Breturn%20style%3B%7D%2F**%20%40typedef%20%7B%7Bassetpath%3A%20string%7D%7D%20*%2Fvar%20templateWithAssetPath%3Dvoid%200%3B%2F%2F%20eslint-disable-line%20no-unused-vars%0A%2F**%0A%20%20%20*%20Module%20with%20utilities%20for%20collection%20CSS%20text%20from%20%60%3Ctemplates%3E%60%2C%20external%0A%20%20%20*%20stylesheets%2C%20and%20%60dom-module%60s.%0A%20%20%20*%0A%20%20%20*%20%40namespace%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Module%20with%20utilities%20for%20collection%20CSS%20text%20from%20various%20sources.%0A%20%20%20*%2Fvar%20StyleGather%3D%7B%2F**%0A%20%20%20%20%20*%20Returns%20a%20list%20of%20%3Cstyle%3E%20elements%20in%20a%20space-separated%20list%20of%20%60dom-module%60s.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.StyleGather%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20moduleIds%20List%20of%20dom-module%20id's%20within%20which%20to%0A%20%20%20%20%20*%20search%20for%20css.%0A%20%20%20%20%20*%20%40return%20%7B!Array%3C!HTMLStyleElement%3E%7D%20Array%20of%20contained%20%3Cstyle%3E%20elements%0A%20%20%20%20%20*%20%40this%20%7BStyleGather%7D%0A%20%20%20%20%20*%2FstylesFromModules%3Afunction%20stylesFromModules(moduleIds)%7Bvar%20modules%3DmoduleIds.trim().split(%2F%5Cs%2B%2F)%3Bvar%20styles%3D%5B%5D%3Bfor(var%20i%3D0%3Bi%3Cmodules.length%3Bi%2B%2B)%7Bstyles.push.apply(styles%2C_toConsumableArray(this.stylesFromModule(modules%5Bi%5D)))%3B%7Dreturn%20styles%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Returns%20a%20list%20of%20%3Cstyle%3E%20elements%20in%20a%20given%20%60dom-module%60.%0A%20%20%20%20%20*%20Styles%20in%20a%20%60dom-module%60%20can%20come%20either%20from%20%60%3Cstyle%3E%60s%20within%20the%0A%20%20%20%20%20*%20first%20%60%3Ctemplate%3E%60%2C%20or%20else%20from%20one%20or%20more%0A%20%20%20%20%20*%20%60%3Clink%20rel%3D%22import%22%20type%3D%22css%22%3E%60%20links%20outside%20the%20template.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.StyleGather%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20moduleId%20dom-module%20id%20to%20gather%20styles%20from%0A%20%20%20%20%20*%20%40return%20%7B!Array%3C!HTMLStyleElement%3E%7D%20Array%20of%20contained%20styles.%0A%20%20%20%20%20*%20%40this%20%7BStyleGather%7D%0A%20%20%20%20%20*%2FstylesFromModule%3Afunction%20stylesFromModule(moduleId)%7Bvar%20m%3DimportModule(moduleId)%3Bif(!m)%7Bconsole.warn('Could%20not%20find%20style%20data%20in%20module%20named'%2CmoduleId)%3Breturn%5B%5D%3B%7Dif(m._styles%3D%3D%3Dundefined)%7Bvar%20styles%3D%5B%5D%3B%2F%2F%20module%20imports%3A%20%3Clink%20rel%3D%22import%22%20type%3D%22css%22%3E%0Astyles.push.apply(styles%2C_toConsumableArray(this._stylesFromModuleImports(m)))%3B%2F%2F%20include%20css%20from%20the%20first%20template%20in%20the%20module%0Avar%20template%3Dm.querySelector('template')%3Bif(template)%7Bstyles.push.apply(styles%2C_toConsumableArray(this.stylesFromTemplate(template%2C%2F**%20%40type%20%7BtemplateWithAssetPath%7D%20*%2Fm.assetpath)))%3B%7Dm._styles%3Dstyles%3B%7Dreturn%20m._styles%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Returns%20the%20%60%3Cstyle%3E%60%20elements%20within%20a%20given%20template.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.StyleGather%0A%20%20%20%20%20*%20%40param%20%7B!HTMLTemplateElement%7D%20template%20Template%20to%20gather%20styles%20from%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20baseURI%20baseURI%20for%20style%20content%0A%20%20%20%20%20*%20%40return%20%7B!Array%3C!HTMLStyleElement%3E%7D%20Array%20of%20styles%0A%20%20%20%20%20*%20%40this%20%7BStyleGather%7D%0A%20%20%20%20%20*%2FstylesFromTemplate%3Afunction%20stylesFromTemplate(template%2CbaseURI)%7Bif(!template._styles)%7Bvar%20styles%3D%5B%5D%3B%2F%2F%20if%20element%20is%20a%20template%2C%20get%20content%20from%20its%20.content%0Avar%20e%24%3Dtemplate.content.querySelectorAll('style')%3Bfor(var%20i%3D0%3Bi%3Ce%24.length%3Bi%2B%2B)%7Bvar%20e%3De%24%5Bi%5D%3B%2F%2F%20support%20style%20sharing%20by%20allowing%20styles%20to%20%22include%22%0A%2F%2F%20other%20dom-modules%20that%20contain%20styling%0Avar%20include%3De.getAttribute(INCLUDE_ATTR)%3Bif(include)%7Bstyles.push.apply(styles%2C_toConsumableArray(this.stylesFromModules(include).filter(function(item%2Cindex%2Cself)%7Breturn%20self.indexOf(item)%3D%3D%3Dindex%3B%7D)))%3B%7Dif(baseURI)%7Be.textContent%3DPolymer.ResolveUrl.resolveCss(e.textContent%2CbaseURI)%3B%7Dstyles.push(e)%3B%7Dtemplate._styles%3Dstyles%3B%7Dreturn%20template._styles%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Returns%20a%20list%20of%20%3Cstyle%3E%20elements%20%20from%20stylesheets%20loaded%20via%20%60%3Clink%20rel%3D%22import%22%20type%3D%22css%22%3E%60%20links%20within%20the%20specified%20%60dom-module%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.StyleGather%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20moduleId%20Id%20of%20%60dom-module%60%20to%20gather%20CSS%20from%0A%20%20%20%20%20*%20%40return%20%7B!Array%3C!HTMLStyleElement%3E%7D%20Array%20of%20contained%20styles.%0A%20%20%20%20%20*%20%40this%20%7BStyleGather%7D%0A%20%20%20%20%20*%2FstylesFromModuleImports%3Afunction%20stylesFromModuleImports(moduleId)%7Bvar%20m%3DimportModule(moduleId)%3Breturn%20m%3Fthis._stylesFromModuleImports(m)%3A%5B%5D%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40memberof%20Polymer.StyleGather%0A%20%20%20%20%20*%20%40this%20%7BStyleGather%7D%0A%20%20%20%20%20*%20%40param%20%7B!HTMLElement%7D%20module%20dom-module%20element%20that%20could%20contain%20%60%3Clink%20rel%3D%22import%22%20type%3D%22css%22%3E%60%20styles%0A%20%20%20%20%20*%20%40return%20%7B!Array%3C!HTMLStyleElement%3E%7D%20Array%20of%20contained%20styles%0A%20%20%20%20%20*%2F_stylesFromModuleImports%3Afunction%20_stylesFromModuleImports(module)%7Bvar%20styles%3D%5B%5D%3Bvar%20p%24%3Dmodule.querySelectorAll(MODULE_STYLE_LINK_SELECTOR)%3Bfor(var%20i%3D0%3Bi%3Cp%24.length%3Bi%2B%2B)%7Bvar%20p%3Dp%24%5Bi%5D%3Bif(p.import)%7Bvar%20importDoc%3Dp.import%3Bvar%20unscoped%3Dp.hasAttribute(SHADY_UNSCOPED_ATTR)%3Bif(unscoped%26%26!importDoc._unscopedStyle)%7Bvar%20style%3DstyleForImport(importDoc)%3Bstyle.setAttribute(SHADY_UNSCOPED_ATTR%2C'')%3BimportDoc._unscopedStyle%3Dstyle%3B%7Delse%20if(!importDoc._style)%7BimportDoc._style%3DstyleForImport(importDoc)%3B%7Dstyles.push(unscoped%3FimportDoc._unscopedStyle%3AimportDoc._style)%3B%7D%7Dreturn%20styles%3B%7D%2C%2F**%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Returns%20CSS%20text%20of%20styles%20in%20a%20space-separated%20list%20of%20%60dom-module%60s.%0A%20%20%20%20%20*%20Note%3A%20This%20method%20is%20deprecated%2C%20use%20%60stylesFromModules%60%20instead.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40deprecated%0A%20%20%20%20%20*%20%40memberof%20Polymer.StyleGather%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20moduleIds%20List%20of%20dom-module%20id's%20within%20which%20to%0A%20%20%20%20%20*%20search%20for%20css.%0A%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Concatenated%20CSS%20content%20from%20specified%20%60dom-module%60s%0A%20%20%20%20%20*%20%40this%20%7BStyleGather%7D%0A%20%20%20%20%20*%2FcssFromModules%3Afunction%20cssFromModules(moduleIds)%7Bvar%20modules%3DmoduleIds.trim().split(%2F%5Cs%2B%2F)%3Bvar%20cssText%3D''%3Bfor(var%20i%3D0%3Bi%3Cmodules.length%3Bi%2B%2B)%7BcssText%2B%3Dthis.cssFromModule(modules%5Bi%5D)%3B%7Dreturn%20cssText%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Returns%20CSS%20text%20of%20styles%20in%20a%20given%20%60dom-module%60.%20%20CSS%20in%20a%20%60dom-module%60%0A%20%20%20%20%20*%20can%20come%20either%20from%20%60%3Cstyle%3E%60s%20within%20the%20first%20%60%3Ctemplate%3E%60%2C%20or%20else%0A%20%20%20%20%20*%20from%20one%20or%20more%20%60%3Clink%20rel%3D%22import%22%20type%3D%22css%22%3E%60%20links%20outside%20the%0A%20%20%20%20%20*%20template.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Any%20%60%3Cstyles%3E%60%20processed%20are%20removed%20from%20their%20original%20location.%0A%20%20%20%20%20*%20Note%3A%20This%20method%20is%20deprecated%2C%20use%20%60styleFromModule%60%20instead.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40deprecated%0A%20%20%20%20%20*%20%40memberof%20Polymer.StyleGather%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20moduleId%20dom-module%20id%20to%20gather%20styles%20from%0A%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Concatenated%20CSS%20content%20from%20specified%20%60dom-module%60%0A%20%20%20%20%20*%20%40this%20%7BStyleGather%7D%0A%20%20%20%20%20*%2FcssFromModule%3Afunction%20cssFromModule(moduleId)%7Bvar%20m%3DimportModule(moduleId)%3Bif(m%26%26m._cssText%3D%3D%3Dundefined)%7B%2F%2F%20module%20imports%3A%20%3Clink%20rel%3D%22import%22%20type%3D%22css%22%3E%0Avar%20cssText%3Dthis._cssFromModuleImports(m)%3B%2F%2F%20include%20css%20from%20the%20first%20template%20in%20the%20module%0Avar%20t%3Dm.querySelector('template')%3Bif(t)%7BcssText%2B%3Dthis.cssFromTemplate(t%2C%2F**%20%40type%20%7BtemplateWithAssetPath%7D%20*%2Fm.assetpath)%3B%7Dm._cssText%3DcssText%7C%7Cnull%3B%7Dif(!m)%7Bconsole.warn('Could%20not%20find%20style%20data%20in%20module%20named'%2CmoduleId)%3B%7Dreturn%20m%26%26m._cssText%7C%7C''%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Returns%20CSS%20text%20of%20%60%3Cstyles%3E%60%20within%20a%20given%20template.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Any%20%60%3Cstyles%3E%60%20processed%20are%20removed%20from%20their%20original%20location.%0A%20%20%20%20%20*%20Note%3A%20This%20method%20is%20deprecated%2C%20use%20%60styleFromTemplate%60%20instead.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40deprecated%0A%20%20%20%20%20*%20%40memberof%20Polymer.StyleGather%0A%20%20%20%20%20*%20%40param%20%7B!HTMLTemplateElement%7D%20template%20Template%20to%20gather%20styles%20from%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20baseURI%20Base%20URI%20to%20resolve%20the%20URL%20against%0A%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Concatenated%20CSS%20content%20from%20specified%20template%0A%20%20%20%20%20*%20%40this%20%7BStyleGather%7D%0A%20%20%20%20%20*%2FcssFromTemplate%3Afunction%20cssFromTemplate(template%2CbaseURI)%7Bvar%20cssText%3D''%3Bvar%20e%24%3Dthis.stylesFromTemplate(template%2CbaseURI)%3B%2F%2F%20if%20element%20is%20a%20template%2C%20get%20content%20from%20its%20.content%0Afor(var%20i%3D0%3Bi%3Ce%24.length%3Bi%2B%2B)%7Bvar%20e%3De%24%5Bi%5D%3Bif(e.parentNode)%7Be.parentNode.removeChild(e)%3B%7DcssText%2B%3De.textContent%3B%7Dreturn%20cssText%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Returns%20CSS%20text%20from%20stylesheets%20loaded%20via%20%60%3Clink%20rel%3D%22import%22%20type%3D%22css%22%3E%60%0A%20%20%20%20%20*%20links%20within%20the%20specified%20%60dom-module%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Note%3A%20This%20method%20is%20deprecated%2C%20use%20%60stylesFromModuleImports%60%20instead.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40deprecated%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.StyleGather%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20moduleId%20Id%20of%20%60dom-module%60%20to%20gather%20CSS%20from%0A%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Concatenated%20CSS%20content%20from%20links%20in%20specified%20%60dom-module%60%0A%20%20%20%20%20*%20%40this%20%7BStyleGather%7D%0A%20%20%20%20%20*%2FcssFromModuleImports%3Afunction%20cssFromModuleImports(moduleId)%7Bvar%20m%3DimportModule(moduleId)%3Breturn%20m%3Fthis._cssFromModuleImports(m)%3A''%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40deprecated%0A%20%20%20%20%20*%20%40memberof%20Polymer.StyleGather%0A%20%20%20%20%20*%20%40this%20%7BStyleGather%7D%0A%20%20%20%20%20*%20%40param%20%7B!HTMLElement%7D%20module%20dom-module%20element%20that%20could%20contain%20%60%3Clink%20rel%3D%22import%22%20type%3D%22css%22%3E%60%20styles%0A%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Concatenated%20CSS%20content%20from%20links%20in%20the%20dom-module%0A%20%20%20%20%20*%2F_cssFromModuleImports%3Afunction%20_cssFromModuleImports(module)%7Bvar%20cssText%3D''%3Bvar%20styles%3Dthis._stylesFromModuleImports(module)%3Bfor(var%20i%3D0%3Bi%3Cstyles.length%3Bi%2B%2B)%7BcssText%2B%3Dstyles%5Bi%5D.textContent%3B%7Dreturn%20cssText%3B%7D%7D%3BPolymer.StyleGather%3DStyleGather%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Fstyle-gather.html.js%0A",
            "resourceBytes": 9256,
            "encodedBytes": 0,
            "unusedBytes": 4166
          },
          {
            "name": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3Bvar%20attr%3D'include'%3Bvar%20CustomStyleInterface%3Dwindow.ShadyCSS.CustomStyleInterface%3B%2F**%0A%20%20%20*%20Custom%20element%20for%20defining%20styles%20in%20the%20main%20document%20that%20can%20take%0A%20%20%20*%20advantage%20of%20%5Bshady%20DOM%5D(https%3A%2F%2Fgithub.com%2Fwebcomponents%2Fshadycss)%20shims%0A%20%20%20*%20for%20style%20encapsulation%2C%20custom%20properties%2C%20and%20custom%20mixins.%0A%20%20%20*%0A%20%20%20*%20-%20Document%20styles%20defined%20in%20a%20%60%3Ccustom-style%3E%60%20are%20shimmed%20to%20ensure%20they%0A%20%20%20*%20%20%20do%20not%20leak%20into%20local%20DOM%20when%20running%20on%20browsers%20without%20native%0A%20%20%20*%20%20%20Shadow%20DOM.%0A%20%20%20*%20-%20Custom%20properties%20can%20be%20defined%20in%20a%20%60%3Ccustom-style%3E%60.%20Use%20the%20%60html%60%20selector%0A%20%20%20*%20%20%20to%20define%20custom%20properties%20that%20apply%20to%20all%20custom%20elements.%0A%20%20%20*%20-%20Custom%20mixins%20can%20be%20defined%20in%20a%20%60%3Ccustom-style%3E%60%2C%20if%20you%20import%20the%20optional%0A%20%20%20*%20%20%20%5Bapply%20shim%5D(https%3A%2F%2Fgithub.com%2Fwebcomponents%2Fshadycss%23about-applyshim)%0A%20%20%20*%20%20%20(%60shadycss%2Fapply-shim.html%60).%0A%20%20%20*%0A%20%20%20*%20To%20use%3A%0A%20%20%20*%0A%20%20%20*%20-%20Import%20%60custom-style.html%60.%0A%20%20%20*%20-%20Place%20a%20%60%3Ccustom-style%3E%60%20element%20in%20the%20main%20document%2C%20wrapping%20an%20inline%20%60%3Cstyle%3E%60%20tag%20that%0A%20%20%20*%20%20%20contains%20the%20CSS%20rules%20you%20want%20to%20shim.%0A%20%20%20*%0A%20%20%20*%20For%20example%3A%0A%20%20%20*%0A%20%20%20*%20%60%60%60html%0A%20%20%20*%20%3C!--%20import%20apply%20shim--only%20required%20if%20using%20mixins%20--%3E%0A%20%20%20*%20%3Clink%20rel%3D%22import%22%20href%3D%22bower_components%2Fshadycss%2Fapply-shim.html%22%3E%0A%20%20%20*%20%3C!--%20import%20custom-style%20element%20--%3E%0A%20%20%20*%20%3Clink%20rel%3D%22import%22%20href%3D%22bower_components%2Fpolymer%2Flib%2Felements%2Fcustom-style.html%22%3E%0A%20%20%20*%0A%20%20%20*%20%3Ccustom-style%3E%0A%20%20%20*%20%20%20%3Cstyle%3E%0A%20%20%20*%20%20%20%20%20html%20%7B%0A%20%20%20*%20%20%20%20%20%20%20--custom-color%3A%20blue%3B%0A%20%20%20*%20%20%20%20%20%20%20--custom-mixin%3A%20%7B%0A%20%20%20*%20%20%20%20%20%20%20%20%20font-weight%3A%20bold%3B%0A%20%20%20*%20%20%20%20%20%20%20%20%20color%3A%20red%3B%0A%20%20%20*%20%20%20%20%20%20%20%7D%3B%0A%20%20%20*%20%20%20%20%20%7D%0A%20%20%20*%20%20%20%3C%2Fstyle%3E%0A%20%20%20*%20%3C%2Fcustom-style%3E%0A%20%20%20*%20%60%60%60%0A%20%20%20*%0A%20%20%20*%20%40customElement%0A%20%20%20*%20%40extends%20HTMLElement%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Custom%20element%20for%20defining%20styles%20in%20the%20main%20document%20that%20can%0A%20%20%20*%20%20%20take%20advantage%20of%20Polymer's%20style%20scoping%20and%20custom%20properties%20shims.%0A%20%20%20*%2Fvar%20CustomStyle%3Dfunction(_HTMLElement)%7B_inherits(CustomStyle%2C_HTMLElement)%3Bfunction%20CustomStyle()%7B_classCallCheck(this%2CCustomStyle)%3Bvar%20_this%3D_possibleConstructorReturn(this%2C(CustomStyle.__proto__%7C%7CObject.getPrototypeOf(CustomStyle)).call(this))%3B_this._style%3Dnull%3BCustomStyleInterface.addCustomStyle(_this)%3Breturn%20_this%3B%7D%2F**%0A%20%20%20%20%20*%20Returns%20the%20light-DOM%20%60%3Cstyle%3E%60%20child%20this%20element%20wraps.%20%20Upon%20first%0A%20%20%20%20%20*%20call%20any%20style%20modules%20referenced%20via%20the%20%60include%60%20attribute%20will%20be%0A%20%20%20%20%20*%20concatenated%20to%20this%20element's%20%60%3Cstyle%3E%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40return%20%7BHTMLStyleElement%7D%20This%20element's%20light-DOM%20%60%3Cstyle%3E%60%0A%20%20%20%20%20*%2F_createClass(CustomStyle%2C%5B%7Bkey%3A'getStyle'%2Cvalue%3Afunction%20getStyle()%7Bif(this._style)%7Breturn%20this._style%3B%7Dvar%20style%3D%2F**%20%40type%20%7BHTMLStyleElement%7D%20*%2Fthis.querySelector('style')%3Bif(!style)%7Breturn%20null%3B%7Dthis._style%3Dstyle%3Bvar%20include%3Dstyle.getAttribute(attr)%3Bif(include)%7Bstyle.removeAttribute(attr)%3Bstyle.textContent%3DPolymer.StyleGather.cssFromModules(include)%2Bstyle.textContent%3B%7D%2F*%0A%20%20%20%20%20%20HTML%20Imports%20styling%20the%20main%20document%20are%20deprecated%20in%20Chrome%0A%20%20%20%20%20%20https%3A%2F%2Fcrbug.com%2F523952%0A%0A%20%20%20%20%20%20If%20this%20element%20is%20not%20in%20the%20main%20document%2C%20then%20it%20must%20be%20in%20an%20HTML%20Import%20document.%0A%20%20%20%20%20%20In%20that%20case%2C%20move%20the%20custom%20style%20to%20the%20main%20document.%0A%0A%20%20%20%20%20%20The%20ordering%20of%20%60%3Ccustom-style%3E%60%20should%20stay%20the%20same%20as%20when%20loaded%20by%20HTML%20Imports%2C%20but%20there%20may%20be%20odd%0A%20%20%20%20%20%20cases%20of%20ordering%20w.r.t%20the%20main%20document%20styles.%0A%20%20%20%20%20%20*%2Fif(this.ownerDocument!%3D%3Dwindow.document)%7Bwindow.document.head.appendChild(this)%3B%7Dreturn%20this._style%3B%7D%7D%5D)%3Breturn%20CustomStyle%3B%7D(HTMLElement)%3Bwindow.customElements.define('custom-style'%2CCustomStyle)%3B%2F**%20%40const%20*%2FPolymer.CustomStyle%3DCustomStyle%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Felements%2Fcustom-style.html.js%0A",
            "resourceBytes": 5009,
            "encodedBytes": 0,
            "unusedBytes": 0
          },
          {
            "name": "data:text/javascript;charset=utf-8,'use%20strict'%3Bvar%20siteColor%3Dwindow.ga_data.site.colors.siteColor%3Bif(siteColor!%3D%3Dundefined)%7Bdocument.documentElement.style.setProperty('--color-theme'%2CsiteColor)%3B%7D%0A%2F%2F%23%20sourceMappingURL%3D..%2F..%2Fmaps%2Fgallium%2Fthemes%2Funiversal.html_script_0.js.map%0A%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fgallium%2Fthemes%2Funiversal.html.js%0A",
            "resourceBytes": 361,
            "encodedBytes": 0,
            "children": [
              {
                "name": "gallium/themes/universal.html_script_0.js",
                "resourceBytes": 149
              },
              {
                "name": "(unmapped)",
                "resourceBytes": 212
              }
            ]
          },
          {
            "name": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/shadycss/apply-shim.min.js",
            "resourceBytes": 10617,
            "encodedBytes": 4261,
            "unusedBytes": 3142
          },
          {
            "name": "data:text/javascript;charset=utf-8,%2F**%20%40suppress%20%7Bdeprecated%7D%20*%2F(function()%7B'use%20strict'%3B%2F**%0A%20%20%20*%20Sets%20the%20global%2C%20legacy%20settings.%0A%20%20%20*%0A%20%20%20*%20%40deprecated%0A%20%20%20*%20%40namespace%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%2FPolymer.Settings%3DPolymer.Settings%7C%7C%7B%7D%3BPolymer.Settings.useShadow%3D!window.ShadyDOM%3BPolymer.Settings.useNativeCSSProperties%3DBoolean(!window.ShadyCSS%7C%7Cwindow.ShadyCSS.nativeCss)%3BPolymer.Settings.useNativeCustomElements%3D!window.customElements.polyfillWrapFlushCallback%3B%2F**%0A%20%20%20*%20Globally%20settable%20property%20that%20is%20automatically%20assigned%20to%0A%20%20%20*%20%60Polymer.ElementMixin%60%20instances%2C%20useful%20for%20binding%20in%20templates%20to%0A%20%20%20*%20make%20URL's%20relative%20to%20an%20application's%20root.%20%20Defaults%20to%20the%20main%0A%20%20%20*%20document%20URL%2C%20but%20can%20be%20overridden%20by%20users.%20%20It%20may%20be%20useful%20to%20set%0A%20%20%20*%20%60Polymer.rootPath%60%20to%20provide%20a%20stable%20application%20mount%20path%20when%0A%20%20%20*%20using%20client%20side%20routing.%0A%20%20%20*%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%2FPolymer.rootPath%3DPolymer.rootPath%7C%7CPolymer.ResolveUrl.pathFromUrl(document.baseURI%7C%7Cwindow.location.href)%3B%2F**%0A%20%20%20*%20Sets%20the%20global%20rootPath%20property%20used%20by%20%60Polymer.ElementMixin%60%20and%0A%20%20%20*%20available%20via%20%60Polymer.rootPath%60.%0A%20%20%20*%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40param%20%7Bstring%7D%20path%20The%20new%20root%20path%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%2FPolymer.setRootPath%3Dfunction(path)%7BPolymer.rootPath%3Dpath%3B%7D%3B%2F**%0A%20%20%20*%20A%20global%20callback%20used%20to%20sanitize%20any%20value%20before%20inserting%20it%20into%20the%20DOM.%20The%20callback%20signature%20is%3A%0A%20%20%20*%0A%20%20%20*%20%20%20%20%20Polymer%20%3D%20%7B%0A%20%20%20*%20%20%20%20%20%20%20sanitizeDOMValue%3A%20function(value%2C%20name%2C%20type%2C%20node)%20%7B%20...%20%7D%0A%20%20%20*%20%20%20%20%20%7D%0A%20%20%20*%0A%20%20%20*%20Where%3A%0A%20%20%20*%0A%20%20%20*%20%60value%60%20is%20the%20value%20to%20sanitize.%0A%20%20%20*%20%60name%60%20is%20the%20name%20of%20an%20attribute%20or%20property%20(for%20example%2C%20href).%0A%20%20%20*%20%60type%60%20indicates%20where%20the%20value%20is%20being%20inserted%3A%20one%20of%20property%2C%20attribute%2C%20or%20text.%0A%20%20%20*%20%60node%60%20is%20the%20node%20where%20the%20value%20is%20being%20inserted.%0A%20%20%20*%0A%20%20%20*%20%40type%20%7B(function(*%2Cstring%2Cstring%2CNode)%3A*)%7Cundefined%7D%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%2FPolymer.sanitizeDOMValue%3DPolymer.sanitizeDOMValue%7C%7Cnull%3B%2F**%0A%20%20%20*%20Sets%20the%20global%20sanitizeDOMValue%20available%20via%20%60Polymer.sanitizeDOMValue%60.%0A%20%20%20*%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40param%20%7B(function(*%2Cstring%2Cstring%2CNode)%3A*)%7Cundefined%7D%20newSanitizeDOMValue%20the%20global%20sanitizeDOMValue%20callback%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%2FPolymer.setSanitizeDOMValue%3Dfunction(newSanitizeDOMValue)%7BPolymer.sanitizeDOMValue%3DnewSanitizeDOMValue%3B%7D%3B%2F**%0A%20%20%20*%20Globally%20settable%20property%20to%20make%20Polymer%20Gestures%20use%20passive%20TouchEvent%20listeners%20when%20recognizing%20gestures.%0A%20%20%20*%20When%20set%20to%20%60true%60%2C%20gestures%20made%20from%20touch%20will%20not%20be%20able%20to%20prevent%20scrolling%2C%20allowing%20for%20smoother%0A%20%20%20*%20scrolling%20performance.%0A%20%20%20*%20Defaults%20to%20%60false%60%20for%20backwards%20compatibility.%0A%20%20%20*%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%2FPolymer.passiveTouchGestures%3DPolymer.passiveTouchGestures%7C%7Cfalse%3B%2F**%0A%20%20%20*%20Sets%20%60passiveTouchGestures%60%20globally%20for%20all%20elements%20using%20Polymer%20Gestures.%0A%20%20%20*%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40param%20%7Bboolean%7D%20usePassive%20enable%20or%20disable%20passive%20touch%20gestures%20globally%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%2FPolymer.setPassiveTouchGestures%3Dfunction(usePassive)%7BPolymer.passiveTouchGestures%3DusePassive%3B%7D%3BPolymer.legacyOptimizations%3DPolymer.legacyOptimizations%7C%7Cwindow.PolymerSettings%26%26window.PolymerSettings.legacyOptimizations%7C%7Cfalse%3B%2F**%0A%20%20%20*%20Sets%20%60legacyOptimizations%60%20globally%20for%20all%20elements.%20Enables%0A%20%20%20*%20optimizations%20when%20only%20legacy%20Polymer()%20style%20elements%20are%20used.%0A%20%20%20*%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40param%20%7Bboolean%7D%20useLegacyOptimizations%20enable%20or%20disable%20legacy%20optimizations%20globally.%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%2FPolymer.setLegacyOptimizations%3Dfunction(useLegacyOptimizations)%7BPolymer.legacyOptimizations%3DuseLegacyOptimizations%3B%7D%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Fsettings.html.js%0A",
            "resourceBytes": 3665,
            "encodedBytes": 0,
            "unusedBytes": 261
          },
          {
            "name": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3B%2F%2F%20unique%20global%20id%20for%20deduping%20mixins.%0Avar%20dedupeId%3D0%3B%2F**%0A%20%20%20*%20%40constructor%0A%20%20%20*%20%40extends%20%7BFunction%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20MixinFunction()%7B%7D%2F**%20%40type%20%7B(WeakMap%20%7C%20undefined)%7D%20*%2FMixinFunction.prototype.__mixinApplications%3B%2F**%20%40type%20%7B(Object%20%7C%20undefined)%7D%20*%2FMixinFunction.prototype.__mixinSet%3B%2F*%20eslint-disable%20valid-jsdoc%20*%2F%2F**%0A%20%20%20*%20Wraps%20an%20ES6%20class%20expression%20mixin%20such%20that%20the%20mixin%20is%20only%20applied%0A%20%20%20*%20if%20it%20has%20not%20already%20been%20applied%20its%20base%20argument.%20Also%20memoizes%20mixin%0A%20%20%20*%20applications.%0A%20%20%20*%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40template%20T%0A%20%20%20*%20%40param%20%7BT%7D%20mixin%20ES6%20class%20expression%20mixin%20to%20wrap%0A%20%20%20*%20%40return%20%7BT%7D%0A%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%0A%20%20%20*%2FPolymer.dedupingMixin%3Dfunction(mixin)%7Bvar%20mixinApplications%3D%2F**%20%40type%20%7B!MixinFunction%7D%20*%2Fmixin.__mixinApplications%3Bif(!mixinApplications)%7BmixinApplications%3Dnew%20WeakMap()%3B%2F**%20%40type%20%7B!MixinFunction%7D%20*%2Fmixin.__mixinApplications%3DmixinApplications%3B%7D%2F%2F%20maintain%20a%20unique%20id%20for%20each%20mixin%0Avar%20mixinDedupeId%3DdedupeId%2B%2B%3Bfunction%20dedupingMixin(base)%7Bvar%20baseSet%3D%2F**%20%40type%20%7B!MixinFunction%7D%20*%2Fbase.__mixinSet%3Bif(baseSet%26%26baseSet%5BmixinDedupeId%5D)%7Breturn%20base%3B%7Dvar%20map%3DmixinApplications%3Bvar%20extended%3Dmap.get(base)%3Bif(!extended)%7Bextended%3D%2F**%20%40type%20%7B!Function%7D%20*%2Fmixin(base)%3Bmap.set(base%2Cextended)%3B%7D%2F%2F%20copy%20inherited%20mixin%20set%20from%20the%20extended%20class%2C%20or%20the%20base%20class%0A%2F%2F%20NOTE%3A%20we%20avoid%20use%20of%20Set%20here%20because%20some%20browser%20(IE11)%0A%2F%2F%20cannot%20extend%20a%20base%20Set%20via%20the%20constructor.%0Avar%20mixinSet%3DObject.create(%2F**%20%40type%20%7B!MixinFunction%7D%20*%2Fextended.__mixinSet%7C%7CbaseSet%7C%7Cnull)%3BmixinSet%5BmixinDedupeId%5D%3Dtrue%3B%2F**%20%40type%20%7B!MixinFunction%7D%20*%2Fextended.__mixinSet%3DmixinSet%3Breturn%20extended%3B%7Dreturn(%2F**%20%40type%20%7BT%7D%20*%2FdedupingMixin)%3B%7D%3B%2F*%20eslint-enable%20valid-jsdoc%20*%2F%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Fmixin.html.js%0A",
            "resourceBytes": 1863,
            "encodedBytes": 0,
            "unusedBytes": 26
          },
          {
            "name": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3Bvar%20modules%3D%7B%7D%3Bvar%20lcModules%3D%7B%7D%3Bfunction%20setModule(id%2Cmodule)%7B%2F%2F%20store%20id%20separate%20from%20lowercased%20id%20so%20that%0A%2F%2F%20in%20all%20cases%20mixedCase%20id%20will%20stored%20distinctly%0A%2F%2F%20and%20lowercase%20version%20is%20a%20fallback%0Amodules%5Bid%5D%3DlcModules%5Bid.toLowerCase()%5D%3Dmodule%3B%7Dfunction%20findModule(id)%7Breturn%20modules%5Bid%5D%7C%7ClcModules%5Bid.toLowerCase()%5D%3B%7Dfunction%20styleOutsideTemplateCheck(inst)%7Bif(inst.querySelector('style'))%7Bconsole.warn('dom-module%20%25s%20has%20style%20outside%20template'%2Cinst.id)%3B%7D%7D%2F**%0A%20%20%20*%20The%20%60dom-module%60%20element%20registers%20the%20dom%20it%20contains%20to%20the%20name%20given%0A%20%20%20*%20by%20the%20module's%20id%20attribute.%20It%20provides%20a%20unified%20database%20of%20dom%0A%20%20%20*%20accessible%20via%20its%20static%20%60import%60%20API.%0A%20%20%20*%0A%20%20%20*%20A%20key%20use%20case%20of%20%60dom-module%60%20is%20for%20providing%20custom%20element%20%60%3Ctemplate%3E%60s%0A%20%20%20*%20via%20HTML%20imports%20that%20are%20parsed%20by%20the%20native%20HTML%20parser%2C%20that%20can%20be%0A%20%20%20*%20relocated%20during%20a%20bundling%20pass%20and%20still%20looked%20up%20by%20%60id%60.%0A%20%20%20*%0A%20%20%20*%20Example%3A%0A%20%20%20*%0A%20%20%20*%20%20%20%20%20%3Cdom-module%20id%3D%22foo%22%3E%0A%20%20%20*%20%20%20%20%20%20%20%3Cimg%20src%3D%22stuff.png%22%3E%0A%20%20%20*%20%20%20%20%20%3C%2Fdom-module%3E%0A%20%20%20*%0A%20%20%20*%20Then%20in%20code%20in%20some%20other%20location%20that%20cannot%20access%20the%20dom-module%20above%0A%20%20%20*%0A%20%20%20*%20%20%20%20%20let%20img%20%3D%20customElements.get('dom-module').import('foo'%2C%20'img')%3B%0A%20%20%20*%0A%20%20%20*%20%40customElement%0A%20%20%20*%20%40extends%20HTMLElement%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Custom%20element%20that%20provides%20a%20registry%20of%20relocatable%20DOM%20content%0A%20%20%20*%20%20%20by%20%60id%60%20that%20is%20agnostic%20to%20bundling.%0A%20%20%20*%20%40unrestricted%0A%20%20%20*%2Fvar%20DomModule%3Dfunction(_HTMLElement)%7B_inherits(DomModule%2C_HTMLElement)%3Bfunction%20DomModule()%7B_classCallCheck(this%2CDomModule)%3Breturn%20_possibleConstructorReturn(this%2C(DomModule.__proto__%7C%7CObject.getPrototypeOf(DomModule)).apply(this%2Carguments))%3B%7D_createClass(DomModule%2C%5B%7Bkey%3A'attributeChangedCallback'%2C%2F*%20eslint-disable%20no-unused-vars%20*%2F%2F**%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20name%20Name%20of%20attribute.%0A%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20old%20Old%20value%20of%20attribute.%0A%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20value%20Current%20value%20of%20attribute.%0A%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20namespace%20Attribute%20namespace.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Fvalue%3Afunction%20attributeChangedCallback(name%2Cold%2Cvalue%2Cnamespace)%7Bif(old!%3D%3Dvalue)%7Bthis.register()%3B%7D%7D%2F*%20eslint-enable%20no-unused-args%20*%2F%2F**%0A%20%20%20%20%20*%20The%20absolute%20URL%20of%20the%20original%20location%20of%20this%20%60dom-module%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20This%20value%20will%20differ%20from%20this%20element's%20%60ownerDocument%60%20in%20the%0A%20%20%20%20%20*%20following%20ways%3A%0A%20%20%20%20%20*%20-%20Takes%20into%20account%20any%20%60assetpath%60%20attribute%20added%20during%20bundling%0A%20%20%20%20%20*%20%20%20to%20indicate%20the%20original%20location%20relative%20to%20the%20bundled%20location%0A%20%20%20%20%20*%20-%20Uses%20the%20HTMLImports%20polyfill's%20%60importForElement%60%20API%20to%20ensure%0A%20%20%20%20%20*%20%20%20the%20path%20is%20relative%20to%20the%20import%20document's%20location%20since%0A%20%20%20%20%20*%20%20%20%60ownerDocument%60%20is%20not%20currently%20polyfilled%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'register'%2C%2F**%0A%20%20%20%20%20*%20Registers%20the%20dom-module%20at%20a%20given%20id.%20This%20method%20should%20only%20be%20called%0A%20%20%20%20%20*%20when%20a%20dom-module%20is%20imperatively%20created.%20For%0A%20%20%20%20%20*%20example%2C%20%60document.createElement('dom-module').register('foo')%60.%0A%20%20%20%20%20*%20%40param%20%7Bstring%3D%7D%20id%20The%20id%20at%20which%20to%20register%20the%20dom-module.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Fvalue%3Afunction%20register(id)%7Bid%3Did%7C%7Cthis.id%3Bif(id)%7B%2F%2F%20Under%20strictTemplatePolicy%2C%20reject%20and%20null%20out%20any%20re-registered%0A%2F%2F%20dom-module%20since%20it%20is%20ambiguous%20whether%20first-in%20or%20last-in%20is%20trusted%20%0Aif(Polymer.strictTemplatePolicy%26%26findModule(id)!%3D%3Dundefined)%7BsetModule(id%2Cnull)%3Bthrow%20new%20Error('strictTemplatePolicy%3A%20dom-module%20'%2Bid%2B'%20re-registered')%3B%7Dthis.id%3Did%3BsetModule(id%2Cthis)%3BstyleOutsideTemplateCheck(this)%3B%7D%7D%7D%2C%7Bkey%3A'assetpath'%2Cget%3Afunction%20get()%7B%2F%2F%20Don't%20override%20existing%20assetpath.%0Aif(!this.__assetpath)%7B%2F%2F%20note%3A%20assetpath%20set%20via%20an%20attribute%20must%20be%20relative%20to%20this%0A%2F%2F%20element's%20location%3B%20accomodate%20polyfilled%20HTMLImports%0Avar%20owner%3Dwindow.HTMLImports%26%26HTMLImports.importForElement%3FHTMLImports.importForElement(this)%7C%7Cdocument%3Athis.ownerDocument%3Bvar%20url%3DPolymer.ResolveUrl.resolveUrl(this.getAttribute('assetpath')%7C%7C''%2Cowner.baseURI)%3Bthis.__assetpath%3DPolymer.ResolveUrl.pathFromUrl(url)%3B%7Dreturn%20this.__assetpath%3B%7D%7D%5D%2C%5B%7Bkey%3A'import'%2C%2F**%0A%20%20%20%20%20*%20Retrieves%20the%20element%20specified%20by%20the%20css%20%60selector%60%20in%20the%20module%0A%20%20%20%20%20*%20registered%20by%20%60id%60.%20For%20example%2C%20this.import('foo'%2C%20'img')%3B%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20id%20The%20id%20of%20the%20dom-module%20in%20which%20to%20search.%0A%20%20%20%20%20*%20%40param%20%7Bstring%3D%7D%20selector%20The%20css%20selector%20by%20which%20to%20find%20the%20element.%0A%20%20%20%20%20*%20%40return%20%7BElement%7D%20Returns%20the%20element%20which%20matches%20%60selector%60%20in%20the%0A%20%20%20%20%20*%20module%20registered%20at%20the%20specified%20%60id%60.%0A%20%20%20%20%20*%2Fvalue%3Afunction%20_import(id%2Cselector)%7Bif(id)%7Bvar%20m%3DfindModule(id)%3Bif(m%26%26selector)%7Breturn%20m.querySelector(selector)%3B%7Dreturn%20m%3B%7Dreturn%20null%3B%7D%7D%2C%7Bkey%3A'observedAttributes'%2Cget%3Afunction%20get()%7Breturn%5B'id'%5D%3B%7D%7D%5D)%3Breturn%20DomModule%3B%7D(HTMLElement)%3BDomModule.prototype%5B'modules'%5D%3Dmodules%3BcustomElements.define('dom-module'%2CDomModule)%3B%2F**%20%40const%20*%2FPolymer.DomModule%3DDomModule%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Felements%2Fdom-module.html.js%0A",
            "resourceBytes": 6199,
            "encodedBytes": 0,
            "unusedBytes": 2085
          },
          {
            "name": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3B%2F**%0A%20%20%20*%20Module%20with%20utilities%20for%20manipulating%20structured%20data%20path%20strings.%0A%20%20%20*%0A%20%20%20*%20%40namespace%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Module%20with%20utilities%20for%20manipulating%20structured%20data%20path%20strings.%0A%20%20%20*%2Fvar%20Path%3D%7B%2F**%0A%20%20%20%20%20*%20Returns%20true%20if%20the%20given%20string%20is%20a%20structured%20data%20path%20(has%20dots).%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%20Polymer.Path.isPath('foo.bar.baz')%20%2F%2F%20true%0A%20%20%20%20%20*%20Polymer.Path.isPath('foo')%20%20%20%20%20%20%20%20%20%2F%2F%20false%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Path%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20path%20Path%20string%0A%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20the%20string%20contained%20one%20or%20more%20dots%0A%20%20%20%20%20*%2FisPath%3Afunction%20isPath(path)%7Breturn%20path.indexOf('.')%3E%3D0%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Returns%20the%20root%20property%20name%20for%20the%20given%20path.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%20Polymer.Path.root('foo.bar.baz')%20%2F%2F%20'foo'%0A%20%20%20%20%20*%20Polymer.Path.root('foo')%20%20%20%20%20%20%20%20%20%2F%2F%20'foo'%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Path%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20path%20Path%20string%0A%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Root%20property%20name%0A%20%20%20%20%20*%2Froot%3Afunction%20root(path)%7Bvar%20dotIndex%3Dpath.indexOf('.')%3Bif(dotIndex%3D%3D%3D-1)%7Breturn%20path%3B%7Dreturn%20path.slice(0%2CdotIndex)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Given%20%60base%60%20is%20%60foo.bar%60%2C%20%60foo%60%20is%20an%20ancestor%2C%20%60foo.bar%60%20is%20not%0A%20%20%20%20%20*%20Returns%20true%20if%20the%20given%20path%20is%20an%20ancestor%20of%20the%20base%20path.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%20Polymer.Path.isAncestor('foo.bar'%2C%20'foo')%20%20%20%20%20%20%20%20%20%2F%2F%20true%0A%20%20%20%20%20*%20Polymer.Path.isAncestor('foo.bar'%2C%20'foo.bar')%20%20%20%20%20%2F%2F%20false%0A%20%20%20%20%20*%20Polymer.Path.isAncestor('foo.bar'%2C%20'foo.bar.baz')%20%2F%2F%20false%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Path%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20base%20Path%20string%20to%20test%20against.%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20path%20Path%20string%20to%20test.%0A%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20%60path%60%20is%20an%20ancestor%20of%20%60base%60.%0A%20%20%20%20%20*%2FisAncestor%3Afunction%20isAncestor(base%2Cpath)%7B%2F%2F%20%20%20%20%20base.startsWith(path%20%2B%20'.')%3B%0Areturn%20base.indexOf(path%2B'.')%3D%3D%3D0%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Given%20%60base%60%20is%20%60foo.bar%60%2C%20%60foo.bar.baz%60%20is%20an%20descendant%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%20Polymer.Path.isDescendant('foo.bar'%2C%20'foo.bar.baz')%20%2F%2F%20true%0A%20%20%20%20%20*%20Polymer.Path.isDescendant('foo.bar'%2C%20'foo.bar')%20%20%20%20%20%2F%2F%20false%0A%20%20%20%20%20*%20Polymer.Path.isDescendant('foo.bar'%2C%20'foo')%20%20%20%20%20%20%20%20%20%2F%2F%20false%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Path%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20base%20Path%20string%20to%20test%20against.%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20path%20Path%20string%20to%20test.%0A%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20%60path%60%20is%20a%20descendant%20of%20%60base%60.%0A%20%20%20%20%20*%2FisDescendant%3Afunction%20isDescendant(base%2Cpath)%7B%2F%2F%20%20%20%20%20path.startsWith(base%20%2B%20'.')%3B%0Areturn%20path.indexOf(base%2B'.')%3D%3D%3D0%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Replaces%20a%20previous%20base%20path%20with%20a%20new%20base%20path%2C%20preserving%20the%0A%20%20%20%20%20*%20remainder%20of%20the%20path.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20User%20must%20ensure%20%60path%60%20has%20a%20prefix%20of%20%60base%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%20Polymer.Path.translate('foo.bar'%2C%20'zot'%2C%20'foo.bar.baz')%20%2F%2F%20'zot.baz'%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Path%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20base%20Current%20base%20string%20to%20remove%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20newBase%20New%20base%20string%20to%20replace%20with%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20path%20Path%20to%20translate%0A%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Translated%20string%0A%20%20%20%20%20*%2Ftranslate%3Afunction%20translate(base%2CnewBase%2Cpath)%7Breturn%20newBase%2Bpath.slice(base.length)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20base%20Path%20string%20to%20test%20against%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20path%20Path%20string%20to%20test%0A%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20%60path%60%20is%20equal%20to%20%60base%60%0A%20%20%20%20%20*%20%40this%20%7BPath%7D%0A%20%20%20%20%20*%2Fmatches%3Afunction%20matches(base%2Cpath)%7Breturn%20base%3D%3D%3Dpath%7C%7Cthis.isAncestor(base%2Cpath)%7C%7Cthis.isDescendant(base%2Cpath)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Converts%20array-based%20paths%20to%20flattened%20path.%20%20String-based%20paths%0A%20%20%20%20%20*%20are%20returned%20as-is.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%20Polymer.Path.normalize(%5B'foo.bar'%2C%200%2C%20'baz'%5D)%20%20%2F%2F%20'foo.bar.0.baz'%0A%20%20%20%20%20*%20Polymer.Path.normalize('foo.bar.0.baz')%20%20%20%20%20%20%20%20%2F%2F%20'foo.bar.0.baz'%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Path%0A%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Input%20path%0A%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Flattened%20path%0A%20%20%20%20%20*%2Fnormalize%3Afunction%20normalize(path)%7Bif(Array.isArray(path))%7Bvar%20parts%3D%5B%5D%3Bfor(var%20i%3D0%3Bi%3Cpath.length%3Bi%2B%2B)%7Bvar%20args%3Dpath%5Bi%5D.toString().split('.')%3Bfor(var%20j%3D0%3Bj%3Cargs.length%3Bj%2B%2B)%7Bparts.push(args%5Bj%5D)%3B%7D%7Dreturn%20parts.join('.')%3B%7Delse%7Breturn%20path%3B%7D%7D%2C%2F**%0A%20%20%20%20%20*%20Splits%20a%20path%20into%20an%20array%20of%20property%20names.%20Accepts%20either%20arrays%0A%20%20%20%20%20*%20of%20path%20parts%20or%20strings.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%20Polymer.Path.split(%5B'foo.bar'%2C%200%2C%20'baz'%5D)%20%20%2F%2F%20%5B'foo'%2C%20'bar'%2C%20'0'%2C%20'baz'%5D%0A%20%20%20%20%20*%20Polymer.Path.split('foo.bar.0.baz')%20%20%20%20%20%20%20%20%2F%2F%20%5B'foo'%2C%20'bar'%2C%20'0'%2C%20'baz'%5D%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Path%0A%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Input%20path%0A%20%20%20%20%20*%20%40return%20%7B!Array%3Cstring%3E%7D%20Array%20of%20path%20parts%0A%20%20%20%20%20*%20%40this%20%7BPath%7D%0A%20%20%20%20%20*%20%40suppress%20%7BcheckTypes%7D%0A%20%20%20%20%20*%2Fsplit%3Afunction%20split(path)%7Bif(Array.isArray(path))%7Breturn%20this.normalize(path).split('.')%3B%7Dreturn%20path.toString().split('.')%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Reads%20a%20value%20from%20a%20path.%20%20If%20any%20sub-property%20in%20the%20path%20is%20%60undefined%60%2C%0A%20%20%20%20%20*%20this%20method%20returns%20%60undefined%60%20(will%20never%20throw.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Path%0A%20%20%20%20%20*%20%40param%20%7BObject%7D%20root%20Object%20from%20which%20to%20dereference%20path%20from%0A%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Path%20to%20read%0A%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20info%20If%20an%20object%20is%20provided%20to%20%60info%60%2C%20the%20normalized%0A%20%20%20%20%20*%20%20(flattened)%20path%20will%20be%20set%20to%20%60info.path%60.%0A%20%20%20%20%20*%20%40return%20%7B*%7D%20Value%20at%20path%2C%20or%20%60undefined%60%20if%20the%20path%20could%20not%20be%0A%20%20%20%20%20*%20%20fully%20dereferenced.%0A%20%20%20%20%20*%20%40this%20%7BPath%7D%0A%20%20%20%20%20*%2Fget%3Afunction%20get(root%2Cpath%2Cinfo)%7Bvar%20prop%3Droot%3Bvar%20parts%3Dthis.split(path)%3B%2F%2F%20Loop%20over%20path%20parts%5B0..n-1%5D%20and%20dereference%0Afor(var%20i%3D0%3Bi%3Cparts.length%3Bi%2B%2B)%7Bif(!prop)%7Breturn%3B%7Dvar%20part%3Dparts%5Bi%5D%3Bprop%3Dprop%5Bpart%5D%3B%7Dif(info)%7Binfo.path%3Dparts.join('.')%3B%7Dreturn%20prop%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Sets%20a%20value%20to%20a%20path.%20%20If%20any%20sub-property%20in%20the%20path%20is%20%60undefined%60%2C%0A%20%20%20%20%20*%20this%20method%20will%20no-op.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Path%0A%20%20%20%20%20*%20%40param%20%7BObject%7D%20root%20Object%20from%20which%20to%20dereference%20path%20from%0A%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Path%20to%20set%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%20to%20path%0A%20%20%20%20%20*%20%40return%20%7Bstring%20%7C%20undefined%7D%20The%20normalized%20version%20of%20the%20input%20path%0A%20%20%20%20%20*%20%40this%20%7BPath%7D%0A%20%20%20%20%20*%2Fset%3Afunction%20set(root%2Cpath%2Cvalue)%7Bvar%20prop%3Droot%3Bvar%20parts%3Dthis.split(path)%3Bvar%20last%3Dparts%5Bparts.length-1%5D%3Bif(parts.length%3E1)%7B%2F%2F%20Loop%20over%20path%20parts%5B0..n-2%5D%20and%20dereference%0Afor(var%20i%3D0%3Bi%3Cparts.length-1%3Bi%2B%2B)%7Bvar%20part%3Dparts%5Bi%5D%3Bprop%3Dprop%5Bpart%5D%3Bif(!prop)%7Breturn%3B%7D%7D%2F%2F%20Set%20value%20to%20object%20at%20end%20of%20path%0Aprop%5Blast%5D%3Dvalue%3B%7Delse%7B%2F%2F%20Simple%20property%20set%0Aprop%5Bpath%5D%3Dvalue%3B%7Dreturn%20parts.join('.')%3B%7D%7D%3B%2F**%0A%20%20%20*%20Returns%20true%20if%20the%20given%20string%20is%20a%20structured%20data%20path%20(has%20dots).%0A%20%20%20*%0A%20%20%20*%20This%20function%20is%20deprecated.%20%20Use%20%60Polymer.Path.isPath%60%20instead.%0A%20%20%20*%0A%20%20%20*%20Example%3A%0A%20%20%20*%0A%20%20%20*%20%60%60%60%0A%20%20%20*%20Polymer.Path.isDeep('foo.bar.baz')%20%2F%2F%20true%0A%20%20%20*%20Polymer.Path.isDeep('foo')%20%20%20%20%20%20%20%20%20%2F%2F%20false%0A%20%20%20*%20%60%60%60%0A%20%20%20*%0A%20%20%20*%20%40deprecated%0A%20%20%20*%20%40memberof%20Polymer.Path%0A%20%20%20*%20%40param%20%7Bstring%7D%20path%20Path%20string%0A%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20the%20string%20contained%20one%20or%20more%20dots%0A%20%20%20*%2FPath.isDeep%3DPath.isPath%3BPolymer.Path%3DPath%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Fpath.html.js%0A",
            "resourceBytes": 7136,
            "encodedBytes": 0,
            "unusedBytes": 1536
          },
          {
            "name": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3Bvar%20caseMap%3D%7B%7D%3Bvar%20DASH_TO_CAMEL%3D%2F-%5Ba-z%5D%2Fg%3Bvar%20CAMEL_TO_DASH%3D%2F(%5BA-Z%5D)%2Fg%3B%2F**%0A%20%20%20*%20Module%20with%20utilities%20for%20converting%20between%20%22dash-case%22%20and%20%22camelCase%22%0A%20%20%20*%20identifiers.%0A%20%20%20*%0A%20%20%20*%20%40namespace%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Module%20that%20provides%20utilities%20for%20converting%20between%20%22dash-case%22%0A%20%20%20*%20%20%20and%20%22camelCase%22.%0A%20%20%20*%2Fvar%20CaseMap%3D%7B%2F**%0A%20%20%20%20%20*%20Converts%20%22dash-case%22%20identifier%20(e.g.%20%60foo-bar-baz%60)%20to%20%22camelCase%22%0A%20%20%20%20%20*%20(e.g.%20%60fooBarBaz%60).%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.CaseMap%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20dash%20Dash-case%20identifier%0A%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Camel-case%20representation%20of%20the%20identifier%0A%20%20%20%20%20*%2FdashToCamelCase%3Afunction%20dashToCamelCase(dash)%7Breturn%20caseMap%5Bdash%5D%7C%7C(caseMap%5Bdash%5D%3Ddash.indexOf('-')%3C0%3Fdash%3Adash.replace(DASH_TO_CAMEL%2Cfunction(m)%7Breturn%20m%5B1%5D.toUpperCase()%3B%7D))%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Converts%20%22camelCase%22%20identifier%20(e.g.%20%60fooBarBaz%60)%20to%20%22dash-case%22%0A%20%20%20%20%20*%20(e.g.%20%60foo-bar-baz%60).%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.CaseMap%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20camel%20Camel-case%20identifier%0A%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Dash-case%20representation%20of%20the%20identifier%0A%20%20%20%20%20*%2FcamelToDashCase%3Afunction%20camelToDashCase(camel)%7Breturn%20caseMap%5Bcamel%5D%7C%7C(caseMap%5Bcamel%5D%3Dcamel.replace(CAMEL_TO_DASH%2C'-%241').toLowerCase())%3B%7D%7D%3BPolymer.CaseMap%3DCaseMap%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Fcase-map.html.js%0A",
            "resourceBytes": 1394,
            "encodedBytes": 0,
            "unusedBytes": 163
          },
          {
            "name": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3B%2F%2F%20Microtask%20implemented%20using%20Mutation%20Observer%0Avar%20microtaskCurrHandle%3D0%3Bvar%20microtaskLastHandle%3D0%3Bvar%20microtaskCallbacks%3D%5B%5D%3Bvar%20microtaskNodeContent%3D0%3Bvar%20microtaskNode%3Ddocument.createTextNode('')%3Bnew%20window.MutationObserver(microtaskFlush).observe(microtaskNode%2C%7BcharacterData%3Atrue%7D)%3Bfunction%20microtaskFlush()%7Bvar%20len%3DmicrotaskCallbacks.length%3Bfor(var%20i%3D0%3Bi%3Clen%3Bi%2B%2B)%7Bvar%20cb%3DmicrotaskCallbacks%5Bi%5D%3Bif(cb)%7Btry%7Bcb()%3B%7Dcatch(e)%7BsetTimeout(function()%7Bthrow%20e%3B%7D)%3B%7D%7D%7DmicrotaskCallbacks.splice(0%2Clen)%3BmicrotaskLastHandle%2B%3Dlen%3B%7D%2F**%0A%20%20%20*%20Module%20that%20provides%20a%20number%20of%20strategies%20for%20enqueuing%20asynchronous%0A%20%20%20*%20tasks.%20%20Each%20sub-module%20provides%20a%20standard%20%60run(fn)%60%20interface%20that%20returns%20a%0A%20%20%20*%20handle%2C%20and%20a%20%60cancel(handle)%60%20interface%20for%20canceling%20async%20tasks%20before%0A%20%20%20*%20they%20run.%0A%20%20%20*%0A%20%20%20*%20%40namespace%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Module%20that%20provides%20a%20number%20of%20strategies%20for%20enqueuing%20asynchronous%0A%20%20%20*%20tasks.%0A%20%20%20*%2FPolymer.Async%3D%7B%2F**%0A%20%20%20%20%20*%20Async%20interface%20wrapper%20around%20%60setTimeout%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40namespace%0A%20%20%20%20%20*%20%40memberof%20Polymer.Async%0A%20%20%20%20%20*%20%40summary%20Async%20interface%20wrapper%20around%20%60setTimeout%60.%0A%20%20%20%20%20*%2FtimeOut%3A%7B%2F**%0A%20%20%20%20%20%20%20*%20Returns%20a%20sub-module%20with%20the%20async%20interface%20providing%20the%20provided%0A%20%20%20%20%20%20%20*%20delay.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40memberof%20Polymer.Async.timeOut%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%3D%7D%20delay%20Time%20to%20wait%20before%20calling%20callbacks%20in%20ms%0A%20%20%20%20%20%20%20*%20%40return%20%7B!AsyncInterface%7D%20An%20async%20timeout%20interface%0A%20%20%20%20%20%20%20*%2Fafter%3Afunction%20after(delay)%7Breturn%7Brun%3Afunction%20run(fn)%7Breturn%20window.setTimeout(fn%2Cdelay)%3B%7D%2Ccancel%3Afunction%20cancel(handle)%7Bwindow.clearTimeout(handle)%3B%7D%7D%3B%7D%2C%2F**%0A%20%20%20%20%20%20%20*%20Enqueues%20a%20function%20called%20in%20the%20next%20task.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40memberof%20Polymer.Async.timeOut%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Function%7D%20fn%20Callback%20to%20run%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%3D%7D%20delay%20Delay%20in%20milliseconds%0A%20%20%20%20%20%20%20*%20%40return%20%7Bnumber%7D%20Handle%20used%20for%20canceling%20task%0A%20%20%20%20%20%20%20*%2Frun%3Afunction%20run(fn%2Cdelay)%7Breturn%20window.setTimeout(fn%2Cdelay)%3B%7D%2C%2F**%0A%20%20%20%20%20%20%20*%20Cancels%20a%20previously%20enqueued%20%60timeOut%60%20callback.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40memberof%20Polymer.Async.timeOut%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20handle%20Handle%20returned%20from%20%60run%60%20of%20callback%20to%20cancel%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2Fcancel%3Afunction%20cancel(handle)%7Bwindow.clearTimeout(handle)%3B%7D%7D%2C%2F**%0A%20%20%20%20%20*%20Async%20interface%20wrapper%20around%20%60requestAnimationFrame%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40namespace%0A%20%20%20%20%20*%20%40memberof%20Polymer.Async%0A%20%20%20%20%20*%20%40summary%20Async%20interface%20wrapper%20around%20%60requestAnimationFrame%60.%0A%20%20%20%20%20*%2FanimationFrame%3A%7B%2F**%0A%20%20%20%20%20%20%20*%20Enqueues%20a%20function%20called%20at%20%60requestAnimationFrame%60%20timing.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40memberof%20Polymer.Async.animationFrame%0A%20%20%20%20%20%20%20*%20%40param%20%7Bfunction(number)%3Avoid%7D%20fn%20Callback%20to%20run%0A%20%20%20%20%20%20%20*%20%40return%20%7Bnumber%7D%20Handle%20used%20for%20canceling%20task%0A%20%20%20%20%20%20%20*%2Frun%3Afunction%20run(fn)%7Breturn%20window.requestAnimationFrame(fn)%3B%7D%2C%2F**%0A%20%20%20%20%20%20%20*%20Cancels%20a%20previously%20enqueued%20%60animationFrame%60%20callback.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40memberof%20Polymer.Async.animationFrame%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20handle%20Handle%20returned%20from%20%60run%60%20of%20callback%20to%20cancel%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2Fcancel%3Afunction%20cancel(handle)%7Bwindow.cancelAnimationFrame(handle)%3B%7D%7D%2C%2F**%0A%20%20%20%20%20*%20Async%20interface%20wrapper%20around%20%60requestIdleCallback%60.%20%20Falls%20back%20to%0A%20%20%20%20%20*%20%60setTimeout%60%20on%20browsers%20that%20do%20not%20support%20%60requestIdleCallback%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40namespace%0A%20%20%20%20%20*%20%40memberof%20Polymer.Async%0A%20%20%20%20%20*%20%40summary%20Async%20interface%20wrapper%20around%20%60requestIdleCallback%60.%0A%20%20%20%20%20*%2FidlePeriod%3A%7B%2F**%0A%20%20%20%20%20%20%20*%20Enqueues%20a%20function%20called%20at%20%60requestIdleCallback%60%20timing.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40memberof%20Polymer.Async.idlePeriod%0A%20%20%20%20%20%20%20*%20%40param%20%7Bfunction(!IdleDeadline)%3Avoid%7D%20fn%20Callback%20to%20run%0A%20%20%20%20%20%20%20*%20%40return%20%7Bnumber%7D%20Handle%20used%20for%20canceling%20task%0A%20%20%20%20%20%20%20*%2Frun%3Afunction%20run(fn)%7Breturn%20window.requestIdleCallback%3Fwindow.requestIdleCallback(fn)%3Awindow.setTimeout(fn%2C16)%3B%7D%2C%2F**%0A%20%20%20%20%20%20%20*%20Cancels%20a%20previously%20enqueued%20%60idlePeriod%60%20callback.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40memberof%20Polymer.Async.idlePeriod%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20handle%20Handle%20returned%20from%20%60run%60%20of%20callback%20to%20cancel%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2Fcancel%3Afunction%20cancel(handle)%7Bwindow.cancelIdleCallback%3Fwindow.cancelIdleCallback(handle)%3Awindow.clearTimeout(handle)%3B%7D%7D%2C%2F**%0A%20%20%20%20%20*%20Async%20interface%20for%20enqueuing%20callbacks%20that%20run%20at%20microtask%20timing.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Note%20that%20microtask%20timing%20is%20achieved%20via%20a%20single%20%60MutationObserver%60%2C%0A%20%20%20%20%20*%20and%20thus%20callbacks%20enqueued%20with%20this%20API%20will%20all%20run%20in%20a%20single%0A%20%20%20%20%20*%20batch%2C%20and%20not%20interleaved%20with%20other%20microtasks%20such%20as%20promises.%0A%20%20%20%20%20*%20Promises%20are%20avoided%20as%20an%20implementation%20choice%20for%20the%20time%20being%0A%20%20%20%20%20*%20due%20to%20Safari%20bugs%20that%20cause%20Promises%20to%20lack%20microtask%20guarantees.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40namespace%0A%20%20%20%20%20*%20%40memberof%20Polymer.Async%0A%20%20%20%20%20*%20%40summary%20Async%20interface%20for%20enqueuing%20callbacks%20that%20run%20at%20microtask%0A%20%20%20%20%20*%20%20%20timing.%0A%20%20%20%20%20*%2FmicroTask%3A%7B%2F**%0A%20%20%20%20%20%20%20*%20Enqueues%20a%20function%20called%20at%20microtask%20timing.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40memberof%20Polymer.Async.microTask%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Function%3D%7D%20callback%20Callback%20to%20run%0A%20%20%20%20%20%20%20*%20%40return%20%7Bnumber%7D%20Handle%20used%20for%20canceling%20task%0A%20%20%20%20%20%20%20*%2Frun%3Afunction%20run(callback)%7BmicrotaskNode.textContent%3DmicrotaskNodeContent%2B%2B%3BmicrotaskCallbacks.push(callback)%3Breturn%20microtaskCurrHandle%2B%2B%3B%7D%2C%2F**%0A%20%20%20%20%20%20%20*%20Cancels%20a%20previously%20enqueued%20%60microTask%60%20callback.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40memberof%20Polymer.Async.microTask%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20handle%20Handle%20returned%20from%20%60run%60%20of%20callback%20to%20cancel%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2Fcancel%3Afunction%20cancel(handle)%7Bvar%20idx%3Dhandle-microtaskLastHandle%3Bif(idx%3E%3D0)%7Bif(!microtaskCallbacks%5Bidx%5D)%7Bthrow%20new%20Error('invalid%20async%20handle%3A%20'%2Bhandle)%3B%7DmicrotaskCallbacks%5Bidx%5D%3Dnull%3B%7D%7D%7D%7D%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Fasync.html.js%0A",
            "resourceBytes": 5682,
            "encodedBytes": 0,
            "unusedBytes": 1151
          },
          {
            "name": "data:text/javascript;charset=utf-8,var%20_typeof%3Dtypeof%20Symbol%3D%3D%3D%22function%22%26%26typeof%20Symbol.iterator%3D%3D%3D%22symbol%22%3Ffunction(obj)%7Breturn%20typeof%20obj%3B%7D%3Afunction(obj)%7Breturn%20obj%26%26typeof%20Symbol%3D%3D%3D%22function%22%26%26obj.constructor%3D%3D%3DSymbol%26%26obj!%3D%3DSymbol.prototype%3F%22symbol%22%3Atypeof%20obj%3B%7D%3Bvar%20_get%3Dfunction%20get(object%2Cproperty%2Creceiver)%7Bif(object%3D%3D%3Dnull)object%3DFunction.prototype%3Bvar%20desc%3DObject.getOwnPropertyDescriptor(object%2Cproperty)%3Bif(desc%3D%3D%3Dundefined)%7Bvar%20parent%3DObject.getPrototypeOf(object)%3Bif(parent%3D%3D%3Dnull)%7Breturn%20undefined%3B%7Delse%7Breturn%20get(parent%2Cproperty%2Creceiver)%3B%7D%7Delse%20if(%22value%22in%20desc)%7Breturn%20desc.value%3B%7Delse%7Bvar%20getter%3Ddesc.get%3Bif(getter%3D%3D%3Dundefined)%7Breturn%20undefined%3B%7Dreturn%20getter.call(receiver)%3B%7D%7D%3Bvar%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3B%2F**%20%40const%20%7B!AsyncInterface%7D%20*%2Fvar%20microtask%3DPolymer.Async.microTask%3B%2F**%0A%20%20%20%20%20*%20Element%20class%20mixin%20that%20provides%20basic%20meta-programming%20for%20creating%20one%0A%20%20%20%20%20*%20or%20more%20property%20accessors%20(getter%2Fsetter%20pair)%20that%20enqueue%20an%20async%0A%20%20%20%20%20*%20(batched)%20%60_propertiesChanged%60%20callback.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20For%20basic%20usage%20of%20this%20mixin%2C%20call%20%60MyClass.createProperties(props)%60%0A%20%20%20%20%20*%20once%20at%20class%20definition%20time%20to%20create%20property%20accessors%20for%20properties%0A%20%20%20%20%20*%20named%20in%20props%2C%20implement%20%60_propertiesChanged%60%20to%20react%20as%20desired%20to%0A%20%20%20%20%20*%20property%20changes%2C%20and%20implement%20%60static%20get%20observedAttributes()%60%20and%0A%20%20%20%20%20*%20include%20lowercase%20versions%20of%20any%20property%20names%20that%20should%20be%20set%20from%0A%20%20%20%20%20*%20attributes.%20Last%2C%20call%20%60this._enableProperties()%60%20in%20the%20element's%0A%20%20%20%20%20*%20%60connectedCallback%60%20to%20enable%20the%20accessors.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40mixinFunction%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40memberof%20Polymer%0A%20%20%20%20%20*%20%40summary%20Element%20class%20mixin%20for%20reacting%20to%20property%20changes%20from%0A%20%20%20%20%20*%20%20%20generated%20property%20accessors.%0A%20%20%20%20%20*%2FPolymer.PropertiesChanged%3DPolymer.dedupingMixin(function(superClass)%7B%2F**%0A%20%20%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20%20%20*%20%40mixinClass%0A%20%20%20%20%20%20%20*%20%40extends%20%7BsuperClass%7D%0A%20%20%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertiesChanged%7D%0A%20%20%20%20%20%20%20*%20%40unrestricted%0A%20%20%20%20%20%20%20*%2Fvar%20PropertiesChanged%3Dfunction(_superClass)%7B_inherits(PropertiesChanged%2C_superClass)%3B_createClass(PropertiesChanged%2C%5B%7Bkey%3A'_createPropertyAccessor'%2C%2F%2Feslint-disable-line%20no-unused-vars%0A%2F**%0A%20%20%20%20%20%20%20%20%20*%20Creates%20a%20setter%2Fgetter%20pair%20for%20the%20named%20property%20with%20its%20own%0A%20%20%20%20%20%20%20%20%20*%20local%20storage.%20%20The%20getter%20returns%20the%20value%20in%20the%20local%20storage%2C%0A%20%20%20%20%20%20%20%20%20*%20and%20the%20setter%20calls%20%60_setProperty%60%2C%20which%20updates%20the%20local%20storage%0A%20%20%20%20%20%20%20%20%20*%20for%20the%20property%20and%20enqueues%20a%20%60_propertiesChanged%60%20callback.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20This%20method%20may%20be%20called%20on%20a%20prototype%20or%20an%20instance.%20%20Calling%0A%20%20%20%20%20%20%20%20%20*%20this%20method%20may%20overwrite%20a%20property%20value%20that%20already%20exists%20on%0A%20%20%20%20%20%20%20%20%20*%20the%20prototype%2Finstance%20by%20creating%20the%20accessor.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20the%20property%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20readOnly%20When%20true%2C%20no%20setter%20is%20created%3B%20the%0A%20%20%20%20%20%20%20%20%20*%20%20%20protected%20%60_setProperty%60%20function%20must%20be%20used%20to%20set%20the%20property%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_createPropertyAccessor(property%2CreadOnly)%7Bthis._addPropertyToAttributeMap(property)%3Bif(!this.hasOwnProperty('__dataHasAccessor'))%7Bthis.__dataHasAccessor%3DObject.assign(%7B%7D%2Cthis.__dataHasAccessor)%3B%7Dif(!this.__dataHasAccessor%5Bproperty%5D)%7Bthis.__dataHasAccessor%5Bproperty%5D%3Dtrue%3Bthis._definePropertyAccessor(property%2CreadOnly)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Adds%20the%20given%20%60property%60%20to%20a%20map%20matching%20attribute%20names%0A%20%20%20%20%20%20%20%20%20*%20to%20property%20names%2C%20using%20%60attributeNameForProperty%60.%20This%20map%20is%0A%20%20%20%20%20%20%20%20%20*%20used%20when%20deserializing%20attribute%20values%20to%20properties.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20the%20property%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_addPropertyToAttributeMap'%2Cvalue%3Afunction%20_addPropertyToAttributeMap(property)%7Bif(!this.hasOwnProperty('__dataAttributes'))%7Bthis.__dataAttributes%3DObject.assign(%7B%7D%2Cthis.__dataAttributes)%3B%7Dif(!this.__dataAttributes%5Bproperty%5D)%7Bvar%20attr%3Dthis.constructor.attributeNameForProperty(property)%3Bthis.__dataAttributes%5Battr%5D%3Dproperty%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Defines%20a%20property%20accessor%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20the%20property%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20readOnly%20When%20true%2C%20no%20setter%20is%20created%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_definePropertyAccessor'%2Cvalue%3Afunction%20_definePropertyAccessor(property%2CreadOnly)%7BObject.defineProperty(this%2Cproperty%2C%7B%2F*%20eslint-disable%20valid-jsdoc%20*%2F%2F**%20%40this%20%7BPropertiesChanged%7D%20*%2Fget%3Afunction%20get()%7Breturn%20this._getProperty(property)%3B%7D%2C%2F**%20%40this%20%7BPropertiesChanged%7D%20*%2Fset%3AreadOnly%3Ffunction()%7B%7D%3Afunction(value)%7Bthis._setProperty(property%2Cvalue)%3B%7D%2F*%20eslint-enable%20*%2F%7D)%3B%7D%7D%5D%2C%5B%7Bkey%3A'createProperties'%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20Creates%20property%20accessors%20for%20the%20given%20property%20names.%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20props%20Object%20whose%20keys%20are%20names%20of%20accessors.%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20createProperties(props)%7Bvar%20proto%3Dthis.prototype%3Bfor(var%20prop%20in%20props)%7B%2F%2F%20don't%20stomp%20an%20existing%20accessor%0Aif(!(prop%20in%20proto))%7Bproto._createPropertyAccessor(prop)%3B%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Returns%20an%20attribute%20name%20that%20corresponds%20to%20the%20given%20property.%0A%20%20%20%20%20%20%20%20%20*%20The%20attribute%20name%20is%20the%20lowercased%20property%20name.%20Override%20to%0A%20%20%20%20%20%20%20%20%20*%20customize%20this%20mapping.%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20to%20convert%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Attribute%20name%20corresponding%20to%20the%20given%20property.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'attributeNameForProperty'%2Cvalue%3Afunction%20attributeNameForProperty(property)%7Breturn%20property.toLowerCase()%3B%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Override%20point%20to%20provide%20a%20type%20to%20which%20to%20deserialize%20a%20value%20to%0A%20%20%20%20%20%20%20%20%20*%20a%20given%20property.%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20name%20Name%20of%20property%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'typeForProperty'%2Cvalue%3Afunction%20typeForProperty(name)%7B%7D%7D%5D)%3Bfunction%20PropertiesChanged()%7B_classCallCheck(this%2CPropertiesChanged)%3Bvar%20_this%3D_possibleConstructorReturn(this%2C(PropertiesChanged.__proto__%7C%7CObject.getPrototypeOf(PropertiesChanged)).call(this))%3B_this.__dataEnabled%3Dfalse%3B_this.__dataReady%3Dfalse%3B_this.__dataInvalid%3Dfalse%3B_this.__data%3D%7B%7D%3B_this.__dataPending%3Dnull%3B_this.__dataOld%3Dnull%3B_this.__dataInstanceProps%3Dnull%3B_this.__serializing%3Dfalse%3B_this._initializeProperties()%3Breturn%20_this%3B%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Lifecycle%20callback%20called%20when%20properties%20are%20enabled%20via%0A%20%20%20%20%20%20%20%20%20*%20%60_enableProperties%60.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20Users%20may%20override%20this%20function%20to%20implement%20behavior%20that%20is%0A%20%20%20%20%20%20%20%20%20*%20dependent%20on%20the%20element%20having%20its%20property%20data%20initialized%2C%20e.g.%0A%20%20%20%20%20%20%20%20%20*%20from%20defaults%20(initialized%20from%20%60constructor%60%2C%20%60_initializeProperties%60)%2C%0A%20%20%20%20%20%20%20%20%20*%20%60attributeChangedCallback%60%2C%20or%20values%20propagated%20from%20host%20e.g.%20via%0A%20%20%20%20%20%20%20%20%20*%20bindings.%20%20%60super.ready()%60%20must%20be%20called%20to%20ensure%20the%20data%20system%0A%20%20%20%20%20%20%20%20%20*%20becomes%20enabled.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20%20%20*%2F_createClass(PropertiesChanged%2C%5B%7Bkey%3A'ready'%2Cvalue%3Afunction%20ready()%7Bthis.__dataReady%3Dtrue%3Bthis._flushProperties()%3B%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Initializes%20the%20local%20storage%20for%20property%20accessors.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20Provided%20as%20an%20override%20point%20for%20performing%20any%20setup%20work%20prior%0A%20%20%20%20%20%20%20%20%20*%20to%20initializing%20the%20property%20accessor%20system.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_initializeProperties'%2Cvalue%3Afunction%20_initializeProperties()%7B%2F%2F%20Capture%20instance%20properties%3B%20these%20will%20be%20set%20into%20accessors%0A%2F%2F%20during%20first%20flush.%20Don't%20set%20them%20here%2C%20since%20we%20want%0A%2F%2F%20these%20to%20overwrite%20defaults%2Fconstructor%20assignments%0Afor(var%20p%20in%20this.__dataHasAccessor)%7Bif(this.hasOwnProperty(p))%7Bthis.__dataInstanceProps%3Dthis.__dataInstanceProps%7C%7C%7B%7D%3Bthis.__dataInstanceProps%5Bp%5D%3Dthis%5Bp%5D%3Bdelete%20this%5Bp%5D%3B%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Called%20at%20ready%20time%20with%20bag%20of%20instance%20properties%20that%20overwrote%0A%20%20%20%20%20%20%20%20%20*%20accessors%20when%20the%20element%20upgraded.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20The%20default%20implementation%20sets%20these%20properties%20back%20into%20the%0A%20%20%20%20%20%20%20%20%20*%20setter%20at%20ready%20time.%20%20This%20method%20is%20provided%20as%20an%20override%0A%20%20%20%20%20%20%20%20%20*%20point%20for%20customizing%20or%20providing%20more%20efficient%20initialization.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20property%20values%20that%20were%20overwritten%0A%20%20%20%20%20%20%20%20%20*%20%20%20when%20creating%20property%20accessors.%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_initializeInstanceProperties'%2Cvalue%3Afunction%20_initializeInstanceProperties(props)%7BObject.assign(this%2Cprops)%3B%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Updates%20the%20local%20storage%20for%20a%20property%20(via%20%60_setPendingProperty%60)%0A%20%20%20%20%20%20%20%20%20*%20and%20enqueues%20a%20%60_proeprtiesChanged%60%20callback.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20the%20property%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_setProperty'%2Cvalue%3Afunction%20_setProperty(property%2Cvalue)%7Bif(this._setPendingProperty(property%2Cvalue))%7Bthis._invalidateProperties()%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Returns%20the%20value%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20property%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7B*%7D%20Value%20for%20the%20given%20property%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_getProperty'%2Cvalue%3Afunction%20_getProperty(property)%7Breturn%20this.__data%5Bproperty%5D%3B%7D%2F*%20eslint-disable%20no-unused-vars%20*%2F%2F**%0A%20%20%20%20%20%20%20%20%20*%20Updates%20the%20local%20storage%20for%20a%20property%2C%20records%20the%20previous%20value%2C%0A%20%20%20%20%20%20%20%20%20*%20and%20adds%20it%20to%20the%20set%20of%20%22pending%20changes%22%20that%20will%20be%20passed%20to%20the%0A%20%20%20%20%20%20%20%20%20*%20%60_propertiesChanged%60%20callback.%20%20This%20method%20does%20not%20enqueue%20the%0A%20%20%20%20%20%20%20%20%20*%20%60_propertiesChanged%60%20callback.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20the%20property%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20ext%20Not%20used%20here%3B%20affordance%20for%20closure%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Returns%20true%20if%20the%20property%20changed%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_setPendingProperty'%2Cvalue%3Afunction%20_setPendingProperty(property%2Cvalue%2Cext)%7Bvar%20old%3Dthis.__data%5Bproperty%5D%3Bvar%20changed%3Dthis._shouldPropertyChange(property%2Cvalue%2Cold)%3Bif(changed)%7Bif(!this.__dataPending)%7Bthis.__dataPending%3D%7B%7D%3Bthis.__dataOld%3D%7B%7D%3B%7D%2F%2F%20Ensure%20old%20is%20captured%20from%20the%20last%20turn%0Aif(this.__dataOld%26%26!(property%20in%20this.__dataOld))%7Bthis.__dataOld%5Bproperty%5D%3Dold%3B%7Dthis.__data%5Bproperty%5D%3Dvalue%3Bthis.__dataPending%5Bproperty%5D%3Dvalue%3B%7Dreturn%20changed%3B%7D%2F*%20eslint-enable%20*%2F%2F**%0A%20%20%20%20%20%20%20%20%20*%20Marks%20the%20properties%20as%20invalid%2C%20and%20enqueues%20an%20async%0A%20%20%20%20%20%20%20%20%20*%20%60_propertiesChanged%60%20callback.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_invalidateProperties'%2Cvalue%3Afunction%20_invalidateProperties()%7Bvar%20_this2%3Dthis%3Bif(!this.__dataInvalid%26%26this.__dataReady)%7Bthis.__dataInvalid%3Dtrue%3Bmicrotask.run(function()%7Bif(_this2.__dataInvalid)%7B_this2.__dataInvalid%3Dfalse%3B_this2._flushProperties()%3B%7D%7D)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Call%20to%20enable%20property%20accessor%20processing.%20Before%20this%20method%20is%0A%20%20%20%20%20%20%20%20%20*%20called%20accessor%20values%20will%20be%20set%20but%20side%20effects%20are%0A%20%20%20%20%20%20%20%20%20*%20queued.%20When%20called%2C%20any%20pending%20side%20effects%20occur%20immediately.%0A%20%20%20%20%20%20%20%20%20*%20For%20elements%2C%20generally%20%60connectedCallback%60%20is%20a%20normal%20spot%20to%20do%20so.%0A%20%20%20%20%20%20%20%20%20*%20It%20is%20safe%20to%20call%20this%20method%20multiple%20times%20as%20it%20only%20turns%20on%0A%20%20%20%20%20%20%20%20%20*%20property%20accessors%20once.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_enableProperties'%2Cvalue%3Afunction%20_enableProperties()%7Bif(!this.__dataEnabled)%7Bthis.__dataEnabled%3Dtrue%3Bif(this.__dataInstanceProps)%7Bthis._initializeInstanceProperties(this.__dataInstanceProps)%3Bthis.__dataInstanceProps%3Dnull%3B%7Dthis.ready()%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Calls%20the%20%60_propertiesChanged%60%20callback%20with%20the%20current%20set%20of%0A%20%20%20%20%20%20%20%20%20*%20pending%20changes%20(and%20old%20values%20recorded%20when%20pending%20changes%20were%0A%20%20%20%20%20%20%20%20%20*%20set)%2C%20and%20resets%20the%20pending%20set%20of%20changes.%20Generally%2C%20this%20method%0A%20%20%20%20%20%20%20%20%20*%20should%20not%20be%20called%20in%20user%20code.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_flushProperties'%2Cvalue%3Afunction%20_flushProperties()%7Bvar%20props%3Dthis.__data%3Bvar%20changedProps%3Dthis.__dataPending%3Bvar%20old%3Dthis.__dataOld%3Bif(this._shouldPropertiesChange(props%2CchangedProps%2Cold))%7Bthis.__dataPending%3Dnull%3Bthis.__dataOld%3Dnull%3Bthis._propertiesChanged(props%2CchangedProps%2Cold)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Called%20in%20%60_flushProperties%60%20to%20determine%20if%20%60_propertiesChanged%60%0A%20%20%20%20%20%20%20%20%20*%20should%20be%20called.%20The%20default%20implementation%20returns%20true%20if%0A%20%20%20%20%20%20%20%20%20*%20properties%20are%20pending.%20Override%20to%20customize%20when%0A%20%20%20%20%20%20%20%20%20*%20%60_propertiesChanged%60%20is%20called.%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20currentProps%20Bag%20of%20all%20current%20accessor%20values%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20changedProps%20Bag%20of%20properties%20changed%20since%20the%20last%0A%20%20%20%20%20%20%20%20%20*%20%20%20call%20to%20%60_propertiesChanged%60%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20oldProps%20Bag%20of%20previous%20values%20for%20each%20property%0A%20%20%20%20%20%20%20%20%20*%20%20%20in%20%60changedProps%60%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20true%20if%20changedProps%20is%20truthy%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_shouldPropertiesChange'%2Cvalue%3Afunction%20_shouldPropertiesChange(currentProps%2CchangedProps%2ColdProps)%7B%2F%2F%20eslint-disable-line%20no-unused-vars%0Areturn%20Boolean(changedProps)%3B%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Callback%20called%20when%20any%20properties%20with%20accessors%20created%20via%0A%20%20%20%20%20%20%20%20%20*%20%60_createPropertyAccessor%60%20have%20been%20set.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20currentProps%20Bag%20of%20all%20current%20accessor%20values%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20changedProps%20Bag%20of%20properties%20changed%20since%20the%20last%0A%20%20%20%20%20%20%20%20%20*%20%20%20call%20to%20%60_propertiesChanged%60%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20oldProps%20Bag%20of%20previous%20values%20for%20each%20property%0A%20%20%20%20%20%20%20%20%20*%20%20%20in%20%60changedProps%60%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_propertiesChanged'%2Cvalue%3Afunction%20_propertiesChanged(currentProps%2CchangedProps%2ColdProps)%7B%7D%2F%2F%20eslint-disable-line%20no-unused-vars%0A%2F**%0A%20%20%20%20%20%20%20%20%20*%20Method%20called%20to%20determine%20whether%20a%20property%20value%20should%20be%0A%20%20%20%20%20%20%20%20%20*%20considered%20as%20a%20change%20and%20cause%20the%20%60_propertiesChanged%60%20callback%0A%20%20%20%20%20%20%20%20%20*%20to%20be%20enqueued.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20The%20default%20implementation%20returns%20%60true%60%20if%20a%20strict%20equality%0A%20%20%20%20%20%20%20%20%20*%20check%20fails.%20The%20method%20always%20returns%20false%20for%20%60NaN%60.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20Override%20this%20method%20to%20e.g.%20provide%20stricter%20checking%20for%0A%20%20%20%20%20%20%20%20%20*%20Objects%2FArrays%20when%20using%20immutable%20patterns.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20New%20property%20value%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20old%20Previous%20property%20value%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Whether%20the%20property%20should%20be%20considered%20a%20change%0A%20%20%20%20%20%20%20%20%20*%20%20%20and%20enqueue%20a%20%60_proeprtiesChanged%60%20callback%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_shouldPropertyChange'%2Cvalue%3Afunction%20_shouldPropertyChange(property%2Cvalue%2Cold)%7Breturn(%2F%2F%20Strict%20equality%20check%0Aold!%3D%3Dvalue%26%26(%2F%2F%20This%20ensures%20(old%3D%3DNaN%2C%20value%3D%3DNaN)%20always%20returns%20false%0Aold%3D%3D%3Dold%7C%7Cvalue%3D%3D%3Dvalue))%3B%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Implements%20native%20Custom%20Elements%20%60attributeChangedCallback%60%20to%0A%20%20%20%20%20%20%20%20%20*%20set%20an%20attribute%20value%20to%20a%20property%20via%20%60_attributeToProperty%60.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20name%20Name%20of%20attribute%20that%20changed%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20old%20Old%20attribute%20value%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20value%20New%20attribute%20value%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20namespace%20Attribute%20namespace.%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20Super%20may%20or%20may%20not%20implement%20the%20callback%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'attributeChangedCallback'%2Cvalue%3Afunction%20attributeChangedCallback(name%2Cold%2Cvalue%2Cnamespace)%7Bif(old!%3D%3Dvalue)%7Bthis._attributeToProperty(name%2Cvalue)%3B%7Dif(_get(PropertiesChanged.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertiesChanged.prototype)%2C'attributeChangedCallback'%2Cthis))%7B_get(PropertiesChanged.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertiesChanged.prototype)%2C'attributeChangedCallback'%2Cthis).call(this%2Cname%2Cold%2Cvalue%2Cnamespace)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Deserializes%20an%20attribute%20to%20its%20associated%20property.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20This%20method%20calls%20the%20%60_deserializeValue%60%20method%20to%20convert%20the%20string%20to%0A%20%20%20%20%20%20%20%20%20*%20a%20typed%20value.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20attribute%20Name%20of%20attribute%20to%20deserialize.%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20value%20of%20the%20attribute.%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B*%3D%7D%20type%20type%20to%20deserialize%20to%2C%20defaults%20to%20the%20value%0A%20%20%20%20%20%20%20%20%20*%20returned%20from%20%60typeForProperty%60%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_attributeToProperty'%2Cvalue%3Afunction%20_attributeToProperty(attribute%2Cvalue%2Ctype)%7Bif(!this.__serializing)%7Bvar%20map%3Dthis.__dataAttributes%3Bvar%20property%3Dmap%26%26map%5Battribute%5D%7C%7Cattribute%3Bthis%5Bproperty%5D%3Dthis._deserializeValue(value%2Ctype%7C%7Cthis.constructor.typeForProperty(property))%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Serializes%20a%20property%20to%20its%20associated%20attribute.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%20Closure%20can't%20figure%20out%20%60this%60%20is%20an%20element.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%20to%20reflect.%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%3D%7D%20attribute%20Attribute%20name%20to%20reflect%20to.%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B*%3D%7D%20value%20Property%20value%20to%20refect.%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_propertyToAttribute'%2Cvalue%3Afunction%20_propertyToAttribute(property%2Cattribute%2Cvalue)%7Bthis.__serializing%3Dtrue%3Bvalue%3Darguments.length%3C3%3Fthis%5Bproperty%5D%3Avalue%3Bthis._valueToNodeAttribute(%2F**%20%40type%20%7B!HTMLElement%7D%20*%2Fthis%2Cvalue%2Cattribute%7C%7Cthis.constructor.attributeNameForProperty(property))%3Bthis.__serializing%3Dfalse%3B%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Sets%20a%20typed%20value%20to%20an%20HTML%20attribute%20on%20a%20node.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20This%20method%20calls%20the%20%60_serializeValue%60%20method%20to%20convert%20the%20typed%0A%20%20%20%20%20%20%20%20%20*%20value%20to%20a%20string.%20%20If%20the%20%60_serializeValue%60%20method%20returns%20%60undefined%60%2C%0A%20%20%20%20%20%20%20%20%20*%20the%20attribute%20will%20be%20removed%20(this%20is%20the%20default%20for%20boolean%0A%20%20%20%20%20%20%20%20%20*%20type%20%60false%60).%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7BElement%7D%20node%20Element%20to%20set%20attribute%20to.%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20serialize.%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20attribute%20Attribute%20name%20to%20serialize%20to.%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_valueToNodeAttribute'%2Cvalue%3Afunction%20_valueToNodeAttribute(node%2Cvalue%2Cattribute)%7Bvar%20str%3Dthis._serializeValue(value)%3Bif(str%3D%3D%3Dundefined)%7Bnode.removeAttribute(attribute)%3B%7Delse%7Bnode.setAttribute(attribute%2Cstr)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Converts%20a%20typed%20JavaScript%20value%20to%20a%20string.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20This%20method%20is%20called%20when%20setting%20JS%20property%20values%20to%0A%20%20%20%20%20%20%20%20%20*%20HTML%20attributes.%20%20Users%20may%20override%20this%20method%20to%20provide%0A%20%20%20%20%20%20%20%20%20*%20serialization%20for%20custom%20types.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Property%20value%20to%20serialize.%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bstring%20%7C%20undefined%7D%20String%20serialized%20from%20the%20provided%0A%20%20%20%20%20%20%20%20%20*%20property%20%20value.%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_serializeValue'%2Cvalue%3Afunction%20_serializeValue(value)%7Bswitch(typeof%20value%3D%3D%3D'undefined'%3F'undefined'%3A_typeof(value))%7Bcase'boolean'%3Areturn%20value%3F''%3Aundefined%3Bdefault%3Areturn%20value!%3Dnull%3Fvalue.toString()%3Aundefined%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Converts%20a%20string%20to%20a%20typed%20JavaScript%20value.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20This%20method%20is%20called%20when%20reading%20HTML%20attribute%20values%20to%0A%20%20%20%20%20%20%20%20%20*%20JS%20properties.%20%20Users%20may%20override%20this%20method%20to%20provide%0A%20%20%20%20%20%20%20%20%20*%20deserialization%20for%20custom%20%60type%60s.%20Types%20for%20%60Boolean%60%2C%20%60String%60%2C%0A%20%20%20%20%20%20%20%20%20*%20and%20%60Number%60%20convert%20attributes%20to%20the%20expected%20types.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20value%20Value%20to%20deserialize.%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B*%3D%7D%20type%20Type%20to%20deserialize%20the%20string%20to.%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7B*%7D%20Typed%20value%20deserialized%20from%20the%20provided%20string.%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_deserializeValue'%2Cvalue%3Afunction%20_deserializeValue(value%2Ctype)%7Bswitch(type)%7Bcase%20Boolean%3Areturn%20value!%3D%3Dnull%3Bcase%20Number%3Areturn%20Number(value)%3Bdefault%3Areturn%20value%3B%7D%7D%7D%5D)%3Breturn%20PropertiesChanged%3B%7D(superClass)%3Breturn%20PropertiesChanged%3B%7D)%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Fmixins%2Fproperties-changed.html.js%0A",
            "resourceBytes": 20501,
            "encodedBytes": 0,
            "unusedBytes": 7197
          },
          {
            "name": "data:text/javascript;charset=utf-8,var%20_typeof%3Dtypeof%20Symbol%3D%3D%3D%22function%22%26%26typeof%20Symbol.iterator%3D%3D%3D%22symbol%22%3Ffunction(obj)%7Breturn%20typeof%20obj%3B%7D%3Afunction(obj)%7Breturn%20obj%26%26typeof%20Symbol%3D%3D%3D%22function%22%26%26obj.constructor%3D%3D%3DSymbol%26%26obj!%3D%3DSymbol.prototype%3F%22symbol%22%3Atypeof%20obj%3B%7D%3Bvar%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bvar%20_get%3Dfunction%20get(object%2Cproperty%2Creceiver)%7Bif(object%3D%3D%3Dnull)object%3DFunction.prototype%3Bvar%20desc%3DObject.getOwnPropertyDescriptor(object%2Cproperty)%3Bif(desc%3D%3D%3Dundefined)%7Bvar%20parent%3DObject.getPrototypeOf(object)%3Bif(parent%3D%3D%3Dnull)%7Breturn%20undefined%3B%7Delse%7Breturn%20get(parent%2Cproperty%2Creceiver)%3B%7D%7Delse%20if(%22value%22in%20desc)%7Breturn%20desc.value%3B%7Delse%7Bvar%20getter%3Ddesc.get%3Bif(getter%3D%3D%3Dundefined)%7Breturn%20undefined%3B%7Dreturn%20getter.call(receiver)%3B%7D%7D%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3Bvar%20caseMap%3DPolymer.CaseMap%3B%2F%2F%20Save%20map%20of%20native%20properties%3B%20this%20forms%20a%20blacklist%20or%20properties%0A%2F%2F%20that%20won't%20have%20their%20values%20%22saved%22%20by%20%60saveAccessorValue%60%2C%20since%0A%2F%2F%20reading%20from%20an%20HTMLElement%20accessor%20from%20the%20context%20of%20a%20prototype%20throws%0Avar%20nativeProperties%3D%7B%7D%3Bvar%20proto%3DHTMLElement.prototype%3Bwhile(proto)%7Bvar%20props%3DObject.getOwnPropertyNames(proto)%3Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7BnativeProperties%5Bprops%5Bi%5D%5D%3Dtrue%3B%7Dproto%3DObject.getPrototypeOf(proto)%3B%7D%2F**%0A%20%20%20*%20Used%20to%20save%20the%20value%20of%20a%20property%20that%20will%20be%20overridden%20with%0A%20%20%20*%20an%20accessor.%20If%20the%20%60model%60%20is%20a%20prototype%2C%20the%20values%20will%20be%20saved%0A%20%20%20*%20in%20%60__dataProto%60%2C%20and%20it's%20up%20to%20the%20user%20(or%20downstream%20mixin)%20to%0A%20%20%20*%20decide%20how%2Fwhen%20to%20set%20these%20values%20back%20into%20the%20accessors.%0A%20%20%20*%20If%20%60model%60%20is%20already%20an%20instance%20(it%20has%20a%20%60__data%60%20property)%2C%20then%0A%20%20%20*%20the%20value%20will%20be%20set%20as%20a%20pending%20property%2C%20meaning%20the%20user%20should%0A%20%20%20*%20call%20%60_invalidateProperties%60%20or%20%60_flushProperties%60%20to%20take%20effect%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BObject%7D%20model%20Prototype%20or%20instance%0A%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20property%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20saveAccessorValue(model%2Cproperty)%7B%2F%2F%20Don't%20read%2Fstore%20value%20for%20any%20native%20properties%20since%20they%20could%20throw%0Aif(!nativeProperties%5Bproperty%5D)%7Bvar%20value%3Dmodel%5Bproperty%5D%3Bif(value!%3D%3Dundefined)%7Bif(model.__data)%7B%2F%2F%20Adding%20accessor%20to%20instance%3B%20update%20the%20property%0A%2F%2F%20It%20is%20the%20user's%20responsibility%20to%20call%20_flushProperties%0Amodel._setPendingProperty(property%2Cvalue)%3B%7Delse%7B%2F%2F%20Adding%20accessor%20to%20proto%3B%20save%20proto's%20value%20for%20instance-time%20use%0Aif(!model.__dataProto)%7Bmodel.__dataProto%3D%7B%7D%3B%7Delse%20if(!model.hasOwnProperty(JSCompiler_renameProperty('__dataProto'%2Cmodel)))%7Bmodel.__dataProto%3DObject.create(model.__dataProto)%3B%7Dmodel.__dataProto%5Bproperty%5D%3Dvalue%3B%7D%7D%7D%7D%2F**%0A%20%20%20*%20Element%20class%20mixin%20that%20provides%20basic%20meta-programming%20for%20creating%20one%0A%20%20%20*%20or%20more%20property%20accessors%20(getter%2Fsetter%20pair)%20that%20enqueue%20an%20async%0A%20%20%20*%20(batched)%20%60_propertiesChanged%60%20callback.%0A%20%20%20*%0A%20%20%20*%20For%20basic%20usage%20of%20this%20mixin%3A%0A%20%20%20*%20%0A%20%20%20*%20-%20%20%20Declare%20attributes%20to%20observe%20via%20the%20standard%20%60static%20get%20observedAttributes()%60.%20Use%0A%20%20%20*%20%20%20%20%20%60dash-case%60%20attribute%20names%20to%20represent%20%60camelCase%60%20property%20names.%20%0A%20%20%20*%20-%20%20%20Implement%20the%20%60_propertiesChanged%60%20callback%20on%20the%20class.%0A%20%20%20*%20-%20%20%20Call%20%60MyClass.createPropertiesForAttributes()%60%20**once**%20on%20the%20class%20to%20generate%20%0A%20%20%20*%20%20%20%20%20property%20accessors%20for%20each%20observed%20attribute.%20This%20must%20be%20called%20before%20the%20first%20%0A%20%20%20*%20%20%20%20%20instance%20is%20created%2C%20for%20example%2C%20by%20calling%20it%20before%20calling%20%60customElements.define%60.%0A%20%20%20*%20%20%20%20%20It%20can%20also%20be%20called%20lazily%20from%20the%20element's%20%60constructor%60%2C%20as%20long%20as%20it's%20guarded%20so%0A%20%20%20*%20%20%20%20%20that%20the%20call%20is%20only%20made%20once%2C%20when%20the%20first%20instance%20is%20created.%0A%20%20%20*%20-%20%20%20Call%20%60this._enableProperties()%60%20in%20the%20element's%20%60connectedCallback%60%20to%20enable%20%0A%20%20%20*%20%20%20%20%20the%20accessors.%0A%20%20%20*%0A%20%20%20*%20Any%20%60observedAttributes%60%20will%20automatically%20be%0A%20%20%20*%20deserialized%20via%20%60attributeChangedCallback%60%20and%20set%20to%20the%20associated%0A%20%20%20*%20property%20using%20%60dash-case%60-to-%60camelCase%60%20convention.%0A%20%20%20*%0A%20%20%20*%20%40mixinFunction%0A%20%20%20*%20%40polymer%0A%20%20%20*%20%40appliesMixin%20Polymer.PropertiesChanged%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Element%20class%20mixin%20for%20reacting%20to%20property%20changes%20from%0A%20%20%20*%20%20%20generated%20property%20accessors.%0A%20%20%20*%2FPolymer.PropertyAccessors%3DPolymer.dedupingMixin(function(superClass)%7B%2F**%0A%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20*%20%40extends%20%7BsuperClass%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertiesChanged%7D%0A%20%20%20%20%20*%20%40unrestricted%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Fvar%20base%3DPolymer.PropertiesChanged(superClass)%3B%2F**%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40mixinClass%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertyAccessors%7D%0A%20%20%20%20%20*%20%40extends%20%7Bbase%7D%0A%20%20%20%20%20*%20%40unrestricted%0A%20%20%20%20%20*%2Fvar%20PropertyAccessors%3Dfunction(_base)%7B_inherits(PropertyAccessors%2C_base)%3Bfunction%20PropertyAccessors()%7B_classCallCheck(this%2CPropertyAccessors)%3Breturn%20_possibleConstructorReturn(this%2C(PropertyAccessors.__proto__%7C%7CObject.getPrototypeOf(PropertyAccessors)).apply(this%2Carguments))%3B%7D_createClass(PropertyAccessors%2C%5B%7Bkey%3A'_initializeProperties'%2C%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20PropertiesChanged%20implementation%20to%20initialize%20values%20for%0A%20%20%20%20%20%20%20*%20accessors%20created%20for%20values%20that%20already%20existed%20on%20the%20element%0A%20%20%20%20%20%20%20*%20prototype.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_initializeProperties()%7Bif(this.__dataProto)%7Bthis._initializeProtoProperties(this.__dataProto)%3Bthis.__dataProto%3Dnull%3B%7D_get(PropertyAccessors.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertyAccessors.prototype)%2C'_initializeProperties'%2Cthis).call(this)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Called%20at%20instance%20time%20with%20bag%20of%20properties%20that%20were%20overwritten%0A%20%20%20%20%20%20%20*%20by%20accessors%20on%20the%20prototype%20when%20accessors%20were%20created.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20default%20implementation%20sets%20these%20properties%20back%20into%20the%0A%20%20%20%20%20%20%20*%20setter%20at%20instance%20time.%20%20This%20method%20is%20provided%20as%20an%20override%0A%20%20%20%20%20%20%20*%20point%20for%20customizing%20or%20providing%20more%20efficient%20initialization.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20property%20values%20that%20were%20overwritten%0A%20%20%20%20%20%20%20*%20%20%20when%20creating%20property%20accessors.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_initializeProtoProperties'%2Cvalue%3Afunction%20_initializeProtoProperties(props)%7Bfor(var%20p%20in%20props)%7Bthis._setProperty(p%2Cprops%5Bp%5D)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Ensures%20the%20element%20has%20the%20given%20attribute.%20If%20it%20does%20not%2C%0A%20%20%20%20%20%20%20*%20assigns%20the%20given%20value%20to%20the%20attribute.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%20Closure%20can't%20figure%20out%20%60this%60%20is%20infact%20an%20element%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20attribute%20Name%20of%20attribute%20to%20ensure%20is%20set.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20value%20of%20the%20attribute.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_ensureAttribute'%2Cvalue%3Afunction%20_ensureAttribute(attribute%2Cvalue)%7Bvar%20el%3D%2F**%20%40type%20%7B!HTMLElement%7D%20*%2Fthis%3Bif(!el.hasAttribute(attribute))%7Bthis._valueToNodeAttribute(el%2Cvalue%2Cattribute)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20PropertiesChanged%20implemention%20to%20serialize%20objects%20as%20JSON.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Property%20value%20to%20serialize.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bstring%20%7C%20undefined%7D%20String%20serialized%20from%20the%20provided%20property%20value.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_serializeValue'%2Cvalue%3Afunction%20_serializeValue(value)%7B%2F*%20eslint-disable%20no-fallthrough%20*%2Fswitch(typeof%20value%3D%3D%3D'undefined'%3F'undefined'%3A_typeof(value))%7Bcase'object'%3Aif(value%20instanceof%20Date)%7Breturn%20value.toString()%3B%7Delse%20if(value)%7Btry%7Breturn%20JSON.stringify(value)%3B%7Dcatch(x)%7Breturn''%3B%7D%7Ddefault%3Areturn%20_get(PropertyAccessors.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertyAccessors.prototype)%2C'_serializeValue'%2Cthis).call(this%2Cvalue)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Converts%20a%20string%20to%20a%20typed%20JavaScript%20value.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20is%20called%20by%20Polymer%20when%20reading%20HTML%20attribute%20values%20to%0A%20%20%20%20%20%20%20*%20JS%20properties.%20%20Users%20may%20override%20this%20method%20on%20Polymer%20element%0A%20%20%20%20%20%20%20*%20prototypes%20to%20provide%20deserialization%20for%20custom%20%60type%60s.%20%20Note%2C%0A%20%20%20%20%20%20%20*%20the%20%60type%60%20argument%20is%20the%20value%20of%20the%20%60type%60%20field%20provided%20in%20the%0A%20%20%20%20%20%20%20*%20%60properties%60%20configuration%20object%20for%20a%20given%20property%2C%20and%20is%0A%20%20%20%20%20%20%20*%20by%20convention%20the%20constructor%20for%20the%20type%20to%20deserialize.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20value%20Attribute%20value%20to%20deserialize.%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%3D%7D%20type%20Type%20to%20deserialize%20the%20string%20to.%0A%20%20%20%20%20%20%20*%20%40return%20%7B*%7D%20Typed%20value%20deserialized%20from%20the%20provided%20string.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_deserializeValue'%2Cvalue%3Afunction%20_deserializeValue(value%2Ctype)%7B%2F**%0A%20%20%20%20%20%20%20%20%20*%20%40type%20%7B*%7D%0A%20%20%20%20%20%20%20%20%20*%2Fvar%20outValue%3Dvoid%200%3Bswitch(type)%7Bcase%20Object%3Atry%7BoutValue%3DJSON.parse(%2F**%20%40type%20%7Bstring%7D%20*%2Fvalue)%3B%7Dcatch(x)%7B%2F%2F%20allow%20non-JSON%20literals%20like%20Strings%20and%20Numbers%0AoutValue%3Dvalue%3B%7Dbreak%3Bcase%20Array%3Atry%7BoutValue%3DJSON.parse(%2F**%20%40type%20%7Bstring%7D%20*%2Fvalue)%3B%7Dcatch(x)%7BoutValue%3Dnull%3Bconsole.warn('Polymer%3A%3AAttributes%3A%20couldn%5C't%20decode%20Array%20as%20JSON%3A%20'%2Bvalue)%3B%7Dbreak%3Bcase%20Date%3AoutValue%3DisNaN(value)%3FString(value)%3ANumber(value)%3BoutValue%3Dnew%20Date(outValue)%3Bbreak%3Bdefault%3AoutValue%3D_get(PropertyAccessors.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertyAccessors.prototype)%2C'_deserializeValue'%2Cthis).call(this%2Cvalue%2Ctype)%3Bbreak%3B%7Dreturn%20outValue%3B%7D%2F*%20eslint-enable%20no-fallthrough%20*%2F%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20PropertiesChanged%20implementation%20to%20save%20existing%20prototype%0A%20%20%20%20%20%20%20*%20property%20value%20so%20that%20it%20can%20be%20reset.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20the%20property%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20readOnly%20When%20true%2C%20no%20setter%20is%20created%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20When%20calling%20on%20a%20prototype%2C%20any%20overwritten%20values%20are%20saved%20in%0A%20%20%20%20%20%20%20*%20%60__dataProto%60%2C%20and%20it%20is%20up%20to%20the%20subclasser%20to%20decide%20how%2Fwhen%0A%20%20%20%20%20%20%20*%20to%20set%20those%20properties%20back%20into%20the%20accessor.%20%20When%20calling%20on%20an%0A%20%20%20%20%20%20%20*%20instance%2C%20the%20overwritten%20value%20is%20set%20via%20%60_setPendingProperty%60%2C%0A%20%20%20%20%20%20%20*%20and%20the%20user%20should%20call%20%60_invalidateProperties%60%20or%20%60_flushProperties%60%0A%20%20%20%20%20%20%20*%20for%20the%20values%20to%20take%20effect.%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_definePropertyAccessor'%2Cvalue%3Afunction%20_definePropertyAccessor(property%2CreadOnly)%7BsaveAccessorValue(this%2Cproperty)%3B_get(PropertyAccessors.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertyAccessors.prototype)%2C'_definePropertyAccessor'%2Cthis).call(this%2Cproperty%2CreadOnly)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20true%20if%20this%20library%20created%20an%20accessor%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20an%20accessor%20was%20created%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_hasAccessor'%2Cvalue%3Afunction%20_hasAccessor(property)%7Breturn%20this.__dataHasAccessor%26%26this.__dataHasAccessor%5Bproperty%5D%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20true%20if%20the%20specified%20property%20has%20a%20pending%20change.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20prop%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20property%20has%20a%20pending%20change%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_isPropertyPending'%2Cvalue%3Afunction%20_isPropertyPending(prop)%7Breturn%20Boolean(this.__dataPending%26%26prop%20in%20this.__dataPending)%3B%7D%7D%5D%2C%5B%7Bkey%3A'createPropertiesForAttributes'%2C%2F**%0A%20%20%20%20%20%20%20*%20Generates%20property%20accessors%20for%20all%20attributes%20in%20the%20standard%0A%20%20%20%20%20%20%20*%20static%20%60observedAttributes%60%20array.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Attribute%20names%20are%20mapped%20to%20property%20names%20using%20the%20%60dash-case%60%20to%0A%20%20%20%20%20%20%20*%20%60camelCase%60%20convention%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20createPropertiesForAttributes()%7Bvar%20a%24%3Dthis.observedAttributes%3Bfor(var%20_i%3D0%3B_i%3Ca%24.length%3B_i%2B%2B)%7Bthis.prototype._createPropertyAccessor(caseMap.dashToCamelCase(a%24%5B_i%5D))%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20an%20attribute%20name%20that%20corresponds%20to%20the%20given%20property.%0A%20%20%20%20%20%20%20*%20By%20default%2C%20converts%20camel%20to%20dash%20case%2C%20e.g.%20%60fooBar%60%20to%20%60foo-bar%60.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20to%20convert%0A%20%20%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Attribute%20name%20corresponding%20to%20the%20given%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'attributeNameForProperty'%2Cvalue%3Afunction%20attributeNameForProperty(property)%7Breturn%20caseMap.camelToDashCase(property)%3B%7D%7D%5D)%3Breturn%20PropertyAccessors%3B%7D(base)%3Breturn%20PropertyAccessors%3B%7D)%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Fmixins%2Fproperty-accessors.html.js%0A",
            "resourceBytes": 12872,
            "encodedBytes": 0,
            "unusedBytes": 4982
          },
          {
            "name": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3Bvar%20walker%3Ddocument.createTreeWalker(document%2CNodeFilter.SHOW_ALL%2Cnull%2Cfalse)%3B%2F%2F%201.x%20backwards-compatible%20auto-wrapper%20for%20template%20type%20extensions%0A%2F%2F%20This%20is%20a%20clear%20layering%20violation%20and%20gives%20favored-nation%20status%20to%0A%2F%2F%20dom-if%20and%20dom-repeat%20templates.%20%20This%20is%20a%20conceit%20we're%20choosing%20to%20keep%0A%2F%2F%20a.)%20to%20ease%201.x%20backwards-compatibility%20due%20to%20loss%20of%20%60is%60%2C%20and%0A%2F%2F%20b.)%20to%20maintain%20if%2Frepeat%20capability%20in%20parser-constrained%20elements%0A%2F%2F%20%20%20%20%20(e.g.%20table%2C%20select)%20in%20lieu%20of%20native%20CE%20type%20extensions%20without%0A%2F%2F%20%20%20%20%20massive%20new%20invention%20in%20this%20space%20(e.g.%20directive%20system)%0Avar%20templateExtensions%3D%7B'dom-if'%3Atrue%2C'dom-repeat'%3Atrue%7D%3Bfunction%20wrapTemplateExtension(node)%7Bvar%20is%3Dnode.getAttribute('is')%3Bif(is%26%26templateExtensions%5Bis%5D)%7Bvar%20t%3Dnode%3Bt.removeAttribute('is')%3Bnode%3Dt.ownerDocument.createElement(is)%3Bt.parentNode.replaceChild(node%2Ct)%3Bnode.appendChild(t)%3Bwhile(t.attributes.length)%7Bnode.setAttribute(t.attributes%5B0%5D.name%2Ct.attributes%5B0%5D.value)%3Bt.removeAttribute(t.attributes%5B0%5D.name)%3B%7D%7Dreturn%20node%3B%7Dfunction%20findTemplateNode(root%2CnodeInfo)%7B%2F%2F%20recursively%20ascend%20tree%20until%20we%20hit%20root%0Avar%20parent%3DnodeInfo.parentInfo%26%26findTemplateNode(root%2CnodeInfo.parentInfo)%3B%2F%2F%20unwind%20the%20stack%2C%20returning%20the%20indexed%20node%20at%20each%20level%0Aif(parent)%7B%2F%2F%20note%3A%20marginally%20faster%20than%20indexing%20via%20childNodes%0A%2F%2F%20(http%3A%2F%2Fjsperf.com%2Fchildnodes-lookup)%0Awalker.currentNode%3Dparent%3Bfor(var%20n%3Dwalker.firstChild()%2Ci%3D0%3Bn%3Bn%3Dwalker.nextSibling())%7Bif(nodeInfo.parentIndex%3D%3D%3Di%2B%2B)%7Breturn%20n%3B%7D%7D%7Delse%7Breturn%20root%3B%7D%7D%2F%2F%20construct%20%60%24%60%20map%20(from%20id%20annotations)%0Afunction%20applyIdToMap(inst%2Cmap%2Cnode%2CnodeInfo)%7Bif(nodeInfo.id)%7Bmap%5BnodeInfo.id%5D%3Dnode%3B%7D%7D%2F%2F%20install%20event%20listeners%20(from%20event%20annotations)%0Afunction%20applyEventListener(inst%2Cnode%2CnodeInfo)%7Bif(nodeInfo.events%26%26nodeInfo.events.length)%7Bfor(var%20j%3D0%2Ce%24%3DnodeInfo.events%2Ce%3Bj%3Ce%24.length%26%26(e%3De%24%5Bj%5D)%3Bj%2B%2B)%7Binst._addMethodEventListenerToNode(node%2Ce.name%2Ce.value%2Cinst)%3B%7D%7D%7D%2F%2F%20push%20configuration%20references%20at%20configure%20time%0Afunction%20applyTemplateContent(inst%2Cnode%2CnodeInfo)%7Bif(nodeInfo.templateInfo)%7Bnode._templateInfo%3DnodeInfo.templateInfo%3B%7D%7Dfunction%20createNodeEventHandler(context%2CeventName%2CmethodName)%7B%2F%2F%20Instances%20can%20optionally%20have%20a%20_methodHost%20which%20allows%20redirecting%20where%0A%2F%2F%20to%20find%20methods.%20Currently%20used%20by%20%60templatize%60.%0Acontext%3Dcontext._methodHost%7C%7Ccontext%3Bvar%20handler%3Dfunction%20handler(e)%7Bif(context%5BmethodName%5D)%7Bcontext%5BmethodName%5D(e%2Ce.detail)%3B%7Delse%7Bconsole.warn('listener%20method%20%60'%2BmethodName%2B'%60%20not%20defined')%3B%7D%7D%3Breturn%20handler%3B%7D%2F**%0A%20%20%20*%20Element%20mixin%20that%20provides%20basic%20template%20parsing%20and%20stamping%2C%20including%0A%20%20%20*%20the%20following%20template-related%20features%20for%20stamped%20templates%3A%0A%20%20%20*%0A%20%20%20*%20-%20Declarative%20event%20listeners%20(%60on-eventname%3D%22listener%22%60)%0A%20%20%20*%20-%20Map%20of%20node%20id's%20to%20stamped%20node%20instances%20(%60this.%24.id%60)%0A%20%20%20*%20-%20Nested%20template%20content%20caching%2Fremoval%20and%20re-installation%20(performance%0A%20%20%20*%20%20%20optimization)%0A%20%20%20*%0A%20%20%20*%20%40mixinFunction%0A%20%20%20*%20%40polymer%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Element%20class%20mixin%20that%20provides%20basic%20template%20parsing%20and%20stamping%0A%20%20%20*%2FPolymer.TemplateStamp%3DPolymer.dedupingMixin(function(superClass)%7B%2F**%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40mixinClass%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_TemplateStamp%7D%0A%20%20%20%20%20*%2Fvar%20TemplateStamp%3Dfunction(_superClass)%7B_inherits(TemplateStamp%2C_superClass)%3Bfunction%20TemplateStamp()%7B_classCallCheck(this%2CTemplateStamp)%3Breturn%20_possibleConstructorReturn(this%2C(TemplateStamp.__proto__%7C%7CObject.getPrototypeOf(TemplateStamp)).apply(this%2Carguments))%3B%7D_createClass(TemplateStamp%2C%5B%7Bkey%3A'_stampTemplate'%2C%2F**%0A%20%20%20%20%20%20%20*%20Clones%20the%20provided%20template%20content%20and%20returns%20a%20document%20fragment%0A%20%20%20%20%20%20%20*%20containing%20the%20cloned%20dom.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20template%20is%20parsed%20(once%20and%20memoized)%20using%20this%20library's%0A%20%20%20%20%20%20%20*%20template%20parsing%20features%2C%20and%20provides%20the%20following%20value-added%0A%20%20%20%20%20%20%20*%20features%3A%0A%20%20%20%20%20%20%20*%20*%20Adds%20declarative%20event%20listeners%20for%20%60on-event%3D%22handler%22%60%20attributes%0A%20%20%20%20%20%20%20*%20*%20Generates%20an%20%22id%20map%22%20for%20all%20nodes%20with%20id's%20under%20%60%24%60%20on%20returned%0A%20%20%20%20%20%20%20*%20%20%20document%20fragment%0A%20%20%20%20%20%20%20*%20*%20Passes%20template%20info%20including%20%60content%60%20back%20to%20templates%20as%0A%20%20%20%20%20%20%20*%20%20%20%60_templateInfo%60%20(a%20performance%20optimization%20to%20avoid%20deep%20template%0A%20%20%20%20%20%20%20*%20%20%20cloning)%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%20that%20the%20memoized%20template%20parsing%20process%20is%20destructive%20to%20the%0A%20%20%20%20%20%20%20*%20template%3A%20attributes%20for%20bindings%20and%20declarative%20event%20listeners%20are%0A%20%20%20%20%20%20%20*%20removed%20after%20being%20noted%20in%20notes%2C%20and%20any%20nested%20%60%3Ctemplate%3E.content%60%0A%20%20%20%20%20%20%20*%20is%20removed%20and%20stored%20in%20notes%20as%20well.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!HTMLTemplateElement%7D%20template%20Template%20to%20stamp%0A%20%20%20%20%20%20%20*%20%40return%20%7B!StampedTemplate%7D%20Cloned%20template%20content%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_stampTemplate(template)%7B%2F%2F%20Polyfill%20support%3A%20bootstrap%20the%20template%20if%20it%20has%20not%20already%20been%0Aif(template%26%26!template.content%26%26window.HTMLTemplateElement%26%26HTMLTemplateElement.decorate)%7BHTMLTemplateElement.decorate(template)%3B%7Dvar%20templateInfo%3Dthis.constructor._parseTemplate(template)%3Bvar%20nodeInfo%3DtemplateInfo.nodeInfoList%3Bvar%20content%3DtemplateInfo.content%7C%7Ctemplate.content%3Bvar%20dom%3D%2F**%20%40type%20%7BDocumentFragment%7D%20*%2Fdocument.importNode(content%2Ctrue)%3B%2F%2F%20NOTE%3A%20ShadyDom%20optimization%20indicating%20there%20is%20an%20insertion%20point%0Adom.__noInsertionPoint%3D!templateInfo.hasInsertionPoint%3Bvar%20nodes%3Ddom.nodeList%3Dnew%20Array(nodeInfo.length)%3Bdom.%24%3D%7B%7D%3Bfor(var%20i%3D0%2Cl%3DnodeInfo.length%2Cinfo%3Bi%3Cl%26%26(info%3DnodeInfo%5Bi%5D)%3Bi%2B%2B)%7Bvar%20node%3Dnodes%5Bi%5D%3DfindTemplateNode(dom%2Cinfo)%3BapplyIdToMap(this%2Cdom.%24%2Cnode%2Cinfo)%3BapplyTemplateContent(this%2Cnode%2Cinfo)%3BapplyEventListener(this%2Cnode%2Cinfo)%3B%7Ddom%3D%2F**%20%40type%20%7B!StampedTemplate%7D%20*%2Fdom%3B%2F%2F%20eslint-disable-line%20no-self-assign%0Areturn%20dom%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Adds%20an%20event%20listener%20by%20method%20name%20for%20the%20event%20provided.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20generates%20a%20handler%20function%20that%20looks%20up%20the%20method%0A%20%20%20%20%20%20%20*%20name%20at%20handling%20time.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Node%7D%20node%20Node%20to%20add%20listener%20on%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20eventName%20Name%20of%20event%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20methodName%20Name%20of%20method%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%3D%7D%20context%20Context%20the%20method%20will%20be%20called%20on%20(defaults%0A%20%20%20%20%20%20%20*%20%20%20to%20%60node%60)%0A%20%20%20%20%20%20%20*%20%40return%20%7BFunction%7D%20Generated%20handler%20function%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_addMethodEventListenerToNode'%2Cvalue%3Afunction%20_addMethodEventListenerToNode(node%2CeventName%2CmethodName%2Ccontext)%7Bcontext%3Dcontext%7C%7Cnode%3Bvar%20handler%3DcreateNodeEventHandler(context%2CeventName%2CmethodName)%3Bthis._addEventListenerToNode(node%2CeventName%2Chandler)%3Breturn%20handler%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Override%20point%20for%20adding%20custom%20or%20simulated%20event%20handling.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Node%7D%20node%20Node%20to%20add%20event%20listener%20to%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20eventName%20Name%20of%20event%0A%20%20%20%20%20%20%20*%20%40param%20%7Bfunction(!Event)%3Avoid%7D%20handler%20Listener%20function%20to%20add%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_addEventListenerToNode'%2Cvalue%3Afunction%20_addEventListenerToNode(node%2CeventName%2Chandler)%7Bnode.addEventListener(eventName%2Chandler)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Override%20point%20for%20adding%20custom%20or%20simulated%20event%20handling.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Node%7D%20node%20Node%20to%20remove%20event%20listener%20from%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20eventName%20Name%20of%20event%0A%20%20%20%20%20%20%20*%20%40param%20%7Bfunction(!Event)%3Avoid%7D%20handler%20Listener%20function%20to%20remove%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_removeEventListenerFromNode'%2Cvalue%3Afunction%20_removeEventListenerFromNode(node%2CeventName%2Chandler)%7Bnode.removeEventListener(eventName%2Chandler)%3B%7D%7D%5D%2C%5B%7Bkey%3A'_parseTemplate'%2C%2F**%0A%20%20%20%20%20%20%20*%20Scans%20a%20template%20to%20produce%20template%20metadata.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Template-specific%20metadata%20are%20stored%20in%20the%20object%20returned%2C%20and%20node-%0A%20%20%20%20%20%20%20*%20specific%20metadata%20are%20stored%20in%20objects%20in%20its%20flattened%20%60nodeInfoList%60%0A%20%20%20%20%20%20%20*%20array.%20%20Only%20nodes%20in%20the%20template%20that%20were%20parsed%20as%20nodes%20of%0A%20%20%20%20%20%20%20*%20interest%20contain%20an%20object%20in%20%60nodeInfoList%60.%20%20Each%20%60nodeInfo%60%20object%0A%20%20%20%20%20%20%20*%20contains%20an%20%60index%60%20(%60childNodes%60%20index%20in%20parent)%20and%20optionally%0A%20%20%20%20%20%20%20*%20%60parent%60%2C%20which%20points%20to%20node%20info%20of%20its%20parent%20(including%20its%20index).%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20template%20metadata%20object%20returned%20from%20this%20method%20has%20the%20following%0A%20%20%20%20%20%20%20*%20structure%20(many%20fields%20optional)%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%60%60%60js%0A%20%20%20%20%20%20%20*%20%20%20%7B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%2F%2F%20Flattened%20list%20of%20node%20metadata%20(for%20nodes%20that%20generated%20metadata)%0A%20%20%20%20%20%20%20*%20%20%20%20%20nodeInfoList%3A%20%5B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%2F%2F%20%60id%60%20attribute%20for%20any%20nodes%20with%20id's%20for%20generating%20%60%24%60%20map%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20id%3A%20%7Bstring%7D%2C%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%2F%2F%20%60on-event%3D%22handler%22%60%20metadata%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20events%3A%20%5B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%20%20name%3A%20%7Bstring%7D%2C%20%20%20%2F%2F%20event%20name%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%20%20value%3A%20%7Bstring%7D%2C%20%20%2F%2F%20handler%20method%20name%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%7D%2C%20...%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%2F%2F%20Notes%20when%20the%20template%20contained%20a%20%60%3Cslot%3E%60%20for%20shady%20DOM%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%2F%2F%20optimization%20purposes%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20hasInsertionPoint%3A%20%7Bboolean%7D%2C%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%2F%2F%20For%20nested%20%60%3Ctemplate%3E%60%60%20nodes%2C%20nested%20template%20metadata%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20templateInfo%3A%20%7Bobject%7D%2C%20%2F%2F%20nested%20template%20metadata%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%2F%2F%20Metadata%20to%20allow%20efficient%20retrieval%20of%20instanced%20node%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%2F%2F%20corresponding%20to%20this%20metadata%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20parentInfo%3A%20%7Bnumber%7D%2C%20%20%20%2F%2F%20reference%20to%20parent%20nodeInfo%3E%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20parentIndex%3A%20%7Bnumber%7D%2C%20%20%2F%2F%20index%20in%20parent's%20%60childNodes%60%20collection%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20infoIndex%3A%20%7Bnumber%7D%2C%20%20%20%20%2F%2F%20index%20of%20this%20%60nodeInfo%60%20in%20%60templateInfo.nodeInfoList%60%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20...%0A%20%20%20%20%20%20%20*%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20*%20%20%20%20%20%2F%2F%20When%20true%2C%20the%20template%20had%20the%20%60strip-whitespace%60%20attribute%0A%20%20%20%20%20%20%20*%20%20%20%20%20%2F%2F%20or%20was%20nested%20in%20a%20template%20with%20that%20setting%0A%20%20%20%20%20%20%20*%20%20%20%20%20stripWhitespace%3A%20%7Bboolean%7D%2C%0A%20%20%20%20%20%20%20*%20%20%20%20%20%2F%2F%20For%20nested%20templates%2C%20nested%20template%20content%20is%20moved%20into%0A%20%20%20%20%20%20%20*%20%20%20%20%20%2F%2F%20a%20document%20fragment%20stored%20here%3B%20this%20is%20an%20optimization%20to%0A%20%20%20%20%20%20%20*%20%20%20%20%20%2F%2F%20avoid%20the%20cost%20of%20nested%20template%20cloning%0A%20%20%20%20%20%20%20*%20%20%20%20%20content%3A%20%7BDocumentFragment%7D%0A%20%20%20%20%20%20%20*%20%20%20%7D%0A%20%20%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20kicks%20off%20a%20recursive%20treewalk%20as%20follows%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20%20%20*%20%20%20%20_parseTemplate%20%3C---------------------%2B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20_parseTemplateContent%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7C%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20_parseTemplateNode%20%20%3C------------%7C--%2B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%20_parseTemplateNestedTemplate%20--%2B%20%20%7C%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%20_parseTemplateChildNodes%20---------%2B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%20_parseTemplateNodeAttributes%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%20_parseTemplateNodeAttribute%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20These%20methods%20may%20be%20overridden%20to%20add%20custom%20metadata%20about%20templates%0A%20%20%20%20%20%20%20*%20to%20either%20%60templateInfo%60%20or%20%60nodeInfo%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%20that%20this%20method%20may%20be%20destructive%20to%20the%20template%2C%20in%20that%0A%20%20%20%20%20%20%20*%20e.g.%20event%20annotations%20may%20be%20removed%20after%20being%20noted%20in%20the%0A%20%20%20%20%20%20%20*%20template%20metadata.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!HTMLTemplateElement%7D%20template%20Template%20to%20parse%0A%20%20%20%20%20%20%20*%20%40param%20%7BTemplateInfo%3D%7D%20outerTemplateInfo%20Template%20metadata%20from%20the%20outer%0A%20%20%20%20%20%20%20*%20%20%20template%2C%20for%20parsing%20nested%20templates%0A%20%20%20%20%20%20%20*%20%40return%20%7B!TemplateInfo%7D%20Parsed%20template%20metadata%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_parseTemplate(template%2CouterTemplateInfo)%7B%2F%2F%20since%20a%20template%20may%20be%20re-used%2C%20memo-ize%20metadata%0Aif(!template._templateInfo)%7Bvar%20templateInfo%3Dtemplate._templateInfo%3D%7B%7D%3BtemplateInfo.nodeInfoList%3D%5B%5D%3BtemplateInfo.stripWhiteSpace%3DPolymer.legacyOptimizations%7C%7CouterTemplateInfo%26%26outerTemplateInfo.stripWhiteSpace%7C%7Ctemplate.hasAttribute('strip-whitespace')%3Bthis._parseTemplateContent(template%2CtemplateInfo%2C%7Bparent%3Anull%7D)%3B%7Dreturn%20template._templateInfo%3B%7D%7D%2C%7Bkey%3A'_parseTemplateContent'%2Cvalue%3Afunction%20_parseTemplateContent(template%2CtemplateInfo%2CnodeInfo)%7Breturn%20this._parseTemplateNode(template.content%2CtemplateInfo%2CnodeInfo)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Parses%20template%20node%20and%20adds%20template%20and%20node%20metadata%20based%20on%0A%20%20%20%20%20%20%20*%20the%20current%20node%2C%20and%20its%20%60childNodes%60%20and%20%60attributes%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20may%20be%20overridden%20to%20add%20custom%20node%20or%20template%20specific%0A%20%20%20%20%20%20%20*%20metadata%20based%20on%20this%20node.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BNode%7D%20node%20Node%20to%20parse%0A%20%20%20%20%20%20%20*%20%40param%20%7B!TemplateInfo%7D%20templateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20%20%20%20%20*%20%40param%20%7B!NodeInfo%7D%20nodeInfo%20Node%20metadata%20for%20current%20template.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20%60true%60%20if%20the%20visited%20node%20added%20node-specific%0A%20%20%20%20%20%20%20*%20%20%20metadata%20to%20%60nodeInfo%60%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_parseTemplateNode'%2Cvalue%3Afunction%20_parseTemplateNode(node%2CtemplateInfo%2CnodeInfo)%7Bvar%20noted%3Dvoid%200%3Bvar%20element%3D%2F**%20%40type%20%7BElement%7D%20*%2Fnode%3Bif(element.localName%3D%3D'template'%26%26!element.hasAttribute('preserve-content'))%7Bnoted%3Dthis._parseTemplateNestedTemplate(element%2CtemplateInfo%2CnodeInfo)%7C%7Cnoted%3B%7Delse%20if(element.localName%3D%3D%3D'slot')%7B%2F%2F%20For%20ShadyDom%20optimization%2C%20indicating%20there%20is%20an%20insertion%20point%0AtemplateInfo.hasInsertionPoint%3Dtrue%3B%7Dwalker.currentNode%3Delement%3Bif(walker.firstChild())%7Bnoted%3Dthis._parseTemplateChildNodes(element%2CtemplateInfo%2CnodeInfo)%7C%7Cnoted%3B%7Dif(element.hasAttributes%26%26element.hasAttributes())%7Bnoted%3Dthis._parseTemplateNodeAttributes(element%2CtemplateInfo%2CnodeInfo)%7C%7Cnoted%3B%7Dreturn%20noted%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Parses%20template%20child%20nodes%20for%20the%20given%20root%20node.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20also%20wraps%20whitelisted%20legacy%20template%20extensions%0A%20%20%20%20%20%20%20*%20(%60is%3D%22dom-if%22%60%20and%20%60is%3D%22dom-repeat%22%60)%20with%20their%20equivalent%20element%0A%20%20%20%20%20%20%20*%20wrappers%2C%20collapses%20text%20nodes%2C%20and%20strips%20whitespace%20from%20the%20template%0A%20%20%20%20%20%20%20*%20if%20the%20%60templateInfo.stripWhitespace%60%20setting%20was%20provided.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BNode%7D%20root%20Root%20node%20whose%20%60childNodes%60%20will%20be%20parsed%0A%20%20%20%20%20%20%20*%20%40param%20%7B!TemplateInfo%7D%20templateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20%20%20%20%20*%20%40param%20%7B!NodeInfo%7D%20nodeInfo%20Node%20metadata%20for%20current%20template.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_parseTemplateChildNodes'%2Cvalue%3Afunction%20_parseTemplateChildNodes(root%2CtemplateInfo%2CnodeInfo)%7Bif(root.localName%3D%3D%3D'script'%7C%7Croot.localName%3D%3D%3D'style')%7Breturn%3B%7Dwalker.currentNode%3Droot%3Bfor(var%20node%3Dwalker.firstChild()%2CparentIndex%3D0%2Cnext%3Bnode%3Bnode%3Dnext)%7B%2F%2F%20Wrap%20templates%0Aif(node.localName%3D%3D'template')%7Bnode%3DwrapTemplateExtension(node)%3B%7D%2F%2F%20collapse%20adjacent%20textNodes%3A%20fixes%20an%20IE%20issue%20that%20can%20cause%0A%2F%2F%20text%20nodes%20to%20be%20inexplicably%20split%20%3D(%0A%2F%2F%20note%20that%20root.normalize()%20should%20work%20but%20does%20not%20so%20we%20do%20this%0A%2F%2F%20manually.%0Awalker.currentNode%3Dnode%3Bnext%3Dwalker.nextSibling()%3Bif(node.nodeType%3D%3D%3DNode.TEXT_NODE)%7Bvar%2F**%20Node%20*%2Fn%3Dnext%3Bwhile(n%26%26n.nodeType%3D%3D%3DNode.TEXT_NODE)%7Bnode.textContent%2B%3Dn.textContent%3Bnext%3Dwalker.nextSibling()%3Broot.removeChild(n)%3Bn%3Dnext%3B%7D%2F%2F%20optionally%20strip%20whitespace%0Aif(templateInfo.stripWhiteSpace%26%26!node.textContent.trim())%7Broot.removeChild(node)%3Bcontinue%3B%7D%7Dvar%20childInfo%3D%7BparentIndex%3AparentIndex%2CparentInfo%3AnodeInfo%7D%3Bif(this._parseTemplateNode(node%2CtemplateInfo%2CchildInfo))%7BchildInfo.infoIndex%3DtemplateInfo.nodeInfoList.push(%2F**%20%40type%20%7B!NodeInfo%7D%20*%2FchildInfo)-1%3B%7D%2F%2F%20Increment%20if%20not%20removed%0Awalker.currentNode%3Dnode%3Bif(walker.parentNode())%7BparentIndex%2B%2B%3B%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Parses%20template%20content%20for%20the%20given%20nested%20%60%3Ctemplate%3E%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Nested%20template%20info%20is%20stored%20as%20%60templateInfo%60%20in%20the%20current%20node's%0A%20%20%20%20%20%20%20*%20%60nodeInfo%60.%20%60template.content%60%20is%20removed%20and%20stored%20in%20%60templateInfo%60.%0A%20%20%20%20%20%20%20*%20It%20will%20then%20be%20the%20responsibility%20of%20the%20host%20to%20set%20it%20back%20to%20the%0A%20%20%20%20%20%20%20*%20template%20and%20for%20users%20stamping%20nested%20templates%20to%20use%20the%0A%20%20%20%20%20%20%20*%20%60_contentForTemplate%60%20method%20to%20retrieve%20the%20content%20for%20this%20template%0A%20%20%20%20%20%20%20*%20(an%20optimization%20to%20avoid%20the%20cost%20of%20cloning%20nested%20template%20content).%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BHTMLTemplateElement%7D%20node%20Node%20to%20parse%20(a%20%3Ctemplate%3E)%0A%20%20%20%20%20%20%20*%20%40param%20%7BTemplateInfo%7D%20outerTemplateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20%20%20%20%20*%20%20%20that%20includes%20the%20template%20%60node%60%0A%20%20%20%20%20%20%20*%20%40param%20%7B!NodeInfo%7D%20nodeInfo%20Node%20metadata%20for%20current%20template.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20%60true%60%20if%20the%20visited%20node%20added%20node-specific%0A%20%20%20%20%20%20%20*%20%20%20metadata%20to%20%60nodeInfo%60%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_parseTemplateNestedTemplate'%2Cvalue%3Afunction%20_parseTemplateNestedTemplate(node%2CouterTemplateInfo%2CnodeInfo)%7Bvar%20templateInfo%3Dthis._parseTemplate(node%2CouterTemplateInfo)%3Bvar%20content%3DtemplateInfo.content%3Dnode.content.ownerDocument.createDocumentFragment()%3Bcontent.appendChild(node.content)%3BnodeInfo.templateInfo%3DtemplateInfo%3Breturn%20true%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Parses%20template%20node%20attributes%20and%20adds%20node%20metadata%20to%20%60nodeInfo%60%0A%20%20%20%20%20%20%20*%20for%20nodes%20of%20interest.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BElement%7D%20node%20Node%20to%20parse%0A%20%20%20%20%20%20%20*%20%40param%20%7BTemplateInfo%7D%20templateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20%20%20%20%20*%20%40param%20%7BNodeInfo%7D%20nodeInfo%20Node%20metadata%20for%20current%20template.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20%60true%60%20if%20the%20visited%20node%20added%20node-specific%0A%20%20%20%20%20%20%20*%20%20%20metadata%20to%20%60nodeInfo%60%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_parseTemplateNodeAttributes'%2Cvalue%3Afunction%20_parseTemplateNodeAttributes(node%2CtemplateInfo%2CnodeInfo)%7B%2F%2F%20Make%20copy%20of%20original%20attribute%20list%2C%20since%20the%20order%20may%20change%0A%2F%2F%20as%20attributes%20are%20added%20and%20removed%0Avar%20noted%3Dfalse%3Bvar%20attrs%3DArray.from(node.attributes)%3Bfor(var%20i%3Dattrs.length-1%2Ca%3Ba%3Dattrs%5Bi%5D%3Bi--)%7Bnoted%3Dthis._parseTemplateNodeAttribute(node%2CtemplateInfo%2CnodeInfo%2Ca.name%2Ca.value)%7C%7Cnoted%3B%7Dreturn%20noted%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Parses%20a%20single%20template%20node%20attribute%20and%20adds%20node%20metadata%20to%0A%20%20%20%20%20%20%20*%20%60nodeInfo%60%20for%20attributes%20of%20interest.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20implementation%20adds%20metadata%20for%20%60on-event%3D%22handler%22%60%20attributes%0A%20%20%20%20%20%20%20*%20and%20%60id%60%20attributes.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BElement%7D%20node%20Node%20to%20parse%0A%20%20%20%20%20%20%20*%20%40param%20%7B!TemplateInfo%7D%20templateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20%20%20%20%20*%20%40param%20%7B!NodeInfo%7D%20nodeInfo%20Node%20metadata%20for%20current%20template.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20name%20Attribute%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20value%20Attribute%20value%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20%60true%60%20if%20the%20visited%20node%20added%20node-specific%0A%20%20%20%20%20%20%20*%20%20%20metadata%20to%20%60nodeInfo%60%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_parseTemplateNodeAttribute'%2Cvalue%3Afunction%20_parseTemplateNodeAttribute(node%2CtemplateInfo%2CnodeInfo%2Cname%2Cvalue)%7B%2F%2F%20events%20(on-*)%0Aif(name.slice(0%2C3)%3D%3D%3D'on-')%7Bnode.removeAttribute(name)%3BnodeInfo.events%3DnodeInfo.events%7C%7C%5B%5D%3BnodeInfo.events.push(%7Bname%3Aname.slice(3)%2Cvalue%3Avalue%7D)%3Breturn%20true%3B%7D%2F%2F%20static%20id%0Aelse%20if(name%3D%3D%3D'id')%7BnodeInfo.id%3Dvalue%3Breturn%20true%3B%7Dreturn%20false%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20the%20%60content%60%20document%20fragment%20for%20a%20given%20template.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20For%20nested%20templates%2C%20Polymer%20performs%20an%20optimization%20to%20cache%20nested%0A%20%20%20%20%20%20%20*%20template%20content%20to%20avoid%20the%20cost%20of%20cloning%20deeply%20nested%20templates.%0A%20%20%20%20%20%20%20*%20This%20method%20retrieves%20the%20cached%20content%20for%20a%20given%20template.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BHTMLTemplateElement%7D%20template%20Template%20to%20retrieve%20%60content%60%20for%0A%20%20%20%20%20%20%20*%20%40return%20%7BDocumentFragment%7D%20Content%20fragment%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_contentForTemplate'%2Cvalue%3Afunction%20_contentForTemplate(template)%7Bvar%20templateInfo%3D%2F**%20%40type%20%7BHTMLTemplateElementWithInfo%7D%20*%2Ftemplate._templateInfo%3Breturn%20templateInfo%26%26templateInfo.content%7C%7Ctemplate.content%3B%7D%7D%5D)%3Breturn%20TemplateStamp%3B%7D(superClass)%3Breturn%20TemplateStamp%3B%7D)%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Fmixins%2Ftemplate-stamp.html.js%0A",
            "resourceBytes": 19930,
            "encodedBytes": 0,
            "unusedBytes": 8130
          },
          {
            "name": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bvar%20_get%3Dfunction%20get(object%2Cproperty%2Creceiver)%7Bif(object%3D%3D%3Dnull)object%3DFunction.prototype%3Bvar%20desc%3DObject.getOwnPropertyDescriptor(object%2Cproperty)%3Bif(desc%3D%3D%3Dundefined)%7Bvar%20parent%3DObject.getPrototypeOf(object)%3Bif(parent%3D%3D%3Dnull)%7Breturn%20undefined%3B%7Delse%7Breturn%20get(parent%2Cproperty%2Creceiver)%3B%7D%7Delse%20if(%22value%22in%20desc)%7Breturn%20desc.value%3B%7Delse%7Bvar%20getter%3Ddesc.get%3Bif(getter%3D%3D%3Dundefined)%7Breturn%20undefined%3B%7Dreturn%20getter.call(receiver)%3B%7D%7D%3Bvar%20_typeof%3Dtypeof%20Symbol%3D%3D%3D%22function%22%26%26typeof%20Symbol.iterator%3D%3D%3D%22symbol%22%3Ffunction(obj)%7Breturn%20typeof%20obj%3B%7D%3Afunction(obj)%7Breturn%20obj%26%26typeof%20Symbol%3D%3D%3D%22function%22%26%26obj.constructor%3D%3D%3DSymbol%26%26obj!%3D%3DSymbol.prototype%3F%22symbol%22%3Atypeof%20obj%3B%7D%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3B%2F**%20%40const%20%7BObject%7D%20*%2Fvar%20CaseMap%3DPolymer.CaseMap%3B%2F%2F%20Monotonically%20increasing%20unique%20ID%20used%20for%20de-duping%20effects%20triggered%0A%2F%2F%20from%20multiple%20properties%20in%20the%20same%20turn%0Avar%20dedupeId%3D0%3B%2F**%0A%20%20%20*%20Property%20effect%20types%3B%20effects%20are%20stored%20on%20the%20prototype%20using%20these%20keys%0A%20%20%20*%20%40enum%20%7Bstring%7D%0A%20%20%20*%2Fvar%20TYPES%3D%7BCOMPUTE%3A'__computeEffects'%2CREFLECT%3A'__reflectEffects'%2CNOTIFY%3A'__notifyEffects'%2CPROPAGATE%3A'__propagateEffects'%2COBSERVE%3A'__observeEffects'%2CREAD_ONLY%3A'__readOnly'%7D%3B%2F**%20%40const%20%7BRegExp%7D%20*%2Fvar%20capitalAttributeRegex%3D%2F%5BA-Z%5D%2F%3B%2F**%0A%20%20%20*%20%40typedef%20%7B%7B%0A%20%20%20*%20name%3A%20(string%20%7C%20undefined)%2C%0A%20%20%20*%20structured%3A%20(boolean%20%7C%20undefined)%2C%0A%20%20%20*%20wildcard%3A%20(boolean%20%7C%20undefined)%0A%20%20%20*%20%7D%7D%0A%20%20%20*%2Fvar%20DataTrigger%3Dvoid%200%3B%2F%2Feslint-disable-line%20no-unused-vars%0A%2F**%0A%20%20%20*%20%40typedef%20%7B%7B%0A%20%20%20*%20info%3A%20%3F%2C%0A%20%20%20*%20trigger%3A%20(!DataTrigger%20%7C%20undefined)%2C%0A%20%20%20*%20fn%3A%20(!Function%20%7C%20undefined)%0A%20%20%20*%20%7D%7D%0A%20%20%20*%2Fvar%20DataEffect%3Dvoid%200%3B%2F%2Feslint-disable-line%20no-unused-vars%0Avar%20PropertyEffectsType%3Dvoid%200%3B%2F%2Feslint-disable-line%20no-unused-vars%0A%2F**%0A%20%20%20*%20Ensures%20that%20the%20model%20has%20an%20own-property%20map%20of%20effects%20for%20the%20given%20type.%0A%20%20%20*%20The%20model%20may%20be%20a%20prototype%20or%20an%20instance.%0A%20%20%20*%0A%20%20%20*%20Property%20effects%20are%20stored%20as%20arrays%20of%20effects%20by%20property%20in%20a%20map%2C%0A%20%20%20*%20by%20named%20type%20on%20the%20model.%20e.g.%0A%20%20%20*%0A%20%20%20*%20%20%20__computeEffects%3A%20%7B%0A%20%20%20*%20%20%20%20%20foo%3A%20%5B%20...%20%5D%2C%0A%20%20%20*%20%20%20%20%20bar%3A%20%5B%20...%20%5D%0A%20%20%20*%20%20%20%7D%0A%20%20%20*%0A%20%20%20*%20If%20the%20model%20does%20not%20yet%20have%20an%20effect%20map%20for%20the%20type%2C%20one%20is%20created%0A%20%20%20*%20and%20returned.%20%20If%20it%20does%2C%20but%20it%20is%20not%20an%20own%20property%20(i.e.%20the%0A%20%20%20*%20prototype%20had%20effects)%2C%20the%20the%20map%20is%20deeply%20cloned%20and%20the%20copy%20is%0A%20%20%20*%20set%20on%20the%20model%20and%20returned%2C%20ready%20for%20new%20effects%20to%20be%20added.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BObject%7D%20model%20Prototype%20or%20instance%0A%20%20%20*%20%40param%20%7Bstring%7D%20type%20Property%20effect%20type%0A%20%20%20*%20%40return%20%7BObject%7D%20The%20own-property%20map%20of%20effects%20for%20the%20given%20type%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20ensureOwnEffectMap(model%2Ctype)%7Bvar%20effects%3Dmodel%5Btype%5D%3Bif(!effects)%7Beffects%3Dmodel%5Btype%5D%3D%7B%7D%3B%7Delse%20if(!model.hasOwnProperty(type))%7Beffects%3Dmodel%5Btype%5D%3DObject.create(model%5Btype%5D)%3Bfor(var%20p%20in%20effects)%7Bvar%20protoFx%3Deffects%5Bp%5D%3Bvar%20instFx%3Deffects%5Bp%5D%3DArray(protoFx.length)%3Bfor(var%20i%3D0%3Bi%3CprotoFx.length%3Bi%2B%2B)%7BinstFx%5Bi%5D%3DprotoFx%5Bi%5D%3B%7D%7D%7Dreturn%20effects%3B%7D%2F%2F%20--%20effects%20----------------------------------------------%0A%2F**%0A%20%20%20*%20Runs%20all%20effects%20of%20a%20given%20type%20for%20the%20given%20set%20of%20property%20changes%0A%20%20%20*%20on%20an%20instance.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20with%20effects%20to%20run%0A%20%20%20*%20%40param%20%7BObject%7D%20effects%20Object%20map%20of%20property-to-Array%20of%20effects%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%3D%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7Bboolean%3D%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20*%20%40param%20%7B*%3D%7D%20extraArgs%20Additional%20metadata%20to%20pass%20to%20effect%20function%0A%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20an%20effect%20ran%20for%20this%20property%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runEffects(inst%2Ceffects%2Cprops%2ColdProps%2ChasPaths%2CextraArgs)%7Bif(effects)%7Bvar%20ran%3Dfalse%3Bvar%20id%3DdedupeId%2B%2B%3Bfor(var%20prop%20in%20props)%7Bif(runEffectsForProperty(inst%2Ceffects%2Cid%2Cprop%2Cprops%2ColdProps%2ChasPaths%2CextraArgs))%7Bran%3Dtrue%3B%7D%7Dreturn%20ran%3B%7Dreturn%20false%3B%7D%2F**%0A%20%20%20*%20Runs%20a%20list%20of%20effects%20for%20a%20given%20property.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20with%20effects%20to%20run%0A%20%20%20*%20%40param%20%7BObject%7D%20effects%20Object%20map%20of%20property-to-Array%20of%20effects%0A%20%20%20*%20%40param%20%7Bnumber%7D%20dedupeId%20Counter%20used%20for%20de-duping%20effects%0A%20%20%20*%20%40param%20%7Bstring%7D%20prop%20Name%20of%20changed%20property%0A%20%20%20*%20%40param%20%7B*%7D%20props%20Changed%20properties%0A%20%20%20*%20%40param%20%7B*%7D%20oldProps%20Old%20properties%0A%20%20%20*%20%40param%20%7Bboolean%3D%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20*%20%40param%20%7B*%3D%7D%20extraArgs%20Additional%20metadata%20to%20pass%20to%20effect%20function%0A%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20an%20effect%20ran%20for%20this%20property%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runEffectsForProperty(inst%2Ceffects%2CdedupeId%2Cprop%2Cprops%2ColdProps%2ChasPaths%2CextraArgs)%7Bvar%20ran%3Dfalse%3Bvar%20rootProperty%3DhasPaths%3FPolymer.Path.root(prop)%3Aprop%3Bvar%20fxs%3Deffects%5BrootProperty%5D%3Bif(fxs)%7Bfor(var%20i%3D0%2Cl%3Dfxs.length%2Cfx%3Bi%3Cl%26%26(fx%3Dfxs%5Bi%5D)%3Bi%2B%2B)%7Bif((!fx.info%7C%7Cfx.info.lastRun!%3D%3DdedupeId)%26%26(!hasPaths%7C%7CpathMatchesTrigger(prop%2Cfx.trigger)))%7Bif(fx.info)%7Bfx.info.lastRun%3DdedupeId%3B%7Dfx.fn(inst%2Cprop%2Cprops%2ColdProps%2Cfx.info%2ChasPaths%2CextraArgs)%3Bran%3Dtrue%3B%7D%7D%7Dreturn%20ran%3B%7D%2F**%0A%20%20%20*%20Determines%20whether%20a%20property%2Fpath%20that%20has%20changed%20matches%20the%20trigger%0A%20%20%20*%20criteria%20for%20an%20effect.%20%20A%20trigger%20is%20a%20descriptor%20with%20the%20following%0A%20%20%20*%20structure%2C%20which%20matches%20the%20descriptors%20returned%20from%20%60parseArg%60.%0A%20%20%20*%20e.g.%20for%20%60foo.bar.*%60%3A%0A%20%20%20*%20%60%60%60%0A%20%20%20*%20trigger%3A%20%7B%0A%20%20%20*%20%20%20name%3A%20'a.b'%2C%0A%20%20%20*%20%20%20structured%3A%20true%2C%0A%20%20%20*%20%20%20wildcard%3A%20true%0A%20%20%20*%20%7D%0A%20%20%20*%20%60%60%60%0A%20%20%20*%20If%20no%20trigger%20is%20given%2C%20the%20path%20is%20deemed%20to%20match.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7Bstring%7D%20path%20Path%20or%20property%20that%20changed%0A%20%20%20*%20%40param%20%7BDataTrigger%7D%20trigger%20Descriptor%0A%20%20%20*%20%40return%20%7Bboolean%7D%20Whether%20the%20path%20matched%20the%20trigger%0A%20%20%20*%2Ffunction%20pathMatchesTrigger(path%2Ctrigger)%7Bif(trigger)%7Bvar%20triggerPath%3Dtrigger.name%3Breturn%20triggerPath%3D%3Dpath%7C%7Ctrigger.structured%26%26Polymer.Path.isAncestor(triggerPath%2Cpath)%7C%7Ctrigger.wildcard%26%26Polymer.Path.isDescendant(triggerPath%2Cpath)%3B%7Delse%7Breturn%20true%3B%7D%7D%2F**%0A%20%20%20*%20Implements%20the%20%22observer%22%20effect.%0A%20%20%20*%0A%20%20%20*%20Calls%20the%20method%20with%20%60info.methodName%60%20on%20the%20instance%2C%20passing%20the%0A%20%20%20*%20new%20and%20old%20values.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20the%20effect%20will%20be%20run%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20property%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7B%3F%7D%20info%20Effect%20metadata%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runObserverEffect(inst%2Cproperty%2Cprops%2ColdProps%2Cinfo)%7Bvar%20fn%3Dtypeof%20info.method%3D%3D%3D%22string%22%3Finst%5Binfo.method%5D%3Ainfo.method%3Bvar%20changedProp%3Dinfo.property%3Bif(fn)%7Bfn.call(inst%2Cinst.__data%5BchangedProp%5D%2ColdProps%5BchangedProp%5D)%3B%7Delse%20if(!info.dynamicFn)%7Bconsole.warn('observer%20method%20%60'%2Binfo.method%2B'%60%20not%20defined')%3B%7D%7D%2F**%0A%20%20%20*%20Runs%20%22notify%22%20effects%20for%20a%20set%20of%20changed%20properties.%0A%20%20%20*%0A%20%20%20*%20This%20method%20differs%20from%20the%20generic%20%60runEffects%60%20method%20in%20that%20it%0A%20%20%20*%20will%20dispatch%20path%20notification%20events%20in%20the%20case%20that%20the%20property%0A%20%20%20*%20changed%20was%20a%20path%20and%20the%20root%20property%20for%20that%20path%20didn't%20have%20a%0A%20%20%20*%20%22notify%22%20effect.%20%20This%20is%20to%20maintain%201.0%20behavior%20that%20did%20not%20require%0A%20%20%20*%20%60notify%3A%20true%60%20to%20ensure%20object%20sub-property%20notifications%20were%0A%20%20%20*%20sent.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20with%20effects%20to%20run%0A%20%20%20*%20%40param%20%7BObject%7D%20notifyProps%20Bag%20of%20properties%20to%20notify%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7Bboolean%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runNotifyEffects(inst%2CnotifyProps%2Cprops%2ColdProps%2ChasPaths)%7B%2F%2F%20Notify%0Avar%20fxs%3Dinst%5BTYPES.NOTIFY%5D%3Bvar%20notified%3Dvoid%200%3Bvar%20id%3DdedupeId%2B%2B%3B%2F%2F%20Try%20normal%20notify%20effects%3B%20if%20none%2C%20fall%20back%20to%20try%20path%20notification%0Afor(var%20prop%20in%20notifyProps)%7Bif(notifyProps%5Bprop%5D)%7Bif(fxs%26%26runEffectsForProperty(inst%2Cfxs%2Cid%2Cprop%2Cprops%2ColdProps%2ChasPaths))%7Bnotified%3Dtrue%3B%7Delse%20if(hasPaths%26%26notifyPath(inst%2Cprop%2Cprops))%7Bnotified%3Dtrue%3B%7D%7D%7D%2F%2F%20Flush%20host%20if%20we%20actually%20notified%20and%20host%20was%20batching%0A%2F%2F%20And%20the%20host%20has%20already%20initialized%20clients%3B%20this%20prevents%0A%2F%2F%20an%20issue%20with%20a%20host%20observing%20data%20changes%20before%20clients%20are%20ready.%0Avar%20host%3Dvoid%200%3Bif(notified%26%26(host%3Dinst.__dataHost)%26%26host._invalidateProperties)%7Bhost._invalidateProperties()%3B%7D%7D%2F**%0A%20%20%20*%20Dispatches%20%7Bproperty%7D-changed%20events%20with%20path%20information%20in%20the%20detail%0A%20%20%20*%20object%20to%20indicate%20a%20sub-path%20of%20the%20property%20was%20changed.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20element%20from%20which%20to%20fire%20the%20event%0A%20%20%20*%20%40param%20%7Bstring%7D%20path%20The%20path%20that%20was%20changed%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40return%20%7Bboolean%7D%20Returns%20true%20if%20the%20path%20was%20notified%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20notifyPath(inst%2Cpath%2Cprops)%7Bvar%20rootProperty%3DPolymer.Path.root(path)%3Bif(rootProperty!%3D%3Dpath)%7Bvar%20eventName%3DPolymer.CaseMap.camelToDashCase(rootProperty)%2B'-changed'%3BdispatchNotifyEvent(inst%2CeventName%2Cprops%5Bpath%5D%2Cpath)%3Breturn%20true%3B%7Dreturn%20false%3B%7D%2F**%0A%20%20%20*%20Dispatches%20%7Bproperty%7D-changed%20events%20to%20indicate%20a%20property%20(or%20path)%0A%20%20%20*%20changed.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20element%20from%20which%20to%20fire%20the%20event%0A%20%20%20*%20%40param%20%7Bstring%7D%20eventName%20The%20name%20of%20the%20event%20to%20send%20('%7Bproperty%7D-changed')%0A%20%20%20*%20%40param%20%7B*%7D%20value%20The%20value%20of%20the%20changed%20property%0A%20%20%20*%20%40param%20%7Bstring%20%7C%20null%20%7C%20undefined%7D%20path%20If%20a%20sub-path%20of%20this%20property%20changed%2C%20the%20path%0A%20%20%20*%20%20%20that%20changed%20(optional).%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%0A%20%20%20*%2Ffunction%20dispatchNotifyEvent(inst%2CeventName%2Cvalue%2Cpath)%7Bvar%20detail%3D%7Bvalue%3Avalue%2CqueueProperty%3Atrue%7D%3Bif(path)%7Bdetail.path%3Dpath%3B%7D%2F**%20%40type%20%7B!HTMLElement%7D%20*%2Finst.dispatchEvent(new%20CustomEvent(eventName%2C%7Bdetail%3Adetail%7D))%3B%7D%2F**%0A%20%20%20*%20Implements%20the%20%22notify%22%20effect.%0A%20%20%20*%0A%20%20%20*%20Dispatches%20a%20non-bubbling%20event%20named%20%60info.eventName%60%20on%20the%20instance%0A%20%20%20*%20with%20a%20detail%20object%20containing%20the%20new%20%60value%60.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20the%20effect%20will%20be%20run%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20property%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7B%3F%7D%20info%20Effect%20metadata%0A%20%20%20*%20%40param%20%7Bboolean%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runNotifyEffect(inst%2Cproperty%2Cprops%2ColdProps%2Cinfo%2ChasPaths)%7Bvar%20rootProperty%3DhasPaths%3FPolymer.Path.root(property)%3Aproperty%3Bvar%20path%3DrootProperty!%3Dproperty%3Fproperty%3Anull%3Bvar%20value%3Dpath%3FPolymer.Path.get(inst%2Cpath)%3Ainst.__data%5Bproperty%5D%3Bif(path%26%26value%3D%3D%3Dundefined)%7Bvalue%3Dprops%5Bproperty%5D%3B%2F%2F%20specifically%20for%20.splices%0A%7DdispatchNotifyEvent(inst%2Cinfo.eventName%2Cvalue%2Cpath)%3B%7D%2F**%0A%20%20%20*%20Handler%20function%20for%202-way%20notification%20events.%20Receives%20context%0A%20%20%20*%20information%20captured%20in%20the%20%60addNotifyListener%60%20closure%20from%20the%0A%20%20%20*%20%60__notifyListeners%60%20metadata.%0A%20%20%20*%0A%20%20%20*%20Sets%20the%20value%20of%20the%20notified%20property%20to%20the%20host%20property%20or%20path.%20%20If%0A%20%20%20*%20the%20event%20contained%20path%20information%2C%20translate%20that%20path%20to%20the%20host%0A%20%20%20*%20scope's%20name%20for%20that%20path%20first.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BCustomEvent%7D%20event%20Notification%20event%20(e.g.%20'%3Cproperty%3E-changed')%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20Host%20element%20instance%20handling%20the%20notification%20event%0A%20%20%20*%20%40param%20%7Bstring%7D%20fromProp%20Child%20element%20property%20that%20was%20bound%0A%20%20%20*%20%40param%20%7Bstring%7D%20toPath%20Host%20property%2Fpath%20that%20was%20bound%0A%20%20%20*%20%40param%20%7Bboolean%7D%20negate%20Whether%20the%20binding%20was%20negated%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20handleNotification(event%2Cinst%2CfromProp%2CtoPath%2Cnegate)%7Bvar%20value%3Dvoid%200%3Bvar%20detail%3D%2F**%20%40type%20%7BObject%7D%20*%2Fevent.detail%3Bvar%20fromPath%3Ddetail%26%26detail.path%3Bif(fromPath)%7BtoPath%3DPolymer.Path.translate(fromProp%2CtoPath%2CfromPath)%3Bvalue%3Ddetail%26%26detail.value%3B%7Delse%7Bvalue%3Devent.currentTarget%5BfromProp%5D%3B%7Dvalue%3Dnegate%3F!value%3Avalue%3Bif(!inst%5BTYPES.READ_ONLY%5D%7C%7C!inst%5BTYPES.READ_ONLY%5D%5BtoPath%5D)%7Bif(inst._setPendingPropertyOrPath(toPath%2Cvalue%2Ctrue%2CBoolean(fromPath))%26%26(!detail%7C%7C!detail.queueProperty))%7Binst._invalidateProperties()%3B%7D%7D%7D%2F**%0A%20%20%20*%20Implements%20the%20%22reflect%22%20effect.%0A%20%20%20*%0A%20%20%20*%20Sets%20the%20attribute%20named%20%60info.attrName%60%20to%20the%20given%20property%20value.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20the%20effect%20will%20be%20run%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20property%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7B%3F%7D%20info%20Effect%20metadata%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runReflectEffect(inst%2Cproperty%2Cprops%2ColdProps%2Cinfo)%7Bvar%20value%3Dinst.__data%5Bproperty%5D%3Bif(Polymer.sanitizeDOMValue)%7Bvalue%3DPolymer.sanitizeDOMValue(value%2Cinfo.attrName%2C'attribute'%2C%2F**%20%40type%20%7BNode%7D%20*%2Finst)%3B%7Dinst._propertyToAttribute(property%2Cinfo.attrName%2Cvalue)%3B%7D%2F**%0A%20%20%20*%20Runs%20%22computed%22%20effects%20for%20a%20set%20of%20changed%20properties.%0A%20%20%20*%0A%20%20%20*%20This%20method%20differs%20from%20the%20generic%20%60runEffects%60%20method%20in%20that%20it%0A%20%20%20*%20continues%20to%20run%20computed%20effects%20based%20on%20the%20output%20of%20each%20pass%20until%0A%20%20%20*%20there%20are%20no%20more%20newly%20computed%20properties.%20%20This%20ensures%20that%20all%0A%20%20%20*%20properties%20that%20will%20be%20computed%20by%20the%20initial%20set%20of%20changes%20are%0A%20%20%20*%20computed%20before%20other%20effects%20(binding%20propagation%2C%20observers%2C%20and%20notify)%0A%20%20%20*%20run.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20the%20effect%20will%20be%20run%20on%0A%20%20%20*%20%40param%20%7B!Object%7D%20changedProps%20Bag%20of%20changed%20properties%0A%20%20%20*%20%40param%20%7B!Object%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7Bboolean%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runComputedEffects(inst%2CchangedProps%2ColdProps%2ChasPaths)%7Bvar%20computeEffects%3Dinst%5BTYPES.COMPUTE%5D%3Bif(computeEffects)%7Bvar%20inputProps%3DchangedProps%3Bwhile(runEffects(inst%2CcomputeEffects%2CinputProps%2ColdProps%2ChasPaths))%7BObject.assign(oldProps%2Cinst.__dataOld)%3BObject.assign(changedProps%2Cinst.__dataPending)%3BinputProps%3Dinst.__dataPending%3Binst.__dataPending%3Dnull%3B%7D%7D%7D%2F**%0A%20%20%20*%20Implements%20the%20%22computed%20property%22%20effect%20by%20running%20the%20method%20with%20the%0A%20%20%20*%20values%20of%20the%20arguments%20specified%20in%20the%20%60info%60%20object%20and%20setting%20the%0A%20%20%20*%20return%20value%20to%20the%20computed%20property%20specified.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20the%20effect%20will%20be%20run%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20property%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7B%3F%7D%20info%20Effect%20metadata%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runComputedEffect(inst%2Cproperty%2Cprops%2ColdProps%2Cinfo)%7Bvar%20result%3DrunMethodEffect(inst%2Cproperty%2Cprops%2ColdProps%2Cinfo)%3Bvar%20computedProp%3Dinfo.methodInfo%3Bif(inst.__dataHasAccessor%26%26inst.__dataHasAccessor%5BcomputedProp%5D)%7Binst._setPendingProperty(computedProp%2Cresult%2Ctrue)%3B%7Delse%7Binst%5BcomputedProp%5D%3Dresult%3B%7D%7D%2F**%0A%20%20%20*%20Computes%20path%20changes%20based%20on%20path%20links%20set%20up%20using%20the%20%60linkPaths%60%0A%20%20%20*%20API.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20whose%20props%20are%20changing%0A%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3C(string%7Cnumber)%3E%7D%20path%20Path%20that%20has%20changed%0A%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20of%20changed%20path%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20computeLinkedPaths(inst%2Cpath%2Cvalue)%7Bvar%20links%3Dinst.__dataLinkedPaths%3Bif(links)%7Bvar%20link%3Dvoid%200%3Bfor(var%20a%20in%20links)%7Bvar%20b%3Dlinks%5Ba%5D%3Bif(Polymer.Path.isDescendant(a%2Cpath))%7Blink%3DPolymer.Path.translate(a%2Cb%2Cpath)%3Binst._setPendingPropertyOrPath(link%2Cvalue%2Ctrue%2Ctrue)%3B%7Delse%20if(Polymer.Path.isDescendant(b%2Cpath))%7Blink%3DPolymer.Path.translate(b%2Ca%2Cpath)%3Binst._setPendingPropertyOrPath(link%2Cvalue%2Ctrue%2Ctrue)%3B%7D%7D%7D%7D%2F%2F%20--%20bindings%20----------------------------------------------%0A%2F**%0A%20%20%20*%20Adds%20binding%20metadata%20to%20the%20current%20%60nodeInfo%60%2C%20and%20binding%20effects%0A%20%20%20*%20for%20all%20part%20dependencies%20to%20%60templateInfo%60.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BFunction%7D%20constructor%20Class%20that%20%60_parseTemplate%60%20is%20currently%0A%20%20%20*%20%20%20running%20on%0A%20%20%20*%20%40param%20%7BTemplateInfo%7D%20templateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20*%20%40param%20%7BNodeInfo%7D%20nodeInfo%20Node%20metadata%20for%20current%20template%20node%0A%20%20%20*%20%40param%20%7Bstring%7D%20kind%20Binding%20kind%2C%20either%20'property'%2C%20'attribute'%2C%20or%20'text'%0A%20%20%20*%20%40param%20%7Bstring%7D%20target%20Target%20property%20name%0A%20%20%20*%20%40param%20%7B!Array%3C!BindingPart%3E%7D%20parts%20Array%20of%20binding%20part%20metadata%0A%20%20%20*%20%40param%20%7Bstring%3D%7D%20literal%20Literal%20text%20surrounding%20binding%20parts%20(specified%0A%20%20%20*%20%20%20only%20for%20'property'%20bindings%2C%20since%20these%20must%20be%20initialized%20as%20part%0A%20%20%20*%20%20%20of%20boot-up)%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20addBinding(constructor%2CtemplateInfo%2CnodeInfo%2Ckind%2Ctarget%2Cparts%2Cliteral)%7B%2F%2F%20Create%20binding%20metadata%20and%20add%20to%20nodeInfo%0AnodeInfo.bindings%3DnodeInfo.bindings%7C%7C%5B%5D%3Bvar%2F**%20Binding%20*%2Fbinding%3D%7Bkind%3Akind%2Ctarget%3Atarget%2Cparts%3Aparts%2Cliteral%3Aliteral%2CisCompound%3Aparts.length!%3D%3D1%7D%3BnodeInfo.bindings.push(binding)%3B%2F%2F%20Add%20listener%20info%20to%20binding%20metadata%0Aif(shouldAddListener(binding))%7Bvar%20_binding%24parts%24%3Dbinding.parts%5B0%5D%2Cevent%3D_binding%24parts%24.event%2Cnegate%3D_binding%24parts%24.negate%3Bbinding.listenerEvent%3Devent%7C%7CCaseMap.camelToDashCase(target)%2B'-changed'%3Bbinding.listenerNegate%3Dnegate%3B%7D%2F%2F%20Add%20%22propagate%22%20property%20effects%20to%20templateInfo%0Avar%20index%3DtemplateInfo.nodeInfoList.length%3Bfor(var%20i%3D0%3Bi%3Cbinding.parts.length%3Bi%2B%2B)%7Bvar%20part%3Dbinding.parts%5Bi%5D%3Bpart.compoundIndex%3Di%3BaddEffectForBindingPart(constructor%2CtemplateInfo%2Cbinding%2Cpart%2Cindex)%3B%7D%7D%2F**%0A%20%20%20*%20Adds%20property%20effects%20to%20the%20given%20%60templateInfo%60%20for%20the%20given%20binding%0A%20%20%20*%20part.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BFunction%7D%20constructor%20Class%20that%20%60_parseTemplate%60%20is%20currently%0A%20%20%20*%20%20%20running%20on%0A%20%20%20*%20%40param%20%7BTemplateInfo%7D%20templateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20*%20%40param%20%7B!Binding%7D%20binding%20Binding%20metadata%0A%20%20%20*%20%40param%20%7B!BindingPart%7D%20part%20Binding%20part%20metadata%0A%20%20%20*%20%40param%20%7Bnumber%7D%20index%20Index%20into%20%60nodeInfoList%60%20for%20this%20node%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%2Ffunction%20addEffectForBindingPart(constructor%2CtemplateInfo%2Cbinding%2Cpart%2Cindex)%7Bif(!part.literal)%7Bif(binding.kind%3D%3D%3D'attribute'%26%26binding.target%5B0%5D%3D%3D%3D'-')%7Bconsole.warn('Cannot%20set%20attribute%20'%2Bbinding.target%2B'%20because%20%22-%22%20is%20not%20a%20valid%20attribute%20starting%20character')%3B%7Delse%7Bvar%20dependencies%3Dpart.dependencies%3Bvar%20info%3D%7Bindex%3Aindex%2Cbinding%3Abinding%2Cpart%3Apart%2Cevaluator%3Aconstructor%7D%3Bfor(var%20j%3D0%3Bj%3Cdependencies.length%3Bj%2B%2B)%7Bvar%20trigger%3Ddependencies%5Bj%5D%3Bif(typeof%20trigger%3D%3D'string')%7Btrigger%3DparseArg(trigger)%3Btrigger.wildcard%3Dtrue%3B%7Dconstructor._addTemplatePropertyEffect(templateInfo%2Ctrigger.rootProperty%2C%7Bfn%3ArunBindingEffect%2Cinfo%3Ainfo%2Ctrigger%3Atrigger%7D)%3B%7D%7D%7D%7D%2F**%0A%20%20%20*%20Implements%20the%20%22binding%22%20(property%2Fpath%20binding)%20effect.%0A%20%20%20*%0A%20%20%20*%20Note%20that%20binding%20syntax%20is%20overridable%20via%20%60_parseBindings%60%20and%0A%20%20%20*%20%60_evaluateBinding%60.%20%20This%20method%20will%20call%20%60_evaluateBinding%60%20for%20any%0A%20%20%20*%20non-literal%20parts%20returned%20from%20%60_parseBindings%60.%20%20However%2C%0A%20%20%20*%20there%20is%20no%20support%20for%20_path_%20bindings%20via%20custom%20binding%20parts%2C%0A%20%20%20*%20as%20this%20is%20specific%20to%20Polymer's%20path%20binding%20syntax.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20the%20effect%20will%20be%20run%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20path%20Name%20of%20property%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7B%3F%7D%20info%20Effect%20metadata%0A%20%20%20*%20%40param%20%7Bboolean%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20*%20%40param%20%7BArray%7D%20nodeList%20List%20of%20nodes%20associated%20with%20%60nodeInfoList%60%20template%0A%20%20%20*%20%20%20metadata%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runBindingEffect(inst%2Cpath%2Cprops%2ColdProps%2Cinfo%2ChasPaths%2CnodeList)%7Bvar%20node%3DnodeList%5Binfo.index%5D%3Bvar%20binding%3Dinfo.binding%3Bvar%20part%3Dinfo.part%3B%2F%2F%20Subpath%20notification%3A%20transform%20path%20and%20set%20to%20client%0A%2F%2F%20e.g.%3A%20foo%3D%22%7B%7Bobj.sub%7D%7D%22%2C%20path%3A%20'obj.sub.prop'%2C%20set%20'foo.prop'%3Dobj.sub.prop%0Aif(hasPaths%26%26part.source%26%26path.length%3Epart.source.length%26%26binding.kind%3D%3D'property'%26%26!binding.isCompound%26%26node.__isPropertyEffectsClient%26%26node.__dataHasAccessor%26%26node.__dataHasAccessor%5Bbinding.target%5D)%7Bvar%20value%3Dprops%5Bpath%5D%3Bpath%3DPolymer.Path.translate(part.source%2Cbinding.target%2Cpath)%3Bif(node._setPendingPropertyOrPath(path%2Cvalue%2Cfalse%2Ctrue))%7Binst._enqueueClient(node)%3B%7D%7Delse%7Bvar%20_value%3Dinfo.evaluator._evaluateBinding(inst%2Cpart%2Cpath%2Cprops%2ColdProps%2ChasPaths)%3B%2F%2F%20Propagate%20value%20to%20child%0AapplyBindingValue(inst%2Cnode%2Cbinding%2Cpart%2C_value)%3B%7D%7D%2F**%0A%20%20%20*%20Sets%20the%20value%20for%20an%20%22binding%22%20(binding)%20effect%20to%20a%20node%2C%0A%20%20%20*%20either%20as%20a%20property%20or%20attribute.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20owning%20the%20binding%20effect%0A%20%20%20*%20%40param%20%7BNode%7D%20node%20Target%20node%20for%20binding%0A%20%20%20*%20%40param%20%7B!Binding%7D%20binding%20Binding%20metadata%0A%20%20%20*%20%40param%20%7B!BindingPart%7D%20part%20Binding%20part%20metadata%0A%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20applyBindingValue(inst%2Cnode%2Cbinding%2Cpart%2Cvalue)%7Bvalue%3DcomputeBindingValue(node%2Cvalue%2Cbinding%2Cpart)%3Bif(Polymer.sanitizeDOMValue)%7Bvalue%3DPolymer.sanitizeDOMValue(value%2Cbinding.target%2Cbinding.kind%2Cnode)%3B%7Dif(binding.kind%3D%3D'attribute')%7B%2F%2F%20Attribute%20binding%0Ainst._valueToNodeAttribute(%2F**%20%40type%20%7BElement%7D%20*%2Fnode%2Cvalue%2Cbinding.target)%3B%7Delse%7B%2F%2F%20Property%20binding%0Avar%20prop%3Dbinding.target%3Bif(node.__isPropertyEffectsClient%26%26node.__dataHasAccessor%26%26node.__dataHasAccessor%5Bprop%5D)%7Bif(!node%5BTYPES.READ_ONLY%5D%7C%7C!node%5BTYPES.READ_ONLY%5D%5Bprop%5D)%7Bif(node._setPendingProperty(prop%2Cvalue))%7Binst._enqueueClient(node)%3B%7D%7D%7Delse%7Binst._setUnmanagedPropertyToNode(node%2Cprop%2Cvalue)%3B%7D%7D%7D%2F**%0A%20%20%20*%20Transforms%20an%20%22binding%22%20effect%20value%20based%20on%20compound%20%26%20negation%0A%20%20%20*%20effect%20metadata%2C%20as%20well%20as%20handling%20for%20special-case%20properties%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BNode%7D%20node%20Node%20the%20value%20will%20be%20set%20to%0A%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%0A%20%20%20*%20%40param%20%7B!Binding%7D%20binding%20Binding%20metadata%0A%20%20%20*%20%40param%20%7B!BindingPart%7D%20part%20Binding%20part%20metadata%0A%20%20%20*%20%40return%20%7B*%7D%20Transformed%20value%20to%20set%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20computeBindingValue(node%2Cvalue%2Cbinding%2Cpart)%7Bif(binding.isCompound)%7Bvar%20storage%3Dnode.__dataCompoundStorage%5Bbinding.target%5D%3Bstorage%5Bpart.compoundIndex%5D%3Dvalue%3Bvalue%3Dstorage.join('')%3B%7Dif(binding.kind!%3D%3D'attribute')%7B%2F%2F%20Some%20browsers%20serialize%20%60undefined%60%20to%20%60%22undefined%22%60%0Aif(binding.target%3D%3D%3D'textContent'%7C%7Cbinding.target%3D%3D%3D'value'%26%26(node.localName%3D%3D%3D'input'%7C%7Cnode.localName%3D%3D%3D'textarea'))%7Bvalue%3Dvalue%3D%3Dundefined%3F''%3Avalue%3B%7D%7Dreturn%20value%3B%7D%2F**%0A%20%20%20*%20Returns%20true%20if%20a%20binding's%20metadata%20meets%20all%20the%20requirements%20to%20allow%0A%20%20%20*%202-way%20binding%2C%20and%20therefore%20a%20%60%3Cproperty%3E-changed%60%20event%20listener%20should%20be%0A%20%20%20*%20added%3A%0A%20%20%20*%20-%20used%20curly%20braces%0A%20%20%20*%20-%20is%20a%20property%20(not%20attribute)%20binding%0A%20%20%20*%20-%20is%20not%20a%20textContent%20binding%0A%20%20%20*%20-%20is%20not%20compound%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!Binding%7D%20binding%20Binding%20metadata%0A%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%202-way%20listener%20should%20be%20added%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20shouldAddListener(binding)%7Breturn%20Boolean(binding.target)%26%26binding.kind!%3D'attribute'%26%26binding.kind!%3D'text'%26%26!binding.isCompound%26%26binding.parts%5B0%5D.mode%3D%3D%3D'%7B'%3B%7D%2F**%0A%20%20%20*%20Setup%20compound%20binding%20storage%20structures%2C%20notify%20listeners%2C%20and%20dataHost%0A%20%20%20*%20references%20onto%20the%20bound%20nodeList.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20Instance%20that%20bas%20been%20previously%20bound%0A%20%20%20*%20%40param%20%7BTemplateInfo%7D%20templateInfo%20Template%20metadata%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20setupBindings(inst%2CtemplateInfo)%7B%2F%2F%20Setup%20compound%20storage%2C%20dataHost%2C%20and%20notify%20listeners%0Avar%20nodeList%3DtemplateInfo.nodeList%2CnodeInfoList%3DtemplateInfo.nodeInfoList%3Bif(nodeInfoList.length)%7Bfor(var%20i%3D0%3Bi%3CnodeInfoList.length%3Bi%2B%2B)%7Bvar%20info%3DnodeInfoList%5Bi%5D%3Bvar%20node%3DnodeList%5Bi%5D%3Bvar%20bindings%3Dinfo.bindings%3Bif(bindings)%7Bfor(var%20_i%3D0%3B_i%3Cbindings.length%3B_i%2B%2B)%7Bvar%20binding%3Dbindings%5B_i%5D%3BsetupCompoundStorage(node%2Cbinding)%3BaddNotifyListener(node%2Cinst%2Cbinding)%3B%7D%7Dnode.__dataHost%3Dinst%3B%7D%7D%7D%2F**%0A%20%20%20*%20Initializes%20%60__dataCompoundStorage%60%20local%20storage%20on%20a%20bound%20node%20with%0A%20%20%20*%20initial%20literal%20data%20for%20compound%20bindings%2C%20and%20sets%20the%20joined%0A%20%20%20*%20literal%20parts%20to%20the%20bound%20property.%0A%20%20%20*%0A%20%20%20*%20When%20changes%20to%20compound%20parts%20occur%2C%20they%20are%20first%20set%20into%20the%20compound%0A%20%20%20*%20storage%20array%20for%20that%20property%2C%20and%20then%20the%20array%20is%20joined%20to%20result%20in%0A%20%20%20*%20the%20final%20value%20set%20to%20the%20property%2Fattribute.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BNode%7D%20node%20Bound%20node%20to%20initialize%0A%20%20%20*%20%40param%20%7BBinding%7D%20binding%20Binding%20metadata%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20setupCompoundStorage(node%2Cbinding)%7Bif(binding.isCompound)%7B%2F%2F%20Create%20compound%20storage%20map%0Avar%20storage%3Dnode.__dataCompoundStorage%7C%7C(node.__dataCompoundStorage%3D%7B%7D)%3Bvar%20parts%3Dbinding.parts%3B%2F%2F%20Copy%20literals%20from%20parts%20into%20storage%20for%20this%20binding%0Avar%20literals%3Dnew%20Array(parts.length)%3Bfor(var%20j%3D0%3Bj%3Cparts.length%3Bj%2B%2B)%7Bliterals%5Bj%5D%3Dparts%5Bj%5D.literal%3B%7Dvar%20target%3Dbinding.target%3Bstorage%5Btarget%5D%3Dliterals%3B%2F%2F%20Configure%20properties%20with%20their%20literal%20parts%0Aif(binding.literal%26%26binding.kind%3D%3D'property')%7Bnode%5Btarget%5D%3Dbinding.literal%3B%7D%7D%7D%2F**%0A%20%20%20*%20Adds%20a%202-way%20binding%20notification%20event%20listener%20to%20the%20node%20specified%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BObject%7D%20node%20Child%20element%20to%20add%20listener%20to%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20Host%20element%20instance%20to%20handle%20notification%20event%0A%20%20%20*%20%40param%20%7BBinding%7D%20binding%20Binding%20metadata%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20addNotifyListener(node%2Cinst%2Cbinding)%7Bif(binding.listenerEvent)%7Bvar%20part%3Dbinding.parts%5B0%5D%3Bnode.addEventListener(binding.listenerEvent%2Cfunction(e)%7BhandleNotification(e%2Cinst%2Cbinding.target%2Cpart.source%2Cpart.negate)%3B%7D)%3B%7D%7D%2F%2F%20--%20for%20method-based%20effects%20(complexObserver%20%26%20computed)%20--------------%0A%2F**%0A%20%20%20*%20Adds%20property%20effects%20for%20each%20argument%20in%20the%20method%20signature%20(and%0A%20%20%20*%20optionally%2C%20for%20the%20method%20name%20if%20%60dynamic%60%20is%20true)%20that%20calls%20the%0A%20%20%20*%20provided%20effect%20function.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BElement%20%7C%20Object%7D%20model%20Prototype%20or%20instance%0A%20%20%20*%20%40param%20%7B!MethodSignature%7D%20sig%20Method%20signature%20metadata%0A%20%20%20*%20%40param%20%7Bstring%7D%20type%20Type%20of%20property%20effect%20to%20add%0A%20%20%20*%20%40param%20%7BFunction%7D%20effectFn%20Function%20to%20run%20when%20arguments%20change%0A%20%20%20*%20%40param%20%7B*%3D%7D%20methodInfo%20Effect-specific%20information%20to%20be%20included%20in%0A%20%20%20*%20%20%20method%20effect%20metadata%0A%20%20%20*%20%40param%20%7Bboolean%7CObject%3D%7D%20dynamicFn%20Boolean%20or%20object%20map%20indicating%20whether%0A%20%20%20*%20%20%20method%20names%20should%20be%20included%20as%20a%20dependency%20to%20the%20effect.%20Note%2C%0A%20%20%20*%20%20%20defaults%20to%20true%20if%20the%20signature%20is%20static%20(sig.static%20is%20true).%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20createMethodEffect(model%2Csig%2Ctype%2CeffectFn%2CmethodInfo%2CdynamicFn)%7BdynamicFn%3Dsig.static%7C%7CdynamicFn%26%26((typeof%20dynamicFn%3D%3D%3D'undefined'%3F'undefined'%3A_typeof(dynamicFn))!%3D%3D'object'%7C%7CdynamicFn%5Bsig.methodName%5D)%3Bvar%20info%3D%7BmethodName%3Asig.methodName%2Cargs%3Asig.args%2CmethodInfo%3AmethodInfo%2CdynamicFn%3AdynamicFn%7D%3Bfor(var%20i%3D0%2Carg%3Bi%3Csig.args.length%26%26(arg%3Dsig.args%5Bi%5D)%3Bi%2B%2B)%7Bif(!arg.literal)%7Bmodel._addPropertyEffect(arg.rootProperty%2Ctype%2C%7Bfn%3AeffectFn%2Cinfo%3Ainfo%2Ctrigger%3Aarg%7D)%3B%7D%7Dif(dynamicFn)%7Bmodel._addPropertyEffect(sig.methodName%2Ctype%2C%7Bfn%3AeffectFn%2Cinfo%3Ainfo%7D)%3B%7D%7D%2F**%0A%20%20%20*%20Calls%20a%20method%20with%20arguments%20marshaled%20from%20properties%20on%20the%20instance%0A%20%20%20*%20based%20on%20the%20method%20signature%20contained%20in%20the%20effect%20metadata.%0A%20%20%20*%0A%20%20%20*%20Multi-property%20observers%2C%20computed%20properties%2C%20and%20inline%20computing%0A%20%20%20*%20functions%20call%20this%20function%20to%20invoke%20the%20method%2C%20then%20use%20the%20return%0A%20%20%20*%20value%20accordingly.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20the%20effect%20will%20be%20run%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20property%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7B%3F%7D%20info%20Effect%20metadata%0A%20%20%20*%20%40return%20%7B*%7D%20Returns%20the%20return%20value%20from%20the%20method%20invocation%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runMethodEffect(inst%2Cproperty%2Cprops%2ColdProps%2Cinfo)%7B%2F%2F%20Instances%20can%20optionally%20have%20a%20_methodHost%20which%20allows%20redirecting%20where%0A%2F%2F%20to%20find%20methods.%20Currently%20used%20by%20%60templatize%60.%0Avar%20context%3Dinst._methodHost%7C%7Cinst%3Bvar%20fn%3Dcontext%5Binfo.methodName%5D%3Bif(fn)%7Bvar%20args%3Dinst._marshalArgs(info.args%2Cproperty%2Cprops)%3Breturn%20fn.apply(context%2Cargs)%3B%7Delse%20if(!info.dynamicFn)%7Bconsole.warn('method%20%60'%2Binfo.methodName%2B'%60%20not%20defined')%3B%7D%7Dvar%20emptyArray%3D%5B%5D%3B%2F%2F%20Regular%20expressions%20used%20for%20binding%0Avar%20IDENT%3D'(%3F%3A'%2B'%5Ba-zA-Z_%24%5D%5B%5C%5Cw.%3A%24%5C%5C-*%5D*'%2B')'%3Bvar%20NUMBER%3D'(%3F%3A'%2B'%5B-%2B%5D%3F%5B0-9%5D*%5C%5C.%3F%5B0-9%5D%2B(%3F%3A%5BeE%5D%5B-%2B%5D%3F%5B0-9%5D%2B)%3F'%2B')'%3Bvar%20SQUOTE_STRING%3D'(%3F%3A'%2B'%5C'(%3F%3A%5B%5E%5C'%5C%5C%5C%5C%5D%7C%5C%5C%5C%5C.)*%5C''%2B')'%3Bvar%20DQUOTE_STRING%3D'(%3F%3A'%2B'%22(%3F%3A%5B%5E%22%5C%5C%5C%5C%5D%7C%5C%5C%5C%5C.)*%22'%2B')'%3Bvar%20STRING%3D'(%3F%3A'%2BSQUOTE_STRING%2B'%7C'%2BDQUOTE_STRING%2B')'%3Bvar%20ARGUMENT%3D'(%3F%3A('%2BIDENT%2B'%7C'%2BNUMBER%2B'%7C'%2BSTRING%2B')%5C%5Cs*'%2B')'%3Bvar%20ARGUMENTS%3D'(%3F%3A'%2BARGUMENT%2B'(%3F%3A%2C%5C%5Cs*'%2BARGUMENT%2B')*'%2B')'%3Bvar%20ARGUMENT_LIST%3D'(%3F%3A'%2B'%5C%5C(%5C%5Cs*'%2B'(%3F%3A'%2BARGUMENTS%2B'%3F'%2B')'%2B'%5C%5C)%5C%5Cs*'%2B')'%3Bvar%20BINDING%3D'('%2BIDENT%2B'%5C%5Cs*'%2BARGUMENT_LIST%2B'%3F'%2B')'%3B%2F%2F%20Group%203%0Avar%20OPEN_BRACKET%3D'(%5C%5C%5B%5C%5C%5B%7C%7B%7B)'%2B'%5C%5Cs*'%3Bvar%20CLOSE_BRACKET%3D'(%3F%3A%5D%5D%7C%7D%7D)'%3Bvar%20NEGATE%3D'(%3F%3A(!)%5C%5Cs*)%3F'%3B%2F%2F%20Group%202%0Avar%20EXPRESSION%3DOPEN_BRACKET%2BNEGATE%2BBINDING%2BCLOSE_BRACKET%3Bvar%20bindingRegex%3Dnew%20RegExp(EXPRESSION%2C%22g%22)%3B%2F**%0A%20%20%20*%20Create%20a%20string%20from%20binding%20parts%20of%20all%20the%20literal%20parts%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!Array%3CBindingPart%3E%7D%20parts%20All%20parts%20to%20stringify%0A%20%20%20*%20%40return%20%7Bstring%7D%20String%20made%20from%20the%20literal%20parts%0A%20%20%20*%2Ffunction%20literalFromParts(parts)%7Bvar%20s%3D''%3Bfor(var%20i%3D0%3Bi%3Cparts.length%3Bi%2B%2B)%7Bvar%20literal%3Dparts%5Bi%5D.literal%3Bs%2B%3Dliteral%7C%7C''%3B%7Dreturn%20s%3B%7D%2F**%0A%20%20%20*%20Parses%20an%20expression%20string%20for%20a%20method%20signature%2C%20and%20returns%20a%20metadata%0A%20%20%20*%20describing%20the%20method%20in%20terms%20of%20%60methodName%60%2C%20%60static%60%20(whether%20all%20the%0A%20%20%20*%20arguments%20are%20literals)%2C%20and%20an%20array%20of%20%60args%60%0A%20%20%20*%0A%20%20%20*%20%40param%20%7Bstring%7D%20expression%20The%20expression%20to%20parse%0A%20%20%20*%20%40return%20%7B%3FMethodSignature%7D%20The%20method%20metadata%20object%20if%20a%20method%20expression%20was%0A%20%20%20*%20%20%20found%2C%20otherwise%20%60undefined%60%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20parseMethod(expression)%7B%2F%2F%20tries%20to%20match%20valid%20javascript%20property%20names%0Avar%20m%3Dexpression.match(%2F(%5B%5E%5Cs%5D%2B%3F)%5C((%5B%5Cs%5CS%5D*)%5C)%2F)%3Bif(m)%7Bvar%20methodName%3Dm%5B1%5D%3Bvar%20sig%3D%7BmethodName%3AmethodName%2Cstatic%3Atrue%2Cargs%3AemptyArray%7D%3Bif(m%5B2%5D.trim())%7B%2F%2F%20replace%20escaped%20commas%20with%20comma%20entity%2C%20split%20on%20un-escaped%20commas%0Avar%20args%3Dm%5B2%5D.replace(%2F%5C%5C%2C%2Fg%2C'%26comma%3B').split('%2C')%3Breturn%20parseArgs(args%2Csig)%3B%7Delse%7Breturn%20sig%3B%7D%7Dreturn%20null%3B%7D%2F**%0A%20%20%20*%20Parses%20an%20array%20of%20arguments%20and%20sets%20the%20%60args%60%20property%20of%20the%20supplied%0A%20%20%20*%20signature%20metadata%20object.%20Sets%20the%20%60static%60%20property%20to%20false%20if%20any%0A%20%20%20*%20argument%20is%20a%20non-literal.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!Array%3Cstring%3E%7D%20argList%20Array%20of%20argument%20names%0A%20%20%20*%20%40param%20%7B!MethodSignature%7D%20sig%20Method%20signature%20metadata%20object%0A%20%20%20*%20%40return%20%7B!MethodSignature%7D%20The%20updated%20signature%20metadata%20object%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20parseArgs(argList%2Csig)%7Bsig.args%3DargList.map(function(rawArg)%7Bvar%20arg%3DparseArg(rawArg)%3Bif(!arg.literal)%7Bsig.static%3Dfalse%3B%7Dreturn%20arg%3B%7D%2Cthis)%3Breturn%20sig%3B%7D%2F**%0A%20%20%20*%20Parses%20an%20individual%20argument%2C%20and%20returns%20an%20argument%20metadata%20object%0A%20%20%20*%20with%20the%20following%20fields%3A%0A%20%20%20*%0A%20%20%20*%20%20%20%7B%0A%20%20%20*%20%20%20%20%20value%3A%20'prop'%2C%20%20%20%20%20%20%20%20%2F%2F%20property%2Fpath%20or%20literal%20value%0A%20%20%20*%20%20%20%20%20literal%3A%20false%2C%20%20%20%20%20%20%20%2F%2F%20whether%20argument%20is%20a%20literal%0A%20%20%20*%20%20%20%20%20structured%3A%20false%2C%20%20%20%20%2F%2F%20whether%20the%20property%20is%20a%20path%0A%20%20%20*%20%20%20%20%20rootProperty%3A%20'prop'%2C%20%2F%2F%20the%20root%20property%20of%20the%20path%0A%20%20%20*%20%20%20%20%20wildcard%3A%20false%20%20%20%20%20%20%20%2F%2F%20whether%20the%20argument%20was%20a%20wildcard%20'.*'%20path%0A%20%20%20*%20%20%20%7D%0A%20%20%20*%0A%20%20%20*%20%40param%20%7Bstring%7D%20rawArg%20The%20string%20value%20of%20the%20argument%0A%20%20%20*%20%40return%20%7B!MethodArg%7D%20Argument%20metadata%20object%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20parseArg(rawArg)%7B%2F%2F%20clean%20up%20whitespace%0Avar%20arg%3DrawArg.trim()%2F%2F%20replace%20comma%20entity%20with%20comma%0A.replace(%2F%26comma%3B%2Fg%2C'%2C')%2F%2F%20repair%20extra%20escape%20sequences%3B%20note%20only%20commas%20strictly%20need%0A%2F%2F%20escaping%2C%20but%20we%20allow%20any%20other%20char%20to%20be%20escaped%20since%20its%0A%2F%2F%20likely%20users%20will%20do%20this%0A.replace(%2F%5C%5C(.)%2Fg%2C'%5C%241')%3B%2F%2F%20basic%20argument%20descriptor%0Avar%20a%3D%7Bname%3Aarg%2Cvalue%3A''%2Cliteral%3Afalse%7D%3B%2F%2F%20detect%20literal%20value%20(must%20be%20String%20or%20Number)%0Avar%20fc%3Darg%5B0%5D%3Bif(fc%3D%3D%3D'-')%7Bfc%3Darg%5B1%5D%3B%7Dif(fc%3E%3D'0'%26%26fc%3C%3D'9')%7Bfc%3D'%23'%3B%7Dswitch(fc)%7Bcase%22'%22%3Acase'%22'%3Aa.value%3Darg.slice(1%2C-1)%3Ba.literal%3Dtrue%3Bbreak%3Bcase'%23'%3Aa.value%3DNumber(arg)%3Ba.literal%3Dtrue%3Bbreak%3B%7D%2F%2F%20if%20not%20literal%2C%20look%20for%20structured%20path%0Aif(!a.literal)%7Ba.rootProperty%3DPolymer.Path.root(arg)%3B%2F%2F%20detect%20structured%20path%20(has%20dots)%0Aa.structured%3DPolymer.Path.isPath(arg)%3Bif(a.structured)%7Ba.wildcard%3Darg.slice(-2)%3D%3D'.*'%3Bif(a.wildcard)%7Ba.name%3Darg.slice(0%2C-2)%3B%7D%7D%7Dreturn%20a%3B%7D%2F%2F%20data%20api%0A%2F**%0A%20%20%20*%20Sends%20array%20splice%20notifications%20(%60.splices%60%20and%20%60.length%60)%0A%20%20%20*%0A%20%20%20*%20Note%3A%20this%20implementation%20only%20accepts%20normalized%20paths%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20Instance%20to%20send%20notifications%20to%0A%20%20%20*%20%40param%20%7BArray%7D%20array%20The%20array%20the%20mutations%20occurred%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20path%20The%20path%20to%20the%20array%20that%20was%20mutated%0A%20%20%20*%20%40param%20%7BArray%7D%20splices%20Array%20of%20splice%20records%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20_notifySplices(inst%2Carray%2Cpath%2Csplices)%7Bvar%20splicesPath%3Dpath%2B'.splices'%3Binst.notifyPath(splicesPath%2C%7BindexSplices%3Asplices%7D)%3Binst.notifyPath(path%2B'.length'%2Carray.length)%3B%2F%2F%20Null%20here%20to%20allow%20potentially%20large%20splice%20records%20to%20be%20GC'ed.%0Ainst.__data%5BsplicesPath%5D%3D%7BindexSplices%3Anull%7D%3B%7D%2F**%0A%20%20%20*%20Creates%20a%20splice%20record%20and%20sends%20an%20array%20splice%20notification%20for%0A%20%20%20*%20the%20described%20mutation%0A%20%20%20*%0A%20%20%20*%20Note%3A%20this%20implementation%20only%20accepts%20normalized%20paths%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20Instance%20to%20send%20notifications%20to%0A%20%20%20*%20%40param%20%7BArray%7D%20array%20The%20array%20the%20mutations%20occurred%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20path%20The%20path%20to%20the%20array%20that%20was%20mutated%0A%20%20%20*%20%40param%20%7Bnumber%7D%20index%20Index%20at%20which%20the%20array%20mutation%20occurred%0A%20%20%20*%20%40param%20%7Bnumber%7D%20addedCount%20Number%20of%20added%20items%0A%20%20%20*%20%40param%20%7BArray%7D%20removed%20Array%20of%20removed%20items%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20notifySplice(inst%2Carray%2Cpath%2Cindex%2CaddedCount%2Cremoved)%7B_notifySplices(inst%2Carray%2Cpath%2C%5B%7Bindex%3Aindex%2CaddedCount%3AaddedCount%2Cremoved%3Aremoved%2Cobject%3Aarray%2Ctype%3A'splice'%7D%5D)%3B%7D%2F**%0A%20%20%20*%20Returns%20an%20upper-cased%20version%20of%20the%20string.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7Bstring%7D%20name%20String%20to%20uppercase%0A%20%20%20*%20%40return%20%7Bstring%7D%20Uppercased%20string%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20upper(name)%7Breturn%20name%5B0%5D.toUpperCase()%2Bname.substring(1)%3B%7D%2F**%0A%20%20%20*%20Element%20class%20mixin%20that%20provides%20meta-programming%20for%20Polymer's%20template%0A%20%20%20*%20binding%20and%20data%20observation%20(collectively%2C%20%22property%20effects%22)%20system.%0A%20%20%20*%0A%20%20%20*%20This%20mixin%20uses%20provides%20the%20following%20key%20static%20methods%20for%20adding%0A%20%20%20*%20property%20effects%20to%20an%20element%20class%3A%0A%20%20%20*%20-%20%60addPropertyEffect%60%0A%20%20%20*%20-%20%60createPropertyObserver%60%0A%20%20%20*%20-%20%60createMethodObserver%60%0A%20%20%20*%20-%20%60createNotifyingProperty%60%0A%20%20%20*%20-%20%60createReadOnlyProperty%60%0A%20%20%20*%20-%20%60createReflectedProperty%60%0A%20%20%20*%20-%20%60createComputedProperty%60%0A%20%20%20*%20-%20%60bindTemplate%60%0A%20%20%20*%0A%20%20%20*%20Each%20method%20creates%20one%20or%20more%20property%20accessors%2C%20along%20with%20metadata%0A%20%20%20*%20used%20by%20this%20mixin's%20implementation%20of%20%60_propertiesChanged%60%20to%20perform%0A%20%20%20*%20the%20property%20effects.%0A%20%20%20*%0A%20%20%20*%20Underscored%20versions%20of%20the%20above%20methods%20also%20exist%20on%20the%20element%0A%20%20%20*%20prototype%20for%20adding%20property%20effects%20on%20instances%20at%20runtime.%0A%20%20%20*%0A%20%20%20*%20Note%20that%20this%20mixin%20overrides%20several%20%60PropertyAccessors%60%20methods%2C%20in%0A%20%20%20*%20many%20cases%20to%20maintain%20guarantees%20provided%20by%20the%20Polymer%201.x%20features%3B%0A%20%20%20*%20notably%20it%20changes%20property%20accessors%20to%20be%20synchronous%20by%20default%0A%20%20%20*%20whereas%20the%20default%20when%20using%20%60PropertyAccessors%60%20standalone%20is%20to%20be%0A%20%20%20*%20async%20by%20default.%0A%20%20%20*%0A%20%20%20*%20%40mixinFunction%0A%20%20%20*%20%40polymer%0A%20%20%20*%20%40appliesMixin%20Polymer.TemplateStamp%0A%20%20%20*%20%40appliesMixin%20Polymer.PropertyAccessors%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Element%20class%20mixin%20that%20provides%20meta-programming%20for%20Polymer's%0A%20%20%20*%20template%20binding%20and%20data%20observation%20system.%0A%20%20%20*%2FPolymer.PropertyEffects%3DPolymer.dedupingMixin(function(superClass)%7B%2F**%0A%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20*%20%40extends%20%7BsuperClass%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertyAccessors%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_TemplateStamp%7D%0A%20%20%20%20%20*%20%40unrestricted%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Fvar%20propertyEffectsBase%3DPolymer.TemplateStamp(Polymer.PropertyAccessors(superClass))%3B%2F**%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40mixinClass%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertyEffects%7D%0A%20%20%20%20%20*%20%40extends%20%7BpropertyEffectsBase%7D%0A%20%20%20%20%20*%20%40unrestricted%0A%20%20%20%20%20*%2Fvar%20PropertyEffects%3Dfunction(_propertyEffectsBase)%7B_inherits(PropertyEffects%2C_propertyEffectsBase)%3Bfunction%20PropertyEffects()%7B_classCallCheck(this%2CPropertyEffects)%3B%2F**%20%40type%20%7Bboolean%7D%20*%2F%2F%2F%20Used%20to%20identify%20users%20of%20this%20mixin%2C%20ala%20instanceof%0Avar%20_this%3D_possibleConstructorReturn(this%2C(PropertyEffects.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects)).call(this))%3B_this.__isPropertyEffectsClient%3Dtrue%3B%2F**%20%40type%20%7Bnumber%7D%20*%2F%2F%2F%20NOTE%3A%20used%20to%20track%20re-entrant%20calls%20to%20%60_flushProperties%60%0A%2F%2F%20path%20changes%20dirty%20check%20against%20%60__dataTemp%60%20only%20during%20one%20%22turn%22%0A%2F%2F%20and%20are%20cleared%20when%20%60__dataCounter%60%20returns%20to%200.%0A_this.__dataCounter%3D0%3B%2F**%20%40type%20%7Bboolean%7D%20*%2F_this.__dataClientsReady%3B%2F**%20%40type%20%7BArray%7D%20*%2F_this.__dataPendingClients%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__dataToNotify%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__dataLinkedPaths%3B%2F**%20%40type%20%7Bboolean%7D%20*%2F_this.__dataHasPaths%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__dataCompoundStorage%3B%2F**%20%40type%20%7BPolymer_PropertyEffects%7D%20*%2F_this.__dataHost%3B%2F**%20%40type%20%7B!Object%7D%20*%2F_this.__dataTemp%3B%2F**%20%40type%20%7Bboolean%7D%20*%2F_this.__dataClientsInitialized%3B%2F**%20%40type%20%7B!Object%7D%20*%2F_this.__data%3B%2F**%20%40type%20%7B!Object%7D%20*%2F_this.__dataPending%3B%2F**%20%40type%20%7B!Object%7D%20*%2F_this.__dataOld%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__computeEffects%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__reflectEffects%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__notifyEffects%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__propagateEffects%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__observeEffects%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__readOnly%3B%2F**%20%40type%20%7B!TemplateInfo%7D%20*%2F_this.__templateInfo%3Breturn%20_this%3B%7D_createClass(PropertyEffects%2C%5B%7Bkey%3A'_initializeProperties'%2C%2F**%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_initializeProperties()%7B_get(PropertyEffects.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects.prototype)%2C'_initializeProperties'%2Cthis).call(this)%3BhostStack.registerHost(this)%3Bthis.__dataClientsReady%3Dfalse%3Bthis.__dataPendingClients%3Dnull%3Bthis.__dataToNotify%3Dnull%3Bthis.__dataLinkedPaths%3Dnull%3Bthis.__dataHasPaths%3Dfalse%3B%2F%2F%20May%20be%20set%20on%20instance%20prior%20to%20upgrade%0Athis.__dataCompoundStorage%3Dthis.__dataCompoundStorage%7C%7Cnull%3Bthis.__dataHost%3Dthis.__dataHost%7C%7Cnull%3Bthis.__dataTemp%3D%7B%7D%3Bthis.__dataClientsInitialized%3Dfalse%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20%60Polymer.PropertyAccessors%60%20implementation%20to%20provide%20a%0A%20%20%20%20%20%20%20*%20more%20efficient%20implementation%20of%20initializing%20properties%20from%0A%20%20%20%20%20%20%20*%20the%20prototype%20on%20the%20instance.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20props%20Properties%20to%20initialize%20on%20the%20prototype%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_initializeProtoProperties'%2Cvalue%3Afunction%20_initializeProtoProperties(props)%7Bthis.__data%3DObject.create(props)%3Bthis.__dataPending%3DObject.create(props)%3Bthis.__dataOld%3D%7B%7D%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20%60Polymer.PropertyAccessors%60%20implementation%20to%20avoid%20setting%0A%20%20%20%20%20%20%20*%20%60_setProperty%60's%20%60shouldNotify%3A%20true%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20props%20Properties%20to%20initialize%20on%20the%20instance%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_initializeInstanceProperties'%2Cvalue%3Afunction%20_initializeInstanceProperties(props)%7Bvar%20readOnly%3Dthis%5BTYPES.READ_ONLY%5D%3Bfor(var%20prop%20in%20props)%7Bif(!readOnly%7C%7C!readOnly%5Bprop%5D)%7Bthis.__dataPending%3Dthis.__dataPending%7C%7C%7B%7D%3Bthis.__dataOld%3Dthis.__dataOld%7C%7C%7B%7D%3Bthis.__data%5Bprop%5D%3Dthis.__dataPending%5Bprop%5D%3Dprops%5Bprop%5D%3B%7D%7D%7D%2F%2F%20Prototype%20setup%20----------------------------------------%0A%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60addPropertyEffect%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20that%20should%20trigger%20the%20effect%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20type%20Effect%20type%2C%20from%20this.PROPERTY_EFFECT_TYPES%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20effect%20Effect%20metadata%20object%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_addPropertyEffect'%2Cvalue%3Afunction%20_addPropertyEffect(property%2Ctype%2Ceffect)%7Bthis._createPropertyAccessor(property%2Ctype%3D%3DTYPES.READ_ONLY)%3B%2F%2F%20effects%20are%20accumulated%20into%20arrays%20per%20property%20based%20on%20type%0Avar%20effects%3DensureOwnEffectMap(this%2Ctype)%5Bproperty%5D%3Bif(!effects)%7Beffects%3Dthis%5Btype%5D%5Bproperty%5D%3D%5B%5D%3B%7Deffects.push(effect)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Removes%20the%20given%20property%20effect.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20the%20effect%20was%20associated%20with%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20type%20Effect%20type%2C%20from%20this.PROPERTY_EFFECT_TYPES%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20effect%20Effect%20metadata%20object%20to%20remove%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_removePropertyEffect'%2Cvalue%3Afunction%20_removePropertyEffect(property%2Ctype%2Ceffect)%7Bvar%20effects%3DensureOwnEffectMap(this%2Ctype)%5Bproperty%5D%3Bvar%20idx%3Deffects.indexOf(effect)%3Bif(idx%3E%3D0)%7Beffects.splice(idx%2C1)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20whether%20the%20current%20prototype%2Finstance%20has%20a%20property%20effect%0A%20%20%20%20%20%20%20*%20of%20a%20certain%20type.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%3D%7D%20type%20Effect%20type%2C%20from%20this.PROPERTY_EFFECT_TYPES%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20the%20prototype%2Finstance%20has%20an%20effect%20of%20this%20type%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_hasPropertyEffect'%2Cvalue%3Afunction%20_hasPropertyEffect(property%2Ctype)%7Bvar%20effects%3Dthis%5Btype%5D%3Breturn%20Boolean(effects%26%26effects%5Bproperty%5D)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20whether%20the%20current%20prototype%2Finstance%20has%20a%20%22read%20only%22%0A%20%20%20%20%20%20%20*%20accessor%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20the%20prototype%2Finstance%20has%20an%20effect%20of%20this%20type%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_hasReadOnlyEffect'%2Cvalue%3Afunction%20_hasReadOnlyEffect(property)%7Breturn%20this._hasPropertyEffect(property%2CTYPES.READ_ONLY)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20whether%20the%20current%20prototype%2Finstance%20has%20a%20%22notify%22%0A%20%20%20%20%20%20%20*%20property%20effect%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20the%20prototype%2Finstance%20has%20an%20effect%20of%20this%20type%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_hasNotifyEffect'%2Cvalue%3Afunction%20_hasNotifyEffect(property)%7Breturn%20this._hasPropertyEffect(property%2CTYPES.NOTIFY)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20whether%20the%20current%20prototype%2Finstance%20has%20a%20%22reflect%20to%20attribute%22%0A%20%20%20%20%20%20%20*%20property%20effect%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20the%20prototype%2Finstance%20has%20an%20effect%20of%20this%20type%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_hasReflectEffect'%2Cvalue%3Afunction%20_hasReflectEffect(property)%7Breturn%20this._hasPropertyEffect(property%2CTYPES.REFLECT)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20whether%20the%20current%20prototype%2Finstance%20has%20a%20%22computed%22%0A%20%20%20%20%20%20%20*%20property%20effect%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20the%20prototype%2Finstance%20has%20an%20effect%20of%20this%20type%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_hasComputedEffect'%2Cvalue%3Afunction%20_hasComputedEffect(property)%7Breturn%20this._hasPropertyEffect(property%2CTYPES.COMPUTE)%3B%7D%2F%2F%20Runtime%20----------------------------------------%0A%2F**%0A%20%20%20%20%20%20%20*%20Sets%20a%20pending%20property%20or%20path.%20%20If%20the%20root%20property%20of%20the%20path%20in%0A%20%20%20%20%20%20%20*%20question%20had%20no%20accessor%2C%20the%20path%20is%20set%2C%20otherwise%20it%20is%20enqueued%0A%20%20%20%20%20%20%20*%20via%20%60_setPendingProperty%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20function%20isolates%20relatively%20expensive%20functionality%20necessary%0A%20%20%20%20%20%20%20*%20for%20the%20public%20API%20(%60set%60%2C%20%60setProperties%60%2C%20%60notifyPath%60%2C%20and%20property%0A%20%20%20%20%20%20%20*%20change%20listeners%20via%20%7B%7B...%7D%7D%20bindings)%2C%20such%20that%20it%20is%20only%20done%0A%20%20%20%20%20%20%20*%20when%20paths%20enter%20the%20system%2C%20and%20not%20at%20every%20propagation%20step.%20%20It%0A%20%20%20%20%20%20%20*%20also%20sets%20a%20%60__dataHasPaths%60%20flag%20on%20the%20instance%20which%20is%20used%20to%0A%20%20%20%20%20%20%20*%20fast-path%20slower%20path-matching%20code%20in%20the%20property%20effects%20host%20paths.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%60path%60%20can%20be%20a%20path%20string%20or%20array%20of%20path%20parts%20as%20accepted%20by%20the%0A%20%20%20%20%20%20%20*%20public%20API.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cnumber%7Cstring%3E%7D%20path%20Path%20to%20set%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20shouldNotify%20Set%20to%20true%20if%20this%20change%20should%0A%20%20%20%20%20%20%20*%20%20cause%20a%20property%20notification%20event%20dispatch%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20isPathNotification%20If%20the%20path%20being%20set%20is%20a%20path%0A%20%20%20%20%20%20%20*%20%20%20notification%20of%20an%20already%20changed%20value%2C%20as%20opposed%20to%20a%20request%0A%20%20%20%20%20%20%20*%20%20%20to%20set%20and%20notify%20the%20change.%20%20In%20the%20latter%20%60false%60%20case%2C%20a%20dirty%0A%20%20%20%20%20%20%20*%20%20%20check%20is%20performed%20and%20then%20the%20value%20is%20set%20to%20the%20path%20before%0A%20%20%20%20%20%20%20*%20%20%20enqueuing%20the%20pending%20property%20change.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Returns%20true%20if%20the%20property%2Fpath%20was%20enqueued%20in%0A%20%20%20%20%20%20%20*%20%20%20the%20pending%20changes%20bag.%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_setPendingPropertyOrPath'%2Cvalue%3Afunction%20_setPendingPropertyOrPath(path%2Cvalue%2CshouldNotify%2CisPathNotification)%7Bif(isPathNotification%7C%7CPolymer.Path.root(Array.isArray(path)%3Fpath%5B0%5D%3Apath)!%3D%3Dpath)%7B%2F%2F%20Dirty%20check%20changes%20being%20set%20to%20a%20path%20against%20the%20actual%20object%2C%0A%2F%2F%20since%20this%20is%20the%20entry%20point%20for%20paths%20into%20the%20system%3B%20from%20here%0A%2F%2F%20the%20only%20dirty%20checks%20are%20against%20the%20%60__dataTemp%60%20cache%20to%20prevent%0A%2F%2F%20duplicate%20work%20in%20the%20same%20turn%20only.%20Note%2C%20if%20this%20was%20a%20notification%0A%2F%2F%20of%20a%20change%20already%20set%20to%20a%20path%20(isPathNotification%3A%20true)%2C%0A%2F%2F%20we%20always%20let%20the%20change%20through%20and%20skip%20the%20%60set%60%20since%20it%20was%0A%2F%2F%20already%20dirty%20checked%20at%20the%20point%20of%20entry%20and%20the%20underlying%0A%2F%2F%20object%20has%20already%20been%20updated%0Aif(!isPathNotification)%7Bvar%20old%3DPolymer.Path.get(this%2Cpath)%3Bpath%3D%2F**%20%40type%20%7Bstring%7D%20*%2FPolymer.Path.set(this%2Cpath%2Cvalue)%3B%2F%2F%20Use%20property-accessor's%20simpler%20dirty%20check%0Aif(!path%7C%7C!_get(PropertyEffects.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects.prototype)%2C'_shouldPropertyChange'%2Cthis).call(this%2Cpath%2Cvalue%2Cold))%7Breturn%20false%3B%7D%7Dthis.__dataHasPaths%3Dtrue%3Bif(this._setPendingProperty(%2F**%40type%7Bstring%7D*%2Fpath%2Cvalue%2CshouldNotify))%7BcomputeLinkedPaths(this%2Cpath%2Cvalue)%3Breturn%20true%3B%7D%7Delse%7Bif(this.__dataHasAccessor%26%26this.__dataHasAccessor%5Bpath%5D)%7Breturn%20this._setPendingProperty(%2F**%40type%7Bstring%7D*%2Fpath%2Cvalue%2CshouldNotify)%3B%7Delse%7Bthis%5Bpath%5D%3Dvalue%3B%7D%7Dreturn%20false%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Applies%20a%20value%20to%20a%20non-Polymer%20element%2Fnode's%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20implementation%20makes%20a%20best-effort%20at%20binding%20interop%3A%0A%20%20%20%20%20%20%20*%20Some%20native%20element%20properties%20have%20side-effects%20when%0A%20%20%20%20%20%20%20*%20re-setting%20the%20same%20value%20(e.g.%20setting%20%60%3Cinput%3E.value%60%20resets%20the%0A%20%20%20%20%20%20%20*%20cursor%20position)%2C%20so%20we%20do%20a%20dirty-check%20before%20setting%20the%20value.%0A%20%20%20%20%20%20%20*%20However%2C%20for%20better%20interop%20with%20non-Polymer%20custom%20elements%20that%0A%20%20%20%20%20%20%20*%20accept%20objects%2C%20we%20explicitly%20re-set%20object%20changes%20coming%20from%20the%0A%20%20%20%20%20%20%20*%20Polymer%20world%20(which%20may%20include%20deep%20object%20changes%20without%20the%0A%20%20%20%20%20%20%20*%20top%20reference%20changing)%2C%20erring%20on%20the%20side%20of%20providing%20more%0A%20%20%20%20%20%20%20*%20information.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Users%20may%20override%20this%20method%20to%20provide%20alternate%20approaches.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Node%7D%20node%20The%20node%20to%20set%20a%20property%20on%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20prop%20The%20property%20to%20set%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20The%20value%20to%20set%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_setUnmanagedPropertyToNode'%2Cvalue%3Afunction%20_setUnmanagedPropertyToNode(node%2Cprop%2Cvalue)%7B%2F%2F%20It%20is%20a%20judgment%20call%20that%20resetting%20primitives%20is%0A%2F%2F%20%22bad%22%20and%20resettings%20objects%20is%20also%20%22good%22%3B%20alternatively%20we%20could%0A%2F%2F%20implement%20a%20whitelist%20of%20tag%20%26%20property%20values%20that%20should%20never%0A%2F%2F%20be%20reset%20(e.g.%20%3Cinput%3E.value%20%26%26%20%3Cselect%3E.value)%0Aif(value!%3D%3Dnode%5Bprop%5D%7C%7C(typeof%20value%3D%3D%3D'undefined'%3F'undefined'%3A_typeof(value))%3D%3D'object')%7Bnode%5Bprop%5D%3Dvalue%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20the%20%60PropertiesChanged%60%20implementation%20to%20introduce%20special%0A%20%20%20%20%20%20%20*%20dirty%20check%20logic%20depending%20on%20the%20property%20%26%20value%20being%20set%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%201.%20Any%20value%20set%20to%20a%20path%20(e.g.%20'obj.prop'%3A%2042%20or%20'obj.prop'%3A%20%7B...%7D)%0A%20%20%20%20%20%20%20*%20%20%20%20Stored%20in%20%60__dataTemp%60%2C%20dirty%20checked%20against%20%60__dataTemp%60%0A%20%20%20%20%20%20%20*%202.%20Object%20set%20to%20simple%20property%20(e.g.%20'prop'%3A%20%7B...%7D)%0A%20%20%20%20%20%20%20*%20%20%20%20Stored%20in%20%60__dataTemp%60%20and%20%60__data%60%2C%20dirty%20checked%20against%0A%20%20%20%20%20%20%20*%20%20%20%20%60__dataTemp%60%20by%20default%20implementation%20of%20%60_shouldPropertyChange%60%0A%20%20%20%20%20%20%20*%203.%20Primitive%20value%20set%20to%20simple%20property%20(e.g.%20'prop'%3A%2042)%0A%20%20%20%20%20%20%20*%20%20%20%20Stored%20in%20%60__data%60%2C%20dirty%20checked%20against%20%60__data%60%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20dirty-check%20is%20important%20to%20prevent%20cycles%20due%20to%20two-way%0A%20%20%20%20%20%20%20*%20notification%2C%20but%20paths%20and%20objects%20are%20only%20dirty%20checked%20against%20any%0A%20%20%20%20%20%20%20*%20previous%20value%20set%20during%20this%20turn%20via%20a%20%22temporary%20cache%22%20that%20is%0A%20%20%20%20%20%20%20*%20cleared%20when%20the%20last%20%60_propertiesChanged%60%20exits.%20This%20is%20so%3A%0A%20%20%20%20%20%20%20*%20a.%20any%20cached%20array%20paths%20(e.g.%20'array.3.prop')%20may%20be%20invalidated%0A%20%20%20%20%20%20%20*%20%20%20%20due%20to%20array%20mutations%20like%20shift%2Funshift%2Fsplice%3B%20this%20is%20fine%0A%20%20%20%20%20%20%20*%20%20%20%20since%20path%20changes%20are%20dirty-checked%20at%20user%20entry%20points%20like%20%60set%60%0A%20%20%20%20%20%20%20*%20b.%20dirty-checking%20for%20objects%20only%20lasts%20one%20turn%20to%20allow%20the%20user%0A%20%20%20%20%20%20%20*%20%20%20%20to%20mutate%20the%20object%20in-place%20and%20re-set%20it%20with%20the%20same%20identity%0A%20%20%20%20%20%20%20*%20%20%20%20and%20have%20all%20sub-properties%20re-propagated%20in%20a%20subsequent%20turn.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20temp%20cache%20is%20not%20necessarily%20sufficient%20to%20prevent%20invalid%20array%0A%20%20%20%20%20%20%20*%20paths%2C%20since%20a%20splice%20can%20happen%20during%20the%20same%20turn%20(with%20pathological%0A%20%20%20%20%20%20%20*%20user%20code)%3B%20we%20could%20introduce%20a%20%22fixup%22%20for%20temporarily%20cached%20array%0A%20%20%20%20%20%20%20*%20paths%20if%20needed%3A%20https%3A%2F%2Fgithub.com%2FPolymer%2Fpolymer%2Fissues%2F4227%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20the%20property%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20shouldNotify%20True%20if%20property%20should%20fire%20notification%0A%20%20%20%20%20%20%20*%20%20%20event%20(applies%20only%20for%20%60notify%3A%20true%60%20properties)%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Returns%20true%20if%20the%20property%20changed%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_setPendingProperty'%2Cvalue%3Afunction%20_setPendingProperty(property%2Cvalue%2CshouldNotify)%7Bvar%20isPath%3Dthis.__dataHasPaths%26%26Polymer.Path.isPath(property)%3Bvar%20prevProps%3DisPath%3Fthis.__dataTemp%3Athis.__data%3Bif(this._shouldPropertyChange(property%2Cvalue%2CprevProps%5Bproperty%5D))%7Bif(!this.__dataPending)%7Bthis.__dataPending%3D%7B%7D%3Bthis.__dataOld%3D%7B%7D%3B%7D%2F%2F%20Ensure%20old%20is%20captured%20from%20the%20last%20turn%0Aif(!(property%20in%20this.__dataOld))%7Bthis.__dataOld%5Bproperty%5D%3Dthis.__data%5Bproperty%5D%3B%7D%2F%2F%20Paths%20are%20stored%20in%20temporary%20cache%20(cleared%20at%20end%20of%20turn)%2C%0A%2F%2F%20which%20is%20used%20for%20dirty-checking%2C%20all%20others%20stored%20in%20__data%0Aif(isPath)%7Bthis.__dataTemp%5Bproperty%5D%3Dvalue%3B%7Delse%7Bthis.__data%5Bproperty%5D%3Dvalue%3B%7D%2F%2F%20All%20changes%20go%20into%20pending%20property%20bag%2C%20passed%20to%20_propertiesChanged%0Athis.__dataPending%5Bproperty%5D%3Dvalue%3B%2F%2F%20Track%20properties%20that%20should%20notify%20separately%0Aif(isPath%7C%7Cthis%5BTYPES.NOTIFY%5D%26%26this%5BTYPES.NOTIFY%5D%5Bproperty%5D)%7Bthis.__dataToNotify%3Dthis.__dataToNotify%7C%7C%7B%7D%3Bthis.__dataToNotify%5Bproperty%5D%3DshouldNotify%3B%7Dreturn%20true%3B%7Dreturn%20false%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20base%20implementation%20to%20ensure%20all%20accessors%20set%20%60shouldNotify%60%0A%20%20%20%20%20%20%20*%20to%20true%2C%20for%20per-property%20notification%20tracking.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20the%20property%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_setProperty'%2Cvalue%3Afunction%20_setProperty(property%2Cvalue)%7Bif(this._setPendingProperty(property%2Cvalue%2Ctrue))%7Bthis._invalidateProperties()%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20%60PropertyAccessor%60's%20default%20async%20queuing%20of%0A%20%20%20%20%20%20%20*%20%60_propertiesChanged%60%3A%20if%20%60__dataReady%60%20is%20false%20(has%20not%20yet%20been%0A%20%20%20%20%20%20%20*%20manually%20flushed)%2C%20the%20function%20no-ops%3B%20otherwise%20flushes%0A%20%20%20%20%20%20%20*%20%60_propertiesChanged%60%20synchronously.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_invalidateProperties'%2Cvalue%3Afunction%20_invalidateProperties()%7Bif(this.__dataReady)%7Bthis._flushProperties()%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Enqueues%20the%20given%20client%20on%20a%20list%20of%20pending%20clients%2C%20whose%0A%20%20%20%20%20%20%20*%20pending%20property%20changes%20can%20later%20be%20flushed%20via%20a%20call%20to%0A%20%20%20%20%20%20%20*%20%60_flushClients%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20client%20PropertyEffects%20client%20to%20enqueue%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_enqueueClient'%2Cvalue%3Afunction%20_enqueueClient(client)%7Bthis.__dataPendingClients%3Dthis.__dataPendingClients%7C%7C%5B%5D%3Bif(client!%3D%3Dthis)%7Bthis.__dataPendingClients.push(client)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20superclass%20implementation.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_flushProperties'%2Cvalue%3Afunction%20_flushProperties()%7Bthis.__dataCounter%2B%2B%3B_get(PropertyEffects.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects.prototype)%2C'_flushProperties'%2Cthis).call(this)%3Bthis.__dataCounter--%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Flushes%20any%20clients%20previously%20enqueued%20via%20%60_enqueueClient%60%2C%20causing%0A%20%20%20%20%20%20%20*%20their%20%60_flushProperties%60%20method%20to%20run.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_flushClients'%2Cvalue%3Afunction%20_flushClients()%7Bif(!this.__dataClientsReady)%7Bthis.__dataClientsReady%3Dtrue%3Bthis._readyClients()%3B%2F%2F%20Override%20point%20where%20accessors%20are%20turned%20on%3B%20importantly%2C%0A%2F%2F%20this%20is%20after%20clients%20have%20fully%20readied%2C%20providing%20a%20guarantee%0A%2F%2F%20that%20any%20property%20effects%20occur%20only%20after%20all%20clients%20are%20ready.%0Athis.__dataReady%3Dtrue%3B%7Delse%7Bthis.__enableOrFlushClients()%3B%7D%7D%2F%2F%20NOTE%3A%20We%20ensure%20clients%20either%20enable%20or%20flush%20as%20appropriate.%20This%0A%2F%2F%20handles%20two%20corner%20cases%3A%0A%2F%2F%20(1)%20clients%20flush%20properly%20when%20connected%2Fenabled%20before%20the%20host%0A%2F%2F%20enables%3B%20e.g.%0A%2F%2F%20%20%20(a)%20Templatize%20stamps%20with%20no%20properties%20and%20does%20not%20flush%20and%0A%2F%2F%20%20%20(b)%20the%20instance%20is%20inserted%20into%20dom%20and%0A%2F%2F%20%20%20(c)%20then%20the%20instance%20flushes.%0A%2F%2F%20(2)%20clients%20enable%20properly%20when%20not%20connected%2Fenabled%20when%20the%20host%0A%2F%2F%20flushes%3B%20e.g.%0A%2F%2F%20%20%20(a)%20a%20template%20is%20runtime%20stamped%20and%20not%20yet%20connected%2Fenabled%0A%2F%2F%20%20%20(b)%20a%20host%20sets%20a%20property%2C%20causing%20stamped%20dom%20to%20flush%0A%2F%2F%20%20%20(c)%20the%20stamped%20dom%20enables.%0A%7D%2C%7Bkey%3A'__enableOrFlushClients'%2Cvalue%3Afunction%20__enableOrFlushClients()%7Bvar%20clients%3Dthis.__dataPendingClients%3Bif(clients)%7Bthis.__dataPendingClients%3Dnull%3Bfor(var%20i%3D0%3Bi%3Cclients.length%3Bi%2B%2B)%7Bvar%20client%3Dclients%5Bi%5D%3Bif(!client.__dataEnabled)%7Bclient._enableProperties()%3B%7Delse%20if(client.__dataPending)%7Bclient._flushProperties()%3B%7D%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Perform%20any%20initial%20setup%20on%20client%20dom.%20Called%20before%20the%20first%0A%20%20%20%20%20%20%20*%20%60_flushProperties%60%20call%20on%20client%20dom%20and%20before%20any%20element%0A%20%20%20%20%20%20%20*%20observers%20are%20called.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_readyClients'%2Cvalue%3Afunction%20_readyClients()%7Bthis.__enableOrFlushClients()%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Sets%20a%20bag%20of%20property%20changes%20to%20this%20instance%2C%20and%0A%20%20%20%20%20%20%20*%20synchronously%20processes%20all%20effects%20of%20the%20properties%20as%20a%20batch.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Property%20names%20must%20be%20simple%20properties%2C%20not%20paths.%20%20Batched%0A%20%20%20%20%20%20%20*%20path%20propagation%20is%20not%20supported.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20one%20or%20more%20key-value%20pairs%20whose%20key%20is%0A%20%20%20%20%20%20%20*%20%20%20a%20property%20and%20value%20is%20the%20new%20value%20to%20set%20for%20that%20property.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20setReadOnly%20When%20true%2C%20any%20private%20values%20set%20in%0A%20%20%20%20%20%20%20*%20%20%20%60props%60%20will%20be%20set.%20By%20default%2C%20%60setProperties%60%20will%20not%20set%0A%20%20%20%20%20%20%20*%20%20%20%60readOnly%3A%20true%60%20root%20properties.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'setProperties'%2Cvalue%3Afunction%20setProperties(props%2CsetReadOnly)%7Bfor(var%20path%20in%20props)%7Bif(setReadOnly%7C%7C!this%5BTYPES.READ_ONLY%5D%7C%7C!this%5BTYPES.READ_ONLY%5D%5Bpath%5D)%7B%2F%2FTODO(kschaaf)%3A%20explicitly%20disallow%20paths%20in%20setProperty%3F%0A%2F%2F%20wildcard%20observers%20currently%20only%20pass%20the%20first%20changed%20path%0A%2F%2F%20in%20the%20%60info%60%20object%2C%20and%20you%20could%20do%20some%20odd%20things%20batching%0A%2F%2F%20paths%2C%20e.g.%20%7B'foo.bar'%3A%20%7B...%7D%2C%20'foo'%3A%20null%7D%0Athis._setPendingPropertyOrPath(path%2Cprops%5Bpath%5D%2Ctrue)%3B%7D%7Dthis._invalidateProperties()%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20%60PropertyAccessors%60%20so%20that%20property%20accessor%0A%20%20%20%20%20%20%20*%20side%20effects%20are%20not%20enabled%20until%20after%20client%20dom%20is%20fully%20ready.%0A%20%20%20%20%20%20%20*%20Also%20calls%20%60_flushClients%60%20callback%20to%20ensure%20client%20dom%20is%20enabled%0A%20%20%20%20%20%20%20*%20that%20was%20not%20enabled%20as%20a%20result%20of%20flushing%20properties.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'ready'%2Cvalue%3Afunction%20ready()%7B%2F%2F%20It%20is%20important%20that%20%60super.ready()%60%20is%20not%20called%20here%20as%20it%0A%2F%2F%20immediately%20turns%20on%20accessors.%20Instead%2C%20we%20wait%20until%20%60readyClients%60%0A%2F%2F%20to%20enable%20accessors%20to%20provide%20a%20guarantee%20that%20clients%20are%20ready%0A%2F%2F%20before%20processing%20any%20accessors%20side%20effects.%0Athis._flushProperties()%3B%2F%2F%20If%20no%20data%20was%20pending%2C%20%60_flushProperties%60%20will%20not%20%60flushClients%60%0A%2F%2F%20so%20ensure%20this%20is%20done.%0Aif(!this.__dataClientsReady)%7Bthis._flushClients()%3B%7D%2F%2F%20Before%20ready%2C%20client%20notifications%20do%20not%20trigger%20_flushProperties.%0A%2F%2F%20Therefore%20a%20flush%20is%20necessary%20here%20if%20data%20has%20been%20set.%0Aif(this.__dataPending)%7Bthis._flushProperties()%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Implements%20%60PropertyAccessors%60's%20properties%20changed%20callback.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Runs%20each%20class%20of%20effects%20for%20the%20batch%20of%20changed%20properties%20in%0A%20%20%20%20%20%20%20*%20a%20specific%20order%20(compute%2C%20propagate%2C%20reflect%2C%20observe%2C%20notify).%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20currentProps%20Bag%20of%20all%20current%20accessor%20values%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20changedProps%20Bag%20of%20properties%20changed%20since%20the%20last%0A%20%20%20%20%20%20%20*%20%20%20call%20to%20%60_propertiesChanged%60%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20oldProps%20Bag%20of%20previous%20values%20for%20each%20property%0A%20%20%20%20%20%20%20*%20%20%20in%20%60changedProps%60%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_propertiesChanged'%2Cvalue%3Afunction%20_propertiesChanged(currentProps%2CchangedProps%2ColdProps)%7B%2F%2F%20----------------------------%0A%2F%2F%20let%20c%20%3D%20Object.getOwnPropertyNames(changedProps%20%7C%7C%20%7B%7D)%3B%0A%2F%2F%20window.debug%20%26%26%20console.group(this.localName%20%2B%20'%23'%20%2B%20this.id%20%2B%20'%3A%20'%20%2B%20c)%3B%0A%2F%2F%20if%20(window.debug)%20%7B%20debugger%3B%20%7D%0A%2F%2F%20----------------------------%0Avar%20hasPaths%3Dthis.__dataHasPaths%3Bthis.__dataHasPaths%3Dfalse%3B%2F%2F%20Compute%20properties%0ArunComputedEffects(this%2CchangedProps%2ColdProps%2ChasPaths)%3B%2F%2F%20Clear%20notify%20properties%20prior%20to%20possible%20reentry%20(propagate%2C%20observe)%2C%0A%2F%2F%20but%20after%20computing%20effects%20have%20a%20chance%20to%20add%20to%20them%0Avar%20notifyProps%3Dthis.__dataToNotify%3Bthis.__dataToNotify%3Dnull%3B%2F%2F%20Propagate%20properties%20to%20clients%0Athis._propagatePropertyChanges(changedProps%2ColdProps%2ChasPaths)%3B%2F%2F%20Flush%20clients%0Athis._flushClients()%3B%2F%2F%20Reflect%20properties%0ArunEffects(this%2Cthis%5BTYPES.REFLECT%5D%2CchangedProps%2ColdProps%2ChasPaths)%3B%2F%2F%20Observe%20properties%0ArunEffects(this%2Cthis%5BTYPES.OBSERVE%5D%2CchangedProps%2ColdProps%2ChasPaths)%3B%2F%2F%20Notify%20properties%20to%20host%0Aif(notifyProps)%7BrunNotifyEffects(this%2CnotifyProps%2CchangedProps%2ColdProps%2ChasPaths)%3B%7D%2F%2F%20Clear%20temporary%20cache%20at%20end%20of%20turn%0Aif(this.__dataCounter%3D%3D1)%7Bthis.__dataTemp%3D%7B%7D%3B%7D%2F%2F%20----------------------------%0A%2F%2F%20window.debug%20%26%26%20console.groupEnd(this.localName%20%2B%20'%23'%20%2B%20this.id%20%2B%20'%3A%20'%20%2B%20c)%3B%0A%2F%2F%20----------------------------%0A%7D%2F**%0A%20%20%20%20%20%20%20*%20Called%20to%20propagate%20any%20property%20changes%20to%20stamped%20template%20nodes%0A%20%20%20%20%20%20%20*%20managed%20by%20this%20element.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20changedProps%20Bag%20of%20changed%20properties%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_propagatePropertyChanges'%2Cvalue%3Afunction%20_propagatePropertyChanges(changedProps%2ColdProps%2ChasPaths)%7Bif(this%5BTYPES.PROPAGATE%5D)%7BrunEffects(this%2Cthis%5BTYPES.PROPAGATE%5D%2CchangedProps%2ColdProps%2ChasPaths)%3B%7Dvar%20templateInfo%3Dthis.__templateInfo%3Bwhile(templateInfo)%7BrunEffects(this%2CtemplateInfo.propertyEffects%2CchangedProps%2ColdProps%2ChasPaths%2CtemplateInfo.nodeList)%3BtemplateInfo%3DtemplateInfo.nextTemplateInfo%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Aliases%20one%20data%20path%20as%20another%2C%20such%20that%20path%20notifications%20from%20one%0A%20%20%20%20%20%20%20*%20are%20routed%20to%20the%20other.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20to%20Target%20path%20to%20link.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20from%20Source%20path%20to%20link.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'linkPaths'%2Cvalue%3Afunction%20linkPaths(to%2Cfrom)%7Bto%3DPolymer.Path.normalize(to)%3Bfrom%3DPolymer.Path.normalize(from)%3Bthis.__dataLinkedPaths%3Dthis.__dataLinkedPaths%7C%7C%7B%7D%3Bthis.__dataLinkedPaths%5Bto%5D%3Dfrom%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Removes%20a%20data%20path%20alias%20previously%20established%20with%20%60_linkPaths%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%2C%20the%20path%20to%20unlink%20should%20be%20the%20target%20(%60to%60)%20used%20when%0A%20%20%20%20%20%20%20*%20linking%20the%20paths.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Target%20path%20to%20unlink.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'unlinkPaths'%2Cvalue%3Afunction%20unlinkPaths(path)%7Bpath%3DPolymer.Path.normalize(path)%3Bif(this.__dataLinkedPaths)%7Bdelete%20this.__dataLinkedPaths%5Bpath%5D%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Notify%20that%20an%20array%20has%20changed.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%20%20%20%20this.items%20%3D%20%5B%20%7Bname%3A%20'Jim'%7D%2C%20%7Bname%3A%20'Todd'%7D%2C%20%7Bname%3A%20'Bill'%7D%20%5D%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20...%0A%20%20%20%20%20%20%20*%20%20%20%20%20this.items.splice(1%2C%201%2C%20%7Bname%3A%20'Sam'%7D)%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20this.items.push(%7Bname%3A%20'Bob'%7D)%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20this.notifySplices('items'%2C%20%5B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%7B%20index%3A%201%2C%20removed%3A%20%5B%7Bname%3A%20'Todd'%7D%5D%2C%20addedCount%3A%201%2C%20object%3A%20this.items%2C%20type%3A%20'splice'%20%7D%2C%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%7B%20index%3A%203%2C%20removed%3A%20%5B%5D%2C%20addedCount%3A%201%2C%20object%3A%20this.items%2C%20type%3A%20'splice'%7D%0A%20%20%20%20%20%20%20*%20%20%20%20%20%5D)%3B%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20path%20Path%20that%20should%20be%20notified.%0A%20%20%20%20%20%20%20*%20%40param%20%7BArray%7D%20splices%20Array%20of%20splice%20records%20indicating%20ordered%0A%20%20%20%20%20%20%20*%20%20%20changes%20that%20occurred%20to%20the%20array.%20Each%20record%20should%20have%20the%0A%20%20%20%20%20%20%20*%20%20%20following%20fields%3A%0A%20%20%20%20%20%20%20*%20%20%20%20*%20index%3A%20index%20at%20which%20the%20change%20occurred%0A%20%20%20%20%20%20%20*%20%20%20%20*%20removed%3A%20array%20of%20items%20that%20were%20removed%20from%20this%20index%0A%20%20%20%20%20%20%20*%20%20%20%20*%20addedCount%3A%20number%20of%20new%20items%20added%20at%20this%20index%0A%20%20%20%20%20%20%20*%20%20%20%20*%20object%3A%20a%20reference%20to%20the%20array%20in%20question%0A%20%20%20%20%20%20%20*%20%20%20%20*%20type%3A%20the%20string%20literal%20'splice'%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%20%20Note%20that%20splice%20records%20_must_%20be%20normalized%20such%20that%20they%20are%0A%20%20%20%20%20%20%20*%20%20%20reported%20in%20index%20order%20(raw%20results%20from%20%60Object.observe%60%20are%20not%0A%20%20%20%20%20%20%20*%20%20%20ordered%20and%20must%20be%20normalized%2Fmerged%20before%20notifying).%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'notifySplices'%2Cvalue%3Afunction%20notifySplices(path%2Csplices)%7Bvar%20info%3D%7Bpath%3A''%7D%3Bvar%20array%3D%2F**%20%40type%20%7BArray%7D%20*%2FPolymer.Path.get(this%2Cpath%2Cinfo)%3B_notifySplices(this%2Carray%2Cinfo.path%2Csplices)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Convenience%20method%20for%20reading%20a%20value%20from%20a%20path.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%2C%20if%20any%20part%20in%20the%20path%20is%20undefined%2C%20this%20method%20returns%0A%20%20%20%20%20%20%20*%20%60undefined%60%20(this%20method%20does%20not%20throw%20when%20dereferencing%20undefined%0A%20%20%20%20%20%20%20*%20paths).%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B(string%7C!Array%3C(string%7Cnumber)%3E)%7D%20path%20Path%20to%20the%20value%0A%20%20%20%20%20%20%20*%20%20%20to%20read.%20%20The%20path%20may%20be%20specified%20as%20a%20string%20(e.g.%20%60foo.bar.baz%60)%0A%20%20%20%20%20%20%20*%20%20%20or%20an%20array%20of%20path%20parts%20(e.g.%20%60%5B'foo.bar'%2C%20'baz'%5D%60).%20%20Note%20that%0A%20%20%20%20%20%20%20*%20%20%20bracketed%20expressions%20are%20not%20supported%3B%20string-based%20path%20parts%0A%20%20%20%20%20%20%20*%20%20%20*must*%20be%20separated%20by%20dots.%20%20Note%20that%20when%20dereferencing%20array%0A%20%20%20%20%20%20%20*%20%20%20indices%2C%20the%20index%20may%20be%20used%20as%20a%20dotted%20part%20directly%0A%20%20%20%20%20%20%20*%20%20%20(e.g.%20%60users.12.name%60%20or%20%60%5B'users'%2C%2012%2C%20'name'%5D%60).%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20root%20Root%20object%20from%20which%20the%20path%20is%20evaluated.%0A%20%20%20%20%20%20%20*%20%40return%20%7B*%7D%20Value%20at%20the%20path%2C%20or%20%60undefined%60%20if%20any%20part%20of%20the%20path%0A%20%20%20%20%20%20%20*%20%20%20is%20undefined.%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'get'%2Cvalue%3Afunction%20get(path%2Croot)%7Breturn%20Polymer.Path.get(root%7C%7Cthis%2Cpath)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Convenience%20method%20for%20setting%20a%20value%20to%20a%20path%20and%20notifying%20any%0A%20%20%20%20%20%20%20*%20elements%20bound%20to%20the%20same%20path.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%2C%20if%20any%20part%20in%20the%20path%20except%20for%20the%20last%20is%20undefined%2C%0A%20%20%20%20%20%20%20*%20this%20method%20does%20nothing%20(this%20method%20does%20not%20throw%20when%0A%20%20%20%20%20%20%20*%20dereferencing%20undefined%20paths).%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B(string%7C!Array%3C(string%7Cnumber)%3E)%7D%20path%20Path%20to%20the%20value%0A%20%20%20%20%20%20%20*%20%20%20to%20write.%20%20The%20path%20may%20be%20specified%20as%20a%20string%20(e.g.%20%60'foo.bar.baz'%60)%0A%20%20%20%20%20%20%20*%20%20%20or%20an%20array%20of%20path%20parts%20(e.g.%20%60%5B'foo.bar'%2C%20'baz'%5D%60).%20%20Note%20that%0A%20%20%20%20%20%20%20*%20%20%20bracketed%20expressions%20are%20not%20supported%3B%20string-based%20path%20parts%0A%20%20%20%20%20%20%20*%20%20%20*must*%20be%20separated%20by%20dots.%20%20Note%20that%20when%20dereferencing%20array%0A%20%20%20%20%20%20%20*%20%20%20indices%2C%20the%20index%20may%20be%20used%20as%20a%20dotted%20part%20directly%0A%20%20%20%20%20%20%20*%20%20%20(e.g.%20%60'users.12.name'%60%20or%20%60%5B'users'%2C%2012%2C%20'name'%5D%60).%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%20at%20the%20specified%20path.%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20root%20Root%20object%20from%20which%20the%20path%20is%20evaluated.%0A%20%20%20%20%20%20%20*%20%20%20When%20specified%2C%20no%20notification%20will%20occur.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'set'%2Cvalue%3Afunction%20set(path%2Cvalue%2Croot)%7Bif(root)%7BPolymer.Path.set(root%2Cpath%2Cvalue)%3B%7Delse%7Bif(!this%5BTYPES.READ_ONLY%5D%7C%7C!this%5BTYPES.READ_ONLY%5D%5B%2F**%20%40type%20%7Bstring%7D%20*%2Fpath%5D)%7Bif(this._setPendingPropertyOrPath(path%2Cvalue%2Ctrue))%7Bthis._invalidateProperties()%3B%7D%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Adds%20items%20onto%20the%20end%20of%20the%20array%20at%20the%20path%20specified.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20arguments%20after%20%60path%60%20and%20return%20value%20match%20that%20of%0A%20%20%20%20%20%20%20*%20%60Array.prototype.push%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20notifies%20other%20paths%20to%20the%20same%20array%20that%20a%0A%20%20%20%20%20%20%20*%20splice%20occurred%20to%20the%20array.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Path%20to%20array.%0A%20%20%20%20%20%20%20*%20%40param%20%7B...*%7D%20items%20Items%20to%20push%20onto%20array%0A%20%20%20%20%20%20%20*%20%40return%20%7Bnumber%7D%20New%20length%20of%20the%20array.%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'push'%2Cvalue%3Afunction%20push(path)%7Bvar%20info%3D%7Bpath%3A''%7D%3Bvar%20array%3D%2F**%20%40type%20%7BArray%7D*%2FPolymer.Path.get(this%2Cpath%2Cinfo)%3Bvar%20len%3Darray.length%3Bfor(var%20_len%3Darguments.length%2Citems%3DArray(_len%3E1%3F_len-1%3A0)%2C_key%3D1%3B_key%3C_len%3B_key%2B%2B)%7Bitems%5B_key-1%5D%3Darguments%5B_key%5D%3B%7Dvar%20ret%3Darray.push.apply(array%2Citems)%3Bif(items.length)%7BnotifySplice(this%2Carray%2Cinfo.path%2Clen%2Citems.length%2C%5B%5D)%3B%7Dreturn%20ret%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Removes%20an%20item%20from%20the%20end%20of%20array%20at%20the%20path%20specified.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20arguments%20after%20%60path%60%20and%20return%20value%20match%20that%20of%0A%20%20%20%20%20%20%20*%20%60Array.prototype.pop%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20notifies%20other%20paths%20to%20the%20same%20array%20that%20a%0A%20%20%20%20%20%20%20*%20splice%20occurred%20to%20the%20array.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Path%20to%20array.%0A%20%20%20%20%20%20%20*%20%40return%20%7B*%7D%20Item%20that%20was%20removed.%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'pop'%2Cvalue%3Afunction%20pop(path)%7Bvar%20info%3D%7Bpath%3A''%7D%3Bvar%20array%3D%2F**%20%40type%20%7BArray%7D%20*%2FPolymer.Path.get(this%2Cpath%2Cinfo)%3Bvar%20hadLength%3DBoolean(array.length)%3Bvar%20ret%3Darray.pop()%3Bif(hadLength)%7BnotifySplice(this%2Carray%2Cinfo.path%2Carray.length%2C0%2C%5Bret%5D)%3B%7Dreturn%20ret%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Starting%20from%20the%20start%20index%20specified%2C%20removes%200%20or%20more%20items%0A%20%20%20%20%20%20%20*%20from%20the%20array%20and%20inserts%200%20or%20more%20new%20items%20in%20their%20place.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20arguments%20after%20%60path%60%20and%20return%20value%20match%20that%20of%0A%20%20%20%20%20%20%20*%20%60Array.prototype.splice%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20notifies%20other%20paths%20to%20the%20same%20array%20that%20a%0A%20%20%20%20%20%20%20*%20splice%20occurred%20to%20the%20array.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Path%20to%20array.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20start%20Index%20from%20which%20to%20start%20removing%2Finserting.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20deleteCount%20Number%20of%20items%20to%20remove.%0A%20%20%20%20%20%20%20*%20%40param%20%7B...*%7D%20items%20Items%20to%20insert%20into%20array.%0A%20%20%20%20%20%20%20*%20%40return%20%7BArray%7D%20Array%20of%20removed%20items.%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'splice'%2Cvalue%3Afunction%20splice(path%2Cstart%2CdeleteCount)%7Bfor(var%20_len2%3Darguments.length%2Citems%3DArray(_len2%3E3%3F_len2-3%3A0)%2C_key2%3D3%3B_key2%3C_len2%3B_key2%2B%2B)%7Bitems%5B_key2-3%5D%3Darguments%5B_key2%5D%3B%7Dvar%20info%3D%7Bpath%3A''%7D%3Bvar%20array%3D%2F**%20%40type%20%7BArray%7D%20*%2FPolymer.Path.get(this%2Cpath%2Cinfo)%3B%2F%2F%20Normalize%20fancy%20native%20splice%20handling%20of%20crazy%20start%20values%0Aif(start%3C0)%7Bstart%3Darray.length-Math.floor(-start)%3B%7Delse%20if(start)%7Bstart%3DMath.floor(start)%3B%7D%2F%2F%20array.splice%20does%20different%20things%20based%20on%20the%20number%20of%20arguments%0A%2F%2F%20you%20pass%20in.%20Therefore%2C%20array.splice(0)%20and%20array.splice(0%2C%20undefined)%0A%2F%2F%20do%20different%20things.%20In%20the%20former%2C%20the%20whole%20array%20is%20cleared.%20In%20the%0A%2F%2F%20latter%2C%20no%20items%20are%20removed.%0A%2F%2F%20This%20means%20that%20we%20need%20to%20detect%20whether%201.%20one%20of%20the%20arguments%0A%2F%2F%20is%20actually%20passed%20in%20and%20then%202.%20determine%20how%20many%20arguments%0A%2F%2F%20we%20should%20pass%20on%20to%20the%20native%20array.splice%0A%2F%2F%0Avar%20ret%3Dvoid%200%3B%2F%2F%20Omit%20any%20additional%20arguments%20if%20they%20were%20not%20passed%20in%0Aif(arguments.length%3D%3D%3D2)%7Bret%3Darray.splice(start)%3B%2F%2F%20Either%20start%20was%20undefined%20and%20the%20others%20were%20defined%2C%20but%20in%20this%0A%2F%2F%20case%20we%20can%20safely%20pass%20on%20all%20arguments%0A%2F%2F%0A%2F%2F%20Note%3A%20this%20includes%20the%20case%20where%20none%20of%20the%20arguments%20were%20passed%20in%2C%0A%2F%2F%20e.g.%20this.splice('array').%20However%2C%20if%20both%20start%20and%20deleteCount%0A%2F%2F%20are%20undefined%2C%20array.splice%20will%20not%20modify%20the%20array%20(as%20expected)%0A%7Delse%7Bret%3Darray.splice.apply(array%2C%5Bstart%2CdeleteCount%5D.concat(items))%3B%7D%2F%2F%20At%20the%20end%2C%20check%20whether%20any%20items%20were%20passed%20in%20(e.g.%20insertions)%0A%2F%2F%20or%20if%20the%20return%20array%20contains%20items%20(e.g.%20deletions).%0A%2F%2F%20Only%20notify%20if%20items%20were%20added%20or%20deleted.%0Aif(items.length%7C%7Cret.length)%7BnotifySplice(this%2Carray%2Cinfo.path%2Cstart%2Citems.length%2Cret)%3B%7Dreturn%20ret%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Removes%20an%20item%20from%20the%20beginning%20of%20array%20at%20the%20path%20specified.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20arguments%20after%20%60path%60%20and%20return%20value%20match%20that%20of%0A%20%20%20%20%20%20%20*%20%60Array.prototype.pop%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20notifies%20other%20paths%20to%20the%20same%20array%20that%20a%0A%20%20%20%20%20%20%20*%20splice%20occurred%20to%20the%20array.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Path%20to%20array.%0A%20%20%20%20%20%20%20*%20%40return%20%7B*%7D%20Item%20that%20was%20removed.%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'shift'%2Cvalue%3Afunction%20shift(path)%7Bvar%20info%3D%7Bpath%3A''%7D%3Bvar%20array%3D%2F**%20%40type%20%7BArray%7D%20*%2FPolymer.Path.get(this%2Cpath%2Cinfo)%3Bvar%20hadLength%3DBoolean(array.length)%3Bvar%20ret%3Darray.shift()%3Bif(hadLength)%7BnotifySplice(this%2Carray%2Cinfo.path%2C0%2C0%2C%5Bret%5D)%3B%7Dreturn%20ret%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Adds%20items%20onto%20the%20beginning%20of%20the%20array%20at%20the%20path%20specified.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20arguments%20after%20%60path%60%20and%20return%20value%20match%20that%20of%0A%20%20%20%20%20%20%20*%20%60Array.prototype.push%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20notifies%20other%20paths%20to%20the%20same%20array%20that%20a%0A%20%20%20%20%20%20%20*%20splice%20occurred%20to%20the%20array.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Path%20to%20array.%0A%20%20%20%20%20%20%20*%20%40param%20%7B...*%7D%20items%20Items%20to%20insert%20info%20array%0A%20%20%20%20%20%20%20*%20%40return%20%7Bnumber%7D%20New%20length%20of%20the%20array.%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'unshift'%2Cvalue%3Afunction%20unshift(path)%7Bvar%20info%3D%7Bpath%3A''%7D%3Bvar%20array%3D%2F**%20%40type%20%7BArray%7D%20*%2FPolymer.Path.get(this%2Cpath%2Cinfo)%3Bfor(var%20_len3%3Darguments.length%2Citems%3DArray(_len3%3E1%3F_len3-1%3A0)%2C_key3%3D1%3B_key3%3C_len3%3B_key3%2B%2B)%7Bitems%5B_key3-1%5D%3Darguments%5B_key3%5D%3B%7Dvar%20ret%3Darray.unshift.apply(array%2Citems)%3Bif(items.length)%7BnotifySplice(this%2Carray%2Cinfo.path%2C0%2Citems.length%2C%5B%5D)%3B%7Dreturn%20ret%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Notify%20that%20a%20path%20has%20changed.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%20%20%20%20this.item.user.name%20%3D%20'Bob'%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20this.notifyPath('item.user.name')%3B%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20path%20Path%20that%20should%20be%20notified.%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%3D%7D%20value%20Value%20at%20the%20path%20(optional).%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'notifyPath'%2Cvalue%3Afunction%20notifyPath(path%2Cvalue)%7B%2F**%20%40type%20%7Bstring%7D%20*%2Fvar%20propPath%3Dvoid%200%3Bif(arguments.length%3D%3D1)%7B%2F%2F%20Get%20value%20if%20not%20supplied%0Avar%20info%3D%7Bpath%3A''%7D%3Bvalue%3DPolymer.Path.get(this%2Cpath%2Cinfo)%3BpropPath%3Dinfo.path%3B%7Delse%20if(Array.isArray(path))%7B%2F%2F%20Normalize%20path%20if%20needed%0ApropPath%3DPolymer.Path.normalize(path)%3B%7Delse%7BpropPath%3D%2F**%20%40type%7Bstring%7D%20*%2Fpath%3B%7Dif(this._setPendingPropertyOrPath(propPath%2Cvalue%2Ctrue%2Ctrue))%7Bthis._invalidateProperties()%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60createReadOnlyProperty%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20protectedSetter%20Creates%20a%20custom%20protected%20setter%0A%20%20%20%20%20%20%20*%20%20%20when%20%60true%60.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_createReadOnlyProperty'%2Cvalue%3Afunction%20_createReadOnlyProperty(property%2CprotectedSetter)%7Bthis._addPropertyEffect(property%2CTYPES.READ_ONLY)%3Bif(protectedSetter)%7Bthis%5B'_set'%2Bupper(property)%5D%3D%2F**%20%40this%20%7BPropertyEffects%7D%20*%2Ffunction(value)%7Bthis._setProperty(property%2Cvalue)%3B%7D%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60createPropertyObserver%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7Cfunction(*%2C*)%7D%20method%20Function%20or%20name%20of%20observer%20method%20to%20call%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20dynamicFn%20Whether%20the%20method%20name%20should%20be%20included%20as%0A%20%20%20%20%20%20%20*%20%20%20a%20dependency%20to%20the%20effect.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_createPropertyObserver'%2Cvalue%3Afunction%20_createPropertyObserver(property%2Cmethod%2CdynamicFn)%7Bvar%20info%3D%7Bproperty%3Aproperty%2Cmethod%3Amethod%2CdynamicFn%3ABoolean(dynamicFn)%7D%3Bthis._addPropertyEffect(property%2CTYPES.OBSERVE%2C%7Bfn%3ArunObserverEffect%2Cinfo%3Ainfo%2Ctrigger%3A%7Bname%3Aproperty%7D%7D)%3Bif(dynamicFn)%7Bthis._addPropertyEffect(%2F**%20%40type%20%7Bstring%7D%20*%2Fmethod%2CTYPES.OBSERVE%2C%7Bfn%3ArunObserverEffect%2Cinfo%3Ainfo%2Ctrigger%3A%7Bname%3Amethod%7D%7D)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60createMethodObserver%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20expression%20Method%20expression%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%7CObject%3D%7D%20dynamicFn%20Boolean%20or%20object%20map%20indicating%0A%20%20%20%20%20%20%20*%20%20%20whether%20method%20names%20should%20be%20included%20as%20a%20dependency%20to%20the%20effect.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_createMethodObserver'%2Cvalue%3Afunction%20_createMethodObserver(expression%2CdynamicFn)%7Bvar%20sig%3DparseMethod(expression)%3Bif(!sig)%7Bthrow%20new%20Error(%22Malformed%20observer%20expression%20'%22%2Bexpression%2B%22'%22)%3B%7DcreateMethodEffect(this%2Csig%2CTYPES.OBSERVE%2CrunMethodEffect%2Cnull%2CdynamicFn)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60createNotifyingProperty%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_createNotifyingProperty'%2Cvalue%3Afunction%20_createNotifyingProperty(property)%7Bthis._addPropertyEffect(property%2CTYPES.NOTIFY%2C%7Bfn%3ArunNotifyEffect%2Cinfo%3A%7BeventName%3ACaseMap.camelToDashCase(property)%2B'-changed'%2Cproperty%3Aproperty%7D%7D)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60createReflectedProperty%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_createReflectedProperty'%2Cvalue%3Afunction%20_createReflectedProperty(property)%7Bvar%20attr%3Dthis.constructor.attributeNameForProperty(property)%3Bif(attr%5B0%5D%3D%3D%3D'-')%7Bconsole.warn('Property%20'%2Bproperty%2B'%20cannot%20be%20reflected%20to%20attribute%20'%2Battr%2B'%20because%20%22-%22%20is%20not%20a%20valid%20starting%20attribute%20name.%20Use%20a%20lowercase%20first%20letter%20for%20the%20property%20instead.')%3B%7Delse%7Bthis._addPropertyEffect(property%2CTYPES.REFLECT%2C%7Bfn%3ArunReflectEffect%2Cinfo%3A%7BattrName%3Aattr%7D%7D)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60createComputedProperty%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20computed%20property%20to%20set%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20expression%20Method%20expression%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%7CObject%3D%7D%20dynamicFn%20Boolean%20or%20object%20map%20indicating%0A%20%20%20%20%20%20%20*%20%20%20whether%20method%20names%20should%20be%20included%20as%20a%20dependency%20to%20the%20effect.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_createComputedProperty'%2Cvalue%3Afunction%20_createComputedProperty(property%2Cexpression%2CdynamicFn)%7Bvar%20sig%3DparseMethod(expression)%3Bif(!sig)%7Bthrow%20new%20Error(%22Malformed%20computed%20expression%20'%22%2Bexpression%2B%22'%22)%3B%7DcreateMethodEffect(this%2Csig%2CTYPES.COMPUTE%2CrunComputedEffect%2Cproperty%2CdynamicFn)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Gather%20the%20argument%20values%20for%20a%20method%20specified%20in%20the%20provided%20array%0A%20%20%20%20%20%20%20*%20of%20argument%20metadata.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20%60path%60%20and%20%60value%60%20arguments%20are%20used%20to%20fill%20in%20wildcard%20descriptor%0A%20%20%20%20%20%20%20*%20when%20the%20method%20is%20being%20called%20as%20a%20result%20of%20a%20path%20notification.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Array%3C!MethodArg%3E%7D%20args%20Array%20of%20argument%20metadata%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20path%20Property%2Fpath%20name%20that%20triggered%20the%20method%20effect%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20%20%20%20%20*%20%40return%20%7BArray%3C*%3E%7D%20Array%20of%20argument%20values%0A%20%20%20%20%20%20%20*%20%40private%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_marshalArgs'%2Cvalue%3Afunction%20_marshalArgs(args%2Cpath%2Cprops)%7Bvar%20data%3Dthis.__data%3Bvar%20values%3D%5B%5D%3Bfor(var%20i%3D0%2Cl%3Dargs.length%3Bi%3Cl%3Bi%2B%2B)%7Bvar%20arg%3Dargs%5Bi%5D%3Bvar%20name%3Darg.name%3Bvar%20v%3Dvoid%200%3Bif(arg.literal)%7Bv%3Darg.value%3B%7Delse%7Bif(arg.structured)%7Bv%3DPolymer.Path.get(data%2Cname)%3B%2F%2F%20when%20data%20is%20not%20stored%20e.g.%20%60splices%60%0Aif(v%3D%3D%3Dundefined)%7Bv%3Dprops%5Bname%5D%3B%7D%7Delse%7Bv%3Ddata%5Bname%5D%3B%7D%7Dif(arg.wildcard)%7B%2F%2F%20Only%20send%20the%20actual%20path%20changed%20info%20if%20the%20change%20that%0A%2F%2F%20caused%20the%20observer%20to%20run%20matched%20the%20wildcard%0Avar%20baseChanged%3Dname.indexOf(path%2B'.')%3D%3D%3D0%3Bvar%20matches%3Dpath.indexOf(name)%3D%3D%3D0%26%26!baseChanged%3Bvalues%5Bi%5D%3D%7Bpath%3Amatches%3Fpath%3Aname%2Cvalue%3Amatches%3Fprops%5Bpath%5D%3Av%2Cbase%3Av%7D%3B%7Delse%7Bvalues%5Bi%5D%3Dv%3B%7D%7Dreturn%20values%3B%7D%2F%2F%20--%20static%20class%20methods%20------------%0A%2F**%0A%20%20%20%20%20%20%20*%20Ensures%20an%20accessor%20exists%20for%20the%20specified%20property%2C%20and%20adds%0A%20%20%20%20%20%20%20*%20to%20a%20list%20of%20%22property%20effects%22%20that%20will%20run%20when%20the%20accessor%20for%0A%20%20%20%20%20%20%20*%20the%20specified%20property%20is%20set.%20%20Effects%20are%20grouped%20by%20%22type%22%2C%20which%0A%20%20%20%20%20%20%20*%20roughly%20corresponds%20to%20a%20phase%20in%20effect%20processing.%20%20The%20effect%0A%20%20%20%20%20%20%20*%20metadata%20should%20be%20in%20the%20following%20form%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20fn%3A%20effectFunction%2C%20%2F%2F%20Reference%20to%20function%20to%20call%20to%20perform%20effect%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20info%3A%20%7B%20...%20%7D%20%20%20%20%20%20%20%2F%2F%20Effect%20metadata%20passed%20to%20function%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20trigger%3A%20%7B%20%20%20%20%20%20%20%20%20%20%2F%2F%20Optional%20triggering%20metadata%3B%20if%20not%20provided%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20name%3A%20string%20%20%20%20%20%20%2F%2F%20the%20property%20is%20treated%20as%20a%20wildcard%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20structured%3A%20boolean%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20wildcard%3A%20boolean%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20*%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Effects%20are%20called%20from%20%60_propertiesChanged%60%20in%20the%20following%20order%20by%0A%20%20%20%20%20%20%20*%20type%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%201.%20COMPUTE%0A%20%20%20%20%20%20%20*%202.%20PROPAGATE%0A%20%20%20%20%20%20%20*%203.%20REFLECT%0A%20%20%20%20%20%20%20*%204.%20OBSERVE%0A%20%20%20%20%20%20%20*%205.%20NOTIFY%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Effect%20functions%20are%20called%20with%20the%20following%20signature%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%20%20%20%20effectFunction(inst%2C%20path%2C%20props%2C%20oldProps%2C%20info%2C%20hasPaths)%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20that%20should%20trigger%20the%20effect%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20type%20Effect%20type%2C%20from%20this.PROPERTY_EFFECT_TYPES%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20effect%20Effect%20metadata%20object%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_bindTemplate'%2C%2F%2F%20--%20binding%20----------------------------------------------%0A%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60bindTemplate%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20may%20be%20called%20on%20the%20prototype%20(for%20prototypical%20template%0A%20%20%20%20%20%20%20*%20binding%2C%20to%20avoid%20creating%20accessors%20every%20instance)%20once%20per%20prototype%2C%0A%20%20%20%20%20%20%20*%20and%20will%20be%20called%20with%20%60runtimeBinding%3A%20true%60%20by%20%60_stampTemplate%60%20to%0A%20%20%20%20%20%20%20*%20create%20and%20link%20an%20instance%20of%20the%20template%20metadata%20associated%20with%20a%0A%20%20%20%20%20%20%20*%20particular%20stamping.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!HTMLTemplateElement%7D%20template%20Template%20containing%20binding%0A%20%20%20%20%20%20%20*%20%20%20bindings%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20instanceBinding%20When%20false%20(default)%2C%20performs%0A%20%20%20%20%20%20%20*%20%20%20%22prototypical%22%20binding%20of%20the%20template%20and%20overwrites%20any%20previously%0A%20%20%20%20%20%20%20*%20%20%20bound%20template%20for%20the%20class.%20When%20true%20(as%20passed%20from%0A%20%20%20%20%20%20%20*%20%20%20%60_stampTemplate%60)%2C%20the%20template%20info%20is%20instanced%20and%20linked%20into%0A%20%20%20%20%20%20%20*%20%20%20the%20list%20of%20bound%20templates.%0A%20%20%20%20%20%20%20*%20%40return%20%7B!TemplateInfo%7D%20Template%20metadata%20object%3B%20for%20%60runtimeBinding%60%2C%0A%20%20%20%20%20%20%20*%20%20%20this%20is%20an%20instance%20of%20the%20prototypical%20template%20info%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_bindTemplate(template%2CinstanceBinding)%7Bvar%20templateInfo%3Dthis.constructor._parseTemplate(template)%3Bvar%20wasPreBound%3Dthis.__templateInfo%3D%3DtemplateInfo%3B%2F%2F%20Optimization%3A%20since%20this%20is%20called%20twice%20for%20proto-bound%20templates%2C%0A%2F%2F%20don't%20attempt%20to%20recreate%20accessors%20if%20this%20template%20was%20pre-bound%0Aif(!wasPreBound)%7Bfor(var%20prop%20in%20templateInfo.propertyEffects)%7Bthis._createPropertyAccessor(prop)%3B%7D%7Dif(instanceBinding)%7B%2F%2F%20For%20instance-time%20binding%2C%20create%20instance%20of%20template%20metadata%0A%2F%2F%20and%20link%20into%20list%20of%20templates%20if%20necessary%0AtemplateInfo%3D%2F**%20%40type%20%7B!TemplateInfo%7D%20*%2FObject.create(templateInfo)%3BtemplateInfo.wasPreBound%3DwasPreBound%3Bif(!wasPreBound%26%26this.__templateInfo)%7Bvar%20last%3Dthis.__templateInfoLast%7C%7Cthis.__templateInfo%3Bthis.__templateInfoLast%3Dlast.nextTemplateInfo%3DtemplateInfo%3BtemplateInfo.previousTemplateInfo%3Dlast%3Breturn%20templateInfo%3B%7D%7Dreturn%20this.__templateInfo%3DtemplateInfo%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Adds%20a%20property%20effect%20to%20the%20given%20template%20metadata%2C%20which%20is%20run%0A%20%20%20%20%20%20%20*%20at%20the%20%22propagate%22%20stage%20of%20%60_propertiesChanged%60%20when%20the%20template%0A%20%20%20%20%20%20%20*%20has%20been%20bound%20to%20the%20element%20via%20%60_bindTemplate%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20%60effect%60%20object%20should%20match%20the%20format%20in%20%60_addPropertyEffect%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20templateInfo%20Template%20metadata%20to%20add%20effect%20to%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20prop%20Property%20that%20should%20trigger%20the%20effect%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20effect%20Effect%20metadata%20object%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_stampTemplate'%2C%2F**%0A%20%20%20%20%20%20%20*%20Stamps%20the%20provided%20template%20and%20performs%20instance-time%20setup%20for%0A%20%20%20%20%20%20%20*%20Polymer%20template%20features%2C%20including%20data%20bindings%2C%20declarative%20event%0A%20%20%20%20%20%20%20*%20listeners%2C%20and%20the%20%60this.%24%60%20map%20of%20%60id%60's%20to%20nodes.%20%20A%20document%20fragment%0A%20%20%20%20%20%20%20*%20is%20returned%20containing%20the%20stamped%20DOM%2C%20ready%20for%20insertion%20into%20the%0A%20%20%20%20%20%20%20*%20DOM.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20may%20be%20called%20more%20than%20once%3B%20however%20note%20that%20due%20to%0A%20%20%20%20%20%20%20*%20%60shadycss%60%20polyfill%20limitations%2C%20only%20styles%20from%20templates%20prepared%0A%20%20%20%20%20%20%20*%20using%20%60ShadyCSS.prepareTemplate%60%20will%20be%20correctly%20polyfilled%20(scoped%0A%20%20%20%20%20%20%20*%20to%20the%20shadow%20root%20and%20support%20CSS%20custom%20properties)%2C%20and%20note%20that%0A%20%20%20%20%20%20%20*%20%60ShadyCSS.prepareTemplate%60%20may%20only%20be%20called%20once%20per%20element.%20As%20such%2C%0A%20%20%20%20%20%20%20*%20any%20styles%20required%20by%20in%20runtime-stamped%20templates%20must%20be%20included%0A%20%20%20%20%20%20%20*%20in%20the%20main%20element%20template.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!HTMLTemplateElement%7D%20template%20Template%20to%20stamp%0A%20%20%20%20%20%20%20*%20%40return%20%7B!StampedTemplate%7D%20Cloned%20template%20content%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_stampTemplate(template)%7B%2F%2F%20Ensures%20that%20created%20dom%20is%20%60_enqueueClient%60'd%20to%20this%20element%20so%0A%2F%2F%20that%20it%20can%20be%20flushed%20on%20next%20call%20to%20%60_flushProperties%60%0AhostStack.beginHosting(this)%3Bvar%20dom%3D_get(PropertyEffects.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects.prototype)%2C'_stampTemplate'%2Cthis).call(this%2Ctemplate)%3BhostStack.endHosting(this)%3Bvar%20templateInfo%3D%2F**%20%40type%20%7B!TemplateInfo%7D%20*%2Fthis._bindTemplate(template%2Ctrue)%3B%2F%2F%20Add%20template-instance-specific%20data%20to%20instanced%20templateInfo%0AtemplateInfo.nodeList%3Ddom.nodeList%3B%2F%2F%20Capture%20child%20nodes%20to%20allow%20unstamping%20of%20non-prototypical%20templates%0Aif(!templateInfo.wasPreBound)%7Bvar%20nodes%3DtemplateInfo.childNodes%3D%5B%5D%3Bfor(var%20n%3Ddom.firstChild%3Bn%3Bn%3Dn.nextSibling)%7Bnodes.push(n)%3B%7D%7Ddom.templateInfo%3DtemplateInfo%3B%2F%2F%20Setup%20compound%20storage%2C%202-way%20listeners%2C%20and%20dataHost%20for%20bindings%0AsetupBindings(this%2CtemplateInfo)%3B%2F%2F%20Flush%20properties%20into%20template%20nodes%20if%20already%20booted%0Aif(this.__dataReady)%7BrunEffects(this%2CtemplateInfo.propertyEffects%2Cthis.__data%2Cnull%2Cfalse%2CtemplateInfo.nodeList)%3B%7Dreturn%20dom%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Removes%20and%20unbinds%20the%20nodes%20previously%20contained%20in%20the%20provided%0A%20%20%20%20%20%20%20*%20DocumentFragment%20returned%20from%20%60_stampTemplate%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!StampedTemplate%7D%20dom%20DocumentFragment%20previously%20returned%0A%20%20%20%20%20%20%20*%20%20%20from%20%60_stampTemplate%60%20associated%20with%20the%20nodes%20to%20be%20removed%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_removeBoundDom'%2Cvalue%3Afunction%20_removeBoundDom(dom)%7B%2F%2F%20Unlink%20template%20info%0Avar%20templateInfo%3Ddom.templateInfo%3Bif(templateInfo.previousTemplateInfo)%7BtemplateInfo.previousTemplateInfo.nextTemplateInfo%3DtemplateInfo.nextTemplateInfo%3B%7Dif(templateInfo.nextTemplateInfo)%7BtemplateInfo.nextTemplateInfo.previousTemplateInfo%3DtemplateInfo.previousTemplateInfo%3B%7Dif(this.__templateInfoLast%3D%3DtemplateInfo)%7Bthis.__templateInfoLast%3DtemplateInfo.previousTemplateInfo%3B%7DtemplateInfo.previousTemplateInfo%3DtemplateInfo.nextTemplateInfo%3Dnull%3B%2F%2F%20Remove%20stamped%20nodes%0Avar%20nodes%3DtemplateInfo.childNodes%3Bfor(var%20i%3D0%3Bi%3Cnodes.length%3Bi%2B%2B)%7Bvar%20node%3Dnodes%5Bi%5D%3Bnode.parentNode.removeChild(node)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20default%20%60TemplateStamp%60%20implementation%20to%20add%20support%20for%0A%20%20%20%20%20%20%20*%20parsing%20bindings%20from%20%60TextNode%60's'%20%60textContent%60.%20%20A%20%60bindings%60%0A%20%20%20%20%20%20%20*%20array%20is%20added%20to%20%60nodeInfo%60%20and%20populated%20with%20binding%20metadata%0A%20%20%20%20%20%20%20*%20with%20information%20capturing%20the%20binding%20target%2C%20and%20a%20%60parts%60%20array%0A%20%20%20%20%20%20%20*%20with%20one%20or%20more%20metadata%20objects%20capturing%20the%20source(s)%20of%20the%0A%20%20%20%20%20%20%20*%20binding.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40param%20%7BNode%7D%20node%20Node%20to%20parse%0A%20%20%20%20%20%20%20*%20%40param%20%7BTemplateInfo%7D%20templateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20%20%20%20%20*%20%40param%20%7BNodeInfo%7D%20nodeInfo%20Node%20metadata%20for%20current%20template%20node%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20%60true%60%20if%20the%20visited%20node%20added%20node-specific%0A%20%20%20%20%20%20%20*%20%20%20metadata%20to%20%60nodeInfo%60%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20Interfaces%20in%20closure%20do%20not%20inherit%20statics%2C%20but%20classes%20do%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'PROPERTY_EFFECT_TYPES'%2Cget%3Afunction%20get()%7Breturn%20TYPES%3B%7D%7D%5D%2C%5B%7Bkey%3A'addPropertyEffect'%2Cvalue%3Afunction%20addPropertyEffect(property%2Ctype%2Ceffect)%7Bthis.prototype._addPropertyEffect(property%2Ctype%2Ceffect)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Creates%20a%20single-property%20observer%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7Cfunction(*%2C*)%7D%20method%20Function%20or%20name%20of%20observer%20method%20to%20call%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20dynamicFn%20Whether%20the%20method%20name%20should%20be%20included%20as%0A%20%20%20%20%20%20%20*%20%20%20a%20dependency%20to%20the%20effect.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'createPropertyObserver'%2Cvalue%3Afunction%20createPropertyObserver(property%2Cmethod%2CdynamicFn)%7Bthis.prototype._createPropertyObserver(property%2Cmethod%2CdynamicFn)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Creates%20a%20multi-property%20%22method%20observer%22%20based%20on%20the%20provided%0A%20%20%20%20%20%20%20*%20expression%2C%20which%20should%20be%20a%20string%20in%20the%20form%20of%20a%20normal%20JavaScript%0A%20%20%20%20%20%20%20*%20function%20signature%3A%20%60'methodName(arg1%2C%20%5B...%2C%20argn%5D)'%60.%20%20Each%20argument%0A%20%20%20%20%20%20%20*%20should%20correspond%20to%20a%20property%20or%20path%20in%20the%20context%20of%20this%0A%20%20%20%20%20%20%20*%20prototype%20(or%20instance)%2C%20or%20may%20be%20a%20literal%20string%20or%20number.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20expression%20Method%20expression%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%7CObject%3D%7D%20dynamicFn%20Boolean%20or%20object%20map%20indicating%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%20%20whether%20method%20names%20should%20be%20included%20as%20a%20dependency%20to%20the%20effect.%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'createMethodObserver'%2Cvalue%3Afunction%20createMethodObserver(expression%2CdynamicFn)%7Bthis.prototype._createMethodObserver(expression%2CdynamicFn)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Causes%20the%20setter%20for%20the%20given%20property%20to%20dispatch%20%60%3Cproperty%3E-changed%60%0A%20%20%20%20%20%20%20*%20events%20to%20notify%20of%20changes%20to%20the%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'createNotifyingProperty'%2Cvalue%3Afunction%20createNotifyingProperty(property)%7Bthis.prototype._createNotifyingProperty(property)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Creates%20a%20read-only%20accessor%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20To%20set%20the%20property%2C%20use%20the%20protected%20%60_setProperty%60%20API.%0A%20%20%20%20%20%20%20*%20To%20create%20a%20custom%20protected%20setter%20(e.g.%20%60_setMyProp()%60%20for%0A%20%20%20%20%20%20%20*%20property%20%60myProp%60)%2C%20pass%20%60true%60%20for%20%60protectedSetter%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%2C%20if%20the%20property%20will%20have%20other%20property%20effects%2C%20this%20method%0A%20%20%20%20%20%20%20*%20should%20be%20called%20first%2C%20before%20adding%20other%20effects.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20protectedSetter%20Creates%20a%20custom%20protected%20setter%0A%20%20%20%20%20%20%20*%20%20%20when%20%60true%60.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'createReadOnlyProperty'%2Cvalue%3Afunction%20createReadOnlyProperty(property%2CprotectedSetter)%7Bthis.prototype._createReadOnlyProperty(property%2CprotectedSetter)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Causes%20the%20setter%20for%20the%20given%20property%20to%20reflect%20the%20property%20value%0A%20%20%20%20%20%20%20*%20to%20a%20(dash-cased)%20attribute%20of%20the%20same%20name.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'createReflectedProperty'%2Cvalue%3Afunction%20createReflectedProperty(property)%7Bthis.prototype._createReflectedProperty(property)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Creates%20a%20computed%20property%20whose%20value%20is%20set%20to%20the%20result%20of%20the%0A%20%20%20%20%20%20%20*%20method%20described%20by%20the%20given%20%60expression%60%20each%20time%20one%20or%20more%0A%20%20%20%20%20%20%20*%20arguments%20to%20the%20method%20changes.%20%20The%20expression%20should%20be%20a%20string%0A%20%20%20%20%20%20%20*%20in%20the%20form%20of%20a%20normal%20JavaScript%20function%20signature%3A%0A%20%20%20%20%20%20%20*%20%60'methodName(arg1%2C%20%5B...%2C%20argn%5D)'%60%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20computed%20property%20to%20set%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20expression%20Method%20expression%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%7CObject%3D%7D%20dynamicFn%20Boolean%20or%20object%20map%20indicating%20whether%0A%20%20%20%20%20%20%20*%20%20%20method%20names%20should%20be%20included%20as%20a%20dependency%20to%20the%20effect.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'createComputedProperty'%2Cvalue%3Afunction%20createComputedProperty(property%2Cexpression%2CdynamicFn)%7Bthis.prototype._createComputedProperty(property%2Cexpression%2CdynamicFn)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Parses%20the%20provided%20template%20to%20ensure%20binding%20effects%20are%20created%0A%20%20%20%20%20%20%20*%20for%20them%2C%20and%20then%20ensures%20property%20accessors%20are%20created%20for%20any%0A%20%20%20%20%20%20%20*%20dependent%20properties%20in%20the%20template.%20%20Binding%20effects%20for%20bound%0A%20%20%20%20%20%20%20*%20templates%20are%20stored%20in%20a%20linked%20list%20on%20the%20instance%20so%20that%0A%20%20%20%20%20%20%20*%20templates%20can%20be%20efficiently%20stamped%20and%20unstamped.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!HTMLTemplateElement%7D%20template%20Template%20containing%20binding%0A%20%20%20%20%20%20%20*%20%20%20bindings%0A%20%20%20%20%20%20%20*%20%40return%20%7B!TemplateInfo%7D%20Template%20metadata%20object%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'bindTemplate'%2Cvalue%3Afunction%20bindTemplate(template)%7Breturn%20this.prototype._bindTemplate(template)%3B%7D%7D%2C%7Bkey%3A'_addTemplatePropertyEffect'%2Cvalue%3Afunction%20_addTemplatePropertyEffect(templateInfo%2Cprop%2Ceffect)%7Bvar%20hostProps%3DtemplateInfo.hostProps%3DtemplateInfo.hostProps%7C%7C%7B%7D%3BhostProps%5Bprop%5D%3Dtrue%3Bvar%20effects%3DtemplateInfo.propertyEffects%3DtemplateInfo.propertyEffects%7C%7C%7B%7D%3Bvar%20propEffects%3Deffects%5Bprop%5D%3Deffects%5Bprop%5D%7C%7C%5B%5D%3BpropEffects.push(effect)%3B%7D%7D%2C%7Bkey%3A'_parseTemplateNode'%2Cvalue%3Afunction%20_parseTemplateNode(node%2CtemplateInfo%2CnodeInfo)%7Bvar%20noted%3D_get(PropertyEffects.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects)%2C'_parseTemplateNode'%2Cthis).call(this%2Cnode%2CtemplateInfo%2CnodeInfo)%3Bif(node.nodeType%3D%3D%3DNode.TEXT_NODE)%7Bvar%20parts%3Dthis._parseBindings(node.textContent%2CtemplateInfo)%3Bif(parts)%7B%2F%2F%20Initialize%20the%20textContent%20with%20any%20literal%20parts%0A%2F%2F%20NOTE%3A%20default%20to%20a%20space%20here%20so%20the%20textNode%20remains%3B%20some%20browsers%0A%2F%2F%20(IE)%20omit%20an%20empty%20textNode%20following%20cloneNode%2FimportNode.%0Anode.textContent%3DliteralFromParts(parts)%7C%7C'%20'%3BaddBinding(this%2CtemplateInfo%2CnodeInfo%2C'text'%2C'textContent'%2Cparts)%3Bnoted%3Dtrue%3B%7D%7Dreturn%20noted%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20default%20%60TemplateStamp%60%20implementation%20to%20add%20support%20for%0A%20%20%20%20%20%20%20*%20parsing%20bindings%20from%20attributes.%20%20A%20%60bindings%60%0A%20%20%20%20%20%20%20*%20array%20is%20added%20to%20%60nodeInfo%60%20and%20populated%20with%20binding%20metadata%0A%20%20%20%20%20%20%20*%20with%20information%20capturing%20the%20binding%20target%2C%20and%20a%20%60parts%60%20array%0A%20%20%20%20%20%20%20*%20with%20one%20or%20more%20metadata%20objects%20capturing%20the%20source(s)%20of%20the%0A%20%20%20%20%20%20%20*%20binding.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40param%20%7BElement%7D%20node%20Node%20to%20parse%0A%20%20%20%20%20%20%20*%20%40param%20%7BTemplateInfo%7D%20templateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20%20%20%20%20*%20%40param%20%7BNodeInfo%7D%20nodeInfo%20Node%20metadata%20for%20current%20template%20node%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20name%20Attribute%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20value%20Attribute%20value%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20%60true%60%20if%20the%20visited%20node%20added%20node-specific%0A%20%20%20%20%20%20%20*%20%20%20metadata%20to%20%60nodeInfo%60%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20Interfaces%20in%20closure%20do%20not%20inherit%20statics%2C%20but%20classes%20do%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_parseTemplateNodeAttribute'%2Cvalue%3Afunction%20_parseTemplateNodeAttribute(node%2CtemplateInfo%2CnodeInfo%2Cname%2Cvalue)%7Bvar%20parts%3Dthis._parseBindings(value%2CtemplateInfo)%3Bif(parts)%7B%2F%2F%20Attribute%20or%20property%0Avar%20origName%3Dname%3Bvar%20kind%3D'property'%3B%2F%2F%20The%20only%20way%20we%20see%20a%20capital%20letter%20here%20is%20if%20the%20attr%20has%0A%2F%2F%20a%20capital%20letter%20in%20it%20per%20spec.%20In%20this%20case%2C%20to%20make%20sure%0A%2F%2F%20this%20binding%20works%2C%20we%20go%20ahead%20and%20make%20the%20binding%20to%20the%20attribute.%0Aif(capitalAttributeRegex.test(name))%7Bkind%3D'attribute'%3B%7Delse%20if(name%5Bname.length-1%5D%3D%3D'%24')%7Bname%3Dname.slice(0%2C-1)%3Bkind%3D'attribute'%3B%7D%2F%2F%20Initialize%20attribute%20bindings%20with%20any%20literal%20parts%0Avar%20literal%3DliteralFromParts(parts)%3Bif(literal%26%26kind%3D%3D'attribute')%7B%2F%2F%20Ensure%20a%20ShadyCSS%20template%20scoped%20style%20is%20not%20removed%0A%2F%2F%20when%20a%20class%24%20binding's%20initial%20literal%20value%20is%20set.%0Aif(name%3D%3D'class'%26%26node.hasAttribute('class'))%7Bliteral%2B%3D'%20'%2Bnode.getAttribute(name)%3B%7Dnode.setAttribute(name%2Cliteral)%3B%7D%2F%2F%20Clear%20attribute%20before%20removing%2C%20since%20IE%20won't%20allow%20removing%0A%2F%2F%20%60value%60%20attribute%20if%20it%20previously%20had%20a%20value%20(can't%0A%2F%2F%20unconditionally%20set%20''%20before%20removing%20since%20attributes%20with%20%60%24%60%0A%2F%2F%20can't%20be%20set%20using%20setAttribute)%0Aif(node.localName%3D%3D%3D'input'%26%26origName%3D%3D%3D'value')%7Bnode.setAttribute(origName%2C'')%3B%7D%2F%2F%20Remove%20annotation%0Anode.removeAttribute(origName)%3B%2F%2F%20Case%20hackery%3A%20attributes%20are%20lower-case%2C%20but%20bind%20targets%0A%2F%2F%20(properties)%20are%20case%20sensitive.%20Gambit%20is%20to%20map%20dash-case%20to%0A%2F%2F%20camel-case%3A%20%60foo-bar%60%20becomes%20%60fooBar%60.%0A%2F%2F%20Attribute%20bindings%20are%20excepted.%0Aif(kind%3D%3D%3D'property')%7Bname%3DPolymer.CaseMap.dashToCamelCase(name)%3B%7DaddBinding(this%2CtemplateInfo%2CnodeInfo%2Ckind%2Cname%2Cparts%2Cliteral)%3Breturn%20true%3B%7Delse%7Breturn%20_get(PropertyEffects.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects)%2C'_parseTemplateNodeAttribute'%2Cthis).call(this%2Cnode%2CtemplateInfo%2CnodeInfo%2Cname%2Cvalue)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20default%20%60TemplateStamp%60%20implementation%20to%20add%20support%20for%0A%20%20%20%20%20%20%20*%20binding%20the%20properties%20that%20a%20nested%20template%20depends%20on%20to%20the%20template%0A%20%20%20%20%20%20%20*%20as%20%60_host_%3Cproperty%3E%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40param%20%7BNode%7D%20node%20Node%20to%20parse%0A%20%20%20%20%20%20%20*%20%40param%20%7BTemplateInfo%7D%20templateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20%20%20%20%20*%20%40param%20%7BNodeInfo%7D%20nodeInfo%20Node%20metadata%20for%20current%20template%20node%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20%60true%60%20if%20the%20visited%20node%20added%20node-specific%0A%20%20%20%20%20%20%20*%20%20%20metadata%20to%20%60nodeInfo%60%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20Interfaces%20in%20closure%20do%20not%20inherit%20statics%2C%20but%20classes%20do%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_parseTemplateNestedTemplate'%2Cvalue%3Afunction%20_parseTemplateNestedTemplate(node%2CtemplateInfo%2CnodeInfo)%7Bvar%20noted%3D_get(PropertyEffects.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects)%2C'_parseTemplateNestedTemplate'%2Cthis).call(this%2Cnode%2CtemplateInfo%2CnodeInfo)%3B%2F%2F%20Merge%20host%20props%20into%20outer%20template%20and%20add%20bindings%0Avar%20hostProps%3DnodeInfo.templateInfo.hostProps%3Bvar%20mode%3D'%7B'%3Bfor(var%20source%20in%20hostProps)%7Bvar%20parts%3D%5B%7Bmode%3Amode%2Csource%3Asource%2Cdependencies%3A%5Bsource%5D%7D%5D%3BaddBinding(this%2CtemplateInfo%2CnodeInfo%2C'property'%2C'_host_'%2Bsource%2Cparts)%3B%7Dreturn%20noted%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Called%20to%20parse%20text%20in%20a%20template%20(either%20attribute%20values%20or%0A%20%20%20%20%20%20%20*%20textContent)%20into%20binding%20metadata.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Any%20overrides%20of%20this%20method%20should%20return%20an%20array%20of%20binding%20part%0A%20%20%20%20%20%20%20*%20metadata%20%20representing%20one%20or%20more%20bindings%20found%20in%20the%20provided%20text%0A%20%20%20%20%20%20%20*%20and%20any%20%22literal%22%20text%20in%20between.%20%20Any%20non-literal%20parts%20will%20be%20passed%0A%20%20%20%20%20%20%20*%20to%20%60_evaluateBinding%60%20when%20any%20dependencies%20change.%20%20The%20only%20required%0A%20%20%20%20%20%20%20*%20fields%20of%20each%20%22part%22%20in%20the%20returned%20array%20are%20as%20follows%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20-%20%60dependencies%60%20-%20Array%20containing%20trigger%20metadata%20for%20each%20property%0A%20%20%20%20%20%20%20*%20%20%20that%20should%20trigger%20the%20binding%20to%20update%0A%20%20%20%20%20%20%20*%20-%20%60literal%60%20-%20String%20containing%20text%20if%20the%20part%20represents%20a%20literal%3B%0A%20%20%20%20%20%20%20*%20%20%20in%20this%20case%20no%20%60dependencies%60%20are%20needed%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Additional%20metadata%20for%20use%20by%20%60_evaluateBinding%60%20may%20be%20provided%20in%0A%20%20%20%20%20%20%20*%20each%20part%20object%20as%20needed.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20default%20implementation%20handles%20the%20following%20types%20of%20bindings%0A%20%20%20%20%20%20%20*%20(one%20or%20more%20may%20be%20intermixed%20with%20literal%20strings)%3A%0A%20%20%20%20%20%20%20*%20-%20Property%20binding%3A%20%60%5B%5Bprop%5D%5D%60%0A%20%20%20%20%20%20%20*%20-%20Path%20binding%3A%20%60%5B%5Bobject.prop%5D%5D%60%0A%20%20%20%20%20%20%20*%20-%20Negated%20property%20or%20path%20bindings%3A%20%60%5B%5B!prop%5D%5D%60%20or%20%60%5B%5B!object.prop%5D%5D%60%0A%20%20%20%20%20%20%20*%20-%20Two-way%20property%20or%20path%20bindings%20(supports%20negation)%3A%0A%20%20%20%20%20%20%20*%20%20%20%60%7B%7Bprop%7D%7D%60%2C%20%60%7B%7Bobject.prop%7D%7D%60%2C%20%60%7B%7B!prop%7D%7D%60%20or%20%60%7B%7B!object.prop%7D%7D%60%0A%20%20%20%20%20%20%20*%20-%20Inline%20computed%20method%20(supports%20negation)%3A%0A%20%20%20%20%20%20%20*%20%20%20%60%5B%5Bcompute(a%2C%20'literal'%2C%20b)%5D%5D%60%2C%20%60%5B%5B!compute(a%2C%20'literal'%2C%20b)%5D%5D%60%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20default%20implementation%20uses%20a%20regular%20expression%20for%20best%0A%20%20%20%20%20%20%20*%20performance.%20However%2C%20the%20regular%20expression%20uses%20a%20white-list%20of%0A%20%20%20%20%20%20%20*%20allowed%20characters%20in%20a%20data-binding%2C%20which%20causes%20problems%20for%0A%20%20%20%20%20%20%20*%20data-bindings%20that%20do%20use%20characters%20not%20in%20this%20white-list.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Instead%20of%20updating%20the%20white-list%20with%20all%20allowed%20characters%2C%0A%20%20%20%20%20%20%20*%20there%20is%20a%20StrictBindingParser%20(see%20lib%2Fmixins%2Fstrict-binding-parser)%0A%20%20%20%20%20%20%20*%20that%20uses%20a%20state%20machine%20instead.%20This%20state%20machine%20is%20able%20to%20handle%0A%20%20%20%20%20%20%20*%20all%20characters.%20However%2C%20it%20is%20slightly%20less%20performant%2C%20therefore%20we%0A%20%20%20%20%20%20%20*%20extracted%20it%20into%20a%20separate%20optional%20mixin.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20text%20Text%20to%20parse%20from%20attribute%20or%20textContent%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20templateInfo%20Current%20template%20metadata%0A%20%20%20%20%20%20%20*%20%40return%20%7BArray%3C!BindingPart%3E%7D%20Array%20of%20binding%20part%20metadata%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_parseBindings'%2Cvalue%3Afunction%20_parseBindings(text%2CtemplateInfo)%7Bvar%20parts%3D%5B%5D%3Bvar%20lastIndex%3D0%3Bvar%20m%3Dvoid%200%3B%2F%2F%20Example%3A%20%22literal1%7B%7Bprop%7D%7Dliteral2%5B%5B!compute(foo%2Cbar)%5D%5Dfinal%22%0A%2F%2F%20Regex%20matches%3A%0A%2F%2F%20%20%20%20%20%20%20%20Iteration%201%3A%20%20Iteration%202%3A%0A%2F%2F%20m%5B1%5D%3A%20'%7B%7B'%20%20%20%20%20%20%20%20%20%20'%5B%5B'%0A%2F%2F%20m%5B2%5D%3A%20''%20%20%20%20%20%20%20%20%20%20%20%20'!'%0A%2F%2F%20m%5B3%5D%3A%20'prop'%20%20%20%20%20%20%20%20'compute(foo%2Cbar)'%0Awhile((m%3DbindingRegex.exec(text))!%3D%3Dnull)%7B%2F%2F%20Add%20literal%20part%0Aif(m.index%3ElastIndex)%7Bparts.push(%7Bliteral%3Atext.slice(lastIndex%2Cm.index)%7D)%3B%7D%2F%2F%20Add%20binding%20part%0Avar%20mode%3Dm%5B1%5D%5B0%5D%3Bvar%20negate%3DBoolean(m%5B2%5D)%3Bvar%20source%3Dm%5B3%5D.trim()%3Bvar%20customEvent%3Dfalse%2CnotifyEvent%3D''%2Ccolon%3D-1%3Bif(mode%3D%3D'%7B'%26%26(colon%3Dsource.indexOf('%3A%3A'))%3E0)%7BnotifyEvent%3Dsource.substring(colon%2B2)%3Bsource%3Dsource.substring(0%2Ccolon)%3BcustomEvent%3Dtrue%3B%7Dvar%20signature%3DparseMethod(source)%3Bvar%20dependencies%3D%5B%5D%3Bif(signature)%7B%2F%2F%20Inline%20computed%20function%0Avar%20args%3Dsignature.args%2CmethodName%3Dsignature.methodName%3Bfor(var%20i%3D0%3Bi%3Cargs.length%3Bi%2B%2B)%7Bvar%20arg%3Dargs%5Bi%5D%3Bif(!arg.literal)%7Bdependencies.push(arg)%3B%7D%7Dvar%20dynamicFns%3DtemplateInfo.dynamicFns%3Bif(dynamicFns%26%26dynamicFns%5BmethodName%5D%7C%7Csignature.static)%7Bdependencies.push(methodName)%3Bsignature.dynamicFn%3Dtrue%3B%7D%7Delse%7B%2F%2F%20Property%20or%20path%0Adependencies.push(source)%3B%7Dparts.push(%7Bsource%3Asource%2Cmode%3Amode%2Cnegate%3Anegate%2CcustomEvent%3AcustomEvent%2Csignature%3Asignature%2Cdependencies%3Adependencies%2Cevent%3AnotifyEvent%7D)%3BlastIndex%3DbindingRegex.lastIndex%3B%7D%2F%2F%20Add%20a%20final%20literal%20part%0Aif(lastIndex%26%26lastIndex%3Ctext.length)%7Bvar%20literal%3Dtext.substring(lastIndex)%3Bif(literal)%7Bparts.push(%7Bliteral%3Aliteral%7D)%3B%7D%7Dif(parts.length)%7Breturn%20parts%3B%7Delse%7Breturn%20null%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Called%20to%20evaluate%20a%20previously%20parsed%20binding%20part%20based%20on%20a%20set%20of%0A%20%20%20%20%20%20%20*%20one%20or%20more%20changed%20dependencies.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bthis%7D%20inst%20Element%20that%20should%20be%20used%20as%20scope%20for%0A%20%20%20%20%20%20%20*%20%20%20binding%20dependencies%0A%20%20%20%20%20%20%20*%20%40param%20%7BBindingPart%7D%20part%20Binding%20part%20metadata%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20path%20Property%2Fpath%20that%20triggered%20this%20effect%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20%20%20%20%20*%20%40return%20%7B*%7D%20Value%20the%20binding%20part%20evaluated%20to%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_evaluateBinding'%2Cvalue%3Afunction%20_evaluateBinding(inst%2Cpart%2Cpath%2Cprops%2ColdProps%2ChasPaths)%7Bvar%20value%3Dvoid%200%3Bif(part.signature)%7Bvalue%3DrunMethodEffect(inst%2Cpath%2Cprops%2ColdProps%2Cpart.signature)%3B%7Delse%20if(path!%3Dpart.source)%7Bvalue%3DPolymer.Path.get(inst%2Cpart.source)%3B%7Delse%7Bif(hasPaths%26%26Polymer.Path.isPath(path))%7Bvalue%3DPolymer.Path.get(inst%2Cpath)%3B%7Delse%7Bvalue%3Dinst.__data%5Bpath%5D%3B%7D%7Dif(part.negate)%7Bvalue%3D!value%3B%7Dreturn%20value%3B%7D%7D%5D)%3Breturn%20PropertyEffects%3B%7D(propertyEffectsBase)%3B%2F%2F%20make%20a%20typing%20for%20closure%20%3AP%0APropertyEffectsType%3DPropertyEffects%3Breturn%20PropertyEffects%3B%7D)%3B%2F**%0A%20%20%20*%20Helper%20api%20for%20enqueuing%20client%20dom%20created%20by%20a%20host%20element.%0A%20%20%20*%0A%20%20%20*%20By%20default%20elements%20are%20flushed%20via%20%60_flushProperties%60%20when%0A%20%20%20*%20%60connectedCallback%60%20is%20called.%20Elements%20attach%20their%20client%20dom%20to%0A%20%20%20*%20themselves%20at%20%60ready%60%20time%20which%20results%20from%20this%20first%20flush.%0A%20%20%20*%20This%20provides%20an%20ordering%20guarantee%20that%20the%20client%20dom%20an%20element%0A%20%20%20*%20creates%20is%20flushed%20before%20the%20element%20itself%20(i.e.%20client%20%60ready%60%0A%20%20%20*%20fires%20before%20host%20%60ready%60).%0A%20%20%20*%0A%20%20%20*%20However%2C%20if%20%60_flushProperties%60%20is%20called%20*before*%20an%20element%20is%20connected%2C%0A%20%20%20*%20as%20for%20example%20%60Templatize%60%20does%2C%20this%20ordering%20guarantee%20cannot%20be%0A%20%20%20*%20satisfied%20because%20no%20elements%20are%20connected.%20(Note%3A%20Bound%20elements%20that%0A%20%20%20*%20receive%20data%20do%20become%20enqueued%20clients%20and%20are%20properly%20ordered%20but%0A%20%20%20*%20unbound%20elements%20are%20not.)%0A%20%20%20*%0A%20%20%20*%20To%20maintain%20the%20desired%20%22client%20before%20host%22%20ordering%20guarantee%20for%20this%0A%20%20%20*%20case%20we%20rely%20on%20the%20%22host%20stack.%20Client%20nodes%20registers%20themselves%20with%0A%20%20%20*%20the%20creating%20host%20element%20when%20created.%20This%20ensures%20that%20all%20client%20dom%0A%20%20%20*%20is%20readied%20in%20the%20proper%20order%2C%20maintaining%20the%20desired%20guarantee.%0A%20%20%20*%0A%20%20%20*%20%40private%0A%20%20%20*%2Fvar%20hostStack%3D%7Bstack%3A%5B%5D%2C%2F**%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20inst%20Instance%20to%20add%20to%20hostStack%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40this%20%7BhostStack%7D%0A%20%20%20%20%20*%2FregisterHost%3Afunction%20registerHost(inst)%7Bif(this.stack.length)%7Bvar%20host%3Dthis.stack%5Bthis.stack.length-1%5D%3Bhost._enqueueClient(inst)%3B%7D%7D%2C%2F**%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20inst%20Instance%20to%20begin%20hosting%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40this%20%7BhostStack%7D%0A%20%20%20%20%20*%2FbeginHosting%3Afunction%20beginHosting(inst)%7Bthis.stack.push(inst)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20inst%20Instance%20to%20end%20hosting%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40this%20%7BhostStack%7D%0A%20%20%20%20%20*%2FendHosting%3Afunction%20endHosting(inst)%7Bvar%20stackLen%3Dthis.stack.length%3Bif(stackLen%26%26this.stack%5BstackLen-1%5D%3D%3Dinst)%7Bthis.stack.pop()%3B%7D%7D%7D%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Fmixins%2Fproperty-effects.html.js%0A",
            "resourceBytes": 100964,
            "encodedBytes": 0,
            "unusedBytes": 40160
          },
          {
            "name": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3B%2F**%0A%20%20%20*%20Provides%20basic%20tracking%20of%20element%20definitions%20(registrations)%20and%0A%20%20%20*%20instance%20counts.%0A%20%20%20*%0A%20%20%20*%20%40namespace%0A%20%20%20*%20%40summary%20Provides%20basic%20tracking%20of%20element%20definitions%20(registrations)%20and%0A%20%20%20*%20instance%20counts.%0A%20%20%20*%2FPolymer.telemetry%3D%7B%2F**%0A%20%20%20%20%20*%20Total%20number%20of%20Polymer%20element%20instances%20created.%0A%20%20%20%20%20*%20%40type%20%7Bnumber%7D%0A%20%20%20%20%20*%2FinstanceCount%3A0%2C%2F**%0A%20%20%20%20%20*%20Array%20of%20Polymer%20element%20classes%20that%20have%20been%20finalized.%0A%20%20%20%20%20*%20%40type%20%7BArray%3CPolymer.Element%3E%7D%0A%20%20%20%20%20*%2Fregistrations%3A%5B%5D%2C%2F**%0A%20%20%20%20%20*%20%40param%20%7B!PolymerElementConstructor%7D%20prototype%20Element%20prototype%20to%20log%0A%20%20%20%20%20*%20%40this%20%7Bthis%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2F_regLog%3Afunction%20_regLog(prototype)%7Bconsole.log('%5B'%2Bprototype.is%2B'%5D%3A%20registered')%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Registers%20a%20class%20prototype%20for%20telemetry%20purposes.%0A%20%20%20%20%20*%20%40param%20%7BHTMLElement%7D%20prototype%20Element%20prototype%20to%20register%0A%20%20%20%20%20*%20%40this%20%7Bthis%7D%0A%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20*%2Fregister%3Afunction%20register(prototype)%7Bthis.registrations.push(prototype)%3BPolymer.log%26%26this._regLog(prototype)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Logs%20all%20elements%20registered%20with%20an%20%60is%60%20to%20the%20console.%0A%20%20%20%20%20*%20%40public%0A%20%20%20%20%20*%20%40this%20%7Bthis%7D%0A%20%20%20%20%20*%2FdumpRegistrations%3Afunction%20dumpRegistrations()%7Bthis.registrations.forEach(this._regLog)%3B%7D%7D%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Ftelemetry.html.js%0A",
            "resourceBytes": 1356,
            "encodedBytes": 0,
            "unusedBytes": 146
          },
          {
            "name": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bvar%20_get%3Dfunction%20get(object%2Cproperty%2Creceiver)%7Bif(object%3D%3D%3Dnull)object%3DFunction.prototype%3Bvar%20desc%3DObject.getOwnPropertyDescriptor(object%2Cproperty)%3Bif(desc%3D%3D%3Dundefined)%7Bvar%20parent%3DObject.getPrototypeOf(object)%3Bif(parent%3D%3D%3Dnull)%7Breturn%20undefined%3B%7Delse%7Breturn%20get(parent%2Cproperty%2Creceiver)%3B%7D%7Delse%20if(%22value%22in%20desc)%7Breturn%20desc.value%3B%7Delse%7Bvar%20getter%3Ddesc.get%3Bif(getter%3D%3D%3Dundefined)%7Breturn%20undefined%3B%7Dreturn%20getter.call(receiver)%3B%7D%7D%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3B%2F**%0A%20%20%20*%20Creates%20a%20copy%20of%20%60props%60%20with%20each%20property%20normalized%20such%20that%0A%20%20%20*%20upgraded%20it%20is%20an%20object%20with%20at%20least%20a%20type%20property%20%7B%20type%3A%20Type%7D.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Properties%20to%20normalize%0A%20%20%20*%20%40return%20%7BObject%7D%20Copy%20of%20input%20%60props%60%20with%20normalized%20properties%20that%0A%20%20%20*%20are%20in%20the%20form%20%7Btype%3A%20Type%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20normalizeProperties(props)%7Bvar%20output%3D%7B%7D%3Bfor(var%20p%20in%20props)%7Bvar%20o%3Dprops%5Bp%5D%3Boutput%5Bp%5D%3Dtypeof%20o%3D%3D%3D'function'%3F%7Btype%3Ao%7D%3Ao%3B%7Dreturn%20output%3B%7D%2F**%0A%20%20%20*%20Mixin%20that%20provides%20a%20minimal%20starting%20point%20to%20using%20the%20PropertiesChanged%0A%20%20%20*%20mixin%20by%20providing%20a%20mechanism%20to%20declare%20properties%20in%20a%20static%0A%20%20%20*%20getter%20(e.g.%20static%20get%20properties()%20%7B%20return%20%7B%20foo%3A%20String%20%7D%20%7D).%20Changes%0A%20%20%20*%20are%20reported%20via%20the%20%60_propertiesChanged%60%20method.%0A%20%20%20*%0A%20%20%20*%20This%20mixin%20provides%20no%20specific%20support%20for%20rendering.%20Users%20are%20expected%0A%20%20%20*%20to%20create%20a%20ShadowRoot%20and%20put%20content%20into%20it%20and%20update%20it%20in%20whatever%0A%20%20%20*%20way%20makes%20sense.%20This%20can%20be%20done%20in%20reaction%20to%20properties%20changing%20by%0A%20%20%20*%20implementing%20%60_propertiesChanged%60.%0A%20%20%20*%0A%20%20%20*%20%40mixinFunction%0A%20%20%20*%20%40polymer%0A%20%20%20*%20%40appliesMixin%20Polymer.PropertiesChanged%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Mixin%20that%20provides%20a%20minimal%20starting%20point%20for%20using%0A%20%20%20*%20the%20PropertiesChanged%20mixin%20by%20providing%20a%20declarative%20%60properties%60%20object.%0A%20%20%20*%2FPolymer.PropertiesMixin%3DPolymer.dedupingMixin(function(superClass)%7B%2F**%0A%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20*%20%40extends%20%7BsuperClass%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertiesChanged%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Fvar%20base%3DPolymer.PropertiesChanged(superClass)%3B%2F**%0A%20%20%20%20%20*%20Returns%20the%20super%20class%20constructor%20for%20the%20given%20class%2C%20if%20it%20is%20an%0A%20%20%20%20%20*%20instance%20of%20the%20PropertiesMixin.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7B!PropertiesMixinConstructor%7D%20constructor%20PropertiesMixin%20constructor%0A%20%20%20%20%20*%20%40return%20%7BPropertiesMixinConstructor%7D%20Super%20class%20constructor%0A%20%20%20%20%20*%2Ffunction%20superPropertiesClass(constructor)%7Bvar%20superCtor%3DObject.getPrototypeOf(constructor)%3B%2F%2F%20Note%2C%20the%20%60PropertiesMixin%60%20class%20below%20only%20refers%20to%20the%20class%0A%2F%2F%20generated%20by%20this%20call%20to%20the%20mixin%3B%20the%20instanceof%20test%20only%20works%0A%2F%2F%20because%20the%20mixin%20is%20deduped%20and%20guaranteed%20only%20to%20apply%20once%2C%20hence%0A%2F%2F%20all%20constructors%20in%20a%20proto%20chain%20will%20see%20the%20same%20%60PropertiesMixin%60%0Areturn%20superCtor.prototype%20instanceof%20PropertiesMixin%3F%2F**%20%40type%20%7BPropertiesMixinConstructor%7D%20*%2FsuperCtor%3Anull%3B%7D%2F**%0A%20%20%20%20%20*%20Returns%20a%20memoized%20version%20of%20the%20%60properties%60%20object%20for%20the%0A%20%20%20%20%20*%20given%20class.%20Properties%20not%20in%20object%20format%20are%20converted%20to%20at%0A%20%20%20%20%20*%20least%20%7Btype%7D.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7BPropertiesMixinConstructor%7D%20constructor%20PropertiesMixin%20constructor%0A%20%20%20%20%20*%20%40return%20%7BObject%7D%20Memoized%20properties%20object%0A%20%20%20%20%20*%2Ffunction%20ownProperties(constructor)%7Bif(!constructor.hasOwnProperty(JSCompiler_renameProperty('__ownProperties'%2Cconstructor)))%7Bvar%20props%3Dnull%3Bif(constructor.hasOwnProperty(JSCompiler_renameProperty('properties'%2Cconstructor)))%7Bvar%20properties%3Dconstructor.properties%3Bif(properties)%7Bprops%3DnormalizeProperties(properties)%3B%7D%7Dconstructor.__ownProperties%3Dprops%3B%7Dreturn%20constructor.__ownProperties%3B%7D%2F**%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40mixinClass%0A%20%20%20%20%20*%20%40extends%20%7Bbase%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertiesMixin%7D%0A%20%20%20%20%20*%20%40unrestricted%0A%20%20%20%20%20*%2Fvar%20PropertiesMixin%3Dfunction(_base)%7B_inherits(PropertiesMixin%2C_base)%3Bfunction%20PropertiesMixin()%7B_classCallCheck(this%2CPropertiesMixin)%3Breturn%20_possibleConstructorReturn(this%2C(PropertiesMixin.__proto__%7C%7CObject.getPrototypeOf(PropertiesMixin)).apply(this%2Carguments))%3B%7D_createClass(PropertiesMixin%2C%5B%7Bkey%3A'_initializeProperties'%2C%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20%60PropertiesChanged%60%20method%20and%20adds%20a%20call%20to%0A%20%20%20%20%20%20%20*%20%60finalize%60%20which%20lazily%20configures%20the%20element's%20property%20accessors.%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_initializeProperties()%7BPolymer.telemetry.instanceCount%2B%2B%3Bthis.constructor.finalize()%3B_get(PropertiesMixin.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertiesMixin.prototype)%2C'_initializeProperties'%2Cthis).call(this)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Called%20when%20the%20element%20is%20added%20to%20a%20document.%0A%20%20%20%20%20%20%20*%20Calls%20%60_enableProperties%60%20to%20turn%20on%20property%20system%20from%0A%20%20%20%20%20%20%20*%20%60PropertiesChanged%60.%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20Super%20may%20or%20may%20not%20implement%20the%20callback%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'connectedCallback'%2Cvalue%3Afunction%20connectedCallback()%7Bif(_get(PropertiesMixin.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertiesMixin.prototype)%2C'connectedCallback'%2Cthis))%7B_get(PropertiesMixin.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertiesMixin.prototype)%2C'connectedCallback'%2Cthis).call(this)%3B%7Dthis._enableProperties()%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Called%20when%20the%20element%20is%20removed%20from%20a%20document%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20Super%20may%20or%20may%20not%20implement%20the%20callback%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'disconnectedCallback'%2Cvalue%3Afunction%20disconnectedCallback()%7Bif(_get(PropertiesMixin.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertiesMixin.prototype)%2C'disconnectedCallback'%2Cthis))%7B_get(PropertiesMixin.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertiesMixin.prototype)%2C'disconnectedCallback'%2Cthis).call(this)%3B%7D%7D%7D%5D%2C%5B%7Bkey%3A'finalize'%2C%2F**%0A%20%20%20%20%20%20%20*%20Finalizes%20an%20element%20definition%2C%20including%20ensuring%20any%20super%20classes%0A%20%20%20%20%20%20%20*%20are%20also%20finalized.%20This%20includes%20ensuring%20property%0A%20%20%20%20%20%20%20*%20accessors%20exist%20on%20the%20element%20prototype.%20This%20method%20calls%0A%20%20%20%20%20%20%20*%20%60_finalizeClass%60%20to%20finalize%20each%20constructor%20in%20the%20prototype%20chain.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20finalize()%7Bif(!this.hasOwnProperty(JSCompiler_renameProperty('__finalized'%2Cthis)))%7Bvar%20superCtor%3DsuperPropertiesClass(%2F**%20%40type%20%7BPropertiesMixinConstructor%7D%20*%2Fthis)%3Bif(superCtor)%7BsuperCtor.finalize()%3B%7Dthis.__finalized%3Dtrue%3Bthis._finalizeClass()%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Finalize%20an%20element%20class.%20This%20includes%20ensuring%20property%0A%20%20%20%20%20%20%20*%20accessors%20exist%20on%20the%20element%20prototype.%20This%20method%20is%20called%20by%0A%20%20%20%20%20%20%20*%20%60finalize%60%20and%20finalizes%20the%20class%20constructor.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_finalizeClass'%2Cvalue%3Afunction%20_finalizeClass()%7Bvar%20props%3DownProperties(%2F**%20%40type%20%7BPropertiesMixinConstructor%7D%20*%2Fthis)%3Bif(props)%7Bthis.createProperties(props)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20a%20memoized%20version%20of%20all%20properties%2C%20including%20those%20inherited%0A%20%20%20%20%20%20%20*%20from%20super%20classes.%20Properties%20not%20in%20object%20format%20are%20converted%20to%0A%20%20%20%20%20%20%20*%20at%20least%20%7Btype%7D.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7BObject%7D%20Object%20containing%20properties%20for%20this%20class%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'typeForProperty'%2C%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20%60PropertiesChanged%60%20method%20to%20return%20type%20specified%20in%20the%0A%20%20%20%20%20%20%20*%20static%20%60properties%60%20object%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20name%20Name%20of%20property%0A%20%20%20%20%20%20%20*%20%40return%20%7B*%7D%20Type%20to%20which%20to%20deserialize%20attribute%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20typeForProperty(name)%7Bvar%20info%3Dthis._properties%5Bname%5D%3Breturn%20info%26%26info.type%3B%7D%7D%2C%7Bkey%3A'observedAttributes'%2C%2F**%0A%20%20%20%20%20%20%20*%20Implements%20standard%20custom%20elements%20getter%20to%20observes%20the%20attributes%0A%20%20%20%20%20%20%20*%20listed%20in%20%60properties%60.%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20Interfaces%20in%20closure%20do%20not%20inherit%20statics%2C%20but%20classes%20do%0A%20%20%20%20%20%20%20*%2Fget%3Afunction%20get()%7Bvar%20_this2%3Dthis%3Bif(!this.hasOwnProperty('__observedAttributes'))%7BPolymer.telemetry.register(this.prototype)%3Bvar%20props%3Dthis._properties%3Bthis.__observedAttributes%3Dprops%3FObject.keys(props).map(function(p)%7Breturn%20_this2.attributeNameForProperty(p)%3B%7D)%3A%5B%5D%3B%7Dreturn%20this.__observedAttributes%3B%7D%7D%2C%7Bkey%3A'_properties'%2Cget%3Afunction%20get()%7Bif(!this.hasOwnProperty(JSCompiler_renameProperty('__properties'%2Cthis)))%7Bvar%20superCtor%3DsuperPropertiesClass(%2F**%20%40type%20%7BPropertiesMixinConstructor%7D%20*%2Fthis)%3Bthis.__properties%3DObject.assign(%7B%7D%2CsuperCtor%26%26superCtor._properties%2CownProperties(%2F**%20%40type%20%7BPropertiesMixinConstructor%7D%20*%2Fthis))%3B%7Dreturn%20this.__properties%3B%7D%7D%5D)%3Breturn%20PropertiesMixin%3B%7D(base)%3Breturn%20PropertiesMixin%3B%7D)%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Fmixins%2Fproperties-mixin.html.js%0A",
            "resourceBytes": 9658,
            "encodedBytes": 0,
            "unusedBytes": 3205
          },
          {
            "name": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bvar%20_get%3Dfunction%20get(object%2Cproperty%2Creceiver)%7Bif(object%3D%3D%3Dnull)object%3DFunction.prototype%3Bvar%20desc%3DObject.getOwnPropertyDescriptor(object%2Cproperty)%3Bif(desc%3D%3D%3Dundefined)%7Bvar%20parent%3DObject.getPrototypeOf(object)%3Bif(parent%3D%3D%3Dnull)%7Breturn%20undefined%3B%7Delse%7Breturn%20get(parent%2Cproperty%2Creceiver)%3B%7D%7Delse%20if(%22value%22in%20desc)%7Breturn%20desc.value%3B%7Delse%7Bvar%20getter%3Ddesc.get%3Bif(getter%3D%3D%3Dundefined)%7Breturn%20undefined%3B%7Dreturn%20getter.call(receiver)%3B%7D%7D%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3Bvar%20builtCSS%3Dwindow.ShadyCSS%26%26window.ShadyCSS%5B'cssBuild'%5D%3B%2F**%0A%20%20%20*%20Element%20class%20mixin%20that%20provides%20the%20core%20API%20for%20Polymer's%20meta-programming%0A%20%20%20*%20features%20including%20template%20stamping%2C%20data-binding%2C%20attribute%20deserialization%2C%0A%20%20%20*%20and%20property%20change%20observation.%0A%20%20%20*%0A%20%20%20*%20Subclassers%20may%20provide%20the%20following%20static%20getters%20to%20return%20metadata%0A%20%20%20*%20used%20to%20configure%20Polymer's%20features%20for%20the%20class%3A%0A%20%20%20*%0A%20%20%20*%20-%20%60static%20get%20is()%60%3A%20When%20the%20template%20is%20provided%20via%20a%20%60dom-module%60%2C%0A%20%20%20*%20%20%20users%20should%20return%20the%20%60dom-module%60%20id%20from%20a%20static%20%60is%60%20getter.%20%20If%0A%20%20%20*%20%20%20no%20template%20is%20needed%20or%20the%20template%20is%20provided%20directly%20via%20the%0A%20%20%20*%20%20%20%60template%60%20getter%2C%20there%20is%20no%20need%20to%20define%20%60is%60%20for%20the%20element.%0A%20%20%20*%0A%20%20%20*%20-%20%60static%20get%20template()%60%3A%20Users%20may%20provide%20the%20template%20directly%20(as%0A%20%20%20*%20%20%20opposed%20to%20via%20%60dom-module%60)%20by%20implementing%20a%20static%20%60template%60%20getter.%0A%20%20%20*%20%20%20The%20getter%20may%20return%20an%20%60HTMLTemplateElement%60%20or%20a%20string%2C%20which%20will%0A%20%20%20*%20%20%20automatically%20be%20parsed%20into%20a%20template.%0A%20%20%20*%0A%20%20%20*%20-%20%60static%20get%20properties()%60%3A%20Should%20return%20an%20object%20describing%0A%20%20%20*%20%20%20property-related%20metadata%20used%20by%20Polymer%20features%20(key%3A%20property%20name%0A%20%20%20*%20%20%20value%3A%20object%20containing%20property%20metadata).%20Valid%20keys%20in%20per-property%0A%20%20%20*%20%20%20metadata%20include%3A%0A%20%20%20*%20%20%20-%20%60type%60%20(String%7CNumber%7CObject%7CArray%7C...)%3A%20Used%20by%0A%20%20%20*%20%20%20%20%20%60attributeChangedCallback%60%20to%20determine%20how%20string-based%20attributes%0A%20%20%20*%20%20%20%20%20are%20deserialized%20to%20JavaScript%20property%20values.%0A%20%20%20*%20%20%20-%20%60notify%60%20(boolean)%3A%20Causes%20a%20change%20in%20the%20property%20to%20fire%20a%0A%20%20%20*%20%20%20%20%20non-bubbling%20event%20called%20%60%3Cproperty%3E-changed%60.%20Elements%20that%20have%0A%20%20%20*%20%20%20%20%20enabled%20two-way%20binding%20to%20the%20property%20use%20this%20event%20to%20observe%20changes.%0A%20%20%20*%20%20%20-%20%60readOnly%60%20(boolean)%3A%20Creates%20a%20getter%20for%20the%20property%2C%20but%20no%20setter.%0A%20%20%20*%20%20%20%20%20To%20set%20a%20read-only%20property%2C%20use%20the%20private%20setter%20method%0A%20%20%20*%20%20%20%20%20%60_setProperty(property%2C%20value)%60.%0A%20%20%20*%20%20%20-%20%60observer%60%20(string)%3A%20Observer%20method%20name%20that%20will%20be%20called%20when%0A%20%20%20*%20%20%20%20%20the%20property%20changes.%20The%20arguments%20of%20the%20method%20are%0A%20%20%20*%20%20%20%20%20%60(value%2C%20previousValue)%60.%0A%20%20%20*%20%20%20-%20%60computed%60%20(string)%3A%20String%20describing%20method%20and%20dependent%20properties%0A%20%20%20*%20%20%20%20%20for%20computing%20the%20value%20of%20this%20property%20(e.g.%20%60'computeFoo(bar%2C%20zot)'%60).%0A%20%20%20*%20%20%20%20%20Computed%20properties%20are%20read-only%20by%20default%20and%20can%20only%20be%20changed%0A%20%20%20*%20%20%20%20%20via%20the%20return%20value%20of%20the%20computing%20method.%0A%20%20%20*%0A%20%20%20*%20-%20%60static%20get%20observers()%60%3A%20Array%20of%20strings%20describing%20multi-property%0A%20%20%20*%20%20%20observer%20methods%20and%20their%20dependent%20properties%20(e.g.%0A%20%20%20*%20%20%20%60'observeABC(a%2C%20b%2C%20c)'%60).%0A%20%20%20*%0A%20%20%20*%20The%20base%20class%20provides%20default%20implementations%20for%20the%20following%20standard%0A%20%20%20*%20custom%20element%20lifecycle%20callbacks%3B%20users%20may%20override%20these%2C%20but%20should%0A%20%20%20*%20call%20the%20super%20method%20to%20ensure%0A%20%20%20*%20-%20%60constructor%60%3A%20Run%20when%20the%20element%20is%20created%20or%20upgraded%0A%20%20%20*%20-%20%60connectedCallback%60%3A%20Run%20each%20time%20the%20element%20is%20connected%20to%20the%0A%20%20%20*%20%20%20document%0A%20%20%20*%20-%20%60disconnectedCallback%60%3A%20Run%20each%20time%20the%20element%20is%20disconnected%20from%0A%20%20%20*%20%20%20the%20document%0A%20%20%20*%20-%20%60attributeChangedCallback%60%3A%20Run%20each%20time%20an%20attribute%20in%0A%20%20%20*%20%20%20%60observedAttributes%60%20is%20set%20or%20removed%20(note%3A%20this%20element's%20default%0A%20%20%20*%20%20%20%60observedAttributes%60%20implementation%20will%20automatically%20return%20an%20array%0A%20%20%20*%20%20%20of%20dash-cased%20attributes%20based%20on%20%60properties%60)%0A%20%20%20*%0A%20%20%20*%20%40mixinFunction%0A%20%20%20*%20%40polymer%0A%20%20%20*%20%40appliesMixin%20Polymer.PropertyEffects%0A%20%20%20*%20%40appliesMixin%20Polymer.PropertiesMixin%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40property%20rootPath%20%7Bstring%7D%20Set%20to%20the%20value%20of%20%60Polymer.rootPath%60%2C%0A%20%20%20*%20%20%20which%20defaults%20to%20the%20main%20document%20path%0A%20%20%20*%20%40property%20importPath%20%7Bstring%7D%20Set%20to%20the%20value%20of%20the%20class's%20static%0A%20%20%20*%20%20%20%60importPath%60%20property%2C%20which%20defaults%20to%20the%20path%20of%20this%20element's%0A%20%20%20*%20%20%20%60dom-module%60%20(when%20%60is%60%20is%20used)%2C%20but%20can%20be%20overridden%20for%20other%0A%20%20%20*%20%20%20import%20strategies.%0A%20%20%20*%20%40summary%20Element%20class%20mixin%20that%20provides%20the%20core%20API%20for%20Polymer's%0A%20%20%20*%20meta-programming%20features.%0A%20%20%20*%2FPolymer.ElementMixin%3DPolymer.dedupingMixin(function(base)%7B%2F**%0A%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20*%20%40extends%20%7Bbase%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertyEffects%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertiesMixin%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Fvar%20polymerElementBase%3DPolymer.PropertiesMixin(Polymer.PropertyEffects(base))%3B%2F**%0A%20%20%20%20%20*%20Returns%20a%20list%20of%20properties%20with%20default%20values.%0A%20%20%20%20%20*%20This%20list%20is%20created%20as%20an%20optimization%20since%20it%20is%20a%20subset%20of%0A%20%20%20%20%20*%20the%20list%20returned%20from%20%60_properties%60.%0A%20%20%20%20%20*%20This%20list%20is%20used%20in%20%60_initializeProperties%60%20to%20set%20property%20defaults.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7BPolymerElementConstructor%7D%20constructor%20Element%20class%0A%20%20%20%20%20*%20%40return%20%7BPolymerElementProperties%7D%20Flattened%20properties%20for%20this%20class%0A%20%20%20%20%20*%20%20%20that%20have%20default%20values%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Ffunction%20propertyDefaults(constructor)%7Bif(!constructor.hasOwnProperty(JSCompiler_renameProperty('__propertyDefaults'%2Cconstructor)))%7Bconstructor.__propertyDefaults%3Dnull%3Bvar%20props%3Dconstructor._properties%3Bfor(var%20p%20in%20props)%7Bvar%20info%3Dprops%5Bp%5D%3Bif('value'in%20info)%7Bconstructor.__propertyDefaults%3Dconstructor.__propertyDefaults%7C%7C%7B%7D%3Bconstructor.__propertyDefaults%5Bp%5D%3Dinfo%3B%7D%7D%7Dreturn%20constructor.__propertyDefaults%3B%7D%2F**%0A%20%20%20%20%20*%20Returns%20a%20memoized%20version%20of%20the%20%60observers%60%20array.%0A%20%20%20%20%20*%20%40param%20%7BPolymerElementConstructor%7D%20constructor%20Element%20class%0A%20%20%20%20%20*%20%40return%20%7BArray%7D%20Array%20containing%20own%20observers%20for%20the%20given%20class%0A%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20*%2Ffunction%20ownObservers(constructor)%7Bif(!constructor.hasOwnProperty(JSCompiler_renameProperty('__ownObservers'%2Cconstructor)))%7Bconstructor.__ownObservers%3Dconstructor.hasOwnProperty(JSCompiler_renameProperty('observers'%2Cconstructor))%3F%2F**%20%40type%20%7BPolymerElementConstructor%7D%20*%2Fconstructor.observers%3Anull%3B%7Dreturn%20constructor.__ownObservers%3B%7D%2F**%0A%20%20%20%20%20*%20Creates%20effects%20for%20a%20property.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Note%2C%20once%20a%20property%20has%20been%20set%20to%0A%20%20%20%20%20*%20%60readOnly%60%2C%20%60computed%60%2C%20%60reflectToAttribute%60%2C%20or%20%60notify%60%0A%20%20%20%20%20*%20these%20values%20may%20not%20be%20changed.%20For%20example%2C%20a%20subclass%20cannot%0A%20%20%20%20%20*%20alter%20these%20settings.%20However%2C%20additional%20%60observers%60%20may%20be%20added%0A%20%20%20%20%20*%20by%20subclasses.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20The%20info%20object%20should%20contain%20property%20metadata%20as%20follows%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20*%20%60type%60%3A%20%7Bfunction%7D%20type%20to%20which%20an%20attribute%20matching%20the%20property%0A%20%20%20%20%20*%20is%20deserialized.%20Note%20the%20property%20is%20camel-cased%20from%20a%20dash-cased%0A%20%20%20%20%20*%20attribute.%20For%20example%2C%20'foo-bar'%20attribute%20is%20deserialized%20to%20a%0A%20%20%20%20%20*%20property%20named%20'fooBar'.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20*%20%60readOnly%60%3A%20%7Bboolean%7D%20creates%20a%20readOnly%20property%20and%0A%20%20%20%20%20*%20makes%20a%20private%20setter%20for%20the%20private%20of%20the%20form%20'_setFoo'%20for%20a%0A%20%20%20%20%20*%20property%20'foo'%2C%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20*%20%60computed%60%3A%20%7Bstring%7D%20creates%20a%20computed%20property.%20A%20computed%20property%0A%20%20%20%20%20*%20is%20also%20automatically%20set%20to%20%60readOnly%3A%20true%60.%20The%20value%20is%20calculated%0A%20%20%20%20%20*%20by%20running%20a%20method%20and%20arguments%20parsed%20from%20the%20given%20string.%20For%0A%20%20%20%20%20*%20example%20'compute(foo)'%20will%20compute%20a%20given%20property%20when%20the%0A%20%20%20%20%20*%20'foo'%20property%20changes%20by%20executing%20the%20'compute'%20method.%20This%20method%0A%20%20%20%20%20*%20must%20return%20the%20computed%20value.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20*%20%60reflectToAttribute%60%3A%20%7Bboolean%7D%20If%20true%2C%20the%20property%20value%20is%20reflected%0A%20%20%20%20%20*%20to%20an%20attribute%20of%20the%20same%20name.%20Note%2C%20the%20attribute%20is%20dash-cased%0A%20%20%20%20%20*%20so%20a%20property%20named%20'fooBar'%20is%20reflected%20as%20'foo-bar'.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20*%20%60notify%60%3A%20%7Bboolean%7D%20sends%20a%20non-bubbling%20notification%20event%20when%0A%20%20%20%20%20*%20the%20property%20changes.%20For%20example%2C%20a%20property%20named%20'foo'%20sends%20an%0A%20%20%20%20%20*%20event%20named%20'foo-changed'%20with%20%60event.detail%60%20set%20to%20the%20value%20of%0A%20%20%20%20%20*%20the%20property.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20*%20observer%3A%20%7Bstring%7D%20name%20of%20a%20method%20that%20runs%20when%20the%20property%0A%20%20%20%20%20*%20changes.%20The%20arguments%20of%20the%20method%20are%20(value%2C%20previousValue).%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Note%3A%20Users%20may%20want%20control%20over%20modifying%20property%0A%20%20%20%20%20*%20effects%20via%20subclassing.%20For%20example%2C%20a%20user%20might%20want%20to%20make%20a%0A%20%20%20%20%20*%20reflectToAttribute%20property%20not%20do%20so%20in%20a%20subclass.%20We've%20chosen%20to%0A%20%20%20%20%20*%20disable%20this%20because%20it%20leads%20to%20additional%20complication.%0A%20%20%20%20%20*%20For%20example%2C%20a%20readOnly%20effect%20generates%20a%20special%20setter.%20If%20a%20subclass%0A%20%20%20%20%20*%20disables%20the%20effect%2C%20the%20setter%20would%20fail%20unexpectedly.%0A%20%20%20%20%20*%20Based%20on%20feedback%2C%20we%20may%20want%20to%20try%20to%20make%20effects%20more%20malleable%0A%20%20%20%20%20*%20and%2For%20provide%20an%20advanced%20api%20for%20manipulating%20them.%0A%20%20%20%20%20*%20Also%20consider%20adding%20warnings%20when%20an%20effect%20cannot%20be%20changed.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7B!PolymerElement%7D%20proto%20Element%20class%20prototype%20to%20add%20accessors%0A%20%20%20%20%20*%20%20%20and%20effects%20to%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20name%20Name%20of%20the%20property.%0A%20%20%20%20%20*%20%40param%20%7BObject%7D%20info%20Info%20object%20from%20which%20to%20create%20property%20effects.%0A%20%20%20%20%20*%20Supported%20keys%3A%0A%20%20%20%20%20*%20%40param%20%7BObject%7D%20allProps%20Flattened%20map%20of%20all%20properties%20defined%20in%20this%0A%20%20%20%20%20*%20%20%20element%20(including%20inherited%20properties)%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Ffunction%20createPropertyFromConfig(proto%2Cname%2Cinfo%2CallProps)%7B%2F%2F%20computed%20forces%20readOnly...%0Aif(info.computed)%7Binfo.readOnly%3Dtrue%3B%7D%2F%2F%20Note%2C%20since%20all%20computed%20properties%20are%20readOnly%2C%20this%20prevents%0A%2F%2F%20adding%20additional%20computed%20property%20effects%20(which%20leads%20to%20a%20confusing%0A%2F%2F%20setup%20where%20multiple%20triggers%20for%20setting%20a%20property)%0A%2F%2F%20While%20we%20do%20have%20%60hasComputedEffect%60%20this%20is%20set%20on%20the%20property's%0A%2F%2F%20dependencies%20rather%20than%20itself.%0Aif(info.computed%26%26!proto._hasReadOnlyEffect(name))%7Bproto._createComputedProperty(name%2Cinfo.computed%2CallProps)%3B%7Dif(info.readOnly%26%26!proto._hasReadOnlyEffect(name))%7Bproto._createReadOnlyProperty(name%2C!info.computed)%3B%7Dif(info.reflectToAttribute%26%26!proto._hasReflectEffect(name))%7Bproto._createReflectedProperty(name)%3B%7Dif(info.notify%26%26!proto._hasNotifyEffect(name))%7Bproto._createNotifyingProperty(name)%3B%7D%2F%2F%20always%20add%20observer%0Aif(info.observer)%7Bproto._createPropertyObserver(name%2Cinfo.observer%2CallProps%5Binfo.observer%5D)%3B%7D%2F%2F%20always%20create%20the%20mapping%20from%20attribute%20back%20to%20property%20for%20deserialization.%0Aproto._addPropertyToAttributeMap(name)%3B%7D%2F**%0A%20%20%20%20%20*%20Process%20all%20style%20elements%20in%20the%20element%20template.%20Styles%20with%20the%0A%20%20%20%20%20*%20%60include%60%20attribute%20are%20processed%20such%20that%20any%20styles%20in%0A%20%20%20%20%20*%20the%20associated%20%22style%20modules%22%20are%20included%20in%20the%20element%20template.%0A%20%20%20%20%20*%20%40param%20%7BPolymerElementConstructor%7D%20klass%20Element%20class%0A%20%20%20%20%20*%20%40param%20%7B!HTMLTemplateElement%7D%20template%20Template%20to%20process%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20is%20Name%20of%20element%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20baseURI%20Base%20URI%20for%20element%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Ffunction%20processElementStyles(klass%2Ctemplate%2Cis%2CbaseURI)%7Bif(!builtCSS)%7Bvar%20templateStyles%3Dtemplate.content.querySelectorAll('style')%3Bvar%20stylesWithImports%3DPolymer.StyleGather.stylesFromTemplate(template)%3B%2F%2F%20insert%20styles%20from%20%3Clink%20rel%3D%22import%22%20type%3D%22css%22%3E%20at%20the%20top%20of%20the%20template%0Avar%20linkedStyles%3DPolymer.StyleGather.stylesFromModuleImports(is)%3Bvar%20firstTemplateChild%3Dtemplate.content.firstElementChild%3Bfor(var%20idx%3D0%3Bidx%3ClinkedStyles.length%3Bidx%2B%2B)%7Bvar%20s%3DlinkedStyles%5Bidx%5D%3Bs.textContent%3Dklass._processStyleText(s.textContent%2CbaseURI)%3Btemplate.content.insertBefore(s%2CfirstTemplateChild)%3B%7D%2F%2F%20keep%20track%20of%20the%20last%20%22concrete%22%20style%20in%20the%20template%20we%20have%20encountered%0Avar%20templateStyleIndex%3D0%3B%2F%2F%20ensure%20all%20gathered%20styles%20are%20actually%20in%20this%20template.%0Afor(var%20i%3D0%3Bi%3CstylesWithImports.length%3Bi%2B%2B)%7Bvar%20_s%3DstylesWithImports%5Bi%5D%3Bvar%20templateStyle%3DtemplateStyles%5BtemplateStyleIndex%5D%3B%2F%2F%20if%20the%20style%20is%20not%20in%20this%20template%2C%20it's%20been%20%22included%22%20and%0A%2F%2F%20we%20put%20a%20clone%20of%20it%20in%20the%20template%20before%20the%20style%20that%20included%20it%0Aif(templateStyle!%3D%3D_s)%7B_s%3D_s.cloneNode(true)%3BtemplateStyle.parentNode.insertBefore(_s%2CtemplateStyle)%3B%7Delse%7BtemplateStyleIndex%2B%2B%3B%7D_s.textContent%3Dklass._processStyleText(_s.textContent%2CbaseURI)%3B%7D%7Dif(window.ShadyCSS)%7Bwindow.ShadyCSS.prepareTemplate(template%2Cis)%3B%7D%7D%2F**%0A%20%20%20%20%20*%20Look%20up%20template%20from%20dom-module%20for%20element%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7B!string%7D%20is%20Element%20name%20to%20look%20up%0A%20%20%20%20%20*%20%40return%20%7B!HTMLTemplateElement%7D%20Template%20found%20in%20dom%20module%2C%20or%0A%20%20%20%20%20*%20%20%20undefined%20if%20not%20found%0A%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20*%2Ffunction%20getTemplateFromDomModule(is)%7Bvar%20template%3Dnull%3Bif(is%26%26Polymer.DomModule)%7Btemplate%3DPolymer.DomModule.import(is%2C'template')%3B%2F%2F%20Under%20strictTemplatePolicy%2C%20require%20any%20element%20with%20an%20%60is%60%0A%2F%2F%20specified%20to%20have%20a%20dom-module%0Aif(Polymer.strictTemplatePolicy%26%26!template)%7Bthrow%20new%20Error('strictTemplatePolicy%3A%20expecting%20dom-module%20or%20null%20template%20for%20'%2Bis)%3B%7D%7Dreturn%20template%3B%7D%2F**%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40mixinClass%0A%20%20%20%20%20*%20%40unrestricted%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_ElementMixin%7D%0A%20%20%20%20%20*%2Fvar%20PolymerElement%3Dfunction(_polymerElementBase)%7B_inherits(PolymerElement%2C_polymerElementBase)%3B_createClass(PolymerElement%2Cnull%2C%5B%7Bkey%3A'_finalizeClass'%2C%2F**%0A%20%20%20%20%20%20%20*%20Override%20of%20PropertiesMixin%20_finalizeClass%20to%20create%20observers%20and%0A%20%20%20%20%20%20%20*%20find%20the%20template.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20Interfaces%20in%20closure%20do%20not%20inherit%20statics%2C%20but%20classes%20do%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_finalizeClass()%7B_get(PolymerElement.__proto__%7C%7CObject.getPrototypeOf(PolymerElement)%2C'_finalizeClass'%2Cthis).call(this)%3Bvar%20observers%3DownObservers(this)%3Bif(observers)%7Bthis.createObservers(observers%2Cthis._properties)%3B%7Dthis._prepareTemplate()%3B%7D%7D%2C%7Bkey%3A'_prepareTemplate'%2Cvalue%3Afunction%20_prepareTemplate()%7B%2F%2F%20note%3A%20create%20%22working%22%20template%20that%20is%20finalized%20at%20instance%20time%0Avar%20template%3D%2F**%20%40type%20%7BPolymerElementConstructor%7D%20*%2Fthis.template%3Bif(template)%7Bif(typeof%20template%3D%3D%3D'string')%7Bvar%20t%3Ddocument.createElement('template')%3Bt.innerHTML%3Dtemplate%3Btemplate%3Dt%3B%7Delse%20if(!Polymer.legacyOptimizations)%7Btemplate%3Dtemplate.cloneNode(true)%3B%7D%7Dthis.prototype._template%3Dtemplate%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Override%20of%20PropertiesChanged%20createProperties%20to%20create%20accessors%0A%20%20%20%20%20%20%20*%20and%20property%20effects%20for%20all%20of%20the%20properties.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'createProperties'%2Cvalue%3Afunction%20createProperties(props)%7Bfor(var%20p%20in%20props)%7BcreatePropertyFromConfig(this.prototype%2Cp%2Cprops%5Bp%5D%2Cprops)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Creates%20observers%20for%20the%20given%20%60observers%60%20array.%0A%20%20%20%20%20%20%20*%20Leverages%20%60PropertyEffects%60%20to%20create%20observers.%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20observers%20Array%20of%20observer%20descriptors%20for%0A%20%20%20%20%20%20%20*%20%20%20this%20class%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20dynamicFns%20Object%20containing%20keys%20for%20any%20properties%0A%20%20%20%20%20%20%20*%20%20%20that%20are%20functions%20and%20should%20trigger%20the%20effect%20when%20the%20function%0A%20%20%20%20%20%20%20*%20%20%20reference%20is%20changed%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'createObservers'%2Cvalue%3Afunction%20createObservers(observers%2CdynamicFns)%7Bvar%20proto%3Dthis.prototype%3Bfor(var%20i%3D0%3Bi%3Cobservers.length%3Bi%2B%2B)%7Bproto._createMethodObserver(observers%5Bi%5D%2CdynamicFns)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20the%20template%20that%20will%20be%20stamped%20into%20this%20element's%20shadow%20root.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20If%20a%20%60static%20get%20is()%60%20getter%20is%20defined%2C%20the%20default%20implementation%0A%20%20%20%20%20%20%20*%20will%20return%20the%20first%20%60%3Ctemplate%3E%60%20in%20a%20%60dom-module%60%20whose%20%60id%60%0A%20%20%20%20%20%20%20*%20matches%20this%20element's%20%60is%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Users%20may%20override%20this%20getter%20to%20return%20an%20arbitrary%20template%0A%20%20%20%20%20%20%20*%20(in%20which%20case%20the%20%60is%60%20getter%20is%20unnecessary).%20The%20template%20returned%0A%20%20%20%20%20%20%20*%20may%20be%20either%20an%20%60HTMLTemplateElement%60%20or%20a%20string%20that%20will%20be%0A%20%20%20%20%20%20%20*%20automatically%20parsed%20into%20a%20template.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%20that%20when%20subclassing%2C%20if%20the%20super%20class%20overrode%20the%20default%0A%20%20%20%20%20%20%20*%20implementation%20and%20the%20subclass%20would%20like%20to%20provide%20an%20alternate%0A%20%20%20%20%20%20%20*%20template%20via%20a%20%60dom-module%60%2C%20it%20should%20override%20this%20getter%20and%0A%20%20%20%20%20%20%20*%20return%20%60Polymer.DomModule.import(this.is%2C%20'template')%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20If%20a%20subclass%20would%20like%20to%20modify%20the%20super%20class%20template%2C%20it%20should%0A%20%20%20%20%20%20%20*%20clone%20it%20rather%20than%20modify%20it%20in%20place.%20%20If%20the%20getter%20does%20expensive%0A%20%20%20%20%20%20%20*%20work%20such%20as%20cloning%2Fmodifying%20a%20template%2C%20it%20should%20memoize%20the%0A%20%20%20%20%20%20%20*%20template%20for%20maximum%20performance%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%20%20let%20memoizedTemplate%3B%0A%20%20%20%20%20%20%20*%20%20%20class%20MySubClass%20extends%20MySuperClass%20%7B%0A%20%20%20%20%20%20%20*%20%20%20%20%20static%20get%20template()%20%7B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20if%20(!memoizedTemplate)%20%7B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20memoizedTemplate%20%3D%20MySuperClass.template.cloneNode(true)%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20let%20subContent%20%3D%20document.createElement('div')%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20subContent.textContent%20%3D%20'This%20came%20from%20MySubClass'%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20memoizedTemplate.content.appendChild(subContent)%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20return%20memoizedTemplate%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20*%20%20%20%7D%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7BHTMLTemplateElement%7Cstring%7D%20Template%20to%20be%20stamped%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'template'%2Cget%3Afunction%20get()%7B%2F%2F%20Explanation%20of%20template-related%20properties%3A%0A%2F%2F%20-%20constructor.template%20(this%20getter)%3A%20the%20template%20for%20the%20class.%0A%2F%2F%20%20%20%20%20This%20can%20come%20from%20the%20prototype%20(for%20legacy%20elements)%2C%20from%20a%0A%2F%2F%20%20%20%20%20dom-module%2C%20or%20from%20the%20super%20class's%20template%20(or%20can%20be%20overridden%0A%2F%2F%20%20%20%20%20altogether%20by%20the%20user)%0A%2F%2F%20-%20constructor._template%3A%20memoized%20version%20of%20constructor.template%0A%2F%2F%20-%20prototype._template%3A%20working%20template%20for%20the%20element%2C%20which%20will%20be%0A%2F%2F%20%20%20%20%20parsed%20and%20modified%20in%20place.%20It%20is%20a%20cloned%20version%20of%0A%2F%2F%20%20%20%20%20constructor.template%2C%20saved%20in%20_finalizeClass().%20Note%20that%20before%0A%2F%2F%20%20%20%20%20this%20getter%20is%20called%2C%20for%20legacy%20elements%20this%20could%20be%20from%20a%0A%2F%2F%20%20%20%20%20_template%20field%20on%20the%20info%20object%20passed%20to%20Polymer()%2C%20a%20behavior%2C%0A%2F%2F%20%20%20%20%20or%20set%20in%20registered()%3B%20once%20the%20static%20getter%20runs%2C%20a%20clone%20of%20it%0A%2F%2F%20%20%20%20%20will%20overwrite%20it%20on%20the%20prototype%20as%20the%20working%20template.%0Aif(!this.hasOwnProperty(JSCompiler_renameProperty('_template'%2Cthis)))%7Bthis._template%3D%2F%2F%20If%20user%20has%20put%20template%20on%20prototype%20(e.g.%20in%20legacy%20via%20registered%0A%2F%2F%20callback%20or%20info%20object)%2C%20prefer%20that%20first%0Athis.prototype.hasOwnProperty(JSCompiler_renameProperty('_template'%2Cthis.prototype))%3Fthis.prototype._template%3A%2F%2F%20Look%20in%20dom-module%20associated%20with%20this%20element's%20is%0AgetTemplateFromDomModule(%2F**%20%40type%20%7BPolymerElementConstructor%7D*%2Fthis.is)%7C%7C%2F%2F%20Next%20look%20for%20superclass%20template%20(call%20the%20super%20impl%20this%0A%2F%2F%20way%20so%20that%20%60this%60%20points%20to%20the%20superclass)%0AObject.getPrototypeOf(%2F**%20%40type%20%7BPolymerElementConstructor%7D*%2Fthis.prototype).constructor.template%3B%7Dreturn%20this._template%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Set%20the%20template.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!HTMLTemplateElement%7Cstring%7D%20value%20Template%20to%20set.%0A%20%20%20%20%20%20%20*%2F%2Cset%3Afunction%20set(value)%7Bthis._template%3Dvalue%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Path%20matching%20the%20url%20from%20which%20the%20element%20was%20imported.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20path%20is%20used%20to%20resolve%20url's%20in%20template%20style%20cssText.%0A%20%20%20%20%20%20%20*%20The%20%60importPath%60%20property%20is%20also%20set%20on%20element%20instances%20and%20can%20be%0A%20%20%20%20%20%20%20*%20used%20to%20create%20bindings%20relative%20to%20the%20import%20path.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20For%20elements%20defined%20in%20ES%20modules%2C%20users%20should%20implement%0A%20%20%20%20%20%20%20*%20%60static%20get%20importMeta()%20%7B%20return%20import.meta%3B%20%7D%60%2C%20and%20the%20default%0A%20%20%20%20%20%20%20*%20implementation%20of%20%60importPath%60%20will%20%20return%20%60import.meta.url%60's%20path.%0A%20%20%20%20%20%20%20*%20For%20elements%20defined%20in%20HTML%20imports%2C%20this%20getter%20will%20return%20the%20path%0A%20%20%20%20%20%20%20*%20to%20the%20document%20containing%20a%20%60dom-module%60%20element%20matching%20this%0A%20%20%20%20%20%20%20*%20element's%20static%20%60is%60%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%2C%20this%20path%20should%20contain%20a%20trailing%20%60%2F%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bstring%7D%20The%20import%20path%20for%20this%20element%20class%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'importPath'%2Cget%3Afunction%20get()%7Bif(!this.hasOwnProperty(JSCompiler_renameProperty('_importPath'%2Cthis)))%7Bvar%20meta%3Dthis.importMeta%3Bif(meta)%7Bthis._importPath%3DPolymer.ResolveUrl.pathFromUrl(meta.url)%3B%7Delse%7Bvar%20module%3DPolymer.DomModule%26%26Polymer.DomModule.import(%2F**%20%40type%20%7BPolymerElementConstructor%7D%20*%2Fthis.is)%3Bthis._importPath%3Dmodule%26%26module.assetpath%7C%7CObject.getPrototypeOf(%2F**%20%40type%20%7BPolymerElementConstructor%7D*%2Fthis.prototype).constructor.importPath%3B%7D%7Dreturn%20this._importPath%3B%7D%7D%5D)%3Bfunction%20PolymerElement()%7B_classCallCheck(this%2CPolymerElement)%3B%2F**%20%40type%20%7BHTMLTemplateElement%7D%20*%2Fvar%20_this%3D_possibleConstructorReturn(this%2C(PolymerElement.__proto__%7C%7CObject.getPrototypeOf(PolymerElement)).call(this))%3B_this._template%3B%2F**%20%40type%20%7Bstring%7D%20*%2F_this._importPath%3B%2F**%20%40type%20%7Bstring%7D%20*%2F_this.rootPath%3B%2F**%20%40type%20%7Bstring%7D%20*%2F_this.importPath%3B%2F**%20%40type%20%7BStampedTemplate%20%7C%20HTMLElement%20%7C%20ShadowRoot%7D%20*%2F_this.root%3B%2F**%20%40type%20%7B!Object%3Cstring%2C%20!Element%3E%7D%20*%2F_this.%24%3Breturn%20_this%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20the%20default%20%60Polymer.PropertyAccessors%60%20to%20ensure%20class%0A%20%20%20%20%20%20%20*%20metaprogramming%20related%20to%20property%20accessors%20and%20effects%20has%0A%20%20%20%20%20%20%20*%20completed%20(calls%20%60finalize%60).%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20It%20also%20initializes%20any%20property%20defaults%20provided%20via%20%60value%60%20in%0A%20%20%20%20%20%20%20*%20%60properties%60%20metadata.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%0A%20%20%20%20%20%20%20*%2F_createClass(PolymerElement%2C%5B%7Bkey%3A'_initializeProperties'%2Cvalue%3Afunction%20_initializeProperties()%7Bthis.constructor.finalize()%3B%2F%2F%20note%3A%20finalize%20template%20when%20we%20have%20access%20to%20%60localName%60%20to%0A%2F%2F%20avoid%20dependence%20on%20%60is%60%20for%20polyfilling%20styling.%0Athis.constructor._finalizeTemplate(%2F**%20%40type%20%7B!HTMLElement%7D%20*%2Fthis.localName)%3B_get(PolymerElement.prototype.__proto__%7C%7CObject.getPrototypeOf(PolymerElement.prototype)%2C'_initializeProperties'%2Cthis).call(this)%3B%2F%2F%20set%20path%20defaults%0Athis.rootPath%3DPolymer.rootPath%3Bthis.importPath%3Dthis.constructor.importPath%3B%2F%2F%20apply%20property%20defaults...%0Avar%20p%24%3DpropertyDefaults(this.constructor)%3Bif(!p%24)%7Breturn%3B%7Dfor(var%20p%20in%20p%24)%7Bvar%20info%3Dp%24%5Bp%5D%3B%2F%2F%20Don't%20set%20default%20value%20if%20there%20is%20already%20an%20own%20property%2C%20which%0A%2F%2F%20happens%20when%20a%20%60properties%60%20property%20with%20default%20but%20no%20effects%20had%0A%2F%2F%20a%20property%20set%20(e.g.%20bound)%20by%20its%20host%20before%20upgrade%0Aif(!this.hasOwnProperty(p))%7Bvar%20value%3Dtypeof%20info.value%3D%3D'function'%3Finfo.value.call(this)%3Ainfo.value%3B%2F%2F%20Set%20via%20%60_setProperty%60%20if%20there%20is%20an%20accessor%2C%20to%20enable%0A%2F%2F%20initializing%20readOnly%20property%20defaults%0Aif(this._hasAccessor(p))%7Bthis._setPendingProperty(p%2Cvalue%2Ctrue)%3B%7Delse%7Bthis%5Bp%5D%3Dvalue%3B%7D%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Gather%20style%20text%20for%20a%20style%20element%20in%20the%20template.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20cssText%20Text%20containing%20styling%20to%20process%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20baseURI%20Base%20URI%20to%20rebase%20CSS%20paths%20against%0A%20%20%20%20%20%20%20*%20%40return%20%7Bstring%7D%20The%20processed%20CSS%20text%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'connectedCallback'%2C%2F**%0A%20%20%20%20%20%20%20*%20Provides%20a%20default%20implementation%20of%20the%20standard%20Custom%20Elements%0A%20%20%20%20%20%20%20*%20%60connectedCallback%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20default%20implementation%20enables%20the%20property%20effects%20system%20and%0A%20%20%20%20%20%20%20*%20flushes%20any%20pending%20properties%2C%20and%20updates%20shimmed%20CSS%20properties%0A%20%20%20%20%20%20%20*%20when%20using%20the%20ShadyCSS%20scoping%2Fcustom%20properties%20polyfill.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%2C%20invalidCasts%7D%20Super%20may%20or%20may%20not%20implement%20the%20callback%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20connectedCallback()%7Bif(window.ShadyCSS%26%26this._template)%7Bwindow.ShadyCSS.styleElement(%2F**%20%40type%20%7B!HTMLElement%7D%20*%2Fthis)%3B%7D_get(PolymerElement.prototype.__proto__%7C%7CObject.getPrototypeOf(PolymerElement.prototype)%2C'connectedCallback'%2Cthis).call(this)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Stamps%20the%20element%20template.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'ready'%2Cvalue%3Afunction%20ready()%7Bif(this._template)%7Bthis.root%3Dthis._stampTemplate(this._template)%3Bthis.%24%3Dthis.root.%24%3B%7D_get(PolymerElement.prototype.__proto__%7C%7CObject.getPrototypeOf(PolymerElement.prototype)%2C'ready'%2Cthis).call(this)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Implements%20%60PropertyEffects%60's%20%60_readyClients%60%20call.%20Attaches%0A%20%20%20%20%20%20%20*%20element%20dom%20by%20calling%20%60_attachDom%60%20with%20the%20dom%20stamped%20from%20the%0A%20%20%20%20%20%20%20*%20element's%20template%20via%20%60_stampTemplate%60.%20Note%20that%20this%20allows%0A%20%20%20%20%20%20%20*%20client%20dom%20to%20be%20attached%20to%20the%20element%20prior%20to%20any%20observers%0A%20%20%20%20%20%20%20*%20running.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_readyClients'%2Cvalue%3Afunction%20_readyClients()%7Bif(this._template)%7Bthis.root%3Dthis._attachDom(%2F**%20%40type%20%7BStampedTemplate%7D%20*%2Fthis.root)%3B%7D%2F%2F%20The%20super._readyClients%20here%20sets%20the%20clients%20initialized%20flag.%0A%2F%2F%20We%20must%20wait%20to%20do%20this%20until%20after%20client%20dom%20is%20created%2Fattached%0A%2F%2F%20so%20that%20this%20flag%20can%20be%20checked%20to%20prevent%20notifications%20fired%0A%2F%2F%20during%20this%20process%20from%20being%20handled%20before%20clients%20are%20ready.%0A_get(PolymerElement.prototype.__proto__%7C%7CObject.getPrototypeOf(PolymerElement.prototype)%2C'_readyClients'%2Cthis).call(this)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Attaches%20an%20element's%20stamped%20dom%20to%20itself.%20By%20default%2C%0A%20%20%20%20%20%20%20*%20this%20method%20creates%20a%20%60shadowRoot%60%20and%20adds%20the%20dom%20to%20it.%0A%20%20%20%20%20%20%20*%20However%2C%20this%20method%20may%20be%20overridden%20to%20allow%20an%20element%0A%20%20%20%20%20%20%20*%20to%20put%20its%20dom%20in%20another%20location.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40throws%20%7BError%7D%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingReturn%7D%0A%20%20%20%20%20%20%20*%20%40param%20%7BStampedTemplate%7D%20dom%20to%20attach%20to%20the%20element.%0A%20%20%20%20%20%20%20*%20%40return%20%7BShadowRoot%7D%20node%20to%20which%20the%20dom%20has%20been%20attached.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_attachDom'%2Cvalue%3Afunction%20_attachDom(dom)%7Bif(this.attachShadow)%7Bif(dom)%7Bif(!this.shadowRoot)%7Bthis.attachShadow(%7Bmode%3A'open'%7D)%3B%7Dthis.shadowRoot.appendChild(dom)%3Breturn%20this.shadowRoot%3B%7Dreturn%20null%3B%7Delse%7Bthrow%20new%20Error('ShadowDOM%20not%20available.%20'%2B%2F%2F%20TODO(sorvell)%3A%20move%20to%20compile-time%20conditional%20when%20supported%0A'Polymer.Element%20can%20create%20dom%20as%20children%20instead%20of%20in%20'%2B'ShadowDOM%20by%20setting%20%60this.root%20%3D%20this%3B%5C%60%20before%20%5C%60ready%5C%60.')%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20When%20using%20the%20ShadyCSS%20scoping%20and%20custom%20property%20shim%2C%20causes%20all%0A%20%20%20%20%20%20%20*%20shimmed%20styles%20in%20this%20element%20(and%20its%20subtree)%20to%20be%20updated%0A%20%20%20%20%20%20%20*%20based%20on%20current%20custom%20property%20values.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20optional%20parameter%20overrides%20inline%20custom%20property%20styles%20with%20an%0A%20%20%20%20%20%20%20*%20object%20of%20properties%20where%20the%20keys%20are%20CSS%20properties%2C%20and%20the%20values%0A%20%20%20%20%20%20%20*%20are%20strings.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Example%3A%20%60this.updateStyles(%7B'--color'%3A%20'blue'%7D)%60%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20These%20properties%20are%20retained%20unless%20a%20value%20of%20%60null%60%20is%20set.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%3A%20This%20function%20does%20not%20support%20updating%20CSS%20mixins.%0A%20%20%20%20%20%20%20*%20You%20can%20not%20dynamically%20change%20the%20value%20of%20an%20%60%40apply%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20properties%20Bag%20of%20custom%20property%20key%2Fvalues%20to%0A%20%20%20%20%20%20%20*%20%20%20apply%20to%20this%20element.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'updateStyles'%2Cvalue%3Afunction%20updateStyles(properties)%7Bif(window.ShadyCSS)%7Bwindow.ShadyCSS.styleSubtree(%2F**%20%40type%20%7B!HTMLElement%7D%20*%2Fthis%2Cproperties)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Rewrites%20a%20given%20URL%20relative%20to%20a%20base%20URL.%20The%20base%20URL%20defaults%20to%0A%20%20%20%20%20%20%20*%20the%20original%20location%20of%20the%20document%20containing%20the%20%60dom-module%60%20for%0A%20%20%20%20%20%20%20*%20this%20element.%20This%20method%20will%20return%20the%20same%20URL%20before%20and%20after%0A%20%20%20%20%20%20%20*%20bundling.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%20that%20this%20function%20performs%20no%20resolution%20for%20URLs%20that%20start%0A%20%20%20%20%20%20%20*%20with%20%60%2F%60%20(absolute%20URLs)%20or%20%60%23%60%20(hash%20identifiers).%20%20For%20general%20purpose%0A%20%20%20%20%20%20%20*%20URL%20resolution%2C%20use%20%60window.URL%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20url%20URL%20to%20resolve.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%3D%7D%20base%20Optional%20base%20URL%20to%20resolve%20against%2C%20defaults%0A%20%20%20%20%20%20%20*%20to%20the%20element's%20%60importPath%60%0A%20%20%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Rewritten%20URL%20relative%20to%20base%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'resolveUrl'%2Cvalue%3Afunction%20resolveUrl(url%2Cbase)%7Bif(!base%26%26this.importPath)%7Bbase%3DPolymer.ResolveUrl.resolveUrl(this.importPath)%3B%7Dreturn%20Polymer.ResolveUrl.resolveUrl(url%2Cbase)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20%60PropertyAccessors%60%20to%20add%20map%20of%20dynamic%20functions%20on%0A%20%20%20%20%20%20%20*%20template%20info%2C%20for%20consumption%20by%20%60PropertyEffects%60%20template%20binding%0A%20%20%20%20%20%20%20*%20code.%20This%20map%20determines%20which%20method%20templates%20should%20have%20accessors%0A%20%20%20%20%20%20%20*%20created%20for%20them.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20Interfaces%20in%20closure%20do%20not%20inherit%20statics%2C%20but%20classes%20do%0A%20%20%20%20%20%20%20*%2F%7D%5D%2C%5B%7Bkey%3A'_processStyleText'%2Cvalue%3Afunction%20_processStyleText(cssText%2CbaseURI)%7Breturn%20Polymer.ResolveUrl.resolveCss(cssText%2CbaseURI)%3B%7D%2F**%0A%20%20%20%20%20%20*%20Configures%20an%20element%20%60proto%60%20to%20function%20with%20a%20given%20%60template%60.%0A%20%20%20%20%20%20*%20The%20element%20name%20%60is%60%20and%20extends%20%60ext%60%20must%20be%20specified%20for%20ShadyCSS%0A%20%20%20%20%20%20*%20style%20scoping.%0A%20%20%20%20%20%20*%0A%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20is%20Tag%20name%20(or%20type%20extension%20name)%20for%20this%20element%0A%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_finalizeTemplate'%2Cvalue%3Afunction%20_finalizeTemplate(is)%7B%2F**%20%40const%20%7BHTMLTemplateElement%7D%20*%2Fvar%20template%3Dthis.prototype._template%3Bif(template%26%26!template.__polymerFinalized)%7Btemplate.__polymerFinalized%3Dtrue%3Bvar%20importPath%3Dthis.importPath%3Bvar%20baseURI%3DimportPath%3FPolymer.ResolveUrl.resolveUrl(importPath)%3A''%3B%2F%2F%20e.g.%20support%20%60include%3D%22module-name%22%60%2C%20and%20ShadyCSS%0AprocessElementStyles(this%2Ctemplate%2Cis%2CbaseURI)%3Bthis.prototype._bindTemplate(template)%3B%7D%7D%7D%2C%7Bkey%3A'_parseTemplateContent'%2Cvalue%3Afunction%20_parseTemplateContent(template%2CtemplateInfo%2CnodeInfo)%7BtemplateInfo.dynamicFns%3DtemplateInfo.dynamicFns%7C%7Cthis._properties%3Breturn%20_get(PolymerElement.__proto__%7C%7CObject.getPrototypeOf(PolymerElement)%2C'_parseTemplateContent'%2Cthis).call(this%2Ctemplate%2CtemplateInfo%2CnodeInfo)%3B%7D%7D%5D)%3Breturn%20PolymerElement%3B%7D(polymerElementBase)%3Breturn%20PolymerElement%3B%7D)%3B%2F**%0A%20%20%20*%20When%20using%20the%20ShadyCSS%20scoping%20and%20custom%20property%20shim%2C%20causes%20all%0A%20%20%20*%20shimmed%20%60styles%60%20(via%20%60custom-style%60)%20in%20the%20document%20(and%20its%20subtree)%0A%20%20%20*%20to%20be%20updated%20based%20on%20current%20custom%20property%20values.%0A%20%20%20*%0A%20%20%20*%20The%20optional%20parameter%20overrides%20inline%20custom%20property%20styles%20with%20an%0A%20%20%20*%20object%20of%20properties%20where%20the%20keys%20are%20CSS%20properties%2C%20and%20the%20values%0A%20%20%20*%20are%20strings.%0A%20%20%20*%0A%20%20%20*%20Example%3A%20%60Polymer.updateStyles(%7B'--color'%3A%20'blue'%7D)%60%0A%20%20%20*%0A%20%20%20*%20These%20properties%20are%20retained%20unless%20a%20value%20of%20%60null%60%20is%20set.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BObject%3D%7D%20props%20Bag%20of%20custom%20property%20key%2Fvalues%20to%0A%20%20%20*%20%20%20apply%20to%20the%20document.%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%2FPolymer.updateStyles%3Dfunction(props)%7Bif(window.ShadyCSS)%7Bwindow.ShadyCSS.styleDocument(props)%3B%7D%7D%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Fmixins%2Felement-mixin.html.js%0A",
            "resourceBytes": 30666,
            "encodedBytes": 0,
            "unusedBytes": 12276
          },
          {
            "name": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7D(function()%7B'use%20strict'%3B%2F**%0A%20%20%20*%20%40summary%20Collapse%20multiple%20callbacks%20into%20one%20invocation%20after%20a%20timer.%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%2Fvar%20Debouncer%3Dfunction()%7Bfunction%20Debouncer()%7B_classCallCheck(this%2CDebouncer)%3Bthis._asyncModule%3Dnull%3Bthis._callback%3Dnull%3Bthis._timer%3Dnull%3B%7D%2F**%0A%20%20%20%20%20*%20Sets%20the%20scheduler%3B%20that%20is%2C%20a%20module%20with%20the%20Async%20interface%2C%0A%20%20%20%20%20*%20a%20callback%20and%20optional%20arguments%20to%20be%20passed%20to%20the%20run%20function%0A%20%20%20%20%20*%20from%20the%20async%20module.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7B!AsyncInterface%7D%20asyncModule%20Object%20with%20Async%20interface.%0A%20%20%20%20%20*%20%40param%20%7Bfunction()%7D%20callback%20Callback%20to%20run.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F_createClass(Debouncer%2C%5B%7Bkey%3A'setConfig'%2Cvalue%3Afunction%20setConfig(asyncModule%2Ccallback)%7Bvar%20_this%3Dthis%3Bthis._asyncModule%3DasyncModule%3Bthis._callback%3Dcallback%3Bthis._timer%3Dthis._asyncModule.run(function()%7B_this._timer%3Dnull%3B_this._callback()%3B%7D)%3B%7D%2F**%0A%20%20%20%20%20*%20Cancels%20an%20active%20debouncer%20and%20returns%20a%20reference%20to%20itself.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'cancel'%2Cvalue%3Afunction%20cancel()%7Bif(this.isActive())%7Bthis._asyncModule.cancel(this._timer)%3Bthis._timer%3Dnull%3B%7D%7D%2F**%0A%20%20%20%20%20*%20Flushes%20an%20active%20debouncer%20and%20returns%20a%20reference%20to%20itself.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'flush'%2Cvalue%3Afunction%20flush()%7Bif(this.isActive())%7Bthis.cancel()%3Bthis._callback()%3B%7D%7D%2F**%0A%20%20%20%20%20*%20Returns%20true%20if%20the%20debouncer%20is%20active.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20active.%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'isActive'%2Cvalue%3Afunction%20isActive()%7Breturn%20this._timer!%3Dnull%3B%7D%2F**%0A%20%20%20%20%20*%20Creates%20a%20debouncer%20if%20no%20debouncer%20is%20passed%20as%20a%20parameter%0A%20%20%20%20%20*%20or%20it%20cancels%20an%20active%20debouncer%20otherwise.%20The%20following%0A%20%20%20%20%20*%20example%20shows%20how%20a%20debouncer%20can%20be%20called%20multiple%20times%20within%20a%0A%20%20%20%20%20*%20microtask%20and%20%22debounced%22%20such%20that%20the%20provided%20callback%20function%20is%0A%20%20%20%20%20*%20called%20once.%20Add%20this%20method%20to%20a%20custom%20element%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20_debounceWork()%20%7B%0A%20%20%20%20%20*%20%20%20this._debounceJob%20%3D%20Polymer.Debouncer.debounce(this._debounceJob%2C%0A%20%20%20%20%20*%20%20%20%20%20%20%20Polymer.Async.microTask%2C%20()%20%3D%3E%20%7B%0A%20%20%20%20%20*%20%20%20%20%20this._doWork()%3B%0A%20%20%20%20%20*%20%20%20%7D)%3B%0A%20%20%20%20%20*%20%7D%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20If%20the%20%60_debounceWork%60%20method%20is%20called%20multiple%20times%20within%20the%20same%0A%20%20%20%20%20*%20microtask%2C%20the%20%60_doWork%60%20function%20will%20be%20called%20only%20once%20at%20the%20next%0A%20%20%20%20%20*%20microtask%20checkpoint.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Note%3A%20In%20testing%20it%20is%20often%20convenient%20to%20avoid%20asynchrony.%20To%20accomplish%0A%20%20%20%20%20*%20this%20with%20a%20debouncer%2C%20you%20can%20use%20%60Polymer.enqueueDebouncer%60%20and%0A%20%20%20%20%20*%20%60Polymer.flush%60.%20For%20example%2C%20extend%20the%20above%20example%20by%20adding%0A%20%20%20%20%20*%20%60Polymer.enqueueDebouncer(this._debounceJob)%60%20at%20the%20end%20of%20the%0A%20%20%20%20%20*%20%60_debounceWork%60%20method.%20Then%20in%20a%20test%2C%20call%20%60Polymer.flush%60%20to%20ensure%0A%20%20%20%20%20*%20the%20debouncer%20has%20completed.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7BDebouncer%3F%7D%20debouncer%20Debouncer%20object.%0A%20%20%20%20%20*%20%40param%20%7B!AsyncInterface%7D%20asyncModule%20Object%20with%20Async%20interface%0A%20%20%20%20%20*%20%40param%20%7Bfunction()%7D%20callback%20Callback%20to%20run.%0A%20%20%20%20%20*%20%40return%20%7B!Debouncer%7D%20Returns%20a%20debouncer%20object.%0A%20%20%20%20%20*%2F%7D%5D%2C%5B%7Bkey%3A'debounce'%2Cvalue%3Afunction%20debounce(debouncer%2CasyncModule%2Ccallback)%7Bif(debouncer%20instanceof%20Debouncer)%7Bdebouncer.cancel()%3B%7Delse%7Bdebouncer%3Dnew%20Debouncer()%3B%7Ddebouncer.setConfig(asyncModule%2Ccallback)%3Breturn%20debouncer%3B%7D%7D%5D)%3Breturn%20Debouncer%3B%7D()%3B%2F**%20%40const%20*%2FPolymer.Debouncer%3DDebouncer%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Fdebounce.html.js%0A",
            "resourceBytes": 3961,
            "encodedBytes": 0,
            "unusedBytes": 862
          },
          {
            "name": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3B%2F%2F%20detect%20native%20touch%20action%20support%0Avar%20HAS_NATIVE_TA%3Dtypeof%20document.head.style.touchAction%3D%3D%3D'string'%3Bvar%20GESTURE_KEY%3D'__polymerGestures'%3Bvar%20HANDLED_OBJ%3D'__polymerGesturesHandled'%3Bvar%20TOUCH_ACTION%3D'__polymerGesturesTouchAction'%3B%2F%2F%20radius%20for%20tap%20and%20track%0Avar%20TAP_DISTANCE%3D25%3Bvar%20TRACK_DISTANCE%3D5%3B%2F%2F%20number%20of%20last%20N%20track%20positions%20to%20keep%0Avar%20TRACK_LENGTH%3D2%3B%2F%2F%20Disabling%20%22mouse%22%20handlers%20for%202500ms%20is%20enough%0Avar%20MOUSE_TIMEOUT%3D2500%3Bvar%20MOUSE_EVENTS%3D%5B'mousedown'%2C'mousemove'%2C'mouseup'%2C'click'%5D%3B%2F%2F%20an%20array%20of%20bitmask%20values%20for%20mapping%20MouseEvent.which%20to%20MouseEvent.buttons%0Avar%20MOUSE_WHICH_TO_BUTTONS%3D%5B0%2C1%2C4%2C2%5D%3Bvar%20MOUSE_HAS_BUTTONS%3Dfunction()%7Btry%7Breturn%20new%20MouseEvent('test'%2C%7Bbuttons%3A1%7D).buttons%3D%3D%3D1%3B%7Dcatch(e)%7Breturn%20false%3B%7D%7D()%3B%2F**%0A%20%20%20*%20%40param%20%7Bstring%7D%20name%20Possible%20mouse%20event%20name%0A%20%20%20*%20%40return%20%7Bboolean%7D%20true%20if%20mouse%20event%2C%20false%20if%20not%0A%20%20%20*%2Ffunction%20isMouseEvent(name)%7Breturn%20MOUSE_EVENTS.indexOf(name)%3E-1%3B%7D%2F*%20eslint%20no-empty%3A%20%5B%22error%22%2C%20%7B%20%22allowEmptyCatch%22%3A%20true%20%7D%5D%20*%2F%2F%2F%20check%20for%20passive%20event%20listeners%0Avar%20SUPPORTS_PASSIVE%3Dfalse%3B(function()%7Btry%7Bvar%20opts%3DObject.defineProperty(%7B%7D%2C'passive'%2C%7Bget%3Afunction%20get()%7BSUPPORTS_PASSIVE%3Dtrue%3B%7D%7D)%3Bwindow.addEventListener('test'%2Cnull%2Copts)%3Bwindow.removeEventListener('test'%2Cnull%2Copts)%3B%7Dcatch(e)%7B%7D%7D)()%3B%2F**%0A%20%20%20*%20Generate%20settings%20for%20event%20listeners%2C%20dependant%20on%20%60Polymer.passiveTouchGestures%60%0A%20%20%20*%0A%20%20%20*%20%40param%20%7Bstring%7D%20eventName%20Event%20name%20to%20determine%20if%20%60%7Bpassive%7D%60%20option%20is%20needed%0A%20%20%20*%20%40return%20%7B%7Bpassive%3A%20boolean%7D%20%7C%20undefined%7D%20Options%20to%20use%20for%20addEventListener%20and%20removeEventListener%0A%20%20%20*%2Ffunction%20PASSIVE_TOUCH(eventName)%7Bif(isMouseEvent(eventName)%7C%7CeventName%3D%3D%3D'touchend')%7Breturn%3B%7Dif(HAS_NATIVE_TA%26%26SUPPORTS_PASSIVE%26%26Polymer.passiveTouchGestures)%7Breturn%7Bpassive%3Atrue%7D%3B%7Delse%7Breturn%3B%7D%7D%2F%2F%20Check%20for%20touch-only%20devices%0Avar%20IS_TOUCH_ONLY%3Dnavigator.userAgent.match(%2FiP(%3F%3A%5Boa%5Dd%7Chone)%7CAndroid%2F)%3Bvar%20GestureRecognizer%3Dfunction%20GestureRecognizer()%7B%7D%3B%2F%2F%20eslint-disable-line%20no-unused-vars%0A%2F**%20%40type%20%7Bfunction()%3A%20void%7D%20*%2FGestureRecognizer.prototype.reset%3B%2F**%20%40type%20%7Bfunction(MouseEvent)%3A%20void%20%7C%20undefined%7D%20*%2FGestureRecognizer.prototype.mousedown%3B%2F**%20%40type%20%7B(function(MouseEvent)%3A%20void%20%7C%20undefined)%7D%20*%2FGestureRecognizer.prototype.mousemove%3B%2F**%20%40type%20%7B(function(MouseEvent)%3A%20void%20%7C%20undefined)%7D%20*%2FGestureRecognizer.prototype.mouseup%3B%2F**%20%40type%20%7B(function(TouchEvent)%3A%20void%20%7C%20undefined)%7D%20*%2FGestureRecognizer.prototype.touchstart%3B%2F**%20%40type%20%7B(function(TouchEvent)%3A%20void%20%7C%20undefined)%7D%20*%2FGestureRecognizer.prototype.touchmove%3B%2F**%20%40type%20%7B(function(TouchEvent)%3A%20void%20%7C%20undefined)%7D%20*%2FGestureRecognizer.prototype.touchend%3B%2F**%20%40type%20%7B(function(MouseEvent)%3A%20void%20%7C%20undefined)%7D%20*%2FGestureRecognizer.prototype.click%3B%2F%2F%20keep%20track%20of%20any%20labels%20hit%20by%20the%20mouseCanceller%0A%2F**%20%40type%20%7B!Array%3C!HTMLLabelElement%3E%7D%20*%2Fvar%20clickedLabels%3D%5B%5D%3B%2F**%20%40type%20%7B!Object%3Cboolean%3E%7D%20*%2Fvar%20labellable%3D%7B'button'%3Atrue%2C'input'%3Atrue%2C'keygen'%3Atrue%2C'meter'%3Atrue%2C'output'%3Atrue%2C'textarea'%3Atrue%2C'progress'%3Atrue%2C'select'%3Atrue%7D%3B%2F%2F%20Defined%20at%20https%3A%2F%2Fhtml.spec.whatwg.org%2Fmultipage%2Fform-control-infrastructure.html%23enabling-and-disabling-form-controls%3A-the-disabled-attribute%0A%2F**%20%40type%20%7B!Object%3Cboolean%3E%7D%20*%2Fvar%20canBeDisabled%3D%7B'button'%3Atrue%2C'command'%3Atrue%2C'fieldset'%3Atrue%2C'input'%3Atrue%2C'keygen'%3Atrue%2C'optgroup'%3Atrue%2C'option'%3Atrue%2C'select'%3Atrue%2C'textarea'%3Atrue%7D%3B%2F**%0A%20%20%20*%20%40param%20%7BHTMLElement%7D%20el%20Element%20to%20check%20labelling%20status%0A%20%20%20*%20%40return%20%7Bboolean%7D%20element%20can%20have%20labels%0A%20%20%20*%2Ffunction%20canBeLabelled(el)%7Breturn%20labellable%5Bel.localName%5D%7C%7Cfalse%3B%7D%2F**%0A%20%20%20*%20%40param%20%7BHTMLElement%7D%20el%20Element%20that%20may%20be%20labelled.%0A%20%20%20*%20%40return%20%7B!Array%3C!HTMLLabelElement%3E%7D%20Relevant%20label%20for%20%60el%60%0A%20%20%20*%2Ffunction%20matchingLabels(el)%7Bvar%20labels%3DArray.from(%2F**%20%40type%20%7BHTMLInputElement%7D%20*%2Fel.labels%7C%7C%5B%5D)%3B%2F%2F%20IE%20doesn't%20have%20%60labels%60%20and%20Safari%20doesn't%20populate%20%60labels%60%0A%2F%2F%20if%20element%20is%20in%20a%20shadowroot.%0A%2F%2F%20In%20this%20instance%2C%20finding%20the%20non-ancestor%20labels%20is%20enough%2C%0A%2F%2F%20as%20the%20mouseCancellor%20code%20will%20handle%20ancstor%20labels%0Aif(!labels.length)%7Blabels%3D%5B%5D%3Bvar%20root%3Del.getRootNode()%3B%2F%2F%20if%20there%20is%20an%20id%20on%20%60el%60%2C%20check%20for%20all%20labels%20with%20a%20matching%20%60for%60%20attribute%0Aif(el.id)%7Bvar%20matching%3Droot.querySelectorAll('label%5Bfor%20%3D%20'%2Bel.id%2B'%5D')%3Bfor(var%20i%3D0%3Bi%3Cmatching.length%3Bi%2B%2B)%7Blabels.push(%2F**%20%40type%20%7B!HTMLLabelElement%7D%20*%2Fmatching%5Bi%5D)%3B%7D%7D%7Dreturn%20labels%3B%7D%2F%2F%20touch%20will%20make%20synthetic%20mouse%20events%0A%2F%2F%20%60preventDefault%60%20on%20touchend%20will%20cancel%20them%2C%0A%2F%2F%20but%20this%20breaks%20%60%3Cinput%3E%60%20focus%20and%20link%20clicks%0A%2F%2F%20disable%20mouse%20handlers%20for%20MOUSE_TIMEOUT%20ms%20after%0A%2F%2F%20a%20touchend%20to%20ignore%20synthetic%20mouse%20events%0Avar%20mouseCanceller%3Dfunction%20mouseCanceller(mouseEvent)%7B%2F%2F%20Check%20for%20sourceCapabilities%2C%20used%20to%20distinguish%20synthetic%20events%0A%2F%2F%20if%20mouseEvent%20did%20not%20come%20from%20a%20device%20that%20fires%20touch%20events%2C%0A%2F%2F%20it%20was%20made%20by%20a%20real%20mouse%20and%20should%20be%20counted%0A%2F%2F%20http%3A%2F%2Fwicg.github.io%2FInputDeviceCapabilities%2F%23dom-inputdevicecapabilities-firestouchevents%0Avar%20sc%3DmouseEvent.sourceCapabilities%3Bif(sc%26%26!sc.firesTouchEvents)%7Breturn%3B%7D%2F%2F%20skip%20synthetic%20mouse%20events%0AmouseEvent%5BHANDLED_OBJ%5D%3D%7Bskip%3Atrue%7D%3B%2F%2F%20disable%20%22ghost%20clicks%22%0Aif(mouseEvent.type%3D%3D%3D'click')%7Bvar%20clickFromLabel%3Dfalse%3Bvar%20path%3DmouseEvent.composedPath%26%26mouseEvent.composedPath()%3Bif(path)%7Bfor(var%20i%3D0%3Bi%3Cpath.length%3Bi%2B%2B)%7Bif(path%5Bi%5D.nodeType%3D%3D%3DNode.ELEMENT_NODE)%7Bif(path%5Bi%5D.localName%3D%3D%3D'label')%7BclickedLabels.push(path%5Bi%5D)%3B%7Delse%20if(canBeLabelled(path%5Bi%5D))%7Bvar%20ownerLabels%3DmatchingLabels(path%5Bi%5D)%3B%2F%2F%20check%20if%20one%20of%20the%20clicked%20labels%20is%20labelling%20this%20element%0Afor(var%20j%3D0%3Bj%3CownerLabels.length%3Bj%2B%2B)%7BclickFromLabel%3DclickFromLabel%7C%7CclickedLabels.indexOf(ownerLabels%5Bj%5D)%3E-1%3B%7D%7D%7Dif(path%5Bi%5D%3D%3D%3DPOINTERSTATE.mouse.target)%7Breturn%3B%7D%7D%7D%2F%2F%20if%20one%20of%20the%20clicked%20labels%20was%20labelling%20the%20target%20element%2C%0A%2F%2F%20this%20is%20not%20a%20ghost%20click%0Aif(clickFromLabel)%7Breturn%3B%7DmouseEvent.preventDefault()%3BmouseEvent.stopPropagation()%3B%7D%7D%3B%2F**%0A%20%20%20*%20%40param%20%7Bboolean%3D%7D%20setup%20True%20to%20add%2C%20false%20to%20remove.%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%2Ffunction%20setupTeardownMouseCanceller(setup)%7Bvar%20events%3DIS_TOUCH_ONLY%3F%5B'click'%5D%3AMOUSE_EVENTS%3Bfor(var%20i%3D0%2Cen%3Bi%3Cevents.length%3Bi%2B%2B)%7Ben%3Devents%5Bi%5D%3Bif(setup)%7B%2F%2F%20reset%20clickLabels%20array%0AclickedLabels.length%3D0%3Bdocument.addEventListener(en%2CmouseCanceller%2Ctrue)%3B%7Delse%7Bdocument.removeEventListener(en%2CmouseCanceller%2Ctrue)%3B%7D%7D%7Dfunction%20ignoreMouse(e)%7Bif(!POINTERSTATE.mouse.mouseIgnoreJob)%7BsetupTeardownMouseCanceller(true)%3B%7Dvar%20unset%3Dfunction%20unset()%7BsetupTeardownMouseCanceller()%3BPOINTERSTATE.mouse.target%3Dnull%3BPOINTERSTATE.mouse.mouseIgnoreJob%3Dnull%3B%7D%3BPOINTERSTATE.mouse.target%3De.composedPath()%5B0%5D%3BPOINTERSTATE.mouse.mouseIgnoreJob%3DPolymer.Debouncer.debounce(POINTERSTATE.mouse.mouseIgnoreJob%2CPolymer.Async.timeOut.after(MOUSE_TIMEOUT)%2Cunset)%3B%7D%2F**%0A%20%20%20*%20%40param%20%7BMouseEvent%7D%20ev%20event%20to%20test%20for%20left%20mouse%20button%20down%0A%20%20%20*%20%40return%20%7Bboolean%7D%20has%20left%20mouse%20button%20down%0A%20%20%20*%2Ffunction%20hasLeftMouseButton(ev)%7Bvar%20type%3Dev.type%3B%2F%2F%20exit%20early%20if%20the%20event%20is%20not%20a%20mouse%20event%0Aif(!isMouseEvent(type))%7Breturn%20false%3B%7D%2F%2F%20ev.button%20is%20not%20reliable%20for%20mousemove%20(0%20is%20overloaded%20as%20both%20left%20button%20and%20no%20buttons)%0A%2F%2F%20instead%20we%20use%20ev.buttons%20(bitmask%20of%20buttons)%20or%20fall%20back%20to%20ev.which%20(deprecated%2C%200%20for%20no%20buttons%2C%201%20for%20left%20button)%0Aif(type%3D%3D%3D'mousemove')%7B%2F%2F%20allow%20undefined%20for%20testing%20events%0Avar%20buttons%3Dev.buttons%3D%3D%3Dundefined%3F1%3Aev.buttons%3Bif(ev%20instanceof%20window.MouseEvent%26%26!MOUSE_HAS_BUTTONS)%7Bbuttons%3DMOUSE_WHICH_TO_BUTTONS%5Bev.which%5D%7C%7C0%3B%7D%2F%2F%20buttons%20is%20a%20bitmask%2C%20check%20that%20the%20left%20button%20bit%20is%20set%20(1)%0Areturn%20Boolean(buttons%261)%3B%7Delse%7B%2F%2F%20allow%20undefined%20for%20testing%20events%0Avar%20button%3Dev.button%3D%3D%3Dundefined%3F0%3Aev.button%3B%2F%2F%20ev.button%20is%200%20in%20mousedown%2Fmouseup%2Fclick%20for%20left%20button%20activation%0Areturn%20button%3D%3D%3D0%3B%7D%7Dfunction%20isSyntheticClick(ev)%7Bif(ev.type%3D%3D%3D'click')%7B%2F%2F%20ev.detail%20is%200%20for%20HTMLElement.click%20in%20most%20browsers%0Aif(ev.detail%3D%3D%3D0)%7Breturn%20true%3B%7D%2F%2F%20in%20the%20worst%20case%2C%20check%20that%20the%20x%2Fy%20position%20of%20the%20click%20is%20within%0A%2F%2F%20the%20bounding%20box%20of%20the%20target%20of%20the%20event%0A%2F%2F%20Thanks%20IE%2010%20%3E%3A(%0Avar%20t%3DGestures._findOriginalTarget(ev)%3B%2F%2F%20make%20sure%20the%20target%20of%20the%20event%20is%20an%20element%20so%20we%20can%20use%20getBoundingClientRect%2C%0A%2F%2F%20if%20not%2C%20just%20assume%20it%20is%20a%20synthetic%20click%0Aif(!t.nodeType%7C%7C%2F**%20%40type%20%7BElement%7D%20*%2Ft.nodeType!%3D%3DNode.ELEMENT_NODE)%7Breturn%20true%3B%7Dvar%20bcr%3D%2F**%20%40type%20%7BElement%7D%20*%2Ft.getBoundingClientRect()%3B%2F%2F%20use%20page%20x%2Fy%20to%20account%20for%20scrolling%0Avar%20x%3Dev.pageX%2Cy%3Dev.pageY%3B%2F%2F%20ev%20is%20a%20synthetic%20click%20if%20the%20position%20is%20outside%20the%20bounding%20box%20of%20the%20target%0Areturn!(x%3E%3Dbcr.left%26%26x%3C%3Dbcr.right%26%26y%3E%3Dbcr.top%26%26y%3C%3Dbcr.bottom)%3B%7Dreturn%20false%3B%7Dvar%20POINTERSTATE%3D%7Bmouse%3A%7Btarget%3Anull%2CmouseIgnoreJob%3Anull%7D%2Ctouch%3A%7Bx%3A0%2Cy%3A0%2Cid%3A-1%2CscrollDecided%3Afalse%7D%7D%3Bfunction%20firstTouchAction(ev)%7Bvar%20ta%3D'auto'%3Bvar%20path%3Dev.composedPath%26%26ev.composedPath()%3Bif(path)%7Bfor(var%20i%3D0%2Cn%3Bi%3Cpath.length%3Bi%2B%2B)%7Bn%3Dpath%5Bi%5D%3Bif(n%5BTOUCH_ACTION%5D)%7Bta%3Dn%5BTOUCH_ACTION%5D%3Bbreak%3B%7D%7D%7Dreturn%20ta%3B%7Dfunction%20trackDocument(stateObj%2Cmovefn%2Cupfn)%7BstateObj.movefn%3Dmovefn%3BstateObj.upfn%3Dupfn%3Bdocument.addEventListener('mousemove'%2Cmovefn)%3Bdocument.addEventListener('mouseup'%2Cupfn)%3B%7Dfunction%20untrackDocument(stateObj)%7Bdocument.removeEventListener('mousemove'%2CstateObj.movefn)%3Bdocument.removeEventListener('mouseup'%2CstateObj.upfn)%3BstateObj.movefn%3Dnull%3BstateObj.upfn%3Dnull%3B%7D%2F%2F%20use%20a%20document-wide%20touchend%20listener%20to%20start%20the%20ghost-click%20prevention%20mechanism%0A%2F%2F%20Use%20passive%20event%20listeners%2C%20if%20supported%2C%20to%20not%20affect%20scrolling%20performance%0Adocument.addEventListener('touchend'%2CignoreMouse%2CSUPPORTS_PASSIVE%3F%7Bpassive%3Atrue%7D%3Afalse)%3B%2F**%0A%20%20%20*%20Module%20for%20adding%20listeners%20to%20a%20node%20for%20the%20following%20normalized%0A%20%20%20*%20cross-platform%20%22gesture%22%20events%3A%0A%20%20%20*%20-%20%60down%60%20-%20mouse%20or%20touch%20went%20down%0A%20%20%20*%20-%20%60up%60%20-%20mouse%20or%20touch%20went%20up%0A%20%20%20*%20-%20%60tap%60%20-%20mouse%20click%20or%20finger%20tap%0A%20%20%20*%20-%20%60track%60%20-%20mouse%20drag%20or%20touch%20move%0A%20%20%20*%0A%20%20%20*%20%40namespace%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Module%20for%20adding%20cross-platform%20gesture%20event%20listeners.%0A%20%20%20*%2Fvar%20Gestures%3D%7Bgestures%3A%7B%7D%2Crecognizers%3A%5B%5D%2C%2F**%0A%20%20%20%20%20*%20Finds%20the%20element%20rendered%20on%20the%20screen%20at%20the%20provided%20coordinates.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Similar%20to%20%60document.elementFromPoint%60%2C%20but%20pierces%20through%0A%20%20%20%20%20*%20shadow%20roots.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Gestures%0A%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20x%20Horizontal%20pixel%20coordinate%0A%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20y%20Vertical%20pixel%20coordinate%0A%20%20%20%20%20*%20%40return%20%7BElement%7D%20Returns%20the%20deepest%20shadowRoot%20inclusive%20element%0A%20%20%20%20%20*%20found%20at%20the%20screen%20position%20given.%0A%20%20%20%20%20*%2FdeepTargetFind%3Afunction%20deepTargetFind(x%2Cy)%7Bvar%20node%3Ddocument.elementFromPoint(x%2Cy)%3Bvar%20next%3Dnode%3B%2F%2F%20this%20code%20path%20is%20only%20taken%20when%20native%20ShadowDOM%20is%20used%0A%2F%2F%20if%20there%20is%20a%20shadowroot%2C%20it%20may%20have%20a%20node%20at%20x%2Fy%0A%2F%2F%20if%20there%20is%20not%20a%20shadowroot%2C%20exit%20the%20loop%0Awhile(next%26%26next.shadowRoot%26%26!window.ShadyDOM)%7B%2F%2F%20if%20there%20is%20a%20node%20at%20x%2Fy%20in%20the%20shadowroot%2C%20look%20deeper%0Avar%20oldNext%3Dnext%3Bnext%3Dnext.shadowRoot.elementFromPoint(x%2Cy)%3B%2F%2F%20on%20Safari%2C%20elementFromPoint%20may%20return%20the%20shadowRoot%20host%0Aif(oldNext%3D%3D%3Dnext)%7Bbreak%3B%7Dif(next)%7Bnode%3Dnext%3B%7D%7Dreturn%20node%3B%7D%2C%2F**%0A%20%20%20%20%20*%20a%20cheaper%20check%20than%20ev.composedPath()%5B0%5D%3B%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%20%40param%20%7BEvent%7D%20ev%20Event.%0A%20%20%20%20%20*%20%40return%20%7BEventTarget%7D%20Returns%20the%20event%20target.%0A%20%20%20%20%20*%2F_findOriginalTarget%3Afunction%20_findOriginalTarget(ev)%7B%2F%2F%20shadowdom%0Aif(ev.composedPath)%7Bvar%20targets%3D%2F**%20%40type%20%7B!Array%3C!EventTarget%3E%7D%20*%2Fev.composedPath()%3B%2F%2F%20It%20shouldn't%20be%2C%20but%20sometimes%20targets%20is%20empty%20(window%20on%20Safari).%0Areturn%20targets.length%3E0%3Ftargets%5B0%5D%3Aev.target%3B%7D%2F%2F%20shadydom%0Areturn%20ev.target%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%20%40param%20%7BEvent%7D%20ev%20Event.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F_handleNative%3Afunction%20_handleNative(ev)%7Bvar%20handled%3Dvoid%200%3Bvar%20type%3Dev.type%3Bvar%20node%3Dev.currentTarget%3Bvar%20gobj%3Dnode%5BGESTURE_KEY%5D%3Bif(!gobj)%7Breturn%3B%7Dvar%20gs%3Dgobj%5Btype%5D%3Bif(!gs)%7Breturn%3B%7Dif(!ev%5BHANDLED_OBJ%5D)%7Bev%5BHANDLED_OBJ%5D%3D%7B%7D%3Bif(type.slice(0%2C5)%3D%3D%3D'touch')%7Bev%3D%2F**%20%40type%20%7BTouchEvent%7D%20*%2Fev%3B%2F%2F%20eslint-disable-line%20no-self-assign%0Avar%20t%3Dev.changedTouches%5B0%5D%3Bif(type%3D%3D%3D'touchstart')%7B%2F%2F%20only%20handle%20the%20first%20finger%0Aif(ev.touches.length%3D%3D%3D1)%7BPOINTERSTATE.touch.id%3Dt.identifier%3B%7D%7Dif(POINTERSTATE.touch.id!%3D%3Dt.identifier)%7Breturn%3B%7Dif(!HAS_NATIVE_TA)%7Bif(type%3D%3D%3D'touchstart'%7C%7Ctype%3D%3D%3D'touchmove')%7BGestures._handleTouchAction(ev)%3B%7D%7D%7D%7Dhandled%3Dev%5BHANDLED_OBJ%5D%3B%2F%2F%20used%20to%20ignore%20synthetic%20mouse%20events%0Aif(handled.skip)%7Breturn%3B%7D%2F%2F%20reset%20recognizer%20state%0Afor(var%20i%3D0%2Cr%3Bi%3CGestures.recognizers.length%3Bi%2B%2B)%7Br%3DGestures.recognizers%5Bi%5D%3Bif(gs%5Br.name%5D%26%26!handled%5Br.name%5D)%7Bif(r.flow%26%26r.flow.start.indexOf(ev.type)%3E-1%26%26r.reset)%7Br.reset()%3B%7D%7D%7D%2F%2F%20enforce%20gesture%20recognizer%20order%0Afor(var%20_i%3D0%2C_r%3B_i%3CGestures.recognizers.length%3B_i%2B%2B)%7B_r%3DGestures.recognizers%5B_i%5D%3Bif(gs%5B_r.name%5D%26%26!handled%5B_r.name%5D)%7Bhandled%5B_r.name%5D%3Dtrue%3B_r%5Btype%5D(ev)%3B%7D%7D%7D%2C%2F**%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%20%40param%20%7BTouchEvent%7D%20ev%20Event.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F_handleTouchAction%3Afunction%20_handleTouchAction(ev)%7Bvar%20t%3Dev.changedTouches%5B0%5D%3Bvar%20type%3Dev.type%3Bif(type%3D%3D%3D'touchstart')%7BPOINTERSTATE.touch.x%3Dt.clientX%3BPOINTERSTATE.touch.y%3Dt.clientY%3BPOINTERSTATE.touch.scrollDecided%3Dfalse%3B%7Delse%20if(type%3D%3D%3D'touchmove')%7Bif(POINTERSTATE.touch.scrollDecided)%7Breturn%3B%7DPOINTERSTATE.touch.scrollDecided%3Dtrue%3Bvar%20ta%3DfirstTouchAction(ev)%3Bvar%20prevent%3Dfalse%3Bvar%20dx%3DMath.abs(POINTERSTATE.touch.x-t.clientX)%3Bvar%20dy%3DMath.abs(POINTERSTATE.touch.y-t.clientY)%3Bif(!ev.cancelable)%7B%2F%2F%20scrolling%20is%20happening%0A%7Delse%20if(ta%3D%3D%3D'none')%7Bprevent%3Dtrue%3B%7Delse%20if(ta%3D%3D%3D'pan-x')%7Bprevent%3Ddy%3Edx%3B%7Delse%20if(ta%3D%3D%3D'pan-y')%7Bprevent%3Ddx%3Edy%3B%7Dif(prevent)%7Bev.preventDefault()%3B%7Delse%7BGestures.prevent('track')%3B%7D%7D%7D%2C%2F**%0A%20%20%20%20%20*%20Adds%20an%20event%20listener%20to%20a%20node%20for%20the%20given%20gesture%20type.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Gestures%0A%20%20%20%20%20*%20%40param%20%7B!Node%7D%20node%20Node%20to%20add%20listener%20on%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20evType%20Gesture%20type%3A%20%60down%60%2C%20%60up%60%2C%20%60track%60%2C%20or%20%60tap%60%0A%20%20%20%20%20*%20%40param%20%7B!function(!Event)%3Avoid%7D%20handler%20Event%20listener%20function%20to%20call%0A%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Returns%20true%20if%20a%20gesture%20event%20listener%20was%20added.%0A%20%20%20%20%20*%20%40this%20%7BGestures%7D%0A%20%20%20%20%20*%2FaddListener%3Afunction%20addListener(node%2CevType%2Chandler)%7Bif(this.gestures%5BevType%5D)%7Bthis._add(node%2CevType%2Chandler)%3Breturn%20true%3B%7Dreturn%20false%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Removes%20an%20event%20listener%20from%20a%20node%20for%20the%20given%20gesture%20type.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Gestures%0A%20%20%20%20%20*%20%40param%20%7B!Node%7D%20node%20Node%20to%20remove%20listener%20from%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20evType%20Gesture%20type%3A%20%60down%60%2C%20%60up%60%2C%20%60track%60%2C%20or%20%60tap%60%0A%20%20%20%20%20*%20%40param%20%7B!function(!Event)%3Avoid%7D%20handler%20Event%20listener%20function%20previously%20passed%20to%0A%20%20%20%20%20*%20%20%60addListener%60.%0A%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Returns%20true%20if%20a%20gesture%20event%20listener%20was%20removed.%0A%20%20%20%20%20*%20%40this%20%7BGestures%7D%0A%20%20%20%20%20*%2FremoveListener%3Afunction%20removeListener(node%2CevType%2Chandler)%7Bif(this.gestures%5BevType%5D)%7Bthis._remove(node%2CevType%2Chandler)%3Breturn%20true%3B%7Dreturn%20false%3B%7D%2C%2F**%0A%20%20%20%20%20*%20automate%20the%20event%20listeners%20for%20the%20native%20events%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%20%40param%20%7B!HTMLElement%7D%20node%20Node%20on%20which%20to%20add%20the%20event.%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20evType%20Event%20type%20to%20add.%0A%20%20%20%20%20*%20%40param%20%7Bfunction(!Event)%7D%20handler%20Event%20handler%20function.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40this%20%7BGestures%7D%0A%20%20%20%20%20*%2F_add%3Afunction%20_add(node%2CevType%2Chandler)%7Bvar%20recognizer%3Dthis.gestures%5BevType%5D%3Bvar%20deps%3Drecognizer.deps%3Bvar%20name%3Drecognizer.name%3Bvar%20gobj%3Dnode%5BGESTURE_KEY%5D%3Bif(!gobj)%7Bnode%5BGESTURE_KEY%5D%3Dgobj%3D%7B%7D%3B%7Dfor(var%20i%3D0%2Cdep%2Cgd%3Bi%3Cdeps.length%3Bi%2B%2B)%7Bdep%3Ddeps%5Bi%5D%3B%2F%2F%20don't%20add%20mouse%20handlers%20on%20iOS%20because%20they%20cause%20gray%20selection%20overlays%0Aif(IS_TOUCH_ONLY%26%26isMouseEvent(dep)%26%26dep!%3D%3D'click')%7Bcontinue%3B%7Dgd%3Dgobj%5Bdep%5D%3Bif(!gd)%7Bgobj%5Bdep%5D%3Dgd%3D%7B_count%3A0%7D%3B%7Dif(gd._count%3D%3D%3D0)%7Bnode.addEventListener(dep%2Cthis._handleNative%2CPASSIVE_TOUCH(dep))%3B%7Dgd%5Bname%5D%3D(gd%5Bname%5D%7C%7C0)%2B1%3Bgd._count%3D(gd._count%7C%7C0)%2B1%3B%7Dnode.addEventListener(evType%2Chandler)%3Bif(recognizer.touchAction)%7Bthis.setTouchAction(node%2Crecognizer.touchAction)%3B%7D%7D%2C%2F**%0A%20%20%20%20%20*%20automate%20event%20listener%20removal%20for%20native%20events%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%20%40param%20%7B!HTMLElement%7D%20node%20Node%20on%20which%20to%20remove%20the%20event.%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20evType%20Event%20type%20to%20remove.%0A%20%20%20%20%20*%20%40param%20%7Bfunction(Event%3F)%7D%20handler%20Event%20handler%20function.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40this%20%7BGestures%7D%0A%20%20%20%20%20*%2F_remove%3Afunction%20_remove(node%2CevType%2Chandler)%7Bvar%20recognizer%3Dthis.gestures%5BevType%5D%3Bvar%20deps%3Drecognizer.deps%3Bvar%20name%3Drecognizer.name%3Bvar%20gobj%3Dnode%5BGESTURE_KEY%5D%3Bif(gobj)%7Bfor(var%20i%3D0%2Cdep%2Cgd%3Bi%3Cdeps.length%3Bi%2B%2B)%7Bdep%3Ddeps%5Bi%5D%3Bgd%3Dgobj%5Bdep%5D%3Bif(gd%26%26gd%5Bname%5D)%7Bgd%5Bname%5D%3D(gd%5Bname%5D%7C%7C1)-1%3Bgd._count%3D(gd._count%7C%7C1)-1%3Bif(gd._count%3D%3D%3D0)%7Bnode.removeEventListener(dep%2Cthis._handleNative%2CPASSIVE_TOUCH(dep))%3B%7D%7D%7D%7Dnode.removeEventListener(evType%2Chandler)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Registers%20a%20new%20gesture%20event%20recognizer%20for%20adding%20new%20custom%0A%20%20%20%20%20*%20gesture%20event%20types.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Gestures%0A%20%20%20%20%20*%20%40param%20%7B!GestureRecognizer%7D%20recog%20Gesture%20recognizer%20descriptor%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40this%20%7BGestures%7D%0A%20%20%20%20%20*%2Fregister%3Afunction%20register(recog)%7Bthis.recognizers.push(recog)%3Bfor(var%20i%3D0%3Bi%3Crecog.emits.length%3Bi%2B%2B)%7Bthis.gestures%5Brecog.emits%5Bi%5D%5D%3Drecog%3B%7D%7D%2C%2F**%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20evName%20Event%20name.%0A%20%20%20%20%20*%20%40return%20%7BObject%7D%20Returns%20the%20gesture%20for%20the%20given%20event%20name.%0A%20%20%20%20%20*%20%40this%20%7BGestures%7D%0A%20%20%20%20%20*%2F_findRecognizerByEvent%3Afunction%20_findRecognizerByEvent(evName)%7Bfor(var%20i%3D0%2Cr%3Bi%3Cthis.recognizers.length%3Bi%2B%2B)%7Br%3Dthis.recognizers%5Bi%5D%3Bfor(var%20j%3D0%2Cn%3Bj%3Cr.emits.length%3Bj%2B%2B)%7Bn%3Dr.emits%5Bj%5D%3Bif(n%3D%3D%3DevName)%7Breturn%20r%3B%7D%7D%7Dreturn%20null%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Sets%20scrolling%20direction%20on%20node.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20This%20value%20is%20checked%20on%20first%20move%2C%20thus%20it%20should%20be%20called%20prior%20to%0A%20%20%20%20%20*%20adding%20event%20listeners.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Gestures%0A%20%20%20%20%20*%20%40param%20%7B!Element%7D%20node%20Node%20to%20set%20touch%20action%20setting%20on%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20value%20Touch%20action%20value%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2FsetTouchAction%3Afunction%20setTouchAction(node%2Cvalue)%7Bif(HAS_NATIVE_TA)%7B%2F%2F%20NOTE%3A%20add%20touchAction%20async%20so%20that%20events%20can%20be%20added%20in%0A%2F%2F%20custom%20element%20constructors.%20Otherwise%20we%20run%20afoul%20of%20custom%0A%2F%2F%20elements%20restriction%20against%20settings%20attributes%20(style)%20in%20the%0A%2F%2F%20constructor.%0APolymer.Async.microTask.run(function()%7Bnode.style.touchAction%3Dvalue%3B%7D)%3B%7Dnode%5BTOUCH_ACTION%5D%3Dvalue%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Dispatches%20an%20event%20on%20the%20%60target%60%20element%20of%20%60type%60%20with%20the%20given%0A%20%20%20%20%20*%20%60detail%60.%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%20%40param%20%7B!EventTarget%7D%20target%20The%20element%20on%20which%20to%20fire%20an%20event.%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20type%20The%20type%20of%20event%20to%20fire.%0A%20%20%20%20%20*%20%40param%20%7B!Object%3D%7D%20detail%20The%20detail%20object%20to%20populate%20on%20the%20event.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F_fire%3Afunction%20_fire(target%2Ctype%2Cdetail)%7Bvar%20ev%3Dnew%20Event(type%2C%7Bbubbles%3Atrue%2Ccancelable%3Atrue%2Ccomposed%3Atrue%7D)%3Bev.detail%3Ddetail%3Btarget.dispatchEvent(ev)%3B%2F%2F%20forward%20%60preventDefault%60%20in%20a%20clean%20way%0Aif(ev.defaultPrevented)%7Bvar%20preventer%3Ddetail.preventer%7C%7Cdetail.sourceEvent%3Bif(preventer%26%26preventer.preventDefault)%7Bpreventer.preventDefault()%3B%7D%7D%7D%2C%2F**%0A%20%20%20%20%20*%20Prevents%20the%20dispatch%20and%20default%20action%20of%20the%20given%20event%20name.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Gestures%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20evName%20Event%20name.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40this%20%7BGestures%7D%0A%20%20%20%20%20*%2Fprevent%3Afunction%20prevent(evName)%7Bvar%20recognizer%3Dthis._findRecognizerByEvent(evName)%3Bif(recognizer.info)%7Brecognizer.info.prevent%3Dtrue%3B%7D%7D%2C%2F**%0A%20%20%20%20%20*%20Reset%20the%202500ms%20timeout%20on%20processing%20mouse%20input%20after%20detecting%20touch%20input.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Touch%20inputs%20create%20synthesized%20mouse%20inputs%20anywhere%20from%200%20to%202000ms%20after%20the%20touch.%0A%20%20%20%20%20*%20This%20method%20should%20only%20be%20called%20during%20testing%20with%20simulated%20touch%20inputs.%0A%20%20%20%20%20*%20Calling%20this%20method%20in%20production%20may%20cause%20duplicate%20taps%20or%20other%20Gestures.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Gestures%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2FresetMouseCanceller%3Afunction%20resetMouseCanceller()%7Bif(POINTERSTATE.mouse.mouseIgnoreJob)%7BPOINTERSTATE.mouse.mouseIgnoreJob.flush()%3B%7D%7D%7D%3B%2F*%20eslint-disable%20valid-jsdoc%20*%2FGestures.register(%7Bname%3A'downup'%2Cdeps%3A%5B'mousedown'%2C'touchstart'%2C'touchend'%5D%2Cflow%3A%7Bstart%3A%5B'mousedown'%2C'touchstart'%5D%2Cend%3A%5B'mouseup'%2C'touchend'%5D%7D%2Cemits%3A%5B'down'%2C'up'%5D%2Cinfo%3A%7Bmovefn%3Anull%2Cupfn%3Anull%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Freset%3Afunction%20reset()%7BuntrackDocument(this.info)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7BMouseEvent%7D%20e%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Fmousedown%3Afunction%20mousedown(e)%7Bif(!hasLeftMouseButton(e))%7Breturn%3B%7Dvar%20t%3DGestures._findOriginalTarget(e)%3Bvar%20self%3Dthis%3Bvar%20movefn%3Dfunction%20movefn(e)%7Bif(!hasLeftMouseButton(e))%7Bself._fire('up'%2Ct%2Ce)%3BuntrackDocument(self.info)%3B%7D%7D%3Bvar%20upfn%3Dfunction%20upfn(e)%7Bif(hasLeftMouseButton(e))%7Bself._fire('up'%2Ct%2Ce)%3B%7DuntrackDocument(self.info)%3B%7D%3BtrackDocument(this.info%2Cmovefn%2Cupfn)%3Bthis._fire('down'%2Ct%2Ce)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7BTouchEvent%7D%20e%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Ftouchstart%3Afunction%20touchstart(e)%7Bthis._fire('down'%2CGestures._findOriginalTarget(e)%2Ce.changedTouches%5B0%5D%2Ce)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7BTouchEvent%7D%20e%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Ftouchend%3Afunction%20touchend(e)%7Bthis._fire('up'%2CGestures._findOriginalTarget(e)%2Ce.changedTouches%5B0%5D%2Ce)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20type%0A%20%20%20%20%20*%20%40param%20%7B!EventTarget%7D%20target%0A%20%20%20%20%20*%20%40param%20%7BEvent%7D%20event%0A%20%20%20%20%20*%20%40param%20%7BFunction%7D%20preventer%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F_fire%3Afunction%20_fire(type%2Ctarget%2Cevent%2Cpreventer)%7BGestures._fire(target%2Ctype%2C%7Bx%3Aevent.clientX%2Cy%3Aevent.clientY%2CsourceEvent%3Aevent%2Cpreventer%3Apreventer%2Cprevent%3Afunction%20prevent(e)%7Breturn%20Gestures.prevent(e)%3B%7D%7D)%3B%7D%7D)%3BGestures.register(%7Bname%3A'track'%2CtouchAction%3A'none'%2Cdeps%3A%5B'mousedown'%2C'touchstart'%2C'touchmove'%2C'touchend'%5D%2Cflow%3A%7Bstart%3A%5B'mousedown'%2C'touchstart'%5D%2Cend%3A%5B'mouseup'%2C'touchend'%5D%7D%2Cemits%3A%5B'track'%5D%2Cinfo%3A%7Bx%3A0%2Cy%3A0%2Cstate%3A'start'%2Cstarted%3Afalse%2Cmoves%3A%5B%5D%2C%2F**%20%40this%20%7BGestureRecognizer%7D%20*%2FaddMove%3Afunction%20addMove(move)%7Bif(this.moves.length%3ETRACK_LENGTH)%7Bthis.moves.shift()%3B%7Dthis.moves.push(move)%3B%7D%2Cmovefn%3Anull%2Cupfn%3Anull%2Cprevent%3Afalse%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Freset%3Afunction%20reset()%7Bthis.info.state%3D'start'%3Bthis.info.started%3Dfalse%3Bthis.info.moves%3D%5B%5D%3Bthis.info.x%3D0%3Bthis.info.y%3D0%3Bthis.info.prevent%3Dfalse%3BuntrackDocument(this.info)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20x%0A%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20y%0A%20%20%20%20%20*%20%40return%20%7Bboolean%7D%0A%20%20%20%20%20*%2FhasMovedEnough%3Afunction%20hasMovedEnough(x%2Cy)%7Bif(this.info.prevent)%7Breturn%20false%3B%7Dif(this.info.started)%7Breturn%20true%3B%7Dvar%20dx%3DMath.abs(this.info.x-x)%3Bvar%20dy%3DMath.abs(this.info.y-y)%3Breturn%20dx%3E%3DTRACK_DISTANCE%7C%7Cdy%3E%3DTRACK_DISTANCE%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7BMouseEvent%7D%20e%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Fmousedown%3Afunction%20mousedown(e)%7Bif(!hasLeftMouseButton(e))%7Breturn%3B%7Dvar%20t%3DGestures._findOriginalTarget(e)%3Bvar%20self%3Dthis%3Bvar%20movefn%3Dfunction%20movefn(e)%7Bvar%20x%3De.clientX%2Cy%3De.clientY%3Bif(self.hasMovedEnough(x%2Cy))%7B%2F%2F%20first%20move%20is%20'start'%2C%20subsequent%20moves%20are%20'move'%2C%20mouseup%20is%20'end'%0Aself.info.state%3Dself.info.started%3Fe.type%3D%3D%3D'mouseup'%3F'end'%3A'track'%3A'start'%3Bif(self.info.state%3D%3D%3D'start')%7B%2F%2F%20if%20and%20only%20if%20tracking%2C%20always%20prevent%20tap%0AGestures.prevent('tap')%3B%7Dself.info.addMove(%7Bx%3Ax%2Cy%3Ay%7D)%3Bif(!hasLeftMouseButton(e))%7B%2F%2F%20always%20_fire%20%22end%22%0Aself.info.state%3D'end'%3BuntrackDocument(self.info)%3B%7Dself._fire(t%2Ce)%3Bself.info.started%3Dtrue%3B%7D%7D%3Bvar%20upfn%3Dfunction%20upfn(e)%7Bif(self.info.started)%7Bmovefn(e)%3B%7D%2F%2F%20remove%20the%20temporary%20listeners%0AuntrackDocument(self.info)%3B%7D%3B%2F%2F%20add%20temporary%20document%20listeners%20as%20mouse%20retargets%0AtrackDocument(this.info%2Cmovefn%2Cupfn)%3Bthis.info.x%3De.clientX%3Bthis.info.y%3De.clientY%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7BTouchEvent%7D%20e%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Ftouchstart%3Afunction%20touchstart(e)%7Bvar%20ct%3De.changedTouches%5B0%5D%3Bthis.info.x%3Dct.clientX%3Bthis.info.y%3Dct.clientY%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7BTouchEvent%7D%20e%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Ftouchmove%3Afunction%20touchmove(e)%7Bvar%20t%3DGestures._findOriginalTarget(e)%3Bvar%20ct%3De.changedTouches%5B0%5D%3Bvar%20x%3Dct.clientX%2Cy%3Dct.clientY%3Bif(this.hasMovedEnough(x%2Cy))%7Bif(this.info.state%3D%3D%3D'start')%7B%2F%2F%20if%20and%20only%20if%20tracking%2C%20always%20prevent%20tap%0AGestures.prevent('tap')%3B%7Dthis.info.addMove(%7Bx%3Ax%2Cy%3Ay%7D)%3Bthis._fire(t%2Cct)%3Bthis.info.state%3D'track'%3Bthis.info.started%3Dtrue%3B%7D%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7BTouchEvent%7D%20e%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Ftouchend%3Afunction%20touchend(e)%7Bvar%20t%3DGestures._findOriginalTarget(e)%3Bvar%20ct%3De.changedTouches%5B0%5D%3B%2F%2F%20only%20trackend%20if%20track%20was%20started%20and%20not%20aborted%0Aif(this.info.started)%7B%2F%2F%20reset%20started%20state%20on%20up%0Athis.info.state%3D'end'%3Bthis.info.addMove(%7Bx%3Act.clientX%2Cy%3Act.clientY%7D)%3Bthis._fire(t%2Cct%2Ce)%3B%7D%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7B!EventTarget%7D%20target%0A%20%20%20%20%20*%20%40param%20%7BTouch%7D%20touch%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F_fire%3Afunction%20_fire(target%2Ctouch)%7Bvar%20secondlast%3Dthis.info.moves%5Bthis.info.moves.length-2%5D%3Bvar%20lastmove%3Dthis.info.moves%5Bthis.info.moves.length-1%5D%3Bvar%20dx%3Dlastmove.x-this.info.x%3Bvar%20dy%3Dlastmove.y-this.info.y%3Bvar%20ddx%3Dvoid%200%2Cddy%3D0%3Bif(secondlast)%7Bddx%3Dlastmove.x-secondlast.x%3Bddy%3Dlastmove.y-secondlast.y%3B%7DGestures._fire(target%2C'track'%2C%7Bstate%3Athis.info.state%2Cx%3Atouch.clientX%2Cy%3Atouch.clientY%2Cdx%3Adx%2Cdy%3Ady%2Cddx%3Addx%2Cddy%3Addy%2CsourceEvent%3Atouch%2Chover%3Afunction%20hover()%7Breturn%20Gestures.deepTargetFind(touch.clientX%2Ctouch.clientY)%3B%7D%7D)%3B%7D%7D)%3BGestures.register(%7Bname%3A'tap'%2Cdeps%3A%5B'mousedown'%2C'click'%2C'touchstart'%2C'touchend'%5D%2Cflow%3A%7Bstart%3A%5B'mousedown'%2C'touchstart'%5D%2Cend%3A%5B'click'%2C'touchend'%5D%7D%2Cemits%3A%5B'tap'%5D%2Cinfo%3A%7Bx%3ANaN%2Cy%3ANaN%2Cprevent%3Afalse%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Freset%3Afunction%20reset()%7Bthis.info.x%3DNaN%3Bthis.info.y%3DNaN%3Bthis.info.prevent%3Dfalse%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7BMouseEvent%7D%20e%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Fsave%3Afunction%20save(e)%7Bthis.info.x%3De.clientX%3Bthis.info.y%3De.clientY%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7BMouseEvent%7D%20e%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Fmousedown%3Afunction%20mousedown(e)%7Bif(hasLeftMouseButton(e))%7Bthis.save(e)%3B%7D%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7BMouseEvent%7D%20e%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Fclick%3Afunction%20click(e)%7Bif(hasLeftMouseButton(e))%7Bthis.forward(e)%3B%7D%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7BTouchEvent%7D%20e%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Ftouchstart%3Afunction%20touchstart(e)%7Bthis.save(e.changedTouches%5B0%5D%2Ce)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7BTouchEvent%7D%20e%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Ftouchend%3Afunction%20touchend(e)%7Bthis.forward(e.changedTouches%5B0%5D%2Ce)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7BEvent%20%7C%20Touch%7D%20e%0A%20%20%20%20%20*%20%40param%20%7BEvent%3D%7D%20preventer%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Fforward%3Afunction%20forward(e%2Cpreventer)%7Bvar%20dx%3DMath.abs(e.clientX-this.info.x)%3Bvar%20dy%3DMath.abs(e.clientY-this.info.y)%3B%2F%2F%20find%20original%20target%20from%20%60preventer%60%20for%20TouchEvents%2C%20or%20%60e%60%20for%20MouseEvents%0Avar%20t%3DGestures._findOriginalTarget(%2F**%20%40type%20%7BEvent%7D%20*%2Fpreventer%7C%7Ce)%3Bif(!t%7C%7CcanBeDisabled%5B%2F**%20%40type%20%7B!HTMLElement%7D%20*%2Ft.localName%5D%26%26t.hasAttribute('disabled'))%7Breturn%3B%7D%2F%2F%20dx%2Cdy%20can%20be%20NaN%20if%20%60click%60%20has%20been%20simulated%20and%20there%20was%20no%20%60down%60%20for%20%60start%60%0Aif(isNaN(dx)%7C%7CisNaN(dy)%7C%7Cdx%3C%3DTAP_DISTANCE%26%26dy%3C%3DTAP_DISTANCE%7C%7CisSyntheticClick(e))%7B%2F%2F%20prevent%20taps%20from%20being%20generated%20if%20an%20event%20has%20canceled%20them%0Aif(!this.info.prevent)%7BGestures._fire(t%2C'tap'%2C%7Bx%3Ae.clientX%2Cy%3Ae.clientY%2CsourceEvent%3Ae%2Cpreventer%3Apreventer%7D)%3B%7D%7D%7D%7D)%3B%2F*%20eslint-enable%20valid-jsdoc%20*%2F%2F**%20%40deprecated%20*%2FGestures.findOriginalTarget%3DGestures._findOriginalTarget%3B%2F**%20%40deprecated%20*%2FGestures.add%3DGestures.addListener%3B%2F**%20%40deprecated%20*%2FGestures.remove%3DGestures.removeListener%3BPolymer.Gestures%3DGestures%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Fgestures.html.js%0A",
            "resourceBytes": 26851,
            "encodedBytes": 0,
            "unusedBytes": 14717
          },
          {
            "name": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bvar%20_get%3Dfunction%20get(object%2Cproperty%2Creceiver)%7Bif(object%3D%3D%3Dnull)object%3DFunction.prototype%3Bvar%20desc%3DObject.getOwnPropertyDescriptor(object%2Cproperty)%3Bif(desc%3D%3D%3Dundefined)%7Bvar%20parent%3DObject.getPrototypeOf(object)%3Bif(parent%3D%3D%3Dnull)%7Breturn%20undefined%3B%7Delse%7Breturn%20get(parent%2Cproperty%2Creceiver)%3B%7D%7Delse%20if(%22value%22in%20desc)%7Breturn%20desc.value%3B%7Delse%7Bvar%20getter%3Ddesc.get%3Bif(getter%3D%3D%3Dundefined)%7Breturn%20undefined%3B%7Dreturn%20getter.call(receiver)%3B%7D%7D%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3B%2F**%0A%20%20%20*%20%40const%20%7BPolymer.Gestures%7D%0A%20%20%20*%2Fvar%20gestures%3DPolymer.Gestures%3B%2F**%0A%20%20%20*%20Element%20class%20mixin%20that%20provides%20API%20for%20adding%20Polymer's%20cross-platform%0A%20%20%20*%20gesture%20events%20to%20nodes.%0A%20%20%20*%0A%20%20%20*%20The%20API%20is%20designed%20to%20be%20compatible%20with%20override%20points%20implemented%0A%20%20%20*%20in%20%60Polymer.TemplateStamp%60%20such%20that%20declarative%20event%20listeners%20in%0A%20%20%20*%20templates%20will%20support%20gesture%20events%20when%20this%20mixin%20is%20applied%20along%20with%0A%20%20%20*%20%60Polymer.TemplateStamp%60.%0A%20%20%20*%0A%20%20%20*%20%40mixinFunction%0A%20%20%20*%20%40polymer%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Element%20class%20mixin%20that%20provides%20API%20for%20adding%20Polymer's%20cross-platform%0A%20%20%20*%20gesture%20events%20to%20nodes%0A%20%20%20*%2FPolymer.GestureEventListeners%3DPolymer.dedupingMixin(function(superClass)%7B%2F**%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40mixinClass%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_GestureEventListeners%7D%0A%20%20%20%20%20*%2Fvar%20GestureEventListeners%3Dfunction(_superClass)%7B_inherits(GestureEventListeners%2C_superClass)%3Bfunction%20GestureEventListeners()%7B_classCallCheck(this%2CGestureEventListeners)%3Breturn%20_possibleConstructorReturn(this%2C(GestureEventListeners.__proto__%7C%7CObject.getPrototypeOf(GestureEventListeners)).apply(this%2Carguments))%3B%7D_createClass(GestureEventListeners%2C%5B%7Bkey%3A'_addEventListenerToNode'%2C%2F**%0A%20%20%20%20%20%20%20*%20Add%20the%20event%20listener%20to%20the%20node%20if%20it%20is%20a%20gestures%20event.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Node%7D%20node%20Node%20to%20add%20event%20listener%20to%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20eventName%20Name%20of%20event%0A%20%20%20%20%20%20%20*%20%40param%20%7Bfunction(!Event)%3Avoid%7D%20handler%20Listener%20function%20to%20add%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_addEventListenerToNode(node%2CeventName%2Chandler)%7Bif(!gestures.addListener(node%2CeventName%2Chandler))%7B_get(GestureEventListeners.prototype.__proto__%7C%7CObject.getPrototypeOf(GestureEventListeners.prototype)%2C'_addEventListenerToNode'%2Cthis).call(this%2Cnode%2CeventName%2Chandler)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Remove%20the%20event%20listener%20to%20the%20node%20if%20it%20is%20a%20gestures%20event.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Node%7D%20node%20Node%20to%20remove%20event%20listener%20from%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20eventName%20Name%20of%20event%0A%20%20%20%20%20%20%20*%20%40param%20%7Bfunction(!Event)%3Avoid%7D%20handler%20Listener%20function%20to%20remove%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_removeEventListenerFromNode'%2Cvalue%3Afunction%20_removeEventListenerFromNode(node%2CeventName%2Chandler)%7Bif(!gestures.removeListener(node%2CeventName%2Chandler))%7B_get(GestureEventListeners.prototype.__proto__%7C%7CObject.getPrototypeOf(GestureEventListeners.prototype)%2C'_removeEventListenerFromNode'%2Cthis).call(this%2Cnode%2CeventName%2Chandler)%3B%7D%7D%7D%5D)%3Breturn%20GestureEventListeners%3B%7D(superClass)%3Breturn%20GestureEventListeners%3B%7D)%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Fmixins%2Fgesture-event-listeners.html.js%0A",
            "resourceBytes": 4429,
            "encodedBytes": 0,
            "unusedBytes": 2495
          },
          {
            "name": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bvar%20_get%3Dfunction%20get(object%2Cproperty%2Creceiver)%7Bif(object%3D%3D%3Dnull)object%3DFunction.prototype%3Bvar%20desc%3DObject.getOwnPropertyDescriptor(object%2Cproperty)%3Bif(desc%3D%3D%3Dundefined)%7Bvar%20parent%3DObject.getPrototypeOf(object)%3Bif(parent%3D%3D%3Dnull)%7Breturn%20undefined%3B%7Delse%7Breturn%20get(parent%2Cproperty%2Creceiver)%3B%7D%7Delse%20if(%22value%22in%20desc)%7Breturn%20desc.value%3B%7Delse%7Bvar%20getter%3Ddesc.get%3Bif(getter%3D%3D%3Dundefined)%7Breturn%20undefined%3B%7Dreturn%20getter.call(receiver)%3B%7D%7D%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3Bvar%20HOST_DIR%3D%2F%3Ahost%5C(%3Adir%5C((ltr%7Crtl)%5C)%5C)%2Fg%3Bvar%20HOST_DIR_REPLACMENT%3D'%3Ahost(%5Bdir%3D%22%241%22%5D)'%3Bvar%20EL_DIR%3D%2F(%5B%5Cs%5Cw-%23%5C.%5C%5B%5C%5D%5C*%5D*)%3Adir%5C((ltr%7Crtl)%5C)%2Fg%3Bvar%20EL_DIR_REPLACMENT%3D'%3Ahost(%5Bdir%3D%22%242%22%5D)%20%241'%3Bvar%20DIR_CHECK%3D%2F%3Adir%5C((%3F%3Altr%7Crtl)%5C)%2F%3Bvar%20SHIM_SHADOW%3DBoolean(window%5B'ShadyDOM'%5D%26%26window%5B'ShadyDOM'%5D%5B'inUse'%5D)%3B%2F**%0A%20%20%20%20%20*%20%40type%20%7B!Array%3C!Polymer_DirMixin%3E%7D%0A%20%20%20%20%20*%2Fvar%20DIR_INSTANCES%3D%5B%5D%3B%2F**%20%40type%20%7BMutationObserver%7D%20*%2Fvar%20observer%3Dnull%3Bvar%20DOCUMENT_DIR%3D''%3Bfunction%20getRTL()%7BDOCUMENT_DIR%3Ddocument.documentElement.getAttribute('dir')%3B%7D%2F**%0A%20%20%20%20%20*%20%40param%20%7B!Polymer_DirMixin%7D%20instance%20Instance%20to%20set%20RTL%20status%20on%0A%20%20%20%20%20*%2Ffunction%20setRTL(instance)%7Bif(!instance.__autoDirOptOut)%7Bvar%20el%3D%2F**%20%40type%20%7B!HTMLElement%7D%20*%2Finstance%3Bel.setAttribute('dir'%2CDOCUMENT_DIR)%3B%7D%7Dfunction%20updateDirection()%7BgetRTL()%3BDOCUMENT_DIR%3Ddocument.documentElement.getAttribute('dir')%3Bfor(var%20i%3D0%3Bi%3CDIR_INSTANCES.length%3Bi%2B%2B)%7BsetRTL(DIR_INSTANCES%5Bi%5D)%3B%7D%7Dfunction%20takeRecords()%7Bif(observer%26%26observer.takeRecords().length)%7BupdateDirection()%3B%7D%7D%2F**%0A%20%20%20%20%20*%20Element%20class%20mixin%20that%20allows%20elements%20to%20use%20the%20%60%3Adir%60%20CSS%20Selector%20to%20have%0A%20%20%20%20%20*%20text%20direction%20specific%20styling.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20With%20this%20mixin%2C%20any%20stylesheet%20provided%20in%20the%20template%20will%20transform%20%60%3Adir%60%20into%0A%20%20%20%20%20*%20%60%3Ahost(%5Bdir%5D)%60%20and%20sync%20direction%20with%20the%20page%20via%20the%20element's%20%60dir%60%20attribute.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Elements%20can%20opt%20out%20of%20the%20global%20page%20text%20direction%20by%20setting%20the%20%60dir%60%20attribute%0A%20%20%20%20%20*%20directly%20in%20%60ready()%60%20or%20in%20HTML.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Caveats%3A%0A%20%20%20%20%20*%20-%20Applications%20must%20set%20%60%3Chtml%20dir%3D%22ltr%22%3E%60%20or%20%60%3Chtml%20dir%3D%22rtl%22%3E%60%20to%20sync%20direction%0A%20%20%20%20%20*%20-%20Automatic%20left-to-right%20or%20right-to-left%20styling%20is%20sync'd%20with%20the%20%60%3Chtml%3E%60%20element%20only.%0A%20%20%20%20%20*%20-%20Changing%20%60dir%60%20at%20runtime%20is%20supported.%0A%20%20%20%20%20*%20-%20Opting%20out%20of%20the%20global%20direction%20styling%20is%20permanent%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40mixinFunction%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40appliesMixin%20Polymer.PropertyAccessors%0A%20%20%20%20%20*%20%40memberof%20Polymer%0A%20%20%20%20%20*%2FPolymer.DirMixin%3DPolymer.dedupingMixin(function(base)%7Bif(!SHIM_SHADOW)%7Bif(!observer)%7BgetRTL()%3Bobserver%3Dnew%20MutationObserver(updateDirection)%3Bobserver.observe(document.documentElement%2C%7Battributes%3Atrue%2CattributeFilter%3A%5B'dir'%5D%7D)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20%20%20*%20%40extends%20%7Bbase%7D%0A%20%20%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertyAccessors%7D%0A%20%20%20%20%20%20%20*%20%40private%0A%20%20%20%20%20%20%20*%2Fvar%20elementBase%3DPolymer.PropertyAccessors(base)%3B%2F**%0A%20%20%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20%20%20*%20%40mixinClass%0A%20%20%20%20%20%20%20*%20%40implements%20%7BPolymer_DirMixin%7D%0A%20%20%20%20%20%20%20*%2Fvar%20Dir%3Dfunction(_elementBase)%7B_inherits(Dir%2C_elementBase)%3B_createClass(Dir%2Cnull%2C%5B%7Bkey%3A'_processStyleText'%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20Interfaces%20in%20closure%20do%20not%20inherit%20statics%2C%20but%20classes%20do%0A%20%20%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_processStyleText(cssText%2CbaseURI)%7BcssText%3D_get(Dir.__proto__%7C%7CObject.getPrototypeOf(Dir)%2C'_processStyleText'%2Cthis).call(this%2CcssText%2CbaseURI)%3Bif(!SHIM_SHADOW%26%26DIR_CHECK.test(cssText))%7BcssText%3Dthis._replaceDirInCssText(cssText)%3Bthis.__activateDir%3Dtrue%3B%7Dreturn%20cssText%3B%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Replace%20%60%3Adir%60%20in%20the%20given%20CSS%20text%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20text%20CSS%20text%20to%20replace%20DIR%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Modified%20CSS%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_replaceDirInCssText'%2Cvalue%3Afunction%20_replaceDirInCssText(text)%7Bvar%20replacedText%3Dtext%3BreplacedText%3DreplacedText.replace(HOST_DIR%2CHOST_DIR_REPLACMENT)%3BreplacedText%3DreplacedText.replace(EL_DIR%2CEL_DIR_REPLACMENT)%3Breturn%20replacedText%3B%7D%7D%5D)%3Bfunction%20Dir()%7B_classCallCheck(this%2CDir)%3B%2F**%20%40type%20%7Bboolean%7D%20*%2Fvar%20_this%3D_possibleConstructorReturn(this%2C(Dir.__proto__%7C%7CObject.getPrototypeOf(Dir)).call(this))%3B_this.__autoDirOptOut%3Dfalse%3Breturn%20_this%3B%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%20Closure%20doesn't%20understand%20that%20%60this%60%20is%20an%20HTMLElement%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F_createClass(Dir%2C%5B%7Bkey%3A'ready'%2Cvalue%3Afunction%20ready()%7B_get(Dir.prototype.__proto__%7C%7CObject.getPrototypeOf(Dir.prototype)%2C'ready'%2Cthis).call(this)%3Bthis.__autoDirOptOut%3D%2F**%20%40type%20%7B!HTMLElement%7D%20*%2Fthis.hasAttribute('dir')%3B%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20If%20it%20exists%20on%20elementBase%2C%20it%20can%20be%20super'd%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'connectedCallback'%2Cvalue%3Afunction%20connectedCallback()%7Bif(elementBase.prototype.connectedCallback)%7B_get(Dir.prototype.__proto__%7C%7CObject.getPrototypeOf(Dir.prototype)%2C'connectedCallback'%2Cthis).call(this)%3B%7Dif(this.constructor.__activateDir)%7BtakeRecords()%3BDIR_INSTANCES.push(this)%3BsetRTL(this)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20If%20it%20exists%20on%20elementBase%2C%20it%20can%20be%20super'd%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'disconnectedCallback'%2Cvalue%3Afunction%20disconnectedCallback()%7Bif(elementBase.prototype.disconnectedCallback)%7B_get(Dir.prototype.__proto__%7C%7CObject.getPrototypeOf(Dir.prototype)%2C'disconnectedCallback'%2Cthis).call(this)%3B%7Dif(this.constructor.__activateDir)%7Bvar%20idx%3DDIR_INSTANCES.indexOf(this)%3Bif(idx%3E-1)%7BDIR_INSTANCES.splice(idx%2C1)%3B%7D%7D%7D%7D%5D)%3Breturn%20Dir%3B%7D(elementBase)%3BDir.__activateDir%3Dfalse%3Breturn%20Dir%3B%7D)%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Fmixins%2Fdir-mixin.html.js%0A",
            "resourceBytes": 6777,
            "encodedBytes": 0,
            "unusedBytes": 3525
          },
          {
            "name": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3B%2F%2F%20run%20a%20callback%20when%20HTMLImports%20are%20ready%20or%20immediately%20if%0A%2F%2F%20this%20api%20is%20not%20available.%0Afunction%20whenImportsReady(cb)%7Bif(window.HTMLImports)%7BHTMLImports.whenReady(cb)%3B%7Delse%7Bcb()%3B%7D%7D%2F**%0A%20%20%20*%20Convenience%20method%20for%20importing%20an%20HTML%20document%20imperatively.%0A%20%20%20*%0A%20%20%20*%20This%20method%20creates%20a%20new%20%60%3Clink%20rel%3D%22import%22%3E%60%20element%20with%0A%20%20%20*%20the%20provided%20URL%20and%20appends%20it%20to%20the%20document%20to%20start%20loading.%0A%20%20%20*%20In%20the%20%60onload%60%20callback%2C%20the%20%60import%60%20property%20of%20the%20%60link%60%0A%20%20%20*%20element%20will%20contain%20the%20imported%20document%20contents.%0A%20%20%20*%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40param%20%7Bstring%7D%20href%20URL%20to%20document%20to%20load.%0A%20%20%20*%20%40param%20%7B%3Ffunction(!Event)%3Avoid%3D%7D%20onload%20Callback%20to%20notify%20when%20an%20import%20successfully%0A%20%20%20*%20%20%20loaded.%0A%20%20%20*%20%40param%20%7B%3Ffunction(!ErrorEvent)%3Avoid%3D%7D%20onerror%20Callback%20to%20notify%20when%20an%20import%0A%20%20%20*%20%20%20unsuccessfully%20loaded.%0A%20%20%20*%20%40param%20%7Bboolean%3D%7D%20optAsync%20True%20if%20the%20import%20should%20be%20loaded%20%60async%60.%0A%20%20%20*%20%20%20Defaults%20to%20%60false%60.%0A%20%20%20*%20%40return%20%7B!HTMLLinkElement%7D%20The%20link%20element%20for%20the%20URL%20to%20be%20loaded.%0A%20%20%20*%2FPolymer.importHref%3Dfunction(href%2Conload%2Conerror%2CoptAsync)%7Bvar%20link%3D%2F**%20%40type%20%7BHTMLLinkElement%7D%20*%2Fdocument.head.querySelector('link%5Bhref%3D%22'%2Bhref%2B'%22%5D%5Bimport-href%5D')%3Bif(!link)%7Blink%3D%2F**%20%40type%20%7BHTMLLinkElement%7D%20*%2Fdocument.createElement('link')%3Blink.rel%3D'import'%3Blink.href%3Dhref%3Blink.setAttribute('import-href'%2C'')%3B%7D%2F%2F%20always%20ensure%20link%20has%20%60async%60%20attribute%20if%20user%20specified%20one%2C%0A%2F%2F%20even%20if%20it%20was%20previously%20not%20async.%20This%20is%20considered%20less%20confusing.%0Aif(optAsync)%7Blink.setAttribute('async'%2C'')%3B%7D%2F%2F%20NOTE%3A%20the%20link%20may%20now%20be%20in%203%20states%3A%20(1)%20pending%20insertion%2C%0A%2F%2F%20(2)%20inflight%2C%20(3)%20already%20loaded.%20In%20each%20case%2C%20we%20need%20to%20add%0A%2F%2F%20event%20listeners%20to%20process%20callbacks.%0Avar%20cleanup%3Dfunction%20cleanup()%7Blink.removeEventListener('load'%2CloadListener)%3Blink.removeEventListener('error'%2CerrorListener)%3B%7D%3Bvar%20loadListener%3Dfunction%20loadListener(event)%7Bcleanup()%3B%2F%2F%20In%20case%20of%20a%20successful%20load%2C%20cache%20the%20load%20event%20on%20the%20link%20so%0A%2F%2F%20that%20it%20can%20be%20used%20to%20short-circuit%20this%20method%20in%20the%20future%20when%0A%2F%2F%20it%20is%20called%20with%20the%20same%20href%20param.%0Alink.__dynamicImportLoaded%3Dtrue%3Bif(onload)%7BwhenImportsReady(function()%7Bonload(event)%3B%7D)%3B%7D%7D%3Bvar%20errorListener%3Dfunction%20errorListener(event)%7Bcleanup()%3B%2F%2F%20In%20case%20of%20an%20error%2C%20remove%20the%20link%20from%20the%20document%20so%20that%20it%0A%2F%2F%20will%20be%20automatically%20created%20again%20the%20next%20time%20%60importHref%60%20is%0A%2F%2F%20called.%0Aif(link.parentNode)%7Blink.parentNode.removeChild(link)%3B%7Dif(onerror)%7BwhenImportsReady(function()%7Bonerror(event)%3B%7D)%3B%7D%7D%3Blink.addEventListener('load'%2CloadListener)%3Blink.addEventListener('error'%2CerrorListener)%3Bif(link.parentNode%3D%3Dnull)%7Bdocument.head.appendChild(link)%3B%2F%2F%20if%20the%20link%20already%20loaded%2C%20dispatch%20a%20fake%20load%20event%0A%2F%2F%20so%20that%20listeners%20are%20called%20and%20get%20a%20proper%20event%20argument.%0A%7Delse%20if(link.__dynamicImportLoaded)%7Blink.dispatchEvent(new%20Event('load'))%3B%7Dreturn%20link%3B%7D%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Fimport-href.html.js%0A",
            "resourceBytes": 2990,
            "encodedBytes": 0,
            "unusedBytes": 1877
          },
          {
            "name": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3Bvar%20scheduled%3Dfalse%3Bvar%20beforeRenderQueue%3D%5B%5D%3Bvar%20afterRenderQueue%3D%5B%5D%3Bfunction%20schedule()%7Bscheduled%3Dtrue%3B%2F%2F%20before%20next%20render%0ArequestAnimationFrame(function()%7Bscheduled%3Dfalse%3BflushQueue(beforeRenderQueue)%3B%2F%2F%20after%20the%20render%0AsetTimeout(function()%7BrunQueue(afterRenderQueue)%3B%7D)%3B%7D)%3B%7Dfunction%20flushQueue(queue)%7Bwhile(queue.length)%7BcallMethod(queue.shift())%3B%7D%7Dfunction%20runQueue(queue)%7Bfor(var%20i%3D0%2Cl%3Dqueue.length%3Bi%3Cl%3Bi%2B%2B)%7BcallMethod(queue.shift())%3B%7D%7Dfunction%20callMethod(info)%7Bvar%20context%3Dinfo%5B0%5D%3Bvar%20callback%3Dinfo%5B1%5D%3Bvar%20args%3Dinfo%5B2%5D%3Btry%7Bcallback.apply(context%2Cargs)%3B%7Dcatch(e)%7BsetTimeout(function()%7Bthrow%20e%3B%7D)%3B%7D%7Dfunction%20flush()%7Bwhile(beforeRenderQueue.length%7C%7CafterRenderQueue.length)%7BflushQueue(beforeRenderQueue)%3BflushQueue(afterRenderQueue)%3B%7Dscheduled%3Dfalse%3B%7D%2F**%0A%20%20%20*%20Module%20for%20scheduling%20flushable%20pre-render%20and%20post-render%20tasks.%0A%20%20%20*%0A%20%20%20*%20%40namespace%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Module%20for%20scheduling%20flushable%20pre-render%20and%20post-render%20tasks.%0A%20%20%20*%2FPolymer.RenderStatus%3D%7B%2F**%0A%20%20%20%20%20*%20Enqueues%20a%20callback%20which%20will%20be%20run%20before%20the%20next%20render%2C%20at%0A%20%20%20%20%20*%20%60requestAnimationFrame%60%20timing.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20This%20method%20is%20useful%20for%20enqueuing%20work%20that%20requires%20DOM%20measurement%2C%0A%20%20%20%20%20*%20since%20measurement%20may%20not%20be%20reliable%20in%20custom%20element%20callbacks%20before%0A%20%20%20%20%20*%20the%20first%20render%2C%20as%20well%20as%20for%20batching%20measurement%20tasks%20in%20general.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Tasks%20in%20this%20queue%20may%20be%20flushed%20by%20calling%20%60Polymer.RenderStatus.flush()%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.RenderStatus%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20context%20Context%20object%20the%20callback%20function%20will%20be%20bound%20to%0A%20%20%20%20%20*%20%40param%20%7Bfunction(...*)%3Avoid%7D%20callback%20Callback%20function%0A%20%20%20%20%20*%20%40param%20%7B!Array%3D%7D%20args%20An%20array%20of%20arguments%20to%20call%20the%20callback%20function%20with%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2FbeforeNextRender%3Afunction%20beforeNextRender(context%2Ccallback%2Cargs)%7Bif(!scheduled)%7Bschedule()%3B%7DbeforeRenderQueue.push(%5Bcontext%2Ccallback%2Cargs%5D)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Enqueues%20a%20callback%20which%20will%20be%20run%20after%20the%20next%20render%2C%20equivalent%0A%20%20%20%20%20*%20to%20one%20task%20(%60setTimeout%60)%20after%20the%20next%20%60requestAnimationFrame%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20This%20method%20is%20useful%20for%20tuning%20the%20first-render%20performance%20of%20an%0A%20%20%20%20%20*%20element%20or%20application%20by%20deferring%20non-critical%20work%20until%20after%20the%0A%20%20%20%20%20*%20first%20paint.%20%20Typical%20non-render-critical%20work%20may%20include%20adding%20UI%0A%20%20%20%20%20*%20event%20listeners%20and%20aria%20attributes.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.RenderStatus%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20context%20Context%20object%20the%20callback%20function%20will%20be%20bound%20to%0A%20%20%20%20%20*%20%40param%20%7Bfunction(...*)%3Avoid%7D%20callback%20Callback%20function%0A%20%20%20%20%20*%20%40param%20%7B!Array%3D%7D%20args%20An%20array%20of%20arguments%20to%20call%20the%20callback%20function%20with%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2FafterNextRender%3Afunction%20afterNextRender(context%2Ccallback%2Cargs)%7Bif(!scheduled)%7Bschedule()%3B%7DafterRenderQueue.push(%5Bcontext%2Ccallback%2Cargs%5D)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Flushes%20all%20%60beforeNextRender%60%20tasks%2C%20followed%20by%20all%20%60afterNextRender%60%0A%20%20%20%20%20*%20tasks.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.RenderStatus%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Fflush%3Aflush%7D%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Frender-status.html.js%0A",
            "resourceBytes": 3121,
            "encodedBytes": 0,
            "unusedBytes": 937
          },
          {
            "name": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3B%2F%2F%20unresolved%0Afunction%20resolve()%7Bdocument.body.removeAttribute('unresolved')%3B%7Dif(window.WebComponents)%7Bwindow.addEventListener('WebComponentsReady'%2Cresolve)%3B%7Delse%7Bif(document.readyState%3D%3D%3D'interactive'%7C%7Cdocument.readyState%3D%3D%3D'complete')%7Bresolve()%3B%7Delse%7Bwindow.addEventListener('DOMContentLoaded'%2Cresolve)%3B%7D%7D%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Funresolved.html.js%0A",
            "resourceBytes": 480,
            "encodedBytes": 0,
            "unusedBytes": 0
          },
          {
            "name": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3Bfunction%20newSplice(index%2Cremoved%2CaddedCount)%7Breturn%7Bindex%3Aindex%2Cremoved%3Aremoved%2CaddedCount%3AaddedCount%7D%3B%7Dvar%20EDIT_LEAVE%3D0%3Bvar%20EDIT_UPDATE%3D1%3Bvar%20EDIT_ADD%3D2%3Bvar%20EDIT_DELETE%3D3%3B%2F%2F%20Note%3A%20This%20function%20is%20*based*%20on%20the%20computation%20of%20the%20Levenshtein%0A%2F%2F%20%22edit%22%20distance.%20The%20one%20change%20is%20that%20%22updates%22%20are%20treated%20as%20two%0A%2F%2F%20edits%20-%20not%20one.%20With%20Array%20splices%2C%20an%20update%20is%20really%20a%20delete%0A%2F%2F%20followed%20by%20an%20add.%20By%20retaining%20this%2C%20we%20optimize%20for%20%22keeping%22%20the%0A%2F%2F%20maximum%20array%20items%20in%20the%20original%20array.%20For%20example%3A%0A%2F%2F%0A%2F%2F%20%20%20'xxxx123'%20-%3E%20'123yyyy'%0A%2F%2F%0A%2F%2F%20With%201-edit%20updates%2C%20the%20shortest%20path%20would%20be%20just%20to%20update%20all%20seven%0A%2F%2F%20characters.%20With%202-edit%20updates%2C%20we%20delete%204%2C%20leave%203%2C%20and%20add%204.%20This%0A%2F%2F%20leaves%20the%20substring%20'123'%20intact.%0Afunction%20calcEditDistances(current%2CcurrentStart%2CcurrentEnd%2Cold%2ColdStart%2ColdEnd)%7B%2F%2F%20%22Deletion%22%20columns%0Avar%20rowCount%3DoldEnd-oldStart%2B1%3Bvar%20columnCount%3DcurrentEnd-currentStart%2B1%3Bvar%20distances%3Dnew%20Array(rowCount)%3B%2F%2F%20%22Addition%22%20rows.%20Initialize%20null%20column.%0Afor(var%20i%3D0%3Bi%3CrowCount%3Bi%2B%2B)%7Bdistances%5Bi%5D%3Dnew%20Array(columnCount)%3Bdistances%5Bi%5D%5B0%5D%3Di%3B%7D%2F%2F%20Initialize%20null%20row%0Afor(var%20j%3D0%3Bj%3CcolumnCount%3Bj%2B%2B)%7Bdistances%5B0%5D%5Bj%5D%3Dj%3B%7Dfor(var%20_i%3D1%3B_i%3CrowCount%3B_i%2B%2B)%7Bfor(var%20_j%3D1%3B_j%3CcolumnCount%3B_j%2B%2B)%7Bif(equals(current%5BcurrentStart%2B_j-1%5D%2Cold%5BoldStart%2B_i-1%5D))distances%5B_i%5D%5B_j%5D%3Ddistances%5B_i-1%5D%5B_j-1%5D%3Belse%7Bvar%20north%3Ddistances%5B_i-1%5D%5B_j%5D%2B1%3Bvar%20west%3Ddistances%5B_i%5D%5B_j-1%5D%2B1%3Bdistances%5B_i%5D%5B_j%5D%3Dnorth%3Cwest%3Fnorth%3Awest%3B%7D%7D%7Dreturn%20distances%3B%7D%2F%2F%20This%20starts%20at%20the%20final%20weight%2C%20and%20walks%20%22backward%22%20by%20finding%0A%2F%2F%20the%20minimum%20previous%20weight%20recursively%20until%20the%20origin%20of%20the%20weight%0A%2F%2F%20matrix.%0Afunction%20spliceOperationsFromEditDistances(distances)%7Bvar%20i%3Ddistances.length-1%3Bvar%20j%3Ddistances%5B0%5D.length-1%3Bvar%20current%3Ddistances%5Bi%5D%5Bj%5D%3Bvar%20edits%3D%5B%5D%3Bwhile(i%3E0%7C%7Cj%3E0)%7Bif(i%3D%3D0)%7Bedits.push(EDIT_ADD)%3Bj--%3Bcontinue%3B%7Dif(j%3D%3D0)%7Bedits.push(EDIT_DELETE)%3Bi--%3Bcontinue%3B%7Dvar%20northWest%3Ddistances%5Bi-1%5D%5Bj-1%5D%3Bvar%20west%3Ddistances%5Bi-1%5D%5Bj%5D%3Bvar%20north%3Ddistances%5Bi%5D%5Bj-1%5D%3Bvar%20min%3Dvoid%200%3Bif(west%3Cnorth)min%3Dwest%3CnorthWest%3Fwest%3AnorthWest%3Belse%20min%3Dnorth%3CnorthWest%3Fnorth%3AnorthWest%3Bif(min%3D%3DnorthWest)%7Bif(northWest%3D%3Dcurrent)%7Bedits.push(EDIT_LEAVE)%3B%7Delse%7Bedits.push(EDIT_UPDATE)%3Bcurrent%3DnorthWest%3B%7Di--%3Bj--%3B%7Delse%20if(min%3D%3Dwest)%7Bedits.push(EDIT_DELETE)%3Bi--%3Bcurrent%3Dwest%3B%7Delse%7Bedits.push(EDIT_ADD)%3Bj--%3Bcurrent%3Dnorth%3B%7D%7Dedits.reverse()%3Breturn%20edits%3B%7D%2F**%0A%20%20%20*%20Splice%20Projection%20functions%3A%0A%20%20%20*%0A%20%20%20*%20A%20splice%20map%20is%20a%20representation%20of%20how%20a%20previous%20array%20of%20items%0A%20%20%20*%20was%20transformed%20into%20a%20new%20array%20of%20items.%20Conceptually%20it%20is%20a%20list%20of%0A%20%20%20*%20tuples%20of%0A%20%20%20*%0A%20%20%20*%20%20%20%3Cindex%2C%20removed%2C%20addedCount%3E%0A%20%20%20*%0A%20%20%20*%20which%20are%20kept%20in%20ascending%20index%20order%20of.%20The%20tuple%20represents%20that%20at%0A%20%20%20*%20the%20%7Cindex%7C%2C%20%7Cremoved%7C%20sequence%20of%20items%20were%20removed%2C%20and%20counting%20forward%0A%20%20%20*%20from%20%7Cindex%7C%2C%20%7CaddedCount%7C%20items%20were%20added.%0A%20%20%20*%2F%2F**%0A%20%20%20*%20Lacking%20individual%20splice%20mutation%20information%2C%20the%20minimal%20set%20of%0A%20%20%20*%20splices%20can%20be%20synthesized%20given%20the%20previous%20state%20and%20final%20state%20of%20an%0A%20%20%20*%20array.%20The%20basic%20approach%20is%20to%20calculate%20the%20edit%20distance%20matrix%20and%0A%20%20%20*%20choose%20the%20shortest%20path%20through%20it.%0A%20%20%20*%0A%20%20%20*%20Complexity%3A%20O(l%20*%20p)%0A%20%20%20*%20%20%20l%3A%20The%20length%20of%20the%20current%20array%0A%20%20%20*%20%20%20p%3A%20The%20length%20of%20the%20old%20array%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!Array%7D%20current%20The%20current%20%22changed%22%20array%20for%20which%20to%0A%20%20%20*%20calculate%20splices.%0A%20%20%20*%20%40param%20%7Bnumber%7D%20currentStart%20Starting%20index%20in%20the%20%60current%60%20array%20for%0A%20%20%20*%20which%20splices%20are%20calculated.%0A%20%20%20*%20%40param%20%7Bnumber%7D%20currentEnd%20Ending%20index%20in%20the%20%60current%60%20array%20for%0A%20%20%20*%20which%20splices%20are%20calculated.%0A%20%20%20*%20%40param%20%7B!Array%7D%20old%20The%20original%20%22unchanged%22%20array%20to%20compare%20%60current%60%0A%20%20%20*%20against%20to%20determine%20splices.%0A%20%20%20*%20%40param%20%7Bnumber%7D%20oldStart%20Starting%20index%20in%20the%20%60old%60%20array%20for%0A%20%20%20*%20which%20splices%20are%20calculated.%0A%20%20%20*%20%40param%20%7Bnumber%7D%20oldEnd%20Ending%20index%20in%20the%20%60old%60%20array%20for%0A%20%20%20*%20which%20splices%20are%20calculated.%0A%20%20%20*%20%40return%20%7B!Array%7D%20Returns%20an%20array%20of%20splice%20record%20objects.%20Each%20of%20these%0A%20%20%20*%20contains%3A%20%60index%60%20the%20location%20where%20the%20splice%20occurred%3B%20%60removed%60%0A%20%20%20*%20the%20array%20of%20removed%20items%20from%20this%20location%3B%20%60addedCount%60%20the%20number%0A%20%20%20*%20of%20items%20added%20at%20this%20location.%0A%20%20%20*%2Ffunction%20calcSplices(current%2CcurrentStart%2CcurrentEnd%2Cold%2ColdStart%2ColdEnd)%7Bvar%20prefixCount%3D0%3Bvar%20suffixCount%3D0%3Bvar%20splice%3Dvoid%200%3Bvar%20minLength%3DMath.min(currentEnd-currentStart%2ColdEnd-oldStart)%3Bif(currentStart%3D%3D0%26%26oldStart%3D%3D0)prefixCount%3DsharedPrefix(current%2Cold%2CminLength)%3Bif(currentEnd%3D%3Dcurrent.length%26%26oldEnd%3D%3Dold.length)suffixCount%3DsharedSuffix(current%2Cold%2CminLength-prefixCount)%3BcurrentStart%2B%3DprefixCount%3BoldStart%2B%3DprefixCount%3BcurrentEnd-%3DsuffixCount%3BoldEnd-%3DsuffixCount%3Bif(currentEnd-currentStart%3D%3D0%26%26oldEnd-oldStart%3D%3D0)return%5B%5D%3Bif(currentStart%3D%3DcurrentEnd)%7Bsplice%3DnewSplice(currentStart%2C%5B%5D%2C0)%3Bwhile(oldStart%3ColdEnd)%7Bsplice.removed.push(old%5BoldStart%2B%2B%5D)%3B%7Dreturn%5Bsplice%5D%3B%7Delse%20if(oldStart%3D%3DoldEnd)return%5BnewSplice(currentStart%2C%5B%5D%2CcurrentEnd-currentStart)%5D%3Bvar%20ops%3DspliceOperationsFromEditDistances(calcEditDistances(current%2CcurrentStart%2CcurrentEnd%2Cold%2ColdStart%2ColdEnd))%3Bsplice%3Dundefined%3Bvar%20splices%3D%5B%5D%3Bvar%20index%3DcurrentStart%3Bvar%20oldIndex%3DoldStart%3Bfor(var%20i%3D0%3Bi%3Cops.length%3Bi%2B%2B)%7Bswitch(ops%5Bi%5D)%7Bcase%20EDIT_LEAVE%3Aif(splice)%7Bsplices.push(splice)%3Bsplice%3Dundefined%3B%7Dindex%2B%2B%3BoldIndex%2B%2B%3Bbreak%3Bcase%20EDIT_UPDATE%3Aif(!splice)splice%3DnewSplice(index%2C%5B%5D%2C0)%3Bsplice.addedCount%2B%2B%3Bindex%2B%2B%3Bsplice.removed.push(old%5BoldIndex%5D)%3BoldIndex%2B%2B%3Bbreak%3Bcase%20EDIT_ADD%3Aif(!splice)splice%3DnewSplice(index%2C%5B%5D%2C0)%3Bsplice.addedCount%2B%2B%3Bindex%2B%2B%3Bbreak%3Bcase%20EDIT_DELETE%3Aif(!splice)splice%3DnewSplice(index%2C%5B%5D%2C0)%3Bsplice.removed.push(old%5BoldIndex%5D)%3BoldIndex%2B%2B%3Bbreak%3B%7D%7Dif(splice)%7Bsplices.push(splice)%3B%7Dreturn%20splices%3B%7Dfunction%20sharedPrefix(current%2Cold%2CsearchLength)%7Bfor(var%20i%3D0%3Bi%3CsearchLength%3Bi%2B%2B)%7Bif(!equals(current%5Bi%5D%2Cold%5Bi%5D))return%20i%3B%7Dreturn%20searchLength%3B%7Dfunction%20sharedSuffix(current%2Cold%2CsearchLength)%7Bvar%20index1%3Dcurrent.length%3Bvar%20index2%3Dold.length%3Bvar%20count%3D0%3Bwhile(count%3CsearchLength%26%26equals(current%5B--index1%5D%2Cold%5B--index2%5D))%7Bcount%2B%2B%3B%7Dreturn%20count%3B%7Dfunction%20calculateSplices(current%2Cprevious)%7Breturn%20calcSplices(current%2C0%2Ccurrent.length%2Cprevious%2C0%2Cprevious.length)%3B%7Dfunction%20equals(currentValue%2CpreviousValue)%7Breturn%20currentValue%3D%3D%3DpreviousValue%3B%7D%2F**%0A%20%20%20*%20%40namespace%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Module%20that%20provides%20utilities%20for%20diffing%20arrays.%0A%20%20%20*%2FPolymer.ArraySplice%3D%7B%2F**%0A%20%20%20%20%20*%20Returns%20an%20array%20of%20splice%20records%20indicating%20the%20minimum%20edits%20required%0A%20%20%20%20%20*%20to%20transform%20the%20%60previous%60%20array%20into%20the%20%60current%60%20array.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Splice%20records%20are%20ordered%20by%20index%20and%20contain%20the%20following%20fields%3A%0A%20%20%20%20%20*%20-%20%60index%60%3A%20index%20where%20edit%20started%0A%20%20%20%20%20*%20-%20%60removed%60%3A%20array%20of%20removed%20items%20from%20this%20index%0A%20%20%20%20%20*%20-%20%60addedCount%60%3A%20number%20of%20items%20added%20at%20this%20index%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20This%20function%20is%20based%20on%20the%20Levenshtein%20%22minimum%20edit%20distance%22%0A%20%20%20%20%20*%20algorithm.%20Note%20that%20updates%20are%20treated%20as%20removal%20followed%20by%20addition.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20The%20worst-case%20time%20complexity%20of%20this%20algorithm%20is%20%60O(l%20*%20p)%60%0A%20%20%20%20%20*%20%20%20l%3A%20The%20length%20of%20the%20current%20array%0A%20%20%20%20%20*%20%20%20p%3A%20The%20length%20of%20the%20previous%20array%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20However%2C%20the%20worst-case%20complexity%20is%20reduced%20by%20an%20%60O(n)%60%20optimization%0A%20%20%20%20%20*%20to%20detect%20any%20shared%20prefix%20%26%20suffix%20between%20the%20two%20arrays%20and%20only%0A%20%20%20%20%20*%20perform%20the%20more%20expensive%20minimum%20edit%20distance%20calculation%20over%20the%0A%20%20%20%20%20*%20non-shared%20portions%20of%20the%20arrays.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40function%0A%20%20%20%20%20*%20%40memberof%20Polymer.ArraySplice%0A%20%20%20%20%20*%20%40param%20%7B!Array%7D%20current%20The%20%22changed%22%20array%20for%20which%20splices%20will%20be%0A%20%20%20%20%20*%20calculated.%0A%20%20%20%20%20*%20%40param%20%7B!Array%7D%20previous%20The%20%22unchanged%22%20original%20array%20to%20compare%0A%20%20%20%20%20*%20%60current%60%20against%20to%20determine%20the%20splices.%0A%20%20%20%20%20*%20%40return%20%7B!Array%7D%20Returns%20an%20array%20of%20splice%20record%20objects.%20Each%20of%20these%0A%20%20%20%20%20*%20contains%3A%20%60index%60%20the%20location%20where%20the%20splice%20occurred%3B%20%60removed%60%0A%20%20%20%20%20*%20the%20array%20of%20removed%20items%20from%20this%20location%3B%20%60addedCount%60%20the%20number%0A%20%20%20%20%20*%20of%20items%20added%20at%20this%20location.%0A%20%20%20%20%20*%2FcalculateSplices%3AcalculateSplices%7D%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Farray-splice.html.js%0A",
            "resourceBytes": 7970,
            "encodedBytes": 0,
            "unusedBytes": 3520
          },
          {
            "name": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7D(function()%7B'use%20strict'%3B%2F**%0A%20%20%20*%20Returns%20true%20if%20%60node%60%20is%20a%20slot%20element%0A%20%20%20*%20%40param%20%7BNode%7D%20node%20Node%20to%20test.%0A%20%20%20*%20%40return%20%7Bboolean%7D%20Returns%20true%20if%20the%20given%20%60node%60%20is%20a%20slot%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20isSlot(node)%7Breturn%20node.localName%3D%3D%3D'slot'%3B%7D%2F**%0A%20%20%20*%20Class%20that%20listens%20for%20changes%20(additions%20or%20removals)%20to%0A%20%20%20*%20%22flattened%20nodes%22%20on%20a%20given%20%60node%60.%20The%20list%20of%20flattened%20nodes%20consists%0A%20%20%20*%20of%20a%20node's%20children%20and%2C%20for%20any%20children%20that%20are%20%60%3Cslot%3E%60%20elements%2C%0A%20%20%20*%20the%20expanded%20flattened%20list%20of%20%60assignedNodes%60.%0A%20%20%20*%20For%20example%2C%20if%20the%20observed%20node%20has%20children%20%60%3Ca%3E%3C%2Fa%3E%3Cslot%3E%3C%2Fslot%3E%3Cb%3E%3C%2Fb%3E%60%0A%20%20%20*%20and%20the%20%60%3Cslot%3E%60%20has%20one%20%60%3Cdiv%3E%60%20assigned%20to%20it%2C%20then%20the%20flattened%0A%20%20%20*%20nodes%20list%20is%20%60%3Ca%3E%3C%2Fa%3E%3Cdiv%3E%3C%2Fdiv%3E%3Cb%3E%3C%2Fb%3E%60.%20If%20the%20%60%3Cslot%3E%60%20has%20other%0A%20%20%20*%20%60%3Cslot%3E%60%20elements%20assigned%20to%20it%2C%20these%20are%20flattened%20as%20well.%0A%20%20%20*%0A%20%20%20*%20The%20provided%20%60callback%60%20is%20called%20whenever%20any%20change%20to%20this%20list%0A%20%20%20*%20of%20flattened%20nodes%20occurs%2C%20where%20an%20addition%20or%20removal%20of%20a%20node%20is%0A%20%20%20*%20considered%20a%20change.%20The%20%60callback%60%20is%20called%20with%20one%20argument%2C%20an%20object%0A%20%20%20*%20containing%20an%20array%20of%20any%20%60addedNodes%60%20and%20%60removedNodes%60.%0A%20%20%20*%0A%20%20%20*%20Note%3A%20the%20callback%20is%20called%20asynchronous%20to%20any%20changes%0A%20%20%20*%20at%20a%20microtask%20checkpoint.%20This%20is%20because%20observation%20is%20performed%20using%0A%20%20%20*%20%60MutationObserver%60%20and%20the%20%60%3Cslot%3E%60%20element's%20%60slotchange%60%20event%20which%0A%20%20%20*%20are%20asynchronous.%0A%20%20%20*%0A%20%20%20*%20An%20example%3A%0A%20%20%20*%20%60%60%60js%0A%20%20%20*%20class%20TestSelfObserve%20extends%20Polymer.Element%20%7B%0A%20%20%20*%20%20%20static%20get%20is()%20%7B%20return%20'test-self-observe'%3B%7D%0A%20%20%20*%20%20%20connectedCallback()%20%7B%0A%20%20%20*%20%20%20%20%20super.connectedCallback()%3B%0A%20%20%20*%20%20%20%20%20this._observer%20%3D%20new%20Polymer.FlattenedNodesObserver(this%2C%20(info)%20%3D%3E%20%7B%0A%20%20%20*%20%20%20%20%20%20%20this.info%20%3D%20info%3B%0A%20%20%20*%20%20%20%20%20%7D)%3B%0A%20%20%20*%20%20%20%7D%0A%20%20%20*%20%20%20disconnectedCallback()%20%7B%0A%20%20%20*%20%20%20%20%20super.disconnectedCallback()%3B%0A%20%20%20*%20%20%20%20%20this._observer.disconnect()%3B%0A%20%20%20*%20%20%20%7D%0A%20%20%20*%20%7D%0A%20%20%20*%20customElements.define(TestSelfObserve.is%2C%20TestSelfObserve)%3B%0A%20%20%20*%20%60%60%60%0A%20%20%20*%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Class%20that%20listens%20for%20changes%20(additions%20or%20removals)%20to%0A%20%20%20*%20%22flattened%20nodes%22%20on%20a%20given%20%60node%60.%0A%20%20%20*%2Fvar%20FlattenedNodesObserver%3Dfunction()%7B_createClass(FlattenedNodesObserver%2Cnull%2C%5B%7Bkey%3A'getFlattenedNodes'%2C%2F**%0A%20%20%20%20%20*%20Returns%20the%20list%20of%20flattened%20nodes%20for%20the%20given%20%60node%60.%0A%20%20%20%20%20*%20This%20list%20consists%20of%20a%20node's%20children%20and%2C%20for%20any%20children%0A%20%20%20%20%20*%20that%20are%20%60%3Cslot%3E%60%20elements%2C%20the%20expanded%20flattened%20list%20of%20%60assignedNodes%60.%0A%20%20%20%20%20*%20For%20example%2C%20if%20the%20observed%20node%20has%20children%20%60%3Ca%3E%3C%2Fa%3E%3Cslot%3E%3C%2Fslot%3E%3Cb%3E%3C%2Fb%3E%60%0A%20%20%20%20%20*%20and%20the%20%60%3Cslot%3E%60%20has%20one%20%60%3Cdiv%3E%60%20assigned%20to%20it%2C%20then%20the%20flattened%0A%20%20%20%20%20*%20nodes%20list%20is%20%60%3Ca%3E%3C%2Fa%3E%3Cdiv%3E%3C%2Fdiv%3E%3Cb%3E%3C%2Fb%3E%60.%20If%20the%20%60%3Cslot%3E%60%20has%20other%0A%20%20%20%20%20*%20%60%3Cslot%3E%60%20elements%20assigned%20to%20it%2C%20these%20are%20flattened%20as%20well.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7BHTMLElement%7CHTMLSlotElement%7D%20node%20The%20node%20for%20which%20to%20return%20the%20list%20of%20flattened%20nodes.%0A%20%20%20%20%20*%20%40return%20%7BArray%7D%20The%20list%20of%20flattened%20nodes%20for%20the%20given%20%60node%60.%0A%20%20%20%20*%2Fvalue%3Afunction%20getFlattenedNodes(node)%7Bif(isSlot(node))%7Bnode%3D%2F**%20%40type%20%7BHTMLSlotElement%7D%20*%2Fnode%3B%2F%2F%20eslint-disable-line%20no-self-assign%0Areturn%20node.assignedNodes(%7Bflatten%3Atrue%7D)%3B%7Delse%7Breturn%20Array.from(node.childNodes).map(function(node)%7Bif(isSlot(node))%7Bnode%3D%2F**%20%40type%20%7BHTMLSlotElement%7D%20*%2Fnode%3B%2F%2F%20eslint-disable-line%20no-self-assign%0Areturn%20node.assignedNodes(%7Bflatten%3Atrue%7D)%3B%7Delse%7Breturn%5Bnode%5D%3B%7D%7D).reduce(function(a%2Cb)%7Breturn%20a.concat(b)%3B%7D%2C%5B%5D)%3B%7D%7D%2F**%0A%20%20%20%20%20*%20%40param%20%7BElement%7D%20target%20Node%20on%20which%20to%20listen%20for%20changes.%0A%20%20%20%20%20*%20%40param%20%7B%3Ffunction(!Element%2C%20%7B%20target%3A%20!Element%2C%20addedNodes%3A%20!Array%3C!Element%3E%2C%20removedNodes%3A%20!Array%3C!Element%3E%20%7D)%3Avoid%7D%20callback%20Function%20called%20when%20there%20are%20additions%0A%20%20%20%20%20*%20or%20removals%20from%20the%20target's%20list%20of%20flattened%20nodes.%0A%20%20%20%20*%2F%7D%5D)%3Bfunction%20FlattenedNodesObserver(target%2Ccallback)%7Bvar%20_this%3Dthis%3B_classCallCheck(this%2CFlattenedNodesObserver)%3B%2F**%0A%20%20%20%20%20%20%20*%20%40type%20%7BMutationObserver%7D%0A%20%20%20%20%20%20%20*%20%40private%0A%20%20%20%20%20%20%20*%2Fthis._shadyChildrenObserver%3Dnull%3B%2F**%0A%20%20%20%20%20%20%20*%20%40type%20%7BMutationObserver%7D%0A%20%20%20%20%20%20%20*%20%40private%0A%20%20%20%20%20%20%20*%2Fthis._nativeChildrenObserver%3Dnull%3Bthis._connected%3Dfalse%3B%2F**%0A%20%20%20%20%20%20%20*%20%40type%20%7BElement%7D%0A%20%20%20%20%20%20%20*%20%40private%0A%20%20%20%20%20%20%20*%2Fthis._target%3Dtarget%3Bthis.callback%3Dcallback%3Bthis._effectiveNodes%3D%5B%5D%3Bthis._observer%3Dnull%3Bthis._scheduled%3Dfalse%3B%2F**%0A%20%20%20%20%20%20%20*%20%40type%20%7Bfunction()%7D%0A%20%20%20%20%20%20%20*%20%40private%0A%20%20%20%20%20%20%20*%2Fthis._boundSchedule%3Dfunction()%7B_this._schedule()%3B%7D%3Bthis.connect()%3Bthis._schedule()%3B%7D%2F**%0A%20%20%20%20%20*%20Activates%20an%20observer.%20This%20method%20is%20automatically%20called%20when%0A%20%20%20%20%20*%20a%20%60FlattenedNodesObserver%60%20is%20created.%20It%20should%20only%20be%20called%20to%0A%20%20%20%20%20*%20re-activate%20an%20observer%20that%20has%20been%20deactivated%20via%20the%20%60disconnect%60%20method.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F_createClass(FlattenedNodesObserver%2C%5B%7Bkey%3A'connect'%2Cvalue%3Afunction%20connect()%7Bvar%20_this2%3Dthis%3Bif(isSlot(this._target))%7Bthis._listenSlots(%5Bthis._target%5D)%3B%7Delse%20if(this._target.children)%7Bthis._listenSlots(this._target.children)%3Bif(window.ShadyDOM)%7Bthis._shadyChildrenObserver%3DShadyDOM.observeChildren(this._target%2Cfunction(mutations)%7B_this2._processMutations(mutations)%3B%7D)%3B%7Delse%7Bthis._nativeChildrenObserver%3Dnew%20MutationObserver(function(mutations)%7B_this2._processMutations(mutations)%3B%7D)%3Bthis._nativeChildrenObserver.observe(this._target%2C%7BchildList%3Atrue%7D)%3B%7D%7Dthis._connected%3Dtrue%3B%7D%2F**%0A%20%20%20%20%20*%20Deactivates%20the%20flattened%20nodes%20observer.%20After%20calling%20this%20method%0A%20%20%20%20%20*%20the%20observer%20callback%20will%20not%20be%20called%20when%20changes%20to%20flattened%20nodes%0A%20%20%20%20%20*%20occur.%20The%20%60connect%60%20method%20may%20be%20subsequently%20called%20to%20reactivate%0A%20%20%20%20%20*%20the%20observer.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'disconnect'%2Cvalue%3Afunction%20disconnect()%7Bif(isSlot(this._target))%7Bthis._unlistenSlots(%5Bthis._target%5D)%3B%7Delse%20if(this._target.children)%7Bthis._unlistenSlots(this._target.children)%3Bif(window.ShadyDOM%26%26this._shadyChildrenObserver)%7BShadyDOM.unobserveChildren(this._shadyChildrenObserver)%3Bthis._shadyChildrenObserver%3Dnull%3B%7Delse%20if(this._nativeChildrenObserver)%7Bthis._nativeChildrenObserver.disconnect()%3Bthis._nativeChildrenObserver%3Dnull%3B%7D%7Dthis._connected%3Dfalse%3B%7D%2F**%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_schedule'%2Cvalue%3Afunction%20_schedule()%7Bvar%20_this3%3Dthis%3Bif(!this._scheduled)%7Bthis._scheduled%3Dtrue%3BPolymer.Async.microTask.run(function()%7Breturn%20_this3.flush()%3B%7D)%3B%7D%7D%2F**%0A%20%20%20%20%20*%20%40param%20%7BArray%3CMutationRecord%3E%7D%20mutations%20Mutations%20signaled%20by%20the%20mutation%20observer%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_processMutations'%2Cvalue%3Afunction%20_processMutations(mutations)%7Bthis._processSlotMutations(mutations)%3Bthis.flush()%3B%7D%2F**%0A%20%20%20%20%20*%20%40param%20%7BArray%3CMutationRecord%3E%7D%20mutations%20Mutations%20signaled%20by%20the%20mutation%20observer%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_processSlotMutations'%2Cvalue%3Afunction%20_processSlotMutations(mutations)%7Bif(mutations)%7Bfor(var%20i%3D0%3Bi%3Cmutations.length%3Bi%2B%2B)%7Bvar%20mutation%3Dmutations%5Bi%5D%3Bif(mutation.addedNodes)%7Bthis._listenSlots(mutation.addedNodes)%3B%7Dif(mutation.removedNodes)%7Bthis._unlistenSlots(mutation.removedNodes)%3B%7D%7D%7D%7D%2F**%0A%20%20%20%20%20*%20Flushes%20the%20observer%20causing%20any%20pending%20changes%20to%20be%20immediately%0A%20%20%20%20%20*%20delivered%20the%20observer%20callback.%20By%20default%20these%20changes%20are%20delivered%0A%20%20%20%20%20*%20asynchronously%20at%20the%20next%20microtask%20checkpoint.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Returns%20true%20if%20any%20pending%20changes%20caused%20the%20observer%0A%20%20%20%20%20*%20callback%20to%20run.%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'flush'%2Cvalue%3Afunction%20flush()%7Bif(!this._connected)%7Breturn%20false%3B%7Dif(window.ShadyDOM)%7BShadyDOM.flush()%3B%7Dif(this._nativeChildrenObserver)%7Bthis._processSlotMutations(this._nativeChildrenObserver.takeRecords())%3B%7Delse%20if(this._shadyChildrenObserver)%7Bthis._processSlotMutations(this._shadyChildrenObserver.takeRecords())%3B%7Dthis._scheduled%3Dfalse%3Bvar%20info%3D%7Btarget%3Athis._target%2CaddedNodes%3A%5B%5D%2CremovedNodes%3A%5B%5D%7D%3Bvar%20newNodes%3Dthis.constructor.getFlattenedNodes(this._target)%3Bvar%20splices%3DPolymer.ArraySplice.calculateSplices(newNodes%2Cthis._effectiveNodes)%3B%2F%2F%20process%20removals%0Afor(var%20i%3D0%2Cs%3Bi%3Csplices.length%26%26(s%3Dsplices%5Bi%5D)%3Bi%2B%2B)%7Bfor(var%20j%3D0%2Cn%3Bj%3Cs.removed.length%26%26(n%3Ds.removed%5Bj%5D)%3Bj%2B%2B)%7Binfo.removedNodes.push(n)%3B%7D%7D%2F%2F%20process%20adds%0Afor(var%20_i%3D0%2C_s%3B_i%3Csplices.length%26%26(_s%3Dsplices%5B_i%5D)%3B_i%2B%2B)%7Bfor(var%20_j%3D_s.index%3B_j%3C_s.index%2B_s.addedCount%3B_j%2B%2B)%7Binfo.addedNodes.push(newNodes%5B_j%5D)%3B%7D%7D%2F%2F%20update%20cache%0Athis._effectiveNodes%3DnewNodes%3Bvar%20didFlush%3Dfalse%3Bif(info.addedNodes.length%7C%7Cinfo.removedNodes.length)%7BdidFlush%3Dtrue%3Bthis.callback.call(this._target%2Cinfo)%3B%7Dreturn%20didFlush%3B%7D%2F**%0A%20%20%20%20%20*%20%40param%20%7B!Array%3CElement%7CNode%3E%7C!NodeList%3CNode%3E%7D%20nodeList%20Nodes%20that%20could%20change%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_listenSlots'%2Cvalue%3Afunction%20_listenSlots(nodeList)%7Bfor(var%20i%3D0%3Bi%3CnodeList.length%3Bi%2B%2B)%7Bvar%20n%3DnodeList%5Bi%5D%3Bif(isSlot(n))%7Bn.addEventListener('slotchange'%2Cthis._boundSchedule)%3B%7D%7D%7D%2F**%0A%20%20%20%20%20*%20%40param%20%7B!Array%3CElement%7CNode%3E%7C!NodeList%3CNode%3E%7D%20nodeList%20Nodes%20that%20could%20change%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_unlistenSlots'%2Cvalue%3Afunction%20_unlistenSlots(nodeList)%7Bfor(var%20i%3D0%3Bi%3CnodeList.length%3Bi%2B%2B)%7Bvar%20n%3DnodeList%5Bi%5D%3Bif(isSlot(n))%7Bn.removeEventListener('slotchange'%2Cthis._boundSchedule)%3B%7D%7D%7D%7D%5D)%3Breturn%20FlattenedNodesObserver%3B%7D()%3BPolymer.FlattenedNodesObserver%3DFlattenedNodesObserver%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Fflattened-nodes-observer.html.js%0A",
            "resourceBytes": 9727,
            "encodedBytes": 0,
            "unusedBytes": 4068
          },
          {
            "name": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3Bvar%20debouncerQueue%3D%5B%5D%3B%2F**%0A%20%20%20*%20Adds%20a%20%60Polymer.Debouncer%60%20to%20a%20list%20of%20globally%20flushable%20tasks.%0A%20%20%20*%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40param%20%7B!Polymer.Debouncer%7D%20debouncer%20Debouncer%20to%20enqueue%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%2FPolymer.enqueueDebouncer%3Dfunction(debouncer)%7BdebouncerQueue.push(debouncer)%3B%7D%3Bfunction%20flushDebouncers()%7Bvar%20didFlush%3DBoolean(debouncerQueue.length)%3Bwhile(debouncerQueue.length)%7Btry%7BdebouncerQueue.shift().flush()%3B%7Dcatch(e)%7BsetTimeout(function()%7Bthrow%20e%3B%7D)%3B%7D%7Dreturn%20didFlush%3B%7D%2F**%0A%20%20%20*%20Forces%20several%20classes%20of%20asynchronously%20queued%20tasks%20to%20flush%3A%0A%20%20%20*%20-%20Debouncers%20added%20via%20%60enqueueDebouncer%60%0A%20%20%20*%20-%20ShadyDOM%20distribution%0A%20%20%20*%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%2FPolymer.flush%3Dfunction()%7Bvar%20shadyDOM%3Dvoid%200%2Cdebouncers%3Dvoid%200%3Bdo%7BshadyDOM%3Dwindow.ShadyDOM%26%26ShadyDOM.flush()%3Bif(window.ShadyCSS%26%26window.ShadyCSS.ScopingShim)%7Bwindow.ShadyCSS.ScopingShim.flush()%3B%7Ddebouncers%3DflushDebouncers()%3B%7Dwhile(shadyDOM%7C%7Cdebouncers)%3B%7D%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Fflush.html.js%0A",
            "resourceBytes": 1114,
            "encodedBytes": 0,
            "unusedBytes": 489
          },
          {
            "name": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7D(function()%7B'use%20strict'%3Bvar%20p%3DElement.prototype%3B%2F**%0A%20%20%20*%20%40const%20%7Bfunction(this%3ANode%2C%20string)%3A%20boolean%7D%0A%20%20%20*%2Fvar%20normalizedMatchesSelector%3Dp.matches%7C%7Cp.matchesSelector%7C%7Cp.mozMatchesSelector%7C%7Cp.msMatchesSelector%7C%7Cp.oMatchesSelector%7C%7Cp.webkitMatchesSelector%3B%2F**%0A%20%20%20*%20Cross-platform%20%60element.matches%60%20shim.%0A%20%20%20*%0A%20%20%20*%20%40function%20matchesSelector%0A%20%20%20*%20%40memberof%20Polymer.dom%0A%20%20%20*%20%40param%20%7B!Node%7D%20node%20Node%20to%20check%20selector%20against%0A%20%20%20*%20%40param%20%7Bstring%7D%20selector%20Selector%20to%20match%0A%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20node%20matched%20selector%0A%20%20%20*%2Fvar%20matchesSelector%3Dfunction%20matchesSelector(node%2Cselector)%7Breturn%20normalizedMatchesSelector.call(node%2Cselector)%3B%7D%3B%2F**%0A%20%20%20*%20Node%20API%20wrapper%20class%20returned%20from%20%60Polymer.dom.(target)%60%20when%0A%20%20%20*%20%60target%60%20is%20a%20%60Node%60.%0A%20%20%20*%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%2Fvar%20DomApi%3Dfunction()%7B%2F**%0A%20%20%20%20%20*%20%40param%20%7BNode%7D%20node%20Node%20for%20which%20to%20create%20a%20Polymer.dom%20helper%20object.%0A%20%20%20%20%20*%2Ffunction%20DomApi(node)%7B_classCallCheck(this%2CDomApi)%3Bthis.node%3Dnode%3B%7D%2F**%0A%20%20%20%20%20*%20Returns%20an%20instance%20of%20%60Polymer.FlattenedNodesObserver%60%20that%0A%20%20%20%20%20*%20listens%20for%20node%20changes%20on%20this%20element.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7Bfunction(!Element%2C%20%7B%20target%3A%20!Element%2C%20addedNodes%3A%20!Array%3C!Element%3E%2C%20removedNodes%3A%20!Array%3C!Element%3E%20%7D)%3Avoid%7D%20callback%20Called%20when%20direct%20or%20distributed%20children%0A%20%20%20%20%20*%20%20%20of%20this%20element%20changes%0A%20%20%20%20%20*%20%40return%20%7B!Polymer.FlattenedNodesObserver%7D%20Observer%20instance%0A%20%20%20%20%20*%2F_createClass(DomApi%2C%5B%7Bkey%3A'observeNodes'%2Cvalue%3Afunction%20observeNodes(callback)%7Breturn%20new%20Polymer.FlattenedNodesObserver(this.node%2Ccallback)%3B%7D%2F**%0A%20%20%20%20%20*%20Disconnects%20an%20observer%20previously%20created%20via%20%60observeNodes%60%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7B!Polymer.FlattenedNodesObserver%7D%20observerHandle%20Observer%20instance%0A%20%20%20%20%20*%20%20%20to%20disconnect.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'unobserveNodes'%2Cvalue%3Afunction%20unobserveNodes(observerHandle)%7BobserverHandle.disconnect()%3B%7D%2F**%0A%20%20%20%20%20*%20Provided%20as%20a%20backwards-compatible%20API%20only.%20%20This%20method%20does%20nothing.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'notifyObserver'%2Cvalue%3Afunction%20notifyObserver()%7B%7D%2F**%0A%20%20%20%20%20*%20Returns%20true%20if%20the%20provided%20node%20is%20contained%20with%20this%20element's%0A%20%20%20%20%20*%20light-DOM%20children%20or%20shadow%20root%2C%20including%20any%20nested%20shadow%20roots%0A%20%20%20%20%20*%20of%20children%20therein.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7BNode%7D%20node%20Node%20to%20test%0A%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Returns%20true%20if%20the%20given%20%60node%60%20is%20contained%20within%0A%20%20%20%20%20*%20%20%20this%20element's%20light%20or%20shadow%20DOM.%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'deepContains'%2Cvalue%3Afunction%20deepContains(node)%7Bif(this.node.contains(node))%7Breturn%20true%3B%7Dvar%20n%3Dnode%3Bvar%20doc%3Dnode.ownerDocument%3B%2F%2F%20walk%20from%20node%20to%20%60this%60%20or%20%60document%60%0Awhile(n%26%26n!%3D%3Ddoc%26%26n!%3D%3Dthis.node)%7B%2F%2F%20use%20logical%20parentnode%2C%20or%20native%20ShadowRoot%20host%0An%3Dn.parentNode%7C%7Cn.host%3B%7Dreturn%20n%3D%3D%3Dthis.node%3B%7D%2F**%0A%20%20%20%20%20*%20Returns%20the%20root%20node%20of%20this%20node.%20%20Equivalent%20to%20%60getRoodNode()%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40return%20%7BNode%7D%20Top%20most%20element%20in%20the%20dom%20tree%20in%20which%20the%20node%0A%20%20%20%20%20*%20exists.%20If%20the%20node%20is%20connected%20to%20a%20document%20this%20is%20either%20a%0A%20%20%20%20%20*%20shadowRoot%20or%20the%20document%3B%20otherwise%2C%20it%20may%20be%20the%20node%0A%20%20%20%20%20*%20itself%20or%20a%20node%20or%20document%20fragment%20containing%20it.%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'getOwnerRoot'%2Cvalue%3Afunction%20getOwnerRoot()%7Breturn%20this.node.getRootNode()%3B%7D%2F**%0A%20%20%20%20%20*%20For%20slot%20elements%2C%20returns%20the%20nodes%20assigned%20to%20the%20slot%3B%20otherwise%0A%20%20%20%20%20*%20an%20empty%20array.%20It%20is%20equivalent%20to%20%60%3Cslot%3E.addignedNodes(%7Bflatten%3Atrue%7D)%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40return%20%7B!Array%3C!Node%3E%7D%20Array%20of%20assigned%20nodes%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'getDistributedNodes'%2Cvalue%3Afunction%20getDistributedNodes()%7Breturn%20this.node.localName%3D%3D%3D'slot'%3Fthis.node.assignedNodes(%7Bflatten%3Atrue%7D)%3A%5B%5D%3B%7D%2F**%0A%20%20%20%20%20*%20Returns%20an%20array%20of%20all%20slots%20this%20element%20was%20distributed%20to.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40return%20%7B!Array%3C!HTMLSlotElement%3E%7D%20Description%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'getDestinationInsertionPoints'%2Cvalue%3Afunction%20getDestinationInsertionPoints()%7Bvar%20ip%24%3D%5B%5D%3Bvar%20n%3Dthis.node.assignedSlot%3Bwhile(n)%7Bip%24.push(n)%3Bn%3Dn.assignedSlot%3B%7Dreturn%20ip%24%3B%7D%2F**%0A%20%20%20%20%20*%20Calls%20%60importNode%60%20on%20the%20%60ownerDocument%60%20for%20this%20node.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7B!Node%7D%20node%20Node%20to%20import%0A%20%20%20%20%20*%20%40param%20%7Bboolean%7D%20deep%20True%20if%20the%20node%20should%20be%20cloned%20deeply%20during%0A%20%20%20%20%20*%20%20%20import%0A%20%20%20%20%20*%20%40return%20%7BNode%7D%20Clone%20of%20given%20node%20imported%20to%20this%20owner%20document%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'importNode'%2Cvalue%3Afunction%20importNode(node%2Cdeep)%7Bvar%20doc%3Dthis.node%20instanceof%20Document%3Fthis.node%3Athis.node.ownerDocument%3Breturn%20doc.importNode(node%2Cdeep)%3B%7D%2F**%0A%20%20%20%20%20*%20%40return%20%7B!Array%3C!Node%3E%7D%20Returns%20a%20flattened%20list%20of%20all%20child%20nodes%20and%0A%20%20%20%20%20*%20nodes%20assigned%20to%20child%20slots.%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'getEffectiveChildNodes'%2Cvalue%3Afunction%20getEffectiveChildNodes()%7Breturn%20Polymer.FlattenedNodesObserver.getFlattenedNodes(this.node)%3B%7D%2F**%0A%20%20%20%20%20*%20Returns%20a%20filtered%20list%20of%20flattened%20child%20elements%20for%20this%20element%20based%0A%20%20%20%20%20*%20on%20the%20given%20selector.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20selector%20Selector%20to%20filter%20nodes%20against%0A%20%20%20%20%20*%20%40return%20%7B!Array%3C!HTMLElement%3E%7D%20List%20of%20flattened%20child%20elements%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'queryDistributedElements'%2Cvalue%3Afunction%20queryDistributedElements(selector)%7Bvar%20c%24%3Dthis.getEffectiveChildNodes()%3Bvar%20list%3D%5B%5D%3Bfor(var%20i%3D0%2Cl%3Dc%24.length%2Cc%3Bi%3Cl%26%26(c%3Dc%24%5Bi%5D)%3Bi%2B%2B)%7Bif(c.nodeType%3D%3D%3DNode.ELEMENT_NODE%26%26matchesSelector(c%2Cselector))%7Blist.push(c)%3B%7D%7Dreturn%20list%3B%7D%2F**%0A%20%20%20%20%20*%20For%20shadow%20roots%2C%20returns%20the%20currently%20focused%20element%20within%20this%0A%20%20%20%20%20*%20shadow%20root.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40return%20%7BNode%7Cundefined%7D%20Currently%20focused%20element%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'activeElement'%2Cget%3Afunction%20get()%7Bvar%20node%3Dthis.node%3Breturn%20node._activeElement!%3D%3Dundefined%3Fnode._activeElement%3Anode.activeElement%3B%7D%7D%5D)%3Breturn%20DomApi%3B%7D()%3Bfunction%20forwardMethods(proto%2Cmethods)%7Bvar%20_loop%3Dfunction%20_loop(i)%7Bvar%20method%3Dmethods%5Bi%5D%3B%2F*%20eslint-disable%20valid-jsdoc%20*%2Fproto%5Bmethod%5D%3D%2F**%20%40this%20%7BDomApi%7D%20*%2Ffunction()%7Breturn%20this.node%5Bmethod%5D.apply(this.node%2Carguments)%3B%7D%3B%2F*%20eslint-enable%20*%2F%7D%3Bfor(var%20i%3D0%3Bi%3Cmethods.length%3Bi%2B%2B)%7B_loop(i)%3B%7D%7Dfunction%20forwardReadOnlyProperties(proto%2Cproperties)%7Bvar%20_loop2%3Dfunction%20_loop2(i)%7Bvar%20name%3Dproperties%5Bi%5D%3BObject.defineProperty(proto%2Cname%2C%7Bget%3Afunction%20get()%7Bvar%20domApi%3D%2F**%20%40type%20%7BDomApi%7D%20*%2Fthis%3Breturn%20domApi.node%5Bname%5D%3B%7D%2Cconfigurable%3Atrue%7D)%3B%7D%3Bfor(var%20i%3D0%3Bi%3Cproperties.length%3Bi%2B%2B)%7B_loop2(i)%3B%7D%7Dfunction%20forwardProperties(proto%2Cproperties)%7Bvar%20_loop3%3Dfunction%20_loop3(i)%7Bvar%20name%3Dproperties%5Bi%5D%3BObject.defineProperty(proto%2Cname%2C%7Bget%3Afunction%20get()%7Bvar%20domApi%3D%2F**%20%40type%20%7BDomApi%7D%20*%2Fthis%3Breturn%20domApi.node%5Bname%5D%3B%7D%2Cset%3Afunction%20set(value)%7B%2F**%20%40type%20%7BDomApi%7D%20*%2Fthis.node%5Bname%5D%3Dvalue%3B%7D%2Cconfigurable%3Atrue%7D)%3B%7D%3Bfor(var%20i%3D0%3Bi%3Cproperties.length%3Bi%2B%2B)%7B_loop3(i)%3B%7D%7DforwardMethods(DomApi.prototype%2C%5B'cloneNode'%2C'appendChild'%2C'insertBefore'%2C'removeChild'%2C'replaceChild'%2C'setAttribute'%2C'removeAttribute'%2C'querySelector'%2C'querySelectorAll'%5D)%3BforwardReadOnlyProperties(DomApi.prototype%2C%5B'parentNode'%2C'firstChild'%2C'lastChild'%2C'nextSibling'%2C'previousSibling'%2C'firstElementChild'%2C'lastElementChild'%2C'nextElementSibling'%2C'previousElementSibling'%2C'childNodes'%2C'children'%2C'classList'%5D)%3BforwardProperties(DomApi.prototype%2C%5B'textContent'%2C'innerHTML'%5D)%3B%2F**%0A%20%20%20*%20Event%20API%20wrapper%20class%20returned%20from%20%60Polymer.dom.(target)%60%20when%0A%20%20%20*%20%60target%60%20is%20an%20%60Event%60.%0A%20%20%20*%2Fvar%20EventApi%3Dfunction()%7Bfunction%20EventApi(event)%7B_classCallCheck(this%2CEventApi)%3Bthis.event%3Devent%3B%7D%2F**%0A%20%20%20%20%20*%20Returns%20the%20first%20node%20on%20the%20%60composedPath%60%20of%20this%20event.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40return%20%7B!EventTarget%7D%20The%20node%20this%20event%20was%20dispatched%20to%0A%20%20%20%20%20*%2F_createClass(EventApi%2C%5B%7Bkey%3A'rootTarget'%2Cget%3Afunction%20get()%7Breturn%20this.event.composedPath()%5B0%5D%3B%7D%2F**%0A%20%20%20%20%20*%20Returns%20the%20local%20(re-targeted)%20target%20for%20this%20event.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40return%20%7B!EventTarget%7D%20The%20local%20(re-targeted)%20target%20for%20this%20event.%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'localTarget'%2Cget%3Afunction%20get()%7Breturn%20this.event.target%3B%7D%2F**%0A%20%20%20%20%20*%20Returns%20the%20%60composedPath%60%20for%20this%20event.%0A%20%20%20%20%20*%20%40return%20%7B!Array%3C!EventTarget%3E%7D%20The%20nodes%20this%20event%20propagated%20through%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'path'%2Cget%3Afunction%20get()%7Breturn%20this.event.composedPath()%3B%7D%7D%5D)%3Breturn%20EventApi%3B%7D()%3BPolymer.DomApi%3DDomApi%3B%2F**%0A%20%20%20*%20%40function%0A%20%20%20*%20%40param%20%7Bboolean%3D%7D%20deep%0A%20%20%20*%20%40return%20%7B!Node%7D%0A%20%20%20*%2FPolymer.DomApi.prototype.cloneNode%3B%2F**%0A%20%20%20*%20%40function%0A%20%20%20*%20%40param%20%7B!Node%7D%20node%0A%20%20%20*%20%40return%20%7B!Node%7D%0A%20%20%20*%2FPolymer.DomApi.prototype.appendChild%3B%2F**%0A%20%20%20*%20%40function%0A%20%20%20*%20%40param%20%7B!Node%7D%20newChild%0A%20%20%20*%20%40param%20%7BNode%7D%20refChild%0A%20%20%20*%20%40return%20%7B!Node%7D%0A%20%20%20*%2FPolymer.DomApi.prototype.insertBefore%3B%2F**%0A%20%20%20*%20%40function%0A%20%20%20*%20%40param%20%7B!Node%7D%20node%0A%20%20%20*%20%40return%20%7B!Node%7D%0A%20%20%20*%2FPolymer.DomApi.prototype.removeChild%3B%2F**%0A%20%20%20*%20%40function%0A%20%20%20*%20%40param%20%7B!Node%7D%20oldChild%0A%20%20%20*%20%40param%20%7B!Node%7D%20newChild%0A%20%20%20*%20%40return%20%7B!Node%7D%0A%20%20%20*%2FPolymer.DomApi.prototype.replaceChild%3B%2F**%0A%20%20%20*%20%40function%0A%20%20%20*%20%40param%20%7Bstring%7D%20name%0A%20%20%20*%20%40param%20%7Bstring%7D%20value%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%2FPolymer.DomApi.prototype.setAttribute%3B%2F**%0A%20%20%20*%20%40function%0A%20%20%20*%20%40param%20%7Bstring%7D%20name%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%2FPolymer.DomApi.prototype.removeAttribute%3B%2F**%0A%20%20%20*%20%40function%0A%20%20%20*%20%40param%20%7Bstring%7D%20selector%0A%20%20%20*%20%40return%20%7B%3FElement%7D%0A%20%20%20*%2FPolymer.DomApi.prototype.querySelector%3B%2F**%0A%20%20%20*%20%40function%0A%20%20%20*%20%40param%20%7Bstring%7D%20selector%0A%20%20%20*%20%40return%20%7B!NodeList%3C!Element%3E%7D%0A%20%20%20*%2FPolymer.DomApi.prototype.querySelectorAll%3B%2F**%0A%20%20%20*%20Legacy%20DOM%20and%20Event%20manipulation%20API%20wrapper%20factory%20used%20to%20abstract%0A%20%20%20*%20differences%20between%20native%20Shadow%20DOM%20and%20%22Shady%20DOM%22%20when%20polyfilling%20on%0A%20%20%20*%20older%20browsers.%0A%20%20%20*%0A%20%20%20*%20Note%20that%20in%20Polymer%202.x%20use%20of%20%60Polymer.dom%60%20is%20no%20longer%20required%20and%0A%20%20%20*%20in%20the%20majority%20of%20cases%20simply%20facades%20directly%20to%20the%20standard%20native%0A%20%20%20*%20API.%0A%20%20%20*%0A%20%20%20*%20%40namespace%0A%20%20%20*%20%40summary%20Legacy%20DOM%20and%20Event%20manipulation%20API%20wrapper%20factory%20used%20to%0A%20%20%20*%20abstract%20differences%20between%20native%20Shadow%20DOM%20and%20%22Shady%20DOM.%22%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40param%20%7B(Node%7CEvent)%3D%7D%20obj%20Node%20or%20event%20to%20operate%20on%0A%20%20%20*%20%40return%20%7B!DomApi%7C!EventApi%7D%20Wrapper%20providing%20either%20node%20API%20or%20event%20API%0A%20%20%20*%2FPolymer.dom%3Dfunction(obj)%7Bobj%3Dobj%7C%7Cdocument%3Bif(!obj.__domApi)%7Bvar%20helper%3Dvoid%200%3Bif(obj%20instanceof%20Event)%7Bhelper%3Dnew%20EventApi(obj)%3B%7Delse%7Bhelper%3Dnew%20DomApi(obj)%3B%7Dobj.__domApi%3Dhelper%3B%7Dreturn%20obj.__domApi%3B%7D%3BPolymer.dom.matchesSelector%3DmatchesSelector%3B%2F**%0A%20%20%20*%20Forces%20several%20classes%20of%20asynchronously%20queued%20tasks%20to%20flush%3A%0A%20%20%20*%20-%20Debouncers%20added%20via%20%60Polymer.enqueueDebouncer%60%0A%20%20%20*%20-%20ShadyDOM%20distribution%0A%20%20%20*%0A%20%20%20*%20This%20method%20facades%20to%20%60Polymer.flush%60.%0A%20%20%20*%0A%20%20%20*%20%40memberof%20Polymer.dom%0A%20%20%20*%2FPolymer.dom.flush%3DPolymer.flush%3B%2F**%0A%20%20%20*%20Adds%20a%20%60Polymer.Debouncer%60%20to%20a%20list%20of%20globally%20flushable%20tasks.%0A%20%20%20*%0A%20%20%20*%20This%20method%20facades%20to%20%60Polymer.enqueueDebouncer%60.%0A%20%20%20*%0A%20%20%20*%20%40memberof%20Polymer.dom%0A%20%20%20*%20%40param%20%7B!Polymer.Debouncer%7D%20debouncer%20Debouncer%20to%20enqueue%0A%20%20%20*%2FPolymer.dom.addDebouncer%3DPolymer.enqueueDebouncer%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Flegacy%2Fpolymer.dom.html.js%0A",
            "resourceBytes": 11133,
            "encodedBytes": 0,
            "unusedBytes": 2351
          },
          {
            "name": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bvar%20_get%3Dfunction%20get(object%2Cproperty%2Creceiver)%7Bif(object%3D%3D%3Dnull)object%3DFunction.prototype%3Bvar%20desc%3DObject.getOwnPropertyDescriptor(object%2Cproperty)%3Bif(desc%3D%3D%3Dundefined)%7Bvar%20parent%3DObject.getPrototypeOf(object)%3Bif(parent%3D%3D%3Dnull)%7Breturn%20undefined%3B%7Delse%7Breturn%20get(parent%2Cproperty%2Creceiver)%3B%7D%7Delse%20if(%22value%22in%20desc)%7Breturn%20desc.value%3B%7Delse%7Bvar%20getter%3Ddesc.get%3Bif(getter%3D%3D%3Dundefined)%7Breturn%20undefined%3B%7Dreturn%20getter.call(receiver)%3B%7D%7D%3Bfunction%20_toConsumableArray(arr)%7Bif(Array.isArray(arr))%7Bfor(var%20i%3D0%2Carr2%3DArray(arr.length)%3Bi%3Carr.length%3Bi%2B%2B)%7Barr2%5Bi%5D%3Darr%5Bi%5D%3B%7Dreturn%20arr2%3B%7Delse%7Breturn%20Array.from(arr)%3B%7D%7Dfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3Bvar%20styleInterface%3Dwindow.ShadyCSS%3B%2F**%0A%20%20%20*%20Element%20class%20mixin%20that%20provides%20Polymer's%20%22legacy%22%20API%20intended%20to%20be%0A%20%20%20*%20backward-compatible%20to%20the%20greatest%20extent%20possible%20with%20the%20API%0A%20%20%20*%20found%20on%20the%20Polymer%201.x%20%60Polymer.Base%60%20prototype%20applied%20to%20all%20elements%0A%20%20%20*%20defined%20using%20the%20%60Polymer(%7B...%7D)%60%20function.%0A%20%20%20*%0A%20%20%20*%20%40mixinFunction%0A%20%20%20*%20%40polymer%0A%20%20%20*%20%40appliesMixin%20Polymer.ElementMixin%0A%20%20%20*%20%40appliesMixin%20Polymer.GestureEventListeners%0A%20%20%20*%20%40property%20isAttached%20%7Bboolean%7D%20Set%20to%20%60true%60%20in%20this%20element's%0A%20%20%20*%20%20%20%60connectedCallback%60%20and%20%60false%60%20in%20%60disconnectedCallback%60%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Element%20class%20mixin%20that%20provides%20Polymer's%20%22legacy%22%20API%0A%20%20%20*%2FPolymer.LegacyElementMixin%3DPolymer.dedupingMixin(function(base)%7B%2F**%0A%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20*%20%40extends%20%7Bbase%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_ElementMixin%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_GestureEventListeners%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_DirMixin%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Fvar%20legacyElementBase%3DPolymer.DirMixin(Polymer.GestureEventListeners(Polymer.ElementMixin(base)))%3B%2F**%0A%20%20%20%20%20*%20Map%20of%20simple%20names%20to%20touch%20action%20names%0A%20%20%20%20%20*%20%40dict%0A%20%20%20%20%20*%2Fvar%20DIRECTION_MAP%3D%7B'x'%3A'pan-x'%2C'y'%3A'pan-y'%2C'none'%3A'none'%2C'all'%3A'auto'%7D%3B%2F**%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40mixinClass%0A%20%20%20%20%20*%20%40extends%20%7BlegacyElementBase%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_LegacyElementMixin%7D%0A%20%20%20%20%20*%20%40unrestricted%0A%20%20%20%20%20*%2Fvar%20LegacyElement%3Dfunction(_legacyElementBase)%7B_inherits(LegacyElement%2C_legacyElementBase)%3Bfunction%20LegacyElement()%7B_classCallCheck(this%2CLegacyElement)%3B%2F**%20%40type%20%7Bboolean%7D%20*%2Fvar%20_this%3D_possibleConstructorReturn(this%2C(LegacyElement.__proto__%7C%7CObject.getPrototypeOf(LegacyElement)).call(this))%3B_this.isAttached%3B%2F**%20%40type%20%7BWeakMap%3C!Element%2C%20!Object%3Cstring%2C%20!Function%3E%3E%7D%20*%2F_this.__boundListeners%3B%2F**%20%40type%20%7BObject%3Cstring%2C%20Function%3E%7D%20*%2F_this._debouncers%3Breturn%20_this%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Forwards%20%60importMeta%60%20from%20the%20prototype%20(i.e.%20from%20the%20info%20object%0A%20%20%20%20%20%20%20*%20passed%20to%20%60Polymer(%7B...%7D)%60)%20to%20the%20static%20API.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7B!Object%7D%20The%20%60import.meta%60%20object%20set%20on%20the%20prototype%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20%60this%60%20is%20always%20in%20the%20instance%20in%0A%20%20%20%20%20%20%20*%20%20closure%20for%20some%20reason%20even%20in%20a%20static%20method%2C%20rather%20than%20the%20class%0A%20%20%20%20%20%20%20*%2F_createClass(LegacyElement%2C%5B%7Bkey%3A'created'%2C%2F**%0A%20%20%20%20%20%20%20*%20Legacy%20callback%20called%20during%20the%20%60constructor%60%2C%20for%20overriding%0A%20%20%20%20%20%20%20*%20by%20the%20user.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20created()%7B%7D%2F**%0A%20%20%20%20%20%20%20*%20Provides%20an%20implementation%20of%20%60connectedCallback%60%0A%20%20%20%20%20%20%20*%20which%20adds%20Polymer%20legacy%20API's%20%60attached%60%20method.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'connectedCallback'%2Cvalue%3Afunction%20connectedCallback()%7B_get(LegacyElement.prototype.__proto__%7C%7CObject.getPrototypeOf(LegacyElement.prototype)%2C'connectedCallback'%2Cthis).call(this)%3Bthis.isAttached%3Dtrue%3Bthis.attached()%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Legacy%20callback%20called%20during%20%60connectedCallback%60%2C%20for%20overriding%0A%20%20%20%20%20%20%20*%20by%20the%20user.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'attached'%2Cvalue%3Afunction%20attached()%7B%7D%2F**%0A%20%20%20%20%20%20%20*%20Provides%20an%20implementation%20of%20%60disconnectedCallback%60%0A%20%20%20%20%20%20%20*%20which%20adds%20Polymer%20legacy%20API's%20%60detached%60%20method.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'disconnectedCallback'%2Cvalue%3Afunction%20disconnectedCallback()%7B_get(LegacyElement.prototype.__proto__%7C%7CObject.getPrototypeOf(LegacyElement.prototype)%2C'disconnectedCallback'%2Cthis).call(this)%3Bthis.isAttached%3Dfalse%3Bthis.detached()%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Legacy%20callback%20called%20during%20%60disconnectedCallback%60%2C%20for%20overriding%0A%20%20%20%20%20%20%20*%20by%20the%20user.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'detached'%2Cvalue%3Afunction%20detached()%7B%7D%2F**%0A%20%20%20%20%20%20%20*%20Provides%20an%20override%20implementation%20of%20%60attributeChangedCallback%60%0A%20%20%20%20%20%20%20*%20which%20adds%20the%20Polymer%20legacy%20API's%20%60attributeChanged%60%20method.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20name%20Name%20of%20attribute.%0A%20%20%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20old%20Old%20value%20of%20attribute.%0A%20%20%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20value%20Current%20value%20of%20attribute.%0A%20%20%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20namespace%20Attribute%20namespace.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'attributeChangedCallback'%2Cvalue%3Afunction%20attributeChangedCallback(name%2Cold%2Cvalue%2Cnamespace)%7Bif(old!%3D%3Dvalue)%7B_get(LegacyElement.prototype.__proto__%7C%7CObject.getPrototypeOf(LegacyElement.prototype)%2C'attributeChangedCallback'%2Cthis).call(this%2Cname%2Cold%2Cvalue%2Cnamespace)%3Bthis.attributeChanged(name%2Cold%2Cvalue)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Legacy%20callback%20called%20during%20%60attributeChangedChallback%60%2C%20for%20overriding%0A%20%20%20%20%20%20%20*%20by%20the%20user.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20name%20Name%20of%20attribute.%0A%20%20%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20old%20Old%20value%20of%20attribute.%0A%20%20%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20value%20Current%20value%20of%20attribute.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'attributeChanged'%2Cvalue%3Afunction%20attributeChanged(name%2Cold%2Cvalue)%7B%7D%2F%2F%20eslint-disable-line%20no-unused-vars%0A%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20the%20default%20%60Polymer.PropertyEffects%60%20implementation%20to%0A%20%20%20%20%20%20%20*%20add%20support%20for%20class%20initialization%20via%20the%20%60_registered%60%20callback.%0A%20%20%20%20%20%20%20*%20This%20is%20called%20only%20when%20the%20first%20instance%20of%20the%20element%20is%20created.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_initializeProperties'%2Cvalue%3Afunction%20_initializeProperties()%7Bvar%20proto%3DObject.getPrototypeOf(this)%3Bif(!proto.hasOwnProperty('__hasRegisterFinished'))%7Bthis._registered()%3B%2F%2F%20backstop%20in%20case%20the%20%60_registered%60%20implementation%20does%20not%20set%20this%0Aproto.__hasRegisterFinished%3Dtrue%3B%7D_get(LegacyElement.prototype.__proto__%7C%7CObject.getPrototypeOf(LegacyElement.prototype)%2C'_initializeProperties'%2Cthis).call(this)%3Bthis.root%3D%2F**%20%40type%20%7BHTMLElement%7D%20*%2Fthis%3Bthis.created()%3B%2F%2F%20Ensure%20listeners%20are%20applied%20immediately%20so%20that%20they%20are%0A%2F%2F%20added%20before%20declarative%20event%20listeners.%20This%20allows%20an%20element%20to%0A%2F%2F%20decorate%20itself%20via%20an%20event%20prior%20to%20any%20declarative%20listeners%0A%2F%2F%20seeing%20the%20event.%20Note%2C%20this%20ensures%20compatibility%20with%201.x%20ordering.%0Athis._applyListeners()%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Called%20automatically%20when%20an%20element%20is%20initializing.%0A%20%20%20%20%20%20%20*%20Users%20may%20override%20this%20method%20to%20perform%20class%20registration%20time%0A%20%20%20%20%20%20%20*%20work.%20The%20implementation%20should%20ensure%20the%20work%20is%20performed%0A%20%20%20%20%20%20%20*%20only%20once%20for%20the%20class.%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_registered'%2Cvalue%3Afunction%20_registered()%7B%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20the%20default%20%60Polymer.PropertyEffects%60%20implementation%20to%0A%20%20%20%20%20%20%20*%20add%20support%20for%20installing%20%60hostAttributes%60%20and%20%60listeners%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'ready'%2Cvalue%3Afunction%20ready()%7Bthis._ensureAttributes()%3B_get(LegacyElement.prototype.__proto__%7C%7CObject.getPrototypeOf(LegacyElement.prototype)%2C'ready'%2Cthis).call(this)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Ensures%20an%20element%20has%20required%20attributes.%20Called%20when%20the%20element%0A%20%20%20%20%20%20%20*%20is%20being%20readied%20via%20%60ready%60.%20Users%20should%20override%20to%20set%20the%0A%20%20%20%20%20%20%20*%20element's%20required%20attributes.%20The%20implementation%20should%20be%20sure%0A%20%20%20%20%20%20%20*%20to%20check%20and%20not%20override%20existing%20attributes%20added%20by%0A%20%20%20%20%20%20%20*%20the%20user%20of%20the%20element.%20Typically%2C%20setting%20attributes%20should%20be%20left%0A%20%20%20%20%20%20%20*%20to%20the%20element%20user%20and%20not%20done%20here%3B%20reasonable%20exceptions%20include%0A%20%20%20%20%20%20%20*%20setting%20aria%20roles%20and%20focusability.%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_ensureAttributes'%2Cvalue%3Afunction%20_ensureAttributes()%7B%7D%2F**%0A%20%20%20%20%20%20%20*%20Adds%20element%20event%20listeners.%20Called%20when%20the%20element%0A%20%20%20%20%20%20%20*%20is%20being%20readied%20via%20%60ready%60.%20Users%20should%20override%20to%0A%20%20%20%20%20%20%20*%20add%20any%20required%20element%20event%20listeners.%0A%20%20%20%20%20%20%20*%20In%20performance%20critical%20elements%2C%20the%20work%20done%20here%20should%20be%20kept%0A%20%20%20%20%20%20%20*%20to%20a%20minimum%20since%20it%20is%20done%20before%20the%20element%20is%20rendered.%20In%0A%20%20%20%20%20%20%20*%20these%20elements%2C%20consider%20adding%20listeners%20asynchronously%20so%20as%20not%20to%0A%20%20%20%20%20%20%20*%20block%20render.%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_applyListeners'%2Cvalue%3Afunction%20_applyListeners()%7B%7D%2F**%0A%20%20%20%20%20%20%20*%20Converts%20a%20typed%20JavaScript%20value%20to%20a%20string.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%20this%20method%20is%20provided%20as%20backward-compatible%20legacy%20API%0A%20%20%20%20%20%20%20*%20only.%20%20It%20is%20not%20directly%20called%20by%20any%20Polymer%20features.%20To%20customize%0A%20%20%20%20%20%20%20*%20how%20properties%20are%20serialized%20to%20attributes%20for%20attribute%20bindings%20and%0A%20%20%20%20%20%20%20*%20%60reflectToAttribute%3A%20true%60%20properties%20as%20well%20as%20this%20method%2C%20override%0A%20%20%20%20%20%20%20*%20the%20%60_serializeValue%60%20method%20provided%20by%20%60Polymer.PropertyAccessors%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20deserialize%0A%20%20%20%20%20%20%20*%20%40return%20%7Bstring%20%7C%20undefined%7D%20Serialized%20value%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'serialize'%2Cvalue%3Afunction%20serialize(value)%7Breturn%20this._serializeValue(value)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Converts%20a%20string%20to%20a%20typed%20JavaScript%20value.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%20this%20method%20is%20provided%20as%20backward-compatible%20legacy%20API%0A%20%20%20%20%20%20%20*%20only.%20%20It%20is%20not%20directly%20called%20by%20any%20Polymer%20features.%20%20To%20customize%0A%20%20%20%20%20%20%20*%20how%20attributes%20are%20deserialized%20to%20properties%20for%20in%0A%20%20%20%20%20%20%20*%20%60attributeChangedCallback%60%2C%20override%20%60_deserializeValue%60%20method%0A%20%20%20%20%20%20%20*%20provided%20by%20%60Polymer.PropertyAccessors%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20value%20String%20to%20deserialize%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20type%20Type%20to%20deserialize%20the%20string%20to%0A%20%20%20%20%20%20%20*%20%40return%20%7B*%7D%20Returns%20the%20deserialized%20value%20in%20the%20%60type%60%20given.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'deserialize'%2Cvalue%3Afunction%20deserialize(value%2Ctype)%7Breturn%20this._deserializeValue(value%2Ctype)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Serializes%20a%20property%20to%20its%20associated%20attribute.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%20this%20method%20is%20provided%20as%20backward-compatible%20legacy%20API%0A%20%20%20%20%20%20%20*%20only.%20%20It%20is%20not%20directly%20called%20by%20any%20Polymer%20features.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%20to%20reflect.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%3D%7D%20attribute%20Attribute%20name%20to%20reflect.%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%3D%7D%20value%20Property%20value%20to%20reflect.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'reflectPropertyToAttribute'%2Cvalue%3Afunction%20reflectPropertyToAttribute(property%2Cattribute%2Cvalue)%7Bthis._propertyToAttribute(property%2Cattribute%2Cvalue)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Sets%20a%20typed%20value%20to%20an%20HTML%20attribute%20on%20a%20node.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%20this%20method%20is%20provided%20as%20backward-compatible%20legacy%20API%0A%20%20%20%20%20%20%20*%20only.%20%20It%20is%20not%20directly%20called%20by%20any%20Polymer%20features.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20serialize.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20attribute%20Attribute%20name%20to%20serialize%20to.%0A%20%20%20%20%20%20%20*%20%40param%20%7BElement%7D%20node%20Element%20to%20set%20attribute%20to.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'serializeValueToAttribute'%2Cvalue%3Afunction%20serializeValueToAttribute(value%2Cattribute%2Cnode)%7Bthis._valueToNodeAttribute(%2F**%20%40type%20%7BElement%7D%20*%2Fnode%7C%7Cthis%2Cvalue%2Cattribute)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Copies%20own%20properties%20(including%20accessor%20descriptors)%20from%20a%20source%0A%20%20%20%20%20%20%20*%20object%20to%20a%20target%20object.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20prototype%20Target%20object%20to%20copy%20properties%20to.%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20api%20Source%20object%20to%20copy%20properties%20from.%0A%20%20%20%20%20%20%20*%20%40return%20%7BObject%7D%20prototype%20object%20that%20was%20passed%20as%20first%20argument.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'extend'%2Cvalue%3Afunction%20extend(prototype%2Capi)%7Bif(!(prototype%26%26api))%7Breturn%20prototype%7C%7Capi%3B%7Dvar%20n%24%3DObject.getOwnPropertyNames(api)%3Bfor(var%20i%3D0%2Cn%3Bi%3Cn%24.length%26%26(n%3Dn%24%5Bi%5D)%3Bi%2B%2B)%7Bvar%20pd%3DObject.getOwnPropertyDescriptor(api%2Cn)%3Bif(pd)%7BObject.defineProperty(prototype%2Cn%2Cpd)%3B%7D%7Dreturn%20prototype%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Copies%20props%20from%20a%20source%20object%20to%20a%20target%20object.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%2C%20this%20method%20uses%20a%20simple%20%60for...in%60%20strategy%20for%20enumerating%0A%20%20%20%20%20%20%20*%20properties.%20%20To%20ensure%20only%20%60ownProperties%60%20are%20copied%20from%20source%0A%20%20%20%20%20%20%20*%20to%20target%20and%20that%20accessor%20implementations%20are%20copied%2C%20use%20%60extend%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20target%20Target%20object%20to%20copy%20properties%20to.%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20source%20Source%20object%20to%20copy%20properties%20from.%0A%20%20%20%20%20%20%20*%20%40return%20%7B!Object%7D%20Target%20object%20that%20was%20passed%20as%20first%20argument.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'mixin'%2Cvalue%3Afunction%20mixin(target%2Csource)%7Bfor(var%20i%20in%20source)%7Btarget%5Bi%5D%3Dsource%5Bi%5D%3B%7Dreturn%20target%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Sets%20the%20prototype%20of%20an%20object.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%20this%20method%20is%20provided%20as%20backward-compatible%20legacy%20API%0A%20%20%20%20%20%20%20*%20only.%20%20It%20is%20not%20directly%20called%20by%20any%20Polymer%20features.%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20object%20The%20object%20on%20which%20to%20set%20the%20prototype.%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20prototype%20The%20prototype%20that%20will%20be%20set%20on%20the%20given%0A%20%20%20%20%20%20%20*%20%60object%60.%0A%20%20%20%20%20%20%20*%20%40return%20%7BObject%7D%20Returns%20the%20given%20%60object%60%20with%20its%20prototype%20set%0A%20%20%20%20%20%20%20*%20to%20the%20given%20%60prototype%60%20object.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'chainObject'%2Cvalue%3Afunction%20chainObject(object%2Cprototype)%7Bif(object%26%26prototype%26%26object!%3D%3Dprototype)%7Bobject.__proto__%3Dprototype%3B%7Dreturn%20object%3B%7D%2F*%20****%20Begin%20Template%20****%20*%2F%2F**%0A%20%20%20%20%20%20%20*%20Calls%20%60importNode%60%20on%20the%20%60content%60%20of%20the%20%60template%60%20specified%20and%0A%20%20%20%20%20%20%20*%20returns%20a%20document%20fragment%20containing%20the%20imported%20content.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BHTMLTemplateElement%7D%20template%20HTML%20template%20element%20to%20instance.%0A%20%20%20%20%20%20%20*%20%40return%20%7B!DocumentFragment%7D%20Document%20fragment%20containing%20the%20imported%0A%20%20%20%20%20%20%20*%20%20%20template%20content.%0A%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'instanceTemplate'%2Cvalue%3Afunction%20instanceTemplate(template)%7Bvar%20content%3Dthis.constructor._contentForTemplate(template)%3Bvar%20dom%3D%2F**%20%40type%20%7B!DocumentFragment%7D%20*%2Fdocument.importNode(content%2Ctrue)%3Breturn%20dom%3B%7D%2F*%20****%20Begin%20Events%20****%20*%2F%2F**%0A%20%20%20%20%20%20%20*%20Dispatches%20a%20custom%20event%20with%20an%20optional%20detail%20value.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20type%20Name%20of%20event%20type.%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%3D%7D%20detail%20Detail%20value%20containing%20event-specific%0A%20%20%20%20%20%20%20*%20%20%20payload.%0A%20%20%20%20%20%20%20*%20%40param%20%7B%7B%20bubbles%3A%20(boolean%7Cundefined)%2C%20cancelable%3A%20(boolean%7Cundefined)%2C%20composed%3A%20(boolean%7Cundefined)%20%7D%3D%7D%0A%20%20%20%20%20%20%20*%20%20options%20Object%20specifying%20options.%20%20These%20may%20include%3A%0A%20%20%20%20%20%20%20*%20%20%60bubbles%60%20(boolean%2C%20defaults%20to%20%60true%60)%2C%0A%20%20%20%20%20%20%20*%20%20%60cancelable%60%20(boolean%2C%20defaults%20to%20false)%2C%20and%0A%20%20%20%20%20%20%20*%20%20%60node%60%20on%20which%20to%20fire%20the%20event%20(HTMLElement%2C%20defaults%20to%20%60this%60).%0A%20%20%20%20%20%20%20*%20%40return%20%7B!Event%7D%20The%20new%20event%20that%20was%20fired.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'fire'%2Cvalue%3Afunction%20fire(type%2Cdetail%2Coptions)%7Boptions%3Doptions%7C%7C%7B%7D%3Bdetail%3Ddetail%3D%3D%3Dnull%7C%7Cdetail%3D%3D%3Dundefined%3F%7B%7D%3Adetail%3Bvar%20event%3Dnew%20Event(type%2C%7Bbubbles%3Aoptions.bubbles%3D%3D%3Dundefined%3Ftrue%3Aoptions.bubbles%2Ccancelable%3ABoolean(options.cancelable)%2Ccomposed%3Aoptions.composed%3D%3D%3Dundefined%3Ftrue%3Aoptions.composed%7D)%3Bevent.detail%3Ddetail%3Bvar%20node%3Doptions.node%7C%7Cthis%3Bnode.dispatchEvent(event)%3Breturn%20event%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Convenience%20method%20to%20add%20an%20event%20listener%20on%20a%20given%20element%2C%0A%20%20%20%20%20%20%20*%20late%20bound%20to%20a%20named%20method%20on%20this%20element.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BElement%7D%20node%20Element%20to%20add%20event%20listener%20to.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20eventName%20Name%20of%20event%20to%20listen%20for.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20methodName%20Name%20of%20handler%20method%20on%20%60this%60%20to%20call.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'listen'%2Cvalue%3Afunction%20listen(node%2CeventName%2CmethodName)%7Bnode%3D%2F**%20%40type%20%7B!Element%7D%20*%2Fnode%7C%7Cthis%3Bvar%20hbl%3Dthis.__boundListeners%7C%7C(this.__boundListeners%3Dnew%20WeakMap())%3Bvar%20bl%3Dhbl.get(node)%3Bif(!bl)%7Bbl%3D%7B%7D%3Bhbl.set(node%2Cbl)%3B%7Dvar%20key%3DeventName%2BmethodName%3Bif(!bl%5Bkey%5D)%7Bbl%5Bkey%5D%3Dthis._addMethodEventListenerToNode(node%2CeventName%2CmethodName%2Cthis)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Convenience%20method%20to%20remove%20an%20event%20listener%20from%20a%20given%20element%2C%0A%20%20%20%20%20%20%20*%20late%20bound%20to%20a%20named%20method%20on%20this%20element.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BElement%7D%20node%20Element%20to%20remove%20event%20listener%20from.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20eventName%20Name%20of%20event%20to%20stop%20listening%20to.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20methodName%20Name%20of%20handler%20method%20on%20%60this%60%20to%20not%20call%0A%20%20%20%20%20%20%20anymore.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'unlisten'%2Cvalue%3Afunction%20unlisten(node%2CeventName%2CmethodName)%7Bnode%3D%2F**%20%40type%20%7B!Element%7D%20*%2Fnode%7C%7Cthis%3Bvar%20bl%3Dthis.__boundListeners%26%26this.__boundListeners.get(node)%3Bvar%20key%3DeventName%2BmethodName%3Bvar%20handler%3Dbl%26%26bl%5Bkey%5D%3Bif(handler)%7Bthis._removeEventListenerFromNode(node%2CeventName%2Chandler)%3Bbl%5Bkey%5D%3Dnull%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Override%20scrolling%20behavior%20to%20all%20direction%2C%20one%20direction%2C%20or%20none.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Valid%20scroll%20directions%3A%0A%20%20%20%20%20%20%20*%20%20%20-%20'all'%3A%20scroll%20in%20any%20direction%0A%20%20%20%20%20%20%20*%20%20%20-%20'x'%3A%20scroll%20only%20in%20the%20'x'%20direction%0A%20%20%20%20%20%20%20*%20%20%20-%20'y'%3A%20scroll%20only%20in%20the%20'y'%20direction%0A%20%20%20%20%20%20%20*%20%20%20-%20'none'%3A%20disable%20scrolling%20for%20this%20node%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%3D%7D%20direction%20Direction%20to%20allow%20scrolling%0A%20%20%20%20%20%20%20*%20Defaults%20to%20%60all%60.%0A%20%20%20%20%20%20%20*%20%40param%20%7BElement%3D%7D%20node%20Element%20to%20apply%20scroll%20direction%20setting.%0A%20%20%20%20%20%20%20*%20Defaults%20to%20%60this%60.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'setScrollDirection'%2Cvalue%3Afunction%20setScrollDirection(direction%2Cnode)%7BPolymer.Gestures.setTouchAction(%2F**%20%40type%20%7BElement%7D%20*%2Fnode%7C%7Cthis%2CDIRECTION_MAP%5Bdirection%5D%7C%7C'auto')%3B%7D%2F*%20****%20End%20Events%20****%20*%2F%2F**%0A%20%20%20%20%20%20%20*%20Convenience%20method%20to%20run%20%60querySelector%60%20on%20this%20local%20DOM%20scope.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20function%20calls%20%60Polymer.dom(this.root).querySelector(slctr)%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20slctr%20Selector%20to%20run%20on%20this%20local%20DOM%20scope%0A%20%20%20%20%20%20%20*%20%40return%20%7BElement%7D%20Element%20found%20by%20the%20selector%2C%20or%20null%20if%20not%20found.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'%24%24'%2Cvalue%3Afunction%20%24%24(slctr)%7Breturn%20this.root.querySelector(slctr)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Return%20the%20element%20whose%20local%20dom%20within%20which%20this%20element%0A%20%20%20%20%20%20%20*%20is%20contained.%20This%20is%20a%20shorthand%20for%0A%20%20%20%20%20%20%20*%20%60this.getRootNode().host%60.%0A%20%20%20%20%20%20%20*%20%40this%20%7BElement%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'distributeContent'%2C%2F**%0A%20%20%20%20%20%20%20*%20Force%20this%20element%20to%20distribute%20its%20children%20to%20its%20local%20dom.%0A%20%20%20%20%20%20%20*%20This%20should%20not%20be%20necessary%20as%20of%20Polymer%202.0.2%20and%20is%20provided%20only%0A%20%20%20%20%20%20%20*%20for%20backwards%20compatibility.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20distributeContent()%7Bif(window.ShadyDOM%26%26this.shadowRoot)%7BShadyDOM.flush()%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20a%20list%20of%20nodes%20that%20are%20the%20effective%20childNodes.%20The%20effective%0A%20%20%20%20%20%20%20*%20childNodes%20list%20is%20the%20same%20as%20the%20element's%20childNodes%20except%20that%0A%20%20%20%20%20%20%20*%20any%20%60%3Ccontent%3E%60%20elements%20are%20replaced%20with%20the%20list%20of%20nodes%20distributed%0A%20%20%20%20%20%20%20*%20to%20the%20%60%3Ccontent%3E%60%2C%20the%20result%20of%20its%20%60getDistributedNodes%60%20method.%0A%20%20%20%20%20%20%20*%20%40return%20%7B!Array%3C!Node%3E%7D%20List%20of%20effective%20child%20nodes.%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%20LegacyElementMixin%20must%20be%20applied%20to%20an%20HTMLElement%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'getEffectiveChildNodes'%2Cvalue%3Afunction%20getEffectiveChildNodes()%7Bvar%20thisEl%3D%2F**%20%40type%20%7BElement%7D%20*%2Fthis%3Bvar%20domApi%3D%2F**%20%40type%20%7BPolymer.DomApi%7D%20*%2FPolymer.dom(thisEl)%3Breturn%20domApi.getEffectiveChildNodes()%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20a%20list%20of%20nodes%20distributed%20within%20this%20element%20that%20match%0A%20%20%20%20%20%20%20*%20%60selector%60.%20These%20can%20be%20dom%20children%20or%20elements%20distributed%20to%0A%20%20%20%20%20%20%20*%20children%20that%20are%20insertion%20points.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20selector%20Selector%20to%20run.%0A%20%20%20%20%20%20%20*%20%40return%20%7B!Array%3C!Node%3E%7D%20List%20of%20distributed%20elements%20that%20match%20selector.%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%20LegacyElementMixin%20must%20be%20applied%20to%20an%20HTMLElement%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'queryDistributedElements'%2Cvalue%3Afunction%20queryDistributedElements(selector)%7Bvar%20thisEl%3D%2F**%20%40type%20%7BElement%7D%20*%2Fthis%3Bvar%20domApi%3D%2F**%20%40type%20%7BPolymer.DomApi%7D%20*%2FPolymer.dom(thisEl)%3Breturn%20domApi.queryDistributedElements(selector)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20a%20list%20of%20elements%20that%20are%20the%20effective%20children.%20The%20effective%0A%20%20%20%20%20%20%20*%20children%20list%20is%20the%20same%20as%20the%20element's%20children%20except%20that%0A%20%20%20%20%20%20%20*%20any%20%60%3Ccontent%3E%60%20elements%20are%20replaced%20with%20the%20list%20of%20elements%0A%20%20%20%20%20%20%20*%20distributed%20to%20the%20%60%3Ccontent%3E%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7B!Array%3C!Node%3E%7D%20List%20of%20effective%20children.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'getEffectiveChildren'%2Cvalue%3Afunction%20getEffectiveChildren()%7Bvar%20list%3Dthis.getEffectiveChildNodes()%3Breturn%20list.filter(function(%2F**%20%40type%20%7B!Node%7D%20*%2Fn)%7Breturn%20n.nodeType%3D%3D%3DNode.ELEMENT_NODE%3B%7D)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20a%20string%20of%20text%20content%20that%20is%20the%20concatenation%20of%20the%0A%20%20%20%20%20%20%20*%20text%20content's%20of%20the%20element's%20effective%20childNodes%20(the%20elements%0A%20%20%20%20%20%20%20*%20returned%20by%20%3Ca%20href%3D%22%23getEffectiveChildNodes%3EgetEffectiveChildNodes%3C%2Fa%3E.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bstring%7D%20List%20of%20effective%20children.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'getEffectiveTextContent'%2Cvalue%3Afunction%20getEffectiveTextContent()%7Bvar%20cn%3Dthis.getEffectiveChildNodes()%3Bvar%20tc%3D%5B%5D%3Bfor(var%20i%3D0%2Cc%3Bc%3Dcn%5Bi%5D%3Bi%2B%2B)%7Bif(c.nodeType!%3D%3DNode.COMMENT_NODE)%7Btc.push(c.textContent)%3B%7D%7Dreturn%20tc.join('')%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20the%20first%20effective%20childNode%20within%20this%20element%20that%0A%20%20%20%20%20%20%20*%20match%20%60selector%60.%20These%20can%20be%20dom%20child%20nodes%20or%20elements%20distributed%0A%20%20%20%20%20%20%20*%20to%20children%20that%20are%20insertion%20points.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20selector%20Selector%20to%20run.%0A%20%20%20%20%20%20%20*%20%40return%20%7BNode%7D%20First%20effective%20child%20node%20that%20matches%20selector.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'queryEffectiveChildren'%2Cvalue%3Afunction%20queryEffectiveChildren(selector)%7Bvar%20e%24%3Dthis.queryDistributedElements(selector)%3Breturn%20e%24%26%26e%24%5B0%5D%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20a%20list%20of%20effective%20childNodes%20within%20this%20element%20that%0A%20%20%20%20%20%20%20*%20match%20%60selector%60.%20These%20can%20be%20dom%20child%20nodes%20or%20elements%20distributed%0A%20%20%20%20%20%20%20*%20to%20children%20that%20are%20insertion%20points.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20selector%20Selector%20to%20run.%0A%20%20%20%20%20%20%20*%20%40return%20%7B!Array%3C!Node%3E%7D%20List%20of%20effective%20child%20nodes%20that%20match%20selector.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'queryAllEffectiveChildren'%2Cvalue%3Afunction%20queryAllEffectiveChildren(selector)%7Breturn%20this.queryDistributedElements(selector)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20a%20list%20of%20nodes%20distributed%20to%20this%20element's%20%60%3Cslot%3E%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20If%20this%20element%20contains%20more%20than%20one%20%60%3Cslot%3E%60%20in%20its%20local%20DOM%2C%0A%20%20%20%20%20%20%20*%20an%20optional%20selector%20may%20be%20passed%20to%20choose%20the%20desired%20content.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%3D%7D%20slctr%20CSS%20selector%20to%20choose%20the%20desired%0A%20%20%20%20%20%20%20*%20%20%20%60%3Cslot%3E%60.%20%20Defaults%20to%20%60content%60.%0A%20%20%20%20%20%20%20*%20%40return%20%7B!Array%3C!Node%3E%7D%20List%20of%20distributed%20nodes%20for%20the%20%60%3Cslot%3E%60.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'getContentChildNodes'%2Cvalue%3Afunction%20getContentChildNodes(slctr)%7Bvar%20content%3Dthis.root.querySelector(slctr%7C%7C'slot')%3Breturn%20content%3F%2F**%20%40type%20%7BPolymer.DomApi%7D%20*%2FPolymer.dom(content).getDistributedNodes()%3A%5B%5D%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20a%20list%20of%20element%20children%20distributed%20to%20this%20element's%0A%20%20%20%20%20%20%20*%20%60%3Cslot%3E%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20If%20this%20element%20contains%20more%20than%20one%20%60%3Cslot%3E%60%20in%20its%0A%20%20%20%20%20%20%20*%20local%20DOM%2C%20an%20optional%20selector%20may%20be%20passed%20to%20choose%20the%20desired%0A%20%20%20%20%20%20%20*%20content.%20%20This%20method%20differs%20from%20%60getContentChildNodes%60%20in%20that%20only%0A%20%20%20%20%20%20%20*%20elements%20are%20returned.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%3D%7D%20slctr%20CSS%20selector%20to%20choose%20the%20desired%0A%20%20%20%20%20%20%20*%20%20%20%60%3Ccontent%3E%60.%20%20Defaults%20to%20%60content%60.%0A%20%20%20%20%20%20%20*%20%40return%20%7B!Array%3C!HTMLElement%3E%7D%20List%20of%20distributed%20nodes%20for%20the%0A%20%20%20%20%20%20%20*%20%20%20%60%3Cslot%3E%60.%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'getContentChildren'%2Cvalue%3Afunction%20getContentChildren(slctr)%7Bvar%20children%3D%2F**%20%40type%20%7B!Array%3C!HTMLElement%3E%7D%20*%2Fthis.getContentChildNodes(slctr).filter(function(n)%7Breturn%20n.nodeType%3D%3D%3DNode.ELEMENT_NODE%3B%7D)%3Breturn%20children%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Checks%20whether%20an%20element%20is%20in%20this%20element's%20light%20DOM%20tree.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B%3FNode%7D%20node%20The%20element%20to%20be%20checked.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20true%20if%20node%20is%20in%20this%20element's%20light%20DOM%20tree.%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%20LegacyElementMixin%20must%20be%20applied%20to%20an%20HTMLElement%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'isLightDescendant'%2Cvalue%3Afunction%20isLightDescendant(node)%7Bvar%20thisNode%3D%2F**%20%40type%20%7BNode%7D%20*%2Fthis%3Breturn%20thisNode!%3D%3Dnode%26%26thisNode.contains(node)%26%26thisNode.getRootNode()%3D%3D%3Dnode.getRootNode()%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Checks%20whether%20an%20element%20is%20in%20this%20element's%20local%20DOM%20tree.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Element%7D%20node%20The%20element%20to%20be%20checked.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20true%20if%20node%20is%20in%20this%20element's%20local%20DOM%20tree.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'isLocalDescendant'%2Cvalue%3Afunction%20isLocalDescendant(node)%7Breturn%20this.root%3D%3D%3Dnode.getRootNode()%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20No-op%20for%20backwards%20compatibility.%20This%20should%20now%20be%20handled%20by%0A%20%20%20%20%20%20%20*%20ShadyCss%20library.%0A%20%20%20%20%20%20%20*%20%40param%20%20%7B*%7D%20container%20Unused%0A%20%20%20%20%20%20%20*%20%40param%20%20%7B*%7D%20shouldObserve%20Unused%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'scopeSubtree'%2Cvalue%3Afunction%20scopeSubtree(container%2CshouldObserve)%7B%7D%2F%2F%20eslint-disable-line%20no-unused-vars%0A%2F**%0A%20%20%20%20%20%20%20*%20Returns%20the%20computed%20style%20value%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20The%20css%20property%20name.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Returns%20the%20computed%20css%20property%20value%20for%20the%20given%0A%20%20%20%20%20%20%20*%20%60property%60.%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%20LegacyElementMixin%20must%20be%20applied%20to%20an%20HTMLElement%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'getComputedStyleValue'%2Cvalue%3Afunction%20getComputedStyleValue(property)%7Breturn%20styleInterface.getComputedStyleValue(%2F**%20%40type%20%7B!Element%7D%20*%2Fthis%2Cproperty)%3B%7D%2F%2F%20debounce%0A%2F**%0A%20%20%20%20%20%20%20*%20Call%20%60debounce%60%20to%20collapse%20multiple%20requests%20for%20a%20named%20task%20into%0A%20%20%20%20%20%20%20*%20one%20invocation%20which%20is%20made%20after%20the%20wait%20time%20has%20elapsed%20with%0A%20%20%20%20%20%20%20*%20no%20new%20request.%20%20If%20no%20wait%20time%20is%20given%2C%20the%20callback%20will%20be%20called%0A%20%20%20%20%20%20%20*%20at%20microtask%20timing%20(guaranteed%20before%20paint).%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%20%20%20%20debouncedClickAction(e)%20%7B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%2F%2F%20will%20not%20call%20%60processClick%60%20more%20than%20once%20per%20100ms%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20this.debounce('click'%2C%20function()%20%7B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20this.processClick()%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%7D%20100)%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20jobName%20String%20to%20identify%20the%20debounce%20job.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bfunction()%3Avoid%7D%20callback%20Function%20that%20is%20called%20(with%20%60this%60%0A%20%20%20%20%20%20%20*%20%20%20context)%20when%20the%20wait%20time%20elapses.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20wait%20Optional%20wait%20time%20in%20milliseconds%20(ms)%20after%20the%0A%20%20%20%20%20%20%20*%20%20%20last%20signal%20that%20must%20elapse%20before%20invoking%20%60callback%60%0A%20%20%20%20%20%20%20*%20%40return%20%7B!Object%7D%20Returns%20a%20debouncer%20object%20on%20which%20exists%20the%0A%20%20%20%20%20%20%20*%20following%20methods%3A%20%60isActive()%60%20returns%20true%20if%20the%20debouncer%20is%0A%20%20%20%20%20%20%20*%20active%3B%20%60cancel()%60%20cancels%20the%20debouncer%20if%20it%20is%20active%3B%0A%20%20%20%20%20%20%20*%20%60flush()%60%20immediately%20invokes%20the%20debounced%20callback%20if%20the%20debouncer%0A%20%20%20%20%20%20%20*%20is%20active.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'debounce'%2Cvalue%3Afunction%20debounce(jobName%2Ccallback%2Cwait)%7Bthis._debouncers%3Dthis._debouncers%7C%7C%7B%7D%3Breturn%20this._debouncers%5BjobName%5D%3DPolymer.Debouncer.debounce(this._debouncers%5BjobName%5D%2Cwait%3E0%3FPolymer.Async.timeOut.after(wait)%3APolymer.Async.microTask%2Ccallback.bind(this))%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20whether%20a%20named%20debouncer%20is%20active.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20jobName%20The%20name%20of%20the%20debouncer%20started%20with%20%60debounce%60%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Whether%20the%20debouncer%20is%20active%20(has%20not%20yet%20fired).%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'isDebouncerActive'%2Cvalue%3Afunction%20isDebouncerActive(jobName)%7Bthis._debouncers%3Dthis._debouncers%7C%7C%7B%7D%3Bvar%20debouncer%3Dthis._debouncers%5BjobName%5D%3Breturn!!(debouncer%26%26debouncer.isActive())%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Immediately%20calls%20the%20debouncer%20%60callback%60%20and%20inactivates%20it.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20jobName%20The%20name%20of%20the%20debouncer%20started%20with%20%60debounce%60%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'flushDebouncer'%2Cvalue%3Afunction%20flushDebouncer(jobName)%7Bthis._debouncers%3Dthis._debouncers%7C%7C%7B%7D%3Bvar%20debouncer%3Dthis._debouncers%5BjobName%5D%3Bif(debouncer)%7Bdebouncer.flush()%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Cancels%20an%20active%20debouncer.%20%20The%20%60callback%60%20will%20not%20be%20called.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20jobName%20The%20name%20of%20the%20debouncer%20started%20with%20%60debounce%60%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'cancelDebouncer'%2Cvalue%3Afunction%20cancelDebouncer(jobName)%7Bthis._debouncers%3Dthis._debouncers%7C%7C%7B%7D%3Bvar%20debouncer%3Dthis._debouncers%5BjobName%5D%3Bif(debouncer)%7Bdebouncer.cancel()%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Runs%20a%20callback%20function%20asynchronously.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20By%20default%20(if%20no%20waitTime%20is%20specified)%2C%20async%20callbacks%20are%20run%20at%0A%20%20%20%20%20%20%20*%20microtask%20timing%2C%20which%20will%20occur%20before%20paint.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Function%7D%20callback%20The%20callback%20function%20to%20run%2C%20bound%20to%20%60this%60.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%3D%7D%20waitTime%20Time%20to%20wait%20before%20calling%20the%0A%20%20%20%20%20%20%20*%20%20%20%60callback%60.%20%20If%20unspecified%20or%200%2C%20the%20callback%20will%20be%20run%20at%20microtask%0A%20%20%20%20%20%20%20*%20%20%20timing%20(before%20paint).%0A%20%20%20%20%20%20%20*%20%40return%20%7Bnumber%7D%20Handle%20that%20may%20be%20used%20to%20cancel%20the%20async%20job.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'async'%2Cvalue%3Afunction%20async(callback%2CwaitTime)%7Breturn%20waitTime%3E0%3FPolymer.Async.timeOut.run(callback.bind(this)%2CwaitTime)%3A~Polymer.Async.microTask.run(callback.bind(this))%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Cancels%20an%20async%20operation%20started%20with%20%60async%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20handle%20Handle%20returned%20from%20original%20%60async%60%20call%20to%0A%20%20%20%20%20%20%20*%20%20%20cancel.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'cancelAsync'%2Cvalue%3Afunction%20cancelAsync(handle)%7Bhandle%3C0%3FPolymer.Async.microTask.cancel(~handle)%3APolymer.Async.timeOut.cancel(handle)%3B%7D%2F%2F%20other%0A%2F**%0A%20%20%20%20%20%20%20*%20Convenience%20method%20for%20creating%20an%20element%20and%20configuring%20it.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20tag%20HTML%20element%20tag%20to%20create.%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20props%20Object%20of%20properties%20to%20configure%20on%20the%0A%20%20%20%20%20%20%20*%20%20%20%20instance.%0A%20%20%20%20%20%20%20*%20%40return%20%7B!Element%7D%20Newly%20created%20and%20configured%20element.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'create'%2Cvalue%3Afunction%20create(tag%2Cprops)%7Bvar%20elt%3Ddocument.createElement(tag)%3Bif(props)%7Bif(elt.setProperties)%7Belt.setProperties(props)%3B%7Delse%7Bfor(var%20n%20in%20props)%7Belt%5Bn%5D%3Dprops%5Bn%5D%3B%7D%7D%7Dreturn%20elt%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Convenience%20method%20for%20importing%20an%20HTML%20document%20imperatively.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20creates%20a%20new%20%60%3Clink%20rel%3D%22import%22%3E%60%20element%20with%0A%20%20%20%20%20%20%20*%20the%20provided%20URL%20and%20appends%20it%20to%20the%20document%20to%20start%20loading.%0A%20%20%20%20%20%20%20*%20In%20the%20%60onload%60%20callback%2C%20the%20%60import%60%20property%20of%20the%20%60link%60%0A%20%20%20%20%20%20%20*%20element%20will%20contain%20the%20imported%20document%20contents.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20href%20URL%20to%20document%20to%20load.%0A%20%20%20%20%20%20%20*%20%40param%20%7B%3Ffunction(!Event)%3Avoid%3D%7D%20onload%20Callback%20to%20notify%20when%20an%20import%20successfully%0A%20%20%20%20%20%20%20*%20%20%20loaded.%0A%20%20%20%20%20%20%20*%20%40param%20%7B%3Ffunction(!ErrorEvent)%3Avoid%3D%7D%20onerror%20Callback%20to%20notify%20when%20an%20import%0A%20%20%20%20%20%20%20*%20%20%20unsuccessfully%20loaded.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20optAsync%20True%20if%20the%20import%20should%20be%20loaded%20%60async%60.%0A%20%20%20%20%20%20%20*%20%20%20Defaults%20to%20%60false%60.%0A%20%20%20%20%20%20%20*%20%40return%20%7B!HTMLLinkElement%7D%20The%20link%20element%20for%20the%20URL%20to%20be%20loaded.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'importHref'%2Cvalue%3Afunction%20importHref(href%2Conload%2Conerror%2CoptAsync)%7B%2F%2F%20eslint-disable-line%20no-unused-vars%0Avar%20loadFn%3Donload%3Fonload.bind(this)%3Anull%3Bvar%20errorFn%3Donerror%3Fonerror.bind(this)%3Anull%3Breturn%20Polymer.importHref(href%2CloadFn%2CerrorFn%2CoptAsync)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Polyfill%20for%20Element.prototype.matches%2C%20which%20is%20sometimes%20still%0A%20%20%20%20%20%20%20*%20prefixed.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20selector%20Selector%20to%20test.%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Element%3D%7D%20node%20Element%20to%20test%20the%20selector%20against.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Whether%20the%20element%20matches%20the%20selector.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'elementMatches'%2Cvalue%3Afunction%20elementMatches(selector%2Cnode)%7Breturn%20Polymer.dom.matchesSelector(%2F**%20%40type%20%7B!Element%7D%20*%2Fnode%7C%7Cthis%2Cselector)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Toggles%20an%20HTML%20attribute%20on%20or%20off.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20name%20HTML%20attribute%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20bool%20Boolean%20to%20force%20the%20attribute%20on%20or%20off.%0A%20%20%20%20%20%20%20*%20%20%20%20When%20unspecified%2C%20the%20state%20of%20the%20attribute%20will%20be%20reversed.%0A%20%20%20%20%20%20%20*%20%40param%20%7BElement%3D%7D%20node%20Node%20to%20target.%20%20Defaults%20to%20%60this%60.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'toggleAttribute'%2Cvalue%3Afunction%20toggleAttribute(name%2Cbool%2Cnode)%7Bnode%3D%2F**%20%40type%20%7BElement%7D%20*%2Fnode%7C%7Cthis%3Bif(arguments.length%3D%3D1)%7Bbool%3D!node.hasAttribute(name)%3B%7Dif(bool)%7Bnode.setAttribute(name%2C'')%3B%7Delse%7Bnode.removeAttribute(name)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Toggles%20a%20CSS%20class%20on%20or%20off.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20name%20CSS%20class%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20bool%20Boolean%20to%20force%20the%20class%20on%20or%20off.%0A%20%20%20%20%20%20%20*%20%20%20%20When%20unspecified%2C%20the%20state%20of%20the%20class%20will%20be%20reversed.%0A%20%20%20%20%20%20%20*%20%40param%20%7BElement%3D%7D%20node%20Node%20to%20target.%20%20Defaults%20to%20%60this%60.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'toggleClass'%2Cvalue%3Afunction%20toggleClass(name%2Cbool%2Cnode)%7Bnode%3D%2F**%20%40type%20%7BElement%7D%20*%2Fnode%7C%7Cthis%3Bif(arguments.length%3D%3D1)%7Bbool%3D!node.classList.contains(name)%3B%7Dif(bool)%7Bnode.classList.add(name)%3B%7Delse%7Bnode.classList.remove(name)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Cross-platform%20helper%20for%20setting%20an%20element's%20CSS%20%60transform%60%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20transformText%20Transform%20setting.%0A%20%20%20%20%20%20%20*%20%40param%20%7BElement%3D%7D%20node%20Element%20to%20apply%20the%20transform%20to.%0A%20%20%20%20%20%20%20*%20Defaults%20to%20%60this%60%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'transform'%2Cvalue%3Afunction%20transform(transformText%2Cnode)%7Bnode%3D%2F**%20%40type%20%7BElement%7D%20*%2Fnode%7C%7Cthis%3Bnode.style.webkitTransform%3DtransformText%3Bnode.style.transform%3DtransformText%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Cross-platform%20helper%20for%20setting%20an%20element's%20CSS%20%60translate3d%60%0A%20%20%20%20%20%20%20*%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20x%20X%20offset.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20y%20Y%20offset.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20z%20Z%20offset.%0A%20%20%20%20%20%20%20*%20%40param%20%7BElement%3D%7D%20node%20Element%20to%20apply%20the%20transform%20to.%0A%20%20%20%20%20%20%20*%20Defaults%20to%20%60this%60.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'translate3d'%2Cvalue%3Afunction%20translate3d(x%2Cy%2Cz%2Cnode)%7Bnode%3D%2F**%20%40type%20%7BElement%7D%20*%2Fnode%7C%7Cthis%3Bthis.transform('translate3d('%2Bx%2B'%2C'%2By%2B'%2C'%2Bz%2B')'%2Cnode)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Removes%20an%20item%20from%20an%20array%2C%20if%20it%20exists.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20If%20the%20array%20is%20specified%20by%20path%2C%20a%20change%20notification%20is%0A%20%20%20%20%20%20%20*%20generated%2C%20so%20that%20observers%2C%20data%20bindings%20and%20computed%0A%20%20%20%20%20%20%20*%20properties%20watching%20that%20path%20can%20update.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20If%20the%20array%20is%20passed%20directly%2C%20**no%20change%0A%20%20%20%20%20%20%20*%20notification%20is%20generated**.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cnumber%7Cstring%3E%7D%20arrayOrPath%20Path%20to%20array%20from%20which%20to%20remove%20the%20item%0A%20%20%20%20%20%20%20*%20%20%20(or%20the%20array%20itself).%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20item%20Item%20to%20remove.%0A%20%20%20%20%20%20%20*%20%40return%20%7BArray%7D%20Array%20containing%20item%20removed.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'arrayDelete'%2Cvalue%3Afunction%20arrayDelete(arrayOrPath%2Citem)%7Bvar%20index%3Dvoid%200%3Bif(Array.isArray(arrayOrPath))%7Bindex%3DarrayOrPath.indexOf(item)%3Bif(index%3E%3D0)%7Breturn%20arrayOrPath.splice(index%2C1)%3B%7D%7Delse%7Bvar%20arr%3DPolymer.Path.get(this%2CarrayOrPath)%3Bindex%3Darr.indexOf(item)%3Bif(index%3E%3D0)%7Breturn%20this.splice(arrayOrPath%2Cindex%2C1)%3B%7D%7Dreturn%20null%3B%7D%2F%2F%20logging%0A%2F**%0A%20%20%20%20%20%20%20*%20Facades%20%60console.log%60%2F%60warn%60%2F%60error%60%20as%20override%20point.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20level%20One%20of%20'log'%2C%20'warn'%2C%20'error'%0A%20%20%20%20%20%20%20*%20%40param%20%7BArray%7D%20args%20Array%20of%20strings%20or%20objects%20to%20log%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_logger'%2Cvalue%3Afunction%20_logger(level%2Cargs)%7Bvar%20_console%3B%2F%2F%20accept%20%5B'foo'%2C%20'bar'%5D%20and%20%5B%5B'foo'%2C%20'bar'%5D%5D%0Aif(Array.isArray(args)%26%26args.length%3D%3D%3D1%26%26Array.isArray(args%5B0%5D))%7Bargs%3Dargs%5B0%5D%3B%7Dswitch(level)%7Bcase'log'%3Acase'warn'%3Acase'error'%3A(_console%3Dconsole)%5Blevel%5D.apply(_console%2C_toConsumableArray(args))%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Facades%20%60console.log%60%20as%20an%20override%20point.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B...*%7D%20args%20Array%20of%20strings%20or%20objects%20to%20log%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_log'%2Cvalue%3Afunction%20_log()%7Bfor(var%20_len%3Darguments.length%2Cargs%3DArray(_len)%2C_key%3D0%3B_key%3C_len%3B_key%2B%2B)%7Bargs%5B_key%5D%3Darguments%5B_key%5D%3B%7Dthis._logger('log'%2Cargs)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Facades%20%60console.warn%60%20as%20an%20override%20point.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B...*%7D%20args%20Array%20of%20strings%20or%20objects%20to%20log%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_warn'%2Cvalue%3Afunction%20_warn()%7Bfor(var%20_len2%3Darguments.length%2Cargs%3DArray(_len2)%2C_key2%3D0%3B_key2%3C_len2%3B_key2%2B%2B)%7Bargs%5B_key2%5D%3Darguments%5B_key2%5D%3B%7Dthis._logger('warn'%2Cargs)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Facades%20%60console.error%60%20as%20an%20override%20point.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B...*%7D%20args%20Array%20of%20strings%20or%20objects%20to%20log%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_error'%2Cvalue%3Afunction%20_error()%7Bfor(var%20_len3%3Darguments.length%2Cargs%3DArray(_len3)%2C_key3%3D0%3B_key3%3C_len3%3B_key3%2B%2B)%7Bargs%5B_key3%5D%3Darguments%5B_key3%5D%3B%7Dthis._logger('error'%2Cargs)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Formats%20a%20message%20using%20the%20element%20type%20an%20a%20method%20name.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20methodName%20Method%20name%20to%20associate%20with%20message%0A%20%20%20%20%20%20%20*%20%40param%20%7B...*%7D%20args%20Array%20of%20strings%20or%20objects%20to%20log%0A%20%20%20%20%20%20%20*%20%40return%20%7BArray%7D%20Array%20with%20formatting%20information%20for%20%60console%60%0A%20%20%20%20%20%20%20*%20%20%20logging.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_logf'%2Cvalue%3Afunction%20_logf(methodName)%7Bfor(var%20_len4%3Darguments.length%2Cargs%3DArray(_len4%3E1%3F_len4-1%3A0)%2C_key4%3D1%3B_key4%3C_len4%3B_key4%2B%2B)%7Bargs%5B_key4-1%5D%3Darguments%5B_key4%5D%3B%7Dreturn%5B'%5B%25s%3A%3A%25s%5D'%2Cthis.is%2CmethodName%5D.concat(args)%3B%7D%7D%2C%7Bkey%3A'domHost'%2Cget%3Afunction%20get()%7Bvar%20root%3Dthis.getRootNode()%3Breturn%20root%20instanceof%20DocumentFragment%3F%2F**%20%40type%20%7BShadowRoot%7D%20*%2Froot.host%3Aroot%3B%7D%7D%5D%2C%5B%7Bkey%3A'importMeta'%2Cget%3Afunction%20get()%7Breturn%20this.prototype.importMeta%3B%7D%7D%5D)%3Breturn%20LegacyElement%3B%7D(legacyElementBase)%3BLegacyElement.prototype.is%3D''%3Breturn%20LegacyElement%3B%7D)%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Flegacy%2Flegacy-element-mixin.html.js%0A",
            "resourceBytes": 37092,
            "encodedBytes": 0,
            "unusedBytes": 11599
          },
          {
            "name": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bvar%20_get%3Dfunction%20get(object%2Cproperty%2Creceiver)%7Bif(object%3D%3D%3Dnull)object%3DFunction.prototype%3Bvar%20desc%3DObject.getOwnPropertyDescriptor(object%2Cproperty)%3Bif(desc%3D%3D%3Dundefined)%7Bvar%20parent%3DObject.getPrototypeOf(object)%3Bif(parent%3D%3D%3Dnull)%7Breturn%20undefined%3B%7Delse%7Breturn%20get(parent%2Cproperty%2Creceiver)%3B%7D%7Delse%20if(%22value%22in%20desc)%7Breturn%20desc.value%3B%7Delse%7Bvar%20getter%3Ddesc.get%3Bif(getter%3D%3D%3Dundefined)%7Breturn%20undefined%3B%7Dreturn%20getter.call(receiver)%3B%7D%7D%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3Bvar%20lifecycleProps%3D%7Battached%3Atrue%2Cdetached%3Atrue%2Cready%3Atrue%2Ccreated%3Atrue%2CbeforeRegister%3Atrue%2Cregistered%3Atrue%2CattributeChanged%3Atrue%2Clisteners%3Atrue%2ChostAttributes%3Atrue%7D%3Bvar%20excludeOnInfo%3D%7Battached%3Atrue%2Cdetached%3Atrue%2Cready%3Atrue%2Ccreated%3Atrue%2CbeforeRegister%3Atrue%2Cregistered%3Atrue%2CattributeChanged%3Atrue%2Cbehaviors%3Atrue%2C_noAccessors%3Atrue%7D%3Bvar%20excludeOnBehaviors%3DObject.assign(%7Blisteners%3Atrue%2ChostAttributes%3Atrue%2Cproperties%3Atrue%2Cobservers%3Atrue%7D%2CexcludeOnInfo)%3Bfunction%20copyProperties(source%2Ctarget%2CexcludeProps)%7Bvar%20noAccessors%3Dsource._noAccessors%3Bfor(var%20p%20in%20source)%7Bif(!(p%20in%20excludeProps))%7Bif(noAccessors)%7Btarget%5Bp%5D%3Dsource%5Bp%5D%3B%7Delse%7Bvar%20pd%3DObject.getOwnPropertyDescriptor(source%2Cp)%3Bif(pd)%7B%2F%2F%20ensure%20property%20is%20configurable%20so%20that%20a%20later%20behavior%20can%0A%2F%2F%20re-configure%20it.%0Apd.configurable%3Dtrue%3BObject.defineProperty(target%2Cp%2Cpd)%3B%7D%7D%7D%7D%7D%2F**%0A%20%20%20%20%20*%20Applies%20a%20%22legacy%22%20behavior%20or%20array%20of%20behaviors%20to%20the%20provided%20class.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Note%3A%20this%20method%20will%20automatically%20also%20apply%20the%20%60Polymer.LegacyElementMixin%60%0A%20%20%20%20%20*%20to%20ensure%20that%20any%20legacy%20behaviors%20can%20rely%20on%20legacy%20Polymer%20API%20on%0A%20%20%20%20%20*%20the%20underlying%20element.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40template%20T%0A%20%20%20%20%20*%20%40param%20%7B!Object%7C!Array%3C!Object%3E%7D%20behaviors%20Behavior%20object%20or%20array%20of%20behaviors.%0A%20%20%20%20%20*%20%40param%20%7Bfunction(new%3AT)%7D%20klass%20Element%20class.%0A%20%20%20%20%20*%20%40return%20%7Bfunction(new%3AT)%7D%20Returns%20a%20new%20Element%20class%20extended%20by%20the%0A%20%20%20%20%20*%20passed%20in%20%60behaviors%60%20and%20also%20by%20%60Polymer.LegacyElementMixin%60.%0A%20%20%20%20%20*%20%40memberof%20Polymer%0A%20%20%20%20%20*%20%40suppress%20%7BinvalidCasts%2C%20checkTypes%7D%0A%20%20%20%20%20*%2Ffunction%20mixinBehaviors(behaviors%2Cklass)%7Breturn%20GenerateClassFromInfo(%7B%7D%2CPolymer.LegacyElementMixin(klass)%2Cbehaviors)%3B%7D%2F%2F%20NOTE%3A%0A%2F%2F%201.x%0A%2F%2F%20Behaviors%20were%20mixed%20in%20*in%20reverse%20order*%20and%20de-duped%20on%20the%20fly.%0A%2F%2F%20The%20rule%20was%20that%20behavior%20properties%20were%20copied%20onto%20the%20element%0A%2F%2F%20prototype%20if%20and%20only%20if%20the%20property%20did%20not%20already%20exist.%0A%2F%2F%20Given%3A%20Polymer%7B%20behaviors%3A%20%5BA%2C%20B%2C%20C%2C%20A%2C%20B%5D%7D%2C%20property%20copy%20order%20was%3A%0A%2F%2F%20(1)%2C%20B%2C%20(2)%2C%20A%2C%20(3)%20C.%20This%20means%20prototype%20properties%20win%20over%0A%2F%2F%20B%20properties%20win%20over%20A%20win%20over%20C.%20This%20mirrors%20what%20would%20happen%0A%2F%2F%20with%20inheritance%20if%20element%20extended%20B%20extended%20A%20extended%20C.%0A%2F%2F%0A%2F%2F%20Again%20given%2C%20Polymer%7B%20behaviors%3A%20%5BA%2C%20B%2C%20C%2C%20A%2C%20B%5D%7D%2C%20the%20resulting%0A%2F%2F%20%60behaviors%60%20array%20was%20%5BC%2C%20A%2C%20B%5D.%0A%2F%2F%20Behavior%20lifecycle%20methods%20were%20called%20in%20behavior%20array%20order%0A%2F%2F%20followed%20by%20the%20element%2C%20e.g.%20(1)%20C.created%2C%20(2)%20A.created%2C%0A%2F%2F%20(3)%20B.created%2C%20(4)%20element.created.%20There%20was%20no%20support%20for%0A%2F%2F%20super%2C%20and%20%22super-behavior%22%20methods%20were%20callable%20only%20by%20name).%0A%2F%2F%0A%2F%2F%202.x%0A%2F%2F%20Behaviors%20are%20made%20into%20proper%20mixins%20which%20live%20in%20the%0A%2F%2F%20element's%20prototype%20chain.%20Behaviors%20are%20placed%20in%20the%20element%20prototype%0A%2F%2F%20eldest%20to%20youngest%20and%20de-duped%20youngest%20to%20oldest%3A%0A%2F%2F%20So%2C%20first%20%5BA%2C%20B%2C%20C%2C%20A%2C%20B%5D%20becomes%20%5BC%2C%20A%2C%20B%5D%20then%2C%0A%2F%2F%20the%20element%20prototype%20becomes%20(oldest)%20(1)%20Polymer.Element%2C%20(2)%20class(C)%2C%0A%2F%2F%20(3)%20class(A)%2C%20(4)%20class(B)%2C%20(5)%20class(Polymer(%7B...%7D)).%0A%2F%2F%20Result%3A%0A%2F%2F%20This%20means%20element%20properties%20win%20over%20B%20properties%20win%20over%20A%20win%0A%2F%2F%20over%20C.%20(same%20as%201.x)%0A%2F%2F%20If%20lifecycle%20is%20called%20(super%20then%20me)%2C%20order%20is%0A%2F%2F%20(1)%20C.created%2C%20(2)%20A.created%2C%20(3)%20B.created%2C%20(4)%20element.created%0A%2F%2F%20(again%20same%20as%201.x)%0Afunction%20applyBehaviors(proto%2Cbehaviors%2Clifecycle)%7Bfor(var%20i%3D0%3Bi%3Cbehaviors.length%3Bi%2B%2B)%7BapplyInfo(proto%2Cbehaviors%5Bi%5D%2Clifecycle%2CexcludeOnBehaviors)%3B%7D%7Dfunction%20applyInfo(proto%2Cinfo%2Clifecycle%2CexcludeProps)%7BcopyProperties(info%2Cproto%2CexcludeProps)%3Bfor(var%20p%20in%20lifecycleProps)%7Bif(info%5Bp%5D)%7Blifecycle%5Bp%5D%3Dlifecycle%5Bp%5D%7C%7C%5B%5D%3Blifecycle%5Bp%5D.push(info%5Bp%5D)%3B%7D%7D%7D%2F**%0A%20%20%20%20%20*%20%40param%20%7BArray%7D%20behaviors%20List%20of%20behaviors%20to%20flatten.%0A%20%20%20%20%20*%20%40param%20%7BArray%3D%7D%20list%20Target%20list%20to%20flatten%20behaviors%20into.%0A%20%20%20%20%20*%20%40param%20%7BArray%3D%7D%20exclude%20List%20of%20behaviors%20to%20exclude%20from%20the%20list.%0A%20%20%20%20%20*%20%40return%20%7B!Array%7D%20Returns%20the%20list%20of%20flattened%20behaviors.%0A%20%20%20%20%20*%2Ffunction%20flattenBehaviors(behaviors%2Clist%2Cexclude)%7Blist%3Dlist%7C%7C%5B%5D%3Bfor(var%20i%3Dbehaviors.length-1%3Bi%3E%3D0%3Bi--)%7Bvar%20b%3Dbehaviors%5Bi%5D%3Bif(b)%7Bif(Array.isArray(b))%7BflattenBehaviors(b%2Clist)%3B%7Delse%7B%2F%2F%20dedup%0Aif(list.indexOf(b)%3C0%26%26(!exclude%7C%7Cexclude.indexOf(b)%3C0))%7Blist.unshift(b)%3B%7D%7D%7Delse%7Bconsole.warn('behavior%20is%20null%2C%20check%20for%20missing%20or%20404%20import')%3B%7D%7Dreturn%20list%3B%7D%2F*%20Note%20about%20construction%20and%20extension%20of%20legacy%20classes.%0A%20%20%20%20%20%20%5BChanged%20in%20Q4%202018%20to%20optimize%20performance.%5D%0A%0A%20%20%20%20%20%20When%20calling%20%60Polymer%60%20or%20%60mixinBehaviors%60%2C%20the%20generated%20class%20below%20is%0A%20%20%20%20%20%20made.%20The%20list%20of%20behaviors%20was%20previously%20made%20into%20one%20generated%20class%20per%0A%20%20%20%20%20%20behavior%2C%20but%20this%20is%20no%20longer%20the%20case%20as%20behaviors%20are%20now%20called%0A%20%20%20%20%20%20manually.%20Note%2C%20there%20may%20*still*%20be%20multiple%20generated%20classes%20in%20the%0A%20%20%20%20%20%20element's%20prototype%20chain%20if%20extension%20is%20used%20with%20%60mixinBehaviors%60.%0A%0A%20%20%20%20%20%20The%20generated%20class%20is%20directly%20tied%20to%20the%20info%20object%20and%20behaviors%0A%20%20%20%20%20%20used%20to%20create%20it.%20That%20list%20of%20behaviors%20is%20filtered%20so%20it's%20only%20the%0A%20%20%20%20%20%20behaviors%20not%20active%20on%20the%20superclass.%20In%20order%20to%20call%20through%20to%20the%0A%20%20%20%20%20%20entire%20list%20of%20lifecycle%20methods%2C%20it's%20important%20to%20call%20%60super%60.%0A%0A%20%20%20%20%20%20The%20element's%20%60properties%60%20and%20%60observers%60%20are%20controlled%20via%20the%20finalization%0A%20%20%20%20%20%20mechanism%20provided%20by%20%60PropertiesMixin%60.%20%60Properties%60%20and%20%60observers%60%20are%0A%20%20%20%20%20%20collected%20by%20manually%20traversing%20the%20prototype%20chain%20and%20merging.%0A%0A%20%20%20%20%20%20To%20limit%20changes%2C%20the%20%60_registered%60%20method%20is%20called%20via%20%60_initializeProperties%60%0A%20%20%20%20%20%20and%20not%20%60_finalizeClass%60.%0A%20%20%20%20*%2F%2F**%0A%20%20%20%20%20*%20%40param%20%7B!PolymerInit%7D%20info%20Polymer%20info%20object%0A%20%20%20%20%20*%20%40param%20%7Bfunction(new%3AHTMLElement)%7D%20Base%20base%20class%20to%20extend%20with%20info%20object%0A%20%20%20%20%20*%20%40param%20%7BObject%7D%20behaviors%20behaviors%20to%20copy%20into%20the%20element%0A%20%20%20%20%20*%20%40return%20%7Bfunction(new%3AHTMLElement)%7D%20Generated%20class%0A%20%20%20%20%20*%20%40suppress%20%7BcheckTypes%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Ffunction%20GenerateClassFromInfo(info%2CBase%2Cbehaviors)%7B%2F%2F%20manages%20behavior%20and%20lifecycle%20processing%20(filled%20in%20after%20class%20definition)%0Avar%20behaviorList%3Dvoid%200%3Bvar%20lifecycle%3D%7B%7D%3B%2F**%20%40private%20*%2Fvar%20PolymerGenerated%3Dfunction(_Base)%7B_inherits(PolymerGenerated%2C_Base)%3Bfunction%20PolymerGenerated()%7B_classCallCheck(this%2CPolymerGenerated)%3Breturn%20_possibleConstructorReturn(this%2C(PolymerGenerated.__proto__%7C%7CObject.getPrototypeOf(PolymerGenerated)).apply(this%2Carguments))%3B%7D_createClass(PolymerGenerated%2C%5B%7Bkey%3A'created'%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20created()%7B_get(PolymerGenerated.prototype.__proto__%7C%7CObject.getPrototypeOf(PolymerGenerated.prototype)%2C'created'%2Cthis).call(this)%3Bvar%20list%3Dlifecycle.created%3Bif(list)%7Bfor(var%20i%3D0%3Bi%3Clist.length%3Bi%2B%2B)%7Blist%5Bi%5D.call(this)%3B%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_registered'%2Cvalue%3Afunction%20_registered()%7B%2F*%20NOTE%3A%20%60beforeRegister%60%20is%20called%20here%20for%20bc%2C%20but%20the%20behavior%0A%20%20%20%20%20%20%20%20%20%20%20%20is%20different%20than%20in%201.x.%20In%201.0%2C%20the%20method%20was%20called%20*after*%0A%20%20%20%20%20%20%20%20%20%20%20%20mixing%20prototypes%20together%20but%20*before*%20processing%20of%20meta-objects.%0A%20%20%20%20%20%20%20%20%20%20%20%20However%2C%20dynamic%20effects%20can%20still%20be%20set%20here%20and%20can%20be%20done%20either%0A%20%20%20%20%20%20%20%20%20%20%20%20in%20%60beforeRegister%60%20or%20%60registered%60.%20It%20is%20no%20longer%20possible%20to%20set%0A%20%20%20%20%20%20%20%20%20%20%20%20%60is%60%20in%20%60beforeRegister%60%20as%20you%20could%20in%201.x.%0A%20%20%20%20%20%20%20%20%20%20*%2F%2F%2F%20only%20proceed%20if%20the%20generated%20class'%20prototype%20has%20not%20been%20registered.%0Avar%20generatedProto%3DPolymerGenerated.prototype%3Bif(!generatedProto.hasOwnProperty('__hasRegisterFinished'))%7BgeneratedProto.__hasRegisterFinished%3Dtrue%3B%2F%2F%20ensure%20superclass%20is%20registered%20first.%0A_get(PolymerGenerated.prototype.__proto__%7C%7CObject.getPrototypeOf(PolymerGenerated.prototype)%2C'_registered'%2Cthis).call(this)%3B%2F%2F%20copy%20properties%20onto%20the%20generated%20class%20lazily%20if%20we're%20optimizing%2C%0Aif(Polymer.legacyOptimizations)%7BcopyPropertiesToProto(generatedProto)%3B%7D%2F%2F%20make%20sure%20legacy%20lifecycle%20is%20called%20on%20the%20*element*'s%20prototype%0A%2F%2F%20and%20not%20the%20generated%20class%20prototype%3B%20if%20the%20element%20has%20been%0A%2F%2F%20extended%2C%20these%20are%20*not*%20the%20same.%0Avar%20proto%3DObject.getPrototypeOf(this)%3Bvar%20list%3Dlifecycle.beforeRegister%3Bif(list)%7Bfor(var%20i%3D0%3Bi%3Clist.length%3Bi%2B%2B)%7Blist%5Bi%5D.call(proto)%3B%7D%7Dlist%3Dlifecycle.registered%3Bif(list)%7Bfor(var%20_i%3D0%3B_i%3Clist.length%3B_i%2B%2B)%7Blist%5B_i%5D.call(proto)%3B%7D%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_applyListeners'%2Cvalue%3Afunction%20_applyListeners()%7B_get(PolymerGenerated.prototype.__proto__%7C%7CObject.getPrototypeOf(PolymerGenerated.prototype)%2C'_applyListeners'%2Cthis).call(this)%3Bvar%20list%3Dlifecycle.listeners%3Bif(list)%7Bfor(var%20i%3D0%3Bi%3Clist.length%3Bi%2B%2B)%7Bvar%20listeners%3Dlist%5Bi%5D%3Bif(listeners)%7Bfor(var%20l%20in%20listeners)%7Bthis._addMethodEventListenerToNode(this%2Cl%2Clisteners%5Bl%5D)%3B%7D%7D%7D%7D%7D%2F%2F%20note%3A%20exception%20to%20%22super%20then%20me%22%20rule%3B%0A%2F%2F%20do%20work%20before%20calling%20super%20so%20that%20super%20attributes%0A%2F%2F%20only%20apply%20if%20not%20already%20set.%0A%2F**%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_ensureAttributes'%2Cvalue%3Afunction%20_ensureAttributes()%7Bvar%20list%3Dlifecycle.hostAttributes%3Bif(list)%7Bfor(var%20i%3Dlist.length-1%3Bi%3E%3D0%3Bi--)%7Bvar%20hostAttributes%3Dlist%5Bi%5D%3Bfor(var%20a%20in%20hostAttributes)%7Bthis._ensureAttribute(a%2ChostAttributes%5Ba%5D)%3B%7D%7D%7D_get(PolymerGenerated.prototype.__proto__%7C%7CObject.getPrototypeOf(PolymerGenerated.prototype)%2C'_ensureAttributes'%2Cthis).call(this)%3B%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'ready'%2Cvalue%3Afunction%20ready()%7B_get(PolymerGenerated.prototype.__proto__%7C%7CObject.getPrototypeOf(PolymerGenerated.prototype)%2C'ready'%2Cthis).call(this)%3Bvar%20list%3Dlifecycle.ready%3Bif(list)%7Bfor(var%20i%3D0%3Bi%3Clist.length%3Bi%2B%2B)%7Blist%5Bi%5D.call(this)%3B%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'attached'%2Cvalue%3Afunction%20attached()%7B_get(PolymerGenerated.prototype.__proto__%7C%7CObject.getPrototypeOf(PolymerGenerated.prototype)%2C'attached'%2Cthis).call(this)%3Bvar%20list%3Dlifecycle.attached%3Bif(list)%7Bfor(var%20i%3D0%3Bi%3Clist.length%3Bi%2B%2B)%7Blist%5Bi%5D.call(this)%3B%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'detached'%2Cvalue%3Afunction%20detached()%7B_get(PolymerGenerated.prototype.__proto__%7C%7CObject.getPrototypeOf(PolymerGenerated.prototype)%2C'detached'%2Cthis).call(this)%3Bvar%20list%3Dlifecycle.detached%3Bif(list)%7Bfor(var%20i%3D0%3Bi%3Clist.length%3Bi%2B%2B)%7Blist%5Bi%5D.call(this)%3B%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Implements%20native%20Custom%20Elements%20%60attributeChangedCallback%60%20to%0A%20%20%20%20%20%20%20%20%20*%20set%20an%20attribute%20value%20to%20a%20property%20via%20%60_attributeToProperty%60.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20name%20Name%20of%20attribute%20that%20changed%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20old%20Old%20attribute%20value%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20value%20New%20attribute%20value%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'attributeChanged'%2Cvalue%3Afunction%20attributeChanged(name%2Cold%2Cvalue)%7B_get(PolymerGenerated.prototype.__proto__%7C%7CObject.getPrototypeOf(PolymerGenerated.prototype)%2C'attributeChanged'%2Cthis).call(this)%3Bvar%20list%3Dlifecycle.attributeChanged%3Bif(list)%7Bfor(var%20i%3D0%3Bi%3Clist.length%3Bi%2B%2B)%7Blist%5Bi%5D.call(this%2Cname%2Cold%2Cvalue)%3B%7D%7D%7D%7D%5D%2C%5B%7Bkey%3A'_finalizeClass'%2C%2F%2F%20explicitly%20not%20calling%20super._finalizeClass%0Avalue%3Afunction%20_finalizeClass()%7B%2F%2F%20if%20calling%20via%20a%20subclass%20that%20hasn't%20been%20generated%2C%20pass%20through%20to%20super%0Aif(!this.hasOwnProperty(window.JSCompiler_renameProperty('generatedFrom'%2Cthis)))%7B_get(PolymerGenerated.__proto__%7C%7CObject.getPrototypeOf(PolymerGenerated)%2C'_finalizeClass'%2Cthis).call(this)%3B%7Delse%7B%2F%2F%20interleave%20properties%20and%20observers%20per%20behavior%20and%20%60info%60%0Aif(behaviorList)%7Bfor(var%20i%3D0%2Cb%3Bi%3CbehaviorList.length%3Bi%2B%2B)%7Bb%3DbehaviorList%5Bi%5D%3Bif(b.properties)%7Bthis.createProperties(b.properties)%3B%7Dif(b.observers)%7Bthis.createObservers(b.observers%2Cb.properties)%3B%7D%7D%7Dif(info.properties)%7Bthis.createProperties(info.properties)%3B%7Dif(info.observers)%7Bthis.createObservers(info.observers%2Cinfo.properties)%3B%7D%2F%2F%20make%20sure%20to%20prepare%20the%20element%20template%0Athis._prepareTemplate()%3B%7D%7D%7D%2C%7Bkey%3A'properties'%2Cget%3Afunction%20get()%7Bvar%20properties%3D%7B%7D%3Bif(behaviorList)%7Bfor(var%20i%3D0%3Bi%3CbehaviorList.length%3Bi%2B%2B)%7BObject.assign(properties%2CbehaviorList%5Bi%5D.properties)%3B%7D%7DObject.assign(properties%2Cinfo.properties)%3Breturn%20properties%3B%7D%7D%2C%7Bkey%3A'observers'%2Cget%3Afunction%20get()%7Bvar%20observers%3D%5B%5D%3Bif(behaviorList)%7Bfor(var%20i%3D0%2Cb%3Bi%3CbehaviorList.length%3Bi%2B%2B)%7Bb%3DbehaviorList%5Bi%5D%3Bif(b.observers)%7Bobservers%3Dobservers.concat(b.observers)%3B%7D%7D%7Dif(info.observers)%7Bobservers%3Dobservers.concat(info.observers)%3B%7Dreturn%20observers%3B%7D%7D%5D)%3Breturn%20PolymerGenerated%3B%7D(Base)%3B%2F%2F%20apply%20behaviors%2C%20note%20actual%20copying%20is%20done%20lazily%20at%20first%20instance%20creation%0Aif(behaviors)%7B%2F%2F%20NOTE%3A%20ensure%20the%20behavior%20is%20extending%20a%20class%20with%0A%2F%2F%20legacy%20element%20api.%20This%20is%20necessary%20since%20behaviors%20expect%20to%20be%20able%0A%2F%2F%20to%20access%201.x%20legacy%20api.%0Aif(!Array.isArray(behaviors))%7Bbehaviors%3D%5Bbehaviors%5D%3B%7Dvar%20superBehaviors%3DBase.prototype.behaviors%3B%2F%2F%20get%20flattened%2C%20deduped%20list%20of%20behaviors%20*not*%20already%20on%20super%20class%0AbehaviorList%3DflattenBehaviors(behaviors%2Cnull%2CsuperBehaviors)%3BPolymerGenerated.prototype.behaviors%3DsuperBehaviors%3FsuperBehaviors.concat(behaviors)%3AbehaviorList%3B%7Dvar%20copyPropertiesToProto%3Dfunction%20copyPropertiesToProto(proto)%7Bif(behaviorList)%7BapplyBehaviors(proto%2CbehaviorList%2Clifecycle)%3B%7DapplyInfo(proto%2Cinfo%2Clifecycle%2CexcludeOnInfo)%3B%7D%3B%2F%2F%20copy%20properties%20if%20we're%20not%20optimizing%0Aif(!Polymer.legacyOptimizations)%7BcopyPropertiesToProto(PolymerGenerated.prototype)%3B%7DPolymerGenerated.generatedFrom%3Dinfo%3Breturn%20PolymerGenerated%3B%7D%2F**%0A%20%20%20%20%20*%20Generates%20a%20class%20that%20extends%20%60Polymer.LegacyElement%60%20based%20on%20the%0A%20%20%20%20%20*%20provided%20info%20object.%20%20Metadata%20objects%20on%20the%20%60info%60%20object%0A%20%20%20%20%20*%20(%60properties%60%2C%20%60observers%60%2C%20%60listeners%60%2C%20%60behaviors%60%2C%20%60is%60)%20are%20used%0A%20%20%20%20%20*%20for%20Polymer's%20meta-programming%20systems%2C%20and%20any%20functions%20are%20copied%0A%20%20%20%20%20*%20to%20the%20generated%20class.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Valid%20%22metadata%22%20values%20are%20as%20follows%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%60is%60%3A%20String%20providing%20the%20tag%20name%20to%20register%20the%20element%20under.%20In%0A%20%20%20%20%20*%20addition%2C%20if%20a%20%60dom-module%60%20with%20the%20same%20id%20exists%2C%20the%20first%20template%0A%20%20%20%20%20*%20in%20that%20%60dom-module%60%20will%20be%20stamped%20into%20the%20shadow%20root%20of%20this%20element%2C%0A%20%20%20%20%20*%20with%20support%20for%20declarative%20event%20listeners%20(%60on-...%60)%2C%20Polymer%20data%0A%20%20%20%20%20*%20bindings%20(%60%5B%5B...%5D%5D%60%20and%20%60%7B%7B...%7D%7D%60)%2C%20and%20id-based%20node%20finding%20into%0A%20%20%20%20%20*%20%60this.%24%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%60properties%60%3A%20Object%20describing%20property-related%20metadata%20used%20by%20Polymer%0A%20%20%20%20%20*%20features%20(key%3A%20property%20names%2C%20value%3A%20object%20containing%20property%20metadata).%0A%20%20%20%20%20*%20Valid%20keys%20in%20per-property%20metadata%20include%3A%0A%20%20%20%20%20*%20-%20%60type%60%20(String%7CNumber%7CObject%7CArray%7C...)%3A%20Used%20by%0A%20%20%20%20%20*%20%20%20%60attributeChangedCallback%60%20to%20determine%20how%20string-based%20attributes%0A%20%20%20%20%20*%20%20%20are%20deserialized%20to%20JavaScript%20property%20values.%0A%20%20%20%20%20*%20-%20%60notify%60%20(boolean)%3A%20Causes%20a%20change%20in%20the%20property%20to%20fire%20a%0A%20%20%20%20%20*%20%20%20non-bubbling%20event%20called%20%60%3Cproperty%3E-changed%60.%20Elements%20that%20have%0A%20%20%20%20%20*%20%20%20enabled%20two-way%20binding%20to%20the%20property%20use%20this%20event%20to%20observe%20changes.%0A%20%20%20%20%20*%20-%20%60readOnly%60%20(boolean)%3A%20Creates%20a%20getter%20for%20the%20property%2C%20but%20no%20setter.%0A%20%20%20%20%20*%20%20%20To%20set%20a%20read-only%20property%2C%20use%20the%20private%20setter%20method%0A%20%20%20%20%20*%20%20%20%60_setProperty(property%2C%20value)%60.%0A%20%20%20%20%20*%20-%20%60observer%60%20(string)%3A%20Observer%20method%20name%20that%20will%20be%20called%20when%0A%20%20%20%20%20*%20%20%20the%20property%20changes.%20The%20arguments%20of%20the%20method%20are%0A%20%20%20%20%20*%20%20%20%60(value%2C%20previousValue)%60.%0A%20%20%20%20%20*%20-%20%60computed%60%20(string)%3A%20String%20describing%20method%20and%20dependent%20properties%0A%20%20%20%20%20*%20%20%20for%20computing%20the%20value%20of%20this%20property%20(e.g.%20%60'computeFoo(bar%2C%20zot)'%60).%0A%20%20%20%20%20*%20%20%20Computed%20properties%20are%20read-only%20by%20default%20and%20can%20only%20be%20changed%0A%20%20%20%20%20*%20%20%20via%20the%20return%20value%20of%20the%20computing%20method.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%60observers%60%3A%20Array%20of%20strings%20describing%20multi-property%20observer%20methods%0A%20%20%20%20%20*%20%20and%20their%20dependent%20properties%20(e.g.%20%60'observeABC(a%2C%20b%2C%20c)'%60).%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%60listeners%60%3A%20Object%20describing%20event%20listeners%20to%20be%20added%20to%20each%0A%20%20%20%20%20*%20%20instance%20of%20this%20element%20(key%3A%20event%20name%2C%20value%3A%20method%20name).%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%60behaviors%60%3A%20Array%20of%20additional%20%60info%60%20objects%20containing%20metadata%0A%20%20%20%20%20*%20and%20callbacks%20in%20the%20same%20format%20as%20the%20%60info%60%20object%20here%20which%20are%0A%20%20%20%20%20*%20merged%20into%20this%20element.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%60hostAttributes%60%3A%20Object%20listing%20attributes%20to%20be%20applied%20to%20the%20host%0A%20%20%20%20%20*%20%20once%20created%20(key%3A%20attribute%20name%2C%20value%3A%20attribute%20value).%20%20Values%0A%20%20%20%20%20*%20%20are%20serialized%20based%20on%20the%20type%20of%20the%20value.%20%20Host%20attributes%20should%0A%20%20%20%20%20*%20%20generally%20be%20limited%20to%20attributes%20such%20as%20%60tabIndex%60%20and%20%60aria-...%60.%0A%20%20%20%20%20*%20%20Attributes%20in%20%60hostAttributes%60%20are%20only%20applied%20if%20a%20user-supplied%0A%20%20%20%20%20*%20%20attribute%20is%20not%20already%20present%20(attributes%20in%20markup%20override%0A%20%20%20%20%20*%20%20%60hostAttributes%60).%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20In%20addition%2C%20the%20following%20Polymer-specific%20callbacks%20may%20be%20provided%3A%0A%20%20%20%20%20*%20-%20%60registered%60%3A%20called%20after%20first%20instance%20of%20this%20element%2C%0A%20%20%20%20%20*%20-%20%60created%60%3A%20called%20during%20%60constructor%60%0A%20%20%20%20%20*%20-%20%60attached%60%3A%20called%20during%20%60connectedCallback%60%0A%20%20%20%20%20*%20-%20%60detached%60%3A%20called%20during%20%60disconnectedCallback%60%0A%20%20%20%20%20*%20-%20%60ready%60%3A%20called%20before%20first%20%60attached%60%2C%20after%20all%20properties%20of%0A%20%20%20%20%20*%20%20%20this%20element%20have%20been%20propagated%20to%20its%20template%20and%20all%20observers%0A%20%20%20%20%20*%20%20%20have%20run%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7B!PolymerInit%7D%20info%20Object%20containing%20Polymer%20metadata%20and%20functions%0A%20%20%20%20%20*%20%20%20to%20become%20class%20methods.%0A%20%20%20%20%20*%20%40template%20T%0A%20%20%20%20%20*%20%40param%20%7Bfunction(T)%3AT%7D%20mixin%20Optional%20mixin%20to%20apply%20to%20legacy%20base%20class%0A%20%20%20%20%20*%20%20%20before%20extending%20with%20Polymer%20metaprogramming.%0A%20%20%20%20%20*%20%40return%20%7Bfunction(new%3AHTMLElement)%7D%20Generated%20class%0A%20%20%20%20%20*%20%40memberof%20Polymer%0A%20%20%20%20%20*%2FPolymer.Class%3Dfunction(info%2Cmixin)%7Bif(!info)%7Bconsole.warn('Polymer.Class%20requires%20%60info%60%20argument')%3B%7Dvar%20klass%3Dmixin%3Fmixin(Polymer.LegacyElementMixin(HTMLElement))%3APolymer.LegacyElementMixin(HTMLElement)%3Bklass%3DGenerateClassFromInfo(info%2Cklass%2Cinfo.behaviors)%3Bif(info._enableDisableUpgrade)%7Bklass%3DPolymer.DisableUpgradeMixin(klass)%3B%7D%2F%2F%20decorate%20klass%20with%20registration%20info%0Aklass.is%3Dklass.prototype.is%3Dinfo.is%3Breturn%20klass%3B%7D%3BPolymer.mixinBehaviors%3DmixinBehaviors%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Flegacy%2Fclass.html.js%0A",
            "resourceBytes": 19044,
            "encodedBytes": 0,
            "unusedBytes": 10418
          },
          {
            "name": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3B%2F**%0A%20%20%20%20%20*%20Legacy%20class%20factory%20and%20registration%20helper%20for%20defining%20Polymer%0A%20%20%20%20%20*%20elements.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20This%20method%20is%20equivalent%20to%0A%20%20%20%20%20*%20%60customElements.define(info.is%2C%20Polymer.Class(info))%3B%60%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20See%20%60Polymer.Class%60%20for%20details%20on%20valid%20legacy%20metadata%20format%20for%20%60info%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40global%0A%20%20%20%20%20*%20%40override%0A%20%20%20%20%20*%20%40function%20Polymer%0A%20%20%20%20%20*%20%40param%20%7B!PolymerInit%7D%20info%20Object%20containing%20Polymer%20metadata%20and%20functions%0A%20%20%20%20%20*%20%20%20to%20become%20class%20methods.%0A%20%20%20%20%20*%20%40return%20%7Bfunction(new%3A%20HTMLElement)%7D%20Generated%20class%0A%20%20%20%20%20*%20%40suppress%20%7Bduplicate%2C%20invalidCasts%2C%20checkTypes%7D%0A%20%20%20%20%20*%2Fwindow.Polymer._polymerFn%3Dfunction(info)%7B%2F%2F%20if%20input%20is%20a%20%60class%60%20(aka%20a%20function%20with%20a%20prototype)%2C%20use%20the%20prototype%0A%2F%2F%20remember%20that%20the%20%60constructor%60%20will%20never%20be%20called%0Avar%20klass%3Dvoid%200%3Bif(typeof%20info%3D%3D%3D'function')%7Bklass%3Dinfo%3B%7Delse%7Bklass%3DPolymer.Class(info)%3B%7DcustomElements.define(klass.is%2C%2F**%20%40type%20%7B!HTMLElement%7D%20*%2Fklass)%3Breturn%20klass%3B%7D%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Flegacy%2Fpolymer-fn.html.js%0A",
            "resourceBytes": 1111,
            "encodedBytes": 0,
            "unusedBytes": 318
          },
          {
            "name": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bvar%20_typeof%3Dtypeof%20Symbol%3D%3D%3D%22function%22%26%26typeof%20Symbol.iterator%3D%3D%3D%22symbol%22%3Ffunction(obj)%7Breturn%20typeof%20obj%3B%7D%3Afunction(obj)%7Breturn%20obj%26%26typeof%20Symbol%3D%3D%3D%22function%22%26%26obj.constructor%3D%3D%3DSymbol%26%26obj!%3D%3DSymbol.prototype%3F%22symbol%22%3Atypeof%20obj%3B%7D%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3B%2F%2F%20Common%20implementation%20for%20mixin%20%26%20behavior%0Afunction%20mutablePropertyChange(inst%2Cproperty%2Cvalue%2Cold%2CmutableData)%7Bvar%20isObject%3Dvoid%200%3Bif(mutableData)%7BisObject%3D(typeof%20value%3D%3D%3D'undefined'%3F'undefined'%3A_typeof(value))%3D%3D%3D'object'%26%26value!%3D%3Dnull%3B%2F%2F%20Pull%20%60old%60%20for%20Objects%20from%20temp%20cache%2C%20but%20treat%20%60null%60%20as%20a%20primitive%0Aif(isObject)%7Bold%3Dinst.__dataTemp%5Bproperty%5D%3B%7D%7D%2F%2F%20Strict%20equality%20check%2C%20but%20return%20false%20for%20NaN%3D%3D%3DNaN%0Avar%20shouldChange%3Dold!%3D%3Dvalue%26%26(old%3D%3D%3Dold%7C%7Cvalue%3D%3D%3Dvalue)%3B%2F%2F%20Objects%20are%20stored%20in%20temporary%20cache%20(cleared%20at%20end%20of%0A%2F%2F%20turn)%2C%20which%20is%20used%20for%20dirty-checking%0Aif(isObject%26%26shouldChange)%7Binst.__dataTemp%5Bproperty%5D%3Dvalue%3B%7Dreturn%20shouldChange%3B%7D%2F**%0A%20%20%20*%20Element%20class%20mixin%20to%20skip%20strict%20dirty-checking%20for%20objects%20and%20arrays%0A%20%20%20*%20(always%20consider%20them%20to%20be%20%22dirty%22)%2C%20for%20use%20on%20elements%20utilizing%0A%20%20%20*%20%60Polymer.PropertyEffects%60%0A%20%20%20*%0A%20%20%20*%20By%20default%2C%20%60Polymer.PropertyEffects%60%20performs%20strict%20dirty%20checking%20on%0A%20%20%20*%20objects%2C%20which%20means%20that%20any%20deep%20modifications%20to%20an%20object%20or%20array%20will%0A%20%20%20*%20not%20be%20propagated%20unless%20%22immutable%22%20data%20patterns%20are%20used%20(i.e.%20all%20object%0A%20%20%20*%20references%20from%20the%20root%20to%20the%20mutation%20were%20changed).%0A%20%20%20*%0A%20%20%20*%20Polymer%20also%20provides%20a%20proprietary%20data%20mutation%20and%20path%20notification%20API%0A%20%20%20*%20(e.g.%20%60notifyPath%60%2C%20%60set%60%2C%20and%20array%20mutation%20API's)%20that%20allow%20efficient%0A%20%20%20*%20mutation%20and%20notification%20of%20deep%20changes%20in%20an%20object%20graph%20to%20all%20elements%0A%20%20%20*%20bound%20to%20the%20same%20object%20graph.%0A%20%20%20*%0A%20%20%20*%20In%20cases%20where%20neither%20immutable%20patterns%20nor%20the%20data%20mutation%20API%20can%20be%0A%20%20%20*%20used%2C%20applying%20this%20mixin%20will%20cause%20Polymer%20to%20skip%20dirty%20checking%20for%0A%20%20%20*%20objects%20and%20arrays%20(always%20consider%20them%20to%20be%20%22dirty%22).%20%20This%20allows%20a%0A%20%20%20*%20user%20to%20make%20a%20deep%20modification%20to%20a%20bound%20object%20graph%2C%20and%20then%20either%0A%20%20%20*%20simply%20re-set%20the%20object%20(e.g.%20%60this.items%20%3D%20this.items%60)%20or%20call%20%60notifyPath%60%0A%20%20%20*%20(e.g.%20%60this.notifyPath('items')%60)%20to%20update%20the%20tree.%20%20Note%20that%20all%0A%20%20%20*%20elements%20that%20wish%20to%20be%20updated%20based%20on%20deep%20mutations%20must%20apply%20this%0A%20%20%20*%20mixin%20or%20otherwise%20skip%20strict%20dirty%20checking%20for%20objects%2Farrays.%0A%20%20%20*%20Specifically%2C%20any%20elements%20in%20the%20binding%20tree%20between%20the%20source%20of%20a%0A%20%20%20*%20mutation%20and%20the%20consumption%20of%20it%20must%20apply%20this%20mixin%20or%20enable%20the%0A%20%20%20*%20%60Polymer.OptionalMutableData%60%20mixin.%0A%20%20%20*%0A%20%20%20*%20In%20order%20to%20make%20the%20dirty%20check%20strategy%20configurable%2C%20see%0A%20%20%20*%20%60Polymer.OptionalMutableData%60.%0A%20%20%20*%0A%20%20%20*%20Note%2C%20the%20performance%20characteristics%20of%20propagating%20large%20object%20graphs%0A%20%20%20*%20will%20be%20worse%20as%20opposed%20to%20using%20strict%20dirty%20checking%20with%20immutable%0A%20%20%20*%20patterns%20or%20Polymer's%20path%20notification%20API.%0A%20%20%20*%0A%20%20%20*%20%40mixinFunction%0A%20%20%20*%20%40polymer%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Element%20class%20mixin%20to%20skip%20strict%20dirty-checking%20for%20objects%0A%20%20%20*%20%20%20and%20arrays%0A%20%20%20*%2FPolymer.MutableData%3DPolymer.dedupingMixin(function(superClass)%7B%2F**%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40mixinClass%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_MutableData%7D%0A%20%20%20%20%20*%2Fvar%20MutableData%3Dfunction(_superClass)%7B_inherits(MutableData%2C_superClass)%3Bfunction%20MutableData()%7B_classCallCheck(this%2CMutableData)%3Breturn%20_possibleConstructorReturn(this%2C(MutableData.__proto__%7C%7CObject.getPrototypeOf(MutableData)).apply(this%2Carguments))%3B%7D_createClass(MutableData%2C%5B%7Bkey%3A'_shouldPropertyChange'%2C%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20%60Polymer.PropertyEffects%60%20to%20provide%20option%20for%20skipping%0A%20%20%20%20%20%20%20*%20strict%20equality%20checking%20for%20Objects%20and%20Arrays.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20pulls%20the%20value%20to%20dirty%20check%20against%20from%20the%20%60__dataTemp%60%0A%20%20%20%20%20%20%20*%20cache%20(rather%20than%20the%20normal%20%60__data%60%20cache)%20for%20Objects.%20%20Since%20the%20temp%0A%20%20%20%20%20%20%20*%20cache%20is%20cleared%20at%20the%20end%20of%20a%20turn%2C%20this%20implementation%20allows%0A%20%20%20%20%20%20%20*%20side-effects%20of%20deep%20object%20changes%20to%20be%20processed%20by%20re-setting%20the%0A%20%20%20%20%20%20%20*%20same%20object%20(using%20the%20temp%20cache%20as%20an%20in-turn%20backstop%20to%20prevent%0A%20%20%20%20%20%20%20*%20cycles%20due%20to%202-way%20notification).%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20New%20property%20value%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20old%20Previous%20property%20value%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Whether%20the%20property%20should%20be%20considered%20a%20change%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_shouldPropertyChange(property%2Cvalue%2Cold)%7Breturn%20mutablePropertyChange(this%2Cproperty%2Cvalue%2Cold%2Ctrue)%3B%7D%7D%5D)%3Breturn%20MutableData%3B%7D(superClass)%3Breturn%20MutableData%3B%7D)%3B%2F**%0A%20%20%20*%20Element%20class%20mixin%20to%20add%20the%20optional%20ability%20to%20skip%20strict%0A%20%20%20*%20dirty-checking%20for%20objects%20and%20arrays%20(always%20consider%20them%20to%20be%0A%20%20%20*%20%22dirty%22)%20by%20setting%20a%20%60mutable-data%60%20attribute%20on%20an%20element%20instance.%0A%20%20%20*%0A%20%20%20*%20By%20default%2C%20%60Polymer.PropertyEffects%60%20performs%20strict%20dirty%20checking%20on%0A%20%20%20*%20objects%2C%20which%20means%20that%20any%20deep%20modifications%20to%20an%20object%20or%20array%20will%0A%20%20%20*%20not%20be%20propagated%20unless%20%22immutable%22%20data%20patterns%20are%20used%20(i.e.%20all%20object%0A%20%20%20*%20references%20from%20the%20root%20to%20the%20mutation%20were%20changed).%0A%20%20%20*%0A%20%20%20*%20Polymer%20also%20provides%20a%20proprietary%20data%20mutation%20and%20path%20notification%20API%0A%20%20%20*%20(e.g.%20%60notifyPath%60%2C%20%60set%60%2C%20and%20array%20mutation%20API's)%20that%20allow%20efficient%0A%20%20%20*%20mutation%20and%20notification%20of%20deep%20changes%20in%20an%20object%20graph%20to%20all%20elements%0A%20%20%20*%20bound%20to%20the%20same%20object%20graph.%0A%20%20%20*%0A%20%20%20*%20In%20cases%20where%20neither%20immutable%20patterns%20nor%20the%20data%20mutation%20API%20can%20be%0A%20%20%20*%20used%2C%20applying%20this%20mixin%20will%20allow%20Polymer%20to%20skip%20dirty%20checking%20for%0A%20%20%20*%20objects%20and%20arrays%20(always%20consider%20them%20to%20be%20%22dirty%22).%20%20This%20allows%20a%0A%20%20%20*%20user%20to%20make%20a%20deep%20modification%20to%20a%20bound%20object%20graph%2C%20and%20then%20either%0A%20%20%20*%20simply%20re-set%20the%20object%20(e.g.%20%60this.items%20%3D%20this.items%60)%20or%20call%20%60notifyPath%60%0A%20%20%20*%20(e.g.%20%60this.notifyPath('items')%60)%20to%20update%20the%20tree.%20%20Note%20that%20all%0A%20%20%20*%20elements%20that%20wish%20to%20be%20updated%20based%20on%20deep%20mutations%20must%20apply%20this%0A%20%20%20*%20mixin%20or%20otherwise%20skip%20strict%20dirty%20checking%20for%20objects%2Farrays.%0A%20%20%20*%20Specifically%2C%20any%20elements%20in%20the%20binding%20tree%20between%20the%20source%20of%20a%0A%20%20%20*%20mutation%20and%20the%20consumption%20of%20it%20must%20enable%20this%20mixin%20or%20apply%20the%0A%20%20%20*%20%60Polymer.MutableData%60%20mixin.%0A%20%20%20*%0A%20%20%20*%20While%20this%20mixin%20adds%20the%20ability%20to%20forgo%20Object%2FArray%20dirty%20checking%2C%0A%20%20%20*%20the%20%60mutableData%60%20flag%20defaults%20to%20false%20and%20must%20be%20set%20on%20the%20instance.%0A%20%20%20*%0A%20%20%20*%20Note%2C%20the%20performance%20characteristics%20of%20propagating%20large%20object%20graphs%0A%20%20%20*%20will%20be%20worse%20by%20relying%20on%20%60mutableData%3A%20true%60%20as%20opposed%20to%20using%0A%20%20%20*%20strict%20dirty%20checking%20with%20immutable%20patterns%20or%20Polymer's%20path%20notification%0A%20%20%20*%20API.%0A%20%20%20*%0A%20%20%20*%20%40mixinFunction%0A%20%20%20*%20%40polymer%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Element%20class%20mixin%20to%20optionally%20skip%20strict%20dirty-checking%0A%20%20%20*%20%20%20for%20objects%20and%20arrays%0A%20%20%20*%2FPolymer.OptionalMutableData%3DPolymer.dedupingMixin(function(superClass)%7B%2F**%0A%20%20%20%20%20*%20%40mixinClass%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_OptionalMutableData%7D%0A%20%20%20%20%20*%2Fvar%20OptionalMutableData%3Dfunction(_superClass2)%7B_inherits(OptionalMutableData%2C_superClass2)%3Bfunction%20OptionalMutableData()%7B_classCallCheck(this%2COptionalMutableData)%3Breturn%20_possibleConstructorReturn(this%2C(OptionalMutableData.__proto__%7C%7CObject.getPrototypeOf(OptionalMutableData)).apply(this%2Carguments))%3B%7D_createClass(OptionalMutableData%2C%5B%7Bkey%3A'_shouldPropertyChange'%2C%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20%60Polymer.PropertyEffects%60%20to%20provide%20option%20for%20skipping%0A%20%20%20%20%20%20%20*%20strict%20equality%20checking%20for%20Objects%20and%20Arrays.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20When%20%60this.mutableData%60%20is%20true%20on%20this%20instance%2C%20this%20method%0A%20%20%20%20%20%20%20*%20pulls%20the%20value%20to%20dirty%20check%20against%20from%20the%20%60__dataTemp%60%20cache%0A%20%20%20%20%20%20%20*%20(rather%20than%20the%20normal%20%60__data%60%20cache)%20for%20Objects.%20%20Since%20the%20temp%0A%20%20%20%20%20%20%20*%20cache%20is%20cleared%20at%20the%20end%20of%20a%20turn%2C%20this%20implementation%20allows%0A%20%20%20%20%20%20%20*%20side-effects%20of%20deep%20object%20changes%20to%20be%20processed%20by%20re-setting%20the%0A%20%20%20%20%20%20%20*%20same%20object%20(using%20the%20temp%20cache%20as%20an%20in-turn%20backstop%20to%20prevent%0A%20%20%20%20%20%20%20*%20cycles%20due%20to%202-way%20notification).%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20New%20property%20value%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20old%20Previous%20property%20value%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Whether%20the%20property%20should%20be%20considered%20a%20change%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_shouldPropertyChange(property%2Cvalue%2Cold)%7Breturn%20mutablePropertyChange(this%2Cproperty%2Cvalue%2Cold%2Cthis.mutableData)%3B%7D%7D%5D%2C%5B%7Bkey%3A'properties'%2Cget%3Afunction%20get()%7Breturn%7B%2F**%0A%20%20%20%20%20%20%20%20%20%20%20*%20Instance-level%20flag%20for%20configuring%20the%20dirty-checking%20strategy%0A%20%20%20%20%20%20%20%20%20%20%20*%20for%20this%20element.%20%20When%20true%2C%20Objects%20and%20Arrays%20will%20skip%20dirty%0A%20%20%20%20%20%20%20%20%20%20%20*%20checking%2C%20otherwise%20strict%20equality%20checking%20will%20be%20used.%0A%20%20%20%20%20%20%20%20%20%20%20*%2FmutableData%3ABoolean%7D%3B%7D%7D%5D)%3Breturn%20OptionalMutableData%3B%7D(superClass)%3Breturn%20OptionalMutableData%3B%7D)%3B%2F%2F%20Export%20for%20use%20by%20legacy%20behavior%0APolymer.MutableData._mutablePropertyChange%3DmutablePropertyChange%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Fmixins%2Fmutable-data.html.js%0A",
            "resourceBytes": 10198,
            "encodedBytes": 0,
            "unusedBytes": 2679
          },
          {
            "name": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bvar%20_get%3Dfunction%20get(object%2Cproperty%2Creceiver)%7Bif(object%3D%3D%3Dnull)object%3DFunction.prototype%3Bvar%20desc%3DObject.getOwnPropertyDescriptor(object%2Cproperty)%3Bif(desc%3D%3D%3Dundefined)%7Bvar%20parent%3DObject.getPrototypeOf(object)%3Bif(parent%3D%3D%3Dnull)%7Breturn%20undefined%3B%7Delse%7Breturn%20get(parent%2Cproperty%2Creceiver)%3B%7D%7Delse%20if(%22value%22in%20desc)%7Breturn%20desc.value%3B%7Delse%7Bvar%20getter%3Ddesc.get%3Bif(getter%3D%3D%3Dundefined)%7Breturn%20undefined%3B%7Dreturn%20getter.call(receiver)%3B%7D%7D%3Bfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7Dfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7D(function()%7B'use%20strict'%3B%2F%2F%20Base%20class%20for%20HTMLTemplateElement%20extension%20that%20has%20property%20effects%0A%2F%2F%20machinery%20for%20propagating%20host%20properties%20to%20children.%20This%20is%20an%20ES5%0A%2F%2F%20class%20only%20because%20Babel%20(incorrectly)%20requires%20super()%20in%20the%20class%0A%2F%2F%20constructor%20even%20though%20no%20%60this%60%20is%20used%20and%20it%20returns%20an%20instance.%0Avar%20newInstance%3Dnull%3B%2F**%0A%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20*%20%40extends%20%7BHTMLTemplateElement%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Ffunction%20HTMLTemplateElementExtension()%7Breturn%20newInstance%3B%7DHTMLTemplateElementExtension.prototype%3DObject.create(HTMLTemplateElement.prototype%2C%7Bconstructor%3A%7Bvalue%3AHTMLTemplateElementExtension%2Cwritable%3Atrue%7D%7D)%3B%2F**%0A%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertyEffects%7D%0A%20%20%20%20%20*%20%40extends%20%7BHTMLTemplateElementExtension%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Fvar%20DataTemplate%3DPolymer.PropertyEffects(HTMLTemplateElementExtension)%3B%2F**%0A%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_MutableData%7D%0A%20%20%20%20%20*%20%40extends%20%7BDataTemplate%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Fvar%20MutableDataTemplate%3DPolymer.MutableData(DataTemplate)%3B%2F%2F%20Applies%20a%20DataTemplate%20subclass%20to%20a%20%3Ctemplate%3E%20instance%0Afunction%20upgradeTemplate(template%2Cconstructor)%7BnewInstance%3Dtemplate%3BObject.setPrototypeOf(template%2Cconstructor.prototype)%3Bnew%20constructor()%3BnewInstance%3Dnull%3B%7D%2F**%0A%20%20%20%20%20*%20Base%20class%20for%20TemplateInstance.%0A%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertyEffects%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Fvar%20base%3DPolymer.PropertyEffects(function()%7Bfunction%20_class()%7B_classCallCheck(this%2C_class)%3B%7Dreturn%20_class%3B%7D())%3B%2F**%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40customElement%0A%20%20%20%20%20*%20%40appliesMixin%20Polymer.PropertyEffects%0A%20%20%20%20%20*%20%40unrestricted%0A%20%20%20%20%20*%2Fvar%20TemplateInstanceBase%3Dfunction(_base)%7B_inherits(TemplateInstanceBase%2C_base)%3Bfunction%20TemplateInstanceBase(props)%7B_classCallCheck(this%2CTemplateInstanceBase)%3Bvar%20_this%3D_possibleConstructorReturn(this%2C(TemplateInstanceBase.__proto__%7C%7CObject.getPrototypeOf(TemplateInstanceBase)).call(this))%3B_this._configureProperties(props)%3B_this.root%3D_this._stampTemplate(_this.__dataHost)%3B%2F%2F%20Save%20list%20of%20stamped%20children%0Avar%20children%3D_this.children%3D%5B%5D%3Bfor(var%20n%3D_this.root.firstChild%3Bn%3Bn%3Dn.nextSibling)%7Bchildren.push(n)%3Bn.__templatizeInstance%3D_this%3B%7Dif(_this.__templatizeOwner%26%26_this.__templatizeOwner.__hideTemplateChildren__)%7B_this._showHideChildren(true)%3B%7D%2F%2F%20Flush%20props%20only%20when%20props%20are%20passed%20if%20instance%20props%20exist%0A%2F%2F%20or%20when%20there%20isn't%20instance%20props.%0Avar%20options%3D_this.__templatizeOptions%3Bif(props%26%26options.instanceProps%7C%7C!options.instanceProps)%7B_this._enableProperties()%3B%7Dreturn%20_this%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Configure%20the%20given%20%60props%60%20by%20calling%20%60_setPendingProperty%60.%20Also%0A%20%20%20%20%20%20%20*%20sets%20any%20properties%20stored%20in%20%60__hostProps%60.%0A%20%20%20%20%20%20%20*%20%40private%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20props%20Object%20of%20property%20name-value%20pairs%20to%20set.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F_createClass(TemplateInstanceBase%2C%5B%7Bkey%3A'_configureProperties'%2Cvalue%3Afunction%20_configureProperties(props)%7Bvar%20options%3Dthis.__templatizeOptions%3Bif(options.forwardHostProp)%7Bfor(var%20hprop%20in%20this.__hostProps)%7Bthis._setPendingProperty(hprop%2Cthis.__dataHost%5B'_host_'%2Bhprop%5D)%3B%7D%7D%2F%2F%20Any%20instance%20props%20passed%20in%20the%20constructor%20will%20overwrite%20host%20props%3B%0A%2F%2F%20normally%20this%20would%20be%20a%20user%20error%20but%20we%20don't%20specifically%20filter%20them%0Afor(var%20iprop%20in%20props)%7Bthis._setPendingProperty(iprop%2Cprops%5Biprop%5D)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Forwards%20a%20host%20property%20to%20this%20instance.%20%20This%20method%20should%20be%0A%20%20%20%20%20%20%20*%20called%20on%20instances%20from%20the%20%60options.forwardHostProp%60%20callback%0A%20%20%20%20%20%20%20*%20to%20propagate%20changes%20of%20host%20properties%20to%20each%20instance.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%20this%20method%20enqueues%20the%20change%2C%20which%20are%20flushed%20as%20a%20batch.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20prop%20Property%20or%20path%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20of%20the%20property%20to%20forward%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'forwardHostProp'%2Cvalue%3Afunction%20forwardHostProp(prop%2Cvalue)%7Bif(this._setPendingPropertyOrPath(prop%2Cvalue%2Cfalse%2Ctrue))%7Bthis.__dataHost._enqueueClient(this)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Override%20point%20for%20adding%20custom%20or%20simulated%20event%20handling.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Node%7D%20node%20Node%20to%20add%20event%20listener%20to%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20eventName%20Name%20of%20event%0A%20%20%20%20%20%20%20*%20%40param%20%7Bfunction(!Event)%3Avoid%7D%20handler%20Listener%20function%20to%20add%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_addEventListenerToNode'%2Cvalue%3Afunction%20_addEventListenerToNode(node%2CeventName%2Chandler)%7Bvar%20_this2%3Dthis%3Bif(this._methodHost%26%26this.__templatizeOptions.parentModel)%7B%2F%2F%20If%20this%20instance%20should%20be%20considered%20a%20parent%20model%2C%20decorate%0A%2F%2F%20events%20this%20template%20instance%20as%20%60model%60%0Athis._methodHost._addEventListenerToNode(node%2CeventName%2Cfunction(e)%7Be.model%3D_this2%3Bhandler(e)%3B%7D)%3B%7Delse%7B%2F%2F%20Otherwise%20delegate%20to%20the%20template's%20host%20(which%20could%20be)%0A%2F%2F%20another%20template%20instance%0Avar%20templateHost%3Dthis.__dataHost.__dataHost%3Bif(templateHost)%7BtemplateHost._addEventListenerToNode(node%2CeventName%2Chandler)%3B%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Shows%20or%20hides%20the%20template%20instance%20top%20level%20child%20elements.%20For%0A%20%20%20%20%20%20%20*%20text%20nodes%2C%20%60textContent%60%20is%20removed%20while%20%22hidden%22%20and%20replaced%20when%0A%20%20%20%20%20%20%20*%20%22shown.%22%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%7D%20hide%20Set%20to%20true%20to%20hide%20the%20children%3B%0A%20%20%20%20%20%20%20*%20set%20to%20false%20to%20show%20them.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_showHideChildren'%2Cvalue%3Afunction%20_showHideChildren(hide)%7Bvar%20c%3Dthis.children%3Bfor(var%20i%3D0%3Bi%3Cc.length%3Bi%2B%2B)%7Bvar%20n%3Dc%5Bi%5D%3B%2F%2F%20Ignore%20non-changes%0Aif(Boolean(hide)!%3DBoolean(n.__hideTemplateChildren__))%7Bif(n.nodeType%3D%3D%3DNode.TEXT_NODE)%7Bif(hide)%7Bn.__polymerTextContent__%3Dn.textContent%3Bn.textContent%3D''%3B%7Delse%7Bn.textContent%3Dn.__polymerTextContent__%3B%7D%2F%2F%20remove%20and%20replace%20slot%0A%7Delse%20if(n.localName%3D%3D%3D'slot')%7Bif(hide)%7Bn.__polymerReplaced__%3Ddocument.createComment('hidden-slot')%3Bn.parentNode.replaceChild(n.__polymerReplaced__%2Cn)%3B%7Delse%7Bvar%20replace%3Dn.__polymerReplaced__%3Bif(replace)%7Breplace.parentNode.replaceChild(n%2Creplace)%3B%7D%7D%7Delse%20if(n.style)%7Bif(hide)%7Bn.__polymerDisplay__%3Dn.style.display%3Bn.style.display%3D'none'%3B%7Delse%7Bn.style.display%3Dn.__polymerDisplay__%3B%7D%7D%7Dn.__hideTemplateChildren__%3Dhide%3Bif(n._showHideChildren)%7Bn._showHideChildren(hide)%3B%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20default%20property-effects%20implementation%20to%20intercept%0A%20%20%20%20%20%20%20*%20textContent%20bindings%20while%20children%20are%20%22hidden%22%20and%20cache%20in%0A%20%20%20%20%20%20%20*%20private%20storage%20for%20later%20retrieval.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Node%7D%20node%20The%20node%20to%20set%20a%20property%20on%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20prop%20The%20property%20to%20set%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20The%20value%20to%20set%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_setUnmanagedPropertyToNode'%2Cvalue%3Afunction%20_setUnmanagedPropertyToNode(node%2Cprop%2Cvalue)%7Bif(node.__hideTemplateChildren__%26%26node.nodeType%3D%3DNode.TEXT_NODE%26%26prop%3D%3D'textContent')%7Bnode.__polymerTextContent__%3Dvalue%3B%7Delse%7B_get(TemplateInstanceBase.prototype.__proto__%7C%7CObject.getPrototypeOf(TemplateInstanceBase.prototype)%2C'_setUnmanagedPropertyToNode'%2Cthis).call(this%2Cnode%2Cprop%2Cvalue)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Find%20the%20parent%20model%20of%20this%20template%20instance.%20%20The%20parent%20model%0A%20%20%20%20%20%20%20*%20is%20either%20another%20templatize%20instance%20that%20had%20option%20%60parentModel%3A%20true%60%2C%0A%20%20%20%20%20%20%20*%20or%20else%20the%20host%20element.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7B!Polymer_PropertyEffects%7D%20The%20parent%20model%20of%20this%20instance%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'dispatchEvent'%2C%2F**%0A%20%20%20%20%20%20%20*%20Stub%20of%20HTMLElement's%20%60dispatchEvent%60%2C%20so%20that%20effects%20that%20may%0A%20%20%20%20%20%20%20*%20dispatch%20events%20safely%20no-op.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BEvent%7D%20event%20Event%20to%20dispatch%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Always%20true.%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20dispatchEvent(event)%7B%2F%2F%20eslint-disable-line%20no-unused-vars%0Areturn%20true%3B%7D%7D%2C%7Bkey%3A'parentModel'%2Cget%3Afunction%20get()%7Bvar%20model%3Dthis.__parentModel%3Bif(!model)%7Bvar%20options%3Dvoid%200%3Bmodel%3Dthis%3Bdo%7B%2F%2F%20A%20template%20instance's%20%60__dataHost%60%20is%20a%20%3Ctemplate%3E%0A%2F%2F%20%60model.__dataHost.__dataHost%60%20is%20the%20template's%20host%0Amodel%3Dmodel.__dataHost.__dataHost%3B%7Dwhile((options%3Dmodel.__templatizeOptions)%26%26!options.parentModel)%3Bthis.__parentModel%3Dmodel%3B%7Dreturn%20model%3B%7D%7D%5D)%3Breturn%20TemplateInstanceBase%3B%7D(base)%3B%2F**%20%40type%20%7B!DataTemplate%7D%20*%2FTemplateInstanceBase.prototype.__dataHost%3B%2F**%20%40type%20%7B!TemplatizeOptions%7D%20*%2FTemplateInstanceBase.prototype.__templatizeOptions%3B%2F**%20%40type%20%7B!Polymer_PropertyEffects%7D%20*%2FTemplateInstanceBase.prototype._methodHost%3B%2F**%20%40type%20%7B!Object%7D%20*%2FTemplateInstanceBase.prototype.__templatizeOwner%3B%2F**%20%40type%20%7B!Object%7D%20*%2FTemplateInstanceBase.prototype.__hostProps%3B%2F**%0A%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20*%20%40extends%20%7BTemplateInstanceBase%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_MutableData%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Fvar%20MutableTemplateInstanceBase%3DPolymer.MutableData(TemplateInstanceBase)%3Bfunction%20findMethodHost(template)%7B%2F%2F%20Technically%20this%20should%20be%20the%20owner%20of%20the%20outermost%20template.%0A%2F%2F%20In%20shadow%20dom%2C%20this%20is%20always%20getRootNode().host%2C%20but%20we%20can%0A%2F%2F%20approximate%20this%20via%20cooperation%20with%20our%20dataHost%20always%20setting%0A%2F%2F%20%60_methodHost%60%20as%20long%20as%20there%20were%20bindings%20(or%20id's)%20on%20this%0A%2F%2F%20instance%20causing%20it%20to%20get%20a%20dataHost.%0Avar%20templateHost%3Dtemplate.__dataHost%3Breturn%20templateHost%26%26templateHost._methodHost%7C%7CtemplateHost%3B%7D%2F*%20eslint-disable%20valid-jsdoc%20*%2F%2F**%0A%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20class.prototype%20is%20not%20defined%20for%20some%20reason%0A%20%20%20%20%20*%2Ffunction%20createTemplatizerClass(template%2CtemplateInfo%2Coptions)%7B%2F%2F%20Anonymous%20class%20created%20by%20the%20templatize%0Avar%20base%3Doptions.mutableData%3FMutableTemplateInstanceBase%3ATemplateInstanceBase%3B%2F%2F%20Affordance%20for%20global%20mixins%20onto%20TemplatizeInstance%0Aif(Polymer.Templatize.mixin)%7Bbase%3DPolymer.Templatize.mixin(base)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20%20%20*%20%40extends%20%7Bbase%7D%0A%20%20%20%20%20%20%20*%20%40private%0A%20%20%20%20%20%20%20*%2Fvar%20klass%3Dfunction(_base2)%7B_inherits(klass%2C_base2)%3Bfunction%20klass()%7B_classCallCheck(this%2Cklass)%3Breturn%20_possibleConstructorReturn(this%2C(klass.__proto__%7C%7CObject.getPrototypeOf(klass)).apply(this%2Carguments))%3B%7Dreturn%20klass%3B%7D(base)%3Bklass.prototype.__templatizeOptions%3Doptions%3Bklass.prototype._bindTemplate(template)%3BaddNotifyEffects(klass%2Ctemplate%2CtemplateInfo%2Coptions)%3Breturn%20klass%3B%7D%2F**%0A%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20class.prototype%20is%20not%20defined%20for%20some%20reason%0A%20%20%20%20%20*%2Ffunction%20addPropagateEffects(template%2CtemplateInfo%2Coptions)%7Bvar%20userForwardHostProp%3Doptions.forwardHostProp%3Bif(userForwardHostProp)%7B%2F%2F%20Provide%20data%20API%20and%20property%20effects%20on%20memoized%20template%20class%0Avar%20klass%3DtemplateInfo.templatizeTemplateClass%3Bif(!klass)%7Bvar%20_base3%3Doptions.mutableData%3FMutableDataTemplate%3ADataTemplate%3B%2F**%20%40private%20*%2Fklass%3DtemplateInfo.templatizeTemplateClass%3Dfunction(_base4)%7B_inherits(TemplatizedTemplate%2C_base4)%3Bfunction%20TemplatizedTemplate()%7B_classCallCheck(this%2CTemplatizedTemplate)%3Breturn%20_possibleConstructorReturn(this%2C(TemplatizedTemplate.__proto__%7C%7CObject.getPrototypeOf(TemplatizedTemplate)).apply(this%2Carguments))%3B%7Dreturn%20TemplatizedTemplate%3B%7D(_base3)%3B%2F%2F%20Add%20template%20-%20%3Einstances%20effects%0A%2F%2F%20and%20host%20%3C-%20template%20effects%0Avar%20hostProps%3DtemplateInfo.hostProps%3Bfor(var%20prop%20in%20hostProps)%7Bklass.prototype._addPropertyEffect('_host_'%2Bprop%2Cklass.prototype.PROPERTY_EFFECT_TYPES.PROPAGATE%2C%7Bfn%3AcreateForwardHostPropEffect(prop%2CuserForwardHostProp)%7D)%3Bklass.prototype._createNotifyingProperty('_host_'%2Bprop)%3B%7D%7DupgradeTemplate(template%2Cklass)%3B%2F%2F%20Mix%20any%20pre-bound%20data%20into%20__data%3B%20no%20need%20to%20flush%20this%20to%0A%2F%2F%20instances%20since%20they%20pull%20from%20the%20template%20at%20instance-time%0Aif(template.__dataProto)%7B%2F%2F%20Note%2C%20generally%20%60__dataProto%60%20could%20be%20chained%2C%20but%20it's%20guaranteed%0A%2F%2F%20to%20not%20be%20since%20this%20is%20a%20vanilla%20template%20we%20just%20added%20effects%20to%0AObject.assign(template.__data%2Ctemplate.__dataProto)%3B%7D%2F%2F%20Clear%20any%20pending%20data%20for%20performance%0Atemplate.__dataTemp%3D%7B%7D%3Btemplate.__dataPending%3Dnull%3Btemplate.__dataOld%3Dnull%3Btemplate._enableProperties()%3B%7D%7D%2F*%20eslint-enable%20valid-jsdoc%20*%2Ffunction%20createForwardHostPropEffect(hostProp%2CuserForwardHostProp)%7Breturn%20function%20forwardHostProp(template%2Cprop%2Cprops)%7BuserForwardHostProp.call(template.__templatizeOwner%2Cprop.substring('_host_'.length)%2Cprops%5Bprop%5D)%3B%7D%3B%7Dfunction%20addNotifyEffects(klass%2Ctemplate%2CtemplateInfo%2Coptions)%7Bvar%20hostProps%3DtemplateInfo.hostProps%7C%7C%7B%7D%3Bfor(var%20iprop%20in%20options.instanceProps)%7Bdelete%20hostProps%5Biprop%5D%3Bvar%20userNotifyInstanceProp%3Doptions.notifyInstanceProp%3Bif(userNotifyInstanceProp)%7Bklass.prototype._addPropertyEffect(iprop%2Cklass.prototype.PROPERTY_EFFECT_TYPES.NOTIFY%2C%7Bfn%3AcreateNotifyInstancePropEffect(iprop%2CuserNotifyInstanceProp)%7D)%3B%7D%7Dif(options.forwardHostProp%26%26template.__dataHost)%7Bfor(var%20hprop%20in%20hostProps)%7Bklass.prototype._addPropertyEffect(hprop%2Cklass.prototype.PROPERTY_EFFECT_TYPES.NOTIFY%2C%7Bfn%3AcreateNotifyHostPropEffect()%7D)%3B%7D%7D%7Dfunction%20createNotifyInstancePropEffect(instProp%2CuserNotifyInstanceProp)%7Breturn%20function%20notifyInstanceProp(inst%2Cprop%2Cprops)%7BuserNotifyInstanceProp.call(inst.__templatizeOwner%2Cinst%2Cprop%2Cprops%5Bprop%5D)%3B%7D%3B%7Dfunction%20createNotifyHostPropEffect()%7Breturn%20function%20notifyHostProp(inst%2Cprop%2Cprops)%7Binst.__dataHost._setPendingPropertyOrPath('_host_'%2Bprop%2Cprops%5Bprop%5D%2Ctrue%2Ctrue)%3B%7D%3B%7D%2F**%0A%20%20%20%20%20*%20Module%20for%20preparing%20and%20stamping%20instances%20of%20templates%20that%20utilize%0A%20%20%20%20%20*%20Polymer's%20data-binding%20and%20declarative%20event%20listener%20features.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%20%20%20%20%2F%2F%20Get%20a%20template%20from%20somewhere%2C%20e.g.%20light%20DOM%0A%20%20%20%20%20*%20%20%20%20%20let%20template%20%3D%20this.querySelector('template')%3B%0A%20%20%20%20%20*%20%20%20%20%20%2F%2F%20Prepare%20the%20template%0A%20%20%20%20%20*%20%20%20%20%20let%20TemplateClass%20%3D%20Polymer.Templatize.templatize(template)%3B%0A%20%20%20%20%20*%20%20%20%20%20%2F%2F%20Instance%20the%20template%20with%20an%20initial%20data%20model%0A%20%20%20%20%20*%20%20%20%20%20let%20instance%20%3D%20new%20TemplateClass(%7BmyProp%3A%20'initial'%7D)%3B%0A%20%20%20%20%20*%20%20%20%20%20%2F%2F%20Insert%20the%20instance's%20DOM%20somewhere%2C%20e.g.%20element's%20shadow%20DOM%0A%20%20%20%20%20*%20%20%20%20%20this.shadowRoot.appendChild(instance.root)%3B%0A%20%20%20%20%20*%20%20%20%20%20%2F%2F%20Changing%20a%20property%20on%20the%20instance%20will%20propagate%20to%20bindings%0A%20%20%20%20%20*%20%20%20%20%20%2F%2F%20in%20the%20template%0A%20%20%20%20%20*%20%20%20%20%20instance.myProp%20%3D%20'new%20value'%3B%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20The%20%60options%60%20dictionary%20passed%20to%20%60templatize%60%20allows%20for%20customizing%0A%20%20%20%20%20*%20features%20of%20the%20generated%20template%20class%2C%20including%20how%20outer-scope%20host%0A%20%20%20%20%20*%20properties%20should%20be%20forwarded%20into%20template%20instances%2C%20how%20any%20instance%0A%20%20%20%20%20*%20properties%20added%20into%20the%20template's%20scope%20should%20be%20notified%20out%20to%0A%20%20%20%20%20*%20the%20host%2C%20and%20whether%20the%20instance%20should%20be%20decorated%20as%20a%20%22parent%20model%22%0A%20%20%20%20%20*%20of%20any%20event%20handlers.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%20%20%20%20%2F%2F%20Customize%20property%20forwarding%20and%20event%20model%20decoration%0A%20%20%20%20%20*%20%20%20%20%20let%20TemplateClass%20%3D%20Polymer.Templatize.templatize(template%2C%20this%2C%20%7B%0A%20%20%20%20%20*%20%20%20%20%20%20%20parentModel%3A%20true%2C%0A%20%20%20%20%20*%20%20%20%20%20%20%20forwardHostProp(property%2C%20value)%20%7B...%7D%2C%0A%20%20%20%20%20*%20%20%20%20%20%20%20instanceProps%3A%20%7B...%7D%2C%0A%20%20%20%20%20*%20%20%20%20%20%20%20notifyInstanceProp(instance%2C%20property%2C%20value)%20%7B...%7D%2C%0A%20%20%20%20%20*%20%20%20%20%20%7D)%3B%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40namespace%0A%20%20%20%20%20*%20%40memberof%20Polymer%0A%20%20%20%20%20*%20%40summary%20Module%20for%20preparing%20and%20stamping%20instances%20of%20templates%0A%20%20%20%20%20*%20%20%20utilizing%20Polymer%20templating%20features.%0A%20%20%20%20%20*%2FPolymer.Templatize%3D%7B%2F**%0A%20%20%20%20%20%20%20*%20Returns%20an%20anonymous%20%60Polymer.PropertyEffects%60%20class%20bound%20to%20the%0A%20%20%20%20%20%20%20*%20%60%3Ctemplate%3E%60%20provided.%20%20Instancing%20the%20class%20will%20result%20in%20the%0A%20%20%20%20%20%20%20*%20template%20being%20stamped%20into%20a%20document%20fragment%20stored%20as%20the%20instance's%0A%20%20%20%20%20%20%20*%20%60root%60%20property%2C%20after%20which%20it%20can%20be%20appended%20to%20the%20DOM.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Templates%20may%20utilize%20all%20Polymer%20data-binding%20features%20as%20well%20as%0A%20%20%20%20%20%20%20*%20declarative%20event%20listeners.%20%20Event%20listeners%20and%20inline%20computing%0A%20%20%20%20%20%20%20*%20functions%20in%20the%20template%20will%20be%20called%20on%20the%20host%20of%20the%20template.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20constructor%20returned%20takes%20a%20single%20argument%20dictionary%20of%20initial%0A%20%20%20%20%20%20%20*%20property%20values%20to%20propagate%20into%20template%20bindings.%20%20Additionally%0A%20%20%20%20%20%20%20*%20host%20properties%20can%20be%20forwarded%20in%2C%20and%20instance%20properties%20can%20be%0A%20%20%20%20%20%20%20*%20notified%20out%20by%20providing%20optional%20callbacks%20in%20the%20%60options%60%20dictionary.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Valid%20configuration%20in%20%60options%60%20are%20as%20follows%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20-%20%60forwardHostProp(property%2C%20value)%60%3A%20Called%20when%20a%20property%20referenced%0A%20%20%20%20%20%20%20*%20%20%20in%20the%20template%20changed%20on%20the%20template's%20host.%20As%20this%20library%20does%0A%20%20%20%20%20%20%20*%20%20%20not%20retain%20references%20to%20templates%20instanced%20by%20the%20user%2C%20it%20is%20the%0A%20%20%20%20%20%20%20*%20%20%20templatize%20owner's%20responsibility%20to%20forward%20host%20property%20changes%20into%0A%20%20%20%20%20%20%20*%20%20%20user-stamped%20instances.%20%20The%20%60instance.forwardHostProp(property%2C%20value)%60%0A%20%20%20%20%20%20%20*%20%20%20%20method%20on%20the%20generated%20class%20should%20be%20called%20to%20forward%20host%0A%20%20%20%20%20%20%20*%20%20%20properties%20into%20the%20template%20to%20prevent%20unnecessary%20property-changed%0A%20%20%20%20%20%20%20*%20%20%20notifications.%20Any%20properties%20referenced%20in%20the%20template%20that%20are%20not%0A%20%20%20%20%20%20%20*%20%20%20defined%20in%20%60instanceProps%60%20will%20be%20notified%20up%20to%20the%20template's%20host%0A%20%20%20%20%20%20%20*%20%20%20automatically.%0A%20%20%20%20%20%20%20*%20-%20%60instanceProps%60%3A%20Dictionary%20of%20property%20names%20that%20will%20be%20added%0A%20%20%20%20%20%20%20*%20%20%20to%20the%20instance%20by%20the%20templatize%20owner.%20%20These%20properties%20shadow%20any%0A%20%20%20%20%20%20%20*%20%20%20host%20properties%2C%20and%20changes%20within%20the%20template%20to%20these%20properties%0A%20%20%20%20%20%20%20*%20%20%20will%20result%20in%20%60notifyInstanceProp%60%20being%20called.%0A%20%20%20%20%20%20%20*%20-%20%60mutableData%60%3A%20When%20%60true%60%2C%20the%20generated%20class%20will%20skip%20strict%0A%20%20%20%20%20%20%20*%20%20%20dirty-checking%20for%20objects%20and%20arrays%20(always%20consider%20them%20to%20be%0A%20%20%20%20%20%20%20*%20%20%20%22dirty%22).%0A%20%20%20%20%20%20%20*%20-%20%60notifyInstanceProp(instance%2C%20property%2C%20value)%60%3A%20Called%20when%0A%20%20%20%20%20%20%20*%20%20%20an%20instance%20property%20changes.%20%20Users%20may%20choose%20to%20call%20%60notifyPath%60%0A%20%20%20%20%20%20%20*%20%20%20on%20e.g.%20the%20owner%20to%20notify%20the%20change.%0A%20%20%20%20%20%20%20*%20-%20%60parentModel%60%3A%20When%20%60true%60%2C%20events%20handled%20by%20declarative%20event%20listeners%0A%20%20%20%20%20%20%20*%20%20%20(%60on-event%3D%22handler%22%60)%20will%20be%20decorated%20with%20a%20%60model%60%20property%20pointing%0A%20%20%20%20%20%20%20*%20%20%20to%20the%20template%20instance%20that%20stamped%20it.%20%20It%20will%20also%20be%20returned%0A%20%20%20%20%20%20%20*%20%20%20from%20%60instance.parentModel%60%20in%20cases%20where%20template%20instance%20nesting%0A%20%20%20%20%20%20%20*%20%20%20causes%20an%20inner%20model%20to%20shadow%20an%20outer%20model.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20All%20callbacks%20are%20called%20bound%20to%20the%20%60owner%60.%20Any%20context%0A%20%20%20%20%20%20%20*%20needed%20for%20the%20callbacks%20(such%20as%20references%20to%20%60instances%60%20stamped)%0A%20%20%20%20%20%20%20*%20should%20be%20stored%20on%20the%20%60owner%60%20such%20that%20they%20can%20be%20retrieved%20via%0A%20%20%20%20%20%20%20*%20%60this%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20When%20%60options.forwardHostProp%60%20is%20declared%20as%20an%20option%2C%20any%20properties%0A%20%20%20%20%20%20%20*%20referenced%20in%20the%20template%20will%20be%20automatically%20forwarded%20from%20the%20host%20of%0A%20%20%20%20%20%20%20*%20the%20%60%3Ctemplate%3E%60%20to%20instances%2C%20with%20the%20exception%20of%20any%20properties%20listed%20in%0A%20%20%20%20%20%20%20*%20the%20%60options.instanceProps%60%20object.%20%20%60instanceProps%60%20are%20assumed%20to%20be%0A%20%20%20%20%20%20%20*%20managed%20by%20the%20owner%20of%20the%20instances%2C%20either%20passed%20into%20the%20constructor%0A%20%20%20%20%20%20%20*%20or%20set%20after%20the%20fact.%20%20Note%2C%20any%20properties%20passed%20into%20the%20constructor%20will%0A%20%20%20%20%20%20%20*%20always%20be%20set%20to%20the%20instance%20(regardless%20of%20whether%20they%20would%20normally%0A%20%20%20%20%20%20%20*%20be%20forwarded%20from%20the%20host).%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%20that%20%60templatize()%60%20can%20be%20run%20only%20once%20for%20a%20given%20%60%3Ctemplate%3E%60.%0A%20%20%20%20%20%20%20*%20Further%20calls%20will%20result%20in%20an%20error.%20Also%2C%20there%20is%20a%20special%0A%20%20%20%20%20%20%20*%20behavior%20if%20the%20template%20was%20duplicated%20through%20a%20mechanism%20such%20as%0A%20%20%20%20%20%20%20*%20%60%3Cdom-repeat%3E%60%20or%20%60%3Ctest-fixture%3E%60.%20In%20this%20case%2C%20all%20calls%20to%0A%20%20%20%20%20%20%20*%20%60templatize()%60%20return%20the%20same%20class%20for%20all%20duplicates%20of%20a%20template.%0A%20%20%20%20%20%20%20*%20The%20class%20returned%20from%20%60templatize()%60%20is%20generated%20only%20once%20using%0A%20%20%20%20%20%20%20*%20the%20%60options%60%20from%20the%20first%20call.%20This%20means%20that%20any%20%60options%60%0A%20%20%20%20%20%20%20*%20provided%20to%20subsequent%20calls%20will%20be%20ignored.%20Therefore%2C%20it%20is%20very%0A%20%20%20%20%20%20%20*%20important%20not%20to%20close%20over%20any%20variables%20inside%20the%20callbacks.%20Also%2C%0A%20%20%20%20%20%20%20*%20arrow%20functions%20must%20be%20avoided%20because%20they%20bind%20the%20outer%20%60this%60.%0A%20%20%20%20%20%20%20*%20Inside%20the%20callbacks%2C%20any%20contextual%20information%20can%20be%20accessed%0A%20%20%20%20%20%20%20*%20through%20%60this%60%2C%20which%20points%20to%20the%20%60owner%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40memberof%20Polymer.Templatize%0A%20%20%20%20%20%20%20*%20%40param%20%7B!HTMLTemplateElement%7D%20template%20Template%20to%20templatize%0A%20%20%20%20%20%20%20*%20%40param%20%7BPolymer_PropertyEffects%3D%7D%20owner%20Owner%20of%20the%20template%20instances%3B%0A%20%20%20%20%20%20%20*%20%20%20any%20optional%20callbacks%20will%20be%20bound%20to%20this%20owner.%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20options%20Options%20dictionary%20(see%20summary%20for%20details)%0A%20%20%20%20%20%20%20*%20%40return%20%7Bfunction(new%3ATemplateInstanceBase)%7D%20Generated%20class%20bound%20to%20the%20template%0A%20%20%20%20%20%20%20*%20%20%20provided%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%0A%20%20%20%20%20%20%20*%2Ftemplatize%3Afunction%20templatize(template%2Cowner%2Coptions)%7B%2F%2F%20Under%20strictTemplatePolicy%2C%20the%20templatized%20element%20must%20be%20owned%0A%2F%2F%20by%20a%20(trusted)%20Polymer%20element%2C%20indicated%20by%20existence%20of%20_methodHost%3B%0A%2F%2F%20e.g.%20for%20dom-if%20%26%20dom-repeat%20in%20main%20document%2C%20_methodHost%20is%20null%0Aif(Polymer.strictTemplatePolicy%26%26!findMethodHost(template))%7Bthrow%20new%20Error('strictTemplatePolicy%3A%20template%20owner%20not%20trusted')%3B%7Doptions%3D%2F**%20%40type%20%7B!TemplatizeOptions%7D%20*%2Foptions%7C%7C%7B%7D%3Bif(template.__templatizeOwner)%7Bthrow%20new%20Error('A%20%3Ctemplate%3E%20can%20only%20be%20templatized%20once')%3B%7Dtemplate.__templatizeOwner%3Downer%3Bvar%20ctor%3Downer%3Fowner.constructor%3ATemplateInstanceBase%3Bvar%20templateInfo%3Dctor._parseTemplate(template)%3B%2F%2F%20Get%20memoized%20base%20class%20for%20the%20prototypical%20template%2C%20which%0A%2F%2F%20includes%20property%20effects%20for%20binding%20template%20%26%20forwarding%0Avar%20baseClass%3DtemplateInfo.templatizeInstanceClass%3Bif(!baseClass)%7BbaseClass%3DcreateTemplatizerClass(template%2CtemplateInfo%2Coptions)%3BtemplateInfo.templatizeInstanceClass%3DbaseClass%3B%7D%2F%2F%20Host%20property%20forwarding%20must%20be%20installed%20onto%20template%20instance%0AaddPropagateEffects(template%2CtemplateInfo%2Coptions)%3B%2F%2F%20Subclass%20base%20class%20and%20add%20reference%20for%20this%20specific%20template%0A%2F**%20%40private%20*%2Fvar%20klass%3Dfunction(_baseClass)%7B_inherits(TemplateInstance%2C_baseClass)%3Bfunction%20TemplateInstance()%7B_classCallCheck(this%2CTemplateInstance)%3Breturn%20_possibleConstructorReturn(this%2C(TemplateInstance.__proto__%7C%7CObject.getPrototypeOf(TemplateInstance)).apply(this%2Carguments))%3B%7Dreturn%20TemplateInstance%3B%7D(baseClass)%3Bklass.prototype._methodHost%3DfindMethodHost(template)%3Bklass.prototype.__dataHost%3Dtemplate%3Bklass.prototype.__templatizeOwner%3Downer%3Bklass.prototype.__hostProps%3DtemplateInfo.hostProps%3Bklass%3D%2F**%20%40type%20%7Bfunction(new%3ATemplateInstanceBase)%7D%20*%2Fklass%3B%2F%2Feslint-disable-line%20no-self-assign%0Areturn%20klass%3B%7D%2C%2F**%0A%20%20%20%20%20%20%20*%20Returns%20the%20template%20%22model%22%20associated%20with%20a%20given%20element%2C%20which%0A%20%20%20%20%20%20%20*%20serves%20as%20the%20binding%20scope%20for%20the%20template%20instance%20the%20element%20is%0A%20%20%20%20%20%20%20*%20contained%20in.%20A%20template%20model%20is%20an%20instance%20of%0A%20%20%20%20%20%20%20*%20%60TemplateInstanceBase%60%2C%20and%20should%20be%20used%20to%20manipulate%20data%0A%20%20%20%20%20%20%20*%20associated%20with%20this%20template%20instance.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%20%20let%20model%20%3D%20modelForElement(el)%3B%0A%20%20%20%20%20%20%20*%20%20%20if%20(model.index%20%3C%2010)%20%7B%0A%20%20%20%20%20%20%20*%20%20%20%20%20model.set('item.checked'%2C%20true)%3B%0A%20%20%20%20%20%20%20*%20%20%20%7D%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40memberof%20Polymer.Templatize%0A%20%20%20%20%20%20%20*%20%40param%20%7BHTMLTemplateElement%7D%20template%20The%20model%20will%20be%20returned%20for%0A%20%20%20%20%20%20%20*%20%20%20elements%20stamped%20from%20this%20template%0A%20%20%20%20%20%20%20*%20%40param%20%7BNode%3D%7D%20node%20Node%20for%20which%20to%20return%20a%20template%20model.%0A%20%20%20%20%20%20%20*%20%40return%20%7BTemplateInstanceBase%7D%20Template%20instance%20representing%20the%0A%20%20%20%20%20%20%20*%20%20%20binding%20scope%20for%20the%20element%0A%20%20%20%20%20%20%20*%2FmodelForElement%3Afunction%20modelForElement(template%2Cnode)%7Bvar%20model%3Dvoid%200%3Bwhile(node)%7B%2F%2F%20An%20element%20with%20a%20__templatizeInstance%20marks%20the%20top%20boundary%0A%2F%2F%20of%20a%20scope%3B%20walk%20up%20until%20we%20find%20one%2C%20and%20then%20ensure%20that%0A%2F%2F%20its%20__dataHost%20matches%20%60this%60%2C%20meaning%20this%20dom-repeat%20stamped%20it%0Aif(model%3Dnode.__templatizeInstance)%7B%2F%2F%20Found%20an%20element%20stamped%20by%20another%20template%3B%20keep%20walking%20up%0A%2F%2F%20from%20its%20__dataHost%0Aif(model.__dataHost!%3Dtemplate)%7Bnode%3Dmodel.__dataHost%3B%7Delse%7Breturn%20model%3B%7D%7Delse%7B%2F%2F%20Still%20in%20a%20template%20scope%2C%20keep%20going%20up%20until%0A%2F%2F%20a%20__templatizeInstance%20is%20found%0Anode%3Dnode.parentNode%3B%7D%7Dreturn%20null%3B%7D%7D%3BPolymer.TemplateInstanceBase%3DTemplateInstanceBase%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Ftemplatize.html.js%0A",
            "resourceBytes": 24612,
            "encodedBytes": 0,
            "unusedBytes": 10875
          },
          {
            "name": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3Bvar%20TemplateInstanceBase%3DPolymer.TemplateInstanceBase%3B%2F%2F%20eslint-disable-line%0A%2F**%0A%20%20%20%20%20*%20%40typedef%20%7B%7B%0A%20%20%20%20%20*%20%20%20_templatizerTemplate%3A%20HTMLTemplateElement%2C%0A%20%20%20%20%20*%20%20%20_parentModel%3A%20boolean%2C%0A%20%20%20%20%20*%20%20%20_instanceProps%3A%20Object%2C%0A%20%20%20%20%20*%20%20%20_forwardHostPropV2%3A%20Function%2C%0A%20%20%20%20%20*%20%20%20_notifyInstancePropV2%3A%20Function%2C%0A%20%20%20%20%20*%20%20%20ctor%3A%20TemplateInstanceBase%0A%20%20%20%20%20*%20%7D%7D%0A%20%20%20%20%20*%2Fvar%20TemplatizerUser%3Dvoid%200%3B%2F%2F%20eslint-disable-line%0A%2F**%0A%20%20%20%20%20*%20The%20%60Polymer.Templatizer%60%20behavior%20adds%20methods%20to%20generate%20instances%20of%0A%20%20%20%20%20*%20templates%20that%20are%20each%20managed%20by%20an%20anonymous%20%60Polymer.PropertyEffects%60%0A%20%20%20%20%20*%20instance%20where%20data-bindings%20in%20the%20stamped%20template%20content%20are%20bound%20to%0A%20%20%20%20%20*%20accessors%20on%20itself.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20This%20behavior%20is%20provided%20in%20Polymer%202.x%20as%20a%20hybrid-element%20convenience%0A%20%20%20%20%20*%20only.%20%20For%20non-hybrid%20usage%2C%20the%20%60Polymer.Templatize%60%20library%0A%20%20%20%20%20*%20should%20be%20used%20instead.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%20%20%20%20%2F%2F%20Get%20a%20template%20from%20somewhere%2C%20e.g.%20light%20DOM%0A%20%20%20%20%20*%20%20%20%20%20let%20template%20%3D%20this.querySelector('template')%3B%0A%20%20%20%20%20*%20%20%20%20%20%2F%2F%20Prepare%20the%20template%0A%20%20%20%20%20*%20%20%20%20%20this.templatize(template)%3B%0A%20%20%20%20%20*%20%20%20%20%20%2F%2F%20Instance%20the%20template%20with%20an%20initial%20data%20model%0A%20%20%20%20%20*%20%20%20%20%20let%20instance%20%3D%20this.stamp(%7BmyProp%3A%20'initial'%7D)%3B%0A%20%20%20%20%20*%20%20%20%20%20%2F%2F%20Insert%20the%20instance's%20DOM%20somewhere%2C%20e.g.%20light%20DOM%0A%20%20%20%20%20*%20%20%20%20%20Polymer.dom(this).appendChild(instance.root)%3B%0A%20%20%20%20%20*%20%20%20%20%20%2F%2F%20Changing%20a%20property%20on%20the%20instance%20will%20propagate%20to%20bindings%0A%20%20%20%20%20*%20%20%20%20%20%2F%2F%20in%20the%20template%0A%20%20%20%20%20*%20%20%20%20%20instance.myProp%20%3D%20'new%20value'%3B%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Users%20of%20%60Templatizer%60%20may%20need%20to%20implement%20the%20following%20abstract%0A%20%20%20%20%20*%20API's%20to%20determine%20how%20properties%20and%20paths%20from%20the%20host%20should%20be%0A%20%20%20%20%20*%20forwarded%20into%20to%20instances%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%20%20%20%20_forwardHostPropV2%3A%20function(prop%2C%20value)%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Likewise%2C%20users%20may%20implement%20these%20additional%20abstract%20API's%20to%20determine%0A%20%20%20%20%20*%20how%20instance-specific%20properties%20that%20change%20on%20the%20instance%20should%20be%0A%20%20%20%20%20*%20forwarded%20out%20to%20the%20host%2C%20if%20necessary.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%20%20%20%20_notifyInstancePropV2%3A%20function(inst%2C%20prop%2C%20value)%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20In%20order%20to%20determine%20which%20properties%20are%20instance-specific%20and%20require%0A%20%20%20%20%20*%20custom%20notification%20via%20%60_notifyInstanceProp%60%2C%20define%20an%20%60_instanceProps%60%0A%20%20%20%20%20*%20object%20containing%20keys%20for%20each%20instance%20prop%2C%20for%20example%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%20%20%20%20_instanceProps%3A%20%7B%0A%20%20%20%20%20*%20%20%20%20%20%20%20item%3A%20true%2C%0A%20%20%20%20%20*%20%20%20%20%20%20%20index%3A%20true%0A%20%20%20%20%20*%20%20%20%20%20%7D%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Any%20properties%20used%20in%20the%20template%20that%20are%20not%20defined%20in%20_instanceProp%0A%20%20%20%20%20*%20will%20be%20forwarded%20out%20to%20the%20Templatize%20%60owner%60%20automatically.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Users%20may%20also%20implement%20the%20following%20abstract%20function%20to%20show%20or%0A%20%20%20%20%20*%20hide%20any%20DOM%20generated%20using%20%60stamp%60%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%20%20%20%20_showHideChildren%3A%20function(shouldHide)%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Note%20that%20some%20callbacks%20are%20suffixed%20with%20%60V2%60%20in%20the%20Polymer%202.x%20behavior%0A%20%20%20%20%20*%20as%20the%20implementations%20will%20need%20to%20differ%20from%20the%20callbacks%20required%0A%20%20%20%20%20*%20by%20the%201.x%20Templatizer%20API%20due%20to%20changes%20in%20the%20%60TemplateInstance%60%20API%0A%20%20%20%20%20*%20between%20versions%201.x%20and%202.x.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40polymerBehavior%0A%20%20%20%20%20*%2FPolymer.Templatizer%3D%7B%2F**%0A%20%20%20%20%20%20%20*%20Generates%20an%20anonymous%20%60TemplateInstance%60%20class%20(stored%20as%20%60this.ctor%60)%0A%20%20%20%20%20%20%20*%20for%20the%20provided%20template.%20%20This%20method%20should%20be%20called%20once%20per%0A%20%20%20%20%20%20%20*%20template%20to%20prepare%20an%20element%20for%20stamping%20the%20template%2C%20followed%0A%20%20%20%20%20%20%20*%20by%20%60stamp%60%20to%20create%20new%20instances%20of%20the%20template.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!HTMLTemplateElement%7D%20template%20Template%20to%20prepare%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20mutableData%20When%20%60true%60%2C%20the%20generated%20class%20will%20skip%0A%20%20%20%20%20%20%20*%20%20%20strict%20dirty-checking%20for%20objects%20and%20arrays%20(always%20consider%20them%20to%0A%20%20%20%20%20%20%20*%20%20%20be%20%22dirty%22).%20Defaults%20to%20false.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40this%20%7BTemplatizerUser%7D%0A%20%20%20%20%20%20%20*%2Ftemplatize%3Afunction%20templatize(template%2CmutableData)%7Bthis._templatizerTemplate%3Dtemplate%3Bthis.ctor%3DPolymer.Templatize.templatize(template%2Cthis%2C%7BmutableData%3ABoolean(mutableData)%2CparentModel%3Athis._parentModel%2CinstanceProps%3Athis._instanceProps%2CforwardHostProp%3Athis._forwardHostPropV2%2CnotifyInstanceProp%3Athis._notifyInstancePropV2%7D)%3B%7D%2C%2F**%0A%20%20%20%20%20%20%20*%20Creates%20an%20instance%20of%20the%20template%20prepared%20by%20%60templatize%60.%20%20The%20object%0A%20%20%20%20%20%20%20*%20returned%20is%20an%20instance%20of%20the%20anonymous%20class%20generated%20by%20%60templatize%60%0A%20%20%20%20%20%20%20*%20whose%20%60root%60%20property%20is%20a%20document%20fragment%20containing%20newly%20cloned%0A%20%20%20%20%20%20%20*%20template%20content%2C%20and%20which%20has%20property%20accessors%20corresponding%20to%0A%20%20%20%20%20%20%20*%20properties%20referenced%20in%20template%20bindings.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20model%20Object%20containing%20initial%20property%20values%20to%0A%20%20%20%20%20%20%20*%20%20%20populate%20into%20the%20template%20bindings.%0A%20%20%20%20%20%20%20*%20%40return%20%7BTemplateInstanceBase%7D%20Returns%20the%20created%20instance%20of%0A%20%20%20%20%20%20%20*%20the%20template%20prepared%20by%20%60templatize%60.%0A%20%20%20%20%20%20%20*%20%40this%20%7BTemplatizerUser%7D%0A%20%20%20%20%20%20%20*%2Fstamp%3Afunction%20stamp(model)%7Breturn%20new%20this.ctor(model)%3B%7D%2C%2F**%0A%20%20%20%20%20%20%20*%20Returns%20the%20template%20%22model%22%20(%60TemplateInstance%60)%20associated%20with%0A%20%20%20%20%20%20%20*%20a%20given%20element%2C%20which%20serves%20as%20the%20binding%20scope%20for%20the%20template%0A%20%20%20%20%20%20%20*%20instance%20the%20element%20is%20contained%20in.%20%20A%20template%20model%20should%20be%20used%0A%20%20%20%20%20%20%20*%20to%20manipulate%20data%20associated%20with%20this%20template%20instance.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BHTMLElement%7D%20el%20Element%20for%20which%20to%20return%20a%20template%20model.%0A%20%20%20%20%20%20%20*%20%40return%20%7BTemplateInstanceBase%7D%20Model%20representing%20the%20binding%20scope%20for%0A%20%20%20%20%20%20%20*%20%20%20the%20element.%0A%20%20%20%20%20%20%20*%20%40this%20%7BTemplatizerUser%7D%0A%20%20%20%20%20%20%20*%2FmodelForElement%3Afunction%20modelForElement(el)%7Breturn%20Polymer.Templatize.modelForElement(this._templatizerTemplate%2Cel)%3B%7D%7D%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Flegacy%2Ftemplatizer-behavior.html.js%0A",
            "resourceBytes": 5584,
            "encodedBytes": 0,
            "unusedBytes": 471
          },
          {
            "name": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3B%2F**%0A%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20*%20%40extends%20%7BHTMLElement%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertyEffects%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_OptionalMutableData%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_GestureEventListeners%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Fvar%20domBindBase%3DPolymer.GestureEventListeners(Polymer.OptionalMutableData(Polymer.PropertyEffects(HTMLElement)))%3B%2F**%0A%20%20%20%20%20*%20Custom%20element%20to%20allow%20using%20Polymer's%20template%20features%20(data%20binding%2C%0A%20%20%20%20%20*%20declarative%20event%20listeners%2C%20etc.)%20in%20the%20main%20document%20without%20defining%0A%20%20%20%20%20*%20a%20new%20custom%20element.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%60%3Ctemplate%3E%60%20tags%20utilizing%20bindings%20may%20be%20wrapped%20with%20the%20%60%3Cdom-bind%3E%60%0A%20%20%20%20%20*%20element%2C%20which%20will%20immediately%20stamp%20the%20wrapped%20template%20into%20the%20main%0A%20%20%20%20%20*%20document%20and%20bind%20elements%20to%20the%20%60dom-bind%60%20element%20itself%20as%20the%0A%20%20%20%20%20*%20binding%20scope.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40customElement%0A%20%20%20%20%20*%20%40appliesMixin%20Polymer.PropertyEffects%0A%20%20%20%20%20*%20%40appliesMixin%20Polymer.OptionalMutableData%0A%20%20%20%20%20*%20%40appliesMixin%20Polymer.GestureEventListeners%0A%20%20%20%20%20*%20%40extends%20%7BdomBindBase%7D%0A%20%20%20%20%20*%20%40memberof%20Polymer%0A%20%20%20%20%20*%20%40summary%20Custom%20element%20to%20allow%20using%20Polymer's%20template%20features%20(data%0A%20%20%20%20%20*%20%20%20binding%2C%20declarative%20event%20listeners%2C%20etc.)%20in%20the%20main%20document.%0A%20%20%20%20%20*%2Fvar%20DomBind%3Dfunction(_domBindBase)%7B_inherits(DomBind%2C_domBindBase)%3B_createClass(DomBind%2Cnull%2C%5B%7Bkey%3A'observedAttributes'%2Cget%3Afunction%20get()%7Breturn%5B'mutable-data'%5D%3B%7D%7D%5D)%3Bfunction%20DomBind()%7B_classCallCheck(this%2CDomBind)%3Bvar%20_this%3D_possibleConstructorReturn(this%2C(DomBind.__proto__%7C%7CObject.getPrototypeOf(DomBind)).call(this))%3Bif(Polymer.strictTemplatePolicy)%7Bthrow%20new%20Error('strictTemplatePolicy%3A%20dom-bind%20not%20allowed')%3B%7D_this.root%3Dnull%3B_this.%24%3Dnull%3B_this.__children%3Dnull%3Breturn%20_this%3B%7D%2F**%20%40return%20%7Bvoid%7D%20*%2F_createClass(DomBind%2C%5B%7Bkey%3A'attributeChangedCallback'%2Cvalue%3Afunction%20attributeChangedCallback()%7B%2F%2F%20assumes%20only%20one%20observed%20attribute%0Athis.mutableData%3Dtrue%3B%7D%2F**%20%40return%20%7Bvoid%7D%20*%2F%7D%2C%7Bkey%3A'connectedCallback'%2Cvalue%3Afunction%20connectedCallback()%7Bthis.style.display%3D'none'%3Bthis.render()%3B%7D%2F**%20%40return%20%7Bvoid%7D%20*%2F%7D%2C%7Bkey%3A'disconnectedCallback'%2Cvalue%3Afunction%20disconnectedCallback()%7Bthis.__removeChildren()%3B%7D%7D%2C%7Bkey%3A'__insertChildren'%2Cvalue%3Afunction%20__insertChildren()%7Bthis.parentNode.insertBefore(this.root%2Cthis)%3B%7D%7D%2C%7Bkey%3A'__removeChildren'%2Cvalue%3Afunction%20__removeChildren()%7Bif(this.__children)%7Bfor(var%20i%3D0%3Bi%3Cthis.__children.length%3Bi%2B%2B)%7Bthis.root.appendChild(this.__children%5Bi%5D)%3B%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Forces%20the%20element%20to%20render%20its%20content.%20This%20is%20typically%20only%0A%20%20%20%20%20%20%20*%20necessary%20to%20call%20if%20HTMLImports%20with%20the%20async%20attribute%20are%20used.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'render'%2Cvalue%3Afunction%20render()%7Bvar%20_this2%3Dthis%3Bvar%20template%3Dvoid%200%3Bif(!this.__children)%7Btemplate%3D%2F**%20%40type%20%7BHTMLTemplateElement%7D%20*%2Ftemplate%7C%7Cthis.querySelector('template')%3Bif(!template)%7B%2F%2F%20Wait%20until%20childList%20changes%20and%20template%20should%20be%20there%20by%20then%0Avar%20observer%3Dnew%20MutationObserver(function()%7Btemplate%3D%2F**%20%40type%20%7BHTMLTemplateElement%7D%20*%2F_this2.querySelector('template')%3Bif(template)%7Bobserver.disconnect()%3B_this2.render()%3B%7Delse%7Bthrow%20new%20Error('dom-bind%20requires%20a%20%3Ctemplate%3E%20child')%3B%7D%7D)%3Bobserver.observe(this%2C%7BchildList%3Atrue%7D)%3Breturn%3B%7Dthis.root%3Dthis._stampTemplate(template)%3Bthis.%24%3Dthis.root.%24%3Bthis.__children%3D%5B%5D%3Bfor(var%20n%3Dthis.root.firstChild%3Bn%3Bn%3Dn.nextSibling)%7Bthis.__children%5Bthis.__children.length%5D%3Dn%3B%7Dthis._enableProperties()%3B%7Dthis.__insertChildren()%3Bthis.dispatchEvent(new%20CustomEvent('dom-change'%2C%7Bbubbles%3Atrue%2Ccomposed%3Atrue%7D))%3B%7D%7D%5D)%3Breturn%20DomBind%3B%7D(domBindBase)%3BcustomElements.define('dom-bind'%2CDomBind)%3B%2F**%20%40const%20*%2FPolymer.DomBind%3DDomBind%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Felements%2Fdom-bind.html.js%0A",
            "resourceBytes": 5022,
            "encodedBytes": 0,
            "unusedBytes": 1943
          },
          {
            "name": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7D(function()%7B'use%20strict'%3B%2F**%0A%20%20%20%20%20*%20Class%20representing%20a%20static%20string%20value%20which%20can%20be%20used%20to%20filter%0A%20%20%20%20%20*%20strings%20by%20asseting%20that%20they%20have%20been%20created%20via%20this%20class.%20The%0A%20%20%20%20%20*%20%60value%60%20property%20returns%20the%20string%20passed%20to%20the%20constructor.%0A%20%20%20%20%20*%2Fvar%20LiteralString%3Dfunction()%7Bfunction%20LiteralString(string)%7B_classCallCheck(this%2CLiteralString)%3B%2F**%20%40type%20%7Bstring%7D%20*%2Fthis.value%3Dstring.toString()%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20%40return%20%7Bstring%7D%20LiteralString%20string%20value%0A%20%20%20%20%20%20%20*%2F_createClass(LiteralString%2C%5B%7Bkey%3A'toString'%2Cvalue%3Afunction%20toString()%7Breturn%20this.value%3B%7D%7D%5D)%3Breturn%20LiteralString%3B%7D()%3B%2F**%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Object%20to%20stringify%20into%20HTML%0A%20%20%20%20%20*%20%40return%20%7Bstring%7D%20HTML%20stringified%20form%20of%20%60obj%60%0A%20%20%20%20%20*%2Ffunction%20literalValue(value)%7Bif(value%20instanceof%20LiteralString)%7Breturn(%2F**%20%40type%20%7B!LiteralString%7D%20*%2Fvalue.value)%3B%7Delse%7Bthrow%20new%20Error('non-literal%20value%20passed%20to%20Polymer.htmlLiteral%3A%20'%2Bvalue)%3B%7D%7D%2F**%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Object%20to%20stringify%20into%20HTML%0A%20%20%20%20%20*%20%40return%20%7Bstring%7D%20HTML%20stringified%20form%20of%20%60obj%60%0A%20%20%20%20%20*%2Ffunction%20htmlValue(value)%7Bif(value%20instanceof%20HTMLTemplateElement)%7Breturn(%2F**%20%40type%20%7B!HTMLTemplateElement%20%7D%20*%2Fvalue.innerHTML)%3B%7Delse%20if(value%20instanceof%20LiteralString)%7Breturn%20literalValue(value)%3B%7Delse%7Bthrow%20new%20Error('non-template%20value%20passed%20to%20Polymer.html%3A%20'%2Bvalue)%3B%7D%7D%2F**%0A%20%20%20%20%20*%20A%20template%20literal%20tag%20that%20creates%20an%20HTML%20%3Ctemplate%3E%20element%20from%20the%0A%20%20%20%20%20*%20contents%20of%20the%20string.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20This%20allows%20you%20to%20write%20a%20Polymer%20Template%20in%20JavaScript.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Templates%20can%20be%20composed%20by%20interpolating%20%60HTMLTemplateElement%60s%20in%0A%20%20%20%20%20*%20expressions%20in%20the%20JavaScript%20template%20literal.%20The%20nested%20template's%0A%20%20%20%20%20*%20%60innerHTML%60%20is%20included%20in%20the%20containing%20template.%20%20The%20only%20other%0A%20%20%20%20%20*%20values%20allowed%20in%20expressions%20are%20those%20returned%20from%20%60Polymer.htmlLiteral%60%0A%20%20%20%20%20*%20which%20ensures%20only%20literal%20values%20from%20JS%20source%20ever%20reach%20the%20HTML%2C%20to%0A%20%20%20%20%20*%20guard%20against%20XSS%20risks.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20All%20other%20values%20are%20disallowed%20in%20expressions%20to%20help%20prevent%20XSS%0A%20%20%20%20%20*%20attacks%3B%20however%2C%20%60Polymer.htmlLiteral%60%20can%20be%20used%20to%20compose%20static%0A%20%20%20%20%20*%20string%20values%20into%20templates.%20This%20is%20useful%20to%20compose%20strings%20into%0A%20%20%20%20%20*%20places%20that%20do%20not%20accept%20html%2C%20like%20the%20css%20text%20of%20a%20%60style%60%0A%20%20%20%20%20*%20element.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%20%20%20%20static%20get%20template()%20%7B%0A%20%20%20%20%20*%20%20%20%20%20%20%20return%20Polymer.html%60%0A%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%3Cstyle%3E%3Ahost%7B%20content%3A%22...%22%20%7D%3C%2Fstyle%3E%0A%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22shadowed%22%3E%24%7Bthis.partialTemplate%7D%3C%2Fdiv%3E%0A%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%24%7Bsuper.template%7D%0A%20%20%20%20%20*%20%20%20%20%20%20%20%60%3B%0A%20%20%20%20%20*%20%20%20%20%20%7D%0A%20%20%20%20%20*%20%20%20%20%20static%20get%20partialTemplate()%20%7B%20return%20Polymer.html%60%3Cspan%3EPartial!%3C%2Fspan%3E%60%3B%20%7D%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer%0A%20%20%20%20%20*%20%40param%20%7B!ITemplateArray%7D%20strings%20Constant%20parts%20of%20tagged%20template%20literal%0A%20%20%20%20%20*%20%40param%20%7B...*%7D%20values%20Variable%20parts%20of%20tagged%20template%20literal%0A%20%20%20%20%20*%20%40return%20%7B!HTMLTemplateElement%7D%20Constructed%20HTMLTemplateElement%0A%20%20%20%20%20*%2FPolymer.html%3Dfunction%20html(strings)%7Bvar%20template%3D%2F**%20%40type%20%7B!HTMLTemplateElement%7D%20*%2Fdocument.createElement('template')%3Bfor(var%20_len%3Darguments.length%2Cvalues%3DArray(_len%3E1%3F_len-1%3A0)%2C_key%3D1%3B_key%3C_len%3B_key%2B%2B)%7Bvalues%5B_key-1%5D%3Darguments%5B_key%5D%3B%7Dtemplate.innerHTML%3Dvalues.reduce(function(acc%2Cv%2Cidx)%7Breturn%20acc%2BhtmlValue(v)%2Bstrings%5Bidx%2B1%5D%3B%7D%2Cstrings%5B0%5D)%3Breturn%20template%3B%7D%3B%2F**%0A%20%20%20%20%20*%20An%20html%20literal%20tag%20that%20can%20be%20used%20with%20%60Polymer.html%60%20to%20compose.%0A%20%20%20%20%20*%20a%20literal%20string.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%20%20%20%20static%20get%20template()%20%7B%0A%20%20%20%20%20*%20%20%20%20%20%20%20return%20Polymer.html%60%0A%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%3Cstyle%3E%0A%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%3Ahost%20%7B%20display%3A%20block%3B%20%7D%0A%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%24%7BstyleTemplate%7D%0A%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%3C%2Fstyle%3E%0A%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22shadowed%22%3E%24%7BstaticValue%7D%3C%2Fdiv%3E%0A%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%24%7Bsuper.template%7D%0A%20%20%20%20%20*%20%20%20%20%20%20%20%60%3B%0A%20%20%20%20%20*%20%20%20%20%20%7D%0A%20%20%20%20%20*%20%20%20%20%20static%20get%20styleTemplate()%20%7B%20return%20Polymer.htmlLiteral%60.shadowed%20%7B%20background%3A%20gray%3B%20%7D%60%3B%20%7D%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer%0A%20%20%20%20%20*%20%40param%20%7B!ITemplateArray%7D%20strings%20Constant%20parts%20of%20tagged%20template%20literal%0A%20%20%20%20%20*%20%40param%20%7B...*%7D%20values%20Variable%20parts%20of%20tagged%20template%20literal%0A%20%20%20%20%20*%20%40return%20%7B!LiteralString%7D%20Constructed%20literal%20string%0A%20%20%20%20%20*%2FPolymer.htmlLiteral%3Dfunction(strings)%7Bfor(var%20_len2%3Darguments.length%2Cvalues%3DArray(_len2%3E1%3F_len2-1%3A0)%2C_key2%3D1%3B_key2%3C_len2%3B_key2%2B%2B)%7Bvalues%5B_key2-1%5D%3Darguments%5B_key2%5D%3B%7Dreturn%20new%20LiteralString(values.reduce(function(acc%2Cv%2Cidx)%7Breturn%20acc%2BliteralValue(v)%2Bstrings%5Bidx%2B1%5D%3B%7D%2Cstrings%5B0%5D))%3B%7D%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Fhtml-tag.html.js%0A",
            "resourceBytes": 5107,
            "encodedBytes": 0,
            "unusedBytes": 1377
          },
          {
            "name": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3B%2F**%0A%20%20%20*%20Base%20class%20that%20provides%20the%20core%20API%20for%20Polymer's%20meta-programming%0A%20%20%20*%20features%20including%20template%20stamping%2C%20data-binding%2C%20attribute%20deserialization%2C%0A%20%20%20*%20and%20property%20change%20observation.%0A%20%20%20*%0A%20%20%20*%20%40customElement%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40constructor%0A%20%20%20*%20%40implements%20%7BPolymer_ElementMixin%7D%0A%20%20%20*%20%40extends%20%7BHTMLElement%7D%0A%20%20%20*%20%40appliesMixin%20Polymer.ElementMixin%0A%20%20%20*%20%40summary%20Custom%20element%20base%20class%20that%20provides%20the%20core%20API%20for%20Polymer's%0A%20%20%20*%20%20%20key%20meta-programming%20features%20including%20template%20stamping%2C%20data-binding%2C%0A%20%20%20*%20%20%20attribute%20deserialization%2C%20and%20property%20change%20observation%0A%20%20%20*%2FPolymer.Element%3DPolymer.ElementMixin(HTMLElement)%3B%2F%2F%20NOTE%3A%20this%20is%20here%20for%20modulizer%20to%20export%20%60html%60%20for%20the%20module%20version%20of%20this%20file%0APolymer.html%3DPolymer.html%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Fpolymer-element.html.js%0A",
            "resourceBytes": 939,
            "encodedBytes": 0,
            "unusedBytes": 0
          },
          {
            "name": "data:text/javascript;charset=utf-8,var%20_get%3Dfunction%20get(object%2Cproperty%2Creceiver)%7Bif(object%3D%3D%3Dnull)object%3DFunction.prototype%3Bvar%20desc%3DObject.getOwnPropertyDescriptor(object%2Cproperty)%3Bif(desc%3D%3D%3Dundefined)%7Bvar%20parent%3DObject.getPrototypeOf(object)%3Bif(parent%3D%3D%3Dnull)%7Breturn%20undefined%3B%7Delse%7Breturn%20get(parent%2Cproperty%2Creceiver)%3B%7D%7Delse%20if(%22value%22in%20desc)%7Breturn%20desc.value%3B%7Delse%7Bvar%20getter%3Ddesc.get%3Bif(getter%3D%3D%3Dundefined)%7Breturn%20undefined%3B%7Dreturn%20getter.call(receiver)%3B%7D%7D%3Bvar%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3Bvar%20TemplateInstanceBase%3DPolymer.TemplateInstanceBase%3B%2F%2F%20eslint-disable-line%0A%2F**%0A%20%20%20*%20%40constructor%0A%20%20%20*%20%40implements%20%7BPolymer_OptionalMutableData%7D%0A%20%20%20*%20%40extends%20%7BPolymer.Element%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Fvar%20domRepeatBase%3DPolymer.OptionalMutableData(Polymer.Element)%3B%2F**%0A%20%20%20*%20The%20%60%3Cdom-repeat%3E%60%20element%20will%20automatically%20stamp%20and%20binds%20one%20instance%0A%20%20%20*%20of%20template%20content%20to%20each%20object%20in%20a%20user-provided%20array.%0A%20%20%20*%20%60dom-repeat%60%20accepts%20an%20%60items%60%20property%2C%20and%20one%20instance%20of%20the%20template%0A%20%20%20*%20is%20stamped%20for%20each%20item%20into%20the%20DOM%20at%20the%20location%20of%20the%20%60dom-repeat%60%0A%20%20%20*%20element.%20%20The%20%60item%60%20property%20will%20be%20set%20on%20each%20instance's%20binding%0A%20%20%20*%20scope%2C%20thus%20templates%20should%20bind%20to%20sub-properties%20of%20%60item%60.%0A%20%20%20*%0A%20%20%20*%20Example%3A%0A%20%20%20*%0A%20%20%20*%20%60%60%60html%0A%20%20%20*%20%3Cdom-module%20id%3D%22employee-list%22%3E%0A%20%20%20*%0A%20%20%20*%20%20%20%3Ctemplate%3E%0A%20%20%20*%0A%20%20%20*%20%20%20%20%20%3Cdiv%3E%20Employee%20list%3A%20%3C%2Fdiv%3E%0A%20%20%20*%20%20%20%20%20%3Cdom-repeat%20items%3D%22%7B%7Bemployees%7D%7D%22%3E%0A%20%20%20*%20%20%20%20%20%20%20%3Ctemplate%3E%0A%20%20%20*%20%20%20%20%20%20%20%20%20%3Cdiv%3EFirst%20name%3A%20%3Cspan%3E%7B%7Bitem.first%7D%7D%3C%2Fspan%3E%3C%2Fdiv%3E%0A%20%20%20*%20%20%20%20%20%20%20%20%20%3Cdiv%3ELast%20name%3A%20%3Cspan%3E%7B%7Bitem.last%7D%7D%3C%2Fspan%3E%3C%2Fdiv%3E%0A%20%20%20*%20%20%20%20%20%20%20%3C%2Ftemplate%3E%0A%20%20%20*%20%20%20%20%20%3C%2Fdom-repeat%3E%0A%20%20%20*%0A%20%20%20*%20%20%20%3C%2Ftemplate%3E%0A%20%20%20*%0A%20%20%20*%20%3C%2Fdom-module%3E%0A%20%20%20*%20%60%60%60%0A%20%20%20*%0A%20%20%20*%20With%20the%20following%20custom%20element%20definition%3A%0A%20%20%20*%0A%20%20%20*%20%60%60%60js%0A%20%20%20*%20class%20EmployeeList%20extends%20Polymer.Element%20%7B%0A%20%20%20*%20%20%20static%20get%20is()%20%7B%20return%20'employee-list'%3B%20%7D%0A%20%20%20*%20%20%20static%20get%20properties()%20%7B%0A%20%20%20*%20%20%20%20%20return%20%7B%0A%20%20%20*%20%20%20%20%20%20%20employees%3A%20%7B%0A%20%20%20*%20%20%20%20%20%20%20%20%20value()%20%7B%0A%20%20%20*%20%20%20%20%20%20%20%20%20%20%20return%20%5B%0A%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%20%20%7Bfirst%3A%20'Bob'%2C%20last%3A%20'Smith'%7D%2C%0A%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%20%20%7Bfirst%3A%20'Sally'%2C%20last%3A%20'Johnson'%7D%2C%0A%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%20%20...%0A%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%5D%3B%0A%20%20%20*%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20*%20%20%20%20%20%20%20%7D%0A%20%20%20*%20%20%20%20%20%7D%3B%0A%20%20%20*%20%20%20%7D%0A%20%20%20*%20%7D%0A%20%20%20*%20%60%60%60%0A%20%20%20*%0A%20%20%20*%20Notifications%20for%20changes%20to%20items%20sub-properties%20will%20be%20forwarded%20to%20template%0A%20%20%20*%20instances%2C%20which%20will%20update%20via%20the%20normal%20structured%20data%20notification%20system.%0A%20%20%20*%0A%20%20%20*%20Mutations%20to%20the%20%60items%60%20array%20itself%20should%20be%20made%20using%20the%20Array%0A%20%20%20*%20mutation%20API's%20on%20%60Polymer.Base%60%20(%60push%60%2C%20%60pop%60%2C%20%60splice%60%2C%20%60shift%60%2C%0A%20%20%20*%20%60unshift%60)%2C%20and%20template%20instances%20will%20be%20kept%20in%20sync%20with%20the%20data%20in%20the%0A%20%20%20*%20array.%0A%20%20%20*%0A%20%20%20*%20Events%20caught%20by%20event%20handlers%20within%20the%20%60dom-repeat%60%20template%20will%20be%0A%20%20%20*%20decorated%20with%20a%20%60model%60%20property%2C%20which%20represents%20the%20binding%20scope%20for%0A%20%20%20*%20each%20template%20instance.%20%20The%20model%20is%20an%20instance%20of%20Polymer.Base%2C%20and%20should%0A%20%20%20*%20be%20used%20to%20manipulate%20data%20on%20the%20instance%2C%20for%20example%0A%20%20%20*%20%60event.model.set('item.checked'%2C%20true)%3B%60.%0A%20%20%20*%0A%20%20%20*%20Alternatively%2C%20the%20model%20for%20a%20template%20instance%20for%20an%20element%20stamped%20by%0A%20%20%20*%20a%20%60dom-repeat%60%20can%20be%20obtained%20using%20the%20%60modelForElement%60%20API%20on%20the%0A%20%20%20*%20%60dom-repeat%60%20that%20stamped%20it%2C%20for%20example%0A%20%20%20*%20%60this.%24.domRepeat.modelForElement(event.target).set('item.checked'%2C%20true)%3B%60.%0A%20%20%20*%20This%20may%20be%20useful%20for%20manipulating%20instance%20data%20of%20event%20targets%20obtained%0A%20%20%20*%20by%20event%20handlers%20on%20parents%20of%20the%20%60dom-repeat%60%20(event%20delegation).%0A%20%20%20*%0A%20%20%20*%20A%20view-specific%20filter%2Fsort%20may%20be%20applied%20to%20each%20%60dom-repeat%60%20by%20supplying%20a%0A%20%20%20*%20%60filter%60%20and%2For%20%60sort%60%20property.%20%20This%20may%20be%20a%20string%20that%20names%20a%20function%20on%0A%20%20%20*%20the%20host%2C%20or%20a%20function%20may%20be%20assigned%20to%20the%20property%20directly.%20%20The%20functions%0A%20%20%20*%20should%20implemented%20following%20the%20standard%20%60Array%60%20filter%2Fsort%20API.%0A%20%20%20*%0A%20%20%20*%20In%20order%20to%20re-run%20the%20filter%20or%20sort%20functions%20based%20on%20changes%20to%20sub-fields%0A%20%20%20*%20of%20%60items%60%2C%20the%20%60observe%60%20property%20may%20be%20set%20as%20a%20space-separated%20list%20of%0A%20%20%20*%20%60item%60%20sub-fields%20that%20should%20cause%20a%20re-filter%2Fsort%20when%20modified.%20%20If%0A%20%20%20*%20the%20filter%20or%20sort%20function%20depends%20on%20properties%20not%20contained%20in%20%60items%60%2C%0A%20%20%20*%20the%20user%20should%20observe%20changes%20to%20those%20properties%20and%20call%20%60render%60%20to%20update%0A%20%20%20*%20the%20view%20based%20on%20the%20dependency%20change.%0A%20%20%20*%0A%20%20%20*%20For%20example%2C%20for%20an%20%60dom-repeat%60%20with%20a%20filter%20of%20the%20following%3A%0A%20%20%20*%0A%20%20%20*%20%60%60%60js%0A%20%20%20*%20isEngineer(item)%20%7B%0A%20%20%20*%20%20%20return%20item.type%20%3D%3D%20'engineer'%20%7C%7C%20item.manager.type%20%3D%3D%20'engineer'%3B%0A%20%20%20*%20%7D%0A%20%20%20*%20%60%60%60%0A%20%20%20*%0A%20%20%20*%20Then%20the%20%60observe%60%20property%20should%20be%20configured%20as%20follows%3A%0A%20%20%20*%0A%20%20%20*%20%60%60%60html%0A%20%20%20*%20%3Cdom-repeat%20items%3D%22%7B%7Bemployees%7D%7D%22%20filter%3D%22isEngineer%22%20observe%3D%22type%20manager.type%22%3E%0A%20%20%20*%20%60%60%60%0A%20%20%20*%0A%20%20%20*%20%40customElement%0A%20%20%20*%20%40polymer%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40extends%20%7BdomRepeatBase%7D%0A%20%20%20*%20%40appliesMixin%20Polymer.OptionalMutableData%0A%20%20%20*%20%40summary%20Custom%20element%20for%20stamping%20instance%20of%20a%20template%20bound%20to%0A%20%20%20*%20%20%20items%20in%20an%20array.%0A%20%20%20*%2Fvar%20DomRepeat%3Dfunction(_domRepeatBase)%7B_inherits(DomRepeat%2C_domRepeatBase)%3B_createClass(DomRepeat%2Cnull%2C%5B%7Bkey%3A'is'%2C%2F%2F%20Not%20needed%20to%20find%20template%3B%20can%20be%20removed%20once%20the%20analyzer%0A%2F%2F%20can%20find%20the%20tag%20name%20from%20customElements.define%20call%0Aget%3Afunction%20get()%7Breturn'dom-repeat'%3B%7D%7D%2C%7Bkey%3A'template'%2Cget%3Afunction%20get()%7Breturn%20null%3B%7D%7D%2C%7Bkey%3A'properties'%2Cget%3Afunction%20get()%7B%2F**%0A%20%20%20%20%20%20%20*%20Fired%20whenever%20DOM%20is%20added%20or%20removed%20by%20this%20template%20(by%0A%20%20%20%20%20%20%20*%20default%2C%20rendering%20occurs%20lazily).%20%20To%20force%20immediate%20rendering%2C%20call%0A%20%20%20%20%20%20%20*%20%60render%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40event%20dom-change%0A%20%20%20%20%20%20%20*%2Freturn%7B%2F**%0A%20%20%20%20%20%20%20%20%20*%20An%20array%20containing%20items%20determining%20how%20many%20instances%20of%20the%20template%0A%20%20%20%20%20%20%20%20%20*%20to%20stamp%20and%20that%20that%20each%20template%20instance%20should%20bind%20to.%0A%20%20%20%20%20%20%20%20%20*%2Fitems%3A%7Btype%3AArray%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20The%20name%20of%20the%20variable%20to%20add%20to%20the%20binding%20scope%20for%20the%20array%0A%20%20%20%20%20%20%20%20%20*%20element%20associated%20with%20a%20given%20template%20instance.%0A%20%20%20%20%20%20%20%20%20*%2Fas%3A%7Btype%3AString%2Cvalue%3A'item'%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20The%20name%20of%20the%20variable%20to%20add%20to%20the%20binding%20scope%20with%20the%20index%0A%20%20%20%20%20%20%20%20%20*%20of%20the%20instance%20in%20the%20sorted%20and%20filtered%20list%20of%20rendered%20items.%0A%20%20%20%20%20%20%20%20%20*%20Note%2C%20for%20the%20index%20in%20the%20%60this.items%60%20array%2C%20use%20the%20value%20of%20the%0A%20%20%20%20%20%20%20%20%20*%20%60itemsIndexAs%60%20property.%0A%20%20%20%20%20%20%20%20%20*%2FindexAs%3A%7Btype%3AString%2Cvalue%3A'index'%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20The%20name%20of%20the%20variable%20to%20add%20to%20the%20binding%20scope%20with%20the%20index%0A%20%20%20%20%20%20%20%20%20*%20of%20the%20instance%20in%20the%20%60this.items%60%20array.%20Note%2C%20for%20the%20index%20of%0A%20%20%20%20%20%20%20%20%20*%20this%20instance%20in%20the%20sorted%20and%20filtered%20list%20of%20rendered%20items%2C%0A%20%20%20%20%20%20%20%20%20*%20use%20the%20value%20of%20the%20%60indexAs%60%20property.%0A%20%20%20%20%20%20%20%20%20*%2FitemsIndexAs%3A%7Btype%3AString%2Cvalue%3A'itemsIndex'%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20A%20function%20that%20should%20determine%20the%20sort%20order%20of%20the%20items.%20%20This%0A%20%20%20%20%20%20%20%20%20*%20property%20should%20either%20be%20provided%20as%20a%20string%2C%20indicating%20a%20method%0A%20%20%20%20%20%20%20%20%20*%20name%20on%20the%20element's%20host%2C%20or%20else%20be%20an%20actual%20function.%20%20The%0A%20%20%20%20%20%20%20%20%20*%20function%20should%20match%20the%20sort%20function%20passed%20to%20%60Array.sort%60.%0A%20%20%20%20%20%20%20%20%20*%20Using%20a%20sort%20function%20has%20no%20effect%20on%20the%20underlying%20%60items%60%20array.%0A%20%20%20%20%20%20%20%20%20*%2Fsort%3A%7Btype%3AFunction%2Cobserver%3A'__sortChanged'%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20A%20function%20that%20can%20be%20used%20to%20filter%20items%20out%20of%20the%20view.%20%20This%0A%20%20%20%20%20%20%20%20%20*%20property%20should%20either%20be%20provided%20as%20a%20string%2C%20indicating%20a%20method%0A%20%20%20%20%20%20%20%20%20*%20name%20on%20the%20element's%20host%2C%20or%20else%20be%20an%20actual%20function.%20%20The%0A%20%20%20%20%20%20%20%20%20*%20function%20should%20match%20the%20sort%20function%20passed%20to%20%60Array.filter%60.%0A%20%20%20%20%20%20%20%20%20*%20Using%20a%20filter%20function%20has%20no%20effect%20on%20the%20underlying%20%60items%60%20array.%0A%20%20%20%20%20%20%20%20%20*%2Ffilter%3A%7Btype%3AFunction%2Cobserver%3A'__filterChanged'%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20When%20using%20a%20%60filter%60%20or%20%60sort%60%20function%2C%20the%20%60observe%60%20property%0A%20%20%20%20%20%20%20%20%20*%20should%20be%20set%20to%20a%20space-separated%20list%20of%20the%20names%20of%20item%0A%20%20%20%20%20%20%20%20%20*%20sub-fields%20that%20should%20trigger%20a%20re-sort%20or%20re-filter%20when%20changed.%0A%20%20%20%20%20%20%20%20%20*%20These%20should%20generally%20be%20fields%20of%20%60item%60%20that%20the%20sort%20or%20filter%0A%20%20%20%20%20%20%20%20%20*%20function%20depends%20on.%0A%20%20%20%20%20%20%20%20%20*%2Fobserve%3A%7Btype%3AString%2Cobserver%3A'__observeChanged'%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20When%20using%20a%20%60filter%60%20or%20%60sort%60%20function%2C%20the%20%60delay%60%20property%0A%20%20%20%20%20%20%20%20%20*%20determines%20a%20debounce%20time%20in%20ms%20after%20a%20change%20to%20observed%20item%0A%20%20%20%20%20%20%20%20%20*%20properties%20that%20must%20pass%20before%20the%20filter%20or%20sort%20is%20re-run.%0A%20%20%20%20%20%20%20%20%20*%20This%20is%20useful%20in%20rate-limiting%20shuffling%20of%20the%20view%20when%0A%20%20%20%20%20%20%20%20%20*%20item%20changes%20may%20be%20frequent.%0A%20%20%20%20%20%20%20%20%20*%2Fdelay%3ANumber%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20Count%20of%20currently%20rendered%20items%20after%20%60filter%60%20(if%20any)%20has%20been%20applied.%0A%20%20%20%20%20%20%20%20%20*%20If%20%22chunking%20mode%22%20is%20enabled%2C%20%60renderedItemCount%60%20is%20updated%20each%20time%20a%0A%20%20%20%20%20%20%20%20%20*%20set%20of%20template%20instances%20is%20rendered.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%2FrenderedItemCount%3A%7Btype%3ANumber%2Cnotify%3Atrue%2CreadOnly%3Atrue%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20Defines%20an%20initial%20count%20of%20template%20instances%20to%20render%20after%20setting%0A%20%20%20%20%20%20%20%20%20*%20the%20%60items%60%20array%2C%20before%20the%20next%20paint%2C%20and%20puts%20the%20%60dom-repeat%60%0A%20%20%20%20%20%20%20%20%20*%20into%20%22chunking%20mode%22.%20%20The%20remaining%20items%20will%20be%20created%20and%20rendered%0A%20%20%20%20%20%20%20%20%20*%20incrementally%20at%20each%20animation%20frame%20therof%20until%20all%20instances%20have%0A%20%20%20%20%20%20%20%20%20*%20been%20rendered.%0A%20%20%20%20%20%20%20%20%20*%2FinitialCount%3A%7Btype%3ANumber%2Cobserver%3A'__initializeChunking'%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20When%20%60initialCount%60%20is%20used%2C%20this%20property%20defines%20a%20frame%20rate%20(in%0A%20%20%20%20%20%20%20%20%20*%20fps)%20to%20target%20by%20throttling%20the%20number%20of%20instances%20rendered%20each%0A%20%20%20%20%20%20%20%20%20*%20frame%20to%20not%20exceed%20the%20budget%20for%20the%20target%20frame%20rate.%20%20The%0A%20%20%20%20%20%20%20%20%20*%20framerate%20is%20effectively%20the%20number%20of%20%60requestAnimationFrame%60s%20that%0A%20%20%20%20%20%20%20%20%20*%20it%20tries%20to%20allow%20to%20actually%20fire%20in%20a%20given%20second.%20It%20does%20this%0A%20%20%20%20%20%20%20%20%20*%20by%20measuring%20the%20time%20between%20%60rAF%60s%20and%20continuously%20adjusting%20the%0A%20%20%20%20%20%20%20%20%20*%20number%20of%20items%20created%20each%20%60rAF%60%20to%20maintain%20the%20target%20framerate.%0A%20%20%20%20%20%20%20%20%20*%20Setting%20this%20to%20a%20higher%20number%20allows%20lower%20latency%20and%20higher%0A%20%20%20%20%20%20%20%20%20*%20throughput%20for%20event%20handlers%20and%20other%20tasks%2C%20but%20results%20in%20a%0A%20%20%20%20%20%20%20%20%20*%20longer%20time%20for%20the%20remaining%20items%20to%20complete%20rendering.%0A%20%20%20%20%20%20%20%20%20*%2FtargetFramerate%3A%7Btype%3ANumber%2Cvalue%3A20%7D%2C_targetFrameTime%3A%7Btype%3ANumber%2Ccomputed%3A'__computeFrameTime(targetFramerate)'%7D%7D%3B%7D%7D%2C%7Bkey%3A'observers'%2Cget%3Afunction%20get()%7Breturn%5B'__itemsChanged(items.*)'%5D%3B%7D%7D%5D)%3Bfunction%20DomRepeat()%7B_classCallCheck(this%2CDomRepeat)%3Bvar%20_this%3D_possibleConstructorReturn(this%2C(DomRepeat.__proto__%7C%7CObject.getPrototypeOf(DomRepeat)).call(this))%3B_this.__instances%3D%5B%5D%3B_this.__limit%3DInfinity%3B_this.__pool%3D%5B%5D%3B_this.__renderDebouncer%3Dnull%3B_this.__itemsIdxToInstIdx%3D%7B%7D%3B_this.__chunkCount%3Dnull%3B_this.__lastChunkTime%3Dnull%3B_this.__sortFn%3Dnull%3B_this.__filterFn%3Dnull%3B_this.__observePaths%3Dnull%3B_this.__ctor%3Dnull%3B_this.__isDetached%3Dtrue%3B_this.template%3Dnull%3Breturn%20_this%3B%7D%2F**%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F_createClass(DomRepeat%2C%5B%7Bkey%3A'disconnectedCallback'%2Cvalue%3Afunction%20disconnectedCallback()%7B_get(DomRepeat.prototype.__proto__%7C%7CObject.getPrototypeOf(DomRepeat.prototype)%2C'disconnectedCallback'%2Cthis).call(this)%3Bthis.__isDetached%3Dtrue%3Bfor(var%20i%3D0%3Bi%3Cthis.__instances.length%3Bi%2B%2B)%7Bthis.__detachInstance(i)%3B%7D%7D%2F**%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'connectedCallback'%2Cvalue%3Afunction%20connectedCallback()%7B_get(DomRepeat.prototype.__proto__%7C%7CObject.getPrototypeOf(DomRepeat.prototype)%2C'connectedCallback'%2Cthis).call(this)%3Bthis.style.display%3D'none'%3B%2F%2F%20only%20perform%20attachment%20if%20the%20element%20was%20previously%20detached.%0Aif(this.__isDetached)%7Bthis.__isDetached%3Dfalse%3Bvar%20parent%3Dthis.parentNode%3Bfor(var%20i%3D0%3Bi%3Cthis.__instances.length%3Bi%2B%2B)%7Bthis.__attachInstance(i%2Cparent)%3B%7D%7D%7D%7D%2C%7Bkey%3A'__ensureTemplatized'%2Cvalue%3Afunction%20__ensureTemplatized()%7Bvar%20_this2%3Dthis%3B%2F%2F%20Templatizing%20(generating%20the%20instance%20constructor)%20needs%20to%20wait%0A%2F%2F%20until%20ready%2C%20since%20won't%20have%20its%20template%20content%20handed%20back%20to%0A%2F%2F%20it%20until%20then%0Aif(!this.__ctor)%7Bvar%20template%3Dthis.template%3D%2F**%20%40type%20%7BHTMLTemplateElement%7D%20*%2Fthis.querySelector('template')%3Bif(!template)%7B%2F%2F%20%2F%2F%20Wait%20until%20childList%20changes%20and%20template%20should%20be%20there%20by%20then%0Avar%20observer%3Dnew%20MutationObserver(function()%7Bif(_this2.querySelector('template'))%7Bobserver.disconnect()%3B_this2.__render()%3B%7Delse%7Bthrow%20new%20Error('dom-repeat%20requires%20a%20%3Ctemplate%3E%20child')%3B%7D%7D)%3Bobserver.observe(this%2C%7BchildList%3Atrue%7D)%3Breturn%20false%3B%7D%2F%2F%20Template%20instance%20props%20that%20should%20be%20excluded%20from%20forwarding%0Avar%20instanceProps%3D%7B%7D%3BinstanceProps%5Bthis.as%5D%3Dtrue%3BinstanceProps%5Bthis.indexAs%5D%3Dtrue%3BinstanceProps%5Bthis.itemsIndexAs%5D%3Dtrue%3Bthis.__ctor%3DPolymer.Templatize.templatize(template%2Cthis%2C%7BmutableData%3Athis.mutableData%2CparentModel%3Atrue%2CinstanceProps%3AinstanceProps%2C%2F**%0A%20%20%20%20%20%20%20%20%20%20%20*%20%40this%20%7Bthis%7D%0A%20%20%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20prop%20Property%20to%20set%0A%20%20%20%20%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%20property%20to%0A%20%20%20%20%20%20%20%20%20%20%20*%2FforwardHostProp%3Afunction%20forwardHostProp(prop%2Cvalue)%7Bvar%20i%24%3Dthis.__instances%3Bfor(var%20i%3D0%2Cinst%3Bi%3Ci%24.length%26%26(inst%3Di%24%5Bi%5D)%3Bi%2B%2B)%7Binst.forwardHostProp(prop%2Cvalue)%3B%7D%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20%20%20*%20%40this%20%7Bthis%7D%0A%20%20%20%20%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20inst%20Instance%20to%20notify%0A%20%20%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20prop%20Property%20to%20notify%0A%20%20%20%20%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20notify%0A%20%20%20%20%20%20%20%20%20%20%20*%2FnotifyInstanceProp%3Afunction%20notifyInstanceProp(inst%2Cprop%2Cvalue)%7Bif(Polymer.Path.matches(this.as%2Cprop))%7Bvar%20idx%3Dinst%5Bthis.itemsIndexAs%5D%3Bif(prop%3D%3Dthis.as)%7Bthis.items%5Bidx%5D%3Dvalue%3B%7Dvar%20path%3DPolymer.Path.translate(this.as%2C'items.'%2Bidx%2Cprop)%3Bthis.notifyPath(path%2Cvalue)%3B%7D%7D%7D)%3B%7Dreturn%20true%3B%7D%7D%2C%7Bkey%3A'__getMethodHost'%2Cvalue%3Afunction%20__getMethodHost()%7B%2F%2F%20Technically%20this%20should%20be%20the%20owner%20of%20the%20outermost%20template.%0A%2F%2F%20In%20shadow%20dom%2C%20this%20is%20always%20getRootNode().host%2C%20but%20we%20can%0A%2F%2F%20approximate%20this%20via%20cooperation%20with%20our%20dataHost%20always%20setting%0A%2F%2F%20%60_methodHost%60%20as%20long%20as%20there%20were%20bindings%20(or%20id's)%20on%20this%0A%2F%2F%20instance%20causing%20it%20to%20get%20a%20dataHost.%0Areturn%20this.__dataHost._methodHost%7C%7Cthis.__dataHost%3B%7D%7D%2C%7Bkey%3A'__functionFromPropertyValue'%2Cvalue%3Afunction%20__functionFromPropertyValue(functionOrMethodName)%7Bif(typeof%20functionOrMethodName%3D%3D%3D'string')%7Bvar%20methodName%3DfunctionOrMethodName%3Bvar%20obj%3Dthis.__getMethodHost()%3Breturn%20function()%7Breturn%20obj%5BmethodName%5D.apply(obj%2Carguments)%3B%7D%3B%7Dreturn%20functionOrMethodName%3B%7D%7D%2C%7Bkey%3A'__sortChanged'%2Cvalue%3Afunction%20__sortChanged(sort)%7Bthis.__sortFn%3Dthis.__functionFromPropertyValue(sort)%3Bif(this.items)%7Bthis.__debounceRender(this.__render)%3B%7D%7D%7D%2C%7Bkey%3A'__filterChanged'%2Cvalue%3Afunction%20__filterChanged(filter)%7Bthis.__filterFn%3Dthis.__functionFromPropertyValue(filter)%3Bif(this.items)%7Bthis.__debounceRender(this.__render)%3B%7D%7D%7D%2C%7Bkey%3A'__computeFrameTime'%2Cvalue%3Afunction%20__computeFrameTime(rate)%7Breturn%20Math.ceil(1000%2Frate)%3B%7D%7D%2C%7Bkey%3A'__initializeChunking'%2Cvalue%3Afunction%20__initializeChunking()%7Bif(this.initialCount)%7Bthis.__limit%3Dthis.initialCount%3Bthis.__chunkCount%3Dthis.initialCount%3Bthis.__lastChunkTime%3Dperformance.now()%3B%7D%7D%7D%2C%7Bkey%3A'__tryRenderChunk'%2Cvalue%3Afunction%20__tryRenderChunk()%7B%2F%2F%20Debounced%20so%20that%20multiple%20calls%20through%20%60_render%60%20between%20animation%0A%2F%2F%20frames%20only%20queue%20one%20new%20rAF%20(e.g.%20array%20mutation%20%26%20chunked%20render)%0Aif(this.items%26%26this.__limit%3Cthis.items.length)%7Bthis.__debounceRender(this.__requestRenderChunk)%3B%7D%7D%7D%2C%7Bkey%3A'__requestRenderChunk'%2Cvalue%3Afunction%20__requestRenderChunk()%7Bvar%20_this3%3Dthis%3BrequestAnimationFrame(function()%7Breturn%20_this3.__renderChunk()%3B%7D)%3B%7D%7D%2C%7Bkey%3A'__renderChunk'%2Cvalue%3Afunction%20__renderChunk()%7B%2F%2F%20Simple%20auto%20chunkSize%20throttling%20algorithm%20based%20on%20feedback%20loop%3A%0A%2F%2F%20measure%20actual%20time%20between%20frames%20and%20scale%20chunk%20count%20by%20ratio%0A%2F%2F%20of%20target%2Factual%20frame%20time%0Avar%20currChunkTime%3Dperformance.now()%3Bvar%20ratio%3Dthis._targetFrameTime%2F(currChunkTime-this.__lastChunkTime)%3Bthis.__chunkCount%3DMath.round(this.__chunkCount*ratio)%7C%7C1%3Bthis.__limit%2B%3Dthis.__chunkCount%3Bthis.__lastChunkTime%3DcurrChunkTime%3Bthis.__debounceRender(this.__render)%3B%7D%7D%2C%7Bkey%3A'__observeChanged'%2Cvalue%3Afunction%20__observeChanged()%7Bthis.__observePaths%3Dthis.observe%26%26this.observe.replace('.*'%2C'.').split('%20')%3B%7D%7D%2C%7Bkey%3A'__itemsChanged'%2Cvalue%3Afunction%20__itemsChanged(change)%7Bif(this.items%26%26!Array.isArray(this.items))%7Bconsole.warn('dom-repeat%20expected%20array%20for%20%60items%60%2C%20found'%2Cthis.items)%3B%7D%2F%2F%20If%20path%20was%20to%20an%20item%20(e.g.%20'items.3'%20or%20'items.3.foo')%2C%20forward%20the%0A%2F%2F%20path%20to%20that%20instance%20synchronously%20(returns%20false%20for%20non-item%20paths)%0Aif(!this.__handleItemPath(change.path%2Cchange.value))%7B%2F%2F%20Otherwise%2C%20the%20array%20was%20reset%20('items')%20or%20spliced%20('items.splices')%2C%0A%2F%2F%20so%20queue%20a%20full%20refresh%0Athis.__initializeChunking()%3Bthis.__debounceRender(this.__render)%3B%7D%7D%7D%2C%7Bkey%3A'__handleObservedPaths'%2Cvalue%3Afunction%20__handleObservedPaths(path)%7B%2F%2F%20Handle%20cases%20where%20path%20changes%20should%20cause%20a%20re-sort%2Ffilter%0Aif(this.__sortFn%7C%7Cthis.__filterFn)%7Bif(!path)%7B%2F%2F%20Always%20re-render%20if%20the%20item%20itself%20changed%0Athis.__debounceRender(this.__render%2Cthis.delay)%3B%7Delse%20if(this.__observePaths)%7B%2F%2F%20Otherwise%2C%20re-render%20if%20the%20path%20changed%20matches%20an%20observed%20path%0Avar%20paths%3Dthis.__observePaths%3Bfor(var%20i%3D0%3Bi%3Cpaths.length%3Bi%2B%2B)%7Bif(path.indexOf(paths%5Bi%5D)%3D%3D%3D0)%7Bthis.__debounceRender(this.__render%2Cthis.delay)%3B%7D%7D%7D%7D%7D%2F**%0A%20%20%20%20%20*%20%40param%20%7Bfunction(this%3ADomRepeat)%7D%20fn%20Function%20to%20debounce.%0A%20%20%20%20%20*%20%40param%20%7Bnumber%3D%7D%20delay%20Delay%20in%20ms%20to%20debounce%20by.%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'__debounceRender'%2Cvalue%3Afunction%20__debounceRender(fn)%7Bvar%20delay%3Darguments.length%3E1%26%26arguments%5B1%5D!%3D%3Dundefined%3Farguments%5B1%5D%3A0%3Bthis.__renderDebouncer%3DPolymer.Debouncer.debounce(this.__renderDebouncer%2Cdelay%3E0%3FPolymer.Async.timeOut.after(delay)%3APolymer.Async.microTask%2Cfn.bind(this))%3BPolymer.enqueueDebouncer(this.__renderDebouncer)%3B%7D%2F**%0A%20%20%20%20%20*%20Forces%20the%20element%20to%20render%20its%20content.%20Normally%20rendering%20is%0A%20%20%20%20%20*%20asynchronous%20to%20a%20provoking%20change.%20This%20is%20done%20for%20efficiency%20so%0A%20%20%20%20%20*%20that%20multiple%20changes%20trigger%20only%20a%20single%20render.%20The%20render%20method%0A%20%20%20%20%20*%20should%20be%20called%20if%2C%20for%20example%2C%20template%20rendering%20is%20required%20to%0A%20%20%20%20%20*%20validate%20application%20state.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'render'%2Cvalue%3Afunction%20render()%7B%2F%2F%20Queue%20this%20repeater%2C%20then%20flush%20all%20in%20order%0Athis.__debounceRender(this.__render)%3BPolymer.flush()%3B%7D%7D%2C%7Bkey%3A'__render'%2Cvalue%3Afunction%20__render()%7Bif(!this.__ensureTemplatized())%7B%2F%2F%20No%20template%20found%20yet%0Areturn%3B%7Dthis.__applyFullRefresh()%3B%2F%2F%20Reset%20the%20pool%0A%2F%2F%20TODO(kschaaf)%3A%20Reuse%20pool%20across%20turns%20and%20nested%20templates%0A%2F%2F%20Now%20that%20objects%2Farrays%20are%20re-evaluated%20when%20set%2C%20we%20can%20safely%0A%2F%2F%20reuse%20pooled%20instances%20across%20turns%2C%20however%20we%20still%20need%20to%20decide%0A%2F%2F%20semantics%20regarding%20how%20long%20to%20hold%2C%20how%20many%20to%20hold%2C%20etc.%0Athis.__pool.length%3D0%3B%2F%2F%20Set%20rendered%20item%20count%0Athis._setRenderedItemCount(this.__instances.length)%3B%2F%2F%20Notify%20users%0Athis.dispatchEvent(new%20CustomEvent('dom-change'%2C%7Bbubbles%3Atrue%2Ccomposed%3Atrue%7D))%3B%2F%2F%20Check%20to%20see%20if%20we%20need%20to%20render%20more%20items%0Athis.__tryRenderChunk()%3B%7D%7D%2C%7Bkey%3A'__applyFullRefresh'%2Cvalue%3Afunction%20__applyFullRefresh()%7Bvar%20_this4%3Dthis%3Bvar%20items%3Dthis.items%7C%7C%5B%5D%3Bvar%20isntIdxToItemsIdx%3Dnew%20Array(items.length)%3Bfor(var%20i%3D0%3Bi%3Citems.length%3Bi%2B%2B)%7BisntIdxToItemsIdx%5Bi%5D%3Di%3B%7D%2F%2F%20Apply%20user%20filter%0Aif(this.__filterFn)%7BisntIdxToItemsIdx%3DisntIdxToItemsIdx.filter(function(i%2Cidx%2Carray)%7Breturn%20_this4.__filterFn(items%5Bi%5D%2Cidx%2Carray)%3B%7D)%3B%7D%2F%2F%20Apply%20user%20sort%0Aif(this.__sortFn)%7BisntIdxToItemsIdx.sort(function(a%2Cb)%7Breturn%20_this4.__sortFn(items%5Ba%5D%2Citems%5Bb%5D)%3B%7D)%3B%7D%2F%2F%20items-%3Einst%20map%20kept%20for%20item%20path%20forwarding%0Avar%20itemsIdxToInstIdx%3Dthis.__itemsIdxToInstIdx%3D%7B%7D%3Bvar%20instIdx%3D0%3B%2F%2F%20Generate%20instances%20and%20assign%20items%0Avar%20limit%3DMath.min(isntIdxToItemsIdx.length%2Cthis.__limit)%3Bfor(%3BinstIdx%3Climit%3BinstIdx%2B%2B)%7Bvar%20inst%3Dthis.__instances%5BinstIdx%5D%3Bvar%20itemIdx%3DisntIdxToItemsIdx%5BinstIdx%5D%3Bvar%20item%3Ditems%5BitemIdx%5D%3BitemsIdxToInstIdx%5BitemIdx%5D%3DinstIdx%3Bif(inst)%7Binst._setPendingProperty(this.as%2Citem)%3Binst._setPendingProperty(this.indexAs%2CinstIdx)%3Binst._setPendingProperty(this.itemsIndexAs%2CitemIdx)%3Binst._flushProperties()%3B%7Delse%7Bthis.__insertInstance(item%2CinstIdx%2CitemIdx)%3B%7D%7D%2F%2F%20Remove%20any%20extra%20instances%20from%20previous%20state%0Afor(var%20_i%3Dthis.__instances.length-1%3B_i%3E%3DinstIdx%3B_i--)%7Bthis.__detachAndRemoveInstance(_i)%3B%7D%7D%7D%2C%7Bkey%3A'__detachInstance'%2Cvalue%3Afunction%20__detachInstance(idx)%7Bvar%20inst%3Dthis.__instances%5Bidx%5D%3Bfor(var%20i%3D0%3Bi%3Cinst.children.length%3Bi%2B%2B)%7Bvar%20el%3Dinst.children%5Bi%5D%3Binst.root.appendChild(el)%3B%7Dreturn%20inst%3B%7D%7D%2C%7Bkey%3A'__attachInstance'%2Cvalue%3Afunction%20__attachInstance(idx%2Cparent)%7Bvar%20inst%3Dthis.__instances%5Bidx%5D%3Bparent.insertBefore(inst.root%2Cthis)%3B%7D%7D%2C%7Bkey%3A'__detachAndRemoveInstance'%2Cvalue%3Afunction%20__detachAndRemoveInstance(idx)%7Bvar%20inst%3Dthis.__detachInstance(idx)%3Bif(inst)%7Bthis.__pool.push(inst)%3B%7Dthis.__instances.splice(idx%2C1)%3B%7D%7D%2C%7Bkey%3A'__stampInstance'%2Cvalue%3Afunction%20__stampInstance(item%2CinstIdx%2CitemIdx)%7Bvar%20model%3D%7B%7D%3Bmodel%5Bthis.as%5D%3Ditem%3Bmodel%5Bthis.indexAs%5D%3DinstIdx%3Bmodel%5Bthis.itemsIndexAs%5D%3DitemIdx%3Breturn%20new%20this.__ctor(model)%3B%7D%7D%2C%7Bkey%3A'__insertInstance'%2Cvalue%3Afunction%20__insertInstance(item%2CinstIdx%2CitemIdx)%7Bvar%20inst%3Dthis.__pool.pop()%3Bif(inst)%7B%2F%2F%20TODO(kschaaf)%3A%20If%20the%20pool%20is%20shared%20across%20turns%2C%20hostProps%0A%2F%2F%20need%20to%20be%20re-set%20to%20reused%20instances%20in%20addition%20to%20item%0Ainst._setPendingProperty(this.as%2Citem)%3Binst._setPendingProperty(this.indexAs%2CinstIdx)%3Binst._setPendingProperty(this.itemsIndexAs%2CitemIdx)%3Binst._flushProperties()%3B%7Delse%7Binst%3Dthis.__stampInstance(item%2CinstIdx%2CitemIdx)%3B%7Dvar%20beforeRow%3Dthis.__instances%5BinstIdx%2B1%5D%3Bvar%20beforeNode%3DbeforeRow%3FbeforeRow.children%5B0%5D%3Athis%3Bthis.parentNode.insertBefore(inst.root%2CbeforeNode)%3Bthis.__instances%5BinstIdx%5D%3Dinst%3Breturn%20inst%3B%7D%2F%2F%20Implements%20extension%20point%20from%20Templatize%20mixin%0A%2F**%0A%20%20%20%20%20*%20Shows%20or%20hides%20the%20template%20instance%20top%20level%20child%20elements.%20For%0A%20%20%20%20%20*%20text%20nodes%2C%20%60textContent%60%20is%20removed%20while%20%22hidden%22%20and%20replaced%20when%0A%20%20%20%20%20*%20%22shown.%22%0A%20%20%20%20%20*%20%40param%20%7Bboolean%7D%20hidden%20Set%20to%20true%20to%20hide%20the%20children%3B%0A%20%20%20%20%20*%20set%20to%20false%20to%20show%20them.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_showHideChildren'%2Cvalue%3Afunction%20_showHideChildren(hidden)%7Bfor(var%20i%3D0%3Bi%3Cthis.__instances.length%3Bi%2B%2B)%7Bthis.__instances%5Bi%5D._showHideChildren(hidden)%3B%7D%7D%2F%2F%20Called%20as%20a%20side%20effect%20of%20a%20host%20items.%3Ckey%3E.%3Cpath%3E%20path%20change%2C%0A%2F%2F%20responsible%20for%20notifying%20item.%3Cpath%3E%20changes%20to%20inst%20for%20key%0A%7D%2C%7Bkey%3A'__handleItemPath'%2Cvalue%3Afunction%20__handleItemPath(path%2Cvalue)%7Bvar%20itemsPath%3Dpath.slice(6)%3B%2F%2F%20'items.'.length%20%3D%3D%206%0Avar%20dot%3DitemsPath.indexOf('.')%3Bvar%20itemsIdx%3Ddot%3C0%3FitemsPath%3AitemsPath.substring(0%2Cdot)%3B%2F%2F%20If%20path%20was%20index%20into%20array...%0Aif(itemsIdx%3D%3DparseInt(itemsIdx%2C10))%7Bvar%20itemSubPath%3Ddot%3C0%3F''%3AitemsPath.substring(dot%2B1)%3B%2F%2F%20If%20the%20path%20is%20observed%2C%20it%20will%20trigger%20a%20full%20refresh%0Athis.__handleObservedPaths(itemSubPath)%3B%2F%2F%20Note%2C%20even%20if%20a%20rull%20refresh%20is%20triggered%2C%20always%20do%20the%20path%0A%2F%2F%20notification%20because%20unless%20mutableData%20is%20used%20for%20dom-repeat%0A%2F%2F%20and%20all%20elements%20in%20the%20instance%20subtree%2C%20a%20full%20refresh%20may%0A%2F%2F%20not%20trigger%20the%20proper%20update.%0Avar%20instIdx%3Dthis.__itemsIdxToInstIdx%5BitemsIdx%5D%3Bvar%20inst%3Dthis.__instances%5BinstIdx%5D%3Bif(inst)%7Bvar%20itemPath%3Dthis.as%2B(itemSubPath%3F'.'%2BitemSubPath%3A'')%3B%2F%2F%20This%20is%20effectively%20%60notifyPath%60%2C%20but%20avoids%20some%20of%20the%20overhead%0A%2F%2F%20of%20the%20public%20API%0Ainst._setPendingPropertyOrPath(itemPath%2Cvalue%2Cfalse%2Ctrue)%3Binst._flushProperties()%3B%7Dreturn%20true%3B%7D%7D%2F**%0A%20%20%20%20%20*%20Returns%20the%20item%20associated%20with%20a%20given%20element%20stamped%20by%0A%20%20%20%20%20*%20this%20%60dom-repeat%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Note%2C%20to%20modify%20sub-properties%20of%20the%20item%2C%0A%20%20%20%20%20*%20%60modelForElement(el).set('item.%3Csub-prop%3E'%2C%20value)%60%0A%20%20%20%20%20*%20should%20be%20used.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7B!HTMLElement%7D%20el%20Element%20for%20which%20to%20return%20the%20item.%0A%20%20%20%20%20*%20%40return%20%7B*%7D%20Item%20associated%20with%20the%20element.%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'itemForElement'%2Cvalue%3Afunction%20itemForElement(el)%7Bvar%20instance%3Dthis.modelForElement(el)%3Breturn%20instance%26%26instance%5Bthis.as%5D%3B%7D%2F**%0A%20%20%20%20%20*%20Returns%20the%20inst%20index%20for%20a%20given%20element%20stamped%20by%20this%20%60dom-repeat%60.%0A%20%20%20%20%20*%20If%20%60sort%60%20is%20provided%2C%20the%20index%20will%20reflect%20the%20sorted%20order%20(rather%0A%20%20%20%20%20*%20than%20the%20original%20array%20order).%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7B!HTMLElement%7D%20el%20Element%20for%20which%20to%20return%20the%20index.%0A%20%20%20%20%20*%20%40return%20%7B%3Fnumber%7D%20Row%20index%20associated%20with%20the%20element%20(note%20this%20may%0A%20%20%20%20%20*%20%20%20not%20correspond%20to%20the%20array%20index%20if%20a%20user%20%60sort%60%20is%20applied).%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'indexForElement'%2Cvalue%3Afunction%20indexForElement(el)%7Bvar%20instance%3Dthis.modelForElement(el)%3Breturn%20instance%26%26instance%5Bthis.indexAs%5D%3B%7D%2F**%0A%20%20%20%20%20*%20Returns%20the%20template%20%22model%22%20associated%20with%20a%20given%20element%2C%20which%0A%20%20%20%20%20*%20serves%20as%20the%20binding%20scope%20for%20the%20template%20instance%20the%20element%20is%0A%20%20%20%20%20*%20contained%20in.%20A%20template%20model%20is%20an%20instance%20of%20%60Polymer.Base%60%2C%20and%0A%20%20%20%20%20*%20should%20be%20used%20to%20manipulate%20data%20associated%20with%20this%20template%20instance.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%20%20let%20model%20%3D%20modelForElement(el)%3B%0A%20%20%20%20%20*%20%20%20if%20(model.index%20%3C%2010)%20%7B%0A%20%20%20%20%20*%20%20%20%20%20model.set('item.checked'%2C%20true)%3B%0A%20%20%20%20%20*%20%20%20%7D%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7B!HTMLElement%7D%20el%20Element%20for%20which%20to%20return%20a%20template%20model.%0A%20%20%20%20%20*%20%40return%20%7BTemplateInstanceBase%7D%20Model%20representing%20the%20binding%20scope%20for%0A%20%20%20%20%20*%20%20%20the%20element.%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'modelForElement'%2Cvalue%3Afunction%20modelForElement(el)%7Breturn%20Polymer.Templatize.modelForElement(this.template%2Cel)%3B%7D%7D%5D)%3Breturn%20DomRepeat%3B%7D(domRepeatBase)%3BcustomElements.define(DomRepeat.is%2CDomRepeat)%3B%2F**%20%40const%20*%2FPolymer.DomRepeat%3DDomRepeat%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Felements%2Fdom-repeat.html.js%0A",
            "resourceBytes": 25690,
            "encodedBytes": 0,
            "unusedBytes": 11689
          },
          {
            "name": "data:text/javascript;charset=utf-8,var%20_get%3Dfunction%20get(object%2Cproperty%2Creceiver)%7Bif(object%3D%3D%3Dnull)object%3DFunction.prototype%3Bvar%20desc%3DObject.getOwnPropertyDescriptor(object%2Cproperty)%3Bif(desc%3D%3D%3Dundefined)%7Bvar%20parent%3DObject.getPrototypeOf(object)%3Bif(parent%3D%3D%3Dnull)%7Breturn%20undefined%3B%7Delse%7Breturn%20get(parent%2Cproperty%2Creceiver)%3B%7D%7Delse%20if(%22value%22in%20desc)%7Breturn%20desc.value%3B%7Delse%7Bvar%20getter%3Ddesc.get%3Bif(getter%3D%3D%3Dundefined)%7Breturn%20undefined%3B%7Dreturn%20getter.call(receiver)%3B%7D%7D%3Bvar%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3B%2F**%0A%20%20%20*%20The%20%60%3Cdom-if%3E%60%20element%20will%20stamp%20a%20light-dom%20%60%3Ctemplate%3E%60%20child%20when%0A%20%20%20*%20the%20%60if%60%20property%20becomes%20truthy%2C%20and%20the%20template%20can%20use%20Polymer%0A%20%20%20*%20data-binding%20and%20declarative%20event%20features%20when%20used%20in%20the%20context%20of%0A%20%20%20*%20a%20Polymer%20element's%20template.%0A%20%20%20*%0A%20%20%20*%20When%20%60if%60%20becomes%20falsy%2C%20the%20stamped%20content%20is%20hidden%20but%20not%0A%20%20%20*%20removed%20from%20dom.%20When%20%60if%60%20subsequently%20becomes%20truthy%20again%2C%20the%20content%0A%20%20%20*%20is%20simply%20re-shown.%20This%20approach%20is%20used%20due%20to%20its%20favorable%20performance%0A%20%20%20*%20characteristics%3A%20the%20expense%20of%20creating%20template%20content%20is%20paid%20only%0A%20%20%20*%20once%20and%20lazily.%0A%20%20%20*%0A%20%20%20*%20Set%20the%20%60restamp%60%20property%20to%20true%20to%20force%20the%20stamped%20content%20to%20be%0A%20%20%20*%20created%20%2F%20destroyed%20when%20the%20%60if%60%20condition%20changes.%0A%20%20%20*%0A%20%20%20*%20%40customElement%0A%20%20%20*%20%40polymer%0A%20%20%20*%20%40extends%20Polymer.Element%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Custom%20element%20that%20conditionally%20stamps%20and%20hides%20or%20removes%0A%20%20%20*%20%20%20template%20content%20based%20on%20a%20boolean%20flag.%0A%20%20%20*%2Fvar%20DomIf%3Dfunction(_Polymer%24Element)%7B_inherits(DomIf%2C_Polymer%24Element)%3B_createClass(DomIf%2Cnull%2C%5B%7Bkey%3A'is'%2C%2F%2F%20Not%20needed%20to%20find%20template%3B%20can%20be%20removed%20once%20the%20analyzer%0A%2F%2F%20can%20find%20the%20tag%20name%20from%20customElements.define%20call%0Aget%3Afunction%20get()%7Breturn'dom-if'%3B%7D%7D%2C%7Bkey%3A'template'%2Cget%3Afunction%20get()%7Breturn%20null%3B%7D%7D%2C%7Bkey%3A'properties'%2Cget%3Afunction%20get()%7Breturn%7B%2F**%0A%20%20%20%20%20%20%20%20%20*%20Fired%20whenever%20DOM%20is%20added%20or%20removed%2Fhidden%20by%20this%20template%20(by%0A%20%20%20%20%20%20%20%20%20*%20default%2C%20rendering%20occurs%20lazily).%20%20To%20force%20immediate%20rendering%2C%20call%0A%20%20%20%20%20%20%20%20%20*%20%60render%60.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40event%20dom-change%0A%20%20%20%20%20%20%20%20%20*%2F%2F**%0A%20%20%20%20%20%20%20%20%20*%20A%20boolean%20indicating%20whether%20this%20template%20should%20stamp.%0A%20%20%20%20%20%20%20%20%20*%2Fif%3A%7Btype%3ABoolean%2Cobserver%3A'__debounceRender'%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20When%20true%2C%20elements%20will%20be%20removed%20from%20DOM%20and%20discarded%20when%20%60if%60%0A%20%20%20%20%20%20%20%20%20*%20becomes%20false%20and%20re-created%20and%20added%20back%20to%20the%20DOM%20when%20%60if%60%0A%20%20%20%20%20%20%20%20%20*%20becomes%20true.%20%20By%20default%2C%20stamped%20elements%20will%20be%20hidden%20but%20left%0A%20%20%20%20%20%20%20%20%20*%20in%20the%20DOM%20when%20%60if%60%20becomes%20false%2C%20which%20is%20generally%20results%0A%20%20%20%20%20%20%20%20%20*%20in%20better%20performance.%0A%20%20%20%20%20%20%20%20%20*%2Frestamp%3A%7Btype%3ABoolean%2Cobserver%3A'__debounceRender'%7D%7D%3B%7D%7D%5D)%3Bfunction%20DomIf()%7B_classCallCheck(this%2CDomIf)%3Bvar%20_this%3D_possibleConstructorReturn(this%2C(DomIf.__proto__%7C%7CObject.getPrototypeOf(DomIf)).call(this))%3B_this.__renderDebouncer%3Dnull%3B_this.__invalidProps%3Dnull%3B_this.__instance%3Dnull%3B_this._lastIf%3Dfalse%3B_this.__ctor%3Dnull%3Breturn%20_this%3B%7D_createClass(DomIf%2C%5B%7Bkey%3A'__debounceRender'%2Cvalue%3Afunction%20__debounceRender()%7Bvar%20_this2%3Dthis%3B%2F%2F%20Render%20is%20async%20for%202%20reasons%3A%0A%2F%2F%201.%20To%20eliminate%20dom%20creation%20trashing%20if%20user%20code%20thrashes%20%60if%60%20in%20the%0A%2F%2F%20%20%20%20same%20turn.%20This%20was%20more%20common%20in%201.x%20where%20a%20compound%20computed%0A%2F%2F%20%20%20%20property%20could%20result%20in%20the%20result%20changing%20multiple%20times%2C%20but%20is%0A%2F%2F%20%20%20%20mitigated%20to%20a%20large%20extent%20by%20batched%20property%20processing%20in%202.x.%0A%2F%2F%202.%20To%20avoid%20double%20object%20propagation%20when%20a%20bag%20including%20values%20bound%0A%2F%2F%20%20%20%20to%20the%20%60if%60%20property%20as%20well%20as%20one%20or%20more%20hostProps%20could%20enqueue%0A%2F%2F%20%20%20%20the%20%3Cdom-if%3E%20to%20flush%20before%20the%20%3Ctemplate%3E's%20host%20property%0A%2F%2F%20%20%20%20forwarding.%20In%20that%20scenario%20creating%20an%20instance%20would%20result%20in%0A%2F%2F%20%20%20%20the%20host%20props%20being%20set%20once%2C%20and%20then%20the%20enqueued%20changes%20on%20the%0A%2F%2F%20%20%20%20template%20would%20set%20properties%20a%20second%20time%2C%20potentially%20causing%20an%0A%2F%2F%20%20%20%20object%20to%20be%20set%20to%20an%20instance%20more%20than%20once.%20%20Creating%20the%0A%2F%2F%20%20%20%20instance%20async%20from%20flushing%20data%20ensures%20this%20doesn't%20happen.%20If%0A%2F%2F%20%20%20%20we%20wanted%20a%20sync%20option%20in%20the%20future%2C%20simply%20having%20%3Cdom-if%3E%20flush%0A%2F%2F%20%20%20%20(or%20clear)%20its%20template's%20pending%20host%20properties%20before%20creating%0A%2F%2F%20%20%20%20the%20instance%20would%20also%20avoid%20the%20problem.%0Athis.__renderDebouncer%3DPolymer.Debouncer.debounce(this.__renderDebouncer%2CPolymer.Async.microTask%2Cfunction()%7Breturn%20_this2.__render()%3B%7D)%3BPolymer.enqueueDebouncer(this.__renderDebouncer)%3B%7D%2F**%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'disconnectedCallback'%2Cvalue%3Afunction%20disconnectedCallback()%7B_get(DomIf.prototype.__proto__%7C%7CObject.getPrototypeOf(DomIf.prototype)%2C'disconnectedCallback'%2Cthis).call(this)%3Bif(!this.parentNode%7C%7Cthis.parentNode.nodeType%3D%3DNode.DOCUMENT_FRAGMENT_NODE%26%26!this.parentNode.host)%7Bthis.__teardownInstance()%3B%7D%7D%2F**%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'connectedCallback'%2Cvalue%3Afunction%20connectedCallback()%7B_get(DomIf.prototype.__proto__%7C%7CObject.getPrototypeOf(DomIf.prototype)%2C'connectedCallback'%2Cthis).call(this)%3Bthis.style.display%3D'none'%3Bif(this.if)%7Bthis.__debounceRender()%3B%7D%7D%2F**%0A%20%20%20%20%20*%20Forces%20the%20element%20to%20render%20its%20content.%20Normally%20rendering%20is%0A%20%20%20%20%20*%20asynchronous%20to%20a%20provoking%20change.%20This%20is%20done%20for%20efficiency%20so%0A%20%20%20%20%20*%20that%20multiple%20changes%20trigger%20only%20a%20single%20render.%20The%20render%20method%0A%20%20%20%20%20*%20should%20be%20called%20if%2C%20for%20example%2C%20template%20rendering%20is%20required%20to%0A%20%20%20%20%20*%20validate%20application%20state.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'render'%2Cvalue%3Afunction%20render()%7BPolymer.flush()%3B%7D%7D%2C%7Bkey%3A'__render'%2Cvalue%3Afunction%20__render()%7Bif(this.if)%7Bif(!this.__ensureInstance())%7B%2F%2F%20No%20template%20found%20yet%0Areturn%3B%7Dthis._showHideChildren()%3B%7Delse%20if(this.restamp)%7Bthis.__teardownInstance()%3B%7Dif(!this.restamp%26%26this.__instance)%7Bthis._showHideChildren()%3B%7Dif(this.if!%3Dthis._lastIf)%7Bthis.dispatchEvent(new%20CustomEvent('dom-change'%2C%7Bbubbles%3Atrue%2Ccomposed%3Atrue%7D))%3Bthis._lastIf%3Dthis.if%3B%7D%7D%7D%2C%7Bkey%3A'__ensureInstance'%2Cvalue%3Afunction%20__ensureInstance()%7Bvar%20_this3%3Dthis%3Bvar%20parentNode%3Dthis.parentNode%3B%2F%2F%20Guard%20against%20element%20being%20detached%20while%20render%20was%20queued%0Aif(parentNode)%7Bif(!this.__ctor)%7Bvar%20template%3D%2F**%20%40type%20%7BHTMLTemplateElement%7D%20*%2Fthis.querySelector('template')%3Bif(!template)%7B%2F%2F%20Wait%20until%20childList%20changes%20and%20template%20should%20be%20there%20by%20then%0Avar%20observer%3Dnew%20MutationObserver(function()%7Bif(_this3.querySelector('template'))%7Bobserver.disconnect()%3B_this3.__render()%3B%7Delse%7Bthrow%20new%20Error('dom-if%20requires%20a%20%3Ctemplate%3E%20child')%3B%7D%7D)%3Bobserver.observe(this%2C%7BchildList%3Atrue%7D)%3Breturn%20false%3B%7Dthis.__ctor%3DPolymer.Templatize.templatize(template%2Cthis%2C%7B%2F%2F%20dom-if%20templatizer%20instances%20require%20%60mutable%3A%20true%60%2C%20as%0A%2F%2F%20%60__syncHostProperties%60%20relies%20on%20that%20behavior%20to%20sync%20objects%0AmutableData%3Atrue%2C%2F**%0A%20%20%20%20%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20prop%20Property%20to%20forward%0A%20%20%20%20%20%20%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20of%20property%0A%20%20%20%20%20%20%20%20%20%20%20%20%20*%20%40this%20%7Bthis%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20*%2FforwardHostProp%3Afunction%20forwardHostProp(prop%2Cvalue)%7Bif(this.__instance)%7Bif(this.if)%7Bthis.__instance.forwardHostProp(prop%2Cvalue)%3B%7Delse%7B%2F%2F%20If%20we%20have%20an%20instance%20but%20are%20squelching%20host%20property%0A%2F%2F%20forwarding%20due%20to%20if%20being%20false%2C%20note%20the%20invalidated%0A%2F%2F%20properties%20so%20%60__syncHostProperties%60%20can%20sync%20them%20the%20next%0A%2F%2F%20time%20%60if%60%20becomes%20true%0Athis.__invalidProps%3Dthis.__invalidProps%7C%7CObject.create(null)%3Bthis.__invalidProps%5BPolymer.Path.root(prop)%5D%3Dtrue%3B%7D%7D%7D%7D)%3B%7Dif(!this.__instance)%7Bthis.__instance%3Dnew%20this.__ctor()%3BparentNode.insertBefore(this.__instance.root%2Cthis)%3B%7Delse%7Bthis.__syncHostProperties()%3Bvar%20c%24%3Dthis.__instance.children%3Bif(c%24%26%26c%24.length)%7B%2F%2F%20Detect%20case%20where%20dom-if%20was%20re-attached%20in%20new%20position%0Avar%20lastChild%3Dthis.previousSibling%3Bif(lastChild!%3D%3Dc%24%5Bc%24.length-1%5D)%7Bfor(var%20i%3D0%2Cn%3Bi%3Cc%24.length%26%26(n%3Dc%24%5Bi%5D)%3Bi%2B%2B)%7BparentNode.insertBefore(n%2Cthis)%3B%7D%7D%7D%7D%7Dreturn%20true%3B%7D%7D%2C%7Bkey%3A'__syncHostProperties'%2Cvalue%3Afunction%20__syncHostProperties()%7Bvar%20props%3Dthis.__invalidProps%3Bif(props)%7Bfor(var%20prop%20in%20props)%7Bthis.__instance._setPendingProperty(prop%2Cthis.__dataHost%5Bprop%5D)%3B%7Dthis.__invalidProps%3Dnull%3Bthis.__instance._flushProperties()%3B%7D%7D%7D%2C%7Bkey%3A'__teardownInstance'%2Cvalue%3Afunction%20__teardownInstance()%7Bif(this.__instance)%7Bvar%20c%24%3Dthis.__instance.children%3Bif(c%24%26%26c%24.length)%7B%2F%2F%20use%20first%20child%20parent%2C%20for%20case%20when%20dom-if%20may%20have%20been%20detached%0Avar%20parent%3Dc%24%5B0%5D.parentNode%3B%2F%2F%20Instance%20children%20may%20be%20disconnected%20from%20parents%20when%20dom-if%0A%2F%2F%20detaches%20if%20a%20tree%20was%20innerHTML'ed%0Aif(parent)%7Bfor(var%20i%3D0%2Cn%3Bi%3Cc%24.length%26%26(n%3Dc%24%5Bi%5D)%3Bi%2B%2B)%7Bparent.removeChild(n)%3B%7D%7D%7Dthis.__instance%3Dnull%3Bthis.__invalidProps%3Dnull%3B%7D%7D%2F**%0A%20%20%20%20%20*%20Shows%20or%20hides%20the%20template%20instance%20top%20level%20child%20elements.%20For%0A%20%20%20%20%20*%20text%20nodes%2C%20%60textContent%60%20is%20removed%20while%20%22hidden%22%20and%20replaced%20when%0A%20%20%20%20%20*%20%22shown.%22%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_showHideChildren'%2Cvalue%3Afunction%20_showHideChildren()%7Bvar%20hidden%3Dthis.__hideTemplateChildren__%7C%7C!this.if%3Bif(this.__instance)%7Bthis.__instance._showHideChildren(hidden)%3B%7D%7D%7D%5D)%3Breturn%20DomIf%3B%7D(Polymer.Element)%3BcustomElements.define(DomIf.is%2CDomIf)%3B%2F**%20%40const%20*%2FPolymer.DomIf%3DDomIf%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Felements%2Fdom-if.html.js%0A",
            "resourceBytes": 10133,
            "encodedBytes": 0,
            "unusedBytes": 5870
          },
          {
            "name": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3B%2F**%0A%20%20%20*%20Element%20mixin%20for%20recording%20dynamic%20associations%20between%20item%20paths%20in%20a%0A%20%20%20*%20master%20%60items%60%20array%20and%20a%20%60selected%60%20array%20such%20that%20path%20changes%20to%20the%0A%20%20%20*%20master%20array%20(at%20the%20host)%20element%20or%20elsewhere%20via%20data-binding)%20are%0A%20%20%20*%20correctly%20propagated%20to%20items%20in%20the%20selected%20array%20and%20vice-versa.%0A%20%20%20*%0A%20%20%20*%20The%20%60items%60%20property%20accepts%20an%20array%20of%20user%20data%2C%20and%20via%20the%0A%20%20%20*%20%60select(item)%60%20and%20%60deselect(item)%60%20API%2C%20updates%20the%20%60selected%60%20property%0A%20%20%20*%20which%20may%20be%20bound%20to%20other%20parts%20of%20the%20application%2C%20and%20any%20changes%20to%0A%20%20%20*%20sub-fields%20of%20%60selected%60%20item(s)%20will%20be%20kept%20in%20sync%20with%20items%20in%20the%0A%20%20%20*%20%60items%60%20array.%20%20When%20%60multi%60%20is%20false%2C%20%60selected%60%20is%20a%20property%0A%20%20%20*%20representing%20the%20last%20selected%20item.%20%20When%20%60multi%60%20is%20true%2C%20%60selected%60%0A%20%20%20*%20is%20an%20array%20of%20multiply%20selected%20items.%0A%20%20%20*%0A%20%20%20*%20%40polymer%0A%20%20%20*%20%40mixinFunction%0A%20%20%20*%20%40appliesMixin%20Polymer.ElementMixin%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Element%20mixin%20for%20recording%20dynamic%20associations%20between%20item%20paths%20in%20a%0A%20%20%20*%20master%20%60items%60%20array%20and%20a%20%60selected%60%20array%0A%20%20%20*%2Fvar%20ArraySelectorMixin%3DPolymer.dedupingMixin(function(superClass)%7B%2F**%0A%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20*%20%40extends%20%7BsuperClass%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_ElementMixin%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Fvar%20elementBase%3DPolymer.ElementMixin(superClass)%3B%2F**%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40mixinClass%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_ArraySelectorMixin%7D%0A%20%20%20%20%20*%20%40unrestricted%0A%20%20%20%20%20*%2Fvar%20ArraySelectorMixin%3Dfunction(_elementBase)%7B_inherits(ArraySelectorMixin%2C_elementBase)%3B_createClass(ArraySelectorMixin%2Cnull%2C%5B%7Bkey%3A'properties'%2Cget%3Afunction%20get()%7Breturn%7B%2F**%0A%20%20%20%20%20%20%20%20%20%20%20*%20An%20array%20containing%20items%20from%20which%20selection%20will%20be%20made.%0A%20%20%20%20%20%20%20%20%20%20%20*%2Fitems%3A%7Btype%3AArray%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20%20%20*%20When%20%60true%60%2C%20multiple%20items%20may%20be%20selected%20at%20once%20(in%20this%20case%2C%0A%20%20%20%20%20%20%20%20%20%20%20*%20%60selected%60%20is%20an%20array%20of%20currently%20selected%20items).%20%20When%20%60false%60%2C%0A%20%20%20%20%20%20%20%20%20%20%20*%20only%20one%20item%20may%20be%20selected%20at%20a%20time.%0A%20%20%20%20%20%20%20%20%20%20%20*%2Fmulti%3A%7Btype%3ABoolean%2Cvalue%3Afalse%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20%20%20*%20When%20%60multi%60%20is%20true%2C%20this%20is%20an%20array%20that%20contains%20any%20selected.%0A%20%20%20%20%20%20%20%20%20%20%20*%20When%20%60multi%60%20is%20false%2C%20this%20is%20the%20currently%20selected%20item%2C%20or%20%60null%60%0A%20%20%20%20%20%20%20%20%20%20%20*%20if%20no%20item%20is%20selected.%0A%20%20%20%20%20%20%20%20%20%20%20*%20%40type%20%7B%3F(Object%7CArray%3C!Object%3E)%7D%0A%20%20%20%20%20%20%20%20%20%20%20*%2Fselected%3A%7Btype%3AObject%2Cnotify%3Atrue%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20%20%20*%20When%20%60multi%60%20is%20false%2C%20this%20is%20the%20currently%20selected%20item%2C%20or%20%60null%60%0A%20%20%20%20%20%20%20%20%20%20%20*%20if%20no%20item%20is%20selected.%0A%20%20%20%20%20%20%20%20%20%20%20*%20%40type%20%7B%3FObject%7D%0A%20%20%20%20%20%20%20%20%20%20%20*%2FselectedItem%3A%7Btype%3AObject%2Cnotify%3Atrue%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20%20%20*%20When%20%60true%60%2C%20calling%20%60select%60%20on%20an%20item%20that%20is%20already%20selected%0A%20%20%20%20%20%20%20%20%20%20%20*%20will%20deselect%20the%20item.%0A%20%20%20%20%20%20%20%20%20%20%20*%2Ftoggle%3A%7Btype%3ABoolean%2Cvalue%3Afalse%7D%7D%3B%7D%7D%2C%7Bkey%3A'observers'%2Cget%3Afunction%20get()%7Breturn%5B'__updateSelection(multi%2C%20items.*)'%5D%3B%7D%7D%5D)%3Bfunction%20ArraySelectorMixin()%7B_classCallCheck(this%2CArraySelectorMixin)%3Bvar%20_this%3D_possibleConstructorReturn(this%2C(ArraySelectorMixin.__proto__%7C%7CObject.getPrototypeOf(ArraySelectorMixin)).call(this))%3B_this.__lastItems%3Dnull%3B_this.__lastMulti%3Dnull%3B_this.__selectedMap%3Dnull%3Breturn%20_this%3B%7D_createClass(ArraySelectorMixin%2C%5B%7Bkey%3A'__updateSelection'%2Cvalue%3Afunction%20__updateSelection(multi%2CitemsInfo)%7Bvar%20path%3DitemsInfo.path%3Bif(path%3D%3D'items')%7B%2F%2F%20Case%201%20-%20items%20array%20changed%2C%20so%20diff%20against%20previous%20array%20and%0A%2F%2F%20deselect%20any%20removed%20items%20and%20adjust%20selected%20indices%0Avar%20newItems%3DitemsInfo.base%7C%7C%5B%5D%3Bvar%20lastItems%3Dthis.__lastItems%3Bvar%20lastMulti%3Dthis.__lastMulti%3Bif(multi!%3D%3DlastMulti)%7Bthis.clearSelection()%3B%7Dif(lastItems)%7Bvar%20splices%3DPolymer.ArraySplice.calculateSplices(newItems%2ClastItems)%3Bthis.__applySplices(splices)%3B%7Dthis.__lastItems%3DnewItems%3Bthis.__lastMulti%3Dmulti%3B%7Delse%20if(itemsInfo.path%3D%3D'items.splices')%7B%2F%2F%20Case%202%20-%20got%20specific%20splice%20information%20describing%20the%20array%20mutation%3A%0A%2F%2F%20deselect%20any%20removed%20items%20and%20adjust%20selected%20indices%0Athis.__applySplices(itemsInfo.value.indexSplices)%3B%7Delse%7B%2F%2F%20Case%203%20-%20an%20array%20element%20was%20changed%2C%20so%20deselect%20the%20previous%0A%2F%2F%20item%20for%20that%20index%20if%20it%20was%20previously%20selected%0Avar%20part%3Dpath.slice('items.'.length)%3Bvar%20idx%3DparseInt(part%2C10)%3Bif(part.indexOf('.')%3C0%26%26part%3D%3Didx)%7Bthis.__deselectChangedIdx(idx)%3B%7D%7D%7D%7D%2C%7Bkey%3A'__applySplices'%2Cvalue%3Afunction%20__applySplices(splices)%7Bvar%20_this2%3Dthis%3Bvar%20selected%3Dthis.__selectedMap%3B%2F%2F%20Adjust%20selected%20indices%20and%20mark%20removals%0Avar%20_loop%3Dfunction%20_loop(i)%7Bvar%20s%3Dsplices%5Bi%5D%3Bselected.forEach(function(idx%2Citem)%7Bif(idx%3Cs.index)%7B%2F%2F%20no%20change%0A%7Delse%20if(idx%3E%3Ds.index%2Bs.removed.length)%7B%2F%2F%20adjust%20index%0Aselected.set(item%2Cidx%2Bs.addedCount-s.removed.length)%3B%7Delse%7B%2F%2F%20remove%20index%0Aselected.set(item%2C-1)%3B%7D%7D)%3Bfor(var%20j%3D0%3Bj%3Cs.addedCount%3Bj%2B%2B)%7Bvar%20idx%3Ds.index%2Bj%3Bif(selected.has(_this2.items%5Bidx%5D))%7Bselected.set(_this2.items%5Bidx%5D%2Cidx)%3B%7D%7D%7D%3Bfor(var%20i%3D0%3Bi%3Csplices.length%3Bi%2B%2B)%7B_loop(i)%3B%7D%2F%2F%20Update%20linked%20paths%0Athis.__updateLinks()%3B%2F%2F%20Remove%20selected%20items%20that%20were%20removed%20from%20the%20items%20array%0Avar%20sidx%3D0%3Bselected.forEach(function(idx%2Citem)%7Bif(idx%3C0)%7Bif(_this2.multi)%7B_this2.splice('selected'%2Csidx%2C1)%3B%7Delse%7B_this2.selected%3D_this2.selectedItem%3Dnull%3B%7Dselected.delete(item)%3B%7Delse%7Bsidx%2B%2B%3B%7D%7D)%3B%7D%7D%2C%7Bkey%3A'__updateLinks'%2Cvalue%3Afunction%20__updateLinks()%7Bvar%20_this3%3Dthis%3Bthis.__dataLinkedPaths%3D%7B%7D%3Bif(this.multi)%7Bvar%20sidx%3D0%3Bthis.__selectedMap.forEach(function(idx)%7Bif(idx%3E%3D0)%7B_this3.linkPaths('items.'%2Bidx%2C'selected.'%2Bsidx%2B%2B)%3B%7D%7D)%3B%7Delse%7Bthis.__selectedMap.forEach(function(idx)%7B_this3.linkPaths('selected'%2C'items.'%2Bidx)%3B_this3.linkPaths('selectedItem'%2C'items.'%2Bidx)%3B%7D)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Clears%20the%20selection%20state.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'clearSelection'%2Cvalue%3Afunction%20clearSelection()%7B%2F%2F%20Unbind%20previous%20selection%0Athis.__dataLinkedPaths%3D%7B%7D%3B%2F%2F%20The%20selected%20map%20stores%203%20pieces%20of%20information%3A%0A%2F%2F%20key%3A%20items%20array%20object%0A%2F%2F%20value%3A%20items%20array%20index%0A%2F%2F%20order%3A%20selected%20array%20index%0Athis.__selectedMap%3Dnew%20Map()%3B%2F%2F%20Initialize%20selection%0Athis.selected%3Dthis.multi%3F%5B%5D%3Anull%3Bthis.selectedItem%3Dnull%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20whether%20the%20item%20is%20currently%20selected.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20item%20Item%20from%20%60items%60%20array%20to%20test%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Whether%20the%20item%20is%20selected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'isSelected'%2Cvalue%3Afunction%20isSelected(item)%7Breturn%20this.__selectedMap.has(item)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20whether%20the%20item%20is%20currently%20selected.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20idx%20Index%20from%20%60items%60%20array%20to%20test%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Whether%20the%20item%20is%20selected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'isIndexSelected'%2Cvalue%3Afunction%20isIndexSelected(idx)%7Breturn%20this.isSelected(this.items%5Bidx%5D)%3B%7D%7D%2C%7Bkey%3A'__deselectChangedIdx'%2Cvalue%3Afunction%20__deselectChangedIdx(idx)%7Bvar%20_this4%3Dthis%3Bvar%20sidx%3Dthis.__selectedIndexForItemIndex(idx)%3Bif(sidx%3E%3D0)%7Bvar%20i%3D0%3Bthis.__selectedMap.forEach(function(idx%2Citem)%7Bif(sidx%3D%3Di%2B%2B)%7B_this4.deselect(item)%3B%7D%7D)%3B%7D%7D%7D%2C%7Bkey%3A'__selectedIndexForItemIndex'%2Cvalue%3Afunction%20__selectedIndexForItemIndex(idx)%7Bvar%20selected%3Dthis.__dataLinkedPaths%5B'items.'%2Bidx%5D%3Bif(selected)%7Breturn%20parseInt(selected.slice('selected.'.length)%2C10)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Deselects%20the%20given%20item%20if%20it%20is%20already%20selected.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20item%20Item%20from%20%60items%60%20array%20to%20deselect%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'deselect'%2Cvalue%3Afunction%20deselect(item)%7Bvar%20idx%3Dthis.__selectedMap.get(item)%3Bif(idx%3E%3D0)%7Bthis.__selectedMap.delete(item)%3Bvar%20sidx%3Dvoid%200%3Bif(this.multi)%7Bsidx%3Dthis.__selectedIndexForItemIndex(idx)%3B%7Dthis.__updateLinks()%3Bif(this.multi)%7Bthis.splice('selected'%2Csidx%2C1)%3B%7Delse%7Bthis.selected%3Dthis.selectedItem%3Dnull%3B%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Deselects%20the%20given%20index%20if%20it%20is%20already%20selected.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20idx%20Index%20from%20%60items%60%20array%20to%20deselect%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'deselectIndex'%2Cvalue%3Afunction%20deselectIndex(idx)%7Bthis.deselect(this.items%5Bidx%5D)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Selects%20the%20given%20item.%20%20When%20%60toggle%60%20is%20true%2C%20this%20will%20automatically%0A%20%20%20%20%20%20%20*%20deselect%20the%20item%20if%20already%20selected.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20item%20Item%20from%20%60items%60%20array%20to%20select%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'select'%2Cvalue%3Afunction%20select(item)%7Bthis.selectIndex(this.items.indexOf(item))%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Selects%20the%20given%20index.%20%20When%20%60toggle%60%20is%20true%2C%20this%20will%20automatically%0A%20%20%20%20%20%20%20*%20deselect%20the%20item%20if%20already%20selected.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20idx%20Index%20from%20%60items%60%20array%20to%20select%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'selectIndex'%2Cvalue%3Afunction%20selectIndex(idx)%7Bvar%20item%3Dthis.items%5Bidx%5D%3Bif(!this.isSelected(item))%7Bif(!this.multi)%7Bthis.__selectedMap.clear()%3B%7Dthis.__selectedMap.set(item%2Cidx)%3Bthis.__updateLinks()%3Bif(this.multi)%7Bthis.push('selected'%2Citem)%3B%7Delse%7Bthis.selected%3Dthis.selectedItem%3Ditem%3B%7D%7Delse%20if(this.toggle)%7Bthis.deselectIndex(idx)%3B%7D%7D%7D%5D)%3Breturn%20ArraySelectorMixin%3B%7D(elementBase)%3Breturn%20ArraySelectorMixin%3B%7D)%3B%2F%2F%20export%20mixin%0APolymer.ArraySelectorMixin%3DArraySelectorMixin%3B%2F**%0A%20%20%20*%20%40constructor%0A%20%20%20*%20%40extends%20%7BPolymer.Element%7D%0A%20%20%20*%20%40implements%20%7BPolymer_ArraySelectorMixin%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Fvar%20baseArraySelector%3DArraySelectorMixin(Polymer.Element)%3B%2F**%0A%20%20%20*%20Element%20implementing%20the%20%60Polymer.ArraySelector%60%20mixin%2C%20which%20records%0A%20%20%20*%20dynamic%20associations%20between%20item%20paths%20in%20a%20master%20%60items%60%20array%20and%20a%0A%20%20%20*%20%60selected%60%20array%20such%20that%20path%20changes%20to%20the%20master%20array%20(at%20the%20host)%0A%20%20%20*%20element%20or%20elsewhere%20via%20data-binding)%20are%20correctly%20propagated%20to%20items%0A%20%20%20*%20in%20the%20selected%20array%20and%20vice-versa.%0A%20%20%20*%0A%20%20%20*%20The%20%60items%60%20property%20accepts%20an%20array%20of%20user%20data%2C%20and%20via%20the%0A%20%20%20*%20%60select(item)%60%20and%20%60deselect(item)%60%20API%2C%20updates%20the%20%60selected%60%20property%0A%20%20%20*%20which%20may%20be%20bound%20to%20other%20parts%20of%20the%20application%2C%20and%20any%20changes%20to%0A%20%20%20*%20sub-fields%20of%20%60selected%60%20item(s)%20will%20be%20kept%20in%20sync%20with%20items%20in%20the%0A%20%20%20*%20%60items%60%20array.%20%20When%20%60multi%60%20is%20false%2C%20%60selected%60%20is%20a%20property%0A%20%20%20*%20representing%20the%20last%20selected%20item.%20%20When%20%60multi%60%20is%20true%2C%20%60selected%60%0A%20%20%20*%20is%20an%20array%20of%20multiply%20selected%20items.%0A%20%20%20*%0A%20%20%20*%20Example%3A%0A%20%20%20*%0A%20%20%20*%20%60%60%60html%0A%20%20%20*%20%3Cdom-module%20id%3D%22employee-list%22%3E%0A%20%20%20*%0A%20%20%20*%20%20%20%3Ctemplate%3E%0A%20%20%20*%0A%20%20%20*%20%20%20%20%20%3Cdiv%3E%20Employee%20list%3A%20%3C%2Fdiv%3E%0A%20%20%20*%20%20%20%20%20%3Cdom-repeat%20id%3D%22employeeList%22%20items%3D%22%7B%7Bemployees%7D%7D%22%3E%0A%20%20%20*%20%20%20%20%20%20%20%3Ctemplate%3E%0A%20%20%20*%20%20%20%20%20%20%20%20%20%3Cdiv%3EFirst%20name%3A%20%3Cspan%3E%7B%7Bitem.first%7D%7D%3C%2Fspan%3E%3C%2Fdiv%3E%0A%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%3Cdiv%3ELast%20name%3A%20%3Cspan%3E%7B%7Bitem.last%7D%7D%3C%2Fspan%3E%3C%2Fdiv%3E%0A%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%3Cbutton%20on-click%3D%22toggleSelection%22%3ESelect%3C%2Fbutton%3E%0A%20%20%20*%20%20%20%20%20%20%20%3C%2Ftemplate%3E%0A%20%20%20*%20%20%20%20%20%3C%2Fdom-repeat%3E%0A%20%20%20*%0A%20%20%20*%20%20%20%20%20%3Carray-selector%20id%3D%22selector%22%20items%3D%22%7B%7Bemployees%7D%7D%22%20selected%3D%22%7B%7Bselected%7D%7D%22%20multi%20toggle%3E%3C%2Farray-selector%3E%0A%20%20%20*%0A%20%20%20*%20%20%20%20%20%3Cdiv%3E%20Selected%20employees%3A%20%3C%2Fdiv%3E%0A%20%20%20*%20%20%20%20%20%3Cdom-repeat%20items%3D%22%7B%7Bselected%7D%7D%22%3E%0A%20%20%20*%20%20%20%20%20%20%20%3Ctemplate%3E%0A%20%20%20*%20%20%20%20%20%20%20%20%20%3Cdiv%3EFirst%20name%3A%20%3Cspan%3E%7B%7Bitem.first%7D%7D%3C%2Fspan%3E%3C%2Fdiv%3E%0A%20%20%20*%20%20%20%20%20%20%20%20%20%3Cdiv%3ELast%20name%3A%20%3Cspan%3E%7B%7Bitem.last%7D%7D%3C%2Fspan%3E%3C%2Fdiv%3E%0A%20%20%20*%20%20%20%20%20%20%20%3C%2Ftemplate%3E%0A%20%20%20*%20%20%20%20%20%3C%2Fdom-repeat%3E%0A%20%20%20*%0A%20%20%20*%20%20%20%3C%2Ftemplate%3E%0A%20%20%20*%0A%20%20%20*%20%3C%2Fdom-module%3E%0A%20%20%20*%20%60%60%60%0A%20%20%20*%0A%20%20%20*%20%60%60%60js%0A%20%20%20*class%20EmployeeList%20extends%20Polymer.Element%20%7B%0A%20%20%20*%20%20static%20get%20is()%20%7B%20return%20'employee-list'%3B%20%7D%0A%20%20%20*%20%20static%20get%20properties()%20%7B%0A%20%20%20*%20%20%20%20return%20%7B%0A%20%20%20*%20%20%20%20%20%20employees%3A%20%7B%0A%20%20%20*%20%20%20%20%20%20%20%20value()%20%7B%0A%20%20%20*%20%20%20%20%20%20%20%20%20%20return%20%5B%0A%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%20%7Bfirst%3A%20'Bob'%2C%20last%3A%20'Smith'%7D%2C%0A%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%20%7Bfirst%3A%20'Sally'%2C%20last%3A%20'Johnson'%7D%2C%0A%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%20...%0A%20%20%20*%20%20%20%20%20%20%20%20%20%20%5D%3B%0A%20%20%20*%20%20%20%20%20%20%20%20%7D%0A%20%20%20*%20%20%20%20%20%20%7D%0A%20%20%20*%20%20%20%20%7D%3B%0A%20%20%20*%20%20%7D%0A%20%20%20*%20%20toggleSelection(e)%20%7B%0A%20%20%20*%20%20%20%20let%20item%20%3D%20this.%24.employeeList.itemForElement(e.target)%3B%0A%20%20%20*%20%20%20%20this.%24.selector.select(item)%3B%0A%20%20%20*%20%20%7D%0A%20%20%20*%7D%0A%20%20%20*%20%60%60%60%0A%20%20%20*%0A%20%20%20*%20%40polymer%0A%20%20%20*%20%40customElement%0A%20%20%20*%20%40extends%20%7BbaseArraySelector%7D%0A%20%20%20*%20%40appliesMixin%20Polymer.ArraySelectorMixin%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Custom%20element%20that%20links%20paths%20between%20an%20input%20%60items%60%20array%20and%0A%20%20%20*%20%20%20an%20output%20%60selected%60%20item%20or%20array%20based%20on%20calls%20to%20its%20selection%20API.%0A%20%20%20*%2Fvar%20ArraySelector%3Dfunction(_baseArraySelector)%7B_inherits(ArraySelector%2C_baseArraySelector)%3Bfunction%20ArraySelector()%7B_classCallCheck(this%2CArraySelector)%3Breturn%20_possibleConstructorReturn(this%2C(ArraySelector.__proto__%7C%7CObject.getPrototypeOf(ArraySelector)).apply(this%2Carguments))%3B%7D_createClass(ArraySelector%2Cnull%2C%5B%7Bkey%3A'is'%2C%2F%2F%20Not%20needed%20to%20find%20template%3B%20can%20be%20removed%20once%20the%20analyzer%0A%2F%2F%20can%20find%20the%20tag%20name%20from%20customElements.define%20call%0Aget%3Afunction%20get()%7Breturn'array-selector'%3B%7D%7D%5D)%3Breturn%20ArraySelector%3B%7D(baseArraySelector)%3BcustomElements.define(ArraySelector.is%2CArraySelector)%3B%2F**%20%40const%20*%2FPolymer.ArraySelector%3DArraySelector%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Felements%2Farray-selector.html.js%0A",
            "resourceBytes": 13519,
            "encodedBytes": 0,
            "unusedBytes": 4656
          },
          {
            "name": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3Bvar%20mutablePropertyChange%3Dvoid%200%3B%2F**%20%40suppress%20%7BmissingProperties%7D%20*%2F(function()%7BmutablePropertyChange%3DPolymer.MutableData._mutablePropertyChange%3B%7D)()%3B%2F**%0A%20%20%20*%20Legacy%20element%20behavior%20to%20skip%20strict%20dirty-checking%20for%20objects%20and%20arrays%2C%0A%20%20%20*%20(always%20consider%20them%20to%20be%20%22dirty%22)%20for%20use%20on%20legacy%20API%20Polymer%20elements.%0A%20%20%20*%0A%20%20%20*%20By%20default%2C%20%60Polymer.PropertyEffects%60%20performs%20strict%20dirty%20checking%20on%0A%20%20%20*%20objects%2C%20which%20means%20that%20any%20deep%20modifications%20to%20an%20object%20or%20array%20will%0A%20%20%20*%20not%20be%20propagated%20unless%20%22immutable%22%20data%20patterns%20are%20used%20(i.e.%20all%20object%0A%20%20%20*%20references%20from%20the%20root%20to%20the%20mutation%20were%20changed).%0A%20%20%20*%0A%20%20%20*%20Polymer%20also%20provides%20a%20proprietary%20data%20mutation%20and%20path%20notification%20API%0A%20%20%20*%20(e.g.%20%60notifyPath%60%2C%20%60set%60%2C%20and%20array%20mutation%20API's)%20that%20allow%20efficient%0A%20%20%20*%20mutation%20and%20notification%20of%20deep%20changes%20in%20an%20object%20graph%20to%20all%20elements%0A%20%20%20*%20bound%20to%20the%20same%20object%20graph.%0A%20%20%20*%0A%20%20%20*%20In%20cases%20where%20neither%20immutable%20patterns%20nor%20the%20data%20mutation%20API%20can%20be%0A%20%20%20*%20used%2C%20applying%20this%20mixin%20will%20cause%20Polymer%20to%20skip%20dirty%20checking%20for%0A%20%20%20*%20objects%20and%20arrays%20(always%20consider%20them%20to%20be%20%22dirty%22).%20%20This%20allows%20a%0A%20%20%20*%20user%20to%20make%20a%20deep%20modification%20to%20a%20bound%20object%20graph%2C%20and%20then%20either%0A%20%20%20*%20simply%20re-set%20the%20object%20(e.g.%20%60this.items%20%3D%20this.items%60)%20or%20call%20%60notifyPath%60%0A%20%20%20*%20(e.g.%20%60this.notifyPath('items')%60)%20to%20update%20the%20tree.%20%20Note%20that%20all%0A%20%20%20*%20elements%20that%20wish%20to%20be%20updated%20based%20on%20deep%20mutations%20must%20apply%20this%0A%20%20%20*%20mixin%20or%20otherwise%20skip%20strict%20dirty%20checking%20for%20objects%2Farrays.%0A%20%20%20*%20Specifically%2C%20any%20elements%20in%20the%20binding%20tree%20between%20the%20source%20of%20a%0A%20%20%20*%20mutation%20and%20the%20consumption%20of%20it%20must%20apply%20this%20behavior%20or%20enable%20the%0A%20%20%20*%20%60Polymer.OptionalMutableDataBehavior%60.%0A%20%20%20*%0A%20%20%20*%20In%20order%20to%20make%20the%20dirty%20check%20strategy%20configurable%2C%20see%0A%20%20%20*%20%60Polymer.OptionalMutableDataBehavior%60.%0A%20%20%20*%0A%20%20%20*%20Note%2C%20the%20performance%20characteristics%20of%20propagating%20large%20object%20graphs%0A%20%20%20*%20will%20be%20worse%20as%20opposed%20to%20using%20strict%20dirty%20checking%20with%20immutable%0A%20%20%20*%20patterns%20or%20Polymer's%20path%20notification%20API.%0A%20%20%20*%0A%20%20%20*%20%40polymerBehavior%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Behavior%20to%20skip%20strict%20dirty-checking%20for%20objects%20and%0A%20%20%20*%20%20%20arrays%0A%20%20%20*%2FPolymer.MutableDataBehavior%3D%7B%2F**%0A%20%20%20%20%20*%20Overrides%20%60Polymer.PropertyEffects%60%20to%20provide%20option%20for%20skipping%0A%20%20%20%20%20*%20strict%20equality%20checking%20for%20Objects%20and%20Arrays.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20This%20method%20pulls%20the%20value%20to%20dirty%20check%20against%20from%20the%20%60__dataTemp%60%0A%20%20%20%20%20*%20cache%20(rather%20than%20the%20normal%20%60__data%60%20cache)%20for%20Objects.%20%20Since%20the%20temp%0A%20%20%20%20%20*%20cache%20is%20cleared%20at%20the%20end%20of%20a%20turn%2C%20this%20implementation%20allows%0A%20%20%20%20%20*%20side-effects%20of%20deep%20object%20changes%20to%20be%20processed%20by%20re-setting%20the%0A%20%20%20%20%20*%20same%20object%20(using%20the%20temp%20cache%20as%20an%20in-turn%20backstop%20to%20prevent%0A%20%20%20%20%20*%20cycles%20due%20to%202-way%20notification).%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20New%20property%20value%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20old%20Previous%20property%20value%0A%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Whether%20the%20property%20should%20be%20considered%20a%20change%0A%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20*%2F_shouldPropertyChange%3Afunction%20_shouldPropertyChange(property%2Cvalue%2Cold)%7Breturn%20mutablePropertyChange(this%2Cproperty%2Cvalue%2Cold%2Ctrue)%3B%7D%7D%3B%2F**%0A%20%20%20*%20Legacy%20element%20behavior%20to%20add%20the%20optional%20ability%20to%20skip%20strict%0A%20%20%20*%20dirty-checking%20for%20objects%20and%20arrays%20(always%20consider%20them%20to%20be%0A%20%20%20*%20%22dirty%22)%20by%20setting%20a%20%60mutable-data%60%20attribute%20on%20an%20element%20instance.%0A%20%20%20*%0A%20%20%20*%20By%20default%2C%20%60Polymer.PropertyEffects%60%20performs%20strict%20dirty%20checking%20on%0A%20%20%20*%20objects%2C%20which%20means%20that%20any%20deep%20modifications%20to%20an%20object%20or%20array%20will%0A%20%20%20*%20not%20be%20propagated%20unless%20%22immutable%22%20data%20patterns%20are%20used%20(i.e.%20all%20object%0A%20%20%20*%20references%20from%20the%20root%20to%20the%20mutation%20were%20changed).%0A%20%20%20*%0A%20%20%20*%20Polymer%20also%20provides%20a%20proprietary%20data%20mutation%20and%20path%20notification%20API%0A%20%20%20*%20(e.g.%20%60notifyPath%60%2C%20%60set%60%2C%20and%20array%20mutation%20API's)%20that%20allow%20efficient%0A%20%20%20*%20mutation%20and%20notification%20of%20deep%20changes%20in%20an%20object%20graph%20to%20all%20elements%0A%20%20%20*%20bound%20to%20the%20same%20object%20graph.%0A%20%20%20*%0A%20%20%20*%20In%20cases%20where%20neither%20immutable%20patterns%20nor%20the%20data%20mutation%20API%20can%20be%0A%20%20%20*%20used%2C%20applying%20this%20mixin%20will%20allow%20Polymer%20to%20skip%20dirty%20checking%20for%0A%20%20%20*%20objects%20and%20arrays%20(always%20consider%20them%20to%20be%20%22dirty%22).%20%20This%20allows%20a%0A%20%20%20*%20user%20to%20make%20a%20deep%20modification%20to%20a%20bound%20object%20graph%2C%20and%20then%20either%0A%20%20%20*%20simply%20re-set%20the%20object%20(e.g.%20%60this.items%20%3D%20this.items%60)%20or%20call%20%60notifyPath%60%0A%20%20%20*%20(e.g.%20%60this.notifyPath('items')%60)%20to%20update%20the%20tree.%20%20Note%20that%20all%0A%20%20%20*%20elements%20that%20wish%20to%20be%20updated%20based%20on%20deep%20mutations%20must%20apply%20this%0A%20%20%20*%20mixin%20or%20otherwise%20skip%20strict%20dirty%20checking%20for%20objects%2Farrays.%0A%20%20%20*%20Specifically%2C%20any%20elements%20in%20the%20binding%20tree%20between%20the%20source%20of%20a%0A%20%20%20*%20mutation%20and%20the%20consumption%20of%20it%20must%20enable%20this%20behavior%20or%20apply%20the%0A%20%20%20*%20%60Polymer.OptionalMutableDataBehavior%60.%0A%20%20%20*%0A%20%20%20*%20While%20this%20behavior%20adds%20the%20ability%20to%20forgo%20Object%2FArray%20dirty%20checking%2C%0A%20%20%20*%20the%20%60mutableData%60%20flag%20defaults%20to%20false%20and%20must%20be%20set%20on%20the%20instance.%0A%20%20%20*%0A%20%20%20*%20Note%2C%20the%20performance%20characteristics%20of%20propagating%20large%20object%20graphs%0A%20%20%20*%20will%20be%20worse%20by%20relying%20on%20%60mutableData%3A%20true%60%20as%20opposed%20to%20using%0A%20%20%20*%20strict%20dirty%20checking%20with%20immutable%20patterns%20or%20Polymer's%20path%20notification%0A%20%20%20*%20API.%0A%20%20%20*%0A%20%20%20*%20%40polymerBehavior%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Behavior%20to%20optionally%20skip%20strict%20dirty-checking%20for%20objects%20and%0A%20%20%20*%20%20%20arrays%0A%20%20%20*%2FPolymer.OptionalMutableDataBehavior%3D%7Bproperties%3A%7B%2F**%0A%20%20%20%20%20%20%20*%20Instance-level%20flag%20for%20configuring%20the%20dirty-checking%20strategy%0A%20%20%20%20%20%20%20*%20for%20this%20element.%20%20When%20true%2C%20Objects%20and%20Arrays%20will%20skip%20dirty%0A%20%20%20%20%20%20%20*%20checking%2C%20otherwise%20strict%20equality%20checking%20will%20be%20used.%0A%20%20%20%20%20%20%20*%2FmutableData%3ABoolean%7D%2C%2F**%0A%20%20%20%20%20*%20Overrides%20%60Polymer.PropertyEffects%60%20to%20skip%20strict%20equality%20checking%0A%20%20%20%20%20*%20for%20Objects%20and%20Arrays.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Pulls%20the%20value%20to%20dirty%20check%20against%20from%20the%20%60__dataTemp%60%20cache%0A%20%20%20%20%20*%20(rather%20than%20the%20normal%20%60__data%60%20cache)%20for%20Objects.%20%20Since%20the%20temp%0A%20%20%20%20%20*%20cache%20is%20cleared%20at%20the%20end%20of%20a%20turn%2C%20this%20implementation%20allows%0A%20%20%20%20%20*%20side-effects%20of%20deep%20object%20changes%20to%20be%20processed%20by%20re-setting%20the%0A%20%20%20%20%20*%20same%20object%20(using%20the%20temp%20cache%20as%20an%20in-turn%20backstop%20to%20prevent%0A%20%20%20%20%20*%20cycles%20due%20to%202-way%20notification).%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20New%20property%20value%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20old%20Previous%20property%20value%0A%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Whether%20the%20property%20should%20be%20considered%20a%20change%0A%20%20%20%20%20*%20%40this%20%7Bthis%7D%0A%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20*%2F_shouldPropertyChange%3Afunction%20_shouldPropertyChange(property%2Cvalue%2Cold)%7Breturn%20mutablePropertyChange(this%2Cproperty%2Cvalue%2Cold%2Cthis.mutableData)%3B%7D%7D%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Flegacy%2Fmutable-data-behavior.html.js%0A",
            "resourceBytes": 6798,
            "encodedBytes": 0,
            "unusedBytes": 234
          },
          {
            "name": "data:text/javascript;charset=utf-8,%2F%2F%20bc%0APolymer.Base%3DPolymer.LegacyElementMixin(HTMLElement).prototype%3B%2F%2F%20NOTE%3A%20this%20is%20here%20for%20modulizer%20to%20export%20%60html%60%20for%20the%20module%20version%20of%20this%20file%0APolymer.html%3DPolymer.html%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Fpolymer.html.js%0A",
            "resourceBytes": 314,
            "encodedBytes": 0,
            "unusedBytes": 0
          }
        ]
      }
    },
    "accesskeys": {
      "id": "accesskeys",
      "title": "`[accesskey]` values are unique",
      "description": "Access keys let users quickly focus a part of the page. For proper navigation, each access key must be unique. [Learn more about access keys](https://dequeuniversity.com/rules/axe/4.11/accesskeys).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "aria-allowed-attr": {
      "id": "aria-allowed-attr",
      "title": "`[aria-*]` attributes match their roles",
      "description": "Each ARIA `role` supports a specific subset of `aria-*` attributes. Mismatching these invalidates the `aria-*` attributes. [Learn how to match ARIA attributes to their roles](https://dequeuniversity.com/rules/axe/4.11/aria-allowed-attr).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "subItemsHeading": {
              "key": "relatedNode",
              "valueType": "node"
            },
            "label": "Failing Elements"
          }
        ],
        "items": []
      }
    },
    "aria-allowed-role": {
      "id": "aria-allowed-role",
      "title": "Uses ARIA roles only on compatible elements",
      "description": "Many HTML elements can only be assigned certain ARIA roles. Using ARIA roles where they are not allowed can interfere with the accessibility of the web page. [Learn more about ARIA roles](https://dequeuniversity.com/rules/axe/4.11/aria-allowed-role).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "aria-command-name": {
      "id": "aria-command-name",
      "title": "`button`, `link`, and `menuitem` elements have accessible names",
      "description": "When an element doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. [Learn how to make command elements more accessible](https://dequeuniversity.com/rules/axe/4.11/aria-command-name).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "aria-conditional-attr": {
      "id": "aria-conditional-attr",
      "title": "ARIA attributes are used as specified for the element's role",
      "description": "Some ARIA attributes are only allowed on an element under certain conditions. [Learn more about conditional ARIA attributes](https://dequeuniversity.com/rules/axe/4.11/aria-conditional-attr).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "subItemsHeading": {
              "key": "relatedNode",
              "valueType": "node"
            },
            "label": "Failing Elements"
          }
        ],
        "items": []
      }
    },
    "aria-deprecated-role": {
      "id": "aria-deprecated-role",
      "title": "Deprecated ARIA roles were not used",
      "description": "Deprecated ARIA roles may not be processed correctly by assistive technology. [Learn more about deprecated ARIA roles](https://dequeuniversity.com/rules/axe/4.11/aria-deprecated-role).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "aria-dialog-name": {
      "id": "aria-dialog-name",
      "title": "Elements with `role=\"dialog\"` or `role=\"alertdialog\"` have accessible names.",
      "description": "ARIA dialog elements without accessible names may prevent screen readers users from discerning the purpose of these elements. [Learn how to make ARIA dialog elements more accessible](https://dequeuniversity.com/rules/axe/4.11/aria-dialog-name).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "aria-hidden-body": {
      "id": "aria-hidden-body",
      "title": "`[aria-hidden=\"true\"]` is not present on the document `<body>`",
      "description": "Assistive technologies, like screen readers, work inconsistently when `aria-hidden=\"true\"` is set on the document `<body>`. [Learn how `aria-hidden` affects the document body](https://dequeuniversity.com/rules/axe/4.11/aria-hidden-body).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "subItemsHeading": {
              "key": "relatedNode",
              "valueType": "node"
            },
            "label": "Failing Elements"
          }
        ],
        "items": []
      }
    },
    "aria-hidden-focus": {
      "id": "aria-hidden-focus",
      "title": "`[aria-hidden=\"true\"]` elements do not contain focusable descendents",
      "description": "Focusable descendents within an `[aria-hidden=\"true\"]` element prevent those interactive elements from being available to users of assistive technologies like screen readers. [Learn how `aria-hidden` affects focusable elements](https://dequeuniversity.com/rules/axe/4.11/aria-hidden-focus).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "aria-input-field-name": {
      "id": "aria-input-field-name",
      "title": "ARIA input fields have accessible names",
      "description": "When an input field doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. [Learn more about input field labels](https://dequeuniversity.com/rules/axe/4.11/aria-input-field-name).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "aria-meter-name": {
      "id": "aria-meter-name",
      "title": "ARIA `meter` elements have accessible names",
      "description": "When a meter element doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. [Learn how to name `meter` elements](https://dequeuniversity.com/rules/axe/4.11/aria-meter-name).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "aria-progressbar-name": {
      "id": "aria-progressbar-name",
      "title": "ARIA `progressbar` elements have accessible names",
      "description": "When a `progressbar` element doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. [Learn how to label `progressbar` elements](https://dequeuniversity.com/rules/axe/4.11/aria-progressbar-name).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "aria-prohibited-attr": {
      "id": "aria-prohibited-attr",
      "title": "Elements use only permitted ARIA attributes",
      "description": "Using ARIA attributes in roles where they are prohibited can mean that important information is not communicated to users of assistive technologies. [Learn more about prohibited ARIA roles](https://dequeuniversity.com/rules/axe/4.11/aria-prohibited-attr).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "subItemsHeading": {
              "key": "relatedNode",
              "valueType": "node"
            },
            "label": "Failing Elements"
          }
        ],
        "items": []
      }
    },
    "aria-required-attr": {
      "id": "aria-required-attr",
      "title": "`[role]`s have all required `[aria-*]` attributes",
      "description": "Some ARIA roles have required attributes that describe the state of the element to screen readers. [Learn more about roles and required attributes](https://dequeuniversity.com/rules/axe/4.11/aria-required-attr).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "aria-required-children": {
      "id": "aria-required-children",
      "title": "Elements with an ARIA `[role]` that require children to contain a specific `[role]` have all required children.",
      "description": "Some ARIA parent roles must contain specific child roles to perform their intended accessibility functions. [Learn more about roles and required children elements](https://dequeuniversity.com/rules/axe/4.11/aria-required-children).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "aria-required-parent": {
      "id": "aria-required-parent",
      "title": "`[role]`s are contained by their required parent element",
      "description": "Some ARIA child roles must be contained by specific parent roles to properly perform their intended accessibility functions. [Learn more about ARIA roles and required parent element](https://dequeuniversity.com/rules/axe/4.11/aria-required-parent).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "aria-roles": {
      "id": "aria-roles",
      "title": "`[role]` values are valid",
      "description": "ARIA roles must have valid values in order to perform their intended accessibility functions. [Learn more about valid ARIA roles](https://dequeuniversity.com/rules/axe/4.11/aria-roles).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "aria-text": {
      "id": "aria-text",
      "title": "Elements with the `role=text` attribute do not have focusable descendents.",
      "description": "Adding `role=text` around a text node split by markup enables VoiceOver to treat it as one phrase, but the element's focusable descendents will not be announced. [Learn more about the `role=text` attribute](https://dequeuniversity.com/rules/axe/4.11/aria-text).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "aria-toggle-field-name": {
      "id": "aria-toggle-field-name",
      "title": "ARIA toggle fields have accessible names",
      "description": "When a toggle field doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. [Learn more about toggle fields](https://dequeuniversity.com/rules/axe/4.11/aria-toggle-field-name).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "aria-tooltip-name": {
      "id": "aria-tooltip-name",
      "title": "ARIA `tooltip` elements have accessible names",
      "description": "When a tooltip element doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. [Learn how to name `tooltip` elements](https://dequeuniversity.com/rules/axe/4.11/aria-tooltip-name).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "aria-treeitem-name": {
      "id": "aria-treeitem-name",
      "title": "ARIA `treeitem` elements have accessible names",
      "description": "When a `treeitem` element doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. [Learn more about labeling `treeitem` elements](https://dequeuniversity.com/rules/axe/4.11/aria-treeitem-name).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "aria-valid-attr-value": {
      "id": "aria-valid-attr-value",
      "title": "`[aria-*]` attributes have valid values",
      "description": "Assistive technologies, like screen readers, can't interpret ARIA attributes with invalid values. [Learn more about valid values for ARIA attributes](https://dequeuniversity.com/rules/axe/4.11/aria-valid-attr-value).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "subItemsHeading": {
              "key": "relatedNode",
              "valueType": "node"
            },
            "label": "Failing Elements"
          }
        ],
        "items": []
      }
    },
    "aria-valid-attr": {
      "id": "aria-valid-attr",
      "title": "`[aria-*]` attributes are valid and not misspelled",
      "description": "Assistive technologies, like screen readers, can't interpret ARIA attributes with invalid names. [Learn more about valid ARIA attributes](https://dequeuniversity.com/rules/axe/4.11/aria-valid-attr).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "subItemsHeading": {
              "key": "relatedNode",
              "valueType": "node"
            },
            "label": "Failing Elements"
          }
        ],
        "items": []
      }
    },
    "button-name": {
      "id": "button-name",
      "title": "Buttons have an accessible name",
      "description": "When a button doesn't have an accessible name, screen readers announce it as \"button\", making it unusable for users who rely on screen readers. [Learn how to make buttons more accessible](https://dequeuniversity.com/rules/axe/4.11/button-name).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "bypass": {
      "id": "bypass",
      "title": "The page contains a heading, skip link, or landmark region",
      "description": "Adding ways to bypass repetitive content lets keyboard users navigate the page more efficiently. [Learn more about bypass blocks](https://dequeuniversity.com/rules/axe/4.11/bypass).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "color-contrast": {
      "id": "color-contrast",
      "title": "Background and foreground colors have a sufficient contrast ratio",
      "description": "Low-contrast text is difficult or impossible for many users to read. [Learn how to provide sufficient color contrast](https://dequeuniversity.com/rules/axe/4.11/color-contrast).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "subItemsHeading": {
              "key": "relatedNode",
              "valueType": "node"
            },
            "label": "Failing Elements"
          }
        ],
        "items": []
      }
    },
    "definition-list": {
      "id": "definition-list",
      "title": "`<dl>`'s contain only properly-ordered `<dt>` and `<dd>` groups, `<script>`, `<template>` or `<div>` elements.",
      "description": "When definition lists are not properly marked up, screen readers may produce confusing or inaccurate output. [Learn how to structure definition lists correctly](https://dequeuniversity.com/rules/axe/4.11/definition-list).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "dlitem": {
      "id": "dlitem",
      "title": "Definition list items are wrapped in `<dl>` elements",
      "description": "Definition list items (`<dt>` and `<dd>`) must be wrapped in a parent `<dl>` element to ensure that screen readers can properly announce them. [Learn how to structure definition lists correctly](https://dequeuniversity.com/rules/axe/4.11/dlitem).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "document-title": {
      "id": "document-title",
      "title": "Document has a `<title>` element",
      "description": "The title gives screen reader users an overview of the page, and search engine users rely on it heavily to determine if a page is relevant to their search. [Learn more about document titles](https://dequeuniversity.com/rules/axe/4.11/document-title).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "subItemsHeading": {
              "key": "relatedNode",
              "valueType": "node"
            },
            "label": "Failing Elements"
          }
        ],
        "items": []
      }
    },
    "duplicate-id-aria": {
      "id": "duplicate-id-aria",
      "title": "ARIA IDs are unique",
      "description": "The value of an ARIA ID must be unique to prevent other instances from being overlooked by assistive technologies. [Learn how to fix duplicate ARIA IDs](https://dequeuniversity.com/rules/axe/4.11/duplicate-id-aria).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "empty-heading": {
      "id": "empty-heading",
      "title": "All heading elements contain content.",
      "description": "A heading with no content or inaccessible text prevent screen reader users from accessing information on the page's structure. [Learn more about headings](https://dequeuniversity.com/rules/axe/4.11/empty-heading).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "form-field-multiple-labels": {
      "id": "form-field-multiple-labels",
      "title": "No form fields have multiple labels",
      "description": "Form fields with multiple labels can be confusingly announced by assistive technologies like screen readers which use either the first, the last, or all of the labels. [Learn how to use form labels](https://dequeuniversity.com/rules/axe/4.11/form-field-multiple-labels).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "frame-title": {
      "id": "frame-title",
      "title": "`<frame>` or `<iframe>` elements have a title",
      "description": "Screen reader users rely on frame titles to describe the contents of frames. [Learn more about frame titles](https://dequeuniversity.com/rules/axe/4.11/frame-title).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "heading-order": {
      "id": "heading-order",
      "title": "Heading elements are not in a sequentially-descending order",
      "description": "Properly ordered headings that do not skip levels convey the semantic structure of the page, making it easier to navigate and understand when using assistive technologies. [Learn more about heading order](https://dequeuniversity.com/rules/axe/4.11/heading-order).",
      "score": 0,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "subItemsHeading": {
              "key": "relatedNode",
              "valueType": "node"
            },
            "label": "Failing Elements"
          }
        ],
        "items": [
          {
            "node": {
              "type": "node",
              "lhId": "1-0-H5",
              "path": "1,HTML,1,BODY,4,SECTION,0,DIV,0,DIV,2,DIV,1,PROMO-STORY-BUCKET-SHORT,a,#document-fragment,1,DIV,0,UI-LABEL-BUCKET,a,#document-fragment,1,DIV,0,A,0,H5",
              "selector": "div#container > a.has-padding > h5.label-news",
              "boundingRect": {
                "top": 3274,
                "bottom": 3294,
                "left": 0,
                "right": 193,
                "width": 193,
                "height": 20
              },
              "snippet": "<h5 class=\"label-news\">",
              "nodeLabel": "Most Recent Videos",
              "explanation": "Fix any of the following:\n  Heading order invalid"
            }
          }
        ],
        "debugData": {
          "type": "debugdata",
          "impact": "moderate",
          "tags": [
            "cat.semantics",
            "best-practice"
          ]
        }
      }
    },
    "html-has-lang": {
      "id": "html-has-lang",
      "title": "`<html>` element has a `[lang]` attribute",
      "description": "If a page doesn't specify a `lang` attribute, a screen reader assumes that the page is in the default language that the user chose when setting up the screen reader. If the page isn't actually in the default language, then the screen reader might not announce the page's text correctly. [Learn more about the `lang` attribute](https://dequeuniversity.com/rules/axe/4.11/html-has-lang).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "subItemsHeading": {
              "key": "relatedNode",
              "valueType": "node"
            },
            "label": "Failing Elements"
          }
        ],
        "items": []
      }
    },
    "html-lang-valid": {
      "id": "html-lang-valid",
      "title": "`<html>` element has a valid value for its `[lang]` attribute",
      "description": "Specifying a valid [BCP 47 language](https://www.w3.org/International/questions/qa-choosing-language-tags#question) helps screen readers announce text properly. [Learn how to use the `lang` attribute](https://dequeuniversity.com/rules/axe/4.11/html-lang-valid).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "subItemsHeading": {
              "key": "relatedNode",
              "valueType": "node"
            },
            "label": "Failing Elements"
          }
        ],
        "items": []
      }
    },
    "html-xml-lang-mismatch": {
      "id": "html-xml-lang-mismatch",
      "title": "`<html>` element has an `[xml:lang]` attribute with the same base language as the `[lang]` attribute.",
      "description": "If the webpage does not specify a consistent language, then the screen reader might not announce the page's text correctly. [Learn more about the `lang` attribute](https://dequeuniversity.com/rules/axe/4.11/html-xml-lang-mismatch).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "identical-links-same-purpose": {
      "id": "identical-links-same-purpose",
      "title": "Identical links have the same purpose.",
      "description": "Links with the same destination should have the same description, to help users understand the link's purpose and decide whether to follow it. [Learn more about identical links](https://dequeuniversity.com/rules/axe/4.11/identical-links-same-purpose).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "image-alt": {
      "id": "image-alt",
      "title": "Image elements do not have `[alt]` attributes",
      "description": "Informative elements should aim for short, descriptive alternate text. Decorative elements can be ignored with an empty alt attribute. [Learn more about the `alt` attribute](https://dequeuniversity.com/rules/axe/4.11/image-alt).",
      "score": 0,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "subItemsHeading": {
              "key": "relatedNode",
              "valueType": "node"
            },
            "label": "Failing Elements"
          }
        ],
        "items": [
          {
            "node": {
              "type": "node",
              "lhId": "1-1-IMG",
              "path": "1,HTML,1,BODY,4,SECTION,0,DIV,0,DIV,2,DIV,1,PROMO-STORY-BUCKET-SHORT,a,#document-fragment,2,DIV,1,DIV,2,DIV,2,LIT-STORY-CARD,a,#document-fragment,1,A,0,DIV,0,IMG",
              "selector": "a.container-link > div.container > img",
              "boundingRect": {
                "top": 3602,
                "bottom": 3672,
                "left": 12,
                "right": 136,
                "width": 124,
                "height": 70
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/videos/wochit/thumbnails/89710141007…\">",
              "nodeLabel": "a.container-link > div.container > img",
              "explanation": "Fix any of the following:\n  Element does not have an alt attribute\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute\n  Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "1-2-IMG",
              "path": "1,HTML,1,BODY,4,SECTION,0,DIV,0,DIV,2,DIV,1,PROMO-STORY-BUCKET-SHORT,a,#document-fragment,2,DIV,1,DIV,2,DIV,4,LIT-STORY-CARD,a,#document-fragment,1,A,0,DIV,0,IMG",
              "selector": "a.container-link > div.container > img",
              "boundingRect": {
                "top": 3602,
                "bottom": 3672,
                "left": 144,
                "right": 268,
                "width": 124,
                "height": 70
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/04/21/NCOD/897…\">",
              "nodeLabel": "a.container-link > div.container > img",
              "explanation": "Fix any of the following:\n  Element does not have an alt attribute\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute\n  Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "1-3-IMG",
              "path": "1,HTML,1,BODY,4,SECTION,0,DIV,0,DIV,2,DIV,1,PROMO-STORY-BUCKET-SHORT,a,#document-fragment,2,DIV,1,DIV,2,DIV,6,LIT-STORY-CARD,a,#document-fragment,1,A,0,DIV,0,IMG",
              "selector": "a.container-link > div.container > img",
              "boundingRect": {
                "top": 3602,
                "bottom": 3672,
                "left": 276,
                "right": 400,
                "width": 124,
                "height": 70
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/04/21/NCOD/897…\">",
              "nodeLabel": "a.container-link > div.container > img",
              "explanation": "Fix any of the following:\n  Element does not have an alt attribute\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute\n  Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "1-4-IMG",
              "path": "1,HTML,1,BODY,4,SECTION,0,DIV,0,DIV,2,DIV,1,PROMO-STORY-BUCKET-SHORT,a,#document-fragment,2,DIV,1,DIV,4,DIV,2,LIT-STORY-CARD,a,#document-fragment,1,A,0,DIV,0,IMG",
              "selector": "a.container-link > div.container > img",
              "boundingRect": {
                "top": 3831,
                "bottom": 3901,
                "left": 12,
                "right": 136,
                "width": 124,
                "height": 70
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/04/21/NCOD/897…\">",
              "nodeLabel": "a.container-link > div.container > img",
              "explanation": "Fix any of the following:\n  Element does not have an alt attribute\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute\n  Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "1-5-IMG",
              "path": "1,HTML,1,BODY,4,SECTION,0,DIV,0,DIV,2,DIV,1,PROMO-STORY-BUCKET-SHORT,a,#document-fragment,2,DIV,1,DIV,4,DIV,4,LIT-STORY-CARD,a,#document-fragment,1,A,0,DIV,0,IMG",
              "selector": "a.container-link > div.container > img",
              "boundingRect": {
                "top": 3831,
                "bottom": 3901,
                "left": 144,
                "right": 268,
                "width": 124,
                "height": 70
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/04/21/NCOD/897…\">",
              "nodeLabel": "a.container-link > div.container > img",
              "explanation": "Fix any of the following:\n  Element does not have an alt attribute\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute\n  Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "1-6-IMG",
              "path": "1,HTML,1,BODY,4,SECTION,0,DIV,0,DIV,2,DIV,1,PROMO-STORY-BUCKET-SHORT,a,#document-fragment,2,DIV,1,DIV,4,DIV,6,LIT-STORY-CARD,a,#document-fragment,1,A,0,DIV,0,IMG",
              "selector": "a.container-link > div.container > img",
              "boundingRect": {
                "top": 3831,
                "bottom": 3901,
                "left": 276,
                "right": 400,
                "width": 124,
                "height": 70
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/04/21/NCOD/897…\">",
              "nodeLabel": "a.container-link > div.container > img",
              "explanation": "Fix any of the following:\n  Element does not have an alt attribute\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute\n  Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "1-7-IMG",
              "path": "1,HTML,1,BODY,4,SECTION,0,DIV,0,DIV,2,DIV,1,PROMO-STORY-BUCKET-SHORT,a,#document-fragment,2,DIV,1,DIV,6,DIV,2,LIT-STORY-CARD,a,#document-fragment,1,A,0,DIV,0,IMG",
              "selector": "a.container-link > div.container > img",
              "boundingRect": {
                "top": 3835,
                "bottom": 3905,
                "left": 12,
                "right": 136,
                "width": 124,
                "height": 70
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/04/21/NCOD/897…\">",
              "nodeLabel": "a.container-link > div.container > img",
              "explanation": "Fix any of the following:\n  Element does not have an alt attribute\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute\n  Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "1-8-IMG",
              "path": "1,HTML,1,BODY,4,SECTION,0,DIV,0,DIV,2,DIV,1,PROMO-STORY-BUCKET-SHORT,a,#document-fragment,2,DIV,1,DIV,6,DIV,4,LIT-STORY-CARD,a,#document-fragment,1,A,0,DIV,0,IMG",
              "selector": "a.container-link > div.container > img",
              "boundingRect": {
                "top": 3835,
                "bottom": 3905,
                "left": 144,
                "right": 268,
                "width": 124,
                "height": 70
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/04/20/NCOC/897…\">",
              "nodeLabel": "a.container-link > div.container > img",
              "explanation": "Fix any of the following:\n  Element does not have an alt attribute\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute\n  Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "1-9-IMG",
              "path": "1,HTML,1,BODY,4,SECTION,0,DIV,0,DIV,2,DIV,1,PROMO-STORY-BUCKET-SHORT,a,#document-fragment,2,DIV,1,DIV,6,DIV,6,LIT-STORY-CARD,a,#document-fragment,1,A,0,DIV,0,IMG",
              "selector": "a.container-link > div.container > img",
              "boundingRect": {
                "top": 3835,
                "bottom": 3905,
                "left": 276,
                "right": 400,
                "width": 124,
                "height": 70
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/04/21/NCOD/897…\">",
              "nodeLabel": "a.container-link > div.container > img",
              "explanation": "Fix any of the following:\n  Element does not have an alt attribute\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute\n  Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "1-10-IMG",
              "path": "1,HTML,1,BODY,4,SECTION,0,DIV,0,DIV,2,DIV,2,PROMO-STORY-BUCKET-SHORT,a,#document-fragment,2,DIV,1,DIV,2,DIV,2,LIT-STORY-CARD,a,#document-fragment,1,A,0,DIV,0,IMG",
              "selector": "a.container-link > div.container > img",
              "boundingRect": {
                "top": 4235,
                "bottom": 4305,
                "left": 12,
                "right": 136,
                "width": 124,
                "height": 70
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/04/21/NCOD/897…\">",
              "nodeLabel": "a.container-link > div.container > img",
              "explanation": "Fix any of the following:\n  Element does not have an alt attribute\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute\n  Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "1-11-IMG",
              "path": "1,HTML,1,BODY,4,SECTION,0,DIV,0,DIV,2,DIV,2,PROMO-STORY-BUCKET-SHORT,a,#document-fragment,2,DIV,1,DIV,2,DIV,4,LIT-STORY-CARD,a,#document-fragment,1,A,0,DIV,0,IMG",
              "selector": "a.container-link > div.container > img",
              "boundingRect": {
                "top": 4235,
                "bottom": 4305,
                "left": 144,
                "right": 268,
                "width": 124,
                "height": 70
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/04/21/NCOD/897…\">",
              "nodeLabel": "a.container-link > div.container > img",
              "explanation": "Fix any of the following:\n  Element does not have an alt attribute\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute\n  Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "1-12-IMG",
              "path": "1,HTML,1,BODY,4,SECTION,0,DIV,0,DIV,2,DIV,2,PROMO-STORY-BUCKET-SHORT,a,#document-fragment,2,DIV,1,DIV,2,DIV,6,LIT-STORY-CARD,a,#document-fragment,1,A,0,DIV,0,IMG",
              "selector": "a.container-link > div.container > img",
              "boundingRect": {
                "top": 4235,
                "bottom": 4305,
                "left": 276,
                "right": 400,
                "width": 124,
                "height": 70
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/04/20/NCOD/897…\">",
              "nodeLabel": "a.container-link > div.container > img",
              "explanation": "Fix any of the following:\n  Element does not have an alt attribute\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute\n  Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "1-13-IMG",
              "path": "1,HTML,1,BODY,4,SECTION,0,DIV,0,DIV,2,DIV,2,PROMO-STORY-BUCKET-SHORT,a,#document-fragment,2,DIV,1,DIV,4,DIV,2,LIT-STORY-CARD,a,#document-fragment,1,A,0,DIV,0,IMG",
              "selector": "a.container-link > div.container > img",
              "boundingRect": {
                "top": 4464,
                "bottom": 4534,
                "left": 12,
                "right": 136,
                "width": 124,
                "height": 70
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/04/22/NCOD/897…\">",
              "nodeLabel": "a.container-link > div.container > img",
              "explanation": "Fix any of the following:\n  Element does not have an alt attribute\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute\n  Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "1-14-IMG",
              "path": "1,HTML,1,BODY,4,SECTION,0,DIV,0,DIV,2,DIV,2,PROMO-STORY-BUCKET-SHORT,a,#document-fragment,2,DIV,1,DIV,4,DIV,4,LIT-STORY-CARD,a,#document-fragment,1,A,0,DIV,0,IMG",
              "selector": "a.container-link > div.container > img",
              "boundingRect": {
                "top": 4464,
                "bottom": 4534,
                "left": 144,
                "right": 268,
                "width": 124,
                "height": 70
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/04/22/NCOD/897…\">",
              "nodeLabel": "a.container-link > div.container > img",
              "explanation": "Fix any of the following:\n  Element does not have an alt attribute\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute\n  Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "1-15-IMG",
              "path": "1,HTML,1,BODY,4,SECTION,0,DIV,0,DIV,2,DIV,2,PROMO-STORY-BUCKET-SHORT,a,#document-fragment,2,DIV,1,DIV,4,DIV,6,LIT-STORY-CARD,a,#document-fragment,1,A,0,DIV,0,IMG",
              "selector": "a.container-link > div.container > img",
              "boundingRect": {
                "top": 4464,
                "bottom": 4534,
                "left": 276,
                "right": 400,
                "width": 124,
                "height": 70
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/04/21/NCOD/897…\">",
              "nodeLabel": "a.container-link > div.container > img",
              "explanation": "Fix any of the following:\n  Element does not have an alt attribute\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute\n  Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "1-16-IMG",
              "path": "1,HTML,1,BODY,4,SECTION,0,DIV,0,DIV,2,DIV,2,PROMO-STORY-BUCKET-SHORT,a,#document-fragment,2,DIV,1,DIV,6,DIV,2,LIT-STORY-CARD,a,#document-fragment,1,A,0,DIV,0,IMG",
              "selector": "a.container-link > div.container > img",
              "boundingRect": {
                "top": 4468,
                "bottom": 4538,
                "left": 12,
                "right": 136,
                "width": 124,
                "height": 70
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/04/21/NCOD/897…\">",
              "nodeLabel": "a.container-link > div.container > img",
              "explanation": "Fix any of the following:\n  Element does not have an alt attribute\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute\n  Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "1-17-IMG",
              "path": "1,HTML,1,BODY,4,SECTION,0,DIV,0,DIV,2,DIV,2,PROMO-STORY-BUCKET-SHORT,a,#document-fragment,2,DIV,1,DIV,6,DIV,4,LIT-STORY-CARD,a,#document-fragment,1,A,0,DIV,0,IMG",
              "selector": "a.container-link > div.container > img",
              "boundingRect": {
                "top": 4468,
                "bottom": 4538,
                "left": 144,
                "right": 268,
                "width": 124,
                "height": 70
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/04/21/NCOD/897…\">",
              "nodeLabel": "a.container-link > div.container > img",
              "explanation": "Fix any of the following:\n  Element does not have an alt attribute\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute\n  Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "1-18-IMG",
              "path": "1,HTML,1,BODY,4,SECTION,0,DIV,0,DIV,2,DIV,2,PROMO-STORY-BUCKET-SHORT,a,#document-fragment,2,DIV,1,DIV,6,DIV,6,LIT-STORY-CARD,a,#document-fragment,1,A,0,DIV,0,IMG",
              "selector": "a.container-link > div.container > img",
              "boundingRect": {
                "top": 4468,
                "bottom": 4538,
                "left": 276,
                "right": 400,
                "width": 124,
                "height": 70
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/04/20/NCOD/897…\">",
              "nodeLabel": "a.container-link > div.container > img",
              "explanation": "Fix any of the following:\n  Element does not have an alt attribute\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute\n  Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
            }
          }
        ],
        "debugData": {
          "type": "debugdata",
          "impact": "critical",
          "tags": [
            "cat.text-alternatives",
            "wcag2a",
            "wcag111",
            "section508",
            "section508.22.a",
            "TTv5",
            "TT7.a",
            "TT7.b",
            "EN-301-549",
            "EN-9.1.1.1",
            "ACT",
            "RGAAv4",
            "RGAA-1.1.1"
          ]
        }
      }
    },
    "image-redundant-alt": {
      "id": "image-redundant-alt",
      "title": "Image elements do not have `[alt]` attributes that are redundant text.",
      "description": "Informative elements should aim for short, descriptive alternative text. Alternative text that is exactly the same as the text adjacent to the link or image is potentially confusing for screen reader users, because the text will be read twice. [Learn more about the `alt` attribute](https://dequeuniversity.com/rules/axe/4.11/image-redundant-alt).",
      "score": 1,
      "scoreDisplayMode": "informative",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "subItemsHeading": {
              "key": "relatedNode",
              "valueType": "node"
            },
            "label": "Failing Elements"
          }
        ],
        "items": [
          {
            "node": {
              "type": "node",
              "lhId": "1-19-IMG",
              "path": "1,HTML,1,BODY,3,HEADER,0,DIV,0,DIV,0,DIV,0,DIV,0,DIV,0,DIV,0,A,0,DIV,0,PICTURE,4,IMG",
              "selector": "a.p12-container-link > div.section-helper-column > picture.p12-photo > img.p12-photo",
              "boundingRect": {
                "top": 56,
                "bottom": 288,
                "left": 0,
                "right": 412,
                "width": 412,
                "height": 232
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2025/10/03/NCOD/864…\" alt=\"Court backlog leads to Franklin County asking for 2 new judges\" class=\"p12-photo\">",
              "nodeLabel": "Court backlog leads to Franklin County asking for 2 new judges",
              "explanation": "Fix all of the following:\n  Element contains <img> element with alt text that duplicates existing text"
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "1-20-IMG",
              "path": "1,HTML,1,BODY,3,HEADER,0,DIV,0,DIV,0,DIV,0,DIV,1,DIV,0,DIV,0,A,0,PICTURE,5,IMG",
              "selector": "div.hero-slot-two > a.section-helper-flex > picture.section-helper-column > img",
              "boundingRect": {
                "top": 382,
                "bottom": 575,
                "left": 34,
                "right": 378,
                "width": 343,
                "height": 193
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/01/12/USAT/881…\" alt=\"New bookstore planned for Worthington this summer\">",
              "nodeLabel": "New bookstore planned for Worthington this summer",
              "explanation": "Fix all of the following:\n  Element contains <img> element with alt text that duplicates existing text"
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "1-21-IMG",
              "path": "1,HTML,1,BODY,3,HEADER,0,DIV,0,DIV,0,DIV,0,DIV,1,DIV,1,DIV,0,A,0,PICTURE,5,IMG",
              "selector": "div.hero-slot-three > a.section-helper-flex > picture.section-helper-column > img",
              "boundingRect": {
                "top": 624,
                "bottom": 819,
                "left": 34,
                "right": 378,
                "width": 343,
                "height": 195
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/2019/12/17/NCOD/ghows-OH-ca4157f4-72…\" alt=\"Woman facing more charges in fatal I-270 crash after running from scene\">",
              "nodeLabel": "Woman facing more charges in fatal I-270 crash after running from scene",
              "explanation": "Fix all of the following:\n  Element contains <img> element with alt text that duplicates existing text"
            }
          }
        ],
        "debugData": {
          "type": "debugdata",
          "impact": "minor",
          "tags": [
            "cat.text-alternatives",
            "best-practice"
          ]
        }
      }
    },
    "input-button-name": {
      "id": "input-button-name",
      "title": "Input buttons have discernible text.",
      "description": "Adding discernable and accessible text to input buttons may help screen reader users understand the purpose of the input button. [Learn more about input buttons](https://dequeuniversity.com/rules/axe/4.11/input-button-name).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "input-image-alt": {
      "id": "input-image-alt",
      "title": "`<input type=\"image\">` elements have `[alt]` text",
      "description": "When an image is being used as an `<input>` button, providing alternative text can help screen reader users understand the purpose of the button. [Learn about input image alt text](https://dequeuniversity.com/rules/axe/4.11/input-image-alt).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "label-content-name-mismatch": {
      "id": "label-content-name-mismatch",
      "title": "Elements with visible text labels have matching accessible names.",
      "description": "Visible text labels that do not match the accessible name can result in a confusing experience for screen reader users. [Learn more about accessible names](https://dequeuniversity.com/rules/axe/4.11/label-content-name-mismatch).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "label": {
      "id": "label",
      "title": "Form elements have associated labels",
      "description": "Labels ensure that form controls are announced properly by assistive technologies, like screen readers. [Learn more about form element labels](https://dequeuniversity.com/rules/axe/4.11/label).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "subItemsHeading": {
              "key": "relatedNode",
              "valueType": "node"
            },
            "label": "Failing Elements"
          }
        ],
        "items": []
      }
    },
    "landmark-one-main": {
      "id": "landmark-one-main",
      "title": "Document does not have a main landmark.",
      "description": "One main landmark helps screen reader users navigate a web page. [Learn more about landmarks](https://dequeuniversity.com/rules/axe/4.11/landmark-one-main).",
      "score": 0,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "subItemsHeading": {
              "key": "relatedNode",
              "valueType": "node"
            },
            "label": "Failing Elements"
          }
        ],
        "items": [
          {
            "node": {
              "type": "node",
              "lhId": "1-22-HTML",
              "path": "1,HTML",
              "selector": "html",
              "boundingRect": {
                "top": 0,
                "bottom": 4859,
                "left": 0,
                "right": 412,
                "width": 412,
                "height": 4859
              },
              "snippet": "<html lang=\"en\" style=\"--color-theme: #009BFF;\">",
              "nodeLabel": "html",
              "explanation": "Fix all of the following:\n  Document does not have a main landmark"
            }
          }
        ],
        "debugData": {
          "type": "debugdata",
          "impact": "moderate",
          "tags": [
            "cat.semantics",
            "best-practice"
          ]
        }
      }
    },
    "link-name": {
      "id": "link-name",
      "title": "Links have a discernible name",
      "description": "Link text (and alternate text for images, when used as links) that is discernible, unique, and focusable improves the navigation experience for screen reader users. [Learn how to make links accessible](https://dequeuniversity.com/rules/axe/4.11/link-name).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "subItemsHeading": {
              "key": "relatedNode",
              "valueType": "node"
            },
            "label": "Failing Elements"
          }
        ],
        "items": []
      }
    },
    "link-in-text-block": {
      "id": "link-in-text-block",
      "title": "Links are distinguishable without relying on color.",
      "description": "Low-contrast text is difficult or impossible for many users to read. Link text that is discernible improves the experience for users with low vision. [Learn how to make links distinguishable](https://dequeuniversity.com/rules/axe/4.11/link-in-text-block).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "list": {
      "id": "list",
      "title": "Lists contain only `<li>` elements and script supporting elements (`<script>` and `<template>`).",
      "description": "Screen readers have a specific way of announcing lists. Ensuring proper list structure aids screen reader output. [Learn more about proper list structure](https://dequeuniversity.com/rules/axe/4.11/list).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "subItemsHeading": {
              "key": "relatedNode",
              "valueType": "node"
            },
            "label": "Failing Elements"
          }
        ],
        "items": []
      }
    },
    "listitem": {
      "id": "listitem",
      "title": "List items (`<li>`) are contained within `<ul>`, `<ol>` or `<menu>` parent elements",
      "description": "Screen readers require list items (`<li>`) to be contained within a parent `<ul>`, `<ol>` or `<menu>` to be announced properly. [Learn more about proper list structure](https://dequeuniversity.com/rules/axe/4.11/listitem).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "subItemsHeading": {
              "key": "relatedNode",
              "valueType": "node"
            },
            "label": "Failing Elements"
          }
        ],
        "items": []
      }
    },
    "meta-refresh": {
      "id": "meta-refresh",
      "title": "The document does not use `<meta http-equiv=\"refresh\">`",
      "description": "Users do not expect a page to refresh automatically, and doing so will move focus back to the top of the page. This may create a frustrating or confusing experience. [Learn more about the refresh meta tag](https://dequeuniversity.com/rules/axe/4.11/meta-refresh).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "meta-viewport": {
      "id": "meta-viewport",
      "title": "`[user-scalable=\"no\"]` is not used in the `<meta name=\"viewport\">` element and the `[maximum-scale]` attribute is not less than 5.",
      "description": "Disabling zooming is problematic for users with low vision who rely on screen magnification to properly see the contents of a web page. [Learn more about the viewport meta tag](https://dequeuniversity.com/rules/axe/4.11/meta-viewport).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "subItemsHeading": {
              "key": "relatedNode",
              "valueType": "node"
            },
            "label": "Failing Elements"
          }
        ],
        "items": []
      }
    },
    "object-alt": {
      "id": "object-alt",
      "title": "`<object>` elements have alternate text",
      "description": "Screen readers cannot translate non-text content. Adding alternate text to `<object>` elements helps screen readers convey meaning to users. [Learn more about alt text for `object` elements](https://dequeuniversity.com/rules/axe/4.11/object-alt).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "select-name": {
      "id": "select-name",
      "title": "Select elements have associated label elements.",
      "description": "Form elements without effective labels can create frustrating experiences for screen reader users. [Learn more about the `select` element](https://dequeuniversity.com/rules/axe/4.11/select-name).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "skip-link": {
      "id": "skip-link",
      "title": "Skip links are not focusable.",
      "description": "Including a skip link can help users skip to the main content to save time. [Learn more about skip links](https://dequeuniversity.com/rules/axe/4.11/skip-link).",
      "score": 0,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "subItemsHeading": {
              "key": "relatedNode",
              "valueType": "node"
            },
            "label": "Failing Elements"
          }
        ],
        "items": [
          {
            "node": {
              "type": "node",
              "lhId": "1-23-A",
              "path": "1,HTML,1,BODY,1,A",
              "selector": "body > a#skipToMain",
              "boundingRect": {
                "top": 10,
                "bottom": 28,
                "left": -999,
                "right": -866,
                "width": 133,
                "height": 18
              },
              "snippet": "<a id=\"skipToMain\" href=\"#mainContentSection\">",
              "nodeLabel": "Skip to main content",
              "explanation": "Fix any of the following:\n  No skip link target"
            }
          }
        ],
        "debugData": {
          "type": "debugdata",
          "impact": "moderate",
          "tags": [
            "cat.keyboard",
            "best-practice",
            "RGAAv4",
            "RGAA-12.7.1"
          ]
        }
      }
    },
    "tabindex": {
      "id": "tabindex",
      "title": "No element has a `[tabindex]` value greater than 0",
      "description": "A value greater than 0 implies an explicit navigation ordering. Although technically valid, this often creates frustrating experiences for users who rely on assistive technologies. [Learn more about the `tabindex` attribute](https://dequeuniversity.com/rules/axe/4.11/tabindex).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "table-duplicate-name": {
      "id": "table-duplicate-name",
      "title": "Tables have different content in the summary attribute and `<caption>`.",
      "description": "The summary attribute should describe the table structure, while `<caption>` should have the onscreen title. Accurate table mark-up helps users of screen readers. [Learn more about summary and caption](https://dequeuniversity.com/rules/axe/4.11/table-duplicate-name).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "table-fake-caption": {
      "id": "table-fake-caption",
      "title": "Tables use `<caption>` instead of cells with the `[colspan]` attribute to indicate a caption.",
      "description": "Screen readers have features to make navigating tables easier. Ensuring that tables use the actual caption element instead of cells with the `[colspan]` attribute may improve the experience for screen reader users. [Learn more about captions](https://dequeuniversity.com/rules/axe/4.11/table-fake-caption).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "target-size": {
      "id": "target-size",
      "title": "Touch targets have sufficient size and spacing.",
      "description": "Touch targets with sufficient size and spacing help users who may have difficulty targeting small controls to activate the targets. [Learn more about touch targets](https://dequeuniversity.com/rules/axe/4.11/target-size).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "subItemsHeading": {
              "key": "relatedNode",
              "valueType": "node"
            },
            "label": "Failing Elements"
          }
        ],
        "items": []
      }
    },
    "td-has-header": {
      "id": "td-has-header",
      "title": "`<td>` elements in a large `<table>` have one or more table headers.",
      "description": "Screen readers have features to make navigating tables easier. Ensuring that `<td>` elements in a large table (3 or more cells in width and height) have an associated table header may improve the experience for screen reader users. [Learn more about table headers](https://dequeuniversity.com/rules/axe/4.11/td-has-header).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "td-headers-attr": {
      "id": "td-headers-attr",
      "title": "Cells in a `<table>` element that use the `[headers]` attribute refer to table cells within the same table.",
      "description": "Screen readers have features to make navigating tables easier. Ensuring `<td>` cells using the `[headers]` attribute only refer to other cells in the same table may improve the experience for screen reader users. [Learn more about the `headers` attribute](https://dequeuniversity.com/rules/axe/4.11/td-headers-attr).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "th-has-data-cells": {
      "id": "th-has-data-cells",
      "title": "`<th>` elements and elements with `[role=\"columnheader\"/\"rowheader\"]` have data cells they describe.",
      "description": "Screen readers have features to make navigating tables easier. Ensuring table headers always refer to some set of cells may improve the experience for screen reader users. [Learn more about table headers](https://dequeuniversity.com/rules/axe/4.11/th-has-data-cells).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "valid-lang": {
      "id": "valid-lang",
      "title": "`[lang]` attributes have a valid value",
      "description": "Specifying a valid [BCP 47 language](https://www.w3.org/International/questions/qa-choosing-language-tags#question) on elements helps ensure that text is pronounced correctly by a screen reader. [Learn how to use the `lang` attribute](https://dequeuniversity.com/rules/axe/4.11/valid-lang).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "video-caption": {
      "id": "video-caption",
      "title": "`<video>` elements contain a `<track>` element with `[kind=\"captions\"]`",
      "description": "When a video provides a caption it is easier for deaf and hearing impaired users to access its information. [Learn more about video captions](https://dequeuniversity.com/rules/axe/4.11/video-caption).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "custom-controls-labels": {
      "id": "custom-controls-labels",
      "title": "Custom controls have associated labels",
      "description": "Custom interactive controls have associated labels, provided by aria-label or aria-labelledby. [Learn more about custom controls and labels](https://developer.chrome.com/docs/lighthouse/accessibility/custom-controls-labels/).",
      "score": null,
      "scoreDisplayMode": "manual"
    },
    "custom-controls-roles": {
      "id": "custom-controls-roles",
      "title": "Custom controls have ARIA roles",
      "description": "Custom interactive controls have appropriate ARIA roles. [Learn how to add roles to custom controls](https://developer.chrome.com/docs/lighthouse/accessibility/custom-control-roles/).",
      "score": null,
      "scoreDisplayMode": "manual"
    },
    "focus-traps": {
      "id": "focus-traps",
      "title": "User focus is not accidentally trapped in a region",
      "description": "A user can tab into and out of any control or region without accidentally trapping their focus. [Learn how to avoid focus traps](https://developer.chrome.com/docs/lighthouse/accessibility/focus-traps/).",
      "score": null,
      "scoreDisplayMode": "manual"
    },
    "focusable-controls": {
      "id": "focusable-controls",
      "title": "Interactive controls are keyboard focusable",
      "description": "Custom interactive controls are keyboard focusable and display a focus indicator. [Learn how to make custom controls focusable](https://developer.chrome.com/docs/lighthouse/accessibility/focusable-controls/).",
      "score": null,
      "scoreDisplayMode": "manual"
    },
    "interactive-element-affordance": {
      "id": "interactive-element-affordance",
      "title": "Interactive elements indicate their purpose and state",
      "description": "Interactive elements, such as links and buttons, should indicate their state and be distinguishable from non-interactive elements. [Learn how to decorate interactive elements with affordance hints](https://developer.chrome.com/docs/lighthouse/accessibility/interactive-element-affordance/).",
      "score": null,
      "scoreDisplayMode": "manual"
    },
    "logical-tab-order": {
      "id": "logical-tab-order",
      "title": "The page has a logical tab order",
      "description": "Tabbing through the page follows the visual layout. Users cannot focus elements that are offscreen. [Learn more about logical tab ordering](https://developer.chrome.com/docs/lighthouse/accessibility/logical-tab-order/).",
      "score": null,
      "scoreDisplayMode": "manual"
    },
    "managed-focus": {
      "id": "managed-focus",
      "title": "The user's focus is directed to new content added to the page",
      "description": "If new content, such as a dialog, is added to the page, the user's focus is directed to it. [Learn how to direct focus to new content](https://developer.chrome.com/docs/lighthouse/accessibility/managed-focus/).",
      "score": null,
      "scoreDisplayMode": "manual"
    },
    "offscreen-content-hidden": {
      "id": "offscreen-content-hidden",
      "title": "Offscreen content is hidden from assistive technology",
      "description": "Offscreen content is hidden with display: none or aria-hidden=true. [Learn how to properly hide offscreen content](https://developer.chrome.com/docs/lighthouse/accessibility/offscreen-content-hidden/).",
      "score": null,
      "scoreDisplayMode": "manual"
    },
    "use-landmarks": {
      "id": "use-landmarks",
      "title": "HTML5 landmark elements are used to improve navigation",
      "description": "Landmark elements (`<main>`, `<nav>`, etc.) are used to improve the keyboard navigation of the page for assistive technology. [Learn more about landmark elements](https://developer.chrome.com/docs/lighthouse/accessibility/use-landmarks/).",
      "score": null,
      "scoreDisplayMode": "manual"
    },
    "visual-order-follows-dom": {
      "id": "visual-order-follows-dom",
      "title": "Visual order on the page follows DOM order",
      "description": "DOM order matches the visual order, improving navigation for assistive technology. [Learn more about DOM and visual ordering](https://developer.chrome.com/docs/lighthouse/accessibility/visual-order-follows-dom/).",
      "score": null,
      "scoreDisplayMode": "manual"
    },
    "total-byte-weight": {
      "id": "total-byte-weight",
      "title": "Avoid enormous network payloads",
      "description": "Large network payloads cost users real money and are highly correlated with long load times. [Learn how to reduce payload sizes](https://developer.chrome.com/docs/lighthouse/performance/total-byte-weight/).",
      "score": 0.5,
      "scoreDisplayMode": "metricSavings",
      "numericValue": 3325705,
      "numericUnit": "byte",
      "displayValue": "Total size was 3,248 KiB",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "url",
            "valueType": "url",
            "label": "URL"
          },
          {
            "key": "totalBytes",
            "valueType": "bytes",
            "label": "Transfer Size"
          }
        ],
        "items": [
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2025/10/03/NCOD/86497290007-common-pleas-court.jpg?crop=7007,3943,x0,y364",
            "totalBytes": 2234391
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/21/NCOD/89717712007-dublin-coffman-baseball-evan-blasinski.png?crop=599,337,x0,y16&width=384&quality=50&crop=16%3A9",
            "totalBytes": 171938
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/21/NCOD/89718012007-dublin-scioto-softball-avery-reynolds.png?crop=554,312,x0,y18&width=384&quality=50&crop=16%3A9",
            "totalBytes": 137179
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/bundles/section.js",
            "totalBytes": 84378
          },
          {
            "url": "https://eu.dispatch.com/",
            "totalBytes": 34464
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/mixins/property-effects.html",
            "totalBytes": 25908
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/gallium/themes/assets/universal/fonts/UnifySerif_W_Rg.woff2",
            "totalBytes": 20872
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/gallium/themes/assets/universal/fonts/UnifySans_W_Bd.woff2",
            "totalBytes": 18590
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/20/NCOC/89704391007-21-inspiring-women-2026.jpg?crop=2967,1669,x0,y65&width=384&quality=50&crop=16%3A9",
            "totalBytes": 18457
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/gallium/themes/assets/universal/fonts/UnifySans_W_SBd.woff2",
            "totalBytes": 18045
          }
        ],
        "sortedBy": [
          "totalBytes"
        ]
      },
      "guidanceLevel": 1
    },
    "unminified-css": {
      "id": "unminified-css",
      "title": "Minify CSS",
      "description": "Minifying CSS files can reduce network payload sizes. [Learn how to minify CSS](https://developer.chrome.com/docs/lighthouse/performance/unminified-css/).",
      "score": 1,
      "scoreDisplayMode": "metricSavings",
      "numericValue": 0,
      "numericUnit": "millisecond",
      "displayValue": "",
      "metricSavings": {
        "FCP": 0,
        "LCP": 0
      },
      "details": {
        "type": "opportunity",
        "headings": [],
        "items": [],
        "overallSavingsMs": 0,
        "overallSavingsBytes": 0,
        "sortedBy": [
          "wastedBytes"
        ],
        "debugData": {
          "type": "debugdata",
          "metricSavings": {
            "FCP": 0,
            "LCP": 0
          }
        }
      },
      "guidanceLevel": 3
    },
    "unminified-javascript": {
      "id": "unminified-javascript",
      "title": "Minify JavaScript",
      "description": "Minifying JavaScript files can reduce payload sizes and script parse time. [Learn how to minify JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unminified-javascript/).",
      "score": 0.5,
      "scoreDisplayMode": "metricSavings",
      "numericValue": 0,
      "numericUnit": "millisecond",
      "displayValue": "Est savings of 284 KiB",
      "warnings": [],
      "metricSavings": {
        "FCP": 0,
        "LCP": 0
      },
      "details": {
        "type": "opportunity",
        "headings": [
          {
            "key": "url",
            "valueType": "url",
            "label": "URL"
          },
          {
            "key": "totalBytes",
            "valueType": "bytes",
            "label": "Transfer Size"
          },
          {
            "key": "wastedBytes",
            "valueType": "bytes",
            "label": "Est Savings"
          }
        ],
        "items": [
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bvar%20_get%3Dfunction%20get(object%2Cproperty%2Creceiver)%7Bif(object%3D%3D%3Dnull)object%3DFunction.prototype%3Bvar%20desc%3DObject.getOwnPropertyDescriptor(object%2Cproperty)%3Bif(desc%3D%3D%3Dundefined)%7Bvar%20parent%3DObject.getPrototypeOf(object)%3Bif(parent%3D%3D%3Dnull)%7Breturn%20undefined%3B%7Delse%7Breturn%20get(parent%2Cproperty%2Creceiver)%3B%7D%7Delse%20if(%22value%22in%20desc)%7Breturn%20desc.value%3B%7Delse%7Bvar%20getter%3Ddesc.get%3Bif(getter%3D%3D%3Dundefined)%7Breturn%20undefined%3B%7Dreturn%20getter.call(receiver)%3B%7D%7D%3Bvar%20_typeof%3Dtypeof%20Symbol%3D%3D%3D%22function%22%26%26typeof%20Symbol.iterator%3D%3D%3D%22symbol%22%3Ffunction(obj)%7Breturn%20typeof%20obj%3B%7D%3Afunction(obj)%7Breturn%20obj%26%26typeof%20Symbol%3D%3D%3D%22function%22%26%26obj.constructor%3D%3D%3DSymbol%26%26obj!%3D%3DSymbol.prototype%3F%22symbol%22%3Atypeof%20obj%3B%7D%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3B%2F**%20%40const%20%7BObject%7D%20*%2Fvar%20CaseMap%3DPolymer.CaseMap%3B%2F%2F%20Monotonically%20increasing%20unique%20ID%20used%20for%20de-duping%20effects%20triggered%0A%2F%2F%20from%20multiple%20properties%20in%20the%20same%20turn%0Avar%20dedupeId%3D0%3B%2F**%0A%20%20%20*%20Property%20effect%20types%3B%20effects%20are%20stored%20on%20the%20prototype%20using%20these%20keys%0A%20%20%20*%20%40enum%20%7Bstring%7D%0A%20%20%20*%2Fvar%20TYPES%3D%7BCOMPUTE%3A'__computeEffects'%2CREFLECT%3A'__reflectEffects'%2CNOTIFY%3A'__notifyEffects'%2CPROPAGATE%3A'__propagateEffects'%2COBSERVE%3A'__observeEffects'%2CREAD_ONLY%3A'__readOnly'%7D%3B%2F**%20%40const%20%7BRegExp%7D%20*%2Fvar%20capitalAttributeRegex%3D%2F%5BA-Z%5D%2F%3B%2F**%0A%20%20%20*%20%40typedef%20%7B%7B%0A%20%20%20*%20name%3A%20(string%20%7C%20undefined)%2C%0A%20%20%20*%20structured%3A%20(boolean%20%7C%20undefined)%2C%0A%20%20%20*%20wildcard%3A%20(boolean%20%7C%20undefined)%0A%20%20%20*%20%7D%7D%0A%20%20%20*%2Fvar%20DataTrigger%3Dvoid%200%3B%2F%2Feslint-disable-line%20no-unused-vars%0A%2F**%0A%20%20%20*%20%40typedef%20%7B%7B%0A%20%20%20*%20info%3A%20%3F%2C%0A%20%20%20*%20trigger%3A%20(!DataTrigger%20%7C%20undefined)%2C%0A%20%20%20*%20fn%3A%20(!Function%20%7C%20undefined)%0A%20%20%20*%20%7D%7D%0A%20%20%20*%2Fvar%20DataEffect%3Dvoid%200%3B%2F%2Feslint-disable-line%20no-unused-vars%0Avar%20PropertyEffectsType%3Dvoid%200%3B%2F%2Feslint-disable-line%20no-unused-vars%0A%2F**%0A%20%20%20*%20Ensures%20that%20the%20model%20has%20an%20own-property%20map%20of%20effects%20for%20the%20given%20type.%0A%20%20%20*%20The%20model%20may%20be%20a%20prototype%20or%20an%20instance.%0A%20%20%20*%0A%20%20%20*%20Property%20effects%20are%20stored%20as%20arrays%20of%20effects%20by%20property%20in%20a%20map%2C%0A%20%20%20*%20by%20named%20type%20on%20the%20model.%20e.g.%0A%20%20%20*%0A%20%20%20*%20%20%20__computeEffects%3A%20%7B%0A%20%20%20*%20%20%20%20%20foo%3A%20%5B%20...%20%5D%2C%0A%20%20%20*%20%20%20%20%20bar%3A%20%5B%20...%20%5D%0A%20%20%20*%20%20%20%7D%0A%20%20%20*%0A%20%20%20*%20If%20the%20model%20does%20not%20yet%20have%20an%20effect%20map%20for%20the%20type%2C%20one%20is%20created%0A%20%20%20*%20and%20returned.%20%20If%20it%20does%2C%20but%20it%20is%20not%20an%20own%20property%20(i.e.%20the%0A%20%20%20*%20prototype%20had%20effects)%2C%20the%20the%20map%20is%20deeply%20cloned%20and%20the%20copy%20is%0A%20%20%20*%20set%20on%20the%20model%20and%20returned%2C%20ready%20for%20new%20effects%20to%20be%20added.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BObject%7D%20model%20Prototype%20or%20instance%0A%20%20%20*%20%40param%20%7Bstring%7D%20type%20Property%20effect%20type%0A%20%20%20*%20%40return%20%7BObject%7D%20The%20own-property%20map%20of%20effects%20for%20the%20given%20type%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20ensureOwnEffectMap(model%2Ctype)%7Bvar%20effects%3Dmodel%5Btype%5D%3Bif(!effects)%7Beffects%3Dmodel%5Btype%5D%3D%7B%7D%3B%7Delse%20if(!model.hasOwnProperty(type))%7Beffects%3Dmodel%5Btype%5D%3DObject.create(model%5Btype%5D)%3Bfor(var%20p%20in%20effects)%7Bvar%20protoFx%3Deffects%5Bp%5D%3Bvar%20instFx%3Deffects%5Bp%5D%3DArray(protoFx.length)%3Bfor(var%20i%3D0%3Bi%3CprotoFx.length%3Bi%2B%2B)%7BinstFx%5Bi%5D%3DprotoFx%5Bi%5D%3B%7D%7D%7Dreturn%20effects%3B%7D%2F%2F%20--%20effects%20----------------------------------------------%0A%2F**%0A%20%20%20*%20Runs%20all%20effects%20of%20a%20given%20type%20for%20the%20given%20set%20of%20property%20changes%0A%20%20%20*%20on%20an%20instance.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20with%20effects%20to%20run%0A%20%20%20*%20%40param%20%7BObject%7D%20effects%20Object%20map%20of%20property-to-Array%20of%20effects%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%3D%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7Bboolean%3D%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20*%20%40param%20%7B*%3D%7D%20extraArgs%20Additional%20metadata%20to%20pass%20to%20effect%20function%0A%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20an%20effect%20ran%20for%20this%20property%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runEffects(inst%2Ceffects%2Cprops%2ColdProps%2ChasPaths%2CextraArgs)%7Bif(effects)%7Bvar%20ran%3Dfalse%3Bvar%20id%3DdedupeId%2B%2B%3Bfor(var%20prop%20in%20props)%7Bif(runEffectsForProperty(inst%2Ceffects%2Cid%2Cprop%2Cprops%2ColdProps%2ChasPaths%2CextraArgs))%7Bran%3Dtrue%3B%7D%7Dreturn%20ran%3B%7Dreturn%20false%3B%7D%2F**%0A%20%20%20*%20Runs%20a%20list%20of%20effects%20for%20a%20given%20property.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20with%20effects%20to%20run%0A%20%20%20*%20%40param%20%7BObject%7D%20effects%20Object%20map%20of%20property-to-Array%20of%20effects%0A%20%20%20*%20%40param%20%7Bnumber%7D%20dedupeId%20Counter%20used%20for%20de-duping%20effects%0A%20%20%20*%20%40param%20%7Bstring%7D%20prop%20Name%20of%20changed%20property%0A%20%20%20*%20%40param%20%7B*%7D%20props%20Changed%20properties%0A%20%20%20*%20%40param%20%7B*%7D%20oldProps%20Old%20properties%0A%20%20%20*%20%40param%20%7Bboolean%3D%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20*%20%40param%20%7B*%3D%7D%20extraArgs%20Additional%20metadata%20to%20pass%20to%20effect%20function%0A%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20an%20effect%20ran%20for%20this%20property%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runEffectsForProperty(inst%2Ceffects%2CdedupeId%2Cprop%2Cprops%2ColdProps%2ChasPaths%2CextraArgs)%7Bvar%20ran%3Dfalse%3Bvar%20rootProperty%3DhasPaths%3FPolymer.Path.root(prop)%3Aprop%3Bvar%20fxs%3Deffects%5BrootProperty%5D%3Bif(fxs)%7Bfor(var%20i%3D0%2Cl%3Dfxs.length%2Cfx%3Bi%3Cl%26%26(fx%3Dfxs%5Bi%5D)%3Bi%2B%2B)%7Bif((!fx.info%7C%7Cfx.info.lastRun!%3D%3DdedupeId)%26%26(!hasPaths%7C%7CpathMatchesTrigger(prop%2Cfx.trigger)))%7Bif(fx.info)%7Bfx.info.lastRun%3DdedupeId%3B%7Dfx.fn(inst%2Cprop%2Cprops%2ColdProps%2Cfx.info%2ChasPaths%2CextraArgs)%3Bran%3Dtrue%3B%7D%7D%7Dreturn%20ran%3B%7D%2F**%0A%20%20%20*%20Determines%20whether%20a%20property%2Fpath%20that%20has%20changed%20matches%20the%20trigger%0A%20%20%20*%20criteria%20for%20an%20effect.%20%20A%20trigger%20is%20a%20descriptor%20with%20the%20following%0A%20%20%20*%20structure%2C%20which%20matches%20the%20descriptors%20returned%20from%20%60parseArg%60.%0A%20%20%20*%20e.g.%20for%20%60foo.bar.*%60%3A%0A%20%20%20*%20%60%60%60%0A%20%20%20*%20trigger%3A%20%7B%0A%20%20%20*%20%20%20name%3A%20'a.b'%2C%0A%20%20%20*%20%20%20structured%3A%20true%2C%0A%20%20%20*%20%20%20wildcard%3A%20true%0A%20%20%20*%20%7D%0A%20%20%20*%20%60%60%60%0A%20%20%20*%20If%20no%20trigger%20is%20given%2C%20the%20path%20is%20deemed%20to%20match.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7Bstring%7D%20path%20Path%20or%20property%20that%20changed%0A%20%20%20*%20%40param%20%7BDataTrigger%7D%20trigger%20Descriptor%0A%20%20%20*%20%40return%20%7Bboolean%7D%20Whether%20the%20path%20matched%20the%20trigger%0A%20%20%20*%2Ffunction%20pathMatchesTrigger(path%2Ctrigger)%7Bif(trigger)%7Bvar%20triggerPath%3Dtrigger.name%3Breturn%20triggerPath%3D%3Dpath%7C%7Ctrigger.structured%26%26Polymer.Path.isAncestor(triggerPath%2Cpath)%7C%7Ctrigger.wildcard%26%26Polymer.Path.isDescendant(triggerPath%2Cpath)%3B%7Delse%7Breturn%20true%3B%7D%7D%2F**%0A%20%20%20*%20Implements%20the%20%22observer%22%20effect.%0A%20%20%20*%0A%20%20%20*%20Calls%20the%20method%20with%20%60info.methodName%60%20on%20the%20instance%2C%20passing%20the%0A%20%20%20*%20new%20and%20old%20values.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20the%20effect%20will%20be%20run%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20property%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7B%3F%7D%20info%20Effect%20metadata%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runObserverEffect(inst%2Cproperty%2Cprops%2ColdProps%2Cinfo)%7Bvar%20fn%3Dtypeof%20info.method%3D%3D%3D%22string%22%3Finst%5Binfo.method%5D%3Ainfo.method%3Bvar%20changedProp%3Dinfo.property%3Bif(fn)%7Bfn.call(inst%2Cinst.__data%5BchangedProp%5D%2ColdProps%5BchangedProp%5D)%3B%7Delse%20if(!info.dynamicFn)%7Bconsole.warn('observer%20method%20%60'%2Binfo.method%2B'%60%20not%20defined')%3B%7D%7D%2F**%0A%20%20%20*%20Runs%20%22notify%22%20effects%20for%20a%20set%20of%20changed%20properties.%0A%20%20%20*%0A%20%20%20*%20This%20method%20differs%20from%20the%20generic%20%60runEffects%60%20method%20in%20that%20it%0A%20%20%20*%20will%20dispatch%20path%20notification%20events%20in%20the%20case%20that%20the%20property%0A%20%20%20*%20changed%20was%20a%20path%20and%20the%20root%20property%20for%20that%20path%20didn't%20have%20a%0A%20%20%20*%20%22notify%22%20effect.%20%20This%20is%20to%20maintain%201.0%20behavior%20that%20did%20not%20require%0A%20%20%20*%20%60notify%3A%20true%60%20to%20ensure%20object%20sub-property%20notifications%20were%0A%20%20%20*%20sent.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20with%20effects%20to%20run%0A%20%20%20*%20%40param%20%7BObject%7D%20notifyProps%20Bag%20of%20properties%20to%20notify%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7Bboolean%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runNotifyEffects(inst%2CnotifyProps%2Cprops%2ColdProps%2ChasPaths)%7B%2F%2F%20Notify%0Avar%20fxs%3Dinst%5BTYPES.NOTIFY%5D%3Bvar%20notified%3Dvoid%200%3Bvar%20id%3DdedupeId%2B%2B%3B%2F%2F%20Try%20normal%20notify%20effects%3B%20if%20none%2C%20fall%20back%20to%20try%20path%20notification%0Afor(var%20prop%20in%20notifyProps)%7Bif(notifyProps%5Bprop%5D)%7Bif(fxs%26%26runEffectsForProperty(inst%2Cfxs%2Cid%2Cprop%2Cprops%2ColdProps%2ChasPaths))%7Bnotified%3Dtrue%3B%7Delse%20if(hasPaths%26%26notifyPath(inst%2Cprop%2Cprops))%7Bnotified%3Dtrue%3B%7D%7D%7D%2F%2F%20Flush%20host%20if%20we%20actually%20notified%20and%20host%20was%20batching%0A%2F%2F%20And%20the%20host%20has%20already%20initialized%20clients%3B%20this%20prevents%0A%2F%2F%20an%20issue%20with%20a%20host%20observing%20data%20changes%20before%20clients%20are%20ready.%0Avar%20host%3Dvoid%200%3Bif(notified%26%26(host%3Dinst.__dataHost)%26%26host._invalidateProperties)%7Bhost._invalidateProperties()%3B%7D%7D%2F**%0A%20%20%20*%20Dispatches%20%7Bproperty%7D-changed%20events%20with%20path%20information%20in%20the%20detail%0A%20%20%20*%20object%20to%20indicate%20a%20sub-path%20of%20the%20property%20was%20changed.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20element%20from%20which%20to%20fire%20the%20event%0A%20%20%20*%20%40param%20%7Bstring%7D%20path%20The%20path%20that%20was%20changed%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40return%20%7Bboolean%7D%20Returns%20true%20if%20the%20path%20was%20notified%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20notifyPath(inst%2Cpath%2Cprops)%7Bvar%20rootProperty%3DPolymer.Path.root(path)%3Bif(rootProperty!%3D%3Dpath)%7Bvar%20eventName%3DPolymer.CaseMap.camelToDashCase(rootProperty)%2B'-changed'%3BdispatchNotifyEvent(inst%2CeventName%2Cprops%5Bpath%5D%2Cpath)%3Breturn%20true%3B%7Dreturn%20false%3B%7D%2F**%0A%20%20%20*%20Dispatches%20%7Bproperty%7D-changed%20events%20to%20indicate%20a%20property%20(or%20path)%0A%20%20%20*%20changed.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20element%20from%20which%20to%20fire%20the%20event%0A%20%20%20*%20%40param%20%7Bstring%7D%20eventName%20The%20name%20of%20the%20event%20to%20send%20('%7Bproperty%7D-changed')%0A%20%20%20*%20%40param%20%7B*%7D%20value%20The%20value%20of%20the%20changed%20property%0A%20%20%20*%20%40param%20%7Bstring%20%7C%20null%20%7C%20undefined%7D%20path%20If%20a%20sub-path%20of%20this%20property%20changed%2C%20the%20path%0A%20%20%20*%20%20%20that%20changed%20(optional).%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%0A%20%20%20*%2Ffunction%20dispatchNotifyEvent(inst%2CeventName%2Cvalue%2Cpath)%7Bvar%20detail%3D%7Bvalue%3Avalue%2CqueueProperty%3Atrue%7D%3Bif(path)%7Bdetail.path%3Dpath%3B%7D%2F**%20%40type%20%7B!HTMLElement%7D%20*%2Finst.dispatchEvent(new%20CustomEvent(eventName%2C%7Bdetail%3Adetail%7D))%3B%7D%2F**%0A%20%20%20*%20Implements%20the%20%22notify%22%20effect.%0A%20%20%20*%0A%20%20%20*%20Dispatches%20a%20non-bubbling%20event%20named%20%60info.eventName%60%20on%20the%20instance%0A%20%20%20*%20with%20a%20detail%20object%20containing%20the%20new%20%60value%60.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20the%20effect%20will%20be%20run%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20property%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7B%3F%7D%20info%20Effect%20metadata%0A%20%20%20*%20%40param%20%7Bboolean%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runNotifyEffect(inst%2Cproperty%2Cprops%2ColdProps%2Cinfo%2ChasPaths)%7Bvar%20rootProperty%3DhasPaths%3FPolymer.Path.root(property)%3Aproperty%3Bvar%20path%3DrootProperty!%3Dproperty%3Fproperty%3Anull%3Bvar%20value%3Dpath%3FPolymer.Path.get(inst%2Cpath)%3Ainst.__data%5Bproperty%5D%3Bif(path%26%26value%3D%3D%3Dundefined)%7Bvalue%3Dprops%5Bproperty%5D%3B%2F%2F%20specifically%20for%20.splices%0A%7DdispatchNotifyEvent(inst%2Cinfo.eventName%2Cvalue%2Cpath)%3B%7D%2F**%0A%20%20%20*%20Handler%20function%20for%202-way%20notification%20events.%20Receives%20context%0A%20%20%20*%20information%20captured%20in%20the%20%60addNotifyListener%60%20closure%20from%20the%0A%20%20%20*%20%60__notifyListeners%60%20metadata.%0A%20%20%20*%0A%20%20%20*%20Sets%20the%20value%20of%20the%20notified%20property%20to%20the%20host%20property%20or%20path.%20%20If%0A%20%20%20*%20the%20event%20contained%20path%20information%2C%20translate%20that%20path%20to%20the%20host%0A%20%20%20*%20scope's%20name%20for%20that%20path%20first.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BCustomEvent%7D%20event%20Notification%20event%20(e.g.%20'%3Cproperty%3E-changed')%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20Host%20element%20instance%20handling%20the%20notification%20event%0A%20%20%20*%20%40param%20%7Bstring%7D%20fromProp%20Child%20element%20property%20that%20was%20bound%0A%20%20%20*%20%40param%20%7Bstring%7D%20toPath%20Host%20property%2Fpath%20that%20was%20bound%0A%20%20%20*%20%40param%20%7Bboolean%7D%20negate%20Whether%20the%20binding%20was%20negated%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20handleNotification(event%2Cinst%2CfromProp%2CtoPath%2Cnegate)%7Bvar%20value%3Dvoid%200%3Bvar%20detail%3D%2F**%20%40type%20%7BObject%7D%20*%2Fevent.detail%3Bvar%20fromPath%3Ddetail%26%26detail.path%3Bif(fromPath)%7BtoPath%3DPolymer.Path.translate(fromProp%2CtoPath%2CfromPath)%3Bvalue%3Ddetail%26%26detail.value%3B%7Delse%7Bvalue%3Devent.currentTarget%5BfromProp%5D%3B%7Dvalue%3Dnegate%3F!value%3Avalue%3Bif(!inst%5BTYPES.READ_ONLY%5D%7C%7C!inst%5BTYPES.READ_ONLY%5D%5BtoPath%5D)%7Bif(inst._setPendingPropertyOrPath(toPath%2Cvalue%2Ctrue%2CBoolean(fromPath))%26%26(!detail%7C%7C!detail.queueProperty))%7Binst._invalidateProperties()%3B%7D%7D%7D%2F**%0A%20%20%20*%20Implements%20the%20%22reflect%22%20effect.%0A%20%20%20*%0A%20%20%20*%20Sets%20the%20attribute%20named%20%60info.attrName%60%20to%20the%20given%20property%20value.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20the%20effect%20will%20be%20run%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20property%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7B%3F%7D%20info%20Effect%20metadata%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runReflectEffect(inst%2Cproperty%2Cprops%2ColdProps%2Cinfo)%7Bvar%20value%3Dinst.__data%5Bproperty%5D%3Bif(Polymer.sanitizeDOMValue)%7Bvalue%3DPolymer.sanitizeDOMValue(value%2Cinfo.attrName%2C'attribute'%2C%2F**%20%40type%20%7BNode%7D%20*%2Finst)%3B%7Dinst._propertyToAttribute(property%2Cinfo.attrName%2Cvalue)%3B%7D%2F**%0A%20%20%20*%20Runs%20%22computed%22%20effects%20for%20a%20set%20of%20changed%20properties.%0A%20%20%20*%0A%20%20%20*%20This%20method%20differs%20from%20the%20generic%20%60runEffects%60%20method%20in%20that%20it%0A%20%20%20*%20continues%20to%20run%20computed%20effects%20based%20on%20the%20output%20of%20each%20pass%20until%0A%20%20%20*%20there%20are%20no%20more%20newly%20computed%20properties.%20%20This%20ensures%20that%20all%0A%20%20%20*%20properties%20that%20will%20be%20computed%20by%20the%20initial%20set%20of%20changes%20are%0A%20%20%20*%20computed%20before%20other%20effects%20(binding%20propagation%2C%20observers%2C%20and%20notify)%0A%20%20%20*%20run.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20the%20effect%20will%20be%20run%20on%0A%20%20%20*%20%40param%20%7B!Object%7D%20changedProps%20Bag%20of%20changed%20properties%0A%20%20%20*%20%40param%20%7B!Object%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7Bboolean%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runComputedEffects(inst%2CchangedProps%2ColdProps%2ChasPaths)%7Bvar%20computeEffects%3Dinst%5BTYPES.COMPUTE%5D%3Bif(computeEffects)%7Bvar%20inputProps%3DchangedProps%3Bwhile(runEffects(inst%2CcomputeEffects%2CinputProps%2ColdProps%2ChasPaths))%7BObject.assign(oldProps%2Cinst.__dataOld)%3BObject.assign(changedProps%2Cinst.__dataPending)%3BinputProps%3Dinst.__dataPending%3Binst.__dataPending%3Dnull%3B%7D%7D%7D%2F**%0A%20%20%20*%20Implements%20the%20%22computed%20property%22%20effect%20by%20running%20the%20method%20with%20the%0A%20%20%20*%20values%20of%20the%20arguments%20specified%20in%20the%20%60info%60%20object%20and%20setting%20the%0A%20%20%20*%20return%20value%20to%20the%20computed%20property%20specified.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20the%20effect%20will%20be%20run%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20property%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7B%3F%7D%20info%20Effect%20metadata%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runComputedEffect(inst%2Cproperty%2Cprops%2ColdProps%2Cinfo)%7Bvar%20result%3DrunMethodEffect(inst%2Cproperty%2Cprops%2ColdProps%2Cinfo)%3Bvar%20computedProp%3Dinfo.methodInfo%3Bif(inst.__dataHasAccessor%26%26inst.__dataHasAccessor%5BcomputedProp%5D)%7Binst._setPendingProperty(computedProp%2Cresult%2Ctrue)%3B%7Delse%7Binst%5BcomputedProp%5D%3Dresult%3B%7D%7D%2F**%0A%20%20%20*%20Computes%20path%20changes%20based%20on%20path%20links%20set%20up%20using%20the%20%60linkPaths%60%0A%20%20%20*%20API.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20whose%20props%20are%20changing%0A%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3C(string%7Cnumber)%3E%7D%20path%20Path%20that%20has%20changed%0A%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20of%20changed%20path%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20computeLinkedPaths(inst%2Cpath%2Cvalue)%7Bvar%20links%3Dinst.__dataLinkedPaths%3Bif(links)%7Bvar%20link%3Dvoid%200%3Bfor(var%20a%20in%20links)%7Bvar%20b%3Dlinks%5Ba%5D%3Bif(Polymer.Path.isDescendant(a%2Cpath))%7Blink%3DPolymer.Path.translate(a%2Cb%2Cpath)%3Binst._setPendingPropertyOrPath(link%2Cvalue%2Ctrue%2Ctrue)%3B%7Delse%20if(Polymer.Path.isDescendant(b%2Cpath))%7Blink%3DPolymer.Path.translate(b%2Ca%2Cpath)%3Binst._setPendingPropertyOrPath(link%2Cvalue%2Ctrue%2Ctrue)%3B%7D%7D%7D%7D%2F%2F%20--%20bindings%20----------------------------------------------%0A%2F**%0A%20%20%20*%20Adds%20binding%20metadata%20to%20the%20current%20%60nodeInfo%60%2C%20and%20binding%20effects%0A%20%20%20*%20for%20all%20part%20dependencies%20to%20%60templateInfo%60.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BFunction%7D%20constructor%20Class%20that%20%60_parseTemplate%60%20is%20currently%0A%20%20%20*%20%20%20running%20on%0A%20%20%20*%20%40param%20%7BTemplateInfo%7D%20templateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20*%20%40param%20%7BNodeInfo%7D%20nodeInfo%20Node%20metadata%20for%20current%20template%20node%0A%20%20%20*%20%40param%20%7Bstring%7D%20kind%20Binding%20kind%2C%20either%20'property'%2C%20'attribute'%2C%20or%20'text'%0A%20%20%20*%20%40param%20%7Bstring%7D%20target%20Target%20property%20name%0A%20%20%20*%20%40param%20%7B!Array%3C!BindingPart%3E%7D%20parts%20Array%20of%20binding%20part%20metadata%0A%20%20%20*%20%40param%20%7Bstring%3D%7D%20literal%20Literal%20text%20surrounding%20binding%20parts%20(specified%0A%20%20%20*%20%20%20only%20for%20'property'%20bindings%2C%20since%20these%20must%20be%20initialized%20as%20part%0A%20%20%20*%20%20%20of%20boot-up)%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20addBinding(constructor%2CtemplateInfo%2CnodeInfo%2Ckind%2Ctarget%2Cparts%2Cliteral)%7B%2F%2F%20Create%20binding%20metadata%20and%20add%20to%20nodeInfo%0AnodeInfo.bindings%3DnodeInfo.bindings%7C%7C%5B%5D%3Bvar%2F**%20Binding%20*%2Fbinding%3D%7Bkind%3Akind%2Ctarget%3Atarget%2Cparts%3Aparts%2Cliteral%3Aliteral%2CisCompound%3Aparts.length!%3D%3D1%7D%3BnodeInfo.bindings.push(binding)%3B%2F%2F%20Add%20listener%20info%20to%20binding%20metadata%0Aif(shouldAddListener(binding))%7Bvar%20_binding%24parts%24%3Dbinding.parts%5B0%5D%2Cevent%3D_binding%24parts%24.event%2Cnegate%3D_binding%24parts%24.negate%3Bbinding.listenerEvent%3Devent%7C%7CCaseMap.camelToDashCase(target)%2B'-changed'%3Bbinding.listenerNegate%3Dnegate%3B%7D%2F%2F%20Add%20%22propagate%22%20property%20effects%20to%20templateInfo%0Avar%20index%3DtemplateInfo.nodeInfoList.length%3Bfor(var%20i%3D0%3Bi%3Cbinding.parts.length%3Bi%2B%2B)%7Bvar%20part%3Dbinding.parts%5Bi%5D%3Bpart.compoundIndex%3Di%3BaddEffectForBindingPart(constructor%2CtemplateInfo%2Cbinding%2Cpart%2Cindex)%3B%7D%7D%2F**%0A%20%20%20*%20Adds%20property%20effects%20to%20the%20given%20%60templateInfo%60%20for%20the%20given%20binding%0A%20%20%20*%20part.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BFunction%7D%20constructor%20Class%20that%20%60_parseTemplate%60%20is%20currently%0A%20%20%20*%20%20%20running%20on%0A%20%20%20*%20%40param%20%7BTemplateInfo%7D%20templateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20*%20%40param%20%7B!Binding%7D%20binding%20Binding%20metadata%0A%20%20%20*%20%40param%20%7B!BindingPart%7D%20part%20Binding%20part%20metadata%0A%20%20%20*%20%40param%20%7Bnumber%7D%20index%20Index%20into%20%60nodeInfoList%60%20for%20this%20node%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%2Ffunction%20addEffectForBindingPart(constructor%2CtemplateInfo%2Cbinding%2Cpart%2Cindex)%7Bif(!part.literal)%7Bif(binding.kind%3D%3D%3D'attribute'%26%26binding.target%5B0%5D%3D%3D%3D'-')%7Bconsole.warn('Cannot%20set%20attribute%20'%2Bbinding.target%2B'%20because%20%22-%22%20is%20not%20a%20valid%20attribute%20starting%20character')%3B%7Delse%7Bvar%20dependencies%3Dpart.dependencies%3Bvar%20info%3D%7Bindex%3Aindex%2Cbinding%3Abinding%2Cpart%3Apart%2Cevaluator%3Aconstructor%7D%3Bfor(var%20j%3D0%3Bj%3Cdependencies.length%3Bj%2B%2B)%7Bvar%20trigger%3Ddependencies%5Bj%5D%3Bif(typeof%20trigger%3D%3D'string')%7Btrigger%3DparseArg(trigger)%3Btrigger.wildcard%3Dtrue%3B%7Dconstructor._addTemplatePropertyEffect(templateInfo%2Ctrigger.rootProperty%2C%7Bfn%3ArunBindingEffect%2Cinfo%3Ainfo%2Ctrigger%3Atrigger%7D)%3B%7D%7D%7D%7D%2F**%0A%20%20%20*%20Implements%20the%20%22binding%22%20(property%2Fpath%20binding)%20effect.%0A%20%20%20*%0A%20%20%20*%20Note%20that%20binding%20syntax%20is%20overridable%20via%20%60_parseBindings%60%20and%0A%20%20%20*%20%60_evaluateBinding%60.%20%20This%20method%20will%20call%20%60_evaluateBinding%60%20for%20any%0A%20%20%20*%20non-literal%20parts%20returned%20from%20%60_parseBindings%60.%20%20However%2C%0A%20%20%20*%20there%20is%20no%20support%20for%20_path_%20bindings%20via%20custom%20binding%20parts%2C%0A%20%20%20*%20as%20this%20is%20specific%20to%20Polymer's%20path%20binding%20syntax.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20the%20effect%20will%20be%20run%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20path%20Name%20of%20property%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7B%3F%7D%20info%20Effect%20metadata%0A%20%20%20*%20%40param%20%7Bboolean%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20*%20%40param%20%7BArray%7D%20nodeList%20List%20of%20nodes%20associated%20with%20%60nodeInfoList%60%20template%0A%20%20%20*%20%20%20metadata%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runBindingEffect(inst%2Cpath%2Cprops%2ColdProps%2Cinfo%2ChasPaths%2CnodeList)%7Bvar%20node%3DnodeList%5Binfo.index%5D%3Bvar%20binding%3Dinfo.binding%3Bvar%20part%3Dinfo.part%3B%2F%2F%20Subpath%20notification%3A%20transform%20path%20and%20set%20to%20client%0A%2F%2F%20e.g.%3A%20foo%3D%22%7B%7Bobj.sub%7D%7D%22%2C%20path%3A%20'obj.sub.prop'%2C%20set%20'foo.prop'%3Dobj.sub.prop%0Aif(hasPaths%26%26part.source%26%26path.length%3Epart.source.length%26%26binding.kind%3D%3D'property'%26%26!binding.isCompound%26%26node.__isPropertyEffectsClient%26%26node.__dataHasAccessor%26%26node.__dataHasAccessor%5Bbinding.target%5D)%7Bvar%20value%3Dprops%5Bpath%5D%3Bpath%3DPolymer.Path.translate(part.source%2Cbinding.target%2Cpath)%3Bif(node._setPendingPropertyOrPath(path%2Cvalue%2Cfalse%2Ctrue))%7Binst._enqueueClient(node)%3B%7D%7Delse%7Bvar%20_value%3Dinfo.evaluator._evaluateBinding(inst%2Cpart%2Cpath%2Cprops%2ColdProps%2ChasPaths)%3B%2F%2F%20Propagate%20value%20to%20child%0AapplyBindingValue(inst%2Cnode%2Cbinding%2Cpart%2C_value)%3B%7D%7D%2F**%0A%20%20%20*%20Sets%20the%20value%20for%20an%20%22binding%22%20(binding)%20effect%20to%20a%20node%2C%0A%20%20%20*%20either%20as%20a%20property%20or%20attribute.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20owning%20the%20binding%20effect%0A%20%20%20*%20%40param%20%7BNode%7D%20node%20Target%20node%20for%20binding%0A%20%20%20*%20%40param%20%7B!Binding%7D%20binding%20Binding%20metadata%0A%20%20%20*%20%40param%20%7B!BindingPart%7D%20part%20Binding%20part%20metadata%0A%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20applyBindingValue(inst%2Cnode%2Cbinding%2Cpart%2Cvalue)%7Bvalue%3DcomputeBindingValue(node%2Cvalue%2Cbinding%2Cpart)%3Bif(Polymer.sanitizeDOMValue)%7Bvalue%3DPolymer.sanitizeDOMValue(value%2Cbinding.target%2Cbinding.kind%2Cnode)%3B%7Dif(binding.kind%3D%3D'attribute')%7B%2F%2F%20Attribute%20binding%0Ainst._valueToNodeAttribute(%2F**%20%40type%20%7BElement%7D%20*%2Fnode%2Cvalue%2Cbinding.target)%3B%7Delse%7B%2F%2F%20Property%20binding%0Avar%20prop%3Dbinding.target%3Bif(node.__isPropertyEffectsClient%26%26node.__dataHasAccessor%26%26node.__dataHasAccessor%5Bprop%5D)%7Bif(!node%5BTYPES.READ_ONLY%5D%7C%7C!node%5BTYPES.READ_ONLY%5D%5Bprop%5D)%7Bif(node._setPendingProperty(prop%2Cvalue))%7Binst._enqueueClient(node)%3B%7D%7D%7Delse%7Binst._setUnmanagedPropertyToNode(node%2Cprop%2Cvalue)%3B%7D%7D%7D%2F**%0A%20%20%20*%20Transforms%20an%20%22binding%22%20effect%20value%20based%20on%20compound%20%26%20negation%0A%20%20%20*%20effect%20metadata%2C%20as%20well%20as%20handling%20for%20special-case%20properties%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BNode%7D%20node%20Node%20the%20value%20will%20be%20set%20to%0A%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%0A%20%20%20*%20%40param%20%7B!Binding%7D%20binding%20Binding%20metadata%0A%20%20%20*%20%40param%20%7B!BindingPart%7D%20part%20Binding%20part%20metadata%0A%20%20%20*%20%40return%20%7B*%7D%20Transformed%20value%20to%20set%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20computeBindingValue(node%2Cvalue%2Cbinding%2Cpart)%7Bif(binding.isCompound)%7Bvar%20storage%3Dnode.__dataCompoundStorage%5Bbinding.target%5D%3Bstorage%5Bpart.compoundIndex%5D%3Dvalue%3Bvalue%3Dstorage.join('')%3B%7Dif(binding.kind!%3D%3D'attribute')%7B%2F%2F%20Some%20browsers%20serialize%20%60undefined%60%20to%20%60%22undefined%22%60%0Aif(binding.target%3D%3D%3D'textContent'%7C%7Cbinding.target%3D%3D%3D'value'%26%26(node.localName%3D%3D%3D'input'%7C%7Cnode.localName%3D%3D%3D'textarea'))%7Bvalue%3Dvalue%3D%3Dundefined%3F''%3Avalue%3B%7D%7Dreturn%20value%3B%7D%2F**%0A%20%20%20*%20Returns%20true%20if%20a%20binding's%20metadata%20meets%20all%20the%20requirements%20to%20allow%0A%20%20%20*%202-way%20binding%2C%20and%20therefore%20a%20%60%3Cproperty%3E-changed%60%20event%20listener%20should%20be%0A%20%20%20*%20added%3A%0A%20%20%20*%20-%20used%20curly%20braces%0A%20%20%20*%20-%20is%20a%20property%20(not%20attribute)%20binding%0A%20%20%20*%20-%20is%20not%20a%20textContent%20binding%0A%20%20%20*%20-%20is%20not%20compound%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!Binding%7D%20binding%20Binding%20metadata%0A%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%202-way%20listener%20should%20be%20added%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20shouldAddListener(binding)%7Breturn%20Boolean(binding.target)%26%26binding.kind!%3D'attribute'%26%26binding.kind!%3D'text'%26%26!binding.isCompound%26%26binding.parts%5B0%5D.mode%3D%3D%3D'%7B'%3B%7D%2F**%0A%20%20%20*%20Setup%20compound%20binding%20storage%20structures%2C%20notify%20listeners%2C%20and%20dataHost%0A%20%20%20*%20references%20onto%20the%20bound%20nodeList.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20Instance%20that%20bas%20been%20previously%20bound%0A%20%20%20*%20%40param%20%7BTemplateInfo%7D%20templateInfo%20Template%20metadata%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20setupBindings(inst%2CtemplateInfo)%7B%2F%2F%20Setup%20compound%20storage%2C%20dataHost%2C%20and%20notify%20listeners%0Avar%20nodeList%3DtemplateInfo.nodeList%2CnodeInfoList%3DtemplateInfo.nodeInfoList%3Bif(nodeInfoList.length)%7Bfor(var%20i%3D0%3Bi%3CnodeInfoList.length%3Bi%2B%2B)%7Bvar%20info%3DnodeInfoList%5Bi%5D%3Bvar%20node%3DnodeList%5Bi%5D%3Bvar%20bindings%3Dinfo.bindings%3Bif(bindings)%7Bfor(var%20_i%3D0%3B_i%3Cbindings.length%3B_i%2B%2B)%7Bvar%20binding%3Dbindings%5B_i%5D%3BsetupCompoundStorage(node%2Cbinding)%3BaddNotifyListener(node%2Cinst%2Cbinding)%3B%7D%7Dnode.__dataHost%3Dinst%3B%7D%7D%7D%2F**%0A%20%20%20*%20Initializes%20%60__dataCompoundStorage%60%20local%20storage%20on%20a%20bound%20node%20with%0A%20%20%20*%20initial%20literal%20data%20for%20compound%20bindings%2C%20and%20sets%20the%20joined%0A%20%20%20*%20literal%20parts%20to%20the%20bound%20property.%0A%20%20%20*%0A%20%20%20*%20When%20changes%20to%20compound%20parts%20occur%2C%20they%20are%20first%20set%20into%20the%20compound%0A%20%20%20*%20storage%20array%20for%20that%20property%2C%20and%20then%20the%20array%20is%20joined%20to%20result%20in%0A%20%20%20*%20the%20final%20value%20set%20to%20the%20property%2Fattribute.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BNode%7D%20node%20Bound%20node%20to%20initialize%0A%20%20%20*%20%40param%20%7BBinding%7D%20binding%20Binding%20metadata%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20setupCompoundStorage(node%2Cbinding)%7Bif(binding.isCompound)%7B%2F%2F%20Create%20compound%20storage%20map%0Avar%20storage%3Dnode.__dataCompoundStorage%7C%7C(node.__dataCompoundStorage%3D%7B%7D)%3Bvar%20parts%3Dbinding.parts%3B%2F%2F%20Copy%20literals%20from%20parts%20into%20storage%20for%20this%20binding%0Avar%20literals%3Dnew%20Array(parts.length)%3Bfor(var%20j%3D0%3Bj%3Cparts.length%3Bj%2B%2B)%7Bliterals%5Bj%5D%3Dparts%5Bj%5D.literal%3B%7Dvar%20target%3Dbinding.target%3Bstorage%5Btarget%5D%3Dliterals%3B%2F%2F%20Configure%20properties%20with%20their%20literal%20parts%0Aif(binding.literal%26%26binding.kind%3D%3D'property')%7Bnode%5Btarget%5D%3Dbinding.literal%3B%7D%7D%7D%2F**%0A%20%20%20*%20Adds%20a%202-way%20binding%20notification%20event%20listener%20to%20the%20node%20specified%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BObject%7D%20node%20Child%20element%20to%20add%20listener%20to%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20Host%20element%20instance%20to%20handle%20notification%20event%0A%20%20%20*%20%40param%20%7BBinding%7D%20binding%20Binding%20metadata%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20addNotifyListener(node%2Cinst%2Cbinding)%7Bif(binding.listenerEvent)%7Bvar%20part%3Dbinding.parts%5B0%5D%3Bnode.addEventListener(binding.listenerEvent%2Cfunction(e)%7BhandleNotification(e%2Cinst%2Cbinding.target%2Cpart.source%2Cpart.negate)%3B%7D)%3B%7D%7D%2F%2F%20--%20for%20method-based%20effects%20(complexObserver%20%26%20computed)%20--------------%0A%2F**%0A%20%20%20*%20Adds%20property%20effects%20for%20each%20argument%20in%20the%20method%20signature%20(and%0A%20%20%20*%20optionally%2C%20for%20the%20method%20name%20if%20%60dynamic%60%20is%20true)%20that%20calls%20the%0A%20%20%20*%20provided%20effect%20function.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BElement%20%7C%20Object%7D%20model%20Prototype%20or%20instance%0A%20%20%20*%20%40param%20%7B!MethodSignature%7D%20sig%20Method%20signature%20metadata%0A%20%20%20*%20%40param%20%7Bstring%7D%20type%20Type%20of%20property%20effect%20to%20add%0A%20%20%20*%20%40param%20%7BFunction%7D%20effectFn%20Function%20to%20run%20when%20arguments%20change%0A%20%20%20*%20%40param%20%7B*%3D%7D%20methodInfo%20Effect-specific%20information%20to%20be%20included%20in%0A%20%20%20*%20%20%20method%20effect%20metadata%0A%20%20%20*%20%40param%20%7Bboolean%7CObject%3D%7D%20dynamicFn%20Boolean%20or%20object%20map%20indicating%20whether%0A%20%20%20*%20%20%20method%20names%20should%20be%20included%20as%20a%20dependency%20to%20the%20effect.%20Note%2C%0A%20%20%20*%20%20%20defaults%20to%20true%20if%20the%20signature%20is%20static%20(sig.static%20is%20true).%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20createMethodEffect(model%2Csig%2Ctype%2CeffectFn%2CmethodInfo%2CdynamicFn)%7BdynamicFn%3Dsig.static%7C%7CdynamicFn%26%26((typeof%20dynamicFn%3D%3D%3D'undefined'%3F'undefined'%3A_typeof(dynamicFn))!%3D%3D'object'%7C%7CdynamicFn%5Bsig.methodName%5D)%3Bvar%20info%3D%7BmethodName%3Asig.methodName%2Cargs%3Asig.args%2CmethodInfo%3AmethodInfo%2CdynamicFn%3AdynamicFn%7D%3Bfor(var%20i%3D0%2Carg%3Bi%3Csig.args.length%26%26(arg%3Dsig.args%5Bi%5D)%3Bi%2B%2B)%7Bif(!arg.literal)%7Bmodel._addPropertyEffect(arg.rootProperty%2Ctype%2C%7Bfn%3AeffectFn%2Cinfo%3Ainfo%2Ctrigger%3Aarg%7D)%3B%7D%7Dif(dynamicFn)%7Bmodel._addPropertyEffect(sig.methodName%2Ctype%2C%7Bfn%3AeffectFn%2Cinfo%3Ainfo%7D)%3B%7D%7D%2F**%0A%20%20%20*%20Calls%20a%20method%20with%20arguments%20marshaled%20from%20properties%20on%20the%20instance%0A%20%20%20*%20based%20on%20the%20method%20signature%20contained%20in%20the%20effect%20metadata.%0A%20%20%20*%0A%20%20%20*%20Multi-property%20observers%2C%20computed%20properties%2C%20and%20inline%20computing%0A%20%20%20*%20functions%20call%20this%20function%20to%20invoke%20the%20method%2C%20then%20use%20the%20return%0A%20%20%20*%20value%20accordingly.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20the%20effect%20will%20be%20run%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20property%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7B%3F%7D%20info%20Effect%20metadata%0A%20%20%20*%20%40return%20%7B*%7D%20Returns%20the%20return%20value%20from%20the%20method%20invocation%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runMethodEffect(inst%2Cproperty%2Cprops%2ColdProps%2Cinfo)%7B%2F%2F%20Instances%20can%20optionally%20have%20a%20_methodHost%20which%20allows%20redirecting%20where%0A%2F%2F%20to%20find%20methods.%20Currently%20used%20by%20%60templatize%60.%0Avar%20context%3Dinst._methodHost%7C%7Cinst%3Bvar%20fn%3Dcontext%5Binfo.methodName%5D%3Bif(fn)%7Bvar%20args%3Dinst._marshalArgs(info.args%2Cproperty%2Cprops)%3Breturn%20fn.apply(context%2Cargs)%3B%7Delse%20if(!info.dynamicFn)%7Bconsole.warn('method%20%60'%2Binfo.methodName%2B'%60%20not%20defined')%3B%7D%7Dvar%20emptyArray%3D%5B%5D%3B%2F%2F%20Regular%20expressions%20used%20for%20binding%0Avar%20IDENT%3D'(%3F%3A'%2B'%5Ba-zA-Z_%24%5D%5B%5C%5Cw.%3A%24%5C%5C-*%5D*'%2B')'%3Bvar%20NUMBER%3D'(%3F%3A'%2B'%5B-%2B%5D%3F%5B0-9%5D*%5C%5C.%3F%5B0-9%5D%2B(%3F%3A%5BeE%5D%5B-%2B%5D%3F%5B0-9%5D%2B)%3F'%2B')'%3Bvar%20SQUOTE_STRING%3D'(%3F%3A'%2B'%5C'(%3F%3A%5B%5E%5C'%5C%5C%5C%5C%5D%7C%5C%5C%5C%5C.)*%5C''%2B')'%3Bvar%20DQUOTE_STRING%3D'(%3F%3A'%2B'%22(%3F%3A%5B%5E%22%5C%5C%5C%5C%5D%7C%5C%5C%5C%5C.)*%22'%2B')'%3Bvar%20STRING%3D'(%3F%3A'%2BSQUOTE_STRING%2B'%7C'%2BDQUOTE_STRING%2B')'%3Bvar%20ARGUMENT%3D'(%3F%3A('%2BIDENT%2B'%7C'%2BNUMBER%2B'%7C'%2BSTRING%2B')%5C%5Cs*'%2B')'%3Bvar%20ARGUMENTS%3D'(%3F%3A'%2BARGUMENT%2B'(%3F%3A%2C%5C%5Cs*'%2BARGUMENT%2B')*'%2B')'%3Bvar%20ARGUMENT_LIST%3D'(%3F%3A'%2B'%5C%5C(%5C%5Cs*'%2B'(%3F%3A'%2BARGUMENTS%2B'%3F'%2B')'%2B'%5C%5C)%5C%5Cs*'%2B')'%3Bvar%20BINDING%3D'('%2BIDENT%2B'%5C%5Cs*'%2BARGUMENT_LIST%2B'%3F'%2B')'%3B%2F%2F%20Group%203%0Avar%20OPEN_BRACKET%3D'(%5C%5C%5B%5C%5C%5B%7C%7B%7B)'%2B'%5C%5Cs*'%3Bvar%20CLOSE_BRACKET%3D'(%3F%3A%5D%5D%7C%7D%7D)'%3Bvar%20NEGATE%3D'(%3F%3A(!)%5C%5Cs*)%3F'%3B%2F%2F%20Group%202%0Avar%20EXPRESSION%3DOPEN_BRACKET%2BNEGATE%2BBINDING%2BCLOSE_BRACKET%3Bvar%20bindingRegex%3Dnew%20RegExp(EXPRESSION%2C%22g%22)%3B%2F**%0A%20%20%20*%20Create%20a%20string%20from%20binding%20parts%20of%20all%20the%20literal%20parts%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!Array%3CBindingPart%3E%7D%20parts%20All%20parts%20to%20stringify%0A%20%20%20*%20%40return%20%7Bstring%7D%20String%20made%20from%20the%20literal%20parts%0A%20%20%20*%2Ffunction%20literalFromParts(parts)%7Bvar%20s%3D''%3Bfor(var%20i%3D0%3Bi%3Cparts.length%3Bi%2B%2B)%7Bvar%20literal%3Dparts%5Bi%5D.literal%3Bs%2B%3Dliteral%7C%7C''%3B%7Dreturn%20s%3B%7D%2F**%0A%20%20%20*%20Parses%20an%20expression%20string%20for%20a%20method%20signature%2C%20and%20returns%20a%20metadata%0A%20%20%20*%20describing%20the%20method%20in%20terms%20of%20%60methodName%60%2C%20%60static%60%20(whether%20all%20the%0A%20%20%20*%20arguments%20are%20literals)%2C%20and%20an%20array%20of%20%60args%60%0A%20%20%20*%0A%20%20%20*%20%40param%20%7Bstring%7D%20expression%20The%20expression%20to%20parse%0A%20%20%20*%20%40return%20%7B%3FMethodSignature%7D%20The%20method%20metadata%20object%20if%20a%20method%20expression%20was%0A%20%20%20*%20%20%20found%2C%20otherwise%20%60undefined%60%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20parseMethod(expression)%7B%2F%2F%20tries%20to%20match%20valid%20javascript%20property%20names%0Avar%20m%3Dexpression.match(%2F(%5B%5E%5Cs%5D%2B%3F)%5C((%5B%5Cs%5CS%5D*)%5C)%2F)%3Bif(m)%7Bvar%20methodName%3Dm%5B1%5D%3Bvar%20sig%3D%7BmethodName%3AmethodName%2Cstatic%3Atrue%2Cargs%3AemptyArray%7D%3Bif(m%5B2%5D.trim())%7B%2F%2F%20replace%20escaped%20commas%20with%20comma%20entity%2C%20split%20on%20un-escaped%20commas%0Avar%20args%3Dm%5B2%5D.replace(%2F%5C%5C%2C%2Fg%2C'%26comma%3B').split('%2C')%3Breturn%20parseArgs(args%2Csig)%3B%7Delse%7Breturn%20sig%3B%7D%7Dreturn%20null%3B%7D%2F**%0A%20%20%20*%20Parses%20an%20array%20of%20arguments%20and%20sets%20the%20%60args%60%20property%20of%20the%20supplied%0A%20%20%20*%20signature%20metadata%20object.%20Sets%20the%20%60static%60%20property%20to%20false%20if%20any%0A%20%20%20*%20argument%20is%20a%20non-literal.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!Array%3Cstring%3E%7D%20argList%20Array%20of%20argument%20names%0A%20%20%20*%20%40param%20%7B!MethodSignature%7D%20sig%20Method%20signature%20metadata%20object%0A%20%20%20*%20%40return%20%7B!MethodSignature%7D%20The%20updated%20signature%20metadata%20object%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20parseArgs(argList%2Csig)%7Bsig.args%3DargList.map(function(rawArg)%7Bvar%20arg%3DparseArg(rawArg)%3Bif(!arg.literal)%7Bsig.static%3Dfalse%3B%7Dreturn%20arg%3B%7D%2Cthis)%3Breturn%20sig%3B%7D%2F**%0A%20%20%20*%20Parses%20an%20individual%20argument%2C%20and%20returns%20an%20argument%20metadata%20object%0A%20%20%20*%20with%20the%20following%20fields%3A%0A%20%20%20*%0A%20%20%20*%20%20%20%7B%0A%20%20%20*%20%20%20%20%20value%3A%20'prop'%2C%20%20%20%20%20%20%20%20%2F%2F%20property%2Fpath%20or%20literal%20value%0A%20%20%20*%20%20%20%20%20literal%3A%20false%2C%20%20%20%20%20%20%20%2F%2F%20whether%20argument%20is%20a%20literal%0A%20%20%20*%20%20%20%20%20structured%3A%20false%2C%20%20%20%20%2F%2F%20whether%20the%20property%20is%20a%20path%0A%20%20%20*%20%20%20%20%20rootProperty%3A%20'prop'%2C%20%2F%2F%20the%20root%20property%20of%20the%20path%0A%20%20%20*%20%20%20%20%20wildcard%3A%20false%20%20%20%20%20%20%20%2F%2F%20whether%20the%20argument%20was%20a%20wildcard%20'.*'%20path%0A%20%20%20*%20%20%20%7D%0A%20%20%20*%0A%20%20%20*%20%40param%20%7Bstring%7D%20rawArg%20The%20string%20value%20of%20the%20argument%0A%20%20%20*%20%40return%20%7B!MethodArg%7D%20Argument%20metadata%20object%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20parseArg(rawArg)%7B%2F%2F%20clean%20up%20whitespace%0Avar%20arg%3DrawArg.trim()%2F%2F%20replace%20comma%20entity%20with%20comma%0A.replace(%2F%26comma%3B%2Fg%2C'%2C')%2F%2F%20repair%20extra%20escape%20sequences%3B%20note%20only%20commas%20strictly%20need%0A%2F%2F%20escaping%2C%20but%20we%20allow%20any%20other%20char%20to%20be%20escaped%20since%20its%0A%2F%2F%20likely%20users%20will%20do%20this%0A.replace(%2F%5C%5C(.)%2Fg%2C'%5C%241')%3B%2F%2F%20basic%20argument%20descriptor%0Avar%20a%3D%7Bname%3Aarg%2Cvalue%3A''%2Cliteral%3Afalse%7D%3B%2F%2F%20detect%20literal%20value%20(must%20be%20String%20or%20Number)%0Avar%20fc%3Darg%5B0%5D%3Bif(fc%3D%3D%3D'-')%7Bfc%3Darg%5B1%5D%3B%7Dif(fc%3E%3D'0'%26%26fc%3C%3D'9')%7Bfc%3D'%23'%3B%7Dswitch(fc)%7Bcase%22'%22%3Acase'%22'%3Aa.value%3Darg.slice(1%2C-1)%3Ba.literal%3Dtrue%3Bbreak%3Bcase'%23'%3Aa.value%3DNumber(arg)%3Ba.literal%3Dtrue%3Bbreak%3B%7D%2F%2F%20if%20not%20literal%2C%20look%20for%20structured%20path%0Aif(!a.literal)%7Ba.rootProperty%3DPolymer.Path.root(arg)%3B%2F%2F%20detect%20structured%20path%20(has%20dots)%0Aa.structured%3DPolymer.Path.isPath(arg)%3Bif(a.structured)%7Ba.wildcard%3Darg.slice(-2)%3D%3D'.*'%3Bif(a.wildcard)%7Ba.name%3Darg.slice(0%2C-2)%3B%7D%7D%7Dreturn%20a%3B%7D%2F%2F%20data%20api%0A%2F**%0A%20%20%20*%20Sends%20array%20splice%20notifications%20(%60.splices%60%20and%20%60.length%60)%0A%20%20%20*%0A%20%20%20*%20Note%3A%20this%20implementation%20only%20accepts%20normalized%20paths%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20Instance%20to%20send%20notifications%20to%0A%20%20%20*%20%40param%20%7BArray%7D%20array%20The%20array%20the%20mutations%20occurred%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20path%20The%20path%20to%20the%20array%20that%20was%20mutated%0A%20%20%20*%20%40param%20%7BArray%7D%20splices%20Array%20of%20splice%20records%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20_notifySplices(inst%2Carray%2Cpath%2Csplices)%7Bvar%20splicesPath%3Dpath%2B'.splices'%3Binst.notifyPath(splicesPath%2C%7BindexSplices%3Asplices%7D)%3Binst.notifyPath(path%2B'.length'%2Carray.length)%3B%2F%2F%20Null%20here%20to%20allow%20potentially%20large%20splice%20records%20to%20be%20GC'ed.%0Ainst.__data%5BsplicesPath%5D%3D%7BindexSplices%3Anull%7D%3B%7D%2F**%0A%20%20%20*%20Creates%20a%20splice%20record%20and%20sends%20an%20array%20splice%20notification%20for%0A%20%20%20*%20the%20described%20mutation%0A%20%20%20*%0A%20%20%20*%20Note%3A%20this%20implementation%20only%20accepts%20normalized%20paths%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20Instance%20to%20send%20notifications%20to%0A%20%20%20*%20%40param%20%7BArray%7D%20array%20The%20array%20the%20mutations%20occurred%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20path%20The%20path%20to%20the%20array%20that%20was%20mutated%0A%20%20%20*%20%40param%20%7Bnumber%7D%20index%20Index%20at%20which%20the%20array%20mutation%20occurred%0A%20%20%20*%20%40param%20%7Bnumber%7D%20addedCount%20Number%20of%20added%20items%0A%20%20%20*%20%40param%20%7BArray%7D%20removed%20Array%20of%20removed%20items%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20notifySplice(inst%2Carray%2Cpath%2Cindex%2CaddedCount%2Cremoved)%7B_notifySplices(inst%2Carray%2Cpath%2C%5B%7Bindex%3Aindex%2CaddedCount%3AaddedCount%2Cremoved%3Aremoved%2Cobject%3Aarray%2Ctype%3A'splice'%7D%5D)%3B%7D%2F**%0A%20%20%20*%20Returns%20an%20upper-cased%20version%20of%20the%20string.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7Bstring%7D%20name%20String%20to%20uppercase%0A%20%20%20*%20%40return%20%7Bstring%7D%20Uppercased%20string%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20upper(name)%7Breturn%20name%5B0%5D.toUpperCase()%2Bname.substring(1)%3B%7D%2F**%0A%20%20%20*%20Element%20class%20mixin%20that%20provides%20meta-programming%20for%20Polymer's%20template%0A%20%20%20*%20binding%20and%20data%20observation%20(collectively%2C%20%22property%20effects%22)%20system.%0A%20%20%20*%0A%20%20%20*%20This%20mixin%20uses%20provides%20the%20following%20key%20static%20methods%20for%20adding%0A%20%20%20*%20property%20effects%20to%20an%20element%20class%3A%0A%20%20%20*%20-%20%60addPropertyEffect%60%0A%20%20%20*%20-%20%60createPropertyObserver%60%0A%20%20%20*%20-%20%60createMethodObserver%60%0A%20%20%20*%20-%20%60createNotifyingProperty%60%0A%20%20%20*%20-%20%60createReadOnlyProperty%60%0A%20%20%20*%20-%20%60createReflectedProperty%60%0A%20%20%20*%20-%20%60createComputedProperty%60%0A%20%20%20*%20-%20%60bindTemplate%60%0A%20%20%20*%0A%20%20%20*%20Each%20method%20creates%20one%20or%20more%20property%20accessors%2C%20along%20with%20metadata%0A%20%20%20*%20used%20by%20this%20mixin's%20implementation%20of%20%60_propertiesChanged%60%20to%20perform%0A%20%20%20*%20the%20property%20effects.%0A%20%20%20*%0A%20%20%20*%20Underscored%20versions%20of%20the%20above%20methods%20also%20exist%20on%20the%20element%0A%20%20%20*%20prototype%20for%20adding%20property%20effects%20on%20instances%20at%20runtime.%0A%20%20%20*%0A%20%20%20*%20Note%20that%20this%20mixin%20overrides%20several%20%60PropertyAccessors%60%20methods%2C%20in%0A%20%20%20*%20many%20cases%20to%20maintain%20guarantees%20provided%20by%20the%20Polymer%201.x%20features%3B%0A%20%20%20*%20notably%20it%20changes%20property%20accessors%20to%20be%20synchronous%20by%20default%0A%20%20%20*%20whereas%20the%20default%20when%20using%20%60PropertyAccessors%60%20standalone%20is%20to%20be%0A%20%20%20*%20async%20by%20default.%0A%20%20%20*%0A%20%20%20*%20%40mixinFunction%0A%20%20%20*%20%40polymer%0A%20%20%20*%20%40appliesMixin%20Polymer.TemplateStamp%0A%20%20%20*%20%40appliesMixin%20Polymer.PropertyAccessors%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Element%20class%20mixin%20that%20provides%20meta-programming%20for%20Polymer's%0A%20%20%20*%20template%20binding%20and%20data%20observation%20system.%0A%20%20%20*%2FPolymer.PropertyEffects%3DPolymer.dedupingMixin(function(superClass)%7B%2F**%0A%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20*%20%40extends%20%7BsuperClass%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertyAccessors%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_TemplateStamp%7D%0A%20%20%20%20%20*%20%40unrestricted%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Fvar%20propertyEffectsBase%3DPolymer.TemplateStamp(Polymer.PropertyAccessors(superClass))%3B%2F**%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40mixinClass%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertyEffects%7D%0A%20%20%20%20%20*%20%40extends%20%7BpropertyEffectsBase%7D%0A%20%20%20%20%20*%20%40unrestricted%0A%20%20%20%20%20*%2Fvar%20PropertyEffects%3Dfunction(_propertyEffectsBase)%7B_inherits(PropertyEffects%2C_propertyEffectsBase)%3Bfunction%20PropertyEffects()%7B_classCallCheck(this%2CPropertyEffects)%3B%2F**%20%40type%20%7Bboolean%7D%20*%2F%2F%2F%20Used%20to%20identify%20users%20of%20this%20mixin%2C%20ala%20instanceof%0Avar%20_this%3D_possibleConstructorReturn(this%2C(PropertyEffects.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects)).call(this))%3B_this.__isPropertyEffectsClient%3Dtrue%3B%2F**%20%40type%20%7Bnumber%7D%20*%2F%2F%2F%20NOTE%3A%20used%20to%20track%20re-entrant%20calls%20to%20%60_flushProperties%60%0A%2F%2F%20path%20changes%20dirty%20check%20against%20%60__dataTemp%60%20only%20during%20one%20%22turn%22%0A%2F%2F%20and%20are%20cleared%20when%20%60__dataCounter%60%20returns%20to%200.%0A_this.__dataCounter%3D0%3B%2F**%20%40type%20%7Bboolean%7D%20*%2F_this.__dataClientsReady%3B%2F**%20%40type%20%7BArray%7D%20*%2F_this.__dataPendingClients%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__dataToNotify%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__dataLinkedPaths%3B%2F**%20%40type%20%7Bboolean%7D%20*%2F_this.__dataHasPaths%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__dataCompoundStorage%3B%2F**%20%40type%20%7BPolymer_PropertyEffects%7D%20*%2F_this.__dataHost%3B%2F**%20%40type%20%7B!Object%7D%20*%2F_this.__dataTemp%3B%2F**%20%40type%20%7Bboolean%7D%20*%2F_this.__dataClientsInitialized%3B%2F**%20%40type%20%7B!Object%7D%20*%2F_this.__data%3B%2F**%20%40type%20%7B!Object%7D%20*%2F_this.__dataPending%3B%2F**%20%40type%20%7B!Object%7D%20*%2F_this.__dataOld%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__computeEffects%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__reflectEffects%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__notifyEffects%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__propagateEffects%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__observeEffects%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__readOnly%3B%2F**%20%40type%20%7B!TemplateInfo%7D%20*%2F_this.__templateInfo%3Breturn%20_this%3B%7D_createClass(PropertyEffects%2C%5B%7Bkey%3A'_initializeProperties'%2C%2F**%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_initializeProperties()%7B_get(PropertyEffects.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects.prototype)%2C'_initializeProperties'%2Cthis).call(this)%3BhostStack.registerHost(this)%3Bthis.__dataClientsReady%3Dfalse%3Bthis.__dataPendingClients%3Dnull%3Bthis.__dataToNotify%3Dnull%3Bthis.__dataLinkedPaths%3Dnull%3Bthis.__dataHasPaths%3Dfalse%3B%2F%2F%20May%20be%20set%20on%20instance%20prior%20to%20upgrade%0Athis.__dataCompoundStorage%3Dthis.__dataCompoundStorage%7C%7Cnull%3Bthis.__dataHost%3Dthis.__dataHost%7C%7Cnull%3Bthis.__dataTemp%3D%7B%7D%3Bthis.__dataClientsInitialized%3Dfalse%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20%60Polymer.PropertyAccessors%60%20implementation%20to%20provide%20a%0A%20%20%20%20%20%20%20*%20more%20efficient%20implementation%20of%20initializing%20properties%20from%0A%20%20%20%20%20%20%20*%20the%20prototype%20on%20the%20instance.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20props%20Properties%20to%20initialize%20on%20the%20prototype%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_initializeProtoProperties'%2Cvalue%3Afunction%20_initializeProtoProperties(props)%7Bthis.__data%3DObject.create(props)%3Bthis.__dataPending%3DObject.create(props)%3Bthis.__dataOld%3D%7B%7D%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20%60Polymer.PropertyAccessors%60%20implementation%20to%20avoid%20setting%0A%20%20%20%20%20%20%20*%20%60_setProperty%60's%20%60shouldNotify%3A%20true%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20props%20Properties%20to%20initialize%20on%20the%20instance%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_initializeInstanceProperties'%2Cvalue%3Afunction%20_initializeInstanceProperties(props)%7Bvar%20readOnly%3Dthis%5BTYPES.READ_ONLY%5D%3Bfor(var%20prop%20in%20props)%7Bif(!readOnly%7C%7C!readOnly%5Bprop%5D)%7Bthis.__dataPending%3Dthis.__dataPending%7C%7C%7B%7D%3Bthis.__dataOld%3Dthis.__dataOld%7C%7C%7B%7D%3Bthis.__data%5Bprop%5D%3Dthis.__dataPending%5Bprop%5D%3Dprops%5Bprop%5D%3B%7D%7D%7D%2F%2F%20Prototype%20setup%20----------------------------------------%0A%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60addPropertyEffect%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20that%20should%20trigger%20the%20effect%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20type%20Effect%20type%2C%20from%20this.PROPERTY_EFFECT_TYPES%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20effect%20Effect%20metadata%20object%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_addPropertyEffect'%2Cvalue%3Afunction%20_addPropertyEffect(property%2Ctype%2Ceffect)%7Bthis._createPropertyAccessor(property%2Ctype%3D%3DTYPES.READ_ONLY)%3B%2F%2F%20effects%20are%20accumulated%20into%20arrays%20per%20property%20based%20on%20type%0Avar%20effects%3DensureOwnEffectMap(this%2Ctype)%5Bproperty%5D%3Bif(!effects)%7Beffects%3Dthis%5Btype%5D%5Bproperty%5D%3D%5B%5D%3B%7Deffects.push(effect)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Removes%20the%20given%20property%20effect.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20the%20effect%20was%20associated%20with%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20type%20Effect%20type%2C%20from%20this.PROPERTY_EFFECT_TYPES%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20effect%20Effect%20metadata%20object%20to%20remove%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_removePropertyEffect'%2Cvalue%3Afunction%20_removePropertyEffect(property%2Ctype%2Ceffect)%7Bvar%20effects%3DensureOwnEffectMap(this%2Ctype)%5Bproperty%5D%3Bvar%20idx%3Deffects.indexOf(effect)%3Bif(idx%3E%3D0)%7Beffects.splice(idx%2C1)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20whether%20the%20current%20prototype%2Finstance%20has%20a%20property%20effect%0A%20%20%20%20%20%20%20*%20of%20a%20certain%20type.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%3D%7D%20type%20Effect%20type%2C%20from%20this.PROPERTY_EFFECT_TYPES%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20the%20prototype%2Finstance%20has%20an%20effect%20of%20this%20type%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_hasPropertyEffect'%2Cvalue%3Afunction%20_hasPropertyEffect(property%2Ctype)%7Bvar%20effects%3Dthis%5Btype%5D%3Breturn%20Boolean(effects%26%26effects%5Bproperty%5D)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20whether%20the%20current%20prototype%2Finstance%20has%20a%20%22read%20only%22%0A%20%20%20%20%20%20%20*%20accessor%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20the%20prototype%2Finstance%20has%20an%20effect%20of%20this%20type%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_hasReadOnlyEffect'%2Cvalue%3Afunction%20_hasReadOnlyEffect(property)%7Breturn%20this._hasPropertyEffect(property%2CTYPES.READ_ONLY)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20whether%20the%20current%20prototype%2Finstance%20has%20a%20%22notify%22%0A%20%20%20%20%20%20%20*%20property%20effect%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20the%20prototype%2Finstance%20has%20an%20effect%20of%20this%20type%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_hasNotifyEffect'%2Cvalue%3Afunction%20_hasNotifyEffect(property)%7Breturn%20this._hasPropertyEffect(property%2CTYPES.NOTIFY)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20whether%20the%20current%20prototype%2Finstance%20has%20a%20%22reflect%20to%20attribute%22%0A%20%20%20%20%20%20%20*%20property%20effect%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20the%20prototype%2Finstance%20has%20an%20effect%20of%20this%20type%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_hasReflectEffect'%2Cvalue%3Afunction%20_hasReflectEffect(property)%7Breturn%20this._hasPropertyEffect(property%2CTYPES.REFLECT)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20whether%20the%20current%20prototype%2Finstance%20has%20a%20%22computed%22%0A%20%20%20%20%20%20%20*%20property%20effect%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20the%20prototype%2Finstance%20has%20an%20effect%20of%20this%20type%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_hasComputedEffect'%2Cvalue%3Afunction%20_hasComputedEffect(property)%7Breturn%20this._hasPropertyEffect(property%2CTYPES.COMPUTE)%3B%7D%2F%2F%20Runtime%20----------------------------------------%0A%2F**%0A%20%20%20%20%20%20%20*%20Sets%20a%20pending%20property%20or%20path.%20%20If%20the%20root%20property%20of%20the%20path%20in%0A%20%20%20%20%20%20%20*%20question%20had%20no%20accessor%2C%20the%20path%20is%20set%2C%20otherwise%20it%20is%20enqueued%0A%20%20%20%20%20%20%20*%20via%20%60_setPendingProperty%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20function%20isolates%20relatively%20expensive%20functionality%20necessary%0A%20%20%20%20%20%20%20*%20for%20the%20public%20API%20(%60set%60%2C%20%60setProperties%60%2C%20%60notifyPath%60%2C%20and%20property%0A%20%20%20%20%20%20%20*%20change%20listeners%20via%20%7B%7B...%7D%7D%20bindings)%2C%20such%20that%20it%20is%20only%20done%0A%20%20%20%20%20%20%20*%20when%20paths%20enter%20the%20system%2C%20and%20not%20at%20every%20propagation%20step.%20%20It%0A%20%20%20%20%20%20%20*%20also%20sets%20a%20%60__dataHasPaths%60%20flag%20on%20the%20instance%20which%20is%20used%20to%0A%20%20%20%20%20%20%20*%20fast-path%20slower%20path-matching%20code%20in%20the%20property%20effects%20host%20paths.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%60path%60%20can%20be%20a%20path%20string%20or%20array%20of%20path%20parts%20as%20accepted%20by%20the%0A%20%20%20%20%20%20%20*%20public%20API.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cnumber%7Cstring%3E%7D%20path%20Path%20to%20set%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20shouldNotify%20Set%20to%20true%20if%20this%20change%20should%0A%20%20%20%20%20%20%20*%20%20cause%20a%20property%20notification%20event%20dispatch%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20isPathNotification%20If%20the%20path%20being%20set%20is%20a%20path%0A%20%20%20%20%20%20%20*%20%20%20notification%20of%20an%20already%20changed%20value%2C%20as%20opposed%20to%20a%20request%0A%20%20%20%20%20%20%20*%20%20%20to%20set%20and%20notify%20the%20change.%20%20In%20the%20latter%20%60false%60%20case%2C%20a%20dirty%0A%20%20%20%20%20%20%20*%20%20%20check%20is%20performed%20and%20then%20the%20value%20is%20set%20to%20the%20path%20before%0A%20%20%20%20%20%20%20*%20%20%20enqueuing%20the%20pending%20property%20change.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Returns%20true%20if%20the%20property%2Fpath%20was%20enqueued%20in%0A%20%20%20%20%20%20%20*%20%20%20the%20pending%20changes%20bag.%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_setPendingPropertyOrPath'%2Cvalue%3Afunction%20_setPendingPropertyOrPath(path%2Cvalue%2CshouldNotify%2CisPathNotification)%7Bif(isPathNotification%7C%7CPolymer.Path.root(Array.isArray(path)%3Fpath%5B0%5D%3Apath)!%3D%3Dpath)%7B%2F%2F%20Dirty%20check%20changes%20being%20set%20to%20a%20path%20against%20the%20actual%20object%2C%0A%2F%2F%20since%20this%20is%20the%20entry%20point%20for%20paths%20into%20the%20system%3B%20from%20here%0A%2F%2F%20the%20only%20dirty%20checks%20are%20against%20the%20%60__dataTemp%60%20cache%20to%20prevent%0A%2F%2F%20duplicate%20work%20in%20the%20same%20turn%20only.%20Note%2C%20if%20this%20was%20a%20notification%0A%2F%2F%20of%20a%20change%20already%20set%20to%20a%20path%20(isPathNotification%3A%20true)%2C%0A%2F%2F%20we%20always%20let%20the%20change%20through%20and%20skip%20the%20%60set%60%20since%20it%20was%0A%2F%2F%20already%20dirty%20checked%20at%20the%20point%20of%20entry%20and%20the%20underlying%0A%2F%2F%20object%20has%20already%20been%20updated%0Aif(!isPathNotification)%7Bvar%20old%3DPolymer.Path.get(this%2Cpath)%3Bpath%3D%2F**%20%40type%20%7Bstring%7D%20*%2FPolymer.Path.set(this%2Cpath%2Cvalue)%3B%2F%2F%20Use%20property-accessor's%20simpler%20dirty%20check%0Aif(!path%7C%7C!_get(PropertyEffects.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects.prototype)%2C'_shouldPropertyChange'%2Cthis).call(this%2Cpath%2Cvalue%2Cold))%7Breturn%20false%3B%7D%7Dthis.__dataHasPaths%3Dtrue%3Bif(this._setPendingProperty(%2F**%40type%7Bstring%7D*%2Fpath%2Cvalue%2CshouldNotify))%7BcomputeLinkedPaths(this%2Cpath%2Cvalue)%3Breturn%20true%3B%7D%7Delse%7Bif(this.__dataHasAccessor%26%26this.__dataHasAccessor%5Bpath%5D)%7Breturn%20this._setPendingProperty(%2F**%40type%7Bstring%7D*%2Fpath%2Cvalue%2CshouldNotify)%3B%7Delse%7Bthis%5Bpath%5D%3Dvalue%3B%7D%7Dreturn%20false%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Applies%20a%20value%20to%20a%20non-Polymer%20element%2Fnode's%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20implementation%20makes%20a%20best-effort%20at%20binding%20interop%3A%0A%20%20%20%20%20%20%20*%20Some%20native%20element%20properties%20have%20side-effects%20when%0A%20%20%20%20%20%20%20*%20re-setting%20the%20same%20value%20(e.g.%20setting%20%60%3Cinput%3E.value%60%20resets%20the%0A%20%20%20%20%20%20%20*%20cursor%20position)%2C%20so%20we%20do%20a%20dirty-check%20before%20setting%20the%20value.%0A%20%20%20%20%20%20%20*%20However%2C%20for%20better%20interop%20with%20non-Polymer%20custom%20elements%20that%0A%20%20%20%20%20%20%20*%20accept%20objects%2C%20we%20explicitly%20re-set%20object%20changes%20coming%20from%20the%0A%20%20%20%20%20%20%20*%20Polymer%20world%20(which%20may%20include%20deep%20object%20changes%20without%20the%0A%20%20%20%20%20%20%20*%20top%20reference%20changing)%2C%20erring%20on%20the%20side%20of%20providing%20more%0A%20%20%20%20%20%20%20*%20information.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Users%20may%20override%20this%20method%20to%20provide%20alternate%20approaches.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Node%7D%20node%20The%20node%20to%20set%20a%20property%20on%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20prop%20The%20property%20to%20set%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20The%20value%20to%20set%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_setUnmanagedPropertyToNode'%2Cvalue%3Afunction%20_setUnmanagedPropertyToNode(node%2Cprop%2Cvalue)%7B%2F%2F%20It%20is%20a%20judgment%20call%20that%20resetting%20primitives%20is%0A%2F%2F%20%22bad%22%20and%20resettings%20objects%20is%20also%20%22good%22%3B%20alternatively%20we%20could%0A%2F%2F%20implement%20a%20whitelist%20of%20tag%20%26%20property%20values%20that%20should%20never%0A%2F%2F%20be%20reset%20(e.g.%20%3Cinput%3E.value%20%26%26%20%3Cselect%3E.value)%0Aif(value!%3D%3Dnode%5Bprop%5D%7C%7C(typeof%20value%3D%3D%3D'undefined'%3F'undefined'%3A_typeof(value))%3D%3D'object')%7Bnode%5Bprop%5D%3Dvalue%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20the%20%60PropertiesChanged%60%20implementation%20to%20introduce%20special%0A%20%20%20%20%20%20%20*%20dirty%20check%20logic%20depending%20on%20the%20property%20%26%20value%20being%20set%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%201.%20Any%20value%20set%20to%20a%20path%20(e.g.%20'obj.prop'%3A%2042%20or%20'obj.prop'%3A%20%7B...%7D)%0A%20%20%20%20%20%20%20*%20%20%20%20Stored%20in%20%60__dataTemp%60%2C%20dirty%20checked%20against%20%60__dataTemp%60%0A%20%20%20%20%20%20%20*%202.%20Object%20set%20to%20simple%20property%20(e.g.%20'prop'%3A%20%7B...%7D)%0A%20%20%20%20%20%20%20*%20%20%20%20Stored%20in%20%60__dataTemp%60%20and%20%60__data%60%2C%20dirty%20checked%20against%0A%20%20%20%20%20%20%20*%20%20%20%20%60__dataTemp%60%20by%20default%20implementation%20of%20%60_shouldPropertyChange%60%0A%20%20%20%20%20%20%20*%203.%20Primitive%20value%20set%20to%20simple%20property%20(e.g.%20'prop'%3A%2042)%0A%20%20%20%20%20%20%20*%20%20%20%20Stored%20in%20%60__data%60%2C%20dirty%20checked%20against%20%60__data%60%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20dirty-check%20is%20important%20to%20prevent%20cycles%20due%20to%20two-way%0A%20%20%20%20%20%20%20*%20notification%2C%20but%20paths%20and%20objects%20are%20only%20dirty%20checked%20against%20any%0A%20%20%20%20%20%20%20*%20previous%20value%20set%20during%20this%20turn%20via%20a%20%22temporary%20cache%22%20that%20is%0A%20%20%20%20%20%20%20*%20cleared%20when%20the%20last%20%60_propertiesChanged%60%20exits.%20This%20is%20so%3A%0A%20%20%20%20%20%20%20*%20a.%20any%20cached%20array%20paths%20(e.g.%20'array.3.prop')%20may%20be%20invalidated%0A%20%20%20%20%20%20%20*%20%20%20%20due%20to%20array%20mutations%20like%20shift%2Funshift%2Fsplice%3B%20this%20is%20fine%0A%20%20%20%20%20%20%20*%20%20%20%20since%20path%20changes%20are%20dirty-checked%20at%20user%20entry%20points%20like%20%60set%60%0A%20%20%20%20%20%20%20*%20b.%20dirty-checking%20for%20objects%20only%20lasts%20one%20turn%20to%20allow%20the%20user%0A%20%20%20%20%20%20%20*%20%20%20%20to%20mutate%20the%20object%20in-place%20and%20re-set%20it%20with%20the%20same%20identity%0A%20%20%20%20%20%20%20*%20%20%20%20and%20have%20all%20sub-properties%20re-propagated%20in%20a%20subsequent%20turn.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20temp%20cache%20is%20not%20necessarily%20sufficient%20to%20prevent%20invalid%20array%0A%20%20%20%20%20%20%20*%20paths%2C%20since%20a%20splice%20can%20happen%20during%20the%20same%20turn%20(with%20pathological%0A%20%20%20%20%20%20%20*%20user%20code)%3B%20we%20could%20introduce%20a%20%22fixup%22%20for%20temporarily%20cached%20array%0A%20%20%20%20%20%20%20*%20paths%20if%20needed%3A%20https%3A%2F%2Fgithub.com%2FPolymer%2Fpolymer%2Fissues%2F4227%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20the%20property%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20shouldNotify%20True%20if%20property%20should%20fire%20notification%0A%20%20%20%20%20%20%20*%20%20%20event%20(applies%20only%20for%20%60notify%3A%20true%60%20properties)%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Returns%20true%20if%20the%20property%20changed%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_setPendingProperty'%2Cvalue%3Afunction%20_setPendingProperty(property%2Cvalue%2CshouldNotify)%7Bvar%20isPath%3Dthis.__dataHasPaths%26%26Polymer.Path.isPath(property)%3Bvar%20prevProps%3DisPath%3Fthis.__dataTemp%3Athis.__data%3Bif(this._shouldPropertyChange(property%2Cvalue%2CprevProps%5Bproperty%5D))%7Bif(!this.__dataPending)%7Bthis.__dataPending%3D%7B%7D%3Bthis.__dataOld%3D%7B%7D%3B%7D%2F%2F%20Ensure%20old%20is%20captured%20from%20the%20last%20turn%0Aif(!(property%20in%20this.__dataOld))%7Bthis.__dataOld%5Bproperty%5D%3Dthis.__data%5Bproperty%5D%3B%7D%2F%2F%20Paths%20are%20stored%20in%20temporary%20cache%20(cleared%20at%20end%20of%20turn)%2C%0A%2F%2F%20which%20is%20used%20for%20dirty-checking%2C%20all%20others%20stored%20in%20__data%0Aif(isPath)%7Bthis.__dataTemp%5Bproperty%5D%3Dvalue%3B%7Delse%7Bthis.__data%5Bproperty%5D%3Dvalue%3B%7D%2F%2F%20All%20changes%20go%20into%20pending%20property%20bag%2C%20passed%20to%20_propertiesChanged%0Athis.__dataPending%5Bproperty%5D%3Dvalue%3B%2F%2F%20Track%20properties%20that%20should%20notify%20separately%0Aif(isPath%7C%7Cthis%5BTYPES.NOTIFY%5D%26%26this%5BTYPES.NOTIFY%5D%5Bproperty%5D)%7Bthis.__dataToNotify%3Dthis.__dataToNotify%7C%7C%7B%7D%3Bthis.__dataToNotify%5Bproperty%5D%3DshouldNotify%3B%7Dreturn%20true%3B%7Dreturn%20false%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20base%20implementation%20to%20ensure%20all%20accessors%20set%20%60shouldNotify%60%0A%20%20%20%20%20%20%20*%20to%20true%2C%20for%20per-property%20notification%20tracking.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20the%20property%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_setProperty'%2Cvalue%3Afunction%20_setProperty(property%2Cvalue)%7Bif(this._setPendingProperty(property%2Cvalue%2Ctrue))%7Bthis._invalidateProperties()%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20%60PropertyAccessor%60's%20default%20async%20queuing%20of%0A%20%20%20%20%20%20%20*%20%60_propertiesChanged%60%3A%20if%20%60__dataReady%60%20is%20false%20(has%20not%20yet%20been%0A%20%20%20%20%20%20%20*%20manually%20flushed)%2C%20the%20function%20no-ops%3B%20otherwise%20flushes%0A%20%20%20%20%20%20%20*%20%60_propertiesChanged%60%20synchronously.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_invalidateProperties'%2Cvalue%3Afunction%20_invalidateProperties()%7Bif(this.__dataReady)%7Bthis._flushProperties()%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Enqueues%20the%20given%20client%20on%20a%20list%20of%20pending%20clients%2C%20whose%0A%20%20%20%20%20%20%20*%20pending%20property%20changes%20can%20later%20be%20flushed%20via%20a%20call%20to%0A%20%20%20%20%20%20%20*%20%60_flushClients%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20client%20PropertyEffects%20client%20to%20enqueue%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_enqueueClient'%2Cvalue%3Afunction%20_enqueueClient(client)%7Bthis.__dataPendingClients%3Dthis.__dataPendingClients%7C%7C%5B%5D%3Bif(client!%3D%3Dthis)%7Bthis.__dataPendingClients.push(client)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20superclass%20implementation.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_flushProperties'%2Cvalue%3Afunction%20_flushProperties()%7Bthis.__dataCounter%2B%2B%3B_get(PropertyEffects.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects.prototype)%2C'_flushProperties'%2Cthis).call(this)%3Bthis.__dataCounter--%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Flushes%20any%20clients%20previously%20enqueued%20via%20%60_enqueueClient%60%2C%20causing%0A%20%20%20%20%20%20%20*%20their%20%60_flushProperties%60%20method%20to%20run.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_flushClients'%2Cvalue%3Afunction%20_flushClients()%7Bif(!this.__dataClientsReady)%7Bthis.__dataClientsReady%3Dtrue%3Bthis._readyClients()%3B%2F%2F%20Override%20point%20where%20accessors%20are%20turned%20on%3B%20importantly%2C%0A%2F%2F%20this%20is%20after%20clients%20have%20fully%20readied%2C%20providing%20a%20guarantee%0A%2F%2F%20that%20any%20property%20effects%20occur%20only%20after%20all%20clients%20are%20ready.%0Athis.__dataReady%3Dtrue%3B%7Delse%7Bthis.__enableOrFlushClients()%3B%7D%7D%2F%2F%20NOTE%3A%20We%20ensure%20clients%20either%20enable%20or%20flush%20as%20appropriate.%20This%0A%2F%2F%20handles%20two%20corner%20cases%3A%0A%2F%2F%20(1)%20clients%20flush%20properly%20when%20connected%2Fenabled%20before%20the%20host%0A%2F%2F%20enables%3B%20e.g.%0A%2F%2F%20%20%20(a)%20Templatize%20stamps%20with%20no%20properties%20and%20does%20not%20flush%20and%0A%2F%2F%20%20%20(b)%20the%20instance%20is%20inserted%20into%20dom%20and%0A%2F%2F%20%20%20(c)%20then%20the%20instance%20flushes.%0A%2F%2F%20(2)%20clients%20enable%20properly%20when%20not%20connected%2Fenabled%20when%20the%20host%0A%2F%2F%20flushes%3B%20e.g.%0A%2F%2F%20%20%20(a)%20a%20template%20is%20runtime%20stamped%20and%20not%20yet%20connected%2Fenabled%0A%2F%2F%20%20%20(b)%20a%20host%20sets%20a%20property%2C%20causing%20stamped%20dom%20to%20flush%0A%2F%2F%20%20%20(c)%20the%20stamped%20dom%20enables.%0A%7D%2C%7Bkey%3A'__enableOrFlushClients'%2Cvalue%3Afunction%20__enableOrFlushClients()%7Bvar%20clients%3Dthis.__dataPendingClients%3Bif(clients)%7Bthis.__dataPendingClients%3Dnull%3Bfor(var%20i%3D0%3Bi%3Cclients.length%3Bi%2B%2B)%7Bvar%20client%3Dclients%5Bi%5D%3Bif(!client.__dataEnabled)%7Bclient._enableProperties()%3B%7Delse%20if(client.__dataPending)%7Bclient._flushProperties()%3B%7D%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Perform%20any%20initial%20setup%20on%20client%20dom.%20Called%20before%20the%20first%0A%20%20%20%20%20%20%20*%20%60_flushProperties%60%20call%20on%20client%20dom%20and%20before%20any%20element%0A%20%20%20%20%20%20%20*%20observers%20are%20called.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_readyClients'%2Cvalue%3Afunction%20_readyClients()%7Bthis.__enableOrFlushClients()%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Sets%20a%20bag%20of%20property%20changes%20to%20this%20instance%2C%20and%0A%20%20%20%20%20%20%20*%20synchronously%20processes%20all%20effects%20of%20the%20properties%20as%20a%20batch.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Property%20names%20must%20be%20simple%20properties%2C%20not%20paths.%20%20Batched%0A%20%20%20%20%20%20%20*%20path%20propagation%20is%20not%20supported.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20one%20or%20more%20key-value%20pairs%20whose%20key%20is%0A%20%20%20%20%20%20%20*%20%20%20a%20property%20and%20value%20is%20the%20new%20value%20to%20set%20for%20that%20property.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20setReadOnly%20When%20true%2C%20any%20private%20values%20set%20in%0A%20%20%20%20%20%20%20*%20%20%20%60props%60%20will%20be%20set.%20By%20default%2C%20%60setProperties%60%20will%20not%20set%0A%20%20%20%20%20%20%20*%20%20%20%60readOnly%3A%20true%60%20root%20properties.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'setProperties'%2Cvalue%3Afunction%20setProperties(props%2CsetReadOnly)%7Bfor(var%20path%20in%20props)%7Bif(setReadOnly%7C%7C!this%5BTYPES.READ_ONLY%5D%7C%7C!this%5BTYPES.READ_ONLY%5D%5Bpath%5D)%7B%2F%2FTODO(kschaaf)%3A%20explicitly%20disallow%20paths%20in%20setProperty%3F%0A%2F%2F%20wildcard%20observers%20currently%20only%20pass%20the%20first%20changed%20path%0A%2F%2F%20in%20the%20%60info%60%20object%2C%20and%20you%20could%20do%20some%20odd%20things%20batching%0A%2F%2F%20paths%2C%20e.g.%20%7B'foo.bar'%3A%20%7B...%7D%2C%20'foo'%3A%20null%7D%0Athis._setPendingPropertyOrPath(path%2Cprops%5Bpath%5D%2Ctrue)%3B%7D%7Dthis._invalidateProperties()%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20%60PropertyAccessors%60%20so%20that%20property%20accessor%0A%20%20%20%20%20%20%20*%20side%20effects%20are%20not%20enabled%20until%20after%20client%20dom%20is%20fully%20ready.%0A%20%20%20%20%20%20%20*%20Also%20calls%20%60_flushClients%60%20callback%20to%20ensure%20client%20dom%20is%20enabled%0A%20%20%20%20%20%20%20*%20that%20was%20not%20enabled%20as%20a%20result%20of%20flushing%20properties.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'ready'%2Cvalue%3Afunction%20ready()%7B%2F%2F%20It%20is%20important%20that%20%60super.ready()%60%20is%20not%20called%20here%20as%20it%0A%2F%2F%20immediately%20turns%20on%20accessors.%20Instead%2C%20we%20wait%20until%20%60readyClients%60%0A%2F%2F%20to%20enable%20accessors%20to%20provide%20a%20guarantee%20that%20clients%20are%20ready%0A%2F%2F%20before%20processing%20any%20accessors%20side%20effects.%0Athis._flushProperties()%3B%2F%2F%20If%20no%20data%20was%20pending%2C%20%60_flushProperties%60%20will%20not%20%60flushClients%60%0A%2F%2F%20so%20ensure%20this%20is%20done.%0Aif(!this.__dataClientsReady)%7Bthis._flushClients()%3B%7D%2F%2F%20Before%20ready%2C%20client%20notifications%20do%20not%20trigger%20_flushProperties.%0A%2F%2F%20Therefore%20a%20flush%20is%20necessary%20here%20if%20data%20has%20been%20set.%0Aif(this.__dataPending)%7Bthis._flushProperties()%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Implements%20%60PropertyAccessors%60's%20properties%20changed%20callback.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Runs%20each%20class%20of%20effects%20for%20the%20batch%20of%20changed%20properties%20in%0A%20%20%20%20%20%20%20*%20a%20specific%20order%20(compute%2C%20propagate%2C%20reflect%2C%20observe%2C%20notify).%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20currentProps%20Bag%20of%20all%20current%20accessor%20values%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20changedProps%20Bag%20of%20properties%20changed%20since%20the%20last%0A%20%20%20%20%20%20%20*%20%20%20call%20to%20%60_propertiesChanged%60%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20oldProps%20Bag%20of%20previous%20values%20for%20each%20property%0A%20%20%20%20%20%20%20*%20%20%20in%20%60changedProps%60%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_propertiesChanged'%2Cvalue%3Afunction%20_propertiesChanged(currentProps%2CchangedProps%2ColdProps)%7B%2F%2F%20----------------------------%0A%2F%2F%20let%20c%20%3D%20Object.getOwnPropertyNames(changedProps%20%7C%7C%20%7B%7D)%3B%0A%2F%2F%20window.debug%20%26%26%20console.group(this.localName%20%2B%20'%23'%20%2B%20this.id%20%2B%20'%3A%20'%20%2B%20c)%3B%0A%2F%2F%20if%20(window.debug)%20%7B%20debugger%3B%20%7D%0A%2F%2F%20----------------------------%0Avar%20hasPaths%3Dthis.__dataHasPaths%3Bthis.__dataHasPaths%3Dfalse%3B%2F%2F%20Compute%20properties%0ArunComputedEffects(this%2CchangedProps%2ColdProps%2ChasPaths)%3B%2F%2F%20Clear%20notify%20properties%20prior%20to%20possible%20reentry%20(propagate%2C%20observe)%2C%0A%2F%2F%20but%20after%20computing%20effects%20have%20a%20chance%20to%20add%20to%20them%0Avar%20notifyProps%3Dthis.__dataToNotify%3Bthis.__dataToNotify%3Dnull%3B%2F%2F%20Propagate%20properties%20to%20clients%0Athis._propagatePropertyChanges(changedProps%2ColdProps%2ChasPaths)%3B%2F%2F%20Flush%20clients%0Athis._flushClients()%3B%2F%2F%20Reflect%20properties%0ArunEffects(this%2Cthis%5BTYPES.REFLECT%5D%2CchangedProps%2ColdProps%2ChasPaths)%3B%2F%2F%20Observe%20properties%0ArunEffects(this%2Cthis%5BTYPES.OBSERVE%5D%2CchangedProps%2ColdProps%2ChasPaths)%3B%2F%2F%20Notify%20properties%20to%20host%0Aif(notifyProps)%7BrunNotifyEffects(this%2CnotifyProps%2CchangedProps%2ColdProps%2ChasPaths)%3B%7D%2F%2F%20Clear%20temporary%20cache%20at%20end%20of%20turn%0Aif(this.__dataCounter%3D%3D1)%7Bthis.__dataTemp%3D%7B%7D%3B%7D%2F%2F%20----------------------------%0A%2F%2F%20window.debug%20%26%26%20console.groupEnd(this.localName%20%2B%20'%23'%20%2B%20this.id%20%2B%20'%3A%20'%20%2B%20c)%3B%0A%2F%2F%20----------------------------%0A%7D%2F**%0A%20%20%20%20%20%20%20*%20Called%20to%20propagate%20any%20property%20changes%20to%20stamped%20template%20nodes%0A%20%20%20%20%20%20%20*%20managed%20by%20this%20element.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20changedProps%20Bag%20of%20changed%20properties%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_propagatePropertyChanges'%2Cvalue%3Afunction%20_propagatePropertyChanges(changedProps%2ColdProps%2ChasPaths)%7Bif(this%5BTYPES.PROPAGATE%5D)%7BrunEffects(this%2Cthis%5BTYPES.PROPAGATE%5D%2CchangedProps%2ColdProps%2ChasPaths)%3B%7Dvar%20templateInfo%3Dthis.__templateInfo%3Bwhile(templateInfo)%7BrunEffects(this%2CtemplateInfo.propertyEffects%2CchangedProps%2ColdProps%2ChasPaths%2CtemplateInfo.nodeList)%3BtemplateInfo%3DtemplateInfo.nextTemplateInfo%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Aliases%20one%20data%20path%20as%20another%2C%20such%20that%20path%20notifications%20from%20one%0A%20%20%20%20%20%20%20*%20are%20routed%20to%20the%20other.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20to%20Target%20path%20to%20link.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20from%20Source%20path%20to%20link.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'linkPaths'%2Cvalue%3Afunction%20linkPaths(to%2Cfrom)%7Bto%3DPolymer.Path.normalize(to)%3Bfrom%3DPolymer.Path.normalize(from)%3Bthis.__dataLinkedPaths%3Dthis.__dataLinkedPaths%7C%7C%7B%7D%3Bthis.__dataLinkedPaths%5Bto%5D%3Dfrom%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Removes%20a%20data%20path%20alias%20previously%20established%20with%20%60_linkPaths%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%2C%20the%20path%20to%20unlink%20should%20be%20the%20target%20(%60to%60)%20used%20when%0A%20%20%20%20%20%20%20*%20linking%20the%20paths.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Target%20path%20to%20unlink.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'unlinkPaths'%2Cvalue%3Afunction%20unlinkPaths(path)%7Bpath%3DPolymer.Path.normalize(path)%3Bif(this.__dataLinkedPaths)%7Bdelete%20this.__dataLinkedPaths%5Bpath%5D%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Notify%20that%20an%20array%20has%20changed.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%20%20%20%20this.items%20%3D%20%5B%20%7Bname%3A%20'Jim'%7D%2C%20%7Bname%3A%20'Todd'%7D%2C%20%7Bname%3A%20'Bill'%7D%20%5D%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20...%0A%20%20%20%20%20%20%20*%20%20%20%20%20this.items.splice(1%2C%201%2C%20%7Bname%3A%20'Sam'%7D)%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20this.items.push(%7Bname%3A%20'Bob'%7D)%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20this.notifySplices('items'%2C%20%5B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%7B%20index%3A%201%2C%20removed%3A%20%5B%7Bname%3A%20'Todd'%7D%5D%2C%20addedCount%3A%201%2C%20object%3A%20this.items%2C%20type%3A%20'splice'%20%7D%2C%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%7B%20index%3A%203%2C%20removed%3A%20%5B%5D%2C%20addedCount%3A%201%2C%20object%3A%20this.items%2C%20type%3A%20'splice'%7D%0A%20%20%20%20%20%20%20*%20%20%20%20%20%5D)%3B%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20path%20Path%20that%20should%20be%20notified.%0A%20%20%20%20%20%20%20*%20%40param%20%7BArray%7D%20splices%20Array%20of%20splice%20records%20indicating%20ordered%0A%20%20%20%20%20%20%20*%20%20%20changes%20that%20occurred%20to%20the%20array.%20Each%20record%20should%20have%20the%0A%20%20%20%20%20%20%20*%20%20%20following%20fields%3A%0A%20%20%20%20%20%20%20*%20%20%20%20*%20index%3A%20index%20at%20which%20the%20change%20occurred%0A%20%20%20%20%20%20%20*%20%20%20%20*%20removed%3A%20array%20of%20items%20that%20were%20removed%20from%20this%20index%0A%20%20%20%20%20%20%20*%20%20%20%20*%20addedCount%3A%20number%20of%20new%20items%20added%20at%20this%20index%0A%20%20%20%20%20%20%20*%20%20%20%20*%20object%3A%20a%20reference%20to%20the%20array%20in%20question%0A%20%20%20%20%20%20%20*%20%20%20%20*%20type%3A%20the%20string%20literal%20'splice'%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%20%20Note%20that%20splice%20records%20_must_%20be%20normalized%20such%20that%20they%20are%0A%20%20%20%20%20%20%20*%20%20%20reported%20in%20index%20order%20(raw%20results%20from%20%60Object.observe%60%20are%20not%0A%20%20%20%20%20%20%20*%20%20%20ordered%20and%20must%20be%20normalized%2Fmerged%20before%20notifying).%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'notifySplices'%2Cvalue%3Afunction%20notifySplices(path%2Csplices)%7Bvar%20info%3D%7Bpath%3A''%7D%3Bvar%20array%3D%2F**%20%40type%20%7BArray%7D%20*%2FPolymer.Path.get(this%2Cpath%2Cinfo)%3B_notifySplices(this%2Carray%2Cinfo.path%2Csplices)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Convenience%20method%20for%20reading%20a%20value%20from%20a%20path.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%2C%20if%20any%20part%20in%20the%20path%20is%20undefined%2C%20this%20method%20returns%0A%20%20%20%20%20%20%20*%20%60undefined%60%20(this%20method%20does%20not%20throw%20when%20dereferencing%20undefined%0A%20%20%20%20%20%20%20*%20paths).%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B(string%7C!Array%3C(string%7Cnumber)%3E)%7D%20path%20Path%20to%20the%20value%0A%20%20%20%20%20%20%20*%20%20%20to%20read.%20%20The%20path%20may%20be%20specified%20as%20a%20string%20(e.g.%20%60foo.bar.baz%60)%0A%20%20%20%20%20%20%20*%20%20%20or%20an%20array%20of%20path%20parts%20(e.g.%20%60%5B'foo.bar'%2C%20'baz'%5D%60).%20%20Note%20that%0A%20%20%20%20%20%20%20*%20%20%20bracketed%20expressions%20are%20not%20supported%3B%20string-based%20path%20parts%0A%20%20%20%20%20%20%20*%20%20%20*must*%20be%20separated%20by%20dots.%20%20Note%20that%20when%20dereferencing%20array%0A%20%20%20%20%20%20%20*%20%20%20indices%2C%20the%20index%20may%20be%20used%20as%20a%20dotted%20part%20directly%0A%20%20%20%20%20%20%20*%20%20%20(e.g.%20%60users.12.name%60%20or%20%60%5B'users'%2C%2012%2C%20'name'%5D%60).%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20root%20Root%20object%20from%20which%20the%20path%20is%20evaluated.%0A%20%20%20%20%20%20%20*%20%40return%20%7B*%7D%20Value%20at%20the%20path%2C%20or%20%60undefined%60%20if%20any%20part%20of%20the%20path%0A%20%20%20%20%20%20%20*%20%20%20is%20undefined.%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'get'%2Cvalue%3Afunction%20get(path%2Croot)%7Breturn%20Polymer.Path.get(root%7C%7Cthis%2Cpath)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Convenience%20method%20for%20setting%20a%20value%20to%20a%20path%20and%20notifying%20any%0A%20%20%20%20%20%20%20*%20elements%20bound%20to%20the%20same%20path.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%2C%20if%20any%20part%20in%20the%20path%20except%20for%20the%20last%20is%20undefined%2C%0A%20%20%20%20%20%20%20*%20this%20method%20does%20nothing%20(this%20method%20does%20not%20throw%20when%0A%20%20%20%20%20%20%20*%20dereferencing%20undefined%20paths).%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B(string%7C!Array%3C(string%7Cnumber)%3E)%7D%20path%20Path%20to%20the%20value%0A%20%20%20%20%20%20%20*%20%20%20to%20write.%20%20The%20path%20may%20be%20specified%20as%20a%20string%20(e.g.%20%60'foo.bar.baz'%60)%0A%20%20%20%20%20%20%20*%20%20%20or%20an%20array%20of%20path%20parts%20(e.g.%20%60%5B'foo.bar'%2C%20'baz'%5D%60).%20%20Note%20that%0A%20%20%20%20%20%20%20*%20%20%20bracketed%20expressions%20are%20not%20supported%3B%20string-based%20path%20parts%0A%20%20%20%20%20%20%20*%20%20%20*must*%20be%20separated%20by%20dots.%20%20Note%20that%20when%20dereferencing%20array%0A%20%20%20%20%20%20%20*%20%20%20indices%2C%20the%20index%20may%20be%20used%20as%20a%20dotted%20part%20directly%0A%20%20%20%20%20%20%20*%20%20%20(e.g.%20%60'users.12.name'%60%20or%20%60%5B'users'%2C%2012%2C%20'name'%5D%60).%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%20at%20the%20specified%20path.%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20root%20Root%20object%20from%20which%20the%20path%20is%20evaluated.%0A%20%20%20%20%20%20%20*%20%20%20When%20specified%2C%20no%20notification%20will%20occur.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'set'%2Cvalue%3Afunction%20set(path%2Cvalue%2Croot)%7Bif(root)%7BPolymer.Path.set(root%2Cpath%2Cvalue)%3B%7Delse%7Bif(!this%5BTYPES.READ_ONLY%5D%7C%7C!this%5BTYPES.READ_ONLY%5D%5B%2F**%20%40type%20%7Bstring%7D%20*%2Fpath%5D)%7Bif(this._setPendingPropertyOrPath(path%2Cvalue%2Ctrue))%7Bthis._invalidateProperties()%3B%7D%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Adds%20items%20onto%20the%20end%20of%20the%20array%20at%20the%20path%20specified.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20arguments%20after%20%60path%60%20and%20return%20value%20match%20that%20of%0A%20%20%20%20%20%20%20*%20%60Array.prototype.push%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20notifies%20other%20paths%20to%20the%20same%20array%20that%20a%0A%20%20%20%20%20%20%20*%20splice%20occurred%20to%20the%20array.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Path%20to%20array.%0A%20%20%20%20%20%20%20*%20%40param%20%7B...*%7D%20items%20Items%20to%20push%20onto%20array%0A%20%20%20%20%20%20%20*%20%40return%20%7Bnumber%7D%20New%20length%20of%20the%20array.%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'push'%2Cvalue%3Afunction%20push(path)%7Bvar%20info%3D%7Bpath%3A''%7D%3Bvar%20array%3D%2F**%20%40type%20%7BArray%7D*%2FPolymer.Path.get(this%2Cpath%2Cinfo)%3Bvar%20len%3Darray.length%3Bfor(var%20_len%3Darguments.length%2Citems%3DArray(_len%3E1%3F_len-1%3A0)%2C_key%3D1%3B_key%3C_len%3B_key%2B%2B)%7Bitems%5B_key-1%5D%3Darguments%5B_key%5D%3B%7Dvar%20ret%3Darray.push.apply(array%2Citems)%3Bif(items.length)%7BnotifySplice(this%2Carray%2Cinfo.path%2Clen%2Citems.length%2C%5B%5D)%3B%7Dreturn%20ret%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Removes%20an%20item%20from%20the%20end%20of%20array%20at%20the%20path%20specified.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20arguments%20after%20%60path%60%20and%20return%20value%20match%20that%20of%0A%20%20%20%20%20%20%20*%20%60Array.prototype.pop%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20notifies%20other%20paths%20to%20the%20same%20array%20that%20a%0A%20%20%20%20%20%20%20*%20splice%20occurred%20to%20the%20array.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Path%20to%20array.%0A%20%20%20%20%20%20%20*%20%40return%20%7B*%7D%20Item%20that%20was%20removed.%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'pop'%2Cvalue%3Afunction%20pop(path)%7Bvar%20info%3D%7Bpath%3A''%7D%3Bvar%20array%3D%2F**%20%40type%20%7BArray%7D%20*%2FPolymer.Path.get(this%2Cpath%2Cinfo)%3Bvar%20hadLength%3DBoolean(array.length)%3Bvar%20ret%3Darray.pop()%3Bif(hadLength)%7BnotifySplice(this%2Carray%2Cinfo.path%2Carray.length%2C0%2C%5Bret%5D)%3B%7Dreturn%20ret%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Starting%20from%20the%20start%20index%20specified%2C%20removes%200%20or%20more%20items%0A%20%20%20%20%20%20%20*%20from%20the%20array%20and%20inserts%200%20or%20more%20new%20items%20in%20their%20place.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20arguments%20after%20%60path%60%20and%20return%20value%20match%20that%20of%0A%20%20%20%20%20%20%20*%20%60Array.prototype.splice%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20notifies%20other%20paths%20to%20the%20same%20array%20that%20a%0A%20%20%20%20%20%20%20*%20splice%20occurred%20to%20the%20array.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Path%20to%20array.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20start%20Index%20from%20which%20to%20start%20removing%2Finserting.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20deleteCount%20Number%20of%20items%20to%20remove.%0A%20%20%20%20%20%20%20*%20%40param%20%7B...*%7D%20items%20Items%20to%20insert%20into%20array.%0A%20%20%20%20%20%20%20*%20%40return%20%7BArray%7D%20Array%20of%20removed%20items.%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'splice'%2Cvalue%3Afunction%20splice(path%2Cstart%2CdeleteCount)%7Bfor(var%20_len2%3Darguments.length%2Citems%3DArray(_len2%3E3%3F_len2-3%3A0)%2C_key2%3D3%3B_key2%3C_len2%3B_key2%2B%2B)%7Bitems%5B_key2-3%5D%3Darguments%5B_key2%5D%3B%7Dvar%20info%3D%7Bpath%3A''%7D%3Bvar%20array%3D%2F**%20%40type%20%7BArray%7D%20*%2FPolymer.Path.get(this%2Cpath%2Cinfo)%3B%2F%2F%20Normalize%20fancy%20native%20splice%20handling%20of%20crazy%20start%20values%0Aif(start%3C0)%7Bstart%3Darray.length-Math.floor(-start)%3B%7Delse%20if(start)%7Bstart%3DMath.floor(start)%3B%7D%2F%2F%20array.splice%20does%20different%20things%20based%20on%20the%20number%20of%20arguments%0A%2F%2F%20you%20pass%20in.%20Therefore%2C%20array.splice(0)%20and%20array.splice(0%2C%20undefined)%0A%2F%2F%20do%20different%20things.%20In%20the%20former%2C%20the%20whole%20array%20is%20cleared.%20In%20the%0A%2F%2F%20latter%2C%20no%20items%20are%20removed.%0A%2F%2F%20This%20means%20that%20we%20need%20to%20detect%20whether%201.%20one%20of%20the%20arguments%0A%2F%2F%20is%20actually%20passed%20in%20and%20then%202.%20determine%20how%20many%20arguments%0A%2F%2F%20we%20should%20pass%20on%20to%20the%20native%20array.splice%0A%2F%2F%0Avar%20ret%3Dvoid%200%3B%2F%2F%20Omit%20any%20additional%20arguments%20if%20they%20were%20not%20passed%20in%0Aif(arguments.length%3D%3D%3D2)%7Bret%3Darray.splice(start)%3B%2F%2F%20Either%20start%20was%20undefined%20and%20the%20others%20were%20defined%2C%20but%20in%20this%0A%2F%2F%20case%20we%20can%20safely%20pass%20on%20all%20arguments%0A%2F%2F%0A%2F%2F%20Note%3A%20this%20includes%20the%20case%20where%20none%20of%20the%20arguments%20were%20passed%20in%2C%0A%2F%2F%20e.g.%20this.splice('array').%20However%2C%20if%20both%20start%20and%20deleteCount%0A%2F%2F%20are%20undefined%2C%20array.splice%20will%20not%20modify%20the%20array%20(as%20expected)%0A%7Delse%7Bret%3Darray.splice.apply(array%2C%5Bstart%2CdeleteCount%5D.concat(items))%3B%7D%2F%2F%20At%20the%20end%2C%20check%20whether%20any%20items%20were%20passed%20in%20(e.g.%20insertions)%0A%2F%2F%20or%20if%20the%20return%20array%20contains%20items%20(e.g.%20deletions).%0A%2F%2F%20Only%20notify%20if%20items%20were%20added%20or%20deleted.%0Aif(items.length%7C%7Cret.length)%7BnotifySplice(this%2Carray%2Cinfo.path%2Cstart%2Citems.length%2Cret)%3B%7Dreturn%20ret%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Removes%20an%20item%20from%20the%20beginning%20of%20array%20at%20the%20path%20specified.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20arguments%20after%20%60path%60%20and%20return%20value%20match%20that%20of%0A%20%20%20%20%20%20%20*%20%60Array.prototype.pop%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20notifies%20other%20paths%20to%20the%20same%20array%20that%20a%0A%20%20%20%20%20%20%20*%20splice%20occurred%20to%20the%20array.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Path%20to%20array.%0A%20%20%20%20%20%20%20*%20%40return%20%7B*%7D%20Item%20that%20was%20removed.%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'shift'%2Cvalue%3Afunction%20shift(path)%7Bvar%20info%3D%7Bpath%3A''%7D%3Bvar%20array%3D%2F**%20%40type%20%7BArray%7D%20*%2FPolymer.Path.get(this%2Cpath%2Cinfo)%3Bvar%20hadLength%3DBoolean(array.length)%3Bvar%20ret%3Darray.shift()%3Bif(hadLength)%7BnotifySplice(this%2Carray%2Cinfo.path%2C0%2C0%2C%5Bret%5D)%3B%7Dreturn%20ret%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Adds%20items%20onto%20the%20beginning%20of%20the%20array%20at%20the%20path%20specified.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20arguments%20after%20%60path%60%20and%20return%20value%20match%20that%20of%0A%20%20%20%20%20%20%20*%20%60Array.prototype.push%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20notifies%20other%20paths%20to%20the%20same%20array%20that%20a%0A%20%20%20%20%20%20%20*%20splice%20occurred%20to%20the%20array.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Path%20to%20array.%0A%20%20%20%20%20%20%20*%20%40param%20%7B...*%7D%20items%20Items%20to%20insert%20info%20array%0A%20%20%20%20%20%20%20*%20%40return%20%7Bnumber%7D%20New%20length%20of%20the%20array.%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'unshift'%2Cvalue%3Afunction%20unshift(path)%7Bvar%20info%3D%7Bpath%3A''%7D%3Bvar%20array%3D%2F**%20%40type%20%7BArray%7D%20*%2FPolymer.Path.get(this%2Cpath%2Cinfo)%3Bfor(var%20_len3%3Darguments.length%2Citems%3DArray(_len3%3E1%3F_len3-1%3A0)%2C_key3%3D1%3B_key3%3C_len3%3B_key3%2B%2B)%7Bitems%5B_key3-1%5D%3Darguments%5B_key3%5D%3B%7Dvar%20ret%3Darray.unshift.apply(array%2Citems)%3Bif(items.length)%7BnotifySplice(this%2Carray%2Cinfo.path%2C0%2Citems.length%2C%5B%5D)%3B%7Dreturn%20ret%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Notify%20that%20a%20path%20has%20changed.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%20%20%20%20this.item.user.name%20%3D%20'Bob'%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20this.notifyPath('item.user.name')%3B%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20path%20Path%20that%20should%20be%20notified.%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%3D%7D%20value%20Value%20at%20the%20path%20(optional).%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'notifyPath'%2Cvalue%3Afunction%20notifyPath(path%2Cvalue)%7B%2F**%20%40type%20%7Bstring%7D%20*%2Fvar%20propPath%3Dvoid%200%3Bif(arguments.length%3D%3D1)%7B%2F%2F%20Get%20value%20if%20not%20supplied%0Avar%20info%3D%7Bpath%3A''%7D%3Bvalue%3DPolymer.Path.get(this%2Cpath%2Cinfo)%3BpropPath%3Dinfo.path%3B%7Delse%20if(Array.isArray(path))%7B%2F%2F%20Normalize%20path%20if%20needed%0ApropPath%3DPolymer.Path.normalize(path)%3B%7Delse%7BpropPath%3D%2F**%20%40type%7Bstring%7D%20*%2Fpath%3B%7Dif(this._setPendingPropertyOrPath(propPath%2Cvalue%2Ctrue%2Ctrue))%7Bthis._invalidateProperties()%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60createReadOnlyProperty%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20protectedSetter%20Creates%20a%20custom%20protected%20setter%0A%20%20%20%20%20%20%20*%20%20%20when%20%60true%60.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_createReadOnlyProperty'%2Cvalue%3Afunction%20_createReadOnlyProperty(property%2CprotectedSetter)%7Bthis._addPropertyEffect(property%2CTYPES.READ_ONLY)%3Bif(protectedSetter)%7Bthis%5B'_set'%2Bupper(property)%5D%3D%2F**%20%40this%20%7BPropertyEffects%7D%20*%2Ffunction(value)%7Bthis._setProperty(property%2Cvalue)%3B%7D%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60createPropertyObserver%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7Cfunction(*%2C*)%7D%20method%20Function%20or%20name%20of%20observer%20method%20to%20call%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20dynamicFn%20Whether%20the%20method%20name%20should%20be%20included%20as%0A%20%20%20%20%20%20%20*%20%20%20a%20dependency%20to%20the%20effect.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_createPropertyObserver'%2Cvalue%3Afunction%20_createPropertyObserver(property%2Cmethod%2CdynamicFn)%7Bvar%20info%3D%7Bproperty%3Aproperty%2Cmethod%3Amethod%2CdynamicFn%3ABoolean(dynamicFn)%7D%3Bthis._addPropertyEffect(property%2CTYPES.OBSERVE%2C%7Bfn%3ArunObserverEffect%2Cinfo%3Ainfo%2Ctrigger%3A%7Bname%3Aproperty%7D%7D)%3Bif(dynamicFn)%7Bthis._addPropertyEffect(%2F**%20%40type%20%7Bstring%7D%20*%2Fmethod%2CTYPES.OBSERVE%2C%7Bfn%3ArunObserverEffect%2Cinfo%3Ainfo%2Ctrigger%3A%7Bname%3Amethod%7D%7D)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60createMethodObserver%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20expression%20Method%20expression%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%7CObject%3D%7D%20dynamicFn%20Boolean%20or%20object%20map%20indicating%0A%20%20%20%20%20%20%20*%20%20%20whether%20method%20names%20should%20be%20included%20as%20a%20dependency%20to%20the%20effect.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_createMethodObserver'%2Cvalue%3Afunction%20_createMethodObserver(expression%2CdynamicFn)%7Bvar%20sig%3DparseMethod(expression)%3Bif(!sig)%7Bthrow%20new%20Error(%22Malformed%20observer%20expression%20'%22%2Bexpression%2B%22'%22)%3B%7DcreateMethodEffect(this%2Csig%2CTYPES.OBSERVE%2CrunMethodEffect%2Cnull%2CdynamicFn)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60createNotifyingProperty%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_createNotifyingProperty'%2Cvalue%3Afunction%20_createNotifyingProperty(property)%7Bthis._addPropertyEffect(property%2CTYPES.NOTIFY%2C%7Bfn%3ArunNotifyEffect%2Cinfo%3A%7BeventName%3ACaseMap.camelToDashCase(property)%2B'-changed'%2Cproperty%3Aproperty%7D%7D)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60createReflectedProperty%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_createReflectedProperty'%2Cvalue%3Afunction%20_createReflectedProperty(property)%7Bvar%20attr%3Dthis.constructor.attributeNameForProperty(property)%3Bif(attr%5B0%5D%3D%3D%3D'-')%7Bconsole.warn('Property%20'%2Bproperty%2B'%20cannot%20be%20reflected%20to%20attribute%20'%2Battr%2B'%20because%20%22-%22%20is%20not%20a%20valid%20starting%20attribute%20name.%20Use%20a%20lowercase%20first%20letter%20for%20the%20property%20instead.')%3B%7Delse%7Bthis._addPropertyEffect(property%2CTYPES.REFLECT%2C%7Bfn%3ArunReflectEffect%2Cinfo%3A%7BattrName%3Aattr%7D%7D)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60createComputedProperty%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20computed%20property%20to%20set%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20expression%20Method%20expression%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%7CObject%3D%7D%20dynamicFn%20Boolean%20or%20object%20map%20indicating%0A%20%20%20%20%20%20%20*%20%20%20whether%20method%20names%20should%20be%20included%20as%20a%20dependency%20to%20the%20effect.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_createComputedProperty'%2Cvalue%3Afunction%20_createComputedProperty(property%2Cexpression%2CdynamicFn)%7Bvar%20sig%3DparseMethod(expression)%3Bif(!sig)%7Bthrow%20new%20Error(%22Malformed%20computed%20expression%20'%22%2Bexpression%2B%22'%22)%3B%7DcreateMethodEffect(this%2Csig%2CTYPES.COMPUTE%2CrunComputedEffect%2Cproperty%2CdynamicFn)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Gather%20the%20argument%20values%20for%20a%20method%20specified%20in%20the%20provided%20array%0A%20%20%20%20%20%20%20*%20of%20argument%20metadata.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20%60path%60%20and%20%60value%60%20arguments%20are%20used%20to%20fill%20in%20wildcard%20descriptor%0A%20%20%20%20%20%20%20*%20when%20the%20method%20is%20being%20called%20as%20a%20result%20of%20a%20path%20notification.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Array%3C!MethodArg%3E%7D%20args%20Array%20of%20argument%20metadata%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20path%20Property%2Fpath%20name%20that%20triggered%20the%20method%20effect%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20%20%20%20%20*%20%40return%20%7BArray%3C*%3E%7D%20Array%20of%20argument%20values%0A%20%20%20%20%20%20%20*%20%40private%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_marshalArgs'%2Cvalue%3Afunction%20_marshalArgs(args%2Cpath%2Cprops)%7Bvar%20data%3Dthis.__data%3Bvar%20values%3D%5B%5D%3Bfor(var%20i%3D0%2Cl%3Dargs.length%3Bi%3Cl%3Bi%2B%2B)%7Bvar%20arg%3Dargs%5Bi%5D%3Bvar%20name%3Darg.name%3Bvar%20v%3Dvoid%200%3Bif(arg.literal)%7Bv%3Darg.value%3B%7Delse%7Bif(arg.structured)%7Bv%3DPolymer.Path.get(data%2Cname)%3B%2F%2F%20when%20data%20is%20not%20stored%20e.g.%20%60splices%60%0Aif(v%3D%3D%3Dundefined)%7Bv%3Dprops%5Bname%5D%3B%7D%7Delse%7Bv%3Ddata%5Bname%5D%3B%7D%7Dif(arg.wildcard)%7B%2F%2F%20Only%20send%20the%20actual%20path%20changed%20info%20if%20the%20change%20that%0A%2F%2F%20caused%20the%20observer%20to%20run%20matched%20the%20wildcard%0Avar%20baseChanged%3Dname.indexOf(path%2B'.')%3D%3D%3D0%3Bvar%20matches%3Dpath.indexOf(name)%3D%3D%3D0%26%26!baseChanged%3Bvalues%5Bi%5D%3D%7Bpath%3Amatches%3Fpath%3Aname%2Cvalue%3Amatches%3Fprops%5Bpath%5D%3Av%2Cbase%3Av%7D%3B%7Delse%7Bvalues%5Bi%5D%3Dv%3B%7D%7Dreturn%20values%3B%7D%2F%2F%20--%20static%20class%20methods%20------------%0A%2F**%0A%20%20%20%20%20%20%20*%20Ensures%20an%20accessor%20exists%20for%20the%20specified%20property%2C%20and%20adds%0A%20%20%20%20%20%20%20*%20to%20a%20list%20of%20%22property%20effects%22%20that%20will%20run%20when%20the%20accessor%20for%0A%20%20%20%20%20%20%20*%20the%20specified%20property%20is%20set.%20%20Effects%20are%20grouped%20by%20%22type%22%2C%20which%0A%20%20%20%20%20%20%20*%20roughly%20corresponds%20to%20a%20phase%20in%20effect%20processing.%20%20The%20effect%0A%20%20%20%20%20%20%20*%20metadata%20should%20be%20in%20the%20following%20form%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20fn%3A%20effectFunction%2C%20%2F%2F%20Reference%20to%20function%20to%20call%20to%20perform%20effect%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20info%3A%20%7B%20...%20%7D%20%20%20%20%20%20%20%2F%2F%20Effect%20metadata%20passed%20to%20function%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20trigger%3A%20%7B%20%20%20%20%20%20%20%20%20%20%2F%2F%20Optional%20triggering%20metadata%3B%20if%20not%20provided%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20name%3A%20string%20%20%20%20%20%20%2F%2F%20the%20property%20is%20treated%20as%20a%20wildcard%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20structured%3A%20boolean%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20wildcard%3A%20boolean%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20*%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Effects%20are%20called%20from%20%60_propertiesChanged%60%20in%20the%20following%20order%20by%0A%20%20%20%20%20%20%20*%20type%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%201.%20COMPUTE%0A%20%20%20%20%20%20%20*%202.%20PROPAGATE%0A%20%20%20%20%20%20%20*%203.%20REFLECT%0A%20%20%20%20%20%20%20*%204.%20OBSERVE%0A%20%20%20%20%20%20%20*%205.%20NOTIFY%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Effect%20functions%20are%20called%20with%20the%20following%20signature%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%20%20%20%20effectFunction(inst%2C%20path%2C%20props%2C%20oldProps%2C%20info%2C%20hasPaths)%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20that%20should%20trigger%20the%20effect%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20type%20Effect%20type%2C%20from%20this.PROPERTY_EFFECT_TYPES%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20effect%20Effect%20metadata%20object%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_bindTemplate'%2C%2F%2F%20--%20binding%20----------------------------------------------%0A%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60bindTemplate%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20may%20be%20called%20on%20the%20prototype%20(for%20prototypical%20template%0A%20%20%20%20%20%20%20*%20binding%2C%20to%20avoid%20creating%20accessors%20every%20instance)%20once%20per%20prototype%2C%0A%20%20%20%20%20%20%20*%20and%20will%20be%20called%20with%20%60runtimeBinding%3A%20true%60%20by%20%60_stampTemplate%60%20to%0A%20%20%20%20%20%20%20*%20create%20and%20link%20an%20instance%20of%20the%20template%20metadata%20associated%20with%20a%0A%20%20%20%20%20%20%20*%20particular%20stamping.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!HTMLTemplateElement%7D%20template%20Template%20containing%20binding%0A%20%20%20%20%20%20%20*%20%20%20bindings%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20instanceBinding%20When%20false%20(default)%2C%20performs%0A%20%20%20%20%20%20%20*%20%20%20%22prototypical%22%20binding%20of%20the%20template%20and%20overwrites%20any%20previously%0A%20%20%20%20%20%20%20*%20%20%20bound%20template%20for%20the%20class.%20When%20true%20(as%20passed%20from%0A%20%20%20%20%20%20%20*%20%20%20%60_stampTemplate%60)%2C%20the%20template%20info%20is%20instanced%20and%20linked%20into%0A%20%20%20%20%20%20%20*%20%20%20the%20list%20of%20bound%20templates.%0A%20%20%20%20%20%20%20*%20%40return%20%7B!TemplateInfo%7D%20Template%20metadata%20object%3B%20for%20%60runtimeBinding%60%2C%0A%20%20%20%20%20%20%20*%20%20%20this%20is%20an%20instance%20of%20the%20prototypical%20template%20info%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_bindTemplate(template%2CinstanceBinding)%7Bvar%20templateInfo%3Dthis.constructor._parseTemplate(template)%3Bvar%20wasPreBound%3Dthis.__templateInfo%3D%3DtemplateInfo%3B%2F%2F%20Optimization%3A%20since%20this%20is%20called%20twice%20for%20proto-bound%20templates%2C%0A%2F%2F%20don't%20attempt%20to%20recreate%20accessors%20if%20this%20template%20was%20pre-bound%0Aif(!wasPreBound)%7Bfor(var%20prop%20in%20templateInfo.propertyEffects)%7Bthis._createPropertyAccessor(prop)%3B%7D%7Dif(instanceBinding)%7B%2F%2F%20For%20instance-time%20binding%2C%20create%20instance%20of%20template%20metadata%0A%2F%2F%20and%20link%20into%20list%20of%20templates%20if%20necessary%0AtemplateInfo%3D%2F**%20%40type%20%7B!TemplateInfo%7D%20*%2FObject.create(templateInfo)%3BtemplateInfo.wasPreBound%3DwasPreBound%3Bif(!wasPreBound%26%26this.__templateInfo)%7Bvar%20last%3Dthis.__templateInfoLast%7C%7Cthis.__templateInfo%3Bthis.__templateInfoLast%3Dlast.nextTemplateInfo%3DtemplateInfo%3BtemplateInfo.previousTemplateInfo%3Dlast%3Breturn%20templateInfo%3B%7D%7Dreturn%20this.__templateInfo%3DtemplateInfo%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Adds%20a%20property%20effect%20to%20the%20given%20template%20metadata%2C%20which%20is%20run%0A%20%20%20%20%20%20%20*%20at%20the%20%22propagate%22%20stage%20of%20%60_propertiesChanged%60%20when%20the%20template%0A%20%20%20%20%20%20%20*%20has%20been%20bound%20to%20the%20element%20via%20%60_bindTemplate%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20%60effect%60%20object%20should%20match%20the%20format%20in%20%60_addPropertyEffect%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20templateInfo%20Template%20metadata%20to%20add%20effect%20to%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20prop%20Property%20that%20should%20trigger%20the%20effect%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20effect%20Effect%20metadata%20object%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_stampTemplate'%2C%2F**%0A%20%20%20%20%20%20%20*%20Stamps%20the%20provided%20template%20and%20performs%20instance-time%20setup%20for%0A%20%20%20%20%20%20%20*%20Polymer%20template%20features%2C%20including%20data%20bindings%2C%20declarative%20event%0A%20%20%20%20%20%20%20*%20listeners%2C%20and%20the%20%60this.%24%60%20map%20of%20%60id%60's%20to%20nodes.%20%20A%20document%20fragment%0A%20%20%20%20%20%20%20*%20is%20returned%20containing%20the%20stamped%20DOM%2C%20ready%20for%20insertion%20into%20the%0A%20%20%20%20%20%20%20*%20DOM.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20may%20be%20called%20more%20than%20once%3B%20however%20note%20that%20due%20to%0A%20%20%20%20%20%20%20*%20%60shadycss%60%20polyfill%20limitations%2C%20only%20styles%20from%20templates%20prepared%0A%20%20%20%20%20%20%20*%20using%20%60ShadyCSS.prepareTemplate%60%20will%20be%20correctly%20polyfilled%20(scoped%0A%20%20%20%20%20%20%20*%20to%20the%20shadow%20root%20and%20support%20CSS%20custom%20properties)%2C%20and%20note%20that%0A%20%20%20%20%20%20%20*%20%60ShadyCSS.prepareTemplate%60%20may%20only%20be%20called%20once%20per%20element.%20As%20such%2C%0A%20%20%20%20%20%20%20*%20any%20styles%20required%20by%20in%20runtime-stamped%20templates%20must%20be%20included%0A%20%20%20%20%20%20%20*%20in%20the%20main%20element%20template.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!HTMLTemplateElement%7D%20template%20Template%20to%20stamp%0A%20%20%20%20%20%20%20*%20%40return%20%7B!StampedTemplate%7D%20Cloned%20template%20content%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_stampTemplate(template)%7B%2F%2F%20Ensures%20that%20created%20dom%20is%20%60_enqueueClient%60'd%20to%20this%20element%20so%0A%2F%2F%20that%20it%20can%20be%20flushed%20on%20next%20call%20to%20%60_flushProperties%60%0AhostStack.beginHosting(this)%3Bvar%20dom%3D_get(PropertyEffects.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects.prototype)%2C'_stampTemplate'%2Cthis).call(this%2Ctemplate)%3BhostStack.endHosting(this)%3Bvar%20templateInfo%3D%2F**%20%40type%20%7B!TemplateInfo%7D%20*%2Fthis._bindTemplate(template%2Ctrue)%3B%2F%2F%20Add%20template-instance-specific%20data%20to%20instanced%20templateInfo%0AtemplateInfo.nodeList%3Ddom.nodeList%3B%2F%2F%20Capture%20child%20nodes%20to%20allow%20unstamping%20of%20non-prototypical%20templates%0Aif(!templateInfo.wasPreBound)%7Bvar%20nodes%3DtemplateInfo.childNodes%3D%5B%5D%3Bfor(var%20n%3Ddom.firstChild%3Bn%3Bn%3Dn.nextSibling)%7Bnodes.push(n)%3B%7D%7Ddom.templateInfo%3DtemplateInfo%3B%2F%2F%20Setup%20compound%20storage%2C%202-way%20listeners%2C%20and%20dataHost%20for%20bindings%0AsetupBindings(this%2CtemplateInfo)%3B%2F%2F%20Flush%20properties%20into%20template%20nodes%20if%20already%20booted%0Aif(this.__dataReady)%7BrunEffects(this%2CtemplateInfo.propertyEffects%2Cthis.__data%2Cnull%2Cfalse%2CtemplateInfo.nodeList)%3B%7Dreturn%20dom%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Removes%20and%20unbinds%20the%20nodes%20previously%20contained%20in%20the%20provided%0A%20%20%20%20%20%20%20*%20DocumentFragment%20returned%20from%20%60_stampTemplate%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!StampedTemplate%7D%20dom%20DocumentFragment%20previously%20returned%0A%20%20%20%20%20%20%20*%20%20%20from%20%60_stampTemplate%60%20associated%20with%20the%20nodes%20to%20be%20removed%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_removeBoundDom'%2Cvalue%3Afunction%20_removeBoundDom(dom)%7B%2F%2F%20Unlink%20template%20info%0Avar%20templateInfo%3Ddom.templateInfo%3Bif(templateInfo.previousTemplateInfo)%7BtemplateInfo.previousTemplateInfo.nextTemplateInfo%3DtemplateInfo.nextTemplateInfo%3B%7Dif(templateInfo.nextTemplateInfo)%7BtemplateInfo.nextTemplateInfo.previousTemplateInfo%3DtemplateInfo.previousTemplateInfo%3B%7Dif(this.__templateInfoLast%3D%3DtemplateInfo)%7Bthis.__templateInfoLast%3DtemplateInfo.previousTemplateInfo%3B%7DtemplateInfo.previousTemplateInfo%3DtemplateInfo.nextTemplateInfo%3Dnull%3B%2F%2F%20Remove%20stamped%20nodes%0Avar%20nodes%3DtemplateInfo.childNodes%3Bfor(var%20i%3D0%3Bi%3Cnodes.length%3Bi%2B%2B)%7Bvar%20node%3Dnodes%5Bi%5D%3Bnode.parentNode.removeChild(node)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20default%20%60TemplateStamp%60%20implementation%20to%20add%20support%20for%0A%20%20%20%20%20%20%20*%20parsing%20bindings%20from%20%60TextNode%60's'%20%60textContent%60.%20%20A%20%60bindings%60%0A%20%20%20%20%20%20%20*%20array%20is%20added%20to%20%60nodeInfo%60%20and%20populated%20with%20binding%20metadata%0A%20%20%20%20%20%20%20*%20with%20information%20capturing%20the%20binding%20target%2C%20and%20a%20%60parts%60%20array%0A%20%20%20%20%20%20%20*%20with%20one%20or%20more%20metadata%20objects%20capturing%20the%20source(s)%20of%20the%0A%20%20%20%20%20%20%20*%20binding.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40param%20%7BNode%7D%20node%20Node%20to%20parse%0A%20%20%20%20%20%20%20*%20%40param%20%7BTemplateInfo%7D%20templateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20%20%20%20%20*%20%40param%20%7BNodeInfo%7D%20nodeInfo%20Node%20metadata%20for%20current%20template%20node%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20%60true%60%20if%20the%20visited%20node%20added%20node-specific%0A%20%20%20%20%20%20%20*%20%20%20metadata%20to%20%60nodeInfo%60%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20Interfaces%20in%20closure%20do%20not%20inherit%20statics%2C%20but%20classes%20do%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'PROPERTY_EFFECT_TYPES'%2Cget%3Afunction%20get()%7Breturn%20TYPES%3B%7D%7D%5D%2C%5B%7Bkey%3A'addPropertyEffect'%2Cvalue%3Afunction%20addPropertyEffect(property%2Ctype%2Ceffect)%7Bthis.prototype._addPropertyEffect(property%2Ctype%2Ceffect)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Creates%20a%20single-property%20observer%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7Cfunction(*%2C*)%7D%20method%20Function%20or%20name%20of%20observer%20method%20to%20call%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20dynamicFn%20Whether%20the%20method%20name%20should%20be%20included%20as%0A%20%20%20%20%20%20%20*%20%20%20a%20dependency%20to%20the%20effect.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'createPropertyObserver'%2Cvalue%3Afunction%20createPropertyObserver(property%2Cmethod%2CdynamicFn)%7Bthis.prototype._createPropertyObserver(property%2Cmethod%2CdynamicFn)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Creates%20a%20multi-property%20%22method%20observer%22%20based%20on%20the%20provided%0A%20%20%20%20%20%20%20*%20expression%2C%20which%20should%20be%20a%20string%20in%20the%20form%20of%20a%20normal%20JavaScript%0A%20%20%20%20%20%20%20*%20function%20signature%3A%20%60'methodName(arg1%2C%20%5B...%2C%20argn%5D)'%60.%20%20Each%20argument%0A%20%20%20%20%20%20%20*%20should%20correspond%20to%20a%20property%20or%20path%20in%20the%20context%20of%20this%0A%20%20%20%20%20%20%20*%20prototype%20(or%20instance)%2C%20or%20may%20be%20a%20literal%20string%20or%20number.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20expression%20Method%20expression%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%7CObject%3D%7D%20dynamicFn%20Boolean%20or%20object%20map%20indicating%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%20%20whether%20method%20names%20should%20be%20included%20as%20a%20dependency%20to%20the%20effect.%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'createMethodObserver'%2Cvalue%3Afunction%20createMethodObserver(expression%2CdynamicFn)%7Bthis.prototype._createMethodObserver(expression%2CdynamicFn)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Causes%20the%20setter%20for%20the%20given%20property%20to%20dispatch%20%60%3Cproperty%3E-changed%60%0A%20%20%20%20%20%20%20*%20events%20to%20notify%20of%20changes%20to%20the%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'createNotifyingProperty'%2Cvalue%3Afunction%20createNotifyingProperty(property)%7Bthis.prototype._createNotifyingProperty(property)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Creates%20a%20read-only%20accessor%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20To%20set%20the%20property%2C%20use%20the%20protected%20%60_setProperty%60%20API.%0A%20%20%20%20%20%20%20*%20To%20create%20a%20custom%20protected%20setter%20(e.g.%20%60_setMyProp()%60%20for%0A%20%20%20%20%20%20%20*%20property%20%60myProp%60)%2C%20pass%20%60true%60%20for%20%60protectedSetter%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%2C%20if%20the%20property%20will%20have%20other%20property%20effects%2C%20this%20method%0A%20%20%20%20%20%20%20*%20should%20be%20called%20first%2C%20before%20adding%20other%20effects.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20protectedSetter%20Creates%20a%20custom%20protected%20setter%0A%20%20%20%20%20%20%20*%20%20%20when%20%60true%60.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'createReadOnlyProperty'%2Cvalue%3Afunction%20createReadOnlyProperty(property%2CprotectedSetter)%7Bthis.prototype._createReadOnlyProperty(property%2CprotectedSetter)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Causes%20the%20setter%20for%20the%20given%20property%20to%20reflect%20the%20property%20value%0A%20%20%20%20%20%20%20*%20to%20a%20(dash-cased)%20attribute%20of%20the%20same%20name.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'createReflectedProperty'%2Cvalue%3Afunction%20createReflectedProperty(property)%7Bthis.prototype._createReflectedProperty(property)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Creates%20a%20computed%20property%20whose%20value%20is%20set%20to%20the%20result%20of%20the%0A%20%20%20%20%20%20%20*%20method%20described%20by%20the%20given%20%60expression%60%20each%20time%20one%20or%20more%0A%20%20%20%20%20%20%20*%20arguments%20to%20the%20method%20changes.%20%20The%20expression%20should%20be%20a%20string%0A%20%20%20%20%20%20%20*%20in%20the%20form%20of%20a%20normal%20JavaScript%20function%20signature%3A%0A%20%20%20%20%20%20%20*%20%60'methodName(arg1%2C%20%5B...%2C%20argn%5D)'%60%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20computed%20property%20to%20set%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20expression%20Method%20expression%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%7CObject%3D%7D%20dynamicFn%20Boolean%20or%20object%20map%20indicating%20whether%0A%20%20%20%20%20%20%20*%20%20%20method%20names%20should%20be%20included%20as%20a%20dependency%20to%20the%20effect.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'createComputedProperty'%2Cvalue%3Afunction%20createComputedProperty(property%2Cexpression%2CdynamicFn)%7Bthis.prototype._createComputedProperty(property%2Cexpression%2CdynamicFn)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Parses%20the%20provided%20template%20to%20ensure%20binding%20effects%20are%20created%0A%20%20%20%20%20%20%20*%20for%20them%2C%20and%20then%20ensures%20property%20accessors%20are%20created%20for%20any%0A%20%20%20%20%20%20%20*%20dependent%20properties%20in%20the%20template.%20%20Binding%20effects%20for%20bound%0A%20%20%20%20%20%20%20*%20templates%20are%20stored%20in%20a%20linked%20list%20on%20the%20instance%20so%20that%0A%20%20%20%20%20%20%20*%20templates%20can%20be%20efficiently%20stamped%20and%20unstamped.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!HTMLTemplateElement%7D%20template%20Template%20containing%20binding%0A%20%20%20%20%20%20%20*%20%20%20bindings%0A%20%20%20%20%20%20%20*%20%40return%20%7B!TemplateInfo%7D%20Template%20metadata%20object%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'bindTemplate'%2Cvalue%3Afunction%20bindTemplate(template)%7Breturn%20this.prototype._bindTemplate(template)%3B%7D%7D%2C%7Bkey%3A'_addTemplatePropertyEffect'%2Cvalue%3Afunction%20_addTemplatePropertyEffect(templateInfo%2Cprop%2Ceffect)%7Bvar%20hostProps%3DtemplateInfo.hostProps%3DtemplateInfo.hostProps%7C%7C%7B%7D%3BhostProps%5Bprop%5D%3Dtrue%3Bvar%20effects%3DtemplateInfo.propertyEffects%3DtemplateInfo.propertyEffects%7C%7C%7B%7D%3Bvar%20propEffects%3Deffects%5Bprop%5D%3Deffects%5Bprop%5D%7C%7C%5B%5D%3BpropEffects.push(effect)%3B%7D%7D%2C%7Bkey%3A'_parseTemplateNode'%2Cvalue%3Afunction%20_parseTemplateNode(node%2CtemplateInfo%2CnodeInfo)%7Bvar%20noted%3D_get(PropertyEffects.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects)%2C'_parseTemplateNode'%2Cthis).call(this%2Cnode%2CtemplateInfo%2CnodeInfo)%3Bif(node.nodeType%3D%3D%3DNode.TEXT_NODE)%7Bvar%20parts%3Dthis._parseBindings(node.textContent%2CtemplateInfo)%3Bif(parts)%7B%2F%2F%20Initialize%20the%20textContent%20with%20any%20literal%20parts%0A%2F%2F%20NOTE%3A%20default%20to%20a%20space%20here%20so%20the%20textNode%20remains%3B%20some%20browsers%0A%2F%2F%20(IE)%20omit%20an%20empty%20textNode%20following%20cloneNode%2FimportNode.%0Anode.textContent%3DliteralFromParts(parts)%7C%7C'%20'%3BaddBinding(this%2CtemplateInfo%2CnodeInfo%2C'text'%2C'textContent'%2Cparts)%3Bnoted%3Dtrue%3B%7D%7Dreturn%20noted%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20default%20%60TemplateStamp%60%20implementation%20to%20add%20support%20for%0A%20%20%20%20%20%20%20*%20parsing%20bindings%20from%20attributes.%20%20A%20%60bindings%60%0A%20%20%20%20%20%20%20*%20array%20is%20added%20to%20%60nodeInfo%60%20and%20populated%20with%20binding%20metadata%0A%20%20%20%20%20%20%20*%20with%20information%20capturing%20the%20binding%20target%2C%20and%20a%20%60parts%60%20array%0A%20%20%20%20%20%20%20*%20with%20one%20or%20more%20metadata%20objects%20capturing%20the%20source(s)%20of%20the%0A%20%20%20%20%20%20%20*%20binding.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40param%20%7BElement%7D%20node%20Node%20to%20parse%0A%20%20%20%20%20%20%20*%20%40param%20%7BTemplateInfo%7D%20templateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20%20%20%20%20*%20%40param%20%7BNodeInfo%7D%20nodeInfo%20Node%20metadata%20for%20current%20template%20node%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20name%20Attribute%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20value%20Attribute%20value%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20%60true%60%20if%20the%20visited%20node%20added%20node-specific%0A%20%20%20%20%20%20%20*%20%20%20metadata%20to%20%60nodeInfo%60%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20Interfaces%20in%20closure%20do%20not%20inherit%20statics%2C%20but%20classes%20do%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_parseTemplateNodeAttribute'%2Cvalue%3Afunction%20_parseTemplateNodeAttribute(node%2CtemplateInfo%2CnodeInfo%2Cname%2Cvalue)%7Bvar%20parts%3Dthis._parseBindings(value%2CtemplateInfo)%3Bif(parts)%7B%2F%2F%20Attribute%20or%20property%0Avar%20origName%3Dname%3Bvar%20kind%3D'property'%3B%2F%2F%20The%20only%20way%20we%20see%20a%20capital%20letter%20here%20is%20if%20the%20attr%20has%0A%2F%2F%20a%20capital%20letter%20in%20it%20per%20spec.%20In%20this%20case%2C%20to%20make%20sure%0A%2F%2F%20this%20binding%20works%2C%20we%20go%20ahead%20and%20make%20the%20binding%20to%20the%20attribute.%0Aif(capitalAttributeRegex.test(name))%7Bkind%3D'attribute'%3B%7Delse%20if(name%5Bname.length-1%5D%3D%3D'%24')%7Bname%3Dname.slice(0%2C-1)%3Bkind%3D'attribute'%3B%7D%2F%2F%20Initialize%20attribute%20bindings%20with%20any%20literal%20parts%0Avar%20literal%3DliteralFromParts(parts)%3Bif(literal%26%26kind%3D%3D'attribute')%7B%2F%2F%20Ensure%20a%20ShadyCSS%20template%20scoped%20style%20is%20not%20removed%0A%2F%2F%20when%20a%20class%24%20binding's%20initial%20literal%20value%20is%20set.%0Aif(name%3D%3D'class'%26%26node.hasAttribute('class'))%7Bliteral%2B%3D'%20'%2Bnode.getAttribute(name)%3B%7Dnode.setAttribute(name%2Cliteral)%3B%7D%2F%2F%20Clear%20attribute%20before%20removing%2C%20since%20IE%20won't%20allow%20removing%0A%2F%2F%20%60value%60%20attribute%20if%20it%20previously%20had%20a%20value%20(can't%0A%2F%2F%20unconditionally%20set%20''%20before%20removing%20since%20attributes%20with%20%60%24%60%0A%2F%2F%20can't%20be%20set%20using%20setAttribute)%0Aif(node.localName%3D%3D%3D'input'%26%26origName%3D%3D%3D'value')%7Bnode.setAttribute(origName%2C'')%3B%7D%2F%2F%20Remove%20annotation%0Anode.removeAttribute(origName)%3B%2F%2F%20Case%20hackery%3A%20attributes%20are%20lower-case%2C%20but%20bind%20targets%0A%2F%2F%20(properties)%20are%20case%20sensitive.%20Gambit%20is%20to%20map%20dash-case%20to%0A%2F%2F%20camel-case%3A%20%60foo-bar%60%20becomes%20%60fooBar%60.%0A%2F%2F%20Attribute%20bindings%20are%20excepted.%0Aif(kind%3D%3D%3D'property')%7Bname%3DPolymer.CaseMap.dashToCamelCase(name)%3B%7DaddBinding(this%2CtemplateInfo%2CnodeInfo%2Ckind%2Cname%2Cparts%2Cliteral)%3Breturn%20true%3B%7Delse%7Breturn%20_get(PropertyEffects.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects)%2C'_parseTemplateNodeAttribute'%2Cthis).call(this%2Cnode%2CtemplateInfo%2CnodeInfo%2Cname%2Cvalue)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20default%20%60TemplateStamp%60%20implementation%20to%20add%20support%20for%0A%20%20%20%20%20%20%20*%20binding%20the%20properties%20that%20a%20nested%20template%20depends%20on%20to%20the%20template%0A%20%20%20%20%20%20%20*%20as%20%60_host_%3Cproperty%3E%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40param%20%7BNode%7D%20node%20Node%20to%20parse%0A%20%20%20%20%20%20%20*%20%40param%20%7BTemplateInfo%7D%20templateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20%20%20%20%20*%20%40param%20%7BNodeInfo%7D%20nodeInfo%20Node%20metadata%20for%20current%20template%20node%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20%60true%60%20if%20the%20visited%20node%20added%20node-specific%0A%20%20%20%20%20%20%20*%20%20%20metadata%20to%20%60nodeInfo%60%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20Interfaces%20in%20closure%20do%20not%20inherit%20statics%2C%20but%20classes%20do%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_parseTemplateNestedTemplate'%2Cvalue%3Afunction%20_parseTemplateNestedTemplate(node%2CtemplateInfo%2CnodeInfo)%7Bvar%20noted%3D_get(PropertyEffects.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects)%2C'_parseTemplateNestedTemplate'%2Cthis).call(this%2Cnode%2CtemplateInfo%2CnodeInfo)%3B%2F%2F%20Merge%20host%20props%20into%20outer%20template%20and%20add%20bindings%0Avar%20hostProps%3DnodeInfo.templateInfo.hostProps%3Bvar%20mode%3D'%7B'%3Bfor(var%20source%20in%20hostProps)%7Bvar%20parts%3D%5B%7Bmode%3Amode%2Csource%3Asource%2Cdependencies%3A%5Bsource%5D%7D%5D%3BaddBinding(this%2CtemplateInfo%2CnodeInfo%2C'property'%2C'_host_'%2Bsource%2Cparts)%3B%7Dreturn%20noted%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Called%20to%20parse%20text%20in%20a%20template%20(either%20attribute%20values%20or%0A%20%20%20%20%20%20%20*%20textContent)%20into%20binding%20metadata.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Any%20overrides%20of%20this%20method%20should%20return%20an%20array%20of%20binding%20part%0A%20%20%20%20%20%20%20*%20metadata%20%20representing%20one%20or%20more%20bindings%20found%20in%20the%20provided%20text%0A%20%20%20%20%20%20%20*%20and%20any%20%22literal%22%20text%20in%20between.%20%20Any%20non-literal%20parts%20will%20be%20passed%0A%20%20%20%20%20%20%20*%20to%20%60_evaluateBinding%60%20when%20any%20dependencies%20change.%20%20The%20only%20required%0A%20%20%20%20%20%20%20*%20fields%20of%20each%20%22part%22%20in%20the%20returned%20array%20are%20as%20follows%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20-%20%60dependencies%60%20-%20Array%20containing%20trigger%20metadata%20for%20each%20property%0A%20%20%20%20%20%20%20*%20%20%20that%20should%20trigger%20the%20binding%20to%20update%0A%20%20%20%20%20%20%20*%20-%20%60literal%60%20-%20String%20containing%20text%20if%20the%20part%20represents%20a%20literal%3B%0A%20%20%20%20%20%20%20*%20%20%20in%20this%20case%20no%20%60dependencies%60%20are%20needed%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Additional%20metadata%20for%20use%20by%20%60_evaluateBinding%60%20may%20be%20provided%20in%0A%20%20%20%20%20%20%20*%20each%20part%20object%20as%20needed.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20default%20implementation%20handles%20the%20following%20types%20of%20bindings%0A%20%20%20%20%20%20%20*%20(one%20or%20more%20may%20be%20intermixed%20with%20literal%20strings)%3A%0A%20%20%20%20%20%20%20*%20-%20Property%20binding%3A%20%60%5B%5Bprop%5D%5D%60%0A%20%20%20%20%20%20%20*%20-%20Path%20binding%3A%20%60%5B%5Bobject.prop%5D%5D%60%0A%20%20%20%20%20%20%20*%20-%20Negated%20property%20or%20path%20bindings%3A%20%60%5B%5B!prop%5D%5D%60%20or%20%60%5B%5B!object.prop%5D%5D%60%0A%20%20%20%20%20%20%20*%20-%20Two-way%20property%20or%20path%20bindings%20(supports%20negation)%3A%0A%20%20%20%20%20%20%20*%20%20%20%60%7B%7Bprop%7D%7D%60%2C%20%60%7B%7Bobject.prop%7D%7D%60%2C%20%60%7B%7B!prop%7D%7D%60%20or%20%60%7B%7B!object.prop%7D%7D%60%0A%20%20%20%20%20%20%20*%20-%20Inline%20computed%20method%20(supports%20negation)%3A%0A%20%20%20%20%20%20%20*%20%20%20%60%5B%5Bcompute(a%2C%20'literal'%2C%20b)%5D%5D%60%2C%20%60%5B%5B!compute(a%2C%20'literal'%2C%20b)%5D%5D%60%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20default%20implementation%20uses%20a%20regular%20expression%20for%20best%0A%20%20%20%20%20%20%20*%20performance.%20However%2C%20the%20regular%20expression%20uses%20a%20white-list%20of%0A%20%20%20%20%20%20%20*%20allowed%20characters%20in%20a%20data-binding%2C%20which%20causes%20problems%20for%0A%20%20%20%20%20%20%20*%20data-bindings%20that%20do%20use%20characters%20not%20in%20this%20white-list.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Instead%20of%20updating%20the%20white-list%20with%20all%20allowed%20characters%2C%0A%20%20%20%20%20%20%20*%20there%20is%20a%20StrictBindingParser%20(see%20lib%2Fmixins%2Fstrict-binding-parser)%0A%20%20%20%20%20%20%20*%20that%20uses%20a%20state%20machine%20instead.%20This%20state%20machine%20is%20able%20to%20handle%0A%20%20%20%20%20%20%20*%20all%20characters.%20However%2C%20it%20is%20slightly%20less%20performant%2C%20therefore%20we%0A%20%20%20%20%20%20%20*%20extracted%20it%20into%20a%20separate%20optional%20mixin.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20text%20Text%20to%20parse%20from%20attribute%20or%20textContent%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20templateInfo%20Current%20template%20metadata%0A%20%20%20%20%20%20%20*%20%40return%20%7BArray%3C!BindingPart%3E%7D%20Array%20of%20binding%20part%20metadata%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_parseBindings'%2Cvalue%3Afunction%20_parseBindings(text%2CtemplateInfo)%7Bvar%20parts%3D%5B%5D%3Bvar%20lastIndex%3D0%3Bvar%20m%3Dvoid%200%3B%2F%2F%20Example%3A%20%22literal1%7B%7Bprop%7D%7Dliteral2%5B%5B!compute(foo%2Cbar)%5D%5Dfinal%22%0A%2F%2F%20Regex%20matches%3A%0A%2F%2F%20%20%20%20%20%20%20%20Iteration%201%3A%20%20Iteration%202%3A%0A%2F%2F%20m%5B1%5D%3A%20'%7B%7B'%20%20%20%20%20%20%20%20%20%20'%5B%5B'%0A%2F%2F%20m%5B2%5D%3A%20''%20%20%20%20%20%20%20%20%20%20%20%20'!'%0A%2F%2F%20m%5B3%5D%3A%20'prop'%20%20%20%20%20%20%20%20'compute(foo%2Cbar)'%0Awhile((m%3DbindingRegex.exec(text))!%3D%3Dnull)%7B%2F%2F%20Add%20literal%20part%0Aif(m.index%3ElastIndex)%7Bparts.push(%7Bliteral%3Atext.slice(lastIndex%2Cm.index)%7D)%3B%7D%2F%2F%20Add%20binding%20part%0Avar%20mode%3Dm%5B1%5D%5B0%5D%3Bvar%20negate%3DBoolean(m%5B2%5D)%3Bvar%20source%3Dm%5B3%5D.trim()%3Bvar%20customEvent%3Dfalse%2CnotifyEvent%3D''%2Ccolon%3D-1%3Bif(mode%3D%3D'%7B'%26%26(colon%3Dsource.indexOf('%3A%3A'))%3E0)%7BnotifyEvent%3Dsource.substring(colon%2B2)%3Bsource%3Dsource.substring(0%2Ccolon)%3BcustomEvent%3Dtrue%3B%7Dvar%20signature%3DparseMethod(source)%3Bvar%20dependencies%3D%5B%5D%3Bif(signature)%7B%2F%2F%20Inline%20computed%20function%0Avar%20args%3Dsignature.args%2CmethodName%3Dsignature.methodName%3Bfor(var%20i%3D0%3Bi%3Cargs.length%3Bi%2B%2B)%7Bvar%20arg%3Dargs%5Bi%5D%3Bif(!arg.literal)%7Bdependencies.push(arg)%3B%7D%7Dvar%20dynamicFns%3DtemplateInfo.dynamicFns%3Bif(dynamicFns%26%26dynamicFns%5BmethodName%5D%7C%7Csignature.static)%7Bdependencies.push(methodName)%3Bsignature.dynamicFn%3Dtrue%3B%7D%7Delse%7B%2F%2F%20Property%20or%20path%0Adependencies.push(source)%3B%7Dparts.push(%7Bsource%3Asource%2Cmode%3Amode%2Cnegate%3Anegate%2CcustomEvent%3AcustomEvent%2Csignature%3Asignature%2Cdependencies%3Adependencies%2Cevent%3AnotifyEvent%7D)%3BlastIndex%3DbindingRegex.lastIndex%3B%7D%2F%2F%20Add%20a%20final%20literal%20part%0Aif(lastIndex%26%26lastIndex%3Ctext.length)%7Bvar%20literal%3Dtext.substring(lastIndex)%3Bif(literal)%7Bparts.push(%7Bliteral%3Aliteral%7D)%3B%7D%7Dif(parts.length)%7Breturn%20parts%3B%7Delse%7Breturn%20null%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Called%20to%20evaluate%20a%20previously%20parsed%20binding%20part%20based%20on%20a%20set%20of%0A%20%20%20%20%20%20%20*%20one%20or%20more%20changed%20dependencies.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bthis%7D%20inst%20Element%20that%20should%20be%20used%20as%20scope%20for%0A%20%20%20%20%20%20%20*%20%20%20binding%20dependencies%0A%20%20%20%20%20%20%20*%20%40param%20%7BBindingPart%7D%20part%20Binding%20part%20metadata%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20path%20Property%2Fpath%20that%20triggered%20this%20effect%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20%20%20%20%20*%20%40return%20%7B*%7D%20Value%20the%20binding%20part%20evaluated%20to%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_evaluateBinding'%2Cvalue%3Afunction%20_evaluateBinding(inst%2Cpart%2Cpath%2Cprops%2ColdProps%2ChasPaths)%7Bvar%20value%3Dvoid%200%3Bif(part.signature)%7Bvalue%3DrunMethodEffect(inst%2Cpath%2Cprops%2ColdProps%2Cpart.signature)%3B%7Delse%20if(path!%3Dpart.source)%7Bvalue%3DPolymer.Path.get(inst%2Cpart.source)%3B%7Delse%7Bif(hasPaths%26%26Polymer.Path.isPath(path))%7Bvalue%3DPolymer.Path.get(inst%2Cpath)%3B%7Delse%7Bvalue%3Dinst.__data%5Bpath%5D%3B%7D%7Dif(part.negate)%7Bvalue%3D!value%3B%7Dreturn%20value%3B%7D%7D%5D)%3Breturn%20PropertyEffects%3B%7D(propertyEffectsBase)%3B%2F%2F%20make%20a%20typing%20for%20closure%20%3AP%0APropertyEffectsType%3DPropertyEffects%3Breturn%20PropertyEffects%3B%7D)%3B%2F**%0A%20%20%20*%20Helper%20api%20for%20enqueuing%20client%20dom%20created%20by%20a%20host%20element.%0A%20%20%20*%0A%20%20%20*%20By%20default%20elements%20are%20flushed%20via%20%60_flushProperties%60%20when%0A%20%20%20*%20%60connectedCallback%60%20is%20called.%20Elements%20attach%20their%20client%20dom%20to%0A%20%20%20*%20themselves%20at%20%60ready%60%20time%20which%20results%20from%20this%20first%20flush.%0A%20%20%20*%20This%20provides%20an%20ordering%20guarantee%20that%20the%20client%20dom%20an%20element%0A%20%20%20*%20creates%20is%20flushed%20before%20the%20element%20itself%20(i.e.%20client%20%60ready%60%0A%20%20%20*%20fires%20before%20host%20%60ready%60).%0A%20%20%20*%0A%20%20%20*%20However%2C%20if%20%60_flushProperties%60%20is%20called%20*before*%20an%20element%20is%20connected%2C%0A%20%20%20*%20as%20for%20example%20%60Templatize%60%20does%2C%20this%20ordering%20guarantee%20cannot%20be%0A%20%20%20*%20satisfied%20because%20no%20elements%20are%20connected.%20(Note%3A%20Bound%20elements%20that%0A%20%20%20*%20receive%20data%20do%20become%20enqueued%20clients%20and%20are%20properly%20ordered%20but%0A%20%20%20*%20unbound%20elements%20are%20not.)%0A%20%20%20*%0A%20%20%20*%20To%20maintain%20the%20desired%20%22client%20before%20host%22%20ordering%20guarantee%20for%20this%0A%20%20%20*%20case%20we%20rely%20on%20the%20%22host%20stack.%20Client%20nodes%20registers%20themselves%20with%0A%20%20%20*%20the%20creating%20host%20element%20when%20created.%20This%20ensures%20that%20all%20client%20dom%0A%20%20%20*%20is%20readied%20in%20the%20proper%20order%2C%20maintaining%20the%20desired%20guarantee.%0A%20%20%20*%0A%20%20%20*%20%40private%0A%20%20%20*%2Fvar%20hostStack%3D%7Bstack%3A%5B%5D%2C%2F**%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20inst%20Instance%20to%20add%20to%20hostStack%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40this%20%7BhostStack%7D%0A%20%20%20%20%20*%2FregisterHost%3Afunction%20registerHost(inst)%7Bif(this.stack.length)%7Bvar%20host%3Dthis.stack%5Bthis.stack.length-1%5D%3Bhost._enqueueClient(inst)%3B%7D%7D%2C%2F**%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20inst%20Instance%20to%20begin%20hosting%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40this%20%7BhostStack%7D%0A%20%20%20%20%20*%2FbeginHosting%3Afunction%20beginHosting(inst)%7Bthis.stack.push(inst)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20inst%20Instance%20to%20end%20hosting%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40this%20%7BhostStack%7D%0A%20%20%20%20%20*%2FendHosting%3Afunction%20endHosting(inst)%7Bvar%20stackLen%3Dthis.stack.length%3Bif(stackLen%26%26this.stack%5BstackLen-1%5D%3D%3Dinst)%7Bthis.stack.pop()%3B%7D%7D%7D%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Fmixins%2Fproperty-effects.html.js%0A",
            "totalBytes": 100964,
            "wastedBytes": 66630,
            "wastedPercent": 65.99381957925597
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bvar%20_get%3Dfunction%20get(object%2Cproperty%2Creceiver)%7Bif(object%3D%3D%3Dnull)object%3DFunction.prototype%3Bvar%20desc%3DObject.getOwnPropertyDescriptor(object%2Cproperty)%3Bif(desc%3D%3D%3Dundefined)%7Bvar%20parent%3DObject.getPrototypeOf(object)%3Bif(parent%3D%3D%3Dnull)%7Breturn%20undefined%3B%7Delse%7Breturn%20get(parent%2Cproperty%2Creceiver)%3B%7D%7Delse%20if(%22value%22in%20desc)%7Breturn%20desc.value%3B%7Delse%7Bvar%20getter%3Ddesc.get%3Bif(getter%3D%3D%3Dundefined)%7Breturn%20undefined%3B%7Dreturn%20getter.call(receiver)%3B%7D%7D%3Bfunction%20_toConsumableArray(arr)%7Bif(Array.isArray(arr))%7Bfor(var%20i%3D0%2Carr2%3DArray(arr.length)%3Bi%3Carr.length%3Bi%2B%2B)%7Barr2%5Bi%5D%3Darr%5Bi%5D%3B%7Dreturn%20arr2%3B%7Delse%7Breturn%20Array.from(arr)%3B%7D%7Dfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3Bvar%20styleInterface%3Dwindow.ShadyCSS%3B%2F**%0A%20%20%20*%20Element%20class%20mixin%20that%20provides%20Polymer's%20%22legacy%22%20API%20intended%20to%20be%0A%20%20%20*%20backward-compatible%20to%20the%20greatest%20extent%20possible%20with%20the%20API%0A%20%20%20*%20found%20on%20the%20Polymer%201.x%20%60Polymer.Base%60%20prototype%20applied%20to%20all%20elements%0A%20%20%20*%20defined%20using%20the%20%60Polymer(%7B...%7D)%60%20function.%0A%20%20%20*%0A%20%20%20*%20%40mixinFunction%0A%20%20%20*%20%40polymer%0A%20%20%20*%20%40appliesMixin%20Polymer.ElementMixin%0A%20%20%20*%20%40appliesMixin%20Polymer.GestureEventListeners%0A%20%20%20*%20%40property%20isAttached%20%7Bboolean%7D%20Set%20to%20%60true%60%20in%20this%20element's%0A%20%20%20*%20%20%20%60connectedCallback%60%20and%20%60false%60%20in%20%60disconnectedCallback%60%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Element%20class%20mixin%20that%20provides%20Polymer's%20%22legacy%22%20API%0A%20%20%20*%2FPolymer.LegacyElementMixin%3DPolymer.dedupingMixin(function(base)%7B%2F**%0A%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20*%20%40extends%20%7Bbase%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_ElementMixin%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_GestureEventListeners%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_DirMixin%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Fvar%20legacyElementBase%3DPolymer.DirMixin(Polymer.GestureEventListeners(Polymer.ElementMixin(base)))%3B%2F**%0A%20%20%20%20%20*%20Map%20of%20simple%20names%20to%20touch%20action%20names%0A%20%20%20%20%20*%20%40dict%0A%20%20%20%20%20*%2Fvar%20DIRECTION_MAP%3D%7B'x'%3A'pan-x'%2C'y'%3A'pan-y'%2C'none'%3A'none'%2C'all'%3A'auto'%7D%3B%2F**%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40mixinClass%0A%20%20%20%20%20*%20%40extends%20%7BlegacyElementBase%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_LegacyElementMixin%7D%0A%20%20%20%20%20*%20%40unrestricted%0A%20%20%20%20%20*%2Fvar%20LegacyElement%3Dfunction(_legacyElementBase)%7B_inherits(LegacyElement%2C_legacyElementBase)%3Bfunction%20LegacyElement()%7B_classCallCheck(this%2CLegacyElement)%3B%2F**%20%40type%20%7Bboolean%7D%20*%2Fvar%20_this%3D_possibleConstructorReturn(this%2C(LegacyElement.__proto__%7C%7CObject.getPrototypeOf(LegacyElement)).call(this))%3B_this.isAttached%3B%2F**%20%40type%20%7BWeakMap%3C!Element%2C%20!Object%3Cstring%2C%20!Function%3E%3E%7D%20*%2F_this.__boundListeners%3B%2F**%20%40type%20%7BObject%3Cstring%2C%20Function%3E%7D%20*%2F_this._debouncers%3Breturn%20_this%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Forwards%20%60importMeta%60%20from%20the%20prototype%20(i.e.%20from%20the%20info%20object%0A%20%20%20%20%20%20%20*%20passed%20to%20%60Polymer(%7B...%7D)%60)%20to%20the%20static%20API.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7B!Object%7D%20The%20%60import.meta%60%20object%20set%20on%20the%20prototype%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20%60this%60%20is%20always%20in%20the%20instance%20in%0A%20%20%20%20%20%20%20*%20%20closure%20for%20some%20reason%20even%20in%20a%20static%20method%2C%20rather%20than%20the%20class%0A%20%20%20%20%20%20%20*%2F_createClass(LegacyElement%2C%5B%7Bkey%3A'created'%2C%2F**%0A%20%20%20%20%20%20%20*%20Legacy%20callback%20called%20during%20the%20%60constructor%60%2C%20for%20overriding%0A%20%20%20%20%20%20%20*%20by%20the%20user.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20created()%7B%7D%2F**%0A%20%20%20%20%20%20%20*%20Provides%20an%20implementation%20of%20%60connectedCallback%60%0A%20%20%20%20%20%20%20*%20which%20adds%20Polymer%20legacy%20API's%20%60attached%60%20method.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'connectedCallback'%2Cvalue%3Afunction%20connectedCallback()%7B_get(LegacyElement.prototype.__proto__%7C%7CObject.getPrototypeOf(LegacyElement.prototype)%2C'connectedCallback'%2Cthis).call(this)%3Bthis.isAttached%3Dtrue%3Bthis.attached()%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Legacy%20callback%20called%20during%20%60connectedCallback%60%2C%20for%20overriding%0A%20%20%20%20%20%20%20*%20by%20the%20user.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'attached'%2Cvalue%3Afunction%20attached()%7B%7D%2F**%0A%20%20%20%20%20%20%20*%20Provides%20an%20implementation%20of%20%60disconnectedCallback%60%0A%20%20%20%20%20%20%20*%20which%20adds%20Polymer%20legacy%20API's%20%60detached%60%20method.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'disconnectedCallback'%2Cvalue%3Afunction%20disconnectedCallback()%7B_get(LegacyElement.prototype.__proto__%7C%7CObject.getPrototypeOf(LegacyElement.prototype)%2C'disconnectedCallback'%2Cthis).call(this)%3Bthis.isAttached%3Dfalse%3Bthis.detached()%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Legacy%20callback%20called%20during%20%60disconnectedCallback%60%2C%20for%20overriding%0A%20%20%20%20%20%20%20*%20by%20the%20user.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'detached'%2Cvalue%3Afunction%20detached()%7B%7D%2F**%0A%20%20%20%20%20%20%20*%20Provides%20an%20override%20implementation%20of%20%60attributeChangedCallback%60%0A%20%20%20%20%20%20%20*%20which%20adds%20the%20Polymer%20legacy%20API's%20%60attributeChanged%60%20method.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20name%20Name%20of%20attribute.%0A%20%20%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20old%20Old%20value%20of%20attribute.%0A%20%20%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20value%20Current%20value%20of%20attribute.%0A%20%20%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20namespace%20Attribute%20namespace.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'attributeChangedCallback'%2Cvalue%3Afunction%20attributeChangedCallback(name%2Cold%2Cvalue%2Cnamespace)%7Bif(old!%3D%3Dvalue)%7B_get(LegacyElement.prototype.__proto__%7C%7CObject.getPrototypeOf(LegacyElement.prototype)%2C'attributeChangedCallback'%2Cthis).call(this%2Cname%2Cold%2Cvalue%2Cnamespace)%3Bthis.attributeChanged(name%2Cold%2Cvalue)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Legacy%20callback%20called%20during%20%60attributeChangedChallback%60%2C%20for%20overriding%0A%20%20%20%20%20%20%20*%20by%20the%20user.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20name%20Name%20of%20attribute.%0A%20%20%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20old%20Old%20value%20of%20attribute.%0A%20%20%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20value%20Current%20value%20of%20attribute.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'attributeChanged'%2Cvalue%3Afunction%20attributeChanged(name%2Cold%2Cvalue)%7B%7D%2F%2F%20eslint-disable-line%20no-unused-vars%0A%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20the%20default%20%60Polymer.PropertyEffects%60%20implementation%20to%0A%20%20%20%20%20%20%20*%20add%20support%20for%20class%20initialization%20via%20the%20%60_registered%60%20callback.%0A%20%20%20%20%20%20%20*%20This%20is%20called%20only%20when%20the%20first%20instance%20of%20the%20element%20is%20created.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_initializeProperties'%2Cvalue%3Afunction%20_initializeProperties()%7Bvar%20proto%3DObject.getPrototypeOf(this)%3Bif(!proto.hasOwnProperty('__hasRegisterFinished'))%7Bthis._registered()%3B%2F%2F%20backstop%20in%20case%20the%20%60_registered%60%20implementation%20does%20not%20set%20this%0Aproto.__hasRegisterFinished%3Dtrue%3B%7D_get(LegacyElement.prototype.__proto__%7C%7CObject.getPrototypeOf(LegacyElement.prototype)%2C'_initializeProperties'%2Cthis).call(this)%3Bthis.root%3D%2F**%20%40type%20%7BHTMLElement%7D%20*%2Fthis%3Bthis.created()%3B%2F%2F%20Ensure%20listeners%20are%20applied%20immediately%20so%20that%20they%20are%0A%2F%2F%20added%20before%20declarative%20event%20listeners.%20This%20allows%20an%20element%20to%0A%2F%2F%20decorate%20itself%20via%20an%20event%20prior%20to%20any%20declarative%20listeners%0A%2F%2F%20seeing%20the%20event.%20Note%2C%20this%20ensures%20compatibility%20with%201.x%20ordering.%0Athis._applyListeners()%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Called%20automatically%20when%20an%20element%20is%20initializing.%0A%20%20%20%20%20%20%20*%20Users%20may%20override%20this%20method%20to%20perform%20class%20registration%20time%0A%20%20%20%20%20%20%20*%20work.%20The%20implementation%20should%20ensure%20the%20work%20is%20performed%0A%20%20%20%20%20%20%20*%20only%20once%20for%20the%20class.%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_registered'%2Cvalue%3Afunction%20_registered()%7B%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20the%20default%20%60Polymer.PropertyEffects%60%20implementation%20to%0A%20%20%20%20%20%20%20*%20add%20support%20for%20installing%20%60hostAttributes%60%20and%20%60listeners%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'ready'%2Cvalue%3Afunction%20ready()%7Bthis._ensureAttributes()%3B_get(LegacyElement.prototype.__proto__%7C%7CObject.getPrototypeOf(LegacyElement.prototype)%2C'ready'%2Cthis).call(this)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Ensures%20an%20element%20has%20required%20attributes.%20Called%20when%20the%20element%0A%20%20%20%20%20%20%20*%20is%20being%20readied%20via%20%60ready%60.%20Users%20should%20override%20to%20set%20the%0A%20%20%20%20%20%20%20*%20element's%20required%20attributes.%20The%20implementation%20should%20be%20sure%0A%20%20%20%20%20%20%20*%20to%20check%20and%20not%20override%20existing%20attributes%20added%20by%0A%20%20%20%20%20%20%20*%20the%20user%20of%20the%20element.%20Typically%2C%20setting%20attributes%20should%20be%20left%0A%20%20%20%20%20%20%20*%20to%20the%20element%20user%20and%20not%20done%20here%3B%20reasonable%20exceptions%20include%0A%20%20%20%20%20%20%20*%20setting%20aria%20roles%20and%20focusability.%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_ensureAttributes'%2Cvalue%3Afunction%20_ensureAttributes()%7B%7D%2F**%0A%20%20%20%20%20%20%20*%20Adds%20element%20event%20listeners.%20Called%20when%20the%20element%0A%20%20%20%20%20%20%20*%20is%20being%20readied%20via%20%60ready%60.%20Users%20should%20override%20to%0A%20%20%20%20%20%20%20*%20add%20any%20required%20element%20event%20listeners.%0A%20%20%20%20%20%20%20*%20In%20performance%20critical%20elements%2C%20the%20work%20done%20here%20should%20be%20kept%0A%20%20%20%20%20%20%20*%20to%20a%20minimum%20since%20it%20is%20done%20before%20the%20element%20is%20rendered.%20In%0A%20%20%20%20%20%20%20*%20these%20elements%2C%20consider%20adding%20listeners%20asynchronously%20so%20as%20not%20to%0A%20%20%20%20%20%20%20*%20block%20render.%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_applyListeners'%2Cvalue%3Afunction%20_applyListeners()%7B%7D%2F**%0A%20%20%20%20%20%20%20*%20Converts%20a%20typed%20JavaScript%20value%20to%20a%20string.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%20this%20method%20is%20provided%20as%20backward-compatible%20legacy%20API%0A%20%20%20%20%20%20%20*%20only.%20%20It%20is%20not%20directly%20called%20by%20any%20Polymer%20features.%20To%20customize%0A%20%20%20%20%20%20%20*%20how%20properties%20are%20serialized%20to%20attributes%20for%20attribute%20bindings%20and%0A%20%20%20%20%20%20%20*%20%60reflectToAttribute%3A%20true%60%20properties%20as%20well%20as%20this%20method%2C%20override%0A%20%20%20%20%20%20%20*%20the%20%60_serializeValue%60%20method%20provided%20by%20%60Polymer.PropertyAccessors%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20deserialize%0A%20%20%20%20%20%20%20*%20%40return%20%7Bstring%20%7C%20undefined%7D%20Serialized%20value%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'serialize'%2Cvalue%3Afunction%20serialize(value)%7Breturn%20this._serializeValue(value)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Converts%20a%20string%20to%20a%20typed%20JavaScript%20value.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%20this%20method%20is%20provided%20as%20backward-compatible%20legacy%20API%0A%20%20%20%20%20%20%20*%20only.%20%20It%20is%20not%20directly%20called%20by%20any%20Polymer%20features.%20%20To%20customize%0A%20%20%20%20%20%20%20*%20how%20attributes%20are%20deserialized%20to%20properties%20for%20in%0A%20%20%20%20%20%20%20*%20%60attributeChangedCallback%60%2C%20override%20%60_deserializeValue%60%20method%0A%20%20%20%20%20%20%20*%20provided%20by%20%60Polymer.PropertyAccessors%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20value%20String%20to%20deserialize%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20type%20Type%20to%20deserialize%20the%20string%20to%0A%20%20%20%20%20%20%20*%20%40return%20%7B*%7D%20Returns%20the%20deserialized%20value%20in%20the%20%60type%60%20given.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'deserialize'%2Cvalue%3Afunction%20deserialize(value%2Ctype)%7Breturn%20this._deserializeValue(value%2Ctype)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Serializes%20a%20property%20to%20its%20associated%20attribute.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%20this%20method%20is%20provided%20as%20backward-compatible%20legacy%20API%0A%20%20%20%20%20%20%20*%20only.%20%20It%20is%20not%20directly%20called%20by%20any%20Polymer%20features.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%20to%20reflect.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%3D%7D%20attribute%20Attribute%20name%20to%20reflect.%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%3D%7D%20value%20Property%20value%20to%20reflect.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'reflectPropertyToAttribute'%2Cvalue%3Afunction%20reflectPropertyToAttribute(property%2Cattribute%2Cvalue)%7Bthis._propertyToAttribute(property%2Cattribute%2Cvalue)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Sets%20a%20typed%20value%20to%20an%20HTML%20attribute%20on%20a%20node.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%20this%20method%20is%20provided%20as%20backward-compatible%20legacy%20API%0A%20%20%20%20%20%20%20*%20only.%20%20It%20is%20not%20directly%20called%20by%20any%20Polymer%20features.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20serialize.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20attribute%20Attribute%20name%20to%20serialize%20to.%0A%20%20%20%20%20%20%20*%20%40param%20%7BElement%7D%20node%20Element%20to%20set%20attribute%20to.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'serializeValueToAttribute'%2Cvalue%3Afunction%20serializeValueToAttribute(value%2Cattribute%2Cnode)%7Bthis._valueToNodeAttribute(%2F**%20%40type%20%7BElement%7D%20*%2Fnode%7C%7Cthis%2Cvalue%2Cattribute)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Copies%20own%20properties%20(including%20accessor%20descriptors)%20from%20a%20source%0A%20%20%20%20%20%20%20*%20object%20to%20a%20target%20object.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20prototype%20Target%20object%20to%20copy%20properties%20to.%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20api%20Source%20object%20to%20copy%20properties%20from.%0A%20%20%20%20%20%20%20*%20%40return%20%7BObject%7D%20prototype%20object%20that%20was%20passed%20as%20first%20argument.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'extend'%2Cvalue%3Afunction%20extend(prototype%2Capi)%7Bif(!(prototype%26%26api))%7Breturn%20prototype%7C%7Capi%3B%7Dvar%20n%24%3DObject.getOwnPropertyNames(api)%3Bfor(var%20i%3D0%2Cn%3Bi%3Cn%24.length%26%26(n%3Dn%24%5Bi%5D)%3Bi%2B%2B)%7Bvar%20pd%3DObject.getOwnPropertyDescriptor(api%2Cn)%3Bif(pd)%7BObject.defineProperty(prototype%2Cn%2Cpd)%3B%7D%7Dreturn%20prototype%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Copies%20props%20from%20a%20source%20object%20to%20a%20target%20object.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%2C%20this%20method%20uses%20a%20simple%20%60for...in%60%20strategy%20for%20enumerating%0A%20%20%20%20%20%20%20*%20properties.%20%20To%20ensure%20only%20%60ownProperties%60%20are%20copied%20from%20source%0A%20%20%20%20%20%20%20*%20to%20target%20and%20that%20accessor%20implementations%20are%20copied%2C%20use%20%60extend%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20target%20Target%20object%20to%20copy%20properties%20to.%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20source%20Source%20object%20to%20copy%20properties%20from.%0A%20%20%20%20%20%20%20*%20%40return%20%7B!Object%7D%20Target%20object%20that%20was%20passed%20as%20first%20argument.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'mixin'%2Cvalue%3Afunction%20mixin(target%2Csource)%7Bfor(var%20i%20in%20source)%7Btarget%5Bi%5D%3Dsource%5Bi%5D%3B%7Dreturn%20target%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Sets%20the%20prototype%20of%20an%20object.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%20this%20method%20is%20provided%20as%20backward-compatible%20legacy%20API%0A%20%20%20%20%20%20%20*%20only.%20%20It%20is%20not%20directly%20called%20by%20any%20Polymer%20features.%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20object%20The%20object%20on%20which%20to%20set%20the%20prototype.%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20prototype%20The%20prototype%20that%20will%20be%20set%20on%20the%20given%0A%20%20%20%20%20%20%20*%20%60object%60.%0A%20%20%20%20%20%20%20*%20%40return%20%7BObject%7D%20Returns%20the%20given%20%60object%60%20with%20its%20prototype%20set%0A%20%20%20%20%20%20%20*%20to%20the%20given%20%60prototype%60%20object.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'chainObject'%2Cvalue%3Afunction%20chainObject(object%2Cprototype)%7Bif(object%26%26prototype%26%26object!%3D%3Dprototype)%7Bobject.__proto__%3Dprototype%3B%7Dreturn%20object%3B%7D%2F*%20****%20Begin%20Template%20****%20*%2F%2F**%0A%20%20%20%20%20%20%20*%20Calls%20%60importNode%60%20on%20the%20%60content%60%20of%20the%20%60template%60%20specified%20and%0A%20%20%20%20%20%20%20*%20returns%20a%20document%20fragment%20containing%20the%20imported%20content.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BHTMLTemplateElement%7D%20template%20HTML%20template%20element%20to%20instance.%0A%20%20%20%20%20%20%20*%20%40return%20%7B!DocumentFragment%7D%20Document%20fragment%20containing%20the%20imported%0A%20%20%20%20%20%20%20*%20%20%20template%20content.%0A%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'instanceTemplate'%2Cvalue%3Afunction%20instanceTemplate(template)%7Bvar%20content%3Dthis.constructor._contentForTemplate(template)%3Bvar%20dom%3D%2F**%20%40type%20%7B!DocumentFragment%7D%20*%2Fdocument.importNode(content%2Ctrue)%3Breturn%20dom%3B%7D%2F*%20****%20Begin%20Events%20****%20*%2F%2F**%0A%20%20%20%20%20%20%20*%20Dispatches%20a%20custom%20event%20with%20an%20optional%20detail%20value.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20type%20Name%20of%20event%20type.%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%3D%7D%20detail%20Detail%20value%20containing%20event-specific%0A%20%20%20%20%20%20%20*%20%20%20payload.%0A%20%20%20%20%20%20%20*%20%40param%20%7B%7B%20bubbles%3A%20(boolean%7Cundefined)%2C%20cancelable%3A%20(boolean%7Cundefined)%2C%20composed%3A%20(boolean%7Cundefined)%20%7D%3D%7D%0A%20%20%20%20%20%20%20*%20%20options%20Object%20specifying%20options.%20%20These%20may%20include%3A%0A%20%20%20%20%20%20%20*%20%20%60bubbles%60%20(boolean%2C%20defaults%20to%20%60true%60)%2C%0A%20%20%20%20%20%20%20*%20%20%60cancelable%60%20(boolean%2C%20defaults%20to%20false)%2C%20and%0A%20%20%20%20%20%20%20*%20%20%60node%60%20on%20which%20to%20fire%20the%20event%20(HTMLElement%2C%20defaults%20to%20%60this%60).%0A%20%20%20%20%20%20%20*%20%40return%20%7B!Event%7D%20The%20new%20event%20that%20was%20fired.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'fire'%2Cvalue%3Afunction%20fire(type%2Cdetail%2Coptions)%7Boptions%3Doptions%7C%7C%7B%7D%3Bdetail%3Ddetail%3D%3D%3Dnull%7C%7Cdetail%3D%3D%3Dundefined%3F%7B%7D%3Adetail%3Bvar%20event%3Dnew%20Event(type%2C%7Bbubbles%3Aoptions.bubbles%3D%3D%3Dundefined%3Ftrue%3Aoptions.bubbles%2Ccancelable%3ABoolean(options.cancelable)%2Ccomposed%3Aoptions.composed%3D%3D%3Dundefined%3Ftrue%3Aoptions.composed%7D)%3Bevent.detail%3Ddetail%3Bvar%20node%3Doptions.node%7C%7Cthis%3Bnode.dispatchEvent(event)%3Breturn%20event%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Convenience%20method%20to%20add%20an%20event%20listener%20on%20a%20given%20element%2C%0A%20%20%20%20%20%20%20*%20late%20bound%20to%20a%20named%20method%20on%20this%20element.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BElement%7D%20node%20Element%20to%20add%20event%20listener%20to.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20eventName%20Name%20of%20event%20to%20listen%20for.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20methodName%20Name%20of%20handler%20method%20on%20%60this%60%20to%20call.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'listen'%2Cvalue%3Afunction%20listen(node%2CeventName%2CmethodName)%7Bnode%3D%2F**%20%40type%20%7B!Element%7D%20*%2Fnode%7C%7Cthis%3Bvar%20hbl%3Dthis.__boundListeners%7C%7C(this.__boundListeners%3Dnew%20WeakMap())%3Bvar%20bl%3Dhbl.get(node)%3Bif(!bl)%7Bbl%3D%7B%7D%3Bhbl.set(node%2Cbl)%3B%7Dvar%20key%3DeventName%2BmethodName%3Bif(!bl%5Bkey%5D)%7Bbl%5Bkey%5D%3Dthis._addMethodEventListenerToNode(node%2CeventName%2CmethodName%2Cthis)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Convenience%20method%20to%20remove%20an%20event%20listener%20from%20a%20given%20element%2C%0A%20%20%20%20%20%20%20*%20late%20bound%20to%20a%20named%20method%20on%20this%20element.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BElement%7D%20node%20Element%20to%20remove%20event%20listener%20from.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20eventName%20Name%20of%20event%20to%20stop%20listening%20to.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20methodName%20Name%20of%20handler%20method%20on%20%60this%60%20to%20not%20call%0A%20%20%20%20%20%20%20anymore.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'unlisten'%2Cvalue%3Afunction%20unlisten(node%2CeventName%2CmethodName)%7Bnode%3D%2F**%20%40type%20%7B!Element%7D%20*%2Fnode%7C%7Cthis%3Bvar%20bl%3Dthis.__boundListeners%26%26this.__boundListeners.get(node)%3Bvar%20key%3DeventName%2BmethodName%3Bvar%20handler%3Dbl%26%26bl%5Bkey%5D%3Bif(handler)%7Bthis._removeEventListenerFromNode(node%2CeventName%2Chandler)%3Bbl%5Bkey%5D%3Dnull%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Override%20scrolling%20behavior%20to%20all%20direction%2C%20one%20direction%2C%20or%20none.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Valid%20scroll%20directions%3A%0A%20%20%20%20%20%20%20*%20%20%20-%20'all'%3A%20scroll%20in%20any%20direction%0A%20%20%20%20%20%20%20*%20%20%20-%20'x'%3A%20scroll%20only%20in%20the%20'x'%20direction%0A%20%20%20%20%20%20%20*%20%20%20-%20'y'%3A%20scroll%20only%20in%20the%20'y'%20direction%0A%20%20%20%20%20%20%20*%20%20%20-%20'none'%3A%20disable%20scrolling%20for%20this%20node%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%3D%7D%20direction%20Direction%20to%20allow%20scrolling%0A%20%20%20%20%20%20%20*%20Defaults%20to%20%60all%60.%0A%20%20%20%20%20%20%20*%20%40param%20%7BElement%3D%7D%20node%20Element%20to%20apply%20scroll%20direction%20setting.%0A%20%20%20%20%20%20%20*%20Defaults%20to%20%60this%60.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'setScrollDirection'%2Cvalue%3Afunction%20setScrollDirection(direction%2Cnode)%7BPolymer.Gestures.setTouchAction(%2F**%20%40type%20%7BElement%7D%20*%2Fnode%7C%7Cthis%2CDIRECTION_MAP%5Bdirection%5D%7C%7C'auto')%3B%7D%2F*%20****%20End%20Events%20****%20*%2F%2F**%0A%20%20%20%20%20%20%20*%20Convenience%20method%20to%20run%20%60querySelector%60%20on%20this%20local%20DOM%20scope.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20function%20calls%20%60Polymer.dom(this.root).querySelector(slctr)%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20slctr%20Selector%20to%20run%20on%20this%20local%20DOM%20scope%0A%20%20%20%20%20%20%20*%20%40return%20%7BElement%7D%20Element%20found%20by%20the%20selector%2C%20or%20null%20if%20not%20found.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'%24%24'%2Cvalue%3Afunction%20%24%24(slctr)%7Breturn%20this.root.querySelector(slctr)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Return%20the%20element%20whose%20local%20dom%20within%20which%20this%20element%0A%20%20%20%20%20%20%20*%20is%20contained.%20This%20is%20a%20shorthand%20for%0A%20%20%20%20%20%20%20*%20%60this.getRootNode().host%60.%0A%20%20%20%20%20%20%20*%20%40this%20%7BElement%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'distributeContent'%2C%2F**%0A%20%20%20%20%20%20%20*%20Force%20this%20element%20to%20distribute%20its%20children%20to%20its%20local%20dom.%0A%20%20%20%20%20%20%20*%20This%20should%20not%20be%20necessary%20as%20of%20Polymer%202.0.2%20and%20is%20provided%20only%0A%20%20%20%20%20%20%20*%20for%20backwards%20compatibility.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20distributeContent()%7Bif(window.ShadyDOM%26%26this.shadowRoot)%7BShadyDOM.flush()%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20a%20list%20of%20nodes%20that%20are%20the%20effective%20childNodes.%20The%20effective%0A%20%20%20%20%20%20%20*%20childNodes%20list%20is%20the%20same%20as%20the%20element's%20childNodes%20except%20that%0A%20%20%20%20%20%20%20*%20any%20%60%3Ccontent%3E%60%20elements%20are%20replaced%20with%20the%20list%20of%20nodes%20distributed%0A%20%20%20%20%20%20%20*%20to%20the%20%60%3Ccontent%3E%60%2C%20the%20result%20of%20its%20%60getDistributedNodes%60%20method.%0A%20%20%20%20%20%20%20*%20%40return%20%7B!Array%3C!Node%3E%7D%20List%20of%20effective%20child%20nodes.%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%20LegacyElementMixin%20must%20be%20applied%20to%20an%20HTMLElement%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'getEffectiveChildNodes'%2Cvalue%3Afunction%20getEffectiveChildNodes()%7Bvar%20thisEl%3D%2F**%20%40type%20%7BElement%7D%20*%2Fthis%3Bvar%20domApi%3D%2F**%20%40type%20%7BPolymer.DomApi%7D%20*%2FPolymer.dom(thisEl)%3Breturn%20domApi.getEffectiveChildNodes()%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20a%20list%20of%20nodes%20distributed%20within%20this%20element%20that%20match%0A%20%20%20%20%20%20%20*%20%60selector%60.%20These%20can%20be%20dom%20children%20or%20elements%20distributed%20to%0A%20%20%20%20%20%20%20*%20children%20that%20are%20insertion%20points.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20selector%20Selector%20to%20run.%0A%20%20%20%20%20%20%20*%20%40return%20%7B!Array%3C!Node%3E%7D%20List%20of%20distributed%20elements%20that%20match%20selector.%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%20LegacyElementMixin%20must%20be%20applied%20to%20an%20HTMLElement%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'queryDistributedElements'%2Cvalue%3Afunction%20queryDistributedElements(selector)%7Bvar%20thisEl%3D%2F**%20%40type%20%7BElement%7D%20*%2Fthis%3Bvar%20domApi%3D%2F**%20%40type%20%7BPolymer.DomApi%7D%20*%2FPolymer.dom(thisEl)%3Breturn%20domApi.queryDistributedElements(selector)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20a%20list%20of%20elements%20that%20are%20the%20effective%20children.%20The%20effective%0A%20%20%20%20%20%20%20*%20children%20list%20is%20the%20same%20as%20the%20element's%20children%20except%20that%0A%20%20%20%20%20%20%20*%20any%20%60%3Ccontent%3E%60%20elements%20are%20replaced%20with%20the%20list%20of%20elements%0A%20%20%20%20%20%20%20*%20distributed%20to%20the%20%60%3Ccontent%3E%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7B!Array%3C!Node%3E%7D%20List%20of%20effective%20children.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'getEffectiveChildren'%2Cvalue%3Afunction%20getEffectiveChildren()%7Bvar%20list%3Dthis.getEffectiveChildNodes()%3Breturn%20list.filter(function(%2F**%20%40type%20%7B!Node%7D%20*%2Fn)%7Breturn%20n.nodeType%3D%3D%3DNode.ELEMENT_NODE%3B%7D)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20a%20string%20of%20text%20content%20that%20is%20the%20concatenation%20of%20the%0A%20%20%20%20%20%20%20*%20text%20content's%20of%20the%20element's%20effective%20childNodes%20(the%20elements%0A%20%20%20%20%20%20%20*%20returned%20by%20%3Ca%20href%3D%22%23getEffectiveChildNodes%3EgetEffectiveChildNodes%3C%2Fa%3E.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bstring%7D%20List%20of%20effective%20children.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'getEffectiveTextContent'%2Cvalue%3Afunction%20getEffectiveTextContent()%7Bvar%20cn%3Dthis.getEffectiveChildNodes()%3Bvar%20tc%3D%5B%5D%3Bfor(var%20i%3D0%2Cc%3Bc%3Dcn%5Bi%5D%3Bi%2B%2B)%7Bif(c.nodeType!%3D%3DNode.COMMENT_NODE)%7Btc.push(c.textContent)%3B%7D%7Dreturn%20tc.join('')%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20the%20first%20effective%20childNode%20within%20this%20element%20that%0A%20%20%20%20%20%20%20*%20match%20%60selector%60.%20These%20can%20be%20dom%20child%20nodes%20or%20elements%20distributed%0A%20%20%20%20%20%20%20*%20to%20children%20that%20are%20insertion%20points.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20selector%20Selector%20to%20run.%0A%20%20%20%20%20%20%20*%20%40return%20%7BNode%7D%20First%20effective%20child%20node%20that%20matches%20selector.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'queryEffectiveChildren'%2Cvalue%3Afunction%20queryEffectiveChildren(selector)%7Bvar%20e%24%3Dthis.queryDistributedElements(selector)%3Breturn%20e%24%26%26e%24%5B0%5D%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20a%20list%20of%20effective%20childNodes%20within%20this%20element%20that%0A%20%20%20%20%20%20%20*%20match%20%60selector%60.%20These%20can%20be%20dom%20child%20nodes%20or%20elements%20distributed%0A%20%20%20%20%20%20%20*%20to%20children%20that%20are%20insertion%20points.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20selector%20Selector%20to%20run.%0A%20%20%20%20%20%20%20*%20%40return%20%7B!Array%3C!Node%3E%7D%20List%20of%20effective%20child%20nodes%20that%20match%20selector.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'queryAllEffectiveChildren'%2Cvalue%3Afunction%20queryAllEffectiveChildren(selector)%7Breturn%20this.queryDistributedElements(selector)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20a%20list%20of%20nodes%20distributed%20to%20this%20element's%20%60%3Cslot%3E%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20If%20this%20element%20contains%20more%20than%20one%20%60%3Cslot%3E%60%20in%20its%20local%20DOM%2C%0A%20%20%20%20%20%20%20*%20an%20optional%20selector%20may%20be%20passed%20to%20choose%20the%20desired%20content.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%3D%7D%20slctr%20CSS%20selector%20to%20choose%20the%20desired%0A%20%20%20%20%20%20%20*%20%20%20%60%3Cslot%3E%60.%20%20Defaults%20to%20%60content%60.%0A%20%20%20%20%20%20%20*%20%40return%20%7B!Array%3C!Node%3E%7D%20List%20of%20distributed%20nodes%20for%20the%20%60%3Cslot%3E%60.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'getContentChildNodes'%2Cvalue%3Afunction%20getContentChildNodes(slctr)%7Bvar%20content%3Dthis.root.querySelector(slctr%7C%7C'slot')%3Breturn%20content%3F%2F**%20%40type%20%7BPolymer.DomApi%7D%20*%2FPolymer.dom(content).getDistributedNodes()%3A%5B%5D%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20a%20list%20of%20element%20children%20distributed%20to%20this%20element's%0A%20%20%20%20%20%20%20*%20%60%3Cslot%3E%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20If%20this%20element%20contains%20more%20than%20one%20%60%3Cslot%3E%60%20in%20its%0A%20%20%20%20%20%20%20*%20local%20DOM%2C%20an%20optional%20selector%20may%20be%20passed%20to%20choose%20the%20desired%0A%20%20%20%20%20%20%20*%20content.%20%20This%20method%20differs%20from%20%60getContentChildNodes%60%20in%20that%20only%0A%20%20%20%20%20%20%20*%20elements%20are%20returned.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%3D%7D%20slctr%20CSS%20selector%20to%20choose%20the%20desired%0A%20%20%20%20%20%20%20*%20%20%20%60%3Ccontent%3E%60.%20%20Defaults%20to%20%60content%60.%0A%20%20%20%20%20%20%20*%20%40return%20%7B!Array%3C!HTMLElement%3E%7D%20List%20of%20distributed%20nodes%20for%20the%0A%20%20%20%20%20%20%20*%20%20%20%60%3Cslot%3E%60.%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'getContentChildren'%2Cvalue%3Afunction%20getContentChildren(slctr)%7Bvar%20children%3D%2F**%20%40type%20%7B!Array%3C!HTMLElement%3E%7D%20*%2Fthis.getContentChildNodes(slctr).filter(function(n)%7Breturn%20n.nodeType%3D%3D%3DNode.ELEMENT_NODE%3B%7D)%3Breturn%20children%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Checks%20whether%20an%20element%20is%20in%20this%20element's%20light%20DOM%20tree.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B%3FNode%7D%20node%20The%20element%20to%20be%20checked.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20true%20if%20node%20is%20in%20this%20element's%20light%20DOM%20tree.%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%20LegacyElementMixin%20must%20be%20applied%20to%20an%20HTMLElement%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'isLightDescendant'%2Cvalue%3Afunction%20isLightDescendant(node)%7Bvar%20thisNode%3D%2F**%20%40type%20%7BNode%7D%20*%2Fthis%3Breturn%20thisNode!%3D%3Dnode%26%26thisNode.contains(node)%26%26thisNode.getRootNode()%3D%3D%3Dnode.getRootNode()%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Checks%20whether%20an%20element%20is%20in%20this%20element's%20local%20DOM%20tree.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Element%7D%20node%20The%20element%20to%20be%20checked.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20true%20if%20node%20is%20in%20this%20element's%20local%20DOM%20tree.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'isLocalDescendant'%2Cvalue%3Afunction%20isLocalDescendant(node)%7Breturn%20this.root%3D%3D%3Dnode.getRootNode()%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20No-op%20for%20backwards%20compatibility.%20This%20should%20now%20be%20handled%20by%0A%20%20%20%20%20%20%20*%20ShadyCss%20library.%0A%20%20%20%20%20%20%20*%20%40param%20%20%7B*%7D%20container%20Unused%0A%20%20%20%20%20%20%20*%20%40param%20%20%7B*%7D%20shouldObserve%20Unused%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'scopeSubtree'%2Cvalue%3Afunction%20scopeSubtree(container%2CshouldObserve)%7B%7D%2F%2F%20eslint-disable-line%20no-unused-vars%0A%2F**%0A%20%20%20%20%20%20%20*%20Returns%20the%20computed%20style%20value%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20The%20css%20property%20name.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Returns%20the%20computed%20css%20property%20value%20for%20the%20given%0A%20%20%20%20%20%20%20*%20%60property%60.%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%20LegacyElementMixin%20must%20be%20applied%20to%20an%20HTMLElement%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'getComputedStyleValue'%2Cvalue%3Afunction%20getComputedStyleValue(property)%7Breturn%20styleInterface.getComputedStyleValue(%2F**%20%40type%20%7B!Element%7D%20*%2Fthis%2Cproperty)%3B%7D%2F%2F%20debounce%0A%2F**%0A%20%20%20%20%20%20%20*%20Call%20%60debounce%60%20to%20collapse%20multiple%20requests%20for%20a%20named%20task%20into%0A%20%20%20%20%20%20%20*%20one%20invocation%20which%20is%20made%20after%20the%20wait%20time%20has%20elapsed%20with%0A%20%20%20%20%20%20%20*%20no%20new%20request.%20%20If%20no%20wait%20time%20is%20given%2C%20the%20callback%20will%20be%20called%0A%20%20%20%20%20%20%20*%20at%20microtask%20timing%20(guaranteed%20before%20paint).%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%20%20%20%20debouncedClickAction(e)%20%7B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%2F%2F%20will%20not%20call%20%60processClick%60%20more%20than%20once%20per%20100ms%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20this.debounce('click'%2C%20function()%20%7B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20this.processClick()%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%7D%20100)%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20jobName%20String%20to%20identify%20the%20debounce%20job.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bfunction()%3Avoid%7D%20callback%20Function%20that%20is%20called%20(with%20%60this%60%0A%20%20%20%20%20%20%20*%20%20%20context)%20when%20the%20wait%20time%20elapses.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20wait%20Optional%20wait%20time%20in%20milliseconds%20(ms)%20after%20the%0A%20%20%20%20%20%20%20*%20%20%20last%20signal%20that%20must%20elapse%20before%20invoking%20%60callback%60%0A%20%20%20%20%20%20%20*%20%40return%20%7B!Object%7D%20Returns%20a%20debouncer%20object%20on%20which%20exists%20the%0A%20%20%20%20%20%20%20*%20following%20methods%3A%20%60isActive()%60%20returns%20true%20if%20the%20debouncer%20is%0A%20%20%20%20%20%20%20*%20active%3B%20%60cancel()%60%20cancels%20the%20debouncer%20if%20it%20is%20active%3B%0A%20%20%20%20%20%20%20*%20%60flush()%60%20immediately%20invokes%20the%20debounced%20callback%20if%20the%20debouncer%0A%20%20%20%20%20%20%20*%20is%20active.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'debounce'%2Cvalue%3Afunction%20debounce(jobName%2Ccallback%2Cwait)%7Bthis._debouncers%3Dthis._debouncers%7C%7C%7B%7D%3Breturn%20this._debouncers%5BjobName%5D%3DPolymer.Debouncer.debounce(this._debouncers%5BjobName%5D%2Cwait%3E0%3FPolymer.Async.timeOut.after(wait)%3APolymer.Async.microTask%2Ccallback.bind(this))%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20whether%20a%20named%20debouncer%20is%20active.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20jobName%20The%20name%20of%20the%20debouncer%20started%20with%20%60debounce%60%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Whether%20the%20debouncer%20is%20active%20(has%20not%20yet%20fired).%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'isDebouncerActive'%2Cvalue%3Afunction%20isDebouncerActive(jobName)%7Bthis._debouncers%3Dthis._debouncers%7C%7C%7B%7D%3Bvar%20debouncer%3Dthis._debouncers%5BjobName%5D%3Breturn!!(debouncer%26%26debouncer.isActive())%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Immediately%20calls%20the%20debouncer%20%60callback%60%20and%20inactivates%20it.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20jobName%20The%20name%20of%20the%20debouncer%20started%20with%20%60debounce%60%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'flushDebouncer'%2Cvalue%3Afunction%20flushDebouncer(jobName)%7Bthis._debouncers%3Dthis._debouncers%7C%7C%7B%7D%3Bvar%20debouncer%3Dthis._debouncers%5BjobName%5D%3Bif(debouncer)%7Bdebouncer.flush()%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Cancels%20an%20active%20debouncer.%20%20The%20%60callback%60%20will%20not%20be%20called.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20jobName%20The%20name%20of%20the%20debouncer%20started%20with%20%60debounce%60%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'cancelDebouncer'%2Cvalue%3Afunction%20cancelDebouncer(jobName)%7Bthis._debouncers%3Dthis._debouncers%7C%7C%7B%7D%3Bvar%20debouncer%3Dthis._debouncers%5BjobName%5D%3Bif(debouncer)%7Bdebouncer.cancel()%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Runs%20a%20callback%20function%20asynchronously.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20By%20default%20(if%20no%20waitTime%20is%20specified)%2C%20async%20callbacks%20are%20run%20at%0A%20%20%20%20%20%20%20*%20microtask%20timing%2C%20which%20will%20occur%20before%20paint.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Function%7D%20callback%20The%20callback%20function%20to%20run%2C%20bound%20to%20%60this%60.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%3D%7D%20waitTime%20Time%20to%20wait%20before%20calling%20the%0A%20%20%20%20%20%20%20*%20%20%20%60callback%60.%20%20If%20unspecified%20or%200%2C%20the%20callback%20will%20be%20run%20at%20microtask%0A%20%20%20%20%20%20%20*%20%20%20timing%20(before%20paint).%0A%20%20%20%20%20%20%20*%20%40return%20%7Bnumber%7D%20Handle%20that%20may%20be%20used%20to%20cancel%20the%20async%20job.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'async'%2Cvalue%3Afunction%20async(callback%2CwaitTime)%7Breturn%20waitTime%3E0%3FPolymer.Async.timeOut.run(callback.bind(this)%2CwaitTime)%3A~Polymer.Async.microTask.run(callback.bind(this))%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Cancels%20an%20async%20operation%20started%20with%20%60async%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20handle%20Handle%20returned%20from%20original%20%60async%60%20call%20to%0A%20%20%20%20%20%20%20*%20%20%20cancel.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'cancelAsync'%2Cvalue%3Afunction%20cancelAsync(handle)%7Bhandle%3C0%3FPolymer.Async.microTask.cancel(~handle)%3APolymer.Async.timeOut.cancel(handle)%3B%7D%2F%2F%20other%0A%2F**%0A%20%20%20%20%20%20%20*%20Convenience%20method%20for%20creating%20an%20element%20and%20configuring%20it.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20tag%20HTML%20element%20tag%20to%20create.%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20props%20Object%20of%20properties%20to%20configure%20on%20the%0A%20%20%20%20%20%20%20*%20%20%20%20instance.%0A%20%20%20%20%20%20%20*%20%40return%20%7B!Element%7D%20Newly%20created%20and%20configured%20element.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'create'%2Cvalue%3Afunction%20create(tag%2Cprops)%7Bvar%20elt%3Ddocument.createElement(tag)%3Bif(props)%7Bif(elt.setProperties)%7Belt.setProperties(props)%3B%7Delse%7Bfor(var%20n%20in%20props)%7Belt%5Bn%5D%3Dprops%5Bn%5D%3B%7D%7D%7Dreturn%20elt%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Convenience%20method%20for%20importing%20an%20HTML%20document%20imperatively.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20creates%20a%20new%20%60%3Clink%20rel%3D%22import%22%3E%60%20element%20with%0A%20%20%20%20%20%20%20*%20the%20provided%20URL%20and%20appends%20it%20to%20the%20document%20to%20start%20loading.%0A%20%20%20%20%20%20%20*%20In%20the%20%60onload%60%20callback%2C%20the%20%60import%60%20property%20of%20the%20%60link%60%0A%20%20%20%20%20%20%20*%20element%20will%20contain%20the%20imported%20document%20contents.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20href%20URL%20to%20document%20to%20load.%0A%20%20%20%20%20%20%20*%20%40param%20%7B%3Ffunction(!Event)%3Avoid%3D%7D%20onload%20Callback%20to%20notify%20when%20an%20import%20successfully%0A%20%20%20%20%20%20%20*%20%20%20loaded.%0A%20%20%20%20%20%20%20*%20%40param%20%7B%3Ffunction(!ErrorEvent)%3Avoid%3D%7D%20onerror%20Callback%20to%20notify%20when%20an%20import%0A%20%20%20%20%20%20%20*%20%20%20unsuccessfully%20loaded.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20optAsync%20True%20if%20the%20import%20should%20be%20loaded%20%60async%60.%0A%20%20%20%20%20%20%20*%20%20%20Defaults%20to%20%60false%60.%0A%20%20%20%20%20%20%20*%20%40return%20%7B!HTMLLinkElement%7D%20The%20link%20element%20for%20the%20URL%20to%20be%20loaded.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'importHref'%2Cvalue%3Afunction%20importHref(href%2Conload%2Conerror%2CoptAsync)%7B%2F%2F%20eslint-disable-line%20no-unused-vars%0Avar%20loadFn%3Donload%3Fonload.bind(this)%3Anull%3Bvar%20errorFn%3Donerror%3Fonerror.bind(this)%3Anull%3Breturn%20Polymer.importHref(href%2CloadFn%2CerrorFn%2CoptAsync)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Polyfill%20for%20Element.prototype.matches%2C%20which%20is%20sometimes%20still%0A%20%20%20%20%20%20%20*%20prefixed.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20selector%20Selector%20to%20test.%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Element%3D%7D%20node%20Element%20to%20test%20the%20selector%20against.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Whether%20the%20element%20matches%20the%20selector.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'elementMatches'%2Cvalue%3Afunction%20elementMatches(selector%2Cnode)%7Breturn%20Polymer.dom.matchesSelector(%2F**%20%40type%20%7B!Element%7D%20*%2Fnode%7C%7Cthis%2Cselector)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Toggles%20an%20HTML%20attribute%20on%20or%20off.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20name%20HTML%20attribute%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20bool%20Boolean%20to%20force%20the%20attribute%20on%20or%20off.%0A%20%20%20%20%20%20%20*%20%20%20%20When%20unspecified%2C%20the%20state%20of%20the%20attribute%20will%20be%20reversed.%0A%20%20%20%20%20%20%20*%20%40param%20%7BElement%3D%7D%20node%20Node%20to%20target.%20%20Defaults%20to%20%60this%60.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'toggleAttribute'%2Cvalue%3Afunction%20toggleAttribute(name%2Cbool%2Cnode)%7Bnode%3D%2F**%20%40type%20%7BElement%7D%20*%2Fnode%7C%7Cthis%3Bif(arguments.length%3D%3D1)%7Bbool%3D!node.hasAttribute(name)%3B%7Dif(bool)%7Bnode.setAttribute(name%2C'')%3B%7Delse%7Bnode.removeAttribute(name)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Toggles%20a%20CSS%20class%20on%20or%20off.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20name%20CSS%20class%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20bool%20Boolean%20to%20force%20the%20class%20on%20or%20off.%0A%20%20%20%20%20%20%20*%20%20%20%20When%20unspecified%2C%20the%20state%20of%20the%20class%20will%20be%20reversed.%0A%20%20%20%20%20%20%20*%20%40param%20%7BElement%3D%7D%20node%20Node%20to%20target.%20%20Defaults%20to%20%60this%60.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'toggleClass'%2Cvalue%3Afunction%20toggleClass(name%2Cbool%2Cnode)%7Bnode%3D%2F**%20%40type%20%7BElement%7D%20*%2Fnode%7C%7Cthis%3Bif(arguments.length%3D%3D1)%7Bbool%3D!node.classList.contains(name)%3B%7Dif(bool)%7Bnode.classList.add(name)%3B%7Delse%7Bnode.classList.remove(name)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Cross-platform%20helper%20for%20setting%20an%20element's%20CSS%20%60transform%60%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20transformText%20Transform%20setting.%0A%20%20%20%20%20%20%20*%20%40param%20%7BElement%3D%7D%20node%20Element%20to%20apply%20the%20transform%20to.%0A%20%20%20%20%20%20%20*%20Defaults%20to%20%60this%60%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'transform'%2Cvalue%3Afunction%20transform(transformText%2Cnode)%7Bnode%3D%2F**%20%40type%20%7BElement%7D%20*%2Fnode%7C%7Cthis%3Bnode.style.webkitTransform%3DtransformText%3Bnode.style.transform%3DtransformText%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Cross-platform%20helper%20for%20setting%20an%20element's%20CSS%20%60translate3d%60%0A%20%20%20%20%20%20%20*%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20x%20X%20offset.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20y%20Y%20offset.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20z%20Z%20offset.%0A%20%20%20%20%20%20%20*%20%40param%20%7BElement%3D%7D%20node%20Element%20to%20apply%20the%20transform%20to.%0A%20%20%20%20%20%20%20*%20Defaults%20to%20%60this%60.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'translate3d'%2Cvalue%3Afunction%20translate3d(x%2Cy%2Cz%2Cnode)%7Bnode%3D%2F**%20%40type%20%7BElement%7D%20*%2Fnode%7C%7Cthis%3Bthis.transform('translate3d('%2Bx%2B'%2C'%2By%2B'%2C'%2Bz%2B')'%2Cnode)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Removes%20an%20item%20from%20an%20array%2C%20if%20it%20exists.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20If%20the%20array%20is%20specified%20by%20path%2C%20a%20change%20notification%20is%0A%20%20%20%20%20%20%20*%20generated%2C%20so%20that%20observers%2C%20data%20bindings%20and%20computed%0A%20%20%20%20%20%20%20*%20properties%20watching%20that%20path%20can%20update.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20If%20the%20array%20is%20passed%20directly%2C%20**no%20change%0A%20%20%20%20%20%20%20*%20notification%20is%20generated**.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cnumber%7Cstring%3E%7D%20arrayOrPath%20Path%20to%20array%20from%20which%20to%20remove%20the%20item%0A%20%20%20%20%20%20%20*%20%20%20(or%20the%20array%20itself).%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20item%20Item%20to%20remove.%0A%20%20%20%20%20%20%20*%20%40return%20%7BArray%7D%20Array%20containing%20item%20removed.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'arrayDelete'%2Cvalue%3Afunction%20arrayDelete(arrayOrPath%2Citem)%7Bvar%20index%3Dvoid%200%3Bif(Array.isArray(arrayOrPath))%7Bindex%3DarrayOrPath.indexOf(item)%3Bif(index%3E%3D0)%7Breturn%20arrayOrPath.splice(index%2C1)%3B%7D%7Delse%7Bvar%20arr%3DPolymer.Path.get(this%2CarrayOrPath)%3Bindex%3Darr.indexOf(item)%3Bif(index%3E%3D0)%7Breturn%20this.splice(arrayOrPath%2Cindex%2C1)%3B%7D%7Dreturn%20null%3B%7D%2F%2F%20logging%0A%2F**%0A%20%20%20%20%20%20%20*%20Facades%20%60console.log%60%2F%60warn%60%2F%60error%60%20as%20override%20point.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20level%20One%20of%20'log'%2C%20'warn'%2C%20'error'%0A%20%20%20%20%20%20%20*%20%40param%20%7BArray%7D%20args%20Array%20of%20strings%20or%20objects%20to%20log%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_logger'%2Cvalue%3Afunction%20_logger(level%2Cargs)%7Bvar%20_console%3B%2F%2F%20accept%20%5B'foo'%2C%20'bar'%5D%20and%20%5B%5B'foo'%2C%20'bar'%5D%5D%0Aif(Array.isArray(args)%26%26args.length%3D%3D%3D1%26%26Array.isArray(args%5B0%5D))%7Bargs%3Dargs%5B0%5D%3B%7Dswitch(level)%7Bcase'log'%3Acase'warn'%3Acase'error'%3A(_console%3Dconsole)%5Blevel%5D.apply(_console%2C_toConsumableArray(args))%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Facades%20%60console.log%60%20as%20an%20override%20point.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B...*%7D%20args%20Array%20of%20strings%20or%20objects%20to%20log%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_log'%2Cvalue%3Afunction%20_log()%7Bfor(var%20_len%3Darguments.length%2Cargs%3DArray(_len)%2C_key%3D0%3B_key%3C_len%3B_key%2B%2B)%7Bargs%5B_key%5D%3Darguments%5B_key%5D%3B%7Dthis._logger('log'%2Cargs)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Facades%20%60console.warn%60%20as%20an%20override%20point.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B...*%7D%20args%20Array%20of%20strings%20or%20objects%20to%20log%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_warn'%2Cvalue%3Afunction%20_warn()%7Bfor(var%20_len2%3Darguments.length%2Cargs%3DArray(_len2)%2C_key2%3D0%3B_key2%3C_len2%3B_key2%2B%2B)%7Bargs%5B_key2%5D%3Darguments%5B_key2%5D%3B%7Dthis._logger('warn'%2Cargs)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Facades%20%60console.error%60%20as%20an%20override%20point.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B...*%7D%20args%20Array%20of%20strings%20or%20objects%20to%20log%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_error'%2Cvalue%3Afunction%20_error()%7Bfor(var%20_len3%3Darguments.length%2Cargs%3DArray(_len3)%2C_key3%3D0%3B_key3%3C_len3%3B_key3%2B%2B)%7Bargs%5B_key3%5D%3Darguments%5B_key3%5D%3B%7Dthis._logger('error'%2Cargs)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Formats%20a%20message%20using%20the%20element%20type%20an%20a%20method%20name.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20methodName%20Method%20name%20to%20associate%20with%20message%0A%20%20%20%20%20%20%20*%20%40param%20%7B...*%7D%20args%20Array%20of%20strings%20or%20objects%20to%20log%0A%20%20%20%20%20%20%20*%20%40return%20%7BArray%7D%20Array%20with%20formatting%20information%20for%20%60console%60%0A%20%20%20%20%20%20%20*%20%20%20logging.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_logf'%2Cvalue%3Afunction%20_logf(methodName)%7Bfor(var%20_len4%3Darguments.length%2Cargs%3DArray(_len4%3E1%3F_len4-1%3A0)%2C_key4%3D1%3B_key4%3C_len4%3B_key4%2B%2B)%7Bargs%5B_key4-1%5D%3Darguments%5B_key4%5D%3B%7Dreturn%5B'%5B%25s%3A%3A%25s%5D'%2Cthis.is%2CmethodName%5D.concat(args)%3B%7D%7D%2C%7Bkey%3A'domHost'%2Cget%3Afunction%20get()%7Bvar%20root%3Dthis.getRootNode()%3Breturn%20root%20instanceof%20DocumentFragment%3F%2F**%20%40type%20%7BShadowRoot%7D%20*%2Froot.host%3Aroot%3B%7D%7D%5D%2C%5B%7Bkey%3A'importMeta'%2Cget%3Afunction%20get()%7Breturn%20this.prototype.importMeta%3B%7D%7D%5D)%3Breturn%20LegacyElement%3B%7D(legacyElementBase)%3BLegacyElement.prototype.is%3D''%3Breturn%20LegacyElement%3B%7D)%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Flegacy%2Flegacy-element-mixin.html.js%0A",
            "totalBytes": 37092,
            "wastedBytes": 24461,
            "wastedPercent": 65.94683489701283
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bvar%20_get%3Dfunction%20get(object%2Cproperty%2Creceiver)%7Bif(object%3D%3D%3Dnull)object%3DFunction.prototype%3Bvar%20desc%3DObject.getOwnPropertyDescriptor(object%2Cproperty)%3Bif(desc%3D%3D%3Dundefined)%7Bvar%20parent%3DObject.getPrototypeOf(object)%3Bif(parent%3D%3D%3Dnull)%7Breturn%20undefined%3B%7Delse%7Breturn%20get(parent%2Cproperty%2Creceiver)%3B%7D%7Delse%20if(%22value%22in%20desc)%7Breturn%20desc.value%3B%7Delse%7Bvar%20getter%3Ddesc.get%3Bif(getter%3D%3D%3Dundefined)%7Breturn%20undefined%3B%7Dreturn%20getter.call(receiver)%3B%7D%7D%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3Bvar%20builtCSS%3Dwindow.ShadyCSS%26%26window.ShadyCSS%5B'cssBuild'%5D%3B%2F**%0A%20%20%20*%20Element%20class%20mixin%20that%20provides%20the%20core%20API%20for%20Polymer's%20meta-programming%0A%20%20%20*%20features%20including%20template%20stamping%2C%20data-binding%2C%20attribute%20deserialization%2C%0A%20%20%20*%20and%20property%20change%20observation.%0A%20%20%20*%0A%20%20%20*%20Subclassers%20may%20provide%20the%20following%20static%20getters%20to%20return%20metadata%0A%20%20%20*%20used%20to%20configure%20Polymer's%20features%20for%20the%20class%3A%0A%20%20%20*%0A%20%20%20*%20-%20%60static%20get%20is()%60%3A%20When%20the%20template%20is%20provided%20via%20a%20%60dom-module%60%2C%0A%20%20%20*%20%20%20users%20should%20return%20the%20%60dom-module%60%20id%20from%20a%20static%20%60is%60%20getter.%20%20If%0A%20%20%20*%20%20%20no%20template%20is%20needed%20or%20the%20template%20is%20provided%20directly%20via%20the%0A%20%20%20*%20%20%20%60template%60%20getter%2C%20there%20is%20no%20need%20to%20define%20%60is%60%20for%20the%20element.%0A%20%20%20*%0A%20%20%20*%20-%20%60static%20get%20template()%60%3A%20Users%20may%20provide%20the%20template%20directly%20(as%0A%20%20%20*%20%20%20opposed%20to%20via%20%60dom-module%60)%20by%20implementing%20a%20static%20%60template%60%20getter.%0A%20%20%20*%20%20%20The%20getter%20may%20return%20an%20%60HTMLTemplateElement%60%20or%20a%20string%2C%20which%20will%0A%20%20%20*%20%20%20automatically%20be%20parsed%20into%20a%20template.%0A%20%20%20*%0A%20%20%20*%20-%20%60static%20get%20properties()%60%3A%20Should%20return%20an%20object%20describing%0A%20%20%20*%20%20%20property-related%20metadata%20used%20by%20Polymer%20features%20(key%3A%20property%20name%0A%20%20%20*%20%20%20value%3A%20object%20containing%20property%20metadata).%20Valid%20keys%20in%20per-property%0A%20%20%20*%20%20%20metadata%20include%3A%0A%20%20%20*%20%20%20-%20%60type%60%20(String%7CNumber%7CObject%7CArray%7C...)%3A%20Used%20by%0A%20%20%20*%20%20%20%20%20%60attributeChangedCallback%60%20to%20determine%20how%20string-based%20attributes%0A%20%20%20*%20%20%20%20%20are%20deserialized%20to%20JavaScript%20property%20values.%0A%20%20%20*%20%20%20-%20%60notify%60%20(boolean)%3A%20Causes%20a%20change%20in%20the%20property%20to%20fire%20a%0A%20%20%20*%20%20%20%20%20non-bubbling%20event%20called%20%60%3Cproperty%3E-changed%60.%20Elements%20that%20have%0A%20%20%20*%20%20%20%20%20enabled%20two-way%20binding%20to%20the%20property%20use%20this%20event%20to%20observe%20changes.%0A%20%20%20*%20%20%20-%20%60readOnly%60%20(boolean)%3A%20Creates%20a%20getter%20for%20the%20property%2C%20but%20no%20setter.%0A%20%20%20*%20%20%20%20%20To%20set%20a%20read-only%20property%2C%20use%20the%20private%20setter%20method%0A%20%20%20*%20%20%20%20%20%60_setProperty(property%2C%20value)%60.%0A%20%20%20*%20%20%20-%20%60observer%60%20(string)%3A%20Observer%20method%20name%20that%20will%20be%20called%20when%0A%20%20%20*%20%20%20%20%20the%20property%20changes.%20The%20arguments%20of%20the%20method%20are%0A%20%20%20*%20%20%20%20%20%60(value%2C%20previousValue)%60.%0A%20%20%20*%20%20%20-%20%60computed%60%20(string)%3A%20String%20describing%20method%20and%20dependent%20properties%0A%20%20%20*%20%20%20%20%20for%20computing%20the%20value%20of%20this%20property%20(e.g.%20%60'computeFoo(bar%2C%20zot)'%60).%0A%20%20%20*%20%20%20%20%20Computed%20properties%20are%20read-only%20by%20default%20and%20can%20only%20be%20changed%0A%20%20%20*%20%20%20%20%20via%20the%20return%20value%20of%20the%20computing%20method.%0A%20%20%20*%0A%20%20%20*%20-%20%60static%20get%20observers()%60%3A%20Array%20of%20strings%20describing%20multi-property%0A%20%20%20*%20%20%20observer%20methods%20and%20their%20dependent%20properties%20(e.g.%0A%20%20%20*%20%20%20%60'observeABC(a%2C%20b%2C%20c)'%60).%0A%20%20%20*%0A%20%20%20*%20The%20base%20class%20provides%20default%20implementations%20for%20the%20following%20standard%0A%20%20%20*%20custom%20element%20lifecycle%20callbacks%3B%20users%20may%20override%20these%2C%20but%20should%0A%20%20%20*%20call%20the%20super%20method%20to%20ensure%0A%20%20%20*%20-%20%60constructor%60%3A%20Run%20when%20the%20element%20is%20created%20or%20upgraded%0A%20%20%20*%20-%20%60connectedCallback%60%3A%20Run%20each%20time%20the%20element%20is%20connected%20to%20the%0A%20%20%20*%20%20%20document%0A%20%20%20*%20-%20%60disconnectedCallback%60%3A%20Run%20each%20time%20the%20element%20is%20disconnected%20from%0A%20%20%20*%20%20%20the%20document%0A%20%20%20*%20-%20%60attributeChangedCallback%60%3A%20Run%20each%20time%20an%20attribute%20in%0A%20%20%20*%20%20%20%60observedAttributes%60%20is%20set%20or%20removed%20(note%3A%20this%20element's%20default%0A%20%20%20*%20%20%20%60observedAttributes%60%20implementation%20will%20automatically%20return%20an%20array%0A%20%20%20*%20%20%20of%20dash-cased%20attributes%20based%20on%20%60properties%60)%0A%20%20%20*%0A%20%20%20*%20%40mixinFunction%0A%20%20%20*%20%40polymer%0A%20%20%20*%20%40appliesMixin%20Polymer.PropertyEffects%0A%20%20%20*%20%40appliesMixin%20Polymer.PropertiesMixin%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40property%20rootPath%20%7Bstring%7D%20Set%20to%20the%20value%20of%20%60Polymer.rootPath%60%2C%0A%20%20%20*%20%20%20which%20defaults%20to%20the%20main%20document%20path%0A%20%20%20*%20%40property%20importPath%20%7Bstring%7D%20Set%20to%20the%20value%20of%20the%20class's%20static%0A%20%20%20*%20%20%20%60importPath%60%20property%2C%20which%20defaults%20to%20the%20path%20of%20this%20element's%0A%20%20%20*%20%20%20%60dom-module%60%20(when%20%60is%60%20is%20used)%2C%20but%20can%20be%20overridden%20for%20other%0A%20%20%20*%20%20%20import%20strategies.%0A%20%20%20*%20%40summary%20Element%20class%20mixin%20that%20provides%20the%20core%20API%20for%20Polymer's%0A%20%20%20*%20meta-programming%20features.%0A%20%20%20*%2FPolymer.ElementMixin%3DPolymer.dedupingMixin(function(base)%7B%2F**%0A%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20*%20%40extends%20%7Bbase%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertyEffects%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertiesMixin%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Fvar%20polymerElementBase%3DPolymer.PropertiesMixin(Polymer.PropertyEffects(base))%3B%2F**%0A%20%20%20%20%20*%20Returns%20a%20list%20of%20properties%20with%20default%20values.%0A%20%20%20%20%20*%20This%20list%20is%20created%20as%20an%20optimization%20since%20it%20is%20a%20subset%20of%0A%20%20%20%20%20*%20the%20list%20returned%20from%20%60_properties%60.%0A%20%20%20%20%20*%20This%20list%20is%20used%20in%20%60_initializeProperties%60%20to%20set%20property%20defaults.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7BPolymerElementConstructor%7D%20constructor%20Element%20class%0A%20%20%20%20%20*%20%40return%20%7BPolymerElementProperties%7D%20Flattened%20properties%20for%20this%20class%0A%20%20%20%20%20*%20%20%20that%20have%20default%20values%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Ffunction%20propertyDefaults(constructor)%7Bif(!constructor.hasOwnProperty(JSCompiler_renameProperty('__propertyDefaults'%2Cconstructor)))%7Bconstructor.__propertyDefaults%3Dnull%3Bvar%20props%3Dconstructor._properties%3Bfor(var%20p%20in%20props)%7Bvar%20info%3Dprops%5Bp%5D%3Bif('value'in%20info)%7Bconstructor.__propertyDefaults%3Dconstructor.__propertyDefaults%7C%7C%7B%7D%3Bconstructor.__propertyDefaults%5Bp%5D%3Dinfo%3B%7D%7D%7Dreturn%20constructor.__propertyDefaults%3B%7D%2F**%0A%20%20%20%20%20*%20Returns%20a%20memoized%20version%20of%20the%20%60observers%60%20array.%0A%20%20%20%20%20*%20%40param%20%7BPolymerElementConstructor%7D%20constructor%20Element%20class%0A%20%20%20%20%20*%20%40return%20%7BArray%7D%20Array%20containing%20own%20observers%20for%20the%20given%20class%0A%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20*%2Ffunction%20ownObservers(constructor)%7Bif(!constructor.hasOwnProperty(JSCompiler_renameProperty('__ownObservers'%2Cconstructor)))%7Bconstructor.__ownObservers%3Dconstructor.hasOwnProperty(JSCompiler_renameProperty('observers'%2Cconstructor))%3F%2F**%20%40type%20%7BPolymerElementConstructor%7D%20*%2Fconstructor.observers%3Anull%3B%7Dreturn%20constructor.__ownObservers%3B%7D%2F**%0A%20%20%20%20%20*%20Creates%20effects%20for%20a%20property.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Note%2C%20once%20a%20property%20has%20been%20set%20to%0A%20%20%20%20%20*%20%60readOnly%60%2C%20%60computed%60%2C%20%60reflectToAttribute%60%2C%20or%20%60notify%60%0A%20%20%20%20%20*%20these%20values%20may%20not%20be%20changed.%20For%20example%2C%20a%20subclass%20cannot%0A%20%20%20%20%20*%20alter%20these%20settings.%20However%2C%20additional%20%60observers%60%20may%20be%20added%0A%20%20%20%20%20*%20by%20subclasses.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20The%20info%20object%20should%20contain%20property%20metadata%20as%20follows%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20*%20%60type%60%3A%20%7Bfunction%7D%20type%20to%20which%20an%20attribute%20matching%20the%20property%0A%20%20%20%20%20*%20is%20deserialized.%20Note%20the%20property%20is%20camel-cased%20from%20a%20dash-cased%0A%20%20%20%20%20*%20attribute.%20For%20example%2C%20'foo-bar'%20attribute%20is%20deserialized%20to%20a%0A%20%20%20%20%20*%20property%20named%20'fooBar'.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20*%20%60readOnly%60%3A%20%7Bboolean%7D%20creates%20a%20readOnly%20property%20and%0A%20%20%20%20%20*%20makes%20a%20private%20setter%20for%20the%20private%20of%20the%20form%20'_setFoo'%20for%20a%0A%20%20%20%20%20*%20property%20'foo'%2C%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20*%20%60computed%60%3A%20%7Bstring%7D%20creates%20a%20computed%20property.%20A%20computed%20property%0A%20%20%20%20%20*%20is%20also%20automatically%20set%20to%20%60readOnly%3A%20true%60.%20The%20value%20is%20calculated%0A%20%20%20%20%20*%20by%20running%20a%20method%20and%20arguments%20parsed%20from%20the%20given%20string.%20For%0A%20%20%20%20%20*%20example%20'compute(foo)'%20will%20compute%20a%20given%20property%20when%20the%0A%20%20%20%20%20*%20'foo'%20property%20changes%20by%20executing%20the%20'compute'%20method.%20This%20method%0A%20%20%20%20%20*%20must%20return%20the%20computed%20value.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20*%20%60reflectToAttribute%60%3A%20%7Bboolean%7D%20If%20true%2C%20the%20property%20value%20is%20reflected%0A%20%20%20%20%20*%20to%20an%20attribute%20of%20the%20same%20name.%20Note%2C%20the%20attribute%20is%20dash-cased%0A%20%20%20%20%20*%20so%20a%20property%20named%20'fooBar'%20is%20reflected%20as%20'foo-bar'.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20*%20%60notify%60%3A%20%7Bboolean%7D%20sends%20a%20non-bubbling%20notification%20event%20when%0A%20%20%20%20%20*%20the%20property%20changes.%20For%20example%2C%20a%20property%20named%20'foo'%20sends%20an%0A%20%20%20%20%20*%20event%20named%20'foo-changed'%20with%20%60event.detail%60%20set%20to%20the%20value%20of%0A%20%20%20%20%20*%20the%20property.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20*%20observer%3A%20%7Bstring%7D%20name%20of%20a%20method%20that%20runs%20when%20the%20property%0A%20%20%20%20%20*%20changes.%20The%20arguments%20of%20the%20method%20are%20(value%2C%20previousValue).%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Note%3A%20Users%20may%20want%20control%20over%20modifying%20property%0A%20%20%20%20%20*%20effects%20via%20subclassing.%20For%20example%2C%20a%20user%20might%20want%20to%20make%20a%0A%20%20%20%20%20*%20reflectToAttribute%20property%20not%20do%20so%20in%20a%20subclass.%20We've%20chosen%20to%0A%20%20%20%20%20*%20disable%20this%20because%20it%20leads%20to%20additional%20complication.%0A%20%20%20%20%20*%20For%20example%2C%20a%20readOnly%20effect%20generates%20a%20special%20setter.%20If%20a%20subclass%0A%20%20%20%20%20*%20disables%20the%20effect%2C%20the%20setter%20would%20fail%20unexpectedly.%0A%20%20%20%20%20*%20Based%20on%20feedback%2C%20we%20may%20want%20to%20try%20to%20make%20effects%20more%20malleable%0A%20%20%20%20%20*%20and%2For%20provide%20an%20advanced%20api%20for%20manipulating%20them.%0A%20%20%20%20%20*%20Also%20consider%20adding%20warnings%20when%20an%20effect%20cannot%20be%20changed.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7B!PolymerElement%7D%20proto%20Element%20class%20prototype%20to%20add%20accessors%0A%20%20%20%20%20*%20%20%20and%20effects%20to%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20name%20Name%20of%20the%20property.%0A%20%20%20%20%20*%20%40param%20%7BObject%7D%20info%20Info%20object%20from%20which%20to%20create%20property%20effects.%0A%20%20%20%20%20*%20Supported%20keys%3A%0A%20%20%20%20%20*%20%40param%20%7BObject%7D%20allProps%20Flattened%20map%20of%20all%20properties%20defined%20in%20this%0A%20%20%20%20%20*%20%20%20element%20(including%20inherited%20properties)%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Ffunction%20createPropertyFromConfig(proto%2Cname%2Cinfo%2CallProps)%7B%2F%2F%20computed%20forces%20readOnly...%0Aif(info.computed)%7Binfo.readOnly%3Dtrue%3B%7D%2F%2F%20Note%2C%20since%20all%20computed%20properties%20are%20readOnly%2C%20this%20prevents%0A%2F%2F%20adding%20additional%20computed%20property%20effects%20(which%20leads%20to%20a%20confusing%0A%2F%2F%20setup%20where%20multiple%20triggers%20for%20setting%20a%20property)%0A%2F%2F%20While%20we%20do%20have%20%60hasComputedEffect%60%20this%20is%20set%20on%20the%20property's%0A%2F%2F%20dependencies%20rather%20than%20itself.%0Aif(info.computed%26%26!proto._hasReadOnlyEffect(name))%7Bproto._createComputedProperty(name%2Cinfo.computed%2CallProps)%3B%7Dif(info.readOnly%26%26!proto._hasReadOnlyEffect(name))%7Bproto._createReadOnlyProperty(name%2C!info.computed)%3B%7Dif(info.reflectToAttribute%26%26!proto._hasReflectEffect(name))%7Bproto._createReflectedProperty(name)%3B%7Dif(info.notify%26%26!proto._hasNotifyEffect(name))%7Bproto._createNotifyingProperty(name)%3B%7D%2F%2F%20always%20add%20observer%0Aif(info.observer)%7Bproto._createPropertyObserver(name%2Cinfo.observer%2CallProps%5Binfo.observer%5D)%3B%7D%2F%2F%20always%20create%20the%20mapping%20from%20attribute%20back%20to%20property%20for%20deserialization.%0Aproto._addPropertyToAttributeMap(name)%3B%7D%2F**%0A%20%20%20%20%20*%20Process%20all%20style%20elements%20in%20the%20element%20template.%20Styles%20with%20the%0A%20%20%20%20%20*%20%60include%60%20attribute%20are%20processed%20such%20that%20any%20styles%20in%0A%20%20%20%20%20*%20the%20associated%20%22style%20modules%22%20are%20included%20in%20the%20element%20template.%0A%20%20%20%20%20*%20%40param%20%7BPolymerElementConstructor%7D%20klass%20Element%20class%0A%20%20%20%20%20*%20%40param%20%7B!HTMLTemplateElement%7D%20template%20Template%20to%20process%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20is%20Name%20of%20element%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20baseURI%20Base%20URI%20for%20element%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Ffunction%20processElementStyles(klass%2Ctemplate%2Cis%2CbaseURI)%7Bif(!builtCSS)%7Bvar%20templateStyles%3Dtemplate.content.querySelectorAll('style')%3Bvar%20stylesWithImports%3DPolymer.StyleGather.stylesFromTemplate(template)%3B%2F%2F%20insert%20styles%20from%20%3Clink%20rel%3D%22import%22%20type%3D%22css%22%3E%20at%20the%20top%20of%20the%20template%0Avar%20linkedStyles%3DPolymer.StyleGather.stylesFromModuleImports(is)%3Bvar%20firstTemplateChild%3Dtemplate.content.firstElementChild%3Bfor(var%20idx%3D0%3Bidx%3ClinkedStyles.length%3Bidx%2B%2B)%7Bvar%20s%3DlinkedStyles%5Bidx%5D%3Bs.textContent%3Dklass._processStyleText(s.textContent%2CbaseURI)%3Btemplate.content.insertBefore(s%2CfirstTemplateChild)%3B%7D%2F%2F%20keep%20track%20of%20the%20last%20%22concrete%22%20style%20in%20the%20template%20we%20have%20encountered%0Avar%20templateStyleIndex%3D0%3B%2F%2F%20ensure%20all%20gathered%20styles%20are%20actually%20in%20this%20template.%0Afor(var%20i%3D0%3Bi%3CstylesWithImports.length%3Bi%2B%2B)%7Bvar%20_s%3DstylesWithImports%5Bi%5D%3Bvar%20templateStyle%3DtemplateStyles%5BtemplateStyleIndex%5D%3B%2F%2F%20if%20the%20style%20is%20not%20in%20this%20template%2C%20it's%20been%20%22included%22%20and%0A%2F%2F%20we%20put%20a%20clone%20of%20it%20in%20the%20template%20before%20the%20style%20that%20included%20it%0Aif(templateStyle!%3D%3D_s)%7B_s%3D_s.cloneNode(true)%3BtemplateStyle.parentNode.insertBefore(_s%2CtemplateStyle)%3B%7Delse%7BtemplateStyleIndex%2B%2B%3B%7D_s.textContent%3Dklass._processStyleText(_s.textContent%2CbaseURI)%3B%7D%7Dif(window.ShadyCSS)%7Bwindow.ShadyCSS.prepareTemplate(template%2Cis)%3B%7D%7D%2F**%0A%20%20%20%20%20*%20Look%20up%20template%20from%20dom-module%20for%20element%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7B!string%7D%20is%20Element%20name%20to%20look%20up%0A%20%20%20%20%20*%20%40return%20%7B!HTMLTemplateElement%7D%20Template%20found%20in%20dom%20module%2C%20or%0A%20%20%20%20%20*%20%20%20undefined%20if%20not%20found%0A%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20*%2Ffunction%20getTemplateFromDomModule(is)%7Bvar%20template%3Dnull%3Bif(is%26%26Polymer.DomModule)%7Btemplate%3DPolymer.DomModule.import(is%2C'template')%3B%2F%2F%20Under%20strictTemplatePolicy%2C%20require%20any%20element%20with%20an%20%60is%60%0A%2F%2F%20specified%20to%20have%20a%20dom-module%0Aif(Polymer.strictTemplatePolicy%26%26!template)%7Bthrow%20new%20Error('strictTemplatePolicy%3A%20expecting%20dom-module%20or%20null%20template%20for%20'%2Bis)%3B%7D%7Dreturn%20template%3B%7D%2F**%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40mixinClass%0A%20%20%20%20%20*%20%40unrestricted%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_ElementMixin%7D%0A%20%20%20%20%20*%2Fvar%20PolymerElement%3Dfunction(_polymerElementBase)%7B_inherits(PolymerElement%2C_polymerElementBase)%3B_createClass(PolymerElement%2Cnull%2C%5B%7Bkey%3A'_finalizeClass'%2C%2F**%0A%20%20%20%20%20%20%20*%20Override%20of%20PropertiesMixin%20_finalizeClass%20to%20create%20observers%20and%0A%20%20%20%20%20%20%20*%20find%20the%20template.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20Interfaces%20in%20closure%20do%20not%20inherit%20statics%2C%20but%20classes%20do%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_finalizeClass()%7B_get(PolymerElement.__proto__%7C%7CObject.getPrototypeOf(PolymerElement)%2C'_finalizeClass'%2Cthis).call(this)%3Bvar%20observers%3DownObservers(this)%3Bif(observers)%7Bthis.createObservers(observers%2Cthis._properties)%3B%7Dthis._prepareTemplate()%3B%7D%7D%2C%7Bkey%3A'_prepareTemplate'%2Cvalue%3Afunction%20_prepareTemplate()%7B%2F%2F%20note%3A%20create%20%22working%22%20template%20that%20is%20finalized%20at%20instance%20time%0Avar%20template%3D%2F**%20%40type%20%7BPolymerElementConstructor%7D%20*%2Fthis.template%3Bif(template)%7Bif(typeof%20template%3D%3D%3D'string')%7Bvar%20t%3Ddocument.createElement('template')%3Bt.innerHTML%3Dtemplate%3Btemplate%3Dt%3B%7Delse%20if(!Polymer.legacyOptimizations)%7Btemplate%3Dtemplate.cloneNode(true)%3B%7D%7Dthis.prototype._template%3Dtemplate%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Override%20of%20PropertiesChanged%20createProperties%20to%20create%20accessors%0A%20%20%20%20%20%20%20*%20and%20property%20effects%20for%20all%20of%20the%20properties.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'createProperties'%2Cvalue%3Afunction%20createProperties(props)%7Bfor(var%20p%20in%20props)%7BcreatePropertyFromConfig(this.prototype%2Cp%2Cprops%5Bp%5D%2Cprops)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Creates%20observers%20for%20the%20given%20%60observers%60%20array.%0A%20%20%20%20%20%20%20*%20Leverages%20%60PropertyEffects%60%20to%20create%20observers.%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20observers%20Array%20of%20observer%20descriptors%20for%0A%20%20%20%20%20%20%20*%20%20%20this%20class%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20dynamicFns%20Object%20containing%20keys%20for%20any%20properties%0A%20%20%20%20%20%20%20*%20%20%20that%20are%20functions%20and%20should%20trigger%20the%20effect%20when%20the%20function%0A%20%20%20%20%20%20%20*%20%20%20reference%20is%20changed%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'createObservers'%2Cvalue%3Afunction%20createObservers(observers%2CdynamicFns)%7Bvar%20proto%3Dthis.prototype%3Bfor(var%20i%3D0%3Bi%3Cobservers.length%3Bi%2B%2B)%7Bproto._createMethodObserver(observers%5Bi%5D%2CdynamicFns)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20the%20template%20that%20will%20be%20stamped%20into%20this%20element's%20shadow%20root.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20If%20a%20%60static%20get%20is()%60%20getter%20is%20defined%2C%20the%20default%20implementation%0A%20%20%20%20%20%20%20*%20will%20return%20the%20first%20%60%3Ctemplate%3E%60%20in%20a%20%60dom-module%60%20whose%20%60id%60%0A%20%20%20%20%20%20%20*%20matches%20this%20element's%20%60is%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Users%20may%20override%20this%20getter%20to%20return%20an%20arbitrary%20template%0A%20%20%20%20%20%20%20*%20(in%20which%20case%20the%20%60is%60%20getter%20is%20unnecessary).%20The%20template%20returned%0A%20%20%20%20%20%20%20*%20may%20be%20either%20an%20%60HTMLTemplateElement%60%20or%20a%20string%20that%20will%20be%0A%20%20%20%20%20%20%20*%20automatically%20parsed%20into%20a%20template.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%20that%20when%20subclassing%2C%20if%20the%20super%20class%20overrode%20the%20default%0A%20%20%20%20%20%20%20*%20implementation%20and%20the%20subclass%20would%20like%20to%20provide%20an%20alternate%0A%20%20%20%20%20%20%20*%20template%20via%20a%20%60dom-module%60%2C%20it%20should%20override%20this%20getter%20and%0A%20%20%20%20%20%20%20*%20return%20%60Polymer.DomModule.import(this.is%2C%20'template')%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20If%20a%20subclass%20would%20like%20to%20modify%20the%20super%20class%20template%2C%20it%20should%0A%20%20%20%20%20%20%20*%20clone%20it%20rather%20than%20modify%20it%20in%20place.%20%20If%20the%20getter%20does%20expensive%0A%20%20%20%20%20%20%20*%20work%20such%20as%20cloning%2Fmodifying%20a%20template%2C%20it%20should%20memoize%20the%0A%20%20%20%20%20%20%20*%20template%20for%20maximum%20performance%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%20%20let%20memoizedTemplate%3B%0A%20%20%20%20%20%20%20*%20%20%20class%20MySubClass%20extends%20MySuperClass%20%7B%0A%20%20%20%20%20%20%20*%20%20%20%20%20static%20get%20template()%20%7B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20if%20(!memoizedTemplate)%20%7B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20memoizedTemplate%20%3D%20MySuperClass.template.cloneNode(true)%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20let%20subContent%20%3D%20document.createElement('div')%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20subContent.textContent%20%3D%20'This%20came%20from%20MySubClass'%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20memoizedTemplate.content.appendChild(subContent)%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20return%20memoizedTemplate%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20*%20%20%20%7D%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7BHTMLTemplateElement%7Cstring%7D%20Template%20to%20be%20stamped%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'template'%2Cget%3Afunction%20get()%7B%2F%2F%20Explanation%20of%20template-related%20properties%3A%0A%2F%2F%20-%20constructor.template%20(this%20getter)%3A%20the%20template%20for%20the%20class.%0A%2F%2F%20%20%20%20%20This%20can%20come%20from%20the%20prototype%20(for%20legacy%20elements)%2C%20from%20a%0A%2F%2F%20%20%20%20%20dom-module%2C%20or%20from%20the%20super%20class's%20template%20(or%20can%20be%20overridden%0A%2F%2F%20%20%20%20%20altogether%20by%20the%20user)%0A%2F%2F%20-%20constructor._template%3A%20memoized%20version%20of%20constructor.template%0A%2F%2F%20-%20prototype._template%3A%20working%20template%20for%20the%20element%2C%20which%20will%20be%0A%2F%2F%20%20%20%20%20parsed%20and%20modified%20in%20place.%20It%20is%20a%20cloned%20version%20of%0A%2F%2F%20%20%20%20%20constructor.template%2C%20saved%20in%20_finalizeClass().%20Note%20that%20before%0A%2F%2F%20%20%20%20%20this%20getter%20is%20called%2C%20for%20legacy%20elements%20this%20could%20be%20from%20a%0A%2F%2F%20%20%20%20%20_template%20field%20on%20the%20info%20object%20passed%20to%20Polymer()%2C%20a%20behavior%2C%0A%2F%2F%20%20%20%20%20or%20set%20in%20registered()%3B%20once%20the%20static%20getter%20runs%2C%20a%20clone%20of%20it%0A%2F%2F%20%20%20%20%20will%20overwrite%20it%20on%20the%20prototype%20as%20the%20working%20template.%0Aif(!this.hasOwnProperty(JSCompiler_renameProperty('_template'%2Cthis)))%7Bthis._template%3D%2F%2F%20If%20user%20has%20put%20template%20on%20prototype%20(e.g.%20in%20legacy%20via%20registered%0A%2F%2F%20callback%20or%20info%20object)%2C%20prefer%20that%20first%0Athis.prototype.hasOwnProperty(JSCompiler_renameProperty('_template'%2Cthis.prototype))%3Fthis.prototype._template%3A%2F%2F%20Look%20in%20dom-module%20associated%20with%20this%20element's%20is%0AgetTemplateFromDomModule(%2F**%20%40type%20%7BPolymerElementConstructor%7D*%2Fthis.is)%7C%7C%2F%2F%20Next%20look%20for%20superclass%20template%20(call%20the%20super%20impl%20this%0A%2F%2F%20way%20so%20that%20%60this%60%20points%20to%20the%20superclass)%0AObject.getPrototypeOf(%2F**%20%40type%20%7BPolymerElementConstructor%7D*%2Fthis.prototype).constructor.template%3B%7Dreturn%20this._template%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Set%20the%20template.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!HTMLTemplateElement%7Cstring%7D%20value%20Template%20to%20set.%0A%20%20%20%20%20%20%20*%2F%2Cset%3Afunction%20set(value)%7Bthis._template%3Dvalue%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Path%20matching%20the%20url%20from%20which%20the%20element%20was%20imported.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20path%20is%20used%20to%20resolve%20url's%20in%20template%20style%20cssText.%0A%20%20%20%20%20%20%20*%20The%20%60importPath%60%20property%20is%20also%20set%20on%20element%20instances%20and%20can%20be%0A%20%20%20%20%20%20%20*%20used%20to%20create%20bindings%20relative%20to%20the%20import%20path.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20For%20elements%20defined%20in%20ES%20modules%2C%20users%20should%20implement%0A%20%20%20%20%20%20%20*%20%60static%20get%20importMeta()%20%7B%20return%20import.meta%3B%20%7D%60%2C%20and%20the%20default%0A%20%20%20%20%20%20%20*%20implementation%20of%20%60importPath%60%20will%20%20return%20%60import.meta.url%60's%20path.%0A%20%20%20%20%20%20%20*%20For%20elements%20defined%20in%20HTML%20imports%2C%20this%20getter%20will%20return%20the%20path%0A%20%20%20%20%20%20%20*%20to%20the%20document%20containing%20a%20%60dom-module%60%20element%20matching%20this%0A%20%20%20%20%20%20%20*%20element's%20static%20%60is%60%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%2C%20this%20path%20should%20contain%20a%20trailing%20%60%2F%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bstring%7D%20The%20import%20path%20for%20this%20element%20class%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'importPath'%2Cget%3Afunction%20get()%7Bif(!this.hasOwnProperty(JSCompiler_renameProperty('_importPath'%2Cthis)))%7Bvar%20meta%3Dthis.importMeta%3Bif(meta)%7Bthis._importPath%3DPolymer.ResolveUrl.pathFromUrl(meta.url)%3B%7Delse%7Bvar%20module%3DPolymer.DomModule%26%26Polymer.DomModule.import(%2F**%20%40type%20%7BPolymerElementConstructor%7D%20*%2Fthis.is)%3Bthis._importPath%3Dmodule%26%26module.assetpath%7C%7CObject.getPrototypeOf(%2F**%20%40type%20%7BPolymerElementConstructor%7D*%2Fthis.prototype).constructor.importPath%3B%7D%7Dreturn%20this._importPath%3B%7D%7D%5D)%3Bfunction%20PolymerElement()%7B_classCallCheck(this%2CPolymerElement)%3B%2F**%20%40type%20%7BHTMLTemplateElement%7D%20*%2Fvar%20_this%3D_possibleConstructorReturn(this%2C(PolymerElement.__proto__%7C%7CObject.getPrototypeOf(PolymerElement)).call(this))%3B_this._template%3B%2F**%20%40type%20%7Bstring%7D%20*%2F_this._importPath%3B%2F**%20%40type%20%7Bstring%7D%20*%2F_this.rootPath%3B%2F**%20%40type%20%7Bstring%7D%20*%2F_this.importPath%3B%2F**%20%40type%20%7BStampedTemplate%20%7C%20HTMLElement%20%7C%20ShadowRoot%7D%20*%2F_this.root%3B%2F**%20%40type%20%7B!Object%3Cstring%2C%20!Element%3E%7D%20*%2F_this.%24%3Breturn%20_this%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20the%20default%20%60Polymer.PropertyAccessors%60%20to%20ensure%20class%0A%20%20%20%20%20%20%20*%20metaprogramming%20related%20to%20property%20accessors%20and%20effects%20has%0A%20%20%20%20%20%20%20*%20completed%20(calls%20%60finalize%60).%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20It%20also%20initializes%20any%20property%20defaults%20provided%20via%20%60value%60%20in%0A%20%20%20%20%20%20%20*%20%60properties%60%20metadata.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%0A%20%20%20%20%20%20%20*%2F_createClass(PolymerElement%2C%5B%7Bkey%3A'_initializeProperties'%2Cvalue%3Afunction%20_initializeProperties()%7Bthis.constructor.finalize()%3B%2F%2F%20note%3A%20finalize%20template%20when%20we%20have%20access%20to%20%60localName%60%20to%0A%2F%2F%20avoid%20dependence%20on%20%60is%60%20for%20polyfilling%20styling.%0Athis.constructor._finalizeTemplate(%2F**%20%40type%20%7B!HTMLElement%7D%20*%2Fthis.localName)%3B_get(PolymerElement.prototype.__proto__%7C%7CObject.getPrototypeOf(PolymerElement.prototype)%2C'_initializeProperties'%2Cthis).call(this)%3B%2F%2F%20set%20path%20defaults%0Athis.rootPath%3DPolymer.rootPath%3Bthis.importPath%3Dthis.constructor.importPath%3B%2F%2F%20apply%20property%20defaults...%0Avar%20p%24%3DpropertyDefaults(this.constructor)%3Bif(!p%24)%7Breturn%3B%7Dfor(var%20p%20in%20p%24)%7Bvar%20info%3Dp%24%5Bp%5D%3B%2F%2F%20Don't%20set%20default%20value%20if%20there%20is%20already%20an%20own%20property%2C%20which%0A%2F%2F%20happens%20when%20a%20%60properties%60%20property%20with%20default%20but%20no%20effects%20had%0A%2F%2F%20a%20property%20set%20(e.g.%20bound)%20by%20its%20host%20before%20upgrade%0Aif(!this.hasOwnProperty(p))%7Bvar%20value%3Dtypeof%20info.value%3D%3D'function'%3Finfo.value.call(this)%3Ainfo.value%3B%2F%2F%20Set%20via%20%60_setProperty%60%20if%20there%20is%20an%20accessor%2C%20to%20enable%0A%2F%2F%20initializing%20readOnly%20property%20defaults%0Aif(this._hasAccessor(p))%7Bthis._setPendingProperty(p%2Cvalue%2Ctrue)%3B%7Delse%7Bthis%5Bp%5D%3Dvalue%3B%7D%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Gather%20style%20text%20for%20a%20style%20element%20in%20the%20template.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20cssText%20Text%20containing%20styling%20to%20process%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20baseURI%20Base%20URI%20to%20rebase%20CSS%20paths%20against%0A%20%20%20%20%20%20%20*%20%40return%20%7Bstring%7D%20The%20processed%20CSS%20text%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'connectedCallback'%2C%2F**%0A%20%20%20%20%20%20%20*%20Provides%20a%20default%20implementation%20of%20the%20standard%20Custom%20Elements%0A%20%20%20%20%20%20%20*%20%60connectedCallback%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20default%20implementation%20enables%20the%20property%20effects%20system%20and%0A%20%20%20%20%20%20%20*%20flushes%20any%20pending%20properties%2C%20and%20updates%20shimmed%20CSS%20properties%0A%20%20%20%20%20%20%20*%20when%20using%20the%20ShadyCSS%20scoping%2Fcustom%20properties%20polyfill.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%2C%20invalidCasts%7D%20Super%20may%20or%20may%20not%20implement%20the%20callback%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20connectedCallback()%7Bif(window.ShadyCSS%26%26this._template)%7Bwindow.ShadyCSS.styleElement(%2F**%20%40type%20%7B!HTMLElement%7D%20*%2Fthis)%3B%7D_get(PolymerElement.prototype.__proto__%7C%7CObject.getPrototypeOf(PolymerElement.prototype)%2C'connectedCallback'%2Cthis).call(this)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Stamps%20the%20element%20template.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'ready'%2Cvalue%3Afunction%20ready()%7Bif(this._template)%7Bthis.root%3Dthis._stampTemplate(this._template)%3Bthis.%24%3Dthis.root.%24%3B%7D_get(PolymerElement.prototype.__proto__%7C%7CObject.getPrototypeOf(PolymerElement.prototype)%2C'ready'%2Cthis).call(this)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Implements%20%60PropertyEffects%60's%20%60_readyClients%60%20call.%20Attaches%0A%20%20%20%20%20%20%20*%20element%20dom%20by%20calling%20%60_attachDom%60%20with%20the%20dom%20stamped%20from%20the%0A%20%20%20%20%20%20%20*%20element's%20template%20via%20%60_stampTemplate%60.%20Note%20that%20this%20allows%0A%20%20%20%20%20%20%20*%20client%20dom%20to%20be%20attached%20to%20the%20element%20prior%20to%20any%20observers%0A%20%20%20%20%20%20%20*%20running.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_readyClients'%2Cvalue%3Afunction%20_readyClients()%7Bif(this._template)%7Bthis.root%3Dthis._attachDom(%2F**%20%40type%20%7BStampedTemplate%7D%20*%2Fthis.root)%3B%7D%2F%2F%20The%20super._readyClients%20here%20sets%20the%20clients%20initialized%20flag.%0A%2F%2F%20We%20must%20wait%20to%20do%20this%20until%20after%20client%20dom%20is%20created%2Fattached%0A%2F%2F%20so%20that%20this%20flag%20can%20be%20checked%20to%20prevent%20notifications%20fired%0A%2F%2F%20during%20this%20process%20from%20being%20handled%20before%20clients%20are%20ready.%0A_get(PolymerElement.prototype.__proto__%7C%7CObject.getPrototypeOf(PolymerElement.prototype)%2C'_readyClients'%2Cthis).call(this)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Attaches%20an%20element's%20stamped%20dom%20to%20itself.%20By%20default%2C%0A%20%20%20%20%20%20%20*%20this%20method%20creates%20a%20%60shadowRoot%60%20and%20adds%20the%20dom%20to%20it.%0A%20%20%20%20%20%20%20*%20However%2C%20this%20method%20may%20be%20overridden%20to%20allow%20an%20element%0A%20%20%20%20%20%20%20*%20to%20put%20its%20dom%20in%20another%20location.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40throws%20%7BError%7D%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingReturn%7D%0A%20%20%20%20%20%20%20*%20%40param%20%7BStampedTemplate%7D%20dom%20to%20attach%20to%20the%20element.%0A%20%20%20%20%20%20%20*%20%40return%20%7BShadowRoot%7D%20node%20to%20which%20the%20dom%20has%20been%20attached.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_attachDom'%2Cvalue%3Afunction%20_attachDom(dom)%7Bif(this.attachShadow)%7Bif(dom)%7Bif(!this.shadowRoot)%7Bthis.attachShadow(%7Bmode%3A'open'%7D)%3B%7Dthis.shadowRoot.appendChild(dom)%3Breturn%20this.shadowRoot%3B%7Dreturn%20null%3B%7Delse%7Bthrow%20new%20Error('ShadowDOM%20not%20available.%20'%2B%2F%2F%20TODO(sorvell)%3A%20move%20to%20compile-time%20conditional%20when%20supported%0A'Polymer.Element%20can%20create%20dom%20as%20children%20instead%20of%20in%20'%2B'ShadowDOM%20by%20setting%20%60this.root%20%3D%20this%3B%5C%60%20before%20%5C%60ready%5C%60.')%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20When%20using%20the%20ShadyCSS%20scoping%20and%20custom%20property%20shim%2C%20causes%20all%0A%20%20%20%20%20%20%20*%20shimmed%20styles%20in%20this%20element%20(and%20its%20subtree)%20to%20be%20updated%0A%20%20%20%20%20%20%20*%20based%20on%20current%20custom%20property%20values.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20optional%20parameter%20overrides%20inline%20custom%20property%20styles%20with%20an%0A%20%20%20%20%20%20%20*%20object%20of%20properties%20where%20the%20keys%20are%20CSS%20properties%2C%20and%20the%20values%0A%20%20%20%20%20%20%20*%20are%20strings.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Example%3A%20%60this.updateStyles(%7B'--color'%3A%20'blue'%7D)%60%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20These%20properties%20are%20retained%20unless%20a%20value%20of%20%60null%60%20is%20set.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%3A%20This%20function%20does%20not%20support%20updating%20CSS%20mixins.%0A%20%20%20%20%20%20%20*%20You%20can%20not%20dynamically%20change%20the%20value%20of%20an%20%60%40apply%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20properties%20Bag%20of%20custom%20property%20key%2Fvalues%20to%0A%20%20%20%20%20%20%20*%20%20%20apply%20to%20this%20element.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'updateStyles'%2Cvalue%3Afunction%20updateStyles(properties)%7Bif(window.ShadyCSS)%7Bwindow.ShadyCSS.styleSubtree(%2F**%20%40type%20%7B!HTMLElement%7D%20*%2Fthis%2Cproperties)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Rewrites%20a%20given%20URL%20relative%20to%20a%20base%20URL.%20The%20base%20URL%20defaults%20to%0A%20%20%20%20%20%20%20*%20the%20original%20location%20of%20the%20document%20containing%20the%20%60dom-module%60%20for%0A%20%20%20%20%20%20%20*%20this%20element.%20This%20method%20will%20return%20the%20same%20URL%20before%20and%20after%0A%20%20%20%20%20%20%20*%20bundling.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%20that%20this%20function%20performs%20no%20resolution%20for%20URLs%20that%20start%0A%20%20%20%20%20%20%20*%20with%20%60%2F%60%20(absolute%20URLs)%20or%20%60%23%60%20(hash%20identifiers).%20%20For%20general%20purpose%0A%20%20%20%20%20%20%20*%20URL%20resolution%2C%20use%20%60window.URL%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20url%20URL%20to%20resolve.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%3D%7D%20base%20Optional%20base%20URL%20to%20resolve%20against%2C%20defaults%0A%20%20%20%20%20%20%20*%20to%20the%20element's%20%60importPath%60%0A%20%20%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Rewritten%20URL%20relative%20to%20base%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'resolveUrl'%2Cvalue%3Afunction%20resolveUrl(url%2Cbase)%7Bif(!base%26%26this.importPath)%7Bbase%3DPolymer.ResolveUrl.resolveUrl(this.importPath)%3B%7Dreturn%20Polymer.ResolveUrl.resolveUrl(url%2Cbase)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20%60PropertyAccessors%60%20to%20add%20map%20of%20dynamic%20functions%20on%0A%20%20%20%20%20%20%20*%20template%20info%2C%20for%20consumption%20by%20%60PropertyEffects%60%20template%20binding%0A%20%20%20%20%20%20%20*%20code.%20This%20map%20determines%20which%20method%20templates%20should%20have%20accessors%0A%20%20%20%20%20%20%20*%20created%20for%20them.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20Interfaces%20in%20closure%20do%20not%20inherit%20statics%2C%20but%20classes%20do%0A%20%20%20%20%20%20%20*%2F%7D%5D%2C%5B%7Bkey%3A'_processStyleText'%2Cvalue%3Afunction%20_processStyleText(cssText%2CbaseURI)%7Breturn%20Polymer.ResolveUrl.resolveCss(cssText%2CbaseURI)%3B%7D%2F**%0A%20%20%20%20%20%20*%20Configures%20an%20element%20%60proto%60%20to%20function%20with%20a%20given%20%60template%60.%0A%20%20%20%20%20%20*%20The%20element%20name%20%60is%60%20and%20extends%20%60ext%60%20must%20be%20specified%20for%20ShadyCSS%0A%20%20%20%20%20%20*%20style%20scoping.%0A%20%20%20%20%20%20*%0A%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20is%20Tag%20name%20(or%20type%20extension%20name)%20for%20this%20element%0A%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_finalizeTemplate'%2Cvalue%3Afunction%20_finalizeTemplate(is)%7B%2F**%20%40const%20%7BHTMLTemplateElement%7D%20*%2Fvar%20template%3Dthis.prototype._template%3Bif(template%26%26!template.__polymerFinalized)%7Btemplate.__polymerFinalized%3Dtrue%3Bvar%20importPath%3Dthis.importPath%3Bvar%20baseURI%3DimportPath%3FPolymer.ResolveUrl.resolveUrl(importPath)%3A''%3B%2F%2F%20e.g.%20support%20%60include%3D%22module-name%22%60%2C%20and%20ShadyCSS%0AprocessElementStyles(this%2Ctemplate%2Cis%2CbaseURI)%3Bthis.prototype._bindTemplate(template)%3B%7D%7D%7D%2C%7Bkey%3A'_parseTemplateContent'%2Cvalue%3Afunction%20_parseTemplateContent(template%2CtemplateInfo%2CnodeInfo)%7BtemplateInfo.dynamicFns%3DtemplateInfo.dynamicFns%7C%7Cthis._properties%3Breturn%20_get(PolymerElement.__proto__%7C%7CObject.getPrototypeOf(PolymerElement)%2C'_parseTemplateContent'%2Cthis).call(this%2Ctemplate%2CtemplateInfo%2CnodeInfo)%3B%7D%7D%5D)%3Breturn%20PolymerElement%3B%7D(polymerElementBase)%3Breturn%20PolymerElement%3B%7D)%3B%2F**%0A%20%20%20*%20When%20using%20the%20ShadyCSS%20scoping%20and%20custom%20property%20shim%2C%20causes%20all%0A%20%20%20*%20shimmed%20%60styles%60%20(via%20%60custom-style%60)%20in%20the%20document%20(and%20its%20subtree)%0A%20%20%20*%20to%20be%20updated%20based%20on%20current%20custom%20property%20values.%0A%20%20%20*%0A%20%20%20*%20The%20optional%20parameter%20overrides%20inline%20custom%20property%20styles%20with%20an%0A%20%20%20*%20object%20of%20properties%20where%20the%20keys%20are%20CSS%20properties%2C%20and%20the%20values%0A%20%20%20*%20are%20strings.%0A%20%20%20*%0A%20%20%20*%20Example%3A%20%60Polymer.updateStyles(%7B'--color'%3A%20'blue'%7D)%60%0A%20%20%20*%0A%20%20%20*%20These%20properties%20are%20retained%20unless%20a%20value%20of%20%60null%60%20is%20set.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BObject%3D%7D%20props%20Bag%20of%20custom%20property%20key%2Fvalues%20to%0A%20%20%20*%20%20%20apply%20to%20the%20document.%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%2FPolymer.updateStyles%3Dfunction(props)%7Bif(window.ShadyCSS)%7Bwindow.ShadyCSS.styleDocument(props)%3B%7D%7D%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Fmixins%2Felement-mixin.html.js%0A",
            "totalBytes": 30666,
            "wastedBytes": 21056,
            "wastedPercent": 68.66236222526577
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bvar%20_get%3Dfunction%20get(object%2Cproperty%2Creceiver)%7Bif(object%3D%3D%3Dnull)object%3DFunction.prototype%3Bvar%20desc%3DObject.getOwnPropertyDescriptor(object%2Cproperty)%3Bif(desc%3D%3D%3Dundefined)%7Bvar%20parent%3DObject.getPrototypeOf(object)%3Bif(parent%3D%3D%3Dnull)%7Breturn%20undefined%3B%7Delse%7Breturn%20get(parent%2Cproperty%2Creceiver)%3B%7D%7Delse%20if(%22value%22in%20desc)%7Breturn%20desc.value%3B%7Delse%7Bvar%20getter%3Ddesc.get%3Bif(getter%3D%3D%3Dundefined)%7Breturn%20undefined%3B%7Dreturn%20getter.call(receiver)%3B%7D%7D%3Bfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7Dfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7D(function()%7B'use%20strict'%3B%2F%2F%20Base%20class%20for%20HTMLTemplateElement%20extension%20that%20has%20property%20effects%0A%2F%2F%20machinery%20for%20propagating%20host%20properties%20to%20children.%20This%20is%20an%20ES5%0A%2F%2F%20class%20only%20because%20Babel%20(incorrectly)%20requires%20super()%20in%20the%20class%0A%2F%2F%20constructor%20even%20though%20no%20%60this%60%20is%20used%20and%20it%20returns%20an%20instance.%0Avar%20newInstance%3Dnull%3B%2F**%0A%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20*%20%40extends%20%7BHTMLTemplateElement%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Ffunction%20HTMLTemplateElementExtension()%7Breturn%20newInstance%3B%7DHTMLTemplateElementExtension.prototype%3DObject.create(HTMLTemplateElement.prototype%2C%7Bconstructor%3A%7Bvalue%3AHTMLTemplateElementExtension%2Cwritable%3Atrue%7D%7D)%3B%2F**%0A%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertyEffects%7D%0A%20%20%20%20%20*%20%40extends%20%7BHTMLTemplateElementExtension%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Fvar%20DataTemplate%3DPolymer.PropertyEffects(HTMLTemplateElementExtension)%3B%2F**%0A%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_MutableData%7D%0A%20%20%20%20%20*%20%40extends%20%7BDataTemplate%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Fvar%20MutableDataTemplate%3DPolymer.MutableData(DataTemplate)%3B%2F%2F%20Applies%20a%20DataTemplate%20subclass%20to%20a%20%3Ctemplate%3E%20instance%0Afunction%20upgradeTemplate(template%2Cconstructor)%7BnewInstance%3Dtemplate%3BObject.setPrototypeOf(template%2Cconstructor.prototype)%3Bnew%20constructor()%3BnewInstance%3Dnull%3B%7D%2F**%0A%20%20%20%20%20*%20Base%20class%20for%20TemplateInstance.%0A%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertyEffects%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Fvar%20base%3DPolymer.PropertyEffects(function()%7Bfunction%20_class()%7B_classCallCheck(this%2C_class)%3B%7Dreturn%20_class%3B%7D())%3B%2F**%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40customElement%0A%20%20%20%20%20*%20%40appliesMixin%20Polymer.PropertyEffects%0A%20%20%20%20%20*%20%40unrestricted%0A%20%20%20%20%20*%2Fvar%20TemplateInstanceBase%3Dfunction(_base)%7B_inherits(TemplateInstanceBase%2C_base)%3Bfunction%20TemplateInstanceBase(props)%7B_classCallCheck(this%2CTemplateInstanceBase)%3Bvar%20_this%3D_possibleConstructorReturn(this%2C(TemplateInstanceBase.__proto__%7C%7CObject.getPrototypeOf(TemplateInstanceBase)).call(this))%3B_this._configureProperties(props)%3B_this.root%3D_this._stampTemplate(_this.__dataHost)%3B%2F%2F%20Save%20list%20of%20stamped%20children%0Avar%20children%3D_this.children%3D%5B%5D%3Bfor(var%20n%3D_this.root.firstChild%3Bn%3Bn%3Dn.nextSibling)%7Bchildren.push(n)%3Bn.__templatizeInstance%3D_this%3B%7Dif(_this.__templatizeOwner%26%26_this.__templatizeOwner.__hideTemplateChildren__)%7B_this._showHideChildren(true)%3B%7D%2F%2F%20Flush%20props%20only%20when%20props%20are%20passed%20if%20instance%20props%20exist%0A%2F%2F%20or%20when%20there%20isn't%20instance%20props.%0Avar%20options%3D_this.__templatizeOptions%3Bif(props%26%26options.instanceProps%7C%7C!options.instanceProps)%7B_this._enableProperties()%3B%7Dreturn%20_this%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Configure%20the%20given%20%60props%60%20by%20calling%20%60_setPendingProperty%60.%20Also%0A%20%20%20%20%20%20%20*%20sets%20any%20properties%20stored%20in%20%60__hostProps%60.%0A%20%20%20%20%20%20%20*%20%40private%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20props%20Object%20of%20property%20name-value%20pairs%20to%20set.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F_createClass(TemplateInstanceBase%2C%5B%7Bkey%3A'_configureProperties'%2Cvalue%3Afunction%20_configureProperties(props)%7Bvar%20options%3Dthis.__templatizeOptions%3Bif(options.forwardHostProp)%7Bfor(var%20hprop%20in%20this.__hostProps)%7Bthis._setPendingProperty(hprop%2Cthis.__dataHost%5B'_host_'%2Bhprop%5D)%3B%7D%7D%2F%2F%20Any%20instance%20props%20passed%20in%20the%20constructor%20will%20overwrite%20host%20props%3B%0A%2F%2F%20normally%20this%20would%20be%20a%20user%20error%20but%20we%20don't%20specifically%20filter%20them%0Afor(var%20iprop%20in%20props)%7Bthis._setPendingProperty(iprop%2Cprops%5Biprop%5D)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Forwards%20a%20host%20property%20to%20this%20instance.%20%20This%20method%20should%20be%0A%20%20%20%20%20%20%20*%20called%20on%20instances%20from%20the%20%60options.forwardHostProp%60%20callback%0A%20%20%20%20%20%20%20*%20to%20propagate%20changes%20of%20host%20properties%20to%20each%20instance.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%20this%20method%20enqueues%20the%20change%2C%20which%20are%20flushed%20as%20a%20batch.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20prop%20Property%20or%20path%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20of%20the%20property%20to%20forward%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'forwardHostProp'%2Cvalue%3Afunction%20forwardHostProp(prop%2Cvalue)%7Bif(this._setPendingPropertyOrPath(prop%2Cvalue%2Cfalse%2Ctrue))%7Bthis.__dataHost._enqueueClient(this)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Override%20point%20for%20adding%20custom%20or%20simulated%20event%20handling.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Node%7D%20node%20Node%20to%20add%20event%20listener%20to%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20eventName%20Name%20of%20event%0A%20%20%20%20%20%20%20*%20%40param%20%7Bfunction(!Event)%3Avoid%7D%20handler%20Listener%20function%20to%20add%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_addEventListenerToNode'%2Cvalue%3Afunction%20_addEventListenerToNode(node%2CeventName%2Chandler)%7Bvar%20_this2%3Dthis%3Bif(this._methodHost%26%26this.__templatizeOptions.parentModel)%7B%2F%2F%20If%20this%20instance%20should%20be%20considered%20a%20parent%20model%2C%20decorate%0A%2F%2F%20events%20this%20template%20instance%20as%20%60model%60%0Athis._methodHost._addEventListenerToNode(node%2CeventName%2Cfunction(e)%7Be.model%3D_this2%3Bhandler(e)%3B%7D)%3B%7Delse%7B%2F%2F%20Otherwise%20delegate%20to%20the%20template's%20host%20(which%20could%20be)%0A%2F%2F%20another%20template%20instance%0Avar%20templateHost%3Dthis.__dataHost.__dataHost%3Bif(templateHost)%7BtemplateHost._addEventListenerToNode(node%2CeventName%2Chandler)%3B%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Shows%20or%20hides%20the%20template%20instance%20top%20level%20child%20elements.%20For%0A%20%20%20%20%20%20%20*%20text%20nodes%2C%20%60textContent%60%20is%20removed%20while%20%22hidden%22%20and%20replaced%20when%0A%20%20%20%20%20%20%20*%20%22shown.%22%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%7D%20hide%20Set%20to%20true%20to%20hide%20the%20children%3B%0A%20%20%20%20%20%20%20*%20set%20to%20false%20to%20show%20them.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_showHideChildren'%2Cvalue%3Afunction%20_showHideChildren(hide)%7Bvar%20c%3Dthis.children%3Bfor(var%20i%3D0%3Bi%3Cc.length%3Bi%2B%2B)%7Bvar%20n%3Dc%5Bi%5D%3B%2F%2F%20Ignore%20non-changes%0Aif(Boolean(hide)!%3DBoolean(n.__hideTemplateChildren__))%7Bif(n.nodeType%3D%3D%3DNode.TEXT_NODE)%7Bif(hide)%7Bn.__polymerTextContent__%3Dn.textContent%3Bn.textContent%3D''%3B%7Delse%7Bn.textContent%3Dn.__polymerTextContent__%3B%7D%2F%2F%20remove%20and%20replace%20slot%0A%7Delse%20if(n.localName%3D%3D%3D'slot')%7Bif(hide)%7Bn.__polymerReplaced__%3Ddocument.createComment('hidden-slot')%3Bn.parentNode.replaceChild(n.__polymerReplaced__%2Cn)%3B%7Delse%7Bvar%20replace%3Dn.__polymerReplaced__%3Bif(replace)%7Breplace.parentNode.replaceChild(n%2Creplace)%3B%7D%7D%7Delse%20if(n.style)%7Bif(hide)%7Bn.__polymerDisplay__%3Dn.style.display%3Bn.style.display%3D'none'%3B%7Delse%7Bn.style.display%3Dn.__polymerDisplay__%3B%7D%7D%7Dn.__hideTemplateChildren__%3Dhide%3Bif(n._showHideChildren)%7Bn._showHideChildren(hide)%3B%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20default%20property-effects%20implementation%20to%20intercept%0A%20%20%20%20%20%20%20*%20textContent%20bindings%20while%20children%20are%20%22hidden%22%20and%20cache%20in%0A%20%20%20%20%20%20%20*%20private%20storage%20for%20later%20retrieval.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Node%7D%20node%20The%20node%20to%20set%20a%20property%20on%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20prop%20The%20property%20to%20set%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20The%20value%20to%20set%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_setUnmanagedPropertyToNode'%2Cvalue%3Afunction%20_setUnmanagedPropertyToNode(node%2Cprop%2Cvalue)%7Bif(node.__hideTemplateChildren__%26%26node.nodeType%3D%3DNode.TEXT_NODE%26%26prop%3D%3D'textContent')%7Bnode.__polymerTextContent__%3Dvalue%3B%7Delse%7B_get(TemplateInstanceBase.prototype.__proto__%7C%7CObject.getPrototypeOf(TemplateInstanceBase.prototype)%2C'_setUnmanagedPropertyToNode'%2Cthis).call(this%2Cnode%2Cprop%2Cvalue)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Find%20the%20parent%20model%20of%20this%20template%20instance.%20%20The%20parent%20model%0A%20%20%20%20%20%20%20*%20is%20either%20another%20templatize%20instance%20that%20had%20option%20%60parentModel%3A%20true%60%2C%0A%20%20%20%20%20%20%20*%20or%20else%20the%20host%20element.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7B!Polymer_PropertyEffects%7D%20The%20parent%20model%20of%20this%20instance%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'dispatchEvent'%2C%2F**%0A%20%20%20%20%20%20%20*%20Stub%20of%20HTMLElement's%20%60dispatchEvent%60%2C%20so%20that%20effects%20that%20may%0A%20%20%20%20%20%20%20*%20dispatch%20events%20safely%20no-op.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BEvent%7D%20event%20Event%20to%20dispatch%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Always%20true.%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20dispatchEvent(event)%7B%2F%2F%20eslint-disable-line%20no-unused-vars%0Areturn%20true%3B%7D%7D%2C%7Bkey%3A'parentModel'%2Cget%3Afunction%20get()%7Bvar%20model%3Dthis.__parentModel%3Bif(!model)%7Bvar%20options%3Dvoid%200%3Bmodel%3Dthis%3Bdo%7B%2F%2F%20A%20template%20instance's%20%60__dataHost%60%20is%20a%20%3Ctemplate%3E%0A%2F%2F%20%60model.__dataHost.__dataHost%60%20is%20the%20template's%20host%0Amodel%3Dmodel.__dataHost.__dataHost%3B%7Dwhile((options%3Dmodel.__templatizeOptions)%26%26!options.parentModel)%3Bthis.__parentModel%3Dmodel%3B%7Dreturn%20model%3B%7D%7D%5D)%3Breturn%20TemplateInstanceBase%3B%7D(base)%3B%2F**%20%40type%20%7B!DataTemplate%7D%20*%2FTemplateInstanceBase.prototype.__dataHost%3B%2F**%20%40type%20%7B!TemplatizeOptions%7D%20*%2FTemplateInstanceBase.prototype.__templatizeOptions%3B%2F**%20%40type%20%7B!Polymer_PropertyEffects%7D%20*%2FTemplateInstanceBase.prototype._methodHost%3B%2F**%20%40type%20%7B!Object%7D%20*%2FTemplateInstanceBase.prototype.__templatizeOwner%3B%2F**%20%40type%20%7B!Object%7D%20*%2FTemplateInstanceBase.prototype.__hostProps%3B%2F**%0A%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20*%20%40extends%20%7BTemplateInstanceBase%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_MutableData%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Fvar%20MutableTemplateInstanceBase%3DPolymer.MutableData(TemplateInstanceBase)%3Bfunction%20findMethodHost(template)%7B%2F%2F%20Technically%20this%20should%20be%20the%20owner%20of%20the%20outermost%20template.%0A%2F%2F%20In%20shadow%20dom%2C%20this%20is%20always%20getRootNode().host%2C%20but%20we%20can%0A%2F%2F%20approximate%20this%20via%20cooperation%20with%20our%20dataHost%20always%20setting%0A%2F%2F%20%60_methodHost%60%20as%20long%20as%20there%20were%20bindings%20(or%20id's)%20on%20this%0A%2F%2F%20instance%20causing%20it%20to%20get%20a%20dataHost.%0Avar%20templateHost%3Dtemplate.__dataHost%3Breturn%20templateHost%26%26templateHost._methodHost%7C%7CtemplateHost%3B%7D%2F*%20eslint-disable%20valid-jsdoc%20*%2F%2F**%0A%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20class.prototype%20is%20not%20defined%20for%20some%20reason%0A%20%20%20%20%20*%2Ffunction%20createTemplatizerClass(template%2CtemplateInfo%2Coptions)%7B%2F%2F%20Anonymous%20class%20created%20by%20the%20templatize%0Avar%20base%3Doptions.mutableData%3FMutableTemplateInstanceBase%3ATemplateInstanceBase%3B%2F%2F%20Affordance%20for%20global%20mixins%20onto%20TemplatizeInstance%0Aif(Polymer.Templatize.mixin)%7Bbase%3DPolymer.Templatize.mixin(base)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20%20%20*%20%40extends%20%7Bbase%7D%0A%20%20%20%20%20%20%20*%20%40private%0A%20%20%20%20%20%20%20*%2Fvar%20klass%3Dfunction(_base2)%7B_inherits(klass%2C_base2)%3Bfunction%20klass()%7B_classCallCheck(this%2Cklass)%3Breturn%20_possibleConstructorReturn(this%2C(klass.__proto__%7C%7CObject.getPrototypeOf(klass)).apply(this%2Carguments))%3B%7Dreturn%20klass%3B%7D(base)%3Bklass.prototype.__templatizeOptions%3Doptions%3Bklass.prototype._bindTemplate(template)%3BaddNotifyEffects(klass%2Ctemplate%2CtemplateInfo%2Coptions)%3Breturn%20klass%3B%7D%2F**%0A%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20class.prototype%20is%20not%20defined%20for%20some%20reason%0A%20%20%20%20%20*%2Ffunction%20addPropagateEffects(template%2CtemplateInfo%2Coptions)%7Bvar%20userForwardHostProp%3Doptions.forwardHostProp%3Bif(userForwardHostProp)%7B%2F%2F%20Provide%20data%20API%20and%20property%20effects%20on%20memoized%20template%20class%0Avar%20klass%3DtemplateInfo.templatizeTemplateClass%3Bif(!klass)%7Bvar%20_base3%3Doptions.mutableData%3FMutableDataTemplate%3ADataTemplate%3B%2F**%20%40private%20*%2Fklass%3DtemplateInfo.templatizeTemplateClass%3Dfunction(_base4)%7B_inherits(TemplatizedTemplate%2C_base4)%3Bfunction%20TemplatizedTemplate()%7B_classCallCheck(this%2CTemplatizedTemplate)%3Breturn%20_possibleConstructorReturn(this%2C(TemplatizedTemplate.__proto__%7C%7CObject.getPrototypeOf(TemplatizedTemplate)).apply(this%2Carguments))%3B%7Dreturn%20TemplatizedTemplate%3B%7D(_base3)%3B%2F%2F%20Add%20template%20-%20%3Einstances%20effects%0A%2F%2F%20and%20host%20%3C-%20template%20effects%0Avar%20hostProps%3DtemplateInfo.hostProps%3Bfor(var%20prop%20in%20hostProps)%7Bklass.prototype._addPropertyEffect('_host_'%2Bprop%2Cklass.prototype.PROPERTY_EFFECT_TYPES.PROPAGATE%2C%7Bfn%3AcreateForwardHostPropEffect(prop%2CuserForwardHostProp)%7D)%3Bklass.prototype._createNotifyingProperty('_host_'%2Bprop)%3B%7D%7DupgradeTemplate(template%2Cklass)%3B%2F%2F%20Mix%20any%20pre-bound%20data%20into%20__data%3B%20no%20need%20to%20flush%20this%20to%0A%2F%2F%20instances%20since%20they%20pull%20from%20the%20template%20at%20instance-time%0Aif(template.__dataProto)%7B%2F%2F%20Note%2C%20generally%20%60__dataProto%60%20could%20be%20chained%2C%20but%20it's%20guaranteed%0A%2F%2F%20to%20not%20be%20since%20this%20is%20a%20vanilla%20template%20we%20just%20added%20effects%20to%0AObject.assign(template.__data%2Ctemplate.__dataProto)%3B%7D%2F%2F%20Clear%20any%20pending%20data%20for%20performance%0Atemplate.__dataTemp%3D%7B%7D%3Btemplate.__dataPending%3Dnull%3Btemplate.__dataOld%3Dnull%3Btemplate._enableProperties()%3B%7D%7D%2F*%20eslint-enable%20valid-jsdoc%20*%2Ffunction%20createForwardHostPropEffect(hostProp%2CuserForwardHostProp)%7Breturn%20function%20forwardHostProp(template%2Cprop%2Cprops)%7BuserForwardHostProp.call(template.__templatizeOwner%2Cprop.substring('_host_'.length)%2Cprops%5Bprop%5D)%3B%7D%3B%7Dfunction%20addNotifyEffects(klass%2Ctemplate%2CtemplateInfo%2Coptions)%7Bvar%20hostProps%3DtemplateInfo.hostProps%7C%7C%7B%7D%3Bfor(var%20iprop%20in%20options.instanceProps)%7Bdelete%20hostProps%5Biprop%5D%3Bvar%20userNotifyInstanceProp%3Doptions.notifyInstanceProp%3Bif(userNotifyInstanceProp)%7Bklass.prototype._addPropertyEffect(iprop%2Cklass.prototype.PROPERTY_EFFECT_TYPES.NOTIFY%2C%7Bfn%3AcreateNotifyInstancePropEffect(iprop%2CuserNotifyInstanceProp)%7D)%3B%7D%7Dif(options.forwardHostProp%26%26template.__dataHost)%7Bfor(var%20hprop%20in%20hostProps)%7Bklass.prototype._addPropertyEffect(hprop%2Cklass.prototype.PROPERTY_EFFECT_TYPES.NOTIFY%2C%7Bfn%3AcreateNotifyHostPropEffect()%7D)%3B%7D%7D%7Dfunction%20createNotifyInstancePropEffect(instProp%2CuserNotifyInstanceProp)%7Breturn%20function%20notifyInstanceProp(inst%2Cprop%2Cprops)%7BuserNotifyInstanceProp.call(inst.__templatizeOwner%2Cinst%2Cprop%2Cprops%5Bprop%5D)%3B%7D%3B%7Dfunction%20createNotifyHostPropEffect()%7Breturn%20function%20notifyHostProp(inst%2Cprop%2Cprops)%7Binst.__dataHost._setPendingPropertyOrPath('_host_'%2Bprop%2Cprops%5Bprop%5D%2Ctrue%2Ctrue)%3B%7D%3B%7D%2F**%0A%20%20%20%20%20*%20Module%20for%20preparing%20and%20stamping%20instances%20of%20templates%20that%20utilize%0A%20%20%20%20%20*%20Polymer's%20data-binding%20and%20declarative%20event%20listener%20features.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%20%20%20%20%2F%2F%20Get%20a%20template%20from%20somewhere%2C%20e.g.%20light%20DOM%0A%20%20%20%20%20*%20%20%20%20%20let%20template%20%3D%20this.querySelector('template')%3B%0A%20%20%20%20%20*%20%20%20%20%20%2F%2F%20Prepare%20the%20template%0A%20%20%20%20%20*%20%20%20%20%20let%20TemplateClass%20%3D%20Polymer.Templatize.templatize(template)%3B%0A%20%20%20%20%20*%20%20%20%20%20%2F%2F%20Instance%20the%20template%20with%20an%20initial%20data%20model%0A%20%20%20%20%20*%20%20%20%20%20let%20instance%20%3D%20new%20TemplateClass(%7BmyProp%3A%20'initial'%7D)%3B%0A%20%20%20%20%20*%20%20%20%20%20%2F%2F%20Insert%20the%20instance's%20DOM%20somewhere%2C%20e.g.%20element's%20shadow%20DOM%0A%20%20%20%20%20*%20%20%20%20%20this.shadowRoot.appendChild(instance.root)%3B%0A%20%20%20%20%20*%20%20%20%20%20%2F%2F%20Changing%20a%20property%20on%20the%20instance%20will%20propagate%20to%20bindings%0A%20%20%20%20%20*%20%20%20%20%20%2F%2F%20in%20the%20template%0A%20%20%20%20%20*%20%20%20%20%20instance.myProp%20%3D%20'new%20value'%3B%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20The%20%60options%60%20dictionary%20passed%20to%20%60templatize%60%20allows%20for%20customizing%0A%20%20%20%20%20*%20features%20of%20the%20generated%20template%20class%2C%20including%20how%20outer-scope%20host%0A%20%20%20%20%20*%20properties%20should%20be%20forwarded%20into%20template%20instances%2C%20how%20any%20instance%0A%20%20%20%20%20*%20properties%20added%20into%20the%20template's%20scope%20should%20be%20notified%20out%20to%0A%20%20%20%20%20*%20the%20host%2C%20and%20whether%20the%20instance%20should%20be%20decorated%20as%20a%20%22parent%20model%22%0A%20%20%20%20%20*%20of%20any%20event%20handlers.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%20%20%20%20%2F%2F%20Customize%20property%20forwarding%20and%20event%20model%20decoration%0A%20%20%20%20%20*%20%20%20%20%20let%20TemplateClass%20%3D%20Polymer.Templatize.templatize(template%2C%20this%2C%20%7B%0A%20%20%20%20%20*%20%20%20%20%20%20%20parentModel%3A%20true%2C%0A%20%20%20%20%20*%20%20%20%20%20%20%20forwardHostProp(property%2C%20value)%20%7B...%7D%2C%0A%20%20%20%20%20*%20%20%20%20%20%20%20instanceProps%3A%20%7B...%7D%2C%0A%20%20%20%20%20*%20%20%20%20%20%20%20notifyInstanceProp(instance%2C%20property%2C%20value)%20%7B...%7D%2C%0A%20%20%20%20%20*%20%20%20%20%20%7D)%3B%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40namespace%0A%20%20%20%20%20*%20%40memberof%20Polymer%0A%20%20%20%20%20*%20%40summary%20Module%20for%20preparing%20and%20stamping%20instances%20of%20templates%0A%20%20%20%20%20*%20%20%20utilizing%20Polymer%20templating%20features.%0A%20%20%20%20%20*%2FPolymer.Templatize%3D%7B%2F**%0A%20%20%20%20%20%20%20*%20Returns%20an%20anonymous%20%60Polymer.PropertyEffects%60%20class%20bound%20to%20the%0A%20%20%20%20%20%20%20*%20%60%3Ctemplate%3E%60%20provided.%20%20Instancing%20the%20class%20will%20result%20in%20the%0A%20%20%20%20%20%20%20*%20template%20being%20stamped%20into%20a%20document%20fragment%20stored%20as%20the%20instance's%0A%20%20%20%20%20%20%20*%20%60root%60%20property%2C%20after%20which%20it%20can%20be%20appended%20to%20the%20DOM.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Templates%20may%20utilize%20all%20Polymer%20data-binding%20features%20as%20well%20as%0A%20%20%20%20%20%20%20*%20declarative%20event%20listeners.%20%20Event%20listeners%20and%20inline%20computing%0A%20%20%20%20%20%20%20*%20functions%20in%20the%20template%20will%20be%20called%20on%20the%20host%20of%20the%20template.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20constructor%20returned%20takes%20a%20single%20argument%20dictionary%20of%20initial%0A%20%20%20%20%20%20%20*%20property%20values%20to%20propagate%20into%20template%20bindings.%20%20Additionally%0A%20%20%20%20%20%20%20*%20host%20properties%20can%20be%20forwarded%20in%2C%20and%20instance%20properties%20can%20be%0A%20%20%20%20%20%20%20*%20notified%20out%20by%20providing%20optional%20callbacks%20in%20the%20%60options%60%20dictionary.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Valid%20configuration%20in%20%60options%60%20are%20as%20follows%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20-%20%60forwardHostProp(property%2C%20value)%60%3A%20Called%20when%20a%20property%20referenced%0A%20%20%20%20%20%20%20*%20%20%20in%20the%20template%20changed%20on%20the%20template's%20host.%20As%20this%20library%20does%0A%20%20%20%20%20%20%20*%20%20%20not%20retain%20references%20to%20templates%20instanced%20by%20the%20user%2C%20it%20is%20the%0A%20%20%20%20%20%20%20*%20%20%20templatize%20owner's%20responsibility%20to%20forward%20host%20property%20changes%20into%0A%20%20%20%20%20%20%20*%20%20%20user-stamped%20instances.%20%20The%20%60instance.forwardHostProp(property%2C%20value)%60%0A%20%20%20%20%20%20%20*%20%20%20%20method%20on%20the%20generated%20class%20should%20be%20called%20to%20forward%20host%0A%20%20%20%20%20%20%20*%20%20%20properties%20into%20the%20template%20to%20prevent%20unnecessary%20property-changed%0A%20%20%20%20%20%20%20*%20%20%20notifications.%20Any%20properties%20referenced%20in%20the%20template%20that%20are%20not%0A%20%20%20%20%20%20%20*%20%20%20defined%20in%20%60instanceProps%60%20will%20be%20notified%20up%20to%20the%20template's%20host%0A%20%20%20%20%20%20%20*%20%20%20automatically.%0A%20%20%20%20%20%20%20*%20-%20%60instanceProps%60%3A%20Dictionary%20of%20property%20names%20that%20will%20be%20added%0A%20%20%20%20%20%20%20*%20%20%20to%20the%20instance%20by%20the%20templatize%20owner.%20%20These%20properties%20shadow%20any%0A%20%20%20%20%20%20%20*%20%20%20host%20properties%2C%20and%20changes%20within%20the%20template%20to%20these%20properties%0A%20%20%20%20%20%20%20*%20%20%20will%20result%20in%20%60notifyInstanceProp%60%20being%20called.%0A%20%20%20%20%20%20%20*%20-%20%60mutableData%60%3A%20When%20%60true%60%2C%20the%20generated%20class%20will%20skip%20strict%0A%20%20%20%20%20%20%20*%20%20%20dirty-checking%20for%20objects%20and%20arrays%20(always%20consider%20them%20to%20be%0A%20%20%20%20%20%20%20*%20%20%20%22dirty%22).%0A%20%20%20%20%20%20%20*%20-%20%60notifyInstanceProp(instance%2C%20property%2C%20value)%60%3A%20Called%20when%0A%20%20%20%20%20%20%20*%20%20%20an%20instance%20property%20changes.%20%20Users%20may%20choose%20to%20call%20%60notifyPath%60%0A%20%20%20%20%20%20%20*%20%20%20on%20e.g.%20the%20owner%20to%20notify%20the%20change.%0A%20%20%20%20%20%20%20*%20-%20%60parentModel%60%3A%20When%20%60true%60%2C%20events%20handled%20by%20declarative%20event%20listeners%0A%20%20%20%20%20%20%20*%20%20%20(%60on-event%3D%22handler%22%60)%20will%20be%20decorated%20with%20a%20%60model%60%20property%20pointing%0A%20%20%20%20%20%20%20*%20%20%20to%20the%20template%20instance%20that%20stamped%20it.%20%20It%20will%20also%20be%20returned%0A%20%20%20%20%20%20%20*%20%20%20from%20%60instance.parentModel%60%20in%20cases%20where%20template%20instance%20nesting%0A%20%20%20%20%20%20%20*%20%20%20causes%20an%20inner%20model%20to%20shadow%20an%20outer%20model.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20All%20callbacks%20are%20called%20bound%20to%20the%20%60owner%60.%20Any%20context%0A%20%20%20%20%20%20%20*%20needed%20for%20the%20callbacks%20(such%20as%20references%20to%20%60instances%60%20stamped)%0A%20%20%20%20%20%20%20*%20should%20be%20stored%20on%20the%20%60owner%60%20such%20that%20they%20can%20be%20retrieved%20via%0A%20%20%20%20%20%20%20*%20%60this%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20When%20%60options.forwardHostProp%60%20is%20declared%20as%20an%20option%2C%20any%20properties%0A%20%20%20%20%20%20%20*%20referenced%20in%20the%20template%20will%20be%20automatically%20forwarded%20from%20the%20host%20of%0A%20%20%20%20%20%20%20*%20the%20%60%3Ctemplate%3E%60%20to%20instances%2C%20with%20the%20exception%20of%20any%20properties%20listed%20in%0A%20%20%20%20%20%20%20*%20the%20%60options.instanceProps%60%20object.%20%20%60instanceProps%60%20are%20assumed%20to%20be%0A%20%20%20%20%20%20%20*%20managed%20by%20the%20owner%20of%20the%20instances%2C%20either%20passed%20into%20the%20constructor%0A%20%20%20%20%20%20%20*%20or%20set%20after%20the%20fact.%20%20Note%2C%20any%20properties%20passed%20into%20the%20constructor%20will%0A%20%20%20%20%20%20%20*%20always%20be%20set%20to%20the%20instance%20(regardless%20of%20whether%20they%20would%20normally%0A%20%20%20%20%20%20%20*%20be%20forwarded%20from%20the%20host).%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%20that%20%60templatize()%60%20can%20be%20run%20only%20once%20for%20a%20given%20%60%3Ctemplate%3E%60.%0A%20%20%20%20%20%20%20*%20Further%20calls%20will%20result%20in%20an%20error.%20Also%2C%20there%20is%20a%20special%0A%20%20%20%20%20%20%20*%20behavior%20if%20the%20template%20was%20duplicated%20through%20a%20mechanism%20such%20as%0A%20%20%20%20%20%20%20*%20%60%3Cdom-repeat%3E%60%20or%20%60%3Ctest-fixture%3E%60.%20In%20this%20case%2C%20all%20calls%20to%0A%20%20%20%20%20%20%20*%20%60templatize()%60%20return%20the%20same%20class%20for%20all%20duplicates%20of%20a%20template.%0A%20%20%20%20%20%20%20*%20The%20class%20returned%20from%20%60templatize()%60%20is%20generated%20only%20once%20using%0A%20%20%20%20%20%20%20*%20the%20%60options%60%20from%20the%20first%20call.%20This%20means%20that%20any%20%60options%60%0A%20%20%20%20%20%20%20*%20provided%20to%20subsequent%20calls%20will%20be%20ignored.%20Therefore%2C%20it%20is%20very%0A%20%20%20%20%20%20%20*%20important%20not%20to%20close%20over%20any%20variables%20inside%20the%20callbacks.%20Also%2C%0A%20%20%20%20%20%20%20*%20arrow%20functions%20must%20be%20avoided%20because%20they%20bind%20the%20outer%20%60this%60.%0A%20%20%20%20%20%20%20*%20Inside%20the%20callbacks%2C%20any%20contextual%20information%20can%20be%20accessed%0A%20%20%20%20%20%20%20*%20through%20%60this%60%2C%20which%20points%20to%20the%20%60owner%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40memberof%20Polymer.Templatize%0A%20%20%20%20%20%20%20*%20%40param%20%7B!HTMLTemplateElement%7D%20template%20Template%20to%20templatize%0A%20%20%20%20%20%20%20*%20%40param%20%7BPolymer_PropertyEffects%3D%7D%20owner%20Owner%20of%20the%20template%20instances%3B%0A%20%20%20%20%20%20%20*%20%20%20any%20optional%20callbacks%20will%20be%20bound%20to%20this%20owner.%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20options%20Options%20dictionary%20(see%20summary%20for%20details)%0A%20%20%20%20%20%20%20*%20%40return%20%7Bfunction(new%3ATemplateInstanceBase)%7D%20Generated%20class%20bound%20to%20the%20template%0A%20%20%20%20%20%20%20*%20%20%20provided%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%0A%20%20%20%20%20%20%20*%2Ftemplatize%3Afunction%20templatize(template%2Cowner%2Coptions)%7B%2F%2F%20Under%20strictTemplatePolicy%2C%20the%20templatized%20element%20must%20be%20owned%0A%2F%2F%20by%20a%20(trusted)%20Polymer%20element%2C%20indicated%20by%20existence%20of%20_methodHost%3B%0A%2F%2F%20e.g.%20for%20dom-if%20%26%20dom-repeat%20in%20main%20document%2C%20_methodHost%20is%20null%0Aif(Polymer.strictTemplatePolicy%26%26!findMethodHost(template))%7Bthrow%20new%20Error('strictTemplatePolicy%3A%20template%20owner%20not%20trusted')%3B%7Doptions%3D%2F**%20%40type%20%7B!TemplatizeOptions%7D%20*%2Foptions%7C%7C%7B%7D%3Bif(template.__templatizeOwner)%7Bthrow%20new%20Error('A%20%3Ctemplate%3E%20can%20only%20be%20templatized%20once')%3B%7Dtemplate.__templatizeOwner%3Downer%3Bvar%20ctor%3Downer%3Fowner.constructor%3ATemplateInstanceBase%3Bvar%20templateInfo%3Dctor._parseTemplate(template)%3B%2F%2F%20Get%20memoized%20base%20class%20for%20the%20prototypical%20template%2C%20which%0A%2F%2F%20includes%20property%20effects%20for%20binding%20template%20%26%20forwarding%0Avar%20baseClass%3DtemplateInfo.templatizeInstanceClass%3Bif(!baseClass)%7BbaseClass%3DcreateTemplatizerClass(template%2CtemplateInfo%2Coptions)%3BtemplateInfo.templatizeInstanceClass%3DbaseClass%3B%7D%2F%2F%20Host%20property%20forwarding%20must%20be%20installed%20onto%20template%20instance%0AaddPropagateEffects(template%2CtemplateInfo%2Coptions)%3B%2F%2F%20Subclass%20base%20class%20and%20add%20reference%20for%20this%20specific%20template%0A%2F**%20%40private%20*%2Fvar%20klass%3Dfunction(_baseClass)%7B_inherits(TemplateInstance%2C_baseClass)%3Bfunction%20TemplateInstance()%7B_classCallCheck(this%2CTemplateInstance)%3Breturn%20_possibleConstructorReturn(this%2C(TemplateInstance.__proto__%7C%7CObject.getPrototypeOf(TemplateInstance)).apply(this%2Carguments))%3B%7Dreturn%20TemplateInstance%3B%7D(baseClass)%3Bklass.prototype._methodHost%3DfindMethodHost(template)%3Bklass.prototype.__dataHost%3Dtemplate%3Bklass.prototype.__templatizeOwner%3Downer%3Bklass.prototype.__hostProps%3DtemplateInfo.hostProps%3Bklass%3D%2F**%20%40type%20%7Bfunction(new%3ATemplateInstanceBase)%7D%20*%2Fklass%3B%2F%2Feslint-disable-line%20no-self-assign%0Areturn%20klass%3B%7D%2C%2F**%0A%20%20%20%20%20%20%20*%20Returns%20the%20template%20%22model%22%20associated%20with%20a%20given%20element%2C%20which%0A%20%20%20%20%20%20%20*%20serves%20as%20the%20binding%20scope%20for%20the%20template%20instance%20the%20element%20is%0A%20%20%20%20%20%20%20*%20contained%20in.%20A%20template%20model%20is%20an%20instance%20of%0A%20%20%20%20%20%20%20*%20%60TemplateInstanceBase%60%2C%20and%20should%20be%20used%20to%20manipulate%20data%0A%20%20%20%20%20%20%20*%20associated%20with%20this%20template%20instance.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%20%20let%20model%20%3D%20modelForElement(el)%3B%0A%20%20%20%20%20%20%20*%20%20%20if%20(model.index%20%3C%2010)%20%7B%0A%20%20%20%20%20%20%20*%20%20%20%20%20model.set('item.checked'%2C%20true)%3B%0A%20%20%20%20%20%20%20*%20%20%20%7D%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40memberof%20Polymer.Templatize%0A%20%20%20%20%20%20%20*%20%40param%20%7BHTMLTemplateElement%7D%20template%20The%20model%20will%20be%20returned%20for%0A%20%20%20%20%20%20%20*%20%20%20elements%20stamped%20from%20this%20template%0A%20%20%20%20%20%20%20*%20%40param%20%7BNode%3D%7D%20node%20Node%20for%20which%20to%20return%20a%20template%20model.%0A%20%20%20%20%20%20%20*%20%40return%20%7BTemplateInstanceBase%7D%20Template%20instance%20representing%20the%0A%20%20%20%20%20%20%20*%20%20%20binding%20scope%20for%20the%20element%0A%20%20%20%20%20%20%20*%2FmodelForElement%3Afunction%20modelForElement(template%2Cnode)%7Bvar%20model%3Dvoid%200%3Bwhile(node)%7B%2F%2F%20An%20element%20with%20a%20__templatizeInstance%20marks%20the%20top%20boundary%0A%2F%2F%20of%20a%20scope%3B%20walk%20up%20until%20we%20find%20one%2C%20and%20then%20ensure%20that%0A%2F%2F%20its%20__dataHost%20matches%20%60this%60%2C%20meaning%20this%20dom-repeat%20stamped%20it%0Aif(model%3Dnode.__templatizeInstance)%7B%2F%2F%20Found%20an%20element%20stamped%20by%20another%20template%3B%20keep%20walking%20up%0A%2F%2F%20from%20its%20__dataHost%0Aif(model.__dataHost!%3Dtemplate)%7Bnode%3Dmodel.__dataHost%3B%7Delse%7Breturn%20model%3B%7D%7Delse%7B%2F%2F%20Still%20in%20a%20template%20scope%2C%20keep%20going%20up%20until%0A%2F%2F%20a%20__templatizeInstance%20is%20found%0Anode%3Dnode.parentNode%3B%7D%7Dreturn%20null%3B%7D%7D%3BPolymer.TemplateInstanceBase%3DTemplateInstanceBase%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Ftemplatize.html.js%0A",
            "totalBytes": 24612,
            "wastedBytes": 14344,
            "wastedPercent": 58.280513570615966
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_get%3Dfunction%20get(object%2Cproperty%2Creceiver)%7Bif(object%3D%3D%3Dnull)object%3DFunction.prototype%3Bvar%20desc%3DObject.getOwnPropertyDescriptor(object%2Cproperty)%3Bif(desc%3D%3D%3Dundefined)%7Bvar%20parent%3DObject.getPrototypeOf(object)%3Bif(parent%3D%3D%3Dnull)%7Breturn%20undefined%3B%7Delse%7Breturn%20get(parent%2Cproperty%2Creceiver)%3B%7D%7Delse%20if(%22value%22in%20desc)%7Breturn%20desc.value%3B%7Delse%7Bvar%20getter%3Ddesc.get%3Bif(getter%3D%3D%3Dundefined)%7Breturn%20undefined%3B%7Dreturn%20getter.call(receiver)%3B%7D%7D%3Bvar%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3Bvar%20TemplateInstanceBase%3DPolymer.TemplateInstanceBase%3B%2F%2F%20eslint-disable-line%0A%2F**%0A%20%20%20*%20%40constructor%0A%20%20%20*%20%40implements%20%7BPolymer_OptionalMutableData%7D%0A%20%20%20*%20%40extends%20%7BPolymer.Element%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Fvar%20domRepeatBase%3DPolymer.OptionalMutableData(Polymer.Element)%3B%2F**%0A%20%20%20*%20The%20%60%3Cdom-repeat%3E%60%20element%20will%20automatically%20stamp%20and%20binds%20one%20instance%0A%20%20%20*%20of%20template%20content%20to%20each%20object%20in%20a%20user-provided%20array.%0A%20%20%20*%20%60dom-repeat%60%20accepts%20an%20%60items%60%20property%2C%20and%20one%20instance%20of%20the%20template%0A%20%20%20*%20is%20stamped%20for%20each%20item%20into%20the%20DOM%20at%20the%20location%20of%20the%20%60dom-repeat%60%0A%20%20%20*%20element.%20%20The%20%60item%60%20property%20will%20be%20set%20on%20each%20instance's%20binding%0A%20%20%20*%20scope%2C%20thus%20templates%20should%20bind%20to%20sub-properties%20of%20%60item%60.%0A%20%20%20*%0A%20%20%20*%20Example%3A%0A%20%20%20*%0A%20%20%20*%20%60%60%60html%0A%20%20%20*%20%3Cdom-module%20id%3D%22employee-list%22%3E%0A%20%20%20*%0A%20%20%20*%20%20%20%3Ctemplate%3E%0A%20%20%20*%0A%20%20%20*%20%20%20%20%20%3Cdiv%3E%20Employee%20list%3A%20%3C%2Fdiv%3E%0A%20%20%20*%20%20%20%20%20%3Cdom-repeat%20items%3D%22%7B%7Bemployees%7D%7D%22%3E%0A%20%20%20*%20%20%20%20%20%20%20%3Ctemplate%3E%0A%20%20%20*%20%20%20%20%20%20%20%20%20%3Cdiv%3EFirst%20name%3A%20%3Cspan%3E%7B%7Bitem.first%7D%7D%3C%2Fspan%3E%3C%2Fdiv%3E%0A%20%20%20*%20%20%20%20%20%20%20%20%20%3Cdiv%3ELast%20name%3A%20%3Cspan%3E%7B%7Bitem.last%7D%7D%3C%2Fspan%3E%3C%2Fdiv%3E%0A%20%20%20*%20%20%20%20%20%20%20%3C%2Ftemplate%3E%0A%20%20%20*%20%20%20%20%20%3C%2Fdom-repeat%3E%0A%20%20%20*%0A%20%20%20*%20%20%20%3C%2Ftemplate%3E%0A%20%20%20*%0A%20%20%20*%20%3C%2Fdom-module%3E%0A%20%20%20*%20%60%60%60%0A%20%20%20*%0A%20%20%20*%20With%20the%20following%20custom%20element%20definition%3A%0A%20%20%20*%0A%20%20%20*%20%60%60%60js%0A%20%20%20*%20class%20EmployeeList%20extends%20Polymer.Element%20%7B%0A%20%20%20*%20%20%20static%20get%20is()%20%7B%20return%20'employee-list'%3B%20%7D%0A%20%20%20*%20%20%20static%20get%20properties()%20%7B%0A%20%20%20*%20%20%20%20%20return%20%7B%0A%20%20%20*%20%20%20%20%20%20%20employees%3A%20%7B%0A%20%20%20*%20%20%20%20%20%20%20%20%20value()%20%7B%0A%20%20%20*%20%20%20%20%20%20%20%20%20%20%20return%20%5B%0A%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%20%20%7Bfirst%3A%20'Bob'%2C%20last%3A%20'Smith'%7D%2C%0A%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%20%20%7Bfirst%3A%20'Sally'%2C%20last%3A%20'Johnson'%7D%2C%0A%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%20%20...%0A%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%5D%3B%0A%20%20%20*%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20*%20%20%20%20%20%20%20%7D%0A%20%20%20*%20%20%20%20%20%7D%3B%0A%20%20%20*%20%20%20%7D%0A%20%20%20*%20%7D%0A%20%20%20*%20%60%60%60%0A%20%20%20*%0A%20%20%20*%20Notifications%20for%20changes%20to%20items%20sub-properties%20will%20be%20forwarded%20to%20template%0A%20%20%20*%20instances%2C%20which%20will%20update%20via%20the%20normal%20structured%20data%20notification%20system.%0A%20%20%20*%0A%20%20%20*%20Mutations%20to%20the%20%60items%60%20array%20itself%20should%20be%20made%20using%20the%20Array%0A%20%20%20*%20mutation%20API's%20on%20%60Polymer.Base%60%20(%60push%60%2C%20%60pop%60%2C%20%60splice%60%2C%20%60shift%60%2C%0A%20%20%20*%20%60unshift%60)%2C%20and%20template%20instances%20will%20be%20kept%20in%20sync%20with%20the%20data%20in%20the%0A%20%20%20*%20array.%0A%20%20%20*%0A%20%20%20*%20Events%20caught%20by%20event%20handlers%20within%20the%20%60dom-repeat%60%20template%20will%20be%0A%20%20%20*%20decorated%20with%20a%20%60model%60%20property%2C%20which%20represents%20the%20binding%20scope%20for%0A%20%20%20*%20each%20template%20instance.%20%20The%20model%20is%20an%20instance%20of%20Polymer.Base%2C%20and%20should%0A%20%20%20*%20be%20used%20to%20manipulate%20data%20on%20the%20instance%2C%20for%20example%0A%20%20%20*%20%60event.model.set('item.checked'%2C%20true)%3B%60.%0A%20%20%20*%0A%20%20%20*%20Alternatively%2C%20the%20model%20for%20a%20template%20instance%20for%20an%20element%20stamped%20by%0A%20%20%20*%20a%20%60dom-repeat%60%20can%20be%20obtained%20using%20the%20%60modelForElement%60%20API%20on%20the%0A%20%20%20*%20%60dom-repeat%60%20that%20stamped%20it%2C%20for%20example%0A%20%20%20*%20%60this.%24.domRepeat.modelForElement(event.target).set('item.checked'%2C%20true)%3B%60.%0A%20%20%20*%20This%20may%20be%20useful%20for%20manipulating%20instance%20data%20of%20event%20targets%20obtained%0A%20%20%20*%20by%20event%20handlers%20on%20parents%20of%20the%20%60dom-repeat%60%20(event%20delegation).%0A%20%20%20*%0A%20%20%20*%20A%20view-specific%20filter%2Fsort%20may%20be%20applied%20to%20each%20%60dom-repeat%60%20by%20supplying%20a%0A%20%20%20*%20%60filter%60%20and%2For%20%60sort%60%20property.%20%20This%20may%20be%20a%20string%20that%20names%20a%20function%20on%0A%20%20%20*%20the%20host%2C%20or%20a%20function%20may%20be%20assigned%20to%20the%20property%20directly.%20%20The%20functions%0A%20%20%20*%20should%20implemented%20following%20the%20standard%20%60Array%60%20filter%2Fsort%20API.%0A%20%20%20*%0A%20%20%20*%20In%20order%20to%20re-run%20the%20filter%20or%20sort%20functions%20based%20on%20changes%20to%20sub-fields%0A%20%20%20*%20of%20%60items%60%2C%20the%20%60observe%60%20property%20may%20be%20set%20as%20a%20space-separated%20list%20of%0A%20%20%20*%20%60item%60%20sub-fields%20that%20should%20cause%20a%20re-filter%2Fsort%20when%20modified.%20%20If%0A%20%20%20*%20the%20filter%20or%20sort%20function%20depends%20on%20properties%20not%20contained%20in%20%60items%60%2C%0A%20%20%20*%20the%20user%20should%20observe%20changes%20to%20those%20properties%20and%20call%20%60render%60%20to%20update%0A%20%20%20*%20the%20view%20based%20on%20the%20dependency%20change.%0A%20%20%20*%0A%20%20%20*%20For%20example%2C%20for%20an%20%60dom-repeat%60%20with%20a%20filter%20of%20the%20following%3A%0A%20%20%20*%0A%20%20%20*%20%60%60%60js%0A%20%20%20*%20isEngineer(item)%20%7B%0A%20%20%20*%20%20%20return%20item.type%20%3D%3D%20'engineer'%20%7C%7C%20item.manager.type%20%3D%3D%20'engineer'%3B%0A%20%20%20*%20%7D%0A%20%20%20*%20%60%60%60%0A%20%20%20*%0A%20%20%20*%20Then%20the%20%60observe%60%20property%20should%20be%20configured%20as%20follows%3A%0A%20%20%20*%0A%20%20%20*%20%60%60%60html%0A%20%20%20*%20%3Cdom-repeat%20items%3D%22%7B%7Bemployees%7D%7D%22%20filter%3D%22isEngineer%22%20observe%3D%22type%20manager.type%22%3E%0A%20%20%20*%20%60%60%60%0A%20%20%20*%0A%20%20%20*%20%40customElement%0A%20%20%20*%20%40polymer%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40extends%20%7BdomRepeatBase%7D%0A%20%20%20*%20%40appliesMixin%20Polymer.OptionalMutableData%0A%20%20%20*%20%40summary%20Custom%20element%20for%20stamping%20instance%20of%20a%20template%20bound%20to%0A%20%20%20*%20%20%20items%20in%20an%20array.%0A%20%20%20*%2Fvar%20DomRepeat%3Dfunction(_domRepeatBase)%7B_inherits(DomRepeat%2C_domRepeatBase)%3B_createClass(DomRepeat%2Cnull%2C%5B%7Bkey%3A'is'%2C%2F%2F%20Not%20needed%20to%20find%20template%3B%20can%20be%20removed%20once%20the%20analyzer%0A%2F%2F%20can%20find%20the%20tag%20name%20from%20customElements.define%20call%0Aget%3Afunction%20get()%7Breturn'dom-repeat'%3B%7D%7D%2C%7Bkey%3A'template'%2Cget%3Afunction%20get()%7Breturn%20null%3B%7D%7D%2C%7Bkey%3A'properties'%2Cget%3Afunction%20get()%7B%2F**%0A%20%20%20%20%20%20%20*%20Fired%20whenever%20DOM%20is%20added%20or%20removed%20by%20this%20template%20(by%0A%20%20%20%20%20%20%20*%20default%2C%20rendering%20occurs%20lazily).%20%20To%20force%20immediate%20rendering%2C%20call%0A%20%20%20%20%20%20%20*%20%60render%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40event%20dom-change%0A%20%20%20%20%20%20%20*%2Freturn%7B%2F**%0A%20%20%20%20%20%20%20%20%20*%20An%20array%20containing%20items%20determining%20how%20many%20instances%20of%20the%20template%0A%20%20%20%20%20%20%20%20%20*%20to%20stamp%20and%20that%20that%20each%20template%20instance%20should%20bind%20to.%0A%20%20%20%20%20%20%20%20%20*%2Fitems%3A%7Btype%3AArray%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20The%20name%20of%20the%20variable%20to%20add%20to%20the%20binding%20scope%20for%20the%20array%0A%20%20%20%20%20%20%20%20%20*%20element%20associated%20with%20a%20given%20template%20instance.%0A%20%20%20%20%20%20%20%20%20*%2Fas%3A%7Btype%3AString%2Cvalue%3A'item'%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20The%20name%20of%20the%20variable%20to%20add%20to%20the%20binding%20scope%20with%20the%20index%0A%20%20%20%20%20%20%20%20%20*%20of%20the%20instance%20in%20the%20sorted%20and%20filtered%20list%20of%20rendered%20items.%0A%20%20%20%20%20%20%20%20%20*%20Note%2C%20for%20the%20index%20in%20the%20%60this.items%60%20array%2C%20use%20the%20value%20of%20the%0A%20%20%20%20%20%20%20%20%20*%20%60itemsIndexAs%60%20property.%0A%20%20%20%20%20%20%20%20%20*%2FindexAs%3A%7Btype%3AString%2Cvalue%3A'index'%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20The%20name%20of%20the%20variable%20to%20add%20to%20the%20binding%20scope%20with%20the%20index%0A%20%20%20%20%20%20%20%20%20*%20of%20the%20instance%20in%20the%20%60this.items%60%20array.%20Note%2C%20for%20the%20index%20of%0A%20%20%20%20%20%20%20%20%20*%20this%20instance%20in%20the%20sorted%20and%20filtered%20list%20of%20rendered%20items%2C%0A%20%20%20%20%20%20%20%20%20*%20use%20the%20value%20of%20the%20%60indexAs%60%20property.%0A%20%20%20%20%20%20%20%20%20*%2FitemsIndexAs%3A%7Btype%3AString%2Cvalue%3A'itemsIndex'%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20A%20function%20that%20should%20determine%20the%20sort%20order%20of%20the%20items.%20%20This%0A%20%20%20%20%20%20%20%20%20*%20property%20should%20either%20be%20provided%20as%20a%20string%2C%20indicating%20a%20method%0A%20%20%20%20%20%20%20%20%20*%20name%20on%20the%20element's%20host%2C%20or%20else%20be%20an%20actual%20function.%20%20The%0A%20%20%20%20%20%20%20%20%20*%20function%20should%20match%20the%20sort%20function%20passed%20to%20%60Array.sort%60.%0A%20%20%20%20%20%20%20%20%20*%20Using%20a%20sort%20function%20has%20no%20effect%20on%20the%20underlying%20%60items%60%20array.%0A%20%20%20%20%20%20%20%20%20*%2Fsort%3A%7Btype%3AFunction%2Cobserver%3A'__sortChanged'%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20A%20function%20that%20can%20be%20used%20to%20filter%20items%20out%20of%20the%20view.%20%20This%0A%20%20%20%20%20%20%20%20%20*%20property%20should%20either%20be%20provided%20as%20a%20string%2C%20indicating%20a%20method%0A%20%20%20%20%20%20%20%20%20*%20name%20on%20the%20element's%20host%2C%20or%20else%20be%20an%20actual%20function.%20%20The%0A%20%20%20%20%20%20%20%20%20*%20function%20should%20match%20the%20sort%20function%20passed%20to%20%60Array.filter%60.%0A%20%20%20%20%20%20%20%20%20*%20Using%20a%20filter%20function%20has%20no%20effect%20on%20the%20underlying%20%60items%60%20array.%0A%20%20%20%20%20%20%20%20%20*%2Ffilter%3A%7Btype%3AFunction%2Cobserver%3A'__filterChanged'%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20When%20using%20a%20%60filter%60%20or%20%60sort%60%20function%2C%20the%20%60observe%60%20property%0A%20%20%20%20%20%20%20%20%20*%20should%20be%20set%20to%20a%20space-separated%20list%20of%20the%20names%20of%20item%0A%20%20%20%20%20%20%20%20%20*%20sub-fields%20that%20should%20trigger%20a%20re-sort%20or%20re-filter%20when%20changed.%0A%20%20%20%20%20%20%20%20%20*%20These%20should%20generally%20be%20fields%20of%20%60item%60%20that%20the%20sort%20or%20filter%0A%20%20%20%20%20%20%20%20%20*%20function%20depends%20on.%0A%20%20%20%20%20%20%20%20%20*%2Fobserve%3A%7Btype%3AString%2Cobserver%3A'__observeChanged'%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20When%20using%20a%20%60filter%60%20or%20%60sort%60%20function%2C%20the%20%60delay%60%20property%0A%20%20%20%20%20%20%20%20%20*%20determines%20a%20debounce%20time%20in%20ms%20after%20a%20change%20to%20observed%20item%0A%20%20%20%20%20%20%20%20%20*%20properties%20that%20must%20pass%20before%20the%20filter%20or%20sort%20is%20re-run.%0A%20%20%20%20%20%20%20%20%20*%20This%20is%20useful%20in%20rate-limiting%20shuffling%20of%20the%20view%20when%0A%20%20%20%20%20%20%20%20%20*%20item%20changes%20may%20be%20frequent.%0A%20%20%20%20%20%20%20%20%20*%2Fdelay%3ANumber%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20Count%20of%20currently%20rendered%20items%20after%20%60filter%60%20(if%20any)%20has%20been%20applied.%0A%20%20%20%20%20%20%20%20%20*%20If%20%22chunking%20mode%22%20is%20enabled%2C%20%60renderedItemCount%60%20is%20updated%20each%20time%20a%0A%20%20%20%20%20%20%20%20%20*%20set%20of%20template%20instances%20is%20rendered.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%2FrenderedItemCount%3A%7Btype%3ANumber%2Cnotify%3Atrue%2CreadOnly%3Atrue%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20Defines%20an%20initial%20count%20of%20template%20instances%20to%20render%20after%20setting%0A%20%20%20%20%20%20%20%20%20*%20the%20%60items%60%20array%2C%20before%20the%20next%20paint%2C%20and%20puts%20the%20%60dom-repeat%60%0A%20%20%20%20%20%20%20%20%20*%20into%20%22chunking%20mode%22.%20%20The%20remaining%20items%20will%20be%20created%20and%20rendered%0A%20%20%20%20%20%20%20%20%20*%20incrementally%20at%20each%20animation%20frame%20therof%20until%20all%20instances%20have%0A%20%20%20%20%20%20%20%20%20*%20been%20rendered.%0A%20%20%20%20%20%20%20%20%20*%2FinitialCount%3A%7Btype%3ANumber%2Cobserver%3A'__initializeChunking'%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20When%20%60initialCount%60%20is%20used%2C%20this%20property%20defines%20a%20frame%20rate%20(in%0A%20%20%20%20%20%20%20%20%20*%20fps)%20to%20target%20by%20throttling%20the%20number%20of%20instances%20rendered%20each%0A%20%20%20%20%20%20%20%20%20*%20frame%20to%20not%20exceed%20the%20budget%20for%20the%20target%20frame%20rate.%20%20The%0A%20%20%20%20%20%20%20%20%20*%20framerate%20is%20effectively%20the%20number%20of%20%60requestAnimationFrame%60s%20that%0A%20%20%20%20%20%20%20%20%20*%20it%20tries%20to%20allow%20to%20actually%20fire%20in%20a%20given%20second.%20It%20does%20this%0A%20%20%20%20%20%20%20%20%20*%20by%20measuring%20the%20time%20between%20%60rAF%60s%20and%20continuously%20adjusting%20the%0A%20%20%20%20%20%20%20%20%20*%20number%20of%20items%20created%20each%20%60rAF%60%20to%20maintain%20the%20target%20framerate.%0A%20%20%20%20%20%20%20%20%20*%20Setting%20this%20to%20a%20higher%20number%20allows%20lower%20latency%20and%20higher%0A%20%20%20%20%20%20%20%20%20*%20throughput%20for%20event%20handlers%20and%20other%20tasks%2C%20but%20results%20in%20a%0A%20%20%20%20%20%20%20%20%20*%20longer%20time%20for%20the%20remaining%20items%20to%20complete%20rendering.%0A%20%20%20%20%20%20%20%20%20*%2FtargetFramerate%3A%7Btype%3ANumber%2Cvalue%3A20%7D%2C_targetFrameTime%3A%7Btype%3ANumber%2Ccomputed%3A'__computeFrameTime(targetFramerate)'%7D%7D%3B%7D%7D%2C%7Bkey%3A'observers'%2Cget%3Afunction%20get()%7Breturn%5B'__itemsChanged(items.*)'%5D%3B%7D%7D%5D)%3Bfunction%20DomRepeat()%7B_classCallCheck(this%2CDomRepeat)%3Bvar%20_this%3D_possibleConstructorReturn(this%2C(DomRepeat.__proto__%7C%7CObject.getPrototypeOf(DomRepeat)).call(this))%3B_this.__instances%3D%5B%5D%3B_this.__limit%3DInfinity%3B_this.__pool%3D%5B%5D%3B_this.__renderDebouncer%3Dnull%3B_this.__itemsIdxToInstIdx%3D%7B%7D%3B_this.__chunkCount%3Dnull%3B_this.__lastChunkTime%3Dnull%3B_this.__sortFn%3Dnull%3B_this.__filterFn%3Dnull%3B_this.__observePaths%3Dnull%3B_this.__ctor%3Dnull%3B_this.__isDetached%3Dtrue%3B_this.template%3Dnull%3Breturn%20_this%3B%7D%2F**%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F_createClass(DomRepeat%2C%5B%7Bkey%3A'disconnectedCallback'%2Cvalue%3Afunction%20disconnectedCallback()%7B_get(DomRepeat.prototype.__proto__%7C%7CObject.getPrototypeOf(DomRepeat.prototype)%2C'disconnectedCallback'%2Cthis).call(this)%3Bthis.__isDetached%3Dtrue%3Bfor(var%20i%3D0%3Bi%3Cthis.__instances.length%3Bi%2B%2B)%7Bthis.__detachInstance(i)%3B%7D%7D%2F**%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'connectedCallback'%2Cvalue%3Afunction%20connectedCallback()%7B_get(DomRepeat.prototype.__proto__%7C%7CObject.getPrototypeOf(DomRepeat.prototype)%2C'connectedCallback'%2Cthis).call(this)%3Bthis.style.display%3D'none'%3B%2F%2F%20only%20perform%20attachment%20if%20the%20element%20was%20previously%20detached.%0Aif(this.__isDetached)%7Bthis.__isDetached%3Dfalse%3Bvar%20parent%3Dthis.parentNode%3Bfor(var%20i%3D0%3Bi%3Cthis.__instances.length%3Bi%2B%2B)%7Bthis.__attachInstance(i%2Cparent)%3B%7D%7D%7D%7D%2C%7Bkey%3A'__ensureTemplatized'%2Cvalue%3Afunction%20__ensureTemplatized()%7Bvar%20_this2%3Dthis%3B%2F%2F%20Templatizing%20(generating%20the%20instance%20constructor)%20needs%20to%20wait%0A%2F%2F%20until%20ready%2C%20since%20won't%20have%20its%20template%20content%20handed%20back%20to%0A%2F%2F%20it%20until%20then%0Aif(!this.__ctor)%7Bvar%20template%3Dthis.template%3D%2F**%20%40type%20%7BHTMLTemplateElement%7D%20*%2Fthis.querySelector('template')%3Bif(!template)%7B%2F%2F%20%2F%2F%20Wait%20until%20childList%20changes%20and%20template%20should%20be%20there%20by%20then%0Avar%20observer%3Dnew%20MutationObserver(function()%7Bif(_this2.querySelector('template'))%7Bobserver.disconnect()%3B_this2.__render()%3B%7Delse%7Bthrow%20new%20Error('dom-repeat%20requires%20a%20%3Ctemplate%3E%20child')%3B%7D%7D)%3Bobserver.observe(this%2C%7BchildList%3Atrue%7D)%3Breturn%20false%3B%7D%2F%2F%20Template%20instance%20props%20that%20should%20be%20excluded%20from%20forwarding%0Avar%20instanceProps%3D%7B%7D%3BinstanceProps%5Bthis.as%5D%3Dtrue%3BinstanceProps%5Bthis.indexAs%5D%3Dtrue%3BinstanceProps%5Bthis.itemsIndexAs%5D%3Dtrue%3Bthis.__ctor%3DPolymer.Templatize.templatize(template%2Cthis%2C%7BmutableData%3Athis.mutableData%2CparentModel%3Atrue%2CinstanceProps%3AinstanceProps%2C%2F**%0A%20%20%20%20%20%20%20%20%20%20%20*%20%40this%20%7Bthis%7D%0A%20%20%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20prop%20Property%20to%20set%0A%20%20%20%20%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%20property%20to%0A%20%20%20%20%20%20%20%20%20%20%20*%2FforwardHostProp%3Afunction%20forwardHostProp(prop%2Cvalue)%7Bvar%20i%24%3Dthis.__instances%3Bfor(var%20i%3D0%2Cinst%3Bi%3Ci%24.length%26%26(inst%3Di%24%5Bi%5D)%3Bi%2B%2B)%7Binst.forwardHostProp(prop%2Cvalue)%3B%7D%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20%20%20*%20%40this%20%7Bthis%7D%0A%20%20%20%20%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20inst%20Instance%20to%20notify%0A%20%20%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20prop%20Property%20to%20notify%0A%20%20%20%20%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20notify%0A%20%20%20%20%20%20%20%20%20%20%20*%2FnotifyInstanceProp%3Afunction%20notifyInstanceProp(inst%2Cprop%2Cvalue)%7Bif(Polymer.Path.matches(this.as%2Cprop))%7Bvar%20idx%3Dinst%5Bthis.itemsIndexAs%5D%3Bif(prop%3D%3Dthis.as)%7Bthis.items%5Bidx%5D%3Dvalue%3B%7Dvar%20path%3DPolymer.Path.translate(this.as%2C'items.'%2Bidx%2Cprop)%3Bthis.notifyPath(path%2Cvalue)%3B%7D%7D%7D)%3B%7Dreturn%20true%3B%7D%7D%2C%7Bkey%3A'__getMethodHost'%2Cvalue%3Afunction%20__getMethodHost()%7B%2F%2F%20Technically%20this%20should%20be%20the%20owner%20of%20the%20outermost%20template.%0A%2F%2F%20In%20shadow%20dom%2C%20this%20is%20always%20getRootNode().host%2C%20but%20we%20can%0A%2F%2F%20approximate%20this%20via%20cooperation%20with%20our%20dataHost%20always%20setting%0A%2F%2F%20%60_methodHost%60%20as%20long%20as%20there%20were%20bindings%20(or%20id's)%20on%20this%0A%2F%2F%20instance%20causing%20it%20to%20get%20a%20dataHost.%0Areturn%20this.__dataHost._methodHost%7C%7Cthis.__dataHost%3B%7D%7D%2C%7Bkey%3A'__functionFromPropertyValue'%2Cvalue%3Afunction%20__functionFromPropertyValue(functionOrMethodName)%7Bif(typeof%20functionOrMethodName%3D%3D%3D'string')%7Bvar%20methodName%3DfunctionOrMethodName%3Bvar%20obj%3Dthis.__getMethodHost()%3Breturn%20function()%7Breturn%20obj%5BmethodName%5D.apply(obj%2Carguments)%3B%7D%3B%7Dreturn%20functionOrMethodName%3B%7D%7D%2C%7Bkey%3A'__sortChanged'%2Cvalue%3Afunction%20__sortChanged(sort)%7Bthis.__sortFn%3Dthis.__functionFromPropertyValue(sort)%3Bif(this.items)%7Bthis.__debounceRender(this.__render)%3B%7D%7D%7D%2C%7Bkey%3A'__filterChanged'%2Cvalue%3Afunction%20__filterChanged(filter)%7Bthis.__filterFn%3Dthis.__functionFromPropertyValue(filter)%3Bif(this.items)%7Bthis.__debounceRender(this.__render)%3B%7D%7D%7D%2C%7Bkey%3A'__computeFrameTime'%2Cvalue%3Afunction%20__computeFrameTime(rate)%7Breturn%20Math.ceil(1000%2Frate)%3B%7D%7D%2C%7Bkey%3A'__initializeChunking'%2Cvalue%3Afunction%20__initializeChunking()%7Bif(this.initialCount)%7Bthis.__limit%3Dthis.initialCount%3Bthis.__chunkCount%3Dthis.initialCount%3Bthis.__lastChunkTime%3Dperformance.now()%3B%7D%7D%7D%2C%7Bkey%3A'__tryRenderChunk'%2Cvalue%3Afunction%20__tryRenderChunk()%7B%2F%2F%20Debounced%20so%20that%20multiple%20calls%20through%20%60_render%60%20between%20animation%0A%2F%2F%20frames%20only%20queue%20one%20new%20rAF%20(e.g.%20array%20mutation%20%26%20chunked%20render)%0Aif(this.items%26%26this.__limit%3Cthis.items.length)%7Bthis.__debounceRender(this.__requestRenderChunk)%3B%7D%7D%7D%2C%7Bkey%3A'__requestRenderChunk'%2Cvalue%3Afunction%20__requestRenderChunk()%7Bvar%20_this3%3Dthis%3BrequestAnimationFrame(function()%7Breturn%20_this3.__renderChunk()%3B%7D)%3B%7D%7D%2C%7Bkey%3A'__renderChunk'%2Cvalue%3Afunction%20__renderChunk()%7B%2F%2F%20Simple%20auto%20chunkSize%20throttling%20algorithm%20based%20on%20feedback%20loop%3A%0A%2F%2F%20measure%20actual%20time%20between%20frames%20and%20scale%20chunk%20count%20by%20ratio%0A%2F%2F%20of%20target%2Factual%20frame%20time%0Avar%20currChunkTime%3Dperformance.now()%3Bvar%20ratio%3Dthis._targetFrameTime%2F(currChunkTime-this.__lastChunkTime)%3Bthis.__chunkCount%3DMath.round(this.__chunkCount*ratio)%7C%7C1%3Bthis.__limit%2B%3Dthis.__chunkCount%3Bthis.__lastChunkTime%3DcurrChunkTime%3Bthis.__debounceRender(this.__render)%3B%7D%7D%2C%7Bkey%3A'__observeChanged'%2Cvalue%3Afunction%20__observeChanged()%7Bthis.__observePaths%3Dthis.observe%26%26this.observe.replace('.*'%2C'.').split('%20')%3B%7D%7D%2C%7Bkey%3A'__itemsChanged'%2Cvalue%3Afunction%20__itemsChanged(change)%7Bif(this.items%26%26!Array.isArray(this.items))%7Bconsole.warn('dom-repeat%20expected%20array%20for%20%60items%60%2C%20found'%2Cthis.items)%3B%7D%2F%2F%20If%20path%20was%20to%20an%20item%20(e.g.%20'items.3'%20or%20'items.3.foo')%2C%20forward%20the%0A%2F%2F%20path%20to%20that%20instance%20synchronously%20(returns%20false%20for%20non-item%20paths)%0Aif(!this.__handleItemPath(change.path%2Cchange.value))%7B%2F%2F%20Otherwise%2C%20the%20array%20was%20reset%20('items')%20or%20spliced%20('items.splices')%2C%0A%2F%2F%20so%20queue%20a%20full%20refresh%0Athis.__initializeChunking()%3Bthis.__debounceRender(this.__render)%3B%7D%7D%7D%2C%7Bkey%3A'__handleObservedPaths'%2Cvalue%3Afunction%20__handleObservedPaths(path)%7B%2F%2F%20Handle%20cases%20where%20path%20changes%20should%20cause%20a%20re-sort%2Ffilter%0Aif(this.__sortFn%7C%7Cthis.__filterFn)%7Bif(!path)%7B%2F%2F%20Always%20re-render%20if%20the%20item%20itself%20changed%0Athis.__debounceRender(this.__render%2Cthis.delay)%3B%7Delse%20if(this.__observePaths)%7B%2F%2F%20Otherwise%2C%20re-render%20if%20the%20path%20changed%20matches%20an%20observed%20path%0Avar%20paths%3Dthis.__observePaths%3Bfor(var%20i%3D0%3Bi%3Cpaths.length%3Bi%2B%2B)%7Bif(path.indexOf(paths%5Bi%5D)%3D%3D%3D0)%7Bthis.__debounceRender(this.__render%2Cthis.delay)%3B%7D%7D%7D%7D%7D%2F**%0A%20%20%20%20%20*%20%40param%20%7Bfunction(this%3ADomRepeat)%7D%20fn%20Function%20to%20debounce.%0A%20%20%20%20%20*%20%40param%20%7Bnumber%3D%7D%20delay%20Delay%20in%20ms%20to%20debounce%20by.%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'__debounceRender'%2Cvalue%3Afunction%20__debounceRender(fn)%7Bvar%20delay%3Darguments.length%3E1%26%26arguments%5B1%5D!%3D%3Dundefined%3Farguments%5B1%5D%3A0%3Bthis.__renderDebouncer%3DPolymer.Debouncer.debounce(this.__renderDebouncer%2Cdelay%3E0%3FPolymer.Async.timeOut.after(delay)%3APolymer.Async.microTask%2Cfn.bind(this))%3BPolymer.enqueueDebouncer(this.__renderDebouncer)%3B%7D%2F**%0A%20%20%20%20%20*%20Forces%20the%20element%20to%20render%20its%20content.%20Normally%20rendering%20is%0A%20%20%20%20%20*%20asynchronous%20to%20a%20provoking%20change.%20This%20is%20done%20for%20efficiency%20so%0A%20%20%20%20%20*%20that%20multiple%20changes%20trigger%20only%20a%20single%20render.%20The%20render%20method%0A%20%20%20%20%20*%20should%20be%20called%20if%2C%20for%20example%2C%20template%20rendering%20is%20required%20to%0A%20%20%20%20%20*%20validate%20application%20state.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'render'%2Cvalue%3Afunction%20render()%7B%2F%2F%20Queue%20this%20repeater%2C%20then%20flush%20all%20in%20order%0Athis.__debounceRender(this.__render)%3BPolymer.flush()%3B%7D%7D%2C%7Bkey%3A'__render'%2Cvalue%3Afunction%20__render()%7Bif(!this.__ensureTemplatized())%7B%2F%2F%20No%20template%20found%20yet%0Areturn%3B%7Dthis.__applyFullRefresh()%3B%2F%2F%20Reset%20the%20pool%0A%2F%2F%20TODO(kschaaf)%3A%20Reuse%20pool%20across%20turns%20and%20nested%20templates%0A%2F%2F%20Now%20that%20objects%2Farrays%20are%20re-evaluated%20when%20set%2C%20we%20can%20safely%0A%2F%2F%20reuse%20pooled%20instances%20across%20turns%2C%20however%20we%20still%20need%20to%20decide%0A%2F%2F%20semantics%20regarding%20how%20long%20to%20hold%2C%20how%20many%20to%20hold%2C%20etc.%0Athis.__pool.length%3D0%3B%2F%2F%20Set%20rendered%20item%20count%0Athis._setRenderedItemCount(this.__instances.length)%3B%2F%2F%20Notify%20users%0Athis.dispatchEvent(new%20CustomEvent('dom-change'%2C%7Bbubbles%3Atrue%2Ccomposed%3Atrue%7D))%3B%2F%2F%20Check%20to%20see%20if%20we%20need%20to%20render%20more%20items%0Athis.__tryRenderChunk()%3B%7D%7D%2C%7Bkey%3A'__applyFullRefresh'%2Cvalue%3Afunction%20__applyFullRefresh()%7Bvar%20_this4%3Dthis%3Bvar%20items%3Dthis.items%7C%7C%5B%5D%3Bvar%20isntIdxToItemsIdx%3Dnew%20Array(items.length)%3Bfor(var%20i%3D0%3Bi%3Citems.length%3Bi%2B%2B)%7BisntIdxToItemsIdx%5Bi%5D%3Di%3B%7D%2F%2F%20Apply%20user%20filter%0Aif(this.__filterFn)%7BisntIdxToItemsIdx%3DisntIdxToItemsIdx.filter(function(i%2Cidx%2Carray)%7Breturn%20_this4.__filterFn(items%5Bi%5D%2Cidx%2Carray)%3B%7D)%3B%7D%2F%2F%20Apply%20user%20sort%0Aif(this.__sortFn)%7BisntIdxToItemsIdx.sort(function(a%2Cb)%7Breturn%20_this4.__sortFn(items%5Ba%5D%2Citems%5Bb%5D)%3B%7D)%3B%7D%2F%2F%20items-%3Einst%20map%20kept%20for%20item%20path%20forwarding%0Avar%20itemsIdxToInstIdx%3Dthis.__itemsIdxToInstIdx%3D%7B%7D%3Bvar%20instIdx%3D0%3B%2F%2F%20Generate%20instances%20and%20assign%20items%0Avar%20limit%3DMath.min(isntIdxToItemsIdx.length%2Cthis.__limit)%3Bfor(%3BinstIdx%3Climit%3BinstIdx%2B%2B)%7Bvar%20inst%3Dthis.__instances%5BinstIdx%5D%3Bvar%20itemIdx%3DisntIdxToItemsIdx%5BinstIdx%5D%3Bvar%20item%3Ditems%5BitemIdx%5D%3BitemsIdxToInstIdx%5BitemIdx%5D%3DinstIdx%3Bif(inst)%7Binst._setPendingProperty(this.as%2Citem)%3Binst._setPendingProperty(this.indexAs%2CinstIdx)%3Binst._setPendingProperty(this.itemsIndexAs%2CitemIdx)%3Binst._flushProperties()%3B%7Delse%7Bthis.__insertInstance(item%2CinstIdx%2CitemIdx)%3B%7D%7D%2F%2F%20Remove%20any%20extra%20instances%20from%20previous%20state%0Afor(var%20_i%3Dthis.__instances.length-1%3B_i%3E%3DinstIdx%3B_i--)%7Bthis.__detachAndRemoveInstance(_i)%3B%7D%7D%7D%2C%7Bkey%3A'__detachInstance'%2Cvalue%3Afunction%20__detachInstance(idx)%7Bvar%20inst%3Dthis.__instances%5Bidx%5D%3Bfor(var%20i%3D0%3Bi%3Cinst.children.length%3Bi%2B%2B)%7Bvar%20el%3Dinst.children%5Bi%5D%3Binst.root.appendChild(el)%3B%7Dreturn%20inst%3B%7D%7D%2C%7Bkey%3A'__attachInstance'%2Cvalue%3Afunction%20__attachInstance(idx%2Cparent)%7Bvar%20inst%3Dthis.__instances%5Bidx%5D%3Bparent.insertBefore(inst.root%2Cthis)%3B%7D%7D%2C%7Bkey%3A'__detachAndRemoveInstance'%2Cvalue%3Afunction%20__detachAndRemoveInstance(idx)%7Bvar%20inst%3Dthis.__detachInstance(idx)%3Bif(inst)%7Bthis.__pool.push(inst)%3B%7Dthis.__instances.splice(idx%2C1)%3B%7D%7D%2C%7Bkey%3A'__stampInstance'%2Cvalue%3Afunction%20__stampInstance(item%2CinstIdx%2CitemIdx)%7Bvar%20model%3D%7B%7D%3Bmodel%5Bthis.as%5D%3Ditem%3Bmodel%5Bthis.indexAs%5D%3DinstIdx%3Bmodel%5Bthis.itemsIndexAs%5D%3DitemIdx%3Breturn%20new%20this.__ctor(model)%3B%7D%7D%2C%7Bkey%3A'__insertInstance'%2Cvalue%3Afunction%20__insertInstance(item%2CinstIdx%2CitemIdx)%7Bvar%20inst%3Dthis.__pool.pop()%3Bif(inst)%7B%2F%2F%20TODO(kschaaf)%3A%20If%20the%20pool%20is%20shared%20across%20turns%2C%20hostProps%0A%2F%2F%20need%20to%20be%20re-set%20to%20reused%20instances%20in%20addition%20to%20item%0Ainst._setPendingProperty(this.as%2Citem)%3Binst._setPendingProperty(this.indexAs%2CinstIdx)%3Binst._setPendingProperty(this.itemsIndexAs%2CitemIdx)%3Binst._flushProperties()%3B%7Delse%7Binst%3Dthis.__stampInstance(item%2CinstIdx%2CitemIdx)%3B%7Dvar%20beforeRow%3Dthis.__instances%5BinstIdx%2B1%5D%3Bvar%20beforeNode%3DbeforeRow%3FbeforeRow.children%5B0%5D%3Athis%3Bthis.parentNode.insertBefore(inst.root%2CbeforeNode)%3Bthis.__instances%5BinstIdx%5D%3Dinst%3Breturn%20inst%3B%7D%2F%2F%20Implements%20extension%20point%20from%20Templatize%20mixin%0A%2F**%0A%20%20%20%20%20*%20Shows%20or%20hides%20the%20template%20instance%20top%20level%20child%20elements.%20For%0A%20%20%20%20%20*%20text%20nodes%2C%20%60textContent%60%20is%20removed%20while%20%22hidden%22%20and%20replaced%20when%0A%20%20%20%20%20*%20%22shown.%22%0A%20%20%20%20%20*%20%40param%20%7Bboolean%7D%20hidden%20Set%20to%20true%20to%20hide%20the%20children%3B%0A%20%20%20%20%20*%20set%20to%20false%20to%20show%20them.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_showHideChildren'%2Cvalue%3Afunction%20_showHideChildren(hidden)%7Bfor(var%20i%3D0%3Bi%3Cthis.__instances.length%3Bi%2B%2B)%7Bthis.__instances%5Bi%5D._showHideChildren(hidden)%3B%7D%7D%2F%2F%20Called%20as%20a%20side%20effect%20of%20a%20host%20items.%3Ckey%3E.%3Cpath%3E%20path%20change%2C%0A%2F%2F%20responsible%20for%20notifying%20item.%3Cpath%3E%20changes%20to%20inst%20for%20key%0A%7D%2C%7Bkey%3A'__handleItemPath'%2Cvalue%3Afunction%20__handleItemPath(path%2Cvalue)%7Bvar%20itemsPath%3Dpath.slice(6)%3B%2F%2F%20'items.'.length%20%3D%3D%206%0Avar%20dot%3DitemsPath.indexOf('.')%3Bvar%20itemsIdx%3Ddot%3C0%3FitemsPath%3AitemsPath.substring(0%2Cdot)%3B%2F%2F%20If%20path%20was%20index%20into%20array...%0Aif(itemsIdx%3D%3DparseInt(itemsIdx%2C10))%7Bvar%20itemSubPath%3Ddot%3C0%3F''%3AitemsPath.substring(dot%2B1)%3B%2F%2F%20If%20the%20path%20is%20observed%2C%20it%20will%20trigger%20a%20full%20refresh%0Athis.__handleObservedPaths(itemSubPath)%3B%2F%2F%20Note%2C%20even%20if%20a%20rull%20refresh%20is%20triggered%2C%20always%20do%20the%20path%0A%2F%2F%20notification%20because%20unless%20mutableData%20is%20used%20for%20dom-repeat%0A%2F%2F%20and%20all%20elements%20in%20the%20instance%20subtree%2C%20a%20full%20refresh%20may%0A%2F%2F%20not%20trigger%20the%20proper%20update.%0Avar%20instIdx%3Dthis.__itemsIdxToInstIdx%5BitemsIdx%5D%3Bvar%20inst%3Dthis.__instances%5BinstIdx%5D%3Bif(inst)%7Bvar%20itemPath%3Dthis.as%2B(itemSubPath%3F'.'%2BitemSubPath%3A'')%3B%2F%2F%20This%20is%20effectively%20%60notifyPath%60%2C%20but%20avoids%20some%20of%20the%20overhead%0A%2F%2F%20of%20the%20public%20API%0Ainst._setPendingPropertyOrPath(itemPath%2Cvalue%2Cfalse%2Ctrue)%3Binst._flushProperties()%3B%7Dreturn%20true%3B%7D%7D%2F**%0A%20%20%20%20%20*%20Returns%20the%20item%20associated%20with%20a%20given%20element%20stamped%20by%0A%20%20%20%20%20*%20this%20%60dom-repeat%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Note%2C%20to%20modify%20sub-properties%20of%20the%20item%2C%0A%20%20%20%20%20*%20%60modelForElement(el).set('item.%3Csub-prop%3E'%2C%20value)%60%0A%20%20%20%20%20*%20should%20be%20used.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7B!HTMLElement%7D%20el%20Element%20for%20which%20to%20return%20the%20item.%0A%20%20%20%20%20*%20%40return%20%7B*%7D%20Item%20associated%20with%20the%20element.%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'itemForElement'%2Cvalue%3Afunction%20itemForElement(el)%7Bvar%20instance%3Dthis.modelForElement(el)%3Breturn%20instance%26%26instance%5Bthis.as%5D%3B%7D%2F**%0A%20%20%20%20%20*%20Returns%20the%20inst%20index%20for%20a%20given%20element%20stamped%20by%20this%20%60dom-repeat%60.%0A%20%20%20%20%20*%20If%20%60sort%60%20is%20provided%2C%20the%20index%20will%20reflect%20the%20sorted%20order%20(rather%0A%20%20%20%20%20*%20than%20the%20original%20array%20order).%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7B!HTMLElement%7D%20el%20Element%20for%20which%20to%20return%20the%20index.%0A%20%20%20%20%20*%20%40return%20%7B%3Fnumber%7D%20Row%20index%20associated%20with%20the%20element%20(note%20this%20may%0A%20%20%20%20%20*%20%20%20not%20correspond%20to%20the%20array%20index%20if%20a%20user%20%60sort%60%20is%20applied).%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'indexForElement'%2Cvalue%3Afunction%20indexForElement(el)%7Bvar%20instance%3Dthis.modelForElement(el)%3Breturn%20instance%26%26instance%5Bthis.indexAs%5D%3B%7D%2F**%0A%20%20%20%20%20*%20Returns%20the%20template%20%22model%22%20associated%20with%20a%20given%20element%2C%20which%0A%20%20%20%20%20*%20serves%20as%20the%20binding%20scope%20for%20the%20template%20instance%20the%20element%20is%0A%20%20%20%20%20*%20contained%20in.%20A%20template%20model%20is%20an%20instance%20of%20%60Polymer.Base%60%2C%20and%0A%20%20%20%20%20*%20should%20be%20used%20to%20manipulate%20data%20associated%20with%20this%20template%20instance.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%20%20let%20model%20%3D%20modelForElement(el)%3B%0A%20%20%20%20%20*%20%20%20if%20(model.index%20%3C%2010)%20%7B%0A%20%20%20%20%20*%20%20%20%20%20model.set('item.checked'%2C%20true)%3B%0A%20%20%20%20%20*%20%20%20%7D%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7B!HTMLElement%7D%20el%20Element%20for%20which%20to%20return%20a%20template%20model.%0A%20%20%20%20%20*%20%40return%20%7BTemplateInstanceBase%7D%20Model%20representing%20the%20binding%20scope%20for%0A%20%20%20%20%20*%20%20%20the%20element.%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'modelForElement'%2Cvalue%3Afunction%20modelForElement(el)%7Breturn%20Polymer.Templatize.modelForElement(this.template%2Cel)%3B%7D%7D%5D)%3Breturn%20DomRepeat%3B%7D(domRepeatBase)%3BcustomElements.define(DomRepeat.is%2CDomRepeat)%3B%2F**%20%40const%20*%2FPolymer.DomRepeat%3DDomRepeat%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Felements%2Fdom-repeat.html.js%0A",
            "totalBytes": 25690,
            "wastedBytes": 14164,
            "wastedPercent": 55.13429349941612
          },
          {
            "url": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3B%2F%2F%20detect%20native%20touch%20action%20support%0Avar%20HAS_NATIVE_TA%3Dtypeof%20document.head.style.touchAction%3D%3D%3D'string'%3Bvar%20GESTURE_KEY%3D'__polymerGestures'%3Bvar%20HANDLED_OBJ%3D'__polymerGesturesHandled'%3Bvar%20TOUCH_ACTION%3D'__polymerGesturesTouchAction'%3B%2F%2F%20radius%20for%20tap%20and%20track%0Avar%20TAP_DISTANCE%3D25%3Bvar%20TRACK_DISTANCE%3D5%3B%2F%2F%20number%20of%20last%20N%20track%20positions%20to%20keep%0Avar%20TRACK_LENGTH%3D2%3B%2F%2F%20Disabling%20%22mouse%22%20handlers%20for%202500ms%20is%20enough%0Avar%20MOUSE_TIMEOUT%3D2500%3Bvar%20MOUSE_EVENTS%3D%5B'mousedown'%2C'mousemove'%2C'mouseup'%2C'click'%5D%3B%2F%2F%20an%20array%20of%20bitmask%20values%20for%20mapping%20MouseEvent.which%20to%20MouseEvent.buttons%0Avar%20MOUSE_WHICH_TO_BUTTONS%3D%5B0%2C1%2C4%2C2%5D%3Bvar%20MOUSE_HAS_BUTTONS%3Dfunction()%7Btry%7Breturn%20new%20MouseEvent('test'%2C%7Bbuttons%3A1%7D).buttons%3D%3D%3D1%3B%7Dcatch(e)%7Breturn%20false%3B%7D%7D()%3B%2F**%0A%20%20%20*%20%40param%20%7Bstring%7D%20name%20Possible%20mouse%20event%20name%0A%20%20%20*%20%40return%20%7Bboolean%7D%20true%20if%20mouse%20event%2C%20false%20if%20not%0A%20%20%20*%2Ffunction%20isMouseEvent(name)%7Breturn%20MOUSE_EVENTS.indexOf(name)%3E-1%3B%7D%2F*%20eslint%20no-empty%3A%20%5B%22error%22%2C%20%7B%20%22allowEmptyCatch%22%3A%20true%20%7D%5D%20*%2F%2F%2F%20check%20for%20passive%20event%20listeners%0Avar%20SUPPORTS_PASSIVE%3Dfalse%3B(function()%7Btry%7Bvar%20opts%3DObject.defineProperty(%7B%7D%2C'passive'%2C%7Bget%3Afunction%20get()%7BSUPPORTS_PASSIVE%3Dtrue%3B%7D%7D)%3Bwindow.addEventListener('test'%2Cnull%2Copts)%3Bwindow.removeEventListener('test'%2Cnull%2Copts)%3B%7Dcatch(e)%7B%7D%7D)()%3B%2F**%0A%20%20%20*%20Generate%20settings%20for%20event%20listeners%2C%20dependant%20on%20%60Polymer.passiveTouchGestures%60%0A%20%20%20*%0A%20%20%20*%20%40param%20%7Bstring%7D%20eventName%20Event%20name%20to%20determine%20if%20%60%7Bpassive%7D%60%20option%20is%20needed%0A%20%20%20*%20%40return%20%7B%7Bpassive%3A%20boolean%7D%20%7C%20undefined%7D%20Options%20to%20use%20for%20addEventListener%20and%20removeEventListener%0A%20%20%20*%2Ffunction%20PASSIVE_TOUCH(eventName)%7Bif(isMouseEvent(eventName)%7C%7CeventName%3D%3D%3D'touchend')%7Breturn%3B%7Dif(HAS_NATIVE_TA%26%26SUPPORTS_PASSIVE%26%26Polymer.passiveTouchGestures)%7Breturn%7Bpassive%3Atrue%7D%3B%7Delse%7Breturn%3B%7D%7D%2F%2F%20Check%20for%20touch-only%20devices%0Avar%20IS_TOUCH_ONLY%3Dnavigator.userAgent.match(%2FiP(%3F%3A%5Boa%5Dd%7Chone)%7CAndroid%2F)%3Bvar%20GestureRecognizer%3Dfunction%20GestureRecognizer()%7B%7D%3B%2F%2F%20eslint-disable-line%20no-unused-vars%0A%2F**%20%40type%20%7Bfunction()%3A%20void%7D%20*%2FGestureRecognizer.prototype.reset%3B%2F**%20%40type%20%7Bfunction(MouseEvent)%3A%20void%20%7C%20undefined%7D%20*%2FGestureRecognizer.prototype.mousedown%3B%2F**%20%40type%20%7B(function(MouseEvent)%3A%20void%20%7C%20undefined)%7D%20*%2FGestureRecognizer.prototype.mousemove%3B%2F**%20%40type%20%7B(function(MouseEvent)%3A%20void%20%7C%20undefined)%7D%20*%2FGestureRecognizer.prototype.mouseup%3B%2F**%20%40type%20%7B(function(TouchEvent)%3A%20void%20%7C%20undefined)%7D%20*%2FGestureRecognizer.prototype.touchstart%3B%2F**%20%40type%20%7B(function(TouchEvent)%3A%20void%20%7C%20undefined)%7D%20*%2FGestureRecognizer.prototype.touchmove%3B%2F**%20%40type%20%7B(function(TouchEvent)%3A%20void%20%7C%20undefined)%7D%20*%2FGestureRecognizer.prototype.touchend%3B%2F**%20%40type%20%7B(function(MouseEvent)%3A%20void%20%7C%20undefined)%7D%20*%2FGestureRecognizer.prototype.click%3B%2F%2F%20keep%20track%20of%20any%20labels%20hit%20by%20the%20mouseCanceller%0A%2F**%20%40type%20%7B!Array%3C!HTMLLabelElement%3E%7D%20*%2Fvar%20clickedLabels%3D%5B%5D%3B%2F**%20%40type%20%7B!Object%3Cboolean%3E%7D%20*%2Fvar%20labellable%3D%7B'button'%3Atrue%2C'input'%3Atrue%2C'keygen'%3Atrue%2C'meter'%3Atrue%2C'output'%3Atrue%2C'textarea'%3Atrue%2C'progress'%3Atrue%2C'select'%3Atrue%7D%3B%2F%2F%20Defined%20at%20https%3A%2F%2Fhtml.spec.whatwg.org%2Fmultipage%2Fform-control-infrastructure.html%23enabling-and-disabling-form-controls%3A-the-disabled-attribute%0A%2F**%20%40type%20%7B!Object%3Cboolean%3E%7D%20*%2Fvar%20canBeDisabled%3D%7B'button'%3Atrue%2C'command'%3Atrue%2C'fieldset'%3Atrue%2C'input'%3Atrue%2C'keygen'%3Atrue%2C'optgroup'%3Atrue%2C'option'%3Atrue%2C'select'%3Atrue%2C'textarea'%3Atrue%7D%3B%2F**%0A%20%20%20*%20%40param%20%7BHTMLElement%7D%20el%20Element%20to%20check%20labelling%20status%0A%20%20%20*%20%40return%20%7Bboolean%7D%20element%20can%20have%20labels%0A%20%20%20*%2Ffunction%20canBeLabelled(el)%7Breturn%20labellable%5Bel.localName%5D%7C%7Cfalse%3B%7D%2F**%0A%20%20%20*%20%40param%20%7BHTMLElement%7D%20el%20Element%20that%20may%20be%20labelled.%0A%20%20%20*%20%40return%20%7B!Array%3C!HTMLLabelElement%3E%7D%20Relevant%20label%20for%20%60el%60%0A%20%20%20*%2Ffunction%20matchingLabels(el)%7Bvar%20labels%3DArray.from(%2F**%20%40type%20%7BHTMLInputElement%7D%20*%2Fel.labels%7C%7C%5B%5D)%3B%2F%2F%20IE%20doesn't%20have%20%60labels%60%20and%20Safari%20doesn't%20populate%20%60labels%60%0A%2F%2F%20if%20element%20is%20in%20a%20shadowroot.%0A%2F%2F%20In%20this%20instance%2C%20finding%20the%20non-ancestor%20labels%20is%20enough%2C%0A%2F%2F%20as%20the%20mouseCancellor%20code%20will%20handle%20ancstor%20labels%0Aif(!labels.length)%7Blabels%3D%5B%5D%3Bvar%20root%3Del.getRootNode()%3B%2F%2F%20if%20there%20is%20an%20id%20on%20%60el%60%2C%20check%20for%20all%20labels%20with%20a%20matching%20%60for%60%20attribute%0Aif(el.id)%7Bvar%20matching%3Droot.querySelectorAll('label%5Bfor%20%3D%20'%2Bel.id%2B'%5D')%3Bfor(var%20i%3D0%3Bi%3Cmatching.length%3Bi%2B%2B)%7Blabels.push(%2F**%20%40type%20%7B!HTMLLabelElement%7D%20*%2Fmatching%5Bi%5D)%3B%7D%7D%7Dreturn%20labels%3B%7D%2F%2F%20touch%20will%20make%20synthetic%20mouse%20events%0A%2F%2F%20%60preventDefault%60%20on%20touchend%20will%20cancel%20them%2C%0A%2F%2F%20but%20this%20breaks%20%60%3Cinput%3E%60%20focus%20and%20link%20clicks%0A%2F%2F%20disable%20mouse%20handlers%20for%20MOUSE_TIMEOUT%20ms%20after%0A%2F%2F%20a%20touchend%20to%20ignore%20synthetic%20mouse%20events%0Avar%20mouseCanceller%3Dfunction%20mouseCanceller(mouseEvent)%7B%2F%2F%20Check%20for%20sourceCapabilities%2C%20used%20to%20distinguish%20synthetic%20events%0A%2F%2F%20if%20mouseEvent%20did%20not%20come%20from%20a%20device%20that%20fires%20touch%20events%2C%0A%2F%2F%20it%20was%20made%20by%20a%20real%20mouse%20and%20should%20be%20counted%0A%2F%2F%20http%3A%2F%2Fwicg.github.io%2FInputDeviceCapabilities%2F%23dom-inputdevicecapabilities-firestouchevents%0Avar%20sc%3DmouseEvent.sourceCapabilities%3Bif(sc%26%26!sc.firesTouchEvents)%7Breturn%3B%7D%2F%2F%20skip%20synthetic%20mouse%20events%0AmouseEvent%5BHANDLED_OBJ%5D%3D%7Bskip%3Atrue%7D%3B%2F%2F%20disable%20%22ghost%20clicks%22%0Aif(mouseEvent.type%3D%3D%3D'click')%7Bvar%20clickFromLabel%3Dfalse%3Bvar%20path%3DmouseEvent.composedPath%26%26mouseEvent.composedPath()%3Bif(path)%7Bfor(var%20i%3D0%3Bi%3Cpath.length%3Bi%2B%2B)%7Bif(path%5Bi%5D.nodeType%3D%3D%3DNode.ELEMENT_NODE)%7Bif(path%5Bi%5D.localName%3D%3D%3D'label')%7BclickedLabels.push(path%5Bi%5D)%3B%7Delse%20if(canBeLabelled(path%5Bi%5D))%7Bvar%20ownerLabels%3DmatchingLabels(path%5Bi%5D)%3B%2F%2F%20check%20if%20one%20of%20the%20clicked%20labels%20is%20labelling%20this%20element%0Afor(var%20j%3D0%3Bj%3CownerLabels.length%3Bj%2B%2B)%7BclickFromLabel%3DclickFromLabel%7C%7CclickedLabels.indexOf(ownerLabels%5Bj%5D)%3E-1%3B%7D%7D%7Dif(path%5Bi%5D%3D%3D%3DPOINTERSTATE.mouse.target)%7Breturn%3B%7D%7D%7D%2F%2F%20if%20one%20of%20the%20clicked%20labels%20was%20labelling%20the%20target%20element%2C%0A%2F%2F%20this%20is%20not%20a%20ghost%20click%0Aif(clickFromLabel)%7Breturn%3B%7DmouseEvent.preventDefault()%3BmouseEvent.stopPropagation()%3B%7D%7D%3B%2F**%0A%20%20%20*%20%40param%20%7Bboolean%3D%7D%20setup%20True%20to%20add%2C%20false%20to%20remove.%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%2Ffunction%20setupTeardownMouseCanceller(setup)%7Bvar%20events%3DIS_TOUCH_ONLY%3F%5B'click'%5D%3AMOUSE_EVENTS%3Bfor(var%20i%3D0%2Cen%3Bi%3Cevents.length%3Bi%2B%2B)%7Ben%3Devents%5Bi%5D%3Bif(setup)%7B%2F%2F%20reset%20clickLabels%20array%0AclickedLabels.length%3D0%3Bdocument.addEventListener(en%2CmouseCanceller%2Ctrue)%3B%7Delse%7Bdocument.removeEventListener(en%2CmouseCanceller%2Ctrue)%3B%7D%7D%7Dfunction%20ignoreMouse(e)%7Bif(!POINTERSTATE.mouse.mouseIgnoreJob)%7BsetupTeardownMouseCanceller(true)%3B%7Dvar%20unset%3Dfunction%20unset()%7BsetupTeardownMouseCanceller()%3BPOINTERSTATE.mouse.target%3Dnull%3BPOINTERSTATE.mouse.mouseIgnoreJob%3Dnull%3B%7D%3BPOINTERSTATE.mouse.target%3De.composedPath()%5B0%5D%3BPOINTERSTATE.mouse.mouseIgnoreJob%3DPolymer.Debouncer.debounce(POINTERSTATE.mouse.mouseIgnoreJob%2CPolymer.Async.timeOut.after(MOUSE_TIMEOUT)%2Cunset)%3B%7D%2F**%0A%20%20%20*%20%40param%20%7BMouseEvent%7D%20ev%20event%20to%20test%20for%20left%20mouse%20button%20down%0A%20%20%20*%20%40return%20%7Bboolean%7D%20has%20left%20mouse%20button%20down%0A%20%20%20*%2Ffunction%20hasLeftMouseButton(ev)%7Bvar%20type%3Dev.type%3B%2F%2F%20exit%20early%20if%20the%20event%20is%20not%20a%20mouse%20event%0Aif(!isMouseEvent(type))%7Breturn%20false%3B%7D%2F%2F%20ev.button%20is%20not%20reliable%20for%20mousemove%20(0%20is%20overloaded%20as%20both%20left%20button%20and%20no%20buttons)%0A%2F%2F%20instead%20we%20use%20ev.buttons%20(bitmask%20of%20buttons)%20or%20fall%20back%20to%20ev.which%20(deprecated%2C%200%20for%20no%20buttons%2C%201%20for%20left%20button)%0Aif(type%3D%3D%3D'mousemove')%7B%2F%2F%20allow%20undefined%20for%20testing%20events%0Avar%20buttons%3Dev.buttons%3D%3D%3Dundefined%3F1%3Aev.buttons%3Bif(ev%20instanceof%20window.MouseEvent%26%26!MOUSE_HAS_BUTTONS)%7Bbuttons%3DMOUSE_WHICH_TO_BUTTONS%5Bev.which%5D%7C%7C0%3B%7D%2F%2F%20buttons%20is%20a%20bitmask%2C%20check%20that%20the%20left%20button%20bit%20is%20set%20(1)%0Areturn%20Boolean(buttons%261)%3B%7Delse%7B%2F%2F%20allow%20undefined%20for%20testing%20events%0Avar%20button%3Dev.button%3D%3D%3Dundefined%3F0%3Aev.button%3B%2F%2F%20ev.button%20is%200%20in%20mousedown%2Fmouseup%2Fclick%20for%20left%20button%20activation%0Areturn%20button%3D%3D%3D0%3B%7D%7Dfunction%20isSyntheticClick(ev)%7Bif(ev.type%3D%3D%3D'click')%7B%2F%2F%20ev.detail%20is%200%20for%20HTMLElement.click%20in%20most%20browsers%0Aif(ev.detail%3D%3D%3D0)%7Breturn%20true%3B%7D%2F%2F%20in%20the%20worst%20case%2C%20check%20that%20the%20x%2Fy%20position%20of%20the%20click%20is%20within%0A%2F%2F%20the%20bounding%20box%20of%20the%20target%20of%20the%20event%0A%2F%2F%20Thanks%20IE%2010%20%3E%3A(%0Avar%20t%3DGestures._findOriginalTarget(ev)%3B%2F%2F%20make%20sure%20the%20target%20of%20the%20event%20is%20an%20element%20so%20we%20can%20use%20getBoundingClientRect%2C%0A%2F%2F%20if%20not%2C%20just%20assume%20it%20is%20a%20synthetic%20click%0Aif(!t.nodeType%7C%7C%2F**%20%40type%20%7BElement%7D%20*%2Ft.nodeType!%3D%3DNode.ELEMENT_NODE)%7Breturn%20true%3B%7Dvar%20bcr%3D%2F**%20%40type%20%7BElement%7D%20*%2Ft.getBoundingClientRect()%3B%2F%2F%20use%20page%20x%2Fy%20to%20account%20for%20scrolling%0Avar%20x%3Dev.pageX%2Cy%3Dev.pageY%3B%2F%2F%20ev%20is%20a%20synthetic%20click%20if%20the%20position%20is%20outside%20the%20bounding%20box%20of%20the%20target%0Areturn!(x%3E%3Dbcr.left%26%26x%3C%3Dbcr.right%26%26y%3E%3Dbcr.top%26%26y%3C%3Dbcr.bottom)%3B%7Dreturn%20false%3B%7Dvar%20POINTERSTATE%3D%7Bmouse%3A%7Btarget%3Anull%2CmouseIgnoreJob%3Anull%7D%2Ctouch%3A%7Bx%3A0%2Cy%3A0%2Cid%3A-1%2CscrollDecided%3Afalse%7D%7D%3Bfunction%20firstTouchAction(ev)%7Bvar%20ta%3D'auto'%3Bvar%20path%3Dev.composedPath%26%26ev.composedPath()%3Bif(path)%7Bfor(var%20i%3D0%2Cn%3Bi%3Cpath.length%3Bi%2B%2B)%7Bn%3Dpath%5Bi%5D%3Bif(n%5BTOUCH_ACTION%5D)%7Bta%3Dn%5BTOUCH_ACTION%5D%3Bbreak%3B%7D%7D%7Dreturn%20ta%3B%7Dfunction%20trackDocument(stateObj%2Cmovefn%2Cupfn)%7BstateObj.movefn%3Dmovefn%3BstateObj.upfn%3Dupfn%3Bdocument.addEventListener('mousemove'%2Cmovefn)%3Bdocument.addEventListener('mouseup'%2Cupfn)%3B%7Dfunction%20untrackDocument(stateObj)%7Bdocument.removeEventListener('mousemove'%2CstateObj.movefn)%3Bdocument.removeEventListener('mouseup'%2CstateObj.upfn)%3BstateObj.movefn%3Dnull%3BstateObj.upfn%3Dnull%3B%7D%2F%2F%20use%20a%20document-wide%20touchend%20listener%20to%20start%20the%20ghost-click%20prevention%20mechanism%0A%2F%2F%20Use%20passive%20event%20listeners%2C%20if%20supported%2C%20to%20not%20affect%20scrolling%20performance%0Adocument.addEventListener('touchend'%2CignoreMouse%2CSUPPORTS_PASSIVE%3F%7Bpassive%3Atrue%7D%3Afalse)%3B%2F**%0A%20%20%20*%20Module%20for%20adding%20listeners%20to%20a%20node%20for%20the%20following%20normalized%0A%20%20%20*%20cross-platform%20%22gesture%22%20events%3A%0A%20%20%20*%20-%20%60down%60%20-%20mouse%20or%20touch%20went%20down%0A%20%20%20*%20-%20%60up%60%20-%20mouse%20or%20touch%20went%20up%0A%20%20%20*%20-%20%60tap%60%20-%20mouse%20click%20or%20finger%20tap%0A%20%20%20*%20-%20%60track%60%20-%20mouse%20drag%20or%20touch%20move%0A%20%20%20*%0A%20%20%20*%20%40namespace%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Module%20for%20adding%20cross-platform%20gesture%20event%20listeners.%0A%20%20%20*%2Fvar%20Gestures%3D%7Bgestures%3A%7B%7D%2Crecognizers%3A%5B%5D%2C%2F**%0A%20%20%20%20%20*%20Finds%20the%20element%20rendered%20on%20the%20screen%20at%20the%20provided%20coordinates.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Similar%20to%20%60document.elementFromPoint%60%2C%20but%20pierces%20through%0A%20%20%20%20%20*%20shadow%20roots.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Gestures%0A%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20x%20Horizontal%20pixel%20coordinate%0A%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20y%20Vertical%20pixel%20coordinate%0A%20%20%20%20%20*%20%40return%20%7BElement%7D%20Returns%20the%20deepest%20shadowRoot%20inclusive%20element%0A%20%20%20%20%20*%20found%20at%20the%20screen%20position%20given.%0A%20%20%20%20%20*%2FdeepTargetFind%3Afunction%20deepTargetFind(x%2Cy)%7Bvar%20node%3Ddocument.elementFromPoint(x%2Cy)%3Bvar%20next%3Dnode%3B%2F%2F%20this%20code%20path%20is%20only%20taken%20when%20native%20ShadowDOM%20is%20used%0A%2F%2F%20if%20there%20is%20a%20shadowroot%2C%20it%20may%20have%20a%20node%20at%20x%2Fy%0A%2F%2F%20if%20there%20is%20not%20a%20shadowroot%2C%20exit%20the%20loop%0Awhile(next%26%26next.shadowRoot%26%26!window.ShadyDOM)%7B%2F%2F%20if%20there%20is%20a%20node%20at%20x%2Fy%20in%20the%20shadowroot%2C%20look%20deeper%0Avar%20oldNext%3Dnext%3Bnext%3Dnext.shadowRoot.elementFromPoint(x%2Cy)%3B%2F%2F%20on%20Safari%2C%20elementFromPoint%20may%20return%20the%20shadowRoot%20host%0Aif(oldNext%3D%3D%3Dnext)%7Bbreak%3B%7Dif(next)%7Bnode%3Dnext%3B%7D%7Dreturn%20node%3B%7D%2C%2F**%0A%20%20%20%20%20*%20a%20cheaper%20check%20than%20ev.composedPath()%5B0%5D%3B%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%20%40param%20%7BEvent%7D%20ev%20Event.%0A%20%20%20%20%20*%20%40return%20%7BEventTarget%7D%20Returns%20the%20event%20target.%0A%20%20%20%20%20*%2F_findOriginalTarget%3Afunction%20_findOriginalTarget(ev)%7B%2F%2F%20shadowdom%0Aif(ev.composedPath)%7Bvar%20targets%3D%2F**%20%40type%20%7B!Array%3C!EventTarget%3E%7D%20*%2Fev.composedPath()%3B%2F%2F%20It%20shouldn't%20be%2C%20but%20sometimes%20targets%20is%20empty%20(window%20on%20Safari).%0Areturn%20targets.length%3E0%3Ftargets%5B0%5D%3Aev.target%3B%7D%2F%2F%20shadydom%0Areturn%20ev.target%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%20%40param%20%7BEvent%7D%20ev%20Event.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F_handleNative%3Afunction%20_handleNative(ev)%7Bvar%20handled%3Dvoid%200%3Bvar%20type%3Dev.type%3Bvar%20node%3Dev.currentTarget%3Bvar%20gobj%3Dnode%5BGESTURE_KEY%5D%3Bif(!gobj)%7Breturn%3B%7Dvar%20gs%3Dgobj%5Btype%5D%3Bif(!gs)%7Breturn%3B%7Dif(!ev%5BHANDLED_OBJ%5D)%7Bev%5BHANDLED_OBJ%5D%3D%7B%7D%3Bif(type.slice(0%2C5)%3D%3D%3D'touch')%7Bev%3D%2F**%20%40type%20%7BTouchEvent%7D%20*%2Fev%3B%2F%2F%20eslint-disable-line%20no-self-assign%0Avar%20t%3Dev.changedTouches%5B0%5D%3Bif(type%3D%3D%3D'touchstart')%7B%2F%2F%20only%20handle%20the%20first%20finger%0Aif(ev.touches.length%3D%3D%3D1)%7BPOINTERSTATE.touch.id%3Dt.identifier%3B%7D%7Dif(POINTERSTATE.touch.id!%3D%3Dt.identifier)%7Breturn%3B%7Dif(!HAS_NATIVE_TA)%7Bif(type%3D%3D%3D'touchstart'%7C%7Ctype%3D%3D%3D'touchmove')%7BGestures._handleTouchAction(ev)%3B%7D%7D%7D%7Dhandled%3Dev%5BHANDLED_OBJ%5D%3B%2F%2F%20used%20to%20ignore%20synthetic%20mouse%20events%0Aif(handled.skip)%7Breturn%3B%7D%2F%2F%20reset%20recognizer%20state%0Afor(var%20i%3D0%2Cr%3Bi%3CGestures.recognizers.length%3Bi%2B%2B)%7Br%3DGestures.recognizers%5Bi%5D%3Bif(gs%5Br.name%5D%26%26!handled%5Br.name%5D)%7Bif(r.flow%26%26r.flow.start.indexOf(ev.type)%3E-1%26%26r.reset)%7Br.reset()%3B%7D%7D%7D%2F%2F%20enforce%20gesture%20recognizer%20order%0Afor(var%20_i%3D0%2C_r%3B_i%3CGestures.recognizers.length%3B_i%2B%2B)%7B_r%3DGestures.recognizers%5B_i%5D%3Bif(gs%5B_r.name%5D%26%26!handled%5B_r.name%5D)%7Bhandled%5B_r.name%5D%3Dtrue%3B_r%5Btype%5D(ev)%3B%7D%7D%7D%2C%2F**%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%20%40param%20%7BTouchEvent%7D%20ev%20Event.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F_handleTouchAction%3Afunction%20_handleTouchAction(ev)%7Bvar%20t%3Dev.changedTouches%5B0%5D%3Bvar%20type%3Dev.type%3Bif(type%3D%3D%3D'touchstart')%7BPOINTERSTATE.touch.x%3Dt.clientX%3BPOINTERSTATE.touch.y%3Dt.clientY%3BPOINTERSTATE.touch.scrollDecided%3Dfalse%3B%7Delse%20if(type%3D%3D%3D'touchmove')%7Bif(POINTERSTATE.touch.scrollDecided)%7Breturn%3B%7DPOINTERSTATE.touch.scrollDecided%3Dtrue%3Bvar%20ta%3DfirstTouchAction(ev)%3Bvar%20prevent%3Dfalse%3Bvar%20dx%3DMath.abs(POINTERSTATE.touch.x-t.clientX)%3Bvar%20dy%3DMath.abs(POINTERSTATE.touch.y-t.clientY)%3Bif(!ev.cancelable)%7B%2F%2F%20scrolling%20is%20happening%0A%7Delse%20if(ta%3D%3D%3D'none')%7Bprevent%3Dtrue%3B%7Delse%20if(ta%3D%3D%3D'pan-x')%7Bprevent%3Ddy%3Edx%3B%7Delse%20if(ta%3D%3D%3D'pan-y')%7Bprevent%3Ddx%3Edy%3B%7Dif(prevent)%7Bev.preventDefault()%3B%7Delse%7BGestures.prevent('track')%3B%7D%7D%7D%2C%2F**%0A%20%20%20%20%20*%20Adds%20an%20event%20listener%20to%20a%20node%20for%20the%20given%20gesture%20type.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Gestures%0A%20%20%20%20%20*%20%40param%20%7B!Node%7D%20node%20Node%20to%20add%20listener%20on%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20evType%20Gesture%20type%3A%20%60down%60%2C%20%60up%60%2C%20%60track%60%2C%20or%20%60tap%60%0A%20%20%20%20%20*%20%40param%20%7B!function(!Event)%3Avoid%7D%20handler%20Event%20listener%20function%20to%20call%0A%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Returns%20true%20if%20a%20gesture%20event%20listener%20was%20added.%0A%20%20%20%20%20*%20%40this%20%7BGestures%7D%0A%20%20%20%20%20*%2FaddListener%3Afunction%20addListener(node%2CevType%2Chandler)%7Bif(this.gestures%5BevType%5D)%7Bthis._add(node%2CevType%2Chandler)%3Breturn%20true%3B%7Dreturn%20false%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Removes%20an%20event%20listener%20from%20a%20node%20for%20the%20given%20gesture%20type.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Gestures%0A%20%20%20%20%20*%20%40param%20%7B!Node%7D%20node%20Node%20to%20remove%20listener%20from%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20evType%20Gesture%20type%3A%20%60down%60%2C%20%60up%60%2C%20%60track%60%2C%20or%20%60tap%60%0A%20%20%20%20%20*%20%40param%20%7B!function(!Event)%3Avoid%7D%20handler%20Event%20listener%20function%20previously%20passed%20to%0A%20%20%20%20%20*%20%20%60addListener%60.%0A%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Returns%20true%20if%20a%20gesture%20event%20listener%20was%20removed.%0A%20%20%20%20%20*%20%40this%20%7BGestures%7D%0A%20%20%20%20%20*%2FremoveListener%3Afunction%20removeListener(node%2CevType%2Chandler)%7Bif(this.gestures%5BevType%5D)%7Bthis._remove(node%2CevType%2Chandler)%3Breturn%20true%3B%7Dreturn%20false%3B%7D%2C%2F**%0A%20%20%20%20%20*%20automate%20the%20event%20listeners%20for%20the%20native%20events%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%20%40param%20%7B!HTMLElement%7D%20node%20Node%20on%20which%20to%20add%20the%20event.%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20evType%20Event%20type%20to%20add.%0A%20%20%20%20%20*%20%40param%20%7Bfunction(!Event)%7D%20handler%20Event%20handler%20function.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40this%20%7BGestures%7D%0A%20%20%20%20%20*%2F_add%3Afunction%20_add(node%2CevType%2Chandler)%7Bvar%20recognizer%3Dthis.gestures%5BevType%5D%3Bvar%20deps%3Drecognizer.deps%3Bvar%20name%3Drecognizer.name%3Bvar%20gobj%3Dnode%5BGESTURE_KEY%5D%3Bif(!gobj)%7Bnode%5BGESTURE_KEY%5D%3Dgobj%3D%7B%7D%3B%7Dfor(var%20i%3D0%2Cdep%2Cgd%3Bi%3Cdeps.length%3Bi%2B%2B)%7Bdep%3Ddeps%5Bi%5D%3B%2F%2F%20don't%20add%20mouse%20handlers%20on%20iOS%20because%20they%20cause%20gray%20selection%20overlays%0Aif(IS_TOUCH_ONLY%26%26isMouseEvent(dep)%26%26dep!%3D%3D'click')%7Bcontinue%3B%7Dgd%3Dgobj%5Bdep%5D%3Bif(!gd)%7Bgobj%5Bdep%5D%3Dgd%3D%7B_count%3A0%7D%3B%7Dif(gd._count%3D%3D%3D0)%7Bnode.addEventListener(dep%2Cthis._handleNative%2CPASSIVE_TOUCH(dep))%3B%7Dgd%5Bname%5D%3D(gd%5Bname%5D%7C%7C0)%2B1%3Bgd._count%3D(gd._count%7C%7C0)%2B1%3B%7Dnode.addEventListener(evType%2Chandler)%3Bif(recognizer.touchAction)%7Bthis.setTouchAction(node%2Crecognizer.touchAction)%3B%7D%7D%2C%2F**%0A%20%20%20%20%20*%20automate%20event%20listener%20removal%20for%20native%20events%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%20%40param%20%7B!HTMLElement%7D%20node%20Node%20on%20which%20to%20remove%20the%20event.%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20evType%20Event%20type%20to%20remove.%0A%20%20%20%20%20*%20%40param%20%7Bfunction(Event%3F)%7D%20handler%20Event%20handler%20function.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40this%20%7BGestures%7D%0A%20%20%20%20%20*%2F_remove%3Afunction%20_remove(node%2CevType%2Chandler)%7Bvar%20recognizer%3Dthis.gestures%5BevType%5D%3Bvar%20deps%3Drecognizer.deps%3Bvar%20name%3Drecognizer.name%3Bvar%20gobj%3Dnode%5BGESTURE_KEY%5D%3Bif(gobj)%7Bfor(var%20i%3D0%2Cdep%2Cgd%3Bi%3Cdeps.length%3Bi%2B%2B)%7Bdep%3Ddeps%5Bi%5D%3Bgd%3Dgobj%5Bdep%5D%3Bif(gd%26%26gd%5Bname%5D)%7Bgd%5Bname%5D%3D(gd%5Bname%5D%7C%7C1)-1%3Bgd._count%3D(gd._count%7C%7C1)-1%3Bif(gd._count%3D%3D%3D0)%7Bnode.removeEventListener(dep%2Cthis._handleNative%2CPASSIVE_TOUCH(dep))%3B%7D%7D%7D%7Dnode.removeEventListener(evType%2Chandler)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Registers%20a%20new%20gesture%20event%20recognizer%20for%20adding%20new%20custom%0A%20%20%20%20%20*%20gesture%20event%20types.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Gestures%0A%20%20%20%20%20*%20%40param%20%7B!GestureRecognizer%7D%20recog%20Gesture%20recognizer%20descriptor%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40this%20%7BGestures%7D%0A%20%20%20%20%20*%2Fregister%3Afunction%20register(recog)%7Bthis.recognizers.push(recog)%3Bfor(var%20i%3D0%3Bi%3Crecog.emits.length%3Bi%2B%2B)%7Bthis.gestures%5Brecog.emits%5Bi%5D%5D%3Drecog%3B%7D%7D%2C%2F**%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20evName%20Event%20name.%0A%20%20%20%20%20*%20%40return%20%7BObject%7D%20Returns%20the%20gesture%20for%20the%20given%20event%20name.%0A%20%20%20%20%20*%20%40this%20%7BGestures%7D%0A%20%20%20%20%20*%2F_findRecognizerByEvent%3Afunction%20_findRecognizerByEvent(evName)%7Bfor(var%20i%3D0%2Cr%3Bi%3Cthis.recognizers.length%3Bi%2B%2B)%7Br%3Dthis.recognizers%5Bi%5D%3Bfor(var%20j%3D0%2Cn%3Bj%3Cr.emits.length%3Bj%2B%2B)%7Bn%3Dr.emits%5Bj%5D%3Bif(n%3D%3D%3DevName)%7Breturn%20r%3B%7D%7D%7Dreturn%20null%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Sets%20scrolling%20direction%20on%20node.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20This%20value%20is%20checked%20on%20first%20move%2C%20thus%20it%20should%20be%20called%20prior%20to%0A%20%20%20%20%20*%20adding%20event%20listeners.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Gestures%0A%20%20%20%20%20*%20%40param%20%7B!Element%7D%20node%20Node%20to%20set%20touch%20action%20setting%20on%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20value%20Touch%20action%20value%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2FsetTouchAction%3Afunction%20setTouchAction(node%2Cvalue)%7Bif(HAS_NATIVE_TA)%7B%2F%2F%20NOTE%3A%20add%20touchAction%20async%20so%20that%20events%20can%20be%20added%20in%0A%2F%2F%20custom%20element%20constructors.%20Otherwise%20we%20run%20afoul%20of%20custom%0A%2F%2F%20elements%20restriction%20against%20settings%20attributes%20(style)%20in%20the%0A%2F%2F%20constructor.%0APolymer.Async.microTask.run(function()%7Bnode.style.touchAction%3Dvalue%3B%7D)%3B%7Dnode%5BTOUCH_ACTION%5D%3Dvalue%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Dispatches%20an%20event%20on%20the%20%60target%60%20element%20of%20%60type%60%20with%20the%20given%0A%20%20%20%20%20*%20%60detail%60.%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%20%40param%20%7B!EventTarget%7D%20target%20The%20element%20on%20which%20to%20fire%20an%20event.%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20type%20The%20type%20of%20event%20to%20fire.%0A%20%20%20%20%20*%20%40param%20%7B!Object%3D%7D%20detail%20The%20detail%20object%20to%20populate%20on%20the%20event.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F_fire%3Afunction%20_fire(target%2Ctype%2Cdetail)%7Bvar%20ev%3Dnew%20Event(type%2C%7Bbubbles%3Atrue%2Ccancelable%3Atrue%2Ccomposed%3Atrue%7D)%3Bev.detail%3Ddetail%3Btarget.dispatchEvent(ev)%3B%2F%2F%20forward%20%60preventDefault%60%20in%20a%20clean%20way%0Aif(ev.defaultPrevented)%7Bvar%20preventer%3Ddetail.preventer%7C%7Cdetail.sourceEvent%3Bif(preventer%26%26preventer.preventDefault)%7Bpreventer.preventDefault()%3B%7D%7D%7D%2C%2F**%0A%20%20%20%20%20*%20Prevents%20the%20dispatch%20and%20default%20action%20of%20the%20given%20event%20name.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Gestures%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20evName%20Event%20name.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40this%20%7BGestures%7D%0A%20%20%20%20%20*%2Fprevent%3Afunction%20prevent(evName)%7Bvar%20recognizer%3Dthis._findRecognizerByEvent(evName)%3Bif(recognizer.info)%7Brecognizer.info.prevent%3Dtrue%3B%7D%7D%2C%2F**%0A%20%20%20%20%20*%20Reset%20the%202500ms%20timeout%20on%20processing%20mouse%20input%20after%20detecting%20touch%20input.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Touch%20inputs%20create%20synthesized%20mouse%20inputs%20anywhere%20from%200%20to%202000ms%20after%20the%20touch.%0A%20%20%20%20%20*%20This%20method%20should%20only%20be%20called%20during%20testing%20with%20simulated%20touch%20inputs.%0A%20%20%20%20%20*%20Calling%20this%20method%20in%20production%20may%20cause%20duplicate%20taps%20or%20other%20Gestures.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Gestures%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2FresetMouseCanceller%3Afunction%20resetMouseCanceller()%7Bif(POINTERSTATE.mouse.mouseIgnoreJob)%7BPOINTERSTATE.mouse.mouseIgnoreJob.flush()%3B%7D%7D%7D%3B%2F*%20eslint-disable%20valid-jsdoc%20*%2FGestures.register(%7Bname%3A'downup'%2Cdeps%3A%5B'mousedown'%2C'touchstart'%2C'touchend'%5D%2Cflow%3A%7Bstart%3A%5B'mousedown'%2C'touchstart'%5D%2Cend%3A%5B'mouseup'%2C'touchend'%5D%7D%2Cemits%3A%5B'down'%2C'up'%5D%2Cinfo%3A%7Bmovefn%3Anull%2Cupfn%3Anull%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Freset%3Afunction%20reset()%7BuntrackDocument(this.info)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7BMouseEvent%7D%20e%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Fmousedown%3Afunction%20mousedown(e)%7Bif(!hasLeftMouseButton(e))%7Breturn%3B%7Dvar%20t%3DGestures._findOriginalTarget(e)%3Bvar%20self%3Dthis%3Bvar%20movefn%3Dfunction%20movefn(e)%7Bif(!hasLeftMouseButton(e))%7Bself._fire('up'%2Ct%2Ce)%3BuntrackDocument(self.info)%3B%7D%7D%3Bvar%20upfn%3Dfunction%20upfn(e)%7Bif(hasLeftMouseButton(e))%7Bself._fire('up'%2Ct%2Ce)%3B%7DuntrackDocument(self.info)%3B%7D%3BtrackDocument(this.info%2Cmovefn%2Cupfn)%3Bthis._fire('down'%2Ct%2Ce)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7BTouchEvent%7D%20e%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Ftouchstart%3Afunction%20touchstart(e)%7Bthis._fire('down'%2CGestures._findOriginalTarget(e)%2Ce.changedTouches%5B0%5D%2Ce)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7BTouchEvent%7D%20e%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Ftouchend%3Afunction%20touchend(e)%7Bthis._fire('up'%2CGestures._findOriginalTarget(e)%2Ce.changedTouches%5B0%5D%2Ce)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20type%0A%20%20%20%20%20*%20%40param%20%7B!EventTarget%7D%20target%0A%20%20%20%20%20*%20%40param%20%7BEvent%7D%20event%0A%20%20%20%20%20*%20%40param%20%7BFunction%7D%20preventer%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F_fire%3Afunction%20_fire(type%2Ctarget%2Cevent%2Cpreventer)%7BGestures._fire(target%2Ctype%2C%7Bx%3Aevent.clientX%2Cy%3Aevent.clientY%2CsourceEvent%3Aevent%2Cpreventer%3Apreventer%2Cprevent%3Afunction%20prevent(e)%7Breturn%20Gestures.prevent(e)%3B%7D%7D)%3B%7D%7D)%3BGestures.register(%7Bname%3A'track'%2CtouchAction%3A'none'%2Cdeps%3A%5B'mousedown'%2C'touchstart'%2C'touchmove'%2C'touchend'%5D%2Cflow%3A%7Bstart%3A%5B'mousedown'%2C'touchstart'%5D%2Cend%3A%5B'mouseup'%2C'touchend'%5D%7D%2Cemits%3A%5B'track'%5D%2Cinfo%3A%7Bx%3A0%2Cy%3A0%2Cstate%3A'start'%2Cstarted%3Afalse%2Cmoves%3A%5B%5D%2C%2F**%20%40this%20%7BGestureRecognizer%7D%20*%2FaddMove%3Afunction%20addMove(move)%7Bif(this.moves.length%3ETRACK_LENGTH)%7Bthis.moves.shift()%3B%7Dthis.moves.push(move)%3B%7D%2Cmovefn%3Anull%2Cupfn%3Anull%2Cprevent%3Afalse%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Freset%3Afunction%20reset()%7Bthis.info.state%3D'start'%3Bthis.info.started%3Dfalse%3Bthis.info.moves%3D%5B%5D%3Bthis.info.x%3D0%3Bthis.info.y%3D0%3Bthis.info.prevent%3Dfalse%3BuntrackDocument(this.info)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20x%0A%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20y%0A%20%20%20%20%20*%20%40return%20%7Bboolean%7D%0A%20%20%20%20%20*%2FhasMovedEnough%3Afunction%20hasMovedEnough(x%2Cy)%7Bif(this.info.prevent)%7Breturn%20false%3B%7Dif(this.info.started)%7Breturn%20true%3B%7Dvar%20dx%3DMath.abs(this.info.x-x)%3Bvar%20dy%3DMath.abs(this.info.y-y)%3Breturn%20dx%3E%3DTRACK_DISTANCE%7C%7Cdy%3E%3DTRACK_DISTANCE%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7BMouseEvent%7D%20e%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Fmousedown%3Afunction%20mousedown(e)%7Bif(!hasLeftMouseButton(e))%7Breturn%3B%7Dvar%20t%3DGestures._findOriginalTarget(e)%3Bvar%20self%3Dthis%3Bvar%20movefn%3Dfunction%20movefn(e)%7Bvar%20x%3De.clientX%2Cy%3De.clientY%3Bif(self.hasMovedEnough(x%2Cy))%7B%2F%2F%20first%20move%20is%20'start'%2C%20subsequent%20moves%20are%20'move'%2C%20mouseup%20is%20'end'%0Aself.info.state%3Dself.info.started%3Fe.type%3D%3D%3D'mouseup'%3F'end'%3A'track'%3A'start'%3Bif(self.info.state%3D%3D%3D'start')%7B%2F%2F%20if%20and%20only%20if%20tracking%2C%20always%20prevent%20tap%0AGestures.prevent('tap')%3B%7Dself.info.addMove(%7Bx%3Ax%2Cy%3Ay%7D)%3Bif(!hasLeftMouseButton(e))%7B%2F%2F%20always%20_fire%20%22end%22%0Aself.info.state%3D'end'%3BuntrackDocument(self.info)%3B%7Dself._fire(t%2Ce)%3Bself.info.started%3Dtrue%3B%7D%7D%3Bvar%20upfn%3Dfunction%20upfn(e)%7Bif(self.info.started)%7Bmovefn(e)%3B%7D%2F%2F%20remove%20the%20temporary%20listeners%0AuntrackDocument(self.info)%3B%7D%3B%2F%2F%20add%20temporary%20document%20listeners%20as%20mouse%20retargets%0AtrackDocument(this.info%2Cmovefn%2Cupfn)%3Bthis.info.x%3De.clientX%3Bthis.info.y%3De.clientY%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7BTouchEvent%7D%20e%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Ftouchstart%3Afunction%20touchstart(e)%7Bvar%20ct%3De.changedTouches%5B0%5D%3Bthis.info.x%3Dct.clientX%3Bthis.info.y%3Dct.clientY%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7BTouchEvent%7D%20e%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Ftouchmove%3Afunction%20touchmove(e)%7Bvar%20t%3DGestures._findOriginalTarget(e)%3Bvar%20ct%3De.changedTouches%5B0%5D%3Bvar%20x%3Dct.clientX%2Cy%3Dct.clientY%3Bif(this.hasMovedEnough(x%2Cy))%7Bif(this.info.state%3D%3D%3D'start')%7B%2F%2F%20if%20and%20only%20if%20tracking%2C%20always%20prevent%20tap%0AGestures.prevent('tap')%3B%7Dthis.info.addMove(%7Bx%3Ax%2Cy%3Ay%7D)%3Bthis._fire(t%2Cct)%3Bthis.info.state%3D'track'%3Bthis.info.started%3Dtrue%3B%7D%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7BTouchEvent%7D%20e%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Ftouchend%3Afunction%20touchend(e)%7Bvar%20t%3DGestures._findOriginalTarget(e)%3Bvar%20ct%3De.changedTouches%5B0%5D%3B%2F%2F%20only%20trackend%20if%20track%20was%20started%20and%20not%20aborted%0Aif(this.info.started)%7B%2F%2F%20reset%20started%20state%20on%20up%0Athis.info.state%3D'end'%3Bthis.info.addMove(%7Bx%3Act.clientX%2Cy%3Act.clientY%7D)%3Bthis._fire(t%2Cct%2Ce)%3B%7D%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7B!EventTarget%7D%20target%0A%20%20%20%20%20*%20%40param%20%7BTouch%7D%20touch%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F_fire%3Afunction%20_fire(target%2Ctouch)%7Bvar%20secondlast%3Dthis.info.moves%5Bthis.info.moves.length-2%5D%3Bvar%20lastmove%3Dthis.info.moves%5Bthis.info.moves.length-1%5D%3Bvar%20dx%3Dlastmove.x-this.info.x%3Bvar%20dy%3Dlastmove.y-this.info.y%3Bvar%20ddx%3Dvoid%200%2Cddy%3D0%3Bif(secondlast)%7Bddx%3Dlastmove.x-secondlast.x%3Bddy%3Dlastmove.y-secondlast.y%3B%7DGestures._fire(target%2C'track'%2C%7Bstate%3Athis.info.state%2Cx%3Atouch.clientX%2Cy%3Atouch.clientY%2Cdx%3Adx%2Cdy%3Ady%2Cddx%3Addx%2Cddy%3Addy%2CsourceEvent%3Atouch%2Chover%3Afunction%20hover()%7Breturn%20Gestures.deepTargetFind(touch.clientX%2Ctouch.clientY)%3B%7D%7D)%3B%7D%7D)%3BGestures.register(%7Bname%3A'tap'%2Cdeps%3A%5B'mousedown'%2C'click'%2C'touchstart'%2C'touchend'%5D%2Cflow%3A%7Bstart%3A%5B'mousedown'%2C'touchstart'%5D%2Cend%3A%5B'click'%2C'touchend'%5D%7D%2Cemits%3A%5B'tap'%5D%2Cinfo%3A%7Bx%3ANaN%2Cy%3ANaN%2Cprevent%3Afalse%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Freset%3Afunction%20reset()%7Bthis.info.x%3DNaN%3Bthis.info.y%3DNaN%3Bthis.info.prevent%3Dfalse%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7BMouseEvent%7D%20e%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Fsave%3Afunction%20save(e)%7Bthis.info.x%3De.clientX%3Bthis.info.y%3De.clientY%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7BMouseEvent%7D%20e%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Fmousedown%3Afunction%20mousedown(e)%7Bif(hasLeftMouseButton(e))%7Bthis.save(e)%3B%7D%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7BMouseEvent%7D%20e%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Fclick%3Afunction%20click(e)%7Bif(hasLeftMouseButton(e))%7Bthis.forward(e)%3B%7D%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7BTouchEvent%7D%20e%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Ftouchstart%3Afunction%20touchstart(e)%7Bthis.save(e.changedTouches%5B0%5D%2Ce)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7BTouchEvent%7D%20e%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Ftouchend%3Afunction%20touchend(e)%7Bthis.forward(e.changedTouches%5B0%5D%2Ce)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7BEvent%20%7C%20Touch%7D%20e%0A%20%20%20%20%20*%20%40param%20%7BEvent%3D%7D%20preventer%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Fforward%3Afunction%20forward(e%2Cpreventer)%7Bvar%20dx%3DMath.abs(e.clientX-this.info.x)%3Bvar%20dy%3DMath.abs(e.clientY-this.info.y)%3B%2F%2F%20find%20original%20target%20from%20%60preventer%60%20for%20TouchEvents%2C%20or%20%60e%60%20for%20MouseEvents%0Avar%20t%3DGestures._findOriginalTarget(%2F**%20%40type%20%7BEvent%7D%20*%2Fpreventer%7C%7Ce)%3Bif(!t%7C%7CcanBeDisabled%5B%2F**%20%40type%20%7B!HTMLElement%7D%20*%2Ft.localName%5D%26%26t.hasAttribute('disabled'))%7Breturn%3B%7D%2F%2F%20dx%2Cdy%20can%20be%20NaN%20if%20%60click%60%20has%20been%20simulated%20and%20there%20was%20no%20%60down%60%20for%20%60start%60%0Aif(isNaN(dx)%7C%7CisNaN(dy)%7C%7Cdx%3C%3DTAP_DISTANCE%26%26dy%3C%3DTAP_DISTANCE%7C%7CisSyntheticClick(e))%7B%2F%2F%20prevent%20taps%20from%20being%20generated%20if%20an%20event%20has%20canceled%20them%0Aif(!this.info.prevent)%7BGestures._fire(t%2C'tap'%2C%7Bx%3Ae.clientX%2Cy%3Ae.clientY%2CsourceEvent%3Ae%2Cpreventer%3Apreventer%7D)%3B%7D%7D%7D%7D)%3B%2F*%20eslint-enable%20valid-jsdoc%20*%2F%2F**%20%40deprecated%20*%2FGestures.findOriginalTarget%3DGestures._findOriginalTarget%3B%2F**%20%40deprecated%20*%2FGestures.add%3DGestures.addListener%3B%2F**%20%40deprecated%20*%2FGestures.remove%3DGestures.removeListener%3BPolymer.Gestures%3DGestures%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Fgestures.html.js%0A",
            "totalBytes": 26851,
            "wastedBytes": 12769,
            "wastedPercent": 47.55502588357976
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_typeof%3Dtypeof%20Symbol%3D%3D%3D%22function%22%26%26typeof%20Symbol.iterator%3D%3D%3D%22symbol%22%3Ffunction(obj)%7Breturn%20typeof%20obj%3B%7D%3Afunction(obj)%7Breturn%20obj%26%26typeof%20Symbol%3D%3D%3D%22function%22%26%26obj.constructor%3D%3D%3DSymbol%26%26obj!%3D%3DSymbol.prototype%3F%22symbol%22%3Atypeof%20obj%3B%7D%3Bvar%20_get%3Dfunction%20get(object%2Cproperty%2Creceiver)%7Bif(object%3D%3D%3Dnull)object%3DFunction.prototype%3Bvar%20desc%3DObject.getOwnPropertyDescriptor(object%2Cproperty)%3Bif(desc%3D%3D%3Dundefined)%7Bvar%20parent%3DObject.getPrototypeOf(object)%3Bif(parent%3D%3D%3Dnull)%7Breturn%20undefined%3B%7Delse%7Breturn%20get(parent%2Cproperty%2Creceiver)%3B%7D%7Delse%20if(%22value%22in%20desc)%7Breturn%20desc.value%3B%7Delse%7Bvar%20getter%3Ddesc.get%3Bif(getter%3D%3D%3Dundefined)%7Breturn%20undefined%3B%7Dreturn%20getter.call(receiver)%3B%7D%7D%3Bvar%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3B%2F**%20%40const%20%7B!AsyncInterface%7D%20*%2Fvar%20microtask%3DPolymer.Async.microTask%3B%2F**%0A%20%20%20%20%20*%20Element%20class%20mixin%20that%20provides%20basic%20meta-programming%20for%20creating%20one%0A%20%20%20%20%20*%20or%20more%20property%20accessors%20(getter%2Fsetter%20pair)%20that%20enqueue%20an%20async%0A%20%20%20%20%20*%20(batched)%20%60_propertiesChanged%60%20callback.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20For%20basic%20usage%20of%20this%20mixin%2C%20call%20%60MyClass.createProperties(props)%60%0A%20%20%20%20%20*%20once%20at%20class%20definition%20time%20to%20create%20property%20accessors%20for%20properties%0A%20%20%20%20%20*%20named%20in%20props%2C%20implement%20%60_propertiesChanged%60%20to%20react%20as%20desired%20to%0A%20%20%20%20%20*%20property%20changes%2C%20and%20implement%20%60static%20get%20observedAttributes()%60%20and%0A%20%20%20%20%20*%20include%20lowercase%20versions%20of%20any%20property%20names%20that%20should%20be%20set%20from%0A%20%20%20%20%20*%20attributes.%20Last%2C%20call%20%60this._enableProperties()%60%20in%20the%20element's%0A%20%20%20%20%20*%20%60connectedCallback%60%20to%20enable%20the%20accessors.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40mixinFunction%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40memberof%20Polymer%0A%20%20%20%20%20*%20%40summary%20Element%20class%20mixin%20for%20reacting%20to%20property%20changes%20from%0A%20%20%20%20%20*%20%20%20generated%20property%20accessors.%0A%20%20%20%20%20*%2FPolymer.PropertiesChanged%3DPolymer.dedupingMixin(function(superClass)%7B%2F**%0A%20%20%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20%20%20*%20%40mixinClass%0A%20%20%20%20%20%20%20*%20%40extends%20%7BsuperClass%7D%0A%20%20%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertiesChanged%7D%0A%20%20%20%20%20%20%20*%20%40unrestricted%0A%20%20%20%20%20%20%20*%2Fvar%20PropertiesChanged%3Dfunction(_superClass)%7B_inherits(PropertiesChanged%2C_superClass)%3B_createClass(PropertiesChanged%2C%5B%7Bkey%3A'_createPropertyAccessor'%2C%2F%2Feslint-disable-line%20no-unused-vars%0A%2F**%0A%20%20%20%20%20%20%20%20%20*%20Creates%20a%20setter%2Fgetter%20pair%20for%20the%20named%20property%20with%20its%20own%0A%20%20%20%20%20%20%20%20%20*%20local%20storage.%20%20The%20getter%20returns%20the%20value%20in%20the%20local%20storage%2C%0A%20%20%20%20%20%20%20%20%20*%20and%20the%20setter%20calls%20%60_setProperty%60%2C%20which%20updates%20the%20local%20storage%0A%20%20%20%20%20%20%20%20%20*%20for%20the%20property%20and%20enqueues%20a%20%60_propertiesChanged%60%20callback.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20This%20method%20may%20be%20called%20on%20a%20prototype%20or%20an%20instance.%20%20Calling%0A%20%20%20%20%20%20%20%20%20*%20this%20method%20may%20overwrite%20a%20property%20value%20that%20already%20exists%20on%0A%20%20%20%20%20%20%20%20%20*%20the%20prototype%2Finstance%20by%20creating%20the%20accessor.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20the%20property%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20readOnly%20When%20true%2C%20no%20setter%20is%20created%3B%20the%0A%20%20%20%20%20%20%20%20%20*%20%20%20protected%20%60_setProperty%60%20function%20must%20be%20used%20to%20set%20the%20property%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_createPropertyAccessor(property%2CreadOnly)%7Bthis._addPropertyToAttributeMap(property)%3Bif(!this.hasOwnProperty('__dataHasAccessor'))%7Bthis.__dataHasAccessor%3DObject.assign(%7B%7D%2Cthis.__dataHasAccessor)%3B%7Dif(!this.__dataHasAccessor%5Bproperty%5D)%7Bthis.__dataHasAccessor%5Bproperty%5D%3Dtrue%3Bthis._definePropertyAccessor(property%2CreadOnly)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Adds%20the%20given%20%60property%60%20to%20a%20map%20matching%20attribute%20names%0A%20%20%20%20%20%20%20%20%20*%20to%20property%20names%2C%20using%20%60attributeNameForProperty%60.%20This%20map%20is%0A%20%20%20%20%20%20%20%20%20*%20used%20when%20deserializing%20attribute%20values%20to%20properties.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20the%20property%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_addPropertyToAttributeMap'%2Cvalue%3Afunction%20_addPropertyToAttributeMap(property)%7Bif(!this.hasOwnProperty('__dataAttributes'))%7Bthis.__dataAttributes%3DObject.assign(%7B%7D%2Cthis.__dataAttributes)%3B%7Dif(!this.__dataAttributes%5Bproperty%5D)%7Bvar%20attr%3Dthis.constructor.attributeNameForProperty(property)%3Bthis.__dataAttributes%5Battr%5D%3Dproperty%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Defines%20a%20property%20accessor%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20the%20property%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20readOnly%20When%20true%2C%20no%20setter%20is%20created%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_definePropertyAccessor'%2Cvalue%3Afunction%20_definePropertyAccessor(property%2CreadOnly)%7BObject.defineProperty(this%2Cproperty%2C%7B%2F*%20eslint-disable%20valid-jsdoc%20*%2F%2F**%20%40this%20%7BPropertiesChanged%7D%20*%2Fget%3Afunction%20get()%7Breturn%20this._getProperty(property)%3B%7D%2C%2F**%20%40this%20%7BPropertiesChanged%7D%20*%2Fset%3AreadOnly%3Ffunction()%7B%7D%3Afunction(value)%7Bthis._setProperty(property%2Cvalue)%3B%7D%2F*%20eslint-enable%20*%2F%7D)%3B%7D%7D%5D%2C%5B%7Bkey%3A'createProperties'%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20Creates%20property%20accessors%20for%20the%20given%20property%20names.%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20props%20Object%20whose%20keys%20are%20names%20of%20accessors.%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20createProperties(props)%7Bvar%20proto%3Dthis.prototype%3Bfor(var%20prop%20in%20props)%7B%2F%2F%20don't%20stomp%20an%20existing%20accessor%0Aif(!(prop%20in%20proto))%7Bproto._createPropertyAccessor(prop)%3B%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Returns%20an%20attribute%20name%20that%20corresponds%20to%20the%20given%20property.%0A%20%20%20%20%20%20%20%20%20*%20The%20attribute%20name%20is%20the%20lowercased%20property%20name.%20Override%20to%0A%20%20%20%20%20%20%20%20%20*%20customize%20this%20mapping.%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20to%20convert%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Attribute%20name%20corresponding%20to%20the%20given%20property.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'attributeNameForProperty'%2Cvalue%3Afunction%20attributeNameForProperty(property)%7Breturn%20property.toLowerCase()%3B%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Override%20point%20to%20provide%20a%20type%20to%20which%20to%20deserialize%20a%20value%20to%0A%20%20%20%20%20%20%20%20%20*%20a%20given%20property.%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20name%20Name%20of%20property%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'typeForProperty'%2Cvalue%3Afunction%20typeForProperty(name)%7B%7D%7D%5D)%3Bfunction%20PropertiesChanged()%7B_classCallCheck(this%2CPropertiesChanged)%3Bvar%20_this%3D_possibleConstructorReturn(this%2C(PropertiesChanged.__proto__%7C%7CObject.getPrototypeOf(PropertiesChanged)).call(this))%3B_this.__dataEnabled%3Dfalse%3B_this.__dataReady%3Dfalse%3B_this.__dataInvalid%3Dfalse%3B_this.__data%3D%7B%7D%3B_this.__dataPending%3Dnull%3B_this.__dataOld%3Dnull%3B_this.__dataInstanceProps%3Dnull%3B_this.__serializing%3Dfalse%3B_this._initializeProperties()%3Breturn%20_this%3B%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Lifecycle%20callback%20called%20when%20properties%20are%20enabled%20via%0A%20%20%20%20%20%20%20%20%20*%20%60_enableProperties%60.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20Users%20may%20override%20this%20function%20to%20implement%20behavior%20that%20is%0A%20%20%20%20%20%20%20%20%20*%20dependent%20on%20the%20element%20having%20its%20property%20data%20initialized%2C%20e.g.%0A%20%20%20%20%20%20%20%20%20*%20from%20defaults%20(initialized%20from%20%60constructor%60%2C%20%60_initializeProperties%60)%2C%0A%20%20%20%20%20%20%20%20%20*%20%60attributeChangedCallback%60%2C%20or%20values%20propagated%20from%20host%20e.g.%20via%0A%20%20%20%20%20%20%20%20%20*%20bindings.%20%20%60super.ready()%60%20must%20be%20called%20to%20ensure%20the%20data%20system%0A%20%20%20%20%20%20%20%20%20*%20becomes%20enabled.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20%20%20*%2F_createClass(PropertiesChanged%2C%5B%7Bkey%3A'ready'%2Cvalue%3Afunction%20ready()%7Bthis.__dataReady%3Dtrue%3Bthis._flushProperties()%3B%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Initializes%20the%20local%20storage%20for%20property%20accessors.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20Provided%20as%20an%20override%20point%20for%20performing%20any%20setup%20work%20prior%0A%20%20%20%20%20%20%20%20%20*%20to%20initializing%20the%20property%20accessor%20system.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_initializeProperties'%2Cvalue%3Afunction%20_initializeProperties()%7B%2F%2F%20Capture%20instance%20properties%3B%20these%20will%20be%20set%20into%20accessors%0A%2F%2F%20during%20first%20flush.%20Don't%20set%20them%20here%2C%20since%20we%20want%0A%2F%2F%20these%20to%20overwrite%20defaults%2Fconstructor%20assignments%0Afor(var%20p%20in%20this.__dataHasAccessor)%7Bif(this.hasOwnProperty(p))%7Bthis.__dataInstanceProps%3Dthis.__dataInstanceProps%7C%7C%7B%7D%3Bthis.__dataInstanceProps%5Bp%5D%3Dthis%5Bp%5D%3Bdelete%20this%5Bp%5D%3B%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Called%20at%20ready%20time%20with%20bag%20of%20instance%20properties%20that%20overwrote%0A%20%20%20%20%20%20%20%20%20*%20accessors%20when%20the%20element%20upgraded.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20The%20default%20implementation%20sets%20these%20properties%20back%20into%20the%0A%20%20%20%20%20%20%20%20%20*%20setter%20at%20ready%20time.%20%20This%20method%20is%20provided%20as%20an%20override%0A%20%20%20%20%20%20%20%20%20*%20point%20for%20customizing%20or%20providing%20more%20efficient%20initialization.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20property%20values%20that%20were%20overwritten%0A%20%20%20%20%20%20%20%20%20*%20%20%20when%20creating%20property%20accessors.%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_initializeInstanceProperties'%2Cvalue%3Afunction%20_initializeInstanceProperties(props)%7BObject.assign(this%2Cprops)%3B%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Updates%20the%20local%20storage%20for%20a%20property%20(via%20%60_setPendingProperty%60)%0A%20%20%20%20%20%20%20%20%20*%20and%20enqueues%20a%20%60_proeprtiesChanged%60%20callback.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20the%20property%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_setProperty'%2Cvalue%3Afunction%20_setProperty(property%2Cvalue)%7Bif(this._setPendingProperty(property%2Cvalue))%7Bthis._invalidateProperties()%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Returns%20the%20value%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20property%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7B*%7D%20Value%20for%20the%20given%20property%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_getProperty'%2Cvalue%3Afunction%20_getProperty(property)%7Breturn%20this.__data%5Bproperty%5D%3B%7D%2F*%20eslint-disable%20no-unused-vars%20*%2F%2F**%0A%20%20%20%20%20%20%20%20%20*%20Updates%20the%20local%20storage%20for%20a%20property%2C%20records%20the%20previous%20value%2C%0A%20%20%20%20%20%20%20%20%20*%20and%20adds%20it%20to%20the%20set%20of%20%22pending%20changes%22%20that%20will%20be%20passed%20to%20the%0A%20%20%20%20%20%20%20%20%20*%20%60_propertiesChanged%60%20callback.%20%20This%20method%20does%20not%20enqueue%20the%0A%20%20%20%20%20%20%20%20%20*%20%60_propertiesChanged%60%20callback.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20the%20property%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20ext%20Not%20used%20here%3B%20affordance%20for%20closure%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Returns%20true%20if%20the%20property%20changed%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_setPendingProperty'%2Cvalue%3Afunction%20_setPendingProperty(property%2Cvalue%2Cext)%7Bvar%20old%3Dthis.__data%5Bproperty%5D%3Bvar%20changed%3Dthis._shouldPropertyChange(property%2Cvalue%2Cold)%3Bif(changed)%7Bif(!this.__dataPending)%7Bthis.__dataPending%3D%7B%7D%3Bthis.__dataOld%3D%7B%7D%3B%7D%2F%2F%20Ensure%20old%20is%20captured%20from%20the%20last%20turn%0Aif(this.__dataOld%26%26!(property%20in%20this.__dataOld))%7Bthis.__dataOld%5Bproperty%5D%3Dold%3B%7Dthis.__data%5Bproperty%5D%3Dvalue%3Bthis.__dataPending%5Bproperty%5D%3Dvalue%3B%7Dreturn%20changed%3B%7D%2F*%20eslint-enable%20*%2F%2F**%0A%20%20%20%20%20%20%20%20%20*%20Marks%20the%20properties%20as%20invalid%2C%20and%20enqueues%20an%20async%0A%20%20%20%20%20%20%20%20%20*%20%60_propertiesChanged%60%20callback.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_invalidateProperties'%2Cvalue%3Afunction%20_invalidateProperties()%7Bvar%20_this2%3Dthis%3Bif(!this.__dataInvalid%26%26this.__dataReady)%7Bthis.__dataInvalid%3Dtrue%3Bmicrotask.run(function()%7Bif(_this2.__dataInvalid)%7B_this2.__dataInvalid%3Dfalse%3B_this2._flushProperties()%3B%7D%7D)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Call%20to%20enable%20property%20accessor%20processing.%20Before%20this%20method%20is%0A%20%20%20%20%20%20%20%20%20*%20called%20accessor%20values%20will%20be%20set%20but%20side%20effects%20are%0A%20%20%20%20%20%20%20%20%20*%20queued.%20When%20called%2C%20any%20pending%20side%20effects%20occur%20immediately.%0A%20%20%20%20%20%20%20%20%20*%20For%20elements%2C%20generally%20%60connectedCallback%60%20is%20a%20normal%20spot%20to%20do%20so.%0A%20%20%20%20%20%20%20%20%20*%20It%20is%20safe%20to%20call%20this%20method%20multiple%20times%20as%20it%20only%20turns%20on%0A%20%20%20%20%20%20%20%20%20*%20property%20accessors%20once.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_enableProperties'%2Cvalue%3Afunction%20_enableProperties()%7Bif(!this.__dataEnabled)%7Bthis.__dataEnabled%3Dtrue%3Bif(this.__dataInstanceProps)%7Bthis._initializeInstanceProperties(this.__dataInstanceProps)%3Bthis.__dataInstanceProps%3Dnull%3B%7Dthis.ready()%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Calls%20the%20%60_propertiesChanged%60%20callback%20with%20the%20current%20set%20of%0A%20%20%20%20%20%20%20%20%20*%20pending%20changes%20(and%20old%20values%20recorded%20when%20pending%20changes%20were%0A%20%20%20%20%20%20%20%20%20*%20set)%2C%20and%20resets%20the%20pending%20set%20of%20changes.%20Generally%2C%20this%20method%0A%20%20%20%20%20%20%20%20%20*%20should%20not%20be%20called%20in%20user%20code.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_flushProperties'%2Cvalue%3Afunction%20_flushProperties()%7Bvar%20props%3Dthis.__data%3Bvar%20changedProps%3Dthis.__dataPending%3Bvar%20old%3Dthis.__dataOld%3Bif(this._shouldPropertiesChange(props%2CchangedProps%2Cold))%7Bthis.__dataPending%3Dnull%3Bthis.__dataOld%3Dnull%3Bthis._propertiesChanged(props%2CchangedProps%2Cold)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Called%20in%20%60_flushProperties%60%20to%20determine%20if%20%60_propertiesChanged%60%0A%20%20%20%20%20%20%20%20%20*%20should%20be%20called.%20The%20default%20implementation%20returns%20true%20if%0A%20%20%20%20%20%20%20%20%20*%20properties%20are%20pending.%20Override%20to%20customize%20when%0A%20%20%20%20%20%20%20%20%20*%20%60_propertiesChanged%60%20is%20called.%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20currentProps%20Bag%20of%20all%20current%20accessor%20values%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20changedProps%20Bag%20of%20properties%20changed%20since%20the%20last%0A%20%20%20%20%20%20%20%20%20*%20%20%20call%20to%20%60_propertiesChanged%60%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20oldProps%20Bag%20of%20previous%20values%20for%20each%20property%0A%20%20%20%20%20%20%20%20%20*%20%20%20in%20%60changedProps%60%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20true%20if%20changedProps%20is%20truthy%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_shouldPropertiesChange'%2Cvalue%3Afunction%20_shouldPropertiesChange(currentProps%2CchangedProps%2ColdProps)%7B%2F%2F%20eslint-disable-line%20no-unused-vars%0Areturn%20Boolean(changedProps)%3B%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Callback%20called%20when%20any%20properties%20with%20accessors%20created%20via%0A%20%20%20%20%20%20%20%20%20*%20%60_createPropertyAccessor%60%20have%20been%20set.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20currentProps%20Bag%20of%20all%20current%20accessor%20values%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20changedProps%20Bag%20of%20properties%20changed%20since%20the%20last%0A%20%20%20%20%20%20%20%20%20*%20%20%20call%20to%20%60_propertiesChanged%60%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20oldProps%20Bag%20of%20previous%20values%20for%20each%20property%0A%20%20%20%20%20%20%20%20%20*%20%20%20in%20%60changedProps%60%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_propertiesChanged'%2Cvalue%3Afunction%20_propertiesChanged(currentProps%2CchangedProps%2ColdProps)%7B%7D%2F%2F%20eslint-disable-line%20no-unused-vars%0A%2F**%0A%20%20%20%20%20%20%20%20%20*%20Method%20called%20to%20determine%20whether%20a%20property%20value%20should%20be%0A%20%20%20%20%20%20%20%20%20*%20considered%20as%20a%20change%20and%20cause%20the%20%60_propertiesChanged%60%20callback%0A%20%20%20%20%20%20%20%20%20*%20to%20be%20enqueued.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20The%20default%20implementation%20returns%20%60true%60%20if%20a%20strict%20equality%0A%20%20%20%20%20%20%20%20%20*%20check%20fails.%20The%20method%20always%20returns%20false%20for%20%60NaN%60.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20Override%20this%20method%20to%20e.g.%20provide%20stricter%20checking%20for%0A%20%20%20%20%20%20%20%20%20*%20Objects%2FArrays%20when%20using%20immutable%20patterns.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20New%20property%20value%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20old%20Previous%20property%20value%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Whether%20the%20property%20should%20be%20considered%20a%20change%0A%20%20%20%20%20%20%20%20%20*%20%20%20and%20enqueue%20a%20%60_proeprtiesChanged%60%20callback%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_shouldPropertyChange'%2Cvalue%3Afunction%20_shouldPropertyChange(property%2Cvalue%2Cold)%7Breturn(%2F%2F%20Strict%20equality%20check%0Aold!%3D%3Dvalue%26%26(%2F%2F%20This%20ensures%20(old%3D%3DNaN%2C%20value%3D%3DNaN)%20always%20returns%20false%0Aold%3D%3D%3Dold%7C%7Cvalue%3D%3D%3Dvalue))%3B%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Implements%20native%20Custom%20Elements%20%60attributeChangedCallback%60%20to%0A%20%20%20%20%20%20%20%20%20*%20set%20an%20attribute%20value%20to%20a%20property%20via%20%60_attributeToProperty%60.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20name%20Name%20of%20attribute%20that%20changed%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20old%20Old%20attribute%20value%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20value%20New%20attribute%20value%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20namespace%20Attribute%20namespace.%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20Super%20may%20or%20may%20not%20implement%20the%20callback%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'attributeChangedCallback'%2Cvalue%3Afunction%20attributeChangedCallback(name%2Cold%2Cvalue%2Cnamespace)%7Bif(old!%3D%3Dvalue)%7Bthis._attributeToProperty(name%2Cvalue)%3B%7Dif(_get(PropertiesChanged.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertiesChanged.prototype)%2C'attributeChangedCallback'%2Cthis))%7B_get(PropertiesChanged.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertiesChanged.prototype)%2C'attributeChangedCallback'%2Cthis).call(this%2Cname%2Cold%2Cvalue%2Cnamespace)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Deserializes%20an%20attribute%20to%20its%20associated%20property.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20This%20method%20calls%20the%20%60_deserializeValue%60%20method%20to%20convert%20the%20string%20to%0A%20%20%20%20%20%20%20%20%20*%20a%20typed%20value.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20attribute%20Name%20of%20attribute%20to%20deserialize.%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20value%20of%20the%20attribute.%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B*%3D%7D%20type%20type%20to%20deserialize%20to%2C%20defaults%20to%20the%20value%0A%20%20%20%20%20%20%20%20%20*%20returned%20from%20%60typeForProperty%60%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_attributeToProperty'%2Cvalue%3Afunction%20_attributeToProperty(attribute%2Cvalue%2Ctype)%7Bif(!this.__serializing)%7Bvar%20map%3Dthis.__dataAttributes%3Bvar%20property%3Dmap%26%26map%5Battribute%5D%7C%7Cattribute%3Bthis%5Bproperty%5D%3Dthis._deserializeValue(value%2Ctype%7C%7Cthis.constructor.typeForProperty(property))%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Serializes%20a%20property%20to%20its%20associated%20attribute.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%20Closure%20can't%20figure%20out%20%60this%60%20is%20an%20element.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%20to%20reflect.%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%3D%7D%20attribute%20Attribute%20name%20to%20reflect%20to.%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B*%3D%7D%20value%20Property%20value%20to%20refect.%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_propertyToAttribute'%2Cvalue%3Afunction%20_propertyToAttribute(property%2Cattribute%2Cvalue)%7Bthis.__serializing%3Dtrue%3Bvalue%3Darguments.length%3C3%3Fthis%5Bproperty%5D%3Avalue%3Bthis._valueToNodeAttribute(%2F**%20%40type%20%7B!HTMLElement%7D%20*%2Fthis%2Cvalue%2Cattribute%7C%7Cthis.constructor.attributeNameForProperty(property))%3Bthis.__serializing%3Dfalse%3B%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Sets%20a%20typed%20value%20to%20an%20HTML%20attribute%20on%20a%20node.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20This%20method%20calls%20the%20%60_serializeValue%60%20method%20to%20convert%20the%20typed%0A%20%20%20%20%20%20%20%20%20*%20value%20to%20a%20string.%20%20If%20the%20%60_serializeValue%60%20method%20returns%20%60undefined%60%2C%0A%20%20%20%20%20%20%20%20%20*%20the%20attribute%20will%20be%20removed%20(this%20is%20the%20default%20for%20boolean%0A%20%20%20%20%20%20%20%20%20*%20type%20%60false%60).%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7BElement%7D%20node%20Element%20to%20set%20attribute%20to.%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20serialize.%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20attribute%20Attribute%20name%20to%20serialize%20to.%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_valueToNodeAttribute'%2Cvalue%3Afunction%20_valueToNodeAttribute(node%2Cvalue%2Cattribute)%7Bvar%20str%3Dthis._serializeValue(value)%3Bif(str%3D%3D%3Dundefined)%7Bnode.removeAttribute(attribute)%3B%7Delse%7Bnode.setAttribute(attribute%2Cstr)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Converts%20a%20typed%20JavaScript%20value%20to%20a%20string.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20This%20method%20is%20called%20when%20setting%20JS%20property%20values%20to%0A%20%20%20%20%20%20%20%20%20*%20HTML%20attributes.%20%20Users%20may%20override%20this%20method%20to%20provide%0A%20%20%20%20%20%20%20%20%20*%20serialization%20for%20custom%20types.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Property%20value%20to%20serialize.%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bstring%20%7C%20undefined%7D%20String%20serialized%20from%20the%20provided%0A%20%20%20%20%20%20%20%20%20*%20property%20%20value.%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_serializeValue'%2Cvalue%3Afunction%20_serializeValue(value)%7Bswitch(typeof%20value%3D%3D%3D'undefined'%3F'undefined'%3A_typeof(value))%7Bcase'boolean'%3Areturn%20value%3F''%3Aundefined%3Bdefault%3Areturn%20value!%3Dnull%3Fvalue.toString()%3Aundefined%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Converts%20a%20string%20to%20a%20typed%20JavaScript%20value.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20This%20method%20is%20called%20when%20reading%20HTML%20attribute%20values%20to%0A%20%20%20%20%20%20%20%20%20*%20JS%20properties.%20%20Users%20may%20override%20this%20method%20to%20provide%0A%20%20%20%20%20%20%20%20%20*%20deserialization%20for%20custom%20%60type%60s.%20Types%20for%20%60Boolean%60%2C%20%60String%60%2C%0A%20%20%20%20%20%20%20%20%20*%20and%20%60Number%60%20convert%20attributes%20to%20the%20expected%20types.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20value%20Value%20to%20deserialize.%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B*%3D%7D%20type%20Type%20to%20deserialize%20the%20string%20to.%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7B*%7D%20Typed%20value%20deserialized%20from%20the%20provided%20string.%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_deserializeValue'%2Cvalue%3Afunction%20_deserializeValue(value%2Ctype)%7Bswitch(type)%7Bcase%20Boolean%3Areturn%20value!%3D%3Dnull%3Bcase%20Number%3Areturn%20Number(value)%3Bdefault%3Areturn%20value%3B%7D%7D%7D%5D)%3Breturn%20PropertiesChanged%3B%7D(superClass)%3Breturn%20PropertiesChanged%3B%7D)%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Fmixins%2Fproperties-changed.html.js%0A",
            "totalBytes": 20501,
            "wastedBytes": 12611,
            "wastedPercent": 61.51407248426906
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3Bvar%20walker%3Ddocument.createTreeWalker(document%2CNodeFilter.SHOW_ALL%2Cnull%2Cfalse)%3B%2F%2F%201.x%20backwards-compatible%20auto-wrapper%20for%20template%20type%20extensions%0A%2F%2F%20This%20is%20a%20clear%20layering%20violation%20and%20gives%20favored-nation%20status%20to%0A%2F%2F%20dom-if%20and%20dom-repeat%20templates.%20%20This%20is%20a%20conceit%20we're%20choosing%20to%20keep%0A%2F%2F%20a.)%20to%20ease%201.x%20backwards-compatibility%20due%20to%20loss%20of%20%60is%60%2C%20and%0A%2F%2F%20b.)%20to%20maintain%20if%2Frepeat%20capability%20in%20parser-constrained%20elements%0A%2F%2F%20%20%20%20%20(e.g.%20table%2C%20select)%20in%20lieu%20of%20native%20CE%20type%20extensions%20without%0A%2F%2F%20%20%20%20%20massive%20new%20invention%20in%20this%20space%20(e.g.%20directive%20system)%0Avar%20templateExtensions%3D%7B'dom-if'%3Atrue%2C'dom-repeat'%3Atrue%7D%3Bfunction%20wrapTemplateExtension(node)%7Bvar%20is%3Dnode.getAttribute('is')%3Bif(is%26%26templateExtensions%5Bis%5D)%7Bvar%20t%3Dnode%3Bt.removeAttribute('is')%3Bnode%3Dt.ownerDocument.createElement(is)%3Bt.parentNode.replaceChild(node%2Ct)%3Bnode.appendChild(t)%3Bwhile(t.attributes.length)%7Bnode.setAttribute(t.attributes%5B0%5D.name%2Ct.attributes%5B0%5D.value)%3Bt.removeAttribute(t.attributes%5B0%5D.name)%3B%7D%7Dreturn%20node%3B%7Dfunction%20findTemplateNode(root%2CnodeInfo)%7B%2F%2F%20recursively%20ascend%20tree%20until%20we%20hit%20root%0Avar%20parent%3DnodeInfo.parentInfo%26%26findTemplateNode(root%2CnodeInfo.parentInfo)%3B%2F%2F%20unwind%20the%20stack%2C%20returning%20the%20indexed%20node%20at%20each%20level%0Aif(parent)%7B%2F%2F%20note%3A%20marginally%20faster%20than%20indexing%20via%20childNodes%0A%2F%2F%20(http%3A%2F%2Fjsperf.com%2Fchildnodes-lookup)%0Awalker.currentNode%3Dparent%3Bfor(var%20n%3Dwalker.firstChild()%2Ci%3D0%3Bn%3Bn%3Dwalker.nextSibling())%7Bif(nodeInfo.parentIndex%3D%3D%3Di%2B%2B)%7Breturn%20n%3B%7D%7D%7Delse%7Breturn%20root%3B%7D%7D%2F%2F%20construct%20%60%24%60%20map%20(from%20id%20annotations)%0Afunction%20applyIdToMap(inst%2Cmap%2Cnode%2CnodeInfo)%7Bif(nodeInfo.id)%7Bmap%5BnodeInfo.id%5D%3Dnode%3B%7D%7D%2F%2F%20install%20event%20listeners%20(from%20event%20annotations)%0Afunction%20applyEventListener(inst%2Cnode%2CnodeInfo)%7Bif(nodeInfo.events%26%26nodeInfo.events.length)%7Bfor(var%20j%3D0%2Ce%24%3DnodeInfo.events%2Ce%3Bj%3Ce%24.length%26%26(e%3De%24%5Bj%5D)%3Bj%2B%2B)%7Binst._addMethodEventListenerToNode(node%2Ce.name%2Ce.value%2Cinst)%3B%7D%7D%7D%2F%2F%20push%20configuration%20references%20at%20configure%20time%0Afunction%20applyTemplateContent(inst%2Cnode%2CnodeInfo)%7Bif(nodeInfo.templateInfo)%7Bnode._templateInfo%3DnodeInfo.templateInfo%3B%7D%7Dfunction%20createNodeEventHandler(context%2CeventName%2CmethodName)%7B%2F%2F%20Instances%20can%20optionally%20have%20a%20_methodHost%20which%20allows%20redirecting%20where%0A%2F%2F%20to%20find%20methods.%20Currently%20used%20by%20%60templatize%60.%0Acontext%3Dcontext._methodHost%7C%7Ccontext%3Bvar%20handler%3Dfunction%20handler(e)%7Bif(context%5BmethodName%5D)%7Bcontext%5BmethodName%5D(e%2Ce.detail)%3B%7Delse%7Bconsole.warn('listener%20method%20%60'%2BmethodName%2B'%60%20not%20defined')%3B%7D%7D%3Breturn%20handler%3B%7D%2F**%0A%20%20%20*%20Element%20mixin%20that%20provides%20basic%20template%20parsing%20and%20stamping%2C%20including%0A%20%20%20*%20the%20following%20template-related%20features%20for%20stamped%20templates%3A%0A%20%20%20*%0A%20%20%20*%20-%20Declarative%20event%20listeners%20(%60on-eventname%3D%22listener%22%60)%0A%20%20%20*%20-%20Map%20of%20node%20id's%20to%20stamped%20node%20instances%20(%60this.%24.id%60)%0A%20%20%20*%20-%20Nested%20template%20content%20caching%2Fremoval%20and%20re-installation%20(performance%0A%20%20%20*%20%20%20optimization)%0A%20%20%20*%0A%20%20%20*%20%40mixinFunction%0A%20%20%20*%20%40polymer%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Element%20class%20mixin%20that%20provides%20basic%20template%20parsing%20and%20stamping%0A%20%20%20*%2FPolymer.TemplateStamp%3DPolymer.dedupingMixin(function(superClass)%7B%2F**%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40mixinClass%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_TemplateStamp%7D%0A%20%20%20%20%20*%2Fvar%20TemplateStamp%3Dfunction(_superClass)%7B_inherits(TemplateStamp%2C_superClass)%3Bfunction%20TemplateStamp()%7B_classCallCheck(this%2CTemplateStamp)%3Breturn%20_possibleConstructorReturn(this%2C(TemplateStamp.__proto__%7C%7CObject.getPrototypeOf(TemplateStamp)).apply(this%2Carguments))%3B%7D_createClass(TemplateStamp%2C%5B%7Bkey%3A'_stampTemplate'%2C%2F**%0A%20%20%20%20%20%20%20*%20Clones%20the%20provided%20template%20content%20and%20returns%20a%20document%20fragment%0A%20%20%20%20%20%20%20*%20containing%20the%20cloned%20dom.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20template%20is%20parsed%20(once%20and%20memoized)%20using%20this%20library's%0A%20%20%20%20%20%20%20*%20template%20parsing%20features%2C%20and%20provides%20the%20following%20value-added%0A%20%20%20%20%20%20%20*%20features%3A%0A%20%20%20%20%20%20%20*%20*%20Adds%20declarative%20event%20listeners%20for%20%60on-event%3D%22handler%22%60%20attributes%0A%20%20%20%20%20%20%20*%20*%20Generates%20an%20%22id%20map%22%20for%20all%20nodes%20with%20id's%20under%20%60%24%60%20on%20returned%0A%20%20%20%20%20%20%20*%20%20%20document%20fragment%0A%20%20%20%20%20%20%20*%20*%20Passes%20template%20info%20including%20%60content%60%20back%20to%20templates%20as%0A%20%20%20%20%20%20%20*%20%20%20%60_templateInfo%60%20(a%20performance%20optimization%20to%20avoid%20deep%20template%0A%20%20%20%20%20%20%20*%20%20%20cloning)%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%20that%20the%20memoized%20template%20parsing%20process%20is%20destructive%20to%20the%0A%20%20%20%20%20%20%20*%20template%3A%20attributes%20for%20bindings%20and%20declarative%20event%20listeners%20are%0A%20%20%20%20%20%20%20*%20removed%20after%20being%20noted%20in%20notes%2C%20and%20any%20nested%20%60%3Ctemplate%3E.content%60%0A%20%20%20%20%20%20%20*%20is%20removed%20and%20stored%20in%20notes%20as%20well.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!HTMLTemplateElement%7D%20template%20Template%20to%20stamp%0A%20%20%20%20%20%20%20*%20%40return%20%7B!StampedTemplate%7D%20Cloned%20template%20content%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_stampTemplate(template)%7B%2F%2F%20Polyfill%20support%3A%20bootstrap%20the%20template%20if%20it%20has%20not%20already%20been%0Aif(template%26%26!template.content%26%26window.HTMLTemplateElement%26%26HTMLTemplateElement.decorate)%7BHTMLTemplateElement.decorate(template)%3B%7Dvar%20templateInfo%3Dthis.constructor._parseTemplate(template)%3Bvar%20nodeInfo%3DtemplateInfo.nodeInfoList%3Bvar%20content%3DtemplateInfo.content%7C%7Ctemplate.content%3Bvar%20dom%3D%2F**%20%40type%20%7BDocumentFragment%7D%20*%2Fdocument.importNode(content%2Ctrue)%3B%2F%2F%20NOTE%3A%20ShadyDom%20optimization%20indicating%20there%20is%20an%20insertion%20point%0Adom.__noInsertionPoint%3D!templateInfo.hasInsertionPoint%3Bvar%20nodes%3Ddom.nodeList%3Dnew%20Array(nodeInfo.length)%3Bdom.%24%3D%7B%7D%3Bfor(var%20i%3D0%2Cl%3DnodeInfo.length%2Cinfo%3Bi%3Cl%26%26(info%3DnodeInfo%5Bi%5D)%3Bi%2B%2B)%7Bvar%20node%3Dnodes%5Bi%5D%3DfindTemplateNode(dom%2Cinfo)%3BapplyIdToMap(this%2Cdom.%24%2Cnode%2Cinfo)%3BapplyTemplateContent(this%2Cnode%2Cinfo)%3BapplyEventListener(this%2Cnode%2Cinfo)%3B%7Ddom%3D%2F**%20%40type%20%7B!StampedTemplate%7D%20*%2Fdom%3B%2F%2F%20eslint-disable-line%20no-self-assign%0Areturn%20dom%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Adds%20an%20event%20listener%20by%20method%20name%20for%20the%20event%20provided.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20generates%20a%20handler%20function%20that%20looks%20up%20the%20method%0A%20%20%20%20%20%20%20*%20name%20at%20handling%20time.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Node%7D%20node%20Node%20to%20add%20listener%20on%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20eventName%20Name%20of%20event%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20methodName%20Name%20of%20method%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%3D%7D%20context%20Context%20the%20method%20will%20be%20called%20on%20(defaults%0A%20%20%20%20%20%20%20*%20%20%20to%20%60node%60)%0A%20%20%20%20%20%20%20*%20%40return%20%7BFunction%7D%20Generated%20handler%20function%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_addMethodEventListenerToNode'%2Cvalue%3Afunction%20_addMethodEventListenerToNode(node%2CeventName%2CmethodName%2Ccontext)%7Bcontext%3Dcontext%7C%7Cnode%3Bvar%20handler%3DcreateNodeEventHandler(context%2CeventName%2CmethodName)%3Bthis._addEventListenerToNode(node%2CeventName%2Chandler)%3Breturn%20handler%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Override%20point%20for%20adding%20custom%20or%20simulated%20event%20handling.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Node%7D%20node%20Node%20to%20add%20event%20listener%20to%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20eventName%20Name%20of%20event%0A%20%20%20%20%20%20%20*%20%40param%20%7Bfunction(!Event)%3Avoid%7D%20handler%20Listener%20function%20to%20add%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_addEventListenerToNode'%2Cvalue%3Afunction%20_addEventListenerToNode(node%2CeventName%2Chandler)%7Bnode.addEventListener(eventName%2Chandler)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Override%20point%20for%20adding%20custom%20or%20simulated%20event%20handling.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Node%7D%20node%20Node%20to%20remove%20event%20listener%20from%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20eventName%20Name%20of%20event%0A%20%20%20%20%20%20%20*%20%40param%20%7Bfunction(!Event)%3Avoid%7D%20handler%20Listener%20function%20to%20remove%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_removeEventListenerFromNode'%2Cvalue%3Afunction%20_removeEventListenerFromNode(node%2CeventName%2Chandler)%7Bnode.removeEventListener(eventName%2Chandler)%3B%7D%7D%5D%2C%5B%7Bkey%3A'_parseTemplate'%2C%2F**%0A%20%20%20%20%20%20%20*%20Scans%20a%20template%20to%20produce%20template%20metadata.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Template-specific%20metadata%20are%20stored%20in%20the%20object%20returned%2C%20and%20node-%0A%20%20%20%20%20%20%20*%20specific%20metadata%20are%20stored%20in%20objects%20in%20its%20flattened%20%60nodeInfoList%60%0A%20%20%20%20%20%20%20*%20array.%20%20Only%20nodes%20in%20the%20template%20that%20were%20parsed%20as%20nodes%20of%0A%20%20%20%20%20%20%20*%20interest%20contain%20an%20object%20in%20%60nodeInfoList%60.%20%20Each%20%60nodeInfo%60%20object%0A%20%20%20%20%20%20%20*%20contains%20an%20%60index%60%20(%60childNodes%60%20index%20in%20parent)%20and%20optionally%0A%20%20%20%20%20%20%20*%20%60parent%60%2C%20which%20points%20to%20node%20info%20of%20its%20parent%20(including%20its%20index).%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20template%20metadata%20object%20returned%20from%20this%20method%20has%20the%20following%0A%20%20%20%20%20%20%20*%20structure%20(many%20fields%20optional)%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%60%60%60js%0A%20%20%20%20%20%20%20*%20%20%20%7B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%2F%2F%20Flattened%20list%20of%20node%20metadata%20(for%20nodes%20that%20generated%20metadata)%0A%20%20%20%20%20%20%20*%20%20%20%20%20nodeInfoList%3A%20%5B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%2F%2F%20%60id%60%20attribute%20for%20any%20nodes%20with%20id's%20for%20generating%20%60%24%60%20map%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20id%3A%20%7Bstring%7D%2C%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%2F%2F%20%60on-event%3D%22handler%22%60%20metadata%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20events%3A%20%5B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%20%20name%3A%20%7Bstring%7D%2C%20%20%20%2F%2F%20event%20name%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%20%20value%3A%20%7Bstring%7D%2C%20%20%2F%2F%20handler%20method%20name%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%7D%2C%20...%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%2F%2F%20Notes%20when%20the%20template%20contained%20a%20%60%3Cslot%3E%60%20for%20shady%20DOM%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%2F%2F%20optimization%20purposes%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20hasInsertionPoint%3A%20%7Bboolean%7D%2C%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%2F%2F%20For%20nested%20%60%3Ctemplate%3E%60%60%20nodes%2C%20nested%20template%20metadata%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20templateInfo%3A%20%7Bobject%7D%2C%20%2F%2F%20nested%20template%20metadata%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%2F%2F%20Metadata%20to%20allow%20efficient%20retrieval%20of%20instanced%20node%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%2F%2F%20corresponding%20to%20this%20metadata%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20parentInfo%3A%20%7Bnumber%7D%2C%20%20%20%2F%2F%20reference%20to%20parent%20nodeInfo%3E%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20parentIndex%3A%20%7Bnumber%7D%2C%20%20%2F%2F%20index%20in%20parent's%20%60childNodes%60%20collection%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20infoIndex%3A%20%7Bnumber%7D%2C%20%20%20%20%2F%2F%20index%20of%20this%20%60nodeInfo%60%20in%20%60templateInfo.nodeInfoList%60%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20...%0A%20%20%20%20%20%20%20*%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20*%20%20%20%20%20%2F%2F%20When%20true%2C%20the%20template%20had%20the%20%60strip-whitespace%60%20attribute%0A%20%20%20%20%20%20%20*%20%20%20%20%20%2F%2F%20or%20was%20nested%20in%20a%20template%20with%20that%20setting%0A%20%20%20%20%20%20%20*%20%20%20%20%20stripWhitespace%3A%20%7Bboolean%7D%2C%0A%20%20%20%20%20%20%20*%20%20%20%20%20%2F%2F%20For%20nested%20templates%2C%20nested%20template%20content%20is%20moved%20into%0A%20%20%20%20%20%20%20*%20%20%20%20%20%2F%2F%20a%20document%20fragment%20stored%20here%3B%20this%20is%20an%20optimization%20to%0A%20%20%20%20%20%20%20*%20%20%20%20%20%2F%2F%20avoid%20the%20cost%20of%20nested%20template%20cloning%0A%20%20%20%20%20%20%20*%20%20%20%20%20content%3A%20%7BDocumentFragment%7D%0A%20%20%20%20%20%20%20*%20%20%20%7D%0A%20%20%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20kicks%20off%20a%20recursive%20treewalk%20as%20follows%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20%20%20*%20%20%20%20_parseTemplate%20%3C---------------------%2B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20_parseTemplateContent%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7C%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20_parseTemplateNode%20%20%3C------------%7C--%2B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%20_parseTemplateNestedTemplate%20--%2B%20%20%7C%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%20_parseTemplateChildNodes%20---------%2B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%20_parseTemplateNodeAttributes%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%20_parseTemplateNodeAttribute%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20These%20methods%20may%20be%20overridden%20to%20add%20custom%20metadata%20about%20templates%0A%20%20%20%20%20%20%20*%20to%20either%20%60templateInfo%60%20or%20%60nodeInfo%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%20that%20this%20method%20may%20be%20destructive%20to%20the%20template%2C%20in%20that%0A%20%20%20%20%20%20%20*%20e.g.%20event%20annotations%20may%20be%20removed%20after%20being%20noted%20in%20the%0A%20%20%20%20%20%20%20*%20template%20metadata.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!HTMLTemplateElement%7D%20template%20Template%20to%20parse%0A%20%20%20%20%20%20%20*%20%40param%20%7BTemplateInfo%3D%7D%20outerTemplateInfo%20Template%20metadata%20from%20the%20outer%0A%20%20%20%20%20%20%20*%20%20%20template%2C%20for%20parsing%20nested%20templates%0A%20%20%20%20%20%20%20*%20%40return%20%7B!TemplateInfo%7D%20Parsed%20template%20metadata%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_parseTemplate(template%2CouterTemplateInfo)%7B%2F%2F%20since%20a%20template%20may%20be%20re-used%2C%20memo-ize%20metadata%0Aif(!template._templateInfo)%7Bvar%20templateInfo%3Dtemplate._templateInfo%3D%7B%7D%3BtemplateInfo.nodeInfoList%3D%5B%5D%3BtemplateInfo.stripWhiteSpace%3DPolymer.legacyOptimizations%7C%7CouterTemplateInfo%26%26outerTemplateInfo.stripWhiteSpace%7C%7Ctemplate.hasAttribute('strip-whitespace')%3Bthis._parseTemplateContent(template%2CtemplateInfo%2C%7Bparent%3Anull%7D)%3B%7Dreturn%20template._templateInfo%3B%7D%7D%2C%7Bkey%3A'_parseTemplateContent'%2Cvalue%3Afunction%20_parseTemplateContent(template%2CtemplateInfo%2CnodeInfo)%7Breturn%20this._parseTemplateNode(template.content%2CtemplateInfo%2CnodeInfo)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Parses%20template%20node%20and%20adds%20template%20and%20node%20metadata%20based%20on%0A%20%20%20%20%20%20%20*%20the%20current%20node%2C%20and%20its%20%60childNodes%60%20and%20%60attributes%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20may%20be%20overridden%20to%20add%20custom%20node%20or%20template%20specific%0A%20%20%20%20%20%20%20*%20metadata%20based%20on%20this%20node.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BNode%7D%20node%20Node%20to%20parse%0A%20%20%20%20%20%20%20*%20%40param%20%7B!TemplateInfo%7D%20templateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20%20%20%20%20*%20%40param%20%7B!NodeInfo%7D%20nodeInfo%20Node%20metadata%20for%20current%20template.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20%60true%60%20if%20the%20visited%20node%20added%20node-specific%0A%20%20%20%20%20%20%20*%20%20%20metadata%20to%20%60nodeInfo%60%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_parseTemplateNode'%2Cvalue%3Afunction%20_parseTemplateNode(node%2CtemplateInfo%2CnodeInfo)%7Bvar%20noted%3Dvoid%200%3Bvar%20element%3D%2F**%20%40type%20%7BElement%7D%20*%2Fnode%3Bif(element.localName%3D%3D'template'%26%26!element.hasAttribute('preserve-content'))%7Bnoted%3Dthis._parseTemplateNestedTemplate(element%2CtemplateInfo%2CnodeInfo)%7C%7Cnoted%3B%7Delse%20if(element.localName%3D%3D%3D'slot')%7B%2F%2F%20For%20ShadyDom%20optimization%2C%20indicating%20there%20is%20an%20insertion%20point%0AtemplateInfo.hasInsertionPoint%3Dtrue%3B%7Dwalker.currentNode%3Delement%3Bif(walker.firstChild())%7Bnoted%3Dthis._parseTemplateChildNodes(element%2CtemplateInfo%2CnodeInfo)%7C%7Cnoted%3B%7Dif(element.hasAttributes%26%26element.hasAttributes())%7Bnoted%3Dthis._parseTemplateNodeAttributes(element%2CtemplateInfo%2CnodeInfo)%7C%7Cnoted%3B%7Dreturn%20noted%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Parses%20template%20child%20nodes%20for%20the%20given%20root%20node.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20also%20wraps%20whitelisted%20legacy%20template%20extensions%0A%20%20%20%20%20%20%20*%20(%60is%3D%22dom-if%22%60%20and%20%60is%3D%22dom-repeat%22%60)%20with%20their%20equivalent%20element%0A%20%20%20%20%20%20%20*%20wrappers%2C%20collapses%20text%20nodes%2C%20and%20strips%20whitespace%20from%20the%20template%0A%20%20%20%20%20%20%20*%20if%20the%20%60templateInfo.stripWhitespace%60%20setting%20was%20provided.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BNode%7D%20root%20Root%20node%20whose%20%60childNodes%60%20will%20be%20parsed%0A%20%20%20%20%20%20%20*%20%40param%20%7B!TemplateInfo%7D%20templateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20%20%20%20%20*%20%40param%20%7B!NodeInfo%7D%20nodeInfo%20Node%20metadata%20for%20current%20template.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_parseTemplateChildNodes'%2Cvalue%3Afunction%20_parseTemplateChildNodes(root%2CtemplateInfo%2CnodeInfo)%7Bif(root.localName%3D%3D%3D'script'%7C%7Croot.localName%3D%3D%3D'style')%7Breturn%3B%7Dwalker.currentNode%3Droot%3Bfor(var%20node%3Dwalker.firstChild()%2CparentIndex%3D0%2Cnext%3Bnode%3Bnode%3Dnext)%7B%2F%2F%20Wrap%20templates%0Aif(node.localName%3D%3D'template')%7Bnode%3DwrapTemplateExtension(node)%3B%7D%2F%2F%20collapse%20adjacent%20textNodes%3A%20fixes%20an%20IE%20issue%20that%20can%20cause%0A%2F%2F%20text%20nodes%20to%20be%20inexplicably%20split%20%3D(%0A%2F%2F%20note%20that%20root.normalize()%20should%20work%20but%20does%20not%20so%20we%20do%20this%0A%2F%2F%20manually.%0Awalker.currentNode%3Dnode%3Bnext%3Dwalker.nextSibling()%3Bif(node.nodeType%3D%3D%3DNode.TEXT_NODE)%7Bvar%2F**%20Node%20*%2Fn%3Dnext%3Bwhile(n%26%26n.nodeType%3D%3D%3DNode.TEXT_NODE)%7Bnode.textContent%2B%3Dn.textContent%3Bnext%3Dwalker.nextSibling()%3Broot.removeChild(n)%3Bn%3Dnext%3B%7D%2F%2F%20optionally%20strip%20whitespace%0Aif(templateInfo.stripWhiteSpace%26%26!node.textContent.trim())%7Broot.removeChild(node)%3Bcontinue%3B%7D%7Dvar%20childInfo%3D%7BparentIndex%3AparentIndex%2CparentInfo%3AnodeInfo%7D%3Bif(this._parseTemplateNode(node%2CtemplateInfo%2CchildInfo))%7BchildInfo.infoIndex%3DtemplateInfo.nodeInfoList.push(%2F**%20%40type%20%7B!NodeInfo%7D%20*%2FchildInfo)-1%3B%7D%2F%2F%20Increment%20if%20not%20removed%0Awalker.currentNode%3Dnode%3Bif(walker.parentNode())%7BparentIndex%2B%2B%3B%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Parses%20template%20content%20for%20the%20given%20nested%20%60%3Ctemplate%3E%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Nested%20template%20info%20is%20stored%20as%20%60templateInfo%60%20in%20the%20current%20node's%0A%20%20%20%20%20%20%20*%20%60nodeInfo%60.%20%60template.content%60%20is%20removed%20and%20stored%20in%20%60templateInfo%60.%0A%20%20%20%20%20%20%20*%20It%20will%20then%20be%20the%20responsibility%20of%20the%20host%20to%20set%20it%20back%20to%20the%0A%20%20%20%20%20%20%20*%20template%20and%20for%20users%20stamping%20nested%20templates%20to%20use%20the%0A%20%20%20%20%20%20%20*%20%60_contentForTemplate%60%20method%20to%20retrieve%20the%20content%20for%20this%20template%0A%20%20%20%20%20%20%20*%20(an%20optimization%20to%20avoid%20the%20cost%20of%20cloning%20nested%20template%20content).%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BHTMLTemplateElement%7D%20node%20Node%20to%20parse%20(a%20%3Ctemplate%3E)%0A%20%20%20%20%20%20%20*%20%40param%20%7BTemplateInfo%7D%20outerTemplateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20%20%20%20%20*%20%20%20that%20includes%20the%20template%20%60node%60%0A%20%20%20%20%20%20%20*%20%40param%20%7B!NodeInfo%7D%20nodeInfo%20Node%20metadata%20for%20current%20template.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20%60true%60%20if%20the%20visited%20node%20added%20node-specific%0A%20%20%20%20%20%20%20*%20%20%20metadata%20to%20%60nodeInfo%60%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_parseTemplateNestedTemplate'%2Cvalue%3Afunction%20_parseTemplateNestedTemplate(node%2CouterTemplateInfo%2CnodeInfo)%7Bvar%20templateInfo%3Dthis._parseTemplate(node%2CouterTemplateInfo)%3Bvar%20content%3DtemplateInfo.content%3Dnode.content.ownerDocument.createDocumentFragment()%3Bcontent.appendChild(node.content)%3BnodeInfo.templateInfo%3DtemplateInfo%3Breturn%20true%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Parses%20template%20node%20attributes%20and%20adds%20node%20metadata%20to%20%60nodeInfo%60%0A%20%20%20%20%20%20%20*%20for%20nodes%20of%20interest.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BElement%7D%20node%20Node%20to%20parse%0A%20%20%20%20%20%20%20*%20%40param%20%7BTemplateInfo%7D%20templateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20%20%20%20%20*%20%40param%20%7BNodeInfo%7D%20nodeInfo%20Node%20metadata%20for%20current%20template.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20%60true%60%20if%20the%20visited%20node%20added%20node-specific%0A%20%20%20%20%20%20%20*%20%20%20metadata%20to%20%60nodeInfo%60%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_parseTemplateNodeAttributes'%2Cvalue%3Afunction%20_parseTemplateNodeAttributes(node%2CtemplateInfo%2CnodeInfo)%7B%2F%2F%20Make%20copy%20of%20original%20attribute%20list%2C%20since%20the%20order%20may%20change%0A%2F%2F%20as%20attributes%20are%20added%20and%20removed%0Avar%20noted%3Dfalse%3Bvar%20attrs%3DArray.from(node.attributes)%3Bfor(var%20i%3Dattrs.length-1%2Ca%3Ba%3Dattrs%5Bi%5D%3Bi--)%7Bnoted%3Dthis._parseTemplateNodeAttribute(node%2CtemplateInfo%2CnodeInfo%2Ca.name%2Ca.value)%7C%7Cnoted%3B%7Dreturn%20noted%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Parses%20a%20single%20template%20node%20attribute%20and%20adds%20node%20metadata%20to%0A%20%20%20%20%20%20%20*%20%60nodeInfo%60%20for%20attributes%20of%20interest.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20implementation%20adds%20metadata%20for%20%60on-event%3D%22handler%22%60%20attributes%0A%20%20%20%20%20%20%20*%20and%20%60id%60%20attributes.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BElement%7D%20node%20Node%20to%20parse%0A%20%20%20%20%20%20%20*%20%40param%20%7B!TemplateInfo%7D%20templateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20%20%20%20%20*%20%40param%20%7B!NodeInfo%7D%20nodeInfo%20Node%20metadata%20for%20current%20template.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20name%20Attribute%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20value%20Attribute%20value%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20%60true%60%20if%20the%20visited%20node%20added%20node-specific%0A%20%20%20%20%20%20%20*%20%20%20metadata%20to%20%60nodeInfo%60%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_parseTemplateNodeAttribute'%2Cvalue%3Afunction%20_parseTemplateNodeAttribute(node%2CtemplateInfo%2CnodeInfo%2Cname%2Cvalue)%7B%2F%2F%20events%20(on-*)%0Aif(name.slice(0%2C3)%3D%3D%3D'on-')%7Bnode.removeAttribute(name)%3BnodeInfo.events%3DnodeInfo.events%7C%7C%5B%5D%3BnodeInfo.events.push(%7Bname%3Aname.slice(3)%2Cvalue%3Avalue%7D)%3Breturn%20true%3B%7D%2F%2F%20static%20id%0Aelse%20if(name%3D%3D%3D'id')%7BnodeInfo.id%3Dvalue%3Breturn%20true%3B%7Dreturn%20false%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20the%20%60content%60%20document%20fragment%20for%20a%20given%20template.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20For%20nested%20templates%2C%20Polymer%20performs%20an%20optimization%20to%20cache%20nested%0A%20%20%20%20%20%20%20*%20template%20content%20to%20avoid%20the%20cost%20of%20cloning%20deeply%20nested%20templates.%0A%20%20%20%20%20%20%20*%20This%20method%20retrieves%20the%20cached%20content%20for%20a%20given%20template.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BHTMLTemplateElement%7D%20template%20Template%20to%20retrieve%20%60content%60%20for%0A%20%20%20%20%20%20%20*%20%40return%20%7BDocumentFragment%7D%20Content%20fragment%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_contentForTemplate'%2Cvalue%3Afunction%20_contentForTemplate(template)%7Bvar%20templateInfo%3D%2F**%20%40type%20%7BHTMLTemplateElementWithInfo%7D%20*%2Ftemplate._templateInfo%3Breturn%20templateInfo%26%26templateInfo.content%7C%7Ctemplate.content%3B%7D%7D%5D)%3Breturn%20TemplateStamp%3B%7D(superClass)%3Breturn%20TemplateStamp%3B%7D)%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Fmixins%2Ftemplate-stamp.html.js%0A",
            "totalBytes": 19930,
            "wastedBytes": 12190,
            "wastedPercent": 61.16407425990968
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bvar%20_get%3Dfunction%20get(object%2Cproperty%2Creceiver)%7Bif(object%3D%3D%3Dnull)object%3DFunction.prototype%3Bvar%20desc%3DObject.getOwnPropertyDescriptor(object%2Cproperty)%3Bif(desc%3D%3D%3Dundefined)%7Bvar%20parent%3DObject.getPrototypeOf(object)%3Bif(parent%3D%3D%3Dnull)%7Breturn%20undefined%3B%7Delse%7Breturn%20get(parent%2Cproperty%2Creceiver)%3B%7D%7Delse%20if(%22value%22in%20desc)%7Breturn%20desc.value%3B%7Delse%7Bvar%20getter%3Ddesc.get%3Bif(getter%3D%3D%3Dundefined)%7Breturn%20undefined%3B%7Dreturn%20getter.call(receiver)%3B%7D%7D%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3Bvar%20lifecycleProps%3D%7Battached%3Atrue%2Cdetached%3Atrue%2Cready%3Atrue%2Ccreated%3Atrue%2CbeforeRegister%3Atrue%2Cregistered%3Atrue%2CattributeChanged%3Atrue%2Clisteners%3Atrue%2ChostAttributes%3Atrue%7D%3Bvar%20excludeOnInfo%3D%7Battached%3Atrue%2Cdetached%3Atrue%2Cready%3Atrue%2Ccreated%3Atrue%2CbeforeRegister%3Atrue%2Cregistered%3Atrue%2CattributeChanged%3Atrue%2Cbehaviors%3Atrue%2C_noAccessors%3Atrue%7D%3Bvar%20excludeOnBehaviors%3DObject.assign(%7Blisteners%3Atrue%2ChostAttributes%3Atrue%2Cproperties%3Atrue%2Cobservers%3Atrue%7D%2CexcludeOnInfo)%3Bfunction%20copyProperties(source%2Ctarget%2CexcludeProps)%7Bvar%20noAccessors%3Dsource._noAccessors%3Bfor(var%20p%20in%20source)%7Bif(!(p%20in%20excludeProps))%7Bif(noAccessors)%7Btarget%5Bp%5D%3Dsource%5Bp%5D%3B%7Delse%7Bvar%20pd%3DObject.getOwnPropertyDescriptor(source%2Cp)%3Bif(pd)%7B%2F%2F%20ensure%20property%20is%20configurable%20so%20that%20a%20later%20behavior%20can%0A%2F%2F%20re-configure%20it.%0Apd.configurable%3Dtrue%3BObject.defineProperty(target%2Cp%2Cpd)%3B%7D%7D%7D%7D%7D%2F**%0A%20%20%20%20%20*%20Applies%20a%20%22legacy%22%20behavior%20or%20array%20of%20behaviors%20to%20the%20provided%20class.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Note%3A%20this%20method%20will%20automatically%20also%20apply%20the%20%60Polymer.LegacyElementMixin%60%0A%20%20%20%20%20*%20to%20ensure%20that%20any%20legacy%20behaviors%20can%20rely%20on%20legacy%20Polymer%20API%20on%0A%20%20%20%20%20*%20the%20underlying%20element.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40template%20T%0A%20%20%20%20%20*%20%40param%20%7B!Object%7C!Array%3C!Object%3E%7D%20behaviors%20Behavior%20object%20or%20array%20of%20behaviors.%0A%20%20%20%20%20*%20%40param%20%7Bfunction(new%3AT)%7D%20klass%20Element%20class.%0A%20%20%20%20%20*%20%40return%20%7Bfunction(new%3AT)%7D%20Returns%20a%20new%20Element%20class%20extended%20by%20the%0A%20%20%20%20%20*%20passed%20in%20%60behaviors%60%20and%20also%20by%20%60Polymer.LegacyElementMixin%60.%0A%20%20%20%20%20*%20%40memberof%20Polymer%0A%20%20%20%20%20*%20%40suppress%20%7BinvalidCasts%2C%20checkTypes%7D%0A%20%20%20%20%20*%2Ffunction%20mixinBehaviors(behaviors%2Cklass)%7Breturn%20GenerateClassFromInfo(%7B%7D%2CPolymer.LegacyElementMixin(klass)%2Cbehaviors)%3B%7D%2F%2F%20NOTE%3A%0A%2F%2F%201.x%0A%2F%2F%20Behaviors%20were%20mixed%20in%20*in%20reverse%20order*%20and%20de-duped%20on%20the%20fly.%0A%2F%2F%20The%20rule%20was%20that%20behavior%20properties%20were%20copied%20onto%20the%20element%0A%2F%2F%20prototype%20if%20and%20only%20if%20the%20property%20did%20not%20already%20exist.%0A%2F%2F%20Given%3A%20Polymer%7B%20behaviors%3A%20%5BA%2C%20B%2C%20C%2C%20A%2C%20B%5D%7D%2C%20property%20copy%20order%20was%3A%0A%2F%2F%20(1)%2C%20B%2C%20(2)%2C%20A%2C%20(3)%20C.%20This%20means%20prototype%20properties%20win%20over%0A%2F%2F%20B%20properties%20win%20over%20A%20win%20over%20C.%20This%20mirrors%20what%20would%20happen%0A%2F%2F%20with%20inheritance%20if%20element%20extended%20B%20extended%20A%20extended%20C.%0A%2F%2F%0A%2F%2F%20Again%20given%2C%20Polymer%7B%20behaviors%3A%20%5BA%2C%20B%2C%20C%2C%20A%2C%20B%5D%7D%2C%20the%20resulting%0A%2F%2F%20%60behaviors%60%20array%20was%20%5BC%2C%20A%2C%20B%5D.%0A%2F%2F%20Behavior%20lifecycle%20methods%20were%20called%20in%20behavior%20array%20order%0A%2F%2F%20followed%20by%20the%20element%2C%20e.g.%20(1)%20C.created%2C%20(2)%20A.created%2C%0A%2F%2F%20(3)%20B.created%2C%20(4)%20element.created.%20There%20was%20no%20support%20for%0A%2F%2F%20super%2C%20and%20%22super-behavior%22%20methods%20were%20callable%20only%20by%20name).%0A%2F%2F%0A%2F%2F%202.x%0A%2F%2F%20Behaviors%20are%20made%20into%20proper%20mixins%20which%20live%20in%20the%0A%2F%2F%20element's%20prototype%20chain.%20Behaviors%20are%20placed%20in%20the%20element%20prototype%0A%2F%2F%20eldest%20to%20youngest%20and%20de-duped%20youngest%20to%20oldest%3A%0A%2F%2F%20So%2C%20first%20%5BA%2C%20B%2C%20C%2C%20A%2C%20B%5D%20becomes%20%5BC%2C%20A%2C%20B%5D%20then%2C%0A%2F%2F%20the%20element%20prototype%20becomes%20(oldest)%20(1)%20Polymer.Element%2C%20(2)%20class(C)%2C%0A%2F%2F%20(3)%20class(A)%2C%20(4)%20class(B)%2C%20(5)%20class(Polymer(%7B...%7D)).%0A%2F%2F%20Result%3A%0A%2F%2F%20This%20means%20element%20properties%20win%20over%20B%20properties%20win%20over%20A%20win%0A%2F%2F%20over%20C.%20(same%20as%201.x)%0A%2F%2F%20If%20lifecycle%20is%20called%20(super%20then%20me)%2C%20order%20is%0A%2F%2F%20(1)%20C.created%2C%20(2)%20A.created%2C%20(3)%20B.created%2C%20(4)%20element.created%0A%2F%2F%20(again%20same%20as%201.x)%0Afunction%20applyBehaviors(proto%2Cbehaviors%2Clifecycle)%7Bfor(var%20i%3D0%3Bi%3Cbehaviors.length%3Bi%2B%2B)%7BapplyInfo(proto%2Cbehaviors%5Bi%5D%2Clifecycle%2CexcludeOnBehaviors)%3B%7D%7Dfunction%20applyInfo(proto%2Cinfo%2Clifecycle%2CexcludeProps)%7BcopyProperties(info%2Cproto%2CexcludeProps)%3Bfor(var%20p%20in%20lifecycleProps)%7Bif(info%5Bp%5D)%7Blifecycle%5Bp%5D%3Dlifecycle%5Bp%5D%7C%7C%5B%5D%3Blifecycle%5Bp%5D.push(info%5Bp%5D)%3B%7D%7D%7D%2F**%0A%20%20%20%20%20*%20%40param%20%7BArray%7D%20behaviors%20List%20of%20behaviors%20to%20flatten.%0A%20%20%20%20%20*%20%40param%20%7BArray%3D%7D%20list%20Target%20list%20to%20flatten%20behaviors%20into.%0A%20%20%20%20%20*%20%40param%20%7BArray%3D%7D%20exclude%20List%20of%20behaviors%20to%20exclude%20from%20the%20list.%0A%20%20%20%20%20*%20%40return%20%7B!Array%7D%20Returns%20the%20list%20of%20flattened%20behaviors.%0A%20%20%20%20%20*%2Ffunction%20flattenBehaviors(behaviors%2Clist%2Cexclude)%7Blist%3Dlist%7C%7C%5B%5D%3Bfor(var%20i%3Dbehaviors.length-1%3Bi%3E%3D0%3Bi--)%7Bvar%20b%3Dbehaviors%5Bi%5D%3Bif(b)%7Bif(Array.isArray(b))%7BflattenBehaviors(b%2Clist)%3B%7Delse%7B%2F%2F%20dedup%0Aif(list.indexOf(b)%3C0%26%26(!exclude%7C%7Cexclude.indexOf(b)%3C0))%7Blist.unshift(b)%3B%7D%7D%7Delse%7Bconsole.warn('behavior%20is%20null%2C%20check%20for%20missing%20or%20404%20import')%3B%7D%7Dreturn%20list%3B%7D%2F*%20Note%20about%20construction%20and%20extension%20of%20legacy%20classes.%0A%20%20%20%20%20%20%5BChanged%20in%20Q4%202018%20to%20optimize%20performance.%5D%0A%0A%20%20%20%20%20%20When%20calling%20%60Polymer%60%20or%20%60mixinBehaviors%60%2C%20the%20generated%20class%20below%20is%0A%20%20%20%20%20%20made.%20The%20list%20of%20behaviors%20was%20previously%20made%20into%20one%20generated%20class%20per%0A%20%20%20%20%20%20behavior%2C%20but%20this%20is%20no%20longer%20the%20case%20as%20behaviors%20are%20now%20called%0A%20%20%20%20%20%20manually.%20Note%2C%20there%20may%20*still*%20be%20multiple%20generated%20classes%20in%20the%0A%20%20%20%20%20%20element's%20prototype%20chain%20if%20extension%20is%20used%20with%20%60mixinBehaviors%60.%0A%0A%20%20%20%20%20%20The%20generated%20class%20is%20directly%20tied%20to%20the%20info%20object%20and%20behaviors%0A%20%20%20%20%20%20used%20to%20create%20it.%20That%20list%20of%20behaviors%20is%20filtered%20so%20it's%20only%20the%0A%20%20%20%20%20%20behaviors%20not%20active%20on%20the%20superclass.%20In%20order%20to%20call%20through%20to%20the%0A%20%20%20%20%20%20entire%20list%20of%20lifecycle%20methods%2C%20it's%20important%20to%20call%20%60super%60.%0A%0A%20%20%20%20%20%20The%20element's%20%60properties%60%20and%20%60observers%60%20are%20controlled%20via%20the%20finalization%0A%20%20%20%20%20%20mechanism%20provided%20by%20%60PropertiesMixin%60.%20%60Properties%60%20and%20%60observers%60%20are%0A%20%20%20%20%20%20collected%20by%20manually%20traversing%20the%20prototype%20chain%20and%20merging.%0A%0A%20%20%20%20%20%20To%20limit%20changes%2C%20the%20%60_registered%60%20method%20is%20called%20via%20%60_initializeProperties%60%0A%20%20%20%20%20%20and%20not%20%60_finalizeClass%60.%0A%20%20%20%20*%2F%2F**%0A%20%20%20%20%20*%20%40param%20%7B!PolymerInit%7D%20info%20Polymer%20info%20object%0A%20%20%20%20%20*%20%40param%20%7Bfunction(new%3AHTMLElement)%7D%20Base%20base%20class%20to%20extend%20with%20info%20object%0A%20%20%20%20%20*%20%40param%20%7BObject%7D%20behaviors%20behaviors%20to%20copy%20into%20the%20element%0A%20%20%20%20%20*%20%40return%20%7Bfunction(new%3AHTMLElement)%7D%20Generated%20class%0A%20%20%20%20%20*%20%40suppress%20%7BcheckTypes%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Ffunction%20GenerateClassFromInfo(info%2CBase%2Cbehaviors)%7B%2F%2F%20manages%20behavior%20and%20lifecycle%20processing%20(filled%20in%20after%20class%20definition)%0Avar%20behaviorList%3Dvoid%200%3Bvar%20lifecycle%3D%7B%7D%3B%2F**%20%40private%20*%2Fvar%20PolymerGenerated%3Dfunction(_Base)%7B_inherits(PolymerGenerated%2C_Base)%3Bfunction%20PolymerGenerated()%7B_classCallCheck(this%2CPolymerGenerated)%3Breturn%20_possibleConstructorReturn(this%2C(PolymerGenerated.__proto__%7C%7CObject.getPrototypeOf(PolymerGenerated)).apply(this%2Carguments))%3B%7D_createClass(PolymerGenerated%2C%5B%7Bkey%3A'created'%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20created()%7B_get(PolymerGenerated.prototype.__proto__%7C%7CObject.getPrototypeOf(PolymerGenerated.prototype)%2C'created'%2Cthis).call(this)%3Bvar%20list%3Dlifecycle.created%3Bif(list)%7Bfor(var%20i%3D0%3Bi%3Clist.length%3Bi%2B%2B)%7Blist%5Bi%5D.call(this)%3B%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_registered'%2Cvalue%3Afunction%20_registered()%7B%2F*%20NOTE%3A%20%60beforeRegister%60%20is%20called%20here%20for%20bc%2C%20but%20the%20behavior%0A%20%20%20%20%20%20%20%20%20%20%20%20is%20different%20than%20in%201.x.%20In%201.0%2C%20the%20method%20was%20called%20*after*%0A%20%20%20%20%20%20%20%20%20%20%20%20mixing%20prototypes%20together%20but%20*before*%20processing%20of%20meta-objects.%0A%20%20%20%20%20%20%20%20%20%20%20%20However%2C%20dynamic%20effects%20can%20still%20be%20set%20here%20and%20can%20be%20done%20either%0A%20%20%20%20%20%20%20%20%20%20%20%20in%20%60beforeRegister%60%20or%20%60registered%60.%20It%20is%20no%20longer%20possible%20to%20set%0A%20%20%20%20%20%20%20%20%20%20%20%20%60is%60%20in%20%60beforeRegister%60%20as%20you%20could%20in%201.x.%0A%20%20%20%20%20%20%20%20%20%20*%2F%2F%2F%20only%20proceed%20if%20the%20generated%20class'%20prototype%20has%20not%20been%20registered.%0Avar%20generatedProto%3DPolymerGenerated.prototype%3Bif(!generatedProto.hasOwnProperty('__hasRegisterFinished'))%7BgeneratedProto.__hasRegisterFinished%3Dtrue%3B%2F%2F%20ensure%20superclass%20is%20registered%20first.%0A_get(PolymerGenerated.prototype.__proto__%7C%7CObject.getPrototypeOf(PolymerGenerated.prototype)%2C'_registered'%2Cthis).call(this)%3B%2F%2F%20copy%20properties%20onto%20the%20generated%20class%20lazily%20if%20we're%20optimizing%2C%0Aif(Polymer.legacyOptimizations)%7BcopyPropertiesToProto(generatedProto)%3B%7D%2F%2F%20make%20sure%20legacy%20lifecycle%20is%20called%20on%20the%20*element*'s%20prototype%0A%2F%2F%20and%20not%20the%20generated%20class%20prototype%3B%20if%20the%20element%20has%20been%0A%2F%2F%20extended%2C%20these%20are%20*not*%20the%20same.%0Avar%20proto%3DObject.getPrototypeOf(this)%3Bvar%20list%3Dlifecycle.beforeRegister%3Bif(list)%7Bfor(var%20i%3D0%3Bi%3Clist.length%3Bi%2B%2B)%7Blist%5Bi%5D.call(proto)%3B%7D%7Dlist%3Dlifecycle.registered%3Bif(list)%7Bfor(var%20_i%3D0%3B_i%3Clist.length%3B_i%2B%2B)%7Blist%5B_i%5D.call(proto)%3B%7D%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_applyListeners'%2Cvalue%3Afunction%20_applyListeners()%7B_get(PolymerGenerated.prototype.__proto__%7C%7CObject.getPrototypeOf(PolymerGenerated.prototype)%2C'_applyListeners'%2Cthis).call(this)%3Bvar%20list%3Dlifecycle.listeners%3Bif(list)%7Bfor(var%20i%3D0%3Bi%3Clist.length%3Bi%2B%2B)%7Bvar%20listeners%3Dlist%5Bi%5D%3Bif(listeners)%7Bfor(var%20l%20in%20listeners)%7Bthis._addMethodEventListenerToNode(this%2Cl%2Clisteners%5Bl%5D)%3B%7D%7D%7D%7D%7D%2F%2F%20note%3A%20exception%20to%20%22super%20then%20me%22%20rule%3B%0A%2F%2F%20do%20work%20before%20calling%20super%20so%20that%20super%20attributes%0A%2F%2F%20only%20apply%20if%20not%20already%20set.%0A%2F**%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_ensureAttributes'%2Cvalue%3Afunction%20_ensureAttributes()%7Bvar%20list%3Dlifecycle.hostAttributes%3Bif(list)%7Bfor(var%20i%3Dlist.length-1%3Bi%3E%3D0%3Bi--)%7Bvar%20hostAttributes%3Dlist%5Bi%5D%3Bfor(var%20a%20in%20hostAttributes)%7Bthis._ensureAttribute(a%2ChostAttributes%5Ba%5D)%3B%7D%7D%7D_get(PolymerGenerated.prototype.__proto__%7C%7CObject.getPrototypeOf(PolymerGenerated.prototype)%2C'_ensureAttributes'%2Cthis).call(this)%3B%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'ready'%2Cvalue%3Afunction%20ready()%7B_get(PolymerGenerated.prototype.__proto__%7C%7CObject.getPrototypeOf(PolymerGenerated.prototype)%2C'ready'%2Cthis).call(this)%3Bvar%20list%3Dlifecycle.ready%3Bif(list)%7Bfor(var%20i%3D0%3Bi%3Clist.length%3Bi%2B%2B)%7Blist%5Bi%5D.call(this)%3B%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'attached'%2Cvalue%3Afunction%20attached()%7B_get(PolymerGenerated.prototype.__proto__%7C%7CObject.getPrototypeOf(PolymerGenerated.prototype)%2C'attached'%2Cthis).call(this)%3Bvar%20list%3Dlifecycle.attached%3Bif(list)%7Bfor(var%20i%3D0%3Bi%3Clist.length%3Bi%2B%2B)%7Blist%5Bi%5D.call(this)%3B%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'detached'%2Cvalue%3Afunction%20detached()%7B_get(PolymerGenerated.prototype.__proto__%7C%7CObject.getPrototypeOf(PolymerGenerated.prototype)%2C'detached'%2Cthis).call(this)%3Bvar%20list%3Dlifecycle.detached%3Bif(list)%7Bfor(var%20i%3D0%3Bi%3Clist.length%3Bi%2B%2B)%7Blist%5Bi%5D.call(this)%3B%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Implements%20native%20Custom%20Elements%20%60attributeChangedCallback%60%20to%0A%20%20%20%20%20%20%20%20%20*%20set%20an%20attribute%20value%20to%20a%20property%20via%20%60_attributeToProperty%60.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20name%20Name%20of%20attribute%20that%20changed%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20old%20Old%20attribute%20value%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20value%20New%20attribute%20value%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'attributeChanged'%2Cvalue%3Afunction%20attributeChanged(name%2Cold%2Cvalue)%7B_get(PolymerGenerated.prototype.__proto__%7C%7CObject.getPrototypeOf(PolymerGenerated.prototype)%2C'attributeChanged'%2Cthis).call(this)%3Bvar%20list%3Dlifecycle.attributeChanged%3Bif(list)%7Bfor(var%20i%3D0%3Bi%3Clist.length%3Bi%2B%2B)%7Blist%5Bi%5D.call(this%2Cname%2Cold%2Cvalue)%3B%7D%7D%7D%7D%5D%2C%5B%7Bkey%3A'_finalizeClass'%2C%2F%2F%20explicitly%20not%20calling%20super._finalizeClass%0Avalue%3Afunction%20_finalizeClass()%7B%2F%2F%20if%20calling%20via%20a%20subclass%20that%20hasn't%20been%20generated%2C%20pass%20through%20to%20super%0Aif(!this.hasOwnProperty(window.JSCompiler_renameProperty('generatedFrom'%2Cthis)))%7B_get(PolymerGenerated.__proto__%7C%7CObject.getPrototypeOf(PolymerGenerated)%2C'_finalizeClass'%2Cthis).call(this)%3B%7Delse%7B%2F%2F%20interleave%20properties%20and%20observers%20per%20behavior%20and%20%60info%60%0Aif(behaviorList)%7Bfor(var%20i%3D0%2Cb%3Bi%3CbehaviorList.length%3Bi%2B%2B)%7Bb%3DbehaviorList%5Bi%5D%3Bif(b.properties)%7Bthis.createProperties(b.properties)%3B%7Dif(b.observers)%7Bthis.createObservers(b.observers%2Cb.properties)%3B%7D%7D%7Dif(info.properties)%7Bthis.createProperties(info.properties)%3B%7Dif(info.observers)%7Bthis.createObservers(info.observers%2Cinfo.properties)%3B%7D%2F%2F%20make%20sure%20to%20prepare%20the%20element%20template%0Athis._prepareTemplate()%3B%7D%7D%7D%2C%7Bkey%3A'properties'%2Cget%3Afunction%20get()%7Bvar%20properties%3D%7B%7D%3Bif(behaviorList)%7Bfor(var%20i%3D0%3Bi%3CbehaviorList.length%3Bi%2B%2B)%7BObject.assign(properties%2CbehaviorList%5Bi%5D.properties)%3B%7D%7DObject.assign(properties%2Cinfo.properties)%3Breturn%20properties%3B%7D%7D%2C%7Bkey%3A'observers'%2Cget%3Afunction%20get()%7Bvar%20observers%3D%5B%5D%3Bif(behaviorList)%7Bfor(var%20i%3D0%2Cb%3Bi%3CbehaviorList.length%3Bi%2B%2B)%7Bb%3DbehaviorList%5Bi%5D%3Bif(b.observers)%7Bobservers%3Dobservers.concat(b.observers)%3B%7D%7D%7Dif(info.observers)%7Bobservers%3Dobservers.concat(info.observers)%3B%7Dreturn%20observers%3B%7D%7D%5D)%3Breturn%20PolymerGenerated%3B%7D(Base)%3B%2F%2F%20apply%20behaviors%2C%20note%20actual%20copying%20is%20done%20lazily%20at%20first%20instance%20creation%0Aif(behaviors)%7B%2F%2F%20NOTE%3A%20ensure%20the%20behavior%20is%20extending%20a%20class%20with%0A%2F%2F%20legacy%20element%20api.%20This%20is%20necessary%20since%20behaviors%20expect%20to%20be%20able%0A%2F%2F%20to%20access%201.x%20legacy%20api.%0Aif(!Array.isArray(behaviors))%7Bbehaviors%3D%5Bbehaviors%5D%3B%7Dvar%20superBehaviors%3DBase.prototype.behaviors%3B%2F%2F%20get%20flattened%2C%20deduped%20list%20of%20behaviors%20*not*%20already%20on%20super%20class%0AbehaviorList%3DflattenBehaviors(behaviors%2Cnull%2CsuperBehaviors)%3BPolymerGenerated.prototype.behaviors%3DsuperBehaviors%3FsuperBehaviors.concat(behaviors)%3AbehaviorList%3B%7Dvar%20copyPropertiesToProto%3Dfunction%20copyPropertiesToProto(proto)%7Bif(behaviorList)%7BapplyBehaviors(proto%2CbehaviorList%2Clifecycle)%3B%7DapplyInfo(proto%2Cinfo%2Clifecycle%2CexcludeOnInfo)%3B%7D%3B%2F%2F%20copy%20properties%20if%20we're%20not%20optimizing%0Aif(!Polymer.legacyOptimizations)%7BcopyPropertiesToProto(PolymerGenerated.prototype)%3B%7DPolymerGenerated.generatedFrom%3Dinfo%3Breturn%20PolymerGenerated%3B%7D%2F**%0A%20%20%20%20%20*%20Generates%20a%20class%20that%20extends%20%60Polymer.LegacyElement%60%20based%20on%20the%0A%20%20%20%20%20*%20provided%20info%20object.%20%20Metadata%20objects%20on%20the%20%60info%60%20object%0A%20%20%20%20%20*%20(%60properties%60%2C%20%60observers%60%2C%20%60listeners%60%2C%20%60behaviors%60%2C%20%60is%60)%20are%20used%0A%20%20%20%20%20*%20for%20Polymer's%20meta-programming%20systems%2C%20and%20any%20functions%20are%20copied%0A%20%20%20%20%20*%20to%20the%20generated%20class.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Valid%20%22metadata%22%20values%20are%20as%20follows%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%60is%60%3A%20String%20providing%20the%20tag%20name%20to%20register%20the%20element%20under.%20In%0A%20%20%20%20%20*%20addition%2C%20if%20a%20%60dom-module%60%20with%20the%20same%20id%20exists%2C%20the%20first%20template%0A%20%20%20%20%20*%20in%20that%20%60dom-module%60%20will%20be%20stamped%20into%20the%20shadow%20root%20of%20this%20element%2C%0A%20%20%20%20%20*%20with%20support%20for%20declarative%20event%20listeners%20(%60on-...%60)%2C%20Polymer%20data%0A%20%20%20%20%20*%20bindings%20(%60%5B%5B...%5D%5D%60%20and%20%60%7B%7B...%7D%7D%60)%2C%20and%20id-based%20node%20finding%20into%0A%20%20%20%20%20*%20%60this.%24%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%60properties%60%3A%20Object%20describing%20property-related%20metadata%20used%20by%20Polymer%0A%20%20%20%20%20*%20features%20(key%3A%20property%20names%2C%20value%3A%20object%20containing%20property%20metadata).%0A%20%20%20%20%20*%20Valid%20keys%20in%20per-property%20metadata%20include%3A%0A%20%20%20%20%20*%20-%20%60type%60%20(String%7CNumber%7CObject%7CArray%7C...)%3A%20Used%20by%0A%20%20%20%20%20*%20%20%20%60attributeChangedCallback%60%20to%20determine%20how%20string-based%20attributes%0A%20%20%20%20%20*%20%20%20are%20deserialized%20to%20JavaScript%20property%20values.%0A%20%20%20%20%20*%20-%20%60notify%60%20(boolean)%3A%20Causes%20a%20change%20in%20the%20property%20to%20fire%20a%0A%20%20%20%20%20*%20%20%20non-bubbling%20event%20called%20%60%3Cproperty%3E-changed%60.%20Elements%20that%20have%0A%20%20%20%20%20*%20%20%20enabled%20two-way%20binding%20to%20the%20property%20use%20this%20event%20to%20observe%20changes.%0A%20%20%20%20%20*%20-%20%60readOnly%60%20(boolean)%3A%20Creates%20a%20getter%20for%20the%20property%2C%20but%20no%20setter.%0A%20%20%20%20%20*%20%20%20To%20set%20a%20read-only%20property%2C%20use%20the%20private%20setter%20method%0A%20%20%20%20%20*%20%20%20%60_setProperty(property%2C%20value)%60.%0A%20%20%20%20%20*%20-%20%60observer%60%20(string)%3A%20Observer%20method%20name%20that%20will%20be%20called%20when%0A%20%20%20%20%20*%20%20%20the%20property%20changes.%20The%20arguments%20of%20the%20method%20are%0A%20%20%20%20%20*%20%20%20%60(value%2C%20previousValue)%60.%0A%20%20%20%20%20*%20-%20%60computed%60%20(string)%3A%20String%20describing%20method%20and%20dependent%20properties%0A%20%20%20%20%20*%20%20%20for%20computing%20the%20value%20of%20this%20property%20(e.g.%20%60'computeFoo(bar%2C%20zot)'%60).%0A%20%20%20%20%20*%20%20%20Computed%20properties%20are%20read-only%20by%20default%20and%20can%20only%20be%20changed%0A%20%20%20%20%20*%20%20%20via%20the%20return%20value%20of%20the%20computing%20method.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%60observers%60%3A%20Array%20of%20strings%20describing%20multi-property%20observer%20methods%0A%20%20%20%20%20*%20%20and%20their%20dependent%20properties%20(e.g.%20%60'observeABC(a%2C%20b%2C%20c)'%60).%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%60listeners%60%3A%20Object%20describing%20event%20listeners%20to%20be%20added%20to%20each%0A%20%20%20%20%20*%20%20instance%20of%20this%20element%20(key%3A%20event%20name%2C%20value%3A%20method%20name).%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%60behaviors%60%3A%20Array%20of%20additional%20%60info%60%20objects%20containing%20metadata%0A%20%20%20%20%20*%20and%20callbacks%20in%20the%20same%20format%20as%20the%20%60info%60%20object%20here%20which%20are%0A%20%20%20%20%20*%20merged%20into%20this%20element.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%60hostAttributes%60%3A%20Object%20listing%20attributes%20to%20be%20applied%20to%20the%20host%0A%20%20%20%20%20*%20%20once%20created%20(key%3A%20attribute%20name%2C%20value%3A%20attribute%20value).%20%20Values%0A%20%20%20%20%20*%20%20are%20serialized%20based%20on%20the%20type%20of%20the%20value.%20%20Host%20attributes%20should%0A%20%20%20%20%20*%20%20generally%20be%20limited%20to%20attributes%20such%20as%20%60tabIndex%60%20and%20%60aria-...%60.%0A%20%20%20%20%20*%20%20Attributes%20in%20%60hostAttributes%60%20are%20only%20applied%20if%20a%20user-supplied%0A%20%20%20%20%20*%20%20attribute%20is%20not%20already%20present%20(attributes%20in%20markup%20override%0A%20%20%20%20%20*%20%20%60hostAttributes%60).%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20In%20addition%2C%20the%20following%20Polymer-specific%20callbacks%20may%20be%20provided%3A%0A%20%20%20%20%20*%20-%20%60registered%60%3A%20called%20after%20first%20instance%20of%20this%20element%2C%0A%20%20%20%20%20*%20-%20%60created%60%3A%20called%20during%20%60constructor%60%0A%20%20%20%20%20*%20-%20%60attached%60%3A%20called%20during%20%60connectedCallback%60%0A%20%20%20%20%20*%20-%20%60detached%60%3A%20called%20during%20%60disconnectedCallback%60%0A%20%20%20%20%20*%20-%20%60ready%60%3A%20called%20before%20first%20%60attached%60%2C%20after%20all%20properties%20of%0A%20%20%20%20%20*%20%20%20this%20element%20have%20been%20propagated%20to%20its%20template%20and%20all%20observers%0A%20%20%20%20%20*%20%20%20have%20run%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7B!PolymerInit%7D%20info%20Object%20containing%20Polymer%20metadata%20and%20functions%0A%20%20%20%20%20*%20%20%20to%20become%20class%20methods.%0A%20%20%20%20%20*%20%40template%20T%0A%20%20%20%20%20*%20%40param%20%7Bfunction(T)%3AT%7D%20mixin%20Optional%20mixin%20to%20apply%20to%20legacy%20base%20class%0A%20%20%20%20%20*%20%20%20before%20extending%20with%20Polymer%20metaprogramming.%0A%20%20%20%20%20*%20%40return%20%7Bfunction(new%3AHTMLElement)%7D%20Generated%20class%0A%20%20%20%20%20*%20%40memberof%20Polymer%0A%20%20%20%20%20*%2FPolymer.Class%3Dfunction(info%2Cmixin)%7Bif(!info)%7Bconsole.warn('Polymer.Class%20requires%20%60info%60%20argument')%3B%7Dvar%20klass%3Dmixin%3Fmixin(Polymer.LegacyElementMixin(HTMLElement))%3APolymer.LegacyElementMixin(HTMLElement)%3Bklass%3DGenerateClassFromInfo(info%2Cklass%2Cinfo.behaviors)%3Bif(info._enableDisableUpgrade)%7Bklass%3DPolymer.DisableUpgradeMixin(klass)%3B%7D%2F%2F%20decorate%20klass%20with%20registration%20info%0Aklass.is%3Dklass.prototype.is%3Dinfo.is%3Breturn%20klass%3B%7D%3BPolymer.mixinBehaviors%3DmixinBehaviors%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Flegacy%2Fclass.html.js%0A",
            "totalBytes": 19044,
            "wastedBytes": 10593,
            "wastedPercent": 55.62381852551985
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/scripts/partner.js",
            "totalBytes": 17664,
            "wastedBytes": 7555,
            "wastedPercent": 42.77022145039232
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3B%2F**%0A%20%20%20*%20Element%20mixin%20for%20recording%20dynamic%20associations%20between%20item%20paths%20in%20a%0A%20%20%20*%20master%20%60items%60%20array%20and%20a%20%60selected%60%20array%20such%20that%20path%20changes%20to%20the%0A%20%20%20*%20master%20array%20(at%20the%20host)%20element%20or%20elsewhere%20via%20data-binding)%20are%0A%20%20%20*%20correctly%20propagated%20to%20items%20in%20the%20selected%20array%20and%20vice-versa.%0A%20%20%20*%0A%20%20%20*%20The%20%60items%60%20property%20accepts%20an%20array%20of%20user%20data%2C%20and%20via%20the%0A%20%20%20*%20%60select(item)%60%20and%20%60deselect(item)%60%20API%2C%20updates%20the%20%60selected%60%20property%0A%20%20%20*%20which%20may%20be%20bound%20to%20other%20parts%20of%20the%20application%2C%20and%20any%20changes%20to%0A%20%20%20*%20sub-fields%20of%20%60selected%60%20item(s)%20will%20be%20kept%20in%20sync%20with%20items%20in%20the%0A%20%20%20*%20%60items%60%20array.%20%20When%20%60multi%60%20is%20false%2C%20%60selected%60%20is%20a%20property%0A%20%20%20*%20representing%20the%20last%20selected%20item.%20%20When%20%60multi%60%20is%20true%2C%20%60selected%60%0A%20%20%20*%20is%20an%20array%20of%20multiply%20selected%20items.%0A%20%20%20*%0A%20%20%20*%20%40polymer%0A%20%20%20*%20%40mixinFunction%0A%20%20%20*%20%40appliesMixin%20Polymer.ElementMixin%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Element%20mixin%20for%20recording%20dynamic%20associations%20between%20item%20paths%20in%20a%0A%20%20%20*%20master%20%60items%60%20array%20and%20a%20%60selected%60%20array%0A%20%20%20*%2Fvar%20ArraySelectorMixin%3DPolymer.dedupingMixin(function(superClass)%7B%2F**%0A%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20*%20%40extends%20%7BsuperClass%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_ElementMixin%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Fvar%20elementBase%3DPolymer.ElementMixin(superClass)%3B%2F**%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40mixinClass%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_ArraySelectorMixin%7D%0A%20%20%20%20%20*%20%40unrestricted%0A%20%20%20%20%20*%2Fvar%20ArraySelectorMixin%3Dfunction(_elementBase)%7B_inherits(ArraySelectorMixin%2C_elementBase)%3B_createClass(ArraySelectorMixin%2Cnull%2C%5B%7Bkey%3A'properties'%2Cget%3Afunction%20get()%7Breturn%7B%2F**%0A%20%20%20%20%20%20%20%20%20%20%20*%20An%20array%20containing%20items%20from%20which%20selection%20will%20be%20made.%0A%20%20%20%20%20%20%20%20%20%20%20*%2Fitems%3A%7Btype%3AArray%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20%20%20*%20When%20%60true%60%2C%20multiple%20items%20may%20be%20selected%20at%20once%20(in%20this%20case%2C%0A%20%20%20%20%20%20%20%20%20%20%20*%20%60selected%60%20is%20an%20array%20of%20currently%20selected%20items).%20%20When%20%60false%60%2C%0A%20%20%20%20%20%20%20%20%20%20%20*%20only%20one%20item%20may%20be%20selected%20at%20a%20time.%0A%20%20%20%20%20%20%20%20%20%20%20*%2Fmulti%3A%7Btype%3ABoolean%2Cvalue%3Afalse%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20%20%20*%20When%20%60multi%60%20is%20true%2C%20this%20is%20an%20array%20that%20contains%20any%20selected.%0A%20%20%20%20%20%20%20%20%20%20%20*%20When%20%60multi%60%20is%20false%2C%20this%20is%20the%20currently%20selected%20item%2C%20or%20%60null%60%0A%20%20%20%20%20%20%20%20%20%20%20*%20if%20no%20item%20is%20selected.%0A%20%20%20%20%20%20%20%20%20%20%20*%20%40type%20%7B%3F(Object%7CArray%3C!Object%3E)%7D%0A%20%20%20%20%20%20%20%20%20%20%20*%2Fselected%3A%7Btype%3AObject%2Cnotify%3Atrue%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20%20%20*%20When%20%60multi%60%20is%20false%2C%20this%20is%20the%20currently%20selected%20item%2C%20or%20%60null%60%0A%20%20%20%20%20%20%20%20%20%20%20*%20if%20no%20item%20is%20selected.%0A%20%20%20%20%20%20%20%20%20%20%20*%20%40type%20%7B%3FObject%7D%0A%20%20%20%20%20%20%20%20%20%20%20*%2FselectedItem%3A%7Btype%3AObject%2Cnotify%3Atrue%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20%20%20*%20When%20%60true%60%2C%20calling%20%60select%60%20on%20an%20item%20that%20is%20already%20selected%0A%20%20%20%20%20%20%20%20%20%20%20*%20will%20deselect%20the%20item.%0A%20%20%20%20%20%20%20%20%20%20%20*%2Ftoggle%3A%7Btype%3ABoolean%2Cvalue%3Afalse%7D%7D%3B%7D%7D%2C%7Bkey%3A'observers'%2Cget%3Afunction%20get()%7Breturn%5B'__updateSelection(multi%2C%20items.*)'%5D%3B%7D%7D%5D)%3Bfunction%20ArraySelectorMixin()%7B_classCallCheck(this%2CArraySelectorMixin)%3Bvar%20_this%3D_possibleConstructorReturn(this%2C(ArraySelectorMixin.__proto__%7C%7CObject.getPrototypeOf(ArraySelectorMixin)).call(this))%3B_this.__lastItems%3Dnull%3B_this.__lastMulti%3Dnull%3B_this.__selectedMap%3Dnull%3Breturn%20_this%3B%7D_createClass(ArraySelectorMixin%2C%5B%7Bkey%3A'__updateSelection'%2Cvalue%3Afunction%20__updateSelection(multi%2CitemsInfo)%7Bvar%20path%3DitemsInfo.path%3Bif(path%3D%3D'items')%7B%2F%2F%20Case%201%20-%20items%20array%20changed%2C%20so%20diff%20against%20previous%20array%20and%0A%2F%2F%20deselect%20any%20removed%20items%20and%20adjust%20selected%20indices%0Avar%20newItems%3DitemsInfo.base%7C%7C%5B%5D%3Bvar%20lastItems%3Dthis.__lastItems%3Bvar%20lastMulti%3Dthis.__lastMulti%3Bif(multi!%3D%3DlastMulti)%7Bthis.clearSelection()%3B%7Dif(lastItems)%7Bvar%20splices%3DPolymer.ArraySplice.calculateSplices(newItems%2ClastItems)%3Bthis.__applySplices(splices)%3B%7Dthis.__lastItems%3DnewItems%3Bthis.__lastMulti%3Dmulti%3B%7Delse%20if(itemsInfo.path%3D%3D'items.splices')%7B%2F%2F%20Case%202%20-%20got%20specific%20splice%20information%20describing%20the%20array%20mutation%3A%0A%2F%2F%20deselect%20any%20removed%20items%20and%20adjust%20selected%20indices%0Athis.__applySplices(itemsInfo.value.indexSplices)%3B%7Delse%7B%2F%2F%20Case%203%20-%20an%20array%20element%20was%20changed%2C%20so%20deselect%20the%20previous%0A%2F%2F%20item%20for%20that%20index%20if%20it%20was%20previously%20selected%0Avar%20part%3Dpath.slice('items.'.length)%3Bvar%20idx%3DparseInt(part%2C10)%3Bif(part.indexOf('.')%3C0%26%26part%3D%3Didx)%7Bthis.__deselectChangedIdx(idx)%3B%7D%7D%7D%7D%2C%7Bkey%3A'__applySplices'%2Cvalue%3Afunction%20__applySplices(splices)%7Bvar%20_this2%3Dthis%3Bvar%20selected%3Dthis.__selectedMap%3B%2F%2F%20Adjust%20selected%20indices%20and%20mark%20removals%0Avar%20_loop%3Dfunction%20_loop(i)%7Bvar%20s%3Dsplices%5Bi%5D%3Bselected.forEach(function(idx%2Citem)%7Bif(idx%3Cs.index)%7B%2F%2F%20no%20change%0A%7Delse%20if(idx%3E%3Ds.index%2Bs.removed.length)%7B%2F%2F%20adjust%20index%0Aselected.set(item%2Cidx%2Bs.addedCount-s.removed.length)%3B%7Delse%7B%2F%2F%20remove%20index%0Aselected.set(item%2C-1)%3B%7D%7D)%3Bfor(var%20j%3D0%3Bj%3Cs.addedCount%3Bj%2B%2B)%7Bvar%20idx%3Ds.index%2Bj%3Bif(selected.has(_this2.items%5Bidx%5D))%7Bselected.set(_this2.items%5Bidx%5D%2Cidx)%3B%7D%7D%7D%3Bfor(var%20i%3D0%3Bi%3Csplices.length%3Bi%2B%2B)%7B_loop(i)%3B%7D%2F%2F%20Update%20linked%20paths%0Athis.__updateLinks()%3B%2F%2F%20Remove%20selected%20items%20that%20were%20removed%20from%20the%20items%20array%0Avar%20sidx%3D0%3Bselected.forEach(function(idx%2Citem)%7Bif(idx%3C0)%7Bif(_this2.multi)%7B_this2.splice('selected'%2Csidx%2C1)%3B%7Delse%7B_this2.selected%3D_this2.selectedItem%3Dnull%3B%7Dselected.delete(item)%3B%7Delse%7Bsidx%2B%2B%3B%7D%7D)%3B%7D%7D%2C%7Bkey%3A'__updateLinks'%2Cvalue%3Afunction%20__updateLinks()%7Bvar%20_this3%3Dthis%3Bthis.__dataLinkedPaths%3D%7B%7D%3Bif(this.multi)%7Bvar%20sidx%3D0%3Bthis.__selectedMap.forEach(function(idx)%7Bif(idx%3E%3D0)%7B_this3.linkPaths('items.'%2Bidx%2C'selected.'%2Bsidx%2B%2B)%3B%7D%7D)%3B%7Delse%7Bthis.__selectedMap.forEach(function(idx)%7B_this3.linkPaths('selected'%2C'items.'%2Bidx)%3B_this3.linkPaths('selectedItem'%2C'items.'%2Bidx)%3B%7D)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Clears%20the%20selection%20state.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'clearSelection'%2Cvalue%3Afunction%20clearSelection()%7B%2F%2F%20Unbind%20previous%20selection%0Athis.__dataLinkedPaths%3D%7B%7D%3B%2F%2F%20The%20selected%20map%20stores%203%20pieces%20of%20information%3A%0A%2F%2F%20key%3A%20items%20array%20object%0A%2F%2F%20value%3A%20items%20array%20index%0A%2F%2F%20order%3A%20selected%20array%20index%0Athis.__selectedMap%3Dnew%20Map()%3B%2F%2F%20Initialize%20selection%0Athis.selected%3Dthis.multi%3F%5B%5D%3Anull%3Bthis.selectedItem%3Dnull%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20whether%20the%20item%20is%20currently%20selected.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20item%20Item%20from%20%60items%60%20array%20to%20test%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Whether%20the%20item%20is%20selected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'isSelected'%2Cvalue%3Afunction%20isSelected(item)%7Breturn%20this.__selectedMap.has(item)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20whether%20the%20item%20is%20currently%20selected.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20idx%20Index%20from%20%60items%60%20array%20to%20test%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Whether%20the%20item%20is%20selected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'isIndexSelected'%2Cvalue%3Afunction%20isIndexSelected(idx)%7Breturn%20this.isSelected(this.items%5Bidx%5D)%3B%7D%7D%2C%7Bkey%3A'__deselectChangedIdx'%2Cvalue%3Afunction%20__deselectChangedIdx(idx)%7Bvar%20_this4%3Dthis%3Bvar%20sidx%3Dthis.__selectedIndexForItemIndex(idx)%3Bif(sidx%3E%3D0)%7Bvar%20i%3D0%3Bthis.__selectedMap.forEach(function(idx%2Citem)%7Bif(sidx%3D%3Di%2B%2B)%7B_this4.deselect(item)%3B%7D%7D)%3B%7D%7D%7D%2C%7Bkey%3A'__selectedIndexForItemIndex'%2Cvalue%3Afunction%20__selectedIndexForItemIndex(idx)%7Bvar%20selected%3Dthis.__dataLinkedPaths%5B'items.'%2Bidx%5D%3Bif(selected)%7Breturn%20parseInt(selected.slice('selected.'.length)%2C10)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Deselects%20the%20given%20item%20if%20it%20is%20already%20selected.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20item%20Item%20from%20%60items%60%20array%20to%20deselect%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'deselect'%2Cvalue%3Afunction%20deselect(item)%7Bvar%20idx%3Dthis.__selectedMap.get(item)%3Bif(idx%3E%3D0)%7Bthis.__selectedMap.delete(item)%3Bvar%20sidx%3Dvoid%200%3Bif(this.multi)%7Bsidx%3Dthis.__selectedIndexForItemIndex(idx)%3B%7Dthis.__updateLinks()%3Bif(this.multi)%7Bthis.splice('selected'%2Csidx%2C1)%3B%7Delse%7Bthis.selected%3Dthis.selectedItem%3Dnull%3B%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Deselects%20the%20given%20index%20if%20it%20is%20already%20selected.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20idx%20Index%20from%20%60items%60%20array%20to%20deselect%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'deselectIndex'%2Cvalue%3Afunction%20deselectIndex(idx)%7Bthis.deselect(this.items%5Bidx%5D)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Selects%20the%20given%20item.%20%20When%20%60toggle%60%20is%20true%2C%20this%20will%20automatically%0A%20%20%20%20%20%20%20*%20deselect%20the%20item%20if%20already%20selected.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20item%20Item%20from%20%60items%60%20array%20to%20select%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'select'%2Cvalue%3Afunction%20select(item)%7Bthis.selectIndex(this.items.indexOf(item))%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Selects%20the%20given%20index.%20%20When%20%60toggle%60%20is%20true%2C%20this%20will%20automatically%0A%20%20%20%20%20%20%20*%20deselect%20the%20item%20if%20already%20selected.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20idx%20Index%20from%20%60items%60%20array%20to%20select%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'selectIndex'%2Cvalue%3Afunction%20selectIndex(idx)%7Bvar%20item%3Dthis.items%5Bidx%5D%3Bif(!this.isSelected(item))%7Bif(!this.multi)%7Bthis.__selectedMap.clear()%3B%7Dthis.__selectedMap.set(item%2Cidx)%3Bthis.__updateLinks()%3Bif(this.multi)%7Bthis.push('selected'%2Citem)%3B%7Delse%7Bthis.selected%3Dthis.selectedItem%3Ditem%3B%7D%7Delse%20if(this.toggle)%7Bthis.deselectIndex(idx)%3B%7D%7D%7D%5D)%3Breturn%20ArraySelectorMixin%3B%7D(elementBase)%3Breturn%20ArraySelectorMixin%3B%7D)%3B%2F%2F%20export%20mixin%0APolymer.ArraySelectorMixin%3DArraySelectorMixin%3B%2F**%0A%20%20%20*%20%40constructor%0A%20%20%20*%20%40extends%20%7BPolymer.Element%7D%0A%20%20%20*%20%40implements%20%7BPolymer_ArraySelectorMixin%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Fvar%20baseArraySelector%3DArraySelectorMixin(Polymer.Element)%3B%2F**%0A%20%20%20*%20Element%20implementing%20the%20%60Polymer.ArraySelector%60%20mixin%2C%20which%20records%0A%20%20%20*%20dynamic%20associations%20between%20item%20paths%20in%20a%20master%20%60items%60%20array%20and%20a%0A%20%20%20*%20%60selected%60%20array%20such%20that%20path%20changes%20to%20the%20master%20array%20(at%20the%20host)%0A%20%20%20*%20element%20or%20elsewhere%20via%20data-binding)%20are%20correctly%20propagated%20to%20items%0A%20%20%20*%20in%20the%20selected%20array%20and%20vice-versa.%0A%20%20%20*%0A%20%20%20*%20The%20%60items%60%20property%20accepts%20an%20array%20of%20user%20data%2C%20and%20via%20the%0A%20%20%20*%20%60select(item)%60%20and%20%60deselect(item)%60%20API%2C%20updates%20the%20%60selected%60%20property%0A%20%20%20*%20which%20may%20be%20bound%20to%20other%20parts%20of%20the%20application%2C%20and%20any%20changes%20to%0A%20%20%20*%20sub-fields%20of%20%60selected%60%20item(s)%20will%20be%20kept%20in%20sync%20with%20items%20in%20the%0A%20%20%20*%20%60items%60%20array.%20%20When%20%60multi%60%20is%20false%2C%20%60selected%60%20is%20a%20property%0A%20%20%20*%20representing%20the%20last%20selected%20item.%20%20When%20%60multi%60%20is%20true%2C%20%60selected%60%0A%20%20%20*%20is%20an%20array%20of%20multiply%20selected%20items.%0A%20%20%20*%0A%20%20%20*%20Example%3A%0A%20%20%20*%0A%20%20%20*%20%60%60%60html%0A%20%20%20*%20%3Cdom-module%20id%3D%22employee-list%22%3E%0A%20%20%20*%0A%20%20%20*%20%20%20%3Ctemplate%3E%0A%20%20%20*%0A%20%20%20*%20%20%20%20%20%3Cdiv%3E%20Employee%20list%3A%20%3C%2Fdiv%3E%0A%20%20%20*%20%20%20%20%20%3Cdom-repeat%20id%3D%22employeeList%22%20items%3D%22%7B%7Bemployees%7D%7D%22%3E%0A%20%20%20*%20%20%20%20%20%20%20%3Ctemplate%3E%0A%20%20%20*%20%20%20%20%20%20%20%20%20%3Cdiv%3EFirst%20name%3A%20%3Cspan%3E%7B%7Bitem.first%7D%7D%3C%2Fspan%3E%3C%2Fdiv%3E%0A%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%3Cdiv%3ELast%20name%3A%20%3Cspan%3E%7B%7Bitem.last%7D%7D%3C%2Fspan%3E%3C%2Fdiv%3E%0A%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%3Cbutton%20on-click%3D%22toggleSelection%22%3ESelect%3C%2Fbutton%3E%0A%20%20%20*%20%20%20%20%20%20%20%3C%2Ftemplate%3E%0A%20%20%20*%20%20%20%20%20%3C%2Fdom-repeat%3E%0A%20%20%20*%0A%20%20%20*%20%20%20%20%20%3Carray-selector%20id%3D%22selector%22%20items%3D%22%7B%7Bemployees%7D%7D%22%20selected%3D%22%7B%7Bselected%7D%7D%22%20multi%20toggle%3E%3C%2Farray-selector%3E%0A%20%20%20*%0A%20%20%20*%20%20%20%20%20%3Cdiv%3E%20Selected%20employees%3A%20%3C%2Fdiv%3E%0A%20%20%20*%20%20%20%20%20%3Cdom-repeat%20items%3D%22%7B%7Bselected%7D%7D%22%3E%0A%20%20%20*%20%20%20%20%20%20%20%3Ctemplate%3E%0A%20%20%20*%20%20%20%20%20%20%20%20%20%3Cdiv%3EFirst%20name%3A%20%3Cspan%3E%7B%7Bitem.first%7D%7D%3C%2Fspan%3E%3C%2Fdiv%3E%0A%20%20%20*%20%20%20%20%20%20%20%20%20%3Cdiv%3ELast%20name%3A%20%3Cspan%3E%7B%7Bitem.last%7D%7D%3C%2Fspan%3E%3C%2Fdiv%3E%0A%20%20%20*%20%20%20%20%20%20%20%3C%2Ftemplate%3E%0A%20%20%20*%20%20%20%20%20%3C%2Fdom-repeat%3E%0A%20%20%20*%0A%20%20%20*%20%20%20%3C%2Ftemplate%3E%0A%20%20%20*%0A%20%20%20*%20%3C%2Fdom-module%3E%0A%20%20%20*%20%60%60%60%0A%20%20%20*%0A%20%20%20*%20%60%60%60js%0A%20%20%20*class%20EmployeeList%20extends%20Polymer.Element%20%7B%0A%20%20%20*%20%20static%20get%20is()%20%7B%20return%20'employee-list'%3B%20%7D%0A%20%20%20*%20%20static%20get%20properties()%20%7B%0A%20%20%20*%20%20%20%20return%20%7B%0A%20%20%20*%20%20%20%20%20%20employees%3A%20%7B%0A%20%20%20*%20%20%20%20%20%20%20%20value()%20%7B%0A%20%20%20*%20%20%20%20%20%20%20%20%20%20return%20%5B%0A%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%20%7Bfirst%3A%20'Bob'%2C%20last%3A%20'Smith'%7D%2C%0A%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%20%7Bfirst%3A%20'Sally'%2C%20last%3A%20'Johnson'%7D%2C%0A%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%20...%0A%20%20%20*%20%20%20%20%20%20%20%20%20%20%5D%3B%0A%20%20%20*%20%20%20%20%20%20%20%20%7D%0A%20%20%20*%20%20%20%20%20%20%7D%0A%20%20%20*%20%20%20%20%7D%3B%0A%20%20%20*%20%20%7D%0A%20%20%20*%20%20toggleSelection(e)%20%7B%0A%20%20%20*%20%20%20%20let%20item%20%3D%20this.%24.employeeList.itemForElement(e.target)%3B%0A%20%20%20*%20%20%20%20this.%24.selector.select(item)%3B%0A%20%20%20*%20%20%7D%0A%20%20%20*%7D%0A%20%20%20*%20%60%60%60%0A%20%20%20*%0A%20%20%20*%20%40polymer%0A%20%20%20*%20%40customElement%0A%20%20%20*%20%40extends%20%7BbaseArraySelector%7D%0A%20%20%20*%20%40appliesMixin%20Polymer.ArraySelectorMixin%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Custom%20element%20that%20links%20paths%20between%20an%20input%20%60items%60%20array%20and%0A%20%20%20*%20%20%20an%20output%20%60selected%60%20item%20or%20array%20based%20on%20calls%20to%20its%20selection%20API.%0A%20%20%20*%2Fvar%20ArraySelector%3Dfunction(_baseArraySelector)%7B_inherits(ArraySelector%2C_baseArraySelector)%3Bfunction%20ArraySelector()%7B_classCallCheck(this%2CArraySelector)%3Breturn%20_possibleConstructorReturn(this%2C(ArraySelector.__proto__%7C%7CObject.getPrototypeOf(ArraySelector)).apply(this%2Carguments))%3B%7D_createClass(ArraySelector%2Cnull%2C%5B%7Bkey%3A'is'%2C%2F%2F%20Not%20needed%20to%20find%20template%3B%20can%20be%20removed%20once%20the%20analyzer%0A%2F%2F%20can%20find%20the%20tag%20name%20from%20customElements.define%20call%0Aget%3Afunction%20get()%7Breturn'array-selector'%3B%7D%7D%5D)%3Breturn%20ArraySelector%3B%7D(baseArraySelector)%3BcustomElements.define(ArraySelector.is%2CArraySelector)%3B%2F**%20%40const%20*%2FPolymer.ArraySelector%3DArraySelector%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Felements%2Farray-selector.html.js%0A",
            "totalBytes": 13519,
            "wastedBytes": 7347,
            "wastedPercent": 54.34573563133368
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_typeof%3Dtypeof%20Symbol%3D%3D%3D%22function%22%26%26typeof%20Symbol.iterator%3D%3D%3D%22symbol%22%3Ffunction(obj)%7Breturn%20typeof%20obj%3B%7D%3Afunction(obj)%7Breturn%20obj%26%26typeof%20Symbol%3D%3D%3D%22function%22%26%26obj.constructor%3D%3D%3DSymbol%26%26obj!%3D%3DSymbol.prototype%3F%22symbol%22%3Atypeof%20obj%3B%7D%3Bvar%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bvar%20_get%3Dfunction%20get(object%2Cproperty%2Creceiver)%7Bif(object%3D%3D%3Dnull)object%3DFunction.prototype%3Bvar%20desc%3DObject.getOwnPropertyDescriptor(object%2Cproperty)%3Bif(desc%3D%3D%3Dundefined)%7Bvar%20parent%3DObject.getPrototypeOf(object)%3Bif(parent%3D%3D%3Dnull)%7Breturn%20undefined%3B%7Delse%7Breturn%20get(parent%2Cproperty%2Creceiver)%3B%7D%7Delse%20if(%22value%22in%20desc)%7Breturn%20desc.value%3B%7Delse%7Bvar%20getter%3Ddesc.get%3Bif(getter%3D%3D%3Dundefined)%7Breturn%20undefined%3B%7Dreturn%20getter.call(receiver)%3B%7D%7D%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3Bvar%20caseMap%3DPolymer.CaseMap%3B%2F%2F%20Save%20map%20of%20native%20properties%3B%20this%20forms%20a%20blacklist%20or%20properties%0A%2F%2F%20that%20won't%20have%20their%20values%20%22saved%22%20by%20%60saveAccessorValue%60%2C%20since%0A%2F%2F%20reading%20from%20an%20HTMLElement%20accessor%20from%20the%20context%20of%20a%20prototype%20throws%0Avar%20nativeProperties%3D%7B%7D%3Bvar%20proto%3DHTMLElement.prototype%3Bwhile(proto)%7Bvar%20props%3DObject.getOwnPropertyNames(proto)%3Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7BnativeProperties%5Bprops%5Bi%5D%5D%3Dtrue%3B%7Dproto%3DObject.getPrototypeOf(proto)%3B%7D%2F**%0A%20%20%20*%20Used%20to%20save%20the%20value%20of%20a%20property%20that%20will%20be%20overridden%20with%0A%20%20%20*%20an%20accessor.%20If%20the%20%60model%60%20is%20a%20prototype%2C%20the%20values%20will%20be%20saved%0A%20%20%20*%20in%20%60__dataProto%60%2C%20and%20it's%20up%20to%20the%20user%20(or%20downstream%20mixin)%20to%0A%20%20%20*%20decide%20how%2Fwhen%20to%20set%20these%20values%20back%20into%20the%20accessors.%0A%20%20%20*%20If%20%60model%60%20is%20already%20an%20instance%20(it%20has%20a%20%60__data%60%20property)%2C%20then%0A%20%20%20*%20the%20value%20will%20be%20set%20as%20a%20pending%20property%2C%20meaning%20the%20user%20should%0A%20%20%20*%20call%20%60_invalidateProperties%60%20or%20%60_flushProperties%60%20to%20take%20effect%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BObject%7D%20model%20Prototype%20or%20instance%0A%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20property%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20saveAccessorValue(model%2Cproperty)%7B%2F%2F%20Don't%20read%2Fstore%20value%20for%20any%20native%20properties%20since%20they%20could%20throw%0Aif(!nativeProperties%5Bproperty%5D)%7Bvar%20value%3Dmodel%5Bproperty%5D%3Bif(value!%3D%3Dundefined)%7Bif(model.__data)%7B%2F%2F%20Adding%20accessor%20to%20instance%3B%20update%20the%20property%0A%2F%2F%20It%20is%20the%20user's%20responsibility%20to%20call%20_flushProperties%0Amodel._setPendingProperty(property%2Cvalue)%3B%7Delse%7B%2F%2F%20Adding%20accessor%20to%20proto%3B%20save%20proto's%20value%20for%20instance-time%20use%0Aif(!model.__dataProto)%7Bmodel.__dataProto%3D%7B%7D%3B%7Delse%20if(!model.hasOwnProperty(JSCompiler_renameProperty('__dataProto'%2Cmodel)))%7Bmodel.__dataProto%3DObject.create(model.__dataProto)%3B%7Dmodel.__dataProto%5Bproperty%5D%3Dvalue%3B%7D%7D%7D%7D%2F**%0A%20%20%20*%20Element%20class%20mixin%20that%20provides%20basic%20meta-programming%20for%20creating%20one%0A%20%20%20*%20or%20more%20property%20accessors%20(getter%2Fsetter%20pair)%20that%20enqueue%20an%20async%0A%20%20%20*%20(batched)%20%60_propertiesChanged%60%20callback.%0A%20%20%20*%0A%20%20%20*%20For%20basic%20usage%20of%20this%20mixin%3A%0A%20%20%20*%20%0A%20%20%20*%20-%20%20%20Declare%20attributes%20to%20observe%20via%20the%20standard%20%60static%20get%20observedAttributes()%60.%20Use%0A%20%20%20*%20%20%20%20%20%60dash-case%60%20attribute%20names%20to%20represent%20%60camelCase%60%20property%20names.%20%0A%20%20%20*%20-%20%20%20Implement%20the%20%60_propertiesChanged%60%20callback%20on%20the%20class.%0A%20%20%20*%20-%20%20%20Call%20%60MyClass.createPropertiesForAttributes()%60%20**once**%20on%20the%20class%20to%20generate%20%0A%20%20%20*%20%20%20%20%20property%20accessors%20for%20each%20observed%20attribute.%20This%20must%20be%20called%20before%20the%20first%20%0A%20%20%20*%20%20%20%20%20instance%20is%20created%2C%20for%20example%2C%20by%20calling%20it%20before%20calling%20%60customElements.define%60.%0A%20%20%20*%20%20%20%20%20It%20can%20also%20be%20called%20lazily%20from%20the%20element's%20%60constructor%60%2C%20as%20long%20as%20it's%20guarded%20so%0A%20%20%20*%20%20%20%20%20that%20the%20call%20is%20only%20made%20once%2C%20when%20the%20first%20instance%20is%20created.%0A%20%20%20*%20-%20%20%20Call%20%60this._enableProperties()%60%20in%20the%20element's%20%60connectedCallback%60%20to%20enable%20%0A%20%20%20*%20%20%20%20%20the%20accessors.%0A%20%20%20*%0A%20%20%20*%20Any%20%60observedAttributes%60%20will%20automatically%20be%0A%20%20%20*%20deserialized%20via%20%60attributeChangedCallback%60%20and%20set%20to%20the%20associated%0A%20%20%20*%20property%20using%20%60dash-case%60-to-%60camelCase%60%20convention.%0A%20%20%20*%0A%20%20%20*%20%40mixinFunction%0A%20%20%20*%20%40polymer%0A%20%20%20*%20%40appliesMixin%20Polymer.PropertiesChanged%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Element%20class%20mixin%20for%20reacting%20to%20property%20changes%20from%0A%20%20%20*%20%20%20generated%20property%20accessors.%0A%20%20%20*%2FPolymer.PropertyAccessors%3DPolymer.dedupingMixin(function(superClass)%7B%2F**%0A%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20*%20%40extends%20%7BsuperClass%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertiesChanged%7D%0A%20%20%20%20%20*%20%40unrestricted%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Fvar%20base%3DPolymer.PropertiesChanged(superClass)%3B%2F**%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40mixinClass%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertyAccessors%7D%0A%20%20%20%20%20*%20%40extends%20%7Bbase%7D%0A%20%20%20%20%20*%20%40unrestricted%0A%20%20%20%20%20*%2Fvar%20PropertyAccessors%3Dfunction(_base)%7B_inherits(PropertyAccessors%2C_base)%3Bfunction%20PropertyAccessors()%7B_classCallCheck(this%2CPropertyAccessors)%3Breturn%20_possibleConstructorReturn(this%2C(PropertyAccessors.__proto__%7C%7CObject.getPrototypeOf(PropertyAccessors)).apply(this%2Carguments))%3B%7D_createClass(PropertyAccessors%2C%5B%7Bkey%3A'_initializeProperties'%2C%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20PropertiesChanged%20implementation%20to%20initialize%20values%20for%0A%20%20%20%20%20%20%20*%20accessors%20created%20for%20values%20that%20already%20existed%20on%20the%20element%0A%20%20%20%20%20%20%20*%20prototype.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_initializeProperties()%7Bif(this.__dataProto)%7Bthis._initializeProtoProperties(this.__dataProto)%3Bthis.__dataProto%3Dnull%3B%7D_get(PropertyAccessors.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertyAccessors.prototype)%2C'_initializeProperties'%2Cthis).call(this)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Called%20at%20instance%20time%20with%20bag%20of%20properties%20that%20were%20overwritten%0A%20%20%20%20%20%20%20*%20by%20accessors%20on%20the%20prototype%20when%20accessors%20were%20created.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20default%20implementation%20sets%20these%20properties%20back%20into%20the%0A%20%20%20%20%20%20%20*%20setter%20at%20instance%20time.%20%20This%20method%20is%20provided%20as%20an%20override%0A%20%20%20%20%20%20%20*%20point%20for%20customizing%20or%20providing%20more%20efficient%20initialization.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20property%20values%20that%20were%20overwritten%0A%20%20%20%20%20%20%20*%20%20%20when%20creating%20property%20accessors.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_initializeProtoProperties'%2Cvalue%3Afunction%20_initializeProtoProperties(props)%7Bfor(var%20p%20in%20props)%7Bthis._setProperty(p%2Cprops%5Bp%5D)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Ensures%20the%20element%20has%20the%20given%20attribute.%20If%20it%20does%20not%2C%0A%20%20%20%20%20%20%20*%20assigns%20the%20given%20value%20to%20the%20attribute.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%20Closure%20can't%20figure%20out%20%60this%60%20is%20infact%20an%20element%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20attribute%20Name%20of%20attribute%20to%20ensure%20is%20set.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20value%20of%20the%20attribute.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_ensureAttribute'%2Cvalue%3Afunction%20_ensureAttribute(attribute%2Cvalue)%7Bvar%20el%3D%2F**%20%40type%20%7B!HTMLElement%7D%20*%2Fthis%3Bif(!el.hasAttribute(attribute))%7Bthis._valueToNodeAttribute(el%2Cvalue%2Cattribute)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20PropertiesChanged%20implemention%20to%20serialize%20objects%20as%20JSON.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Property%20value%20to%20serialize.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bstring%20%7C%20undefined%7D%20String%20serialized%20from%20the%20provided%20property%20value.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_serializeValue'%2Cvalue%3Afunction%20_serializeValue(value)%7B%2F*%20eslint-disable%20no-fallthrough%20*%2Fswitch(typeof%20value%3D%3D%3D'undefined'%3F'undefined'%3A_typeof(value))%7Bcase'object'%3Aif(value%20instanceof%20Date)%7Breturn%20value.toString()%3B%7Delse%20if(value)%7Btry%7Breturn%20JSON.stringify(value)%3B%7Dcatch(x)%7Breturn''%3B%7D%7Ddefault%3Areturn%20_get(PropertyAccessors.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertyAccessors.prototype)%2C'_serializeValue'%2Cthis).call(this%2Cvalue)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Converts%20a%20string%20to%20a%20typed%20JavaScript%20value.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20is%20called%20by%20Polymer%20when%20reading%20HTML%20attribute%20values%20to%0A%20%20%20%20%20%20%20*%20JS%20properties.%20%20Users%20may%20override%20this%20method%20on%20Polymer%20element%0A%20%20%20%20%20%20%20*%20prototypes%20to%20provide%20deserialization%20for%20custom%20%60type%60s.%20%20Note%2C%0A%20%20%20%20%20%20%20*%20the%20%60type%60%20argument%20is%20the%20value%20of%20the%20%60type%60%20field%20provided%20in%20the%0A%20%20%20%20%20%20%20*%20%60properties%60%20configuration%20object%20for%20a%20given%20property%2C%20and%20is%0A%20%20%20%20%20%20%20*%20by%20convention%20the%20constructor%20for%20the%20type%20to%20deserialize.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20value%20Attribute%20value%20to%20deserialize.%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%3D%7D%20type%20Type%20to%20deserialize%20the%20string%20to.%0A%20%20%20%20%20%20%20*%20%40return%20%7B*%7D%20Typed%20value%20deserialized%20from%20the%20provided%20string.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_deserializeValue'%2Cvalue%3Afunction%20_deserializeValue(value%2Ctype)%7B%2F**%0A%20%20%20%20%20%20%20%20%20*%20%40type%20%7B*%7D%0A%20%20%20%20%20%20%20%20%20*%2Fvar%20outValue%3Dvoid%200%3Bswitch(type)%7Bcase%20Object%3Atry%7BoutValue%3DJSON.parse(%2F**%20%40type%20%7Bstring%7D%20*%2Fvalue)%3B%7Dcatch(x)%7B%2F%2F%20allow%20non-JSON%20literals%20like%20Strings%20and%20Numbers%0AoutValue%3Dvalue%3B%7Dbreak%3Bcase%20Array%3Atry%7BoutValue%3DJSON.parse(%2F**%20%40type%20%7Bstring%7D%20*%2Fvalue)%3B%7Dcatch(x)%7BoutValue%3Dnull%3Bconsole.warn('Polymer%3A%3AAttributes%3A%20couldn%5C't%20decode%20Array%20as%20JSON%3A%20'%2Bvalue)%3B%7Dbreak%3Bcase%20Date%3AoutValue%3DisNaN(value)%3FString(value)%3ANumber(value)%3BoutValue%3Dnew%20Date(outValue)%3Bbreak%3Bdefault%3AoutValue%3D_get(PropertyAccessors.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertyAccessors.prototype)%2C'_deserializeValue'%2Cthis).call(this%2Cvalue%2Ctype)%3Bbreak%3B%7Dreturn%20outValue%3B%7D%2F*%20eslint-enable%20no-fallthrough%20*%2F%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20PropertiesChanged%20implementation%20to%20save%20existing%20prototype%0A%20%20%20%20%20%20%20*%20property%20value%20so%20that%20it%20can%20be%20reset.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20the%20property%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20readOnly%20When%20true%2C%20no%20setter%20is%20created%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20When%20calling%20on%20a%20prototype%2C%20any%20overwritten%20values%20are%20saved%20in%0A%20%20%20%20%20%20%20*%20%60__dataProto%60%2C%20and%20it%20is%20up%20to%20the%20subclasser%20to%20decide%20how%2Fwhen%0A%20%20%20%20%20%20%20*%20to%20set%20those%20properties%20back%20into%20the%20accessor.%20%20When%20calling%20on%20an%0A%20%20%20%20%20%20%20*%20instance%2C%20the%20overwritten%20value%20is%20set%20via%20%60_setPendingProperty%60%2C%0A%20%20%20%20%20%20%20*%20and%20the%20user%20should%20call%20%60_invalidateProperties%60%20or%20%60_flushProperties%60%0A%20%20%20%20%20%20%20*%20for%20the%20values%20to%20take%20effect.%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_definePropertyAccessor'%2Cvalue%3Afunction%20_definePropertyAccessor(property%2CreadOnly)%7BsaveAccessorValue(this%2Cproperty)%3B_get(PropertyAccessors.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertyAccessors.prototype)%2C'_definePropertyAccessor'%2Cthis).call(this%2Cproperty%2CreadOnly)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20true%20if%20this%20library%20created%20an%20accessor%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20an%20accessor%20was%20created%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_hasAccessor'%2Cvalue%3Afunction%20_hasAccessor(property)%7Breturn%20this.__dataHasAccessor%26%26this.__dataHasAccessor%5Bproperty%5D%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20true%20if%20the%20specified%20property%20has%20a%20pending%20change.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20prop%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20property%20has%20a%20pending%20change%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_isPropertyPending'%2Cvalue%3Afunction%20_isPropertyPending(prop)%7Breturn%20Boolean(this.__dataPending%26%26prop%20in%20this.__dataPending)%3B%7D%7D%5D%2C%5B%7Bkey%3A'createPropertiesForAttributes'%2C%2F**%0A%20%20%20%20%20%20%20*%20Generates%20property%20accessors%20for%20all%20attributes%20in%20the%20standard%0A%20%20%20%20%20%20%20*%20static%20%60observedAttributes%60%20array.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Attribute%20names%20are%20mapped%20to%20property%20names%20using%20the%20%60dash-case%60%20to%0A%20%20%20%20%20%20%20*%20%60camelCase%60%20convention%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20createPropertiesForAttributes()%7Bvar%20a%24%3Dthis.observedAttributes%3Bfor(var%20_i%3D0%3B_i%3Ca%24.length%3B_i%2B%2B)%7Bthis.prototype._createPropertyAccessor(caseMap.dashToCamelCase(a%24%5B_i%5D))%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20an%20attribute%20name%20that%20corresponds%20to%20the%20given%20property.%0A%20%20%20%20%20%20%20*%20By%20default%2C%20converts%20camel%20to%20dash%20case%2C%20e.g.%20%60fooBar%60%20to%20%60foo-bar%60.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20to%20convert%0A%20%20%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Attribute%20name%20corresponding%20to%20the%20given%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'attributeNameForProperty'%2Cvalue%3Afunction%20attributeNameForProperty(property)%7Breturn%20caseMap.camelToDashCase(property)%3B%7D%7D%5D)%3Breturn%20PropertyAccessors%3B%7D(base)%3Breturn%20PropertyAccessors%3B%7D)%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Fmixins%2Fproperty-accessors.html.js%0A",
            "totalBytes": 12872,
            "wastedBytes": 7300,
            "wastedPercent": 56.71224362958359
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bvar%20_typeof%3Dtypeof%20Symbol%3D%3D%3D%22function%22%26%26typeof%20Symbol.iterator%3D%3D%3D%22symbol%22%3Ffunction(obj)%7Breturn%20typeof%20obj%3B%7D%3Afunction(obj)%7Breturn%20obj%26%26typeof%20Symbol%3D%3D%3D%22function%22%26%26obj.constructor%3D%3D%3DSymbol%26%26obj!%3D%3DSymbol.prototype%3F%22symbol%22%3Atypeof%20obj%3B%7D%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3B%2F%2F%20Common%20implementation%20for%20mixin%20%26%20behavior%0Afunction%20mutablePropertyChange(inst%2Cproperty%2Cvalue%2Cold%2CmutableData)%7Bvar%20isObject%3Dvoid%200%3Bif(mutableData)%7BisObject%3D(typeof%20value%3D%3D%3D'undefined'%3F'undefined'%3A_typeof(value))%3D%3D%3D'object'%26%26value!%3D%3Dnull%3B%2F%2F%20Pull%20%60old%60%20for%20Objects%20from%20temp%20cache%2C%20but%20treat%20%60null%60%20as%20a%20primitive%0Aif(isObject)%7Bold%3Dinst.__dataTemp%5Bproperty%5D%3B%7D%7D%2F%2F%20Strict%20equality%20check%2C%20but%20return%20false%20for%20NaN%3D%3D%3DNaN%0Avar%20shouldChange%3Dold!%3D%3Dvalue%26%26(old%3D%3D%3Dold%7C%7Cvalue%3D%3D%3Dvalue)%3B%2F%2F%20Objects%20are%20stored%20in%20temporary%20cache%20(cleared%20at%20end%20of%0A%2F%2F%20turn)%2C%20which%20is%20used%20for%20dirty-checking%0Aif(isObject%26%26shouldChange)%7Binst.__dataTemp%5Bproperty%5D%3Dvalue%3B%7Dreturn%20shouldChange%3B%7D%2F**%0A%20%20%20*%20Element%20class%20mixin%20to%20skip%20strict%20dirty-checking%20for%20objects%20and%20arrays%0A%20%20%20*%20(always%20consider%20them%20to%20be%20%22dirty%22)%2C%20for%20use%20on%20elements%20utilizing%0A%20%20%20*%20%60Polymer.PropertyEffects%60%0A%20%20%20*%0A%20%20%20*%20By%20default%2C%20%60Polymer.PropertyEffects%60%20performs%20strict%20dirty%20checking%20on%0A%20%20%20*%20objects%2C%20which%20means%20that%20any%20deep%20modifications%20to%20an%20object%20or%20array%20will%0A%20%20%20*%20not%20be%20propagated%20unless%20%22immutable%22%20data%20patterns%20are%20used%20(i.e.%20all%20object%0A%20%20%20*%20references%20from%20the%20root%20to%20the%20mutation%20were%20changed).%0A%20%20%20*%0A%20%20%20*%20Polymer%20also%20provides%20a%20proprietary%20data%20mutation%20and%20path%20notification%20API%0A%20%20%20*%20(e.g.%20%60notifyPath%60%2C%20%60set%60%2C%20and%20array%20mutation%20API's)%20that%20allow%20efficient%0A%20%20%20*%20mutation%20and%20notification%20of%20deep%20changes%20in%20an%20object%20graph%20to%20all%20elements%0A%20%20%20*%20bound%20to%20the%20same%20object%20graph.%0A%20%20%20*%0A%20%20%20*%20In%20cases%20where%20neither%20immutable%20patterns%20nor%20the%20data%20mutation%20API%20can%20be%0A%20%20%20*%20used%2C%20applying%20this%20mixin%20will%20cause%20Polymer%20to%20skip%20dirty%20checking%20for%0A%20%20%20*%20objects%20and%20arrays%20(always%20consider%20them%20to%20be%20%22dirty%22).%20%20This%20allows%20a%0A%20%20%20*%20user%20to%20make%20a%20deep%20modification%20to%20a%20bound%20object%20graph%2C%20and%20then%20either%0A%20%20%20*%20simply%20re-set%20the%20object%20(e.g.%20%60this.items%20%3D%20this.items%60)%20or%20call%20%60notifyPath%60%0A%20%20%20*%20(e.g.%20%60this.notifyPath('items')%60)%20to%20update%20the%20tree.%20%20Note%20that%20all%0A%20%20%20*%20elements%20that%20wish%20to%20be%20updated%20based%20on%20deep%20mutations%20must%20apply%20this%0A%20%20%20*%20mixin%20or%20otherwise%20skip%20strict%20dirty%20checking%20for%20objects%2Farrays.%0A%20%20%20*%20Specifically%2C%20any%20elements%20in%20the%20binding%20tree%20between%20the%20source%20of%20a%0A%20%20%20*%20mutation%20and%20the%20consumption%20of%20it%20must%20apply%20this%20mixin%20or%20enable%20the%0A%20%20%20*%20%60Polymer.OptionalMutableData%60%20mixin.%0A%20%20%20*%0A%20%20%20*%20In%20order%20to%20make%20the%20dirty%20check%20strategy%20configurable%2C%20see%0A%20%20%20*%20%60Polymer.OptionalMutableData%60.%0A%20%20%20*%0A%20%20%20*%20Note%2C%20the%20performance%20characteristics%20of%20propagating%20large%20object%20graphs%0A%20%20%20*%20will%20be%20worse%20as%20opposed%20to%20using%20strict%20dirty%20checking%20with%20immutable%0A%20%20%20*%20patterns%20or%20Polymer's%20path%20notification%20API.%0A%20%20%20*%0A%20%20%20*%20%40mixinFunction%0A%20%20%20*%20%40polymer%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Element%20class%20mixin%20to%20skip%20strict%20dirty-checking%20for%20objects%0A%20%20%20*%20%20%20and%20arrays%0A%20%20%20*%2FPolymer.MutableData%3DPolymer.dedupingMixin(function(superClass)%7B%2F**%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40mixinClass%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_MutableData%7D%0A%20%20%20%20%20*%2Fvar%20MutableData%3Dfunction(_superClass)%7B_inherits(MutableData%2C_superClass)%3Bfunction%20MutableData()%7B_classCallCheck(this%2CMutableData)%3Breturn%20_possibleConstructorReturn(this%2C(MutableData.__proto__%7C%7CObject.getPrototypeOf(MutableData)).apply(this%2Carguments))%3B%7D_createClass(MutableData%2C%5B%7Bkey%3A'_shouldPropertyChange'%2C%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20%60Polymer.PropertyEffects%60%20to%20provide%20option%20for%20skipping%0A%20%20%20%20%20%20%20*%20strict%20equality%20checking%20for%20Objects%20and%20Arrays.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20pulls%20the%20value%20to%20dirty%20check%20against%20from%20the%20%60__dataTemp%60%0A%20%20%20%20%20%20%20*%20cache%20(rather%20than%20the%20normal%20%60__data%60%20cache)%20for%20Objects.%20%20Since%20the%20temp%0A%20%20%20%20%20%20%20*%20cache%20is%20cleared%20at%20the%20end%20of%20a%20turn%2C%20this%20implementation%20allows%0A%20%20%20%20%20%20%20*%20side-effects%20of%20deep%20object%20changes%20to%20be%20processed%20by%20re-setting%20the%0A%20%20%20%20%20%20%20*%20same%20object%20(using%20the%20temp%20cache%20as%20an%20in-turn%20backstop%20to%20prevent%0A%20%20%20%20%20%20%20*%20cycles%20due%20to%202-way%20notification).%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20New%20property%20value%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20old%20Previous%20property%20value%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Whether%20the%20property%20should%20be%20considered%20a%20change%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_shouldPropertyChange(property%2Cvalue%2Cold)%7Breturn%20mutablePropertyChange(this%2Cproperty%2Cvalue%2Cold%2Ctrue)%3B%7D%7D%5D)%3Breturn%20MutableData%3B%7D(superClass)%3Breturn%20MutableData%3B%7D)%3B%2F**%0A%20%20%20*%20Element%20class%20mixin%20to%20add%20the%20optional%20ability%20to%20skip%20strict%0A%20%20%20*%20dirty-checking%20for%20objects%20and%20arrays%20(always%20consider%20them%20to%20be%0A%20%20%20*%20%22dirty%22)%20by%20setting%20a%20%60mutable-data%60%20attribute%20on%20an%20element%20instance.%0A%20%20%20*%0A%20%20%20*%20By%20default%2C%20%60Polymer.PropertyEffects%60%20performs%20strict%20dirty%20checking%20on%0A%20%20%20*%20objects%2C%20which%20means%20that%20any%20deep%20modifications%20to%20an%20object%20or%20array%20will%0A%20%20%20*%20not%20be%20propagated%20unless%20%22immutable%22%20data%20patterns%20are%20used%20(i.e.%20all%20object%0A%20%20%20*%20references%20from%20the%20root%20to%20the%20mutation%20were%20changed).%0A%20%20%20*%0A%20%20%20*%20Polymer%20also%20provides%20a%20proprietary%20data%20mutation%20and%20path%20notification%20API%0A%20%20%20*%20(e.g.%20%60notifyPath%60%2C%20%60set%60%2C%20and%20array%20mutation%20API's)%20that%20allow%20efficient%0A%20%20%20*%20mutation%20and%20notification%20of%20deep%20changes%20in%20an%20object%20graph%20to%20all%20elements%0A%20%20%20*%20bound%20to%20the%20same%20object%20graph.%0A%20%20%20*%0A%20%20%20*%20In%20cases%20where%20neither%20immutable%20patterns%20nor%20the%20data%20mutation%20API%20can%20be%0A%20%20%20*%20used%2C%20applying%20this%20mixin%20will%20allow%20Polymer%20to%20skip%20dirty%20checking%20for%0A%20%20%20*%20objects%20and%20arrays%20(always%20consider%20them%20to%20be%20%22dirty%22).%20%20This%20allows%20a%0A%20%20%20*%20user%20to%20make%20a%20deep%20modification%20to%20a%20bound%20object%20graph%2C%20and%20then%20either%0A%20%20%20*%20simply%20re-set%20the%20object%20(e.g.%20%60this.items%20%3D%20this.items%60)%20or%20call%20%60notifyPath%60%0A%20%20%20*%20(e.g.%20%60this.notifyPath('items')%60)%20to%20update%20the%20tree.%20%20Note%20that%20all%0A%20%20%20*%20elements%20that%20wish%20to%20be%20updated%20based%20on%20deep%20mutations%20must%20apply%20this%0A%20%20%20*%20mixin%20or%20otherwise%20skip%20strict%20dirty%20checking%20for%20objects%2Farrays.%0A%20%20%20*%20Specifically%2C%20any%20elements%20in%20the%20binding%20tree%20between%20the%20source%20of%20a%0A%20%20%20*%20mutation%20and%20the%20consumption%20of%20it%20must%20enable%20this%20mixin%20or%20apply%20the%0A%20%20%20*%20%60Polymer.MutableData%60%20mixin.%0A%20%20%20*%0A%20%20%20*%20While%20this%20mixin%20adds%20the%20ability%20to%20forgo%20Object%2FArray%20dirty%20checking%2C%0A%20%20%20*%20the%20%60mutableData%60%20flag%20defaults%20to%20false%20and%20must%20be%20set%20on%20the%20instance.%0A%20%20%20*%0A%20%20%20*%20Note%2C%20the%20performance%20characteristics%20of%20propagating%20large%20object%20graphs%0A%20%20%20*%20will%20be%20worse%20by%20relying%20on%20%60mutableData%3A%20true%60%20as%20opposed%20to%20using%0A%20%20%20*%20strict%20dirty%20checking%20with%20immutable%20patterns%20or%20Polymer's%20path%20notification%0A%20%20%20*%20API.%0A%20%20%20*%0A%20%20%20*%20%40mixinFunction%0A%20%20%20*%20%40polymer%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Element%20class%20mixin%20to%20optionally%20skip%20strict%20dirty-checking%0A%20%20%20*%20%20%20for%20objects%20and%20arrays%0A%20%20%20*%2FPolymer.OptionalMutableData%3DPolymer.dedupingMixin(function(superClass)%7B%2F**%0A%20%20%20%20%20*%20%40mixinClass%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_OptionalMutableData%7D%0A%20%20%20%20%20*%2Fvar%20OptionalMutableData%3Dfunction(_superClass2)%7B_inherits(OptionalMutableData%2C_superClass2)%3Bfunction%20OptionalMutableData()%7B_classCallCheck(this%2COptionalMutableData)%3Breturn%20_possibleConstructorReturn(this%2C(OptionalMutableData.__proto__%7C%7CObject.getPrototypeOf(OptionalMutableData)).apply(this%2Carguments))%3B%7D_createClass(OptionalMutableData%2C%5B%7Bkey%3A'_shouldPropertyChange'%2C%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20%60Polymer.PropertyEffects%60%20to%20provide%20option%20for%20skipping%0A%20%20%20%20%20%20%20*%20strict%20equality%20checking%20for%20Objects%20and%20Arrays.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20When%20%60this.mutableData%60%20is%20true%20on%20this%20instance%2C%20this%20method%0A%20%20%20%20%20%20%20*%20pulls%20the%20value%20to%20dirty%20check%20against%20from%20the%20%60__dataTemp%60%20cache%0A%20%20%20%20%20%20%20*%20(rather%20than%20the%20normal%20%60__data%60%20cache)%20for%20Objects.%20%20Since%20the%20temp%0A%20%20%20%20%20%20%20*%20cache%20is%20cleared%20at%20the%20end%20of%20a%20turn%2C%20this%20implementation%20allows%0A%20%20%20%20%20%20%20*%20side-effects%20of%20deep%20object%20changes%20to%20be%20processed%20by%20re-setting%20the%0A%20%20%20%20%20%20%20*%20same%20object%20(using%20the%20temp%20cache%20as%20an%20in-turn%20backstop%20to%20prevent%0A%20%20%20%20%20%20%20*%20cycles%20due%20to%202-way%20notification).%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20New%20property%20value%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20old%20Previous%20property%20value%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Whether%20the%20property%20should%20be%20considered%20a%20change%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_shouldPropertyChange(property%2Cvalue%2Cold)%7Breturn%20mutablePropertyChange(this%2Cproperty%2Cvalue%2Cold%2Cthis.mutableData)%3B%7D%7D%5D%2C%5B%7Bkey%3A'properties'%2Cget%3Afunction%20get()%7Breturn%7B%2F**%0A%20%20%20%20%20%20%20%20%20%20%20*%20Instance-level%20flag%20for%20configuring%20the%20dirty-checking%20strategy%0A%20%20%20%20%20%20%20%20%20%20%20*%20for%20this%20element.%20%20When%20true%2C%20Objects%20and%20Arrays%20will%20skip%20dirty%0A%20%20%20%20%20%20%20%20%20%20%20*%20checking%2C%20otherwise%20strict%20equality%20checking%20will%20be%20used.%0A%20%20%20%20%20%20%20%20%20%20%20*%2FmutableData%3ABoolean%7D%3B%7D%7D%5D)%3Breturn%20OptionalMutableData%3B%7D(superClass)%3Breturn%20OptionalMutableData%3B%7D)%3B%2F%2F%20Export%20for%20use%20by%20legacy%20behavior%0APolymer.MutableData._mutablePropertyChange%3DmutablePropertyChange%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Fmixins%2Fmutable-data.html.js%0A",
            "totalBytes": 10198,
            "wastedBytes": 6963,
            "wastedPercent": 68.27809374387135
          },
          {
            "url": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3Bvar%20mutablePropertyChange%3Dvoid%200%3B%2F**%20%40suppress%20%7BmissingProperties%7D%20*%2F(function()%7BmutablePropertyChange%3DPolymer.MutableData._mutablePropertyChange%3B%7D)()%3B%2F**%0A%20%20%20*%20Legacy%20element%20behavior%20to%20skip%20strict%20dirty-checking%20for%20objects%20and%20arrays%2C%0A%20%20%20*%20(always%20consider%20them%20to%20be%20%22dirty%22)%20for%20use%20on%20legacy%20API%20Polymer%20elements.%0A%20%20%20*%0A%20%20%20*%20By%20default%2C%20%60Polymer.PropertyEffects%60%20performs%20strict%20dirty%20checking%20on%0A%20%20%20*%20objects%2C%20which%20means%20that%20any%20deep%20modifications%20to%20an%20object%20or%20array%20will%0A%20%20%20*%20not%20be%20propagated%20unless%20%22immutable%22%20data%20patterns%20are%20used%20(i.e.%20all%20object%0A%20%20%20*%20references%20from%20the%20root%20to%20the%20mutation%20were%20changed).%0A%20%20%20*%0A%20%20%20*%20Polymer%20also%20provides%20a%20proprietary%20data%20mutation%20and%20path%20notification%20API%0A%20%20%20*%20(e.g.%20%60notifyPath%60%2C%20%60set%60%2C%20and%20array%20mutation%20API's)%20that%20allow%20efficient%0A%20%20%20*%20mutation%20and%20notification%20of%20deep%20changes%20in%20an%20object%20graph%20to%20all%20elements%0A%20%20%20*%20bound%20to%20the%20same%20object%20graph.%0A%20%20%20*%0A%20%20%20*%20In%20cases%20where%20neither%20immutable%20patterns%20nor%20the%20data%20mutation%20API%20can%20be%0A%20%20%20*%20used%2C%20applying%20this%20mixin%20will%20cause%20Polymer%20to%20skip%20dirty%20checking%20for%0A%20%20%20*%20objects%20and%20arrays%20(always%20consider%20them%20to%20be%20%22dirty%22).%20%20This%20allows%20a%0A%20%20%20*%20user%20to%20make%20a%20deep%20modification%20to%20a%20bound%20object%20graph%2C%20and%20then%20either%0A%20%20%20*%20simply%20re-set%20the%20object%20(e.g.%20%60this.items%20%3D%20this.items%60)%20or%20call%20%60notifyPath%60%0A%20%20%20*%20(e.g.%20%60this.notifyPath('items')%60)%20to%20update%20the%20tree.%20%20Note%20that%20all%0A%20%20%20*%20elements%20that%20wish%20to%20be%20updated%20based%20on%20deep%20mutations%20must%20apply%20this%0A%20%20%20*%20mixin%20or%20otherwise%20skip%20strict%20dirty%20checking%20for%20objects%2Farrays.%0A%20%20%20*%20Specifically%2C%20any%20elements%20in%20the%20binding%20tree%20between%20the%20source%20of%20a%0A%20%20%20*%20mutation%20and%20the%20consumption%20of%20it%20must%20apply%20this%20behavior%20or%20enable%20the%0A%20%20%20*%20%60Polymer.OptionalMutableDataBehavior%60.%0A%20%20%20*%0A%20%20%20*%20In%20order%20to%20make%20the%20dirty%20check%20strategy%20configurable%2C%20see%0A%20%20%20*%20%60Polymer.OptionalMutableDataBehavior%60.%0A%20%20%20*%0A%20%20%20*%20Note%2C%20the%20performance%20characteristics%20of%20propagating%20large%20object%20graphs%0A%20%20%20*%20will%20be%20worse%20as%20opposed%20to%20using%20strict%20dirty%20checking%20with%20immutable%0A%20%20%20*%20patterns%20or%20Polymer's%20path%20notification%20API.%0A%20%20%20*%0A%20%20%20*%20%40polymerBehavior%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Behavior%20to%20skip%20strict%20dirty-checking%20for%20objects%20and%0A%20%20%20*%20%20%20arrays%0A%20%20%20*%2FPolymer.MutableDataBehavior%3D%7B%2F**%0A%20%20%20%20%20*%20Overrides%20%60Polymer.PropertyEffects%60%20to%20provide%20option%20for%20skipping%0A%20%20%20%20%20*%20strict%20equality%20checking%20for%20Objects%20and%20Arrays.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20This%20method%20pulls%20the%20value%20to%20dirty%20check%20against%20from%20the%20%60__dataTemp%60%0A%20%20%20%20%20*%20cache%20(rather%20than%20the%20normal%20%60__data%60%20cache)%20for%20Objects.%20%20Since%20the%20temp%0A%20%20%20%20%20*%20cache%20is%20cleared%20at%20the%20end%20of%20a%20turn%2C%20this%20implementation%20allows%0A%20%20%20%20%20*%20side-effects%20of%20deep%20object%20changes%20to%20be%20processed%20by%20re-setting%20the%0A%20%20%20%20%20*%20same%20object%20(using%20the%20temp%20cache%20as%20an%20in-turn%20backstop%20to%20prevent%0A%20%20%20%20%20*%20cycles%20due%20to%202-way%20notification).%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20New%20property%20value%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20old%20Previous%20property%20value%0A%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Whether%20the%20property%20should%20be%20considered%20a%20change%0A%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20*%2F_shouldPropertyChange%3Afunction%20_shouldPropertyChange(property%2Cvalue%2Cold)%7Breturn%20mutablePropertyChange(this%2Cproperty%2Cvalue%2Cold%2Ctrue)%3B%7D%7D%3B%2F**%0A%20%20%20*%20Legacy%20element%20behavior%20to%20add%20the%20optional%20ability%20to%20skip%20strict%0A%20%20%20*%20dirty-checking%20for%20objects%20and%20arrays%20(always%20consider%20them%20to%20be%0A%20%20%20*%20%22dirty%22)%20by%20setting%20a%20%60mutable-data%60%20attribute%20on%20an%20element%20instance.%0A%20%20%20*%0A%20%20%20*%20By%20default%2C%20%60Polymer.PropertyEffects%60%20performs%20strict%20dirty%20checking%20on%0A%20%20%20*%20objects%2C%20which%20means%20that%20any%20deep%20modifications%20to%20an%20object%20or%20array%20will%0A%20%20%20*%20not%20be%20propagated%20unless%20%22immutable%22%20data%20patterns%20are%20used%20(i.e.%20all%20object%0A%20%20%20*%20references%20from%20the%20root%20to%20the%20mutation%20were%20changed).%0A%20%20%20*%0A%20%20%20*%20Polymer%20also%20provides%20a%20proprietary%20data%20mutation%20and%20path%20notification%20API%0A%20%20%20*%20(e.g.%20%60notifyPath%60%2C%20%60set%60%2C%20and%20array%20mutation%20API's)%20that%20allow%20efficient%0A%20%20%20*%20mutation%20and%20notification%20of%20deep%20changes%20in%20an%20object%20graph%20to%20all%20elements%0A%20%20%20*%20bound%20to%20the%20same%20object%20graph.%0A%20%20%20*%0A%20%20%20*%20In%20cases%20where%20neither%20immutable%20patterns%20nor%20the%20data%20mutation%20API%20can%20be%0A%20%20%20*%20used%2C%20applying%20this%20mixin%20will%20allow%20Polymer%20to%20skip%20dirty%20checking%20for%0A%20%20%20*%20objects%20and%20arrays%20(always%20consider%20them%20to%20be%20%22dirty%22).%20%20This%20allows%20a%0A%20%20%20*%20user%20to%20make%20a%20deep%20modification%20to%20a%20bound%20object%20graph%2C%20and%20then%20either%0A%20%20%20*%20simply%20re-set%20the%20object%20(e.g.%20%60this.items%20%3D%20this.items%60)%20or%20call%20%60notifyPath%60%0A%20%20%20*%20(e.g.%20%60this.notifyPath('items')%60)%20to%20update%20the%20tree.%20%20Note%20that%20all%0A%20%20%20*%20elements%20that%20wish%20to%20be%20updated%20based%20on%20deep%20mutations%20must%20apply%20this%0A%20%20%20*%20mixin%20or%20otherwise%20skip%20strict%20dirty%20checking%20for%20objects%2Farrays.%0A%20%20%20*%20Specifically%2C%20any%20elements%20in%20the%20binding%20tree%20between%20the%20source%20of%20a%0A%20%20%20*%20mutation%20and%20the%20consumption%20of%20it%20must%20enable%20this%20behavior%20or%20apply%20the%0A%20%20%20*%20%60Polymer.OptionalMutableDataBehavior%60.%0A%20%20%20*%0A%20%20%20*%20While%20this%20behavior%20adds%20the%20ability%20to%20forgo%20Object%2FArray%20dirty%20checking%2C%0A%20%20%20*%20the%20%60mutableData%60%20flag%20defaults%20to%20false%20and%20must%20be%20set%20on%20the%20instance.%0A%20%20%20*%0A%20%20%20*%20Note%2C%20the%20performance%20characteristics%20of%20propagating%20large%20object%20graphs%0A%20%20%20*%20will%20be%20worse%20by%20relying%20on%20%60mutableData%3A%20true%60%20as%20opposed%20to%20using%0A%20%20%20*%20strict%20dirty%20checking%20with%20immutable%20patterns%20or%20Polymer's%20path%20notification%0A%20%20%20*%20API.%0A%20%20%20*%0A%20%20%20*%20%40polymerBehavior%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Behavior%20to%20optionally%20skip%20strict%20dirty-checking%20for%20objects%20and%0A%20%20%20*%20%20%20arrays%0A%20%20%20*%2FPolymer.OptionalMutableDataBehavior%3D%7Bproperties%3A%7B%2F**%0A%20%20%20%20%20%20%20*%20Instance-level%20flag%20for%20configuring%20the%20dirty-checking%20strategy%0A%20%20%20%20%20%20%20*%20for%20this%20element.%20%20When%20true%2C%20Objects%20and%20Arrays%20will%20skip%20dirty%0A%20%20%20%20%20%20%20*%20checking%2C%20otherwise%20strict%20equality%20checking%20will%20be%20used.%0A%20%20%20%20%20%20%20*%2FmutableData%3ABoolean%7D%2C%2F**%0A%20%20%20%20%20*%20Overrides%20%60Polymer.PropertyEffects%60%20to%20skip%20strict%20equality%20checking%0A%20%20%20%20%20*%20for%20Objects%20and%20Arrays.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Pulls%20the%20value%20to%20dirty%20check%20against%20from%20the%20%60__dataTemp%60%20cache%0A%20%20%20%20%20*%20(rather%20than%20the%20normal%20%60__data%60%20cache)%20for%20Objects.%20%20Since%20the%20temp%0A%20%20%20%20%20*%20cache%20is%20cleared%20at%20the%20end%20of%20a%20turn%2C%20this%20implementation%20allows%0A%20%20%20%20%20*%20side-effects%20of%20deep%20object%20changes%20to%20be%20processed%20by%20re-setting%20the%0A%20%20%20%20%20*%20same%20object%20(using%20the%20temp%20cache%20as%20an%20in-turn%20backstop%20to%20prevent%0A%20%20%20%20%20*%20cycles%20due%20to%202-way%20notification).%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20New%20property%20value%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20old%20Previous%20property%20value%0A%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Whether%20the%20property%20should%20be%20considered%20a%20change%0A%20%20%20%20%20*%20%40this%20%7Bthis%7D%0A%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20*%2F_shouldPropertyChange%3Afunction%20_shouldPropertyChange(property%2Cvalue%2Cold)%7Breturn%20mutablePropertyChange(this%2Cproperty%2Cvalue%2Cold%2Cthis.mutableData)%3B%7D%7D%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Flegacy%2Fmutable-data-behavior.html.js%0A",
            "totalBytes": 6798,
            "wastedBytes": 6278,
            "wastedPercent": 92.35069137981759
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7D(function()%7B'use%20strict'%3Bvar%20p%3DElement.prototype%3B%2F**%0A%20%20%20*%20%40const%20%7Bfunction(this%3ANode%2C%20string)%3A%20boolean%7D%0A%20%20%20*%2Fvar%20normalizedMatchesSelector%3Dp.matches%7C%7Cp.matchesSelector%7C%7Cp.mozMatchesSelector%7C%7Cp.msMatchesSelector%7C%7Cp.oMatchesSelector%7C%7Cp.webkitMatchesSelector%3B%2F**%0A%20%20%20*%20Cross-platform%20%60element.matches%60%20shim.%0A%20%20%20*%0A%20%20%20*%20%40function%20matchesSelector%0A%20%20%20*%20%40memberof%20Polymer.dom%0A%20%20%20*%20%40param%20%7B!Node%7D%20node%20Node%20to%20check%20selector%20against%0A%20%20%20*%20%40param%20%7Bstring%7D%20selector%20Selector%20to%20match%0A%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20node%20matched%20selector%0A%20%20%20*%2Fvar%20matchesSelector%3Dfunction%20matchesSelector(node%2Cselector)%7Breturn%20normalizedMatchesSelector.call(node%2Cselector)%3B%7D%3B%2F**%0A%20%20%20*%20Node%20API%20wrapper%20class%20returned%20from%20%60Polymer.dom.(target)%60%20when%0A%20%20%20*%20%60target%60%20is%20a%20%60Node%60.%0A%20%20%20*%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%2Fvar%20DomApi%3Dfunction()%7B%2F**%0A%20%20%20%20%20*%20%40param%20%7BNode%7D%20node%20Node%20for%20which%20to%20create%20a%20Polymer.dom%20helper%20object.%0A%20%20%20%20%20*%2Ffunction%20DomApi(node)%7B_classCallCheck(this%2CDomApi)%3Bthis.node%3Dnode%3B%7D%2F**%0A%20%20%20%20%20*%20Returns%20an%20instance%20of%20%60Polymer.FlattenedNodesObserver%60%20that%0A%20%20%20%20%20*%20listens%20for%20node%20changes%20on%20this%20element.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7Bfunction(!Element%2C%20%7B%20target%3A%20!Element%2C%20addedNodes%3A%20!Array%3C!Element%3E%2C%20removedNodes%3A%20!Array%3C!Element%3E%20%7D)%3Avoid%7D%20callback%20Called%20when%20direct%20or%20distributed%20children%0A%20%20%20%20%20*%20%20%20of%20this%20element%20changes%0A%20%20%20%20%20*%20%40return%20%7B!Polymer.FlattenedNodesObserver%7D%20Observer%20instance%0A%20%20%20%20%20*%2F_createClass(DomApi%2C%5B%7Bkey%3A'observeNodes'%2Cvalue%3Afunction%20observeNodes(callback)%7Breturn%20new%20Polymer.FlattenedNodesObserver(this.node%2Ccallback)%3B%7D%2F**%0A%20%20%20%20%20*%20Disconnects%20an%20observer%20previously%20created%20via%20%60observeNodes%60%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7B!Polymer.FlattenedNodesObserver%7D%20observerHandle%20Observer%20instance%0A%20%20%20%20%20*%20%20%20to%20disconnect.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'unobserveNodes'%2Cvalue%3Afunction%20unobserveNodes(observerHandle)%7BobserverHandle.disconnect()%3B%7D%2F**%0A%20%20%20%20%20*%20Provided%20as%20a%20backwards-compatible%20API%20only.%20%20This%20method%20does%20nothing.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'notifyObserver'%2Cvalue%3Afunction%20notifyObserver()%7B%7D%2F**%0A%20%20%20%20%20*%20Returns%20true%20if%20the%20provided%20node%20is%20contained%20with%20this%20element's%0A%20%20%20%20%20*%20light-DOM%20children%20or%20shadow%20root%2C%20including%20any%20nested%20shadow%20roots%0A%20%20%20%20%20*%20of%20children%20therein.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7BNode%7D%20node%20Node%20to%20test%0A%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Returns%20true%20if%20the%20given%20%60node%60%20is%20contained%20within%0A%20%20%20%20%20*%20%20%20this%20element's%20light%20or%20shadow%20DOM.%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'deepContains'%2Cvalue%3Afunction%20deepContains(node)%7Bif(this.node.contains(node))%7Breturn%20true%3B%7Dvar%20n%3Dnode%3Bvar%20doc%3Dnode.ownerDocument%3B%2F%2F%20walk%20from%20node%20to%20%60this%60%20or%20%60document%60%0Awhile(n%26%26n!%3D%3Ddoc%26%26n!%3D%3Dthis.node)%7B%2F%2F%20use%20logical%20parentnode%2C%20or%20native%20ShadowRoot%20host%0An%3Dn.parentNode%7C%7Cn.host%3B%7Dreturn%20n%3D%3D%3Dthis.node%3B%7D%2F**%0A%20%20%20%20%20*%20Returns%20the%20root%20node%20of%20this%20node.%20%20Equivalent%20to%20%60getRoodNode()%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40return%20%7BNode%7D%20Top%20most%20element%20in%20the%20dom%20tree%20in%20which%20the%20node%0A%20%20%20%20%20*%20exists.%20If%20the%20node%20is%20connected%20to%20a%20document%20this%20is%20either%20a%0A%20%20%20%20%20*%20shadowRoot%20or%20the%20document%3B%20otherwise%2C%20it%20may%20be%20the%20node%0A%20%20%20%20%20*%20itself%20or%20a%20node%20or%20document%20fragment%20containing%20it.%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'getOwnerRoot'%2Cvalue%3Afunction%20getOwnerRoot()%7Breturn%20this.node.getRootNode()%3B%7D%2F**%0A%20%20%20%20%20*%20For%20slot%20elements%2C%20returns%20the%20nodes%20assigned%20to%20the%20slot%3B%20otherwise%0A%20%20%20%20%20*%20an%20empty%20array.%20It%20is%20equivalent%20to%20%60%3Cslot%3E.addignedNodes(%7Bflatten%3Atrue%7D)%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40return%20%7B!Array%3C!Node%3E%7D%20Array%20of%20assigned%20nodes%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'getDistributedNodes'%2Cvalue%3Afunction%20getDistributedNodes()%7Breturn%20this.node.localName%3D%3D%3D'slot'%3Fthis.node.assignedNodes(%7Bflatten%3Atrue%7D)%3A%5B%5D%3B%7D%2F**%0A%20%20%20%20%20*%20Returns%20an%20array%20of%20all%20slots%20this%20element%20was%20distributed%20to.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40return%20%7B!Array%3C!HTMLSlotElement%3E%7D%20Description%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'getDestinationInsertionPoints'%2Cvalue%3Afunction%20getDestinationInsertionPoints()%7Bvar%20ip%24%3D%5B%5D%3Bvar%20n%3Dthis.node.assignedSlot%3Bwhile(n)%7Bip%24.push(n)%3Bn%3Dn.assignedSlot%3B%7Dreturn%20ip%24%3B%7D%2F**%0A%20%20%20%20%20*%20Calls%20%60importNode%60%20on%20the%20%60ownerDocument%60%20for%20this%20node.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7B!Node%7D%20node%20Node%20to%20import%0A%20%20%20%20%20*%20%40param%20%7Bboolean%7D%20deep%20True%20if%20the%20node%20should%20be%20cloned%20deeply%20during%0A%20%20%20%20%20*%20%20%20import%0A%20%20%20%20%20*%20%40return%20%7BNode%7D%20Clone%20of%20given%20node%20imported%20to%20this%20owner%20document%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'importNode'%2Cvalue%3Afunction%20importNode(node%2Cdeep)%7Bvar%20doc%3Dthis.node%20instanceof%20Document%3Fthis.node%3Athis.node.ownerDocument%3Breturn%20doc.importNode(node%2Cdeep)%3B%7D%2F**%0A%20%20%20%20%20*%20%40return%20%7B!Array%3C!Node%3E%7D%20Returns%20a%20flattened%20list%20of%20all%20child%20nodes%20and%0A%20%20%20%20%20*%20nodes%20assigned%20to%20child%20slots.%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'getEffectiveChildNodes'%2Cvalue%3Afunction%20getEffectiveChildNodes()%7Breturn%20Polymer.FlattenedNodesObserver.getFlattenedNodes(this.node)%3B%7D%2F**%0A%20%20%20%20%20*%20Returns%20a%20filtered%20list%20of%20flattened%20child%20elements%20for%20this%20element%20based%0A%20%20%20%20%20*%20on%20the%20given%20selector.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20selector%20Selector%20to%20filter%20nodes%20against%0A%20%20%20%20%20*%20%40return%20%7B!Array%3C!HTMLElement%3E%7D%20List%20of%20flattened%20child%20elements%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'queryDistributedElements'%2Cvalue%3Afunction%20queryDistributedElements(selector)%7Bvar%20c%24%3Dthis.getEffectiveChildNodes()%3Bvar%20list%3D%5B%5D%3Bfor(var%20i%3D0%2Cl%3Dc%24.length%2Cc%3Bi%3Cl%26%26(c%3Dc%24%5Bi%5D)%3Bi%2B%2B)%7Bif(c.nodeType%3D%3D%3DNode.ELEMENT_NODE%26%26matchesSelector(c%2Cselector))%7Blist.push(c)%3B%7D%7Dreturn%20list%3B%7D%2F**%0A%20%20%20%20%20*%20For%20shadow%20roots%2C%20returns%20the%20currently%20focused%20element%20within%20this%0A%20%20%20%20%20*%20shadow%20root.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40return%20%7BNode%7Cundefined%7D%20Currently%20focused%20element%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'activeElement'%2Cget%3Afunction%20get()%7Bvar%20node%3Dthis.node%3Breturn%20node._activeElement!%3D%3Dundefined%3Fnode._activeElement%3Anode.activeElement%3B%7D%7D%5D)%3Breturn%20DomApi%3B%7D()%3Bfunction%20forwardMethods(proto%2Cmethods)%7Bvar%20_loop%3Dfunction%20_loop(i)%7Bvar%20method%3Dmethods%5Bi%5D%3B%2F*%20eslint-disable%20valid-jsdoc%20*%2Fproto%5Bmethod%5D%3D%2F**%20%40this%20%7BDomApi%7D%20*%2Ffunction()%7Breturn%20this.node%5Bmethod%5D.apply(this.node%2Carguments)%3B%7D%3B%2F*%20eslint-enable%20*%2F%7D%3Bfor(var%20i%3D0%3Bi%3Cmethods.length%3Bi%2B%2B)%7B_loop(i)%3B%7D%7Dfunction%20forwardReadOnlyProperties(proto%2Cproperties)%7Bvar%20_loop2%3Dfunction%20_loop2(i)%7Bvar%20name%3Dproperties%5Bi%5D%3BObject.defineProperty(proto%2Cname%2C%7Bget%3Afunction%20get()%7Bvar%20domApi%3D%2F**%20%40type%20%7BDomApi%7D%20*%2Fthis%3Breturn%20domApi.node%5Bname%5D%3B%7D%2Cconfigurable%3Atrue%7D)%3B%7D%3Bfor(var%20i%3D0%3Bi%3Cproperties.length%3Bi%2B%2B)%7B_loop2(i)%3B%7D%7Dfunction%20forwardProperties(proto%2Cproperties)%7Bvar%20_loop3%3Dfunction%20_loop3(i)%7Bvar%20name%3Dproperties%5Bi%5D%3BObject.defineProperty(proto%2Cname%2C%7Bget%3Afunction%20get()%7Bvar%20domApi%3D%2F**%20%40type%20%7BDomApi%7D%20*%2Fthis%3Breturn%20domApi.node%5Bname%5D%3B%7D%2Cset%3Afunction%20set(value)%7B%2F**%20%40type%20%7BDomApi%7D%20*%2Fthis.node%5Bname%5D%3Dvalue%3B%7D%2Cconfigurable%3Atrue%7D)%3B%7D%3Bfor(var%20i%3D0%3Bi%3Cproperties.length%3Bi%2B%2B)%7B_loop3(i)%3B%7D%7DforwardMethods(DomApi.prototype%2C%5B'cloneNode'%2C'appendChild'%2C'insertBefore'%2C'removeChild'%2C'replaceChild'%2C'setAttribute'%2C'removeAttribute'%2C'querySelector'%2C'querySelectorAll'%5D)%3BforwardReadOnlyProperties(DomApi.prototype%2C%5B'parentNode'%2C'firstChild'%2C'lastChild'%2C'nextSibling'%2C'previousSibling'%2C'firstElementChild'%2C'lastElementChild'%2C'nextElementSibling'%2C'previousElementSibling'%2C'childNodes'%2C'children'%2C'classList'%5D)%3BforwardProperties(DomApi.prototype%2C%5B'textContent'%2C'innerHTML'%5D)%3B%2F**%0A%20%20%20*%20Event%20API%20wrapper%20class%20returned%20from%20%60Polymer.dom.(target)%60%20when%0A%20%20%20*%20%60target%60%20is%20an%20%60Event%60.%0A%20%20%20*%2Fvar%20EventApi%3Dfunction()%7Bfunction%20EventApi(event)%7B_classCallCheck(this%2CEventApi)%3Bthis.event%3Devent%3B%7D%2F**%0A%20%20%20%20%20*%20Returns%20the%20first%20node%20on%20the%20%60composedPath%60%20of%20this%20event.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40return%20%7B!EventTarget%7D%20The%20node%20this%20event%20was%20dispatched%20to%0A%20%20%20%20%20*%2F_createClass(EventApi%2C%5B%7Bkey%3A'rootTarget'%2Cget%3Afunction%20get()%7Breturn%20this.event.composedPath()%5B0%5D%3B%7D%2F**%0A%20%20%20%20%20*%20Returns%20the%20local%20(re-targeted)%20target%20for%20this%20event.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40return%20%7B!EventTarget%7D%20The%20local%20(re-targeted)%20target%20for%20this%20event.%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'localTarget'%2Cget%3Afunction%20get()%7Breturn%20this.event.target%3B%7D%2F**%0A%20%20%20%20%20*%20Returns%20the%20%60composedPath%60%20for%20this%20event.%0A%20%20%20%20%20*%20%40return%20%7B!Array%3C!EventTarget%3E%7D%20The%20nodes%20this%20event%20propagated%20through%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'path'%2Cget%3Afunction%20get()%7Breturn%20this.event.composedPath()%3B%7D%7D%5D)%3Breturn%20EventApi%3B%7D()%3BPolymer.DomApi%3DDomApi%3B%2F**%0A%20%20%20*%20%40function%0A%20%20%20*%20%40param%20%7Bboolean%3D%7D%20deep%0A%20%20%20*%20%40return%20%7B!Node%7D%0A%20%20%20*%2FPolymer.DomApi.prototype.cloneNode%3B%2F**%0A%20%20%20*%20%40function%0A%20%20%20*%20%40param%20%7B!Node%7D%20node%0A%20%20%20*%20%40return%20%7B!Node%7D%0A%20%20%20*%2FPolymer.DomApi.prototype.appendChild%3B%2F**%0A%20%20%20*%20%40function%0A%20%20%20*%20%40param%20%7B!Node%7D%20newChild%0A%20%20%20*%20%40param%20%7BNode%7D%20refChild%0A%20%20%20*%20%40return%20%7B!Node%7D%0A%20%20%20*%2FPolymer.DomApi.prototype.insertBefore%3B%2F**%0A%20%20%20*%20%40function%0A%20%20%20*%20%40param%20%7B!Node%7D%20node%0A%20%20%20*%20%40return%20%7B!Node%7D%0A%20%20%20*%2FPolymer.DomApi.prototype.removeChild%3B%2F**%0A%20%20%20*%20%40function%0A%20%20%20*%20%40param%20%7B!Node%7D%20oldChild%0A%20%20%20*%20%40param%20%7B!Node%7D%20newChild%0A%20%20%20*%20%40return%20%7B!Node%7D%0A%20%20%20*%2FPolymer.DomApi.prototype.replaceChild%3B%2F**%0A%20%20%20*%20%40function%0A%20%20%20*%20%40param%20%7Bstring%7D%20name%0A%20%20%20*%20%40param%20%7Bstring%7D%20value%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%2FPolymer.DomApi.prototype.setAttribute%3B%2F**%0A%20%20%20*%20%40function%0A%20%20%20*%20%40param%20%7Bstring%7D%20name%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%2FPolymer.DomApi.prototype.removeAttribute%3B%2F**%0A%20%20%20*%20%40function%0A%20%20%20*%20%40param%20%7Bstring%7D%20selector%0A%20%20%20*%20%40return%20%7B%3FElement%7D%0A%20%20%20*%2FPolymer.DomApi.prototype.querySelector%3B%2F**%0A%20%20%20*%20%40function%0A%20%20%20*%20%40param%20%7Bstring%7D%20selector%0A%20%20%20*%20%40return%20%7B!NodeList%3C!Element%3E%7D%0A%20%20%20*%2FPolymer.DomApi.prototype.querySelectorAll%3B%2F**%0A%20%20%20*%20Legacy%20DOM%20and%20Event%20manipulation%20API%20wrapper%20factory%20used%20to%20abstract%0A%20%20%20*%20differences%20between%20native%20Shadow%20DOM%20and%20%22Shady%20DOM%22%20when%20polyfilling%20on%0A%20%20%20*%20older%20browsers.%0A%20%20%20*%0A%20%20%20*%20Note%20that%20in%20Polymer%202.x%20use%20of%20%60Polymer.dom%60%20is%20no%20longer%20required%20and%0A%20%20%20*%20in%20the%20majority%20of%20cases%20simply%20facades%20directly%20to%20the%20standard%20native%0A%20%20%20*%20API.%0A%20%20%20*%0A%20%20%20*%20%40namespace%0A%20%20%20*%20%40summary%20Legacy%20DOM%20and%20Event%20manipulation%20API%20wrapper%20factory%20used%20to%0A%20%20%20*%20abstract%20differences%20between%20native%20Shadow%20DOM%20and%20%22Shady%20DOM.%22%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40param%20%7B(Node%7CEvent)%3D%7D%20obj%20Node%20or%20event%20to%20operate%20on%0A%20%20%20*%20%40return%20%7B!DomApi%7C!EventApi%7D%20Wrapper%20providing%20either%20node%20API%20or%20event%20API%0A%20%20%20*%2FPolymer.dom%3Dfunction(obj)%7Bobj%3Dobj%7C%7Cdocument%3Bif(!obj.__domApi)%7Bvar%20helper%3Dvoid%200%3Bif(obj%20instanceof%20Event)%7Bhelper%3Dnew%20EventApi(obj)%3B%7Delse%7Bhelper%3Dnew%20DomApi(obj)%3B%7Dobj.__domApi%3Dhelper%3B%7Dreturn%20obj.__domApi%3B%7D%3BPolymer.dom.matchesSelector%3DmatchesSelector%3B%2F**%0A%20%20%20*%20Forces%20several%20classes%20of%20asynchronously%20queued%20tasks%20to%20flush%3A%0A%20%20%20*%20-%20Debouncers%20added%20via%20%60Polymer.enqueueDebouncer%60%0A%20%20%20*%20-%20ShadyDOM%20distribution%0A%20%20%20*%0A%20%20%20*%20This%20method%20facades%20to%20%60Polymer.flush%60.%0A%20%20%20*%0A%20%20%20*%20%40memberof%20Polymer.dom%0A%20%20%20*%2FPolymer.dom.flush%3DPolymer.flush%3B%2F**%0A%20%20%20*%20Adds%20a%20%60Polymer.Debouncer%60%20to%20a%20list%20of%20globally%20flushable%20tasks.%0A%20%20%20*%0A%20%20%20*%20This%20method%20facades%20to%20%60Polymer.enqueueDebouncer%60.%0A%20%20%20*%0A%20%20%20*%20%40memberof%20Polymer.dom%0A%20%20%20*%20%40param%20%7B!Polymer.Debouncer%7D%20debouncer%20Debouncer%20to%20enqueue%0A%20%20%20*%2FPolymer.dom.addDebouncer%3DPolymer.enqueueDebouncer%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Flegacy%2Fpolymer.dom.html.js%0A",
            "totalBytes": 11133,
            "wastedBytes": 6186,
            "wastedPercent": 55.56453786041497
          },
          {
            "url": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3B%2F**%0A%20%20%20*%20Module%20with%20utilities%20for%20manipulating%20structured%20data%20path%20strings.%0A%20%20%20*%0A%20%20%20*%20%40namespace%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Module%20with%20utilities%20for%20manipulating%20structured%20data%20path%20strings.%0A%20%20%20*%2Fvar%20Path%3D%7B%2F**%0A%20%20%20%20%20*%20Returns%20true%20if%20the%20given%20string%20is%20a%20structured%20data%20path%20(has%20dots).%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%20Polymer.Path.isPath('foo.bar.baz')%20%2F%2F%20true%0A%20%20%20%20%20*%20Polymer.Path.isPath('foo')%20%20%20%20%20%20%20%20%20%2F%2F%20false%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Path%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20path%20Path%20string%0A%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20the%20string%20contained%20one%20or%20more%20dots%0A%20%20%20%20%20*%2FisPath%3Afunction%20isPath(path)%7Breturn%20path.indexOf('.')%3E%3D0%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Returns%20the%20root%20property%20name%20for%20the%20given%20path.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%20Polymer.Path.root('foo.bar.baz')%20%2F%2F%20'foo'%0A%20%20%20%20%20*%20Polymer.Path.root('foo')%20%20%20%20%20%20%20%20%20%2F%2F%20'foo'%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Path%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20path%20Path%20string%0A%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Root%20property%20name%0A%20%20%20%20%20*%2Froot%3Afunction%20root(path)%7Bvar%20dotIndex%3Dpath.indexOf('.')%3Bif(dotIndex%3D%3D%3D-1)%7Breturn%20path%3B%7Dreturn%20path.slice(0%2CdotIndex)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Given%20%60base%60%20is%20%60foo.bar%60%2C%20%60foo%60%20is%20an%20ancestor%2C%20%60foo.bar%60%20is%20not%0A%20%20%20%20%20*%20Returns%20true%20if%20the%20given%20path%20is%20an%20ancestor%20of%20the%20base%20path.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%20Polymer.Path.isAncestor('foo.bar'%2C%20'foo')%20%20%20%20%20%20%20%20%20%2F%2F%20true%0A%20%20%20%20%20*%20Polymer.Path.isAncestor('foo.bar'%2C%20'foo.bar')%20%20%20%20%20%2F%2F%20false%0A%20%20%20%20%20*%20Polymer.Path.isAncestor('foo.bar'%2C%20'foo.bar.baz')%20%2F%2F%20false%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Path%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20base%20Path%20string%20to%20test%20against.%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20path%20Path%20string%20to%20test.%0A%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20%60path%60%20is%20an%20ancestor%20of%20%60base%60.%0A%20%20%20%20%20*%2FisAncestor%3Afunction%20isAncestor(base%2Cpath)%7B%2F%2F%20%20%20%20%20base.startsWith(path%20%2B%20'.')%3B%0Areturn%20base.indexOf(path%2B'.')%3D%3D%3D0%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Given%20%60base%60%20is%20%60foo.bar%60%2C%20%60foo.bar.baz%60%20is%20an%20descendant%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%20Polymer.Path.isDescendant('foo.bar'%2C%20'foo.bar.baz')%20%2F%2F%20true%0A%20%20%20%20%20*%20Polymer.Path.isDescendant('foo.bar'%2C%20'foo.bar')%20%20%20%20%20%2F%2F%20false%0A%20%20%20%20%20*%20Polymer.Path.isDescendant('foo.bar'%2C%20'foo')%20%20%20%20%20%20%20%20%20%2F%2F%20false%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Path%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20base%20Path%20string%20to%20test%20against.%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20path%20Path%20string%20to%20test.%0A%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20%60path%60%20is%20a%20descendant%20of%20%60base%60.%0A%20%20%20%20%20*%2FisDescendant%3Afunction%20isDescendant(base%2Cpath)%7B%2F%2F%20%20%20%20%20path.startsWith(base%20%2B%20'.')%3B%0Areturn%20path.indexOf(base%2B'.')%3D%3D%3D0%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Replaces%20a%20previous%20base%20path%20with%20a%20new%20base%20path%2C%20preserving%20the%0A%20%20%20%20%20*%20remainder%20of%20the%20path.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20User%20must%20ensure%20%60path%60%20has%20a%20prefix%20of%20%60base%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%20Polymer.Path.translate('foo.bar'%2C%20'zot'%2C%20'foo.bar.baz')%20%2F%2F%20'zot.baz'%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Path%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20base%20Current%20base%20string%20to%20remove%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20newBase%20New%20base%20string%20to%20replace%20with%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20path%20Path%20to%20translate%0A%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Translated%20string%0A%20%20%20%20%20*%2Ftranslate%3Afunction%20translate(base%2CnewBase%2Cpath)%7Breturn%20newBase%2Bpath.slice(base.length)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20base%20Path%20string%20to%20test%20against%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20path%20Path%20string%20to%20test%0A%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20%60path%60%20is%20equal%20to%20%60base%60%0A%20%20%20%20%20*%20%40this%20%7BPath%7D%0A%20%20%20%20%20*%2Fmatches%3Afunction%20matches(base%2Cpath)%7Breturn%20base%3D%3D%3Dpath%7C%7Cthis.isAncestor(base%2Cpath)%7C%7Cthis.isDescendant(base%2Cpath)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Converts%20array-based%20paths%20to%20flattened%20path.%20%20String-based%20paths%0A%20%20%20%20%20*%20are%20returned%20as-is.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%20Polymer.Path.normalize(%5B'foo.bar'%2C%200%2C%20'baz'%5D)%20%20%2F%2F%20'foo.bar.0.baz'%0A%20%20%20%20%20*%20Polymer.Path.normalize('foo.bar.0.baz')%20%20%20%20%20%20%20%20%2F%2F%20'foo.bar.0.baz'%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Path%0A%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Input%20path%0A%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Flattened%20path%0A%20%20%20%20%20*%2Fnormalize%3Afunction%20normalize(path)%7Bif(Array.isArray(path))%7Bvar%20parts%3D%5B%5D%3Bfor(var%20i%3D0%3Bi%3Cpath.length%3Bi%2B%2B)%7Bvar%20args%3Dpath%5Bi%5D.toString().split('.')%3Bfor(var%20j%3D0%3Bj%3Cargs.length%3Bj%2B%2B)%7Bparts.push(args%5Bj%5D)%3B%7D%7Dreturn%20parts.join('.')%3B%7Delse%7Breturn%20path%3B%7D%7D%2C%2F**%0A%20%20%20%20%20*%20Splits%20a%20path%20into%20an%20array%20of%20property%20names.%20Accepts%20either%20arrays%0A%20%20%20%20%20*%20of%20path%20parts%20or%20strings.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%20Polymer.Path.split(%5B'foo.bar'%2C%200%2C%20'baz'%5D)%20%20%2F%2F%20%5B'foo'%2C%20'bar'%2C%20'0'%2C%20'baz'%5D%0A%20%20%20%20%20*%20Polymer.Path.split('foo.bar.0.baz')%20%20%20%20%20%20%20%20%2F%2F%20%5B'foo'%2C%20'bar'%2C%20'0'%2C%20'baz'%5D%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Path%0A%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Input%20path%0A%20%20%20%20%20*%20%40return%20%7B!Array%3Cstring%3E%7D%20Array%20of%20path%20parts%0A%20%20%20%20%20*%20%40this%20%7BPath%7D%0A%20%20%20%20%20*%20%40suppress%20%7BcheckTypes%7D%0A%20%20%20%20%20*%2Fsplit%3Afunction%20split(path)%7Bif(Array.isArray(path))%7Breturn%20this.normalize(path).split('.')%3B%7Dreturn%20path.toString().split('.')%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Reads%20a%20value%20from%20a%20path.%20%20If%20any%20sub-property%20in%20the%20path%20is%20%60undefined%60%2C%0A%20%20%20%20%20*%20this%20method%20returns%20%60undefined%60%20(will%20never%20throw.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Path%0A%20%20%20%20%20*%20%40param%20%7BObject%7D%20root%20Object%20from%20which%20to%20dereference%20path%20from%0A%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Path%20to%20read%0A%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20info%20If%20an%20object%20is%20provided%20to%20%60info%60%2C%20the%20normalized%0A%20%20%20%20%20*%20%20(flattened)%20path%20will%20be%20set%20to%20%60info.path%60.%0A%20%20%20%20%20*%20%40return%20%7B*%7D%20Value%20at%20path%2C%20or%20%60undefined%60%20if%20the%20path%20could%20not%20be%0A%20%20%20%20%20*%20%20fully%20dereferenced.%0A%20%20%20%20%20*%20%40this%20%7BPath%7D%0A%20%20%20%20%20*%2Fget%3Afunction%20get(root%2Cpath%2Cinfo)%7Bvar%20prop%3Droot%3Bvar%20parts%3Dthis.split(path)%3B%2F%2F%20Loop%20over%20path%20parts%5B0..n-1%5D%20and%20dereference%0Afor(var%20i%3D0%3Bi%3Cparts.length%3Bi%2B%2B)%7Bif(!prop)%7Breturn%3B%7Dvar%20part%3Dparts%5Bi%5D%3Bprop%3Dprop%5Bpart%5D%3B%7Dif(info)%7Binfo.path%3Dparts.join('.')%3B%7Dreturn%20prop%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Sets%20a%20value%20to%20a%20path.%20%20If%20any%20sub-property%20in%20the%20path%20is%20%60undefined%60%2C%0A%20%20%20%20%20*%20this%20method%20will%20no-op.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Path%0A%20%20%20%20%20*%20%40param%20%7BObject%7D%20root%20Object%20from%20which%20to%20dereference%20path%20from%0A%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Path%20to%20set%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%20to%20path%0A%20%20%20%20%20*%20%40return%20%7Bstring%20%7C%20undefined%7D%20The%20normalized%20version%20of%20the%20input%20path%0A%20%20%20%20%20*%20%40this%20%7BPath%7D%0A%20%20%20%20%20*%2Fset%3Afunction%20set(root%2Cpath%2Cvalue)%7Bvar%20prop%3Droot%3Bvar%20parts%3Dthis.split(path)%3Bvar%20last%3Dparts%5Bparts.length-1%5D%3Bif(parts.length%3E1)%7B%2F%2F%20Loop%20over%20path%20parts%5B0..n-2%5D%20and%20dereference%0Afor(var%20i%3D0%3Bi%3Cparts.length-1%3Bi%2B%2B)%7Bvar%20part%3Dparts%5Bi%5D%3Bprop%3Dprop%5Bpart%5D%3Bif(!prop)%7Breturn%3B%7D%7D%2F%2F%20Set%20value%20to%20object%20at%20end%20of%20path%0Aprop%5Blast%5D%3Dvalue%3B%7Delse%7B%2F%2F%20Simple%20property%20set%0Aprop%5Bpath%5D%3Dvalue%3B%7Dreturn%20parts.join('.')%3B%7D%7D%3B%2F**%0A%20%20%20*%20Returns%20true%20if%20the%20given%20string%20is%20a%20structured%20data%20path%20(has%20dots).%0A%20%20%20*%0A%20%20%20*%20This%20function%20is%20deprecated.%20%20Use%20%60Polymer.Path.isPath%60%20instead.%0A%20%20%20*%0A%20%20%20*%20Example%3A%0A%20%20%20*%0A%20%20%20*%20%60%60%60%0A%20%20%20*%20Polymer.Path.isDeep('foo.bar.baz')%20%2F%2F%20true%0A%20%20%20*%20Polymer.Path.isDeep('foo')%20%20%20%20%20%20%20%20%20%2F%2F%20false%0A%20%20%20*%20%60%60%60%0A%20%20%20*%0A%20%20%20*%20%40deprecated%0A%20%20%20*%20%40memberof%20Polymer.Path%0A%20%20%20*%20%40param%20%7Bstring%7D%20path%20Path%20string%0A%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20the%20string%20contained%20one%20or%20more%20dots%0A%20%20%20*%2FPath.isDeep%3DPath.isPath%3BPolymer.Path%3DPath%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Fpath.html.js%0A",
            "totalBytes": 7136,
            "wastedBytes": 5696,
            "wastedPercent": 79.82062780269058
          },
          {
            "url": "data:text/javascript;charset=utf-8,function%20_toConsumableArray(arr)%7Bif(Array.isArray(arr))%7Bfor(var%20i%3D0%2Carr2%3DArray(arr.length)%3Bi%3Carr.length%3Bi%2B%2B)%7Barr2%5Bi%5D%3Darr%5Bi%5D%3B%7Dreturn%20arr2%3B%7Delse%7Breturn%20Array.from(arr)%3B%7D%7D(function()%7B'use%20strict'%3Bvar%20MODULE_STYLE_LINK_SELECTOR%3D'link%5Brel%3Dimport%5D%5Btype~%3Dcss%5D'%3Bvar%20INCLUDE_ATTR%3D'include'%3Bvar%20SHADY_UNSCOPED_ATTR%3D'shady-unscoped'%3Bfunction%20importModule(moduleId)%7Bvar%2F**%20Polymer.DomModule%20*%2FPolymerDomModule%3DcustomElements.get('dom-module')%3Bif(!PolymerDomModule)%7Breturn%20null%3B%7Dreturn%20PolymerDomModule.import(moduleId)%3B%7Dfunction%20styleForImport(importDoc)%7B%2F%2F%20NOTE%3A%20polyfill%20affordance.%0A%2F%2F%20under%20the%20HTMLImports%20polyfill%2C%20there%20will%20be%20no%20'body'%2C%0A%2F%2F%20but%20the%20import%20pseudo-doc%20can%20be%20used%20directly.%0Avar%20container%3DimportDoc.body%3FimportDoc.body%3AimportDoc%3Bvar%20importCss%3DPolymer.ResolveUrl.resolveCss(container.textContent%2CimportDoc.baseURI)%3Bvar%20style%3Ddocument.createElement('style')%3Bstyle.textContent%3DimportCss%3Breturn%20style%3B%7D%2F**%20%40typedef%20%7B%7Bassetpath%3A%20string%7D%7D%20*%2Fvar%20templateWithAssetPath%3Dvoid%200%3B%2F%2F%20eslint-disable-line%20no-unused-vars%0A%2F**%0A%20%20%20*%20Module%20with%20utilities%20for%20collection%20CSS%20text%20from%20%60%3Ctemplates%3E%60%2C%20external%0A%20%20%20*%20stylesheets%2C%20and%20%60dom-module%60s.%0A%20%20%20*%0A%20%20%20*%20%40namespace%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Module%20with%20utilities%20for%20collection%20CSS%20text%20from%20various%20sources.%0A%20%20%20*%2Fvar%20StyleGather%3D%7B%2F**%0A%20%20%20%20%20*%20Returns%20a%20list%20of%20%3Cstyle%3E%20elements%20in%20a%20space-separated%20list%20of%20%60dom-module%60s.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.StyleGather%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20moduleIds%20List%20of%20dom-module%20id's%20within%20which%20to%0A%20%20%20%20%20*%20search%20for%20css.%0A%20%20%20%20%20*%20%40return%20%7B!Array%3C!HTMLStyleElement%3E%7D%20Array%20of%20contained%20%3Cstyle%3E%20elements%0A%20%20%20%20%20*%20%40this%20%7BStyleGather%7D%0A%20%20%20%20%20*%2FstylesFromModules%3Afunction%20stylesFromModules(moduleIds)%7Bvar%20modules%3DmoduleIds.trim().split(%2F%5Cs%2B%2F)%3Bvar%20styles%3D%5B%5D%3Bfor(var%20i%3D0%3Bi%3Cmodules.length%3Bi%2B%2B)%7Bstyles.push.apply(styles%2C_toConsumableArray(this.stylesFromModule(modules%5Bi%5D)))%3B%7Dreturn%20styles%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Returns%20a%20list%20of%20%3Cstyle%3E%20elements%20in%20a%20given%20%60dom-module%60.%0A%20%20%20%20%20*%20Styles%20in%20a%20%60dom-module%60%20can%20come%20either%20from%20%60%3Cstyle%3E%60s%20within%20the%0A%20%20%20%20%20*%20first%20%60%3Ctemplate%3E%60%2C%20or%20else%20from%20one%20or%20more%0A%20%20%20%20%20*%20%60%3Clink%20rel%3D%22import%22%20type%3D%22css%22%3E%60%20links%20outside%20the%20template.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.StyleGather%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20moduleId%20dom-module%20id%20to%20gather%20styles%20from%0A%20%20%20%20%20*%20%40return%20%7B!Array%3C!HTMLStyleElement%3E%7D%20Array%20of%20contained%20styles.%0A%20%20%20%20%20*%20%40this%20%7BStyleGather%7D%0A%20%20%20%20%20*%2FstylesFromModule%3Afunction%20stylesFromModule(moduleId)%7Bvar%20m%3DimportModule(moduleId)%3Bif(!m)%7Bconsole.warn('Could%20not%20find%20style%20data%20in%20module%20named'%2CmoduleId)%3Breturn%5B%5D%3B%7Dif(m._styles%3D%3D%3Dundefined)%7Bvar%20styles%3D%5B%5D%3B%2F%2F%20module%20imports%3A%20%3Clink%20rel%3D%22import%22%20type%3D%22css%22%3E%0Astyles.push.apply(styles%2C_toConsumableArray(this._stylesFromModuleImports(m)))%3B%2F%2F%20include%20css%20from%20the%20first%20template%20in%20the%20module%0Avar%20template%3Dm.querySelector('template')%3Bif(template)%7Bstyles.push.apply(styles%2C_toConsumableArray(this.stylesFromTemplate(template%2C%2F**%20%40type%20%7BtemplateWithAssetPath%7D%20*%2Fm.assetpath)))%3B%7Dm._styles%3Dstyles%3B%7Dreturn%20m._styles%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Returns%20the%20%60%3Cstyle%3E%60%20elements%20within%20a%20given%20template.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.StyleGather%0A%20%20%20%20%20*%20%40param%20%7B!HTMLTemplateElement%7D%20template%20Template%20to%20gather%20styles%20from%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20baseURI%20baseURI%20for%20style%20content%0A%20%20%20%20%20*%20%40return%20%7B!Array%3C!HTMLStyleElement%3E%7D%20Array%20of%20styles%0A%20%20%20%20%20*%20%40this%20%7BStyleGather%7D%0A%20%20%20%20%20*%2FstylesFromTemplate%3Afunction%20stylesFromTemplate(template%2CbaseURI)%7Bif(!template._styles)%7Bvar%20styles%3D%5B%5D%3B%2F%2F%20if%20element%20is%20a%20template%2C%20get%20content%20from%20its%20.content%0Avar%20e%24%3Dtemplate.content.querySelectorAll('style')%3Bfor(var%20i%3D0%3Bi%3Ce%24.length%3Bi%2B%2B)%7Bvar%20e%3De%24%5Bi%5D%3B%2F%2F%20support%20style%20sharing%20by%20allowing%20styles%20to%20%22include%22%0A%2F%2F%20other%20dom-modules%20that%20contain%20styling%0Avar%20include%3De.getAttribute(INCLUDE_ATTR)%3Bif(include)%7Bstyles.push.apply(styles%2C_toConsumableArray(this.stylesFromModules(include).filter(function(item%2Cindex%2Cself)%7Breturn%20self.indexOf(item)%3D%3D%3Dindex%3B%7D)))%3B%7Dif(baseURI)%7Be.textContent%3DPolymer.ResolveUrl.resolveCss(e.textContent%2CbaseURI)%3B%7Dstyles.push(e)%3B%7Dtemplate._styles%3Dstyles%3B%7Dreturn%20template._styles%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Returns%20a%20list%20of%20%3Cstyle%3E%20elements%20%20from%20stylesheets%20loaded%20via%20%60%3Clink%20rel%3D%22import%22%20type%3D%22css%22%3E%60%20links%20within%20the%20specified%20%60dom-module%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.StyleGather%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20moduleId%20Id%20of%20%60dom-module%60%20to%20gather%20CSS%20from%0A%20%20%20%20%20*%20%40return%20%7B!Array%3C!HTMLStyleElement%3E%7D%20Array%20of%20contained%20styles.%0A%20%20%20%20%20*%20%40this%20%7BStyleGather%7D%0A%20%20%20%20%20*%2FstylesFromModuleImports%3Afunction%20stylesFromModuleImports(moduleId)%7Bvar%20m%3DimportModule(moduleId)%3Breturn%20m%3Fthis._stylesFromModuleImports(m)%3A%5B%5D%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40memberof%20Polymer.StyleGather%0A%20%20%20%20%20*%20%40this%20%7BStyleGather%7D%0A%20%20%20%20%20*%20%40param%20%7B!HTMLElement%7D%20module%20dom-module%20element%20that%20could%20contain%20%60%3Clink%20rel%3D%22import%22%20type%3D%22css%22%3E%60%20styles%0A%20%20%20%20%20*%20%40return%20%7B!Array%3C!HTMLStyleElement%3E%7D%20Array%20of%20contained%20styles%0A%20%20%20%20%20*%2F_stylesFromModuleImports%3Afunction%20_stylesFromModuleImports(module)%7Bvar%20styles%3D%5B%5D%3Bvar%20p%24%3Dmodule.querySelectorAll(MODULE_STYLE_LINK_SELECTOR)%3Bfor(var%20i%3D0%3Bi%3Cp%24.length%3Bi%2B%2B)%7Bvar%20p%3Dp%24%5Bi%5D%3Bif(p.import)%7Bvar%20importDoc%3Dp.import%3Bvar%20unscoped%3Dp.hasAttribute(SHADY_UNSCOPED_ATTR)%3Bif(unscoped%26%26!importDoc._unscopedStyle)%7Bvar%20style%3DstyleForImport(importDoc)%3Bstyle.setAttribute(SHADY_UNSCOPED_ATTR%2C'')%3BimportDoc._unscopedStyle%3Dstyle%3B%7Delse%20if(!importDoc._style)%7BimportDoc._style%3DstyleForImport(importDoc)%3B%7Dstyles.push(unscoped%3FimportDoc._unscopedStyle%3AimportDoc._style)%3B%7D%7Dreturn%20styles%3B%7D%2C%2F**%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Returns%20CSS%20text%20of%20styles%20in%20a%20space-separated%20list%20of%20%60dom-module%60s.%0A%20%20%20%20%20*%20Note%3A%20This%20method%20is%20deprecated%2C%20use%20%60stylesFromModules%60%20instead.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40deprecated%0A%20%20%20%20%20*%20%40memberof%20Polymer.StyleGather%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20moduleIds%20List%20of%20dom-module%20id's%20within%20which%20to%0A%20%20%20%20%20*%20search%20for%20css.%0A%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Concatenated%20CSS%20content%20from%20specified%20%60dom-module%60s%0A%20%20%20%20%20*%20%40this%20%7BStyleGather%7D%0A%20%20%20%20%20*%2FcssFromModules%3Afunction%20cssFromModules(moduleIds)%7Bvar%20modules%3DmoduleIds.trim().split(%2F%5Cs%2B%2F)%3Bvar%20cssText%3D''%3Bfor(var%20i%3D0%3Bi%3Cmodules.length%3Bi%2B%2B)%7BcssText%2B%3Dthis.cssFromModule(modules%5Bi%5D)%3B%7Dreturn%20cssText%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Returns%20CSS%20text%20of%20styles%20in%20a%20given%20%60dom-module%60.%20%20CSS%20in%20a%20%60dom-module%60%0A%20%20%20%20%20*%20can%20come%20either%20from%20%60%3Cstyle%3E%60s%20within%20the%20first%20%60%3Ctemplate%3E%60%2C%20or%20else%0A%20%20%20%20%20*%20from%20one%20or%20more%20%60%3Clink%20rel%3D%22import%22%20type%3D%22css%22%3E%60%20links%20outside%20the%0A%20%20%20%20%20*%20template.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Any%20%60%3Cstyles%3E%60%20processed%20are%20removed%20from%20their%20original%20location.%0A%20%20%20%20%20*%20Note%3A%20This%20method%20is%20deprecated%2C%20use%20%60styleFromModule%60%20instead.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40deprecated%0A%20%20%20%20%20*%20%40memberof%20Polymer.StyleGather%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20moduleId%20dom-module%20id%20to%20gather%20styles%20from%0A%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Concatenated%20CSS%20content%20from%20specified%20%60dom-module%60%0A%20%20%20%20%20*%20%40this%20%7BStyleGather%7D%0A%20%20%20%20%20*%2FcssFromModule%3Afunction%20cssFromModule(moduleId)%7Bvar%20m%3DimportModule(moduleId)%3Bif(m%26%26m._cssText%3D%3D%3Dundefined)%7B%2F%2F%20module%20imports%3A%20%3Clink%20rel%3D%22import%22%20type%3D%22css%22%3E%0Avar%20cssText%3Dthis._cssFromModuleImports(m)%3B%2F%2F%20include%20css%20from%20the%20first%20template%20in%20the%20module%0Avar%20t%3Dm.querySelector('template')%3Bif(t)%7BcssText%2B%3Dthis.cssFromTemplate(t%2C%2F**%20%40type%20%7BtemplateWithAssetPath%7D%20*%2Fm.assetpath)%3B%7Dm._cssText%3DcssText%7C%7Cnull%3B%7Dif(!m)%7Bconsole.warn('Could%20not%20find%20style%20data%20in%20module%20named'%2CmoduleId)%3B%7Dreturn%20m%26%26m._cssText%7C%7C''%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Returns%20CSS%20text%20of%20%60%3Cstyles%3E%60%20within%20a%20given%20template.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Any%20%60%3Cstyles%3E%60%20processed%20are%20removed%20from%20their%20original%20location.%0A%20%20%20%20%20*%20Note%3A%20This%20method%20is%20deprecated%2C%20use%20%60styleFromTemplate%60%20instead.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40deprecated%0A%20%20%20%20%20*%20%40memberof%20Polymer.StyleGather%0A%20%20%20%20%20*%20%40param%20%7B!HTMLTemplateElement%7D%20template%20Template%20to%20gather%20styles%20from%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20baseURI%20Base%20URI%20to%20resolve%20the%20URL%20against%0A%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Concatenated%20CSS%20content%20from%20specified%20template%0A%20%20%20%20%20*%20%40this%20%7BStyleGather%7D%0A%20%20%20%20%20*%2FcssFromTemplate%3Afunction%20cssFromTemplate(template%2CbaseURI)%7Bvar%20cssText%3D''%3Bvar%20e%24%3Dthis.stylesFromTemplate(template%2CbaseURI)%3B%2F%2F%20if%20element%20is%20a%20template%2C%20get%20content%20from%20its%20.content%0Afor(var%20i%3D0%3Bi%3Ce%24.length%3Bi%2B%2B)%7Bvar%20e%3De%24%5Bi%5D%3Bif(e.parentNode)%7Be.parentNode.removeChild(e)%3B%7DcssText%2B%3De.textContent%3B%7Dreturn%20cssText%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Returns%20CSS%20text%20from%20stylesheets%20loaded%20via%20%60%3Clink%20rel%3D%22import%22%20type%3D%22css%22%3E%60%0A%20%20%20%20%20*%20links%20within%20the%20specified%20%60dom-module%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Note%3A%20This%20method%20is%20deprecated%2C%20use%20%60stylesFromModuleImports%60%20instead.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40deprecated%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.StyleGather%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20moduleId%20Id%20of%20%60dom-module%60%20to%20gather%20CSS%20from%0A%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Concatenated%20CSS%20content%20from%20links%20in%20specified%20%60dom-module%60%0A%20%20%20%20%20*%20%40this%20%7BStyleGather%7D%0A%20%20%20%20%20*%2FcssFromModuleImports%3Afunction%20cssFromModuleImports(moduleId)%7Bvar%20m%3DimportModule(moduleId)%3Breturn%20m%3Fthis._cssFromModuleImports(m)%3A''%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40deprecated%0A%20%20%20%20%20*%20%40memberof%20Polymer.StyleGather%0A%20%20%20%20%20*%20%40this%20%7BStyleGather%7D%0A%20%20%20%20%20*%20%40param%20%7B!HTMLElement%7D%20module%20dom-module%20element%20that%20could%20contain%20%60%3Clink%20rel%3D%22import%22%20type%3D%22css%22%3E%60%20styles%0A%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Concatenated%20CSS%20content%20from%20links%20in%20the%20dom-module%0A%20%20%20%20%20*%2F_cssFromModuleImports%3Afunction%20_cssFromModuleImports(module)%7Bvar%20cssText%3D''%3Bvar%20styles%3Dthis._stylesFromModuleImports(module)%3Bfor(var%20i%3D0%3Bi%3Cstyles.length%3Bi%2B%2B)%7BcssText%2B%3Dstyles%5Bi%5D.textContent%3B%7Dreturn%20cssText%3B%7D%7D%3BPolymer.StyleGather%3DStyleGather%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Fstyle-gather.html.js%0A",
            "totalBytes": 9256,
            "wastedBytes": 5380,
            "wastedPercent": 58.12445980985307
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7D(function()%7B'use%20strict'%3B%2F**%0A%20%20%20*%20Returns%20true%20if%20%60node%60%20is%20a%20slot%20element%0A%20%20%20*%20%40param%20%7BNode%7D%20node%20Node%20to%20test.%0A%20%20%20*%20%40return%20%7Bboolean%7D%20Returns%20true%20if%20the%20given%20%60node%60%20is%20a%20slot%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20isSlot(node)%7Breturn%20node.localName%3D%3D%3D'slot'%3B%7D%2F**%0A%20%20%20*%20Class%20that%20listens%20for%20changes%20(additions%20or%20removals)%20to%0A%20%20%20*%20%22flattened%20nodes%22%20on%20a%20given%20%60node%60.%20The%20list%20of%20flattened%20nodes%20consists%0A%20%20%20*%20of%20a%20node's%20children%20and%2C%20for%20any%20children%20that%20are%20%60%3Cslot%3E%60%20elements%2C%0A%20%20%20*%20the%20expanded%20flattened%20list%20of%20%60assignedNodes%60.%0A%20%20%20*%20For%20example%2C%20if%20the%20observed%20node%20has%20children%20%60%3Ca%3E%3C%2Fa%3E%3Cslot%3E%3C%2Fslot%3E%3Cb%3E%3C%2Fb%3E%60%0A%20%20%20*%20and%20the%20%60%3Cslot%3E%60%20has%20one%20%60%3Cdiv%3E%60%20assigned%20to%20it%2C%20then%20the%20flattened%0A%20%20%20*%20nodes%20list%20is%20%60%3Ca%3E%3C%2Fa%3E%3Cdiv%3E%3C%2Fdiv%3E%3Cb%3E%3C%2Fb%3E%60.%20If%20the%20%60%3Cslot%3E%60%20has%20other%0A%20%20%20*%20%60%3Cslot%3E%60%20elements%20assigned%20to%20it%2C%20these%20are%20flattened%20as%20well.%0A%20%20%20*%0A%20%20%20*%20The%20provided%20%60callback%60%20is%20called%20whenever%20any%20change%20to%20this%20list%0A%20%20%20*%20of%20flattened%20nodes%20occurs%2C%20where%20an%20addition%20or%20removal%20of%20a%20node%20is%0A%20%20%20*%20considered%20a%20change.%20The%20%60callback%60%20is%20called%20with%20one%20argument%2C%20an%20object%0A%20%20%20*%20containing%20an%20array%20of%20any%20%60addedNodes%60%20and%20%60removedNodes%60.%0A%20%20%20*%0A%20%20%20*%20Note%3A%20the%20callback%20is%20called%20asynchronous%20to%20any%20changes%0A%20%20%20*%20at%20a%20microtask%20checkpoint.%20This%20is%20because%20observation%20is%20performed%20using%0A%20%20%20*%20%60MutationObserver%60%20and%20the%20%60%3Cslot%3E%60%20element's%20%60slotchange%60%20event%20which%0A%20%20%20*%20are%20asynchronous.%0A%20%20%20*%0A%20%20%20*%20An%20example%3A%0A%20%20%20*%20%60%60%60js%0A%20%20%20*%20class%20TestSelfObserve%20extends%20Polymer.Element%20%7B%0A%20%20%20*%20%20%20static%20get%20is()%20%7B%20return%20'test-self-observe'%3B%7D%0A%20%20%20*%20%20%20connectedCallback()%20%7B%0A%20%20%20*%20%20%20%20%20super.connectedCallback()%3B%0A%20%20%20*%20%20%20%20%20this._observer%20%3D%20new%20Polymer.FlattenedNodesObserver(this%2C%20(info)%20%3D%3E%20%7B%0A%20%20%20*%20%20%20%20%20%20%20this.info%20%3D%20info%3B%0A%20%20%20*%20%20%20%20%20%7D)%3B%0A%20%20%20*%20%20%20%7D%0A%20%20%20*%20%20%20disconnectedCallback()%20%7B%0A%20%20%20*%20%20%20%20%20super.disconnectedCallback()%3B%0A%20%20%20*%20%20%20%20%20this._observer.disconnect()%3B%0A%20%20%20*%20%20%20%7D%0A%20%20%20*%20%7D%0A%20%20%20*%20customElements.define(TestSelfObserve.is%2C%20TestSelfObserve)%3B%0A%20%20%20*%20%60%60%60%0A%20%20%20*%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Class%20that%20listens%20for%20changes%20(additions%20or%20removals)%20to%0A%20%20%20*%20%22flattened%20nodes%22%20on%20a%20given%20%60node%60.%0A%20%20%20*%2Fvar%20FlattenedNodesObserver%3Dfunction()%7B_createClass(FlattenedNodesObserver%2Cnull%2C%5B%7Bkey%3A'getFlattenedNodes'%2C%2F**%0A%20%20%20%20%20*%20Returns%20the%20list%20of%20flattened%20nodes%20for%20the%20given%20%60node%60.%0A%20%20%20%20%20*%20This%20list%20consists%20of%20a%20node's%20children%20and%2C%20for%20any%20children%0A%20%20%20%20%20*%20that%20are%20%60%3Cslot%3E%60%20elements%2C%20the%20expanded%20flattened%20list%20of%20%60assignedNodes%60.%0A%20%20%20%20%20*%20For%20example%2C%20if%20the%20observed%20node%20has%20children%20%60%3Ca%3E%3C%2Fa%3E%3Cslot%3E%3C%2Fslot%3E%3Cb%3E%3C%2Fb%3E%60%0A%20%20%20%20%20*%20and%20the%20%60%3Cslot%3E%60%20has%20one%20%60%3Cdiv%3E%60%20assigned%20to%20it%2C%20then%20the%20flattened%0A%20%20%20%20%20*%20nodes%20list%20is%20%60%3Ca%3E%3C%2Fa%3E%3Cdiv%3E%3C%2Fdiv%3E%3Cb%3E%3C%2Fb%3E%60.%20If%20the%20%60%3Cslot%3E%60%20has%20other%0A%20%20%20%20%20*%20%60%3Cslot%3E%60%20elements%20assigned%20to%20it%2C%20these%20are%20flattened%20as%20well.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7BHTMLElement%7CHTMLSlotElement%7D%20node%20The%20node%20for%20which%20to%20return%20the%20list%20of%20flattened%20nodes.%0A%20%20%20%20%20*%20%40return%20%7BArray%7D%20The%20list%20of%20flattened%20nodes%20for%20the%20given%20%60node%60.%0A%20%20%20%20*%2Fvalue%3Afunction%20getFlattenedNodes(node)%7Bif(isSlot(node))%7Bnode%3D%2F**%20%40type%20%7BHTMLSlotElement%7D%20*%2Fnode%3B%2F%2F%20eslint-disable-line%20no-self-assign%0Areturn%20node.assignedNodes(%7Bflatten%3Atrue%7D)%3B%7Delse%7Breturn%20Array.from(node.childNodes).map(function(node)%7Bif(isSlot(node))%7Bnode%3D%2F**%20%40type%20%7BHTMLSlotElement%7D%20*%2Fnode%3B%2F%2F%20eslint-disable-line%20no-self-assign%0Areturn%20node.assignedNodes(%7Bflatten%3Atrue%7D)%3B%7Delse%7Breturn%5Bnode%5D%3B%7D%7D).reduce(function(a%2Cb)%7Breturn%20a.concat(b)%3B%7D%2C%5B%5D)%3B%7D%7D%2F**%0A%20%20%20%20%20*%20%40param%20%7BElement%7D%20target%20Node%20on%20which%20to%20listen%20for%20changes.%0A%20%20%20%20%20*%20%40param%20%7B%3Ffunction(!Element%2C%20%7B%20target%3A%20!Element%2C%20addedNodes%3A%20!Array%3C!Element%3E%2C%20removedNodes%3A%20!Array%3C!Element%3E%20%7D)%3Avoid%7D%20callback%20Function%20called%20when%20there%20are%20additions%0A%20%20%20%20%20*%20or%20removals%20from%20the%20target's%20list%20of%20flattened%20nodes.%0A%20%20%20%20*%2F%7D%5D)%3Bfunction%20FlattenedNodesObserver(target%2Ccallback)%7Bvar%20_this%3Dthis%3B_classCallCheck(this%2CFlattenedNodesObserver)%3B%2F**%0A%20%20%20%20%20%20%20*%20%40type%20%7BMutationObserver%7D%0A%20%20%20%20%20%20%20*%20%40private%0A%20%20%20%20%20%20%20*%2Fthis._shadyChildrenObserver%3Dnull%3B%2F**%0A%20%20%20%20%20%20%20*%20%40type%20%7BMutationObserver%7D%0A%20%20%20%20%20%20%20*%20%40private%0A%20%20%20%20%20%20%20*%2Fthis._nativeChildrenObserver%3Dnull%3Bthis._connected%3Dfalse%3B%2F**%0A%20%20%20%20%20%20%20*%20%40type%20%7BElement%7D%0A%20%20%20%20%20%20%20*%20%40private%0A%20%20%20%20%20%20%20*%2Fthis._target%3Dtarget%3Bthis.callback%3Dcallback%3Bthis._effectiveNodes%3D%5B%5D%3Bthis._observer%3Dnull%3Bthis._scheduled%3Dfalse%3B%2F**%0A%20%20%20%20%20%20%20*%20%40type%20%7Bfunction()%7D%0A%20%20%20%20%20%20%20*%20%40private%0A%20%20%20%20%20%20%20*%2Fthis._boundSchedule%3Dfunction()%7B_this._schedule()%3B%7D%3Bthis.connect()%3Bthis._schedule()%3B%7D%2F**%0A%20%20%20%20%20*%20Activates%20an%20observer.%20This%20method%20is%20automatically%20called%20when%0A%20%20%20%20%20*%20a%20%60FlattenedNodesObserver%60%20is%20created.%20It%20should%20only%20be%20called%20to%0A%20%20%20%20%20*%20re-activate%20an%20observer%20that%20has%20been%20deactivated%20via%20the%20%60disconnect%60%20method.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F_createClass(FlattenedNodesObserver%2C%5B%7Bkey%3A'connect'%2Cvalue%3Afunction%20connect()%7Bvar%20_this2%3Dthis%3Bif(isSlot(this._target))%7Bthis._listenSlots(%5Bthis._target%5D)%3B%7Delse%20if(this._target.children)%7Bthis._listenSlots(this._target.children)%3Bif(window.ShadyDOM)%7Bthis._shadyChildrenObserver%3DShadyDOM.observeChildren(this._target%2Cfunction(mutations)%7B_this2._processMutations(mutations)%3B%7D)%3B%7Delse%7Bthis._nativeChildrenObserver%3Dnew%20MutationObserver(function(mutations)%7B_this2._processMutations(mutations)%3B%7D)%3Bthis._nativeChildrenObserver.observe(this._target%2C%7BchildList%3Atrue%7D)%3B%7D%7Dthis._connected%3Dtrue%3B%7D%2F**%0A%20%20%20%20%20*%20Deactivates%20the%20flattened%20nodes%20observer.%20After%20calling%20this%20method%0A%20%20%20%20%20*%20the%20observer%20callback%20will%20not%20be%20called%20when%20changes%20to%20flattened%20nodes%0A%20%20%20%20%20*%20occur.%20The%20%60connect%60%20method%20may%20be%20subsequently%20called%20to%20reactivate%0A%20%20%20%20%20*%20the%20observer.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'disconnect'%2Cvalue%3Afunction%20disconnect()%7Bif(isSlot(this._target))%7Bthis._unlistenSlots(%5Bthis._target%5D)%3B%7Delse%20if(this._target.children)%7Bthis._unlistenSlots(this._target.children)%3Bif(window.ShadyDOM%26%26this._shadyChildrenObserver)%7BShadyDOM.unobserveChildren(this._shadyChildrenObserver)%3Bthis._shadyChildrenObserver%3Dnull%3B%7Delse%20if(this._nativeChildrenObserver)%7Bthis._nativeChildrenObserver.disconnect()%3Bthis._nativeChildrenObserver%3Dnull%3B%7D%7Dthis._connected%3Dfalse%3B%7D%2F**%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_schedule'%2Cvalue%3Afunction%20_schedule()%7Bvar%20_this3%3Dthis%3Bif(!this._scheduled)%7Bthis._scheduled%3Dtrue%3BPolymer.Async.microTask.run(function()%7Breturn%20_this3.flush()%3B%7D)%3B%7D%7D%2F**%0A%20%20%20%20%20*%20%40param%20%7BArray%3CMutationRecord%3E%7D%20mutations%20Mutations%20signaled%20by%20the%20mutation%20observer%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_processMutations'%2Cvalue%3Afunction%20_processMutations(mutations)%7Bthis._processSlotMutations(mutations)%3Bthis.flush()%3B%7D%2F**%0A%20%20%20%20%20*%20%40param%20%7BArray%3CMutationRecord%3E%7D%20mutations%20Mutations%20signaled%20by%20the%20mutation%20observer%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_processSlotMutations'%2Cvalue%3Afunction%20_processSlotMutations(mutations)%7Bif(mutations)%7Bfor(var%20i%3D0%3Bi%3Cmutations.length%3Bi%2B%2B)%7Bvar%20mutation%3Dmutations%5Bi%5D%3Bif(mutation.addedNodes)%7Bthis._listenSlots(mutation.addedNodes)%3B%7Dif(mutation.removedNodes)%7Bthis._unlistenSlots(mutation.removedNodes)%3B%7D%7D%7D%7D%2F**%0A%20%20%20%20%20*%20Flushes%20the%20observer%20causing%20any%20pending%20changes%20to%20be%20immediately%0A%20%20%20%20%20*%20delivered%20the%20observer%20callback.%20By%20default%20these%20changes%20are%20delivered%0A%20%20%20%20%20*%20asynchronously%20at%20the%20next%20microtask%20checkpoint.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Returns%20true%20if%20any%20pending%20changes%20caused%20the%20observer%0A%20%20%20%20%20*%20callback%20to%20run.%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'flush'%2Cvalue%3Afunction%20flush()%7Bif(!this._connected)%7Breturn%20false%3B%7Dif(window.ShadyDOM)%7BShadyDOM.flush()%3B%7Dif(this._nativeChildrenObserver)%7Bthis._processSlotMutations(this._nativeChildrenObserver.takeRecords())%3B%7Delse%20if(this._shadyChildrenObserver)%7Bthis._processSlotMutations(this._shadyChildrenObserver.takeRecords())%3B%7Dthis._scheduled%3Dfalse%3Bvar%20info%3D%7Btarget%3Athis._target%2CaddedNodes%3A%5B%5D%2CremovedNodes%3A%5B%5D%7D%3Bvar%20newNodes%3Dthis.constructor.getFlattenedNodes(this._target)%3Bvar%20splices%3DPolymer.ArraySplice.calculateSplices(newNodes%2Cthis._effectiveNodes)%3B%2F%2F%20process%20removals%0Afor(var%20i%3D0%2Cs%3Bi%3Csplices.length%26%26(s%3Dsplices%5Bi%5D)%3Bi%2B%2B)%7Bfor(var%20j%3D0%2Cn%3Bj%3Cs.removed.length%26%26(n%3Ds.removed%5Bj%5D)%3Bj%2B%2B)%7Binfo.removedNodes.push(n)%3B%7D%7D%2F%2F%20process%20adds%0Afor(var%20_i%3D0%2C_s%3B_i%3Csplices.length%26%26(_s%3Dsplices%5B_i%5D)%3B_i%2B%2B)%7Bfor(var%20_j%3D_s.index%3B_j%3C_s.index%2B_s.addedCount%3B_j%2B%2B)%7Binfo.addedNodes.push(newNodes%5B_j%5D)%3B%7D%7D%2F%2F%20update%20cache%0Athis._effectiveNodes%3DnewNodes%3Bvar%20didFlush%3Dfalse%3Bif(info.addedNodes.length%7C%7Cinfo.removedNodes.length)%7BdidFlush%3Dtrue%3Bthis.callback.call(this._target%2Cinfo)%3B%7Dreturn%20didFlush%3B%7D%2F**%0A%20%20%20%20%20*%20%40param%20%7B!Array%3CElement%7CNode%3E%7C!NodeList%3CNode%3E%7D%20nodeList%20Nodes%20that%20could%20change%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_listenSlots'%2Cvalue%3Afunction%20_listenSlots(nodeList)%7Bfor(var%20i%3D0%3Bi%3CnodeList.length%3Bi%2B%2B)%7Bvar%20n%3DnodeList%5Bi%5D%3Bif(isSlot(n))%7Bn.addEventListener('slotchange'%2Cthis._boundSchedule)%3B%7D%7D%7D%2F**%0A%20%20%20%20%20*%20%40param%20%7B!Array%3CElement%7CNode%3E%7C!NodeList%3CNode%3E%7D%20nodeList%20Nodes%20that%20could%20change%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_unlistenSlots'%2Cvalue%3Afunction%20_unlistenSlots(nodeList)%7Bfor(var%20i%3D0%3Bi%3CnodeList.length%3Bi%2B%2B)%7Bvar%20n%3DnodeList%5Bi%5D%3Bif(isSlot(n))%7Bn.removeEventListener('slotchange'%2Cthis._boundSchedule)%3B%7D%7D%7D%7D%5D)%3Breturn%20FlattenedNodesObserver%3B%7D()%3BPolymer.FlattenedNodesObserver%3DFlattenedNodesObserver%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Fflattened-nodes-observer.html.js%0A",
            "totalBytes": 9727,
            "wastedBytes": 5142,
            "wastedPercent": 52.863164387786576
          },
          {
            "url": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3Bvar%20TemplateInstanceBase%3DPolymer.TemplateInstanceBase%3B%2F%2F%20eslint-disable-line%0A%2F**%0A%20%20%20%20%20*%20%40typedef%20%7B%7B%0A%20%20%20%20%20*%20%20%20_templatizerTemplate%3A%20HTMLTemplateElement%2C%0A%20%20%20%20%20*%20%20%20_parentModel%3A%20boolean%2C%0A%20%20%20%20%20*%20%20%20_instanceProps%3A%20Object%2C%0A%20%20%20%20%20*%20%20%20_forwardHostPropV2%3A%20Function%2C%0A%20%20%20%20%20*%20%20%20_notifyInstancePropV2%3A%20Function%2C%0A%20%20%20%20%20*%20%20%20ctor%3A%20TemplateInstanceBase%0A%20%20%20%20%20*%20%7D%7D%0A%20%20%20%20%20*%2Fvar%20TemplatizerUser%3Dvoid%200%3B%2F%2F%20eslint-disable-line%0A%2F**%0A%20%20%20%20%20*%20The%20%60Polymer.Templatizer%60%20behavior%20adds%20methods%20to%20generate%20instances%20of%0A%20%20%20%20%20*%20templates%20that%20are%20each%20managed%20by%20an%20anonymous%20%60Polymer.PropertyEffects%60%0A%20%20%20%20%20*%20instance%20where%20data-bindings%20in%20the%20stamped%20template%20content%20are%20bound%20to%0A%20%20%20%20%20*%20accessors%20on%20itself.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20This%20behavior%20is%20provided%20in%20Polymer%202.x%20as%20a%20hybrid-element%20convenience%0A%20%20%20%20%20*%20only.%20%20For%20non-hybrid%20usage%2C%20the%20%60Polymer.Templatize%60%20library%0A%20%20%20%20%20*%20should%20be%20used%20instead.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%20%20%20%20%2F%2F%20Get%20a%20template%20from%20somewhere%2C%20e.g.%20light%20DOM%0A%20%20%20%20%20*%20%20%20%20%20let%20template%20%3D%20this.querySelector('template')%3B%0A%20%20%20%20%20*%20%20%20%20%20%2F%2F%20Prepare%20the%20template%0A%20%20%20%20%20*%20%20%20%20%20this.templatize(template)%3B%0A%20%20%20%20%20*%20%20%20%20%20%2F%2F%20Instance%20the%20template%20with%20an%20initial%20data%20model%0A%20%20%20%20%20*%20%20%20%20%20let%20instance%20%3D%20this.stamp(%7BmyProp%3A%20'initial'%7D)%3B%0A%20%20%20%20%20*%20%20%20%20%20%2F%2F%20Insert%20the%20instance's%20DOM%20somewhere%2C%20e.g.%20light%20DOM%0A%20%20%20%20%20*%20%20%20%20%20Polymer.dom(this).appendChild(instance.root)%3B%0A%20%20%20%20%20*%20%20%20%20%20%2F%2F%20Changing%20a%20property%20on%20the%20instance%20will%20propagate%20to%20bindings%0A%20%20%20%20%20*%20%20%20%20%20%2F%2F%20in%20the%20template%0A%20%20%20%20%20*%20%20%20%20%20instance.myProp%20%3D%20'new%20value'%3B%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Users%20of%20%60Templatizer%60%20may%20need%20to%20implement%20the%20following%20abstract%0A%20%20%20%20%20*%20API's%20to%20determine%20how%20properties%20and%20paths%20from%20the%20host%20should%20be%0A%20%20%20%20%20*%20forwarded%20into%20to%20instances%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%20%20%20%20_forwardHostPropV2%3A%20function(prop%2C%20value)%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Likewise%2C%20users%20may%20implement%20these%20additional%20abstract%20API's%20to%20determine%0A%20%20%20%20%20*%20how%20instance-specific%20properties%20that%20change%20on%20the%20instance%20should%20be%0A%20%20%20%20%20*%20forwarded%20out%20to%20the%20host%2C%20if%20necessary.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%20%20%20%20_notifyInstancePropV2%3A%20function(inst%2C%20prop%2C%20value)%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20In%20order%20to%20determine%20which%20properties%20are%20instance-specific%20and%20require%0A%20%20%20%20%20*%20custom%20notification%20via%20%60_notifyInstanceProp%60%2C%20define%20an%20%60_instanceProps%60%0A%20%20%20%20%20*%20object%20containing%20keys%20for%20each%20instance%20prop%2C%20for%20example%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%20%20%20%20_instanceProps%3A%20%7B%0A%20%20%20%20%20*%20%20%20%20%20%20%20item%3A%20true%2C%0A%20%20%20%20%20*%20%20%20%20%20%20%20index%3A%20true%0A%20%20%20%20%20*%20%20%20%20%20%7D%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Any%20properties%20used%20in%20the%20template%20that%20are%20not%20defined%20in%20_instanceProp%0A%20%20%20%20%20*%20will%20be%20forwarded%20out%20to%20the%20Templatize%20%60owner%60%20automatically.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Users%20may%20also%20implement%20the%20following%20abstract%20function%20to%20show%20or%0A%20%20%20%20%20*%20hide%20any%20DOM%20generated%20using%20%60stamp%60%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%20%20%20%20_showHideChildren%3A%20function(shouldHide)%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Note%20that%20some%20callbacks%20are%20suffixed%20with%20%60V2%60%20in%20the%20Polymer%202.x%20behavior%0A%20%20%20%20%20*%20as%20the%20implementations%20will%20need%20to%20differ%20from%20the%20callbacks%20required%0A%20%20%20%20%20*%20by%20the%201.x%20Templatizer%20API%20due%20to%20changes%20in%20the%20%60TemplateInstance%60%20API%0A%20%20%20%20%20*%20between%20versions%201.x%20and%202.x.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40polymerBehavior%0A%20%20%20%20%20*%2FPolymer.Templatizer%3D%7B%2F**%0A%20%20%20%20%20%20%20*%20Generates%20an%20anonymous%20%60TemplateInstance%60%20class%20(stored%20as%20%60this.ctor%60)%0A%20%20%20%20%20%20%20*%20for%20the%20provided%20template.%20%20This%20method%20should%20be%20called%20once%20per%0A%20%20%20%20%20%20%20*%20template%20to%20prepare%20an%20element%20for%20stamping%20the%20template%2C%20followed%0A%20%20%20%20%20%20%20*%20by%20%60stamp%60%20to%20create%20new%20instances%20of%20the%20template.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!HTMLTemplateElement%7D%20template%20Template%20to%20prepare%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20mutableData%20When%20%60true%60%2C%20the%20generated%20class%20will%20skip%0A%20%20%20%20%20%20%20*%20%20%20strict%20dirty-checking%20for%20objects%20and%20arrays%20(always%20consider%20them%20to%0A%20%20%20%20%20%20%20*%20%20%20be%20%22dirty%22).%20Defaults%20to%20false.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40this%20%7BTemplatizerUser%7D%0A%20%20%20%20%20%20%20*%2Ftemplatize%3Afunction%20templatize(template%2CmutableData)%7Bthis._templatizerTemplate%3Dtemplate%3Bthis.ctor%3DPolymer.Templatize.templatize(template%2Cthis%2C%7BmutableData%3ABoolean(mutableData)%2CparentModel%3Athis._parentModel%2CinstanceProps%3Athis._instanceProps%2CforwardHostProp%3Athis._forwardHostPropV2%2CnotifyInstanceProp%3Athis._notifyInstancePropV2%7D)%3B%7D%2C%2F**%0A%20%20%20%20%20%20%20*%20Creates%20an%20instance%20of%20the%20template%20prepared%20by%20%60templatize%60.%20%20The%20object%0A%20%20%20%20%20%20%20*%20returned%20is%20an%20instance%20of%20the%20anonymous%20class%20generated%20by%20%60templatize%60%0A%20%20%20%20%20%20%20*%20whose%20%60root%60%20property%20is%20a%20document%20fragment%20containing%20newly%20cloned%0A%20%20%20%20%20%20%20*%20template%20content%2C%20and%20which%20has%20property%20accessors%20corresponding%20to%0A%20%20%20%20%20%20%20*%20properties%20referenced%20in%20template%20bindings.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20model%20Object%20containing%20initial%20property%20values%20to%0A%20%20%20%20%20%20%20*%20%20%20populate%20into%20the%20template%20bindings.%0A%20%20%20%20%20%20%20*%20%40return%20%7BTemplateInstanceBase%7D%20Returns%20the%20created%20instance%20of%0A%20%20%20%20%20%20%20*%20the%20template%20prepared%20by%20%60templatize%60.%0A%20%20%20%20%20%20%20*%20%40this%20%7BTemplatizerUser%7D%0A%20%20%20%20%20%20%20*%2Fstamp%3Afunction%20stamp(model)%7Breturn%20new%20this.ctor(model)%3B%7D%2C%2F**%0A%20%20%20%20%20%20%20*%20Returns%20the%20template%20%22model%22%20(%60TemplateInstance%60)%20associated%20with%0A%20%20%20%20%20%20%20*%20a%20given%20element%2C%20which%20serves%20as%20the%20binding%20scope%20for%20the%20template%0A%20%20%20%20%20%20%20*%20instance%20the%20element%20is%20contained%20in.%20%20A%20template%20model%20should%20be%20used%0A%20%20%20%20%20%20%20*%20to%20manipulate%20data%20associated%20with%20this%20template%20instance.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BHTMLElement%7D%20el%20Element%20for%20which%20to%20return%20a%20template%20model.%0A%20%20%20%20%20%20%20*%20%40return%20%7BTemplateInstanceBase%7D%20Model%20representing%20the%20binding%20scope%20for%0A%20%20%20%20%20%20%20*%20%20%20the%20element.%0A%20%20%20%20%20%20%20*%20%40this%20%7BTemplatizerUser%7D%0A%20%20%20%20%20%20%20*%2FmodelForElement%3Afunction%20modelForElement(el)%7Breturn%20Polymer.Templatize.modelForElement(this._templatizerTemplate%2Cel)%3B%7D%7D%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Flegacy%2Ftemplatizer-behavior.html.js%0A",
            "totalBytes": 5584,
            "wastedBytes": 4953,
            "wastedPercent": 88.69985673352436
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bvar%20_get%3Dfunction%20get(object%2Cproperty%2Creceiver)%7Bif(object%3D%3D%3Dnull)object%3DFunction.prototype%3Bvar%20desc%3DObject.getOwnPropertyDescriptor(object%2Cproperty)%3Bif(desc%3D%3D%3Dundefined)%7Bvar%20parent%3DObject.getPrototypeOf(object)%3Bif(parent%3D%3D%3Dnull)%7Breturn%20undefined%3B%7Delse%7Breturn%20get(parent%2Cproperty%2Creceiver)%3B%7D%7Delse%20if(%22value%22in%20desc)%7Breturn%20desc.value%3B%7Delse%7Bvar%20getter%3Ddesc.get%3Bif(getter%3D%3D%3Dundefined)%7Breturn%20undefined%3B%7Dreturn%20getter.call(receiver)%3B%7D%7D%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3B%2F**%0A%20%20%20*%20Creates%20a%20copy%20of%20%60props%60%20with%20each%20property%20normalized%20such%20that%0A%20%20%20*%20upgraded%20it%20is%20an%20object%20with%20at%20least%20a%20type%20property%20%7B%20type%3A%20Type%7D.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Properties%20to%20normalize%0A%20%20%20*%20%40return%20%7BObject%7D%20Copy%20of%20input%20%60props%60%20with%20normalized%20properties%20that%0A%20%20%20*%20are%20in%20the%20form%20%7Btype%3A%20Type%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20normalizeProperties(props)%7Bvar%20output%3D%7B%7D%3Bfor(var%20p%20in%20props)%7Bvar%20o%3Dprops%5Bp%5D%3Boutput%5Bp%5D%3Dtypeof%20o%3D%3D%3D'function'%3F%7Btype%3Ao%7D%3Ao%3B%7Dreturn%20output%3B%7D%2F**%0A%20%20%20*%20Mixin%20that%20provides%20a%20minimal%20starting%20point%20to%20using%20the%20PropertiesChanged%0A%20%20%20*%20mixin%20by%20providing%20a%20mechanism%20to%20declare%20properties%20in%20a%20static%0A%20%20%20*%20getter%20(e.g.%20static%20get%20properties()%20%7B%20return%20%7B%20foo%3A%20String%20%7D%20%7D).%20Changes%0A%20%20%20*%20are%20reported%20via%20the%20%60_propertiesChanged%60%20method.%0A%20%20%20*%0A%20%20%20*%20This%20mixin%20provides%20no%20specific%20support%20for%20rendering.%20Users%20are%20expected%0A%20%20%20*%20to%20create%20a%20ShadowRoot%20and%20put%20content%20into%20it%20and%20update%20it%20in%20whatever%0A%20%20%20*%20way%20makes%20sense.%20This%20can%20be%20done%20in%20reaction%20to%20properties%20changing%20by%0A%20%20%20*%20implementing%20%60_propertiesChanged%60.%0A%20%20%20*%0A%20%20%20*%20%40mixinFunction%0A%20%20%20*%20%40polymer%0A%20%20%20*%20%40appliesMixin%20Polymer.PropertiesChanged%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Mixin%20that%20provides%20a%20minimal%20starting%20point%20for%20using%0A%20%20%20*%20the%20PropertiesChanged%20mixin%20by%20providing%20a%20declarative%20%60properties%60%20object.%0A%20%20%20*%2FPolymer.PropertiesMixin%3DPolymer.dedupingMixin(function(superClass)%7B%2F**%0A%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20*%20%40extends%20%7BsuperClass%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertiesChanged%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Fvar%20base%3DPolymer.PropertiesChanged(superClass)%3B%2F**%0A%20%20%20%20%20*%20Returns%20the%20super%20class%20constructor%20for%20the%20given%20class%2C%20if%20it%20is%20an%0A%20%20%20%20%20*%20instance%20of%20the%20PropertiesMixin.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7B!PropertiesMixinConstructor%7D%20constructor%20PropertiesMixin%20constructor%0A%20%20%20%20%20*%20%40return%20%7BPropertiesMixinConstructor%7D%20Super%20class%20constructor%0A%20%20%20%20%20*%2Ffunction%20superPropertiesClass(constructor)%7Bvar%20superCtor%3DObject.getPrototypeOf(constructor)%3B%2F%2F%20Note%2C%20the%20%60PropertiesMixin%60%20class%20below%20only%20refers%20to%20the%20class%0A%2F%2F%20generated%20by%20this%20call%20to%20the%20mixin%3B%20the%20instanceof%20test%20only%20works%0A%2F%2F%20because%20the%20mixin%20is%20deduped%20and%20guaranteed%20only%20to%20apply%20once%2C%20hence%0A%2F%2F%20all%20constructors%20in%20a%20proto%20chain%20will%20see%20the%20same%20%60PropertiesMixin%60%0Areturn%20superCtor.prototype%20instanceof%20PropertiesMixin%3F%2F**%20%40type%20%7BPropertiesMixinConstructor%7D%20*%2FsuperCtor%3Anull%3B%7D%2F**%0A%20%20%20%20%20*%20Returns%20a%20memoized%20version%20of%20the%20%60properties%60%20object%20for%20the%0A%20%20%20%20%20*%20given%20class.%20Properties%20not%20in%20object%20format%20are%20converted%20to%20at%0A%20%20%20%20%20*%20least%20%7Btype%7D.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7BPropertiesMixinConstructor%7D%20constructor%20PropertiesMixin%20constructor%0A%20%20%20%20%20*%20%40return%20%7BObject%7D%20Memoized%20properties%20object%0A%20%20%20%20%20*%2Ffunction%20ownProperties(constructor)%7Bif(!constructor.hasOwnProperty(JSCompiler_renameProperty('__ownProperties'%2Cconstructor)))%7Bvar%20props%3Dnull%3Bif(constructor.hasOwnProperty(JSCompiler_renameProperty('properties'%2Cconstructor)))%7Bvar%20properties%3Dconstructor.properties%3Bif(properties)%7Bprops%3DnormalizeProperties(properties)%3B%7D%7Dconstructor.__ownProperties%3Dprops%3B%7Dreturn%20constructor.__ownProperties%3B%7D%2F**%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40mixinClass%0A%20%20%20%20%20*%20%40extends%20%7Bbase%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertiesMixin%7D%0A%20%20%20%20%20*%20%40unrestricted%0A%20%20%20%20%20*%2Fvar%20PropertiesMixin%3Dfunction(_base)%7B_inherits(PropertiesMixin%2C_base)%3Bfunction%20PropertiesMixin()%7B_classCallCheck(this%2CPropertiesMixin)%3Breturn%20_possibleConstructorReturn(this%2C(PropertiesMixin.__proto__%7C%7CObject.getPrototypeOf(PropertiesMixin)).apply(this%2Carguments))%3B%7D_createClass(PropertiesMixin%2C%5B%7Bkey%3A'_initializeProperties'%2C%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20%60PropertiesChanged%60%20method%20and%20adds%20a%20call%20to%0A%20%20%20%20%20%20%20*%20%60finalize%60%20which%20lazily%20configures%20the%20element's%20property%20accessors.%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_initializeProperties()%7BPolymer.telemetry.instanceCount%2B%2B%3Bthis.constructor.finalize()%3B_get(PropertiesMixin.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertiesMixin.prototype)%2C'_initializeProperties'%2Cthis).call(this)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Called%20when%20the%20element%20is%20added%20to%20a%20document.%0A%20%20%20%20%20%20%20*%20Calls%20%60_enableProperties%60%20to%20turn%20on%20property%20system%20from%0A%20%20%20%20%20%20%20*%20%60PropertiesChanged%60.%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20Super%20may%20or%20may%20not%20implement%20the%20callback%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'connectedCallback'%2Cvalue%3Afunction%20connectedCallback()%7Bif(_get(PropertiesMixin.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertiesMixin.prototype)%2C'connectedCallback'%2Cthis))%7B_get(PropertiesMixin.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertiesMixin.prototype)%2C'connectedCallback'%2Cthis).call(this)%3B%7Dthis._enableProperties()%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Called%20when%20the%20element%20is%20removed%20from%20a%20document%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20Super%20may%20or%20may%20not%20implement%20the%20callback%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'disconnectedCallback'%2Cvalue%3Afunction%20disconnectedCallback()%7Bif(_get(PropertiesMixin.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertiesMixin.prototype)%2C'disconnectedCallback'%2Cthis))%7B_get(PropertiesMixin.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertiesMixin.prototype)%2C'disconnectedCallback'%2Cthis).call(this)%3B%7D%7D%7D%5D%2C%5B%7Bkey%3A'finalize'%2C%2F**%0A%20%20%20%20%20%20%20*%20Finalizes%20an%20element%20definition%2C%20including%20ensuring%20any%20super%20classes%0A%20%20%20%20%20%20%20*%20are%20also%20finalized.%20This%20includes%20ensuring%20property%0A%20%20%20%20%20%20%20*%20accessors%20exist%20on%20the%20element%20prototype.%20This%20method%20calls%0A%20%20%20%20%20%20%20*%20%60_finalizeClass%60%20to%20finalize%20each%20constructor%20in%20the%20prototype%20chain.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20finalize()%7Bif(!this.hasOwnProperty(JSCompiler_renameProperty('__finalized'%2Cthis)))%7Bvar%20superCtor%3DsuperPropertiesClass(%2F**%20%40type%20%7BPropertiesMixinConstructor%7D%20*%2Fthis)%3Bif(superCtor)%7BsuperCtor.finalize()%3B%7Dthis.__finalized%3Dtrue%3Bthis._finalizeClass()%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Finalize%20an%20element%20class.%20This%20includes%20ensuring%20property%0A%20%20%20%20%20%20%20*%20accessors%20exist%20on%20the%20element%20prototype.%20This%20method%20is%20called%20by%0A%20%20%20%20%20%20%20*%20%60finalize%60%20and%20finalizes%20the%20class%20constructor.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_finalizeClass'%2Cvalue%3Afunction%20_finalizeClass()%7Bvar%20props%3DownProperties(%2F**%20%40type%20%7BPropertiesMixinConstructor%7D%20*%2Fthis)%3Bif(props)%7Bthis.createProperties(props)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20a%20memoized%20version%20of%20all%20properties%2C%20including%20those%20inherited%0A%20%20%20%20%20%20%20*%20from%20super%20classes.%20Properties%20not%20in%20object%20format%20are%20converted%20to%0A%20%20%20%20%20%20%20*%20at%20least%20%7Btype%7D.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7BObject%7D%20Object%20containing%20properties%20for%20this%20class%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'typeForProperty'%2C%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20%60PropertiesChanged%60%20method%20to%20return%20type%20specified%20in%20the%0A%20%20%20%20%20%20%20*%20static%20%60properties%60%20object%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20name%20Name%20of%20property%0A%20%20%20%20%20%20%20*%20%40return%20%7B*%7D%20Type%20to%20which%20to%20deserialize%20attribute%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20typeForProperty(name)%7Bvar%20info%3Dthis._properties%5Bname%5D%3Breturn%20info%26%26info.type%3B%7D%7D%2C%7Bkey%3A'observedAttributes'%2C%2F**%0A%20%20%20%20%20%20%20*%20Implements%20standard%20custom%20elements%20getter%20to%20observes%20the%20attributes%0A%20%20%20%20%20%20%20*%20listed%20in%20%60properties%60.%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20Interfaces%20in%20closure%20do%20not%20inherit%20statics%2C%20but%20classes%20do%0A%20%20%20%20%20%20%20*%2Fget%3Afunction%20get()%7Bvar%20_this2%3Dthis%3Bif(!this.hasOwnProperty('__observedAttributes'))%7BPolymer.telemetry.register(this.prototype)%3Bvar%20props%3Dthis._properties%3Bthis.__observedAttributes%3Dprops%3FObject.keys(props).map(function(p)%7Breturn%20_this2.attributeNameForProperty(p)%3B%7D)%3A%5B%5D%3B%7Dreturn%20this.__observedAttributes%3B%7D%7D%2C%7Bkey%3A'_properties'%2Cget%3Afunction%20get()%7Bif(!this.hasOwnProperty(JSCompiler_renameProperty('__properties'%2Cthis)))%7Bvar%20superCtor%3DsuperPropertiesClass(%2F**%20%40type%20%7BPropertiesMixinConstructor%7D%20*%2Fthis)%3Bthis.__properties%3DObject.assign(%7B%7D%2CsuperCtor%26%26superCtor._properties%2CownProperties(%2F**%20%40type%20%7BPropertiesMixinConstructor%7D%20*%2Fthis))%3B%7Dreturn%20this.__properties%3B%7D%7D%5D)%3Breturn%20PropertiesMixin%3B%7D(base)%3Breturn%20PropertiesMixin%3B%7D)%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Fmixins%2Fproperties-mixin.html.js%0A",
            "totalBytes": 9658,
            "wastedBytes": 4769,
            "wastedPercent": 49.378753365085934
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_get%3Dfunction%20get(object%2Cproperty%2Creceiver)%7Bif(object%3D%3D%3Dnull)object%3DFunction.prototype%3Bvar%20desc%3DObject.getOwnPropertyDescriptor(object%2Cproperty)%3Bif(desc%3D%3D%3Dundefined)%7Bvar%20parent%3DObject.getPrototypeOf(object)%3Bif(parent%3D%3D%3Dnull)%7Breturn%20undefined%3B%7Delse%7Breturn%20get(parent%2Cproperty%2Creceiver)%3B%7D%7Delse%20if(%22value%22in%20desc)%7Breturn%20desc.value%3B%7Delse%7Bvar%20getter%3Ddesc.get%3Bif(getter%3D%3D%3Dundefined)%7Breturn%20undefined%3B%7Dreturn%20getter.call(receiver)%3B%7D%7D%3Bvar%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3B%2F**%0A%20%20%20*%20The%20%60%3Cdom-if%3E%60%20element%20will%20stamp%20a%20light-dom%20%60%3Ctemplate%3E%60%20child%20when%0A%20%20%20*%20the%20%60if%60%20property%20becomes%20truthy%2C%20and%20the%20template%20can%20use%20Polymer%0A%20%20%20*%20data-binding%20and%20declarative%20event%20features%20when%20used%20in%20the%20context%20of%0A%20%20%20*%20a%20Polymer%20element's%20template.%0A%20%20%20*%0A%20%20%20*%20When%20%60if%60%20becomes%20falsy%2C%20the%20stamped%20content%20is%20hidden%20but%20not%0A%20%20%20*%20removed%20from%20dom.%20When%20%60if%60%20subsequently%20becomes%20truthy%20again%2C%20the%20content%0A%20%20%20*%20is%20simply%20re-shown.%20This%20approach%20is%20used%20due%20to%20its%20favorable%20performance%0A%20%20%20*%20characteristics%3A%20the%20expense%20of%20creating%20template%20content%20is%20paid%20only%0A%20%20%20*%20once%20and%20lazily.%0A%20%20%20*%0A%20%20%20*%20Set%20the%20%60restamp%60%20property%20to%20true%20to%20force%20the%20stamped%20content%20to%20be%0A%20%20%20*%20created%20%2F%20destroyed%20when%20the%20%60if%60%20condition%20changes.%0A%20%20%20*%0A%20%20%20*%20%40customElement%0A%20%20%20*%20%40polymer%0A%20%20%20*%20%40extends%20Polymer.Element%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Custom%20element%20that%20conditionally%20stamps%20and%20hides%20or%20removes%0A%20%20%20*%20%20%20template%20content%20based%20on%20a%20boolean%20flag.%0A%20%20%20*%2Fvar%20DomIf%3Dfunction(_Polymer%24Element)%7B_inherits(DomIf%2C_Polymer%24Element)%3B_createClass(DomIf%2Cnull%2C%5B%7Bkey%3A'is'%2C%2F%2F%20Not%20needed%20to%20find%20template%3B%20can%20be%20removed%20once%20the%20analyzer%0A%2F%2F%20can%20find%20the%20tag%20name%20from%20customElements.define%20call%0Aget%3Afunction%20get()%7Breturn'dom-if'%3B%7D%7D%2C%7Bkey%3A'template'%2Cget%3Afunction%20get()%7Breturn%20null%3B%7D%7D%2C%7Bkey%3A'properties'%2Cget%3Afunction%20get()%7Breturn%7B%2F**%0A%20%20%20%20%20%20%20%20%20*%20Fired%20whenever%20DOM%20is%20added%20or%20removed%2Fhidden%20by%20this%20template%20(by%0A%20%20%20%20%20%20%20%20%20*%20default%2C%20rendering%20occurs%20lazily).%20%20To%20force%20immediate%20rendering%2C%20call%0A%20%20%20%20%20%20%20%20%20*%20%60render%60.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40event%20dom-change%0A%20%20%20%20%20%20%20%20%20*%2F%2F**%0A%20%20%20%20%20%20%20%20%20*%20A%20boolean%20indicating%20whether%20this%20template%20should%20stamp.%0A%20%20%20%20%20%20%20%20%20*%2Fif%3A%7Btype%3ABoolean%2Cobserver%3A'__debounceRender'%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20When%20true%2C%20elements%20will%20be%20removed%20from%20DOM%20and%20discarded%20when%20%60if%60%0A%20%20%20%20%20%20%20%20%20*%20becomes%20false%20and%20re-created%20and%20added%20back%20to%20the%20DOM%20when%20%60if%60%0A%20%20%20%20%20%20%20%20%20*%20becomes%20true.%20%20By%20default%2C%20stamped%20elements%20will%20be%20hidden%20but%20left%0A%20%20%20%20%20%20%20%20%20*%20in%20the%20DOM%20when%20%60if%60%20becomes%20false%2C%20which%20is%20generally%20results%0A%20%20%20%20%20%20%20%20%20*%20in%20better%20performance.%0A%20%20%20%20%20%20%20%20%20*%2Frestamp%3A%7Btype%3ABoolean%2Cobserver%3A'__debounceRender'%7D%7D%3B%7D%7D%5D)%3Bfunction%20DomIf()%7B_classCallCheck(this%2CDomIf)%3Bvar%20_this%3D_possibleConstructorReturn(this%2C(DomIf.__proto__%7C%7CObject.getPrototypeOf(DomIf)).call(this))%3B_this.__renderDebouncer%3Dnull%3B_this.__invalidProps%3Dnull%3B_this.__instance%3Dnull%3B_this._lastIf%3Dfalse%3B_this.__ctor%3Dnull%3Breturn%20_this%3B%7D_createClass(DomIf%2C%5B%7Bkey%3A'__debounceRender'%2Cvalue%3Afunction%20__debounceRender()%7Bvar%20_this2%3Dthis%3B%2F%2F%20Render%20is%20async%20for%202%20reasons%3A%0A%2F%2F%201.%20To%20eliminate%20dom%20creation%20trashing%20if%20user%20code%20thrashes%20%60if%60%20in%20the%0A%2F%2F%20%20%20%20same%20turn.%20This%20was%20more%20common%20in%201.x%20where%20a%20compound%20computed%0A%2F%2F%20%20%20%20property%20could%20result%20in%20the%20result%20changing%20multiple%20times%2C%20but%20is%0A%2F%2F%20%20%20%20mitigated%20to%20a%20large%20extent%20by%20batched%20property%20processing%20in%202.x.%0A%2F%2F%202.%20To%20avoid%20double%20object%20propagation%20when%20a%20bag%20including%20values%20bound%0A%2F%2F%20%20%20%20to%20the%20%60if%60%20property%20as%20well%20as%20one%20or%20more%20hostProps%20could%20enqueue%0A%2F%2F%20%20%20%20the%20%3Cdom-if%3E%20to%20flush%20before%20the%20%3Ctemplate%3E's%20host%20property%0A%2F%2F%20%20%20%20forwarding.%20In%20that%20scenario%20creating%20an%20instance%20would%20result%20in%0A%2F%2F%20%20%20%20the%20host%20props%20being%20set%20once%2C%20and%20then%20the%20enqueued%20changes%20on%20the%0A%2F%2F%20%20%20%20template%20would%20set%20properties%20a%20second%20time%2C%20potentially%20causing%20an%0A%2F%2F%20%20%20%20object%20to%20be%20set%20to%20an%20instance%20more%20than%20once.%20%20Creating%20the%0A%2F%2F%20%20%20%20instance%20async%20from%20flushing%20data%20ensures%20this%20doesn't%20happen.%20If%0A%2F%2F%20%20%20%20we%20wanted%20a%20sync%20option%20in%20the%20future%2C%20simply%20having%20%3Cdom-if%3E%20flush%0A%2F%2F%20%20%20%20(or%20clear)%20its%20template's%20pending%20host%20properties%20before%20creating%0A%2F%2F%20%20%20%20the%20instance%20would%20also%20avoid%20the%20problem.%0Athis.__renderDebouncer%3DPolymer.Debouncer.debounce(this.__renderDebouncer%2CPolymer.Async.microTask%2Cfunction()%7Breturn%20_this2.__render()%3B%7D)%3BPolymer.enqueueDebouncer(this.__renderDebouncer)%3B%7D%2F**%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'disconnectedCallback'%2Cvalue%3Afunction%20disconnectedCallback()%7B_get(DomIf.prototype.__proto__%7C%7CObject.getPrototypeOf(DomIf.prototype)%2C'disconnectedCallback'%2Cthis).call(this)%3Bif(!this.parentNode%7C%7Cthis.parentNode.nodeType%3D%3DNode.DOCUMENT_FRAGMENT_NODE%26%26!this.parentNode.host)%7Bthis.__teardownInstance()%3B%7D%7D%2F**%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'connectedCallback'%2Cvalue%3Afunction%20connectedCallback()%7B_get(DomIf.prototype.__proto__%7C%7CObject.getPrototypeOf(DomIf.prototype)%2C'connectedCallback'%2Cthis).call(this)%3Bthis.style.display%3D'none'%3Bif(this.if)%7Bthis.__debounceRender()%3B%7D%7D%2F**%0A%20%20%20%20%20*%20Forces%20the%20element%20to%20render%20its%20content.%20Normally%20rendering%20is%0A%20%20%20%20%20*%20asynchronous%20to%20a%20provoking%20change.%20This%20is%20done%20for%20efficiency%20so%0A%20%20%20%20%20*%20that%20multiple%20changes%20trigger%20only%20a%20single%20render.%20The%20render%20method%0A%20%20%20%20%20*%20should%20be%20called%20if%2C%20for%20example%2C%20template%20rendering%20is%20required%20to%0A%20%20%20%20%20*%20validate%20application%20state.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'render'%2Cvalue%3Afunction%20render()%7BPolymer.flush()%3B%7D%7D%2C%7Bkey%3A'__render'%2Cvalue%3Afunction%20__render()%7Bif(this.if)%7Bif(!this.__ensureInstance())%7B%2F%2F%20No%20template%20found%20yet%0Areturn%3B%7Dthis._showHideChildren()%3B%7Delse%20if(this.restamp)%7Bthis.__teardownInstance()%3B%7Dif(!this.restamp%26%26this.__instance)%7Bthis._showHideChildren()%3B%7Dif(this.if!%3Dthis._lastIf)%7Bthis.dispatchEvent(new%20CustomEvent('dom-change'%2C%7Bbubbles%3Atrue%2Ccomposed%3Atrue%7D))%3Bthis._lastIf%3Dthis.if%3B%7D%7D%7D%2C%7Bkey%3A'__ensureInstance'%2Cvalue%3Afunction%20__ensureInstance()%7Bvar%20_this3%3Dthis%3Bvar%20parentNode%3Dthis.parentNode%3B%2F%2F%20Guard%20against%20element%20being%20detached%20while%20render%20was%20queued%0Aif(parentNode)%7Bif(!this.__ctor)%7Bvar%20template%3D%2F**%20%40type%20%7BHTMLTemplateElement%7D%20*%2Fthis.querySelector('template')%3Bif(!template)%7B%2F%2F%20Wait%20until%20childList%20changes%20and%20template%20should%20be%20there%20by%20then%0Avar%20observer%3Dnew%20MutationObserver(function()%7Bif(_this3.querySelector('template'))%7Bobserver.disconnect()%3B_this3.__render()%3B%7Delse%7Bthrow%20new%20Error('dom-if%20requires%20a%20%3Ctemplate%3E%20child')%3B%7D%7D)%3Bobserver.observe(this%2C%7BchildList%3Atrue%7D)%3Breturn%20false%3B%7Dthis.__ctor%3DPolymer.Templatize.templatize(template%2Cthis%2C%7B%2F%2F%20dom-if%20templatizer%20instances%20require%20%60mutable%3A%20true%60%2C%20as%0A%2F%2F%20%60__syncHostProperties%60%20relies%20on%20that%20behavior%20to%20sync%20objects%0AmutableData%3Atrue%2C%2F**%0A%20%20%20%20%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20prop%20Property%20to%20forward%0A%20%20%20%20%20%20%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20of%20property%0A%20%20%20%20%20%20%20%20%20%20%20%20%20*%20%40this%20%7Bthis%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20*%2FforwardHostProp%3Afunction%20forwardHostProp(prop%2Cvalue)%7Bif(this.__instance)%7Bif(this.if)%7Bthis.__instance.forwardHostProp(prop%2Cvalue)%3B%7Delse%7B%2F%2F%20If%20we%20have%20an%20instance%20but%20are%20squelching%20host%20property%0A%2F%2F%20forwarding%20due%20to%20if%20being%20false%2C%20note%20the%20invalidated%0A%2F%2F%20properties%20so%20%60__syncHostProperties%60%20can%20sync%20them%20the%20next%0A%2F%2F%20time%20%60if%60%20becomes%20true%0Athis.__invalidProps%3Dthis.__invalidProps%7C%7CObject.create(null)%3Bthis.__invalidProps%5BPolymer.Path.root(prop)%5D%3Dtrue%3B%7D%7D%7D%7D)%3B%7Dif(!this.__instance)%7Bthis.__instance%3Dnew%20this.__ctor()%3BparentNode.insertBefore(this.__instance.root%2Cthis)%3B%7Delse%7Bthis.__syncHostProperties()%3Bvar%20c%24%3Dthis.__instance.children%3Bif(c%24%26%26c%24.length)%7B%2F%2F%20Detect%20case%20where%20dom-if%20was%20re-attached%20in%20new%20position%0Avar%20lastChild%3Dthis.previousSibling%3Bif(lastChild!%3D%3Dc%24%5Bc%24.length-1%5D)%7Bfor(var%20i%3D0%2Cn%3Bi%3Cc%24.length%26%26(n%3Dc%24%5Bi%5D)%3Bi%2B%2B)%7BparentNode.insertBefore(n%2Cthis)%3B%7D%7D%7D%7D%7Dreturn%20true%3B%7D%7D%2C%7Bkey%3A'__syncHostProperties'%2Cvalue%3Afunction%20__syncHostProperties()%7Bvar%20props%3Dthis.__invalidProps%3Bif(props)%7Bfor(var%20prop%20in%20props)%7Bthis.__instance._setPendingProperty(prop%2Cthis.__dataHost%5Bprop%5D)%3B%7Dthis.__invalidProps%3Dnull%3Bthis.__instance._flushProperties()%3B%7D%7D%7D%2C%7Bkey%3A'__teardownInstance'%2Cvalue%3Afunction%20__teardownInstance()%7Bif(this.__instance)%7Bvar%20c%24%3Dthis.__instance.children%3Bif(c%24%26%26c%24.length)%7B%2F%2F%20use%20first%20child%20parent%2C%20for%20case%20when%20dom-if%20may%20have%20been%20detached%0Avar%20parent%3Dc%24%5B0%5D.parentNode%3B%2F%2F%20Instance%20children%20may%20be%20disconnected%20from%20parents%20when%20dom-if%0A%2F%2F%20detaches%20if%20a%20tree%20was%20innerHTML'ed%0Aif(parent)%7Bfor(var%20i%3D0%2Cn%3Bi%3Cc%24.length%26%26(n%3Dc%24%5Bi%5D)%3Bi%2B%2B)%7Bparent.removeChild(n)%3B%7D%7D%7Dthis.__instance%3Dnull%3Bthis.__invalidProps%3Dnull%3B%7D%7D%2F**%0A%20%20%20%20%20*%20Shows%20or%20hides%20the%20template%20instance%20top%20level%20child%20elements.%20For%0A%20%20%20%20%20*%20text%20nodes%2C%20%60textContent%60%20is%20removed%20while%20%22hidden%22%20and%20replaced%20when%0A%20%20%20%20%20*%20%22shown.%22%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_showHideChildren'%2Cvalue%3Afunction%20_showHideChildren()%7Bvar%20hidden%3Dthis.__hideTemplateChildren__%7C%7C!this.if%3Bif(this.__instance)%7Bthis.__instance._showHideChildren(hidden)%3B%7D%7D%7D%5D)%3Breturn%20DomIf%3B%7D(Polymer.Element)%3BcustomElements.define(DomIf.is%2CDomIf)%3B%2F**%20%40const%20*%2FPolymer.DomIf%3DDomIf%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Felements%2Fdom-if.html.js%0A",
            "totalBytes": 10133,
            "wastedBytes": 4646,
            "wastedPercent": 45.8501924405408
          },
          {
            "url": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3Bfunction%20newSplice(index%2Cremoved%2CaddedCount)%7Breturn%7Bindex%3Aindex%2Cremoved%3Aremoved%2CaddedCount%3AaddedCount%7D%3B%7Dvar%20EDIT_LEAVE%3D0%3Bvar%20EDIT_UPDATE%3D1%3Bvar%20EDIT_ADD%3D2%3Bvar%20EDIT_DELETE%3D3%3B%2F%2F%20Note%3A%20This%20function%20is%20*based*%20on%20the%20computation%20of%20the%20Levenshtein%0A%2F%2F%20%22edit%22%20distance.%20The%20one%20change%20is%20that%20%22updates%22%20are%20treated%20as%20two%0A%2F%2F%20edits%20-%20not%20one.%20With%20Array%20splices%2C%20an%20update%20is%20really%20a%20delete%0A%2F%2F%20followed%20by%20an%20add.%20By%20retaining%20this%2C%20we%20optimize%20for%20%22keeping%22%20the%0A%2F%2F%20maximum%20array%20items%20in%20the%20original%20array.%20For%20example%3A%0A%2F%2F%0A%2F%2F%20%20%20'xxxx123'%20-%3E%20'123yyyy'%0A%2F%2F%0A%2F%2F%20With%201-edit%20updates%2C%20the%20shortest%20path%20would%20be%20just%20to%20update%20all%20seven%0A%2F%2F%20characters.%20With%202-edit%20updates%2C%20we%20delete%204%2C%20leave%203%2C%20and%20add%204.%20This%0A%2F%2F%20leaves%20the%20substring%20'123'%20intact.%0Afunction%20calcEditDistances(current%2CcurrentStart%2CcurrentEnd%2Cold%2ColdStart%2ColdEnd)%7B%2F%2F%20%22Deletion%22%20columns%0Avar%20rowCount%3DoldEnd-oldStart%2B1%3Bvar%20columnCount%3DcurrentEnd-currentStart%2B1%3Bvar%20distances%3Dnew%20Array(rowCount)%3B%2F%2F%20%22Addition%22%20rows.%20Initialize%20null%20column.%0Afor(var%20i%3D0%3Bi%3CrowCount%3Bi%2B%2B)%7Bdistances%5Bi%5D%3Dnew%20Array(columnCount)%3Bdistances%5Bi%5D%5B0%5D%3Di%3B%7D%2F%2F%20Initialize%20null%20row%0Afor(var%20j%3D0%3Bj%3CcolumnCount%3Bj%2B%2B)%7Bdistances%5B0%5D%5Bj%5D%3Dj%3B%7Dfor(var%20_i%3D1%3B_i%3CrowCount%3B_i%2B%2B)%7Bfor(var%20_j%3D1%3B_j%3CcolumnCount%3B_j%2B%2B)%7Bif(equals(current%5BcurrentStart%2B_j-1%5D%2Cold%5BoldStart%2B_i-1%5D))distances%5B_i%5D%5B_j%5D%3Ddistances%5B_i-1%5D%5B_j-1%5D%3Belse%7Bvar%20north%3Ddistances%5B_i-1%5D%5B_j%5D%2B1%3Bvar%20west%3Ddistances%5B_i%5D%5B_j-1%5D%2B1%3Bdistances%5B_i%5D%5B_j%5D%3Dnorth%3Cwest%3Fnorth%3Awest%3B%7D%7D%7Dreturn%20distances%3B%7D%2F%2F%20This%20starts%20at%20the%20final%20weight%2C%20and%20walks%20%22backward%22%20by%20finding%0A%2F%2F%20the%20minimum%20previous%20weight%20recursively%20until%20the%20origin%20of%20the%20weight%0A%2F%2F%20matrix.%0Afunction%20spliceOperationsFromEditDistances(distances)%7Bvar%20i%3Ddistances.length-1%3Bvar%20j%3Ddistances%5B0%5D.length-1%3Bvar%20current%3Ddistances%5Bi%5D%5Bj%5D%3Bvar%20edits%3D%5B%5D%3Bwhile(i%3E0%7C%7Cj%3E0)%7Bif(i%3D%3D0)%7Bedits.push(EDIT_ADD)%3Bj--%3Bcontinue%3B%7Dif(j%3D%3D0)%7Bedits.push(EDIT_DELETE)%3Bi--%3Bcontinue%3B%7Dvar%20northWest%3Ddistances%5Bi-1%5D%5Bj-1%5D%3Bvar%20west%3Ddistances%5Bi-1%5D%5Bj%5D%3Bvar%20north%3Ddistances%5Bi%5D%5Bj-1%5D%3Bvar%20min%3Dvoid%200%3Bif(west%3Cnorth)min%3Dwest%3CnorthWest%3Fwest%3AnorthWest%3Belse%20min%3Dnorth%3CnorthWest%3Fnorth%3AnorthWest%3Bif(min%3D%3DnorthWest)%7Bif(northWest%3D%3Dcurrent)%7Bedits.push(EDIT_LEAVE)%3B%7Delse%7Bedits.push(EDIT_UPDATE)%3Bcurrent%3DnorthWest%3B%7Di--%3Bj--%3B%7Delse%20if(min%3D%3Dwest)%7Bedits.push(EDIT_DELETE)%3Bi--%3Bcurrent%3Dwest%3B%7Delse%7Bedits.push(EDIT_ADD)%3Bj--%3Bcurrent%3Dnorth%3B%7D%7Dedits.reverse()%3Breturn%20edits%3B%7D%2F**%0A%20%20%20*%20Splice%20Projection%20functions%3A%0A%20%20%20*%0A%20%20%20*%20A%20splice%20map%20is%20a%20representation%20of%20how%20a%20previous%20array%20of%20items%0A%20%20%20*%20was%20transformed%20into%20a%20new%20array%20of%20items.%20Conceptually%20it%20is%20a%20list%20of%0A%20%20%20*%20tuples%20of%0A%20%20%20*%0A%20%20%20*%20%20%20%3Cindex%2C%20removed%2C%20addedCount%3E%0A%20%20%20*%0A%20%20%20*%20which%20are%20kept%20in%20ascending%20index%20order%20of.%20The%20tuple%20represents%20that%20at%0A%20%20%20*%20the%20%7Cindex%7C%2C%20%7Cremoved%7C%20sequence%20of%20items%20were%20removed%2C%20and%20counting%20forward%0A%20%20%20*%20from%20%7Cindex%7C%2C%20%7CaddedCount%7C%20items%20were%20added.%0A%20%20%20*%2F%2F**%0A%20%20%20*%20Lacking%20individual%20splice%20mutation%20information%2C%20the%20minimal%20set%20of%0A%20%20%20*%20splices%20can%20be%20synthesized%20given%20the%20previous%20state%20and%20final%20state%20of%20an%0A%20%20%20*%20array.%20The%20basic%20approach%20is%20to%20calculate%20the%20edit%20distance%20matrix%20and%0A%20%20%20*%20choose%20the%20shortest%20path%20through%20it.%0A%20%20%20*%0A%20%20%20*%20Complexity%3A%20O(l%20*%20p)%0A%20%20%20*%20%20%20l%3A%20The%20length%20of%20the%20current%20array%0A%20%20%20*%20%20%20p%3A%20The%20length%20of%20the%20old%20array%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!Array%7D%20current%20The%20current%20%22changed%22%20array%20for%20which%20to%0A%20%20%20*%20calculate%20splices.%0A%20%20%20*%20%40param%20%7Bnumber%7D%20currentStart%20Starting%20index%20in%20the%20%60current%60%20array%20for%0A%20%20%20*%20which%20splices%20are%20calculated.%0A%20%20%20*%20%40param%20%7Bnumber%7D%20currentEnd%20Ending%20index%20in%20the%20%60current%60%20array%20for%0A%20%20%20*%20which%20splices%20are%20calculated.%0A%20%20%20*%20%40param%20%7B!Array%7D%20old%20The%20original%20%22unchanged%22%20array%20to%20compare%20%60current%60%0A%20%20%20*%20against%20to%20determine%20splices.%0A%20%20%20*%20%40param%20%7Bnumber%7D%20oldStart%20Starting%20index%20in%20the%20%60old%60%20array%20for%0A%20%20%20*%20which%20splices%20are%20calculated.%0A%20%20%20*%20%40param%20%7Bnumber%7D%20oldEnd%20Ending%20index%20in%20the%20%60old%60%20array%20for%0A%20%20%20*%20which%20splices%20are%20calculated.%0A%20%20%20*%20%40return%20%7B!Array%7D%20Returns%20an%20array%20of%20splice%20record%20objects.%20Each%20of%20these%0A%20%20%20*%20contains%3A%20%60index%60%20the%20location%20where%20the%20splice%20occurred%3B%20%60removed%60%0A%20%20%20*%20the%20array%20of%20removed%20items%20from%20this%20location%3B%20%60addedCount%60%20the%20number%0A%20%20%20*%20of%20items%20added%20at%20this%20location.%0A%20%20%20*%2Ffunction%20calcSplices(current%2CcurrentStart%2CcurrentEnd%2Cold%2ColdStart%2ColdEnd)%7Bvar%20prefixCount%3D0%3Bvar%20suffixCount%3D0%3Bvar%20splice%3Dvoid%200%3Bvar%20minLength%3DMath.min(currentEnd-currentStart%2ColdEnd-oldStart)%3Bif(currentStart%3D%3D0%26%26oldStart%3D%3D0)prefixCount%3DsharedPrefix(current%2Cold%2CminLength)%3Bif(currentEnd%3D%3Dcurrent.length%26%26oldEnd%3D%3Dold.length)suffixCount%3DsharedSuffix(current%2Cold%2CminLength-prefixCount)%3BcurrentStart%2B%3DprefixCount%3BoldStart%2B%3DprefixCount%3BcurrentEnd-%3DsuffixCount%3BoldEnd-%3DsuffixCount%3Bif(currentEnd-currentStart%3D%3D0%26%26oldEnd-oldStart%3D%3D0)return%5B%5D%3Bif(currentStart%3D%3DcurrentEnd)%7Bsplice%3DnewSplice(currentStart%2C%5B%5D%2C0)%3Bwhile(oldStart%3ColdEnd)%7Bsplice.removed.push(old%5BoldStart%2B%2B%5D)%3B%7Dreturn%5Bsplice%5D%3B%7Delse%20if(oldStart%3D%3DoldEnd)return%5BnewSplice(currentStart%2C%5B%5D%2CcurrentEnd-currentStart)%5D%3Bvar%20ops%3DspliceOperationsFromEditDistances(calcEditDistances(current%2CcurrentStart%2CcurrentEnd%2Cold%2ColdStart%2ColdEnd))%3Bsplice%3Dundefined%3Bvar%20splices%3D%5B%5D%3Bvar%20index%3DcurrentStart%3Bvar%20oldIndex%3DoldStart%3Bfor(var%20i%3D0%3Bi%3Cops.length%3Bi%2B%2B)%7Bswitch(ops%5Bi%5D)%7Bcase%20EDIT_LEAVE%3Aif(splice)%7Bsplices.push(splice)%3Bsplice%3Dundefined%3B%7Dindex%2B%2B%3BoldIndex%2B%2B%3Bbreak%3Bcase%20EDIT_UPDATE%3Aif(!splice)splice%3DnewSplice(index%2C%5B%5D%2C0)%3Bsplice.addedCount%2B%2B%3Bindex%2B%2B%3Bsplice.removed.push(old%5BoldIndex%5D)%3BoldIndex%2B%2B%3Bbreak%3Bcase%20EDIT_ADD%3Aif(!splice)splice%3DnewSplice(index%2C%5B%5D%2C0)%3Bsplice.addedCount%2B%2B%3Bindex%2B%2B%3Bbreak%3Bcase%20EDIT_DELETE%3Aif(!splice)splice%3DnewSplice(index%2C%5B%5D%2C0)%3Bsplice.removed.push(old%5BoldIndex%5D)%3BoldIndex%2B%2B%3Bbreak%3B%7D%7Dif(splice)%7Bsplices.push(splice)%3B%7Dreturn%20splices%3B%7Dfunction%20sharedPrefix(current%2Cold%2CsearchLength)%7Bfor(var%20i%3D0%3Bi%3CsearchLength%3Bi%2B%2B)%7Bif(!equals(current%5Bi%5D%2Cold%5Bi%5D))return%20i%3B%7Dreturn%20searchLength%3B%7Dfunction%20sharedSuffix(current%2Cold%2CsearchLength)%7Bvar%20index1%3Dcurrent.length%3Bvar%20index2%3Dold.length%3Bvar%20count%3D0%3Bwhile(count%3CsearchLength%26%26equals(current%5B--index1%5D%2Cold%5B--index2%5D))%7Bcount%2B%2B%3B%7Dreturn%20count%3B%7Dfunction%20calculateSplices(current%2Cprevious)%7Breturn%20calcSplices(current%2C0%2Ccurrent.length%2Cprevious%2C0%2Cprevious.length)%3B%7Dfunction%20equals(currentValue%2CpreviousValue)%7Breturn%20currentValue%3D%3D%3DpreviousValue%3B%7D%2F**%0A%20%20%20*%20%40namespace%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Module%20that%20provides%20utilities%20for%20diffing%20arrays.%0A%20%20%20*%2FPolymer.ArraySplice%3D%7B%2F**%0A%20%20%20%20%20*%20Returns%20an%20array%20of%20splice%20records%20indicating%20the%20minimum%20edits%20required%0A%20%20%20%20%20*%20to%20transform%20the%20%60previous%60%20array%20into%20the%20%60current%60%20array.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Splice%20records%20are%20ordered%20by%20index%20and%20contain%20the%20following%20fields%3A%0A%20%20%20%20%20*%20-%20%60index%60%3A%20index%20where%20edit%20started%0A%20%20%20%20%20*%20-%20%60removed%60%3A%20array%20of%20removed%20items%20from%20this%20index%0A%20%20%20%20%20*%20-%20%60addedCount%60%3A%20number%20of%20items%20added%20at%20this%20index%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20This%20function%20is%20based%20on%20the%20Levenshtein%20%22minimum%20edit%20distance%22%0A%20%20%20%20%20*%20algorithm.%20Note%20that%20updates%20are%20treated%20as%20removal%20followed%20by%20addition.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20The%20worst-case%20time%20complexity%20of%20this%20algorithm%20is%20%60O(l%20*%20p)%60%0A%20%20%20%20%20*%20%20%20l%3A%20The%20length%20of%20the%20current%20array%0A%20%20%20%20%20*%20%20%20p%3A%20The%20length%20of%20the%20previous%20array%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20However%2C%20the%20worst-case%20complexity%20is%20reduced%20by%20an%20%60O(n)%60%20optimization%0A%20%20%20%20%20*%20to%20detect%20any%20shared%20prefix%20%26%20suffix%20between%20the%20two%20arrays%20and%20only%0A%20%20%20%20%20*%20perform%20the%20more%20expensive%20minimum%20edit%20distance%20calculation%20over%20the%0A%20%20%20%20%20*%20non-shared%20portions%20of%20the%20arrays.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40function%0A%20%20%20%20%20*%20%40memberof%20Polymer.ArraySplice%0A%20%20%20%20%20*%20%40param%20%7B!Array%7D%20current%20The%20%22changed%22%20array%20for%20which%20splices%20will%20be%0A%20%20%20%20%20*%20calculated.%0A%20%20%20%20%20*%20%40param%20%7B!Array%7D%20previous%20The%20%22unchanged%22%20original%20array%20to%20compare%0A%20%20%20%20%20*%20%60current%60%20against%20to%20determine%20the%20splices.%0A%20%20%20%20%20*%20%40return%20%7B!Array%7D%20Returns%20an%20array%20of%20splice%20record%20objects.%20Each%20of%20these%0A%20%20%20%20%20*%20contains%3A%20%60index%60%20the%20location%20where%20the%20splice%20occurred%3B%20%60removed%60%0A%20%20%20%20%20*%20the%20array%20of%20removed%20items%20from%20this%20location%3B%20%60addedCount%60%20the%20number%0A%20%20%20%20%20*%20of%20items%20added%20at%20this%20location.%0A%20%20%20%20%20*%2FcalculateSplices%3AcalculateSplices%7D%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Farray-splice.html.js%0A",
            "totalBytes": 7970,
            "wastedBytes": 4446,
            "wastedPercent": 55.78419071518192
          },
          {
            "url": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3B%2F%2F%20Microtask%20implemented%20using%20Mutation%20Observer%0Avar%20microtaskCurrHandle%3D0%3Bvar%20microtaskLastHandle%3D0%3Bvar%20microtaskCallbacks%3D%5B%5D%3Bvar%20microtaskNodeContent%3D0%3Bvar%20microtaskNode%3Ddocument.createTextNode('')%3Bnew%20window.MutationObserver(microtaskFlush).observe(microtaskNode%2C%7BcharacterData%3Atrue%7D)%3Bfunction%20microtaskFlush()%7Bvar%20len%3DmicrotaskCallbacks.length%3Bfor(var%20i%3D0%3Bi%3Clen%3Bi%2B%2B)%7Bvar%20cb%3DmicrotaskCallbacks%5Bi%5D%3Bif(cb)%7Btry%7Bcb()%3B%7Dcatch(e)%7BsetTimeout(function()%7Bthrow%20e%3B%7D)%3B%7D%7D%7DmicrotaskCallbacks.splice(0%2Clen)%3BmicrotaskLastHandle%2B%3Dlen%3B%7D%2F**%0A%20%20%20*%20Module%20that%20provides%20a%20number%20of%20strategies%20for%20enqueuing%20asynchronous%0A%20%20%20*%20tasks.%20%20Each%20sub-module%20provides%20a%20standard%20%60run(fn)%60%20interface%20that%20returns%20a%0A%20%20%20*%20handle%2C%20and%20a%20%60cancel(handle)%60%20interface%20for%20canceling%20async%20tasks%20before%0A%20%20%20*%20they%20run.%0A%20%20%20*%0A%20%20%20*%20%40namespace%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Module%20that%20provides%20a%20number%20of%20strategies%20for%20enqueuing%20asynchronous%0A%20%20%20*%20tasks.%0A%20%20%20*%2FPolymer.Async%3D%7B%2F**%0A%20%20%20%20%20*%20Async%20interface%20wrapper%20around%20%60setTimeout%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40namespace%0A%20%20%20%20%20*%20%40memberof%20Polymer.Async%0A%20%20%20%20%20*%20%40summary%20Async%20interface%20wrapper%20around%20%60setTimeout%60.%0A%20%20%20%20%20*%2FtimeOut%3A%7B%2F**%0A%20%20%20%20%20%20%20*%20Returns%20a%20sub-module%20with%20the%20async%20interface%20providing%20the%20provided%0A%20%20%20%20%20%20%20*%20delay.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40memberof%20Polymer.Async.timeOut%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%3D%7D%20delay%20Time%20to%20wait%20before%20calling%20callbacks%20in%20ms%0A%20%20%20%20%20%20%20*%20%40return%20%7B!AsyncInterface%7D%20An%20async%20timeout%20interface%0A%20%20%20%20%20%20%20*%2Fafter%3Afunction%20after(delay)%7Breturn%7Brun%3Afunction%20run(fn)%7Breturn%20window.setTimeout(fn%2Cdelay)%3B%7D%2Ccancel%3Afunction%20cancel(handle)%7Bwindow.clearTimeout(handle)%3B%7D%7D%3B%7D%2C%2F**%0A%20%20%20%20%20%20%20*%20Enqueues%20a%20function%20called%20in%20the%20next%20task.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40memberof%20Polymer.Async.timeOut%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Function%7D%20fn%20Callback%20to%20run%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%3D%7D%20delay%20Delay%20in%20milliseconds%0A%20%20%20%20%20%20%20*%20%40return%20%7Bnumber%7D%20Handle%20used%20for%20canceling%20task%0A%20%20%20%20%20%20%20*%2Frun%3Afunction%20run(fn%2Cdelay)%7Breturn%20window.setTimeout(fn%2Cdelay)%3B%7D%2C%2F**%0A%20%20%20%20%20%20%20*%20Cancels%20a%20previously%20enqueued%20%60timeOut%60%20callback.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40memberof%20Polymer.Async.timeOut%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20handle%20Handle%20returned%20from%20%60run%60%20of%20callback%20to%20cancel%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2Fcancel%3Afunction%20cancel(handle)%7Bwindow.clearTimeout(handle)%3B%7D%7D%2C%2F**%0A%20%20%20%20%20*%20Async%20interface%20wrapper%20around%20%60requestAnimationFrame%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40namespace%0A%20%20%20%20%20*%20%40memberof%20Polymer.Async%0A%20%20%20%20%20*%20%40summary%20Async%20interface%20wrapper%20around%20%60requestAnimationFrame%60.%0A%20%20%20%20%20*%2FanimationFrame%3A%7B%2F**%0A%20%20%20%20%20%20%20*%20Enqueues%20a%20function%20called%20at%20%60requestAnimationFrame%60%20timing.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40memberof%20Polymer.Async.animationFrame%0A%20%20%20%20%20%20%20*%20%40param%20%7Bfunction(number)%3Avoid%7D%20fn%20Callback%20to%20run%0A%20%20%20%20%20%20%20*%20%40return%20%7Bnumber%7D%20Handle%20used%20for%20canceling%20task%0A%20%20%20%20%20%20%20*%2Frun%3Afunction%20run(fn)%7Breturn%20window.requestAnimationFrame(fn)%3B%7D%2C%2F**%0A%20%20%20%20%20%20%20*%20Cancels%20a%20previously%20enqueued%20%60animationFrame%60%20callback.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40memberof%20Polymer.Async.animationFrame%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20handle%20Handle%20returned%20from%20%60run%60%20of%20callback%20to%20cancel%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2Fcancel%3Afunction%20cancel(handle)%7Bwindow.cancelAnimationFrame(handle)%3B%7D%7D%2C%2F**%0A%20%20%20%20%20*%20Async%20interface%20wrapper%20around%20%60requestIdleCallback%60.%20%20Falls%20back%20to%0A%20%20%20%20%20*%20%60setTimeout%60%20on%20browsers%20that%20do%20not%20support%20%60requestIdleCallback%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40namespace%0A%20%20%20%20%20*%20%40memberof%20Polymer.Async%0A%20%20%20%20%20*%20%40summary%20Async%20interface%20wrapper%20around%20%60requestIdleCallback%60.%0A%20%20%20%20%20*%2FidlePeriod%3A%7B%2F**%0A%20%20%20%20%20%20%20*%20Enqueues%20a%20function%20called%20at%20%60requestIdleCallback%60%20timing.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40memberof%20Polymer.Async.idlePeriod%0A%20%20%20%20%20%20%20*%20%40param%20%7Bfunction(!IdleDeadline)%3Avoid%7D%20fn%20Callback%20to%20run%0A%20%20%20%20%20%20%20*%20%40return%20%7Bnumber%7D%20Handle%20used%20for%20canceling%20task%0A%20%20%20%20%20%20%20*%2Frun%3Afunction%20run(fn)%7Breturn%20window.requestIdleCallback%3Fwindow.requestIdleCallback(fn)%3Awindow.setTimeout(fn%2C16)%3B%7D%2C%2F**%0A%20%20%20%20%20%20%20*%20Cancels%20a%20previously%20enqueued%20%60idlePeriod%60%20callback.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40memberof%20Polymer.Async.idlePeriod%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20handle%20Handle%20returned%20from%20%60run%60%20of%20callback%20to%20cancel%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2Fcancel%3Afunction%20cancel(handle)%7Bwindow.cancelIdleCallback%3Fwindow.cancelIdleCallback(handle)%3Awindow.clearTimeout(handle)%3B%7D%7D%2C%2F**%0A%20%20%20%20%20*%20Async%20interface%20for%20enqueuing%20callbacks%20that%20run%20at%20microtask%20timing.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Note%20that%20microtask%20timing%20is%20achieved%20via%20a%20single%20%60MutationObserver%60%2C%0A%20%20%20%20%20*%20and%20thus%20callbacks%20enqueued%20with%20this%20API%20will%20all%20run%20in%20a%20single%0A%20%20%20%20%20*%20batch%2C%20and%20not%20interleaved%20with%20other%20microtasks%20such%20as%20promises.%0A%20%20%20%20%20*%20Promises%20are%20avoided%20as%20an%20implementation%20choice%20for%20the%20time%20being%0A%20%20%20%20%20*%20due%20to%20Safari%20bugs%20that%20cause%20Promises%20to%20lack%20microtask%20guarantees.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40namespace%0A%20%20%20%20%20*%20%40memberof%20Polymer.Async%0A%20%20%20%20%20*%20%40summary%20Async%20interface%20for%20enqueuing%20callbacks%20that%20run%20at%20microtask%0A%20%20%20%20%20*%20%20%20timing.%0A%20%20%20%20%20*%2FmicroTask%3A%7B%2F**%0A%20%20%20%20%20%20%20*%20Enqueues%20a%20function%20called%20at%20microtask%20timing.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40memberof%20Polymer.Async.microTask%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Function%3D%7D%20callback%20Callback%20to%20run%0A%20%20%20%20%20%20%20*%20%40return%20%7Bnumber%7D%20Handle%20used%20for%20canceling%20task%0A%20%20%20%20%20%20%20*%2Frun%3Afunction%20run(callback)%7BmicrotaskNode.textContent%3DmicrotaskNodeContent%2B%2B%3BmicrotaskCallbacks.push(callback)%3Breturn%20microtaskCurrHandle%2B%2B%3B%7D%2C%2F**%0A%20%20%20%20%20%20%20*%20Cancels%20a%20previously%20enqueued%20%60microTask%60%20callback.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40memberof%20Polymer.Async.microTask%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20handle%20Handle%20returned%20from%20%60run%60%20of%20callback%20to%20cancel%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2Fcancel%3Afunction%20cancel(handle)%7Bvar%20idx%3Dhandle-microtaskLastHandle%3Bif(idx%3E%3D0)%7Bif(!microtaskCallbacks%5Bidx%5D)%7Bthrow%20new%20Error('invalid%20async%20handle%3A%20'%2Bhandle)%3B%7DmicrotaskCallbacks%5Bidx%5D%3Dnull%3B%7D%7D%7D%7D%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Fasync.html.js%0A",
            "totalBytes": 5682,
            "wastedBytes": 4165,
            "wastedPercent": 73.30165434706089
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7D(function()%7B'use%20strict'%3B%2F**%0A%20%20%20%20%20*%20Class%20representing%20a%20static%20string%20value%20which%20can%20be%20used%20to%20filter%0A%20%20%20%20%20*%20strings%20by%20asseting%20that%20they%20have%20been%20created%20via%20this%20class.%20The%0A%20%20%20%20%20*%20%60value%60%20property%20returns%20the%20string%20passed%20to%20the%20constructor.%0A%20%20%20%20%20*%2Fvar%20LiteralString%3Dfunction()%7Bfunction%20LiteralString(string)%7B_classCallCheck(this%2CLiteralString)%3B%2F**%20%40type%20%7Bstring%7D%20*%2Fthis.value%3Dstring.toString()%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20%40return%20%7Bstring%7D%20LiteralString%20string%20value%0A%20%20%20%20%20%20%20*%2F_createClass(LiteralString%2C%5B%7Bkey%3A'toString'%2Cvalue%3Afunction%20toString()%7Breturn%20this.value%3B%7D%7D%5D)%3Breturn%20LiteralString%3B%7D()%3B%2F**%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Object%20to%20stringify%20into%20HTML%0A%20%20%20%20%20*%20%40return%20%7Bstring%7D%20HTML%20stringified%20form%20of%20%60obj%60%0A%20%20%20%20%20*%2Ffunction%20literalValue(value)%7Bif(value%20instanceof%20LiteralString)%7Breturn(%2F**%20%40type%20%7B!LiteralString%7D%20*%2Fvalue.value)%3B%7Delse%7Bthrow%20new%20Error('non-literal%20value%20passed%20to%20Polymer.htmlLiteral%3A%20'%2Bvalue)%3B%7D%7D%2F**%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Object%20to%20stringify%20into%20HTML%0A%20%20%20%20%20*%20%40return%20%7Bstring%7D%20HTML%20stringified%20form%20of%20%60obj%60%0A%20%20%20%20%20*%2Ffunction%20htmlValue(value)%7Bif(value%20instanceof%20HTMLTemplateElement)%7Breturn(%2F**%20%40type%20%7B!HTMLTemplateElement%20%7D%20*%2Fvalue.innerHTML)%3B%7Delse%20if(value%20instanceof%20LiteralString)%7Breturn%20literalValue(value)%3B%7Delse%7Bthrow%20new%20Error('non-template%20value%20passed%20to%20Polymer.html%3A%20'%2Bvalue)%3B%7D%7D%2F**%0A%20%20%20%20%20*%20A%20template%20literal%20tag%20that%20creates%20an%20HTML%20%3Ctemplate%3E%20element%20from%20the%0A%20%20%20%20%20*%20contents%20of%20the%20string.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20This%20allows%20you%20to%20write%20a%20Polymer%20Template%20in%20JavaScript.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Templates%20can%20be%20composed%20by%20interpolating%20%60HTMLTemplateElement%60s%20in%0A%20%20%20%20%20*%20expressions%20in%20the%20JavaScript%20template%20literal.%20The%20nested%20template's%0A%20%20%20%20%20*%20%60innerHTML%60%20is%20included%20in%20the%20containing%20template.%20%20The%20only%20other%0A%20%20%20%20%20*%20values%20allowed%20in%20expressions%20are%20those%20returned%20from%20%60Polymer.htmlLiteral%60%0A%20%20%20%20%20*%20which%20ensures%20only%20literal%20values%20from%20JS%20source%20ever%20reach%20the%20HTML%2C%20to%0A%20%20%20%20%20*%20guard%20against%20XSS%20risks.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20All%20other%20values%20are%20disallowed%20in%20expressions%20to%20help%20prevent%20XSS%0A%20%20%20%20%20*%20attacks%3B%20however%2C%20%60Polymer.htmlLiteral%60%20can%20be%20used%20to%20compose%20static%0A%20%20%20%20%20*%20string%20values%20into%20templates.%20This%20is%20useful%20to%20compose%20strings%20into%0A%20%20%20%20%20*%20places%20that%20do%20not%20accept%20html%2C%20like%20the%20css%20text%20of%20a%20%60style%60%0A%20%20%20%20%20*%20element.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%20%20%20%20static%20get%20template()%20%7B%0A%20%20%20%20%20*%20%20%20%20%20%20%20return%20Polymer.html%60%0A%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%3Cstyle%3E%3Ahost%7B%20content%3A%22...%22%20%7D%3C%2Fstyle%3E%0A%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22shadowed%22%3E%24%7Bthis.partialTemplate%7D%3C%2Fdiv%3E%0A%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%24%7Bsuper.template%7D%0A%20%20%20%20%20*%20%20%20%20%20%20%20%60%3B%0A%20%20%20%20%20*%20%20%20%20%20%7D%0A%20%20%20%20%20*%20%20%20%20%20static%20get%20partialTemplate()%20%7B%20return%20Polymer.html%60%3Cspan%3EPartial!%3C%2Fspan%3E%60%3B%20%7D%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer%0A%20%20%20%20%20*%20%40param%20%7B!ITemplateArray%7D%20strings%20Constant%20parts%20of%20tagged%20template%20literal%0A%20%20%20%20%20*%20%40param%20%7B...*%7D%20values%20Variable%20parts%20of%20tagged%20template%20literal%0A%20%20%20%20%20*%20%40return%20%7B!HTMLTemplateElement%7D%20Constructed%20HTMLTemplateElement%0A%20%20%20%20%20*%2FPolymer.html%3Dfunction%20html(strings)%7Bvar%20template%3D%2F**%20%40type%20%7B!HTMLTemplateElement%7D%20*%2Fdocument.createElement('template')%3Bfor(var%20_len%3Darguments.length%2Cvalues%3DArray(_len%3E1%3F_len-1%3A0)%2C_key%3D1%3B_key%3C_len%3B_key%2B%2B)%7Bvalues%5B_key-1%5D%3Darguments%5B_key%5D%3B%7Dtemplate.innerHTML%3Dvalues.reduce(function(acc%2Cv%2Cidx)%7Breturn%20acc%2BhtmlValue(v)%2Bstrings%5Bidx%2B1%5D%3B%7D%2Cstrings%5B0%5D)%3Breturn%20template%3B%7D%3B%2F**%0A%20%20%20%20%20*%20An%20html%20literal%20tag%20that%20can%20be%20used%20with%20%60Polymer.html%60%20to%20compose.%0A%20%20%20%20%20*%20a%20literal%20string.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%20%20%20%20static%20get%20template()%20%7B%0A%20%20%20%20%20*%20%20%20%20%20%20%20return%20Polymer.html%60%0A%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%3Cstyle%3E%0A%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%3Ahost%20%7B%20display%3A%20block%3B%20%7D%0A%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%24%7BstyleTemplate%7D%0A%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%3C%2Fstyle%3E%0A%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22shadowed%22%3E%24%7BstaticValue%7D%3C%2Fdiv%3E%0A%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%24%7Bsuper.template%7D%0A%20%20%20%20%20*%20%20%20%20%20%20%20%60%3B%0A%20%20%20%20%20*%20%20%20%20%20%7D%0A%20%20%20%20%20*%20%20%20%20%20static%20get%20styleTemplate()%20%7B%20return%20Polymer.htmlLiteral%60.shadowed%20%7B%20background%3A%20gray%3B%20%7D%60%3B%20%7D%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer%0A%20%20%20%20%20*%20%40param%20%7B!ITemplateArray%7D%20strings%20Constant%20parts%20of%20tagged%20template%20literal%0A%20%20%20%20%20*%20%40param%20%7B...*%7D%20values%20Variable%20parts%20of%20tagged%20template%20literal%0A%20%20%20%20%20*%20%40return%20%7B!LiteralString%7D%20Constructed%20literal%20string%0A%20%20%20%20%20*%2FPolymer.htmlLiteral%3Dfunction(strings)%7Bfor(var%20_len2%3Darguments.length%2Cvalues%3DArray(_len2%3E1%3F_len2-1%3A0)%2C_key2%3D1%3B_key2%3C_len2%3B_key2%2B%2B)%7Bvalues%5B_key2-1%5D%3Darguments%5B_key2%5D%3B%7Dreturn%20new%20LiteralString(values.reduce(function(acc%2Cv%2Cidx)%7Breturn%20acc%2BliteralValue(v)%2Bstrings%5Bidx%2B1%5D%3B%7D%2Cstrings%5B0%5D))%3B%7D%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Fhtml-tag.html.js%0A",
            "totalBytes": 5107,
            "wastedBytes": 3208,
            "wastedPercent": 62.81574309770903
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3Bvar%20modules%3D%7B%7D%3Bvar%20lcModules%3D%7B%7D%3Bfunction%20setModule(id%2Cmodule)%7B%2F%2F%20store%20id%20separate%20from%20lowercased%20id%20so%20that%0A%2F%2F%20in%20all%20cases%20mixedCase%20id%20will%20stored%20distinctly%0A%2F%2F%20and%20lowercase%20version%20is%20a%20fallback%0Amodules%5Bid%5D%3DlcModules%5Bid.toLowerCase()%5D%3Dmodule%3B%7Dfunction%20findModule(id)%7Breturn%20modules%5Bid%5D%7C%7ClcModules%5Bid.toLowerCase()%5D%3B%7Dfunction%20styleOutsideTemplateCheck(inst)%7Bif(inst.querySelector('style'))%7Bconsole.warn('dom-module%20%25s%20has%20style%20outside%20template'%2Cinst.id)%3B%7D%7D%2F**%0A%20%20%20*%20The%20%60dom-module%60%20element%20registers%20the%20dom%20it%20contains%20to%20the%20name%20given%0A%20%20%20*%20by%20the%20module's%20id%20attribute.%20It%20provides%20a%20unified%20database%20of%20dom%0A%20%20%20*%20accessible%20via%20its%20static%20%60import%60%20API.%0A%20%20%20*%0A%20%20%20*%20A%20key%20use%20case%20of%20%60dom-module%60%20is%20for%20providing%20custom%20element%20%60%3Ctemplate%3E%60s%0A%20%20%20*%20via%20HTML%20imports%20that%20are%20parsed%20by%20the%20native%20HTML%20parser%2C%20that%20can%20be%0A%20%20%20*%20relocated%20during%20a%20bundling%20pass%20and%20still%20looked%20up%20by%20%60id%60.%0A%20%20%20*%0A%20%20%20*%20Example%3A%0A%20%20%20*%0A%20%20%20*%20%20%20%20%20%3Cdom-module%20id%3D%22foo%22%3E%0A%20%20%20*%20%20%20%20%20%20%20%3Cimg%20src%3D%22stuff.png%22%3E%0A%20%20%20*%20%20%20%20%20%3C%2Fdom-module%3E%0A%20%20%20*%0A%20%20%20*%20Then%20in%20code%20in%20some%20other%20location%20that%20cannot%20access%20the%20dom-module%20above%0A%20%20%20*%0A%20%20%20*%20%20%20%20%20let%20img%20%3D%20customElements.get('dom-module').import('foo'%2C%20'img')%3B%0A%20%20%20*%0A%20%20%20*%20%40customElement%0A%20%20%20*%20%40extends%20HTMLElement%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Custom%20element%20that%20provides%20a%20registry%20of%20relocatable%20DOM%20content%0A%20%20%20*%20%20%20by%20%60id%60%20that%20is%20agnostic%20to%20bundling.%0A%20%20%20*%20%40unrestricted%0A%20%20%20*%2Fvar%20DomModule%3Dfunction(_HTMLElement)%7B_inherits(DomModule%2C_HTMLElement)%3Bfunction%20DomModule()%7B_classCallCheck(this%2CDomModule)%3Breturn%20_possibleConstructorReturn(this%2C(DomModule.__proto__%7C%7CObject.getPrototypeOf(DomModule)).apply(this%2Carguments))%3B%7D_createClass(DomModule%2C%5B%7Bkey%3A'attributeChangedCallback'%2C%2F*%20eslint-disable%20no-unused-vars%20*%2F%2F**%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20name%20Name%20of%20attribute.%0A%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20old%20Old%20value%20of%20attribute.%0A%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20value%20Current%20value%20of%20attribute.%0A%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20namespace%20Attribute%20namespace.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Fvalue%3Afunction%20attributeChangedCallback(name%2Cold%2Cvalue%2Cnamespace)%7Bif(old!%3D%3Dvalue)%7Bthis.register()%3B%7D%7D%2F*%20eslint-enable%20no-unused-args%20*%2F%2F**%0A%20%20%20%20%20*%20The%20absolute%20URL%20of%20the%20original%20location%20of%20this%20%60dom-module%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20This%20value%20will%20differ%20from%20this%20element's%20%60ownerDocument%60%20in%20the%0A%20%20%20%20%20*%20following%20ways%3A%0A%20%20%20%20%20*%20-%20Takes%20into%20account%20any%20%60assetpath%60%20attribute%20added%20during%20bundling%0A%20%20%20%20%20*%20%20%20to%20indicate%20the%20original%20location%20relative%20to%20the%20bundled%20location%0A%20%20%20%20%20*%20-%20Uses%20the%20HTMLImports%20polyfill's%20%60importForElement%60%20API%20to%20ensure%0A%20%20%20%20%20*%20%20%20the%20path%20is%20relative%20to%20the%20import%20document's%20location%20since%0A%20%20%20%20%20*%20%20%20%60ownerDocument%60%20is%20not%20currently%20polyfilled%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'register'%2C%2F**%0A%20%20%20%20%20*%20Registers%20the%20dom-module%20at%20a%20given%20id.%20This%20method%20should%20only%20be%20called%0A%20%20%20%20%20*%20when%20a%20dom-module%20is%20imperatively%20created.%20For%0A%20%20%20%20%20*%20example%2C%20%60document.createElement('dom-module').register('foo')%60.%0A%20%20%20%20%20*%20%40param%20%7Bstring%3D%7D%20id%20The%20id%20at%20which%20to%20register%20the%20dom-module.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Fvalue%3Afunction%20register(id)%7Bid%3Did%7C%7Cthis.id%3Bif(id)%7B%2F%2F%20Under%20strictTemplatePolicy%2C%20reject%20and%20null%20out%20any%20re-registered%0A%2F%2F%20dom-module%20since%20it%20is%20ambiguous%20whether%20first-in%20or%20last-in%20is%20trusted%20%0Aif(Polymer.strictTemplatePolicy%26%26findModule(id)!%3D%3Dundefined)%7BsetModule(id%2Cnull)%3Bthrow%20new%20Error('strictTemplatePolicy%3A%20dom-module%20'%2Bid%2B'%20re-registered')%3B%7Dthis.id%3Did%3BsetModule(id%2Cthis)%3BstyleOutsideTemplateCheck(this)%3B%7D%7D%7D%2C%7Bkey%3A'assetpath'%2Cget%3Afunction%20get()%7B%2F%2F%20Don't%20override%20existing%20assetpath.%0Aif(!this.__assetpath)%7B%2F%2F%20note%3A%20assetpath%20set%20via%20an%20attribute%20must%20be%20relative%20to%20this%0A%2F%2F%20element's%20location%3B%20accomodate%20polyfilled%20HTMLImports%0Avar%20owner%3Dwindow.HTMLImports%26%26HTMLImports.importForElement%3FHTMLImports.importForElement(this)%7C%7Cdocument%3Athis.ownerDocument%3Bvar%20url%3DPolymer.ResolveUrl.resolveUrl(this.getAttribute('assetpath')%7C%7C''%2Cowner.baseURI)%3Bthis.__assetpath%3DPolymer.ResolveUrl.pathFromUrl(url)%3B%7Dreturn%20this.__assetpath%3B%7D%7D%5D%2C%5B%7Bkey%3A'import'%2C%2F**%0A%20%20%20%20%20*%20Retrieves%20the%20element%20specified%20by%20the%20css%20%60selector%60%20in%20the%20module%0A%20%20%20%20%20*%20registered%20by%20%60id%60.%20For%20example%2C%20this.import('foo'%2C%20'img')%3B%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20id%20The%20id%20of%20the%20dom-module%20in%20which%20to%20search.%0A%20%20%20%20%20*%20%40param%20%7Bstring%3D%7D%20selector%20The%20css%20selector%20by%20which%20to%20find%20the%20element.%0A%20%20%20%20%20*%20%40return%20%7BElement%7D%20Returns%20the%20element%20which%20matches%20%60selector%60%20in%20the%0A%20%20%20%20%20*%20module%20registered%20at%20the%20specified%20%60id%60.%0A%20%20%20%20%20*%2Fvalue%3Afunction%20_import(id%2Cselector)%7Bif(id)%7Bvar%20m%3DfindModule(id)%3Bif(m%26%26selector)%7Breturn%20m.querySelector(selector)%3B%7Dreturn%20m%3B%7Dreturn%20null%3B%7D%7D%2C%7Bkey%3A'observedAttributes'%2Cget%3Afunction%20get()%7Breturn%5B'id'%5D%3B%7D%7D%5D)%3Breturn%20DomModule%3B%7D(HTMLElement)%3BDomModule.prototype%5B'modules'%5D%3Dmodules%3BcustomElements.define('dom-module'%2CDomModule)%3B%2F**%20%40const%20*%2FPolymer.DomModule%3DDomModule%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Felements%2Fdom-module.html.js%0A",
            "totalBytes": 6199,
            "wastedBytes": 3169,
            "wastedPercent": 51.12114857235037
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3Bvar%20attr%3D'include'%3Bvar%20CustomStyleInterface%3Dwindow.ShadyCSS.CustomStyleInterface%3B%2F**%0A%20%20%20*%20Custom%20element%20for%20defining%20styles%20in%20the%20main%20document%20that%20can%20take%0A%20%20%20*%20advantage%20of%20%5Bshady%20DOM%5D(https%3A%2F%2Fgithub.com%2Fwebcomponents%2Fshadycss)%20shims%0A%20%20%20*%20for%20style%20encapsulation%2C%20custom%20properties%2C%20and%20custom%20mixins.%0A%20%20%20*%0A%20%20%20*%20-%20Document%20styles%20defined%20in%20a%20%60%3Ccustom-style%3E%60%20are%20shimmed%20to%20ensure%20they%0A%20%20%20*%20%20%20do%20not%20leak%20into%20local%20DOM%20when%20running%20on%20browsers%20without%20native%0A%20%20%20*%20%20%20Shadow%20DOM.%0A%20%20%20*%20-%20Custom%20properties%20can%20be%20defined%20in%20a%20%60%3Ccustom-style%3E%60.%20Use%20the%20%60html%60%20selector%0A%20%20%20*%20%20%20to%20define%20custom%20properties%20that%20apply%20to%20all%20custom%20elements.%0A%20%20%20*%20-%20Custom%20mixins%20can%20be%20defined%20in%20a%20%60%3Ccustom-style%3E%60%2C%20if%20you%20import%20the%20optional%0A%20%20%20*%20%20%20%5Bapply%20shim%5D(https%3A%2F%2Fgithub.com%2Fwebcomponents%2Fshadycss%23about-applyshim)%0A%20%20%20*%20%20%20(%60shadycss%2Fapply-shim.html%60).%0A%20%20%20*%0A%20%20%20*%20To%20use%3A%0A%20%20%20*%0A%20%20%20*%20-%20Import%20%60custom-style.html%60.%0A%20%20%20*%20-%20Place%20a%20%60%3Ccustom-style%3E%60%20element%20in%20the%20main%20document%2C%20wrapping%20an%20inline%20%60%3Cstyle%3E%60%20tag%20that%0A%20%20%20*%20%20%20contains%20the%20CSS%20rules%20you%20want%20to%20shim.%0A%20%20%20*%0A%20%20%20*%20For%20example%3A%0A%20%20%20*%0A%20%20%20*%20%60%60%60html%0A%20%20%20*%20%3C!--%20import%20apply%20shim--only%20required%20if%20using%20mixins%20--%3E%0A%20%20%20*%20%3Clink%20rel%3D%22import%22%20href%3D%22bower_components%2Fshadycss%2Fapply-shim.html%22%3E%0A%20%20%20*%20%3C!--%20import%20custom-style%20element%20--%3E%0A%20%20%20*%20%3Clink%20rel%3D%22import%22%20href%3D%22bower_components%2Fpolymer%2Flib%2Felements%2Fcustom-style.html%22%3E%0A%20%20%20*%0A%20%20%20*%20%3Ccustom-style%3E%0A%20%20%20*%20%20%20%3Cstyle%3E%0A%20%20%20*%20%20%20%20%20html%20%7B%0A%20%20%20*%20%20%20%20%20%20%20--custom-color%3A%20blue%3B%0A%20%20%20*%20%20%20%20%20%20%20--custom-mixin%3A%20%7B%0A%20%20%20*%20%20%20%20%20%20%20%20%20font-weight%3A%20bold%3B%0A%20%20%20*%20%20%20%20%20%20%20%20%20color%3A%20red%3B%0A%20%20%20*%20%20%20%20%20%20%20%7D%3B%0A%20%20%20*%20%20%20%20%20%7D%0A%20%20%20*%20%20%20%3C%2Fstyle%3E%0A%20%20%20*%20%3C%2Fcustom-style%3E%0A%20%20%20*%20%60%60%60%0A%20%20%20*%0A%20%20%20*%20%40customElement%0A%20%20%20*%20%40extends%20HTMLElement%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Custom%20element%20for%20defining%20styles%20in%20the%20main%20document%20that%20can%0A%20%20%20*%20%20%20take%20advantage%20of%20Polymer's%20style%20scoping%20and%20custom%20properties%20shims.%0A%20%20%20*%2Fvar%20CustomStyle%3Dfunction(_HTMLElement)%7B_inherits(CustomStyle%2C_HTMLElement)%3Bfunction%20CustomStyle()%7B_classCallCheck(this%2CCustomStyle)%3Bvar%20_this%3D_possibleConstructorReturn(this%2C(CustomStyle.__proto__%7C%7CObject.getPrototypeOf(CustomStyle)).call(this))%3B_this._style%3Dnull%3BCustomStyleInterface.addCustomStyle(_this)%3Breturn%20_this%3B%7D%2F**%0A%20%20%20%20%20*%20Returns%20the%20light-DOM%20%60%3Cstyle%3E%60%20child%20this%20element%20wraps.%20%20Upon%20first%0A%20%20%20%20%20*%20call%20any%20style%20modules%20referenced%20via%20the%20%60include%60%20attribute%20will%20be%0A%20%20%20%20%20*%20concatenated%20to%20this%20element's%20%60%3Cstyle%3E%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40return%20%7BHTMLStyleElement%7D%20This%20element's%20light-DOM%20%60%3Cstyle%3E%60%0A%20%20%20%20%20*%2F_createClass(CustomStyle%2C%5B%7Bkey%3A'getStyle'%2Cvalue%3Afunction%20getStyle()%7Bif(this._style)%7Breturn%20this._style%3B%7Dvar%20style%3D%2F**%20%40type%20%7BHTMLStyleElement%7D%20*%2Fthis.querySelector('style')%3Bif(!style)%7Breturn%20null%3B%7Dthis._style%3Dstyle%3Bvar%20include%3Dstyle.getAttribute(attr)%3Bif(include)%7Bstyle.removeAttribute(attr)%3Bstyle.textContent%3DPolymer.StyleGather.cssFromModules(include)%2Bstyle.textContent%3B%7D%2F*%0A%20%20%20%20%20%20HTML%20Imports%20styling%20the%20main%20document%20are%20deprecated%20in%20Chrome%0A%20%20%20%20%20%20https%3A%2F%2Fcrbug.com%2F523952%0A%0A%20%20%20%20%20%20If%20this%20element%20is%20not%20in%20the%20main%20document%2C%20then%20it%20must%20be%20in%20an%20HTML%20Import%20document.%0A%20%20%20%20%20%20In%20that%20case%2C%20move%20the%20custom%20style%20to%20the%20main%20document.%0A%0A%20%20%20%20%20%20The%20ordering%20of%20%60%3Ccustom-style%3E%60%20should%20stay%20the%20same%20as%20when%20loaded%20by%20HTML%20Imports%2C%20but%20there%20may%20be%20odd%0A%20%20%20%20%20%20cases%20of%20ordering%20w.r.t%20the%20main%20document%20styles.%0A%20%20%20%20%20%20*%2Fif(this.ownerDocument!%3D%3Dwindow.document)%7Bwindow.document.head.appendChild(this)%3B%7Dreturn%20this._style%3B%7D%7D%5D)%3Breturn%20CustomStyle%3B%7D(HTMLElement)%3Bwindow.customElements.define('custom-style'%2CCustomStyle)%3B%2F**%20%40const%20*%2FPolymer.CustomStyle%3DCustomStyle%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Felements%2Fcustom-style.html.js%0A",
            "totalBytes": 5009,
            "wastedBytes": 2719,
            "wastedPercent": 54.28229187462568
          },
          {
            "url": "data:text/javascript;charset=utf-8,%2F**%20%40suppress%20%7Bdeprecated%7D%20*%2F(function()%7B'use%20strict'%3B%2F**%0A%20%20%20*%20Sets%20the%20global%2C%20legacy%20settings.%0A%20%20%20*%0A%20%20%20*%20%40deprecated%0A%20%20%20*%20%40namespace%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%2FPolymer.Settings%3DPolymer.Settings%7C%7C%7B%7D%3BPolymer.Settings.useShadow%3D!window.ShadyDOM%3BPolymer.Settings.useNativeCSSProperties%3DBoolean(!window.ShadyCSS%7C%7Cwindow.ShadyCSS.nativeCss)%3BPolymer.Settings.useNativeCustomElements%3D!window.customElements.polyfillWrapFlushCallback%3B%2F**%0A%20%20%20*%20Globally%20settable%20property%20that%20is%20automatically%20assigned%20to%0A%20%20%20*%20%60Polymer.ElementMixin%60%20instances%2C%20useful%20for%20binding%20in%20templates%20to%0A%20%20%20*%20make%20URL's%20relative%20to%20an%20application's%20root.%20%20Defaults%20to%20the%20main%0A%20%20%20*%20document%20URL%2C%20but%20can%20be%20overridden%20by%20users.%20%20It%20may%20be%20useful%20to%20set%0A%20%20%20*%20%60Polymer.rootPath%60%20to%20provide%20a%20stable%20application%20mount%20path%20when%0A%20%20%20*%20using%20client%20side%20routing.%0A%20%20%20*%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%2FPolymer.rootPath%3DPolymer.rootPath%7C%7CPolymer.ResolveUrl.pathFromUrl(document.baseURI%7C%7Cwindow.location.href)%3B%2F**%0A%20%20%20*%20Sets%20the%20global%20rootPath%20property%20used%20by%20%60Polymer.ElementMixin%60%20and%0A%20%20%20*%20available%20via%20%60Polymer.rootPath%60.%0A%20%20%20*%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40param%20%7Bstring%7D%20path%20The%20new%20root%20path%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%2FPolymer.setRootPath%3Dfunction(path)%7BPolymer.rootPath%3Dpath%3B%7D%3B%2F**%0A%20%20%20*%20A%20global%20callback%20used%20to%20sanitize%20any%20value%20before%20inserting%20it%20into%20the%20DOM.%20The%20callback%20signature%20is%3A%0A%20%20%20*%0A%20%20%20*%20%20%20%20%20Polymer%20%3D%20%7B%0A%20%20%20*%20%20%20%20%20%20%20sanitizeDOMValue%3A%20function(value%2C%20name%2C%20type%2C%20node)%20%7B%20...%20%7D%0A%20%20%20*%20%20%20%20%20%7D%0A%20%20%20*%0A%20%20%20*%20Where%3A%0A%20%20%20*%0A%20%20%20*%20%60value%60%20is%20the%20value%20to%20sanitize.%0A%20%20%20*%20%60name%60%20is%20the%20name%20of%20an%20attribute%20or%20property%20(for%20example%2C%20href).%0A%20%20%20*%20%60type%60%20indicates%20where%20the%20value%20is%20being%20inserted%3A%20one%20of%20property%2C%20attribute%2C%20or%20text.%0A%20%20%20*%20%60node%60%20is%20the%20node%20where%20the%20value%20is%20being%20inserted.%0A%20%20%20*%0A%20%20%20*%20%40type%20%7B(function(*%2Cstring%2Cstring%2CNode)%3A*)%7Cundefined%7D%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%2FPolymer.sanitizeDOMValue%3DPolymer.sanitizeDOMValue%7C%7Cnull%3B%2F**%0A%20%20%20*%20Sets%20the%20global%20sanitizeDOMValue%20available%20via%20%60Polymer.sanitizeDOMValue%60.%0A%20%20%20*%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40param%20%7B(function(*%2Cstring%2Cstring%2CNode)%3A*)%7Cundefined%7D%20newSanitizeDOMValue%20the%20global%20sanitizeDOMValue%20callback%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%2FPolymer.setSanitizeDOMValue%3Dfunction(newSanitizeDOMValue)%7BPolymer.sanitizeDOMValue%3DnewSanitizeDOMValue%3B%7D%3B%2F**%0A%20%20%20*%20Globally%20settable%20property%20to%20make%20Polymer%20Gestures%20use%20passive%20TouchEvent%20listeners%20when%20recognizing%20gestures.%0A%20%20%20*%20When%20set%20to%20%60true%60%2C%20gestures%20made%20from%20touch%20will%20not%20be%20able%20to%20prevent%20scrolling%2C%20allowing%20for%20smoother%0A%20%20%20*%20scrolling%20performance.%0A%20%20%20*%20Defaults%20to%20%60false%60%20for%20backwards%20compatibility.%0A%20%20%20*%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%2FPolymer.passiveTouchGestures%3DPolymer.passiveTouchGestures%7C%7Cfalse%3B%2F**%0A%20%20%20*%20Sets%20%60passiveTouchGestures%60%20globally%20for%20all%20elements%20using%20Polymer%20Gestures.%0A%20%20%20*%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40param%20%7Bboolean%7D%20usePassive%20enable%20or%20disable%20passive%20touch%20gestures%20globally%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%2FPolymer.setPassiveTouchGestures%3Dfunction(usePassive)%7BPolymer.passiveTouchGestures%3DusePassive%3B%7D%3BPolymer.legacyOptimizations%3DPolymer.legacyOptimizations%7C%7Cwindow.PolymerSettings%26%26window.PolymerSettings.legacyOptimizations%7C%7Cfalse%3B%2F**%0A%20%20%20*%20Sets%20%60legacyOptimizations%60%20globally%20for%20all%20elements.%20Enables%0A%20%20%20*%20optimizations%20when%20only%20legacy%20Polymer()%20style%20elements%20are%20used.%0A%20%20%20*%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40param%20%7Bboolean%7D%20useLegacyOptimizations%20enable%20or%20disable%20legacy%20optimizations%20globally.%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%2FPolymer.setLegacyOptimizations%3Dfunction(useLegacyOptimizations)%7BPolymer.legacyOptimizations%3DuseLegacyOptimizations%3B%7D%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Fsettings.html.js%0A",
            "totalBytes": 3665,
            "wastedBytes": 2636,
            "wastedPercent": 71.92360163710778
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/scripts/utils.js",
            "totalBytes": 5322,
            "wastedBytes": 2520,
            "wastedPercent": 47.35983153461437
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7D(function()%7B'use%20strict'%3B%2F**%0A%20%20%20*%20%40summary%20Collapse%20multiple%20callbacks%20into%20one%20invocation%20after%20a%20timer.%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%2Fvar%20Debouncer%3Dfunction()%7Bfunction%20Debouncer()%7B_classCallCheck(this%2CDebouncer)%3Bthis._asyncModule%3Dnull%3Bthis._callback%3Dnull%3Bthis._timer%3Dnull%3B%7D%2F**%0A%20%20%20%20%20*%20Sets%20the%20scheduler%3B%20that%20is%2C%20a%20module%20with%20the%20Async%20interface%2C%0A%20%20%20%20%20*%20a%20callback%20and%20optional%20arguments%20to%20be%20passed%20to%20the%20run%20function%0A%20%20%20%20%20*%20from%20the%20async%20module.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7B!AsyncInterface%7D%20asyncModule%20Object%20with%20Async%20interface.%0A%20%20%20%20%20*%20%40param%20%7Bfunction()%7D%20callback%20Callback%20to%20run.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F_createClass(Debouncer%2C%5B%7Bkey%3A'setConfig'%2Cvalue%3Afunction%20setConfig(asyncModule%2Ccallback)%7Bvar%20_this%3Dthis%3Bthis._asyncModule%3DasyncModule%3Bthis._callback%3Dcallback%3Bthis._timer%3Dthis._asyncModule.run(function()%7B_this._timer%3Dnull%3B_this._callback()%3B%7D)%3B%7D%2F**%0A%20%20%20%20%20*%20Cancels%20an%20active%20debouncer%20and%20returns%20a%20reference%20to%20itself.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'cancel'%2Cvalue%3Afunction%20cancel()%7Bif(this.isActive())%7Bthis._asyncModule.cancel(this._timer)%3Bthis._timer%3Dnull%3B%7D%7D%2F**%0A%20%20%20%20%20*%20Flushes%20an%20active%20debouncer%20and%20returns%20a%20reference%20to%20itself.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'flush'%2Cvalue%3Afunction%20flush()%7Bif(this.isActive())%7Bthis.cancel()%3Bthis._callback()%3B%7D%7D%2F**%0A%20%20%20%20%20*%20Returns%20true%20if%20the%20debouncer%20is%20active.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20active.%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'isActive'%2Cvalue%3Afunction%20isActive()%7Breturn%20this._timer!%3Dnull%3B%7D%2F**%0A%20%20%20%20%20*%20Creates%20a%20debouncer%20if%20no%20debouncer%20is%20passed%20as%20a%20parameter%0A%20%20%20%20%20*%20or%20it%20cancels%20an%20active%20debouncer%20otherwise.%20The%20following%0A%20%20%20%20%20*%20example%20shows%20how%20a%20debouncer%20can%20be%20called%20multiple%20times%20within%20a%0A%20%20%20%20%20*%20microtask%20and%20%22debounced%22%20such%20that%20the%20provided%20callback%20function%20is%0A%20%20%20%20%20*%20called%20once.%20Add%20this%20method%20to%20a%20custom%20element%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20_debounceWork()%20%7B%0A%20%20%20%20%20*%20%20%20this._debounceJob%20%3D%20Polymer.Debouncer.debounce(this._debounceJob%2C%0A%20%20%20%20%20*%20%20%20%20%20%20%20Polymer.Async.microTask%2C%20()%20%3D%3E%20%7B%0A%20%20%20%20%20*%20%20%20%20%20this._doWork()%3B%0A%20%20%20%20%20*%20%20%20%7D)%3B%0A%20%20%20%20%20*%20%7D%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20If%20the%20%60_debounceWork%60%20method%20is%20called%20multiple%20times%20within%20the%20same%0A%20%20%20%20%20*%20microtask%2C%20the%20%60_doWork%60%20function%20will%20be%20called%20only%20once%20at%20the%20next%0A%20%20%20%20%20*%20microtask%20checkpoint.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Note%3A%20In%20testing%20it%20is%20often%20convenient%20to%20avoid%20asynchrony.%20To%20accomplish%0A%20%20%20%20%20*%20this%20with%20a%20debouncer%2C%20you%20can%20use%20%60Polymer.enqueueDebouncer%60%20and%0A%20%20%20%20%20*%20%60Polymer.flush%60.%20For%20example%2C%20extend%20the%20above%20example%20by%20adding%0A%20%20%20%20%20*%20%60Polymer.enqueueDebouncer(this._debounceJob)%60%20at%20the%20end%20of%20the%0A%20%20%20%20%20*%20%60_debounceWork%60%20method.%20Then%20in%20a%20test%2C%20call%20%60Polymer.flush%60%20to%20ensure%0A%20%20%20%20%20*%20the%20debouncer%20has%20completed.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7BDebouncer%3F%7D%20debouncer%20Debouncer%20object.%0A%20%20%20%20%20*%20%40param%20%7B!AsyncInterface%7D%20asyncModule%20Object%20with%20Async%20interface%0A%20%20%20%20%20*%20%40param%20%7Bfunction()%7D%20callback%20Callback%20to%20run.%0A%20%20%20%20%20*%20%40return%20%7B!Debouncer%7D%20Returns%20a%20debouncer%20object.%0A%20%20%20%20%20*%2F%7D%5D%2C%5B%7Bkey%3A'debounce'%2Cvalue%3Afunction%20debounce(debouncer%2CasyncModule%2Ccallback)%7Bif(debouncer%20instanceof%20Debouncer)%7Bdebouncer.cancel()%3B%7Delse%7Bdebouncer%3Dnew%20Debouncer()%3B%7Ddebouncer.setConfig(asyncModule%2Ccallback)%3Breturn%20debouncer%3B%7D%7D%5D)%3Breturn%20Debouncer%3B%7D()%3B%2F**%20%40const%20*%2FPolymer.Debouncer%3DDebouncer%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Fdebounce.html.js%0A",
            "totalBytes": 3961,
            "wastedBytes": 2367,
            "wastedPercent": 59.75763696036355
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bvar%20_get%3Dfunction%20get(object%2Cproperty%2Creceiver)%7Bif(object%3D%3D%3Dnull)object%3DFunction.prototype%3Bvar%20desc%3DObject.getOwnPropertyDescriptor(object%2Cproperty)%3Bif(desc%3D%3D%3Dundefined)%7Bvar%20parent%3DObject.getPrototypeOf(object)%3Bif(parent%3D%3D%3Dnull)%7Breturn%20undefined%3B%7Delse%7Breturn%20get(parent%2Cproperty%2Creceiver)%3B%7D%7Delse%20if(%22value%22in%20desc)%7Breturn%20desc.value%3B%7Delse%7Bvar%20getter%3Ddesc.get%3Bif(getter%3D%3D%3Dundefined)%7Breturn%20undefined%3B%7Dreturn%20getter.call(receiver)%3B%7D%7D%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3Bvar%20HOST_DIR%3D%2F%3Ahost%5C(%3Adir%5C((ltr%7Crtl)%5C)%5C)%2Fg%3Bvar%20HOST_DIR_REPLACMENT%3D'%3Ahost(%5Bdir%3D%22%241%22%5D)'%3Bvar%20EL_DIR%3D%2F(%5B%5Cs%5Cw-%23%5C.%5C%5B%5C%5D%5C*%5D*)%3Adir%5C((ltr%7Crtl)%5C)%2Fg%3Bvar%20EL_DIR_REPLACMENT%3D'%3Ahost(%5Bdir%3D%22%242%22%5D)%20%241'%3Bvar%20DIR_CHECK%3D%2F%3Adir%5C((%3F%3Altr%7Crtl)%5C)%2F%3Bvar%20SHIM_SHADOW%3DBoolean(window%5B'ShadyDOM'%5D%26%26window%5B'ShadyDOM'%5D%5B'inUse'%5D)%3B%2F**%0A%20%20%20%20%20*%20%40type%20%7B!Array%3C!Polymer_DirMixin%3E%7D%0A%20%20%20%20%20*%2Fvar%20DIR_INSTANCES%3D%5B%5D%3B%2F**%20%40type%20%7BMutationObserver%7D%20*%2Fvar%20observer%3Dnull%3Bvar%20DOCUMENT_DIR%3D''%3Bfunction%20getRTL()%7BDOCUMENT_DIR%3Ddocument.documentElement.getAttribute('dir')%3B%7D%2F**%0A%20%20%20%20%20*%20%40param%20%7B!Polymer_DirMixin%7D%20instance%20Instance%20to%20set%20RTL%20status%20on%0A%20%20%20%20%20*%2Ffunction%20setRTL(instance)%7Bif(!instance.__autoDirOptOut)%7Bvar%20el%3D%2F**%20%40type%20%7B!HTMLElement%7D%20*%2Finstance%3Bel.setAttribute('dir'%2CDOCUMENT_DIR)%3B%7D%7Dfunction%20updateDirection()%7BgetRTL()%3BDOCUMENT_DIR%3Ddocument.documentElement.getAttribute('dir')%3Bfor(var%20i%3D0%3Bi%3CDIR_INSTANCES.length%3Bi%2B%2B)%7BsetRTL(DIR_INSTANCES%5Bi%5D)%3B%7D%7Dfunction%20takeRecords()%7Bif(observer%26%26observer.takeRecords().length)%7BupdateDirection()%3B%7D%7D%2F**%0A%20%20%20%20%20*%20Element%20class%20mixin%20that%20allows%20elements%20to%20use%20the%20%60%3Adir%60%20CSS%20Selector%20to%20have%0A%20%20%20%20%20*%20text%20direction%20specific%20styling.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20With%20this%20mixin%2C%20any%20stylesheet%20provided%20in%20the%20template%20will%20transform%20%60%3Adir%60%20into%0A%20%20%20%20%20*%20%60%3Ahost(%5Bdir%5D)%60%20and%20sync%20direction%20with%20the%20page%20via%20the%20element's%20%60dir%60%20attribute.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Elements%20can%20opt%20out%20of%20the%20global%20page%20text%20direction%20by%20setting%20the%20%60dir%60%20attribute%0A%20%20%20%20%20*%20directly%20in%20%60ready()%60%20or%20in%20HTML.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Caveats%3A%0A%20%20%20%20%20*%20-%20Applications%20must%20set%20%60%3Chtml%20dir%3D%22ltr%22%3E%60%20or%20%60%3Chtml%20dir%3D%22rtl%22%3E%60%20to%20sync%20direction%0A%20%20%20%20%20*%20-%20Automatic%20left-to-right%20or%20right-to-left%20styling%20is%20sync'd%20with%20the%20%60%3Chtml%3E%60%20element%20only.%0A%20%20%20%20%20*%20-%20Changing%20%60dir%60%20at%20runtime%20is%20supported.%0A%20%20%20%20%20*%20-%20Opting%20out%20of%20the%20global%20direction%20styling%20is%20permanent%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40mixinFunction%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40appliesMixin%20Polymer.PropertyAccessors%0A%20%20%20%20%20*%20%40memberof%20Polymer%0A%20%20%20%20%20*%2FPolymer.DirMixin%3DPolymer.dedupingMixin(function(base)%7Bif(!SHIM_SHADOW)%7Bif(!observer)%7BgetRTL()%3Bobserver%3Dnew%20MutationObserver(updateDirection)%3Bobserver.observe(document.documentElement%2C%7Battributes%3Atrue%2CattributeFilter%3A%5B'dir'%5D%7D)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20%20%20*%20%40extends%20%7Bbase%7D%0A%20%20%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertyAccessors%7D%0A%20%20%20%20%20%20%20*%20%40private%0A%20%20%20%20%20%20%20*%2Fvar%20elementBase%3DPolymer.PropertyAccessors(base)%3B%2F**%0A%20%20%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20%20%20*%20%40mixinClass%0A%20%20%20%20%20%20%20*%20%40implements%20%7BPolymer_DirMixin%7D%0A%20%20%20%20%20%20%20*%2Fvar%20Dir%3Dfunction(_elementBase)%7B_inherits(Dir%2C_elementBase)%3B_createClass(Dir%2Cnull%2C%5B%7Bkey%3A'_processStyleText'%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20Interfaces%20in%20closure%20do%20not%20inherit%20statics%2C%20but%20classes%20do%0A%20%20%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_processStyleText(cssText%2CbaseURI)%7BcssText%3D_get(Dir.__proto__%7C%7CObject.getPrototypeOf(Dir)%2C'_processStyleText'%2Cthis).call(this%2CcssText%2CbaseURI)%3Bif(!SHIM_SHADOW%26%26DIR_CHECK.test(cssText))%7BcssText%3Dthis._replaceDirInCssText(cssText)%3Bthis.__activateDir%3Dtrue%3B%7Dreturn%20cssText%3B%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Replace%20%60%3Adir%60%20in%20the%20given%20CSS%20text%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20text%20CSS%20text%20to%20replace%20DIR%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Modified%20CSS%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_replaceDirInCssText'%2Cvalue%3Afunction%20_replaceDirInCssText(text)%7Bvar%20replacedText%3Dtext%3BreplacedText%3DreplacedText.replace(HOST_DIR%2CHOST_DIR_REPLACMENT)%3BreplacedText%3DreplacedText.replace(EL_DIR%2CEL_DIR_REPLACMENT)%3Breturn%20replacedText%3B%7D%7D%5D)%3Bfunction%20Dir()%7B_classCallCheck(this%2CDir)%3B%2F**%20%40type%20%7Bboolean%7D%20*%2Fvar%20_this%3D_possibleConstructorReturn(this%2C(Dir.__proto__%7C%7CObject.getPrototypeOf(Dir)).call(this))%3B_this.__autoDirOptOut%3Dfalse%3Breturn%20_this%3B%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%20Closure%20doesn't%20understand%20that%20%60this%60%20is%20an%20HTMLElement%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F_createClass(Dir%2C%5B%7Bkey%3A'ready'%2Cvalue%3Afunction%20ready()%7B_get(Dir.prototype.__proto__%7C%7CObject.getPrototypeOf(Dir.prototype)%2C'ready'%2Cthis).call(this)%3Bthis.__autoDirOptOut%3D%2F**%20%40type%20%7B!HTMLElement%7D%20*%2Fthis.hasAttribute('dir')%3B%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20If%20it%20exists%20on%20elementBase%2C%20it%20can%20be%20super'd%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'connectedCallback'%2Cvalue%3Afunction%20connectedCallback()%7Bif(elementBase.prototype.connectedCallback)%7B_get(Dir.prototype.__proto__%7C%7CObject.getPrototypeOf(Dir.prototype)%2C'connectedCallback'%2Cthis).call(this)%3B%7Dif(this.constructor.__activateDir)%7BtakeRecords()%3BDIR_INSTANCES.push(this)%3BsetRTL(this)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20If%20it%20exists%20on%20elementBase%2C%20it%20can%20be%20super'd%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'disconnectedCallback'%2Cvalue%3Afunction%20disconnectedCallback()%7Bif(elementBase.prototype.disconnectedCallback)%7B_get(Dir.prototype.__proto__%7C%7CObject.getPrototypeOf(Dir.prototype)%2C'disconnectedCallback'%2Cthis).call(this)%3B%7Dif(this.constructor.__activateDir)%7Bvar%20idx%3DDIR_INSTANCES.indexOf(this)%3Bif(idx%3E-1)%7BDIR_INSTANCES.splice(idx%2C1)%3B%7D%7D%7D%7D%5D)%3Breturn%20Dir%3B%7D(elementBase)%3BDir.__activateDir%3Dfalse%3Breturn%20Dir%3B%7D)%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Fmixins%2Fdir-mixin.html.js%0A",
            "totalBytes": 6777,
            "wastedBytes": 2284,
            "wastedPercent": 33.70222812453888
          },
          {
            "url": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3Bvar%20scheduled%3Dfalse%3Bvar%20beforeRenderQueue%3D%5B%5D%3Bvar%20afterRenderQueue%3D%5B%5D%3Bfunction%20schedule()%7Bscheduled%3Dtrue%3B%2F%2F%20before%20next%20render%0ArequestAnimationFrame(function()%7Bscheduled%3Dfalse%3BflushQueue(beforeRenderQueue)%3B%2F%2F%20after%20the%20render%0AsetTimeout(function()%7BrunQueue(afterRenderQueue)%3B%7D)%3B%7D)%3B%7Dfunction%20flushQueue(queue)%7Bwhile(queue.length)%7BcallMethod(queue.shift())%3B%7D%7Dfunction%20runQueue(queue)%7Bfor(var%20i%3D0%2Cl%3Dqueue.length%3Bi%3Cl%3Bi%2B%2B)%7BcallMethod(queue.shift())%3B%7D%7Dfunction%20callMethod(info)%7Bvar%20context%3Dinfo%5B0%5D%3Bvar%20callback%3Dinfo%5B1%5D%3Bvar%20args%3Dinfo%5B2%5D%3Btry%7Bcallback.apply(context%2Cargs)%3B%7Dcatch(e)%7BsetTimeout(function()%7Bthrow%20e%3B%7D)%3B%7D%7Dfunction%20flush()%7Bwhile(beforeRenderQueue.length%7C%7CafterRenderQueue.length)%7BflushQueue(beforeRenderQueue)%3BflushQueue(afterRenderQueue)%3B%7Dscheduled%3Dfalse%3B%7D%2F**%0A%20%20%20*%20Module%20for%20scheduling%20flushable%20pre-render%20and%20post-render%20tasks.%0A%20%20%20*%0A%20%20%20*%20%40namespace%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Module%20for%20scheduling%20flushable%20pre-render%20and%20post-render%20tasks.%0A%20%20%20*%2FPolymer.RenderStatus%3D%7B%2F**%0A%20%20%20%20%20*%20Enqueues%20a%20callback%20which%20will%20be%20run%20before%20the%20next%20render%2C%20at%0A%20%20%20%20%20*%20%60requestAnimationFrame%60%20timing.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20This%20method%20is%20useful%20for%20enqueuing%20work%20that%20requires%20DOM%20measurement%2C%0A%20%20%20%20%20*%20since%20measurement%20may%20not%20be%20reliable%20in%20custom%20element%20callbacks%20before%0A%20%20%20%20%20*%20the%20first%20render%2C%20as%20well%20as%20for%20batching%20measurement%20tasks%20in%20general.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Tasks%20in%20this%20queue%20may%20be%20flushed%20by%20calling%20%60Polymer.RenderStatus.flush()%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.RenderStatus%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20context%20Context%20object%20the%20callback%20function%20will%20be%20bound%20to%0A%20%20%20%20%20*%20%40param%20%7Bfunction(...*)%3Avoid%7D%20callback%20Callback%20function%0A%20%20%20%20%20*%20%40param%20%7B!Array%3D%7D%20args%20An%20array%20of%20arguments%20to%20call%20the%20callback%20function%20with%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2FbeforeNextRender%3Afunction%20beforeNextRender(context%2Ccallback%2Cargs)%7Bif(!scheduled)%7Bschedule()%3B%7DbeforeRenderQueue.push(%5Bcontext%2Ccallback%2Cargs%5D)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Enqueues%20a%20callback%20which%20will%20be%20run%20after%20the%20next%20render%2C%20equivalent%0A%20%20%20%20%20*%20to%20one%20task%20(%60setTimeout%60)%20after%20the%20next%20%60requestAnimationFrame%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20This%20method%20is%20useful%20for%20tuning%20the%20first-render%20performance%20of%20an%0A%20%20%20%20%20*%20element%20or%20application%20by%20deferring%20non-critical%20work%20until%20after%20the%0A%20%20%20%20%20*%20first%20paint.%20%20Typical%20non-render-critical%20work%20may%20include%20adding%20UI%0A%20%20%20%20%20*%20event%20listeners%20and%20aria%20attributes.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.RenderStatus%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20context%20Context%20object%20the%20callback%20function%20will%20be%20bound%20to%0A%20%20%20%20%20*%20%40param%20%7Bfunction(...*)%3Avoid%7D%20callback%20Callback%20function%0A%20%20%20%20%20*%20%40param%20%7B!Array%3D%7D%20args%20An%20array%20of%20arguments%20to%20call%20the%20callback%20function%20with%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2FafterNextRender%3Afunction%20afterNextRender(context%2Ccallback%2Cargs)%7Bif(!scheduled)%7Bschedule()%3B%7DafterRenderQueue.push(%5Bcontext%2Ccallback%2Cargs%5D)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Flushes%20all%20%60beforeNextRender%60%20tasks%2C%20followed%20by%20all%20%60afterNextRender%60%0A%20%20%20%20%20*%20tasks.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.RenderStatus%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Fflush%3Aflush%7D%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Frender-status.html.js%0A",
            "totalBytes": 3121,
            "wastedBytes": 2072,
            "wastedPercent": 66.38897789170137
          }
        ],
        "overallSavingsMs": 0,
        "overallSavingsBytes": 290619,
        "sortedBy": [
          "wastedBytes"
        ],
        "debugData": {
          "type": "debugdata",
          "metricSavings": {
            "FCP": 0,
            "LCP": 0
          }
        }
      },
      "guidanceLevel": 3
    },
    "unused-css-rules": {
      "id": "unused-css-rules",
      "title": "Reduce unused CSS",
      "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
      "score": 1,
      "scoreDisplayMode": "metricSavings",
      "numericValue": 0,
      "numericUnit": "millisecond",
      "displayValue": "",
      "metricSavings": {
        "FCP": 0,
        "LCP": 0
      },
      "details": {
        "type": "opportunity",
        "headings": [],
        "items": [],
        "overallSavingsMs": 0,
        "overallSavingsBytes": 0,
        "sortedBy": [
          "wastedBytes"
        ],
        "debugData": {
          "type": "debugdata",
          "metricSavings": {
            "FCP": 0,
            "LCP": 0
          }
        }
      },
      "guidanceLevel": 1
    },
    "unused-javascript": {
      "id": "unused-javascript",
      "title": "Reduce unused JavaScript",
      "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
      "score": 0,
      "scoreDisplayMode": "metricSavings",
      "numericValue": 150,
      "numericUnit": "millisecond",
      "displayValue": "Est savings of 74 KiB",
      "metricSavings": {
        "FCP": 150,
        "LCP": 150
      },
      "details": {
        "type": "opportunity",
        "headings": [
          {
            "key": "url",
            "valueType": "url",
            "subItemsHeading": {
              "key": "source",
              "valueType": "code"
            },
            "label": "URL"
          },
          {
            "key": "totalBytes",
            "valueType": "bytes",
            "subItemsHeading": {
              "key": "sourceBytes"
            },
            "label": "Transfer Size"
          },
          {
            "key": "wastedBytes",
            "valueType": "bytes",
            "subItemsHeading": {
              "key": "sourceWastedBytes"
            },
            "label": "Est Savings"
          }
        ],
        "items": [
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bvar%20_get%3Dfunction%20get(object%2Cproperty%2Creceiver)%7Bif(object%3D%3D%3Dnull)object%3DFunction.prototype%3Bvar%20desc%3DObject.getOwnPropertyDescriptor(object%2Cproperty)%3Bif(desc%3D%3D%3Dundefined)%7Bvar%20parent%3DObject.getPrototypeOf(object)%3Bif(parent%3D%3D%3Dnull)%7Breturn%20undefined%3B%7Delse%7Breturn%20get(parent%2Cproperty%2Creceiver)%3B%7D%7Delse%20if(%22value%22in%20desc)%7Breturn%20desc.value%3B%7Delse%7Bvar%20getter%3Ddesc.get%3Bif(getter%3D%3D%3Dundefined)%7Breturn%20undefined%3B%7Dreturn%20getter.call(receiver)%3B%7D%7D%3Bvar%20_typeof%3Dtypeof%20Symbol%3D%3D%3D%22function%22%26%26typeof%20Symbol.iterator%3D%3D%3D%22symbol%22%3Ffunction(obj)%7Breturn%20typeof%20obj%3B%7D%3Afunction(obj)%7Breturn%20obj%26%26typeof%20Symbol%3D%3D%3D%22function%22%26%26obj.constructor%3D%3D%3DSymbol%26%26obj!%3D%3DSymbol.prototype%3F%22symbol%22%3Atypeof%20obj%3B%7D%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3B%2F**%20%40const%20%7BObject%7D%20*%2Fvar%20CaseMap%3DPolymer.CaseMap%3B%2F%2F%20Monotonically%20increasing%20unique%20ID%20used%20for%20de-duping%20effects%20triggered%0A%2F%2F%20from%20multiple%20properties%20in%20the%20same%20turn%0Avar%20dedupeId%3D0%3B%2F**%0A%20%20%20*%20Property%20effect%20types%3B%20effects%20are%20stored%20on%20the%20prototype%20using%20these%20keys%0A%20%20%20*%20%40enum%20%7Bstring%7D%0A%20%20%20*%2Fvar%20TYPES%3D%7BCOMPUTE%3A'__computeEffects'%2CREFLECT%3A'__reflectEffects'%2CNOTIFY%3A'__notifyEffects'%2CPROPAGATE%3A'__propagateEffects'%2COBSERVE%3A'__observeEffects'%2CREAD_ONLY%3A'__readOnly'%7D%3B%2F**%20%40const%20%7BRegExp%7D%20*%2Fvar%20capitalAttributeRegex%3D%2F%5BA-Z%5D%2F%3B%2F**%0A%20%20%20*%20%40typedef%20%7B%7B%0A%20%20%20*%20name%3A%20(string%20%7C%20undefined)%2C%0A%20%20%20*%20structured%3A%20(boolean%20%7C%20undefined)%2C%0A%20%20%20*%20wildcard%3A%20(boolean%20%7C%20undefined)%0A%20%20%20*%20%7D%7D%0A%20%20%20*%2Fvar%20DataTrigger%3Dvoid%200%3B%2F%2Feslint-disable-line%20no-unused-vars%0A%2F**%0A%20%20%20*%20%40typedef%20%7B%7B%0A%20%20%20*%20info%3A%20%3F%2C%0A%20%20%20*%20trigger%3A%20(!DataTrigger%20%7C%20undefined)%2C%0A%20%20%20*%20fn%3A%20(!Function%20%7C%20undefined)%0A%20%20%20*%20%7D%7D%0A%20%20%20*%2Fvar%20DataEffect%3Dvoid%200%3B%2F%2Feslint-disable-line%20no-unused-vars%0Avar%20PropertyEffectsType%3Dvoid%200%3B%2F%2Feslint-disable-line%20no-unused-vars%0A%2F**%0A%20%20%20*%20Ensures%20that%20the%20model%20has%20an%20own-property%20map%20of%20effects%20for%20the%20given%20type.%0A%20%20%20*%20The%20model%20may%20be%20a%20prototype%20or%20an%20instance.%0A%20%20%20*%0A%20%20%20*%20Property%20effects%20are%20stored%20as%20arrays%20of%20effects%20by%20property%20in%20a%20map%2C%0A%20%20%20*%20by%20named%20type%20on%20the%20model.%20e.g.%0A%20%20%20*%0A%20%20%20*%20%20%20__computeEffects%3A%20%7B%0A%20%20%20*%20%20%20%20%20foo%3A%20%5B%20...%20%5D%2C%0A%20%20%20*%20%20%20%20%20bar%3A%20%5B%20...%20%5D%0A%20%20%20*%20%20%20%7D%0A%20%20%20*%0A%20%20%20*%20If%20the%20model%20does%20not%20yet%20have%20an%20effect%20map%20for%20the%20type%2C%20one%20is%20created%0A%20%20%20*%20and%20returned.%20%20If%20it%20does%2C%20but%20it%20is%20not%20an%20own%20property%20(i.e.%20the%0A%20%20%20*%20prototype%20had%20effects)%2C%20the%20the%20map%20is%20deeply%20cloned%20and%20the%20copy%20is%0A%20%20%20*%20set%20on%20the%20model%20and%20returned%2C%20ready%20for%20new%20effects%20to%20be%20added.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BObject%7D%20model%20Prototype%20or%20instance%0A%20%20%20*%20%40param%20%7Bstring%7D%20type%20Property%20effect%20type%0A%20%20%20*%20%40return%20%7BObject%7D%20The%20own-property%20map%20of%20effects%20for%20the%20given%20type%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20ensureOwnEffectMap(model%2Ctype)%7Bvar%20effects%3Dmodel%5Btype%5D%3Bif(!effects)%7Beffects%3Dmodel%5Btype%5D%3D%7B%7D%3B%7Delse%20if(!model.hasOwnProperty(type))%7Beffects%3Dmodel%5Btype%5D%3DObject.create(model%5Btype%5D)%3Bfor(var%20p%20in%20effects)%7Bvar%20protoFx%3Deffects%5Bp%5D%3Bvar%20instFx%3Deffects%5Bp%5D%3DArray(protoFx.length)%3Bfor(var%20i%3D0%3Bi%3CprotoFx.length%3Bi%2B%2B)%7BinstFx%5Bi%5D%3DprotoFx%5Bi%5D%3B%7D%7D%7Dreturn%20effects%3B%7D%2F%2F%20--%20effects%20----------------------------------------------%0A%2F**%0A%20%20%20*%20Runs%20all%20effects%20of%20a%20given%20type%20for%20the%20given%20set%20of%20property%20changes%0A%20%20%20*%20on%20an%20instance.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20with%20effects%20to%20run%0A%20%20%20*%20%40param%20%7BObject%7D%20effects%20Object%20map%20of%20property-to-Array%20of%20effects%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%3D%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7Bboolean%3D%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20*%20%40param%20%7B*%3D%7D%20extraArgs%20Additional%20metadata%20to%20pass%20to%20effect%20function%0A%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20an%20effect%20ran%20for%20this%20property%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runEffects(inst%2Ceffects%2Cprops%2ColdProps%2ChasPaths%2CextraArgs)%7Bif(effects)%7Bvar%20ran%3Dfalse%3Bvar%20id%3DdedupeId%2B%2B%3Bfor(var%20prop%20in%20props)%7Bif(runEffectsForProperty(inst%2Ceffects%2Cid%2Cprop%2Cprops%2ColdProps%2ChasPaths%2CextraArgs))%7Bran%3Dtrue%3B%7D%7Dreturn%20ran%3B%7Dreturn%20false%3B%7D%2F**%0A%20%20%20*%20Runs%20a%20list%20of%20effects%20for%20a%20given%20property.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20with%20effects%20to%20run%0A%20%20%20*%20%40param%20%7BObject%7D%20effects%20Object%20map%20of%20property-to-Array%20of%20effects%0A%20%20%20*%20%40param%20%7Bnumber%7D%20dedupeId%20Counter%20used%20for%20de-duping%20effects%0A%20%20%20*%20%40param%20%7Bstring%7D%20prop%20Name%20of%20changed%20property%0A%20%20%20*%20%40param%20%7B*%7D%20props%20Changed%20properties%0A%20%20%20*%20%40param%20%7B*%7D%20oldProps%20Old%20properties%0A%20%20%20*%20%40param%20%7Bboolean%3D%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20*%20%40param%20%7B*%3D%7D%20extraArgs%20Additional%20metadata%20to%20pass%20to%20effect%20function%0A%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20an%20effect%20ran%20for%20this%20property%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runEffectsForProperty(inst%2Ceffects%2CdedupeId%2Cprop%2Cprops%2ColdProps%2ChasPaths%2CextraArgs)%7Bvar%20ran%3Dfalse%3Bvar%20rootProperty%3DhasPaths%3FPolymer.Path.root(prop)%3Aprop%3Bvar%20fxs%3Deffects%5BrootProperty%5D%3Bif(fxs)%7Bfor(var%20i%3D0%2Cl%3Dfxs.length%2Cfx%3Bi%3Cl%26%26(fx%3Dfxs%5Bi%5D)%3Bi%2B%2B)%7Bif((!fx.info%7C%7Cfx.info.lastRun!%3D%3DdedupeId)%26%26(!hasPaths%7C%7CpathMatchesTrigger(prop%2Cfx.trigger)))%7Bif(fx.info)%7Bfx.info.lastRun%3DdedupeId%3B%7Dfx.fn(inst%2Cprop%2Cprops%2ColdProps%2Cfx.info%2ChasPaths%2CextraArgs)%3Bran%3Dtrue%3B%7D%7D%7Dreturn%20ran%3B%7D%2F**%0A%20%20%20*%20Determines%20whether%20a%20property%2Fpath%20that%20has%20changed%20matches%20the%20trigger%0A%20%20%20*%20criteria%20for%20an%20effect.%20%20A%20trigger%20is%20a%20descriptor%20with%20the%20following%0A%20%20%20*%20structure%2C%20which%20matches%20the%20descriptors%20returned%20from%20%60parseArg%60.%0A%20%20%20*%20e.g.%20for%20%60foo.bar.*%60%3A%0A%20%20%20*%20%60%60%60%0A%20%20%20*%20trigger%3A%20%7B%0A%20%20%20*%20%20%20name%3A%20'a.b'%2C%0A%20%20%20*%20%20%20structured%3A%20true%2C%0A%20%20%20*%20%20%20wildcard%3A%20true%0A%20%20%20*%20%7D%0A%20%20%20*%20%60%60%60%0A%20%20%20*%20If%20no%20trigger%20is%20given%2C%20the%20path%20is%20deemed%20to%20match.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7Bstring%7D%20path%20Path%20or%20property%20that%20changed%0A%20%20%20*%20%40param%20%7BDataTrigger%7D%20trigger%20Descriptor%0A%20%20%20*%20%40return%20%7Bboolean%7D%20Whether%20the%20path%20matched%20the%20trigger%0A%20%20%20*%2Ffunction%20pathMatchesTrigger(path%2Ctrigger)%7Bif(trigger)%7Bvar%20triggerPath%3Dtrigger.name%3Breturn%20triggerPath%3D%3Dpath%7C%7Ctrigger.structured%26%26Polymer.Path.isAncestor(triggerPath%2Cpath)%7C%7Ctrigger.wildcard%26%26Polymer.Path.isDescendant(triggerPath%2Cpath)%3B%7Delse%7Breturn%20true%3B%7D%7D%2F**%0A%20%20%20*%20Implements%20the%20%22observer%22%20effect.%0A%20%20%20*%0A%20%20%20*%20Calls%20the%20method%20with%20%60info.methodName%60%20on%20the%20instance%2C%20passing%20the%0A%20%20%20*%20new%20and%20old%20values.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20the%20effect%20will%20be%20run%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20property%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7B%3F%7D%20info%20Effect%20metadata%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runObserverEffect(inst%2Cproperty%2Cprops%2ColdProps%2Cinfo)%7Bvar%20fn%3Dtypeof%20info.method%3D%3D%3D%22string%22%3Finst%5Binfo.method%5D%3Ainfo.method%3Bvar%20changedProp%3Dinfo.property%3Bif(fn)%7Bfn.call(inst%2Cinst.__data%5BchangedProp%5D%2ColdProps%5BchangedProp%5D)%3B%7Delse%20if(!info.dynamicFn)%7Bconsole.warn('observer%20method%20%60'%2Binfo.method%2B'%60%20not%20defined')%3B%7D%7D%2F**%0A%20%20%20*%20Runs%20%22notify%22%20effects%20for%20a%20set%20of%20changed%20properties.%0A%20%20%20*%0A%20%20%20*%20This%20method%20differs%20from%20the%20generic%20%60runEffects%60%20method%20in%20that%20it%0A%20%20%20*%20will%20dispatch%20path%20notification%20events%20in%20the%20case%20that%20the%20property%0A%20%20%20*%20changed%20was%20a%20path%20and%20the%20root%20property%20for%20that%20path%20didn't%20have%20a%0A%20%20%20*%20%22notify%22%20effect.%20%20This%20is%20to%20maintain%201.0%20behavior%20that%20did%20not%20require%0A%20%20%20*%20%60notify%3A%20true%60%20to%20ensure%20object%20sub-property%20notifications%20were%0A%20%20%20*%20sent.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20with%20effects%20to%20run%0A%20%20%20*%20%40param%20%7BObject%7D%20notifyProps%20Bag%20of%20properties%20to%20notify%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7Bboolean%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runNotifyEffects(inst%2CnotifyProps%2Cprops%2ColdProps%2ChasPaths)%7B%2F%2F%20Notify%0Avar%20fxs%3Dinst%5BTYPES.NOTIFY%5D%3Bvar%20notified%3Dvoid%200%3Bvar%20id%3DdedupeId%2B%2B%3B%2F%2F%20Try%20normal%20notify%20effects%3B%20if%20none%2C%20fall%20back%20to%20try%20path%20notification%0Afor(var%20prop%20in%20notifyProps)%7Bif(notifyProps%5Bprop%5D)%7Bif(fxs%26%26runEffectsForProperty(inst%2Cfxs%2Cid%2Cprop%2Cprops%2ColdProps%2ChasPaths))%7Bnotified%3Dtrue%3B%7Delse%20if(hasPaths%26%26notifyPath(inst%2Cprop%2Cprops))%7Bnotified%3Dtrue%3B%7D%7D%7D%2F%2F%20Flush%20host%20if%20we%20actually%20notified%20and%20host%20was%20batching%0A%2F%2F%20And%20the%20host%20has%20already%20initialized%20clients%3B%20this%20prevents%0A%2F%2F%20an%20issue%20with%20a%20host%20observing%20data%20changes%20before%20clients%20are%20ready.%0Avar%20host%3Dvoid%200%3Bif(notified%26%26(host%3Dinst.__dataHost)%26%26host._invalidateProperties)%7Bhost._invalidateProperties()%3B%7D%7D%2F**%0A%20%20%20*%20Dispatches%20%7Bproperty%7D-changed%20events%20with%20path%20information%20in%20the%20detail%0A%20%20%20*%20object%20to%20indicate%20a%20sub-path%20of%20the%20property%20was%20changed.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20element%20from%20which%20to%20fire%20the%20event%0A%20%20%20*%20%40param%20%7Bstring%7D%20path%20The%20path%20that%20was%20changed%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40return%20%7Bboolean%7D%20Returns%20true%20if%20the%20path%20was%20notified%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20notifyPath(inst%2Cpath%2Cprops)%7Bvar%20rootProperty%3DPolymer.Path.root(path)%3Bif(rootProperty!%3D%3Dpath)%7Bvar%20eventName%3DPolymer.CaseMap.camelToDashCase(rootProperty)%2B'-changed'%3BdispatchNotifyEvent(inst%2CeventName%2Cprops%5Bpath%5D%2Cpath)%3Breturn%20true%3B%7Dreturn%20false%3B%7D%2F**%0A%20%20%20*%20Dispatches%20%7Bproperty%7D-changed%20events%20to%20indicate%20a%20property%20(or%20path)%0A%20%20%20*%20changed.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20element%20from%20which%20to%20fire%20the%20event%0A%20%20%20*%20%40param%20%7Bstring%7D%20eventName%20The%20name%20of%20the%20event%20to%20send%20('%7Bproperty%7D-changed')%0A%20%20%20*%20%40param%20%7B*%7D%20value%20The%20value%20of%20the%20changed%20property%0A%20%20%20*%20%40param%20%7Bstring%20%7C%20null%20%7C%20undefined%7D%20path%20If%20a%20sub-path%20of%20this%20property%20changed%2C%20the%20path%0A%20%20%20*%20%20%20that%20changed%20(optional).%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%0A%20%20%20*%2Ffunction%20dispatchNotifyEvent(inst%2CeventName%2Cvalue%2Cpath)%7Bvar%20detail%3D%7Bvalue%3Avalue%2CqueueProperty%3Atrue%7D%3Bif(path)%7Bdetail.path%3Dpath%3B%7D%2F**%20%40type%20%7B!HTMLElement%7D%20*%2Finst.dispatchEvent(new%20CustomEvent(eventName%2C%7Bdetail%3Adetail%7D))%3B%7D%2F**%0A%20%20%20*%20Implements%20the%20%22notify%22%20effect.%0A%20%20%20*%0A%20%20%20*%20Dispatches%20a%20non-bubbling%20event%20named%20%60info.eventName%60%20on%20the%20instance%0A%20%20%20*%20with%20a%20detail%20object%20containing%20the%20new%20%60value%60.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20the%20effect%20will%20be%20run%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20property%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7B%3F%7D%20info%20Effect%20metadata%0A%20%20%20*%20%40param%20%7Bboolean%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runNotifyEffect(inst%2Cproperty%2Cprops%2ColdProps%2Cinfo%2ChasPaths)%7Bvar%20rootProperty%3DhasPaths%3FPolymer.Path.root(property)%3Aproperty%3Bvar%20path%3DrootProperty!%3Dproperty%3Fproperty%3Anull%3Bvar%20value%3Dpath%3FPolymer.Path.get(inst%2Cpath)%3Ainst.__data%5Bproperty%5D%3Bif(path%26%26value%3D%3D%3Dundefined)%7Bvalue%3Dprops%5Bproperty%5D%3B%2F%2F%20specifically%20for%20.splices%0A%7DdispatchNotifyEvent(inst%2Cinfo.eventName%2Cvalue%2Cpath)%3B%7D%2F**%0A%20%20%20*%20Handler%20function%20for%202-way%20notification%20events.%20Receives%20context%0A%20%20%20*%20information%20captured%20in%20the%20%60addNotifyListener%60%20closure%20from%20the%0A%20%20%20*%20%60__notifyListeners%60%20metadata.%0A%20%20%20*%0A%20%20%20*%20Sets%20the%20value%20of%20the%20notified%20property%20to%20the%20host%20property%20or%20path.%20%20If%0A%20%20%20*%20the%20event%20contained%20path%20information%2C%20translate%20that%20path%20to%20the%20host%0A%20%20%20*%20scope's%20name%20for%20that%20path%20first.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BCustomEvent%7D%20event%20Notification%20event%20(e.g.%20'%3Cproperty%3E-changed')%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20Host%20element%20instance%20handling%20the%20notification%20event%0A%20%20%20*%20%40param%20%7Bstring%7D%20fromProp%20Child%20element%20property%20that%20was%20bound%0A%20%20%20*%20%40param%20%7Bstring%7D%20toPath%20Host%20property%2Fpath%20that%20was%20bound%0A%20%20%20*%20%40param%20%7Bboolean%7D%20negate%20Whether%20the%20binding%20was%20negated%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20handleNotification(event%2Cinst%2CfromProp%2CtoPath%2Cnegate)%7Bvar%20value%3Dvoid%200%3Bvar%20detail%3D%2F**%20%40type%20%7BObject%7D%20*%2Fevent.detail%3Bvar%20fromPath%3Ddetail%26%26detail.path%3Bif(fromPath)%7BtoPath%3DPolymer.Path.translate(fromProp%2CtoPath%2CfromPath)%3Bvalue%3Ddetail%26%26detail.value%3B%7Delse%7Bvalue%3Devent.currentTarget%5BfromProp%5D%3B%7Dvalue%3Dnegate%3F!value%3Avalue%3Bif(!inst%5BTYPES.READ_ONLY%5D%7C%7C!inst%5BTYPES.READ_ONLY%5D%5BtoPath%5D)%7Bif(inst._setPendingPropertyOrPath(toPath%2Cvalue%2Ctrue%2CBoolean(fromPath))%26%26(!detail%7C%7C!detail.queueProperty))%7Binst._invalidateProperties()%3B%7D%7D%7D%2F**%0A%20%20%20*%20Implements%20the%20%22reflect%22%20effect.%0A%20%20%20*%0A%20%20%20*%20Sets%20the%20attribute%20named%20%60info.attrName%60%20to%20the%20given%20property%20value.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20the%20effect%20will%20be%20run%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20property%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7B%3F%7D%20info%20Effect%20metadata%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runReflectEffect(inst%2Cproperty%2Cprops%2ColdProps%2Cinfo)%7Bvar%20value%3Dinst.__data%5Bproperty%5D%3Bif(Polymer.sanitizeDOMValue)%7Bvalue%3DPolymer.sanitizeDOMValue(value%2Cinfo.attrName%2C'attribute'%2C%2F**%20%40type%20%7BNode%7D%20*%2Finst)%3B%7Dinst._propertyToAttribute(property%2Cinfo.attrName%2Cvalue)%3B%7D%2F**%0A%20%20%20*%20Runs%20%22computed%22%20effects%20for%20a%20set%20of%20changed%20properties.%0A%20%20%20*%0A%20%20%20*%20This%20method%20differs%20from%20the%20generic%20%60runEffects%60%20method%20in%20that%20it%0A%20%20%20*%20continues%20to%20run%20computed%20effects%20based%20on%20the%20output%20of%20each%20pass%20until%0A%20%20%20*%20there%20are%20no%20more%20newly%20computed%20properties.%20%20This%20ensures%20that%20all%0A%20%20%20*%20properties%20that%20will%20be%20computed%20by%20the%20initial%20set%20of%20changes%20are%0A%20%20%20*%20computed%20before%20other%20effects%20(binding%20propagation%2C%20observers%2C%20and%20notify)%0A%20%20%20*%20run.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20the%20effect%20will%20be%20run%20on%0A%20%20%20*%20%40param%20%7B!Object%7D%20changedProps%20Bag%20of%20changed%20properties%0A%20%20%20*%20%40param%20%7B!Object%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7Bboolean%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runComputedEffects(inst%2CchangedProps%2ColdProps%2ChasPaths)%7Bvar%20computeEffects%3Dinst%5BTYPES.COMPUTE%5D%3Bif(computeEffects)%7Bvar%20inputProps%3DchangedProps%3Bwhile(runEffects(inst%2CcomputeEffects%2CinputProps%2ColdProps%2ChasPaths))%7BObject.assign(oldProps%2Cinst.__dataOld)%3BObject.assign(changedProps%2Cinst.__dataPending)%3BinputProps%3Dinst.__dataPending%3Binst.__dataPending%3Dnull%3B%7D%7D%7D%2F**%0A%20%20%20*%20Implements%20the%20%22computed%20property%22%20effect%20by%20running%20the%20method%20with%20the%0A%20%20%20*%20values%20of%20the%20arguments%20specified%20in%20the%20%60info%60%20object%20and%20setting%20the%0A%20%20%20*%20return%20value%20to%20the%20computed%20property%20specified.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20the%20effect%20will%20be%20run%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20property%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7B%3F%7D%20info%20Effect%20metadata%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runComputedEffect(inst%2Cproperty%2Cprops%2ColdProps%2Cinfo)%7Bvar%20result%3DrunMethodEffect(inst%2Cproperty%2Cprops%2ColdProps%2Cinfo)%3Bvar%20computedProp%3Dinfo.methodInfo%3Bif(inst.__dataHasAccessor%26%26inst.__dataHasAccessor%5BcomputedProp%5D)%7Binst._setPendingProperty(computedProp%2Cresult%2Ctrue)%3B%7Delse%7Binst%5BcomputedProp%5D%3Dresult%3B%7D%7D%2F**%0A%20%20%20*%20Computes%20path%20changes%20based%20on%20path%20links%20set%20up%20using%20the%20%60linkPaths%60%0A%20%20%20*%20API.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20whose%20props%20are%20changing%0A%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3C(string%7Cnumber)%3E%7D%20path%20Path%20that%20has%20changed%0A%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20of%20changed%20path%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20computeLinkedPaths(inst%2Cpath%2Cvalue)%7Bvar%20links%3Dinst.__dataLinkedPaths%3Bif(links)%7Bvar%20link%3Dvoid%200%3Bfor(var%20a%20in%20links)%7Bvar%20b%3Dlinks%5Ba%5D%3Bif(Polymer.Path.isDescendant(a%2Cpath))%7Blink%3DPolymer.Path.translate(a%2Cb%2Cpath)%3Binst._setPendingPropertyOrPath(link%2Cvalue%2Ctrue%2Ctrue)%3B%7Delse%20if(Polymer.Path.isDescendant(b%2Cpath))%7Blink%3DPolymer.Path.translate(b%2Ca%2Cpath)%3Binst._setPendingPropertyOrPath(link%2Cvalue%2Ctrue%2Ctrue)%3B%7D%7D%7D%7D%2F%2F%20--%20bindings%20----------------------------------------------%0A%2F**%0A%20%20%20*%20Adds%20binding%20metadata%20to%20the%20current%20%60nodeInfo%60%2C%20and%20binding%20effects%0A%20%20%20*%20for%20all%20part%20dependencies%20to%20%60templateInfo%60.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BFunction%7D%20constructor%20Class%20that%20%60_parseTemplate%60%20is%20currently%0A%20%20%20*%20%20%20running%20on%0A%20%20%20*%20%40param%20%7BTemplateInfo%7D%20templateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20*%20%40param%20%7BNodeInfo%7D%20nodeInfo%20Node%20metadata%20for%20current%20template%20node%0A%20%20%20*%20%40param%20%7Bstring%7D%20kind%20Binding%20kind%2C%20either%20'property'%2C%20'attribute'%2C%20or%20'text'%0A%20%20%20*%20%40param%20%7Bstring%7D%20target%20Target%20property%20name%0A%20%20%20*%20%40param%20%7B!Array%3C!BindingPart%3E%7D%20parts%20Array%20of%20binding%20part%20metadata%0A%20%20%20*%20%40param%20%7Bstring%3D%7D%20literal%20Literal%20text%20surrounding%20binding%20parts%20(specified%0A%20%20%20*%20%20%20only%20for%20'property'%20bindings%2C%20since%20these%20must%20be%20initialized%20as%20part%0A%20%20%20*%20%20%20of%20boot-up)%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20addBinding(constructor%2CtemplateInfo%2CnodeInfo%2Ckind%2Ctarget%2Cparts%2Cliteral)%7B%2F%2F%20Create%20binding%20metadata%20and%20add%20to%20nodeInfo%0AnodeInfo.bindings%3DnodeInfo.bindings%7C%7C%5B%5D%3Bvar%2F**%20Binding%20*%2Fbinding%3D%7Bkind%3Akind%2Ctarget%3Atarget%2Cparts%3Aparts%2Cliteral%3Aliteral%2CisCompound%3Aparts.length!%3D%3D1%7D%3BnodeInfo.bindings.push(binding)%3B%2F%2F%20Add%20listener%20info%20to%20binding%20metadata%0Aif(shouldAddListener(binding))%7Bvar%20_binding%24parts%24%3Dbinding.parts%5B0%5D%2Cevent%3D_binding%24parts%24.event%2Cnegate%3D_binding%24parts%24.negate%3Bbinding.listenerEvent%3Devent%7C%7CCaseMap.camelToDashCase(target)%2B'-changed'%3Bbinding.listenerNegate%3Dnegate%3B%7D%2F%2F%20Add%20%22propagate%22%20property%20effects%20to%20templateInfo%0Avar%20index%3DtemplateInfo.nodeInfoList.length%3Bfor(var%20i%3D0%3Bi%3Cbinding.parts.length%3Bi%2B%2B)%7Bvar%20part%3Dbinding.parts%5Bi%5D%3Bpart.compoundIndex%3Di%3BaddEffectForBindingPart(constructor%2CtemplateInfo%2Cbinding%2Cpart%2Cindex)%3B%7D%7D%2F**%0A%20%20%20*%20Adds%20property%20effects%20to%20the%20given%20%60templateInfo%60%20for%20the%20given%20binding%0A%20%20%20*%20part.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BFunction%7D%20constructor%20Class%20that%20%60_parseTemplate%60%20is%20currently%0A%20%20%20*%20%20%20running%20on%0A%20%20%20*%20%40param%20%7BTemplateInfo%7D%20templateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20*%20%40param%20%7B!Binding%7D%20binding%20Binding%20metadata%0A%20%20%20*%20%40param%20%7B!BindingPart%7D%20part%20Binding%20part%20metadata%0A%20%20%20*%20%40param%20%7Bnumber%7D%20index%20Index%20into%20%60nodeInfoList%60%20for%20this%20node%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%2Ffunction%20addEffectForBindingPart(constructor%2CtemplateInfo%2Cbinding%2Cpart%2Cindex)%7Bif(!part.literal)%7Bif(binding.kind%3D%3D%3D'attribute'%26%26binding.target%5B0%5D%3D%3D%3D'-')%7Bconsole.warn('Cannot%20set%20attribute%20'%2Bbinding.target%2B'%20because%20%22-%22%20is%20not%20a%20valid%20attribute%20starting%20character')%3B%7Delse%7Bvar%20dependencies%3Dpart.dependencies%3Bvar%20info%3D%7Bindex%3Aindex%2Cbinding%3Abinding%2Cpart%3Apart%2Cevaluator%3Aconstructor%7D%3Bfor(var%20j%3D0%3Bj%3Cdependencies.length%3Bj%2B%2B)%7Bvar%20trigger%3Ddependencies%5Bj%5D%3Bif(typeof%20trigger%3D%3D'string')%7Btrigger%3DparseArg(trigger)%3Btrigger.wildcard%3Dtrue%3B%7Dconstructor._addTemplatePropertyEffect(templateInfo%2Ctrigger.rootProperty%2C%7Bfn%3ArunBindingEffect%2Cinfo%3Ainfo%2Ctrigger%3Atrigger%7D)%3B%7D%7D%7D%7D%2F**%0A%20%20%20*%20Implements%20the%20%22binding%22%20(property%2Fpath%20binding)%20effect.%0A%20%20%20*%0A%20%20%20*%20Note%20that%20binding%20syntax%20is%20overridable%20via%20%60_parseBindings%60%20and%0A%20%20%20*%20%60_evaluateBinding%60.%20%20This%20method%20will%20call%20%60_evaluateBinding%60%20for%20any%0A%20%20%20*%20non-literal%20parts%20returned%20from%20%60_parseBindings%60.%20%20However%2C%0A%20%20%20*%20there%20is%20no%20support%20for%20_path_%20bindings%20via%20custom%20binding%20parts%2C%0A%20%20%20*%20as%20this%20is%20specific%20to%20Polymer's%20path%20binding%20syntax.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20the%20effect%20will%20be%20run%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20path%20Name%20of%20property%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7B%3F%7D%20info%20Effect%20metadata%0A%20%20%20*%20%40param%20%7Bboolean%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20*%20%40param%20%7BArray%7D%20nodeList%20List%20of%20nodes%20associated%20with%20%60nodeInfoList%60%20template%0A%20%20%20*%20%20%20metadata%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runBindingEffect(inst%2Cpath%2Cprops%2ColdProps%2Cinfo%2ChasPaths%2CnodeList)%7Bvar%20node%3DnodeList%5Binfo.index%5D%3Bvar%20binding%3Dinfo.binding%3Bvar%20part%3Dinfo.part%3B%2F%2F%20Subpath%20notification%3A%20transform%20path%20and%20set%20to%20client%0A%2F%2F%20e.g.%3A%20foo%3D%22%7B%7Bobj.sub%7D%7D%22%2C%20path%3A%20'obj.sub.prop'%2C%20set%20'foo.prop'%3Dobj.sub.prop%0Aif(hasPaths%26%26part.source%26%26path.length%3Epart.source.length%26%26binding.kind%3D%3D'property'%26%26!binding.isCompound%26%26node.__isPropertyEffectsClient%26%26node.__dataHasAccessor%26%26node.__dataHasAccessor%5Bbinding.target%5D)%7Bvar%20value%3Dprops%5Bpath%5D%3Bpath%3DPolymer.Path.translate(part.source%2Cbinding.target%2Cpath)%3Bif(node._setPendingPropertyOrPath(path%2Cvalue%2Cfalse%2Ctrue))%7Binst._enqueueClient(node)%3B%7D%7Delse%7Bvar%20_value%3Dinfo.evaluator._evaluateBinding(inst%2Cpart%2Cpath%2Cprops%2ColdProps%2ChasPaths)%3B%2F%2F%20Propagate%20value%20to%20child%0AapplyBindingValue(inst%2Cnode%2Cbinding%2Cpart%2C_value)%3B%7D%7D%2F**%0A%20%20%20*%20Sets%20the%20value%20for%20an%20%22binding%22%20(binding)%20effect%20to%20a%20node%2C%0A%20%20%20*%20either%20as%20a%20property%20or%20attribute.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20owning%20the%20binding%20effect%0A%20%20%20*%20%40param%20%7BNode%7D%20node%20Target%20node%20for%20binding%0A%20%20%20*%20%40param%20%7B!Binding%7D%20binding%20Binding%20metadata%0A%20%20%20*%20%40param%20%7B!BindingPart%7D%20part%20Binding%20part%20metadata%0A%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20applyBindingValue(inst%2Cnode%2Cbinding%2Cpart%2Cvalue)%7Bvalue%3DcomputeBindingValue(node%2Cvalue%2Cbinding%2Cpart)%3Bif(Polymer.sanitizeDOMValue)%7Bvalue%3DPolymer.sanitizeDOMValue(value%2Cbinding.target%2Cbinding.kind%2Cnode)%3B%7Dif(binding.kind%3D%3D'attribute')%7B%2F%2F%20Attribute%20binding%0Ainst._valueToNodeAttribute(%2F**%20%40type%20%7BElement%7D%20*%2Fnode%2Cvalue%2Cbinding.target)%3B%7Delse%7B%2F%2F%20Property%20binding%0Avar%20prop%3Dbinding.target%3Bif(node.__isPropertyEffectsClient%26%26node.__dataHasAccessor%26%26node.__dataHasAccessor%5Bprop%5D)%7Bif(!node%5BTYPES.READ_ONLY%5D%7C%7C!node%5BTYPES.READ_ONLY%5D%5Bprop%5D)%7Bif(node._setPendingProperty(prop%2Cvalue))%7Binst._enqueueClient(node)%3B%7D%7D%7Delse%7Binst._setUnmanagedPropertyToNode(node%2Cprop%2Cvalue)%3B%7D%7D%7D%2F**%0A%20%20%20*%20Transforms%20an%20%22binding%22%20effect%20value%20based%20on%20compound%20%26%20negation%0A%20%20%20*%20effect%20metadata%2C%20as%20well%20as%20handling%20for%20special-case%20properties%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BNode%7D%20node%20Node%20the%20value%20will%20be%20set%20to%0A%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%0A%20%20%20*%20%40param%20%7B!Binding%7D%20binding%20Binding%20metadata%0A%20%20%20*%20%40param%20%7B!BindingPart%7D%20part%20Binding%20part%20metadata%0A%20%20%20*%20%40return%20%7B*%7D%20Transformed%20value%20to%20set%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20computeBindingValue(node%2Cvalue%2Cbinding%2Cpart)%7Bif(binding.isCompound)%7Bvar%20storage%3Dnode.__dataCompoundStorage%5Bbinding.target%5D%3Bstorage%5Bpart.compoundIndex%5D%3Dvalue%3Bvalue%3Dstorage.join('')%3B%7Dif(binding.kind!%3D%3D'attribute')%7B%2F%2F%20Some%20browsers%20serialize%20%60undefined%60%20to%20%60%22undefined%22%60%0Aif(binding.target%3D%3D%3D'textContent'%7C%7Cbinding.target%3D%3D%3D'value'%26%26(node.localName%3D%3D%3D'input'%7C%7Cnode.localName%3D%3D%3D'textarea'))%7Bvalue%3Dvalue%3D%3Dundefined%3F''%3Avalue%3B%7D%7Dreturn%20value%3B%7D%2F**%0A%20%20%20*%20Returns%20true%20if%20a%20binding's%20metadata%20meets%20all%20the%20requirements%20to%20allow%0A%20%20%20*%202-way%20binding%2C%20and%20therefore%20a%20%60%3Cproperty%3E-changed%60%20event%20listener%20should%20be%0A%20%20%20*%20added%3A%0A%20%20%20*%20-%20used%20curly%20braces%0A%20%20%20*%20-%20is%20a%20property%20(not%20attribute)%20binding%0A%20%20%20*%20-%20is%20not%20a%20textContent%20binding%0A%20%20%20*%20-%20is%20not%20compound%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!Binding%7D%20binding%20Binding%20metadata%0A%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%202-way%20listener%20should%20be%20added%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20shouldAddListener(binding)%7Breturn%20Boolean(binding.target)%26%26binding.kind!%3D'attribute'%26%26binding.kind!%3D'text'%26%26!binding.isCompound%26%26binding.parts%5B0%5D.mode%3D%3D%3D'%7B'%3B%7D%2F**%0A%20%20%20*%20Setup%20compound%20binding%20storage%20structures%2C%20notify%20listeners%2C%20and%20dataHost%0A%20%20%20*%20references%20onto%20the%20bound%20nodeList.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20Instance%20that%20bas%20been%20previously%20bound%0A%20%20%20*%20%40param%20%7BTemplateInfo%7D%20templateInfo%20Template%20metadata%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20setupBindings(inst%2CtemplateInfo)%7B%2F%2F%20Setup%20compound%20storage%2C%20dataHost%2C%20and%20notify%20listeners%0Avar%20nodeList%3DtemplateInfo.nodeList%2CnodeInfoList%3DtemplateInfo.nodeInfoList%3Bif(nodeInfoList.length)%7Bfor(var%20i%3D0%3Bi%3CnodeInfoList.length%3Bi%2B%2B)%7Bvar%20info%3DnodeInfoList%5Bi%5D%3Bvar%20node%3DnodeList%5Bi%5D%3Bvar%20bindings%3Dinfo.bindings%3Bif(bindings)%7Bfor(var%20_i%3D0%3B_i%3Cbindings.length%3B_i%2B%2B)%7Bvar%20binding%3Dbindings%5B_i%5D%3BsetupCompoundStorage(node%2Cbinding)%3BaddNotifyListener(node%2Cinst%2Cbinding)%3B%7D%7Dnode.__dataHost%3Dinst%3B%7D%7D%7D%2F**%0A%20%20%20*%20Initializes%20%60__dataCompoundStorage%60%20local%20storage%20on%20a%20bound%20node%20with%0A%20%20%20*%20initial%20literal%20data%20for%20compound%20bindings%2C%20and%20sets%20the%20joined%0A%20%20%20*%20literal%20parts%20to%20the%20bound%20property.%0A%20%20%20*%0A%20%20%20*%20When%20changes%20to%20compound%20parts%20occur%2C%20they%20are%20first%20set%20into%20the%20compound%0A%20%20%20*%20storage%20array%20for%20that%20property%2C%20and%20then%20the%20array%20is%20joined%20to%20result%20in%0A%20%20%20*%20the%20final%20value%20set%20to%20the%20property%2Fattribute.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BNode%7D%20node%20Bound%20node%20to%20initialize%0A%20%20%20*%20%40param%20%7BBinding%7D%20binding%20Binding%20metadata%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20setupCompoundStorage(node%2Cbinding)%7Bif(binding.isCompound)%7B%2F%2F%20Create%20compound%20storage%20map%0Avar%20storage%3Dnode.__dataCompoundStorage%7C%7C(node.__dataCompoundStorage%3D%7B%7D)%3Bvar%20parts%3Dbinding.parts%3B%2F%2F%20Copy%20literals%20from%20parts%20into%20storage%20for%20this%20binding%0Avar%20literals%3Dnew%20Array(parts.length)%3Bfor(var%20j%3D0%3Bj%3Cparts.length%3Bj%2B%2B)%7Bliterals%5Bj%5D%3Dparts%5Bj%5D.literal%3B%7Dvar%20target%3Dbinding.target%3Bstorage%5Btarget%5D%3Dliterals%3B%2F%2F%20Configure%20properties%20with%20their%20literal%20parts%0Aif(binding.literal%26%26binding.kind%3D%3D'property')%7Bnode%5Btarget%5D%3Dbinding.literal%3B%7D%7D%7D%2F**%0A%20%20%20*%20Adds%20a%202-way%20binding%20notification%20event%20listener%20to%20the%20node%20specified%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BObject%7D%20node%20Child%20element%20to%20add%20listener%20to%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20Host%20element%20instance%20to%20handle%20notification%20event%0A%20%20%20*%20%40param%20%7BBinding%7D%20binding%20Binding%20metadata%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20addNotifyListener(node%2Cinst%2Cbinding)%7Bif(binding.listenerEvent)%7Bvar%20part%3Dbinding.parts%5B0%5D%3Bnode.addEventListener(binding.listenerEvent%2Cfunction(e)%7BhandleNotification(e%2Cinst%2Cbinding.target%2Cpart.source%2Cpart.negate)%3B%7D)%3B%7D%7D%2F%2F%20--%20for%20method-based%20effects%20(complexObserver%20%26%20computed)%20--------------%0A%2F**%0A%20%20%20*%20Adds%20property%20effects%20for%20each%20argument%20in%20the%20method%20signature%20(and%0A%20%20%20*%20optionally%2C%20for%20the%20method%20name%20if%20%60dynamic%60%20is%20true)%20that%20calls%20the%0A%20%20%20*%20provided%20effect%20function.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BElement%20%7C%20Object%7D%20model%20Prototype%20or%20instance%0A%20%20%20*%20%40param%20%7B!MethodSignature%7D%20sig%20Method%20signature%20metadata%0A%20%20%20*%20%40param%20%7Bstring%7D%20type%20Type%20of%20property%20effect%20to%20add%0A%20%20%20*%20%40param%20%7BFunction%7D%20effectFn%20Function%20to%20run%20when%20arguments%20change%0A%20%20%20*%20%40param%20%7B*%3D%7D%20methodInfo%20Effect-specific%20information%20to%20be%20included%20in%0A%20%20%20*%20%20%20method%20effect%20metadata%0A%20%20%20*%20%40param%20%7Bboolean%7CObject%3D%7D%20dynamicFn%20Boolean%20or%20object%20map%20indicating%20whether%0A%20%20%20*%20%20%20method%20names%20should%20be%20included%20as%20a%20dependency%20to%20the%20effect.%20Note%2C%0A%20%20%20*%20%20%20defaults%20to%20true%20if%20the%20signature%20is%20static%20(sig.static%20is%20true).%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20createMethodEffect(model%2Csig%2Ctype%2CeffectFn%2CmethodInfo%2CdynamicFn)%7BdynamicFn%3Dsig.static%7C%7CdynamicFn%26%26((typeof%20dynamicFn%3D%3D%3D'undefined'%3F'undefined'%3A_typeof(dynamicFn))!%3D%3D'object'%7C%7CdynamicFn%5Bsig.methodName%5D)%3Bvar%20info%3D%7BmethodName%3Asig.methodName%2Cargs%3Asig.args%2CmethodInfo%3AmethodInfo%2CdynamicFn%3AdynamicFn%7D%3Bfor(var%20i%3D0%2Carg%3Bi%3Csig.args.length%26%26(arg%3Dsig.args%5Bi%5D)%3Bi%2B%2B)%7Bif(!arg.literal)%7Bmodel._addPropertyEffect(arg.rootProperty%2Ctype%2C%7Bfn%3AeffectFn%2Cinfo%3Ainfo%2Ctrigger%3Aarg%7D)%3B%7D%7Dif(dynamicFn)%7Bmodel._addPropertyEffect(sig.methodName%2Ctype%2C%7Bfn%3AeffectFn%2Cinfo%3Ainfo%7D)%3B%7D%7D%2F**%0A%20%20%20*%20Calls%20a%20method%20with%20arguments%20marshaled%20from%20properties%20on%20the%20instance%0A%20%20%20*%20based%20on%20the%20method%20signature%20contained%20in%20the%20effect%20metadata.%0A%20%20%20*%0A%20%20%20*%20Multi-property%20observers%2C%20computed%20properties%2C%20and%20inline%20computing%0A%20%20%20*%20functions%20call%20this%20function%20to%20invoke%20the%20method%2C%20then%20use%20the%20return%0A%20%20%20*%20value%20accordingly.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20the%20effect%20will%20be%20run%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20property%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7B%3F%7D%20info%20Effect%20metadata%0A%20%20%20*%20%40return%20%7B*%7D%20Returns%20the%20return%20value%20from%20the%20method%20invocation%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runMethodEffect(inst%2Cproperty%2Cprops%2ColdProps%2Cinfo)%7B%2F%2F%20Instances%20can%20optionally%20have%20a%20_methodHost%20which%20allows%20redirecting%20where%0A%2F%2F%20to%20find%20methods.%20Currently%20used%20by%20%60templatize%60.%0Avar%20context%3Dinst._methodHost%7C%7Cinst%3Bvar%20fn%3Dcontext%5Binfo.methodName%5D%3Bif(fn)%7Bvar%20args%3Dinst._marshalArgs(info.args%2Cproperty%2Cprops)%3Breturn%20fn.apply(context%2Cargs)%3B%7Delse%20if(!info.dynamicFn)%7Bconsole.warn('method%20%60'%2Binfo.methodName%2B'%60%20not%20defined')%3B%7D%7Dvar%20emptyArray%3D%5B%5D%3B%2F%2F%20Regular%20expressions%20used%20for%20binding%0Avar%20IDENT%3D'(%3F%3A'%2B'%5Ba-zA-Z_%24%5D%5B%5C%5Cw.%3A%24%5C%5C-*%5D*'%2B')'%3Bvar%20NUMBER%3D'(%3F%3A'%2B'%5B-%2B%5D%3F%5B0-9%5D*%5C%5C.%3F%5B0-9%5D%2B(%3F%3A%5BeE%5D%5B-%2B%5D%3F%5B0-9%5D%2B)%3F'%2B')'%3Bvar%20SQUOTE_STRING%3D'(%3F%3A'%2B'%5C'(%3F%3A%5B%5E%5C'%5C%5C%5C%5C%5D%7C%5C%5C%5C%5C.)*%5C''%2B')'%3Bvar%20DQUOTE_STRING%3D'(%3F%3A'%2B'%22(%3F%3A%5B%5E%22%5C%5C%5C%5C%5D%7C%5C%5C%5C%5C.)*%22'%2B')'%3Bvar%20STRING%3D'(%3F%3A'%2BSQUOTE_STRING%2B'%7C'%2BDQUOTE_STRING%2B')'%3Bvar%20ARGUMENT%3D'(%3F%3A('%2BIDENT%2B'%7C'%2BNUMBER%2B'%7C'%2BSTRING%2B')%5C%5Cs*'%2B')'%3Bvar%20ARGUMENTS%3D'(%3F%3A'%2BARGUMENT%2B'(%3F%3A%2C%5C%5Cs*'%2BARGUMENT%2B')*'%2B')'%3Bvar%20ARGUMENT_LIST%3D'(%3F%3A'%2B'%5C%5C(%5C%5Cs*'%2B'(%3F%3A'%2BARGUMENTS%2B'%3F'%2B')'%2B'%5C%5C)%5C%5Cs*'%2B')'%3Bvar%20BINDING%3D'('%2BIDENT%2B'%5C%5Cs*'%2BARGUMENT_LIST%2B'%3F'%2B')'%3B%2F%2F%20Group%203%0Avar%20OPEN_BRACKET%3D'(%5C%5C%5B%5C%5C%5B%7C%7B%7B)'%2B'%5C%5Cs*'%3Bvar%20CLOSE_BRACKET%3D'(%3F%3A%5D%5D%7C%7D%7D)'%3Bvar%20NEGATE%3D'(%3F%3A(!)%5C%5Cs*)%3F'%3B%2F%2F%20Group%202%0Avar%20EXPRESSION%3DOPEN_BRACKET%2BNEGATE%2BBINDING%2BCLOSE_BRACKET%3Bvar%20bindingRegex%3Dnew%20RegExp(EXPRESSION%2C%22g%22)%3B%2F**%0A%20%20%20*%20Create%20a%20string%20from%20binding%20parts%20of%20all%20the%20literal%20parts%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!Array%3CBindingPart%3E%7D%20parts%20All%20parts%20to%20stringify%0A%20%20%20*%20%40return%20%7Bstring%7D%20String%20made%20from%20the%20literal%20parts%0A%20%20%20*%2Ffunction%20literalFromParts(parts)%7Bvar%20s%3D''%3Bfor(var%20i%3D0%3Bi%3Cparts.length%3Bi%2B%2B)%7Bvar%20literal%3Dparts%5Bi%5D.literal%3Bs%2B%3Dliteral%7C%7C''%3B%7Dreturn%20s%3B%7D%2F**%0A%20%20%20*%20Parses%20an%20expression%20string%20for%20a%20method%20signature%2C%20and%20returns%20a%20metadata%0A%20%20%20*%20describing%20the%20method%20in%20terms%20of%20%60methodName%60%2C%20%60static%60%20(whether%20all%20the%0A%20%20%20*%20arguments%20are%20literals)%2C%20and%20an%20array%20of%20%60args%60%0A%20%20%20*%0A%20%20%20*%20%40param%20%7Bstring%7D%20expression%20The%20expression%20to%20parse%0A%20%20%20*%20%40return%20%7B%3FMethodSignature%7D%20The%20method%20metadata%20object%20if%20a%20method%20expression%20was%0A%20%20%20*%20%20%20found%2C%20otherwise%20%60undefined%60%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20parseMethod(expression)%7B%2F%2F%20tries%20to%20match%20valid%20javascript%20property%20names%0Avar%20m%3Dexpression.match(%2F(%5B%5E%5Cs%5D%2B%3F)%5C((%5B%5Cs%5CS%5D*)%5C)%2F)%3Bif(m)%7Bvar%20methodName%3Dm%5B1%5D%3Bvar%20sig%3D%7BmethodName%3AmethodName%2Cstatic%3Atrue%2Cargs%3AemptyArray%7D%3Bif(m%5B2%5D.trim())%7B%2F%2F%20replace%20escaped%20commas%20with%20comma%20entity%2C%20split%20on%20un-escaped%20commas%0Avar%20args%3Dm%5B2%5D.replace(%2F%5C%5C%2C%2Fg%2C'%26comma%3B').split('%2C')%3Breturn%20parseArgs(args%2Csig)%3B%7Delse%7Breturn%20sig%3B%7D%7Dreturn%20null%3B%7D%2F**%0A%20%20%20*%20Parses%20an%20array%20of%20arguments%20and%20sets%20the%20%60args%60%20property%20of%20the%20supplied%0A%20%20%20*%20signature%20metadata%20object.%20Sets%20the%20%60static%60%20property%20to%20false%20if%20any%0A%20%20%20*%20argument%20is%20a%20non-literal.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!Array%3Cstring%3E%7D%20argList%20Array%20of%20argument%20names%0A%20%20%20*%20%40param%20%7B!MethodSignature%7D%20sig%20Method%20signature%20metadata%20object%0A%20%20%20*%20%40return%20%7B!MethodSignature%7D%20The%20updated%20signature%20metadata%20object%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20parseArgs(argList%2Csig)%7Bsig.args%3DargList.map(function(rawArg)%7Bvar%20arg%3DparseArg(rawArg)%3Bif(!arg.literal)%7Bsig.static%3Dfalse%3B%7Dreturn%20arg%3B%7D%2Cthis)%3Breturn%20sig%3B%7D%2F**%0A%20%20%20*%20Parses%20an%20individual%20argument%2C%20and%20returns%20an%20argument%20metadata%20object%0A%20%20%20*%20with%20the%20following%20fields%3A%0A%20%20%20*%0A%20%20%20*%20%20%20%7B%0A%20%20%20*%20%20%20%20%20value%3A%20'prop'%2C%20%20%20%20%20%20%20%20%2F%2F%20property%2Fpath%20or%20literal%20value%0A%20%20%20*%20%20%20%20%20literal%3A%20false%2C%20%20%20%20%20%20%20%2F%2F%20whether%20argument%20is%20a%20literal%0A%20%20%20*%20%20%20%20%20structured%3A%20false%2C%20%20%20%20%2F%2F%20whether%20the%20property%20is%20a%20path%0A%20%20%20*%20%20%20%20%20rootProperty%3A%20'prop'%2C%20%2F%2F%20the%20root%20property%20of%20the%20path%0A%20%20%20*%20%20%20%20%20wildcard%3A%20false%20%20%20%20%20%20%20%2F%2F%20whether%20the%20argument%20was%20a%20wildcard%20'.*'%20path%0A%20%20%20*%20%20%20%7D%0A%20%20%20*%0A%20%20%20*%20%40param%20%7Bstring%7D%20rawArg%20The%20string%20value%20of%20the%20argument%0A%20%20%20*%20%40return%20%7B!MethodArg%7D%20Argument%20metadata%20object%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20parseArg(rawArg)%7B%2F%2F%20clean%20up%20whitespace%0Avar%20arg%3DrawArg.trim()%2F%2F%20replace%20comma%20entity%20with%20comma%0A.replace(%2F%26comma%3B%2Fg%2C'%2C')%2F%2F%20repair%20extra%20escape%20sequences%3B%20note%20only%20commas%20strictly%20need%0A%2F%2F%20escaping%2C%20but%20we%20allow%20any%20other%20char%20to%20be%20escaped%20since%20its%0A%2F%2F%20likely%20users%20will%20do%20this%0A.replace(%2F%5C%5C(.)%2Fg%2C'%5C%241')%3B%2F%2F%20basic%20argument%20descriptor%0Avar%20a%3D%7Bname%3Aarg%2Cvalue%3A''%2Cliteral%3Afalse%7D%3B%2F%2F%20detect%20literal%20value%20(must%20be%20String%20or%20Number)%0Avar%20fc%3Darg%5B0%5D%3Bif(fc%3D%3D%3D'-')%7Bfc%3Darg%5B1%5D%3B%7Dif(fc%3E%3D'0'%26%26fc%3C%3D'9')%7Bfc%3D'%23'%3B%7Dswitch(fc)%7Bcase%22'%22%3Acase'%22'%3Aa.value%3Darg.slice(1%2C-1)%3Ba.literal%3Dtrue%3Bbreak%3Bcase'%23'%3Aa.value%3DNumber(arg)%3Ba.literal%3Dtrue%3Bbreak%3B%7D%2F%2F%20if%20not%20literal%2C%20look%20for%20structured%20path%0Aif(!a.literal)%7Ba.rootProperty%3DPolymer.Path.root(arg)%3B%2F%2F%20detect%20structured%20path%20(has%20dots)%0Aa.structured%3DPolymer.Path.isPath(arg)%3Bif(a.structured)%7Ba.wildcard%3Darg.slice(-2)%3D%3D'.*'%3Bif(a.wildcard)%7Ba.name%3Darg.slice(0%2C-2)%3B%7D%7D%7Dreturn%20a%3B%7D%2F%2F%20data%20api%0A%2F**%0A%20%20%20*%20Sends%20array%20splice%20notifications%20(%60.splices%60%20and%20%60.length%60)%0A%20%20%20*%0A%20%20%20*%20Note%3A%20this%20implementation%20only%20accepts%20normalized%20paths%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20Instance%20to%20send%20notifications%20to%0A%20%20%20*%20%40param%20%7BArray%7D%20array%20The%20array%20the%20mutations%20occurred%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20path%20The%20path%20to%20the%20array%20that%20was%20mutated%0A%20%20%20*%20%40param%20%7BArray%7D%20splices%20Array%20of%20splice%20records%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20_notifySplices(inst%2Carray%2Cpath%2Csplices)%7Bvar%20splicesPath%3Dpath%2B'.splices'%3Binst.notifyPath(splicesPath%2C%7BindexSplices%3Asplices%7D)%3Binst.notifyPath(path%2B'.length'%2Carray.length)%3B%2F%2F%20Null%20here%20to%20allow%20potentially%20large%20splice%20records%20to%20be%20GC'ed.%0Ainst.__data%5BsplicesPath%5D%3D%7BindexSplices%3Anull%7D%3B%7D%2F**%0A%20%20%20*%20Creates%20a%20splice%20record%20and%20sends%20an%20array%20splice%20notification%20for%0A%20%20%20*%20the%20described%20mutation%0A%20%20%20*%0A%20%20%20*%20Note%3A%20this%20implementation%20only%20accepts%20normalized%20paths%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20Instance%20to%20send%20notifications%20to%0A%20%20%20*%20%40param%20%7BArray%7D%20array%20The%20array%20the%20mutations%20occurred%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20path%20The%20path%20to%20the%20array%20that%20was%20mutated%0A%20%20%20*%20%40param%20%7Bnumber%7D%20index%20Index%20at%20which%20the%20array%20mutation%20occurred%0A%20%20%20*%20%40param%20%7Bnumber%7D%20addedCount%20Number%20of%20added%20items%0A%20%20%20*%20%40param%20%7BArray%7D%20removed%20Array%20of%20removed%20items%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20notifySplice(inst%2Carray%2Cpath%2Cindex%2CaddedCount%2Cremoved)%7B_notifySplices(inst%2Carray%2Cpath%2C%5B%7Bindex%3Aindex%2CaddedCount%3AaddedCount%2Cremoved%3Aremoved%2Cobject%3Aarray%2Ctype%3A'splice'%7D%5D)%3B%7D%2F**%0A%20%20%20*%20Returns%20an%20upper-cased%20version%20of%20the%20string.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7Bstring%7D%20name%20String%20to%20uppercase%0A%20%20%20*%20%40return%20%7Bstring%7D%20Uppercased%20string%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20upper(name)%7Breturn%20name%5B0%5D.toUpperCase()%2Bname.substring(1)%3B%7D%2F**%0A%20%20%20*%20Element%20class%20mixin%20that%20provides%20meta-programming%20for%20Polymer's%20template%0A%20%20%20*%20binding%20and%20data%20observation%20(collectively%2C%20%22property%20effects%22)%20system.%0A%20%20%20*%0A%20%20%20*%20This%20mixin%20uses%20provides%20the%20following%20key%20static%20methods%20for%20adding%0A%20%20%20*%20property%20effects%20to%20an%20element%20class%3A%0A%20%20%20*%20-%20%60addPropertyEffect%60%0A%20%20%20*%20-%20%60createPropertyObserver%60%0A%20%20%20*%20-%20%60createMethodObserver%60%0A%20%20%20*%20-%20%60createNotifyingProperty%60%0A%20%20%20*%20-%20%60createReadOnlyProperty%60%0A%20%20%20*%20-%20%60createReflectedProperty%60%0A%20%20%20*%20-%20%60createComputedProperty%60%0A%20%20%20*%20-%20%60bindTemplate%60%0A%20%20%20*%0A%20%20%20*%20Each%20method%20creates%20one%20or%20more%20property%20accessors%2C%20along%20with%20metadata%0A%20%20%20*%20used%20by%20this%20mixin's%20implementation%20of%20%60_propertiesChanged%60%20to%20perform%0A%20%20%20*%20the%20property%20effects.%0A%20%20%20*%0A%20%20%20*%20Underscored%20versions%20of%20the%20above%20methods%20also%20exist%20on%20the%20element%0A%20%20%20*%20prototype%20for%20adding%20property%20effects%20on%20instances%20at%20runtime.%0A%20%20%20*%0A%20%20%20*%20Note%20that%20this%20mixin%20overrides%20several%20%60PropertyAccessors%60%20methods%2C%20in%0A%20%20%20*%20many%20cases%20to%20maintain%20guarantees%20provided%20by%20the%20Polymer%201.x%20features%3B%0A%20%20%20*%20notably%20it%20changes%20property%20accessors%20to%20be%20synchronous%20by%20default%0A%20%20%20*%20whereas%20the%20default%20when%20using%20%60PropertyAccessors%60%20standalone%20is%20to%20be%0A%20%20%20*%20async%20by%20default.%0A%20%20%20*%0A%20%20%20*%20%40mixinFunction%0A%20%20%20*%20%40polymer%0A%20%20%20*%20%40appliesMixin%20Polymer.TemplateStamp%0A%20%20%20*%20%40appliesMixin%20Polymer.PropertyAccessors%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Element%20class%20mixin%20that%20provides%20meta-programming%20for%20Polymer's%0A%20%20%20*%20template%20binding%20and%20data%20observation%20system.%0A%20%20%20*%2FPolymer.PropertyEffects%3DPolymer.dedupingMixin(function(superClass)%7B%2F**%0A%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20*%20%40extends%20%7BsuperClass%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertyAccessors%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_TemplateStamp%7D%0A%20%20%20%20%20*%20%40unrestricted%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Fvar%20propertyEffectsBase%3DPolymer.TemplateStamp(Polymer.PropertyAccessors(superClass))%3B%2F**%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40mixinClass%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertyEffects%7D%0A%20%20%20%20%20*%20%40extends%20%7BpropertyEffectsBase%7D%0A%20%20%20%20%20*%20%40unrestricted%0A%20%20%20%20%20*%2Fvar%20PropertyEffects%3Dfunction(_propertyEffectsBase)%7B_inherits(PropertyEffects%2C_propertyEffectsBase)%3Bfunction%20PropertyEffects()%7B_classCallCheck(this%2CPropertyEffects)%3B%2F**%20%40type%20%7Bboolean%7D%20*%2F%2F%2F%20Used%20to%20identify%20users%20of%20this%20mixin%2C%20ala%20instanceof%0Avar%20_this%3D_possibleConstructorReturn(this%2C(PropertyEffects.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects)).call(this))%3B_this.__isPropertyEffectsClient%3Dtrue%3B%2F**%20%40type%20%7Bnumber%7D%20*%2F%2F%2F%20NOTE%3A%20used%20to%20track%20re-entrant%20calls%20to%20%60_flushProperties%60%0A%2F%2F%20path%20changes%20dirty%20check%20against%20%60__dataTemp%60%20only%20during%20one%20%22turn%22%0A%2F%2F%20and%20are%20cleared%20when%20%60__dataCounter%60%20returns%20to%200.%0A_this.__dataCounter%3D0%3B%2F**%20%40type%20%7Bboolean%7D%20*%2F_this.__dataClientsReady%3B%2F**%20%40type%20%7BArray%7D%20*%2F_this.__dataPendingClients%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__dataToNotify%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__dataLinkedPaths%3B%2F**%20%40type%20%7Bboolean%7D%20*%2F_this.__dataHasPaths%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__dataCompoundStorage%3B%2F**%20%40type%20%7BPolymer_PropertyEffects%7D%20*%2F_this.__dataHost%3B%2F**%20%40type%20%7B!Object%7D%20*%2F_this.__dataTemp%3B%2F**%20%40type%20%7Bboolean%7D%20*%2F_this.__dataClientsInitialized%3B%2F**%20%40type%20%7B!Object%7D%20*%2F_this.__data%3B%2F**%20%40type%20%7B!Object%7D%20*%2F_this.__dataPending%3B%2F**%20%40type%20%7B!Object%7D%20*%2F_this.__dataOld%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__computeEffects%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__reflectEffects%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__notifyEffects%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__propagateEffects%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__observeEffects%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__readOnly%3B%2F**%20%40type%20%7B!TemplateInfo%7D%20*%2F_this.__templateInfo%3Breturn%20_this%3B%7D_createClass(PropertyEffects%2C%5B%7Bkey%3A'_initializeProperties'%2C%2F**%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_initializeProperties()%7B_get(PropertyEffects.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects.prototype)%2C'_initializeProperties'%2Cthis).call(this)%3BhostStack.registerHost(this)%3Bthis.__dataClientsReady%3Dfalse%3Bthis.__dataPendingClients%3Dnull%3Bthis.__dataToNotify%3Dnull%3Bthis.__dataLinkedPaths%3Dnull%3Bthis.__dataHasPaths%3Dfalse%3B%2F%2F%20May%20be%20set%20on%20instance%20prior%20to%20upgrade%0Athis.__dataCompoundStorage%3Dthis.__dataCompoundStorage%7C%7Cnull%3Bthis.__dataHost%3Dthis.__dataHost%7C%7Cnull%3Bthis.__dataTemp%3D%7B%7D%3Bthis.__dataClientsInitialized%3Dfalse%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20%60Polymer.PropertyAccessors%60%20implementation%20to%20provide%20a%0A%20%20%20%20%20%20%20*%20more%20efficient%20implementation%20of%20initializing%20properties%20from%0A%20%20%20%20%20%20%20*%20the%20prototype%20on%20the%20instance.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20props%20Properties%20to%20initialize%20on%20the%20prototype%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_initializeProtoProperties'%2Cvalue%3Afunction%20_initializeProtoProperties(props)%7Bthis.__data%3DObject.create(props)%3Bthis.__dataPending%3DObject.create(props)%3Bthis.__dataOld%3D%7B%7D%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20%60Polymer.PropertyAccessors%60%20implementation%20to%20avoid%20setting%0A%20%20%20%20%20%20%20*%20%60_setProperty%60's%20%60shouldNotify%3A%20true%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20props%20Properties%20to%20initialize%20on%20the%20instance%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_initializeInstanceProperties'%2Cvalue%3Afunction%20_initializeInstanceProperties(props)%7Bvar%20readOnly%3Dthis%5BTYPES.READ_ONLY%5D%3Bfor(var%20prop%20in%20props)%7Bif(!readOnly%7C%7C!readOnly%5Bprop%5D)%7Bthis.__dataPending%3Dthis.__dataPending%7C%7C%7B%7D%3Bthis.__dataOld%3Dthis.__dataOld%7C%7C%7B%7D%3Bthis.__data%5Bprop%5D%3Dthis.__dataPending%5Bprop%5D%3Dprops%5Bprop%5D%3B%7D%7D%7D%2F%2F%20Prototype%20setup%20----------------------------------------%0A%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60addPropertyEffect%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20that%20should%20trigger%20the%20effect%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20type%20Effect%20type%2C%20from%20this.PROPERTY_EFFECT_TYPES%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20effect%20Effect%20metadata%20object%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_addPropertyEffect'%2Cvalue%3Afunction%20_addPropertyEffect(property%2Ctype%2Ceffect)%7Bthis._createPropertyAccessor(property%2Ctype%3D%3DTYPES.READ_ONLY)%3B%2F%2F%20effects%20are%20accumulated%20into%20arrays%20per%20property%20based%20on%20type%0Avar%20effects%3DensureOwnEffectMap(this%2Ctype)%5Bproperty%5D%3Bif(!effects)%7Beffects%3Dthis%5Btype%5D%5Bproperty%5D%3D%5B%5D%3B%7Deffects.push(effect)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Removes%20the%20given%20property%20effect.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20the%20effect%20was%20associated%20with%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20type%20Effect%20type%2C%20from%20this.PROPERTY_EFFECT_TYPES%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20effect%20Effect%20metadata%20object%20to%20remove%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_removePropertyEffect'%2Cvalue%3Afunction%20_removePropertyEffect(property%2Ctype%2Ceffect)%7Bvar%20effects%3DensureOwnEffectMap(this%2Ctype)%5Bproperty%5D%3Bvar%20idx%3Deffects.indexOf(effect)%3Bif(idx%3E%3D0)%7Beffects.splice(idx%2C1)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20whether%20the%20current%20prototype%2Finstance%20has%20a%20property%20effect%0A%20%20%20%20%20%20%20*%20of%20a%20certain%20type.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%3D%7D%20type%20Effect%20type%2C%20from%20this.PROPERTY_EFFECT_TYPES%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20the%20prototype%2Finstance%20has%20an%20effect%20of%20this%20type%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_hasPropertyEffect'%2Cvalue%3Afunction%20_hasPropertyEffect(property%2Ctype)%7Bvar%20effects%3Dthis%5Btype%5D%3Breturn%20Boolean(effects%26%26effects%5Bproperty%5D)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20whether%20the%20current%20prototype%2Finstance%20has%20a%20%22read%20only%22%0A%20%20%20%20%20%20%20*%20accessor%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20the%20prototype%2Finstance%20has%20an%20effect%20of%20this%20type%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_hasReadOnlyEffect'%2Cvalue%3Afunction%20_hasReadOnlyEffect(property)%7Breturn%20this._hasPropertyEffect(property%2CTYPES.READ_ONLY)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20whether%20the%20current%20prototype%2Finstance%20has%20a%20%22notify%22%0A%20%20%20%20%20%20%20*%20property%20effect%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20the%20prototype%2Finstance%20has%20an%20effect%20of%20this%20type%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_hasNotifyEffect'%2Cvalue%3Afunction%20_hasNotifyEffect(property)%7Breturn%20this._hasPropertyEffect(property%2CTYPES.NOTIFY)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20whether%20the%20current%20prototype%2Finstance%20has%20a%20%22reflect%20to%20attribute%22%0A%20%20%20%20%20%20%20*%20property%20effect%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20the%20prototype%2Finstance%20has%20an%20effect%20of%20this%20type%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_hasReflectEffect'%2Cvalue%3Afunction%20_hasReflectEffect(property)%7Breturn%20this._hasPropertyEffect(property%2CTYPES.REFLECT)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20whether%20the%20current%20prototype%2Finstance%20has%20a%20%22computed%22%0A%20%20%20%20%20%20%20*%20property%20effect%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20the%20prototype%2Finstance%20has%20an%20effect%20of%20this%20type%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_hasComputedEffect'%2Cvalue%3Afunction%20_hasComputedEffect(property)%7Breturn%20this._hasPropertyEffect(property%2CTYPES.COMPUTE)%3B%7D%2F%2F%20Runtime%20----------------------------------------%0A%2F**%0A%20%20%20%20%20%20%20*%20Sets%20a%20pending%20property%20or%20path.%20%20If%20the%20root%20property%20of%20the%20path%20in%0A%20%20%20%20%20%20%20*%20question%20had%20no%20accessor%2C%20the%20path%20is%20set%2C%20otherwise%20it%20is%20enqueued%0A%20%20%20%20%20%20%20*%20via%20%60_setPendingProperty%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20function%20isolates%20relatively%20expensive%20functionality%20necessary%0A%20%20%20%20%20%20%20*%20for%20the%20public%20API%20(%60set%60%2C%20%60setProperties%60%2C%20%60notifyPath%60%2C%20and%20property%0A%20%20%20%20%20%20%20*%20change%20listeners%20via%20%7B%7B...%7D%7D%20bindings)%2C%20such%20that%20it%20is%20only%20done%0A%20%20%20%20%20%20%20*%20when%20paths%20enter%20the%20system%2C%20and%20not%20at%20every%20propagation%20step.%20%20It%0A%20%20%20%20%20%20%20*%20also%20sets%20a%20%60__dataHasPaths%60%20flag%20on%20the%20instance%20which%20is%20used%20to%0A%20%20%20%20%20%20%20*%20fast-path%20slower%20path-matching%20code%20in%20the%20property%20effects%20host%20paths.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%60path%60%20can%20be%20a%20path%20string%20or%20array%20of%20path%20parts%20as%20accepted%20by%20the%0A%20%20%20%20%20%20%20*%20public%20API.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cnumber%7Cstring%3E%7D%20path%20Path%20to%20set%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20shouldNotify%20Set%20to%20true%20if%20this%20change%20should%0A%20%20%20%20%20%20%20*%20%20cause%20a%20property%20notification%20event%20dispatch%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20isPathNotification%20If%20the%20path%20being%20set%20is%20a%20path%0A%20%20%20%20%20%20%20*%20%20%20notification%20of%20an%20already%20changed%20value%2C%20as%20opposed%20to%20a%20request%0A%20%20%20%20%20%20%20*%20%20%20to%20set%20and%20notify%20the%20change.%20%20In%20the%20latter%20%60false%60%20case%2C%20a%20dirty%0A%20%20%20%20%20%20%20*%20%20%20check%20is%20performed%20and%20then%20the%20value%20is%20set%20to%20the%20path%20before%0A%20%20%20%20%20%20%20*%20%20%20enqueuing%20the%20pending%20property%20change.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Returns%20true%20if%20the%20property%2Fpath%20was%20enqueued%20in%0A%20%20%20%20%20%20%20*%20%20%20the%20pending%20changes%20bag.%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_setPendingPropertyOrPath'%2Cvalue%3Afunction%20_setPendingPropertyOrPath(path%2Cvalue%2CshouldNotify%2CisPathNotification)%7Bif(isPathNotification%7C%7CPolymer.Path.root(Array.isArray(path)%3Fpath%5B0%5D%3Apath)!%3D%3Dpath)%7B%2F%2F%20Dirty%20check%20changes%20being%20set%20to%20a%20path%20against%20the%20actual%20object%2C%0A%2F%2F%20since%20this%20is%20the%20entry%20point%20for%20paths%20into%20the%20system%3B%20from%20here%0A%2F%2F%20the%20only%20dirty%20checks%20are%20against%20the%20%60__dataTemp%60%20cache%20to%20prevent%0A%2F%2F%20duplicate%20work%20in%20the%20same%20turn%20only.%20Note%2C%20if%20this%20was%20a%20notification%0A%2F%2F%20of%20a%20change%20already%20set%20to%20a%20path%20(isPathNotification%3A%20true)%2C%0A%2F%2F%20we%20always%20let%20the%20change%20through%20and%20skip%20the%20%60set%60%20since%20it%20was%0A%2F%2F%20already%20dirty%20checked%20at%20the%20point%20of%20entry%20and%20the%20underlying%0A%2F%2F%20object%20has%20already%20been%20updated%0Aif(!isPathNotification)%7Bvar%20old%3DPolymer.Path.get(this%2Cpath)%3Bpath%3D%2F**%20%40type%20%7Bstring%7D%20*%2FPolymer.Path.set(this%2Cpath%2Cvalue)%3B%2F%2F%20Use%20property-accessor's%20simpler%20dirty%20check%0Aif(!path%7C%7C!_get(PropertyEffects.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects.prototype)%2C'_shouldPropertyChange'%2Cthis).call(this%2Cpath%2Cvalue%2Cold))%7Breturn%20false%3B%7D%7Dthis.__dataHasPaths%3Dtrue%3Bif(this._setPendingProperty(%2F**%40type%7Bstring%7D*%2Fpath%2Cvalue%2CshouldNotify))%7BcomputeLinkedPaths(this%2Cpath%2Cvalue)%3Breturn%20true%3B%7D%7Delse%7Bif(this.__dataHasAccessor%26%26this.__dataHasAccessor%5Bpath%5D)%7Breturn%20this._setPendingProperty(%2F**%40type%7Bstring%7D*%2Fpath%2Cvalue%2CshouldNotify)%3B%7Delse%7Bthis%5Bpath%5D%3Dvalue%3B%7D%7Dreturn%20false%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Applies%20a%20value%20to%20a%20non-Polymer%20element%2Fnode's%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20implementation%20makes%20a%20best-effort%20at%20binding%20interop%3A%0A%20%20%20%20%20%20%20*%20Some%20native%20element%20properties%20have%20side-effects%20when%0A%20%20%20%20%20%20%20*%20re-setting%20the%20same%20value%20(e.g.%20setting%20%60%3Cinput%3E.value%60%20resets%20the%0A%20%20%20%20%20%20%20*%20cursor%20position)%2C%20so%20we%20do%20a%20dirty-check%20before%20setting%20the%20value.%0A%20%20%20%20%20%20%20*%20However%2C%20for%20better%20interop%20with%20non-Polymer%20custom%20elements%20that%0A%20%20%20%20%20%20%20*%20accept%20objects%2C%20we%20explicitly%20re-set%20object%20changes%20coming%20from%20the%0A%20%20%20%20%20%20%20*%20Polymer%20world%20(which%20may%20include%20deep%20object%20changes%20without%20the%0A%20%20%20%20%20%20%20*%20top%20reference%20changing)%2C%20erring%20on%20the%20side%20of%20providing%20more%0A%20%20%20%20%20%20%20*%20information.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Users%20may%20override%20this%20method%20to%20provide%20alternate%20approaches.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Node%7D%20node%20The%20node%20to%20set%20a%20property%20on%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20prop%20The%20property%20to%20set%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20The%20value%20to%20set%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_setUnmanagedPropertyToNode'%2Cvalue%3Afunction%20_setUnmanagedPropertyToNode(node%2Cprop%2Cvalue)%7B%2F%2F%20It%20is%20a%20judgment%20call%20that%20resetting%20primitives%20is%0A%2F%2F%20%22bad%22%20and%20resettings%20objects%20is%20also%20%22good%22%3B%20alternatively%20we%20could%0A%2F%2F%20implement%20a%20whitelist%20of%20tag%20%26%20property%20values%20that%20should%20never%0A%2F%2F%20be%20reset%20(e.g.%20%3Cinput%3E.value%20%26%26%20%3Cselect%3E.value)%0Aif(value!%3D%3Dnode%5Bprop%5D%7C%7C(typeof%20value%3D%3D%3D'undefined'%3F'undefined'%3A_typeof(value))%3D%3D'object')%7Bnode%5Bprop%5D%3Dvalue%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20the%20%60PropertiesChanged%60%20implementation%20to%20introduce%20special%0A%20%20%20%20%20%20%20*%20dirty%20check%20logic%20depending%20on%20the%20property%20%26%20value%20being%20set%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%201.%20Any%20value%20set%20to%20a%20path%20(e.g.%20'obj.prop'%3A%2042%20or%20'obj.prop'%3A%20%7B...%7D)%0A%20%20%20%20%20%20%20*%20%20%20%20Stored%20in%20%60__dataTemp%60%2C%20dirty%20checked%20against%20%60__dataTemp%60%0A%20%20%20%20%20%20%20*%202.%20Object%20set%20to%20simple%20property%20(e.g.%20'prop'%3A%20%7B...%7D)%0A%20%20%20%20%20%20%20*%20%20%20%20Stored%20in%20%60__dataTemp%60%20and%20%60__data%60%2C%20dirty%20checked%20against%0A%20%20%20%20%20%20%20*%20%20%20%20%60__dataTemp%60%20by%20default%20implementation%20of%20%60_shouldPropertyChange%60%0A%20%20%20%20%20%20%20*%203.%20Primitive%20value%20set%20to%20simple%20property%20(e.g.%20'prop'%3A%2042)%0A%20%20%20%20%20%20%20*%20%20%20%20Stored%20in%20%60__data%60%2C%20dirty%20checked%20against%20%60__data%60%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20dirty-check%20is%20important%20to%20prevent%20cycles%20due%20to%20two-way%0A%20%20%20%20%20%20%20*%20notification%2C%20but%20paths%20and%20objects%20are%20only%20dirty%20checked%20against%20any%0A%20%20%20%20%20%20%20*%20previous%20value%20set%20during%20this%20turn%20via%20a%20%22temporary%20cache%22%20that%20is%0A%20%20%20%20%20%20%20*%20cleared%20when%20the%20last%20%60_propertiesChanged%60%20exits.%20This%20is%20so%3A%0A%20%20%20%20%20%20%20*%20a.%20any%20cached%20array%20paths%20(e.g.%20'array.3.prop')%20may%20be%20invalidated%0A%20%20%20%20%20%20%20*%20%20%20%20due%20to%20array%20mutations%20like%20shift%2Funshift%2Fsplice%3B%20this%20is%20fine%0A%20%20%20%20%20%20%20*%20%20%20%20since%20path%20changes%20are%20dirty-checked%20at%20user%20entry%20points%20like%20%60set%60%0A%20%20%20%20%20%20%20*%20b.%20dirty-checking%20for%20objects%20only%20lasts%20one%20turn%20to%20allow%20the%20user%0A%20%20%20%20%20%20%20*%20%20%20%20to%20mutate%20the%20object%20in-place%20and%20re-set%20it%20with%20the%20same%20identity%0A%20%20%20%20%20%20%20*%20%20%20%20and%20have%20all%20sub-properties%20re-propagated%20in%20a%20subsequent%20turn.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20temp%20cache%20is%20not%20necessarily%20sufficient%20to%20prevent%20invalid%20array%0A%20%20%20%20%20%20%20*%20paths%2C%20since%20a%20splice%20can%20happen%20during%20the%20same%20turn%20(with%20pathological%0A%20%20%20%20%20%20%20*%20user%20code)%3B%20we%20could%20introduce%20a%20%22fixup%22%20for%20temporarily%20cached%20array%0A%20%20%20%20%20%20%20*%20paths%20if%20needed%3A%20https%3A%2F%2Fgithub.com%2FPolymer%2Fpolymer%2Fissues%2F4227%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20the%20property%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20shouldNotify%20True%20if%20property%20should%20fire%20notification%0A%20%20%20%20%20%20%20*%20%20%20event%20(applies%20only%20for%20%60notify%3A%20true%60%20properties)%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Returns%20true%20if%20the%20property%20changed%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_setPendingProperty'%2Cvalue%3Afunction%20_setPendingProperty(property%2Cvalue%2CshouldNotify)%7Bvar%20isPath%3Dthis.__dataHasPaths%26%26Polymer.Path.isPath(property)%3Bvar%20prevProps%3DisPath%3Fthis.__dataTemp%3Athis.__data%3Bif(this._shouldPropertyChange(property%2Cvalue%2CprevProps%5Bproperty%5D))%7Bif(!this.__dataPending)%7Bthis.__dataPending%3D%7B%7D%3Bthis.__dataOld%3D%7B%7D%3B%7D%2F%2F%20Ensure%20old%20is%20captured%20from%20the%20last%20turn%0Aif(!(property%20in%20this.__dataOld))%7Bthis.__dataOld%5Bproperty%5D%3Dthis.__data%5Bproperty%5D%3B%7D%2F%2F%20Paths%20are%20stored%20in%20temporary%20cache%20(cleared%20at%20end%20of%20turn)%2C%0A%2F%2F%20which%20is%20used%20for%20dirty-checking%2C%20all%20others%20stored%20in%20__data%0Aif(isPath)%7Bthis.__dataTemp%5Bproperty%5D%3Dvalue%3B%7Delse%7Bthis.__data%5Bproperty%5D%3Dvalue%3B%7D%2F%2F%20All%20changes%20go%20into%20pending%20property%20bag%2C%20passed%20to%20_propertiesChanged%0Athis.__dataPending%5Bproperty%5D%3Dvalue%3B%2F%2F%20Track%20properties%20that%20should%20notify%20separately%0Aif(isPath%7C%7Cthis%5BTYPES.NOTIFY%5D%26%26this%5BTYPES.NOTIFY%5D%5Bproperty%5D)%7Bthis.__dataToNotify%3Dthis.__dataToNotify%7C%7C%7B%7D%3Bthis.__dataToNotify%5Bproperty%5D%3DshouldNotify%3B%7Dreturn%20true%3B%7Dreturn%20false%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20base%20implementation%20to%20ensure%20all%20accessors%20set%20%60shouldNotify%60%0A%20%20%20%20%20%20%20*%20to%20true%2C%20for%20per-property%20notification%20tracking.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20the%20property%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_setProperty'%2Cvalue%3Afunction%20_setProperty(property%2Cvalue)%7Bif(this._setPendingProperty(property%2Cvalue%2Ctrue))%7Bthis._invalidateProperties()%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20%60PropertyAccessor%60's%20default%20async%20queuing%20of%0A%20%20%20%20%20%20%20*%20%60_propertiesChanged%60%3A%20if%20%60__dataReady%60%20is%20false%20(has%20not%20yet%20been%0A%20%20%20%20%20%20%20*%20manually%20flushed)%2C%20the%20function%20no-ops%3B%20otherwise%20flushes%0A%20%20%20%20%20%20%20*%20%60_propertiesChanged%60%20synchronously.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_invalidateProperties'%2Cvalue%3Afunction%20_invalidateProperties()%7Bif(this.__dataReady)%7Bthis._flushProperties()%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Enqueues%20the%20given%20client%20on%20a%20list%20of%20pending%20clients%2C%20whose%0A%20%20%20%20%20%20%20*%20pending%20property%20changes%20can%20later%20be%20flushed%20via%20a%20call%20to%0A%20%20%20%20%20%20%20*%20%60_flushClients%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20client%20PropertyEffects%20client%20to%20enqueue%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_enqueueClient'%2Cvalue%3Afunction%20_enqueueClient(client)%7Bthis.__dataPendingClients%3Dthis.__dataPendingClients%7C%7C%5B%5D%3Bif(client!%3D%3Dthis)%7Bthis.__dataPendingClients.push(client)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20superclass%20implementation.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_flushProperties'%2Cvalue%3Afunction%20_flushProperties()%7Bthis.__dataCounter%2B%2B%3B_get(PropertyEffects.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects.prototype)%2C'_flushProperties'%2Cthis).call(this)%3Bthis.__dataCounter--%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Flushes%20any%20clients%20previously%20enqueued%20via%20%60_enqueueClient%60%2C%20causing%0A%20%20%20%20%20%20%20*%20their%20%60_flushProperties%60%20method%20to%20run.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_flushClients'%2Cvalue%3Afunction%20_flushClients()%7Bif(!this.__dataClientsReady)%7Bthis.__dataClientsReady%3Dtrue%3Bthis._readyClients()%3B%2F%2F%20Override%20point%20where%20accessors%20are%20turned%20on%3B%20importantly%2C%0A%2F%2F%20this%20is%20after%20clients%20have%20fully%20readied%2C%20providing%20a%20guarantee%0A%2F%2F%20that%20any%20property%20effects%20occur%20only%20after%20all%20clients%20are%20ready.%0Athis.__dataReady%3Dtrue%3B%7Delse%7Bthis.__enableOrFlushClients()%3B%7D%7D%2F%2F%20NOTE%3A%20We%20ensure%20clients%20either%20enable%20or%20flush%20as%20appropriate.%20This%0A%2F%2F%20handles%20two%20corner%20cases%3A%0A%2F%2F%20(1)%20clients%20flush%20properly%20when%20connected%2Fenabled%20before%20the%20host%0A%2F%2F%20enables%3B%20e.g.%0A%2F%2F%20%20%20(a)%20Templatize%20stamps%20with%20no%20properties%20and%20does%20not%20flush%20and%0A%2F%2F%20%20%20(b)%20the%20instance%20is%20inserted%20into%20dom%20and%0A%2F%2F%20%20%20(c)%20then%20the%20instance%20flushes.%0A%2F%2F%20(2)%20clients%20enable%20properly%20when%20not%20connected%2Fenabled%20when%20the%20host%0A%2F%2F%20flushes%3B%20e.g.%0A%2F%2F%20%20%20(a)%20a%20template%20is%20runtime%20stamped%20and%20not%20yet%20connected%2Fenabled%0A%2F%2F%20%20%20(b)%20a%20host%20sets%20a%20property%2C%20causing%20stamped%20dom%20to%20flush%0A%2F%2F%20%20%20(c)%20the%20stamped%20dom%20enables.%0A%7D%2C%7Bkey%3A'__enableOrFlushClients'%2Cvalue%3Afunction%20__enableOrFlushClients()%7Bvar%20clients%3Dthis.__dataPendingClients%3Bif(clients)%7Bthis.__dataPendingClients%3Dnull%3Bfor(var%20i%3D0%3Bi%3Cclients.length%3Bi%2B%2B)%7Bvar%20client%3Dclients%5Bi%5D%3Bif(!client.__dataEnabled)%7Bclient._enableProperties()%3B%7Delse%20if(client.__dataPending)%7Bclient._flushProperties()%3B%7D%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Perform%20any%20initial%20setup%20on%20client%20dom.%20Called%20before%20the%20first%0A%20%20%20%20%20%20%20*%20%60_flushProperties%60%20call%20on%20client%20dom%20and%20before%20any%20element%0A%20%20%20%20%20%20%20*%20observers%20are%20called.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_readyClients'%2Cvalue%3Afunction%20_readyClients()%7Bthis.__enableOrFlushClients()%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Sets%20a%20bag%20of%20property%20changes%20to%20this%20instance%2C%20and%0A%20%20%20%20%20%20%20*%20synchronously%20processes%20all%20effects%20of%20the%20properties%20as%20a%20batch.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Property%20names%20must%20be%20simple%20properties%2C%20not%20paths.%20%20Batched%0A%20%20%20%20%20%20%20*%20path%20propagation%20is%20not%20supported.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20one%20or%20more%20key-value%20pairs%20whose%20key%20is%0A%20%20%20%20%20%20%20*%20%20%20a%20property%20and%20value%20is%20the%20new%20value%20to%20set%20for%20that%20property.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20setReadOnly%20When%20true%2C%20any%20private%20values%20set%20in%0A%20%20%20%20%20%20%20*%20%20%20%60props%60%20will%20be%20set.%20By%20default%2C%20%60setProperties%60%20will%20not%20set%0A%20%20%20%20%20%20%20*%20%20%20%60readOnly%3A%20true%60%20root%20properties.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'setProperties'%2Cvalue%3Afunction%20setProperties(props%2CsetReadOnly)%7Bfor(var%20path%20in%20props)%7Bif(setReadOnly%7C%7C!this%5BTYPES.READ_ONLY%5D%7C%7C!this%5BTYPES.READ_ONLY%5D%5Bpath%5D)%7B%2F%2FTODO(kschaaf)%3A%20explicitly%20disallow%20paths%20in%20setProperty%3F%0A%2F%2F%20wildcard%20observers%20currently%20only%20pass%20the%20first%20changed%20path%0A%2F%2F%20in%20the%20%60info%60%20object%2C%20and%20you%20could%20do%20some%20odd%20things%20batching%0A%2F%2F%20paths%2C%20e.g.%20%7B'foo.bar'%3A%20%7B...%7D%2C%20'foo'%3A%20null%7D%0Athis._setPendingPropertyOrPath(path%2Cprops%5Bpath%5D%2Ctrue)%3B%7D%7Dthis._invalidateProperties()%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20%60PropertyAccessors%60%20so%20that%20property%20accessor%0A%20%20%20%20%20%20%20*%20side%20effects%20are%20not%20enabled%20until%20after%20client%20dom%20is%20fully%20ready.%0A%20%20%20%20%20%20%20*%20Also%20calls%20%60_flushClients%60%20callback%20to%20ensure%20client%20dom%20is%20enabled%0A%20%20%20%20%20%20%20*%20that%20was%20not%20enabled%20as%20a%20result%20of%20flushing%20properties.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'ready'%2Cvalue%3Afunction%20ready()%7B%2F%2F%20It%20is%20important%20that%20%60super.ready()%60%20is%20not%20called%20here%20as%20it%0A%2F%2F%20immediately%20turns%20on%20accessors.%20Instead%2C%20we%20wait%20until%20%60readyClients%60%0A%2F%2F%20to%20enable%20accessors%20to%20provide%20a%20guarantee%20that%20clients%20are%20ready%0A%2F%2F%20before%20processing%20any%20accessors%20side%20effects.%0Athis._flushProperties()%3B%2F%2F%20If%20no%20data%20was%20pending%2C%20%60_flushProperties%60%20will%20not%20%60flushClients%60%0A%2F%2F%20so%20ensure%20this%20is%20done.%0Aif(!this.__dataClientsReady)%7Bthis._flushClients()%3B%7D%2F%2F%20Before%20ready%2C%20client%20notifications%20do%20not%20trigger%20_flushProperties.%0A%2F%2F%20Therefore%20a%20flush%20is%20necessary%20here%20if%20data%20has%20been%20set.%0Aif(this.__dataPending)%7Bthis._flushProperties()%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Implements%20%60PropertyAccessors%60's%20properties%20changed%20callback.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Runs%20each%20class%20of%20effects%20for%20the%20batch%20of%20changed%20properties%20in%0A%20%20%20%20%20%20%20*%20a%20specific%20order%20(compute%2C%20propagate%2C%20reflect%2C%20observe%2C%20notify).%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20currentProps%20Bag%20of%20all%20current%20accessor%20values%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20changedProps%20Bag%20of%20properties%20changed%20since%20the%20last%0A%20%20%20%20%20%20%20*%20%20%20call%20to%20%60_propertiesChanged%60%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20oldProps%20Bag%20of%20previous%20values%20for%20each%20property%0A%20%20%20%20%20%20%20*%20%20%20in%20%60changedProps%60%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_propertiesChanged'%2Cvalue%3Afunction%20_propertiesChanged(currentProps%2CchangedProps%2ColdProps)%7B%2F%2F%20----------------------------%0A%2F%2F%20let%20c%20%3D%20Object.getOwnPropertyNames(changedProps%20%7C%7C%20%7B%7D)%3B%0A%2F%2F%20window.debug%20%26%26%20console.group(this.localName%20%2B%20'%23'%20%2B%20this.id%20%2B%20'%3A%20'%20%2B%20c)%3B%0A%2F%2F%20if%20(window.debug)%20%7B%20debugger%3B%20%7D%0A%2F%2F%20----------------------------%0Avar%20hasPaths%3Dthis.__dataHasPaths%3Bthis.__dataHasPaths%3Dfalse%3B%2F%2F%20Compute%20properties%0ArunComputedEffects(this%2CchangedProps%2ColdProps%2ChasPaths)%3B%2F%2F%20Clear%20notify%20properties%20prior%20to%20possible%20reentry%20(propagate%2C%20observe)%2C%0A%2F%2F%20but%20after%20computing%20effects%20have%20a%20chance%20to%20add%20to%20them%0Avar%20notifyProps%3Dthis.__dataToNotify%3Bthis.__dataToNotify%3Dnull%3B%2F%2F%20Propagate%20properties%20to%20clients%0Athis._propagatePropertyChanges(changedProps%2ColdProps%2ChasPaths)%3B%2F%2F%20Flush%20clients%0Athis._flushClients()%3B%2F%2F%20Reflect%20properties%0ArunEffects(this%2Cthis%5BTYPES.REFLECT%5D%2CchangedProps%2ColdProps%2ChasPaths)%3B%2F%2F%20Observe%20properties%0ArunEffects(this%2Cthis%5BTYPES.OBSERVE%5D%2CchangedProps%2ColdProps%2ChasPaths)%3B%2F%2F%20Notify%20properties%20to%20host%0Aif(notifyProps)%7BrunNotifyEffects(this%2CnotifyProps%2CchangedProps%2ColdProps%2ChasPaths)%3B%7D%2F%2F%20Clear%20temporary%20cache%20at%20end%20of%20turn%0Aif(this.__dataCounter%3D%3D1)%7Bthis.__dataTemp%3D%7B%7D%3B%7D%2F%2F%20----------------------------%0A%2F%2F%20window.debug%20%26%26%20console.groupEnd(this.localName%20%2B%20'%23'%20%2B%20this.id%20%2B%20'%3A%20'%20%2B%20c)%3B%0A%2F%2F%20----------------------------%0A%7D%2F**%0A%20%20%20%20%20%20%20*%20Called%20to%20propagate%20any%20property%20changes%20to%20stamped%20template%20nodes%0A%20%20%20%20%20%20%20*%20managed%20by%20this%20element.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20changedProps%20Bag%20of%20changed%20properties%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_propagatePropertyChanges'%2Cvalue%3Afunction%20_propagatePropertyChanges(changedProps%2ColdProps%2ChasPaths)%7Bif(this%5BTYPES.PROPAGATE%5D)%7BrunEffects(this%2Cthis%5BTYPES.PROPAGATE%5D%2CchangedProps%2ColdProps%2ChasPaths)%3B%7Dvar%20templateInfo%3Dthis.__templateInfo%3Bwhile(templateInfo)%7BrunEffects(this%2CtemplateInfo.propertyEffects%2CchangedProps%2ColdProps%2ChasPaths%2CtemplateInfo.nodeList)%3BtemplateInfo%3DtemplateInfo.nextTemplateInfo%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Aliases%20one%20data%20path%20as%20another%2C%20such%20that%20path%20notifications%20from%20one%0A%20%20%20%20%20%20%20*%20are%20routed%20to%20the%20other.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20to%20Target%20path%20to%20link.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20from%20Source%20path%20to%20link.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'linkPaths'%2Cvalue%3Afunction%20linkPaths(to%2Cfrom)%7Bto%3DPolymer.Path.normalize(to)%3Bfrom%3DPolymer.Path.normalize(from)%3Bthis.__dataLinkedPaths%3Dthis.__dataLinkedPaths%7C%7C%7B%7D%3Bthis.__dataLinkedPaths%5Bto%5D%3Dfrom%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Removes%20a%20data%20path%20alias%20previously%20established%20with%20%60_linkPaths%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%2C%20the%20path%20to%20unlink%20should%20be%20the%20target%20(%60to%60)%20used%20when%0A%20%20%20%20%20%20%20*%20linking%20the%20paths.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Target%20path%20to%20unlink.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'unlinkPaths'%2Cvalue%3Afunction%20unlinkPaths(path)%7Bpath%3DPolymer.Path.normalize(path)%3Bif(this.__dataLinkedPaths)%7Bdelete%20this.__dataLinkedPaths%5Bpath%5D%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Notify%20that%20an%20array%20has%20changed.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%20%20%20%20this.items%20%3D%20%5B%20%7Bname%3A%20'Jim'%7D%2C%20%7Bname%3A%20'Todd'%7D%2C%20%7Bname%3A%20'Bill'%7D%20%5D%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20...%0A%20%20%20%20%20%20%20*%20%20%20%20%20this.items.splice(1%2C%201%2C%20%7Bname%3A%20'Sam'%7D)%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20this.items.push(%7Bname%3A%20'Bob'%7D)%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20this.notifySplices('items'%2C%20%5B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%7B%20index%3A%201%2C%20removed%3A%20%5B%7Bname%3A%20'Todd'%7D%5D%2C%20addedCount%3A%201%2C%20object%3A%20this.items%2C%20type%3A%20'splice'%20%7D%2C%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%7B%20index%3A%203%2C%20removed%3A%20%5B%5D%2C%20addedCount%3A%201%2C%20object%3A%20this.items%2C%20type%3A%20'splice'%7D%0A%20%20%20%20%20%20%20*%20%20%20%20%20%5D)%3B%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20path%20Path%20that%20should%20be%20notified.%0A%20%20%20%20%20%20%20*%20%40param%20%7BArray%7D%20splices%20Array%20of%20splice%20records%20indicating%20ordered%0A%20%20%20%20%20%20%20*%20%20%20changes%20that%20occurred%20to%20the%20array.%20Each%20record%20should%20have%20the%0A%20%20%20%20%20%20%20*%20%20%20following%20fields%3A%0A%20%20%20%20%20%20%20*%20%20%20%20*%20index%3A%20index%20at%20which%20the%20change%20occurred%0A%20%20%20%20%20%20%20*%20%20%20%20*%20removed%3A%20array%20of%20items%20that%20were%20removed%20from%20this%20index%0A%20%20%20%20%20%20%20*%20%20%20%20*%20addedCount%3A%20number%20of%20new%20items%20added%20at%20this%20index%0A%20%20%20%20%20%20%20*%20%20%20%20*%20object%3A%20a%20reference%20to%20the%20array%20in%20question%0A%20%20%20%20%20%20%20*%20%20%20%20*%20type%3A%20the%20string%20literal%20'splice'%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%20%20Note%20that%20splice%20records%20_must_%20be%20normalized%20such%20that%20they%20are%0A%20%20%20%20%20%20%20*%20%20%20reported%20in%20index%20order%20(raw%20results%20from%20%60Object.observe%60%20are%20not%0A%20%20%20%20%20%20%20*%20%20%20ordered%20and%20must%20be%20normalized%2Fmerged%20before%20notifying).%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'notifySplices'%2Cvalue%3Afunction%20notifySplices(path%2Csplices)%7Bvar%20info%3D%7Bpath%3A''%7D%3Bvar%20array%3D%2F**%20%40type%20%7BArray%7D%20*%2FPolymer.Path.get(this%2Cpath%2Cinfo)%3B_notifySplices(this%2Carray%2Cinfo.path%2Csplices)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Convenience%20method%20for%20reading%20a%20value%20from%20a%20path.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%2C%20if%20any%20part%20in%20the%20path%20is%20undefined%2C%20this%20method%20returns%0A%20%20%20%20%20%20%20*%20%60undefined%60%20(this%20method%20does%20not%20throw%20when%20dereferencing%20undefined%0A%20%20%20%20%20%20%20*%20paths).%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B(string%7C!Array%3C(string%7Cnumber)%3E)%7D%20path%20Path%20to%20the%20value%0A%20%20%20%20%20%20%20*%20%20%20to%20read.%20%20The%20path%20may%20be%20specified%20as%20a%20string%20(e.g.%20%60foo.bar.baz%60)%0A%20%20%20%20%20%20%20*%20%20%20or%20an%20array%20of%20path%20parts%20(e.g.%20%60%5B'foo.bar'%2C%20'baz'%5D%60).%20%20Note%20that%0A%20%20%20%20%20%20%20*%20%20%20bracketed%20expressions%20are%20not%20supported%3B%20string-based%20path%20parts%0A%20%20%20%20%20%20%20*%20%20%20*must*%20be%20separated%20by%20dots.%20%20Note%20that%20when%20dereferencing%20array%0A%20%20%20%20%20%20%20*%20%20%20indices%2C%20the%20index%20may%20be%20used%20as%20a%20dotted%20part%20directly%0A%20%20%20%20%20%20%20*%20%20%20(e.g.%20%60users.12.name%60%20or%20%60%5B'users'%2C%2012%2C%20'name'%5D%60).%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20root%20Root%20object%20from%20which%20the%20path%20is%20evaluated.%0A%20%20%20%20%20%20%20*%20%40return%20%7B*%7D%20Value%20at%20the%20path%2C%20or%20%60undefined%60%20if%20any%20part%20of%20the%20path%0A%20%20%20%20%20%20%20*%20%20%20is%20undefined.%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'get'%2Cvalue%3Afunction%20get(path%2Croot)%7Breturn%20Polymer.Path.get(root%7C%7Cthis%2Cpath)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Convenience%20method%20for%20setting%20a%20value%20to%20a%20path%20and%20notifying%20any%0A%20%20%20%20%20%20%20*%20elements%20bound%20to%20the%20same%20path.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%2C%20if%20any%20part%20in%20the%20path%20except%20for%20the%20last%20is%20undefined%2C%0A%20%20%20%20%20%20%20*%20this%20method%20does%20nothing%20(this%20method%20does%20not%20throw%20when%0A%20%20%20%20%20%20%20*%20dereferencing%20undefined%20paths).%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B(string%7C!Array%3C(string%7Cnumber)%3E)%7D%20path%20Path%20to%20the%20value%0A%20%20%20%20%20%20%20*%20%20%20to%20write.%20%20The%20path%20may%20be%20specified%20as%20a%20string%20(e.g.%20%60'foo.bar.baz'%60)%0A%20%20%20%20%20%20%20*%20%20%20or%20an%20array%20of%20path%20parts%20(e.g.%20%60%5B'foo.bar'%2C%20'baz'%5D%60).%20%20Note%20that%0A%20%20%20%20%20%20%20*%20%20%20bracketed%20expressions%20are%20not%20supported%3B%20string-based%20path%20parts%0A%20%20%20%20%20%20%20*%20%20%20*must*%20be%20separated%20by%20dots.%20%20Note%20that%20when%20dereferencing%20array%0A%20%20%20%20%20%20%20*%20%20%20indices%2C%20the%20index%20may%20be%20used%20as%20a%20dotted%20part%20directly%0A%20%20%20%20%20%20%20*%20%20%20(e.g.%20%60'users.12.name'%60%20or%20%60%5B'users'%2C%2012%2C%20'name'%5D%60).%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%20at%20the%20specified%20path.%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20root%20Root%20object%20from%20which%20the%20path%20is%20evaluated.%0A%20%20%20%20%20%20%20*%20%20%20When%20specified%2C%20no%20notification%20will%20occur.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'set'%2Cvalue%3Afunction%20set(path%2Cvalue%2Croot)%7Bif(root)%7BPolymer.Path.set(root%2Cpath%2Cvalue)%3B%7Delse%7Bif(!this%5BTYPES.READ_ONLY%5D%7C%7C!this%5BTYPES.READ_ONLY%5D%5B%2F**%20%40type%20%7Bstring%7D%20*%2Fpath%5D)%7Bif(this._setPendingPropertyOrPath(path%2Cvalue%2Ctrue))%7Bthis._invalidateProperties()%3B%7D%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Adds%20items%20onto%20the%20end%20of%20the%20array%20at%20the%20path%20specified.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20arguments%20after%20%60path%60%20and%20return%20value%20match%20that%20of%0A%20%20%20%20%20%20%20*%20%60Array.prototype.push%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20notifies%20other%20paths%20to%20the%20same%20array%20that%20a%0A%20%20%20%20%20%20%20*%20splice%20occurred%20to%20the%20array.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Path%20to%20array.%0A%20%20%20%20%20%20%20*%20%40param%20%7B...*%7D%20items%20Items%20to%20push%20onto%20array%0A%20%20%20%20%20%20%20*%20%40return%20%7Bnumber%7D%20New%20length%20of%20the%20array.%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'push'%2Cvalue%3Afunction%20push(path)%7Bvar%20info%3D%7Bpath%3A''%7D%3Bvar%20array%3D%2F**%20%40type%20%7BArray%7D*%2FPolymer.Path.get(this%2Cpath%2Cinfo)%3Bvar%20len%3Darray.length%3Bfor(var%20_len%3Darguments.length%2Citems%3DArray(_len%3E1%3F_len-1%3A0)%2C_key%3D1%3B_key%3C_len%3B_key%2B%2B)%7Bitems%5B_key-1%5D%3Darguments%5B_key%5D%3B%7Dvar%20ret%3Darray.push.apply(array%2Citems)%3Bif(items.length)%7BnotifySplice(this%2Carray%2Cinfo.path%2Clen%2Citems.length%2C%5B%5D)%3B%7Dreturn%20ret%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Removes%20an%20item%20from%20the%20end%20of%20array%20at%20the%20path%20specified.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20arguments%20after%20%60path%60%20and%20return%20value%20match%20that%20of%0A%20%20%20%20%20%20%20*%20%60Array.prototype.pop%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20notifies%20other%20paths%20to%20the%20same%20array%20that%20a%0A%20%20%20%20%20%20%20*%20splice%20occurred%20to%20the%20array.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Path%20to%20array.%0A%20%20%20%20%20%20%20*%20%40return%20%7B*%7D%20Item%20that%20was%20removed.%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'pop'%2Cvalue%3Afunction%20pop(path)%7Bvar%20info%3D%7Bpath%3A''%7D%3Bvar%20array%3D%2F**%20%40type%20%7BArray%7D%20*%2FPolymer.Path.get(this%2Cpath%2Cinfo)%3Bvar%20hadLength%3DBoolean(array.length)%3Bvar%20ret%3Darray.pop()%3Bif(hadLength)%7BnotifySplice(this%2Carray%2Cinfo.path%2Carray.length%2C0%2C%5Bret%5D)%3B%7Dreturn%20ret%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Starting%20from%20the%20start%20index%20specified%2C%20removes%200%20or%20more%20items%0A%20%20%20%20%20%20%20*%20from%20the%20array%20and%20inserts%200%20or%20more%20new%20items%20in%20their%20place.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20arguments%20after%20%60path%60%20and%20return%20value%20match%20that%20of%0A%20%20%20%20%20%20%20*%20%60Array.prototype.splice%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20notifies%20other%20paths%20to%20the%20same%20array%20that%20a%0A%20%20%20%20%20%20%20*%20splice%20occurred%20to%20the%20array.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Path%20to%20array.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20start%20Index%20from%20which%20to%20start%20removing%2Finserting.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20deleteCount%20Number%20of%20items%20to%20remove.%0A%20%20%20%20%20%20%20*%20%40param%20%7B...*%7D%20items%20Items%20to%20insert%20into%20array.%0A%20%20%20%20%20%20%20*%20%40return%20%7BArray%7D%20Array%20of%20removed%20items.%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'splice'%2Cvalue%3Afunction%20splice(path%2Cstart%2CdeleteCount)%7Bfor(var%20_len2%3Darguments.length%2Citems%3DArray(_len2%3E3%3F_len2-3%3A0)%2C_key2%3D3%3B_key2%3C_len2%3B_key2%2B%2B)%7Bitems%5B_key2-3%5D%3Darguments%5B_key2%5D%3B%7Dvar%20info%3D%7Bpath%3A''%7D%3Bvar%20array%3D%2F**%20%40type%20%7BArray%7D%20*%2FPolymer.Path.get(this%2Cpath%2Cinfo)%3B%2F%2F%20Normalize%20fancy%20native%20splice%20handling%20of%20crazy%20start%20values%0Aif(start%3C0)%7Bstart%3Darray.length-Math.floor(-start)%3B%7Delse%20if(start)%7Bstart%3DMath.floor(start)%3B%7D%2F%2F%20array.splice%20does%20different%20things%20based%20on%20the%20number%20of%20arguments%0A%2F%2F%20you%20pass%20in.%20Therefore%2C%20array.splice(0)%20and%20array.splice(0%2C%20undefined)%0A%2F%2F%20do%20different%20things.%20In%20the%20former%2C%20the%20whole%20array%20is%20cleared.%20In%20the%0A%2F%2F%20latter%2C%20no%20items%20are%20removed.%0A%2F%2F%20This%20means%20that%20we%20need%20to%20detect%20whether%201.%20one%20of%20the%20arguments%0A%2F%2F%20is%20actually%20passed%20in%20and%20then%202.%20determine%20how%20many%20arguments%0A%2F%2F%20we%20should%20pass%20on%20to%20the%20native%20array.splice%0A%2F%2F%0Avar%20ret%3Dvoid%200%3B%2F%2F%20Omit%20any%20additional%20arguments%20if%20they%20were%20not%20passed%20in%0Aif(arguments.length%3D%3D%3D2)%7Bret%3Darray.splice(start)%3B%2F%2F%20Either%20start%20was%20undefined%20and%20the%20others%20were%20defined%2C%20but%20in%20this%0A%2F%2F%20case%20we%20can%20safely%20pass%20on%20all%20arguments%0A%2F%2F%0A%2F%2F%20Note%3A%20this%20includes%20the%20case%20where%20none%20of%20the%20arguments%20were%20passed%20in%2C%0A%2F%2F%20e.g.%20this.splice('array').%20However%2C%20if%20both%20start%20and%20deleteCount%0A%2F%2F%20are%20undefined%2C%20array.splice%20will%20not%20modify%20the%20array%20(as%20expected)%0A%7Delse%7Bret%3Darray.splice.apply(array%2C%5Bstart%2CdeleteCount%5D.concat(items))%3B%7D%2F%2F%20At%20the%20end%2C%20check%20whether%20any%20items%20were%20passed%20in%20(e.g.%20insertions)%0A%2F%2F%20or%20if%20the%20return%20array%20contains%20items%20(e.g.%20deletions).%0A%2F%2F%20Only%20notify%20if%20items%20were%20added%20or%20deleted.%0Aif(items.length%7C%7Cret.length)%7BnotifySplice(this%2Carray%2Cinfo.path%2Cstart%2Citems.length%2Cret)%3B%7Dreturn%20ret%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Removes%20an%20item%20from%20the%20beginning%20of%20array%20at%20the%20path%20specified.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20arguments%20after%20%60path%60%20and%20return%20value%20match%20that%20of%0A%20%20%20%20%20%20%20*%20%60Array.prototype.pop%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20notifies%20other%20paths%20to%20the%20same%20array%20that%20a%0A%20%20%20%20%20%20%20*%20splice%20occurred%20to%20the%20array.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Path%20to%20array.%0A%20%20%20%20%20%20%20*%20%40return%20%7B*%7D%20Item%20that%20was%20removed.%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'shift'%2Cvalue%3Afunction%20shift(path)%7Bvar%20info%3D%7Bpath%3A''%7D%3Bvar%20array%3D%2F**%20%40type%20%7BArray%7D%20*%2FPolymer.Path.get(this%2Cpath%2Cinfo)%3Bvar%20hadLength%3DBoolean(array.length)%3Bvar%20ret%3Darray.shift()%3Bif(hadLength)%7BnotifySplice(this%2Carray%2Cinfo.path%2C0%2C0%2C%5Bret%5D)%3B%7Dreturn%20ret%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Adds%20items%20onto%20the%20beginning%20of%20the%20array%20at%20the%20path%20specified.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20arguments%20after%20%60path%60%20and%20return%20value%20match%20that%20of%0A%20%20%20%20%20%20%20*%20%60Array.prototype.push%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20notifies%20other%20paths%20to%20the%20same%20array%20that%20a%0A%20%20%20%20%20%20%20*%20splice%20occurred%20to%20the%20array.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Path%20to%20array.%0A%20%20%20%20%20%20%20*%20%40param%20%7B...*%7D%20items%20Items%20to%20insert%20info%20array%0A%20%20%20%20%20%20%20*%20%40return%20%7Bnumber%7D%20New%20length%20of%20the%20array.%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'unshift'%2Cvalue%3Afunction%20unshift(path)%7Bvar%20info%3D%7Bpath%3A''%7D%3Bvar%20array%3D%2F**%20%40type%20%7BArray%7D%20*%2FPolymer.Path.get(this%2Cpath%2Cinfo)%3Bfor(var%20_len3%3Darguments.length%2Citems%3DArray(_len3%3E1%3F_len3-1%3A0)%2C_key3%3D1%3B_key3%3C_len3%3B_key3%2B%2B)%7Bitems%5B_key3-1%5D%3Darguments%5B_key3%5D%3B%7Dvar%20ret%3Darray.unshift.apply(array%2Citems)%3Bif(items.length)%7BnotifySplice(this%2Carray%2Cinfo.path%2C0%2Citems.length%2C%5B%5D)%3B%7Dreturn%20ret%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Notify%20that%20a%20path%20has%20changed.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%20%20%20%20this.item.user.name%20%3D%20'Bob'%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20this.notifyPath('item.user.name')%3B%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20path%20Path%20that%20should%20be%20notified.%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%3D%7D%20value%20Value%20at%20the%20path%20(optional).%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'notifyPath'%2Cvalue%3Afunction%20notifyPath(path%2Cvalue)%7B%2F**%20%40type%20%7Bstring%7D%20*%2Fvar%20propPath%3Dvoid%200%3Bif(arguments.length%3D%3D1)%7B%2F%2F%20Get%20value%20if%20not%20supplied%0Avar%20info%3D%7Bpath%3A''%7D%3Bvalue%3DPolymer.Path.get(this%2Cpath%2Cinfo)%3BpropPath%3Dinfo.path%3B%7Delse%20if(Array.isArray(path))%7B%2F%2F%20Normalize%20path%20if%20needed%0ApropPath%3DPolymer.Path.normalize(path)%3B%7Delse%7BpropPath%3D%2F**%20%40type%7Bstring%7D%20*%2Fpath%3B%7Dif(this._setPendingPropertyOrPath(propPath%2Cvalue%2Ctrue%2Ctrue))%7Bthis._invalidateProperties()%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60createReadOnlyProperty%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20protectedSetter%20Creates%20a%20custom%20protected%20setter%0A%20%20%20%20%20%20%20*%20%20%20when%20%60true%60.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_createReadOnlyProperty'%2Cvalue%3Afunction%20_createReadOnlyProperty(property%2CprotectedSetter)%7Bthis._addPropertyEffect(property%2CTYPES.READ_ONLY)%3Bif(protectedSetter)%7Bthis%5B'_set'%2Bupper(property)%5D%3D%2F**%20%40this%20%7BPropertyEffects%7D%20*%2Ffunction(value)%7Bthis._setProperty(property%2Cvalue)%3B%7D%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60createPropertyObserver%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7Cfunction(*%2C*)%7D%20method%20Function%20or%20name%20of%20observer%20method%20to%20call%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20dynamicFn%20Whether%20the%20method%20name%20should%20be%20included%20as%0A%20%20%20%20%20%20%20*%20%20%20a%20dependency%20to%20the%20effect.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_createPropertyObserver'%2Cvalue%3Afunction%20_createPropertyObserver(property%2Cmethod%2CdynamicFn)%7Bvar%20info%3D%7Bproperty%3Aproperty%2Cmethod%3Amethod%2CdynamicFn%3ABoolean(dynamicFn)%7D%3Bthis._addPropertyEffect(property%2CTYPES.OBSERVE%2C%7Bfn%3ArunObserverEffect%2Cinfo%3Ainfo%2Ctrigger%3A%7Bname%3Aproperty%7D%7D)%3Bif(dynamicFn)%7Bthis._addPropertyEffect(%2F**%20%40type%20%7Bstring%7D%20*%2Fmethod%2CTYPES.OBSERVE%2C%7Bfn%3ArunObserverEffect%2Cinfo%3Ainfo%2Ctrigger%3A%7Bname%3Amethod%7D%7D)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60createMethodObserver%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20expression%20Method%20expression%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%7CObject%3D%7D%20dynamicFn%20Boolean%20or%20object%20map%20indicating%0A%20%20%20%20%20%20%20*%20%20%20whether%20method%20names%20should%20be%20included%20as%20a%20dependency%20to%20the%20effect.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_createMethodObserver'%2Cvalue%3Afunction%20_createMethodObserver(expression%2CdynamicFn)%7Bvar%20sig%3DparseMethod(expression)%3Bif(!sig)%7Bthrow%20new%20Error(%22Malformed%20observer%20expression%20'%22%2Bexpression%2B%22'%22)%3B%7DcreateMethodEffect(this%2Csig%2CTYPES.OBSERVE%2CrunMethodEffect%2Cnull%2CdynamicFn)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60createNotifyingProperty%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_createNotifyingProperty'%2Cvalue%3Afunction%20_createNotifyingProperty(property)%7Bthis._addPropertyEffect(property%2CTYPES.NOTIFY%2C%7Bfn%3ArunNotifyEffect%2Cinfo%3A%7BeventName%3ACaseMap.camelToDashCase(property)%2B'-changed'%2Cproperty%3Aproperty%7D%7D)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60createReflectedProperty%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_createReflectedProperty'%2Cvalue%3Afunction%20_createReflectedProperty(property)%7Bvar%20attr%3Dthis.constructor.attributeNameForProperty(property)%3Bif(attr%5B0%5D%3D%3D%3D'-')%7Bconsole.warn('Property%20'%2Bproperty%2B'%20cannot%20be%20reflected%20to%20attribute%20'%2Battr%2B'%20because%20%22-%22%20is%20not%20a%20valid%20starting%20attribute%20name.%20Use%20a%20lowercase%20first%20letter%20for%20the%20property%20instead.')%3B%7Delse%7Bthis._addPropertyEffect(property%2CTYPES.REFLECT%2C%7Bfn%3ArunReflectEffect%2Cinfo%3A%7BattrName%3Aattr%7D%7D)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60createComputedProperty%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20computed%20property%20to%20set%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20expression%20Method%20expression%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%7CObject%3D%7D%20dynamicFn%20Boolean%20or%20object%20map%20indicating%0A%20%20%20%20%20%20%20*%20%20%20whether%20method%20names%20should%20be%20included%20as%20a%20dependency%20to%20the%20effect.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_createComputedProperty'%2Cvalue%3Afunction%20_createComputedProperty(property%2Cexpression%2CdynamicFn)%7Bvar%20sig%3DparseMethod(expression)%3Bif(!sig)%7Bthrow%20new%20Error(%22Malformed%20computed%20expression%20'%22%2Bexpression%2B%22'%22)%3B%7DcreateMethodEffect(this%2Csig%2CTYPES.COMPUTE%2CrunComputedEffect%2Cproperty%2CdynamicFn)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Gather%20the%20argument%20values%20for%20a%20method%20specified%20in%20the%20provided%20array%0A%20%20%20%20%20%20%20*%20of%20argument%20metadata.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20%60path%60%20and%20%60value%60%20arguments%20are%20used%20to%20fill%20in%20wildcard%20descriptor%0A%20%20%20%20%20%20%20*%20when%20the%20method%20is%20being%20called%20as%20a%20result%20of%20a%20path%20notification.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Array%3C!MethodArg%3E%7D%20args%20Array%20of%20argument%20metadata%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20path%20Property%2Fpath%20name%20that%20triggered%20the%20method%20effect%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20%20%20%20%20*%20%40return%20%7BArray%3C*%3E%7D%20Array%20of%20argument%20values%0A%20%20%20%20%20%20%20*%20%40private%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_marshalArgs'%2Cvalue%3Afunction%20_marshalArgs(args%2Cpath%2Cprops)%7Bvar%20data%3Dthis.__data%3Bvar%20values%3D%5B%5D%3Bfor(var%20i%3D0%2Cl%3Dargs.length%3Bi%3Cl%3Bi%2B%2B)%7Bvar%20arg%3Dargs%5Bi%5D%3Bvar%20name%3Darg.name%3Bvar%20v%3Dvoid%200%3Bif(arg.literal)%7Bv%3Darg.value%3B%7Delse%7Bif(arg.structured)%7Bv%3DPolymer.Path.get(data%2Cname)%3B%2F%2F%20when%20data%20is%20not%20stored%20e.g.%20%60splices%60%0Aif(v%3D%3D%3Dundefined)%7Bv%3Dprops%5Bname%5D%3B%7D%7Delse%7Bv%3Ddata%5Bname%5D%3B%7D%7Dif(arg.wildcard)%7B%2F%2F%20Only%20send%20the%20actual%20path%20changed%20info%20if%20the%20change%20that%0A%2F%2F%20caused%20the%20observer%20to%20run%20matched%20the%20wildcard%0Avar%20baseChanged%3Dname.indexOf(path%2B'.')%3D%3D%3D0%3Bvar%20matches%3Dpath.indexOf(name)%3D%3D%3D0%26%26!baseChanged%3Bvalues%5Bi%5D%3D%7Bpath%3Amatches%3Fpath%3Aname%2Cvalue%3Amatches%3Fprops%5Bpath%5D%3Av%2Cbase%3Av%7D%3B%7Delse%7Bvalues%5Bi%5D%3Dv%3B%7D%7Dreturn%20values%3B%7D%2F%2F%20--%20static%20class%20methods%20------------%0A%2F**%0A%20%20%20%20%20%20%20*%20Ensures%20an%20accessor%20exists%20for%20the%20specified%20property%2C%20and%20adds%0A%20%20%20%20%20%20%20*%20to%20a%20list%20of%20%22property%20effects%22%20that%20will%20run%20when%20the%20accessor%20for%0A%20%20%20%20%20%20%20*%20the%20specified%20property%20is%20set.%20%20Effects%20are%20grouped%20by%20%22type%22%2C%20which%0A%20%20%20%20%20%20%20*%20roughly%20corresponds%20to%20a%20phase%20in%20effect%20processing.%20%20The%20effect%0A%20%20%20%20%20%20%20*%20metadata%20should%20be%20in%20the%20following%20form%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20fn%3A%20effectFunction%2C%20%2F%2F%20Reference%20to%20function%20to%20call%20to%20perform%20effect%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20info%3A%20%7B%20...%20%7D%20%20%20%20%20%20%20%2F%2F%20Effect%20metadata%20passed%20to%20function%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20trigger%3A%20%7B%20%20%20%20%20%20%20%20%20%20%2F%2F%20Optional%20triggering%20metadata%3B%20if%20not%20provided%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20name%3A%20string%20%20%20%20%20%20%2F%2F%20the%20property%20is%20treated%20as%20a%20wildcard%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20structured%3A%20boolean%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20wildcard%3A%20boolean%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20*%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Effects%20are%20called%20from%20%60_propertiesChanged%60%20in%20the%20following%20order%20by%0A%20%20%20%20%20%20%20*%20type%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%201.%20COMPUTE%0A%20%20%20%20%20%20%20*%202.%20PROPAGATE%0A%20%20%20%20%20%20%20*%203.%20REFLECT%0A%20%20%20%20%20%20%20*%204.%20OBSERVE%0A%20%20%20%20%20%20%20*%205.%20NOTIFY%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Effect%20functions%20are%20called%20with%20the%20following%20signature%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%20%20%20%20effectFunction(inst%2C%20path%2C%20props%2C%20oldProps%2C%20info%2C%20hasPaths)%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20that%20should%20trigger%20the%20effect%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20type%20Effect%20type%2C%20from%20this.PROPERTY_EFFECT_TYPES%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20effect%20Effect%20metadata%20object%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_bindTemplate'%2C%2F%2F%20--%20binding%20----------------------------------------------%0A%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60bindTemplate%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20may%20be%20called%20on%20the%20prototype%20(for%20prototypical%20template%0A%20%20%20%20%20%20%20*%20binding%2C%20to%20avoid%20creating%20accessors%20every%20instance)%20once%20per%20prototype%2C%0A%20%20%20%20%20%20%20*%20and%20will%20be%20called%20with%20%60runtimeBinding%3A%20true%60%20by%20%60_stampTemplate%60%20to%0A%20%20%20%20%20%20%20*%20create%20and%20link%20an%20instance%20of%20the%20template%20metadata%20associated%20with%20a%0A%20%20%20%20%20%20%20*%20particular%20stamping.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!HTMLTemplateElement%7D%20template%20Template%20containing%20binding%0A%20%20%20%20%20%20%20*%20%20%20bindings%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20instanceBinding%20When%20false%20(default)%2C%20performs%0A%20%20%20%20%20%20%20*%20%20%20%22prototypical%22%20binding%20of%20the%20template%20and%20overwrites%20any%20previously%0A%20%20%20%20%20%20%20*%20%20%20bound%20template%20for%20the%20class.%20When%20true%20(as%20passed%20from%0A%20%20%20%20%20%20%20*%20%20%20%60_stampTemplate%60)%2C%20the%20template%20info%20is%20instanced%20and%20linked%20into%0A%20%20%20%20%20%20%20*%20%20%20the%20list%20of%20bound%20templates.%0A%20%20%20%20%20%20%20*%20%40return%20%7B!TemplateInfo%7D%20Template%20metadata%20object%3B%20for%20%60runtimeBinding%60%2C%0A%20%20%20%20%20%20%20*%20%20%20this%20is%20an%20instance%20of%20the%20prototypical%20template%20info%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_bindTemplate(template%2CinstanceBinding)%7Bvar%20templateInfo%3Dthis.constructor._parseTemplate(template)%3Bvar%20wasPreBound%3Dthis.__templateInfo%3D%3DtemplateInfo%3B%2F%2F%20Optimization%3A%20since%20this%20is%20called%20twice%20for%20proto-bound%20templates%2C%0A%2F%2F%20don't%20attempt%20to%20recreate%20accessors%20if%20this%20template%20was%20pre-bound%0Aif(!wasPreBound)%7Bfor(var%20prop%20in%20templateInfo.propertyEffects)%7Bthis._createPropertyAccessor(prop)%3B%7D%7Dif(instanceBinding)%7B%2F%2F%20For%20instance-time%20binding%2C%20create%20instance%20of%20template%20metadata%0A%2F%2F%20and%20link%20into%20list%20of%20templates%20if%20necessary%0AtemplateInfo%3D%2F**%20%40type%20%7B!TemplateInfo%7D%20*%2FObject.create(templateInfo)%3BtemplateInfo.wasPreBound%3DwasPreBound%3Bif(!wasPreBound%26%26this.__templateInfo)%7Bvar%20last%3Dthis.__templateInfoLast%7C%7Cthis.__templateInfo%3Bthis.__templateInfoLast%3Dlast.nextTemplateInfo%3DtemplateInfo%3BtemplateInfo.previousTemplateInfo%3Dlast%3Breturn%20templateInfo%3B%7D%7Dreturn%20this.__templateInfo%3DtemplateInfo%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Adds%20a%20property%20effect%20to%20the%20given%20template%20metadata%2C%20which%20is%20run%0A%20%20%20%20%20%20%20*%20at%20the%20%22propagate%22%20stage%20of%20%60_propertiesChanged%60%20when%20the%20template%0A%20%20%20%20%20%20%20*%20has%20been%20bound%20to%20the%20element%20via%20%60_bindTemplate%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20%60effect%60%20object%20should%20match%20the%20format%20in%20%60_addPropertyEffect%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20templateInfo%20Template%20metadata%20to%20add%20effect%20to%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20prop%20Property%20that%20should%20trigger%20the%20effect%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20effect%20Effect%20metadata%20object%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_stampTemplate'%2C%2F**%0A%20%20%20%20%20%20%20*%20Stamps%20the%20provided%20template%20and%20performs%20instance-time%20setup%20for%0A%20%20%20%20%20%20%20*%20Polymer%20template%20features%2C%20including%20data%20bindings%2C%20declarative%20event%0A%20%20%20%20%20%20%20*%20listeners%2C%20and%20the%20%60this.%24%60%20map%20of%20%60id%60's%20to%20nodes.%20%20A%20document%20fragment%0A%20%20%20%20%20%20%20*%20is%20returned%20containing%20the%20stamped%20DOM%2C%20ready%20for%20insertion%20into%20the%0A%20%20%20%20%20%20%20*%20DOM.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20may%20be%20called%20more%20than%20once%3B%20however%20note%20that%20due%20to%0A%20%20%20%20%20%20%20*%20%60shadycss%60%20polyfill%20limitations%2C%20only%20styles%20from%20templates%20prepared%0A%20%20%20%20%20%20%20*%20using%20%60ShadyCSS.prepareTemplate%60%20will%20be%20correctly%20polyfilled%20(scoped%0A%20%20%20%20%20%20%20*%20to%20the%20shadow%20root%20and%20support%20CSS%20custom%20properties)%2C%20and%20note%20that%0A%20%20%20%20%20%20%20*%20%60ShadyCSS.prepareTemplate%60%20may%20only%20be%20called%20once%20per%20element.%20As%20such%2C%0A%20%20%20%20%20%20%20*%20any%20styles%20required%20by%20in%20runtime-stamped%20templates%20must%20be%20included%0A%20%20%20%20%20%20%20*%20in%20the%20main%20element%20template.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!HTMLTemplateElement%7D%20template%20Template%20to%20stamp%0A%20%20%20%20%20%20%20*%20%40return%20%7B!StampedTemplate%7D%20Cloned%20template%20content%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_stampTemplate(template)%7B%2F%2F%20Ensures%20that%20created%20dom%20is%20%60_enqueueClient%60'd%20to%20this%20element%20so%0A%2F%2F%20that%20it%20can%20be%20flushed%20on%20next%20call%20to%20%60_flushProperties%60%0AhostStack.beginHosting(this)%3Bvar%20dom%3D_get(PropertyEffects.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects.prototype)%2C'_stampTemplate'%2Cthis).call(this%2Ctemplate)%3BhostStack.endHosting(this)%3Bvar%20templateInfo%3D%2F**%20%40type%20%7B!TemplateInfo%7D%20*%2Fthis._bindTemplate(template%2Ctrue)%3B%2F%2F%20Add%20template-instance-specific%20data%20to%20instanced%20templateInfo%0AtemplateInfo.nodeList%3Ddom.nodeList%3B%2F%2F%20Capture%20child%20nodes%20to%20allow%20unstamping%20of%20non-prototypical%20templates%0Aif(!templateInfo.wasPreBound)%7Bvar%20nodes%3DtemplateInfo.childNodes%3D%5B%5D%3Bfor(var%20n%3Ddom.firstChild%3Bn%3Bn%3Dn.nextSibling)%7Bnodes.push(n)%3B%7D%7Ddom.templateInfo%3DtemplateInfo%3B%2F%2F%20Setup%20compound%20storage%2C%202-way%20listeners%2C%20and%20dataHost%20for%20bindings%0AsetupBindings(this%2CtemplateInfo)%3B%2F%2F%20Flush%20properties%20into%20template%20nodes%20if%20already%20booted%0Aif(this.__dataReady)%7BrunEffects(this%2CtemplateInfo.propertyEffects%2Cthis.__data%2Cnull%2Cfalse%2CtemplateInfo.nodeList)%3B%7Dreturn%20dom%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Removes%20and%20unbinds%20the%20nodes%20previously%20contained%20in%20the%20provided%0A%20%20%20%20%20%20%20*%20DocumentFragment%20returned%20from%20%60_stampTemplate%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!StampedTemplate%7D%20dom%20DocumentFragment%20previously%20returned%0A%20%20%20%20%20%20%20*%20%20%20from%20%60_stampTemplate%60%20associated%20with%20the%20nodes%20to%20be%20removed%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_removeBoundDom'%2Cvalue%3Afunction%20_removeBoundDom(dom)%7B%2F%2F%20Unlink%20template%20info%0Avar%20templateInfo%3Ddom.templateInfo%3Bif(templateInfo.previousTemplateInfo)%7BtemplateInfo.previousTemplateInfo.nextTemplateInfo%3DtemplateInfo.nextTemplateInfo%3B%7Dif(templateInfo.nextTemplateInfo)%7BtemplateInfo.nextTemplateInfo.previousTemplateInfo%3DtemplateInfo.previousTemplateInfo%3B%7Dif(this.__templateInfoLast%3D%3DtemplateInfo)%7Bthis.__templateInfoLast%3DtemplateInfo.previousTemplateInfo%3B%7DtemplateInfo.previousTemplateInfo%3DtemplateInfo.nextTemplateInfo%3Dnull%3B%2F%2F%20Remove%20stamped%20nodes%0Avar%20nodes%3DtemplateInfo.childNodes%3Bfor(var%20i%3D0%3Bi%3Cnodes.length%3Bi%2B%2B)%7Bvar%20node%3Dnodes%5Bi%5D%3Bnode.parentNode.removeChild(node)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20default%20%60TemplateStamp%60%20implementation%20to%20add%20support%20for%0A%20%20%20%20%20%20%20*%20parsing%20bindings%20from%20%60TextNode%60's'%20%60textContent%60.%20%20A%20%60bindings%60%0A%20%20%20%20%20%20%20*%20array%20is%20added%20to%20%60nodeInfo%60%20and%20populated%20with%20binding%20metadata%0A%20%20%20%20%20%20%20*%20with%20information%20capturing%20the%20binding%20target%2C%20and%20a%20%60parts%60%20array%0A%20%20%20%20%20%20%20*%20with%20one%20or%20more%20metadata%20objects%20capturing%20the%20source(s)%20of%20the%0A%20%20%20%20%20%20%20*%20binding.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40param%20%7BNode%7D%20node%20Node%20to%20parse%0A%20%20%20%20%20%20%20*%20%40param%20%7BTemplateInfo%7D%20templateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20%20%20%20%20*%20%40param%20%7BNodeInfo%7D%20nodeInfo%20Node%20metadata%20for%20current%20template%20node%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20%60true%60%20if%20the%20visited%20node%20added%20node-specific%0A%20%20%20%20%20%20%20*%20%20%20metadata%20to%20%60nodeInfo%60%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20Interfaces%20in%20closure%20do%20not%20inherit%20statics%2C%20but%20classes%20do%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'PROPERTY_EFFECT_TYPES'%2Cget%3Afunction%20get()%7Breturn%20TYPES%3B%7D%7D%5D%2C%5B%7Bkey%3A'addPropertyEffect'%2Cvalue%3Afunction%20addPropertyEffect(property%2Ctype%2Ceffect)%7Bthis.prototype._addPropertyEffect(property%2Ctype%2Ceffect)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Creates%20a%20single-property%20observer%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7Cfunction(*%2C*)%7D%20method%20Function%20or%20name%20of%20observer%20method%20to%20call%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20dynamicFn%20Whether%20the%20method%20name%20should%20be%20included%20as%0A%20%20%20%20%20%20%20*%20%20%20a%20dependency%20to%20the%20effect.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'createPropertyObserver'%2Cvalue%3Afunction%20createPropertyObserver(property%2Cmethod%2CdynamicFn)%7Bthis.prototype._createPropertyObserver(property%2Cmethod%2CdynamicFn)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Creates%20a%20multi-property%20%22method%20observer%22%20based%20on%20the%20provided%0A%20%20%20%20%20%20%20*%20expression%2C%20which%20should%20be%20a%20string%20in%20the%20form%20of%20a%20normal%20JavaScript%0A%20%20%20%20%20%20%20*%20function%20signature%3A%20%60'methodName(arg1%2C%20%5B...%2C%20argn%5D)'%60.%20%20Each%20argument%0A%20%20%20%20%20%20%20*%20should%20correspond%20to%20a%20property%20or%20path%20in%20the%20context%20of%20this%0A%20%20%20%20%20%20%20*%20prototype%20(or%20instance)%2C%20or%20may%20be%20a%20literal%20string%20or%20number.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20expression%20Method%20expression%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%7CObject%3D%7D%20dynamicFn%20Boolean%20or%20object%20map%20indicating%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%20%20whether%20method%20names%20should%20be%20included%20as%20a%20dependency%20to%20the%20effect.%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'createMethodObserver'%2Cvalue%3Afunction%20createMethodObserver(expression%2CdynamicFn)%7Bthis.prototype._createMethodObserver(expression%2CdynamicFn)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Causes%20the%20setter%20for%20the%20given%20property%20to%20dispatch%20%60%3Cproperty%3E-changed%60%0A%20%20%20%20%20%20%20*%20events%20to%20notify%20of%20changes%20to%20the%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'createNotifyingProperty'%2Cvalue%3Afunction%20createNotifyingProperty(property)%7Bthis.prototype._createNotifyingProperty(property)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Creates%20a%20read-only%20accessor%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20To%20set%20the%20property%2C%20use%20the%20protected%20%60_setProperty%60%20API.%0A%20%20%20%20%20%20%20*%20To%20create%20a%20custom%20protected%20setter%20(e.g.%20%60_setMyProp()%60%20for%0A%20%20%20%20%20%20%20*%20property%20%60myProp%60)%2C%20pass%20%60true%60%20for%20%60protectedSetter%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%2C%20if%20the%20property%20will%20have%20other%20property%20effects%2C%20this%20method%0A%20%20%20%20%20%20%20*%20should%20be%20called%20first%2C%20before%20adding%20other%20effects.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20protectedSetter%20Creates%20a%20custom%20protected%20setter%0A%20%20%20%20%20%20%20*%20%20%20when%20%60true%60.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'createReadOnlyProperty'%2Cvalue%3Afunction%20createReadOnlyProperty(property%2CprotectedSetter)%7Bthis.prototype._createReadOnlyProperty(property%2CprotectedSetter)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Causes%20the%20setter%20for%20the%20given%20property%20to%20reflect%20the%20property%20value%0A%20%20%20%20%20%20%20*%20to%20a%20(dash-cased)%20attribute%20of%20the%20same%20name.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'createReflectedProperty'%2Cvalue%3Afunction%20createReflectedProperty(property)%7Bthis.prototype._createReflectedProperty(property)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Creates%20a%20computed%20property%20whose%20value%20is%20set%20to%20the%20result%20of%20the%0A%20%20%20%20%20%20%20*%20method%20described%20by%20the%20given%20%60expression%60%20each%20time%20one%20or%20more%0A%20%20%20%20%20%20%20*%20arguments%20to%20the%20method%20changes.%20%20The%20expression%20should%20be%20a%20string%0A%20%20%20%20%20%20%20*%20in%20the%20form%20of%20a%20normal%20JavaScript%20function%20signature%3A%0A%20%20%20%20%20%20%20*%20%60'methodName(arg1%2C%20%5B...%2C%20argn%5D)'%60%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20computed%20property%20to%20set%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20expression%20Method%20expression%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%7CObject%3D%7D%20dynamicFn%20Boolean%20or%20object%20map%20indicating%20whether%0A%20%20%20%20%20%20%20*%20%20%20method%20names%20should%20be%20included%20as%20a%20dependency%20to%20the%20effect.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'createComputedProperty'%2Cvalue%3Afunction%20createComputedProperty(property%2Cexpression%2CdynamicFn)%7Bthis.prototype._createComputedProperty(property%2Cexpression%2CdynamicFn)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Parses%20the%20provided%20template%20to%20ensure%20binding%20effects%20are%20created%0A%20%20%20%20%20%20%20*%20for%20them%2C%20and%20then%20ensures%20property%20accessors%20are%20created%20for%20any%0A%20%20%20%20%20%20%20*%20dependent%20properties%20in%20the%20template.%20%20Binding%20effects%20for%20bound%0A%20%20%20%20%20%20%20*%20templates%20are%20stored%20in%20a%20linked%20list%20on%20the%20instance%20so%20that%0A%20%20%20%20%20%20%20*%20templates%20can%20be%20efficiently%20stamped%20and%20unstamped.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!HTMLTemplateElement%7D%20template%20Template%20containing%20binding%0A%20%20%20%20%20%20%20*%20%20%20bindings%0A%20%20%20%20%20%20%20*%20%40return%20%7B!TemplateInfo%7D%20Template%20metadata%20object%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'bindTemplate'%2Cvalue%3Afunction%20bindTemplate(template)%7Breturn%20this.prototype._bindTemplate(template)%3B%7D%7D%2C%7Bkey%3A'_addTemplatePropertyEffect'%2Cvalue%3Afunction%20_addTemplatePropertyEffect(templateInfo%2Cprop%2Ceffect)%7Bvar%20hostProps%3DtemplateInfo.hostProps%3DtemplateInfo.hostProps%7C%7C%7B%7D%3BhostProps%5Bprop%5D%3Dtrue%3Bvar%20effects%3DtemplateInfo.propertyEffects%3DtemplateInfo.propertyEffects%7C%7C%7B%7D%3Bvar%20propEffects%3Deffects%5Bprop%5D%3Deffects%5Bprop%5D%7C%7C%5B%5D%3BpropEffects.push(effect)%3B%7D%7D%2C%7Bkey%3A'_parseTemplateNode'%2Cvalue%3Afunction%20_parseTemplateNode(node%2CtemplateInfo%2CnodeInfo)%7Bvar%20noted%3D_get(PropertyEffects.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects)%2C'_parseTemplateNode'%2Cthis).call(this%2Cnode%2CtemplateInfo%2CnodeInfo)%3Bif(node.nodeType%3D%3D%3DNode.TEXT_NODE)%7Bvar%20parts%3Dthis._parseBindings(node.textContent%2CtemplateInfo)%3Bif(parts)%7B%2F%2F%20Initialize%20the%20textContent%20with%20any%20literal%20parts%0A%2F%2F%20NOTE%3A%20default%20to%20a%20space%20here%20so%20the%20textNode%20remains%3B%20some%20browsers%0A%2F%2F%20(IE)%20omit%20an%20empty%20textNode%20following%20cloneNode%2FimportNode.%0Anode.textContent%3DliteralFromParts(parts)%7C%7C'%20'%3BaddBinding(this%2CtemplateInfo%2CnodeInfo%2C'text'%2C'textContent'%2Cparts)%3Bnoted%3Dtrue%3B%7D%7Dreturn%20noted%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20default%20%60TemplateStamp%60%20implementation%20to%20add%20support%20for%0A%20%20%20%20%20%20%20*%20parsing%20bindings%20from%20attributes.%20%20A%20%60bindings%60%0A%20%20%20%20%20%20%20*%20array%20is%20added%20to%20%60nodeInfo%60%20and%20populated%20with%20binding%20metadata%0A%20%20%20%20%20%20%20*%20with%20information%20capturing%20the%20binding%20target%2C%20and%20a%20%60parts%60%20array%0A%20%20%20%20%20%20%20*%20with%20one%20or%20more%20metadata%20objects%20capturing%20the%20source(s)%20of%20the%0A%20%20%20%20%20%20%20*%20binding.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40param%20%7BElement%7D%20node%20Node%20to%20parse%0A%20%20%20%20%20%20%20*%20%40param%20%7BTemplateInfo%7D%20templateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20%20%20%20%20*%20%40param%20%7BNodeInfo%7D%20nodeInfo%20Node%20metadata%20for%20current%20template%20node%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20name%20Attribute%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20value%20Attribute%20value%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20%60true%60%20if%20the%20visited%20node%20added%20node-specific%0A%20%20%20%20%20%20%20*%20%20%20metadata%20to%20%60nodeInfo%60%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20Interfaces%20in%20closure%20do%20not%20inherit%20statics%2C%20but%20classes%20do%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_parseTemplateNodeAttribute'%2Cvalue%3Afunction%20_parseTemplateNodeAttribute(node%2CtemplateInfo%2CnodeInfo%2Cname%2Cvalue)%7Bvar%20parts%3Dthis._parseBindings(value%2CtemplateInfo)%3Bif(parts)%7B%2F%2F%20Attribute%20or%20property%0Avar%20origName%3Dname%3Bvar%20kind%3D'property'%3B%2F%2F%20The%20only%20way%20we%20see%20a%20capital%20letter%20here%20is%20if%20the%20attr%20has%0A%2F%2F%20a%20capital%20letter%20in%20it%20per%20spec.%20In%20this%20case%2C%20to%20make%20sure%0A%2F%2F%20this%20binding%20works%2C%20we%20go%20ahead%20and%20make%20the%20binding%20to%20the%20attribute.%0Aif(capitalAttributeRegex.test(name))%7Bkind%3D'attribute'%3B%7Delse%20if(name%5Bname.length-1%5D%3D%3D'%24')%7Bname%3Dname.slice(0%2C-1)%3Bkind%3D'attribute'%3B%7D%2F%2F%20Initialize%20attribute%20bindings%20with%20any%20literal%20parts%0Avar%20literal%3DliteralFromParts(parts)%3Bif(literal%26%26kind%3D%3D'attribute')%7B%2F%2F%20Ensure%20a%20ShadyCSS%20template%20scoped%20style%20is%20not%20removed%0A%2F%2F%20when%20a%20class%24%20binding's%20initial%20literal%20value%20is%20set.%0Aif(name%3D%3D'class'%26%26node.hasAttribute('class'))%7Bliteral%2B%3D'%20'%2Bnode.getAttribute(name)%3B%7Dnode.setAttribute(name%2Cliteral)%3B%7D%2F%2F%20Clear%20attribute%20before%20removing%2C%20since%20IE%20won't%20allow%20removing%0A%2F%2F%20%60value%60%20attribute%20if%20it%20previously%20had%20a%20value%20(can't%0A%2F%2F%20unconditionally%20set%20''%20before%20removing%20since%20attributes%20with%20%60%24%60%0A%2F%2F%20can't%20be%20set%20using%20setAttribute)%0Aif(node.localName%3D%3D%3D'input'%26%26origName%3D%3D%3D'value')%7Bnode.setAttribute(origName%2C'')%3B%7D%2F%2F%20Remove%20annotation%0Anode.removeAttribute(origName)%3B%2F%2F%20Case%20hackery%3A%20attributes%20are%20lower-case%2C%20but%20bind%20targets%0A%2F%2F%20(properties)%20are%20case%20sensitive.%20Gambit%20is%20to%20map%20dash-case%20to%0A%2F%2F%20camel-case%3A%20%60foo-bar%60%20becomes%20%60fooBar%60.%0A%2F%2F%20Attribute%20bindings%20are%20excepted.%0Aif(kind%3D%3D%3D'property')%7Bname%3DPolymer.CaseMap.dashToCamelCase(name)%3B%7DaddBinding(this%2CtemplateInfo%2CnodeInfo%2Ckind%2Cname%2Cparts%2Cliteral)%3Breturn%20true%3B%7Delse%7Breturn%20_get(PropertyEffects.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects)%2C'_parseTemplateNodeAttribute'%2Cthis).call(this%2Cnode%2CtemplateInfo%2CnodeInfo%2Cname%2Cvalue)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20default%20%60TemplateStamp%60%20implementation%20to%20add%20support%20for%0A%20%20%20%20%20%20%20*%20binding%20the%20properties%20that%20a%20nested%20template%20depends%20on%20to%20the%20template%0A%20%20%20%20%20%20%20*%20as%20%60_host_%3Cproperty%3E%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40param%20%7BNode%7D%20node%20Node%20to%20parse%0A%20%20%20%20%20%20%20*%20%40param%20%7BTemplateInfo%7D%20templateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20%20%20%20%20*%20%40param%20%7BNodeInfo%7D%20nodeInfo%20Node%20metadata%20for%20current%20template%20node%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20%60true%60%20if%20the%20visited%20node%20added%20node-specific%0A%20%20%20%20%20%20%20*%20%20%20metadata%20to%20%60nodeInfo%60%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20Interfaces%20in%20closure%20do%20not%20inherit%20statics%2C%20but%20classes%20do%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_parseTemplateNestedTemplate'%2Cvalue%3Afunction%20_parseTemplateNestedTemplate(node%2CtemplateInfo%2CnodeInfo)%7Bvar%20noted%3D_get(PropertyEffects.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects)%2C'_parseTemplateNestedTemplate'%2Cthis).call(this%2Cnode%2CtemplateInfo%2CnodeInfo)%3B%2F%2F%20Merge%20host%20props%20into%20outer%20template%20and%20add%20bindings%0Avar%20hostProps%3DnodeInfo.templateInfo.hostProps%3Bvar%20mode%3D'%7B'%3Bfor(var%20source%20in%20hostProps)%7Bvar%20parts%3D%5B%7Bmode%3Amode%2Csource%3Asource%2Cdependencies%3A%5Bsource%5D%7D%5D%3BaddBinding(this%2CtemplateInfo%2CnodeInfo%2C'property'%2C'_host_'%2Bsource%2Cparts)%3B%7Dreturn%20noted%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Called%20to%20parse%20text%20in%20a%20template%20(either%20attribute%20values%20or%0A%20%20%20%20%20%20%20*%20textContent)%20into%20binding%20metadata.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Any%20overrides%20of%20this%20method%20should%20return%20an%20array%20of%20binding%20part%0A%20%20%20%20%20%20%20*%20metadata%20%20representing%20one%20or%20more%20bindings%20found%20in%20the%20provided%20text%0A%20%20%20%20%20%20%20*%20and%20any%20%22literal%22%20text%20in%20between.%20%20Any%20non-literal%20parts%20will%20be%20passed%0A%20%20%20%20%20%20%20*%20to%20%60_evaluateBinding%60%20when%20any%20dependencies%20change.%20%20The%20only%20required%0A%20%20%20%20%20%20%20*%20fields%20of%20each%20%22part%22%20in%20the%20returned%20array%20are%20as%20follows%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20-%20%60dependencies%60%20-%20Array%20containing%20trigger%20metadata%20for%20each%20property%0A%20%20%20%20%20%20%20*%20%20%20that%20should%20trigger%20the%20binding%20to%20update%0A%20%20%20%20%20%20%20*%20-%20%60literal%60%20-%20String%20containing%20text%20if%20the%20part%20represents%20a%20literal%3B%0A%20%20%20%20%20%20%20*%20%20%20in%20this%20case%20no%20%60dependencies%60%20are%20needed%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Additional%20metadata%20for%20use%20by%20%60_evaluateBinding%60%20may%20be%20provided%20in%0A%20%20%20%20%20%20%20*%20each%20part%20object%20as%20needed.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20default%20implementation%20handles%20the%20following%20types%20of%20bindings%0A%20%20%20%20%20%20%20*%20(one%20or%20more%20may%20be%20intermixed%20with%20literal%20strings)%3A%0A%20%20%20%20%20%20%20*%20-%20Property%20binding%3A%20%60%5B%5Bprop%5D%5D%60%0A%20%20%20%20%20%20%20*%20-%20Path%20binding%3A%20%60%5B%5Bobject.prop%5D%5D%60%0A%20%20%20%20%20%20%20*%20-%20Negated%20property%20or%20path%20bindings%3A%20%60%5B%5B!prop%5D%5D%60%20or%20%60%5B%5B!object.prop%5D%5D%60%0A%20%20%20%20%20%20%20*%20-%20Two-way%20property%20or%20path%20bindings%20(supports%20negation)%3A%0A%20%20%20%20%20%20%20*%20%20%20%60%7B%7Bprop%7D%7D%60%2C%20%60%7B%7Bobject.prop%7D%7D%60%2C%20%60%7B%7B!prop%7D%7D%60%20or%20%60%7B%7B!object.prop%7D%7D%60%0A%20%20%20%20%20%20%20*%20-%20Inline%20computed%20method%20(supports%20negation)%3A%0A%20%20%20%20%20%20%20*%20%20%20%60%5B%5Bcompute(a%2C%20'literal'%2C%20b)%5D%5D%60%2C%20%60%5B%5B!compute(a%2C%20'literal'%2C%20b)%5D%5D%60%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20default%20implementation%20uses%20a%20regular%20expression%20for%20best%0A%20%20%20%20%20%20%20*%20performance.%20However%2C%20the%20regular%20expression%20uses%20a%20white-list%20of%0A%20%20%20%20%20%20%20*%20allowed%20characters%20in%20a%20data-binding%2C%20which%20causes%20problems%20for%0A%20%20%20%20%20%20%20*%20data-bindings%20that%20do%20use%20characters%20not%20in%20this%20white-list.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Instead%20of%20updating%20the%20white-list%20with%20all%20allowed%20characters%2C%0A%20%20%20%20%20%20%20*%20there%20is%20a%20StrictBindingParser%20(see%20lib%2Fmixins%2Fstrict-binding-parser)%0A%20%20%20%20%20%20%20*%20that%20uses%20a%20state%20machine%20instead.%20This%20state%20machine%20is%20able%20to%20handle%0A%20%20%20%20%20%20%20*%20all%20characters.%20However%2C%20it%20is%20slightly%20less%20performant%2C%20therefore%20we%0A%20%20%20%20%20%20%20*%20extracted%20it%20into%20a%20separate%20optional%20mixin.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20text%20Text%20to%20parse%20from%20attribute%20or%20textContent%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20templateInfo%20Current%20template%20metadata%0A%20%20%20%20%20%20%20*%20%40return%20%7BArray%3C!BindingPart%3E%7D%20Array%20of%20binding%20part%20metadata%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_parseBindings'%2Cvalue%3Afunction%20_parseBindings(text%2CtemplateInfo)%7Bvar%20parts%3D%5B%5D%3Bvar%20lastIndex%3D0%3Bvar%20m%3Dvoid%200%3B%2F%2F%20Example%3A%20%22literal1%7B%7Bprop%7D%7Dliteral2%5B%5B!compute(foo%2Cbar)%5D%5Dfinal%22%0A%2F%2F%20Regex%20matches%3A%0A%2F%2F%20%20%20%20%20%20%20%20Iteration%201%3A%20%20Iteration%202%3A%0A%2F%2F%20m%5B1%5D%3A%20'%7B%7B'%20%20%20%20%20%20%20%20%20%20'%5B%5B'%0A%2F%2F%20m%5B2%5D%3A%20''%20%20%20%20%20%20%20%20%20%20%20%20'!'%0A%2F%2F%20m%5B3%5D%3A%20'prop'%20%20%20%20%20%20%20%20'compute(foo%2Cbar)'%0Awhile((m%3DbindingRegex.exec(text))!%3D%3Dnull)%7B%2F%2F%20Add%20literal%20part%0Aif(m.index%3ElastIndex)%7Bparts.push(%7Bliteral%3Atext.slice(lastIndex%2Cm.index)%7D)%3B%7D%2F%2F%20Add%20binding%20part%0Avar%20mode%3Dm%5B1%5D%5B0%5D%3Bvar%20negate%3DBoolean(m%5B2%5D)%3Bvar%20source%3Dm%5B3%5D.trim()%3Bvar%20customEvent%3Dfalse%2CnotifyEvent%3D''%2Ccolon%3D-1%3Bif(mode%3D%3D'%7B'%26%26(colon%3Dsource.indexOf('%3A%3A'))%3E0)%7BnotifyEvent%3Dsource.substring(colon%2B2)%3Bsource%3Dsource.substring(0%2Ccolon)%3BcustomEvent%3Dtrue%3B%7Dvar%20signature%3DparseMethod(source)%3Bvar%20dependencies%3D%5B%5D%3Bif(signature)%7B%2F%2F%20Inline%20computed%20function%0Avar%20args%3Dsignature.args%2CmethodName%3Dsignature.methodName%3Bfor(var%20i%3D0%3Bi%3Cargs.length%3Bi%2B%2B)%7Bvar%20arg%3Dargs%5Bi%5D%3Bif(!arg.literal)%7Bdependencies.push(arg)%3B%7D%7Dvar%20dynamicFns%3DtemplateInfo.dynamicFns%3Bif(dynamicFns%26%26dynamicFns%5BmethodName%5D%7C%7Csignature.static)%7Bdependencies.push(methodName)%3Bsignature.dynamicFn%3Dtrue%3B%7D%7Delse%7B%2F%2F%20Property%20or%20path%0Adependencies.push(source)%3B%7Dparts.push(%7Bsource%3Asource%2Cmode%3Amode%2Cnegate%3Anegate%2CcustomEvent%3AcustomEvent%2Csignature%3Asignature%2Cdependencies%3Adependencies%2Cevent%3AnotifyEvent%7D)%3BlastIndex%3DbindingRegex.lastIndex%3B%7D%2F%2F%20Add%20a%20final%20literal%20part%0Aif(lastIndex%26%26lastIndex%3Ctext.length)%7Bvar%20literal%3Dtext.substring(lastIndex)%3Bif(literal)%7Bparts.push(%7Bliteral%3Aliteral%7D)%3B%7D%7Dif(parts.length)%7Breturn%20parts%3B%7Delse%7Breturn%20null%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Called%20to%20evaluate%20a%20previously%20parsed%20binding%20part%20based%20on%20a%20set%20of%0A%20%20%20%20%20%20%20*%20one%20or%20more%20changed%20dependencies.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bthis%7D%20inst%20Element%20that%20should%20be%20used%20as%20scope%20for%0A%20%20%20%20%20%20%20*%20%20%20binding%20dependencies%0A%20%20%20%20%20%20%20*%20%40param%20%7BBindingPart%7D%20part%20Binding%20part%20metadata%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20path%20Property%2Fpath%20that%20triggered%20this%20effect%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20%20%20%20%20*%20%40return%20%7B*%7D%20Value%20the%20binding%20part%20evaluated%20to%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_evaluateBinding'%2Cvalue%3Afunction%20_evaluateBinding(inst%2Cpart%2Cpath%2Cprops%2ColdProps%2ChasPaths)%7Bvar%20value%3Dvoid%200%3Bif(part.signature)%7Bvalue%3DrunMethodEffect(inst%2Cpath%2Cprops%2ColdProps%2Cpart.signature)%3B%7Delse%20if(path!%3Dpart.source)%7Bvalue%3DPolymer.Path.get(inst%2Cpart.source)%3B%7Delse%7Bif(hasPaths%26%26Polymer.Path.isPath(path))%7Bvalue%3DPolymer.Path.get(inst%2Cpath)%3B%7Delse%7Bvalue%3Dinst.__data%5Bpath%5D%3B%7D%7Dif(part.negate)%7Bvalue%3D!value%3B%7Dreturn%20value%3B%7D%7D%5D)%3Breturn%20PropertyEffects%3B%7D(propertyEffectsBase)%3B%2F%2F%20make%20a%20typing%20for%20closure%20%3AP%0APropertyEffectsType%3DPropertyEffects%3Breturn%20PropertyEffects%3B%7D)%3B%2F**%0A%20%20%20*%20Helper%20api%20for%20enqueuing%20client%20dom%20created%20by%20a%20host%20element.%0A%20%20%20*%0A%20%20%20*%20By%20default%20elements%20are%20flushed%20via%20%60_flushProperties%60%20when%0A%20%20%20*%20%60connectedCallback%60%20is%20called.%20Elements%20attach%20their%20client%20dom%20to%0A%20%20%20*%20themselves%20at%20%60ready%60%20time%20which%20results%20from%20this%20first%20flush.%0A%20%20%20*%20This%20provides%20an%20ordering%20guarantee%20that%20the%20client%20dom%20an%20element%0A%20%20%20*%20creates%20is%20flushed%20before%20the%20element%20itself%20(i.e.%20client%20%60ready%60%0A%20%20%20*%20fires%20before%20host%20%60ready%60).%0A%20%20%20*%0A%20%20%20*%20However%2C%20if%20%60_flushProperties%60%20is%20called%20*before*%20an%20element%20is%20connected%2C%0A%20%20%20*%20as%20for%20example%20%60Templatize%60%20does%2C%20this%20ordering%20guarantee%20cannot%20be%0A%20%20%20*%20satisfied%20because%20no%20elements%20are%20connected.%20(Note%3A%20Bound%20elements%20that%0A%20%20%20*%20receive%20data%20do%20become%20enqueued%20clients%20and%20are%20properly%20ordered%20but%0A%20%20%20*%20unbound%20elements%20are%20not.)%0A%20%20%20*%0A%20%20%20*%20To%20maintain%20the%20desired%20%22client%20before%20host%22%20ordering%20guarantee%20for%20this%0A%20%20%20*%20case%20we%20rely%20on%20the%20%22host%20stack.%20Client%20nodes%20registers%20themselves%20with%0A%20%20%20*%20the%20creating%20host%20element%20when%20created.%20This%20ensures%20that%20all%20client%20dom%0A%20%20%20*%20is%20readied%20in%20the%20proper%20order%2C%20maintaining%20the%20desired%20guarantee.%0A%20%20%20*%0A%20%20%20*%20%40private%0A%20%20%20*%2Fvar%20hostStack%3D%7Bstack%3A%5B%5D%2C%2F**%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20inst%20Instance%20to%20add%20to%20hostStack%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40this%20%7BhostStack%7D%0A%20%20%20%20%20*%2FregisterHost%3Afunction%20registerHost(inst)%7Bif(this.stack.length)%7Bvar%20host%3Dthis.stack%5Bthis.stack.length-1%5D%3Bhost._enqueueClient(inst)%3B%7D%7D%2C%2F**%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20inst%20Instance%20to%20begin%20hosting%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40this%20%7BhostStack%7D%0A%20%20%20%20%20*%2FbeginHosting%3Afunction%20beginHosting(inst)%7Bthis.stack.push(inst)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20inst%20Instance%20to%20end%20hosting%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40this%20%7BhostStack%7D%0A%20%20%20%20%20*%2FendHosting%3Afunction%20endHosting(inst)%7Bvar%20stackLen%3Dthis.stack.length%3Bif(stackLen%26%26this.stack%5BstackLen-1%5D%3D%3Dinst)%7Bthis.stack.pop()%3B%7D%7D%7D%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Fmixins%2Fproperty-effects.html.js%0A",
            "totalBytes": 100964,
            "wastedBytes": 40160,
            "wastedPercent": 39.77655401925439
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/bundles/section.js",
            "totalBytes": 83689,
            "wastedBytes": 35951,
            "wastedPercent": 42.95782412663788,
            "subItems": {
              "type": "subitems",
              "items": [
                {
                  "source": "…node_modules/@glidejs/glide/dist/glide.esm.js",
                  "sourceBytes": 6829,
                  "sourceWastedBytes": 6093
                },
                {
                  "source": "…elements-lit/partner/partner-gci-analytics/partner-gci-analytics.js",
                  "sourceBytes": 2523,
                  "sourceWastedBytes": 2440
                },
                {
                  "source": "…elements-lit/partner/partner-slot/partner-slot.js",
                  "sourceBytes": 5727,
                  "sourceWastedBytes": 2284
                },
                {
                  "source": "…elements-lit/promo/promo-story-thumb-small/promo-story-thumb-small.js",
                  "sourceBytes": 1785,
                  "sourceWastedBytes": 1726
                },
                {
                  "source": "…elements-lit/nav/nav-share-buttons/nav-share-buttons.js",
                  "sourceBytes": 1781,
                  "sourceWastedBytes": 1715
                }
              ]
            }
          }
        ],
        "overallSavingsMs": 150,
        "overallSavingsBytes": 76111,
        "sortedBy": [
          "wastedBytes"
        ],
        "debugData": {
          "type": "debugdata",
          "metricSavings": {
            "FCP": 150,
            "LCP": 150
          }
        }
      },
      "guidanceLevel": 1
    },
    "doctype": {
      "id": "doctype",
      "title": "Page has the HTML doctype",
      "description": "Specifying a doctype prevents the browser from switching to quirks-mode. [Learn more about the doctype declaration](https://developer.chrome.com/docs/lighthouse/best-practices/doctype/).",
      "score": 1,
      "scoreDisplayMode": "binary"
    },
    "charset": {
      "id": "charset",
      "title": "Properly defines charset",
      "description": "A character encoding declaration is required. It can be done with a `<meta>` tag in the first 1024 bytes of the HTML or in the Content-Type HTTP response header. [Learn more about declaring the character encoding](https://developer.chrome.com/docs/lighthouse/best-practices/charset/).",
      "score": 1,
      "scoreDisplayMode": "binary"
    },
    "geolocation-on-start": {
      "id": "geolocation-on-start",
      "title": "Avoids requesting the geolocation permission on page load",
      "description": "Users are mistrustful of or confused by sites that request their location without context. Consider tying the request to a user action instead. [Learn more about the geolocation permission](https://developer.chrome.com/docs/lighthouse/best-practices/geolocation-on-start/).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "source",
            "valueType": "source-location",
            "label": "Source"
          }
        ],
        "items": []
      }
    },
    "inspector-issues": {
      "id": "inspector-issues",
      "title": "No issues in the `Issues` panel in Chrome Devtools",
      "description": "Issues logged to the `Issues` panel in Chrome Devtools indicate unresolved problems. They can come from network request failures, insufficient security controls, and other browser concerns. Open up the Issues panel in Chrome DevTools for more details on each issue.",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "issueType",
            "valueType": "text",
            "subItemsHeading": {
              "key": "url",
              "valueType": "url"
            },
            "label": "Issue type"
          }
        ],
        "items": []
      }
    },
    "js-libraries": {
      "id": "js-libraries",
      "title": "Detected JavaScript libraries",
      "description": "All front-end JavaScript libraries detected on the page. [Learn more about this JavaScript library detection diagnostic audit](https://developer.chrome.com/docs/lighthouse/best-practices/js-libraries/).",
      "score": 1,
      "scoreDisplayMode": "informative",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "name",
            "valueType": "text",
            "label": "Name"
          },
          {
            "key": "version",
            "valueType": "text",
            "label": "Version"
          }
        ],
        "items": [
          {
            "name": "Polymer",
            "version": "2.7.0",
            "npm": "@polymer/polymer"
          },
          {
            "name": "LitElement",
            "version": "2.5.1",
            "npm": "lit-element"
          },
          {
            "name": "lit-html",
            "version": "1.4.1",
            "npm": "lit-element"
          }
        ],
        "debugData": {
          "type": "debugdata",
          "stacks": [
            {
              "id": "polymer",
              "version": "2.7.0"
            },
            {
              "id": "litelement",
              "version": "2.5.1"
            },
            {
              "id": "lit-html",
              "version": "1.4.1"
            }
          ]
        }
      }
    },
    "notification-on-start": {
      "id": "notification-on-start",
      "title": "Avoids requesting the notification permission on page load",
      "description": "Users are mistrustful of or confused by sites that request to send notifications without context. Consider tying the request to user gestures instead. [Learn more about responsibly getting permission for notifications](https://developer.chrome.com/docs/lighthouse/best-practices/notification-on-start/).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "source",
            "valueType": "source-location",
            "label": "Source"
          }
        ],
        "items": []
      }
    },
    "paste-preventing-inputs": {
      "id": "paste-preventing-inputs",
      "title": "Allows users to paste into input fields",
      "description": "Preventing input pasting is a bad practice for the UX, and weakens security by blocking password managers.[Learn more about user-friendly input fields](https://developer.chrome.com/docs/lighthouse/best-practices/paste-preventing-inputs/).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "label": "Failing Elements"
          }
        ],
        "items": []
      }
    },
    "meta-description": {
      "id": "meta-description",
      "title": "Document has a meta description",
      "description": "Meta descriptions may be included in search results to concisely summarize page content. [Learn more about the meta description](https://developer.chrome.com/docs/lighthouse/seo/meta-description/).",
      "score": 1,
      "scoreDisplayMode": "binary"
    },
    "http-status-code": {
      "id": "http-status-code",
      "title": "Page has successful HTTP status code",
      "description": "Pages with unsuccessful HTTP status codes may not be indexed properly. [Learn more about HTTP status codes](https://developer.chrome.com/docs/lighthouse/seo/http-status-code/).",
      "score": 1,
      "scoreDisplayMode": "binary"
    },
    "link-text": {
      "id": "link-text",
      "title": "Links have descriptive text",
      "description": "Descriptive link text helps search engines understand your content. [Learn how to make links more accessible](https://developer.chrome.com/docs/lighthouse/seo/link-text/).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "href",
            "valueType": "url",
            "label": "Link destination"
          },
          {
            "key": "text",
            "valueType": "text",
            "label": "Link Text"
          }
        ],
        "items": []
      }
    },
    "crawlable-anchors": {
      "id": "crawlable-anchors",
      "title": "Links are not crawlable",
      "description": "Search engines may use `href` attributes on links to crawl websites. Ensure that the `href` attribute of anchor elements links to an appropriate destination, so more pages of the site can be discovered. [Learn how to make links crawlable](https://support.google.com/webmasters/answer/9112205)",
      "score": 0,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "label": "Uncrawlable Link"
          }
        ],
        "items": [
          {
            "node": {
              "type": "node",
              "lhId": "1-75-A",
              "path": "1,HTML,1,BODY,4,SECTION,0,DIV,0,DIV,2,DIV,1,PROMO-STORY-BUCKET-SHORT,a,#document-fragment,2,DIV,2,DIV,0,A",
              "selector": "div#container > div#showMoreContent > a.show-more-link",
              "boundingRect": {
                "top": 3842,
                "bottom": 3870,
                "left": 72,
                "right": 340,
                "width": 267,
                "height": 28
              },
              "snippet": "<a class=\"show-more-link \">",
              "nodeLabel": "Show more Most Recent Videos"
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "1-87-A",
              "path": "1,HTML,1,BODY,4,SECTION,0,DIV,0,DIV,2,DIV,2,PROMO-STORY-BUCKET-SHORT,a,#document-fragment,2,DIV,2,DIV,0,A",
              "selector": "div#container > div#showMoreContent > a.show-more-link",
              "boundingRect": {
                "top": 4475,
                "bottom": 4503,
                "left": 65,
                "right": 347,
                "width": 281,
                "height": 28
              },
              "snippet": "<a class=\"show-more-link \">",
              "nodeLabel": "Show more Most Recent Galleries"
            }
          }
        ]
      }
    },
    "is-crawlable": {
      "id": "is-crawlable",
      "title": "Page is blocked from indexing",
      "description": "Search engines are unable to include your pages in search results if they don't have permission to crawl them. [Learn more about crawler directives](https://developer.chrome.com/docs/lighthouse/seo/is-crawlable/).",
      "score": 0,
      "scoreDisplayMode": "binary",
      "warnings": [],
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "source",
            "valueType": "code",
            "label": "Blocking Directive Source"
          }
        ],
        "items": [
          {
            "source": "x-robots-tag: noindex, nofollow,noarchive,nocache"
          }
        ]
      }
    },
    "robots-txt": {
      "id": "robots-txt",
      "title": "robots.txt is valid",
      "description": "If your robots.txt file is malformed, crawlers may not be able to understand how you want your website to be crawled or indexed. [Learn more about robots.txt](https://developer.chrome.com/docs/lighthouse/seo/invalid-robots-txt/).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "index",
            "valueType": "text",
            "label": "Line #"
          },
          {
            "key": "line",
            "valueType": "code",
            "label": "Content"
          },
          {
            "key": "message",
            "valueType": "code",
            "label": "Error"
          }
        ],
        "items": []
      }
    },
    "hreflang": {
      "id": "hreflang",
      "title": "Document has a valid `hreflang`",
      "description": "hreflang links tell search engines what version of a page they should list in search results for a given language or region. [Learn more about `hreflang`](https://developer.chrome.com/docs/lighthouse/seo/hreflang/).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "source",
            "valueType": "code",
            "subItemsHeading": {
              "key": "reason",
              "valueType": "text"
            },
            "label": ""
          }
        ],
        "items": []
      }
    },
    "canonical": {
      "id": "canonical",
      "title": "Document has a valid `rel=canonical`",
      "description": "Canonical links suggest which URL to show in search results. [Learn more about canonical links](https://developer.chrome.com/docs/lighthouse/seo/canonical/).",
      "score": 1,
      "scoreDisplayMode": "binary"
    },
    "structured-data": {
      "id": "structured-data",
      "title": "Structured data is valid",
      "description": "Run the [Structured Data Testing Tool](https://developers.google.com/search/docs/appearance/structured-data/) to validate structured data. [Learn more about Structured Data](https://developer.chrome.com/docs/lighthouse/seo/structured-data/).",
      "score": null,
      "scoreDisplayMode": "manual"
    },
    "bf-cache": {
      "id": "bf-cache",
      "title": "Page didn't prevent back/forward cache restoration",
      "description": "Many navigations are performed by going back to a previous page, or forwards again. The back/forward cache (bfcache) can speed up these return navigations. [Learn more about the bfcache](https://developer.chrome.com/docs/lighthouse/performance/bf-cache/)",
      "score": 1,
      "scoreDisplayMode": "binary",
      "guidanceLevel": 4
    },
    "cache-insight": {
      "id": "cache-insight",
      "title": "Use efficient cache lifetimes",
      "description": "A long cache lifetime can speed up repeat visits to your page. [Learn more about caching](https://developer.chrome.com/docs/performance/insights/cache).",
      "score": 0,
      "scoreDisplayMode": "metricSavings",
      "displayValue": "Est savings of 170 KiB",
      "metricSavings": {
        "FCP": 750,
        "LCP": 750
      },
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "url",
            "valueType": "url",
            "label": "Request"
          },
          {
            "key": "cacheLifetimeMs",
            "valueType": "ms",
            "label": "Cache TTL",
            "displayUnit": "duration"
          },
          {
            "key": "totalBytes",
            "valueType": "bytes",
            "label": "Transfer Size",
            "displayUnit": "kb",
            "granularity": 1
          }
        ],
        "items": [
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/bundles/section.js",
            "cacheLifetimeMs": 3600000,
            "totalBytes": 84378,
            "wastedBytes": 67502.40000000001
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/gallium/themes/assets/universal/fonts/UnifySerif_W_Rg.woff2",
            "cacheLifetimeMs": 3600000,
            "totalBytes": 20872,
            "wastedBytes": 16697.600000000002
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/gallium/themes/assets/universal/fonts/UnifySans_W_Bd.woff2",
            "cacheLifetimeMs": 3600000,
            "totalBytes": 18590,
            "wastedBytes": 14872
          },
          {
            "url": "https://atoms.dispatch.com/atoms-library/prod/dist/gannett-atoms-library.js",
            "cacheLifetimeMs": 900000,
            "totalBytes": 16464,
            "wastedBytes": 14714.7
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/gallium/themes/assets/universal/fonts/UnifySans_W_SBd.woff2",
            "cacheLifetimeMs": 3600000,
            "totalBytes": 18045,
            "wastedBytes": 14436
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/scripts/partner.js",
            "cacheLifetimeMs": 3600000,
            "totalBytes": 17815,
            "wastedBytes": 14252
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/gallium/themes/assets/universal/fonts/UnifySans_W_Rg.woff2",
            "cacheLifetimeMs": 3600000,
            "totalBytes": 16788,
            "wastedBytes": 13430.400000000001
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/scripts/utils.js",
            "cacheLifetimeMs": 3600000,
            "totalBytes": 5495,
            "wastedBytes": 4396
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/shadycss/apply-shim.min.js",
            "cacheLifetimeMs": 3600000,
            "totalBytes": 4619,
            "wastedBytes": 3695.2000000000003
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/webcomponentsjs/webcomponents-hi.js",
            "cacheLifetimeMs": 3600000,
            "totalBytes": 4225,
            "wastedBytes": 3380
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/scripts/gallium.js",
            "cacheLifetimeMs": 3600000,
            "totalBytes": 3754,
            "wastedBytes": 3003.2000000000003
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/webcomponentsjs/webcomponents-loader.js",
            "cacheLifetimeMs": 3600000,
            "totalBytes": 1881,
            "wastedBytes": 1504.8000000000002
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/shadycss/custom-style-interface.min.js",
            "cacheLifetimeMs": 3600000,
            "totalBytes": 1772,
            "wastedBytes": 1417.6000000000001
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/webcomponentsjs/custom-elements-es5-adapter.js",
            "cacheLifetimeMs": 3600000,
            "totalBytes": 1107,
            "wastedBytes": 885.6
          },
          {
            "url": "https://polyfill-fastly.io/v2/polyfill.min.js?features=default,fetch,Array.prototype.find,IntersectionObserver,IntersectionObserverEntry,Intl,Intl.~locale.en-US",
            "cacheLifetimeMs": 604800000,
            "totalBytes": 354,
            "wastedBytes": 35.39999999999999
          }
        ],
        "sortedBy": [
          "wastedBytes"
        ],
        "skipSumming": [
          "cacheLifetimeMs"
        ],
        "debugData": {
          "type": "debugdata",
          "wastedBytes": 174222.90000000002
        }
      },
      "guidanceLevel": 3
    },
    "cls-culprits-insight": {
      "id": "cls-culprits-insight",
      "title": "Layout shift culprits",
      "description": "Layout shifts occur when elements move absent any user interaction. [Investigate the causes of layout shifts](https://developer.chrome.com/docs/performance/insights/cls-culprit), such as elements being added, removed, or their fonts changing as the page loads.",
      "score": 1,
      "scoreDisplayMode": "numeric",
      "metricSavings": {
        "CLS": 0
      },
      "details": {
        "type": "list",
        "items": []
      },
      "guidanceLevel": 3
    },
    "document-latency-insight": {
      "id": "document-latency-insight",
      "title": "Document request latency",
      "description": "Your first network request is the most important. [Reduce its latency](https://developer.chrome.com/docs/performance/insights/document-latency) by avoiding redirects, ensuring a fast server response, and enabling text compression.",
      "score": 0,
      "scoreDisplayMode": "metricSavings",
      "displayValue": "Est savings of 100 ms",
      "metricSavings": {
        "FCP": 100,
        "LCP": 100
      },
      "details": {
        "type": "checklist",
        "items": {
          "noRedirects": {
            "label": "Had redirects (2 redirects, +104 ms)",
            "value": false
          },
          "serverResponseIsFast": {
            "label": "Server responds quickly (observed 29 ms)",
            "value": true
          },
          "usesCompression": {
            "label": "Applies text compression",
            "value": true
          }
        },
        "debugData": {
          "type": "debugdata",
          "redirectDuration": 104,
          "serverResponseTime": 29,
          "uncompressedResponseBytes": 0,
          "wastedBytes": 0
        }
      },
      "guidanceLevel": 3
    },
    "dom-size-insight": {
      "id": "dom-size-insight",
      "title": "Optimize DOM size",
      "description": "A large DOM can increase the duration of style calculations and layout reflows, impacting page responsiveness. A large DOM will also increase memory usage. [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/performance/insights/dom-size).",
      "score": 1,
      "scoreDisplayMode": "numeric",
      "numericValue": 886,
      "numericUnit": "element",
      "metricSavings": {
        "INP": 0
      },
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "statistic",
            "valueType": "text",
            "label": "Statistic"
          },
          {
            "key": "node",
            "valueType": "node",
            "label": "Element"
          },
          {
            "key": "value",
            "valueType": "numeric",
            "label": "Value"
          }
        ],
        "items": [
          {
            "statistic": "Total elements",
            "value": {
              "type": "numeric",
              "granularity": 1,
              "value": 886
            }
          },
          {
            "statistic": "DOM depth",
            "node": {
              "type": "node",
              "lhId": "page-12-path",
              "path": "1,HTML,1,BODY,4,SECTION,0,DIV,0,DIV,2,DIV,2,PROMO-STORY-BUCKET-SHORT,a,#document-fragment,2,DIV,1,DIV,2,DIV,2,LIT-STORY-CARD,a,#document-fragment,1,A,0,DIV,1,MEDIA-BADGE,a,#document-fragment,1,DIV,0,DIV,0,DIV,1,svg,1,g,0,path",
              "selector": "div.media-badge-icon > svg > g > path",
              "boundingRect": {
                "top": 3278,
                "bottom": 3294,
                "left": 20,
                "right": 42,
                "width": 21,
                "height": 16
              },
              "snippet": "<path d=\"M67.9,21.5h-13c0-4.1-3.2-8.2-7.1-8.2H31.4c-3.9,0-7.1,4-7.1,8.1l-13,0c-3.9,…\">",
              "nodeLabel": "div.media-badge-icon > svg > g > path"
            },
            "value": {
              "type": "numeric",
              "granularity": 1,
              "value": 19
            }
          },
          {
            "statistic": "Most children",
            "node": {
              "type": "node",
              "lhId": "page-11-DIV",
              "path": "1,HTML,1,BODY,4,SECTION,0,DIV,0,DIV,1,DIV,0,DIV",
              "selector": "div.primary > div.content-well > div#content > div#section-stories",
              "boundingRect": {
                "top": 884,
                "bottom": 2209,
                "left": 0,
                "right": 412,
                "width": 412,
                "height": 1325
              },
              "snippet": "<div id=\"section-stories\" class=\"row\">",
              "nodeLabel": "Who gets tariff refunds? FedEx, UPS, Costco to pass along savings\nNews \nHere's …"
            },
            "value": {
              "type": "numeric",
              "granularity": 1,
              "value": 17
            }
          }
        ],
        "debugData": {
          "type": "debugdata",
          "totalElements": 886,
          "maxChildren": 17,
          "maxDepth": 19
        }
      },
      "guidanceLevel": 3
    },
    "duplicated-javascript-insight": {
      "id": "duplicated-javascript-insight",
      "title": "Duplicated JavaScript",
      "description": "Remove large, [duplicate JavaScript modules](https://developer.chrome.com/docs/performance/insights/duplicated-javascript) from bundles to reduce unnecessary bytes consumed by network activity.",
      "score": null,
      "scoreDisplayMode": "error",
      "errorMessage": "duplication.values.flatMap is not a function or its return value is not iterable",
      "errorStack": "TypeError: duplication.values.flatMap is not a function or its return value is not iterable\n    at Module.generateInsight (file:///usr/local/lib/node_modules/lighthouse/node_modules/@paulirish/trace_engine/models/trace/insights/DuplicatedJavaScript.js:59:61)\n    at #computeInsightSet (file:///usr/local/lib/node_modules/lighthouse/node_modules/@paulirish/trace_engine/models/trace/Processor.js:369:33)\n    at #computeInsightsForNavigation (file:///usr/local/lib/node_modules/lighthouse/node_modules/@paulirish/trace_engine/models/trace/Processor.js:513:32)\n    at #computeInsights (file:///usr/local/lib/node_modules/lighthouse/node_modules/@paulirish/trace_engine/models/trace/Processor.js:445:47)\n    at TraceProcessor.parse (file:///usr/local/lib/node_modules/lighthouse/node_modules/@paulirish/trace_engine/models/trace/Processor.js:126:38)\n    at async TraceEngineResult.runTraceEngine (file:///usr/local/lib/node_modules/lighthouse/core/computed/trace-engine-result.js:43:5)\n    at async TraceEngineResult.compute_ (file:///usr/local/lib/node_modules/lighthouse/core/computed/trace-engine-result.js:256:7)",
      "guidanceLevel": 2
    },
    "font-display-insight": {
      "id": "font-display-insight",
      "title": "Font display",
      "description": "Consider setting [font-display](https://developer.chrome.com/docs/performance/insights/font-display) to swap or optional to ensure text is consistently visible. swap can be further optimized to mitigate layout shifts with [font metric overrides](https://developer.chrome.com/blog/font-fallbacks).",
      "score": 1,
      "scoreDisplayMode": "metricSavings",
      "metricSavings": {
        "INP": 0
      },
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "url",
            "valueType": "url",
            "label": "URL"
          },
          {
            "key": "wastedMs",
            "valueType": "ms",
            "label": "Est Savings"
          }
        ],
        "items": [],
        "skipSumming": [
          "wastedMs"
        ]
      },
      "guidanceLevel": 3
    },
    "forced-reflow-insight": {
      "id": "forced-reflow-insight",
      "title": "Forced reflow",
      "description": "A forced reflow occurs when JavaScript queries geometric properties (such as offsetWidth) after styles have been invalidated by a change to the DOM state. This can result in poor performance. Learn more about [forced reflows](https://developer.chrome.com/docs/performance/insights/forced-reflow) and possible mitigations.",
      "score": 1,
      "scoreDisplayMode": "numeric",
      "details": {
        "type": "list",
        "items": [
          {
            "type": "table",
            "headings": [
              {
                "key": "source",
                "valueType": "source-location",
                "label": "Source"
              },
              {
                "key": "reflowTime",
                "valueType": "ms",
                "granularity": 1,
                "label": "Total reflow time"
              }
            ],
            "items": []
          }
        ]
      },
      "guidanceLevel": 3
    },
    "image-delivery-insight": {
      "id": "image-delivery-insight",
      "title": "Improve image delivery",
      "description": "Reducing the download time of images can improve the perceived load time of the page and LCP. [Learn more about optimizing image size](https://developer.chrome.com/docs/performance/insights/image-delivery)",
      "score": 0,
      "scoreDisplayMode": "metricSavings",
      "displayValue": "Est savings of 2,253 KiB",
      "metricSavings": {
        "FCP": 0,
        "LCP": 10650
      },
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "label": ""
          },
          {
            "key": "url",
            "valueType": "url",
            "label": "URL",
            "subItemsHeading": {
              "key": "reason",
              "valueType": "text"
            }
          },
          {
            "key": "totalBytes",
            "valueType": "bytes",
            "label": "Resource Size"
          },
          {
            "key": "wastedBytes",
            "valueType": "bytes",
            "label": "Est Savings",
            "subItemsHeading": {
              "key": "wastedBytes",
              "valueType": "bytes"
            }
          }
        ],
        "items": [
          {
            "node": {
              "type": "node",
              "lhId": "page-0-IMG",
              "path": "1,HTML,1,BODY,3,HEADER,0,DIV,0,DIV,0,DIV,0,DIV,0,DIV,0,DIV,0,A,0,DIV,0,PICTURE,4,IMG",
              "selector": "a.p12-container-link > div.section-helper-column > picture.p12-photo > img.p12-photo",
              "boundingRect": {
                "top": 56,
                "bottom": 288,
                "left": 0,
                "right": 412,
                "width": 412,
                "height": 232
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2025/10/03/NCOD/864…\" alt=\"Court backlog leads to Franklin County asking for 2 new judges\" class=\"p12-photo\">",
              "nodeLabel": "Court backlog leads to Franklin County asking for 2 new judges"
            },
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2025/10/03/NCOD/86497290007-common-pleas-court.jpg?crop=7007,3943,x0,y364",
            "totalBytes": 2233026,
            "wastedBytes": 2225306,
            "subItems": {
              "type": "subitems",
              "items": [
                {
                  "reason": "This image file is larger than it needs to be (7007x3943) for its displayed dimensions (412x232). Use responsive images to reduce the image download size.",
                  "wastedBytes": 2225306
                }
              ]
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "page-1-IMG",
              "path": "1,HTML,1,BODY,4,SECTION,0,DIV,0,DIV,1,DIV,0,DIV,12,A,1,DIV,0,DIV,0,PICTURE,3,IMG",
              "selector": "div.section-helper-flex > div.nonflexDiv > picture.p1-image > img.p1-image",
              "boundingRect": {
                "top": 1735,
                "bottom": 1840,
                "left": 273,
                "right": 378,
                "width": 104,
                "height": 104
              },
              "snippet": "<img srcset=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/04/17/NCOD/896…\" class=\"p1-image\" alt=\"Earth Day celebration to roar into Columbus Zoo\">",
              "nodeLabel": "Earth Day celebration to roar into Columbus Zoo"
            },
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/17/NCOD/89665462007-earth-day-7566-amanda-carberry-columbus-zoo-and-aquarium.jpg?crop=1080,1079,x324,y0&quality=50&width=270",
            "totalBytes": 16696,
            "wastedBytes": 14878,
            "subItems": {
              "type": "subitems",
              "items": [
                {
                  "reason": "Using a modern image format (WebP, AVIF) or increasing the image compression could improve this image's download size.",
                  "wastedBytes": 4546
                },
                {
                  "reason": "This image file is larger than it needs to be (270x270) for its displayed dimensions (104x104). Use responsive images to reduce the image download size.",
                  "wastedBytes": 14198
                }
              ]
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "page-2-IMG",
              "path": "1,HTML,1,BODY,4,SECTION,0,DIV,0,DIV,2,DIV,1,PROMO-STORY-BUCKET-SHORT,a,#document-fragment,2,DIV,1,DIV,2,DIV,4,LIT-STORY-CARD,a,#document-fragment,1,A,0,DIV,0,IMG",
              "selector": "a.container-link > div.container > img",
              "boundingRect": {
                "top": 2572,
                "bottom": 2642,
                "left": 144,
                "right": 268,
                "width": 124,
                "height": 70
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/04/21/NCOD/897…\">",
              "nodeLabel": "a.container-link > div.container > img"
            },
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/21/NCOD/89719198007-50-print-dji-20251103110740-0302-dhdr.jpg?crop=2999,1687,x0,y281&width=384&quality=50&crop=16%3A9",
            "totalBytes": 15760,
            "wastedBytes": 14319,
            "subItems": {
              "type": "subitems",
              "items": [
                {
                  "reason": "This image file is larger than it needs to be (384x216) for its displayed dimensions (124x70). Use responsive images to reduce the image download size.",
                  "wastedBytes": 14117
                }
              ]
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "page-3-IMG",
              "path": "1,HTML,1,BODY,4,SECTION,0,DIV,0,DIV,2,DIV,2,PROMO-STORY-BUCKET-SHORT,a,#document-fragment,2,DIV,1,DIV,2,DIV,4,LIT-STORY-CARD,a,#document-fragment,1,A,0,DIV,0,IMG",
              "selector": "a.container-link > div.container > img",
              "boundingRect": {
                "top": 3205,
                "bottom": 3275,
                "left": 144,
                "right": 268,
                "width": 124,
                "height": 70
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/04/21/NCOD/897…\">",
              "nodeLabel": "a.container-link > div.container > img"
            },
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/21/NCOD/89719206007-60-print-dji-20251103111509-0328-d.jpg?crop=2999,1688,x0,y112&width=384&quality=50&crop=16%3A9",
            "totalBytes": 13969,
            "wastedBytes": 12528,
            "subItems": {
              "type": "subitems",
              "items": [
                {
                  "reason": "This image file is larger than it needs to be (384x216) for its displayed dimensions (124x70). Use responsive images to reduce the image download size.",
                  "wastedBytes": 12512
                }
              ]
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "page-4-IMG",
              "path": "1,HTML,1,BODY,4,SECTION,0,DIV,0,DIV,2,DIV,2,PROMO-STORY-BUCKET-SHORT,a,#document-fragment,2,DIV,1,DIV,2,DIV,6,LIT-STORY-CARD,a,#document-fragment,1,A,0,DIV,0,IMG",
              "selector": "a.container-link > div.container > img",
              "boundingRect": {
                "top": 3205,
                "bottom": 3275,
                "left": 276,
                "right": 400,
                "width": 124,
                "height": 70
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/04/20/NCOD/897…\">",
              "nodeLabel": "a.container-link > div.container > img"
            },
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/20/NCOD/89708113007-2026-new-albany-rose-run-park-expansion-6.jpg?crop=1192,670,x44,y0&width=384&quality=50&crop=16%3A9",
            "totalBytes": 13900,
            "wastedBytes": 12459,
            "subItems": {
              "type": "subitems",
              "items": [
                {
                  "reason": "This image file is larger than it needs to be (384x216) for its displayed dimensions (124x70). Use responsive images to reduce the image download size.",
                  "wastedBytes": 12451
                }
              ]
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "page-5-IMG",
              "path": "1,HTML,1,BODY,4,SECTION,0,DIV,0,DIV,2,DIV,1,PROMO-STORY-BUCKET-SHORT,a,#document-fragment,2,DIV,1,DIV,2,DIV,6,LIT-STORY-CARD,a,#document-fragment,1,A,0,DIV,0,IMG",
              "selector": "a.container-link > div.container > img",
              "boundingRect": {
                "top": 2572,
                "bottom": 2642,
                "left": 276,
                "right": 400,
                "width": 124,
                "height": 70
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/04/21/NCOD/897…\">",
              "nodeLabel": "a.container-link > div.container > img"
            },
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/21/NCOD/89710238007-softball-22.JPG?crop=5751,3238,x0,y302&width=384&quality=50&crop=16%3A9",
            "totalBytes": 9380,
            "wastedBytes": 8402,
            "subItems": {
              "type": "subitems",
              "items": [
                {
                  "reason": "This image file is larger than it needs to be (384x216) for its displayed dimensions (124x70). Use responsive images to reduce the image download size.",
                  "wastedBytes": 8402
                }
              ]
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "page-6-IMG",
              "path": "1,HTML,1,BODY,4,SECTION,0,DIV,0,DIV,2,DIV,2,PROMO-STORY-BUCKET-SHORT,a,#document-fragment,2,DIV,1,DIV,2,DIV,2,LIT-STORY-CARD,a,#document-fragment,1,A,0,DIV,0,IMG",
              "selector": "a.container-link > div.container > img",
              "boundingRect": {
                "top": 3205,
                "bottom": 3275,
                "left": 12,
                "right": 136,
                "width": 124,
                "height": 70
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/04/21/NCOD/897…\">",
              "nodeLabel": "a.container-link > div.container > img"
            },
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/21/NCOD/89709842007-entertainment-worthington-inn-preview-01.jpg?crop=4799,2700,x0,y315&width=384&quality=50&crop=16%3A9",
            "totalBytes": 9325,
            "wastedBytes": 8353,
            "subItems": {
              "type": "subitems",
              "items": [
                {
                  "reason": "This image file is larger than it needs to be (384x216) for its displayed dimensions (124x70). Use responsive images to reduce the image download size.",
                  "wastedBytes": 8353
                }
              ]
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "page-7-IMG",
              "path": "1,HTML,1,BODY,4,SECTION,0,DIV,0,DIV,2,DIV,1,PROMO-STORY-BUCKET-SHORT,a,#document-fragment,2,DIV,1,DIV,2,DIV,2,LIT-STORY-CARD,a,#document-fragment,1,A,0,DIV,0,IMG",
              "selector": "a.container-link > div.container > img",
              "boundingRect": {
                "top": 2572,
                "bottom": 2642,
                "left": 12,
                "right": 136,
                "width": 124,
                "height": 70
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/videos/wochit/thumbnails/89710141007…\">",
              "nodeLabel": "a.container-link > div.container > img"
            },
            "url": "https://www.gannett-cdn.com/authoring/videos/wochit/thumbnails/89710141007.jpg?width=384&quality=50&crop=16%3A9",
            "totalBytes": 7469,
            "wastedBytes": 6690,
            "subItems": {
              "type": "subitems",
              "items": [
                {
                  "reason": "This image file is larger than it needs to be (384x216) for its displayed dimensions (124x70). Use responsive images to reduce the image download size.",
                  "wastedBytes": 6690
                }
              ]
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "page-8-IMG",
              "path": "1,HTML,1,BODY,3,HEADER,0,DIV,0,DIV,0,DIV,0,DIV,1,DIV,0,DIV,0,A,0,PICTURE,5,IMG",
              "selector": "div.hero-slot-two > a.section-helper-flex > picture.section-helper-column > img",
              "boundingRect": {
                "top": 382,
                "bottom": 575,
                "left": 34,
                "right": 378,
                "width": 343,
                "height": 193
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/01/12/USAT/881…\" alt=\"New bookstore planned for Worthington this summer\">",
              "nodeLabel": "New bookstore planned for Worthington this summer"
            },
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/01/12/USAT/88148416007-usatsi-27919432.jpg?crop=3999,2250,x0,y400&quality=50&width=270",
            "totalBytes": 11364,
            "wastedBytes": 4524,
            "subItems": {
              "type": "subitems",
              "items": [
                {
                  "reason": "Using a modern image format (WebP, AVIF) or increasing the image compression could improve this image's download size.",
                  "wastedBytes": 4524
                }
              ]
            }
          }
        ],
        "debugData": {
          "type": "debugdata",
          "wastedBytes": 2307459
        }
      },
      "guidanceLevel": 3
    },
    "inp-breakdown-insight": {
      "id": "inp-breakdown-insight",
      "title": "INP breakdown",
      "description": "Start investigating [how to improve INP](https://developer.chrome.com/docs/performance/insights/inp-breakdown) by looking at the longest subpart.",
      "score": null,
      "scoreDisplayMode": "notApplicable",
      "guidanceLevel": 3
    },
    "lcp-breakdown-insight": {
      "id": "lcp-breakdown-insight",
      "title": "LCP breakdown",
      "description": "Each [subpart has specific improvement strategies](https://developer.chrome.com/docs/performance/insights/lcp-breakdown). Ideally, most of the LCP time should be spent on loading the resources, not within delays.",
      "score": 1,
      "scoreDisplayMode": "informative",
      "metricSavings": {
        "LCP": 0
      },
      "details": {
        "type": "list",
        "items": [
          {
            "type": "table",
            "headings": [
              {
                "key": "label",
                "valueType": "text",
                "label": "Subpart"
              },
              {
                "key": "duration",
                "valueType": "ms",
                "label": "Duration"
              }
            ],
            "items": [
              {
                "subpart": "timeToFirstByte",
                "label": "Time to first byte",
                "duration": 140.224
              },
              {
                "subpart": "resourceLoadDelay",
                "label": "Resource load delay",
                "duration": 13.885
              },
              {
                "subpart": "resourceLoadDuration",
                "label": "Resource load duration",
                "duration": 212.22
              },
              {
                "subpart": "elementRenderDelay",
                "label": "Element render delay",
                "duration": 1962.491
              }
            ]
          },
          {
            "type": "node",
            "lhId": "page-0-IMG",
            "path": "1,HTML,1,BODY,3,HEADER,0,DIV,0,DIV,0,DIV,0,DIV,0,DIV,0,DIV,0,A,0,DIV,0,PICTURE,4,IMG",
            "selector": "a.p12-container-link > div.section-helper-column > picture.p12-photo > img.p12-photo",
            "boundingRect": {
              "top": 56,
              "bottom": 288,
              "left": 0,
              "right": 412,
              "width": 412,
              "height": 232
            },
            "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2025/10/03/NCOD/864…\" alt=\"Court backlog leads to Franklin County asking for 2 new judges\" class=\"p12-photo\">",
            "nodeLabel": "Court backlog leads to Franklin County asking for 2 new judges"
          }
        ]
      },
      "guidanceLevel": 3
    },
    "lcp-discovery-insight": {
      "id": "lcp-discovery-insight",
      "title": "LCP request discovery",
      "description": "[Optimize LCP](https://developer.chrome.com/docs/performance/insights/lcp-discovery) by making the LCP image discoverable from the HTML immediately, and avoiding lazy-loading",
      "score": 0,
      "scoreDisplayMode": "numeric",
      "metricSavings": {
        "LCP": 0
      },
      "details": {
        "type": "list",
        "items": [
          {
            "type": "checklist",
            "items": {
              "priorityHinted": {
                "label": "fetchpriority=high should be applied",
                "value": false
              },
              "requestDiscoverable": {
                "label": "Request is discoverable in initial document",
                "value": true
              },
              "eagerlyLoaded": {
                "label": "lazy load not applied",
                "value": true
              }
            }
          },
          {
            "type": "node",
            "lhId": "page-0-IMG",
            "path": "1,HTML,1,BODY,3,HEADER,0,DIV,0,DIV,0,DIV,0,DIV,0,DIV,0,DIV,0,A,0,DIV,0,PICTURE,4,IMG",
            "selector": "a.p12-container-link > div.section-helper-column > picture.p12-photo > img.p12-photo",
            "boundingRect": {
              "top": 56,
              "bottom": 288,
              "left": 0,
              "right": 412,
              "width": 412,
              "height": 232
            },
            "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2025/10/03/NCOD/864…\" alt=\"Court backlog leads to Franklin County asking for 2 new judges\" class=\"p12-photo\">",
            "nodeLabel": "Court backlog leads to Franklin County asking for 2 new judges"
          }
        ]
      },
      "guidanceLevel": 3
    },
    "legacy-javascript-insight": {
      "id": "legacy-javascript-insight",
      "title": "Legacy JavaScript",
      "description": "Polyfills and transforms enable older browsers to use new JavaScript features. However, many aren't necessary for modern browsers. Consider modifying your JavaScript build process to not transpile [Baseline](https://web.dev/articles/baseline-and-polyfills) features, unless you know you must support older browsers. [Learn why most sites can deploy ES6+ code without transpiling](https://developer.chrome.com/docs/performance/insights/legacy-javascript)",
      "score": null,
      "scoreDisplayMode": "error",
      "errorMessage": "wastedBytesByRequestId.values(...).reduce is not a function",
      "errorStack": "TypeError: wastedBytesByRequestId.values(...).reduce is not a function\n    at Module.generateInsight (file:///usr/local/lib/node_modules/lighthouse/node_modules/@paulirish/trace_engine/models/trace/insights/LegacyJavaScript.js:79:54)\n    at #computeInsightSet (file:///usr/local/lib/node_modules/lighthouse/node_modules/@paulirish/trace_engine/models/trace/Processor.js:369:33)\n    at #computeInsightsForNavigation (file:///usr/local/lib/node_modules/lighthouse/node_modules/@paulirish/trace_engine/models/trace/Processor.js:513:32)\n    at #computeInsights (file:///usr/local/lib/node_modules/lighthouse/node_modules/@paulirish/trace_engine/models/trace/Processor.js:445:47)\n    at TraceProcessor.parse (file:///usr/local/lib/node_modules/lighthouse/node_modules/@paulirish/trace_engine/models/trace/Processor.js:126:38)\n    at async TraceEngineResult.runTraceEngine (file:///usr/local/lib/node_modules/lighthouse/core/computed/trace-engine-result.js:43:5)\n    at async TraceEngineResult.compute_ (file:///usr/local/lib/node_modules/lighthouse/core/computed/trace-engine-result.js:256:7)",
      "guidanceLevel": 2
    },
    "modern-http-insight": {
      "id": "modern-http-insight",
      "title": "Modern HTTP",
      "description": "HTTP/2 and HTTP/3 offer many benefits over HTTP/1.1, such as multiplexing. [Learn more about using modern HTTP](https://developer.chrome.com/docs/performance/insights/modern-http).",
      "score": 1,
      "scoreDisplayMode": "metricSavings",
      "metricSavings": {
        "FCP": 0,
        "LCP": 0
      },
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "url",
            "valueType": "url",
            "label": "URL"
          },
          {
            "key": "protocol",
            "valueType": "text",
            "label": "Protocol"
          }
        ],
        "items": []
      },
      "guidanceLevel": 3
    },
    "network-dependency-tree-insight": {
      "id": "network-dependency-tree-insight",
      "title": "Network dependency tree",
      "description": "[Avoid chaining critical requests](https://developer.chrome.com/docs/performance/insights/network-dependency-tree) by reducing the length of chains, reducing the download size of resources, or deferring the download of unnecessary resources to improve page load.",
      "score": 0,
      "scoreDisplayMode": "numeric",
      "metricSavings": {
        "LCP": 0
      },
      "details": {
        "type": "list",
        "items": [
          {
            "type": "list-section",
            "value": {
              "type": "network-tree",
              "chains": {
                "AA91C62B800A3D198998D8009E7BA39A": {
                  "url": "https://eu.dispatch.com/",
                  "navStartToEndTime": 163,
                  "transferSize": 34464,
                  "isLongest": true,
                  "children": {
                    "AA91C62B800A3D198998D8009E7BA39A": {
                      "url": "https://eu.dispatch.com/",
                      "navStartToEndTime": 163,
                      "transferSize": 34464,
                      "isLongest": true,
                      "children": {
                        "AA91C62B800A3D198998D8009E7BA39A": {
                          "url": "https://eu.dispatch.com/",
                          "navStartToEndTime": 163,
                          "transferSize": 34464,
                          "isLongest": true,
                          "children": {
                            "1404414.3": {
                              "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/scripts/gallium.js",
                              "navStartToEndTime": 399,
                              "transferSize": 3754,
                              "isLongest": true,
                              "children": {
                                "1404414.47": {
                                  "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/scripts/utils.js",
                                  "navStartToEndTime": 697,
                                  "transferSize": 5495,
                                  "isLongest": true,
                                  "children": {
                                    "1404414.63": {
                                      "url": "https://api.gannett-cdn.com/thorium/popular/NCOD/10?assettype=video&searchtype=pageViews&ssts=home&apiKey=TGgXAxAcR3ktiGl6cRsHSGsLS6ySi6yz",
                                      "navStartToEndTime": 865,
                                      "transferSize": 3257,
                                      "isLongest": true,
                                      "children": {}
                                    },
                                    "1404414.61": {
                                      "url": "https://api.gannett-cdn.com/thorium/popular/NCOD/10?apiKey=TGgXAxAcR3ktiGl6cRsHSGsLS6ySi6yz&searchtype=socialReferrals",
                                      "navStartToEndTime": 864,
                                      "transferSize": 1139,
                                      "children": {}
                                    },
                                    "1404414.66": {
                                      "url": "https://api.gannett-cdn.com/thorium/breaking-news/?apiKey=TGgXAxAcR3ktiGl6cRsHSGsLS6ySi6yz&site-code=NCOD",
                                      "navStartToEndTime": 863,
                                      "transferSize": 211,
                                      "children": {}
                                    },
                                    "1404414.64": {
                                      "url": "https://api.gannett-cdn.com/thorium/popular/NCOD/10?assettype=gallery&searchtype=pageViews&ssts=home&apiKey=TGgXAxAcR3ktiGl6cRsHSGsLS6ySi6yz",
                                      "navStartToEndTime": 849,
                                      "transferSize": 3303,
                                      "children": {}
                                    },
                                    "1404414.65": {
                                      "url": "https://user.dispatch.com/NCOD-GUP/user/",
                                      "navStartToEndTime": 770,
                                      "transferSize": 0,
                                      "children": {}
                                    },
                                    "1404414.62": {
                                      "url": "https://api.gannett-cdn.com/argon/navreimagined/ncod/top_nav_primary/?apiKey=f6YYPA1hPnB9Y9chky5GOmrZKmaguLVh",
                                      "navStartToEndTime": 766,
                                      "transferSize": 1837,
                                      "children": {}
                                    }
                                  }
                                },
                                "1404414.46": {
                                  "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/scripts/partner.js",
                                  "navStartToEndTime": 668,
                                  "transferSize": 17815,
                                  "children": {}
                                }
                              }
                            },
                            "1404414.48": {
                              "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/gallium/themes/assets/universal/fonts/UnifySans_W_Rg.woff2",
                              "navStartToEndTime": 760,
                              "transferSize": 16788,
                              "children": {}
                            },
                            "1404414.54": {
                              "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/gallium/themes/assets/universal/fonts/UnifySerif_W_Rg.woff2",
                              "navStartToEndTime": 760,
                              "transferSize": 20872,
                              "children": {}
                            },
                            "1404414.50": {
                              "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/gallium/themes/assets/universal/fonts/UnifySans_W_SBd.woff2",
                              "navStartToEndTime": 759,
                              "transferSize": 18045,
                              "children": {}
                            },
                            "1404414.52": {
                              "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/gallium/themes/assets/universal/fonts/UnifySans_W_Bd.woff2",
                              "navStartToEndTime": 759,
                              "transferSize": 18590,
                              "children": {}
                            },
                            "1404414.2": {
                              "url": "https://polyfill-fastly.io/v2/polyfill.min.js?features=default,fetch,Array.prototype.find,IntersectionObserver,IntersectionObserverEntry,Intl,Intl.~locale.en-US",
                              "navStartToEndTime": 476,
                              "transferSize": 354,
                              "children": {}
                            },
                            "1404414.5": {
                              "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/bundles/section.js",
                              "navStartToEndTime": 295,
                              "transferSize": 84378,
                              "children": {}
                            },
                            "1404414.4": {
                              "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/webcomponentsjs/custom-elements-es5-adapter.js",
                              "navStartToEndTime": 188,
                              "transferSize": 1107,
                              "children": {}
                            }
                          }
                        }
                      }
                    }
                  }
                }
              },
              "longestChain": {
                "duration": 865
              }
            }
          },
          {
            "type": "list-section",
            "title": "Preconnected origins",
            "description": "[preconnect](https://developer.chrome.com/docs/lighthouse/performance/uses-rel-preconnect/) hints help the browser establish a connection earlier in the page load, saving time when the first request for that origin is made. The following are the origins that the page preconnected to.",
            "value": {
              "type": "table",
              "headings": [
                {
                  "key": "origin",
                  "valueType": "text",
                  "subItemsHeading": {
                    "key": "warning"
                  },
                  "label": "Origin"
                },
                {
                  "key": "source",
                  "valueType": "node",
                  "label": "Source"
                }
              ],
              "items": [
                {
                  "origin": "https://cdn.cookielaw.org/",
                  "source": {
                    "type": "node",
                    "lhId": "page-9-LINK",
                    "path": "1,HTML,0,HEAD,13,LINK",
                    "selector": "head > link",
                    "boundingRect": {
                      "top": 0,
                      "bottom": 0,
                      "left": 0,
                      "right": 0,
                      "width": 0,
                      "height": 0
                    },
                    "snippet": "<link rel=\"preconnect\" href=\"https://cdn.cookielaw.org\">",
                    "nodeLabel": "head > link"
                  },
                  "subItems": {
                    "type": "subitems",
                    "items": []
                  }
                }
              ]
            }
          },
          {
            "type": "list-section",
            "title": "Preconnect candidates",
            "description": "Add [preconnect](https://developer.chrome.com/docs/lighthouse/performance/uses-rel-preconnect/) hints to your most important origins, but try to use no more than 4.",
            "value": {
              "type": "text",
              "value": "No additional origins are good candidates for preconnecting"
            }
          }
        ]
      },
      "guidanceLevel": 1
    },
    "render-blocking-insight": {
      "id": "render-blocking-insight",
      "title": "Render blocking requests",
      "description": "Requests are blocking the page's initial render, which may delay LCP. [Deferring or inlining](https://developer.chrome.com/docs/performance/insights/render-blocking) can move these network requests out of the critical path.",
      "score": 0.5,
      "scoreDisplayMode": "metricSavings",
      "metricSavings": {
        "FCP": 0,
        "LCP": 0
      },
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "url",
            "valueType": "url",
            "label": "URL"
          },
          {
            "key": "totalBytes",
            "valueType": "bytes",
            "label": "Transfer Size"
          },
          {
            "key": "wastedMs",
            "valueType": "timespanMs",
            "label": "Duration"
          }
        ],
        "items": [
          {
            "url": "https://polyfill-fastly.io/v2/polyfill.min.js?features=default,fetch,Array.prototype.find,IntersectionObserver,IntersectionObserverEntry,Intl,Intl.~locale.en-US",
            "totalBytes": 354,
            "wastedMs": 752
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/webcomponentsjs/custom-elements-es5-adapter.js",
            "totalBytes": 1107
          }
        ]
      },
      "guidanceLevel": 3
    },
    "third-parties-insight": {
      "id": "third-parties-insight",
      "title": "3rd parties",
      "description": "3rd party code can significantly impact load performance. [Reduce and defer loading of 3rd party code](https://developer.chrome.com/docs/performance/insights/third-parties) to prioritize your page's content.",
      "score": null,
      "scoreDisplayMode": "error",
      "errorMessage": "data.Renderer.processes.values(...).find is not a function",
      "errorStack": "TypeError: data.Renderer.processes.values(...).find is not a function\n    at collectMainThreadActivity (file:///usr/local/lib/node_modules/lighthouse/node_modules/@paulirish/trace_engine/models/trace/extras/ThirdParties.js:17:10)\n    at Module.summarizeByThirdParty (file:///usr/local/lib/node_modules/lighthouse/node_modules/@paulirish/trace_engine/models/trace/extras/ThirdParties.js:30:30)\n    at Module.generateInsight (file:///usr/local/lib/node_modules/lighthouse/node_modules/@paulirish/trace_engine/models/trace/insights/ThirdParties.js:58:49)\n    at #computeInsightSet (file:///usr/local/lib/node_modules/lighthouse/node_modules/@paulirish/trace_engine/models/trace/Processor.js:369:33)\n    at #computeInsightsForNavigation (file:///usr/local/lib/node_modules/lighthouse/node_modules/@paulirish/trace_engine/models/trace/Processor.js:513:32)\n    at #computeInsights (file:///usr/local/lib/node_modules/lighthouse/node_modules/@paulirish/trace_engine/models/trace/Processor.js:445:47)\n    at TraceProcessor.parse (file:///usr/local/lib/node_modules/lighthouse/node_modules/@paulirish/trace_engine/models/trace/Processor.js:126:38)\n    at async TraceEngineResult.runTraceEngine (file:///usr/local/lib/node_modules/lighthouse/core/computed/trace-engine-result.js:43:5)\n    at async TraceEngineResult.compute_ (file:///usr/local/lib/node_modules/lighthouse/core/computed/trace-engine-result.js:256:7)",
      "guidanceLevel": 3
    },
    "viewport-insight": {
      "id": "viewport-insight",
      "title": "Optimize viewport for mobile",
      "description": "Tap interactions may be [delayed by up to 300 ms](https://developer.chrome.com/docs/performance/insights/viewport) if the viewport is not optimized for mobile.",
      "score": 1,
      "scoreDisplayMode": "numeric",
      "metricSavings": {
        "INP": 0
      },
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "label": ""
          }
        ],
        "items": [
          {
            "node": {
              "type": "node",
              "lhId": "page-10-META",
              "path": "1,HTML,0,HEAD,4,META",
              "selector": "head > meta",
              "boundingRect": {
                "top": 0,
                "bottom": 0,
                "left": 0,
                "right": 0,
                "width": 0,
                "height": 0
              },
              "snippet": "<meta name=\"viewport\" content=\"width=device-width,initial-scale=1\">",
              "nodeLabel": "head > meta"
            }
          }
        ]
      },
      "guidanceLevel": 3
    }
  },
  "configSettings": {
    "output": [
      "json"
    ],
    "maxWaitForFcp": 30000,
    "maxWaitForLoad": 45000,
    "pauseAfterFcpMs": 1000,
    "pauseAfterLoadMs": 1000,
    "networkQuietThresholdMs": 1000,
    "cpuQuietThresholdMs": 1000,
    "formFactor": "mobile",
    "throttling": {
      "rttMs": 150,
      "throughputKbps": 1638.4,
      "requestLatencyMs": 562.5,
      "downloadThroughputKbps": 1474.5600000000002,
      "uploadThroughputKbps": 675,
      "cpuSlowdownMultiplier": 4
    },
    "throttlingMethod": "simulate",
    "screenEmulation": {
      "mobile": true,
      "width": 412,
      "height": 823,
      "deviceScaleFactor": 1.75,
      "disabled": false
    },
    "emulatedUserAgent": "Mozilla/5.0 (Linux; Android 11; moto g power (2022)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Mobile Safari/537.36",
    "auditMode": false,
    "gatherMode": false,
    "clearStorageTypes": [
      "file_systems",
      "shader_cache",
      "service_workers",
      "cache_storage"
    ],
    "disableStorageReset": false,
    "debugNavigation": false,
    "channel": "cli",
    "usePassiveGathering": false,
    "disableFullPageScreenshot": false,
    "skipAboutBlank": false,
    "blankPage": "about:blank",
    "ignoreStatusCode": false,
    "locale": "en-US",
    "blockedUrlPatterns": null,
    "additionalTraceCategories": null,
    "extraHeaders": null,
    "precomputedLanternData": null,
    "onlyAudits": null,
    "onlyCategories": null,
    "skipAudits": null
  },
  "categories": {
    "performance": {
      "title": "Performance",
      "supportedModes": [
        "navigation",
        "timespan",
        "snapshot"
      ],
      "auditRefs": [
        {
          "id": "first-contentful-paint",
          "weight": 10,
          "group": "metrics",
          "acronym": "FCP"
        },
        {
          "id": "largest-contentful-paint",
          "weight": 25,
          "group": "metrics",
          "acronym": "LCP"
        },
        {
          "id": "total-blocking-time",
          "weight": 30,
          "group": "metrics",
          "acronym": "TBT"
        },
        {
          "id": "cumulative-layout-shift",
          "weight": 25,
          "group": "metrics",
          "acronym": "CLS"
        },
        {
          "id": "speed-index",
          "weight": 10,
          "group": "metrics",
          "acronym": "SI"
        },
        {
          "id": "cache-insight",
          "weight": 0,
          "group": "insights"
        },
        {
          "id": "cls-culprits-insight",
          "weight": 0,
          "group": "insights"
        },
        {
          "id": "document-latency-insight",
          "weight": 0,
          "group": "insights"
        },
        {
          "id": "dom-size-insight",
          "weight": 0,
          "group": "insights"
        },
        {
          "id": "duplicated-javascript-insight",
          "weight": 0,
          "group": "insights"
        },
        {
          "id": "font-display-insight",
          "weight": 0,
          "group": "insights"
        },
        {
          "id": "forced-reflow-insight",
          "weight": 0,
          "group": "insights"
        },
        {
          "id": "image-delivery-insight",
          "weight": 0,
          "group": "insights"
        },
        {
          "id": "inp-breakdown-insight",
          "weight": 0,
          "group": "insights"
        },
        {
          "id": "lcp-breakdown-insight",
          "weight": 0,
          "group": "insights"
        },
        {
          "id": "lcp-discovery-insight",
          "weight": 0,
          "group": "insights"
        },
        {
          "id": "legacy-javascript-insight",
          "weight": 0,
          "group": "insights"
        },
        {
          "id": "modern-http-insight",
          "weight": 0,
          "group": "insights"
        },
        {
          "id": "network-dependency-tree-insight",
          "weight": 0,
          "group": "insights"
        },
        {
          "id": "render-blocking-insight",
          "weight": 0,
          "group": "insights"
        },
        {
          "id": "third-parties-insight",
          "weight": 0,
          "group": "insights"
        },
        {
          "id": "viewport-insight",
          "weight": 0,
          "group": "insights"
        },
        {
          "id": "interactive",
          "weight": 0,
          "group": "hidden",
          "acronym": "TTI"
        },
        {
          "id": "max-potential-fid",
          "weight": 0,
          "group": "hidden"
        },
        {
          "id": "unminified-css",
          "weight": 0,
          "group": "diagnostics"
        },
        {
          "id": "unminified-javascript",
          "weight": 0,
          "group": "diagnostics"
        },
        {
          "id": "unused-css-rules",
          "weight": 0,
          "group": "diagnostics"
        },
        {
          "id": "unused-javascript",
          "weight": 0,
          "group": "diagnostics"
        },
        {
          "id": "total-byte-weight",
          "weight": 0,
          "group": "diagnostics"
        },
        {
          "id": "user-timings",
          "weight": 0,
          "group": "diagnostics"
        },
        {
          "id": "bootup-time",
          "weight": 0,
          "group": "diagnostics"
        },
        {
          "id": "mainthread-work-breakdown",
          "weight": 0,
          "group": "diagnostics"
        },
        {
          "id": "long-tasks",
          "weight": 0,
          "group": "diagnostics"
        },
        {
          "id": "non-composited-animations",
          "weight": 0,
          "group": "diagnostics"
        },
        {
          "id": "unsized-images",
          "weight": 0,
          "group": "diagnostics"
        },
        {
          "id": "bf-cache",
          "weight": 0,
          "group": "diagnostics"
        },
        {
          "id": "network-requests",
          "weight": 0,
          "group": "hidden"
        },
        {
          "id": "network-rtt",
          "weight": 0,
          "group": "hidden"
        },
        {
          "id": "network-server-latency",
          "weight": 0,
          "group": "hidden"
        },
        {
          "id": "main-thread-tasks",
          "weight": 0,
          "group": "hidden"
        },
        {
          "id": "diagnostics",
          "weight": 0,
          "group": "hidden"
        },
        {
          "id": "metrics",
          "weight": 0,
          "group": "hidden"
        },
        {
          "id": "screenshot-thumbnails",
          "weight": 0,
          "group": "hidden"
        },
        {
          "id": "final-screenshot",
          "weight": 0,
          "group": "hidden"
        },
        {
          "id": "script-treemap-data",
          "weight": 0,
          "group": "hidden"
        },
        {
          "id": "resource-summary",
          "weight": 0,
          "group": "hidden"
        },
        {
          "id": "redirects",
          "weight": 0,
          "group": "hidden"
        },
        {
          "id": "server-response-time",
          "weight": 0,
          "group": "hidden"
        },
        {
          "id": "layout-shifts",
          "weight": 0,
          "group": "hidden"
        }
      ],
      "id": "performance",
      "score": 0.62
    },
    "accessibility": {
      "title": "Accessibility",
      "description": "These checks highlight opportunities to [improve the accessibility of your web app](https://developer.chrome.com/docs/lighthouse/accessibility/). Automatic detection can only detect a subset of issues and does not guarantee the accessibility of your web app, so [manual testing](https://web.dev/articles/how-to-review) is also encouraged.",
      "manualDescription": "These items address areas which an automated testing tool cannot cover. Learn more in our guide on [conducting an accessibility review](https://web.dev/articles/how-to-review).",
      "supportedModes": [
        "navigation",
        "snapshot"
      ],
      "auditRefs": [
        {
          "id": "accesskeys",
          "weight": 0,
          "group": "a11y-navigation"
        },
        {
          "id": "aria-allowed-attr",
          "weight": 10,
          "group": "a11y-aria"
        },
        {
          "id": "aria-command-name",
          "weight": 0,
          "group": "a11y-aria"
        },
        {
          "id": "aria-conditional-attr",
          "weight": 7,
          "group": "a11y-aria"
        },
        {
          "id": "aria-deprecated-role",
          "weight": 0,
          "group": "a11y-aria"
        },
        {
          "id": "aria-dialog-name",
          "weight": 0,
          "group": "a11y-aria"
        },
        {
          "id": "aria-hidden-body",
          "weight": 10,
          "group": "a11y-aria"
        },
        {
          "id": "aria-hidden-focus",
          "weight": 0,
          "group": "a11y-aria"
        },
        {
          "id": "aria-input-field-name",
          "weight": 0,
          "group": "a11y-aria"
        },
        {
          "id": "aria-meter-name",
          "weight": 0,
          "group": "a11y-aria"
        },
        {
          "id": "aria-progressbar-name",
          "weight": 0,
          "group": "a11y-aria"
        },
        {
          "id": "aria-prohibited-attr",
          "weight": 7,
          "group": "a11y-aria"
        },
        {
          "id": "aria-required-attr",
          "weight": 0,
          "group": "a11y-aria"
        },
        {
          "id": "aria-required-children",
          "weight": 0,
          "group": "a11y-aria"
        },
        {
          "id": "aria-required-parent",
          "weight": 0,
          "group": "a11y-aria"
        },
        {
          "id": "aria-roles",
          "weight": 0,
          "group": "a11y-aria"
        },
        {
          "id": "aria-text",
          "weight": 0,
          "group": "a11y-aria"
        },
        {
          "id": "aria-toggle-field-name",
          "weight": 0,
          "group": "a11y-aria"
        },
        {
          "id": "aria-tooltip-name",
          "weight": 0,
          "group": "a11y-aria"
        },
        {
          "id": "aria-treeitem-name",
          "weight": 0,
          "group": "a11y-aria"
        },
        {
          "id": "aria-valid-attr-value",
          "weight": 10,
          "group": "a11y-aria"
        },
        {
          "id": "aria-valid-attr",
          "weight": 10,
          "group": "a11y-aria"
        },
        {
          "id": "button-name",
          "weight": 0,
          "group": "a11y-names-labels"
        },
        {
          "id": "bypass",
          "weight": 0,
          "group": "a11y-navigation"
        },
        {
          "id": "color-contrast",
          "weight": 7,
          "group": "a11y-color-contrast"
        },
        {
          "id": "definition-list",
          "weight": 0,
          "group": "a11y-tables-lists"
        },
        {
          "id": "dlitem",
          "weight": 0,
          "group": "a11y-tables-lists"
        },
        {
          "id": "document-title",
          "weight": 7,
          "group": "a11y-names-labels"
        },
        {
          "id": "duplicate-id-aria",
          "weight": 0,
          "group": "a11y-aria"
        },
        {
          "id": "form-field-multiple-labels",
          "weight": 0,
          "group": "a11y-names-labels"
        },
        {
          "id": "frame-title",
          "weight": 0,
          "group": "a11y-names-labels"
        },
        {
          "id": "heading-order",
          "weight": 3,
          "group": "a11y-navigation"
        },
        {
          "id": "html-has-lang",
          "weight": 7,
          "group": "a11y-language"
        },
        {
          "id": "html-lang-valid",
          "weight": 7,
          "group": "a11y-language"
        },
        {
          "id": "html-xml-lang-mismatch",
          "weight": 0,
          "group": "a11y-language"
        },
        {
          "id": "image-alt",
          "weight": 10,
          "group": "a11y-names-labels"
        },
        {
          "id": "input-button-name",
          "weight": 0,
          "group": "a11y-names-labels"
        },
        {
          "id": "input-image-alt",
          "weight": 0,
          "group": "a11y-names-labels"
        },
        {
          "id": "label",
          "weight": 10,
          "group": "a11y-names-labels"
        },
        {
          "id": "link-in-text-block",
          "weight": 0,
          "group": "a11y-color-contrast"
        },
        {
          "id": "link-name",
          "weight": 7,
          "group": "a11y-names-labels"
        },
        {
          "id": "list",
          "weight": 7,
          "group": "a11y-tables-lists"
        },
        {
          "id": "listitem",
          "weight": 7,
          "group": "a11y-tables-lists"
        },
        {
          "id": "meta-refresh",
          "weight": 0,
          "group": "a11y-best-practices"
        },
        {
          "id": "meta-viewport",
          "weight": 10,
          "group": "a11y-best-practices"
        },
        {
          "id": "object-alt",
          "weight": 0,
          "group": "a11y-names-labels"
        },
        {
          "id": "select-name",
          "weight": 0,
          "group": "a11y-names-labels"
        },
        {
          "id": "skip-link",
          "weight": 3,
          "group": "a11y-names-labels"
        },
        {
          "id": "tabindex",
          "weight": 0,
          "group": "a11y-navigation"
        },
        {
          "id": "target-size",
          "weight": 7,
          "group": "a11y-best-practices"
        },
        {
          "id": "td-headers-attr",
          "weight": 0,
          "group": "a11y-tables-lists"
        },
        {
          "id": "th-has-data-cells",
          "weight": 0,
          "group": "a11y-tables-lists"
        },
        {
          "id": "valid-lang",
          "weight": 0,
          "group": "a11y-language"
        },
        {
          "id": "video-caption",
          "weight": 0,
          "group": "a11y-audio-video"
        },
        {
          "id": "landmark-one-main",
          "weight": 3,
          "group": "a11y-best-practices"
        },
        {
          "id": "focusable-controls",
          "weight": 0
        },
        {
          "id": "interactive-element-affordance",
          "weight": 0
        },
        {
          "id": "logical-tab-order",
          "weight": 0
        },
        {
          "id": "visual-order-follows-dom",
          "weight": 0
        },
        {
          "id": "focus-traps",
          "weight": 0
        },
        {
          "id": "managed-focus",
          "weight": 0
        },
        {
          "id": "use-landmarks",
          "weight": 0
        },
        {
          "id": "offscreen-content-hidden",
          "weight": 0
        },
        {
          "id": "custom-controls-labels",
          "weight": 0
        },
        {
          "id": "custom-controls-roles",
          "weight": 0
        },
        {
          "id": "table-duplicate-name",
          "weight": 0,
          "group": "a11y-best-practices"
        },
        {
          "id": "empty-heading",
          "weight": 0,
          "group": "a11y-best-practices"
        },
        {
          "id": "aria-allowed-role",
          "weight": 0,
          "group": "a11y-best-practices"
        },
        {
          "id": "image-redundant-alt",
          "weight": 0,
          "group": "a11y-names-labels"
        },
        {
          "id": "identical-links-same-purpose",
          "weight": 0,
          "group": "a11y-best-practices"
        },
        {
          "id": "label-content-name-mismatch",
          "weight": 0,
          "group": "hidden"
        },
        {
          "id": "table-fake-caption",
          "weight": 0,
          "group": "hidden"
        },
        {
          "id": "td-has-header",
          "weight": 0,
          "group": "hidden"
        }
      ],
      "id": "accessibility",
      "score": 0.87
    },
    "best-practices": {
      "title": "Best Practices",
      "supportedModes": [
        "navigation",
        "timespan",
        "snapshot"
      ],
      "auditRefs": [
        {
          "id": "is-on-https",
          "weight": 5,
          "group": "best-practices-trust-safety"
        },
        {
          "id": "redirects-http",
          "weight": 0,
          "group": "best-practices-trust-safety"
        },
        {
          "id": "geolocation-on-start",
          "weight": 1,
          "group": "best-practices-trust-safety"
        },
        {
          "id": "notification-on-start",
          "weight": 1,
          "group": "best-practices-trust-safety"
        },
        {
          "id": "csp-xss",
          "weight": 0,
          "group": "best-practices-trust-safety"
        },
        {
          "id": "has-hsts",
          "weight": 0,
          "group": "best-practices-trust-safety"
        },
        {
          "id": "origin-isolation",
          "weight": 0,
          "group": "best-practices-trust-safety"
        },
        {
          "id": "clickjacking-mitigation",
          "weight": 0,
          "group": "best-practices-trust-safety"
        },
        {
          "id": "trusted-types-xss",
          "weight": 0,
          "group": "best-practices-trust-safety"
        },
        {
          "id": "paste-preventing-inputs",
          "weight": 3,
          "group": "best-practices-ux"
        },
        {
          "id": "image-aspect-ratio",
          "weight": 1,
          "group": "best-practices-ux"
        },
        {
          "id": "image-size-responsive",
          "weight": 1,
          "group": "best-practices-ux"
        },
        {
          "id": "doctype",
          "weight": 1,
          "group": "best-practices-browser-compat"
        },
        {
          "id": "charset",
          "weight": 1,
          "group": "best-practices-browser-compat"
        },
        {
          "id": "js-libraries",
          "weight": 0,
          "group": "best-practices-general"
        },
        {
          "id": "deprecations",
          "weight": 5,
          "group": "best-practices-general"
        },
        {
          "id": "third-party-cookies",
          "weight": 5,
          "group": "best-practices-general"
        },
        {
          "id": "errors-in-console",
          "weight": 1,
          "group": "best-practices-general"
        },
        {
          "id": "valid-source-maps",
          "weight": 0,
          "group": "best-practices-general"
        },
        {
          "id": "inspector-issues",
          "weight": 1,
          "group": "best-practices-general"
        }
      ],
      "id": "best-practices",
      "score": 0.92
    },
    "seo": {
      "title": "SEO",
      "description": "These checks ensure that your page is following basic search engine optimization advice. There are many additional factors Lighthouse does not score here that may affect your search ranking, including performance on [Core Web Vitals](https://web.dev/explore/vitals). [Learn more about Google Search Essentials](https://support.google.com/webmasters/answer/35769).",
      "manualDescription": "Run these additional validators on your site to check additional SEO best practices.",
      "supportedModes": [
        "navigation",
        "snapshot"
      ],
      "auditRefs": [
        {
          "id": "is-crawlable",
          "weight": 4.043478260869565,
          "group": "seo-crawl"
        },
        {
          "id": "document-title",
          "weight": 1,
          "group": "seo-content"
        },
        {
          "id": "meta-description",
          "weight": 1,
          "group": "seo-content"
        },
        {
          "id": "http-status-code",
          "weight": 1,
          "group": "seo-crawl"
        },
        {
          "id": "link-text",
          "weight": 1,
          "group": "seo-content"
        },
        {
          "id": "crawlable-anchors",
          "weight": 1,
          "group": "seo-crawl"
        },
        {
          "id": "robots-txt",
          "weight": 1,
          "group": "seo-crawl"
        },
        {
          "id": "image-alt",
          "weight": 1,
          "group": "seo-content"
        },
        {
          "id": "hreflang",
          "weight": 1,
          "group": "seo-content"
        },
        {
          "id": "canonical",
          "weight": 1,
          "group": "seo-content"
        },
        {
          "id": "structured-data",
          "weight": 0
        }
      ],
      "id": "seo",
      "score": 0.54
    }
  },
  "categoryGroups": {
    "metrics": {
      "title": "Metrics"
    },
    "insights": {
      "title": "Insights",
      "description": "These insights are also available in the Chrome DevTools Performance Panel - [record a trace](https://developer.chrome.com/docs/devtools/performance/reference) to view more detailed information."
    },
    "diagnostics": {
      "title": "Diagnostics",
      "description": "More information about the performance of your application. These numbers don't [directly affect](https://developer.chrome.com/docs/lighthouse/performance/performance-scoring/) the Performance score."
    },
    "a11y-best-practices": {
      "title": "Best practices",
      "description": "These items highlight common accessibility best practices."
    },
    "a11y-color-contrast": {
      "title": "Contrast",
      "description": "These are opportunities to improve the legibility of your content."
    },
    "a11y-names-labels": {
      "title": "Names and labels",
      "description": "These are opportunities to improve the semantics of the controls in your application. This may enhance the experience for users of assistive technology, like a screen reader."
    },
    "a11y-navigation": {
      "title": "Navigation",
      "description": "These are opportunities to improve keyboard navigation in your application."
    },
    "a11y-aria": {
      "title": "ARIA",
      "description": "These are opportunities to improve the usage of ARIA in your application which may enhance the experience for users of assistive technology, like a screen reader."
    },
    "a11y-language": {
      "title": "Internationalization and localization",
      "description": "These are opportunities to improve the interpretation of your content by users in different locales."
    },
    "a11y-audio-video": {
      "title": "Audio and video",
      "description": "These are opportunities to provide alternative content for audio and video. This may improve the experience for users with hearing or vision impairments."
    },
    "a11y-tables-lists": {
      "title": "Tables and lists",
      "description": "These are opportunities to improve the experience of reading tabular or list data using assistive technology, like a screen reader."
    },
    "seo-mobile": {
      "title": "Mobile Friendly",
      "description": "Make sure your pages are mobile friendly so users don’t have to pinch or zoom in order to read the content pages. [Learn how to make pages mobile-friendly](https://developers.google.com/search/mobile-sites/)."
    },
    "seo-content": {
      "title": "Content Best Practices",
      "description": "Format your HTML in a way that enables crawlers to better understand your app’s content."
    },
    "seo-crawl": {
      "title": "Crawling and Indexing",
      "description": "To appear in search results, crawlers need access to your app."
    },
    "best-practices-trust-safety": {
      "title": "Trust and Safety"
    },
    "best-practices-ux": {
      "title": "User Experience"
    },
    "best-practices-browser-compat": {
      "title": "Browser Compatibility"
    },
    "best-practices-general": {
      "title": "General"
    },
    "hidden": {
      "title": ""
    }
  },
  "stackPacks": [],
  "entities": [
    {
      "name": "dispatch.com",
      "origins": [
        "https://dispatch.com",
        "https://www.dispatch.com",
        "https://eu.dispatch.com",
        "https://user.dispatch.com",
        "https://atoms.dispatch.com"
      ],
      "isFirstParty": true,
      "isUnrecognized": true
    },
    {
      "name": "polyfill-fastly.io",
      "origins": [
        "https://polyfill-fastly.io"
      ],
      "isUnrecognized": true
    },
    {
      "name": "gannettdigital.com",
      "origins": [
        "https://cpt-static.gannettdigital.com"
      ],
      "isUnrecognized": true
    },
    {
      "name": "gannett-cdn.com",
      "origins": [
        "https://www.gannett-cdn.com",
        "https://api.gannett-cdn.com"
      ],
      "isUnrecognized": true
    },
    {
      "name": "Optanon",
      "homepage": "https://www.cookielaw.org/",
      "origins": [
        "https://cdn.cookielaw.org"
      ],
      "category": "consent-provider"
    }
  ],
  "fullPageScreenshot": {
    "screenshot": {
      "data": "data:image/webp;base64,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",
      "width": 412,
      "height": 3723
    },
    "nodes": {
      "page-0-IMG": {
        "id": "",
        "top": 56,
        "bottom": 288,
        "left": 0,
        "right": 412,
        "width": 412,
        "height": 232
      },
      "page-1-IMG": {
        "id": "",
        "top": 1735,
        "bottom": 1840,
        "left": 273,
        "right": 378,
        "width": 104,
        "height": 104
      },
      "page-2-IMG": {
        "id": "",
        "top": 2572,
        "bottom": 2642,
        "left": 144,
        "right": 268,
        "width": 124,
        "height": 70
      },
      "page-3-IMG": {
        "id": "",
        "top": 3205,
        "bottom": 3275,
        "left": 144,
        "right": 268,
        "width": 124,
        "height": 70
      },
      "page-4-IMG": {
        "id": "",
        "top": 3205,
        "bottom": 3275,
        "left": 276,
        "right": 400,
        "width": 124,
        "height": 70
      },
      "page-5-IMG": {
        "id": "",
        "top": 2572,
        "bottom": 2642,
        "left": 276,
        "right": 400,
        "width": 124,
        "height": 70
      },
      "page-6-IMG": {
        "id": "",
        "top": 3205,
        "bottom": 3275,
        "left": 12,
        "right": 136,
        "width": 124,
        "height": 70
      },
      "page-7-IMG": {
        "id": "",
        "top": 2572,
        "bottom": 2642,
        "left": 12,
        "right": 136,
        "width": 124,
        "height": 70
      },
      "page-8-IMG": {
        "id": "",
        "top": 382,
        "bottom": 575,
        "left": 34,
        "right": 378,
        "width": 343,
        "height": 193
      },
      "page-9-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "page-10-META": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "page-11-DIV": {
        "id": "section-stories",
        "top": 884,
        "bottom": 2209,
        "left": 0,
        "right": 412,
        "width": 412,
        "height": 1325
      },
      "page-12-path": {
        "id": "",
        "top": 3278,
        "bottom": 3294,
        "left": 20,
        "right": 42,
        "width": 21,
        "height": 16
      },
      "1-0-H5": {
        "id": "",
        "top": 2244,
        "bottom": 2264,
        "left": 0,
        "right": 193,
        "width": 193,
        "height": 20
      },
      "1-1-IMG": {
        "id": "",
        "top": 2572,
        "bottom": 2642,
        "left": 12,
        "right": 136,
        "width": 124,
        "height": 70
      },
      "1-2-IMG": {
        "id": "",
        "top": 2572,
        "bottom": 2642,
        "left": 144,
        "right": 268,
        "width": 124,
        "height": 70
      },
      "1-3-IMG": {
        "id": "",
        "top": 2572,
        "bottom": 2642,
        "left": 276,
        "right": 400,
        "width": 124,
        "height": 70
      },
      "1-4-IMG": {
        "id": "",
        "top": 2801,
        "bottom": 2871,
        "left": 12,
        "right": 136,
        "width": 124,
        "height": 70
      },
      "1-5-IMG": {
        "id": "",
        "top": 2801,
        "bottom": 2871,
        "left": 144,
        "right": 268,
        "width": 124,
        "height": 70
      },
      "1-6-IMG": {
        "id": "",
        "top": 2801,
        "bottom": 2871,
        "left": 276,
        "right": 400,
        "width": 124,
        "height": 70
      },
      "1-7-IMG": {
        "id": "",
        "top": 2805,
        "bottom": 2875,
        "left": 12,
        "right": 136,
        "width": 124,
        "height": 70
      },
      "1-8-IMG": {
        "id": "",
        "top": 2805,
        "bottom": 2875,
        "left": 144,
        "right": 268,
        "width": 124,
        "height": 70
      },
      "1-9-IMG": {
        "id": "",
        "top": 2805,
        "bottom": 2875,
        "left": 276,
        "right": 400,
        "width": 124,
        "height": 70
      },
      "1-10-IMG": {
        "id": "",
        "top": 3205,
        "bottom": 3275,
        "left": 12,
        "right": 136,
        "width": 124,
        "height": 70
      },
      "1-11-IMG": {
        "id": "",
        "top": 3205,
        "bottom": 3275,
        "left": 144,
        "right": 268,
        "width": 124,
        "height": 70
      },
      "1-12-IMG": {
        "id": "",
        "top": 3205,
        "bottom": 3275,
        "left": 276,
        "right": 400,
        "width": 124,
        "height": 70
      },
      "1-13-IMG": {
        "id": "",
        "top": 3434,
        "bottom": 3504,
        "left": 12,
        "right": 136,
        "width": 124,
        "height": 70
      },
      "1-14-IMG": {
        "id": "",
        "top": 3434,
        "bottom": 3504,
        "left": 144,
        "right": 268,
        "width": 124,
        "height": 70
      },
      "1-15-IMG": {
        "id": "",
        "top": 3434,
        "bottom": 3504,
        "left": 276,
        "right": 400,
        "width": 124,
        "height": 70
      },
      "1-16-IMG": {
        "id": "",
        "top": 3438,
        "bottom": 3508,
        "left": 12,
        "right": 136,
        "width": 124,
        "height": 70
      },
      "1-17-IMG": {
        "id": "",
        "top": 3438,
        "bottom": 3508,
        "left": 144,
        "right": 268,
        "width": 124,
        "height": 70
      },
      "1-18-IMG": {
        "id": "",
        "top": 3438,
        "bottom": 3508,
        "left": 276,
        "right": 400,
        "width": 124,
        "height": 70
      },
      "1-19-IMG": {
        "id": "",
        "top": 56,
        "bottom": 288,
        "left": 0,
        "right": 412,
        "width": 412,
        "height": 232
      },
      "1-20-IMG": {
        "id": "",
        "top": 382,
        "bottom": 575,
        "left": 34,
        "right": 378,
        "width": 343,
        "height": 193
      },
      "1-21-IMG": {
        "id": "",
        "top": 624,
        "bottom": 819,
        "left": 34,
        "right": 378,
        "width": 343,
        "height": 195
      },
      "1-22-HTML": {
        "id": "",
        "top": 0,
        "bottom": 3723,
        "left": 0,
        "right": 412,
        "width": 412,
        "height": 3723
      },
      "1-23-A": {
        "id": "skipToMain",
        "top": 10,
        "bottom": 28,
        "left": -999,
        "right": -866,
        "width": 133,
        "height": 18
      },
      "1-24-INPUT": {
        "id": "",
        "top": 109,
        "bottom": 165,
        "left": -362,
        "right": -74,
        "width": 287,
        "height": 56
      },
      "1-25-DIV": {
        "id": "",
        "top": 268,
        "bottom": 314,
        "left": 34,
        "right": 318,
        "width": 283,
        "height": 46
      },
      "1-26-A": {
        "id": "logoContainer",
        "top": 12,
        "bottom": 44,
        "left": 60,
        "right": 200,
        "width": 140,
        "height": 32
      },
      "1-27-A": {
        "id": "homeLink",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-28-A": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-29-A": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-30-A": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-31-A": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-32-A": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-33-A": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-34-A": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-35-A": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-36-A": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-37-A": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-38-A": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-39-A": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-40-A": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-41-A": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-42-A": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-43-A": {
        "id": "hubLogo",
        "top": 32,
        "bottom": 77,
        "left": -378,
        "right": -181,
        "width": 197,
        "height": 45
      },
      "1-44-A": {
        "id": "",
        "top": 236,
        "bottom": 293,
        "left": -378,
        "right": -34,
        "width": 343,
        "height": 57
      },
      "1-45-A": {
        "id": "",
        "top": 309,
        "bottom": 367,
        "left": -378,
        "right": -34,
        "width": 343,
        "height": 57
      },
      "1-46-A": {
        "id": "",
        "top": 56,
        "bottom": 327,
        "left": 0,
        "right": 412,
        "width": 412,
        "height": 271
      },
      "1-47-A": {
        "id": "",
        "top": 382,
        "bottom": 600,
        "left": 34,
        "right": 378,
        "width": 343,
        "height": 218
      },
      "1-48-A": {
        "id": "",
        "top": 624,
        "bottom": 844,
        "left": 34,
        "right": 378,
        "width": 343,
        "height": 220
      },
      "1-49-A": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-50-A": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-51-A": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-52-A": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-53-A": {
        "id": "",
        "top": 892,
        "bottom": 996,
        "left": 34,
        "right": 378,
        "width": 343,
        "height": 104
      },
      "1-54-A": {
        "id": "",
        "top": 1012,
        "bottom": 1117,
        "left": 34,
        "right": 378,
        "width": 343,
        "height": 104
      },
      "1-55-A": {
        "id": "",
        "top": 1133,
        "bottom": 1237,
        "left": 34,
        "right": 378,
        "width": 343,
        "height": 104
      },
      "1-56-A": {
        "id": "",
        "top": 1253,
        "bottom": 1358,
        "left": 34,
        "right": 378,
        "width": 343,
        "height": 104
      },
      "1-57-A": {
        "id": "",
        "top": 1374,
        "bottom": 1478,
        "left": 34,
        "right": 378,
        "width": 343,
        "height": 104
      },
      "1-58-A": {
        "id": "",
        "top": 1494,
        "bottom": 1599,
        "left": 34,
        "right": 378,
        "width": 343,
        "height": 104
      },
      "1-59-A": {
        "id": "",
        "top": 1615,
        "bottom": 1719,
        "left": 34,
        "right": 378,
        "width": 343,
        "height": 104
      },
      "1-60-A": {
        "id": "",
        "top": 1735,
        "bottom": 1840,
        "left": 34,
        "right": 378,
        "width": 343,
        "height": 104
      },
      "1-61-A": {
        "id": "",
        "top": 1856,
        "bottom": 1960,
        "left": 34,
        "right": 378,
        "width": 343,
        "height": 104
      },
      "1-62-A": {
        "id": "",
        "top": 1976,
        "bottom": 2080,
        "left": 34,
        "right": 378,
        "width": 343,
        "height": 104
      },
      "1-63-A": {
        "id": "",
        "top": 2096,
        "bottom": 2201,
        "left": 34,
        "right": 378,
        "width": 343,
        "height": 104
      },
      "1-64-A": {
        "id": "",
        "top": 2225,
        "bottom": 2277,
        "left": 0,
        "right": 412,
        "width": 412,
        "height": 52
      },
      "1-65-A": {
        "id": "",
        "top": 2277,
        "bottom": 2571,
        "left": 0,
        "right": 412,
        "width": 412,
        "height": 295
      },
      "1-66-A": {
        "id": "",
        "top": 2572,
        "bottom": 2797,
        "left": 12,
        "right": 136,
        "width": 124,
        "height": 225
      },
      "1-67-A": {
        "id": "",
        "top": 2572,
        "bottom": 2797,
        "left": 144,
        "right": 268,
        "width": 124,
        "height": 225
      },
      "1-68-A": {
        "id": "",
        "top": 2572,
        "bottom": 2797,
        "left": 276,
        "right": 400,
        "width": 124,
        "height": 225
      },
      "1-69-A": {
        "id": "",
        "top": 2801,
        "bottom": 3021,
        "left": 12,
        "right": 136,
        "width": 124,
        "height": 220
      },
      "1-70-A": {
        "id": "",
        "top": 2801,
        "bottom": 3021,
        "left": 144,
        "right": 268,
        "width": 124,
        "height": 220
      },
      "1-71-A": {
        "id": "",
        "top": 2801,
        "bottom": 3021,
        "left": 276,
        "right": 400,
        "width": 124,
        "height": 220
      },
      "1-72-A": {
        "id": "",
        "top": 2805,
        "bottom": 3025,
        "left": 12,
        "right": 136,
        "width": 124,
        "height": 220
      },
      "1-73-A": {
        "id": "",
        "top": 2805,
        "bottom": 3025,
        "left": 144,
        "right": 268,
        "width": 124,
        "height": 220
      },
      "1-74-A": {
        "id": "",
        "top": 2805,
        "bottom": 3025,
        "left": 276,
        "right": 400,
        "width": 124,
        "height": 220
      },
      "1-75-A": {
        "id": "",
        "top": 2812,
        "bottom": 2840,
        "left": 72,
        "right": 340,
        "width": 267,
        "height": 28
      },
      "1-76-A": {
        "id": "",
        "top": 2856,
        "bottom": 2908,
        "left": 0,
        "right": 412,
        "width": 412,
        "height": 52
      },
      "1-77-A": {
        "id": "",
        "top": 2908,
        "bottom": 3204,
        "left": 0,
        "right": 412,
        "width": 412,
        "height": 295
      },
      "1-78-A": {
        "id": "",
        "top": 3205,
        "bottom": 3430,
        "left": 12,
        "right": 136,
        "width": 124,
        "height": 225
      },
      "1-79-A": {
        "id": "",
        "top": 3205,
        "bottom": 3430,
        "left": 144,
        "right": 268,
        "width": 124,
        "height": 225
      },
      "1-80-A": {
        "id": "",
        "top": 3205,
        "bottom": 3430,
        "left": 276,
        "right": 400,
        "width": 124,
        "height": 225
      },
      "1-81-A": {
        "id": "",
        "top": 3434,
        "bottom": 3654,
        "left": 12,
        "right": 136,
        "width": 124,
        "height": 220
      },
      "1-82-A": {
        "id": "",
        "top": 3434,
        "bottom": 3654,
        "left": 144,
        "right": 268,
        "width": 124,
        "height": 220
      },
      "1-83-A": {
        "id": "",
        "top": 3434,
        "bottom": 3654,
        "left": 276,
        "right": 400,
        "width": 124,
        "height": 220
      },
      "1-84-A": {
        "id": "",
        "top": 3438,
        "bottom": 3658,
        "left": 12,
        "right": 136,
        "width": 124,
        "height": 220
      },
      "1-85-A": {
        "id": "",
        "top": 3438,
        "bottom": 3658,
        "left": 144,
        "right": 268,
        "width": 124,
        "height": 220
      },
      "1-86-A": {
        "id": "",
        "top": 3438,
        "bottom": 3658,
        "left": 276,
        "right": 400,
        "width": 124,
        "height": 220
      },
      "1-87-A": {
        "id": "",
        "top": 3445,
        "bottom": 3473,
        "left": 65,
        "right": 347,
        "width": 281,
        "height": 28
      },
      "1-88-A": {
        "id": "",
        "top": 3529,
        "bottom": 3547,
        "left": 26,
        "right": 69,
        "width": 43,
        "height": 18
      },
      "1-89-A": {
        "id": "",
        "top": 3529,
        "bottom": 3547,
        "left": 76,
        "right": 198,
        "width": 123,
        "height": 18
      },
      "1-90-A": {
        "id": "",
        "top": 3557,
        "bottom": 3575,
        "left": 26,
        "right": 256,
        "width": 230,
        "height": 18
      },
      "1-91-A": {
        "id": "",
        "top": 3557,
        "bottom": 3575,
        "left": 263,
        "right": 366,
        "width": 102,
        "height": 18
      },
      "1-92-A": {
        "id": "",
        "top": 3585,
        "bottom": 3603,
        "left": 26,
        "right": 96,
        "width": 70,
        "height": 18
      },
      "1-93-A": {
        "id": "",
        "top": 3585,
        "bottom": 3603,
        "left": 103,
        "right": 198,
        "width": 95,
        "height": 18
      },
      "1-94-A": {
        "id": "",
        "top": 3585,
        "bottom": 3603,
        "left": 205,
        "right": 358,
        "width": 153,
        "height": 18
      },
      "1-95-A": {
        "id": "",
        "top": 3613,
        "bottom": 3631,
        "left": 26,
        "right": 192,
        "width": 166,
        "height": 18
      },
      "1-96-A": {
        "id": "",
        "top": 3613,
        "bottom": 3631,
        "left": 199,
        "right": 375,
        "width": 177,
        "height": 18
      },
      "1-97-LABEL": {
        "id": "",
        "top": 109,
        "bottom": 165,
        "left": -378,
        "right": -58,
        "width": 319,
        "height": 56
      },
      "1-98-IMG": {
        "id": "logo",
        "top": 12,
        "bottom": 44,
        "left": 60,
        "right": 200,
        "width": 140,
        "height": 32
      },
      "1-99-IMG": {
        "id": "sidebarLogo",
        "top": 32,
        "bottom": 77,
        "left": -378,
        "right": -181,
        "width": 197,
        "height": 45
      },
      "1-100-IMG": {
        "id": "",
        "top": 892,
        "bottom": 996,
        "left": 273,
        "right": 378,
        "width": 104,
        "height": 104
      },
      "1-101-IMG": {
        "id": "",
        "top": 1012,
        "bottom": 1117,
        "left": 273,
        "right": 378,
        "width": 104,
        "height": 104
      },
      "1-102-IMG": {
        "id": "",
        "top": 1133,
        "bottom": 1237,
        "left": 273,
        "right": 378,
        "width": 104,
        "height": 104
      },
      "1-103-IMG": {
        "id": "",
        "top": 1253,
        "bottom": 1358,
        "left": 273,
        "right": 378,
        "width": 104,
        "height": 104
      },
      "1-104-IMG": {
        "id": "",
        "top": 1374,
        "bottom": 1478,
        "left": 273,
        "right": 378,
        "width": 104,
        "height": 104
      },
      "1-105-IMG": {
        "id": "",
        "top": 1494,
        "bottom": 1599,
        "left": 273,
        "right": 378,
        "width": 104,
        "height": 104
      },
      "1-106-IMG": {
        "id": "",
        "top": 1615,
        "bottom": 1719,
        "left": 273,
        "right": 378,
        "width": 104,
        "height": 104
      },
      "1-107-IMG": {
        "id": "",
        "top": 1735,
        "bottom": 1840,
        "left": 273,
        "right": 378,
        "width": 104,
        "height": 104
      },
      "1-108-IMG": {
        "id": "",
        "top": 1856,
        "bottom": 1960,
        "left": 273,
        "right": 378,
        "width": 104,
        "height": 104
      },
      "1-109-IMG": {
        "id": "",
        "top": 1976,
        "bottom": 2080,
        "left": 273,
        "right": 378,
        "width": 104,
        "height": 104
      },
      "1-110-IMG": {
        "id": "",
        "top": 2096,
        "bottom": 2201,
        "left": 273,
        "right": 378,
        "width": 104,
        "height": 104
      },
      "1-111-IMG": {
        "id": "",
        "top": 2277,
        "bottom": 2508,
        "left": 0,
        "right": 412,
        "width": 412,
        "height": 232
      },
      "1-112-IMG": {
        "id": "",
        "top": 2908,
        "bottom": 3141,
        "left": 0,
        "right": 412,
        "width": 412,
        "height": 232
      },
      "1-113-DIV": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-114-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-115-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-116-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-117-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-118-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-119-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-120-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-121-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-122-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-123-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-124-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-125-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-126-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-127-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-128-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-129-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-130-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-131-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-132-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-133-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-134-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-135-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-136-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-137-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-138-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-139-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-140-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-141-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-142-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-143-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-144-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-145-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-146-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-147-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-148-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-149-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-150-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-151-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-152-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-153-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-154-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-155-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-156-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-157-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-158-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-159-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-160-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-161-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-162-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-163-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-164-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-165-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-166-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-167-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-168-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-169-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-170-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-171-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-172-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-173-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-174-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-175-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-176-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-177-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-178-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-179-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-180-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-181-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-182-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-183-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-184-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-185-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-186-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-187-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-188-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-189-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-190-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-191-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-192-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-193-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-194-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-195-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-196-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-197-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-198-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-199-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-200-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-201-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-202-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-203-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-204-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-205-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-206-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-207-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-208-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-209-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-210-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-211-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-212-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-213-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-214-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-215-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-216-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-217-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-218-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-219-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-220-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-221-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-222-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-223-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-224-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-225-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-226-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-227-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-228-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-229-META": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-230-META": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-231-META": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-232-META": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-233-META": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-234-META": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-235-META": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-236-META": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-237-META": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-238-META": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      }
    }
  },
  "timing": {
    "entries": [
      {
        "startTime": 1454.51,
        "name": "lh:config",
        "duration": 450.61,
        "entryType": "measure"
      },
      {
        "startTime": 1456.74,
        "name": "lh:config:resolveArtifactsToDefns",
        "duration": 40.09,
        "entryType": "measure"
      },
      {
        "startTime": 1905.38,
        "name": "lh:runner:gather",
        "duration": 9639.48,
        "entryType": "measure"
      },
      {
        "startTime": 2014.74,
        "name": "lh:driver:connect",
        "duration": 7.54,
        "entryType": "measure"
      },
      {
        "startTime": 2022.6,
        "name": "lh:driver:navigate",
        "duration": 7.09,
        "entryType": "measure"
      },
      {
        "startTime": 2030.06,
        "name": "lh:gather:getBenchmarkIndex",
        "duration": 1008.64,
        "entryType": "measure"
      },
      {
        "startTime": 3039.1,
        "name": "lh:gather:getVersion",
        "duration": 1.34,
        "entryType": "measure"
      },
      {
        "startTime": 3040.6,
        "name": "lh:gather:getDevicePixelRatio",
        "duration": 1.46,
        "entryType": "measure"
      },
      {
        "startTime": 3042.52,
        "name": "lh:prepare:navigationMode",
        "duration": 32.34,
        "entryType": "measure"
      },
      {
        "startTime": 3043.79,
        "name": "lh:gather:getVersion",
        "duration": 0.63,
        "entryType": "measure"
      },
      {
        "startTime": 3063.92,
        "name": "lh:storage:clearDataForOrigin",
        "duration": 3.47,
        "entryType": "measure"
      },
      {
        "startTime": 3067.68,
        "name": "lh:storage:clearBrowserCaches",
        "duration": 4.5,
        "entryType": "measure"
      },
      {
        "startTime": 3073.24,
        "name": "lh:gather:prepareThrottlingAndNetwork",
        "duration": 1.51,
        "entryType": "measure"
      },
      {
        "startTime": 3105.07,
        "name": "lh:driver:navigate",
        "duration": 4676.32,
        "entryType": "measure"
      },
      {
        "startTime": 8277.72,
        "name": "lh:computed:NetworkRecords",
        "duration": 8.31,
        "entryType": "measure"
      },
      {
        "startTime": 8286.71,
        "name": "lh:gather:getArtifact:DevtoolsLog",
        "duration": 0.04,
        "entryType": "measure"
      },
      {
        "startTime": 8286.85,
        "name": "lh:gather:getArtifact:Trace",
        "duration": 0.03,
        "entryType": "measure"
      },
      {
        "startTime": 8286.89,
        "name": "lh:gather:getArtifact:Accessibility",
        "duration": 520.82,
        "entryType": "measure"
      },
      {
        "startTime": 8807.9,
        "name": "lh:gather:getArtifact:AnchorElements",
        "duration": 124.89,
        "entryType": "measure"
      },
      {
        "startTime": 8932.85,
        "name": "lh:gather:getArtifact:ConsoleMessages",
        "duration": 0.14,
        "entryType": "measure"
      },
      {
        "startTime": 8933.02,
        "name": "lh:gather:getArtifact:CSSUsage",
        "duration": 49.2,
        "entryType": "measure"
      },
      {
        "startTime": 8982.29,
        "name": "lh:gather:getArtifact:Doctype",
        "duration": 3.07,
        "entryType": "measure"
      },
      {
        "startTime": 8985.44,
        "name": "lh:gather:getArtifact:Inputs",
        "duration": 7.08,
        "entryType": "measure"
      },
      {
        "startTime": 8992.58,
        "name": "lh:gather:getArtifact:ImageElements",
        "duration": 260.53,
        "entryType": "measure"
      },
      {
        "startTime": 9253.42,
        "name": "lh:gather:getArtifact:InspectorIssues",
        "duration": 0.33,
        "entryType": "measure"
      },
      {
        "startTime": 9253.77,
        "name": "lh:gather:getArtifact:JsUsage",
        "duration": 0.13,
        "entryType": "measure"
      },
      {
        "startTime": 9253.94,
        "name": "lh:gather:getArtifact:LinkElements",
        "duration": 20.43,
        "entryType": "measure"
      },
      {
        "startTime": 9273.88,
        "name": "lh:computed:MainResource",
        "duration": 0.25,
        "entryType": "measure"
      },
      {
        "startTime": 9274.5,
        "name": "lh:gather:getArtifact:MainDocumentContent",
        "duration": 5.92,
        "entryType": "measure"
      },
      {
        "startTime": 9280.46,
        "name": "lh:gather:getArtifact:MetaElements",
        "duration": 6.9,
        "entryType": "measure"
      },
      {
        "startTime": 9287.52,
        "name": "lh:gather:getArtifact:NetworkUserAgent",
        "duration": 0.22,
        "entryType": "measure"
      },
      {
        "startTime": 9287.78,
        "name": "lh:gather:getArtifact:RobotsTxt",
        "duration": 11.81,
        "entryType": "measure"
      },
      {
        "startTime": 9299.66,
        "name": "lh:gather:getArtifact:Scripts",
        "duration": 0.47,
        "entryType": "measure"
      },
      {
        "startTime": 9300.2,
        "name": "lh:gather:getArtifact:SourceMaps",
        "duration": 175.78,
        "entryType": "measure"
      },
      {
        "startTime": 9476.03,
        "name": "lh:gather:getArtifact:Stacks",
        "duration": 16.23,
        "entryType": "measure"
      },
      {
        "startTime": 9476.29,
        "name": "lh:gather:collectStacks",
        "duration": 15.93,
        "entryType": "measure"
      },
      {
        "startTime": 9492.29,
        "name": "lh:gather:getArtifact:Stylesheets",
        "duration": 27.23,
        "entryType": "measure"
      },
      {
        "startTime": 9519.69,
        "name": "lh:gather:getArtifact:TraceElements",
        "duration": 546.13,
        "entryType": "measure"
      },
      {
        "startTime": 9519.93,
        "name": "lh:computed:TraceEngineResult",
        "duration": 501.97,
        "entryType": "measure"
      },
      {
        "startTime": 9520.05,
        "name": "lh:computed:ProcessedTrace",
        "duration": 38.37,
        "entryType": "measure"
      },
      {
        "startTime": 9561.24,
        "name": "lh:computed:TraceEngineResult:total",
        "duration": 454.1,
        "entryType": "measure"
      },
      {
        "startTime": 9561.28,
        "name": "lh:computed:TraceEngineResult:parse",
        "duration": 242.11,
        "entryType": "measure"
      },
      {
        "startTime": 9562.37,
        "name": "lh:computed:TraceEngineResult:parse:handleEvent",
        "duration": 133.74,
        "entryType": "measure"
      },
      {
        "startTime": 9696.18,
        "name": "lh:computed:TraceEngineResult:parse:Meta:finalize",
        "duration": 2.35,
        "entryType": "measure"
      },
      {
        "startTime": 9699.05,
        "name": "lh:computed:TraceEngineResult:parse:AnimationFrames:finalize",
        "duration": 1.18,
        "entryType": "measure"
      },
      {
        "startTime": 9700.29,
        "name": "lh:computed:TraceEngineResult:parse:Animations:finalize",
        "duration": 0.44,
        "entryType": "measure"
      },
      {
        "startTime": 9700.76,
        "name": "lh:computed:TraceEngineResult:parse:Samples:finalize",
        "duration": 0.95,
        "entryType": "measure"
      },
      {
        "startTime": 9701.74,
        "name": "lh:computed:TraceEngineResult:parse:AuctionWorklets:finalize",
        "duration": 0.87,
        "entryType": "measure"
      },
      {
        "startTime": 9702.65,
        "name": "lh:computed:TraceEngineResult:parse:NetworkRequests:finalize",
        "duration": 8.87,
        "entryType": "measure"
      },
      {
        "startTime": 9711.58,
        "name": "lh:computed:TraceEngineResult:parse:Renderer:finalize",
        "duration": 30.8,
        "entryType": "measure"
      },
      {
        "startTime": 9742.47,
        "name": "lh:computed:TraceEngineResult:parse:Flows:finalize",
        "duration": 11.42,
        "entryType": "measure"
      },
      {
        "startTime": 9753.97,
        "name": "lh:computed:TraceEngineResult:parse:AsyncJSCalls:finalize",
        "duration": 1.22,
        "entryType": "measure"
      },
      {
        "startTime": 9755.26,
        "name": "lh:computed:TraceEngineResult:parse:DOMStats:finalize",
        "duration": 1.21,
        "entryType": "measure"
      },
      {
        "startTime": 9756.52,
        "name": "lh:computed:TraceEngineResult:parse:UserTimings:finalize",
        "duration": 1.25,
        "entryType": "measure"
      },
      {
        "startTime": 9757.81,
        "name": "lh:computed:TraceEngineResult:parse:ExtensionTraceData:finalize",
        "duration": 1.86,
        "entryType": "measure"
      },
      {
        "startTime": 9759.72,
        "name": "lh:computed:TraceEngineResult:parse:LayerTree:finalize",
        "duration": 1.88,
        "entryType": "measure"
      },
      {
        "startTime": 9761.62,
        "name": "lh:computed:TraceEngineResult:parse:Frames:finalize",
        "duration": 8.53,
        "entryType": "measure"
      },
      {
        "startTime": 9770.21,
        "name": "lh:computed:TraceEngineResult:parse:GPU:finalize",
        "duration": 1.29,
        "entryType": "measure"
      },
      {
        "startTime": 9771.54,
        "name": "lh:computed:TraceEngineResult:parse:ImagePainting:finalize",
        "duration": 1.8,
        "entryType": "measure"
      },
      {
        "startTime": 9773.37,
        "name": "lh:computed:TraceEngineResult:parse:Initiators:finalize",
        "duration": 1.84,
        "entryType": "measure"
      },
      {
        "startTime": 9775.24,
        "name": "lh:computed:TraceEngineResult:parse:Invalidations:finalize",
        "duration": 1.3,
        "entryType": "measure"
      },
      {
        "startTime": 9776.58,
        "name": "lh:computed:TraceEngineResult:parse:PageLoadMetrics:finalize",
        "duration": 2.71,
        "entryType": "measure"
      },
      {
        "startTime": 9779.38,
        "name": "lh:computed:TraceEngineResult:parse:LargestImagePaint:finalize",
        "duration": 1.4,
        "entryType": "measure"
      },
      {
        "startTime": 9780.8,
        "name": "lh:computed:TraceEngineResult:parse:LargestTextPaint:finalize",
        "duration": 1.22,
        "entryType": "measure"
      },
      {
        "startTime": 9782.06,
        "name": "lh:computed:TraceEngineResult:parse:Screenshots:finalize",
        "duration": 7.08,
        "entryType": "measure"
      },
      {
        "startTime": 9789.19,
        "name": "lh:computed:TraceEngineResult:parse:LayoutShifts:finalize",
        "duration": 1.89,
        "entryType": "measure"
      },
      {
        "startTime": 9791.1,
        "name": "lh:computed:TraceEngineResult:parse:Memory:finalize",
        "duration": 1.21,
        "entryType": "measure"
      },
      {
        "startTime": 9792.34,
        "name": "lh:computed:TraceEngineResult:parse:PageFrames:finalize",
        "duration": 1.17,
        "entryType": "measure"
      },
      {
        "startTime": 9793.53,
        "name": "lh:computed:TraceEngineResult:parse:Scripts:finalize",
        "duration": 3.22,
        "entryType": "measure"
      },
      {
        "startTime": 9796.81,
        "name": "lh:computed:TraceEngineResult:parse:SelectorStats:finalize",
        "duration": 1.19,
        "entryType": "measure"
      },
      {
        "startTime": 9798.03,
        "name": "lh:computed:TraceEngineResult:parse:UserInteractions:finalize",
        "duration": 1.87,
        "entryType": "measure"
      },
      {
        "startTime": 9800.1,
        "name": "lh:computed:TraceEngineResult:parse:Workers:finalize",
        "duration": 1.25,
        "entryType": "measure"
      },
      {
        "startTime": 9801.42,
        "name": "lh:computed:TraceEngineResult:parse:Warnings:finalize",
        "duration": 1.34,
        "entryType": "measure"
      },
      {
        "startTime": 9802.79,
        "name": "lh:computed:TraceEngineResult:parse:handler.data()",
        "duration": 0.56,
        "entryType": "measure"
      },
      {
        "startTime": 9803.39,
        "name": "lh:computed:TraceEngineResult:insights",
        "duration": 211.94,
        "entryType": "measure"
      },
      {
        "startTime": 9803.91,
        "name": "lh:computed:TraceEngineResult:insights:CLSCulprits",
        "duration": 0.74,
        "entryType": "measure"
      },
      {
        "startTime": 9804.67,
        "name": "lh:computed:TraceEngineResult:insights:Cache",
        "duration": 0.33,
        "entryType": "measure"
      },
      {
        "startTime": 9805.01,
        "name": "lh:computed:TraceEngineResult:insights:DOMSize",
        "duration": 0.43,
        "entryType": "measure"
      },
      {
        "startTime": 9805.46,
        "name": "lh:computed:TraceEngineResult:insights:DocumentLatency",
        "duration": 0.2,
        "entryType": "measure"
      },
      {
        "startTime": 9805.68,
        "name": "lh:computed:TraceEngineResult:insights:DuplicatedJavaScript",
        "duration": 0.67,
        "entryType": "measure"
      },
      {
        "startTime": 9806.37,
        "name": "lh:computed:TraceEngineResult:insights:FontDisplay",
        "duration": 0.22,
        "entryType": "measure"
      },
      {
        "startTime": 9806.61,
        "name": "lh:computed:TraceEngineResult:insights:ForcedReflow",
        "duration": 0.24,
        "entryType": "measure"
      },
      {
        "startTime": 9806.87,
        "name": "lh:computed:TraceEngineResult:insights:INPBreakdown",
        "duration": 0.15,
        "entryType": "measure"
      },
      {
        "startTime": 9807.03,
        "name": "lh:computed:TraceEngineResult:insights:ImageDelivery",
        "duration": 0.3,
        "entryType": "measure"
      },
      {
        "startTime": 9807.35,
        "name": "lh:computed:TraceEngineResult:insights:LCPBreakdown",
        "duration": 0.19,
        "entryType": "measure"
      },
      {
        "startTime": 9807.56,
        "name": "lh:computed:TraceEngineResult:insights:LCPDiscovery",
        "duration": 0.23,
        "entryType": "measure"
      },
      {
        "startTime": 9807.81,
        "name": "lh:computed:TraceEngineResult:insights:LegacyJavaScript",
        "duration": 0.32,
        "entryType": "measure"
      },
      {
        "startTime": 9808.14,
        "name": "lh:computed:TraceEngineResult:insights:ModernHTTP",
        "duration": 0.33,
        "entryType": "measure"
      },
      {
        "startTime": 9808.49,
        "name": "lh:computed:TraceEngineResult:insights:NetworkDependencyTree",
        "duration": 0.17,
        "entryType": "measure"
      },
      {
        "startTime": 9808.68,
        "name": "lh:computed:TraceEngineResult:insights:RenderBlocking",
        "duration": 0.16,
        "entryType": "measure"
      },
      {
        "startTime": 9808.85,
        "name": "lh:computed:TraceEngineResult:insights:SlowCSSSelector",
        "duration": 0.23,
        "entryType": "measure"
      },
      {
        "startTime": 9809.1,
        "name": "lh:computed:TraceEngineResult:insights:ThirdParties",
        "duration": 0.13,
        "entryType": "measure"
      },
      {
        "startTime": 9809.26,
        "name": "lh:computed:TraceEngineResult:insights:Viewport",
        "duration": 0.18,
        "entryType": "measure"
      },
      {
        "startTime": 9809.58,
        "name": "lh:computed:TraceEngineResult:insights:createLanternContext",
        "duration": 57.3,
        "entryType": "measure"
      },
      {
        "startTime": 9866.98,
        "name": "lh:computed:TraceEngineResult:insights:CLSCulprits",
        "duration": 0.27,
        "entryType": "measure"
      },
      {
        "startTime": 9867.27,
        "name": "lh:computed:TraceEngineResult:insights:Cache",
        "duration": 11.14,
        "entryType": "measure"
      },
      {
        "startTime": 9878.44,
        "name": "lh:computed:TraceEngineResult:insights:DOMSize",
        "duration": 0.23,
        "entryType": "measure"
      },
      {
        "startTime": 9878.68,
        "name": "lh:computed:TraceEngineResult:insights:DocumentLatency",
        "duration": 0.51,
        "entryType": "measure"
      },
      {
        "startTime": 9879.22,
        "name": "lh:computed:TraceEngineResult:insights:DuplicatedJavaScript",
        "duration": 33.37,
        "entryType": "measure"
      },
      {
        "startTime": 9912.64,
        "name": "lh:computed:TraceEngineResult:insights:FontDisplay",
        "duration": 0.14,
        "entryType": "measure"
      },
      {
        "startTime": 9912.91,
        "name": "lh:computed:TraceEngineResult:insights:ForcedReflow",
        "duration": 0.05,
        "entryType": "measure"
      },
      {
        "startTime": 9912.97,
        "name": "lh:computed:TraceEngineResult:insights:INPBreakdown",
        "duration": 0.02,
        "entryType": "measure"
      },
      {
        "startTime": 9912.99,
        "name": "lh:computed:TraceEngineResult:insights:ImageDelivery",
        "duration": 5.52,
        "entryType": "measure"
      },
      {
        "startTime": 9918.55,
        "name": "lh:computed:TraceEngineResult:insights:LCPBreakdown",
        "duration": 0.32,
        "entryType": "measure"
      },
      {
        "startTime": 9918.89,
        "name": "lh:computed:TraceEngineResult:insights:LCPDiscovery",
        "duration": 0.1,
        "entryType": "measure"
      },
      {
        "startTime": 9919,
        "name": "lh:computed:TraceEngineResult:insights:LegacyJavaScript",
        "duration": 84.28,
        "entryType": "measure"
      },
      {
        "startTime": 10003.33,
        "name": "lh:computed:TraceEngineResult:insights:ModernHTTP",
        "duration": 5.81,
        "entryType": "measure"
      },
      {
        "startTime": 10009.18,
        "name": "lh:computed:TraceEngineResult:insights:NetworkDependencyTree",
        "duration": 3.64,
        "entryType": "measure"
      },
      {
        "startTime": 10012.85,
        "name": "lh:computed:TraceEngineResult:insights:RenderBlocking",
        "duration": 1.28,
        "entryType": "measure"
      },
      {
        "startTime": 10014.16,
        "name": "lh:computed:TraceEngineResult:insights:SlowCSSSelector",
        "duration": 0.03,
        "entryType": "measure"
      },
      {
        "startTime": 10014.19,
        "name": "lh:computed:TraceEngineResult:insights:ThirdParties",
        "duration": 0.09,
        "entryType": "measure"
      },
      {
        "startTime": 10014.3,
        "name": "lh:computed:TraceEngineResult:insights:Viewport",
        "duration": 0.05,
        "entryType": "measure"
      },
      {
        "startTime": 10024.43,
        "name": "lh:computed:CumulativeLayoutShift",
        "duration": 9.88,
        "entryType": "measure"
      },
      {
        "startTime": 10065.86,
        "name": "lh:gather:getArtifact:ViewportDimensions",
        "duration": 1.49,
        "entryType": "measure"
      },
      {
        "startTime": 10067.38,
        "name": "lh:gather:getArtifact:FullPageScreenshot",
        "duration": 1202.86,
        "entryType": "measure"
      },
      {
        "startTime": 11259.65,
        "name": "lh:gather:getVersion",
        "duration": 1.23,
        "entryType": "measure"
      },
      {
        "startTime": 11270.33,
        "name": "lh:gather:getArtifact:BFCacheFailures",
        "duration": 238.04,
        "entryType": "measure"
      },
      {
        "startTime": 11545.47,
        "name": "lh:runner:audit",
        "duration": 966.59,
        "entryType": "measure"
      },
      {
        "startTime": 11545.66,
        "name": "lh:runner:auditing",
        "duration": 965.49,
        "entryType": "measure"
      },
      {
        "startTime": 11547.23,
        "name": "lh:audit:is-on-https",
        "duration": 2.96,
        "entryType": "measure"
      },
      {
        "startTime": 11550.54,
        "name": "lh:audit:redirects-http",
        "duration": 0.95,
        "entryType": "measure"
      },
      {
        "startTime": 11551.9,
        "name": "lh:audit:first-contentful-paint",
        "duration": 29.34,
        "entryType": "measure"
      },
      {
        "startTime": 11552.62,
        "name": "lh:computed:FirstContentfulPaint",
        "duration": 26.05,
        "entryType": "measure"
      },
      {
        "startTime": 11552.85,
        "name": "lh:computed:ProcessedNavigation",
        "duration": 3.77,
        "entryType": "measure"
      },
      {
        "startTime": 11557.04,
        "name": "lh:computed:LanternFirstContentfulPaint",
        "duration": 21.62,
        "entryType": "measure"
      },
      {
        "startTime": 11557.2,
        "name": "lh:computed:PageDependencyGraph",
        "duration": 16.61,
        "entryType": "measure"
      },
      {
        "startTime": 11573.9,
        "name": "lh:computed:LoadSimulator",
        "duration": 1.57,
        "entryType": "measure"
      },
      {
        "startTime": 11574.07,
        "name": "lh:computed:NetworkAnalysis",
        "duration": 1.16,
        "entryType": "measure"
      },
      {
        "startTime": 11581.68,
        "name": "lh:audit:largest-contentful-paint",
        "duration": 15.76,
        "entryType": "measure"
      },
      {
        "startTime": 11582.13,
        "name": "lh:computed:LargestContentfulPaint",
        "duration": 14.13,
        "entryType": "measure"
      },
      {
        "startTime": 11582.23,
        "name": "lh:computed:LanternLargestContentfulPaint",
        "duration": 13.98,
        "entryType": "measure"
      },
      {
        "startTime": 11597.76,
        "name": "lh:audit:speed-index",
        "duration": 204.78,
        "entryType": "measure"
      },
      {
        "startTime": 11598.32,
        "name": "lh:computed:SpeedIndex",
        "duration": 203.17,
        "entryType": "measure"
      },
      {
        "startTime": 11598.47,
        "name": "lh:computed:LanternSpeedIndex",
        "duration": 202.99,
        "entryType": "measure"
      },
      {
        "startTime": 11598.53,
        "name": "lh:computed:Speedline",
        "duration": 192.91,
        "entryType": "measure"
      },
      {
        "startTime": 11802.58,
        "name": "lh:audit:screenshot-thumbnails",
        "duration": 0.56,
        "entryType": "measure"
      },
      {
        "startTime": 11803.18,
        "name": "lh:audit:final-screenshot",
        "duration": 1.7,
        "entryType": "measure"
      },
      {
        "startTime": 11803.36,
        "name": "lh:computed:Screenshots",
        "duration": 1.45,
        "entryType": "measure"
      },
      {
        "startTime": 11805.2,
        "name": "lh:audit:total-blocking-time",
        "duration": 16.99,
        "entryType": "measure"
      },
      {
        "startTime": 11805.82,
        "name": "lh:computed:TotalBlockingTime",
        "duration": 15.32,
        "entryType": "measure"
      },
      {
        "startTime": 11805.92,
        "name": "lh:computed:LanternTotalBlockingTime",
        "duration": 15.2,
        "entryType": "measure"
      },
      {
        "startTime": 11806.03,
        "name": "lh:computed:LanternInteractive",
        "duration": 7.67,
        "entryType": "measure"
      },
      {
        "startTime": 11822.43,
        "name": "lh:audit:max-potential-fid",
        "duration": 8.93,
        "entryType": "measure"
      },
      {
        "startTime": 11822.93,
        "name": "lh:computed:MaxPotentialFID",
        "duration": 6.51,
        "entryType": "measure"
      },
      {
        "startTime": 11823.15,
        "name": "lh:computed:LanternMaxPotentialFID",
        "duration": 6.26,
        "entryType": "measure"
      },
      {
        "startTime": 11831.72,
        "name": "lh:audit:cumulative-layout-shift",
        "duration": 0.9,
        "entryType": "measure"
      },
      {
        "startTime": 11832.92,
        "name": "lh:audit:errors-in-console",
        "duration": 28.33,
        "entryType": "measure"
      },
      {
        "startTime": 11833.43,
        "name": "lh:computed:JSBundles",
        "duration": 25.15,
        "entryType": "measure"
      },
      {
        "startTime": 11861.56,
        "name": "lh:audit:server-response-time",
        "duration": 1.89,
        "entryType": "measure"
      },
      {
        "startTime": 11861.97,
        "name": "lh:computed:NavigationInsights",
        "duration": 0.2,
        "entryType": "measure"
      },
      {
        "startTime": 11863.95,
        "name": "lh:audit:interactive",
        "duration": 1.34,
        "entryType": "measure"
      },
      {
        "startTime": 11864.54,
        "name": "lh:computed:Interactive",
        "duration": 0.13,
        "entryType": "measure"
      },
      {
        "startTime": 11865.83,
        "name": "lh:audit:user-timings",
        "duration": 2.96,
        "entryType": "measure"
      },
      {
        "startTime": 11866.17,
        "name": "lh:computed:UserTimings",
        "duration": 1.86,
        "entryType": "measure"
      },
      {
        "startTime": 11869.04,
        "name": "lh:audit:redirects",
        "duration": 3.71,
        "entryType": "measure"
      },
      {
        "startTime": 11873.1,
        "name": "lh:audit:image-aspect-ratio",
        "duration": 1.75,
        "entryType": "measure"
      },
      {
        "startTime": 11875.27,
        "name": "lh:audit:image-size-responsive",
        "duration": 3.56,
        "entryType": "measure"
      },
      {
        "startTime": 11875.87,
        "name": "lh:computed:ImageRecords",
        "duration": 0.91,
        "entryType": "measure"
      },
      {
        "startTime": 11879.12,
        "name": "lh:audit:deprecations",
        "duration": 1.18,
        "entryType": "measure"
      },
      {
        "startTime": 11880.55,
        "name": "lh:audit:third-party-cookies",
        "duration": 1.14,
        "entryType": "measure"
      },
      {
        "startTime": 11881.98,
        "name": "lh:audit:mainthread-work-breakdown",
        "duration": 52.4,
        "entryType": "measure"
      },
      {
        "startTime": 11882.71,
        "name": "lh:computed:MainThreadTasks",
        "duration": 49.11,
        "entryType": "measure"
      },
      {
        "startTime": 11934.68,
        "name": "lh:audit:bootup-time",
        "duration": 35.66,
        "entryType": "measure"
      },
      {
        "startTime": 11938.73,
        "name": "lh:computed:TBTImpactTasks",
        "duration": 25.78,
        "entryType": "measure"
      },
      {
        "startTime": 11970.4,
        "name": "lh:audit:diagnostics",
        "duration": 1.25,
        "entryType": "measure"
      },
      {
        "startTime": 11971.73,
        "name": "lh:audit:network-requests",
        "duration": 47.56,
        "entryType": "measure"
      },
      {
        "startTime": 11972.02,
        "name": "lh:computed:EntityClassification",
        "duration": 5.89,
        "entryType": "measure"
      },
      {
        "startTime": 12019.82,
        "name": "lh:audit:network-rtt",
        "duration": 1.44,
        "entryType": "measure"
      },
      {
        "startTime": 12021.51,
        "name": "lh:audit:network-server-latency",
        "duration": 1.13,
        "entryType": "measure"
      },
      {
        "startTime": 12022.67,
        "name": "lh:audit:main-thread-tasks",
        "duration": 0.42,
        "entryType": "measure"
      },
      {
        "startTime": 12023.11,
        "name": "lh:audit:metrics",
        "duration": 3.68,
        "entryType": "measure"
      },
      {
        "startTime": 12023.3,
        "name": "lh:computed:TimingSummary",
        "duration": 3.32,
        "entryType": "measure"
      },
      {
        "startTime": 12023.9,
        "name": "lh:computed:FirstContentfulPaintAllFrames",
        "duration": 0.11,
        "entryType": "measure"
      },
      {
        "startTime": 12024.06,
        "name": "lh:computed:LargestContentfulPaintAllFrames",
        "duration": 0.15,
        "entryType": "measure"
      },
      {
        "startTime": 12024.3,
        "name": "lh:computed:LCPBreakdown",
        "duration": 1.86,
        "entryType": "measure"
      },
      {
        "startTime": 12024.45,
        "name": "lh:computed:TimeToFirstByte",
        "duration": 0.23,
        "entryType": "measure"
      },
      {
        "startTime": 12024.7,
        "name": "lh:computed:LCPImageRecord",
        "duration": 1.38,
        "entryType": "measure"
      },
      {
        "startTime": 12026.81,
        "name": "lh:audit:resource-summary",
        "duration": 1.24,
        "entryType": "measure"
      },
      {
        "startTime": 12026.96,
        "name": "lh:computed:ResourceSummary",
        "duration": 0.64,
        "entryType": "measure"
      },
      {
        "startTime": 12028.22,
        "name": "lh:audit:layout-shifts",
        "duration": 0.85,
        "entryType": "measure"
      },
      {
        "startTime": 12029.2,
        "name": "lh:audit:long-tasks",
        "duration": 6.79,
        "entryType": "measure"
      },
      {
        "startTime": 12036.35,
        "name": "lh:audit:non-composited-animations",
        "duration": 1.4,
        "entryType": "measure"
      },
      {
        "startTime": 12038.2,
        "name": "lh:audit:unsized-images",
        "duration": 1.57,
        "entryType": "measure"
      },
      {
        "startTime": 12040.06,
        "name": "lh:audit:valid-source-maps",
        "duration": 3.65,
        "entryType": "measure"
      },
      {
        "startTime": 12043.96,
        "name": "lh:audit:csp-xss",
        "duration": 3.07,
        "entryType": "measure"
      },
      {
        "startTime": 12047.22,
        "name": "lh:audit:has-hsts",
        "duration": 1.26,
        "entryType": "measure"
      },
      {
        "startTime": 12048.67,
        "name": "lh:audit:origin-isolation",
        "duration": 1.1,
        "entryType": "measure"
      },
      {
        "startTime": 12050,
        "name": "lh:audit:clickjacking-mitigation",
        "duration": 1.04,
        "entryType": "measure"
      },
      {
        "startTime": 12051.24,
        "name": "lh:audit:trusted-types-xss",
        "duration": 1,
        "entryType": "measure"
      },
      {
        "startTime": 12052.27,
        "name": "lh:audit:script-treemap-data",
        "duration": 52.85,
        "entryType": "measure"
      },
      {
        "startTime": 12052.66,
        "name": "lh:computed:ModuleDuplication",
        "duration": 0.8,
        "entryType": "measure"
      },
      {
        "startTime": 12053.54,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.76,
        "entryType": "measure"
      },
      {
        "startTime": 12054.4,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.1,
        "entryType": "measure"
      },
      {
        "startTime": 12054.55,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.14,
        "entryType": "measure"
      },
      {
        "startTime": 12054.74,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.04,
        "entryType": "measure"
      },
      {
        "startTime": 12054.92,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.11,
        "entryType": "measure"
      },
      {
        "startTime": 12055.1,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.49,
        "entryType": "measure"
      },
      {
        "startTime": 12055.67,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.07,
        "entryType": "measure"
      },
      {
        "startTime": 12055.81,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.11,
        "entryType": "measure"
      },
      {
        "startTime": 12055.97,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 20.57,
        "entryType": "measure"
      },
      {
        "startTime": 12078.11,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.13,
        "entryType": "measure"
      },
      {
        "startTime": 12078.36,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.16,
        "entryType": "measure"
      },
      {
        "startTime": 12078.6,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.46,
        "entryType": "measure"
      },
      {
        "startTime": 12079.22,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.16,
        "entryType": "measure"
      },
      {
        "startTime": 12079.47,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.11,
        "entryType": "measure"
      },
      {
        "startTime": 12079.64,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 3.28,
        "entryType": "measure"
      },
      {
        "startTime": 12083.25,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.1,
        "entryType": "measure"
      },
      {
        "startTime": 12083.49,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.1,
        "entryType": "measure"
      },
      {
        "startTime": 12083.67,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.11,
        "entryType": "measure"
      },
      {
        "startTime": 12083.87,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.12,
        "entryType": "measure"
      },
      {
        "startTime": 12084.1,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.12,
        "entryType": "measure"
      },
      {
        "startTime": 12084.49,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.12,
        "entryType": "measure"
      },
      {
        "startTime": 12084.84,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.2,
        "entryType": "measure"
      },
      {
        "startTime": 12085.15,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.2,
        "entryType": "measure"
      },
      {
        "startTime": 12085.52,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.14,
        "entryType": "measure"
      },
      {
        "startTime": 12085.77,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.13,
        "entryType": "measure"
      },
      {
        "startTime": 12086,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.14,
        "entryType": "measure"
      },
      {
        "startTime": 12086.27,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.13,
        "entryType": "measure"
      },
      {
        "startTime": 12086.57,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.24,
        "entryType": "measure"
      },
      {
        "startTime": 12086.93,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.2,
        "entryType": "measure"
      },
      {
        "startTime": 12087.25,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.26,
        "entryType": "measure"
      },
      {
        "startTime": 12087.68,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.2,
        "entryType": "measure"
      },
      {
        "startTime": 12088.01,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.6,
        "entryType": "measure"
      },
      {
        "startTime": 12088.75,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.2,
        "entryType": "measure"
      },
      {
        "startTime": 12089.16,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.19,
        "entryType": "measure"
      },
      {
        "startTime": 12089.51,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.36,
        "entryType": "measure"
      },
      {
        "startTime": 12090.02,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.22,
        "entryType": "measure"
      },
      {
        "startTime": 12090.43,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.27,
        "entryType": "measure"
      },
      {
        "startTime": 12090.85,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.17,
        "entryType": "measure"
      },
      {
        "startTime": 12091.22,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.23,
        "entryType": "measure"
      },
      {
        "startTime": 12091.8,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.19,
        "entryType": "measure"
      },
      {
        "startTime": 12092.15,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.16,
        "entryType": "measure"
      },
      {
        "startTime": 12092.47,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.16,
        "entryType": "measure"
      },
      {
        "startTime": 12092.85,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.25,
        "entryType": "measure"
      },
      {
        "startTime": 12093.37,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.25,
        "entryType": "measure"
      },
      {
        "startTime": 12093.81,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.19,
        "entryType": "measure"
      },
      {
        "startTime": 12094.22,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.31,
        "entryType": "measure"
      },
      {
        "startTime": 12094.71,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.33,
        "entryType": "measure"
      },
      {
        "startTime": 12099.97,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.39,
        "entryType": "measure"
      },
      {
        "startTime": 12100.6,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.18,
        "entryType": "measure"
      },
      {
        "startTime": 12100.92,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.18,
        "entryType": "measure"
      },
      {
        "startTime": 12101.24,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.22,
        "entryType": "measure"
      },
      {
        "startTime": 12101.59,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.16,
        "entryType": "measure"
      },
      {
        "startTime": 12101.88,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.13,
        "entryType": "measure"
      },
      {
        "startTime": 12102.13,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.22,
        "entryType": "measure"
      },
      {
        "startTime": 12102.47,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.13,
        "entryType": "measure"
      },
      {
        "startTime": 12102.75,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.31,
        "entryType": "measure"
      },
      {
        "startTime": 12103.21,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.31,
        "entryType": "measure"
      },
      {
        "startTime": 12103.77,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.23,
        "entryType": "measure"
      },
      {
        "startTime": 12104.18,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.2,
        "entryType": "measure"
      },
      {
        "startTime": 12104.73,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.19,
        "entryType": "measure"
      },
      {
        "startTime": 12105.49,
        "name": "lh:audit:accesskeys",
        "duration": 0.77,
        "entryType": "measure"
      },
      {
        "startTime": 12106.45,
        "name": "lh:audit:aria-allowed-attr",
        "duration": 3.11,
        "entryType": "measure"
      },
      {
        "startTime": 12109.81,
        "name": "lh:audit:aria-allowed-role",
        "duration": 3.71,
        "entryType": "measure"
      },
      {
        "startTime": 12113.85,
        "name": "lh:audit:aria-command-name",
        "duration": 0.56,
        "entryType": "measure"
      },
      {
        "startTime": 12114.71,
        "name": "lh:audit:aria-conditional-attr",
        "duration": 2.54,
        "entryType": "measure"
      },
      {
        "startTime": 12117.42,
        "name": "lh:audit:aria-deprecated-role",
        "duration": 0.66,
        "entryType": "measure"
      },
      {
        "startTime": 12118.4,
        "name": "lh:audit:aria-dialog-name",
        "duration": 0.64,
        "entryType": "measure"
      },
      {
        "startTime": 12119.2,
        "name": "lh:audit:aria-hidden-body",
        "duration": 2.43,
        "entryType": "measure"
      },
      {
        "startTime": 12121.78,
        "name": "lh:audit:aria-hidden-focus",
        "duration": 0.64,
        "entryType": "measure"
      },
      {
        "startTime": 12122.57,
        "name": "lh:audit:aria-input-field-name",
        "duration": 0.79,
        "entryType": "measure"
      },
      {
        "startTime": 12123.55,
        "name": "lh:audit:aria-meter-name",
        "duration": 0.78,
        "entryType": "measure"
      },
      {
        "startTime": 12124.55,
        "name": "lh:audit:aria-progressbar-name",
        "duration": 0.83,
        "entryType": "measure"
      },
      {
        "startTime": 12125.57,
        "name": "lh:audit:aria-prohibited-attr",
        "duration": 2.53,
        "entryType": "measure"
      },
      {
        "startTime": 12128.3,
        "name": "lh:audit:aria-required-attr",
        "duration": 0.78,
        "entryType": "measure"
      },
      {
        "startTime": 12129.23,
        "name": "lh:audit:aria-required-children",
        "duration": 0.9,
        "entryType": "measure"
      },
      {
        "startTime": 12130.37,
        "name": "lh:audit:aria-required-parent",
        "duration": 1.04,
        "entryType": "measure"
      },
      {
        "startTime": 12131.62,
        "name": "lh:audit:aria-roles",
        "duration": 6.66,
        "entryType": "measure"
      },
      {
        "startTime": 12138.62,
        "name": "lh:audit:aria-text",
        "duration": 1.23,
        "entryType": "measure"
      },
      {
        "startTime": 12140.11,
        "name": "lh:audit:aria-toggle-field-name",
        "duration": 1.17,
        "entryType": "measure"
      },
      {
        "startTime": 12141.44,
        "name": "lh:audit:aria-tooltip-name",
        "duration": 1.55,
        "entryType": "measure"
      },
      {
        "startTime": 12143.21,
        "name": "lh:audit:aria-treeitem-name",
        "duration": 1.54,
        "entryType": "measure"
      },
      {
        "startTime": 12144.94,
        "name": "lh:audit:aria-valid-attr-value",
        "duration": 2.96,
        "entryType": "measure"
      },
      {
        "startTime": 12148.06,
        "name": "lh:audit:aria-valid-attr",
        "duration": 2.68,
        "entryType": "measure"
      },
      {
        "startTime": 12150.91,
        "name": "lh:audit:button-name",
        "duration": 1.42,
        "entryType": "measure"
      },
      {
        "startTime": 12152.57,
        "name": "lh:audit:bypass",
        "duration": 2.86,
        "entryType": "measure"
      },
      {
        "startTime": 12155.62,
        "name": "lh:audit:color-contrast",
        "duration": 14.25,
        "entryType": "measure"
      },
      {
        "startTime": 12170.21,
        "name": "lh:audit:definition-list",
        "duration": 2.94,
        "entryType": "measure"
      },
      {
        "startTime": 12173.6,
        "name": "lh:audit:dlitem",
        "duration": 3.06,
        "entryType": "measure"
      },
      {
        "startTime": 12177,
        "name": "lh:audit:document-title",
        "duration": 6.3,
        "entryType": "measure"
      },
      {
        "startTime": 12183.83,
        "name": "lh:audit:duplicate-id-aria",
        "duration": 3.22,
        "entryType": "measure"
      },
      {
        "startTime": 12187.51,
        "name": "lh:audit:empty-heading",
        "duration": 5.79,
        "entryType": "measure"
      },
      {
        "startTime": 12193.71,
        "name": "lh:audit:form-field-multiple-labels",
        "duration": 6.16,
        "entryType": "measure"
      },
      {
        "startTime": 12200.44,
        "name": "lh:audit:frame-title",
        "duration": 3.23,
        "entryType": "measure"
      },
      {
        "startTime": 12204.22,
        "name": "lh:audit:heading-order",
        "duration": 13.39,
        "entryType": "measure"
      },
      {
        "startTime": 12217.97,
        "name": "lh:audit:html-has-lang",
        "duration": 3.99,
        "entryType": "measure"
      },
      {
        "startTime": 12222.21,
        "name": "lh:audit:html-lang-valid",
        "duration": 3.47,
        "entryType": "measure"
      },
      {
        "startTime": 12225.93,
        "name": "lh:audit:html-xml-lang-mismatch",
        "duration": 1.97,
        "entryType": "measure"
      },
      {
        "startTime": 12228.14,
        "name": "lh:audit:identical-links-same-purpose",
        "duration": 4.77,
        "entryType": "measure"
      },
      {
        "startTime": 12233.2,
        "name": "lh:audit:image-alt",
        "duration": 3.55,
        "entryType": "measure"
      },
      {
        "startTime": 12236.98,
        "name": "lh:audit:image-redundant-alt",
        "duration": 2.52,
        "entryType": "measure"
      },
      {
        "startTime": 12239.68,
        "name": "lh:audit:input-button-name",
        "duration": 1.3,
        "entryType": "measure"
      },
      {
        "startTime": 12241.21,
        "name": "lh:audit:input-image-alt",
        "duration": 1.32,
        "entryType": "measure"
      },
      {
        "startTime": 12242.71,
        "name": "lh:audit:label-content-name-mismatch",
        "duration": 1.28,
        "entryType": "measure"
      },
      {
        "startTime": 12244.2,
        "name": "lh:audit:label",
        "duration": 2.11,
        "entryType": "measure"
      },
      {
        "startTime": 12246.47,
        "name": "lh:audit:landmark-one-main",
        "duration": 1.98,
        "entryType": "measure"
      },
      {
        "startTime": 12248.67,
        "name": "lh:audit:link-name",
        "duration": 7.55,
        "entryType": "measure"
      },
      {
        "startTime": 12256.43,
        "name": "lh:audit:link-in-text-block",
        "duration": 1.36,
        "entryType": "measure"
      },
      {
        "startTime": 12257.96,
        "name": "lh:audit:list",
        "duration": 2.24,
        "entryType": "measure"
      },
      {
        "startTime": 12260.43,
        "name": "lh:audit:listitem",
        "duration": 2.34,
        "entryType": "measure"
      },
      {
        "startTime": 12262.94,
        "name": "lh:audit:meta-refresh",
        "duration": 1.58,
        "entryType": "measure"
      },
      {
        "startTime": 12264.68,
        "name": "lh:audit:meta-viewport",
        "duration": 2.4,
        "entryType": "measure"
      },
      {
        "startTime": 12273.83,
        "name": "lh:audit:object-alt",
        "duration": 1.47,
        "entryType": "measure"
      },
      {
        "startTime": 12275.5,
        "name": "lh:audit:select-name",
        "duration": 1.64,
        "entryType": "measure"
      },
      {
        "startTime": 12277.29,
        "name": "lh:audit:skip-link",
        "duration": 2.11,
        "entryType": "measure"
      },
      {
        "startTime": 12279.59,
        "name": "lh:audit:tabindex",
        "duration": 1.57,
        "entryType": "measure"
      },
      {
        "startTime": 12281.33,
        "name": "lh:audit:table-duplicate-name",
        "duration": 1.85,
        "entryType": "measure"
      },
      {
        "startTime": 12283.35,
        "name": "lh:audit:table-fake-caption",
        "duration": 1.88,
        "entryType": "measure"
      },
      {
        "startTime": 12285.39,
        "name": "lh:audit:target-size",
        "duration": 2.26,
        "entryType": "measure"
      },
      {
        "startTime": 12287.82,
        "name": "lh:audit:td-has-header",
        "duration": 1.89,
        "entryType": "measure"
      },
      {
        "startTime": 12289.89,
        "name": "lh:audit:td-headers-attr",
        "duration": 1.99,
        "entryType": "measure"
      },
      {
        "startTime": 12292.03,
        "name": "lh:audit:th-has-data-cells",
        "duration": 7.63,
        "entryType": "measure"
      },
      {
        "startTime": 12299.85,
        "name": "lh:audit:valid-lang",
        "duration": 1.78,
        "entryType": "measure"
      },
      {
        "startTime": 12301.83,
        "name": "lh:audit:video-caption",
        "duration": 2.34,
        "entryType": "measure"
      },
      {
        "startTime": 12304.22,
        "name": "lh:audit:custom-controls-labels",
        "duration": 0.21,
        "entryType": "measure"
      },
      {
        "startTime": 12304.44,
        "name": "lh:audit:custom-controls-roles",
        "duration": 0.01,
        "entryType": "measure"
      },
      {
        "startTime": 12304.46,
        "name": "lh:audit:focus-traps",
        "duration": 0.01,
        "entryType": "measure"
      },
      {
        "startTime": 12304.47,
        "name": "lh:audit:focusable-controls",
        "duration": 0.01,
        "entryType": "measure"
      },
      {
        "startTime": 12304.49,
        "name": "lh:audit:interactive-element-affordance",
        "duration": 0.01,
        "entryType": "measure"
      },
      {
        "startTime": 12304.5,
        "name": "lh:audit:logical-tab-order",
        "duration": 0.01,
        "entryType": "measure"
      },
      {
        "startTime": 12304.51,
        "name": "lh:audit:managed-focus",
        "duration": 0.01,
        "entryType": "measure"
      },
      {
        "startTime": 12304.52,
        "name": "lh:audit:offscreen-content-hidden",
        "duration": 0.01,
        "entryType": "measure"
      },
      {
        "startTime": 12304.53,
        "name": "lh:audit:use-landmarks",
        "duration": 0.01,
        "entryType": "measure"
      },
      {
        "startTime": 12304.55,
        "name": "lh:audit:visual-order-follows-dom",
        "duration": 0.02,
        "entryType": "measure"
      },
      {
        "startTime": 12304.75,
        "name": "lh:audit:total-byte-weight",
        "duration": 1.36,
        "entryType": "measure"
      },
      {
        "startTime": 12306.25,
        "name": "lh:audit:unminified-css",
        "duration": 51.05,
        "entryType": "measure"
      },
      {
        "startTime": 12357.5,
        "name": "lh:audit:unminified-javascript",
        "duration": 60.84,
        "entryType": "measure"
      },
      {
        "startTime": 12418.61,
        "name": "lh:audit:unused-css-rules",
        "duration": 36.25,
        "entryType": "measure"
      },
      {
        "startTime": 12419.05,
        "name": "lh:computed:UnusedCSS",
        "duration": 28.91,
        "entryType": "measure"
      },
      {
        "startTime": 12455.06,
        "name": "lh:audit:unused-javascript",
        "duration": 10.44,
        "entryType": "measure"
      },
      {
        "startTime": 12465.71,
        "name": "lh:audit:doctype",
        "duration": 0.63,
        "entryType": "measure"
      },
      {
        "startTime": 12466.51,
        "name": "lh:audit:charset",
        "duration": 0.76,
        "entryType": "measure"
      },
      {
        "startTime": 12467.54,
        "name": "lh:audit:geolocation-on-start",
        "duration": 0.72,
        "entryType": "measure"
      },
      {
        "startTime": 12468.43,
        "name": "lh:audit:inspector-issues",
        "duration": 0.66,
        "entryType": "measure"
      },
      {
        "startTime": 12469.27,
        "name": "lh:audit:js-libraries",
        "duration": 0.78,
        "entryType": "measure"
      },
      {
        "startTime": 12470.23,
        "name": "lh:audit:notification-on-start",
        "duration": 2.65,
        "entryType": "measure"
      },
      {
        "startTime": 12473.11,
        "name": "lh:audit:paste-preventing-inputs",
        "duration": 0.72,
        "entryType": "measure"
      },
      {
        "startTime": 12474.39,
        "name": "lh:audit:meta-description",
        "duration": 0.59,
        "entryType": "measure"
      },
      {
        "startTime": 12475.19,
        "name": "lh:audit:http-status-code",
        "duration": 0.67,
        "entryType": "measure"
      },
      {
        "startTime": 12476.01,
        "name": "lh:audit:link-text",
        "duration": 1.23,
        "entryType": "measure"
      },
      {
        "startTime": 12477.39,
        "name": "lh:audit:crawlable-anchors",
        "duration": 1.12,
        "entryType": "measure"
      },
      {
        "startTime": 12478.7,
        "name": "lh:audit:is-crawlable",
        "duration": 3.95,
        "entryType": "measure"
      },
      {
        "startTime": 12482.95,
        "name": "lh:audit:robots-txt",
        "duration": 1.43,
        "entryType": "measure"
      },
      {
        "startTime": 12484.67,
        "name": "lh:audit:hreflang",
        "duration": 0.91,
        "entryType": "measure"
      },
      {
        "startTime": 12485.92,
        "name": "lh:audit:canonical",
        "duration": 1.05,
        "entryType": "measure"
      },
      {
        "startTime": 12487.1,
        "name": "lh:audit:structured-data",
        "duration": 0.52,
        "entryType": "measure"
      },
      {
        "startTime": 12487.9,
        "name": "lh:audit:bf-cache",
        "duration": 0.98,
        "entryType": "measure"
      },
      {
        "startTime": 12489.12,
        "name": "lh:audit:cache-insight",
        "duration": 1.86,
        "entryType": "measure"
      },
      {
        "startTime": 12491.22,
        "name": "lh:audit:cls-culprits-insight",
        "duration": 1.14,
        "entryType": "measure"
      },
      {
        "startTime": 12492.58,
        "name": "lh:audit:document-latency-insight",
        "duration": 1.03,
        "entryType": "measure"
      },
      {
        "startTime": 12493.77,
        "name": "lh:audit:dom-size-insight",
        "duration": 0.99,
        "entryType": "measure"
      },
      {
        "startTime": 12495.01,
        "name": "lh:audit:duplicated-javascript-insight",
        "duration": 0.89,
        "entryType": "measure"
      },
      {
        "startTime": 12496.06,
        "name": "lh:audit:font-display-insight",
        "duration": 0.7,
        "entryType": "measure"
      },
      {
        "startTime": 12496.92,
        "name": "lh:audit:forced-reflow-insight",
        "duration": 0.61,
        "entryType": "measure"
      },
      {
        "startTime": 12497.74,
        "name": "lh:audit:image-delivery-insight",
        "duration": 2.05,
        "entryType": "measure"
      },
      {
        "startTime": 12500.02,
        "name": "lh:audit:inp-breakdown-insight",
        "duration": 0.9,
        "entryType": "measure"
      },
      {
        "startTime": 12501.18,
        "name": "lh:audit:lcp-breakdown-insight",
        "duration": 1.04,
        "entryType": "measure"
      },
      {
        "startTime": 12502.47,
        "name": "lh:audit:lcp-discovery-insight",
        "duration": 0.88,
        "entryType": "measure"
      },
      {
        "startTime": 12503.65,
        "name": "lh:audit:legacy-javascript-insight",
        "duration": 0.99,
        "entryType": "measure"
      },
      {
        "startTime": 12504.86,
        "name": "lh:audit:modern-http-insight",
        "duration": 0.85,
        "entryType": "measure"
      },
      {
        "startTime": 12505.95,
        "name": "lh:audit:network-dependency-tree-insight",
        "duration": 1.67,
        "entryType": "measure"
      },
      {
        "startTime": 12507.86,
        "name": "lh:audit:render-blocking-insight",
        "duration": 1.03,
        "entryType": "measure"
      },
      {
        "startTime": 12509.13,
        "name": "lh:audit:third-parties-insight",
        "duration": 0.9,
        "entryType": "measure"
      },
      {
        "startTime": 12510.27,
        "name": "lh:audit:viewport-insight",
        "duration": 0.86,
        "entryType": "measure"
      },
      {
        "startTime": 12511.17,
        "name": "lh:runner:generate",
        "duration": 0.87,
        "entryType": "measure"
      }
    ],
    "total": 10606.07
  },
  "i18n": {
    "rendererFormattedStrings": {
      "calculatorLink": "See calculator.",
      "collapseView": "Collapse view",
      "crcInitialNavigation": "Initial Navigation",
      "crcLongestDurationLabel": "Maximum critical path latency:",
      "dropdownCopyJSON": "Copy JSON",
      "dropdownDarkTheme": "Toggle Dark Theme",
      "dropdownPrintExpanded": "Print Expanded",
      "dropdownPrintSummary": "Print Summary",
      "dropdownSaveGist": "Save as Gist",
      "dropdownSaveHTML": "Save as HTML",
      "dropdownSaveJSON": "Save as JSON",
      "dropdownViewUnthrottledTrace": "View Unthrottled Trace",
      "dropdownViewer": "Open in Viewer",
      "errorLabel": "Error!",
      "errorMissingAuditInfo": "Report error: no audit information",
      "expandView": "Expand view",
      "firstPartyChipLabel": "1st party",
      "footerIssue": "File an issue",
      "hide": "Hide",
      "labDataTitle": "Lab Data",
      "lsPerformanceCategoryDescription": "[Lighthouse](https://developers.google.com/web/tools/lighthouse/) analysis of the current page on an emulated mobile network. Values are estimated and may vary.",
      "manualAuditsGroupTitle": "Additional items to manually check",
      "notApplicableAuditsGroupTitle": "Not applicable",
      "openInANewTabTooltip": "Open in a new tab",
      "opportunityResourceColumnLabel": "Opportunity",
      "opportunitySavingsColumnLabel": "Estimated Savings",
      "passedAuditsGroupTitle": "Passed audits",
      "runtimeAnalysisWindow": "Initial page load",
      "runtimeAnalysisWindowSnapshot": "Point-in-time snapshot",
      "runtimeAnalysisWindowTimespan": "User interactions timespan",
      "runtimeCustom": "Custom throttling",
      "runtimeDesktopEmulation": "Emulated Desktop",
      "runtimeMobileEmulation": "Emulated Moto G Power",
      "runtimeNoEmulation": "No emulation",
      "runtimeSettingsAxeVersion": "Axe version",
      "runtimeSettingsBenchmark": "Unthrottled CPU/Memory Power",
      "runtimeSettingsCPUThrottling": "CPU throttling",
      "runtimeSettingsDevice": "Device",
      "runtimeSettingsNetworkThrottling": "Network throttling",
      "runtimeSettingsScreenEmulation": "Screen emulation",
      "runtimeSettingsUANetwork": "User agent (network)",
      "runtimeSingleLoad": "Single page session",
      "runtimeSingleLoadTooltip": "This data is taken from a single page session, as opposed to field data summarizing many sessions.",
      "runtimeSlow4g": "Slow 4G throttling",
      "runtimeUnknown": "Unknown",
      "show": "Show",
      "showRelevantAudits": "Show audits relevant to:",
      "snippetCollapseButtonLabel": "Collapse snippet",
      "snippetExpandButtonLabel": "Expand snippet",
      "thirdPartyResourcesLabel": "Show 3rd-party resources",
      "throttlingProvided": "Provided by environment",
      "toplevelWarningsMessage": "There were issues affecting this run of Lighthouse:",
      "unattributable": "Unattributable",
      "unscoredLabel": "Unscored",
      "unscoredTitle": "This audit does not contribute to the overall category score.",
      "varianceDisclaimer": "Values are estimated and may vary. The [performance score is calculated](https://developer.chrome.com/docs/lighthouse/performance/performance-scoring/) directly from these metrics.",
      "viewTraceLabel": "View Trace",
      "viewTreemapLabel": "View Treemap",
      "warningAuditsGroupTitle": "Passed audits but with warnings",
      "warningHeader": "Warnings: "
    },
    "icuMessagePaths": {
      "core/gather/driver/navigation.js | warningRedirected": [
        {
          "values": {
            "requested": "https://dispatch.com/",
            "final": "https://eu.dispatch.com/"
          },
          "path": "runWarnings[0]"
        }
      ],
      "core/audits/is-on-https.js | title": [
        "audits[is-on-https].title"
      ],
      "core/audits/is-on-https.js | description": [
        "audits[is-on-https].description"
      ],
      "core/audits/is-on-https.js | columnInsecureURL": [
        "audits[is-on-https].details.headings[0].label"
      ],
      "core/audits/is-on-https.js | columnResolution": [
        "audits[is-on-https].details.headings[1].label"
      ],
      "core/audits/redirects-http.js | title": [
        "audits[redirects-http].title"
      ],
      "core/audits/redirects-http.js | description": [
        "audits[redirects-http].description"
      ],
      "core/lib/i18n/i18n.js | firstContentfulPaintMetric": [
        "audits[first-contentful-paint].title"
      ],
      "core/audits/metrics/first-contentful-paint.js | description": [
        "audits[first-contentful-paint].description"
      ],
      "core/lib/i18n/i18n.js | seconds": [
        {
          "values": {
            "timeInMs": 4423.58005
          },
          "path": "audits[first-contentful-paint].displayValue"
        },
        {
          "values": {
            "timeInMs": 17233.09155
          },
          "path": "audits[largest-contentful-paint].displayValue"
        },
        {
          "values": {
            "timeInMs": 5532.920862800753
          },
          "path": "audits[speed-index].displayValue"
        },
        {
          "values": {
            "timeInMs": 17233.091550000005
          },
          "path": "audits.interactive.displayValue"
        },
        {
          "values": {
            "timeInMs": 1851.0400000000006
          },
          "path": "audits[mainthread-work-breakdown].displayValue"
        },
        {
          "values": {
            "timeInMs": 616.0200000000007
          },
          "path": "audits[bootup-time].displayValue"
        }
      ],
      "core/lib/i18n/i18n.js | largestContentfulPaintMetric": [
        "audits[largest-contentful-paint].title"
      ],
      "core/audits/metrics/largest-contentful-paint.js | description": [
        "audits[largest-contentful-paint].description"
      ],
      "core/lib/i18n/i18n.js | speedIndexMetric": [
        "audits[speed-index].title"
      ],
      "core/audits/metrics/speed-index.js | description": [
        "audits[speed-index].description"
      ],
      "core/lib/i18n/i18n.js | totalBlockingTimeMetric": [
        "audits[total-blocking-time].title"
      ],
      "core/audits/metrics/total-blocking-time.js | description": [
        "audits[total-blocking-time].description"
      ],
      "core/lib/i18n/i18n.js | ms": [
        {
          "values": {
            "timeInMs": 68
          },
          "path": "audits[total-blocking-time].displayValue"
        },
        {
          "values": {
            "timeInMs": 113
          },
          "path": "audits[max-potential-fid].displayValue"
        },
        {
          "values": {
            "timeInMs": 25.189999999999998
          },
          "path": "audits[network-rtt].displayValue"
        },
        {
          "values": {
            "timeInMs": 186.352
          },
          "path": "audits[network-server-latency].displayValue"
        }
      ],
      "core/lib/i18n/i18n.js | maxPotentialFIDMetric": [
        "audits[max-potential-fid].title"
      ],
      "core/audits/metrics/max-potential-fid.js | description": [
        "audits[max-potential-fid].description"
      ],
      "core/lib/i18n/i18n.js | cumulativeLayoutShiftMetric": [
        "audits[cumulative-layout-shift].title"
      ],
      "core/audits/metrics/cumulative-layout-shift.js | description": [
        "audits[cumulative-layout-shift].description"
      ],
      "core/audits/errors-in-console.js | failureTitle": [
        "audits[errors-in-console].title"
      ],
      "core/audits/errors-in-console.js | description": [
        "audits[errors-in-console].description"
      ],
      "core/lib/i18n/i18n.js | columnSource": [
        "audits[errors-in-console].details.headings[0].label",
        "audits.deprecations.details.headings[1].label",
        "audits[geolocation-on-start].details.headings[0].label",
        "audits[notification-on-start].details.headings[0].label",
        "audits[forced-reflow-insight].details.items[0].headings[0].label"
      ],
      "core/lib/i18n/i18n.js | columnDescription": [
        "audits[errors-in-console].details.headings[1].label",
        "audits[csp-xss].details.headings[0].label",
        "audits[has-hsts].details.headings[0].label",
        "audits[origin-isolation].details.headings[0].label",
        "audits[clickjacking-mitigation].details.headings[0].label",
        "audits[trusted-types-xss].details.headings[0].label"
      ],
      "core/audits/server-response-time.js | title": [
        "audits[server-response-time].title"
      ],
      "core/audits/server-response-time.js | description": [
        "audits[server-response-time].description"
      ],
      "core/audits/server-response-time.js | displayValue": [
        {
          "values": {
            "timeInMs": 29
          },
          "path": "audits[server-response-time].displayValue"
        }
      ],
      "core/lib/i18n/i18n.js | columnURL": [
        "audits[server-response-time].details.headings[0].label",
        "audits.redirects.details.headings[0].label",
        "audits[image-aspect-ratio].details.headings[1].label",
        "audits[image-size-responsive].details.headings[1].label",
        "audits[third-party-cookies].details.headings[1].label",
        "audits[bootup-time].details.headings[0].label",
        "audits[network-rtt].details.headings[0].label",
        "audits[network-server-latency].details.headings[0].label",
        "audits[long-tasks].details.headings[0].label",
        "audits[unsized-images].details.headings[1].label",
        "audits[valid-source-maps].details.headings[0].label",
        "audits[total-byte-weight].details.headings[0].label",
        "audits[unminified-javascript].details.headings[0].label",
        "audits[unused-javascript].details.headings[0].label",
        "audits[font-display-insight].details.headings[0].label",
        "audits[image-delivery-insight].details.headings[1].label",
        "audits[modern-http-insight].details.headings[0].label",
        "audits[render-blocking-insight].details.headings[0].label"
      ],
      "core/lib/i18n/i18n.js | columnTimeSpent": [
        "audits[server-response-time].details.headings[1].label",
        "audits.redirects.details.headings[1].label",
        "audits[mainthread-work-breakdown].details.headings[1].label",
        "audits[network-rtt].details.headings[1].label",
        "audits[network-server-latency].details.headings[1].label"
      ],
      "core/lib/i18n/i18n.js | interactiveMetric": [
        "audits.interactive.title"
      ],
      "core/audits/metrics/interactive.js | description": [
        "audits.interactive.description"
      ],
      "core/audits/user-timings.js | title": [
        "audits[user-timings].title"
      ],
      "core/audits/user-timings.js | description": [
        "audits[user-timings].description"
      ],
      "core/lib/i18n/i18n.js | columnName": [
        "audits[user-timings].details.headings[0].label",
        "audits[third-party-cookies].details.headings[0].label",
        "audits[js-libraries].details.headings[0].label"
      ],
      "core/audits/user-timings.js | columnType": [
        "audits[user-timings].details.headings[1].label"
      ],
      "core/lib/i18n/i18n.js | columnStartTime": [
        "audits[user-timings].details.headings[2].label",
        "audits[long-tasks].details.headings[1].label"
      ],
      "core/lib/i18n/i18n.js | columnDuration": [
        "audits[user-timings].details.headings[3].label",
        "audits[long-tasks].details.headings[2].label",
        "audits[lcp-breakdown-insight].details.items[0].headings[1].label",
        "audits[render-blocking-insight].details.headings[2].label"
      ],
      "core/audits/redirects.js | title": [
        "audits.redirects.title"
      ],
      "core/audits/redirects.js | description": [
        "audits.redirects.description"
      ],
      "core/lib/i18n/i18n.js | displayValueMsSavings": [
        {
          "values": {
            "wastedMs": 1581.016
          },
          "path": "audits.redirects.displayValue"
        },
        {
          "values": {
            "wastedMs": 104
          },
          "path": "audits[document-latency-insight].displayValue"
        }
      ],
      "core/audits/image-aspect-ratio.js | title": [
        "audits[image-aspect-ratio].title"
      ],
      "core/audits/image-aspect-ratio.js | description": [
        "audits[image-aspect-ratio].description"
      ],
      "core/audits/image-aspect-ratio.js | columnDisplayed": [
        "audits[image-aspect-ratio].details.headings[2].label"
      ],
      "core/audits/image-aspect-ratio.js | columnActual": [
        "audits[image-aspect-ratio].details.headings[3].label"
      ],
      "core/audits/image-size-responsive.js | failureTitle": [
        "audits[image-size-responsive].title"
      ],
      "core/audits/image-size-responsive.js | description": [
        "audits[image-size-responsive].description"
      ],
      "core/audits/image-size-responsive.js | columnDisplayed": [
        "audits[image-size-responsive].details.headings[2].label"
      ],
      "core/audits/image-size-responsive.js | columnActual": [
        "audits[image-size-responsive].details.headings[3].label"
      ],
      "core/audits/image-size-responsive.js | columnExpected": [
        "audits[image-size-responsive].details.headings[4].label"
      ],
      "core/audits/deprecations.js | title": [
        "audits.deprecations.title"
      ],
      "core/audits/deprecations.js | description": [
        "audits.deprecations.description"
      ],
      "core/audits/deprecations.js | columnDeprecate": [
        "audits.deprecations.details.headings[0].label"
      ],
      "core/audits/third-party-cookies.js | title": [
        "audits[third-party-cookies].title"
      ],
      "core/audits/third-party-cookies.js | description": [
        "audits[third-party-cookies].description"
      ],
      "core/audits/mainthread-work-breakdown.js | title": [
        "audits[mainthread-work-breakdown].title"
      ],
      "core/audits/mainthread-work-breakdown.js | description": [
        "audits[mainthread-work-breakdown].description"
      ],
      "core/audits/mainthread-work-breakdown.js | columnCategory": [
        "audits[mainthread-work-breakdown].details.headings[0].label"
      ],
      "core/audits/bootup-time.js | title": [
        "audits[bootup-time].title"
      ],
      "core/audits/bootup-time.js | description": [
        "audits[bootup-time].description"
      ],
      "core/audits/bootup-time.js | columnTotal": [
        "audits[bootup-time].details.headings[1].label"
      ],
      "core/audits/bootup-time.js | columnScriptEval": [
        "audits[bootup-time].details.headings[2].label"
      ],
      "core/audits/bootup-time.js | columnScriptParse": [
        "audits[bootup-time].details.headings[3].label"
      ],
      "core/audits/network-rtt.js | title": [
        "audits[network-rtt].title"
      ],
      "core/audits/network-rtt.js | description": [
        "audits[network-rtt].description"
      ],
      "core/audits/network-server-latency.js | title": [
        "audits[network-server-latency].title"
      ],
      "core/audits/network-server-latency.js | description": [
        "audits[network-server-latency].description"
      ],
      "core/lib/i18n/i18n.js | columnResourceType": [
        "audits[resource-summary].details.headings[0].label"
      ],
      "core/lib/i18n/i18n.js | columnRequests": [
        "audits[resource-summary].details.headings[1].label"
      ],
      "core/lib/i18n/i18n.js | columnTransferSize": [
        "audits[resource-summary].details.headings[2].label",
        "audits[total-byte-weight].details.headings[1].label",
        "audits[unminified-javascript].details.headings[1].label",
        "audits[unused-javascript].details.headings[1].label",
        "audits[cache-insight].details.headings[2].label",
        "audits[render-blocking-insight].details.headings[1].label"
      ],
      "core/lib/i18n/i18n.js | total": [
        "audits[resource-summary].details.items[0].label"
      ],
      "core/lib/i18n/i18n.js | imageResourceType": [
        "audits[resource-summary].details.items[1].label"
      ],
      "core/lib/i18n/i18n.js | otherResourceType": [
        "audits[resource-summary].details.items[2].label"
      ],
      "core/lib/i18n/i18n.js | scriptResourceType": [
        "audits[resource-summary].details.items[3].label"
      ],
      "core/lib/i18n/i18n.js | fontResourceType": [
        "audits[resource-summary].details.items[4].label"
      ],
      "core/lib/i18n/i18n.js | documentResourceType": [
        "audits[resource-summary].details.items[5].label"
      ],
      "core/lib/i18n/i18n.js | stylesheetResourceType": [
        "audits[resource-summary].details.items[6].label"
      ],
      "core/lib/i18n/i18n.js | mediaResourceType": [
        "audits[resource-summary].details.items[7].label"
      ],
      "core/lib/i18n/i18n.js | thirdPartyResourceType": [
        "audits[resource-summary].details.items[8].label"
      ],
      "core/audits/layout-shifts.js | title": [
        "audits[layout-shifts].title"
      ],
      "core/audits/layout-shifts.js | description": [
        "audits[layout-shifts].description"
      ],
      "core/lib/i18n/i18n.js | columnElement": [
        "audits[layout-shifts].details.headings[0].label",
        "audits[non-composited-animations].details.headings[0].label",
        "audits[dom-size-insight].details.headings[1].label"
      ],
      "core/audits/layout-shifts.js | columnScore": [
        "audits[layout-shifts].details.headings[1].label"
      ],
      "core/audits/long-tasks.js | title": [
        "audits[long-tasks].title"
      ],
      "core/audits/long-tasks.js | description": [
        "audits[long-tasks].description"
      ],
      "core/audits/long-tasks.js | displayValue": [
        {
          "values": {
            "itemCount": 3
          },
          "path": "audits[long-tasks].displayValue"
        }
      ],
      "core/audits/non-composited-animations.js | title": [
        "audits[non-composited-animations].title"
      ],
      "core/audits/non-composited-animations.js | description": [
        "audits[non-composited-animations].description"
      ],
      "core/audits/unsized-images.js | failureTitle": [
        "audits[unsized-images].title"
      ],
      "core/audits/unsized-images.js | description": [
        "audits[unsized-images].description"
      ],
      "core/audits/valid-source-maps.js | title": [
        "audits[valid-source-maps].title"
      ],
      "core/audits/valid-source-maps.js | description": [
        "audits[valid-source-maps].description"
      ],
      "core/audits/valid-source-maps.js | columnMapURL": [
        "audits[valid-source-maps].details.headings[1].label"
      ],
      "core/audits/csp-xss.js | title": [
        "audits[csp-xss].title"
      ],
      "core/audits/csp-xss.js | description": [
        "audits[csp-xss].description"
      ],
      "core/audits/csp-xss.js | columnDirective": [
        "audits[csp-xss].details.headings[1].label"
      ],
      "core/audits/csp-xss.js | columnSeverity": [
        "audits[csp-xss].details.headings[2].label"
      ],
      "core/lib/csp-evaluator.js | missingScriptSrc": [
        "audits[csp-xss].details.items[0].description"
      ],
      "core/lib/i18n/i18n.js | itemSeverityHigh": [
        "audits[csp-xss].details.items[0].severity",
        "audits[csp-xss].details.items[1].severity",
        "audits[has-hsts].details.items[0].severity",
        "audits[origin-isolation].details.items[0].severity",
        "audits[clickjacking-mitigation].details.items[0].severity",
        "audits[trusted-types-xss].details.items[0].severity"
      ],
      "core/lib/csp-evaluator.js | missingObjectSrc": [
        "audits[csp-xss].details.items[1].description"
      ],
      "core/audits/has-hsts.js | title": [
        "audits[has-hsts].title"
      ],
      "core/audits/has-hsts.js | description": [
        "audits[has-hsts].description"
      ],
      "core/audits/has-hsts.js | columnDirective": [
        "audits[has-hsts].details.headings[1].label"
      ],
      "core/audits/has-hsts.js | columnSeverity": [
        "audits[has-hsts].details.headings[2].label"
      ],
      "core/audits/has-hsts.js | lowMaxAge": [
        "audits[has-hsts].details.items[0].description"
      ],
      "core/audits/has-hsts.js | noSubdomain": [
        "audits[has-hsts].details.items[1].description"
      ],
      "core/lib/i18n/i18n.js | itemSeverityMedium": [
        "audits[has-hsts].details.items[1].severity",
        "audits[has-hsts].details.items[2].severity"
      ],
      "core/audits/has-hsts.js | noPreload": [
        "audits[has-hsts].details.items[2].description"
      ],
      "core/audits/origin-isolation.js | title": [
        "audits[origin-isolation].title"
      ],
      "core/audits/origin-isolation.js | description": [
        "audits[origin-isolation].description"
      ],
      "core/audits/origin-isolation.js | columnDirective": [
        "audits[origin-isolation].details.headings[1].label"
      ],
      "core/audits/origin-isolation.js | columnSeverity": [
        "audits[origin-isolation].details.headings[2].label"
      ],
      "core/audits/origin-isolation.js | noCoop": [
        "audits[origin-isolation].details.items[0].description"
      ],
      "core/audits/clickjacking-mitigation.js | title": [
        "audits[clickjacking-mitigation].title"
      ],
      "core/audits/clickjacking-mitigation.js | description": [
        "audits[clickjacking-mitigation].description"
      ],
      "core/audits/clickjacking-mitigation.js | columnSeverity": [
        "audits[clickjacking-mitigation].details.headings[1].label"
      ],
      "core/audits/clickjacking-mitigation.js | noClickjackingMitigation": [
        "audits[clickjacking-mitigation].details.items[0].description"
      ],
      "core/audits/trusted-types-xss.js | title": [
        "audits[trusted-types-xss].title"
      ],
      "core/audits/trusted-types-xss.js | description": [
        "audits[trusted-types-xss].description"
      ],
      "core/audits/trusted-types-xss.js | columnSeverity": [
        "audits[trusted-types-xss].details.headings[1].label"
      ],
      "core/audits/trusted-types-xss.js | noTrustedTypesToMitigateXss": [
        "audits[trusted-types-xss].details.items[0].description"
      ],
      "core/audits/accessibility/accesskeys.js | title": [
        "audits.accesskeys.title"
      ],
      "core/audits/accessibility/accesskeys.js | description": [
        "audits.accesskeys.description"
      ],
      "core/audits/accessibility/aria-allowed-attr.js | title": [
        "audits[aria-allowed-attr].title"
      ],
      "core/audits/accessibility/aria-allowed-attr.js | description": [
        "audits[aria-allowed-attr].description"
      ],
      "core/lib/i18n/i18n.js | columnFailingElem": [
        "audits[aria-allowed-attr].details.headings[0].label",
        "audits[aria-conditional-attr].details.headings[0].label",
        "audits[aria-hidden-body].details.headings[0].label",
        "audits[aria-prohibited-attr].details.headings[0].label",
        "audits[aria-valid-attr-value].details.headings[0].label",
        "audits[aria-valid-attr].details.headings[0].label",
        "audits[color-contrast].details.headings[0].label",
        "audits[document-title].details.headings[0].label",
        "audits[heading-order].details.headings[0].label",
        "audits[html-has-lang].details.headings[0].label",
        "audits[html-lang-valid].details.headings[0].label",
        "audits[image-alt].details.headings[0].label",
        "audits[image-redundant-alt].details.headings[0].label",
        "audits.label.details.headings[0].label",
        "audits[landmark-one-main].details.headings[0].label",
        "audits[link-name].details.headings[0].label",
        "audits.list.details.headings[0].label",
        "audits.listitem.details.headings[0].label",
        "audits[meta-viewport].details.headings[0].label",
        "audits[skip-link].details.headings[0].label",
        "audits[target-size].details.headings[0].label",
        "audits[paste-preventing-inputs].details.headings[0].label"
      ],
      "core/audits/accessibility/aria-allowed-role.js | title": [
        "audits[aria-allowed-role].title"
      ],
      "core/audits/accessibility/aria-allowed-role.js | description": [
        "audits[aria-allowed-role].description"
      ],
      "core/audits/accessibility/aria-command-name.js | title": [
        "audits[aria-command-name].title"
      ],
      "core/audits/accessibility/aria-command-name.js | description": [
        "audits[aria-command-name].description"
      ],
      "core/audits/accessibility/aria-conditional-attr.js | title": [
        "audits[aria-conditional-attr].title"
      ],
      "core/audits/accessibility/aria-conditional-attr.js | description": [
        "audits[aria-conditional-attr].description"
      ],
      "core/audits/accessibility/aria-deprecated-role.js | title": [
        "audits[aria-deprecated-role].title"
      ],
      "core/audits/accessibility/aria-deprecated-role.js | description": [
        "audits[aria-deprecated-role].description"
      ],
      "core/audits/accessibility/aria-dialog-name.js | title": [
        "audits[aria-dialog-name].title"
      ],
      "core/audits/accessibility/aria-dialog-name.js | description": [
        "audits[aria-dialog-name].description"
      ],
      "core/audits/accessibility/aria-hidden-body.js | title": [
        "audits[aria-hidden-body].title"
      ],
      "core/audits/accessibility/aria-hidden-body.js | description": [
        "audits[aria-hidden-body].description"
      ],
      "core/audits/accessibility/aria-hidden-focus.js | title": [
        "audits[aria-hidden-focus].title"
      ],
      "core/audits/accessibility/aria-hidden-focus.js | description": [
        "audits[aria-hidden-focus].description"
      ],
      "core/audits/accessibility/aria-input-field-name.js | title": [
        "audits[aria-input-field-name].title"
      ],
      "core/audits/accessibility/aria-input-field-name.js | description": [
        "audits[aria-input-field-name].description"
      ],
      "core/audits/accessibility/aria-meter-name.js | title": [
        "audits[aria-meter-name].title"
      ],
      "core/audits/accessibility/aria-meter-name.js | description": [
        "audits[aria-meter-name].description"
      ],
      "core/audits/accessibility/aria-progressbar-name.js | title": [
        "audits[aria-progressbar-name].title"
      ],
      "core/audits/accessibility/aria-progressbar-name.js | description": [
        "audits[aria-progressbar-name].description"
      ],
      "core/audits/accessibility/aria-prohibited-attr.js | title": [
        "audits[aria-prohibited-attr].title"
      ],
      "core/audits/accessibility/aria-prohibited-attr.js | description": [
        "audits[aria-prohibited-attr].description"
      ],
      "core/audits/accessibility/aria-required-attr.js | title": [
        "audits[aria-required-attr].title"
      ],
      "core/audits/accessibility/aria-required-attr.js | description": [
        "audits[aria-required-attr].description"
      ],
      "core/audits/accessibility/aria-required-children.js | title": [
        "audits[aria-required-children].title"
      ],
      "core/audits/accessibility/aria-required-children.js | description": [
        "audits[aria-required-children].description"
      ],
      "core/audits/accessibility/aria-required-parent.js | title": [
        "audits[aria-required-parent].title"
      ],
      "core/audits/accessibility/aria-required-parent.js | description": [
        "audits[aria-required-parent].description"
      ],
      "core/audits/accessibility/aria-roles.js | title": [
        "audits[aria-roles].title"
      ],
      "core/audits/accessibility/aria-roles.js | description": [
        "audits[aria-roles].description"
      ],
      "core/audits/accessibility/aria-text.js | title": [
        "audits[aria-text].title"
      ],
      "core/audits/accessibility/aria-text.js | description": [
        "audits[aria-text].description"
      ],
      "core/audits/accessibility/aria-toggle-field-name.js | title": [
        "audits[aria-toggle-field-name].title"
      ],
      "core/audits/accessibility/aria-toggle-field-name.js | description": [
        "audits[aria-toggle-field-name].description"
      ],
      "core/audits/accessibility/aria-tooltip-name.js | title": [
        "audits[aria-tooltip-name].title"
      ],
      "core/audits/accessibility/aria-tooltip-name.js | description": [
        "audits[aria-tooltip-name].description"
      ],
      "core/audits/accessibility/aria-treeitem-name.js | title": [
        "audits[aria-treeitem-name].title"
      ],
      "core/audits/accessibility/aria-treeitem-name.js | description": [
        "audits[aria-treeitem-name].description"
      ],
      "core/audits/accessibility/aria-valid-attr-value.js | title": [
        "audits[aria-valid-attr-value].title"
      ],
      "core/audits/accessibility/aria-valid-attr-value.js | description": [
        "audits[aria-valid-attr-value].description"
      ],
      "core/audits/accessibility/aria-valid-attr.js | title": [
        "audits[aria-valid-attr].title"
      ],
      "core/audits/accessibility/aria-valid-attr.js | description": [
        "audits[aria-valid-attr].description"
      ],
      "core/audits/accessibility/button-name.js | title": [
        "audits[button-name].title"
      ],
      "core/audits/accessibility/button-name.js | description": [
        "audits[button-name].description"
      ],
      "core/audits/accessibility/bypass.js | title": [
        "audits.bypass.title"
      ],
      "core/audits/accessibility/bypass.js | description": [
        "audits.bypass.description"
      ],
      "core/audits/accessibility/color-contrast.js | title": [
        "audits[color-contrast].title"
      ],
      "core/audits/accessibility/color-contrast.js | description": [
        "audits[color-contrast].description"
      ],
      "core/audits/accessibility/definition-list.js | title": [
        "audits[definition-list].title"
      ],
      "core/audits/accessibility/definition-list.js | description": [
        "audits[definition-list].description"
      ],
      "core/audits/accessibility/dlitem.js | title": [
        "audits.dlitem.title"
      ],
      "core/audits/accessibility/dlitem.js | description": [
        "audits.dlitem.description"
      ],
      "core/audits/accessibility/document-title.js | title": [
        "audits[document-title].title"
      ],
      "core/audits/accessibility/document-title.js | description": [
        "audits[document-title].description"
      ],
      "core/audits/accessibility/duplicate-id-aria.js | title": [
        "audits[duplicate-id-aria].title"
      ],
      "core/audits/accessibility/duplicate-id-aria.js | description": [
        "audits[duplicate-id-aria].description"
      ],
      "core/audits/accessibility/empty-heading.js | title": [
        "audits[empty-heading].title"
      ],
      "core/audits/accessibility/empty-heading.js | description": [
        "audits[empty-heading].description"
      ],
      "core/audits/accessibility/form-field-multiple-labels.js | title": [
        "audits[form-field-multiple-labels].title"
      ],
      "core/audits/accessibility/form-field-multiple-labels.js | description": [
        "audits[form-field-multiple-labels].description"
      ],
      "core/audits/accessibility/frame-title.js | title": [
        "audits[frame-title].title"
      ],
      "core/audits/accessibility/frame-title.js | description": [
        "audits[frame-title].description"
      ],
      "core/audits/accessibility/heading-order.js | failureTitle": [
        "audits[heading-order].title"
      ],
      "core/audits/accessibility/heading-order.js | description": [
        "audits[heading-order].description"
      ],
      "core/audits/accessibility/html-has-lang.js | title": [
        "audits[html-has-lang].title"
      ],
      "core/audits/accessibility/html-has-lang.js | description": [
        "audits[html-has-lang].description"
      ],
      "core/audits/accessibility/html-lang-valid.js | title": [
        "audits[html-lang-valid].title"
      ],
      "core/audits/accessibility/html-lang-valid.js | description": [
        "audits[html-lang-valid].description"
      ],
      "core/audits/accessibility/html-xml-lang-mismatch.js | title": [
        "audits[html-xml-lang-mismatch].title"
      ],
      "core/audits/accessibility/html-xml-lang-mismatch.js | description": [
        "audits[html-xml-lang-mismatch].description"
      ],
      "core/audits/accessibility/identical-links-same-purpose.js | title": [
        "audits[identical-links-same-purpose].title"
      ],
      "core/audits/accessibility/identical-links-same-purpose.js | description": [
        "audits[identical-links-same-purpose].description"
      ],
      "core/audits/accessibility/image-alt.js | failureTitle": [
        "audits[image-alt].title"
      ],
      "core/audits/accessibility/image-alt.js | description": [
        "audits[image-alt].description"
      ],
      "core/audits/accessibility/image-redundant-alt.js | title": [
        "audits[image-redundant-alt].title"
      ],
      "core/audits/accessibility/image-redundant-alt.js | description": [
        "audits[image-redundant-alt].description"
      ],
      "core/audits/accessibility/input-button-name.js | title": [
        "audits[input-button-name].title"
      ],
      "core/audits/accessibility/input-button-name.js | description": [
        "audits[input-button-name].description"
      ],
      "core/audits/accessibility/input-image-alt.js | title": [
        "audits[input-image-alt].title"
      ],
      "core/audits/accessibility/input-image-alt.js | description": [
        "audits[input-image-alt].description"
      ],
      "core/audits/accessibility/label-content-name-mismatch.js | title": [
        "audits[label-content-name-mismatch].title"
      ],
      "core/audits/accessibility/label-content-name-mismatch.js | description": [
        "audits[label-content-name-mismatch].description"
      ],
      "core/audits/accessibility/label.js | title": [
        "audits.label.title"
      ],
      "core/audits/accessibility/label.js | description": [
        "audits.label.description"
      ],
      "core/audits/accessibility/landmark-one-main.js | failureTitle": [
        "audits[landmark-one-main].title"
      ],
      "core/audits/accessibility/landmark-one-main.js | description": [
        "audits[landmark-one-main].description"
      ],
      "core/audits/accessibility/link-name.js | title": [
        "audits[link-name].title"
      ],
      "core/audits/accessibility/link-name.js | description": [
        "audits[link-name].description"
      ],
      "core/audits/accessibility/link-in-text-block.js | title": [
        "audits[link-in-text-block].title"
      ],
      "core/audits/accessibility/link-in-text-block.js | description": [
        "audits[link-in-text-block].description"
      ],
      "core/audits/accessibility/list.js | title": [
        "audits.list.title"
      ],
      "core/audits/accessibility/list.js | description": [
        "audits.list.description"
      ],
      "core/audits/accessibility/listitem.js | title": [
        "audits.listitem.title"
      ],
      "core/audits/accessibility/listitem.js | description": [
        "audits.listitem.description"
      ],
      "core/audits/accessibility/meta-refresh.js | title": [
        "audits[meta-refresh].title"
      ],
      "core/audits/accessibility/meta-refresh.js | description": [
        "audits[meta-refresh].description"
      ],
      "core/audits/accessibility/meta-viewport.js | title": [
        "audits[meta-viewport].title"
      ],
      "core/audits/accessibility/meta-viewport.js | description": [
        "audits[meta-viewport].description"
      ],
      "core/audits/accessibility/object-alt.js | title": [
        "audits[object-alt].title"
      ],
      "core/audits/accessibility/object-alt.js | description": [
        "audits[object-alt].description"
      ],
      "core/audits/accessibility/select-name.js | title": [
        "audits[select-name].title"
      ],
      "core/audits/accessibility/select-name.js | description": [
        "audits[select-name].description"
      ],
      "core/audits/accessibility/skip-link.js | failureTitle": [
        "audits[skip-link].title"
      ],
      "core/audits/accessibility/skip-link.js | description": [
        "audits[skip-link].description"
      ],
      "core/audits/accessibility/tabindex.js | title": [
        "audits.tabindex.title"
      ],
      "core/audits/accessibility/tabindex.js | description": [
        "audits.tabindex.description"
      ],
      "core/audits/accessibility/table-duplicate-name.js | title": [
        "audits[table-duplicate-name].title"
      ],
      "core/audits/accessibility/table-duplicate-name.js | description": [
        "audits[table-duplicate-name].description"
      ],
      "core/audits/accessibility/table-fake-caption.js | title": [
        "audits[table-fake-caption].title"
      ],
      "core/audits/accessibility/table-fake-caption.js | description": [
        "audits[table-fake-caption].description"
      ],
      "core/audits/accessibility/target-size.js | title": [
        "audits[target-size].title"
      ],
      "core/audits/accessibility/target-size.js | description": [
        "audits[target-size].description"
      ],
      "core/audits/accessibility/td-has-header.js | title": [
        "audits[td-has-header].title"
      ],
      "core/audits/accessibility/td-has-header.js | description": [
        "audits[td-has-header].description"
      ],
      "core/audits/accessibility/td-headers-attr.js | title": [
        "audits[td-headers-attr].title"
      ],
      "core/audits/accessibility/td-headers-attr.js | description": [
        "audits[td-headers-attr].description"
      ],
      "core/audits/accessibility/th-has-data-cells.js | title": [
        "audits[th-has-data-cells].title"
      ],
      "core/audits/accessibility/th-has-data-cells.js | description": [
        "audits[th-has-data-cells].description"
      ],
      "core/audits/accessibility/valid-lang.js | title": [
        "audits[valid-lang].title"
      ],
      "core/audits/accessibility/valid-lang.js | description": [
        "audits[valid-lang].description"
      ],
      "core/audits/accessibility/video-caption.js | title": [
        "audits[video-caption].title"
      ],
      "core/audits/accessibility/video-caption.js | description": [
        "audits[video-caption].description"
      ],
      "core/audits/byte-efficiency/total-byte-weight.js | failureTitle": [
        "audits[total-byte-weight].title"
      ],
      "core/audits/byte-efficiency/total-byte-weight.js | description": [
        "audits[total-byte-weight].description"
      ],
      "core/audits/byte-efficiency/total-byte-weight.js | displayValue": [
        {
          "values": {
            "totalBytes": 3325705
          },
          "path": "audits[total-byte-weight].displayValue"
        }
      ],
      "core/audits/byte-efficiency/unminified-css.js | title": [
        "audits[unminified-css].title"
      ],
      "core/audits/byte-efficiency/unminified-css.js | description": [
        "audits[unminified-css].description"
      ],
      "core/audits/byte-efficiency/unminified-javascript.js | title": [
        "audits[unminified-javascript].title"
      ],
      "core/audits/byte-efficiency/unminified-javascript.js | description": [
        "audits[unminified-javascript].description"
      ],
      "core/lib/i18n/i18n.js | displayValueByteSavings": [
        {
          "values": {
            "wastedBytes": 290619
          },
          "path": "audits[unminified-javascript].displayValue"
        },
        {
          "values": {
            "wastedBytes": 76111
          },
          "path": "audits[unused-javascript].displayValue"
        },
        {
          "values": {
            "wastedBytes": 174222.90000000002
          },
          "path": "audits[cache-insight].displayValue"
        },
        {
          "values": {
            "wastedBytes": 2307459
          },
          "path": "audits[image-delivery-insight].displayValue"
        }
      ],
      "core/lib/i18n/i18n.js | columnWastedBytes": [
        "audits[unminified-javascript].details.headings[2].label",
        "audits[unused-javascript].details.headings[2].label",
        "audits[font-display-insight].details.headings[1].label",
        "audits[image-delivery-insight].details.headings[3].label"
      ],
      "core/audits/byte-efficiency/unused-css-rules.js | title": [
        "audits[unused-css-rules].title"
      ],
      "core/audits/byte-efficiency/unused-css-rules.js | description": [
        "audits[unused-css-rules].description"
      ],
      "core/audits/byte-efficiency/unused-javascript.js | title": [
        "audits[unused-javascript].title"
      ],
      "core/audits/byte-efficiency/unused-javascript.js | description": [
        "audits[unused-javascript].description"
      ],
      "core/audits/dobetterweb/doctype.js | title": [
        "audits.doctype.title"
      ],
      "core/audits/dobetterweb/doctype.js | description": [
        "audits.doctype.description"
      ],
      "core/audits/dobetterweb/charset.js | title": [
        "audits.charset.title"
      ],
      "core/audits/dobetterweb/charset.js | description": [
        "audits.charset.description"
      ],
      "core/audits/dobetterweb/geolocation-on-start.js | title": [
        "audits[geolocation-on-start].title"
      ],
      "core/audits/dobetterweb/geolocation-on-start.js | description": [
        "audits[geolocation-on-start].description"
      ],
      "core/audits/dobetterweb/inspector-issues.js | title": [
        "audits[inspector-issues].title"
      ],
      "core/audits/dobetterweb/inspector-issues.js | description": [
        "audits[inspector-issues].description"
      ],
      "core/audits/dobetterweb/inspector-issues.js | columnIssueType": [
        "audits[inspector-issues].details.headings[0].label"
      ],
      "core/audits/dobetterweb/js-libraries.js | title": [
        "audits[js-libraries].title"
      ],
      "core/audits/dobetterweb/js-libraries.js | description": [
        "audits[js-libraries].description"
      ],
      "core/audits/dobetterweb/js-libraries.js | columnVersion": [
        "audits[js-libraries].details.headings[1].label"
      ],
      "core/audits/dobetterweb/notification-on-start.js | title": [
        "audits[notification-on-start].title"
      ],
      "core/audits/dobetterweb/notification-on-start.js | description": [
        "audits[notification-on-start].description"
      ],
      "core/audits/dobetterweb/paste-preventing-inputs.js | title": [
        "audits[paste-preventing-inputs].title"
      ],
      "core/audits/dobetterweb/paste-preventing-inputs.js | description": [
        "audits[paste-preventing-inputs].description"
      ],
      "core/audits/seo/meta-description.js | title": [
        "audits[meta-description].title"
      ],
      "core/audits/seo/meta-description.js | description": [
        "audits[meta-description].description"
      ],
      "core/audits/seo/http-status-code.js | title": [
        "audits[http-status-code].title"
      ],
      "core/audits/seo/http-status-code.js | description": [
        "audits[http-status-code].description"
      ],
      "core/audits/seo/link-text.js | title": [
        "audits[link-text].title"
      ],
      "core/audits/seo/link-text.js | description": [
        "audits[link-text].description"
      ],
      "core/audits/seo/crawlable-anchors.js | failureTitle": [
        "audits[crawlable-anchors].title"
      ],
      "core/audits/seo/crawlable-anchors.js | description": [
        "audits[crawlable-anchors].description"
      ],
      "core/audits/seo/crawlable-anchors.js | columnFailingLink": [
        "audits[crawlable-anchors].details.headings[0].label"
      ],
      "core/audits/seo/is-crawlable.js | failureTitle": [
        "audits[is-crawlable].title"
      ],
      "core/audits/seo/is-crawlable.js | description": [
        "audits[is-crawlable].description"
      ],
      "core/audits/seo/robots-txt.js | title": [
        "audits[robots-txt].title"
      ],
      "core/audits/seo/robots-txt.js | description": [
        "audits[robots-txt].description"
      ],
      "core/audits/seo/hreflang.js | title": [
        "audits.hreflang.title"
      ],
      "core/audits/seo/hreflang.js | description": [
        "audits.hreflang.description"
      ],
      "core/audits/seo/canonical.js | title": [
        "audits.canonical.title"
      ],
      "core/audits/seo/canonical.js | description": [
        "audits.canonical.description"
      ],
      "core/audits/seo/manual/structured-data.js | title": [
        "audits[structured-data].title"
      ],
      "core/audits/seo/manual/structured-data.js | description": [
        "audits[structured-data].description"
      ],
      "core/audits/bf-cache.js | title": [
        "audits[bf-cache].title"
      ],
      "core/audits/bf-cache.js | description": [
        "audits[bf-cache].description"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/Cache.js | title": [
        "audits[cache-insight].title"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/Cache.js | description": [
        "audits[cache-insight].description"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/Cache.js | requestColumn": [
        "audits[cache-insight].details.headings[0].label"
      ],
      "core/lib/i18n/i18n.js | columnCacheTTL": [
        "audits[cache-insight].details.headings[1].label"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/CLSCulprits.js | title": [
        "audits[cls-culprits-insight].title"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/CLSCulprits.js | description": [
        "audits[cls-culprits-insight].description"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/DocumentLatency.js | title": [
        "audits[document-latency-insight].title"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/DocumentLatency.js | description": [
        "audits[document-latency-insight].description"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/DocumentLatency.js | failedRedirects": [
        {
          "values": {
            "PH1": 2,
            "PH2": "104 ms"
          },
          "path": "audits[document-latency-insight].details.items.noRedirects.label"
        }
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/DocumentLatency.js | passingServerResponseTime": [
        {
          "values": {
            "PH1": "29 ms"
          },
          "path": "audits[document-latency-insight].details.items.serverResponseIsFast.label"
        }
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/DocumentLatency.js | passingTextCompression": [
        "audits[document-latency-insight].details.items.usesCompression.label"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/DOMSize.js | title": [
        "audits[dom-size-insight].title"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/DOMSize.js | description": [
        "audits[dom-size-insight].description"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/DOMSize.js | statistic": [
        "audits[dom-size-insight].details.headings[0].label"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/DOMSize.js | value": [
        "audits[dom-size-insight].details.headings[2].label"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/DOMSize.js | totalElements": [
        "audits[dom-size-insight].details.items[0].statistic"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/DOMSize.js | maxDOMDepth": [
        "audits[dom-size-insight].details.items[1].statistic"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/DOMSize.js | maxChildren": [
        "audits[dom-size-insight].details.items[2].statistic"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/DuplicatedJavaScript.js | title": [
        "audits[duplicated-javascript-insight].title"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/DuplicatedJavaScript.js | description": [
        "audits[duplicated-javascript-insight].description"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/FontDisplay.js | title": [
        "audits[font-display-insight].title"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/FontDisplay.js | description": [
        "audits[font-display-insight].description"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/ForcedReflow.js | title": [
        "audits[forced-reflow-insight].title"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/ForcedReflow.js | description": [
        "audits[forced-reflow-insight].description"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/ForcedReflow.js | totalReflowTime": [
        "audits[forced-reflow-insight].details.items[0].headings[1].label"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/ImageDelivery.js | title": [
        "audits[image-delivery-insight].title"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/ImageDelivery.js | description": [
        "audits[image-delivery-insight].description"
      ],
      "core/lib/i18n/i18n.js | columnResourceSize": [
        "audits[image-delivery-insight].details.headings[2].label"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/ImageDelivery.js | useResponsiveSize": [
        {
          "values": {
            "PH1": "7007x3943",
            "PH2": "412x232"
          },
          "path": "audits[image-delivery-insight].details.items[0].subItems.items[0].reason"
        },
        {
          "values": {
            "PH1": "270x270",
            "PH2": "104x104"
          },
          "path": "audits[image-delivery-insight].details.items[1].subItems.items[1].reason"
        },
        {
          "values": {
            "PH1": "384x216",
            "PH2": "124x70"
          },
          "path": "audits[image-delivery-insight].details.items[2].subItems.items[0].reason"
        },
        {
          "values": {
            "PH1": "384x216",
            "PH2": "124x70"
          },
          "path": "audits[image-delivery-insight].details.items[3].subItems.items[0].reason"
        },
        {
          "values": {
            "PH1": "384x216",
            "PH2": "124x70"
          },
          "path": "audits[image-delivery-insight].details.items[4].subItems.items[0].reason"
        },
        {
          "values": {
            "PH1": "384x216",
            "PH2": "124x70"
          },
          "path": "audits[image-delivery-insight].details.items[5].subItems.items[0].reason"
        },
        {
          "values": {
            "PH1": "384x216",
            "PH2": "124x70"
          },
          "path": "audits[image-delivery-insight].details.items[6].subItems.items[0].reason"
        },
        {
          "values": {
            "PH1": "384x216",
            "PH2": "124x70"
          },
          "path": "audits[image-delivery-insight].details.items[7].subItems.items[0].reason"
        }
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/ImageDelivery.js | useModernFormat": [
        "audits[image-delivery-insight].details.items[1].subItems.items[0].reason",
        "audits[image-delivery-insight].details.items[8].subItems.items[0].reason"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/INPBreakdown.js | title": [
        "audits[inp-breakdown-insight].title"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/INPBreakdown.js | description": [
        "audits[inp-breakdown-insight].description"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/LCPBreakdown.js | title": [
        "audits[lcp-breakdown-insight].title"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/LCPBreakdown.js | description": [
        "audits[lcp-breakdown-insight].description"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/LCPBreakdown.js | subpart": [
        "audits[lcp-breakdown-insight].details.items[0].headings[0].label"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/LCPBreakdown.js | timeToFirstByte": [
        "audits[lcp-breakdown-insight].details.items[0].items[0].label"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/LCPBreakdown.js | resourceLoadDelay": [
        "audits[lcp-breakdown-insight].details.items[0].items[1].label"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/LCPBreakdown.js | resourceLoadDuration": [
        "audits[lcp-breakdown-insight].details.items[0].items[2].label"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/LCPBreakdown.js | elementRenderDelay": [
        "audits[lcp-breakdown-insight].details.items[0].items[3].label"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/LCPDiscovery.js | title": [
        "audits[lcp-discovery-insight].title"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/LCPDiscovery.js | description": [
        "audits[lcp-discovery-insight].description"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/LCPDiscovery.js | fetchPriorityShouldBeApplied": [
        "audits[lcp-discovery-insight].details.items[0].items.priorityHinted.label"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/LCPDiscovery.js | requestDiscoverable": [
        "audits[lcp-discovery-insight].details.items[0].items.requestDiscoverable.label"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/LCPDiscovery.js | lazyLoadNotApplied": [
        "audits[lcp-discovery-insight].details.items[0].items.eagerlyLoaded.label"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/LegacyJavaScript.js | title": [
        "audits[legacy-javascript-insight].title"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/LegacyJavaScript.js | description": [
        "audits[legacy-javascript-insight].description"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/ModernHTTP.js | title": [
        "audits[modern-http-insight].title"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/ModernHTTP.js | description": [
        "audits[modern-http-insight].description"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/ModernHTTP.js | protocol": [
        "audits[modern-http-insight].details.headings[1].label"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/NetworkDependencyTree.js | title": [
        "audits[network-dependency-tree-insight].title"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/NetworkDependencyTree.js | description": [
        "audits[network-dependency-tree-insight].description"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/NetworkDependencyTree.js | preconnectOriginsTableTitle": [
        "audits[network-dependency-tree-insight].details.items[1].title"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/NetworkDependencyTree.js | preconnectOriginsTableDescription": [
        "audits[network-dependency-tree-insight].details.items[1].description"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/NetworkDependencyTree.js | columnOrigin": [
        "audits[network-dependency-tree-insight].details.items[1].value.headings[0].label"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/NetworkDependencyTree.js | columnSource": [
        "audits[network-dependency-tree-insight].details.items[1].value.headings[1].label"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/NetworkDependencyTree.js | estSavingTableTitle": [
        "audits[network-dependency-tree-insight].details.items[2].title"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/NetworkDependencyTree.js | estSavingTableDescription": [
        "audits[network-dependency-tree-insight].details.items[2].description"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/NetworkDependencyTree.js | noPreconnectCandidates": [
        "audits[network-dependency-tree-insight].details.items[2].value.value"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/RenderBlocking.js | title": [
        "audits[render-blocking-insight].title"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/RenderBlocking.js | description": [
        "audits[render-blocking-insight].description"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/ThirdParties.js | title": [
        "audits[third-parties-insight].title"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/ThirdParties.js | description": [
        "audits[third-parties-insight].description"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/Viewport.js | title": [
        "audits[viewport-insight].title"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/Viewport.js | description": [
        "audits[viewport-insight].description"
      ],
      "core/config/default-config.js | performanceCategoryTitle": [
        "categories.performance.title"
      ],
      "core/config/default-config.js | a11yCategoryTitle": [
        "categories.accessibility.title"
      ],
      "core/config/default-config.js | a11yCategoryDescription": [
        "categories.accessibility.description"
      ],
      "core/config/default-config.js | a11yCategoryManualDescription": [
        "categories.accessibility.manualDescription"
      ],
      "core/config/default-config.js | bestPracticesCategoryTitle": [
        "categories[best-practices].title"
      ],
      "core/config/default-config.js | seoCategoryTitle": [
        "categories.seo.title"
      ],
      "core/config/default-config.js | seoCategoryDescription": [
        "categories.seo.description"
      ],
      "core/config/default-config.js | seoCategoryManualDescription": [
        "categories.seo.manualDescription"
      ],
      "core/config/default-config.js | metricGroupTitle": [
        "categoryGroups.metrics.title"
      ],
      "core/config/default-config.js | insightsGroupTitle": [
        "categoryGroups.insights.title"
      ],
      "core/config/default-config.js | insightsGroupDescription": [
        "categoryGroups.insights.description"
      ],
      "core/config/default-config.js | diagnosticsGroupTitle": [
        "categoryGroups.diagnostics.title"
      ],
      "core/config/default-config.js | diagnosticsGroupDescription": [
        "categoryGroups.diagnostics.description"
      ],
      "core/config/default-config.js | a11yBestPracticesGroupTitle": [
        "categoryGroups[a11y-best-practices].title"
      ],
      "core/config/default-config.js | a11yBestPracticesGroupDescription": [
        "categoryGroups[a11y-best-practices].description"
      ],
      "core/config/default-config.js | a11yColorContrastGroupTitle": [
        "categoryGroups[a11y-color-contrast].title"
      ],
      "core/config/default-config.js | a11yColorContrastGroupDescription": [
        "categoryGroups[a11y-color-contrast].description"
      ],
      "core/config/default-config.js | a11yNamesLabelsGroupTitle": [
        "categoryGroups[a11y-names-labels].title"
      ],
      "core/config/default-config.js | a11yNamesLabelsGroupDescription": [
        "categoryGroups[a11y-names-labels].description"
      ],
      "core/config/default-config.js | a11yNavigationGroupTitle": [
        "categoryGroups[a11y-navigation].title"
      ],
      "core/config/default-config.js | a11yNavigationGroupDescription": [
        "categoryGroups[a11y-navigation].description"
      ],
      "core/config/default-config.js | a11yAriaGroupTitle": [
        "categoryGroups[a11y-aria].title"
      ],
      "core/config/default-config.js | a11yAriaGroupDescription": [
        "categoryGroups[a11y-aria].description"
      ],
      "core/config/default-config.js | a11yLanguageGroupTitle": [
        "categoryGroups[a11y-language].title"
      ],
      "core/config/default-config.js | a11yLanguageGroupDescription": [
        "categoryGroups[a11y-language].description"
      ],
      "core/config/default-config.js | a11yAudioVideoGroupTitle": [
        "categoryGroups[a11y-audio-video].title"
      ],
      "core/config/default-config.js | a11yAudioVideoGroupDescription": [
        "categoryGroups[a11y-audio-video].description"
      ],
      "core/config/default-config.js | a11yTablesListsVideoGroupTitle": [
        "categoryGroups[a11y-tables-lists].title"
      ],
      "core/config/default-config.js | a11yTablesListsVideoGroupDescription": [
        "categoryGroups[a11y-tables-lists].description"
      ],
      "core/config/default-config.js | seoMobileGroupTitle": [
        "categoryGroups[seo-mobile].title"
      ],
      "core/config/default-config.js | seoMobileGroupDescription": [
        "categoryGroups[seo-mobile].description"
      ],
      "core/config/default-config.js | seoContentGroupTitle": [
        "categoryGroups[seo-content].title"
      ],
      "core/config/default-config.js | seoContentGroupDescription": [
        "categoryGroups[seo-content].description"
      ],
      "core/config/default-config.js | seoCrawlingGroupTitle": [
        "categoryGroups[seo-crawl].title"
      ],
      "core/config/default-config.js | seoCrawlingGroupDescription": [
        "categoryGroups[seo-crawl].description"
      ],
      "core/config/default-config.js | bestPracticesTrustSafetyGroupTitle": [
        "categoryGroups[best-practices-trust-safety].title"
      ],
      "core/config/default-config.js | bestPracticesUXGroupTitle": [
        "categoryGroups[best-practices-ux].title"
      ],
      "core/config/default-config.js | bestPracticesBrowserCompatGroupTitle": [
        "categoryGroups[best-practices-browser-compat].title"
      ],
      "core/config/default-config.js | bestPracticesGeneralGroupTitle": [
        "categoryGroups[best-practices-general].title"
      ]
    }
  }
}
