diff --git a/.npmignore b/.npmignore new file mode 100644 index 0000000000000000000000000000000000000000..3f1bb703cf9f801e40fb42a8cc8652e20efb7049 --- /dev/null +++ b/.npmignore @@ -0,0 +1 @@ +dist/_**/**/* \ No newline at end of file diff --git a/dist/olHelpers/mapPopupCls.js b/dist/olHelpers/mapPopupCls.js index c801debb04388aa3f32186ecdf790189cb8640d7..1042a3f9ce7257ceabeb0c6407193c6a9f64f025 100644 --- a/dist/olHelpers/mapPopupCls.js +++ b/dist/olHelpers/mapPopupCls.js @@ -215,7 +215,8 @@ var MapPopupCls = (function (_super) { } return false; }); - _this.map.getTargetElement().style.cursor = hit ? 'pointer' : ''; + var mapElement = _this.map.getTargetElement(); + mapElement.style.cursor = hit ? 'pointer' : ''; }); return true; }; diff --git a/dist/olHelpers/mapPopupCls.js.map b/dist/olHelpers/mapPopupCls.js.map index b1483e142d295a552b15d75075638cff07ff13b6..8cf7f59febaf6ace0b0b87e5eaf974c9bab4d9b6 100644 --- a/dist/olHelpers/mapPopupCls.js.map +++ b/dist/olHelpers/mapPopupCls.js.map @@ -1 +1 @@ -{"version":3,"file":"mapPopupCls.js","sourceRoot":"","sources":["../../src-ts/olHelpers/mapPopupCls.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"mapPopupCls.js","sourceRoot":"","sources":["../../src-ts/olHelpers/mapPopupCls.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/package.json b/package.json index 099e3146874251d965f07b20b43b7d207428e010..1aa24f72f272502358702368602ec216306dab12 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,7 @@ "doc", "ext", "css", + "src", "src-ts" ], "scripts": { diff --git a/src-ts/olHelpers/mapPopupCls.ts b/src-ts/olHelpers/mapPopupCls.ts index 46fa30599624bac0bedc60921b262ba61ceac425..48a4ad8d192cc8b91c09fcf229bdcbd71dbb68db 100644 --- a/src-ts/olHelpers/mapPopupCls.ts +++ b/src-ts/olHelpers/mapPopupCls.ts @@ -299,7 +299,8 @@ class MapPopupCls extends MapInteractionBase { return false; }); - this.map.getTargetElement().style.cursor = hit ? 'pointer' : ''; + let mapElement = this.map.getTargetElement() as HTMLElement; + mapElement.style.cursor = hit ? 'pointer' : ''; }); return true; diff --git a/test-html/_css/all-ol-style.css b/test-html/_css/all-ol-style.css new file mode 100644 index 0000000000000000000000000000000000000000..0794795dccd72cd0313ef7f46ea8bc0bbf24b826 --- /dev/null +++ b/test-html/_css/all-ol-style.css @@ -0,0 +1,162 @@ +.ol-control,.ol-scale-line{position:absolute;padding:2px}.ol-box{box-sizing:border-box;border-radius:2px;border:2px solid #00f}.ol-mouse-position{top:8px;right:8px;position:absolute}.ol-scale-line{background:rgba(0,60,136,.3);border-radius:4px;bottom:8px;left:8px}.ol-scale-line-inner{border:1px solid #eee;border-top:none;color:#eee;font-size:10px;text-align:center;margin:1px;will-change:contents,width}.ol-overlay-container{will-change:left,right,top,bottom}.ol-unsupported{display:none}.ol-viewport .ol-unselectable{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent}.ol-control{background-color:rgba(255,255,255,.4);border-radius:4px}.ol-control:hover{background-color:rgba(255,255,255,.6)}.ol-zoom{top:.5em;left:.5em}.ol-rotate{top:.5em;right:.5em;transition:opacity .25s linear,visibility 0s linear}.ol-rotate.ol-hidden{opacity:0;visibility:hidden;transition:opacity .25s linear,visibility 0s linear .25s}.ol-zoom-extent{top:4.643em;left:.5em}.ol-full-screen{right:.5em;top:.5em}@media print{.ol-control{display:none}}.ol-control button{display:block;margin:1px;padding:0;color:#fff;font-size:1.14em;font-weight:700;text-decoration:none;text-align:center;height:1.375em;width:1.375em;line-height:.4em;background-color:rgba(0,60,136,.5);border:none;border-radius:2px}.ol-control button::-moz-focus-inner{border:none;padding:0}.ol-zoom-extent button{line-height:1.4em}.ol-compass{display:block;font-weight:400;font-size:1.2em;will-change:transform}.ol-touch .ol-control button{font-size:1.5em}.ol-touch .ol-zoom-extent{top:5.5em}.ol-control button:focus,.ol-control button:hover{text-decoration:none;background-color:rgba(0,60,136,.7)}.ol-zoom .ol-zoom-in{border-radius:2px 2px 0 0}.ol-zoom .ol-zoom-out{border-radius:0 0 2px 2px}.ol-attribution{text-align:right;bottom:.5em;right:.5em;max-width:calc(100% - 1.3em)}.ol-attribution ul{margin:0;padding:0 .5em;font-size:.7rem;line-height:1.375em;color:#000;text-shadow:0 0 2px #fff}.ol-attribution li{display:inline;list-style:none;line-height:inherit}.ol-attribution li:not(:last-child):after{content:" "}.ol-attribution img{max-height:2em;max-width:inherit;vertical-align:middle}.ol-attribution button,.ol-attribution ul{display:inline-block}.ol-attribution.ol-collapsed ul{display:none}.ol-attribution.ol-logo-only ul{display:block}.ol-attribution:not(.ol-collapsed){background:rgba(255,255,255,.8)}.ol-attribution.ol-uncollapsible{bottom:0;right:0;border-radius:4px 0 0;height:1.1em;line-height:1em}.ol-attribution.ol-logo-only{background:0 0;bottom:.4em;height:1.1em;line-height:1em}.ol-attribution.ol-uncollapsible img{margin-top:-.2em;max-height:1.6em}.ol-attribution.ol-logo-only button,.ol-attribution.ol-uncollapsible button{display:none}.ol-zoomslider{top:4.5em;left:.5em;height:200px}.ol-zoomslider button{position:relative;height:10px}.ol-touch .ol-zoomslider{top:5.5em}.ol-overviewmap{left:.5em;bottom:.5em}.ol-overviewmap.ol-uncollapsible{bottom:0;left:0;border-radius:0 4px 0 0}.ol-overviewmap .ol-overviewmap-map,.ol-overviewmap button{display:inline-block}.ol-overviewmap .ol-overviewmap-map{border:1px solid #7b98bc;height:150px;margin:2px;width:150px}.ol-overviewmap:not(.ol-collapsed) button{bottom:1px;left:2px;position:absolute}.ol-overviewmap.ol-collapsed .ol-overviewmap-map,.ol-overviewmap.ol-uncollapsible button{display:none}.ol-overviewmap:not(.ol-collapsed){background:rgba(255,255,255,.8)}.ol-overviewmap-box{border:2px dotted rgba(0,60,136,.7)} +.legend-container { + list-style: none; + border: solid black 1px; + border-radius: 5px; + background-color: rgba(211, 211, 211, 0.2); + margin: 2px; + padding: 2px; +} +.legend-container ul { + list-style: none; + padding-left: 17px; +} +.legend-container li { + border-radius: 7px; + margin: 2px; + padding: 2px 4px; +} +.legend-container hr { + display: inline-block; + width: 40px; + height: 10px; + background-color: blue; + border: none; + margin: 0 0 3px 7px; +} +.legend-container > li:first-child { + font-weight: bold; + min-height: 25px; +} +.legend-container > li:first-child input { + display: none; +} +.legend-container > li:first-child input + label { + width: 100px; + height: 19px; + margin: 5px; + display: inline-block; +} +.legend-container > li:first-child input + label > span { + display: inline-block; + width: 59px; + height: 19px; + background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHQAAAATCAMAAAB2tdn3AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMAUExURQAAAAcHBwoKCgsLCw0NDQ4ODg8PDxAQEBYWFhcXFxsbGxwcHB0dHR4eHh8fHyAgICEhISIiIiQkJCUlJSYmJicnJygoKCkpKSoqKiwsLC0tLS4uLi8vLzAwMDQ0NDU1NTc3Nzg4ODk5OT09PT4+Pj8/P0FBQUJCQkNDQ0REREZGRkdHR0hISElJSUpKSktLS0xMTE1NTU5OTk9PT1FRUVJSUlNTU1RUVFZWVldXV1hYWFlZWVpaWl5eXmBgYGFhYWJiYmRkZGZmZmhoaGlpaWpqam1tbW5ubm9vb3Nzc3V1dXd3d3l5eXx8fH5+fn9/fwCADwGBEQKCEgGJEwKKEwSMFQGRFAKSFAKTFQiXGguUHRifKAynGAipFROjJhukLR+iMSaWNCuVOCGhMSSmND+oTT20SwnQGwzRHRDCJRPDKADjHQDmGgDmGwDlHQHpHwDyFwDzGQD1GAD2GQD3HQD3HgD/HgD/HwLqIAD/IAD/IQD/IkeFTkiFUEiGUFeNXlmPX0SrU0i4VVajX2CpaW2kdF7MbGHPbnyxgoCAgIGBgYKCgoODg4SEhIWFhYiIiImJiYuLi4yMjI6OjpCQkJWVlZiYmJqampubm5ycnImwjI+zkZqomKSkpKampqioqKurq6ysrK2tra6urq+vr6SwogAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4rSb8AAAEAdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wBT9wclAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGHRFWHRTb2Z0d2FyZQBwYWludC5uZXQgNC4wLjOM5pdQAAAB+UlEQVRIS5WV6VfTQBTFA7YgoICsFtmxgLRShQIqCLKDKEFQ3FlERdlxwwTBBQRMKVqQRdSyCH/n803yevj65ndy8iY55957ZpJ5owDAgdceJkVSE6pMWlPoFRN7yS6qMNSbahlIUJdg1dM1VpXAUSRCL7fQoxQx4hZrDiVpvQjK/kkxajyf7Ujj4Eg/V7WBgp1KgMogDg6/9N7pus3iwcC8yDq1p3hEdRX7Aqs8At9rM9tQEglwHMvSo1eaPs1Dnxp+gpINjxKBpfqqX+Xju5mPGlxfsUZD73QZ3nxGjU0JA1h3Gt8kUI16nGo8wAmAxQlyY6K9+A1wTITWuVZUMmShGhUAcWboU7mJ6vrIJ4BwEVpe4ic7Jv7cUGinRmZMtPFZCvWWLpMbk5WcUGgHmbF5/4FCy2RDj2Z6i7y4aOMzFFrr9kt+07JQaN8UuXEZ/UihP/N8ZMdCNRqvh/7ehUky4zK4Lf5eG26cqmsy+9RoL0BNtLVPX8pN9e0z1NgV7L8AhaXLAW5L+tGUJbo1dqQoLF8fv5boSGP9KPnlVoK4TgA1ZzPTWZzJcJavCcUFvP5h/fO85173XRb3H84JZeJfBdz4geQxTxnzrJDlhlOcp66ETXpmc4XO0+RLVuWzlZJnHuKw67GFS5HYYDkANCfTKyY2VxAA/gOxObo6iNgi8wAAAABJRU5ErkJggg==') no-repeat 0 0; +} +.legend-container > li:first-child input:checked + label > span { + background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHQAAAATCAMAAAB2tdn3AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMAUExURQAAAAcHBwoKCgsLCw0NDQ4ODg8PDxAQEBYWFhcXFxsbGxwcHB0dHR4eHh8fHyAgICEhISIiIiQkJCUlJSYmJicnJygoKCkpKSoqKiwsLC0tLS4uLi8vLzAwMDQ0NDU1NTc3Nzg4ODk5OT09PT4+Pj8/P0FBQUJCQkNDQ0REREZGRkdHR0hISElJSUpKSktLS0xMTE1NTU5OTk9PT1FRUVJSUlNTU1RUVFZWVldXV1hYWFlZWVpaWl5eXmBgYGFhYWJiYmRkZGZmZmhoaGlpaWpqam1tbW5ubm9vb3Nzc3V1dXd3d3l5eXx8fH5+fn9/fwCADwGBEQKCEgGJEwKKEwSMFQGRFAKSFAKTFQiXGguUHRifKAynGAipFROjJhukLR+iMSaWNCuVOCGhMSSmND+oTT20SwnQGwzRHRDCJRPDKADjHQDmGgDmGwDlHQHpHwDyFwDzGQD1GAD2GQD3HQD3HgD/HgD/HwLqIAD/IAD/IQD/IkeFTkiFUEiGUFeNXlmPX0SrU0i4VVajX2CpaW2kdF7MbGHPbnyxgoCAgIGBgYKCgoODg4SEhIWFhYiIiImJiYuLi4yMjI6OjpCQkJWVlZiYmJqampubm5ycnImwjI+zkZqomKSkpKampqioqKurq6ysrK2tra6urq+vr6SwogAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4rSb8AAAEAdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wBT9wclAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGHRFWHRTb2Z0d2FyZQBwYWludC5uZXQgNC4wLjOM5pdQAAAB+UlEQVRIS5WV6VfTQBTFA7YgoICsFtmxgLRShQIqCLKDKEFQ3FlERdlxwwTBBQRMKVqQRdSyCH/n803yevj65ndy8iY55957ZpJ5owDAgdceJkVSE6pMWlPoFRN7yS6qMNSbahlIUJdg1dM1VpXAUSRCL7fQoxQx4hZrDiVpvQjK/kkxajyf7Ujj4Eg/V7WBgp1KgMogDg6/9N7pus3iwcC8yDq1p3hEdRX7Aqs8At9rM9tQEglwHMvSo1eaPs1Dnxp+gpINjxKBpfqqX+Xju5mPGlxfsUZD73QZ3nxGjU0JA1h3Gt8kUI16nGo8wAmAxQlyY6K9+A1wTITWuVZUMmShGhUAcWboU7mJ6vrIJ4BwEVpe4ic7Jv7cUGinRmZMtPFZCvWWLpMbk5WcUGgHmbF5/4FCy2RDj2Z6i7y4aOMzFFrr9kt+07JQaN8UuXEZ/UihP/N8ZMdCNRqvh/7ehUky4zK4Lf5eG26cqmsy+9RoL0BNtLVPX8pN9e0z1NgV7L8AhaXLAW5L+tGUJbo1dqQoLF8fv5boSGP9KPnlVoK4TgA1ZzPTWZzJcJavCcUFvP5h/fO85173XRb3H84JZeJfBdz4geQxTxnzrJDlhlOcp66ETXpmc4XO0+RLVuWzlZJnHuKw67GFS5HYYDkANCfTKyY2VxAA/gOxObo6iNgi8wAAAABJRU5ErkJggg==') no-repeat -59px 0; +} +.legend-layer-subitem { + display: inline-block; + max-width: 148px; + overflow: hidden; + max-height: 20px; +} +.legend-layer-icon { + margin-left: 7px; +} +.legend-layer-div li { + margin: 0; + padding-top: 0; + padding-bottom: 0; +} +.layer-not-visible { + background-color: gray; + display: none; +} +.layer-force-show { + display: inherit; +} +.layer-group-expander, +.map-server-expander, +.unique-symbol-expander, +.legend-items-expander { + color: #59AFEE; + cursor: pointer; + padding-left: 4px; + font-size: 14px; +} +.esri-popup-table { + border-collapse: collapse; +} +.esri-popup-table td, +.esri-popup-table th { + border: solid black 1px; + padding: 0 4px; +} +.esri-popup-table tr:nth-child(even) { + background-color: lightblue; +} +.legend-layer-name, +.legend-check { + cursor: pointer; +} +.ol-popup { + position: absolute; + background-color: white; + -webkit-filter: drop-shadow(0 1px 4px rgba(0, 0, 0, 0.2)); + filter: drop-shadow(0 1px 4px rgba(0, 0, 0, 0.2)); + padding: 22px 5px 5px 5px; + border-radius: 10px; + border: 1px solid #cccccc; + bottom: 12px; + left: -50px; + min-width: 280px; + cursor: default; +} +.ol-popup:after, +.ol-popup:before { + top: 100%; + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; + pointer-events: none; +} +.ol-popup:after { + border-top-color: white; + border-width: 10px; + left: 48px; + margin-left: -10px; +} +.ol-popup:before { + border-top-color: #cccccc; + border-width: 11px; + left: 48px; + margin-left: -11px; +} +.ol-popup-closer { + text-decoration: none; + position: absolute; + top: 2px; + right: 8px; + cursor: pointer; + color: darkblue; +} +.ol-popup-nav { + background-color: lightgray; + padding: 3px; + margin-bottom: 7px; +} +.ol-popup-nav-arrow { + color: #419CC4; + cursor: pointer; + margin: 0 3px; + font-size: larger; +} +.ol-inner-inner { + height: 300px; + overflow-y: auto; +} +.layer-swiper { + position: absolute; + top: 0; + width: 9px; + height: 100%; + border-left: solid black 1px; + border-right: solid black 1px; + background-color: lightgray; + z-index: 10; + cursor: ew-resize; +} diff --git a/test-html/_css/all-ol-style.less b/test-html/_css/all-ol-style.less index 40f9e5bea3ab429919524423436a199f6a5167bd..f75adb3020f50555a873e6e8370a72338101ab5c 100644 --- a/test-html/_css/all-ol-style.less +++ b/test-html/_css/all-ol-style.less @@ -1,4 +1,4 @@ @import "ol"; @import "legend"; @import "ol-popup"; -@import "layer-swipe"; \ No newline at end of file +@import "layer-swipe"; diff --git a/test-html/_css/layer-swipe.css b/test-html/_css/layer-swipe.css new file mode 100644 index 0000000000000000000000000000000000000000..59c79c6a1f5ecbb74bc25029c40fb253e0b27e16 --- /dev/null +++ b/test-html/_css/layer-swipe.css @@ -0,0 +1,11 @@ +.layer-swiper { + position: absolute; + top: 0; + width: 9px; + height: 100%; + border-left: solid black 1px; + border-right: solid black 1px; + background-color: lightgray; + z-index: 10; + cursor: ew-resize; +} diff --git a/test-html/_css/layer-swipe.less b/test-html/_css/layer-swipe.less index 96465b685fed045084ac504bd2ab8c8043110f7a..4b5f5472b430c632d9230c3b06e434ae45ccb47b 100644 --- a/test-html/_css/layer-swipe.less +++ b/test-html/_css/layer-swipe.less @@ -1 +1,2 @@ @import "../../css/layer-swipe"; + diff --git a/test-html/_css/legend.css b/test-html/_css/legend.css new file mode 100644 index 0000000000000000000000000000000000000000..f56849d66cd53150ca64abac032b8b10e89553ba --- /dev/null +++ b/test-html/_css/legend.css @@ -0,0 +1,92 @@ +.legend-container { + list-style: none; + border: solid black 1px; + border-radius: 5px; + background-color: rgba(211, 211, 211, 0.2); + margin: 2px; + padding: 2px; +} +.legend-container ul { + list-style: none; + padding-left: 17px; +} +.legend-container li { + border-radius: 7px; + margin: 2px; + padding: 2px 4px; +} +.legend-container hr { + display: inline-block; + width: 40px; + height: 10px; + background-color: blue; + border: none; + margin: 0 0 3px 7px; +} +.legend-container > li:first-child { + font-weight: bold; + min-height: 25px; +} +.legend-container > li:first-child input { + display: none; +} +.legend-container > li:first-child input + label { + width: 100px; + height: 19px; + margin: 5px; + display: inline-block; +} +.legend-container > li:first-child input + label > span { + display: inline-block; + width: 59px; + height: 19px; + background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHQAAAATCAMAAAB2tdn3AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMAUExURQAAAAcHBwoKCgsLCw0NDQ4ODg8PDxAQEBYWFhcXFxsbGxwcHB0dHR4eHh8fHyAgICEhISIiIiQkJCUlJSYmJicnJygoKCkpKSoqKiwsLC0tLS4uLi8vLzAwMDQ0NDU1NTc3Nzg4ODk5OT09PT4+Pj8/P0FBQUJCQkNDQ0REREZGRkdHR0hISElJSUpKSktLS0xMTE1NTU5OTk9PT1FRUVJSUlNTU1RUVFZWVldXV1hYWFlZWVpaWl5eXmBgYGFhYWJiYmRkZGZmZmhoaGlpaWpqam1tbW5ubm9vb3Nzc3V1dXd3d3l5eXx8fH5+fn9/fwCADwGBEQKCEgGJEwKKEwSMFQGRFAKSFAKTFQiXGguUHRifKAynGAipFROjJhukLR+iMSaWNCuVOCGhMSSmND+oTT20SwnQGwzRHRDCJRPDKADjHQDmGgDmGwDlHQHpHwDyFwDzGQD1GAD2GQD3HQD3HgD/HgD/HwLqIAD/IAD/IQD/IkeFTkiFUEiGUFeNXlmPX0SrU0i4VVajX2CpaW2kdF7MbGHPbnyxgoCAgIGBgYKCgoODg4SEhIWFhYiIiImJiYuLi4yMjI6OjpCQkJWVlZiYmJqampubm5ycnImwjI+zkZqomKSkpKampqioqKurq6ysrK2tra6urq+vr6SwogAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4rSb8AAAEAdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wBT9wclAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGHRFWHRTb2Z0d2FyZQBwYWludC5uZXQgNC4wLjOM5pdQAAAB+UlEQVRIS5WV6VfTQBTFA7YgoICsFtmxgLRShQIqCLKDKEFQ3FlERdlxwwTBBQRMKVqQRdSyCH/n803yevj65ndy8iY55957ZpJ5owDAgdceJkVSE6pMWlPoFRN7yS6qMNSbahlIUJdg1dM1VpXAUSRCL7fQoxQx4hZrDiVpvQjK/kkxajyf7Ujj4Eg/V7WBgp1KgMogDg6/9N7pus3iwcC8yDq1p3hEdRX7Aqs8At9rM9tQEglwHMvSo1eaPs1Dnxp+gpINjxKBpfqqX+Xju5mPGlxfsUZD73QZ3nxGjU0JA1h3Gt8kUI16nGo8wAmAxQlyY6K9+A1wTITWuVZUMmShGhUAcWboU7mJ6vrIJ4BwEVpe4ic7Jv7cUGinRmZMtPFZCvWWLpMbk5WcUGgHmbF5/4FCy2RDj2Z6i7y4aOMzFFrr9kt+07JQaN8UuXEZ/UihP/N8ZMdCNRqvh/7ehUky4zK4Lf5eG26cqmsy+9RoL0BNtLVPX8pN9e0z1NgV7L8AhaXLAW5L+tGUJbo1dqQoLF8fv5boSGP9KPnlVoK4TgA1ZzPTWZzJcJavCcUFvP5h/fO85173XRb3H84JZeJfBdz4geQxTxnzrJDlhlOcp66ETXpmc4XO0+RLVuWzlZJnHuKw67GFS5HYYDkANCfTKyY2VxAA/gOxObo6iNgi8wAAAABJRU5ErkJggg==') no-repeat 0 0; +} +.legend-container > li:first-child input:checked + label > span { + background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHQAAAATCAMAAAB2tdn3AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMAUExURQAAAAcHBwoKCgsLCw0NDQ4ODg8PDxAQEBYWFhcXFxsbGxwcHB0dHR4eHh8fHyAgICEhISIiIiQkJCUlJSYmJicnJygoKCkpKSoqKiwsLC0tLS4uLi8vLzAwMDQ0NDU1NTc3Nzg4ODk5OT09PT4+Pj8/P0FBQUJCQkNDQ0REREZGRkdHR0hISElJSUpKSktLS0xMTE1NTU5OTk9PT1FRUVJSUlNTU1RUVFZWVldXV1hYWFlZWVpaWl5eXmBgYGFhYWJiYmRkZGZmZmhoaGlpaWpqam1tbW5ubm9vb3Nzc3V1dXd3d3l5eXx8fH5+fn9/fwCADwGBEQKCEgGJEwKKEwSMFQGRFAKSFAKTFQiXGguUHRifKAynGAipFROjJhukLR+iMSaWNCuVOCGhMSSmND+oTT20SwnQGwzRHRDCJRPDKADjHQDmGgDmGwDlHQHpHwDyFwDzGQD1GAD2GQD3HQD3HgD/HgD/HwLqIAD/IAD/IQD/IkeFTkiFUEiGUFeNXlmPX0SrU0i4VVajX2CpaW2kdF7MbGHPbnyxgoCAgIGBgYKCgoODg4SEhIWFhYiIiImJiYuLi4yMjI6OjpCQkJWVlZiYmJqampubm5ycnImwjI+zkZqomKSkpKampqioqKurq6ysrK2tra6urq+vr6SwogAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4rSb8AAAEAdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wBT9wclAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGHRFWHRTb2Z0d2FyZQBwYWludC5uZXQgNC4wLjOM5pdQAAAB+UlEQVRIS5WV6VfTQBTFA7YgoICsFtmxgLRShQIqCLKDKEFQ3FlERdlxwwTBBQRMKVqQRdSyCH/n803yevj65ndy8iY55957ZpJ5owDAgdceJkVSE6pMWlPoFRN7yS6qMNSbahlIUJdg1dM1VpXAUSRCL7fQoxQx4hZrDiVpvQjK/kkxajyf7Ujj4Eg/V7WBgp1KgMogDg6/9N7pus3iwcC8yDq1p3hEdRX7Aqs8At9rM9tQEglwHMvSo1eaPs1Dnxp+gpINjxKBpfqqX+Xju5mPGlxfsUZD73QZ3nxGjU0JA1h3Gt8kUI16nGo8wAmAxQlyY6K9+A1wTITWuVZUMmShGhUAcWboU7mJ6vrIJ4BwEVpe4ic7Jv7cUGinRmZMtPFZCvWWLpMbk5WcUGgHmbF5/4FCy2RDj2Z6i7y4aOMzFFrr9kt+07JQaN8UuXEZ/UihP/N8ZMdCNRqvh/7ehUky4zK4Lf5eG26cqmsy+9RoL0BNtLVPX8pN9e0z1NgV7L8AhaXLAW5L+tGUJbo1dqQoLF8fv5boSGP9KPnlVoK4TgA1ZzPTWZzJcJavCcUFvP5h/fO85173XRb3H84JZeJfBdz4geQxTxnzrJDlhlOcp66ETXpmc4XO0+RLVuWzlZJnHuKw67GFS5HYYDkANCfTKyY2VxAA/gOxObo6iNgi8wAAAABJRU5ErkJggg==') no-repeat -59px 0; +} +.legend-layer-subitem { + display: inline-block; + max-width: 148px; + overflow: hidden; + max-height: 20px; +} +.legend-layer-icon { + margin-left: 7px; +} +.legend-layer-div li { + margin: 0; + padding-top: 0; + padding-bottom: 0; +} +.layer-not-visible { + background-color: gray; + display: none; +} +.layer-force-show { + display: inherit; +} +.layer-group-expander, +.map-server-expander, +.unique-symbol-expander, +.legend-items-expander { + color: #59AFEE; + cursor: pointer; + padding-left: 4px; + font-size: 14px; +} +.esri-popup-table { + border-collapse: collapse; +} +.esri-popup-table td, +.esri-popup-table th { + border: solid black 1px; + padding: 0 4px; +} +.esri-popup-table tr:nth-child(even) { + background-color: lightblue; +} +.legend-layer-name, +.legend-check { + cursor: pointer; +} diff --git a/test-html/_css/legend.less b/test-html/_css/legend.less index 3a24ede88df819bab642821005668d650aaa97ab..e51a786aadd12e1947c3dfae8277297d12aba4cf 100644 --- a/test-html/_css/legend.less +++ b/test-html/_css/legend.less @@ -1 +1,2 @@ @import "../../css/legend"; + diff --git a/test-html/_css/media-control.css b/test-html/_css/media-control.css new file mode 100644 index 0000000000000000000000000000000000000000..1151d2b13bca8e699c0bddbf3b17619373ab39c2 --- /dev/null +++ b/test-html/_css/media-control.css @@ -0,0 +1,52 @@ +.media-control-container { + padding: 10px; + text-align: center; +} +.media-control-container input[type=range] { + width: 80%; +} +.media-control-container input[type=range]:disabled { + cursor: not-allowed; + background-color: lightgray; +} +.media-player-button { + background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJEAAAAdCAMAAACddH6yAAAABGdBTUEAALGPC/xhBQAAAwBQTFRFAAAAJycmKygmLCknKSkpKSkqLysqLCwsLS0tLi4uLi8vMCwrMi0sMS8tNCwpMTAvNzAvMDAwMTExMTEyMjIxMjIyMzMzMzM0MzQ0NjExNzMxNDQ0NTU1NTY2Njc3OTMxOTc2PDg2OTk5OTo7PTo5Pz4+Pj8/RDs2R0A9REA+QkNDQkRFR0hIS0NBS0VCTUdES0tLTU5NVFRUVVdYYFlXZl9caF9cYWBgZ2Jham1ubGxsc3JycXR2Zn6HaYCIcpSegHx7hIWFjo+PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAptsNGgAAAQB0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AFP3ByUAAAAJcEhZcwAADsIAAA7CARUoSoAAAAAYdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuM4zml1AAAAIpSURBVFhH7ZdrV9QwEIYriLDgbQsdUfCKchEVBBVUFOH//6c482a627Qz2VVzjl94PiQznZP02TRNz1bhETnUIYRa4wEbXNzUeEAza+S2xgP4ntWqxhb+tEwYaWARGg0sQvaelQYmT7U32dH+z3mmvUktRuu8jgPecmHLK4qNzCuPZ8A7XR+zeMgF+aFm8ZhHNmxkFrER2MgpfohGmvV4JT5ecR9GzrS70cgZGmC0rEmfnBEXmRVN+sBI3hqLOYz8eWcZjTTpk1ujG6PI3Ebj2+g+ob0vTdfomr7EoCUx+jUh5nMa3UO+iraJO6tr1CxI+xw7eemutKlR72clRjAAnbw10qud4sQIbY3WM6rxbtVkGRGNYwyKGBF9lbtJ4hjxAcVG3NpGRA9jxhQyosf4Ul04RhyykbSeEdFlzLlYxojW8O08qA0jKbT4Ru2jK2bUYhh1lXyj5iJeKGY0xhqNrTVawDLNeGrvYyrFMkZ3sI/OvJ29jp3NVxyjzstWyOgIX3SO/+rtxywtRYzQ5s+jcIQTctEyOo+RUsQIeVx4w2h0C91PtHvSJEYPYj8hMerDlalRn6mRQddoSNdowI0R+H9GTvUNjJzij5zRCYyckZ9zRqfRiF5rnsIFNqKXmqbwYSpGLzRN0dP/iaYpXGQj2tY0hQswosZAruOvp+YJM4tA8wS5nh3ZVNMJhuCE90i/zT3+YWSVGft98gAMPuL8d/iWKx7nilfhN6Q1MB5pcaF/AAAAAElFTkSuQmCC') no-repeat; + height: 29px; + width: 30px; + display: inline-block; + margin: 0 2px; + cursor: pointer; +} +.media-player-button:hover { + background-color: lightblue; +} +.media-pause { + background-position: -86px 0; +} +.media-play { + background-position: -28px 0; +} +.media-stop { + background-position: -57px 0; +} +.media-ahead { + background-position: -116px 0; +} +.media-back { + background-position: 1px 0; +} +.media-disabled { + display: none; +} +.media-locked { + background-color: lightgray !important; + cursor: not-allowed; +} +.media-control-value-label-container { + display: flex; + justify-content: space-between; +} +.media-control-value-label-container span { + display: block; + font-size: small; +} diff --git a/test-html/_css/media-control.less b/test-html/_css/media-control.less index fbba034abd9f87088f37d8d3bb71ec299c78bb3e..6304a55b6f31c3e4e3f58a73ad09049057366a0a 100644 --- a/test-html/_css/media-control.less +++ b/test-html/_css/media-control.less @@ -1 +1,2 @@ @import "../../css/media-control"; + diff --git a/test-html/_css/ol-popup.css b/test-html/_css/ol-popup.css new file mode 100644 index 0000000000000000000000000000000000000000..471fa855379936be37c929286dc12ff3da9f72ed --- /dev/null +++ b/test-html/_css/ol-popup.css @@ -0,0 +1,58 @@ +.ol-popup { + position: absolute; + background-color: white; + -webkit-filter: drop-shadow(0 1px 4px rgba(0, 0, 0, 0.2)); + filter: drop-shadow(0 1px 4px rgba(0, 0, 0, 0.2)); + padding: 22px 5px 5px 5px; + border-radius: 10px; + border: 1px solid #cccccc; + bottom: 12px; + left: -50px; + min-width: 280px; + cursor: default; +} +.ol-popup:after, +.ol-popup:before { + top: 100%; + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; + pointer-events: none; +} +.ol-popup:after { + border-top-color: white; + border-width: 10px; + left: 48px; + margin-left: -10px; +} +.ol-popup:before { + border-top-color: #cccccc; + border-width: 11px; + left: 48px; + margin-left: -11px; +} +.ol-popup-closer { + text-decoration: none; + position: absolute; + top: 2px; + right: 8px; + cursor: pointer; + color: darkblue; +} +.ol-popup-nav { + background-color: lightgray; + padding: 3px; + margin-bottom: 7px; +} +.ol-popup-nav-arrow { + color: #419CC4; + cursor: pointer; + margin: 0 3px; + font-size: larger; +} +.ol-inner-inner { + height: 300px; + overflow-y: auto; +} diff --git a/test-html/_css/ol.css b/test-html/_css/ol.css new file mode 100644 index 0000000000000000000000000000000000000000..251dcb463dca4cc989d9e3b50c43ff3c536645f6 --- /dev/null +++ b/test-html/_css/ol.css @@ -0,0 +1 @@ +.ol-control,.ol-scale-line{position:absolute;padding:2px}.ol-box{box-sizing:border-box;border-radius:2px;border:2px solid #00f}.ol-mouse-position{top:8px;right:8px;position:absolute}.ol-scale-line{background:rgba(0,60,136,.3);border-radius:4px;bottom:8px;left:8px}.ol-scale-line-inner{border:1px solid #eee;border-top:none;color:#eee;font-size:10px;text-align:center;margin:1px;will-change:contents,width}.ol-overlay-container{will-change:left,right,top,bottom}.ol-unsupported{display:none}.ol-viewport .ol-unselectable{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent}.ol-control{background-color:rgba(255,255,255,.4);border-radius:4px}.ol-control:hover{background-color:rgba(255,255,255,.6)}.ol-zoom{top:.5em;left:.5em}.ol-rotate{top:.5em;right:.5em;transition:opacity .25s linear,visibility 0s linear}.ol-rotate.ol-hidden{opacity:0;visibility:hidden;transition:opacity .25s linear,visibility 0s linear .25s}.ol-zoom-extent{top:4.643em;left:.5em}.ol-full-screen{right:.5em;top:.5em}@media print{.ol-control{display:none}}.ol-control button{display:block;margin:1px;padding:0;color:#fff;font-size:1.14em;font-weight:700;text-decoration:none;text-align:center;height:1.375em;width:1.375em;line-height:.4em;background-color:rgba(0,60,136,.5);border:none;border-radius:2px}.ol-control button::-moz-focus-inner{border:none;padding:0}.ol-zoom-extent button{line-height:1.4em}.ol-compass{display:block;font-weight:400;font-size:1.2em;will-change:transform}.ol-touch .ol-control button{font-size:1.5em}.ol-touch .ol-zoom-extent{top:5.5em}.ol-control button:focus,.ol-control button:hover{text-decoration:none;background-color:rgba(0,60,136,.7)}.ol-zoom .ol-zoom-in{border-radius:2px 2px 0 0}.ol-zoom .ol-zoom-out{border-radius:0 0 2px 2px}.ol-attribution{text-align:right;bottom:.5em;right:.5em;max-width:calc(100% - 1.3em)}.ol-attribution ul{margin:0;padding:0 .5em;font-size:.7rem;line-height:1.375em;color:#000;text-shadow:0 0 2px #fff}.ol-attribution li{display:inline;list-style:none;line-height:inherit}.ol-attribution li:not(:last-child):after{content:" "}.ol-attribution img{max-height:2em;max-width:inherit;vertical-align:middle}.ol-attribution button,.ol-attribution ul{display:inline-block}.ol-attribution.ol-collapsed ul{display:none}.ol-attribution.ol-logo-only ul{display:block}.ol-attribution:not(.ol-collapsed){background:rgba(255,255,255,.8)}.ol-attribution.ol-uncollapsible{bottom:0;right:0;border-radius:4px 0 0;height:1.1em;line-height:1em}.ol-attribution.ol-logo-only{background:0 0;bottom:.4em;height:1.1em;line-height:1em}.ol-attribution.ol-uncollapsible img{margin-top:-.2em;max-height:1.6em}.ol-attribution.ol-logo-only button,.ol-attribution.ol-uncollapsible button{display:none}.ol-zoomslider{top:4.5em;left:.5em;height:200px}.ol-zoomslider button{position:relative;height:10px}.ol-touch .ol-zoomslider{top:5.5em}.ol-overviewmap{left:.5em;bottom:.5em}.ol-overviewmap.ol-uncollapsible{bottom:0;left:0;border-radius:0 4px 0 0}.ol-overviewmap .ol-overviewmap-map,.ol-overviewmap button{display:inline-block}.ol-overviewmap .ol-overviewmap-map{border:1px solid #7b98bc;height:150px;margin:2px;width:150px}.ol-overviewmap:not(.ol-collapsed) button{bottom:1px;left:2px;position:absolute}.ol-overviewmap.ol-collapsed .ol-overviewmap-map,.ol-overviewmap.ol-uncollapsible button{display:none}.ol-overviewmap:not(.ol-collapsed){background:rgba(255,255,255,.8)}.ol-overviewmap-box{border:2px dotted rgba(0,60,136,.7)} diff --git a/test-html/_css/ol.less b/test-html/_css/ol.less index bde1cbcf026fea3548b4de200013e26c72f6dac2..1685307d91c8bd40cd74811dac433d322f1c8a71 100644 --- a/test-html/_css/ol.less +++ b/test-html/_css/ol.less @@ -1,2 +1 @@ @import (inline) "../../css/ol.css"; - diff --git a/test-html/css/mapWithSidebar.css b/test-html/css/mapWithSidebar.css new file mode 100644 index 0000000000000000000000000000000000000000..9a3ef2e6f7b51b5ddc217bb7ad6668da7fa3a35a --- /dev/null +++ b/test-html/css/mapWithSidebar.css @@ -0,0 +1,185 @@ +.ol-control,.ol-scale-line{position:absolute;padding:2px}.ol-box{box-sizing:border-box;border-radius:2px;border:2px solid #00f}.ol-mouse-position{top:8px;right:8px;position:absolute}.ol-scale-line{background:rgba(0,60,136,.3);border-radius:4px;bottom:8px;left:8px}.ol-scale-line-inner{border:1px solid #eee;border-top:none;color:#eee;font-size:10px;text-align:center;margin:1px;will-change:contents,width}.ol-overlay-container{will-change:left,right,top,bottom}.ol-unsupported{display:none}.ol-viewport .ol-unselectable{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent}.ol-control{background-color:rgba(255,255,255,.4);border-radius:4px}.ol-control:hover{background-color:rgba(255,255,255,.6)}.ol-zoom{top:.5em;left:.5em}.ol-rotate{top:.5em;right:.5em;transition:opacity .25s linear,visibility 0s linear}.ol-rotate.ol-hidden{opacity:0;visibility:hidden;transition:opacity .25s linear,visibility 0s linear .25s}.ol-zoom-extent{top:4.643em;left:.5em}.ol-full-screen{right:.5em;top:.5em}@media print{.ol-control{display:none}}.ol-control button{display:block;margin:1px;padding:0;color:#fff;font-size:1.14em;font-weight:700;text-decoration:none;text-align:center;height:1.375em;width:1.375em;line-height:.4em;background-color:rgba(0,60,136,.5);border:none;border-radius:2px}.ol-control button::-moz-focus-inner{border:none;padding:0}.ol-zoom-extent button{line-height:1.4em}.ol-compass{display:block;font-weight:400;font-size:1.2em;will-change:transform}.ol-touch .ol-control button{font-size:1.5em}.ol-touch .ol-zoom-extent{top:5.5em}.ol-control button:focus,.ol-control button:hover{text-decoration:none;background-color:rgba(0,60,136,.7)}.ol-zoom .ol-zoom-in{border-radius:2px 2px 0 0}.ol-zoom .ol-zoom-out{border-radius:0 0 2px 2px}.ol-attribution{text-align:right;bottom:.5em;right:.5em;max-width:calc(100% - 1.3em)}.ol-attribution ul{margin:0;padding:0 .5em;font-size:.7rem;line-height:1.375em;color:#000;text-shadow:0 0 2px #fff}.ol-attribution li{display:inline;list-style:none;line-height:inherit}.ol-attribution li:not(:last-child):after{content:" "}.ol-attribution img{max-height:2em;max-width:inherit;vertical-align:middle}.ol-attribution button,.ol-attribution ul{display:inline-block}.ol-attribution.ol-collapsed ul{display:none}.ol-attribution.ol-logo-only ul{display:block}.ol-attribution:not(.ol-collapsed){background:rgba(255,255,255,.8)}.ol-attribution.ol-uncollapsible{bottom:0;right:0;border-radius:4px 0 0;height:1.1em;line-height:1em}.ol-attribution.ol-logo-only{background:0 0;bottom:.4em;height:1.1em;line-height:1em}.ol-attribution.ol-uncollapsible img{margin-top:-.2em;max-height:1.6em}.ol-attribution.ol-logo-only button,.ol-attribution.ol-uncollapsible button{display:none}.ol-zoomslider{top:4.5em;left:.5em;height:200px}.ol-zoomslider button{position:relative;height:10px}.ol-touch .ol-zoomslider{top:5.5em}.ol-overviewmap{left:.5em;bottom:.5em}.ol-overviewmap.ol-uncollapsible{bottom:0;left:0;border-radius:0 4px 0 0}.ol-overviewmap .ol-overviewmap-map,.ol-overviewmap button{display:inline-block}.ol-overviewmap .ol-overviewmap-map{border:1px solid #7b98bc;height:150px;margin:2px;width:150px}.ol-overviewmap:not(.ol-collapsed) button{bottom:1px;left:2px;position:absolute}.ol-overviewmap.ol-collapsed .ol-overviewmap-map,.ol-overviewmap.ol-uncollapsible button{display:none}.ol-overviewmap:not(.ol-collapsed){background:rgba(255,255,255,.8)}.ol-overviewmap-box{border:2px dotted rgba(0,60,136,.7)} +.legend-container { + list-style: none; + border: solid black 1px; + border-radius: 5px; + background-color: rgba(211, 211, 211, 0.2); + margin: 2px; + padding: 2px; +} +.legend-container ul { + list-style: none; + padding-left: 17px; +} +.legend-container li { + border-radius: 7px; + margin: 2px; + padding: 2px 4px; +} +.legend-container hr { + display: inline-block; + width: 40px; + height: 10px; + background-color: blue; + border: none; + margin: 0 0 3px 7px; +} +.legend-container > li:first-child { + font-weight: bold; + min-height: 25px; +} +.legend-container > li:first-child input { + display: none; +} +.legend-container > li:first-child input + label { + width: 100px; + height: 19px; + margin: 5px; + display: inline-block; +} +.legend-container > li:first-child input + label > span { + display: inline-block; + width: 59px; + height: 19px; + background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHQAAAATCAMAAAB2tdn3AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMAUExURQAAAAcHBwoKCgsLCw0NDQ4ODg8PDxAQEBYWFhcXFxsbGxwcHB0dHR4eHh8fHyAgICEhISIiIiQkJCUlJSYmJicnJygoKCkpKSoqKiwsLC0tLS4uLi8vLzAwMDQ0NDU1NTc3Nzg4ODk5OT09PT4+Pj8/P0FBQUJCQkNDQ0REREZGRkdHR0hISElJSUpKSktLS0xMTE1NTU5OTk9PT1FRUVJSUlNTU1RUVFZWVldXV1hYWFlZWVpaWl5eXmBgYGFhYWJiYmRkZGZmZmhoaGlpaWpqam1tbW5ubm9vb3Nzc3V1dXd3d3l5eXx8fH5+fn9/fwCADwGBEQKCEgGJEwKKEwSMFQGRFAKSFAKTFQiXGguUHRifKAynGAipFROjJhukLR+iMSaWNCuVOCGhMSSmND+oTT20SwnQGwzRHRDCJRPDKADjHQDmGgDmGwDlHQHpHwDyFwDzGQD1GAD2GQD3HQD3HgD/HgD/HwLqIAD/IAD/IQD/IkeFTkiFUEiGUFeNXlmPX0SrU0i4VVajX2CpaW2kdF7MbGHPbnyxgoCAgIGBgYKCgoODg4SEhIWFhYiIiImJiYuLi4yMjI6OjpCQkJWVlZiYmJqampubm5ycnImwjI+zkZqomKSkpKampqioqKurq6ysrK2tra6urq+vr6SwogAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4rSb8AAAEAdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wBT9wclAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGHRFWHRTb2Z0d2FyZQBwYWludC5uZXQgNC4wLjOM5pdQAAAB+UlEQVRIS5WV6VfTQBTFA7YgoICsFtmxgLRShQIqCLKDKEFQ3FlERdlxwwTBBQRMKVqQRdSyCH/n803yevj65ndy8iY55957ZpJ5owDAgdceJkVSE6pMWlPoFRN7yS6qMNSbahlIUJdg1dM1VpXAUSRCL7fQoxQx4hZrDiVpvQjK/kkxajyf7Ujj4Eg/V7WBgp1KgMogDg6/9N7pus3iwcC8yDq1p3hEdRX7Aqs8At9rM9tQEglwHMvSo1eaPs1Dnxp+gpINjxKBpfqqX+Xju5mPGlxfsUZD73QZ3nxGjU0JA1h3Gt8kUI16nGo8wAmAxQlyY6K9+A1wTITWuVZUMmShGhUAcWboU7mJ6vrIJ4BwEVpe4ic7Jv7cUGinRmZMtPFZCvWWLpMbk5WcUGgHmbF5/4FCy2RDj2Z6i7y4aOMzFFrr9kt+07JQaN8UuXEZ/UihP/N8ZMdCNRqvh/7ehUky4zK4Lf5eG26cqmsy+9RoL0BNtLVPX8pN9e0z1NgV7L8AhaXLAW5L+tGUJbo1dqQoLF8fv5boSGP9KPnlVoK4TgA1ZzPTWZzJcJavCcUFvP5h/fO85173XRb3H84JZeJfBdz4geQxTxnzrJDlhlOcp66ETXpmc4XO0+RLVuWzlZJnHuKw67GFS5HYYDkANCfTKyY2VxAA/gOxObo6iNgi8wAAAABJRU5ErkJggg==') no-repeat 0 0; +} +.legend-container > li:first-child input:checked + label > span { + background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHQAAAATCAMAAAB2tdn3AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMAUExURQAAAAcHBwoKCgsLCw0NDQ4ODg8PDxAQEBYWFhcXFxsbGxwcHB0dHR4eHh8fHyAgICEhISIiIiQkJCUlJSYmJicnJygoKCkpKSoqKiwsLC0tLS4uLi8vLzAwMDQ0NDU1NTc3Nzg4ODk5OT09PT4+Pj8/P0FBQUJCQkNDQ0REREZGRkdHR0hISElJSUpKSktLS0xMTE1NTU5OTk9PT1FRUVJSUlNTU1RUVFZWVldXV1hYWFlZWVpaWl5eXmBgYGFhYWJiYmRkZGZmZmhoaGlpaWpqam1tbW5ubm9vb3Nzc3V1dXd3d3l5eXx8fH5+fn9/fwCADwGBEQKCEgGJEwKKEwSMFQGRFAKSFAKTFQiXGguUHRifKAynGAipFROjJhukLR+iMSaWNCuVOCGhMSSmND+oTT20SwnQGwzRHRDCJRPDKADjHQDmGgDmGwDlHQHpHwDyFwDzGQD1GAD2GQD3HQD3HgD/HgD/HwLqIAD/IAD/IQD/IkeFTkiFUEiGUFeNXlmPX0SrU0i4VVajX2CpaW2kdF7MbGHPbnyxgoCAgIGBgYKCgoODg4SEhIWFhYiIiImJiYuLi4yMjI6OjpCQkJWVlZiYmJqampubm5ycnImwjI+zkZqomKSkpKampqioqKurq6ysrK2tra6urq+vr6SwogAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4rSb8AAAEAdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wBT9wclAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGHRFWHRTb2Z0d2FyZQBwYWludC5uZXQgNC4wLjOM5pdQAAAB+UlEQVRIS5WV6VfTQBTFA7YgoICsFtmxgLRShQIqCLKDKEFQ3FlERdlxwwTBBQRMKVqQRdSyCH/n803yevj65ndy8iY55957ZpJ5owDAgdceJkVSE6pMWlPoFRN7yS6qMNSbahlIUJdg1dM1VpXAUSRCL7fQoxQx4hZrDiVpvQjK/kkxajyf7Ujj4Eg/V7WBgp1KgMogDg6/9N7pus3iwcC8yDq1p3hEdRX7Aqs8At9rM9tQEglwHMvSo1eaPs1Dnxp+gpINjxKBpfqqX+Xju5mPGlxfsUZD73QZ3nxGjU0JA1h3Gt8kUI16nGo8wAmAxQlyY6K9+A1wTITWuVZUMmShGhUAcWboU7mJ6vrIJ4BwEVpe4ic7Jv7cUGinRmZMtPFZCvWWLpMbk5WcUGgHmbF5/4FCy2RDj2Z6i7y4aOMzFFrr9kt+07JQaN8UuXEZ/UihP/N8ZMdCNRqvh/7ehUky4zK4Lf5eG26cqmsy+9RoL0BNtLVPX8pN9e0z1NgV7L8AhaXLAW5L+tGUJbo1dqQoLF8fv5boSGP9KPnlVoK4TgA1ZzPTWZzJcJavCcUFvP5h/fO85173XRb3H84JZeJfBdz4geQxTxnzrJDlhlOcp66ETXpmc4XO0+RLVuWzlZJnHuKw67GFS5HYYDkANCfTKyY2VxAA/gOxObo6iNgi8wAAAABJRU5ErkJggg==') no-repeat -59px 0; +} +.legend-layer-subitem { + display: inline-block; + max-width: 148px; + overflow: hidden; + max-height: 20px; +} +.legend-layer-icon { + margin-left: 7px; +} +.legend-layer-div li { + margin: 0; + padding-top: 0; + padding-bottom: 0; +} +.layer-not-visible { + background-color: gray; + display: none; +} +.layer-force-show { + display: inherit; +} +.layer-group-expander, +.map-server-expander, +.unique-symbol-expander, +.legend-items-expander { + color: #59AFEE; + cursor: pointer; + padding-left: 4px; + font-size: 14px; +} +.esri-popup-table { + border-collapse: collapse; +} +.esri-popup-table td, +.esri-popup-table th { + border: solid black 1px; + padding: 0 4px; +} +.esri-popup-table tr:nth-child(even) { + background-color: lightblue; +} +.legend-layer-name, +.legend-check { + cursor: pointer; +} +.ol-popup { + position: absolute; + background-color: white; + -webkit-filter: drop-shadow(0 1px 4px rgba(0, 0, 0, 0.2)); + filter: drop-shadow(0 1px 4px rgba(0, 0, 0, 0.2)); + padding: 22px 5px 5px 5px; + border-radius: 10px; + border: 1px solid #cccccc; + bottom: 12px; + left: -50px; + min-width: 280px; + cursor: default; +} +.ol-popup:after, +.ol-popup:before { + top: 100%; + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; + pointer-events: none; +} +.ol-popup:after { + border-top-color: white; + border-width: 10px; + left: 48px; + margin-left: -10px; +} +.ol-popup:before { + border-top-color: #cccccc; + border-width: 11px; + left: 48px; + margin-left: -11px; +} +.ol-popup-closer { + text-decoration: none; + position: absolute; + top: 2px; + right: 8px; + cursor: pointer; + color: darkblue; +} +.ol-popup-nav { + background-color: lightgray; + padding: 3px; + margin-bottom: 7px; +} +.ol-popup-nav-arrow { + color: #419CC4; + cursor: pointer; + margin: 0 3px; + font-size: larger; +} +.ol-inner-inner { + height: 300px; + overflow-y: auto; +} +.layer-swiper { + position: absolute; + top: 0; + width: 9px; + height: 100%; + border-left: solid black 1px; + border-right: solid black 1px; + background-color: lightgray; + z-index: 10; + cursor: ew-resize; +} +html, +body { + height: 100%; + width: 100%; +} +html > div, +body > div { + display: flex; + height: 100%; +} +html > div > div, +body > div > div { + height: 100%; +} +html > div > div:first-of-type, +body > div > div:first-of-type { + width: 30%; + min-width: 300px; +} +html > div > div:last-of-type, +body > div > div:last-of-type { + flex: 1; +} diff --git a/test-html/js/another.js b/test-html/js/another.js new file mode 100644 index 0000000000000000000000000000000000000000..636685796bfd6c05d79ef10b44a6e03daa0079a5 --- /dev/null +++ b/test-html/js/another.js @@ -0,0 +1,56 @@ +/******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) +/******/ return installedModules[moduleId].exports; +/******/ +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ exports: {}, +/******/ id: moduleId, +/******/ loaded: false +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.loaded = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(0); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ function(module, exports) { + + /** + * Created by gavorhes on 9/22/2016. + */ + console.log('here is another'); + console.log('here is another'); + + +/***/ } +/******/ ]); +//# sourceMappingURL=another.js.map \ No newline at end of file diff --git a/test-html/js/another.js.map b/test-html/js/another.js.map new file mode 100644 index 0000000000000000000000000000000000000000..b1190e9335ff6202c20c8017843ada39fce863a5 --- /dev/null +++ b/test-html/js/another.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///webpack/bootstrap ef760a4c28bc3d5b9fb4","webpack:///./src-ts/_test/another.ts"],"names":[],"mappings":";AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,uBAAe;AACf;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;;;;;ACtCA;;IAEG;AAEH,QAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;AAC/B,QAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC","file":"another.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap ef760a4c28bc3d5b9fb4\n **/","/**\r\n * Created by gavorhes on 9/22/2016.\r\n */\r\n\r\nconsole.log('here is another');\r\nconsole.log('here is another');\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/_test/another.ts\n **/"],"sourceRoot":""} \ No newline at end of file diff --git a/test-html/js/compare-test.js b/test-html/js/compare-test.js new file mode 100644 index 0000000000000000000000000000000000000000..3cd31acb7675f203dcb4decb0a03e551bd487cb2 --- /dev/null +++ b/test-html/js/compare-test.js @@ -0,0 +1,12512 @@ +/******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) +/******/ return installedModules[moduleId].exports; +/******/ +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ exports: {}, +/******/ id: moduleId, +/******/ loaded: false +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.loaded = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(0); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ function(module, exports, __webpack_require__) { + + "use strict"; + /** + * Created by gavorhes on 6/1/2016. + */ + var quickMap_1 = __webpack_require__(1); + var layerSwipe_1 = __webpack_require__(14); + var LayerEsriMapServer_1 = __webpack_require__(15); + var map = quickMap_1.quickMap(); + var swiper = new layerSwipe_1.default(map); + var wisDotRegions = new LayerEsriMapServer_1.LayerEsriMapServer('http://transportal.cee.wisc.edu/applications/arcgis2/rest/services/MetaManager/Metamanager_regions/MapServer', { + minZoom: 6, + maxZoom: 12, + name: 'WisDOT Regions' + }); + var metamanagerSegments = new LayerEsriMapServer_1.LayerEsriMapServer('http://transportal.cee.wisc.edu/applications/arcgis2/rest/services/MetaManager/MM_All_Segments/MapServer', { + minZoom: 7, + visible: true, + name: 'Metamanager Segments' + }); + var truckSpeed2014 = new LayerEsriMapServer_1.LayerEsriMapServer('http://transportal.cee.wisc.edu/applications/arcgis2/rest/services/NPMRDS/compareDynamic/MapServer', { + minZoom: 7, + visible: true, + name: 'truck2014', + showLayers: [8] + }); + var truckSpeed2015 = new LayerEsriMapServer_1.LayerEsriMapServer('http://transportal.cee.wisc.edu/applications/arcgis2/rest/services/NPMRDS/compareDynamic/MapServer', { + minZoom: 7, + visible: true, + name: 'truck2015', + showLayers: [9] + }); + map.addLayer(wisDotRegions.olLayer); + map.addLayer(truckSpeed2014.olLayer); + map.addLayer(truckSpeed2015.olLayer); + map.addLayer(metamanagerSegments.olLayer); + swiper.addLeftLayer(wisDotRegions); + swiper.addRightLayer(metamanagerSegments); + swiper.addLeftLayer(truckSpeed2014); + swiper.addRightLayer(truckSpeed2015); + + +/***/ }, +/* 1 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Created by gavorhes on 12/15/2015. + */ + "use strict"; + var quickMapBase_1 = __webpack_require__(2); + var provide_1 = __webpack_require__(4); + var mapMove_1 = __webpack_require__(7); + var mapPopup_1 = __webpack_require__(12); + var nm = provide_1.default('olHelpers'); + /** + * Sets up a map with some default parameters and initializes + * mapMove and mapPopup + * + * @param {object} [options={}] config options + * @param {string} [options.divId=map] map div id + * @param {object} [options.center={}] center config object + * @param {number} [options.center.x=-10018378] center x, web mercator x or lon + * @param {number} [options.center.y=5574910] center y, web mercator y or lat + * @param {number} [options.zoom=7] zoom level + * @param {number} [options.minZoom=undefined] min zoom + * @param {number} [options.maxZoom=undefined] max zoom + * @param {boolean} [options.baseSwitcher=true] if add base map switcher + * @param {boolean} [options.fullScreen=false] if add base map switcher + * @returns the ol map + */ + function quickMap(options) { + var m = quickMapBase_1.quickMapBase(options); + mapMove_1.default.init(m); + mapPopup_1.default.init(m); + return m; + } + exports.quickMap = quickMap; + nm.quickMap = quickMap; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.default = quickMap; + + +/***/ }, +/* 2 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Created by gavorhes on 12/15/2015. + */ + "use strict"; + var $ = __webpack_require__(3); + var provide_1 = __webpack_require__(4); + var custom_ol_1 = __webpack_require__(5); + var nm = provide_1.default('olHelpers'); + /** + * Sets up a map with some default parameters and initializes + * mapMove and mapPopup + * + * @param [options={}] config options + * @param [options.divId=map] map div id + * @param [options.center={}] center config object + * @param [options.center.x=-10018378] center x, web mercator x or lon + * @param [options.center.y=5574910] center y, web mercator y or lat + * @param [options.zoom=7] zoom level + * @param [options.minZoom=undefined] min zoom + * @param [options.maxZoom=undefined] max zoom + * @param [options.baseSwitcher=true] if add base map switcher + * @param [options.fullScreen=false] if add base map switcher + * @returns the ol map + */ + function quickMapBase(options) { + options = options || {}; + options.divId = options.divId || 'map'; + options.center = options.center || { x: -10018378, y: 5574910 }; + options.zoom = typeof options.zoom == 'number' ? options.zoom : 7; + options.baseSwitcher = typeof options.baseSwitcher == 'boolean' ? options.baseSwitcher : true; + options.fullScreen = typeof options.fullScreen == 'boolean' ? options.fullScreen : false; + var $mapDiv = $('#' + options.divId); + $mapDiv.css('position', 'relative'); + var osmLayer = new custom_ol_1.ol.layer.Tile({ source: new custom_ol_1.ol.source.OSM() }); + // let satLayer = new ol.layer.Tile({visible: false, source: new ol.source.MapQuest({layer: 'sat'})}); + var osmCss = "url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMAUExURQAAADQ1NDk5OURFREtLS1FHSFlZWGJRVGJiYWdmZWxsbHRmaXBpanN0c3V0dHp5eX5+fIVzd4F3eeV0jud5juZ8k4aHhomHhoyGh5eGj5OVlJiVlZiYl5qZmJydnKOTlaKZmqKdnaOioaqqqKuzsbOvrrSysLa3tbW4uLm6ub27ub+/vbGXwbCZwbCgxLKlxrOqyLStybO3yrSxyrWzzbW2y7a1zbK4y7W6zbW8y760yrTAzbTFzrPKzrLOzrTJzrTOzr7CwbXC0LXK0LTO0L3I0bPQz7TQz7PS0bXQ0LnR0brW1bzT0r7U077V1Lzc2dqNqteUsdyXscaquuOHneaGmueHnOeJnuiBleiKn+eNoOiOoOWUpOiRo+iSpeiUpeqYpumaqOmdrPSynemgruSqtOmisOmlsuuqtequuOW1vOuxu+uxvOq1ve+xvPK0pvW3o/W5pfO5qvS7qfCwvMOuwc2/wNenxNyyzNe/0Nq31Nq51dy72Oy3wOu4wOu+xey4wO+6xO2+xfTAr/TCsvfFtPHLvvTJuMPDwMfHxcXKyc3DxMvFyMvLyM3PzcDV08DV1MTX1cbY1s7X1sjZ1sra2Mnd3M7b2c7c2tfH1tnB1t7F2d7M29fX1tLY1tDd2tHe3NTf3NnS19rZ1tva2Nnf3t3d28rh3tXg3Nnh3tzj393k39ni4N7k4N7n5uXDyOfLz+zAxu3CyOzEyezKzeDJ3eLM3uvP0u3P0ePf2+7R0u7Q1u/U0+7U1ezc0+7a2e/d2+3f3vbFzvLOwfHN0PPQw/TUx/LWyvLYzPDQ1fPe0ubc4vve4uHh3+nh3+/h2u/h3vHj2vHl3uHm4eTn4uDp5ebo4+Xo5ODq6ebq6OTv6+nl4+/j4O7l4e7n5ujp4+np5Ozq5e7s5urt6O7t6Orw6u7x6u3x7vPj5PDl4fDo4vDq5fDt5vDu6PDv7PTv6fDx6vHx7fH17fXw6fXy7fb07/bz8fT18vn38vr39fr48/r59Pr6+P3++//+/gAAALNTSk0AAAEAdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wBT9wclAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGHRFWHRTb2Z0d2FyZQBwYWludC5uZXQgNC4wLjlsM35OAAAFNElEQVRIS1VVCZxVUxi/9l0UIUT2bMnY43bVI2c0Y01kSWIaS0j2JEtkN41piomZrPPKQ2aQ7JKImOZlnm2493TJzDufuU1Zi+v/fee+mZ//793vnPOd7zvfes5zDBEZkBBjAcIjb+Iiotqgdhat8AMK0vl7/R9N7GiWtshqIr+EZ5gYKibyUsXY1l/mfFpssvUlWQ0FkU3gy4+RB/+kwYcO8pRSnldcOU/r2lAHARSwk2ORgEmOdC1EsuRiYSqMPwwroMIraZk5V2fYJQjCKfZrRmh3gSAZi2i4b7wSylWu8EqZwS59JkFUaW96JbNSc+CEUmt4rorwuZmWdDaoc+uZETuQlTCU5xYzR7muUnVUVo+BcRhre/VwUpasgJwhH7JkYIYA0sNxhmCwUK+lw6vCKBZehw01dEiyw4Q4aE0Z4ahDhKaFQsGnJ2BgqKoTBsNjFy0SlW6whRAZTdm8DBJmkBZhDi1j4xJQBk6ywrWUTymaCxac8lROcdauRGzQSNtA7EHUYhXyEwhhgjFUqRuO+rauhF1awFpzCsmwUbjIFBR0u1bKtyGpulW/H/cVVzkyGaIWTIR9pFAV6GK2gPMXMX8gPk9zzxXgI1kimcAltEYr+cjio1imlKpEa9rOipLm+p+CZ6Bw//qd1/f/O+GwMxbSLpyoZEcwkyh2jIks+3hmdd2jWUw4scxNysnHxU7nSspTRcJjCZGL3IsjsYJMMg5mwgx7gaIOLBFCogAgBBoNa9w+DE6I+Bs7FTgwwrJbHjWDgpYo2KwtBTcYEDuloC9geQw+k2RGnPGpTaOlq7AS+YICUz4DZVaX2TiNDhuYfTtY4geLi0IoCm3XccwM9hx4kU28StQEljDs3ZEpFGA+8dKzLmV9ymIwF5FOGn2GdJM8KLHDJbXyiYVMG9MRTLiXGGg2QKaxM3khPSRrwM9zEIardxU2w/EiA0gOeYKHzDR0V7/QGV3lKIA9ktrDArxO3gdA+k6SKoBiVwcm7NjZb9+Hnztg282TuHVZ9LOISFNt9MgyCetZVczSxnyDbl17Penq6mqpg1IhRaEO2aVLUO4/r17H8tTv6f13h71dduvZI3Y+uMdWksNSauLovJw5hsqiPIUvt0ku7/iBeUR3sksmomYWtRbAjbiLfv2lX9/V7LVG4uYnUZXhQ7f2OPCZEx9wrYWTcePEQqPEML8pl4mMdr/jlXlvHiRiJ2+MSTFY4TTSYStuvz2R/JXh+PPeGXm055J+3/YDWuNu3R3DArPutyg0ZgykMVDU9Ndm22+wYalr2rse48CnsTIFcMn73vfhNrktx1EUcZnPv6ah3Yy5cDTRdBEoGoBeah71dqFyjZDJLkWk3N3v4uuktssjWpzciMPxQeHj8nMKzcGuB0tAyzFhdCKOYWv4HwOQVwIxLG99a6uvH3sJCyO3h+k4EZ+G7+xj5f4XXksoaGrdMRzSc8ARA8+cdOuk2x6fffNNt5x+Ro1omPlrT/CQDlcNlpx4NBIWXhkx7Y3Zp3ofNR7Uv89Om/beW0TLIynHv3vs1VsOFpSWSXvfuPUf9BrRFyxgXdHoKJnQFegPOovvzz59ntrzye240ig8UQ3lDI2VqwagrKIQcLXNFL3wglN2OHdBQ6/vI3kENDVBwRb3k1XtczFbjWn4EzMYi7CF3129+JTYuRSdrGuS92g5dpqn6qXoJQs5xmL8p+Wt4hLbt0mx2OLNZR2bbPy8zJNQGFM/f/CfXZekRYFjGCWjIJpM+WiCzGBPWHhoyaAsjRT/B2Gy5yzYJkwUAAAAAElFTkSuQmCC')"; + var aerialCss = "url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMAUExURQALBgIMDQgOBwQOEQcTBwUSCwoVDAwdBw8ZDgUREwYUGAYZFQYZGgkTFQoVGQsZFAwZHBMeDhIbFBEbHAwWIA4bIREcIQ4hCQwjFw4lHBgkDB8sDxUiExIiGhAoGxohFRshGRorHQcrKQsiIQwmKgooJA0pKQ81Jw8yLRMiIxImKxUrJREuKhslJB0rIhooKRUuMBMyLhkwJhozKh48LxUzMRM9MBwzMiUvFCMtGiMwEiwzFCgzHDI+GSIsISkvJSQxIiM2LiY5Jic+Lyk0JSo0Ky49JSs9KSU1NSM7NCs2NS8+NDM1JzU9Ljg7IDJCHS1DLSNAMitCMSxIOjREITZLIDZJKDlFIjpFKztKJT1LKzJBMzpHMD1JMjpKPD1RKjlQNC1DQj5QQEA8MEJGJkBKJUJNK0lLLEJMMkVMPEpONENSLUdZL0pTLkpaLkRUMkRSPEVZMktUM0pVOklZMklZNEpcNU1ZMk1ZNUxfMk5dNkxcOVFUM1RUOFJbNVFZOVNYPVFdOVJdPFVaOVVaPVVdOlVdPVpaNlpdO0phN01hOlBiN1NhPFNoP1piPWFbPmRjPENOQEtPSURTQkJVS0xVQk1VSkxbQkxcS0heUVFXRFRcQlJfTFxeQlpeS05lQk1kSFRjQVRjSlZpQ1tkQlxlSlxpRF1rSVVnUVtlU1llXF9tU1xoXlxwSl9ramRfQmJlQ2FhSWFlSWFlTmVlSWRmTGFoQWFpRWFsRmVpRWVtRmNsSmtlRGpqRmpsS2BmWGRsUmFrW2ptUmZyR2RxTGpxTWVyU2RyW2d5V2tzUmt0WW15VG15WXFuTHNtVnFxTXF4T3h0TnJzUnJ1XHJ4VXN6Wnp0VHx1W315VXp8XGR0YGx0YHVzZXJ0aHR9ZXV+aHl9YHOCXXqBXXeCYHyCY3iEaHyIYn+JaXqKcYB5WIN6Y4SCXoCDZIGEaYCIZoOLa4iCaImJbIOOdYuMco6OeIuVcpOKbZKPc5aQb5eXe5ufg6KjhAAAAAAAAAAAAAAAAOGCeQgAAAEAdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wBT9wclAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGHRFWHRTb2Z0d2FyZQBwYWludC5uZXQgNC4wLjlsM35OAAAH80lEQVRISy1WbXQUVxm+6wqnk3Zmpxl2FG2EGg92C8GDlWptVTwa+uF3xcKmDfFzCUzDsJNsunXipglJXJbrtJWmwZNSnHD3jojRgUIm2UumIZ0JZ7JByrALbMWW0IBW8aRa4+cf76TeX3Nm3uc+z/s+7/vugl4r/aMTrT4e1pPTqnnmJNn5AyUzRnrRle/qE33dsvrBtAQVoxtpZNK3zSzYjUjviWO2Ag+R77dl7W36n/1Ep9KBPG/S+Py0PkjU/gPKQGqwTHryiWYFAXSvMairsio7SjyNsnCzh0qKImV9/7mhfHQZx2yN1O+7rXUm33MUPaboOkAJHaoIdXfJj2xWeyD8jMFEXkvIu5qzpU988gWB5zl+GS+sFe55trEVPdWZB2miq8bBVkNFO2R0qnrfkiXhcJhtDNXE6tbW97/s9O9/7ZfVhx86/CwrROpfvvxboMqeLsuqPr1j44qEwDNMOBximUiYoU8sw7BC/a7T72uEnyJDlGxZ9KcglZRyuqqrv/tSZErgOI4NgRBTIw9EmHAoFGZZnp6aGaJ2GTxfxYs8kKVUQh7WB5hQeC3LsUxoxVKW14l3BX2WcoUYPiZyLLe8teZ+iuT4GGhvV5KpKWkpyzxEr2MZgQ1xdRjfRBoH+2k6lIHjKTHPPBo8CSJISqqq4wGGOcWylIGlgvgNX1Gd8vF5f+IUIwb30ng+Gg2QfBRIMvy0jG8SVkYo4N0zvUXVRztbJ/L6xL7lUZEXBEHkuZqlS6gEAUgKJurnhFtfpACOYd8b/hVbJPqwi44a6KA0sPVjIi/SIyxb3u8KlAJ0S8jRVgrlW+nVHPdrhiXCxu42d86ByksDc80P3MkJFBFQ8Ho1lQegpWJRWFGsDsRwwv7pIyvuQW0ZkrX6NDVFbqcvaQI8vbyqzt5AARrsbKx5yhQEGs+wPO56bOK+0rcwMrOKkpUbZWYxV04UeZZv/cBKFhRL6Qdv9y4LfEDA7/thg7tTmv1a5/GnO0wl0dQg80wglZaHUmxRvjwAHOfyN0mxrpqLUpcjsK3NHYMo4R1o6eho2ZyIb2FoeOC3ILK8kZ2HQMOuWywGXUkJBCeTbYFS0+ym1h2/6UgmvnrvKYZZtIEXGf75C2cIAp5LHNd71x7uPoTjakrWH9e3KFpaatjUvJUysFw0KrLMYMW2lTg4PeUQx6kJEALvxXEmCdVyPLHtCSjBhc01XCjIgafxou+PE6KC1dhxSCwoBCc+N4P3btM84pmdSSjJnjO/nvY4LQfVyz5/I+v6IwjUOMjy+MVCxIbKupTJaEktp7cTKU42Pvjh2m/8cSpC6aPsaX/MHSuUQLVVsIa4RUTs/r/BVAexNdjdnsNG7j/rV93xheLMzKnFrPeTEQchCyCcKb25aAIn7lrAertrZwyNXM8N6zfWrFo3d2SmOEcF83x/r+OOFgrAHYWF7cELjhV7UQo/6WAIUVl9JFl8a//HZ66VpbY3I9QKZqPru77lA+iOWAIr0hKxHCmmr0othSyeIl5y3qt4xT8gSNrKEZozs8Els67rgsLOZ+ygzwMfbtNhobfgzpEyGnz7htPtzUi6PuOoj7K0WF/MXiUFxwGajRD1hjYXHXI9p406qOyinp5/tiWcDHY0jIu4n64Qfq7kliB2gemag9QbOia0PbbDMbd43SHuvxFxrAocxins7MX5Kqbe1QixKBxoV4//PfAgGCu+Rlm4SvZizyDH+0reDHp92iO0BuX3bCfItl0PEwvYLqpwXG2MHlGsQ4S8pMJZv1JGmHiEoHQDdOjwmVlEP/nE9ADKjI8xLI0OOGITfy0SbeG/C2jKUDGSlDhM9I3IpK9iup6XnbRNC7yqueNsJCCIiXzdQhnaGN+46umnEdy5U5UbUJ48LFM9GkJo8BdDOiAZ7ZIQbKhYLMqvhU2wmNxjEAsS2AI7y4nWF64duePbk7YV3zvAVLEMD9AxJRNa3KDUibV7DjnkuprMEYjScFNcaR2ceP2u9R/5k1052Ryme5phAFRswlHjAudiP4dOy7CaxLgdJh9vUlU1702/+LPa1U9fvPi9qlA4XEUBJc3dFlpsR457IDl1iPqLp7o81NQgyV19iYU38uTiv975Pd3SiwQcsGjx+v4/6fl5T7EOOMTCtpbKxfemsQq/3olQZcminADAAI0cuGLHaHOFxbuGvRk/Z9u7CULqoVR6NE0yx1avj30oRhc/jWUoIALGxkz0dg1Dl9iaI7LqOOXKsXJFwjiuEAi70Jra2nW1PL08zLBhZsMABpW5csI7TPfew9ipFKcn5k1i+1KyCWKjC3W/8dF1d666+RaabBVTFTHacjoojBNDh0NDxk+IPTlwfqJkWpbnpFHXIbLbmpxEQ3ff/Z0g/mauXsoln9wDRjy/NHsQFw3P6vWuTJ43/+FZrk2cvAFRipCKdfD9y2+pjRj78s0KdCUDKJvdV91ChngV38T20TM+gghjpJaPlpFr2xbEz5g4A/NGt5rNwdwmYGeeeMXBSLHHUIc+6RsojRH9VTUm3/mLf/64b470XvoxoTKhlMBQ2jMEzo2PjxdGMppmn1RM24bWFJqaQv4BcuJa2Sam7Zokq1ldCsz06NCBHrhwqVQYpfFj42NZexz1EW9SR/kT58nEeQKJb2fPXjjp0u/YUkwHEgLeOnf2nOuf1TRTM02CLKLTPy60/x1CCztqn7Ev+BdsC3m+30decQvW/wBNTwU+CfUQAQAAAABJRU5ErkJggg==')"; + if (options.baseSwitcher) { + } + if (options.zoom < 0 || options.zoom > 28) { + throw 'zoom out of range'; + } + if (options.center.x >= -180 && options.center.x <= 180 && options.center.y >= -90 && options.center.y <= 90) { + var p = new custom_ol_1.ol.geom.Point([options.center.x, options.center.y]); + new custom_ol_1.ol.proj.Projection({ code: "EPSG:4326" }); + p.transform(new custom_ol_1.ol.proj.Projection({ code: "EPSG:4326" }), new custom_ol_1.ol.proj.Projection({ code: "EPSG:3857" })); + var coordinates = p.getCoordinates(); + options.center.x = coordinates[0]; + options.center.y = coordinates[1]; + } + var map = new custom_ol_1.ol.Map({ + layers: [osmLayer], + target: options.divId, + controls: custom_ol_1.ol.control.defaults({ + attributionOptions: { collapsible: false } + }), + view: new custom_ol_1.ol.View({ + center: [options.center.x, options.center.y], + zoom: options.zoom, + minZoom: options.minZoom, + maxZoom: options.maxZoom + }) + }); + if (options.fullScreen) { + //TODO add full screen options to ts + map.addControl(new custom_ol_1.ol.control.FullScreen({})); + } + return map; + } + exports.quickMapBase = quickMapBase; + nm.quickMapBase = quickMapBase; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.default = quickMapBase; + + +/***/ }, +/* 3 */ +/***/ function(module, exports, __webpack_require__) { + + var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! + * jQuery JavaScript Library v2.2.3 + * http://jquery.com/ + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2016-04-05T19:26Z + */ + + (function( global, factory ) { + + if ( typeof module === "object" && typeof module.exports === "object" ) { + // For CommonJS and CommonJS-like environments where a proper `window` + // is present, execute the factory and get jQuery. + // For environments that do not have a `window` with a `document` + // (such as Node.js), expose a factory as module.exports. + // This accentuates the need for the creation of a real `window`. + // e.g. var jQuery = require("jquery")(window); + // See ticket #14549 for more info. + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + + // Pass this if window is not defined yet + }(typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + + // Support: Firefox 18+ + // Can't be in strict mode, several libs including ASP.NET trace + // the stack via arguments.caller.callee and Firefox dies if + // you try to trace through "use strict" call chains. (#13335) + //"use strict"; + var arr = []; + + var document = window.document; + + var slice = arr.slice; + + var concat = arr.concat; + + var push = arr.push; + + var indexOf = arr.indexOf; + + var class2type = {}; + + var toString = class2type.toString; + + var hasOwn = class2type.hasOwnProperty; + + var support = {}; + + + + var + version = "2.2.3", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }, + + // Support: Android<4.1 + // Make sure we trim BOM and NBSP + rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, + + // Matches dashed string for camelizing + rmsPrefix = /^-ms-/, + rdashAlpha = /-([\da-z])/gi, + + // Used by jQuery.camelCase as callback to replace() + fcamelCase = function( all, letter ) { + return letter.toUpperCase(); + }; + + jQuery.fn = jQuery.prototype = { + + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // Start with an empty selector + selector: "", + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + return num != null ? + + // Return just the one element from the set + ( num < 0 ? this[ num + this.length ] : this[ num ] ) : + + // Return all the elements in a clean array + slice.call( this ); + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + ret.context = this.context; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + each: function( callback ) { + return jQuery.each( this, callback ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map( this, function( elem, i ) { + return callback.call( elem, i, elem ); + } ) ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: arr.sort, + splice: arr.splice + }; + + jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[ 0 ] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // Skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !jQuery.isFunction( target ) ) { + target = {}; + } + + // Extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + + // Only deal with non-null/undefined values + if ( ( options = arguments[ i ] ) != null ) { + + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject( copy ) || + ( copyIsArray = jQuery.isArray( copy ) ) ) ) { + + if ( copyIsArray ) { + copyIsArray = false; + clone = src && jQuery.isArray( src ) ? src : []; + + } else { + clone = src && jQuery.isPlainObject( src ) ? src : {}; + } + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; + }; + + jQuery.extend( { + + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + isFunction: function( obj ) { + return jQuery.type( obj ) === "function"; + }, + + isArray: Array.isArray, + + isWindow: function( obj ) { + return obj != null && obj === obj.window; + }, + + isNumeric: function( obj ) { + + // parseFloat NaNs numeric-cast false positives (null|true|false|"") + // ...but misinterprets leading-number strings, particularly hex literals ("0x...") + // subtraction forces infinities to NaN + // adding 1 corrects loss of precision from parseFloat (#15100) + var realStringObj = obj && obj.toString(); + return !jQuery.isArray( obj ) && ( realStringObj - parseFloat( realStringObj ) + 1 ) >= 0; + }, + + isPlainObject: function( obj ) { + var key; + + // Not plain objects: + // - Any object or value whose internal [[Class]] property is not "[object Object]" + // - DOM nodes + // - window + if ( jQuery.type( obj ) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { + return false; + } + + // Not own constructor property must be Object + if ( obj.constructor && + !hasOwn.call( obj, "constructor" ) && + !hasOwn.call( obj.constructor.prototype || {}, "isPrototypeOf" ) ) { + return false; + } + + // Own properties are enumerated firstly, so to speed up, + // if last one is own, then all properties are own + for ( key in obj ) {} + + return key === undefined || hasOwn.call( obj, key ); + }, + + isEmptyObject: function( obj ) { + var name; + for ( name in obj ) { + return false; + } + return true; + }, + + type: function( obj ) { + if ( obj == null ) { + return obj + ""; + } + + // Support: Android<4.0, iOS<6 (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; + }, + + // Evaluates a script in a global context + globalEval: function( code ) { + var script, + indirect = eval; + + code = jQuery.trim( code ); + + if ( code ) { + + // If the code includes a valid, prologue position + // strict mode pragma, execute code by injecting a + // script tag into the document. + if ( code.indexOf( "use strict" ) === 1 ) { + script = document.createElement( "script" ); + script.text = code; + document.head.appendChild( script ).parentNode.removeChild( script ); + } else { + + // Otherwise, avoid the DOM node creation, insertion + // and removal by using an indirect global eval + + indirect( code ); + } + } + }, + + // Convert dashed to camelCase; used by the css and data modules + // Support: IE9-11+ + // Microsoft forgot to hump their vendor prefix (#9572) + camelCase: function( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); + }, + + nodeName: function( elem, name ) { + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + }, + + each: function( obj, callback ) { + var length, i = 0; + + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + // Support: Android<4.1 + trim: function( text ) { + return text == null ? + "" : + ( text + "" ).replace( rtrim, "" ); + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArrayLike( Object( arr ) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + return arr == null ? -1 : indexOf.call( arr, elem, i ); + }, + + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + for ( ; j < len; j++ ) { + first[ i++ ] = second[ j ]; + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var length, value, + i = 0, + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArrayLike( elems ) ) { + length = elems.length; + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // Bind a function to a context, optionally partially applying any + // arguments. + proxy: function( fn, context ) { + var tmp, args, proxy; + + if ( typeof context === "string" ) { + tmp = fn[ context ]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if ( !jQuery.isFunction( fn ) ) { + return undefined; + } + + // Simulated bind + args = slice.call( arguments, 2 ); + proxy = function() { + return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || jQuery.guid++; + + return proxy; + }, + + now: Date.now, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support + } ); + + // JSHint would error on this code due to the Symbol not being defined in ES5. + // Defining this global in .jshintrc would create a danger of using the global + // unguarded in another place, it seems safer to just disable JSHint for these + // three lines. + /* jshint ignore: start */ + if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; + } + /* jshint ignore: end */ + + // Populate the class2type map + jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), + function( i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); + } ); + + function isArrayLike( obj ) { + + // Support: iOS 8.2 (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, + type = jQuery.type( obj ); + + if ( type === "function" || jQuery.isWindow( obj ) ) { + return false; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; + } + var Sizzle = + /*! + * Sizzle CSS Selector Engine v2.2.1 + * http://sizzlejs.com/ + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2015-10-17 + */ + (function( window ) { + + var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + 1 * new Date(), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // General-purpose constants + MAX_NEGATIVE = 1 << 31, + + // Instance methods + hasOwn = ({}).hasOwnProperty, + arr = [], + pop = arr.pop, + push_native = arr.push, + push = arr.push, + slice = arr.slice, + // Use a stripped-down indexOf as it's faster than native + // http://jsperf.com/thor-indexof-vs-for/5 + indexOf = function( list, elem ) { + var i = 0, + len = list.length; + for ( ; i < len; i++ ) { + if ( list[i] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + + // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier + identifier = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + + "*\\]", + + pseudos = ":(" + identifier + ")(?:\\((" + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), + + rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + identifier + ")" ), + "CLASS": new RegExp( "^\\.(" + identifier + ")" ), + "TAG": new RegExp( "^(" + identifier + "|[*])" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + rescape = /'|\\/g, + + // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), + funescape = function( _, escaped, escapedWhitespace ) { + var high = "0x" + escaped - 0x10000; + // NaN means non-codepoint + // Support: Firefox<24 + // Workaround erroneous numeric interpretation of +"0x" + return high !== high || escapedWhitespace ? + escaped : + high < 0 ? + // BMP codepoint + String.fromCharCode( high + 0x10000 ) : + // Supplemental Plane codepoint (surrogate pair) + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }; + + // Optimize for push.apply( _, NodeList ) + try { + push.apply( + (arr = slice.call( preferredDoc.childNodes )), + preferredDoc.childNodes + ); + // Support: Android<4.0 + // Detect silently failing push.apply + arr[ preferredDoc.childNodes.length ].nodeType; + } catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + push_native.apply( target, slice.call(els) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + // Can't trust NodeList.length + while ( (target[j++] = els[i++]) ) {} + target.length = j - 1; + } + }; + } + + function Sizzle( selector, context, results, seed ) { + var m, i, elem, nid, nidselect, match, groups, newSelector, + newContext = context && context.ownerDocument, + + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; + + results = results || []; + + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { + + if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { + setDocument( context ); + } + context = context || document; + + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) { + + // ID selector + if ( (m = match[1]) ) { + + // Document context + if ( nodeType === 9 ) { + if ( (elem = context.getElementById( m )) ) { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + + // Element context + } else { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( newContext && (elem = newContext.getElementById( m )) && + contains( context, elem ) && + elem.id === m ) { + + results.push( elem ); + return results; + } + } + + // Type selector + } else if ( match[2] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Class selector + } else if ( (m = match[3]) && support.getElementsByClassName && + context.getElementsByClassName ) { + + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // Take advantage of querySelectorAll + if ( support.qsa && + !compilerCache[ selector + " " ] && + (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { + + if ( nodeType !== 1 ) { + newContext = context; + newSelector = selector; + + // qSA looks outside Element context, which is not what we want + // Thanks to Andrew Dupont for this workaround technique + // Support: IE <=8 + // Exclude object elements + } else if ( context.nodeName.toLowerCase() !== "object" ) { + + // Capture the context ID, setting it first if necessary + if ( (nid = context.getAttribute( "id" )) ) { + nid = nid.replace( rescape, "\\$&" ); + } else { + context.setAttribute( "id", (nid = expando) ); + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + nidselect = ridentifier.test( nid ) ? "#" + nid : "[id='" + nid + "']"; + while ( i-- ) { + groups[i] = nidselect + " " + toSelector( groups[i] ); + } + newSelector = groups.join( "," ); + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + } + + if ( newSelector ) { + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + } finally { + if ( nid === expando ) { + context.removeAttribute( "id" ); + } + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); + } + + /** + * Create key-value caches of limited size + * @returns {function(string, object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ + function createCache() { + var keys = []; + + function cache( key, value ) { + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return (cache[ key + " " ] = value); + } + return cache; + } + + /** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ + function markFunction( fn ) { + fn[ expando ] = true; + return fn; + } + + /** + * Support testing using an element + * @param {Function} fn Passed the created div and expects a boolean result + */ + function assert( fn ) { + var div = document.createElement("div"); + + try { + return !!fn( div ); + } catch (e) { + return false; + } finally { + // Remove from its parent by default + if ( div.parentNode ) { + div.parentNode.removeChild( div ); + } + // release memory in IE + div = null; + } + } + + /** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ + function addHandle( attrs, handler ) { + var arr = attrs.split("|"), + i = arr.length; + + while ( i-- ) { + Expr.attrHandle[ arr[i] ] = handler; + } + } + + /** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ + function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + ( ~b.sourceIndex || MAX_NEGATIVE ) - + ( ~a.sourceIndex || MAX_NEGATIVE ); + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( (cur = cur.nextSibling) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; + } + + /** + * Returns a function to use in pseudos for input types + * @param {String} type + */ + function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; + } + + /** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ + function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && elem.type === type; + }; + } + + /** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ + function createPositionalPseudo( fn ) { + return markFunction(function( argument ) { + argument = +argument; + return markFunction(function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ (j = matchIndexes[i]) ] ) { + seed[j] = !(matches[j] = seed[j]); + } + } + }); + }); + } + + /** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ + function testContext( context ) { + return context && typeof context.getElementsByTagName !== "undefined" && context; + } + + // Expose support vars for convenience + support = Sizzle.support = {}; + + /** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ + isXML = Sizzle.isXML = function( elem ) { + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = elem && (elem.ownerDocument || elem).documentElement; + return documentElement ? documentElement.nodeName !== "HTML" : false; + }; + + /** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ + setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, parent, + doc = node ? node.ownerDocument || node : preferredDoc; + + // Return early if doc is invalid or already selected + if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Update global variables + document = doc; + docElem = document.documentElement; + documentIsHTML = !isXML( document ); + + // Support: IE 9-11, Edge + // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) + if ( (parent = document.defaultView) && parent.top !== parent ) { + // Support: IE 11 + if ( parent.addEventListener ) { + parent.addEventListener( "unload", unloadHandler, false ); + + // Support: IE 9 - 10 only + } else if ( parent.attachEvent ) { + parent.attachEvent( "onunload", unloadHandler ); + } + } + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties + // (excepting IE8 booleans) + support.attributes = assert(function( div ) { + div.className = "i"; + return !div.getAttribute("className"); + }); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert(function( div ) { + div.appendChild( document.createComment("") ); + return !div.getElementsByTagName("*").length; + }); + + // Support: IE<9 + support.getElementsByClassName = rnative.test( document.getElementsByClassName ); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert(function( div ) { + docElem.appendChild( div ).id = expando; + return !document.getElementsByName || !document.getElementsByName( expando ).length; + }); + + // ID find and filter + if ( support.getById ) { + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var m = context.getElementById( id ); + return m ? [ m ] : []; + } + }; + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute("id") === attrId; + }; + }; + } else { + // Support: IE6/7 + // getElementById is not reliable as a find shortcut + delete Expr.find["ID"]; + + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== "undefined" && + elem.getAttributeNode("id"); + return node && node.value === attrId; + }; + }; + } + + // Tag + Expr.find["TAG"] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( tag ); + + // DocumentFragment nodes don't have gEBTN + } else if ( support.qsa ) { + return context.querySelectorAll( tag ); + } + } : + + function( tag, context ) { + var elem, + tmp = [], + i = 0, + // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( (elem = results[i++]) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See http://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( (support.qsa = rnative.test( document.querySelectorAll )) ) { + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert(function( div ) { + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // http://bugs.jquery.com/ticket/12359 + docElem.appendChild( div ).innerHTML = "<a id='" + expando + "'></a>" + + "<select id='" + expando + "-\r\\' msallowcapture=''>" + + "<option selected=''></option></select>"; + + // Support: IE8, Opera 11-12.16 + // Nothing should be selected when empty strings follow ^= or $= or *= + // The test attribute must be unknown in Opera but "safe" for WinRT + // http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( div.querySelectorAll("[msallowcapture^='']").length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !div.querySelectorAll("[selected]").length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ + if ( !div.querySelectorAll( "[id~=" + expando + "-]" ).length ) { + rbuggyQSA.push("~="); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !div.querySelectorAll(":checked").length ) { + rbuggyQSA.push(":checked"); + } + + // Support: Safari 8+, iOS 8+ + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibing-combinator selector` fails + if ( !div.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push(".#.+[+~]"); + } + }); + + assert(function( div ) { + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = document.createElement("input"); + input.setAttribute( "type", "hidden" ); + div.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( div.querySelectorAll("[name=d]").length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( !div.querySelectorAll(":enabled").length ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Opera 10-11 does not throw on post-comma invalid pseudos + div.querySelectorAll("*,:x"); + rbuggyQSA.push(",.*:"); + }); + } + + if ( (support.matchesSelector = rnative.test( (matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector) )) ) { + + assert(function( div ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( div, "div" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( div, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + }); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + // Element contains another + // Purposefully self-exclusive + // As in, an element does not contain itself + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + )); + } : + function( a, b ) { + if ( b ) { + while ( (b = b.parentNode) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = hasCompare ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + // Sort on method existence if only one input has compareDocumentPosition + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + // Calculate position if both inputs belong to the same document + compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + // Otherwise we know they are disconnected + 1; + + // Disconnected nodes + if ( compare & 1 || + (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { + + // Choose the first element that is related to our preferred document + if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { + return -1; + } + if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Parentless nodes are either documents or disconnected + if ( !aup || !bup ) { + return a === document ? -1 : + b === document ? 1 : + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( (cur = cur.parentNode) ) { + ap.unshift( cur ); + } + cur = b; + while ( (cur = cur.parentNode) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[i] === bp[i] ) { + i++; + } + + return i ? + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[i], bp[i] ) : + + // Otherwise nodes in our document sort first + ap[i] === preferredDoc ? -1 : + bp[i] === preferredDoc ? 1 : + 0; + }; + + return document; + }; + + Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); + }; + + Sizzle.matchesSelector = function( elem, expr ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + // Make sure that attribute selectors are quoted + expr = expr.replace( rattributeQuotes, "='$1']" ); + + if ( support.matchesSelector && documentIsHTML && + !compilerCache[ expr + " " ] && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch (e) {} + } + + return Sizzle( expr, document, null, [ elem ] ).length > 0; + }; + + Sizzle.contains = function( context, elem ) { + // Set document vars if needed + if ( ( context.ownerDocument || context ) !== document ) { + setDocument( context ); + } + return contains( context, elem ); + }; + + Sizzle.attr = function( elem, name ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + // Don't get fooled by Object.prototype properties (jQuery #13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + (val = elem.getAttributeNode(name)) && val.specified ? + val.value : + null; + }; + + Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); + }; + + /** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ + Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( (elem = results[i++]) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + // Clear input after sorting to release objects + // See https://github.com/jquery/sizzle/pull/225 + sortInput = null; + + return results; + }; + + /** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ + getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + // If no nodeType, this is expected to be an array + while ( (node = elem[i++]) ) { + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + // Use textContent for elements + // innerText usage removed for consistency of new lines (jQuery #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + // Do not include comment or processing instruction nodes + + return ret; + }; + + Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[1] = match[1].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape ); + + if ( match[2] === "~=" ) { + match[3] = " " + match[3] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[1] = match[1].toLowerCase(); + + if ( match[1].slice( 0, 3 ) === "nth" ) { + // nth-* requires argument + if ( !match[3] ) { + Sizzle.error( match[0] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); + match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); + + // other types prohibit arguments + } else if ( match[3] ) { + Sizzle.error( match[0] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[6] && match[2]; + + if ( matchExpr["CHILD"].test( match[0] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[3] ) { + match[2] = match[4] || match[5] || ""; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + // Get excess from tokenize (recursively) + (excess = tokenize( unquoted, true )) && + // advance to the next closing parenthesis + (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { + + // excess is a negative index + match[0] = match[0].slice( 0, excess ); + match[2] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { return true; } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && + classCache( className, function( elem ) { + return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" ); + }); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + }; + }, + + "CHILD": function( type, what, argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, context, xml ) { + var cache, uniqueCache, outerCache, node, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType, + diff = false; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( (node = node[ dir ]) ) { + if ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) { + + return false; + } + } + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + + // Seek `elem` from a previously-cached index + + // ...in a gzip-friendly way + node = parent; + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex && cache[ 2 ]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( (node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + (diff = nodeIndex = 0) || start.pop()) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else { + // Use previously-cached element index if available + if ( useCache ) { + // ...in a gzip-friendly way + node = elem; + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex; + } + + // xml :nth-child(...) + // or :nth-last-child(...) or :nth(-last)?-of-type(...) + if ( diff === false ) { + // Use the same loop as above to seek `elem` from the start + while ( (node = ++nodeIndex && node && node[ dir ] || + (diff = nodeIndex = 0) || start.pop()) ) { + + if ( ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) && + ++diff ) { + + // Cache the index of each encountered element + if ( useCache ) { + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + uniqueCache[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction(function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf( seed, matched[i] ); + seed[ idx ] = !( matches[ idx ] = matched[i] ); + } + }) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + // Potentially complex pseudos + "not": markFunction(function( selector ) { + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction(function( seed, matches, context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( (elem = unmatched[i]) ) { + seed[i] = !(matches[i] = elem); + } + } + }) : + function( elem, context, xml ) { + input[0] = elem; + matcher( input, null, xml, results ); + // Don't keep the element (issue #299) + input[0] = null; + return !results.pop(); + }; + }), + + "has": markFunction(function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + }), + + "contains": markFunction(function( text ) { + text = text.replace( runescape, funescape ); + return function( elem ) { + return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; + }; + }), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + // lang value must be a valid identifier + if ( !ridentifier.test(lang || "") ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( (elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); + return false; + }; + }), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); + }, + + // Boolean properties + "enabled": function( elem ) { + return elem.disabled === false; + }, + + "disabled": function( elem ) { + return elem.disabled === true; + }, + + "checked": function( elem ) { + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); + }, + + "selected": function( elem ) { + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), + // but not by others (comment: 8; processing instruction: 7; etc.) + // nodeType < 6 works because attributes (2) do not appear as children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos["empty"]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + // Support: IE<8 + // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" + ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); + }, + + // Position-in-collection + "first": createPositionalPseudo(function() { + return [ 0 ]; + }), + + "last": createPositionalPseudo(function( matchIndexes, length ) { + return [ length - 1 ]; + }), + + "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + }), + + "even": createPositionalPseudo(function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "odd": createPositionalPseudo(function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }) + } + }; + + Expr.pseudos["nth"] = Expr.pseudos["eq"]; + + // Add button/input type pseudos + for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); + } + for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); + } + + // Easy API for creating new setFilters + function setFilters() {} + setFilters.prototype = Expr.filters = Expr.pseudos; + Expr.setFilters = new setFilters(); + + tokenize = Sizzle.tokenize = function( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || (match = rcomma.exec( soFar )) ) { + if ( match ) { + // Don't consume trailing commas as valid + soFar = soFar.slice( match[0].length ) || soFar; + } + groups.push( (tokens = []) ); + } + + matched = false; + + // Combinators + if ( (match = rcombinators.exec( soFar )) ) { + matched = match.shift(); + tokens.push({ + value: matched, + // Cast descendant combinators to space + type: match[0].replace( rtrim, " " ) + }); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || + (match = preFilters[ type ]( match ))) ) { + matched = match.shift(); + tokens.push({ + value: matched, + type: type, + matches: match + }); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); + }; + + function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[i].value; + } + return selector; + } + + function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + checkNonElements = base && dir === "parentNode", + doneName = done++; + + return combinator.first ? + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, uniqueCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching + if ( xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || (elem[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {}); + + if ( (oldCache = uniqueCache[ dir ]) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + // Assign to newCache so results back-propagate to previous elements + return (newCache[ 2 ] = oldCache[ 2 ]); + } else { + // Reuse newcache so results back-propagate to previous elements + uniqueCache[ dir ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { + return true; + } + } + } + } + } + }; + } + + function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[i]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[0]; + } + + function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[i], results ); + } + return results; + } + + function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( (elem = unmatched[i]) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; + } + + function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction(function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( (elem = temp[i]) ) { + matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) ) { + // Restore matcherIn since elem is not yet a final match + temp.push( (matcherIn[i] = elem) ); + } + } + postFinder( null, (matcherOut = []), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) && + (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) { + + seed[temp] = !(results[temp] = elem); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + }); + } + + function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[0].type ], + implicitRelative = leadingRelative || Expr.relative[" "], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + (checkContext = context).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + // Avoid hanging onto element (issue #299) + checkContext = null; + return ret; + } ]; + + for ( ; i < len; i++ ) { + if ( (matcher = Expr.relative[ tokens[i].type ]) ) { + matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; + } else { + matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[j].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); + } + + function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + // We must always have either seed elements or outermost context + elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), + len = elems.length; + + if ( outermost ) { + outermostContext = context === document || context || outermost; + } + + // Add elements passing elementMatchers directly to results + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id + for ( ; i !== len && (elem = elems[i]) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + if ( !context && elem.ownerDocument !== document ) { + setDocument( elem ); + xml = !documentIsHTML; + } + while ( (matcher = elementMatchers[j++]) ) { + if ( matcher( elem, context || document, xml) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + // They will have gone through all possible matchers + if ( (elem = !matcher && elem) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // `i` is now the count of elements visited above, and adding it to `matchedCount` + // makes the latter nonnegative. + matchedCount += i; + + // Apply set filters to unmatched elements + // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` + // equals `i`), unless we didn't visit _any_ elements in the above loop because we have + // no element matchers and no seed. + // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that + // case, which will result in a "00" `matchedCount` that differs from `i` but is also + // numerically zero. + if ( bySet && i !== matchedCount ) { + j = 0; + while ( (matcher = setMatchers[j++]) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !(unmatched[i] || setMatched[i]) ) { + setMatched[i] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; + } + + compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + // Generate a function of recursive functions that can be used to check each element + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[i] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); + + // Save selector and tokenization + cached.selector = selector; + } + return cached; + }; + + /** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ + select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( (selector = compiled.selector || selector) ); + + results = results || []; + + // Try to minimize operations if there is only one selector in the list and no seed + // (the latter of which guarantees us context) + if ( match.length === 1 ) { + + // Reduce context if the leading compound selector is an ID + tokens = match[0] = match[0].slice( 0 ); + if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && + support.getById && context.nodeType === 9 && documentIsHTML && + Expr.relative[ tokens[1].type ] ) { + + context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; + if ( !context ) { + return results; + + // Precompiled matchers will still verify ancestry, so step up a level + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[i]; + + // Abort if we hit a combinator + if ( Expr.relative[ (type = token.type) ] ) { + break; + } + if ( (find = Expr.find[ type ]) ) { + // Search, expanding context for leading sibling combinators + if ( (seed = find( + token.matches[0].replace( runescape, funescape ), + rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context + )) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + // Compile and execute a filtering function if one is not provided + // Provide `match` to avoid retokenization if we modified the selector above + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + !context || rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; + }; + + // One-time assignments + + // Sort stability + support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; + + // Support: Chrome 14-35+ + // Always assume duplicates if they aren't passed to the comparison function + support.detectDuplicates = !!hasDuplicate; + + // Initialize against the default document + setDocument(); + + // Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) + // Detached nodes confoundingly follow *each other* + support.sortDetached = assert(function( div1 ) { + // Should return 1, but returns 4 (following) + return div1.compareDocumentPosition( document.createElement("div") ) & 1; + }); + + // Support: IE<8 + // Prevent attribute/property "interpolation" + // http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx + if ( !assert(function( div ) { + div.innerHTML = "<a href='#'></a>"; + return div.firstChild.getAttribute("href") === "#" ; + }) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + }); + } + + // Support: IE<9 + // Use defaultValue in place of getAttribute("value") + if ( !support.attributes || !assert(function( div ) { + div.innerHTML = "<input/>"; + div.firstChild.setAttribute( "value", "" ); + return div.firstChild.getAttribute( "value" ) === ""; + }) ) { + addHandle( "value", function( elem, name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + }); + } + + // Support: IE<9 + // Use getAttributeNode to fetch booleans when getAttribute lies + if ( !assert(function( div ) { + return div.getAttribute("disabled") == null; + }) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + (val = elem.getAttributeNode( name )) && val.specified ? + val.value : + null; + } + }); + } + + return Sizzle; + + })( window ); + + + + jQuery.find = Sizzle; + jQuery.expr = Sizzle.selectors; + jQuery.expr[ ":" ] = jQuery.expr.pseudos; + jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; + jQuery.text = Sizzle.getText; + jQuery.isXMLDoc = Sizzle.isXML; + jQuery.contains = Sizzle.contains; + + + + var dir = function( elem, dir, until ) { + var matched = [], + truncate = until !== undefined; + + while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { + if ( elem.nodeType === 1 ) { + if ( truncate && jQuery( elem ).is( until ) ) { + break; + } + matched.push( elem ); + } + } + return matched; + }; + + + var siblings = function( n, elem ) { + var matched = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + matched.push( n ); + } + } + + return matched; + }; + + + var rneedsContext = jQuery.expr.match.needsContext; + + var rsingleTag = ( /^<([\w-]+)\s*\/?>(?:<\/\1>|)$/ ); + + + + var risSimple = /^.[^:#\[\.,]*$/; + + // Implement the identical functionality for filter and not + function winnow( elements, qualifier, not ) { + if ( jQuery.isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + /* jshint -W018 */ + return !!qualifier.call( elem, i, elem ) !== not; + } ); + + } + + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + } ); + + } + + if ( typeof qualifier === "string" ) { + if ( risSimple.test( qualifier ) ) { + return jQuery.filter( qualifier, elements, not ); + } + + qualifier = jQuery.filter( qualifier, elements ); + } + + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not; + } ); + } + + jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + return elems.length === 1 && elem.nodeType === 1 ? + jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] : + jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + } ) ); + }; + + jQuery.fn.extend( { + find: function( selector ) { + var i, + len = this.length, + ret = [], + self = this; + + if ( typeof selector !== "string" ) { + return this.pushStack( jQuery( selector ).filter( function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + } ) ); + } + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + // Needed because $( selector, context ) becomes $( context ).find( selector ) + ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret ); + ret.selector = this.selector ? this.selector + " " + selector : selector; + return ret; + }, + filter: function( selector ) { + return this.pushStack( winnow( this, selector || [], false ) ); + }, + not: function( selector ) { + return this.pushStack( winnow( this, selector || [], true ) ); + }, + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + } + } ); + + + // Initialize a jQuery object + + + // A central reference to the root jQuery(document) + var rootjQuery, + + // A simple way to check for HTML strings + // Prioritize #id over <tag> to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/, + + init = jQuery.fn.init = function( selector, context, root ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Method init() accepts an alternate rootjQuery + // so migrate can support jQuery.sub (gh-2101) + root = root || rootjQuery; + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector[ 0 ] === "<" && + selector[ selector.length - 1 ] === ">" && + selector.length >= 3 ) { + + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && ( match[ 1 ] || !context ) ) { + + // HANDLE: $(html) -> $(array) + if ( match[ 1 ] ) { + context = context instanceof jQuery ? context[ 0 ] : context; + + // Option to run scripts is true for back-compat + // Intentionally let the error be thrown if parseHTML is not present + jQuery.merge( this, jQuery.parseHTML( + match[ 1 ], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + + // Properties of context are called as methods if possible + if ( jQuery.isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[ 2 ] ); + + // Support: Blackberry 4.6 + // gEBID returns nodes no longer in the document (#6963) + if ( elem && elem.parentNode ) { + + // Inject the element directly into the jQuery object + this.length = 1; + this[ 0 ] = elem; + } + + this.context = document; + this.selector = selector; + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || root ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this.context = this[ 0 ] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( jQuery.isFunction( selector ) ) { + return root.ready !== undefined ? + root.ready( selector ) : + + // Execute immediately if ready is not present + selector( jQuery ); + } + + if ( selector.selector !== undefined ) { + this.selector = selector.selector; + this.context = selector.context; + } + + return jQuery.makeArray( selector, this ); + }; + + // Give the init function the jQuery prototype for later instantiation + init.prototype = jQuery.fn; + + // Initialize central reference + rootjQuery = jQuery( document ); + + + var rparentsprev = /^(?:parents|prev(?:Until|All))/, + + // Methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + + jQuery.fn.extend( { + has: function( target ) { + var targets = jQuery( target, this ), + l = targets.length; + + return this.filter( function() { + var i = 0; + for ( ; i < l; i++ ) { + if ( jQuery.contains( this, targets[ i ] ) ) { + return true; + } + } + } ); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + matched = [], + pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ? + jQuery( selectors, context || this.context ) : + 0; + + for ( ; i < l; i++ ) { + for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { + + // Always skip document fragments + if ( cur.nodeType < 11 && ( pos ? + pos.index( cur ) > -1 : + + // Don't pass non-elements to Sizzle + cur.nodeType === 1 && + jQuery.find.matchesSelector( cur, selectors ) ) ) { + + matched.push( cur ); + break; + } + } + } + + return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); + }, + + // Determine the position of an element within the set + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; + } + + // Index in selector + if ( typeof elem === "string" ) { + return indexOf.call( jQuery( elem ), this[ 0 ] ); + } + + // Locate the position of the desired element + return indexOf.call( this, + + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[ 0 ] : elem + ); + }, + + add: function( selector, context ) { + return this.pushStack( + jQuery.uniqueSort( + jQuery.merge( this.get(), jQuery( selector, context ) ) + ) + ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter( selector ) + ); + } + } ); + + function sibling( cur, dir ) { + while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} + return cur; + } + + jQuery.each( { + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return siblings( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return siblings( elem.firstChild ); + }, + contents: function( elem ) { + return elem.contentDocument || jQuery.merge( [], elem.childNodes ); + } + }, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var matched = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + matched = jQuery.filter( selector, matched ); + } + + if ( this.length > 1 ) { + + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + jQuery.uniqueSort( matched ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + matched.reverse(); + } + } + + return this.pushStack( matched ); + }; + } ); + var rnotwhite = ( /\S+/g ); + + + + // Convert String-formatted options into Object-formatted ones + function createOptions( options ) { + var object = {}; + jQuery.each( options.match( rnotwhite ) || [], function( _, flag ) { + object[ flag ] = true; + } ); + return object; + } + + /* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ + jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + createOptions( options ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + + // Last fire value for non-forgettable lists + memory, + + // Flag to know if list was already fired + fired, + + // Flag to prevent firing + locked, + + // Actual callback list + list = [], + + // Queue of execution data for repeatable lists + queue = [], + + // Index of currently firing callback (modified by add/remove as needed) + firingIndex = -1, + + // Fire callbacks + fire = function() { + + // Enforce single-firing + locked = options.once; + + // Execute callbacks for all pending executions, + // respecting firingIndex overrides and runtime changes + fired = firing = true; + for ( ; queue.length; firingIndex = -1 ) { + memory = queue.shift(); + while ( ++firingIndex < list.length ) { + + // Run callback and check for early termination + if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && + options.stopOnFalse ) { + + // Jump to end and forget the data so .add doesn't re-fire + firingIndex = list.length; + memory = false; + } + } + } + + // Forget the data if we're done with it + if ( !options.memory ) { + memory = false; + } + + firing = false; + + // Clean up if we're done firing for good + if ( locked ) { + + // Keep an empty list if we have data for future add calls + if ( memory ) { + list = []; + + // Otherwise, this object is spent + } else { + list = ""; + } + } + }, + + // Actual Callbacks object + self = { + + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + + // If we have memory from a past run, we should fire after adding + if ( memory && !firing ) { + firingIndex = list.length - 1; + queue.push( memory ); + } + + ( function add( args ) { + jQuery.each( args, function( _, arg ) { + if ( jQuery.isFunction( arg ) ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && jQuery.type( arg ) !== "string" ) { + + // Inspect recursively + add( arg ); + } + } ); + } )( arguments ); + + if ( memory && !firing ) { + fire(); + } + } + return this; + }, + + // Remove a callback from the list + remove: function() { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + + // Handle firing indexes + if ( index <= firingIndex ) { + firingIndex--; + } + } + } ); + return this; + }, + + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? + jQuery.inArray( fn, list ) > -1 : + list.length > 0; + }, + + // Remove all callbacks from the list + empty: function() { + if ( list ) { + list = []; + } + return this; + }, + + // Disable .fire and .add + // Abort any current/pending executions + // Clear all callbacks and values + disable: function() { + locked = queue = []; + list = memory = ""; + return this; + }, + disabled: function() { + return !list; + }, + + // Disable .fire + // Also disable .add unless we have memory (since it would have no effect) + // Abort any pending executions + lock: function() { + locked = queue = []; + if ( !memory ) { + list = memory = ""; + } + return this; + }, + locked: function() { + return !!locked; + }, + + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( !locked ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + queue.push( args ); + if ( !firing ) { + fire(); + } + } + return this; + }, + + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; + }; + + + jQuery.extend( { + + Deferred: function( func ) { + var tuples = [ + + // action, add listener, listener list, final state + [ "resolve", "done", jQuery.Callbacks( "once memory" ), "resolved" ], + [ "reject", "fail", jQuery.Callbacks( "once memory" ), "rejected" ], + [ "notify", "progress", jQuery.Callbacks( "memory" ) ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + then: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + return jQuery.Deferred( function( newDefer ) { + jQuery.each( tuples, function( i, tuple ) { + var fn = jQuery.isFunction( fns[ i ] ) && fns[ i ]; + + // deferred[ done | fail | progress ] for forwarding actions to newDefer + deferred[ tuple[ 1 ] ]( function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && jQuery.isFunction( returned.promise ) ) { + returned.promise() + .progress( newDefer.notify ) + .done( newDefer.resolve ) + .fail( newDefer.reject ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( + this === promise ? newDefer.promise() : this, + fn ? [ returned ] : arguments + ); + } + } ); + } ); + fns = null; + } ).promise(); + }, + + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Keep pipe for back-compat + promise.pipe = promise.then; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 3 ]; + + // promise[ done | fail | progress ] = list.add + promise[ tuple[ 1 ] ] = list.add; + + // Handle state + if ( stateString ) { + list.add( function() { + + // state = [ resolved | rejected ] + state = stateString; + + // [ reject_list | resolve_list ].disable; progress_list.lock + }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock ); + } + + // deferred[ resolve | reject | notify ] + deferred[ tuple[ 0 ] ] = function() { + deferred[ tuple[ 0 ] + "With" ]( this === deferred ? promise : this, arguments ); + return this; + }; + deferred[ tuple[ 0 ] + "With" ] = list.fireWith; + } ); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( subordinate /* , ..., subordinateN */ ) { + var i = 0, + resolveValues = slice.call( arguments ), + length = resolveValues.length, + + // the count of uncompleted subordinates + remaining = length !== 1 || + ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0, + + // the master Deferred. + // If resolveValues consist of only a single Deferred, just use that. + deferred = remaining === 1 ? subordinate : jQuery.Deferred(), + + // Update function for both resolve and progress values + updateFunc = function( i, contexts, values ) { + return function( value ) { + contexts[ i ] = this; + values[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( values === progressValues ) { + deferred.notifyWith( contexts, values ); + } else if ( !( --remaining ) ) { + deferred.resolveWith( contexts, values ); + } + }; + }, + + progressValues, progressContexts, resolveContexts; + + // Add listeners to Deferred subordinates; treat others as resolved + if ( length > 1 ) { + progressValues = new Array( length ); + progressContexts = new Array( length ); + resolveContexts = new Array( length ); + for ( ; i < length; i++ ) { + if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) { + resolveValues[ i ].promise() + .progress( updateFunc( i, progressContexts, progressValues ) ) + .done( updateFunc( i, resolveContexts, resolveValues ) ) + .fail( deferred.reject ); + } else { + --remaining; + } + } + } + + // If we're not waiting on anything, resolve the master + if ( !remaining ) { + deferred.resolveWith( resolveContexts, resolveValues ); + } + + return deferred.promise(); + } + } ); + + + // The deferred used on DOM ready + var readyList; + + jQuery.fn.ready = function( fn ) { + + // Add the callback + jQuery.ready.promise().done( fn ); + + return this; + }; + + jQuery.extend( { + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Hold (or release) the ready event + holdReady: function( hold ) { + if ( hold ) { + jQuery.readyWait++; + } else { + jQuery.ready( true ); + } + }, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + + // Trigger any bound ready events + if ( jQuery.fn.triggerHandler ) { + jQuery( document ).triggerHandler( "ready" ); + jQuery( document ).off( "ready" ); + } + } + } ); + + /** + * The ready event handler and self cleanup method + */ + function completed() { + document.removeEventListener( "DOMContentLoaded", completed ); + window.removeEventListener( "load", completed ); + jQuery.ready(); + } + + jQuery.ready.promise = function( obj ) { + if ( !readyList ) { + + readyList = jQuery.Deferred(); + + // Catch cases where $(document).ready() is called + // after the browser event has already occurred. + // Support: IE9-10 only + // Older IE sometimes signals "interactive" too soon + if ( document.readyState === "complete" || + ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { + + // Handle it asynchronously to allow scripts the opportunity to delay ready + window.setTimeout( jQuery.ready ); + + } else { + + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed ); + } + } + return readyList.promise( obj ); + }; + + // Kick off the DOM ready check even if the user does not + jQuery.ready.promise(); + + + + + // Multifunctional method to get and set values of a collection + // The value/s can optionally be executed if it's a function + var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + len = elems.length, + bulk = key == null; + + // Sets many values + if ( jQuery.type( key ) === "object" ) { + chainable = true; + for ( i in key ) { + access( elems, fn, i, key[ i ], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !jQuery.isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < len; i++ ) { + fn( + elems[ i ], key, raw ? + value : + value.call( elems[ i ], i, fn( elems[ i ], key ) ) + ); + } + } + } + + return chainable ? + elems : + + // Gets + bulk ? + fn.call( elems ) : + len ? fn( elems[ 0 ], key ) : emptyGet; + }; + var acceptData = function( owner ) { + + // Accepts only: + // - Node + // - Node.ELEMENT_NODE + // - Node.DOCUMENT_NODE + // - Object + // - Any + /* jshint -W018 */ + return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); + }; + + + + + function Data() { + this.expando = jQuery.expando + Data.uid++; + } + + Data.uid = 1; + + Data.prototype = { + + register: function( owner, initial ) { + var value = initial || {}; + + // If it is a node unlikely to be stringify-ed or looped over + // use plain assignment + if ( owner.nodeType ) { + owner[ this.expando ] = value; + + // Otherwise secure it in a non-enumerable, non-writable property + // configurability must be true to allow the property to be + // deleted with the delete operator + } else { + Object.defineProperty( owner, this.expando, { + value: value, + writable: true, + configurable: true + } ); + } + return owner[ this.expando ]; + }, + cache: function( owner ) { + + // We can accept data for non-element nodes in modern browsers, + // but we should not, see #8335. + // Always return an empty object. + if ( !acceptData( owner ) ) { + return {}; + } + + // Check if the owner object already has a cache + var value = owner[ this.expando ]; + + // If not, create one + if ( !value ) { + value = {}; + + // We can accept data for non-element nodes in modern browsers, + // but we should not, see #8335. + // Always return an empty object. + if ( acceptData( owner ) ) { + + // If it is a node unlikely to be stringify-ed or looped over + // use plain assignment + if ( owner.nodeType ) { + owner[ this.expando ] = value; + + // Otherwise secure it in a non-enumerable property + // configurable must be true to allow the property to be + // deleted when data is removed + } else { + Object.defineProperty( owner, this.expando, { + value: value, + configurable: true + } ); + } + } + } + + return value; + }, + set: function( owner, data, value ) { + var prop, + cache = this.cache( owner ); + + // Handle: [ owner, key, value ] args + if ( typeof data === "string" ) { + cache[ data ] = value; + + // Handle: [ owner, { properties } ] args + } else { + + // Copy the properties one-by-one to the cache object + for ( prop in data ) { + cache[ prop ] = data[ prop ]; + } + } + return cache; + }, + get: function( owner, key ) { + return key === undefined ? + this.cache( owner ) : + owner[ this.expando ] && owner[ this.expando ][ key ]; + }, + access: function( owner, key, value ) { + var stored; + + // In cases where either: + // + // 1. No key was specified + // 2. A string key was specified, but no value provided + // + // Take the "read" path and allow the get method to determine + // which value to return, respectively either: + // + // 1. The entire cache object + // 2. The data stored at the key + // + if ( key === undefined || + ( ( key && typeof key === "string" ) && value === undefined ) ) { + + stored = this.get( owner, key ); + + return stored !== undefined ? + stored : this.get( owner, jQuery.camelCase( key ) ); + } + + // When the key is not a string, or both a key and value + // are specified, set or extend (existing objects) with either: + // + // 1. An object of properties + // 2. A key and value + // + this.set( owner, key, value ); + + // Since the "set" path can have two possible entry points + // return the expected data based on which path was taken[*] + return value !== undefined ? value : key; + }, + remove: function( owner, key ) { + var i, name, camel, + cache = owner[ this.expando ]; + + if ( cache === undefined ) { + return; + } + + if ( key === undefined ) { + this.register( owner ); + + } else { + + // Support array or space separated string of keys + if ( jQuery.isArray( key ) ) { + + // If "name" is an array of keys... + // When data is initially created, via ("key", "val") signature, + // keys will be converted to camelCase. + // Since there is no way to tell _how_ a key was added, remove + // both plain key and camelCase key. #12786 + // This will only penalize the array argument path. + name = key.concat( key.map( jQuery.camelCase ) ); + } else { + camel = jQuery.camelCase( key ); + + // Try the string as a key before any manipulation + if ( key in cache ) { + name = [ key, camel ]; + } else { + + // If a key with the spaces exists, use it. + // Otherwise, create an array by matching non-whitespace + name = camel; + name = name in cache ? + [ name ] : ( name.match( rnotwhite ) || [] ); + } + } + + i = name.length; + + while ( i-- ) { + delete cache[ name[ i ] ]; + } + } + + // Remove the expando if there's no more data + if ( key === undefined || jQuery.isEmptyObject( cache ) ) { + + // Support: Chrome <= 35-45+ + // Webkit & Blink performance suffers when deleting properties + // from DOM nodes, so set to undefined instead + // https://code.google.com/p/chromium/issues/detail?id=378607 + if ( owner.nodeType ) { + owner[ this.expando ] = undefined; + } else { + delete owner[ this.expando ]; + } + } + }, + hasData: function( owner ) { + var cache = owner[ this.expando ]; + return cache !== undefined && !jQuery.isEmptyObject( cache ); + } + }; + var dataPriv = new Data(); + + var dataUser = new Data(); + + + + // Implementation Summary + // + // 1. Enforce API surface and semantic compatibility with 1.9.x branch + // 2. Improve the module's maintainability by reducing the storage + // paths to a single mechanism. + // 3. Use the same single mechanism to support "private" and "user" data. + // 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) + // 5. Avoid exposing implementation details on user objects (eg. expando properties) + // 6. Provide a clear path for implementation upgrade to WeakMap in 2014 + + var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + rmultiDash = /[A-Z]/g; + + function dataAttr( elem, key, data ) { + var name; + + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = data === "true" ? true : + data === "false" ? false : + data === "null" ? null : + + // Only convert to a number if it doesn't change the string + +data + "" === data ? +data : + rbrace.test( data ) ? jQuery.parseJSON( data ) : + data; + } catch ( e ) {} + + // Make sure we set the data so it isn't changed later + dataUser.set( elem, key, data ); + } else { + data = undefined; + } + } + return data; + } + + jQuery.extend( { + hasData: function( elem ) { + return dataUser.hasData( elem ) || dataPriv.hasData( elem ); + }, + + data: function( elem, name, data ) { + return dataUser.access( elem, name, data ); + }, + + removeData: function( elem, name ) { + dataUser.remove( elem, name ); + }, + + // TODO: Now that all calls to _data and _removeData have been replaced + // with direct calls to dataPriv methods, these can be deprecated. + _data: function( elem, name, data ) { + return dataPriv.access( elem, name, data ); + }, + + _removeData: function( elem, name ) { + dataPriv.remove( elem, name ); + } + } ); + + jQuery.fn.extend( { + data: function( key, value ) { + var i, name, data, + elem = this[ 0 ], + attrs = elem && elem.attributes; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = dataUser.get( elem ); + + if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE11+ + // The attrs elements can be null (#14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = jQuery.camelCase( name.slice( 5 ) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + dataPriv.set( elem, "hasDataAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each( function() { + dataUser.set( this, key ); + } ); + } + + return access( this, function( value ) { + var data, camelKey; + + // The calling jQuery object (element matches) is not empty + // (and therefore has an element appears at this[ 0 ]) and the + // `value` parameter was not undefined. An empty jQuery object + // will result in `undefined` for elem = this[ 0 ] which will + // throw an exception if an attempt to read a data cache is made. + if ( elem && value === undefined ) { + + // Attempt to get data from the cache + // with the key as-is + data = dataUser.get( elem, key ) || + + // Try to find dashed key if it exists (gh-2779) + // This is for 2.2.x only + dataUser.get( elem, key.replace( rmultiDash, "-$&" ).toLowerCase() ); + + if ( data !== undefined ) { + return data; + } + + camelKey = jQuery.camelCase( key ); + + // Attempt to get data from the cache + // with the key camelized + data = dataUser.get( elem, camelKey ); + if ( data !== undefined ) { + return data; + } + + // Attempt to "discover" the data in + // HTML5 custom data-* attrs + data = dataAttr( elem, camelKey, undefined ); + if ( data !== undefined ) { + return data; + } + + // We tried really hard, but the data doesn't exist. + return; + } + + // Set the data... + camelKey = jQuery.camelCase( key ); + this.each( function() { + + // First, attempt to store a copy or reference of any + // data that might've been store with a camelCased key. + var data = dataUser.get( this, camelKey ); + + // For HTML5 data-* attribute interop, we have to + // store property names with dashes in a camelCase form. + // This might not apply to all properties...* + dataUser.set( this, camelKey, value ); + + // *... In the case of properties that might _actually_ + // have dashes, we need to also store a copy of that + // unchanged property. + if ( key.indexOf( "-" ) > -1 && data !== undefined ) { + dataUser.set( this, key, value ); + } + } ); + }, null, value, arguments.length > 1, null, true ); + }, + + removeData: function( key ) { + return this.each( function() { + dataUser.remove( this, key ); + } ); + } + } ); + + + jQuery.extend( { + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = dataPriv.get( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || jQuery.isArray( data ) ) { + queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // Clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // Not public - generate a queueHooks object, or return the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { + empty: jQuery.Callbacks( "once memory" ).add( function() { + dataPriv.remove( elem, [ type + "queue", key ] ); + } ) + } ); + } + } ); + + jQuery.fn.extend( { + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[ 0 ], type ); + } + + return data === undefined ? + this : + this.each( function() { + var queue = jQuery.queue( this, type, data ); + + // Ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + } ); + }, + dequeue: function( type ) { + return this.each( function() { + jQuery.dequeue( this, type ); + } ); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while ( i-- ) { + tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } + } ); + var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; + + var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); + + + var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + + var isHidden = function( elem, el ) { + + // isHidden might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + return jQuery.css( elem, "display" ) === "none" || + !jQuery.contains( elem.ownerDocument, elem ); + }; + + + + function adjustCSS( elem, prop, valueParts, tween ) { + var adjusted, + scale = 1, + maxIterations = 20, + currentValue = tween ? + function() { return tween.cur(); } : + function() { return jQuery.css( elem, prop, "" ); }, + initial = currentValue(), + unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), + + // Starting value computation is required for potential unit mismatches + initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && + rcssNum.exec( jQuery.css( elem, prop ) ); + + if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { + + // Trust units reported by jQuery.css + unit = unit || initialInUnit[ 3 ]; + + // Make sure we update the tween properties later on + valueParts = valueParts || []; + + // Iteratively approximate from a nonzero starting point + initialInUnit = +initial || 1; + + do { + + // If previous iteration zeroed out, double until we get *something*. + // Use string for doubling so we don't accidentally see scale as unchanged below + scale = scale || ".5"; + + // Adjust and apply + initialInUnit = initialInUnit / scale; + jQuery.style( elem, prop, initialInUnit + unit ); + + // Update scale, tolerating zero or NaN from tween.cur() + // Break the loop if scale is unchanged or perfect, or if we've just had enough. + } while ( + scale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations + ); + } + + if ( valueParts ) { + initialInUnit = +initialInUnit || +initial || 0; + + // Apply relative offset (+=/-=) if specified + adjusted = valueParts[ 1 ] ? + initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : + +valueParts[ 2 ]; + if ( tween ) { + tween.unit = unit; + tween.start = initialInUnit; + tween.end = adjusted; + } + } + return adjusted; + } + var rcheckableType = ( /^(?:checkbox|radio)$/i ); + + var rtagName = ( /<([\w:-]+)/ ); + + var rscriptType = ( /^$|\/(?:java|ecma)script/i ); + + + + // We have to close these tags to support XHTML (#13200) + var wrapMap = { + + // Support: IE9 + option: [ 1, "<select multiple='multiple'>", "</select>" ], + + // XHTML parsers do not magically insert elements in the + // same way that tag soup parsers do. So we cannot shorten + // this by omitting <tbody> or other required elements. + thead: [ 1, "<table>", "</table>" ], + col: [ 2, "<table><colgroup>", "</colgroup></table>" ], + tr: [ 2, "<table><tbody>", "</tbody></table>" ], + td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ], + + _default: [ 0, "", "" ] + }; + + // Support: IE9 + wrapMap.optgroup = wrapMap.option; + + wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; + wrapMap.th = wrapMap.td; + + + function getAll( context, tag ) { + + // Support: IE9-11+ + // Use typeof to avoid zero-argument method invocation on host objects (#15151) + var ret = typeof context.getElementsByTagName !== "undefined" ? + context.getElementsByTagName( tag || "*" ) : + typeof context.querySelectorAll !== "undefined" ? + context.querySelectorAll( tag || "*" ) : + []; + + return tag === undefined || tag && jQuery.nodeName( context, tag ) ? + jQuery.merge( [ context ], ret ) : + ret; + } + + + // Mark scripts as having already been evaluated + function setGlobalEval( elems, refElements ) { + var i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + dataPriv.set( + elems[ i ], + "globalEval", + !refElements || dataPriv.get( refElements[ i ], "globalEval" ) + ); + } + } + + + var rhtml = /<|&#?\w+;/; + + function buildFragment( elems, context, scripts, selection, ignored ) { + var elem, tmp, tag, wrap, contains, j, + fragment = context.createDocumentFragment(), + nodes = [], + i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( jQuery.type( elem ) === "object" ) { + + // Support: Android<4.1, PhantomJS<2 + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); + + // Deserialize a standard representation + tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; + + // Descend through wrappers to the right content + j = wrap[ 0 ]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Support: Android<4.1, PhantomJS<2 + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, tmp.childNodes ); + + // Remember the top-level container + tmp = fragment.firstChild; + + // Ensure the created nodes are orphaned (#12392) + tmp.textContent = ""; + } + } + } + + // Remove wrapper from fragment + fragment.textContent = ""; + + i = 0; + while ( ( elem = nodes[ i++ ] ) ) { + + // Skip elements already in the context collection (trac-4087) + if ( selection && jQuery.inArray( elem, selection ) > -1 ) { + if ( ignored ) { + ignored.push( elem ); + } + continue; + } + + contains = jQuery.contains( elem.ownerDocument, elem ); + + // Append to fragment + tmp = getAll( fragment.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( contains ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( ( elem = tmp[ j++ ] ) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + return fragment; + } + + + ( function() { + var fragment = document.createDocumentFragment(), + div = fragment.appendChild( document.createElement( "div" ) ), + input = document.createElement( "input" ); + + // Support: Android 4.0-4.3, Safari<=5.1 + // Check state lost if the name is set (#11217) + // Support: Windows Web Apps (WWA) + // `name` and `type` must use .setAttribute for WWA (#14901) + input.setAttribute( "type", "radio" ); + input.setAttribute( "checked", "checked" ); + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + + // Support: Safari<=5.1, Android<4.2 + // Older WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE<=11+ + // Make sure textarea (and checkbox) defaultValue is properly cloned + div.innerHTML = "<textarea>x</textarea>"; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; + } )(); + + + var + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, + rtypenamespace = /^([^.]*)(?:\.(.+)|)/; + + function returnTrue() { + return true; + } + + function returnFalse() { + return false; + } + + // Support: IE9 + // See #13393 for more info + function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } + } + + function on( elem, types, selector, data, fn, one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + on( elem, type, selector, data, types[ type ], one ); + } + return elem; + } + + if ( data == null && fn == null ) { + + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return elem; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return elem.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + } ); + } + + /* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ + jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + + var handleObjIn, eventHandle, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.get( elem ); + + // Don't attach events to noData or text/comment nodes (but allow plain objects) + if ( !elemData ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !( events = elemData.events ) ) { + events = elemData.events = {}; + } + if ( !( eventHandle = elemData.handle ) ) { + eventHandle = elemData.handle = function( e ) { + + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? + jQuery.event.dispatch.apply( elem, arguments ) : undefined; + }; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnotwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend( { + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join( "." ) + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !( handlers = events[ type ] ) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener if the special events handler returns false + if ( !special.setup || + special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var j, origCount, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); + + if ( !elemData || !( events = elemData.events ) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnotwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[ 2 ] && + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || + selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || + special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove data and the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + dataPriv.remove( elem, "handle events" ); + } + }, + + dispatch: function( event ) { + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( event ); + + var i, j, ret, matched, handleObj, + handlerQueue = [], + args = slice.call( arguments ), + handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[ 0 ] = event; + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( ( handleObj = matched.handlers[ j++ ] ) && + !event.isImmediatePropagationStopped() ) { + + // Triggered event must either 1) have no namespace, or 2) have namespace(s) + // a subset or equal to those in the bound event (both can have no namespace). + if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || + handleObj.handler ).apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( ( event.result = ret ) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var i, matches, sel, handleObj, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Support (at least): Chrome, IE9 + // Find delegate handlers + // Black-hole SVG <use> instance trees (#13180) + // + // Support: Firefox<=42+ + // Avoid non-left-click in FF but don't block IE radio events (#3861, gh-2343) + if ( delegateCount && cur.nodeType && + ( event.type !== "click" || isNaN( event.button ) || event.button < 1 ) ) { + + for ( ; cur !== this; cur = cur.parentNode || this ) { + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && ( cur.disabled !== true || event.type !== "click" ) ) { + matches = []; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matches[ sel ] === undefined ) { + matches[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) > -1 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matches[ sel ] ) { + matches.push( handleObj ); + } + } + if ( matches.length ) { + handlerQueue.push( { elem: cur, handlers: matches } ); + } + } + } + } + + // Add the remaining (directly-bound) handlers + if ( delegateCount < handlers.length ) { + handlerQueue.push( { elem: this, handlers: handlers.slice( delegateCount ) } ); + } + + return handlerQueue; + }, + + // Includes some event props shared by KeyEvent and MouseEvent + props: ( "altKey bubbles cancelable ctrlKey currentTarget detail eventPhase " + + "metaKey relatedTarget shiftKey target timeStamp view which" ).split( " " ), + + fixHooks: {}, + + keyHooks: { + props: "char charCode key keyCode".split( " " ), + filter: function( event, original ) { + + // Add which for key events + if ( event.which == null ) { + event.which = original.charCode != null ? original.charCode : original.keyCode; + } + + return event; + } + }, + + mouseHooks: { + props: ( "button buttons clientX clientY offsetX offsetY pageX pageY " + + "screenX screenY toElement" ).split( " " ), + filter: function( event, original ) { + var eventDoc, doc, body, + button = original.button; + + // Calculate pageX/Y if missing and clientX/Y available + if ( event.pageX == null && original.clientX != null ) { + eventDoc = event.target.ownerDocument || document; + doc = eventDoc.documentElement; + body = eventDoc.body; + + event.pageX = original.clientX + + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - + ( doc && doc.clientLeft || body && body.clientLeft || 0 ); + event.pageY = original.clientY + + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - + ( doc && doc.clientTop || body && body.clientTop || 0 ); + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + // Note: button is not normalized, so don't use it + if ( !event.which && button !== undefined ) { + event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); + } + + return event; + } + }, + + fix: function( event ) { + if ( event[ jQuery.expando ] ) { + return event; + } + + // Create a writable copy of the event object and normalize some properties + var i, prop, copy, + type = event.type, + originalEvent = event, + fixHook = this.fixHooks[ type ]; + + if ( !fixHook ) { + this.fixHooks[ type ] = fixHook = + rmouseEvent.test( type ) ? this.mouseHooks : + rkeyEvent.test( type ) ? this.keyHooks : + {}; + } + copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; + + event = new jQuery.Event( originalEvent ); + + i = copy.length; + while ( i-- ) { + prop = copy[ i ]; + event[ prop ] = originalEvent[ prop ]; + } + + // Support: Cordova 2.5 (WebKit) (#13255) + // All events should have a target; Cordova deviceready doesn't + if ( !event.target ) { + event.target = document; + } + + // Support: Safari 6.0+, Chrome<28 + // Target should not be a text node (#504, #13143) + if ( event.target.nodeType === 3 ) { + event.target = event.target.parentNode; + } + + return fixHook.filter ? fixHook.filter( event, originalEvent ) : event; + }, + + special: { + load: { + + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + focus: { + + // Fire native event if possible so blur/focus sequence is correct + trigger: function() { + if ( this !== safeActiveElement() && this.focus ) { + this.focus(); + return false; + } + }, + delegateType: "focusin" + }, + blur: { + trigger: function() { + if ( this === safeActiveElement() && this.blur ) { + this.blur(); + return false; + } + }, + delegateType: "focusout" + }, + click: { + + // For checkbox, fire native event so checked state will be right + trigger: function() { + if ( this.type === "checkbox" && this.click && jQuery.nodeName( this, "input" ) ) { + this.click(); + return false; + } + }, + + // For cross-browser consistency, don't fire native .click() on links + _default: function( event ) { + return jQuery.nodeName( event.target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Support: Firefox 20+ + // Firefox doesn't alert if the returnValue field is not set. + if ( event.result !== undefined && event.originalEvent ) { + event.originalEvent.returnValue = event.result; + } + } + } + } + }; + + jQuery.removeEvent = function( elem, type, handle ) { + + // This "if" is needed for plain objects + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle ); + } + }; + + jQuery.Event = function( src, props ) { + + // Allow instantiation without the 'new' keyword + if ( !( this instanceof jQuery.Event ) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = src.defaultPrevented || + src.defaultPrevented === undefined && + + // Support: Android<4.0 + src.returnValue === false ? + returnTrue : + returnFalse; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || jQuery.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; + }; + + // jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding + // http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html + jQuery.Event.prototype = { + constructor: jQuery.Event, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + + if ( e ) { + e.preventDefault(); + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + + if ( e ) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } + }; + + // Create mouseenter/leave events using mouseover/out and event-time checks + // so that event delegation works in jQuery. + // Do the same for pointerenter/pointerleave and pointerover/pointerout + // + // Support: Safari 7 only + // Safari sends mouseenter too often; see: + // https://code.google.com/p/chromium/issues/detail?id=470258 + // for the description of the bug (it existed in older Chrome versions as well). + jQuery.each( { + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" + }, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mouseenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; + } ); + + jQuery.fn.extend( { + on: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn ); + }, + one: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? + handleObj.origType + "." + handleObj.namespace : + handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each( function() { + jQuery.event.remove( this, types, fn, selector ); + } ); + } + } ); + + + var + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi, + + // Support: IE 10-11, Edge 10240+ + // In IE/Edge using regex groups here causes severe slowdowns. + // See https://connect.microsoft.com/IE/feedback/details/1736512/ + rnoInnerhtml = /<script|<style|<link/i, + + // checked="checked" or checked + rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, + rscriptTypeMasked = /^true\/(.*)/, + rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g; + + // Manipulating tables requires a tbody + function manipulationTarget( elem, content ) { + return jQuery.nodeName( elem, "table" ) && + jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ? + + elem.getElementsByTagName( "tbody" )[ 0 ] || + elem.appendChild( elem.ownerDocument.createElement( "tbody" ) ) : + elem; + } + + // Replace/restore the type attribute of script elements for safe DOM manipulation + function disableScript( elem ) { + elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; + return elem; + } + function restoreScript( elem ) { + var match = rscriptTypeMasked.exec( elem.type ); + + if ( match ) { + elem.type = match[ 1 ]; + } else { + elem.removeAttribute( "type" ); + } + + return elem; + } + + function cloneCopyEvent( src, dest ) { + var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events; + + if ( dest.nodeType !== 1 ) { + return; + } + + // 1. Copy private data: events, handlers, etc. + if ( dataPriv.hasData( src ) ) { + pdataOld = dataPriv.access( src ); + pdataCur = dataPriv.set( dest, pdataOld ); + events = pdataOld.events; + + if ( events ) { + delete pdataCur.handle; + pdataCur.events = {}; + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + } + + // 2. Copy user data + if ( dataUser.hasData( src ) ) { + udataOld = dataUser.access( src ); + udataCur = jQuery.extend( {}, udataOld ); + + dataUser.set( dest, udataCur ); + } + } + + // Fix IE bugs, see support tests + function fixInput( src, dest ) { + var nodeName = dest.nodeName.toLowerCase(); + + // Fails to persist the checked state of a cloned checkbox or radio button. + if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + dest.checked = src.checked; + + // Fails to return the selected option to the default selected state when cloning options + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } + } + + function domManip( collection, args, callback, ignored ) { + + // Flatten any nested arrays + args = concat.apply( [], args ); + + var fragment, first, scripts, hasScripts, node, doc, + i = 0, + l = collection.length, + iNoClone = l - 1, + value = args[ 0 ], + isFunction = jQuery.isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( isFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return collection.each( function( index ) { + var self = collection.eq( index ); + if ( isFunction ) { + args[ 0 ] = value.call( this, index, self.html() ); + } + domManip( self, args, callback, ignored ); + } ); + } + + if ( l ) { + fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + // Require either new content or an interest in ignored elements to invoke the callback + if ( first || ignored ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item + // instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + + // Support: Android<4.1, PhantomJS<2 + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( collection[ i ], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !dataPriv.access( node, "globalEval" ) && + jQuery.contains( doc, node ) ) { + + if ( node.src ) { + + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl ) { + jQuery._evalUrl( node.src ); + } + } else { + jQuery.globalEval( node.textContent.replace( rcleanScript, "" ) ); + } + } + } + } + } + } + + return collection; + } + + function remove( elem, selector, keepData ) { + var node, + nodes = selector ? jQuery.filter( selector, elem ) : elem, + i = 0; + + for ( ; ( node = nodes[ i ] ) != null; i++ ) { + if ( !keepData && node.nodeType === 1 ) { + jQuery.cleanData( getAll( node ) ); + } + + if ( node.parentNode ) { + if ( keepData && jQuery.contains( node.ownerDocument, node ) ) { + setGlobalEval( getAll( node, "script" ) ); + } + node.parentNode.removeChild( node ); + } + } + + return elem; + } + + jQuery.extend( { + htmlPrefilter: function( html ) { + return html.replace( rxhtmlTag, "<$1></$2>" ); + }, + + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var i, l, srcElements, destElements, + clone = elem.cloneNode( true ), + inPage = jQuery.contains( elem.ownerDocument, elem ); + + // Fix IE cloning issues + if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && + !jQuery.isXMLDoc( elem ) ) { + + // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + fixInput( srcElements[ i ], destElements[ i ] ); + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + cloneCopyEvent( srcElements[ i ], destElements[ i ] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + // Return the cloned set + return clone; + }, + + cleanData: function( elems ) { + var data, elem, type, + special = jQuery.event.special, + i = 0; + + for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { + if ( acceptData( elem ) ) { + if ( ( data = elem[ dataPriv.expando ] ) ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Support: Chrome <= 35-45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataPriv.expando ] = undefined; + } + if ( elem[ dataUser.expando ] ) { + + // Support: Chrome <= 35-45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataUser.expando ] = undefined; + } + } + } + } + } ); + + jQuery.fn.extend( { + + // Keep domManip exposed until 3.0 (gh-2225) + domManip: domManip, + + detach: function( selector ) { + return remove( this, selector, true ); + }, + + remove: function( selector ) { + return remove( this, selector ); + }, + + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().each( function() { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.textContent = value; + } + } ); + }, null, value, arguments.length ); + }, + + append: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + } ); + }, + + prepend: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + } ); + }, + + before: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + } ); + }, + + after: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + } ); + }, + + empty: function() { + var elem, + i = 0; + + for ( ; ( elem = this[ i ] ) != null; i++ ) { + if ( elem.nodeType === 1 ) { + + // Prevent memory leaks + jQuery.cleanData( getAll( elem, false ) ); + + // Remove any remaining nodes + elem.textContent = ""; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function() { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + } ); + }, + + html: function( value ) { + return access( this, function( value ) { + var elem = this[ 0 ] || {}, + i = 0, + l = this.length; + + if ( value === undefined && elem.nodeType === 1 ) { + return elem.innerHTML; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { + + value = jQuery.htmlPrefilter( value ); + + try { + for ( ; i < l; i++ ) { + elem = this[ i ] || {}; + + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch ( e ) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var ignored = []; + + // Make the changes, replacing each non-ignored context element with the new content + return domManip( this, arguments, function( elem ) { + var parent = this.parentNode; + + if ( jQuery.inArray( this, ignored ) < 0 ) { + jQuery.cleanData( getAll( this ) ); + if ( parent ) { + parent.replaceChild( elem, this ); + } + } + + // Force callback invocation + }, ignored ); + } + } ); + + jQuery.each( { + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" + }, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1, + i = 0; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone( true ); + jQuery( insert[ i ] )[ original ]( elems ); + + // Support: QtWebKit + // .get() because push.apply(_, arraylike) throws + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; + } ); + + + var iframe, + elemdisplay = { + + // Support: Firefox + // We have to pre-define these values for FF (#10227) + HTML: "block", + BODY: "block" + }; + + /** + * Retrieve the actual display of a element + * @param {String} name nodeName of the element + * @param {Object} doc Document object + */ + + // Called only from within defaultDisplay + function actualDisplay( name, doc ) { + var elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ), + + display = jQuery.css( elem[ 0 ], "display" ); + + // We don't have any data stored on the element, + // so use "detach" method as fast way to get rid of the element + elem.detach(); + + return display; + } + + /** + * Try to determine the default display value of an element + * @param {String} nodeName + */ + function defaultDisplay( nodeName ) { + var doc = document, + display = elemdisplay[ nodeName ]; + + if ( !display ) { + display = actualDisplay( nodeName, doc ); + + // If the simple way fails, read from inside an iframe + if ( display === "none" || !display ) { + + // Use the already-created iframe if possible + iframe = ( iframe || jQuery( "<iframe frameborder='0' width='0' height='0'/>" ) ) + .appendTo( doc.documentElement ); + + // Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse + doc = iframe[ 0 ].contentDocument; + + // Support: IE + doc.write(); + doc.close(); + + display = actualDisplay( nodeName, doc ); + iframe.detach(); + } + + // Store the correct default display + elemdisplay[ nodeName ] = display; + } + + return display; + } + var rmargin = ( /^margin/ ); + + var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); + + var getStyles = function( elem ) { + + // Support: IE<=11+, Firefox<=30+ (#15098, #14150) + // IE throws on elements created in popups + // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" + var view = elem.ownerDocument.defaultView; + + if ( !view || !view.opener ) { + view = window; + } + + return view.getComputedStyle( elem ); + }; + + var swap = function( elem, options, callback, args ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.apply( elem, args || [] ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; + }; + + + var documentElement = document.documentElement; + + + + ( function() { + var pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, reliableMarginLeftVal, + container = document.createElement( "div" ), + div = document.createElement( "div" ); + + // Finish early in limited (non-browser) environments + if ( !div.style ) { + return; + } + + // Support: IE9-11+ + // Style of cloned element affects source element cloned (#8908) + div.style.backgroundClip = "content-box"; + div.cloneNode( true ).style.backgroundClip = ""; + support.clearCloneStyle = div.style.backgroundClip === "content-box"; + + container.style.cssText = "border:0;width:8px;height:0;top:0;left:-9999px;" + + "padding:0;margin-top:1px;position:absolute"; + container.appendChild( div ); + + // Executing both pixelPosition & boxSizingReliable tests require only one layout + // so they're executed at the same time to save the second computation. + function computeStyleTests() { + div.style.cssText = + + // Support: Firefox<29, Android 2.3 + // Vendor-prefix box-sizing + "-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;" + + "position:relative;display:block;" + + "margin:auto;border:1px;padding:1px;" + + "top:1%;width:50%"; + div.innerHTML = ""; + documentElement.appendChild( container ); + + var divStyle = window.getComputedStyle( div ); + pixelPositionVal = divStyle.top !== "1%"; + reliableMarginLeftVal = divStyle.marginLeft === "2px"; + boxSizingReliableVal = divStyle.width === "4px"; + + // Support: Android 4.0 - 4.3 only + // Some styles come back with percentage values, even though they shouldn't + div.style.marginRight = "50%"; + pixelMarginRightVal = divStyle.marginRight === "4px"; + + documentElement.removeChild( container ); + } + + jQuery.extend( support, { + pixelPosition: function() { + + // This test is executed only once but we still do memoizing + // since we can use the boxSizingReliable pre-computing. + // No need to check if the test was already performed, though. + computeStyleTests(); + return pixelPositionVal; + }, + boxSizingReliable: function() { + if ( boxSizingReliableVal == null ) { + computeStyleTests(); + } + return boxSizingReliableVal; + }, + pixelMarginRight: function() { + + // Support: Android 4.0-4.3 + // We're checking for boxSizingReliableVal here instead of pixelMarginRightVal + // since that compresses better and they're computed together anyway. + if ( boxSizingReliableVal == null ) { + computeStyleTests(); + } + return pixelMarginRightVal; + }, + reliableMarginLeft: function() { + + // Support: IE <=8 only, Android 4.0 - 4.3 only, Firefox <=3 - 37 + if ( boxSizingReliableVal == null ) { + computeStyleTests(); + } + return reliableMarginLeftVal; + }, + reliableMarginRight: function() { + + // Support: Android 2.3 + // Check if div with explicit width and no margin-right incorrectly + // gets computed margin-right based on width of container. (#3333) + // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right + // This support function is only executed once so no memoizing is needed. + var ret, + marginDiv = div.appendChild( document.createElement( "div" ) ); + + // Reset CSS: box-sizing; display; margin; border; padding + marginDiv.style.cssText = div.style.cssText = + + // Support: Android 2.3 + // Vendor-prefix box-sizing + "-webkit-box-sizing:content-box;box-sizing:content-box;" + + "display:block;margin:0;border:0;padding:0"; + marginDiv.style.marginRight = marginDiv.style.width = "0"; + div.style.width = "1px"; + documentElement.appendChild( container ); + + ret = !parseFloat( window.getComputedStyle( marginDiv ).marginRight ); + + documentElement.removeChild( container ); + div.removeChild( marginDiv ); + + return ret; + } + } ); + } )(); + + + function curCSS( elem, name, computed ) { + var width, minWidth, maxWidth, ret, + style = elem.style; + + computed = computed || getStyles( elem ); + ret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined; + + // Support: Opera 12.1x only + // Fall back to style even without computed + // computed is undefined for elems on document fragments + if ( ( ret === "" || ret === undefined ) && !jQuery.contains( elem.ownerDocument, elem ) ) { + ret = jQuery.style( elem, name ); + } + + // Support: IE9 + // getPropertyValue is only needed for .css('filter') (#12537) + if ( computed ) { + + // A tribute to the "awesome hack by Dean Edwards" + // Android Browser returns percentage for some values, + // but width seems to be reliably pixels. + // This is against the CSSOM draft spec: + // http://dev.w3.org/csswg/cssom/#resolved-values + if ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) { + + // Remember the original values + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + // Put in the new values to get a computed value out + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + // Revert the changed values + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret !== undefined ? + + // Support: IE9-11+ + // IE returns zIndex value as an integer. + ret + "" : + ret; + } + + + function addGetHookIf( conditionFn, hookFn ) { + + // Define the hook, we'll check on the first run if it's really needed. + return { + get: function() { + if ( conditionFn() ) { + + // Hook not needed (or it's not possible to use it due + // to missing dependency), remove it. + delete this.get; + return; + } + + // Hook needed; redefine it so that the support test is not executed again. + return ( this.get = hookFn ).apply( this, arguments ); + } + }; + } + + + var + + // Swappable if display is none or starts with table + // except "table", "table-cell", or "table-caption" + // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: "0", + fontWeight: "400" + }, + + cssPrefixes = [ "Webkit", "O", "Moz", "ms" ], + emptyStyle = document.createElement( "div" ).style; + + // Return a css property mapped to a potentially vendor prefixed property + function vendorPropName( name ) { + + // Shortcut for names that are not vendor prefixed + if ( name in emptyStyle ) { + return name; + } + + // Check for vendor prefixed names + var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in emptyStyle ) { + return name; + } + } + } + + function setPositiveNumber( elem, value, subtract ) { + + // Any relative (+/-) values have already been + // normalized at this point + var matches = rcssNum.exec( value ); + return matches ? + + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : + value; + } + + function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) { + var i = extra === ( isBorderBox ? "border" : "content" ) ? + + // If we already have the right measurement, avoid augmentation + 4 : + + // Otherwise initialize for horizontal or vertical properties + name === "width" ? 1 : 0, + + val = 0; + + for ( ; i < 4; i += 2 ) { + + // Both box models exclude margin, so add it if we want it + if ( extra === "margin" ) { + val += jQuery.css( elem, extra + cssExpand[ i ], true, styles ); + } + + if ( isBorderBox ) { + + // border-box includes padding, so remove it if we want content + if ( extra === "content" ) { + val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // At this point, extra isn't border nor margin, so remove border + if ( extra !== "margin" ) { + val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } else { + + // At this point, extra isn't content, so add padding + val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // At this point, extra isn't content nor padding, so add border + if ( extra !== "padding" ) { + val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + return val; + } + + function getWidthOrHeight( elem, name, extra ) { + + // Start with offset property, which is equivalent to the border-box value + var valueIsBorderBox = true, + val = name === "width" ? elem.offsetWidth : elem.offsetHeight, + styles = getStyles( elem ), + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; + + // Support: IE11 only + // In IE 11 fullscreen elements inside of an iframe have + // 100x too small dimensions (gh-1764). + if ( document.msFullscreenElement && window.top !== window ) { + + // Support: IE11 only + // Running getBoundingClientRect on a disconnected node + // in IE throws an error. + if ( elem.getClientRects().length ) { + val = Math.round( elem.getBoundingClientRect()[ name ] * 100 ); + } + } + + // Some non-html elements return undefined for offsetWidth, so check for null/undefined + // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285 + // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668 + if ( val <= 0 || val == null ) { + + // Fall back to computed then uncomputed css if necessary + val = curCSS( elem, name, styles ); + if ( val < 0 || val == null ) { + val = elem.style[ name ]; + } + + // Computed unit is not pixels. Stop here and return. + if ( rnumnonpx.test( val ) ) { + return val; + } + + // Check for style in case a browser which returns unreliable values + // for getComputedStyle silently falls back to the reliable elem.style + valueIsBorderBox = isBorderBox && + ( support.boxSizingReliable() || val === elem.style[ name ] ); + + // Normalize "", auto, and prepare for extra + val = parseFloat( val ) || 0; + } + + // Use the active box-sizing model to add/subtract irrelevant styles + return ( val + + augmentWidthOrHeight( + elem, + name, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles + ) + ) + "px"; + } + + function showHide( elements, show ) { + var display, elem, hidden, + values = [], + index = 0, + length = elements.length; + + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + + values[ index ] = dataPriv.get( elem, "olddisplay" ); + display = elem.style.display; + if ( show ) { + + // Reset the inline display of this element to learn if it is + // being hidden by cascaded rules or not + if ( !values[ index ] && display === "none" ) { + elem.style.display = ""; + } + + // Set elements which have been overridden with display: none + // in a stylesheet to whatever the default browser style is + // for such an element + if ( elem.style.display === "" && isHidden( elem ) ) { + values[ index ] = dataPriv.access( + elem, + "olddisplay", + defaultDisplay( elem.nodeName ) + ); + } + } else { + hidden = isHidden( elem ); + + if ( display !== "none" || !hidden ) { + dataPriv.set( + elem, + "olddisplay", + hidden ? display : jQuery.css( elem, "display" ) + ); + } + } + } + + // Set the display of most of the elements in a second loop + // to avoid the constant reflow + for ( index = 0; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + if ( !show || elem.style.display === "none" || elem.style.display === "" ) { + elem.style.display = show ? values[ index ] || "" : "none"; + } + } + + return elements; + } + + jQuery.extend( { + + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + } + } + } + }, + + // Don't automatically add "px" to these possibly-unitless properties + cssNumber: { + "animationIterationCount": true, + "columnCount": true, + "fillOpacity": true, + "flexGrow": true, + "flexShrink": true, + "fontWeight": true, + "lineHeight": true, + "opacity": true, + "order": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: { + "float": "cssFloat" + }, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = jQuery.camelCase( name ), + style = elem.style; + + name = jQuery.cssProps[ origName ] || + ( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName ); + + // Gets hook for the prefixed version, then unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // Convert "+=" or "-=" to relative numbers (#7345) + if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { + value = adjustCSS( elem, name, ret ); + + // Fixes bug #9237 + type = "number"; + } + + // Make sure that null and NaN values aren't set (#7116) + if ( value == null || value !== value ) { + return; + } + + // If a number was passed in, add the unit (except for certain CSS properties) + if ( type === "number" ) { + value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); + } + + // Support: IE9-11+ + // background-* props affect original clone's values + if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { + style[ name ] = "inherit"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !( "set" in hooks ) || + ( value = hooks.set( elem, value, extra ) ) !== undefined ) { + + style[ name ] = value; + } + + } else { + + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && + ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { + + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, extra, styles ) { + var val, num, hooks, + origName = jQuery.camelCase( name ); + + // Make sure that we're working with the right name + name = jQuery.cssProps[ origName ] || + ( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName ); + + // Try prefixed name followed by the unprefixed name + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name, styles ); + } + + // Convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Make numeric if forced or a qualifier was provided and val looks numeric + if ( extra === "" || extra ) { + num = parseFloat( val ); + return extra === true || isFinite( num ) ? num || 0 : val; + } + return val; + } + } ); + + jQuery.each( [ "height", "width" ], function( i, name ) { + jQuery.cssHooks[ name ] = { + get: function( elem, computed, extra ) { + if ( computed ) { + + // Certain elements can have dimension info if we invisibly show them + // but it must have a current display style that would benefit + return rdisplayswap.test( jQuery.css( elem, "display" ) ) && + elem.offsetWidth === 0 ? + swap( elem, cssShow, function() { + return getWidthOrHeight( elem, name, extra ); + } ) : + getWidthOrHeight( elem, name, extra ); + } + }, + + set: function( elem, value, extra ) { + var matches, + styles = extra && getStyles( elem ), + subtract = extra && augmentWidthOrHeight( + elem, + name, + extra, + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + styles + ); + + // Convert to pixels if value adjustment is needed + if ( subtract && ( matches = rcssNum.exec( value ) ) && + ( matches[ 3 ] || "px" ) !== "px" ) { + + elem.style[ name ] = value; + value = jQuery.css( elem, name ); + } + + return setPositiveNumber( elem, value, subtract ); + } + }; + } ); + + jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, + function( elem, computed ) { + if ( computed ) { + return ( parseFloat( curCSS( elem, "marginLeft" ) ) || + elem.getBoundingClientRect().left - + swap( elem, { marginLeft: 0 }, function() { + return elem.getBoundingClientRect().left; + } ) + ) + "px"; + } + } + ); + + // Support: Android 2.3 + jQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight, + function( elem, computed ) { + if ( computed ) { + return swap( elem, { "display": "inline-block" }, + curCSS, [ elem, "marginRight" ] ); + } + } + ); + + // These hooks are used by animate to expand properties + jQuery.each( { + margin: "", + padding: "", + border: "Width" + }, function( prefix, suffix ) { + jQuery.cssHooks[ prefix + suffix ] = { + expand: function( value ) { + var i = 0, + expanded = {}, + + // Assumes a single number if not a string + parts = typeof value === "string" ? value.split( " " ) : [ value ]; + + for ( ; i < 4; i++ ) { + expanded[ prefix + cssExpand[ i ] + suffix ] = + parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; + } + + return expanded; + } + }; + + if ( !rmargin.test( prefix ) ) { + jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; + } + } ); + + jQuery.fn.extend( { + css: function( name, value ) { + return access( this, function( elem, name, value ) { + var styles, len, + map = {}, + i = 0; + + if ( jQuery.isArray( name ) ) { + styles = getStyles( elem ); + len = name.length; + + for ( ; i < len; i++ ) { + map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); + } + + return map; + } + + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + }, + show: function() { + return showHide( this, true ); + }, + hide: function() { + return showHide( this ); + }, + toggle: function( state ) { + if ( typeof state === "boolean" ) { + return state ? this.show() : this.hide(); + } + + return this.each( function() { + if ( isHidden( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + } ); + } + } ); + + + function Tween( elem, options, prop, end, easing ) { + return new Tween.prototype.init( elem, options, prop, end, easing ); + } + jQuery.Tween = Tween; + + Tween.prototype = { + constructor: Tween, + init: function( elem, options, prop, end, easing, unit ) { + this.elem = elem; + this.prop = prop; + this.easing = easing || jQuery.easing._default; + this.options = options; + this.start = this.now = this.cur(); + this.end = end; + this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + }, + cur: function() { + var hooks = Tween.propHooks[ this.prop ]; + + return hooks && hooks.get ? + hooks.get( this ) : + Tween.propHooks._default.get( this ); + }, + run: function( percent ) { + var eased, + hooks = Tween.propHooks[ this.prop ]; + + if ( this.options.duration ) { + this.pos = eased = jQuery.easing[ this.easing ]( + percent, this.options.duration * percent, 0, 1, this.options.duration + ); + } else { + this.pos = eased = percent; + } + this.now = ( this.end - this.start ) * eased + this.start; + + if ( this.options.step ) { + this.options.step.call( this.elem, this.now, this ); + } + + if ( hooks && hooks.set ) { + hooks.set( this ); + } else { + Tween.propHooks._default.set( this ); + } + return this; + } + }; + + Tween.prototype.init.prototype = Tween.prototype; + + Tween.propHooks = { + _default: { + get: function( tween ) { + var result; + + // Use a property on the element directly when it is not a DOM element, + // or when there is no matching style property that exists. + if ( tween.elem.nodeType !== 1 || + tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { + return tween.elem[ tween.prop ]; + } + + // Passing an empty string as a 3rd parameter to .css will automatically + // attempt a parseFloat and fallback to a string if the parse fails. + // Simple values such as "10px" are parsed to Float; + // complex values such as "rotate(1rad)" are returned as-is. + result = jQuery.css( tween.elem, tween.prop, "" ); + + // Empty strings, null, undefined and "auto" are converted to 0. + return !result || result === "auto" ? 0 : result; + }, + set: function( tween ) { + + // Use step hook for back compat. + // Use cssHook if its there. + // Use .style if available and use plain properties where available. + if ( jQuery.fx.step[ tween.prop ] ) { + jQuery.fx.step[ tween.prop ]( tween ); + } else if ( tween.elem.nodeType === 1 && + ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || + jQuery.cssHooks[ tween.prop ] ) ) { + jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); + } else { + tween.elem[ tween.prop ] = tween.now; + } + } + } + }; + + // Support: IE9 + // Panic based approach to setting things on disconnected nodes + Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { + set: function( tween ) { + if ( tween.elem.nodeType && tween.elem.parentNode ) { + tween.elem[ tween.prop ] = tween.now; + } + } + }; + + jQuery.easing = { + linear: function( p ) { + return p; + }, + swing: function( p ) { + return 0.5 - Math.cos( p * Math.PI ) / 2; + }, + _default: "swing" + }; + + jQuery.fx = Tween.prototype.init; + + // Back Compat <1.8 extension point + jQuery.fx.step = {}; + + + + + var + fxNow, timerId, + rfxtypes = /^(?:toggle|show|hide)$/, + rrun = /queueHooks$/; + + // Animations created synchronously will run synchronously + function createFxNow() { + window.setTimeout( function() { + fxNow = undefined; + } ); + return ( fxNow = jQuery.now() ); + } + + // Generate parameters to create a standard animation + function genFx( type, includeWidth ) { + var which, + i = 0, + attrs = { height: type }; + + // If we include width, step value is 1 to do all cssExpand values, + // otherwise step value is 2 to skip over Left and Right + includeWidth = includeWidth ? 1 : 0; + for ( ; i < 4 ; i += 2 - includeWidth ) { + which = cssExpand[ i ]; + attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; + } + + if ( includeWidth ) { + attrs.opacity = attrs.width = type; + } + + return attrs; + } + + function createTween( value, prop, animation ) { + var tween, + collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), + index = 0, + length = collection.length; + for ( ; index < length; index++ ) { + if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { + + // We're done with this property + return tween; + } + } + } + + function defaultPrefilter( elem, props, opts ) { + /* jshint validthis: true */ + var prop, value, toggle, tween, hooks, oldfire, display, checkDisplay, + anim = this, + orig = {}, + style = elem.style, + hidden = elem.nodeType && isHidden( elem ), + dataShow = dataPriv.get( elem, "fxshow" ); + + // Handle queue: false promises + if ( !opts.queue ) { + hooks = jQuery._queueHooks( elem, "fx" ); + if ( hooks.unqueued == null ) { + hooks.unqueued = 0; + oldfire = hooks.empty.fire; + hooks.empty.fire = function() { + if ( !hooks.unqueued ) { + oldfire(); + } + }; + } + hooks.unqueued++; + + anim.always( function() { + + // Ensure the complete handler is called before this completes + anim.always( function() { + hooks.unqueued--; + if ( !jQuery.queue( elem, "fx" ).length ) { + hooks.empty.fire(); + } + } ); + } ); + } + + // Height/width overflow pass + if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) { + + // Make sure that nothing sneaks out + // Record all 3 overflow attributes because IE9-10 do not + // change the overflow attribute when overflowX and + // overflowY are set to the same value + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + + // Set display property to inline-block for height/width + // animations on inline elements that are having width/height animated + display = jQuery.css( elem, "display" ); + + // Test default display if display is currently "none" + checkDisplay = display === "none" ? + dataPriv.get( elem, "olddisplay" ) || defaultDisplay( elem.nodeName ) : display; + + if ( checkDisplay === "inline" && jQuery.css( elem, "float" ) === "none" ) { + style.display = "inline-block"; + } + } + + if ( opts.overflow ) { + style.overflow = "hidden"; + anim.always( function() { + style.overflow = opts.overflow[ 0 ]; + style.overflowX = opts.overflow[ 1 ]; + style.overflowY = opts.overflow[ 2 ]; + } ); + } + + // show/hide pass + for ( prop in props ) { + value = props[ prop ]; + if ( rfxtypes.exec( value ) ) { + delete props[ prop ]; + toggle = toggle || value === "toggle"; + if ( value === ( hidden ? "hide" : "show" ) ) { + + // If there is dataShow left over from a stopped hide or show + // and we are going to proceed with show, we should pretend to be hidden + if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { + hidden = true; + } else { + continue; + } + } + orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); + + // Any non-fx value stops us from restoring the original display value + } else { + display = undefined; + } + } + + if ( !jQuery.isEmptyObject( orig ) ) { + if ( dataShow ) { + if ( "hidden" in dataShow ) { + hidden = dataShow.hidden; + } + } else { + dataShow = dataPriv.access( elem, "fxshow", {} ); + } + + // Store state if its toggle - enables .stop().toggle() to "reverse" + if ( toggle ) { + dataShow.hidden = !hidden; + } + if ( hidden ) { + jQuery( elem ).show(); + } else { + anim.done( function() { + jQuery( elem ).hide(); + } ); + } + anim.done( function() { + var prop; + + dataPriv.remove( elem, "fxshow" ); + for ( prop in orig ) { + jQuery.style( elem, prop, orig[ prop ] ); + } + } ); + for ( prop in orig ) { + tween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); + + if ( !( prop in dataShow ) ) { + dataShow[ prop ] = tween.start; + if ( hidden ) { + tween.end = tween.start; + tween.start = prop === "width" || prop === "height" ? 1 : 0; + } + } + } + + // If this is a noop like .hide().hide(), restore an overwritten display value + } else if ( ( display === "none" ? defaultDisplay( elem.nodeName ) : display ) === "inline" ) { + style.display = display; + } + } + + function propFilter( props, specialEasing ) { + var index, name, easing, value, hooks; + + // camelCase, specialEasing and expand cssHook pass + for ( index in props ) { + name = jQuery.camelCase( index ); + easing = specialEasing[ name ]; + value = props[ index ]; + if ( jQuery.isArray( value ) ) { + easing = value[ 1 ]; + value = props[ index ] = value[ 0 ]; + } + + if ( index !== name ) { + props[ name ] = value; + delete props[ index ]; + } + + hooks = jQuery.cssHooks[ name ]; + if ( hooks && "expand" in hooks ) { + value = hooks.expand( value ); + delete props[ name ]; + + // Not quite $.extend, this won't overwrite existing keys. + // Reusing 'index' because we have the correct "name" + for ( index in value ) { + if ( !( index in props ) ) { + props[ index ] = value[ index ]; + specialEasing[ index ] = easing; + } + } + } else { + specialEasing[ name ] = easing; + } + } + } + + function Animation( elem, properties, options ) { + var result, + stopped, + index = 0, + length = Animation.prefilters.length, + deferred = jQuery.Deferred().always( function() { + + // Don't match elem in the :animated selector + delete tick.elem; + } ), + tick = function() { + if ( stopped ) { + return false; + } + var currentTime = fxNow || createFxNow(), + remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), + + // Support: Android 2.3 + // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) + temp = remaining / animation.duration || 0, + percent = 1 - temp, + index = 0, + length = animation.tweens.length; + + for ( ; index < length ; index++ ) { + animation.tweens[ index ].run( percent ); + } + + deferred.notifyWith( elem, [ animation, percent, remaining ] ); + + if ( percent < 1 && length ) { + return remaining; + } else { + deferred.resolveWith( elem, [ animation ] ); + return false; + } + }, + animation = deferred.promise( { + elem: elem, + props: jQuery.extend( {}, properties ), + opts: jQuery.extend( true, { + specialEasing: {}, + easing: jQuery.easing._default + }, options ), + originalProperties: properties, + originalOptions: options, + startTime: fxNow || createFxNow(), + duration: options.duration, + tweens: [], + createTween: function( prop, end ) { + var tween = jQuery.Tween( elem, animation.opts, prop, end, + animation.opts.specialEasing[ prop ] || animation.opts.easing ); + animation.tweens.push( tween ); + return tween; + }, + stop: function( gotoEnd ) { + var index = 0, + + // If we are going to the end, we want to run all the tweens + // otherwise we skip this part + length = gotoEnd ? animation.tweens.length : 0; + if ( stopped ) { + return this; + } + stopped = true; + for ( ; index < length ; index++ ) { + animation.tweens[ index ].run( 1 ); + } + + // Resolve when we played the last frame; otherwise, reject + if ( gotoEnd ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + deferred.resolveWith( elem, [ animation, gotoEnd ] ); + } else { + deferred.rejectWith( elem, [ animation, gotoEnd ] ); + } + return this; + } + } ), + props = animation.props; + + propFilter( props, animation.opts.specialEasing ); + + for ( ; index < length ; index++ ) { + result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); + if ( result ) { + if ( jQuery.isFunction( result.stop ) ) { + jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = + jQuery.proxy( result.stop, result ); + } + return result; + } + } + + jQuery.map( props, createTween, animation ); + + if ( jQuery.isFunction( animation.opts.start ) ) { + animation.opts.start.call( elem, animation ); + } + + jQuery.fx.timer( + jQuery.extend( tick, { + elem: elem, + anim: animation, + queue: animation.opts.queue + } ) + ); + + // attach callbacks from options + return animation.progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); + } + + jQuery.Animation = jQuery.extend( Animation, { + tweeners: { + "*": [ function( prop, value ) { + var tween = this.createTween( prop, value ); + adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); + return tween; + } ] + }, + + tweener: function( props, callback ) { + if ( jQuery.isFunction( props ) ) { + callback = props; + props = [ "*" ]; + } else { + props = props.match( rnotwhite ); + } + + var prop, + index = 0, + length = props.length; + + for ( ; index < length ; index++ ) { + prop = props[ index ]; + Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; + Animation.tweeners[ prop ].unshift( callback ); + } + }, + + prefilters: [ defaultPrefilter ], + + prefilter: function( callback, prepend ) { + if ( prepend ) { + Animation.prefilters.unshift( callback ); + } else { + Animation.prefilters.push( callback ); + } + } + } ); + + jQuery.speed = function( speed, easing, fn ) { + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { + complete: fn || !fn && easing || + jQuery.isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing + }; + + opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? + opt.duration : opt.duration in jQuery.fx.speeds ? + jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default; + + // Normalize opt.queue - true/undefined/null -> "fx" + if ( opt.queue == null || opt.queue === true ) { + opt.queue = "fx"; + } + + // Queueing + opt.old = opt.complete; + + opt.complete = function() { + if ( jQuery.isFunction( opt.old ) ) { + opt.old.call( this ); + } + + if ( opt.queue ) { + jQuery.dequeue( this, opt.queue ); + } + }; + + return opt; + }; + + jQuery.fn.extend( { + fadeTo: function( speed, to, easing, callback ) { + + // Show any hidden elements after setting opacity to 0 + return this.filter( isHidden ).css( "opacity", 0 ).show() + + // Animate to the value specified + .end().animate( { opacity: to }, speed, easing, callback ); + }, + animate: function( prop, speed, easing, callback ) { + var empty = jQuery.isEmptyObject( prop ), + optall = jQuery.speed( speed, easing, callback ), + doAnimation = function() { + + // Operate on a copy of prop so per-property easing won't be lost + var anim = Animation( this, jQuery.extend( {}, prop ), optall ); + + // Empty animations, or finishing resolves immediately + if ( empty || dataPriv.get( this, "finish" ) ) { + anim.stop( true ); + } + }; + doAnimation.finish = doAnimation; + + return empty || optall.queue === false ? + this.each( doAnimation ) : + this.queue( optall.queue, doAnimation ); + }, + stop: function( type, clearQueue, gotoEnd ) { + var stopQueue = function( hooks ) { + var stop = hooks.stop; + delete hooks.stop; + stop( gotoEnd ); + }; + + if ( typeof type !== "string" ) { + gotoEnd = clearQueue; + clearQueue = type; + type = undefined; + } + if ( clearQueue && type !== false ) { + this.queue( type || "fx", [] ); + } + + return this.each( function() { + var dequeue = true, + index = type != null && type + "queueHooks", + timers = jQuery.timers, + data = dataPriv.get( this ); + + if ( index ) { + if ( data[ index ] && data[ index ].stop ) { + stopQueue( data[ index ] ); + } + } else { + for ( index in data ) { + if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { + stopQueue( data[ index ] ); + } + } + } + + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && + ( type == null || timers[ index ].queue === type ) ) { + + timers[ index ].anim.stop( gotoEnd ); + dequeue = false; + timers.splice( index, 1 ); + } + } + + // Start the next in the queue if the last step wasn't forced. + // Timers currently will call their complete callbacks, which + // will dequeue but only if they were gotoEnd. + if ( dequeue || !gotoEnd ) { + jQuery.dequeue( this, type ); + } + } ); + }, + finish: function( type ) { + if ( type !== false ) { + type = type || "fx"; + } + return this.each( function() { + var index, + data = dataPriv.get( this ), + queue = data[ type + "queue" ], + hooks = data[ type + "queueHooks" ], + timers = jQuery.timers, + length = queue ? queue.length : 0; + + // Enable finishing flag on private data + data.finish = true; + + // Empty the queue first + jQuery.queue( this, type, [] ); + + if ( hooks && hooks.stop ) { + hooks.stop.call( this, true ); + } + + // Look for any active animations, and finish them + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && timers[ index ].queue === type ) { + timers[ index ].anim.stop( true ); + timers.splice( index, 1 ); + } + } + + // Look for any animations in the old queue and finish them + for ( index = 0; index < length; index++ ) { + if ( queue[ index ] && queue[ index ].finish ) { + queue[ index ].finish.call( this ); + } + } + + // Turn off finishing flag + delete data.finish; + } ); + } + } ); + + jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) { + var cssFn = jQuery.fn[ name ]; + jQuery.fn[ name ] = function( speed, easing, callback ) { + return speed == null || typeof speed === "boolean" ? + cssFn.apply( this, arguments ) : + this.animate( genFx( name, true ), speed, easing, callback ); + }; + } ); + + // Generate shortcuts for custom animations + jQuery.each( { + slideDown: genFx( "show" ), + slideUp: genFx( "hide" ), + slideToggle: genFx( "toggle" ), + fadeIn: { opacity: "show" }, + fadeOut: { opacity: "hide" }, + fadeToggle: { opacity: "toggle" } + }, function( name, props ) { + jQuery.fn[ name ] = function( speed, easing, callback ) { + return this.animate( props, speed, easing, callback ); + }; + } ); + + jQuery.timers = []; + jQuery.fx.tick = function() { + var timer, + i = 0, + timers = jQuery.timers; + + fxNow = jQuery.now(); + + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + + // Checks the timer has not already been removed + if ( !timer() && timers[ i ] === timer ) { + timers.splice( i--, 1 ); + } + } + + if ( !timers.length ) { + jQuery.fx.stop(); + } + fxNow = undefined; + }; + + jQuery.fx.timer = function( timer ) { + jQuery.timers.push( timer ); + if ( timer() ) { + jQuery.fx.start(); + } else { + jQuery.timers.pop(); + } + }; + + jQuery.fx.interval = 13; + jQuery.fx.start = function() { + if ( !timerId ) { + timerId = window.setInterval( jQuery.fx.tick, jQuery.fx.interval ); + } + }; + + jQuery.fx.stop = function() { + window.clearInterval( timerId ); + + timerId = null; + }; + + jQuery.fx.speeds = { + slow: 600, + fast: 200, + + // Default speed + _default: 400 + }; + + + // Based off of the plugin by Clint Helfers, with permission. + // http://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ + jQuery.fn.delay = function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = window.setTimeout( next, time ); + hooks.stop = function() { + window.clearTimeout( timeout ); + }; + } ); + }; + + + ( function() { + var input = document.createElement( "input" ), + select = document.createElement( "select" ), + opt = select.appendChild( document.createElement( "option" ) ); + + input.type = "checkbox"; + + // Support: iOS<=5.1, Android<=4.2+ + // Default value for a checkbox should be "on" + support.checkOn = input.value !== ""; + + // Support: IE<=11+ + // Must access selectedIndex to make default options select + support.optSelected = opt.selected; + + // Support: Android<=2.3 + // Options inside disabled selects are incorrectly marked as disabled + select.disabled = true; + support.optDisabled = !opt.disabled; + + // Support: IE<=11+ + // An input loses its value after becoming a radio + input = document.createElement( "input" ); + input.value = "t"; + input.type = "radio"; + support.radioValue = input.value === "t"; + } )(); + + + var boolHook, + attrHandle = jQuery.expr.attrHandle; + + jQuery.fn.extend( { + attr: function( name, value ) { + return access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each( function() { + jQuery.removeAttr( this, name ); + } ); + } + } ); + + jQuery.extend( { + attr: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set attributes on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + // All attributes are lowercase + // Grab necessary hook if one is defined + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + name = name.toLowerCase(); + hooks = jQuery.attrHooks[ name ] || + ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); + } + + if ( value !== undefined ) { + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + } + + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + elem.setAttribute( name, value + "" ); + return value; + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + ret = jQuery.find.attr( elem, name ); + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? undefined : ret; + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !support.radioValue && value === "radio" && + jQuery.nodeName( elem, "input" ) ) { + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + }, + + removeAttr: function( elem, value ) { + var name, propName, + i = 0, + attrNames = value && value.match( rnotwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( ( name = attrNames[ i++ ] ) ) { + propName = jQuery.propFix[ name ] || name; + + // Boolean attributes get special treatment (#10870) + if ( jQuery.expr.match.bool.test( name ) ) { + + // Set corresponding property to false + elem[ propName ] = false; + } + + elem.removeAttribute( name ); + } + } + } + } ); + + // Hooks for boolean attributes + boolHook = { + set: function( elem, value, name ) { + if ( value === false ) { + + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + elem.setAttribute( name, name ); + } + return name; + } + }; + jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) { + var getter = attrHandle[ name ] || jQuery.find.attr; + + attrHandle[ name ] = function( elem, name, isXML ) { + var ret, handle; + if ( !isXML ) { + + // Avoid an infinite loop by temporarily removing this function from the getter + handle = attrHandle[ name ]; + attrHandle[ name ] = ret; + ret = getter( elem, name, isXML ) != null ? + name.toLowerCase() : + null; + attrHandle[ name ] = handle; + } + return ret; + }; + } ); + + + + + var rfocusable = /^(?:input|select|textarea|button)$/i, + rclickable = /^(?:a|area)$/i; + + jQuery.fn.extend( { + prop: function( name, value ) { + return access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + return this.each( function() { + delete this[ jQuery.propFix[ name ] || name ]; + } ); + } + } ); + + jQuery.extend( { + prop: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set properties on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + return ( elem[ name ] = value ); + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + return elem[ name ]; + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + + // elem.tabIndex doesn't always return the + // correct value when it hasn't been explicitly set + // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + // Use proper attribute retrieval(#12072) + var tabindex = jQuery.find.attr( elem, "tabindex" ); + + return tabindex ? + parseInt( tabindex, 10 ) : + rfocusable.test( elem.nodeName ) || + rclickable.test( elem.nodeName ) && elem.href ? + 0 : + -1; + } + } + }, + + propFix: { + "for": "htmlFor", + "class": "className" + } + } ); + + // Support: IE <=11 only + // Accessing the selectedIndex property + // forces the browser to respect setting selected + // on the option + // The getter ensures a default option is selected + // when in an optgroup + if ( !support.optSelected ) { + jQuery.propHooks.selected = { + get: function( elem ) { + var parent = elem.parentNode; + if ( parent && parent.parentNode ) { + parent.parentNode.selectedIndex; + } + return null; + }, + set: function( elem ) { + var parent = elem.parentNode; + if ( parent ) { + parent.selectedIndex; + + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + } + }; + } + + jQuery.each( [ + "tabIndex", + "readOnly", + "maxLength", + "cellSpacing", + "cellPadding", + "rowSpan", + "colSpan", + "useMap", + "frameBorder", + "contentEditable" + ], function() { + jQuery.propFix[ this.toLowerCase() ] = this; + } ); + + + + + var rclass = /[\t\r\n\f]/g; + + function getClass( elem ) { + return elem.getAttribute && elem.getAttribute( "class" ) || ""; + } + + jQuery.fn.extend( { + addClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( jQuery.isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( typeof value === "string" && value ) { + classes = value.match( rnotwhite ) || []; + + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + cur = elem.nodeType === 1 && + ( " " + curValue + " " ).replace( rclass, " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + if ( cur.indexOf( " " + clazz + " " ) < 0 ) { + cur += clazz + " "; + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = jQuery.trim( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( jQuery.isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( !arguments.length ) { + return this.attr( "class", "" ); + } + + if ( typeof value === "string" && value ) { + classes = value.match( rnotwhite ) || []; + + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + + // This expression is here for better compressibility (see addClass) + cur = elem.nodeType === 1 && + ( " " + curValue + " " ).replace( rclass, " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + + // Remove *all* instances + while ( cur.indexOf( " " + clazz + " " ) > -1 ) { + cur = cur.replace( " " + clazz + " ", " " ); + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = jQuery.trim( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value; + + if ( typeof stateVal === "boolean" && type === "string" ) { + return stateVal ? this.addClass( value ) : this.removeClass( value ); + } + + if ( jQuery.isFunction( value ) ) { + return this.each( function( i ) { + jQuery( this ).toggleClass( + value.call( this, i, getClass( this ), stateVal ), + stateVal + ); + } ); + } + + return this.each( function() { + var className, i, self, classNames; + + if ( type === "string" ) { + + // Toggle individual class names + i = 0; + self = jQuery( this ); + classNames = value.match( rnotwhite ) || []; + + while ( ( className = classNames[ i++ ] ) ) { + + // Check each className given, space separated list + if ( self.hasClass( className ) ) { + self.removeClass( className ); + } else { + self.addClass( className ); + } + } + + // Toggle whole class name + } else if ( value === undefined || type === "boolean" ) { + className = getClass( this ); + if ( className ) { + + // Store className if set + dataPriv.set( this, "__className__", className ); + } + + // If the element has a class name or if we're passed `false`, + // then remove the whole classname (if there was one, the above saved it). + // Otherwise bring back whatever was previously saved (if anything), + // falling back to the empty string if nothing was stored. + if ( this.setAttribute ) { + this.setAttribute( "class", + className || value === false ? + "" : + dataPriv.get( this, "__className__" ) || "" + ); + } + } + } ); + }, + + hasClass: function( selector ) { + var className, elem, + i = 0; + + className = " " + selector + " "; + while ( ( elem = this[ i++ ] ) ) { + if ( elem.nodeType === 1 && + ( " " + getClass( elem ) + " " ).replace( rclass, " " ) + .indexOf( className ) > -1 + ) { + return true; + } + } + + return false; + } + } ); + + + + + var rreturn = /\r/g, + rspaces = /[\x20\t\r\n\f]+/g; + + jQuery.fn.extend( { + val: function( value ) { + var hooks, ret, isFunction, + elem = this[ 0 ]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || + jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && + "get" in hooks && + ( ret = hooks.get( elem, "value" ) ) !== undefined + ) { + return ret; + } + + ret = elem.value; + + return typeof ret === "string" ? + + // Handle most common string cases + ret.replace( rreturn, "" ) : + + // Handle cases where value is null/undef or number + ret == null ? "" : ret; + } + + return; + } + + isFunction = jQuery.isFunction( value ); + + return this.each( function( i ) { + var val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( isFunction ) { + val = value.call( this, i, jQuery( this ).val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + + } else if ( typeof val === "number" ) { + val += ""; + + } else if ( jQuery.isArray( val ) ) { + val = jQuery.map( val, function( value ) { + return value == null ? "" : value + ""; + } ); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + } ); + } + } ); + + jQuery.extend( { + valHooks: { + option: { + get: function( elem ) { + + var val = jQuery.find.attr( elem, "value" ); + return val != null ? + val : + + // Support: IE10-11+ + // option.text throws exceptions (#14686, #14858) + // Strip and collapse whitespace + // https://html.spec.whatwg.org/#strip-and-collapse-whitespace + jQuery.trim( jQuery.text( elem ) ).replace( rspaces, " " ); + } + }, + select: { + get: function( elem ) { + var value, option, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one" || index < 0, + values = one ? null : [], + max = one ? index + 1 : options.length, + i = index < 0 ? + max : + one ? index : 0; + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // IE8-9 doesn't update selected after form reset (#2551) + if ( ( option.selected || i === index ) && + + // Don't return options that are disabled or in a disabled optgroup + ( support.optDisabled ? + !option.disabled : option.getAttribute( "disabled" ) === null ) && + ( !option.parentNode.disabled || + !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + }, + + set: function( elem, value ) { + var optionSet, option, + options = elem.options, + values = jQuery.makeArray( value ), + i = options.length; + + while ( i-- ) { + option = options[ i ]; + if ( option.selected = + jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 + ) { + optionSet = true; + } + } + + // Force browsers to behave consistently when non-matching value is set + if ( !optionSet ) { + elem.selectedIndex = -1; + } + return values; + } + } + } + } ); + + // Radios and checkboxes getter/setter + jQuery.each( [ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + set: function( elem, value ) { + if ( jQuery.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); + } + } + }; + if ( !support.checkOn ) { + jQuery.valHooks[ this ].get = function( elem ) { + return elem.getAttribute( "value" ) === null ? "on" : elem.value; + }; + } + } ); + + + + + // Return jQuery for attributes-only inclusion + + + var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/; + + jQuery.extend( jQuery.event, { + + trigger: function( event, data, elem, onlyHandlers ) { + + var i, cur, tmp, bubbleType, ontype, handle, special, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; + + cur = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "." ) > -1 ) { + + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split( "." ); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf( ":" ) < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join( "." ); + event.rnamespace = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === ( elem.ownerDocument || document ) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { + + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] && + dataPriv.get( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && acceptData( cur ) ) { + event.result = handle.apply( cur, data ); + if ( event.result === false ) { + event.preventDefault(); + } + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( ( !special._default || + special._default.apply( eventPath.pop(), data ) === false ) && + acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name name as the event. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + elem[ type ](); + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + // Piggyback on a donor event to simulate a different one + simulate: function( type, elem, event ) { + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true + + // Previously, `originalEvent: {}` was set here, so stopPropagation call + // would not be triggered on donor event, since in our own + // jQuery.event.stopPropagation function we had a check for existence of + // originalEvent.stopPropagation method, so, consequently it would be a noop. + // + // But now, this "simulate" function is used only for events + // for which stopPropagation() is noop, so there is no need for that anymore. + // + // For the 1.x branch though, guard for "click" and "submit" + // events is still used, but was moved to jQuery.event.stopPropagation function + // because `originalEvent` should point to the original event for the constancy + // with other events and for more focused logic + } + ); + + jQuery.event.trigger( e, null, elem ); + + if ( e.isDefaultPrevented() ) { + event.preventDefault(); + } + } + + } ); + + jQuery.fn.extend( { + + trigger: function( type, data ) { + return this.each( function() { + jQuery.event.trigger( type, data, this ); + } ); + }, + triggerHandler: function( type, data ) { + var elem = this[ 0 ]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } + } ); + + + jQuery.each( ( "blur focus focusin focusout load resize scroll unload click dblclick " + + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + + "change select submit keydown keypress keyup error contextmenu" ).split( " " ), + function( i, name ) { + + // Handle event binding + jQuery.fn[ name ] = function( data, fn ) { + return arguments.length > 0 ? + this.on( name, null, data, fn ) : + this.trigger( name ); + }; + } ); + + jQuery.fn.extend( { + hover: function( fnOver, fnOut ) { + return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); + } + } ); + + + + + support.focusin = "onfocusin" in window; + + + // Support: Firefox + // Firefox doesn't have focus(in | out) events + // Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 + // + // Support: Chrome, Safari + // focus(in | out) events fire after focus & blur events, + // which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order + // Related ticket - https://code.google.com/p/chromium/issues/detail?id=449857 + if ( !support.focusin ) { + jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler on the document while someone wants focusin/focusout + var handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + var doc = this.ownerDocument || this, + attaches = dataPriv.access( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this, + attaches = dataPriv.access( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + dataPriv.remove( doc, fix ); + + } else { + dataPriv.access( doc, fix, attaches ); + } + } + }; + } ); + } + var location = window.location; + + var nonce = jQuery.now(); + + var rquery = ( /\?/ ); + + + + // Support: Android 2.3 + // Workaround failure to string-cast null input + jQuery.parseJSON = function( data ) { + return JSON.parse( data + "" ); + }; + + + // Cross-browser xml parsing + jQuery.parseXML = function( data ) { + var xml; + if ( !data || typeof data !== "string" ) { + return null; + } + + // Support: IE9 + try { + xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); + } catch ( e ) { + xml = undefined; + } + + if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; + }; + + + var + rhash = /#.*$/, + rts = /([?&])_=[^&]*/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, + + // #7653, #8125, #8152: local protocol detection + rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + + /* Prefilters + * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) + * 2) These are called: + * - BEFORE asking for a transport + * - AFTER param serialization (s.data is a string if s.processData is true) + * 3) key is the dataType + * 4) the catchall symbol "*" can be used + * 5) execution will start with transport dataType and THEN continue down to "*" if needed + */ + prefilters = {}, + + /* Transports bindings + * 1) key is the dataType + * 2) the catchall symbol "*" can be used + * 3) selection will start with transport dataType and THEN go to "*" if needed + */ + transports = {}, + + // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression + allTypes = "*/".concat( "*" ), + + // Anchor tag for parsing the document origin + originAnchor = document.createElement( "a" ); + originAnchor.href = location.href; + + // Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport + function addToPrefiltersOrTransports( structure ) { + + // dataTypeExpression is optional and defaults to "*" + return function( dataTypeExpression, func ) { + + if ( typeof dataTypeExpression !== "string" ) { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + var dataType, + i = 0, + dataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || []; + + if ( jQuery.isFunction( func ) ) { + + // For each dataType in the dataTypeExpression + while ( ( dataType = dataTypes[ i++ ] ) ) { + + // Prepend if requested + if ( dataType[ 0 ] === "+" ) { + dataType = dataType.slice( 1 ) || "*"; + ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); + + // Otherwise append + } else { + ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); + } + } + } + }; + } + + // Base inspection function for prefilters and transports + function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { + + var inspected = {}, + seekingTransport = ( structure === transports ); + + function inspect( dataType ) { + var selected; + inspected[ dataType ] = true; + jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { + var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); + if ( typeof dataTypeOrTransport === "string" && + !seekingTransport && !inspected[ dataTypeOrTransport ] ) { + + options.dataTypes.unshift( dataTypeOrTransport ); + inspect( dataTypeOrTransport ); + return false; + } else if ( seekingTransport ) { + return !( selected = dataTypeOrTransport ); + } + } ); + return selected; + } + + return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); + } + + // A special extend for ajax options + // that takes "flat" options (not to be deep extended) + // Fixes #9887 + function ajaxExtend( target, src ) { + var key, deep, + flatOptions = jQuery.ajaxSettings.flatOptions || {}; + + for ( key in src ) { + if ( src[ key ] !== undefined ) { + ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; + } + } + if ( deep ) { + jQuery.extend( true, target, deep ); + } + + return target; + } + + /* Handles responses to an ajax request: + * - finds the right dataType (mediates between content-type and expected dataType) + * - returns the corresponding response + */ + function ajaxHandleResponses( s, jqXHR, responses ) { + + var ct, type, finalDataType, firstDataType, + contents = s.contents, + dataTypes = s.dataTypes; + + // Remove auto dataType and get content-type in the process + while ( dataTypes[ 0 ] === "*" ) { + dataTypes.shift(); + if ( ct === undefined ) { + ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); + } + } + + // Check if we're dealing with a known content-type + if ( ct ) { + for ( type in contents ) { + if ( contents[ type ] && contents[ type ].test( ct ) ) { + dataTypes.unshift( type ); + break; + } + } + } + + // Check to see if we have a response for the expected dataType + if ( dataTypes[ 0 ] in responses ) { + finalDataType = dataTypes[ 0 ]; + } else { + + // Try convertible dataTypes + for ( type in responses ) { + if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { + finalDataType = type; + break; + } + if ( !firstDataType ) { + firstDataType = type; + } + } + + // Or just use first one + finalDataType = finalDataType || firstDataType; + } + + // If we found a dataType + // We add the dataType to the list if needed + // and return the corresponding response + if ( finalDataType ) { + if ( finalDataType !== dataTypes[ 0 ] ) { + dataTypes.unshift( finalDataType ); + } + return responses[ finalDataType ]; + } + } + + /* Chain conversions given the request and the original response + * Also sets the responseXXX fields on the jqXHR instance + */ + function ajaxConvert( s, response, jqXHR, isSuccess ) { + var conv2, current, conv, tmp, prev, + converters = {}, + + // Work with a copy of dataTypes in case we need to modify it for conversion + dataTypes = s.dataTypes.slice(); + + // Create converters map with lowercased keys + if ( dataTypes[ 1 ] ) { + for ( conv in s.converters ) { + converters[ conv.toLowerCase() ] = s.converters[ conv ]; + } + } + + current = dataTypes.shift(); + + // Convert to each sequential dataType + while ( current ) { + + if ( s.responseFields[ current ] ) { + jqXHR[ s.responseFields[ current ] ] = response; + } + + // Apply the dataFilter if provided + if ( !prev && isSuccess && s.dataFilter ) { + response = s.dataFilter( response, s.dataType ); + } + + prev = current; + current = dataTypes.shift(); + + if ( current ) { + + // There's only work to do if current dataType is non-auto + if ( current === "*" ) { + + current = prev; + + // Convert response if prev dataType is non-auto and differs from current + } else if ( prev !== "*" && prev !== current ) { + + // Seek a direct converter + conv = converters[ prev + " " + current ] || converters[ "* " + current ]; + + // If none found, seek a pair + if ( !conv ) { + for ( conv2 in converters ) { + + // If conv2 outputs current + tmp = conv2.split( " " ); + if ( tmp[ 1 ] === current ) { + + // If prev can be converted to accepted input + conv = converters[ prev + " " + tmp[ 0 ] ] || + converters[ "* " + tmp[ 0 ] ]; + if ( conv ) { + + // Condense equivalence converters + if ( conv === true ) { + conv = converters[ conv2 ]; + + // Otherwise, insert the intermediate dataType + } else if ( converters[ conv2 ] !== true ) { + current = tmp[ 0 ]; + dataTypes.unshift( tmp[ 1 ] ); + } + break; + } + } + } + } + + // Apply converter (if not an equivalence) + if ( conv !== true ) { + + // Unless errors are allowed to bubble, catch and return them + if ( conv && s.throws ) { + response = conv( response ); + } else { + try { + response = conv( response ); + } catch ( e ) { + return { + state: "parsererror", + error: conv ? e : "No conversion from " + prev + " to " + current + }; + } + } + } + } + } + } + + return { state: "success", data: response }; + } + + jQuery.extend( { + + // Counter for holding the number of active queries + active: 0, + + // Last-Modified header cache for next request + lastModified: {}, + etag: {}, + + ajaxSettings: { + url: location.href, + type: "GET", + isLocal: rlocalProtocol.test( location.protocol ), + global: true, + processData: true, + async: true, + contentType: "application/x-www-form-urlencoded; charset=UTF-8", + /* + timeout: 0, + data: null, + dataType: null, + username: null, + password: null, + cache: null, + throws: false, + traditional: false, + headers: {}, + */ + + accepts: { + "*": allTypes, + text: "text/plain", + html: "text/html", + xml: "application/xml, text/xml", + json: "application/json, text/javascript" + }, + + contents: { + xml: /\bxml\b/, + html: /\bhtml/, + json: /\bjson\b/ + }, + + responseFields: { + xml: "responseXML", + text: "responseText", + json: "responseJSON" + }, + + // Data converters + // Keys separate source (or catchall "*") and destination types with a single space + converters: { + + // Convert anything to text + "* text": String, + + // Text to html (true = no transformation) + "text html": true, + + // Evaluate text as a json expression + "text json": jQuery.parseJSON, + + // Parse text as xml + "text xml": jQuery.parseXML + }, + + // For options that shouldn't be deep extended: + // you can add your own custom options here if + // and when you create one that shouldn't be + // deep extended (see ajaxExtend) + flatOptions: { + url: true, + context: true + } + }, + + // Creates a full fledged settings object into target + // with both ajaxSettings and settings fields. + // If target is omitted, writes into ajaxSettings. + ajaxSetup: function( target, settings ) { + return settings ? + + // Building a settings object + ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : + + // Extending ajaxSettings + ajaxExtend( jQuery.ajaxSettings, target ); + }, + + ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), + ajaxTransport: addToPrefiltersOrTransports( transports ), + + // Main method + ajax: function( url, options ) { + + // If url is an object, simulate pre-1.5 signature + if ( typeof url === "object" ) { + options = url; + url = undefined; + } + + // Force options to be an object + options = options || {}; + + var transport, + + // URL without anti-cache param + cacheURL, + + // Response headers + responseHeadersString, + responseHeaders, + + // timeout handle + timeoutTimer, + + // Url cleanup var + urlAnchor, + + // To know if global events are to be dispatched + fireGlobals, + + // Loop variable + i, + + // Create the final options object + s = jQuery.ajaxSetup( {}, options ), + + // Callbacks context + callbackContext = s.context || s, + + // Context for global events is callbackContext if it is a DOM node or jQuery collection + globalEventContext = s.context && + ( callbackContext.nodeType || callbackContext.jquery ) ? + jQuery( callbackContext ) : + jQuery.event, + + // Deferreds + deferred = jQuery.Deferred(), + completeDeferred = jQuery.Callbacks( "once memory" ), + + // Status-dependent callbacks + statusCode = s.statusCode || {}, + + // Headers (they are sent all at once) + requestHeaders = {}, + requestHeadersNames = {}, + + // The jqXHR state + state = 0, + + // Default abort message + strAbort = "canceled", + + // Fake xhr + jqXHR = { + readyState: 0, + + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( state === 2 ) { + if ( !responseHeaders ) { + responseHeaders = {}; + while ( ( match = rheaders.exec( responseHeadersString ) ) ) { + responseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ]; + } + } + match = responseHeaders[ key.toLowerCase() ]; + } + return match == null ? null : match; + }, + + // Raw string + getAllResponseHeaders: function() { + return state === 2 ? responseHeadersString : null; + }, + + // Caches the header + setRequestHeader: function( name, value ) { + var lname = name.toLowerCase(); + if ( !state ) { + name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( !state ) { + s.mimeType = type; + } + return this; + }, + + // Status-dependent callbacks + statusCode: function( map ) { + var code; + if ( map ) { + if ( state < 2 ) { + for ( code in map ) { + + // Lazy-add the new callback in a way that preserves old ones + statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; + } + } else { + + // Execute the appropriate callbacks + jqXHR.always( map[ jqXHR.status ] ); + } + } + return this; + }, + + // Cancel the request + abort: function( statusText ) { + var finalText = statusText || strAbort; + if ( transport ) { + transport.abort( finalText ); + } + done( 0, finalText ); + return this; + } + }; + + // Attach deferreds + deferred.promise( jqXHR ).complete = completeDeferred.add; + jqXHR.success = jqXHR.done; + jqXHR.error = jqXHR.fail; + + // Remove hash character (#7531: and string promotion) + // Add protocol if not provided (prefilters might expect it) + // Handle falsy url in the settings object (#10093: consistency with old signature) + // We also use the url parameter if available + s.url = ( ( url || s.url || location.href ) + "" ).replace( rhash, "" ) + .replace( rprotocol, location.protocol + "//" ); + + // Alias method option to type as per ticket #12004 + s.type = options.method || options.type || s.method || s.type; + + // Extract dataTypes list + s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().match( rnotwhite ) || [ "" ]; + + // A cross-domain request is in order when the origin doesn't match the current origin. + if ( s.crossDomain == null ) { + urlAnchor = document.createElement( "a" ); + + // Support: IE8-11+ + // IE throws exception if url is malformed, e.g. http://example.com:80x/ + try { + urlAnchor.href = s.url; + + // Support: IE8-11+ + // Anchor's host property isn't correctly set when s.url is relative + urlAnchor.href = urlAnchor.href; + s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== + urlAnchor.protocol + "//" + urlAnchor.host; + } catch ( e ) { + + // If there is an error parsing the URL, assume it is crossDomain, + // it can be rejected by the transport if it is invalid + s.crossDomain = true; + } + } + + // Convert data if not already a string + if ( s.data && s.processData && typeof s.data !== "string" ) { + s.data = jQuery.param( s.data, s.traditional ); + } + + // Apply prefilters + inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); + + // If request was aborted inside a prefilter, stop there + if ( state === 2 ) { + return jqXHR; + } + + // We can fire global events as of now if asked to + // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) + fireGlobals = jQuery.event && s.global; + + // Watch for a new set of requests + if ( fireGlobals && jQuery.active++ === 0 ) { + jQuery.event.trigger( "ajaxStart" ); + } + + // Uppercase the type + s.type = s.type.toUpperCase(); + + // Determine if request has content + s.hasContent = !rnoContent.test( s.type ); + + // Save the URL in case we're toying with the If-Modified-Since + // and/or If-None-Match header later on + cacheURL = s.url; + + // More options handling for requests with no content + if ( !s.hasContent ) { + + // If data is available, append data to url + if ( s.data ) { + cacheURL = ( s.url += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data ); + + // #9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Add anti-cache in url if needed + if ( s.cache === false ) { + s.url = rts.test( cacheURL ) ? + + // If there is already a '_' parameter, set its value + cacheURL.replace( rts, "$1_=" + nonce++ ) : + + // Otherwise add one to the end + cacheURL + ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + nonce++; + } + } + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + if ( jQuery.lastModified[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); + } + if ( jQuery.etag[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); + } + } + + // Set the correct header, if data is being sent + if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { + jqXHR.setRequestHeader( "Content-Type", s.contentType ); + } + + // Set the Accepts header for the server, depending on the dataType + jqXHR.setRequestHeader( + "Accept", + s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? + s.accepts[ s.dataTypes[ 0 ] ] + + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : + s.accepts[ "*" ] + ); + + // Check for headers option + for ( i in s.headers ) { + jqXHR.setRequestHeader( i, s.headers[ i ] ); + } + + // Allow custom headers/mimetypes and early abort + if ( s.beforeSend && + ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) { + + // Abort if not done already and return + return jqXHR.abort(); + } + + // Aborting is no longer a cancellation + strAbort = "abort"; + + // Install callbacks on deferreds + for ( i in { success: 1, error: 1, complete: 1 } ) { + jqXHR[ i ]( s[ i ] ); + } + + // Get transport + transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); + + // If no transport, we auto-abort + if ( !transport ) { + done( -1, "No Transport" ); + } else { + jqXHR.readyState = 1; + + // Send global event + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); + } + + // If request was aborted inside ajaxSend, stop there + if ( state === 2 ) { + return jqXHR; + } + + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = window.setTimeout( function() { + jqXHR.abort( "timeout" ); + }, s.timeout ); + } + + try { + state = 1; + transport.send( requestHeaders, done ); + } catch ( e ) { + + // Propagate exception as error if not done + if ( state < 2 ) { + done( -1, e ); + + // Simply rethrow otherwise + } else { + throw e; + } + } + } + + // Callback for when everything is done + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; + + // Called once + if ( state === 2 ) { + return; + } + + // State is "done" now + state = 2; + + // Clear timeout if it exists + if ( timeoutTimer ) { + window.clearTimeout( timeoutTimer ); + } + + // Dereference transport for early garbage collection + // (no matter how long the jqXHR object will be used) + transport = undefined; + + // Cache response headers + responseHeadersString = headers || ""; + + // Set readyState + jqXHR.readyState = status > 0 ? 4 : 0; + + // Determine if successful + isSuccess = status >= 200 && status < 300 || status === 304; + + // Get response data + if ( responses ) { + response = ajaxHandleResponses( s, jqXHR, responses ); + } + + // Convert no matter what (that way responseXXX fields are always set) + response = ajaxConvert( s, response, jqXHR, isSuccess ); + + // If successful, handle type chaining + if ( isSuccess ) { + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + modified = jqXHR.getResponseHeader( "Last-Modified" ); + if ( modified ) { + jQuery.lastModified[ cacheURL ] = modified; + } + modified = jqXHR.getResponseHeader( "etag" ); + if ( modified ) { + jQuery.etag[ cacheURL ] = modified; + } + } + + // if no content + if ( status === 204 || s.type === "HEAD" ) { + statusText = "nocontent"; + + // if not modified + } else if ( status === 304 ) { + statusText = "notmodified"; + + // If we have data, let's convert it + } else { + statusText = response.state; + success = response.data; + error = response.error; + isSuccess = !error; + } + } else { + + // Extract error from statusText and normalize for non-aborts + error = statusText; + if ( status || !statusText ) { + statusText = "error"; + if ( status < 0 ) { + status = 0; + } + } + } + + // Set data for the fake xhr object + jqXHR.status = status; + jqXHR.statusText = ( nativeStatusText || statusText ) + ""; + + // Success/Error + if ( isSuccess ) { + deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); + } else { + deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); + } + + // Status-dependent callbacks + jqXHR.statusCode( statusCode ); + statusCode = undefined; + + if ( fireGlobals ) { + globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", + [ jqXHR, s, isSuccess ? success : error ] ); + } + + // Complete + completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); + + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); + + // Handle the global AJAX counter + if ( !( --jQuery.active ) ) { + jQuery.event.trigger( "ajaxStop" ); + } + } + } + + return jqXHR; + }, + + getJSON: function( url, data, callback ) { + return jQuery.get( url, data, callback, "json" ); + }, + + getScript: function( url, callback ) { + return jQuery.get( url, undefined, callback, "script" ); + } + } ); + + jQuery.each( [ "get", "post" ], function( i, method ) { + jQuery[ method ] = function( url, data, callback, type ) { + + // Shift arguments if data argument was omitted + if ( jQuery.isFunction( data ) ) { + type = type || callback; + callback = data; + data = undefined; + } + + // The url can be an options object (which then must have .url) + return jQuery.ajax( jQuery.extend( { + url: url, + type: method, + dataType: type, + data: data, + success: callback + }, jQuery.isPlainObject( url ) && url ) ); + }; + } ); + + + jQuery._evalUrl = function( url ) { + return jQuery.ajax( { + url: url, + + // Make this explicit, since user can override this through ajaxSetup (#11264) + type: "GET", + dataType: "script", + async: false, + global: false, + "throws": true + } ); + }; + + + jQuery.fn.extend( { + wrapAll: function( html ) { + var wrap; + + if ( jQuery.isFunction( html ) ) { + return this.each( function( i ) { + jQuery( this ).wrapAll( html.call( this, i ) ); + } ); + } + + if ( this[ 0 ] ) { + + // The elements to wrap the target around + wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); + + if ( this[ 0 ].parentNode ) { + wrap.insertBefore( this[ 0 ] ); + } + + wrap.map( function() { + var elem = this; + + while ( elem.firstElementChild ) { + elem = elem.firstElementChild; + } + + return elem; + } ).append( this ); + } + + return this; + }, + + wrapInner: function( html ) { + if ( jQuery.isFunction( html ) ) { + return this.each( function( i ) { + jQuery( this ).wrapInner( html.call( this, i ) ); + } ); + } + + return this.each( function() { + var self = jQuery( this ), + contents = self.contents(); + + if ( contents.length ) { + contents.wrapAll( html ); + + } else { + self.append( html ); + } + } ); + }, + + wrap: function( html ) { + var isFunction = jQuery.isFunction( html ); + + return this.each( function( i ) { + jQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html ); + } ); + }, + + unwrap: function() { + return this.parent().each( function() { + if ( !jQuery.nodeName( this, "body" ) ) { + jQuery( this ).replaceWith( this.childNodes ); + } + } ).end(); + } + } ); + + + jQuery.expr.filters.hidden = function( elem ) { + return !jQuery.expr.filters.visible( elem ); + }; + jQuery.expr.filters.visible = function( elem ) { + + // Support: Opera <= 12.12 + // Opera reports offsetWidths and offsetHeights less than zero on some elements + // Use OR instead of AND as the element is not visible if either is true + // See tickets #10406 and #13132 + return elem.offsetWidth > 0 || elem.offsetHeight > 0 || elem.getClientRects().length > 0; + }; + + + + + var r20 = /%20/g, + rbracket = /\[\]$/, + rCRLF = /\r?\n/g, + rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, + rsubmittable = /^(?:input|select|textarea|keygen)/i; + + function buildParams( prefix, obj, traditional, add ) { + var name; + + if ( jQuery.isArray( obj ) ) { + + // Serialize array item. + jQuery.each( obj, function( i, v ) { + if ( traditional || rbracket.test( prefix ) ) { + + // Treat each array item as a scalar. + add( prefix, v ); + + } else { + + // Item is non-scalar (array or object), encode its numeric index. + buildParams( + prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", + v, + traditional, + add + ); + } + } ); + + } else if ( !traditional && jQuery.type( obj ) === "object" ) { + + // Serialize object item. + for ( name in obj ) { + buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); + } + + } else { + + // Serialize scalar item. + add( prefix, obj ); + } + } + + // Serialize an array of form elements or a set of + // key/values into a query string + jQuery.param = function( a, traditional ) { + var prefix, + s = [], + add = function( key, value ) { + + // If value is a function, invoke it and return its value + value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value ); + s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value ); + }; + + // Set traditional to true for jQuery <= 1.3.2 behavior. + if ( traditional === undefined ) { + traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional; + } + + // If an array was passed in, assume that it is an array of form elements. + if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { + + // Serialize the form elements + jQuery.each( a, function() { + add( this.name, this.value ); + } ); + + } else { + + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for ( prefix in a ) { + buildParams( prefix, a[ prefix ], traditional, add ); + } + } + + // Return the resulting serialization + return s.join( "&" ).replace( r20, "+" ); + }; + + jQuery.fn.extend( { + serialize: function() { + return jQuery.param( this.serializeArray() ); + }, + serializeArray: function() { + return this.map( function() { + + // Can add propHook for "elements" to filter or add form elements + var elements = jQuery.prop( this, "elements" ); + return elements ? jQuery.makeArray( elements ) : this; + } ) + .filter( function() { + var type = this.type; + + // Use .is( ":disabled" ) so that fieldset[disabled] works + return this.name && !jQuery( this ).is( ":disabled" ) && + rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && + ( this.checked || !rcheckableType.test( type ) ); + } ) + .map( function( i, elem ) { + var val = jQuery( this ).val(); + + return val == null ? + null : + jQuery.isArray( val ) ? + jQuery.map( val, function( val ) { + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ) : + { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ).get(); + } + } ); + + + jQuery.ajaxSettings.xhr = function() { + try { + return new window.XMLHttpRequest(); + } catch ( e ) {} + }; + + var xhrSuccessStatus = { + + // File protocol always yields status code 0, assume 200 + 0: 200, + + // Support: IE9 + // #1450: sometimes IE returns 1223 when it should be 204 + 1223: 204 + }, + xhrSupported = jQuery.ajaxSettings.xhr(); + + support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); + support.ajax = xhrSupported = !!xhrSupported; + + jQuery.ajaxTransport( function( options ) { + var callback, errorCallback; + + // Cross domain only allowed if supported through XMLHttpRequest + if ( support.cors || xhrSupported && !options.crossDomain ) { + return { + send: function( headers, complete ) { + var i, + xhr = options.xhr(); + + xhr.open( + options.type, + options.url, + options.async, + options.username, + options.password + ); + + // Apply custom fields if provided + if ( options.xhrFields ) { + for ( i in options.xhrFields ) { + xhr[ i ] = options.xhrFields[ i ]; + } + } + + // Override mime type if needed + if ( options.mimeType && xhr.overrideMimeType ) { + xhr.overrideMimeType( options.mimeType ); + } + + // X-Requested-With header + // For cross-domain requests, seeing as conditions for a preflight are + // akin to a jigsaw puzzle, we simply never set it to be sure. + // (it can always be set on a per-request basis or even using ajaxSetup) + // For same-domain requests, won't change header if already provided. + if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { + headers[ "X-Requested-With" ] = "XMLHttpRequest"; + } + + // Set headers + for ( i in headers ) { + xhr.setRequestHeader( i, headers[ i ] ); + } + + // Callback + callback = function( type ) { + return function() { + if ( callback ) { + callback = errorCallback = xhr.onload = + xhr.onerror = xhr.onabort = xhr.onreadystatechange = null; + + if ( type === "abort" ) { + xhr.abort(); + } else if ( type === "error" ) { + + // Support: IE9 + // On a manual native abort, IE9 throws + // errors on any property access that is not readyState + if ( typeof xhr.status !== "number" ) { + complete( 0, "error" ); + } else { + complete( + + // File: protocol always yields status 0; see #8605, #14207 + xhr.status, + xhr.statusText + ); + } + } else { + complete( + xhrSuccessStatus[ xhr.status ] || xhr.status, + xhr.statusText, + + // Support: IE9 only + // IE9 has no XHR2 but throws on binary (trac-11426) + // For XHR2 non-text, let the caller handle it (gh-2498) + ( xhr.responseType || "text" ) !== "text" || + typeof xhr.responseText !== "string" ? + { binary: xhr.response } : + { text: xhr.responseText }, + xhr.getAllResponseHeaders() + ); + } + } + }; + }; + + // Listen to events + xhr.onload = callback(); + errorCallback = xhr.onerror = callback( "error" ); + + // Support: IE9 + // Use onreadystatechange to replace onabort + // to handle uncaught aborts + if ( xhr.onabort !== undefined ) { + xhr.onabort = errorCallback; + } else { + xhr.onreadystatechange = function() { + + // Check readyState before timeout as it changes + if ( xhr.readyState === 4 ) { + + // Allow onerror to be called first, + // but that will not handle a native abort + // Also, save errorCallback to a variable + // as xhr.onerror cannot be accessed + window.setTimeout( function() { + if ( callback ) { + errorCallback(); + } + } ); + } + }; + } + + // Create the abort callback + callback = callback( "abort" ); + + try { + + // Do send the request (this may raise an exception) + xhr.send( options.hasContent && options.data || null ); + } catch ( e ) { + + // #14683: Only rethrow if this hasn't been notified as an error yet + if ( callback ) { + throw e; + } + } + }, + + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } + } ); + + + + + // Install script dataType + jQuery.ajaxSetup( { + accepts: { + script: "text/javascript, application/javascript, " + + "application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /\b(?:java|ecma)script\b/ + }, + converters: { + "text script": function( text ) { + jQuery.globalEval( text ); + return text; + } + } + } ); + + // Handle cache's special case and crossDomain + jQuery.ajaxPrefilter( "script", function( s ) { + if ( s.cache === undefined ) { + s.cache = false; + } + if ( s.crossDomain ) { + s.type = "GET"; + } + } ); + + // Bind script tag hack transport + jQuery.ajaxTransport( "script", function( s ) { + + // This transport only deals with cross domain requests + if ( s.crossDomain ) { + var script, callback; + return { + send: function( _, complete ) { + script = jQuery( "<script>" ).prop( { + charset: s.scriptCharset, + src: s.url + } ).on( + "load error", + callback = function( evt ) { + script.remove(); + callback = null; + if ( evt ) { + complete( evt.type === "error" ? 404 : 200, evt.type ); + } + } + ); + + // Use native DOM manipulation to avoid our domManip AJAX trickery + document.head.appendChild( script[ 0 ] ); + }, + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } + } ); + + + + + var oldCallbacks = [], + rjsonp = /(=)\?(?=&|$)|\?\?/; + + // Default jsonp settings + jQuery.ajaxSetup( { + jsonp: "callback", + jsonpCallback: function() { + var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) ); + this[ callback ] = true; + return callback; + } + } ); + + // Detect, normalize options and install callbacks for jsonp requests + jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) { + + var callbackName, overwritten, responseContainer, + jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ? + "url" : + typeof s.data === "string" && + ( s.contentType || "" ) + .indexOf( "application/x-www-form-urlencoded" ) === 0 && + rjsonp.test( s.data ) && "data" + ); + + // Handle iff the expected data type is "jsonp" or we have a parameter to set + if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) { + + // Get callback name, remembering preexisting value associated with it + callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ? + s.jsonpCallback() : + s.jsonpCallback; + + // Insert callback into url or form data + if ( jsonProp ) { + s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName ); + } else if ( s.jsonp !== false ) { + s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName; + } + + // Use data converter to retrieve json after script execution + s.converters[ "script json" ] = function() { + if ( !responseContainer ) { + jQuery.error( callbackName + " was not called" ); + } + return responseContainer[ 0 ]; + }; + + // Force json dataType + s.dataTypes[ 0 ] = "json"; + + // Install callback + overwritten = window[ callbackName ]; + window[ callbackName ] = function() { + responseContainer = arguments; + }; + + // Clean-up function (fires after converters) + jqXHR.always( function() { + + // If previous value didn't exist - remove it + if ( overwritten === undefined ) { + jQuery( window ).removeProp( callbackName ); + + // Otherwise restore preexisting value + } else { + window[ callbackName ] = overwritten; + } + + // Save back as free + if ( s[ callbackName ] ) { + + // Make sure that re-using the options doesn't screw things around + s.jsonpCallback = originalSettings.jsonpCallback; + + // Save the callback name for future use + oldCallbacks.push( callbackName ); + } + + // Call if it was a function and we have a response + if ( responseContainer && jQuery.isFunction( overwritten ) ) { + overwritten( responseContainer[ 0 ] ); + } + + responseContainer = overwritten = undefined; + } ); + + // Delegate to script + return "script"; + } + } ); + + + + + // Argument "data" should be string of html + // context (optional): If specified, the fragment will be created in this context, + // defaults to document + // keepScripts (optional): If true, will include scripts passed in the html string + jQuery.parseHTML = function( data, context, keepScripts ) { + if ( !data || typeof data !== "string" ) { + return null; + } + if ( typeof context === "boolean" ) { + keepScripts = context; + context = false; + } + context = context || document; + + var parsed = rsingleTag.exec( data ), + scripts = !keepScripts && []; + + // Single tag + if ( parsed ) { + return [ context.createElement( parsed[ 1 ] ) ]; + } + + parsed = buildFragment( [ data ], context, scripts ); + + if ( scripts && scripts.length ) { + jQuery( scripts ).remove(); + } + + return jQuery.merge( [], parsed.childNodes ); + }; + + + // Keep a copy of the old load method + var _load = jQuery.fn.load; + + /** + * Load a url into a page + */ + jQuery.fn.load = function( url, params, callback ) { + if ( typeof url !== "string" && _load ) { + return _load.apply( this, arguments ); + } + + var selector, type, response, + self = this, + off = url.indexOf( " " ); + + if ( off > -1 ) { + selector = jQuery.trim( url.slice( off ) ); + url = url.slice( 0, off ); + } + + // If it's a function + if ( jQuery.isFunction( params ) ) { + + // We assume that it's the callback + callback = params; + params = undefined; + + // Otherwise, build a param string + } else if ( params && typeof params === "object" ) { + type = "POST"; + } + + // If we have elements to modify, make the request + if ( self.length > 0 ) { + jQuery.ajax( { + url: url, + + // If "type" variable is undefined, then "GET" method will be used. + // Make value of this field explicit since + // user can override it through ajaxSetup method + type: type || "GET", + dataType: "html", + data: params + } ).done( function( responseText ) { + + // Save response for use in complete callback + response = arguments; + + self.html( selector ? + + // If a selector was specified, locate the right elements in a dummy div + // Exclude scripts to avoid IE 'Permission Denied' errors + jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) : + + // Otherwise use the full result + responseText ); + + // If the request succeeds, this function gets "data", "status", "jqXHR" + // but they are ignored because response was set above. + // If it fails, this function gets "jqXHR", "status", "error" + } ).always( callback && function( jqXHR, status ) { + self.each( function() { + callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] ); + } ); + } ); + } + + return this; + }; + + + + + // Attach a bunch of functions for handling common AJAX events + jQuery.each( [ + "ajaxStart", + "ajaxStop", + "ajaxComplete", + "ajaxError", + "ajaxSuccess", + "ajaxSend" + ], function( i, type ) { + jQuery.fn[ type ] = function( fn ) { + return this.on( type, fn ); + }; + } ); + + + + + jQuery.expr.filters.animated = function( elem ) { + return jQuery.grep( jQuery.timers, function( fn ) { + return elem === fn.elem; + } ).length; + }; + + + + + /** + * Gets a window from an element + */ + function getWindow( elem ) { + return jQuery.isWindow( elem ) ? elem : elem.nodeType === 9 && elem.defaultView; + } + + jQuery.offset = { + setOffset: function( elem, options, i ) { + var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition, + position = jQuery.css( elem, "position" ), + curElem = jQuery( elem ), + props = {}; + + // Set position first, in-case top/left are set even on static elem + if ( position === "static" ) { + elem.style.position = "relative"; + } + + curOffset = curElem.offset(); + curCSSTop = jQuery.css( elem, "top" ); + curCSSLeft = jQuery.css( elem, "left" ); + calculatePosition = ( position === "absolute" || position === "fixed" ) && + ( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1; + + // Need to be able to calculate position if either + // top or left is auto and position is either absolute or fixed + if ( calculatePosition ) { + curPosition = curElem.position(); + curTop = curPosition.top; + curLeft = curPosition.left; + + } else { + curTop = parseFloat( curCSSTop ) || 0; + curLeft = parseFloat( curCSSLeft ) || 0; + } + + if ( jQuery.isFunction( options ) ) { + + // Use jQuery.extend here to allow modification of coordinates argument (gh-1848) + options = options.call( elem, i, jQuery.extend( {}, curOffset ) ); + } + + if ( options.top != null ) { + props.top = ( options.top - curOffset.top ) + curTop; + } + if ( options.left != null ) { + props.left = ( options.left - curOffset.left ) + curLeft; + } + + if ( "using" in options ) { + options.using.call( elem, props ); + + } else { + curElem.css( props ); + } + } + }; + + jQuery.fn.extend( { + offset: function( options ) { + if ( arguments.length ) { + return options === undefined ? + this : + this.each( function( i ) { + jQuery.offset.setOffset( this, options, i ); + } ); + } + + var docElem, win, + elem = this[ 0 ], + box = { top: 0, left: 0 }, + doc = elem && elem.ownerDocument; + + if ( !doc ) { + return; + } + + docElem = doc.documentElement; + + // Make sure it's not a disconnected DOM node + if ( !jQuery.contains( docElem, elem ) ) { + return box; + } + + box = elem.getBoundingClientRect(); + win = getWindow( doc ); + return { + top: box.top + win.pageYOffset - docElem.clientTop, + left: box.left + win.pageXOffset - docElem.clientLeft + }; + }, + + position: function() { + if ( !this[ 0 ] ) { + return; + } + + var offsetParent, offset, + elem = this[ 0 ], + parentOffset = { top: 0, left: 0 }; + + // Fixed elements are offset from window (parentOffset = {top:0, left: 0}, + // because it is its only offset parent + if ( jQuery.css( elem, "position" ) === "fixed" ) { + + // Assume getBoundingClientRect is there when computed position is fixed + offset = elem.getBoundingClientRect(); + + } else { + + // Get *real* offsetParent + offsetParent = this.offsetParent(); + + // Get correct offsets + offset = this.offset(); + if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) { + parentOffset = offsetParent.offset(); + } + + // Add offsetParent borders + parentOffset.top += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true ); + parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true ); + } + + // Subtract parent offsets and element margins + return { + top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ), + left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true ) + }; + }, + + // This method will return documentElement in the following cases: + // 1) For the element inside the iframe without offsetParent, this method will return + // documentElement of the parent window + // 2) For the hidden or detached element + // 3) For body or html element, i.e. in case of the html node - it will return itself + // + // but those exceptions were never presented as a real life use-cases + // and might be considered as more preferable results. + // + // This logic, however, is not guaranteed and can change at any point in the future + offsetParent: function() { + return this.map( function() { + var offsetParent = this.offsetParent; + + while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) { + offsetParent = offsetParent.offsetParent; + } + + return offsetParent || documentElement; + } ); + } + } ); + + // Create scrollLeft and scrollTop methods + jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) { + var top = "pageYOffset" === prop; + + jQuery.fn[ method ] = function( val ) { + return access( this, function( elem, method, val ) { + var win = getWindow( elem ); + + if ( val === undefined ) { + return win ? win[ prop ] : elem[ method ]; + } + + if ( win ) { + win.scrollTo( + !top ? val : win.pageXOffset, + top ? val : win.pageYOffset + ); + + } else { + elem[ method ] = val; + } + }, method, val, arguments.length ); + }; + } ); + + // Support: Safari<7-8+, Chrome<37-44+ + // Add the top/left cssHooks using jQuery.fn.position + // Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084 + // Blink bug: https://code.google.com/p/chromium/issues/detail?id=229280 + // getComputedStyle returns percent when specified for top/left/bottom/right; + // rather than make the css module depend on the offset module, just check for it here + jQuery.each( [ "top", "left" ], function( i, prop ) { + jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition, + function( elem, computed ) { + if ( computed ) { + computed = curCSS( elem, prop ); + + // If curCSS returns percentage, fallback to offset + return rnumnonpx.test( computed ) ? + jQuery( elem ).position()[ prop ] + "px" : + computed; + } + } + ); + } ); + + + // Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods + jQuery.each( { Height: "height", Width: "width" }, function( name, type ) { + jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, + function( defaultExtra, funcName ) { + + // Margin is only for outerHeight, outerWidth + jQuery.fn[ funcName ] = function( margin, value ) { + var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ), + extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" ); + + return access( this, function( elem, type, value ) { + var doc; + + if ( jQuery.isWindow( elem ) ) { + + // As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there + // isn't a whole lot we can do. See pull request at this URL for discussion: + // https://github.com/jquery/jquery/pull/764 + return elem.document.documentElement[ "client" + name ]; + } + + // Get document width or height + if ( elem.nodeType === 9 ) { + doc = elem.documentElement; + + // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], + // whichever is greatest + return Math.max( + elem.body[ "scroll" + name ], doc[ "scroll" + name ], + elem.body[ "offset" + name ], doc[ "offset" + name ], + doc[ "client" + name ] + ); + } + + return value === undefined ? + + // Get width or height on the element, requesting but not forcing parseFloat + jQuery.css( elem, type, extra ) : + + // Set width or height on the element + jQuery.style( elem, type, value, extra ); + }, type, chainable ? margin : undefined, chainable, null ); + }; + } ); + } ); + + + jQuery.fn.extend( { + + bind: function( types, data, fn ) { + return this.on( types, null, data, fn ); + }, + unbind: function( types, fn ) { + return this.off( types, null, fn ); + }, + + delegate: function( selector, types, data, fn ) { + return this.on( types, selector, data, fn ); + }, + undelegate: function( selector, types, fn ) { + + // ( namespace ) or ( selector, types [, fn] ) + return arguments.length === 1 ? + this.off( selector, "**" ) : + this.off( types, selector || "**", fn ); + }, + size: function() { + return this.length; + } + } ); + + jQuery.fn.andSelf = jQuery.fn.addBack; + + + + + // Register as a named AMD module, since jQuery can be concatenated with other + // files that may use define, but not via a proper concatenation script that + // understands anonymous AMD modules. A named AMD is safest and most robust + // way to register. Lowercase jquery is used because AMD module names are + // derived from file names, and jQuery is normally delivered in a lowercase + // file name. Do this after creating the global so that if an AMD module wants + // to call noConflict to hide this version of jQuery, it will work. + + // Note that for maximum portability, libraries that are not jQuery should + // declare themselves as anonymous modules, and avoid setting a global if an + // AMD loader is present. jQuery is a special case. For more information, see + // https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon + + if ( true ) { + !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function() { + return jQuery; + }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); + } + + + + var + + // Map over jQuery in case of overwrite + _jQuery = window.jQuery, + + // Map over the $ in case of overwrite + _$ = window.$; + + jQuery.noConflict = function( deep ) { + if ( window.$ === jQuery ) { + window.$ = _$; + } + + if ( deep && window.jQuery === jQuery ) { + window.jQuery = _jQuery; + } + + return jQuery; + }; + + // Expose jQuery and $ identifiers, even in AMD + // (#7102#comment:10, https://github.com/jquery/jquery/pull/557) + // and CommonJS for browser emulators (#13566) + if ( !noGlobal ) { + window.jQuery = window.$ = jQuery; + } + + return jQuery; + })); + + +/***/ }, +/* 4 */ +/***/ function(module, exports) { + + /** + * Created by gavorhes on 12/10/2015. + */ + "use strict"; + /** + * create a namespace on the gv object + * @param {string} namespace to create + * @returns {object} object representing the namespace + */ + function provide(namespace) { + "use strict"; + if (typeof window['gv'] == 'undefined') { + window['gv'] = {}; + } + var parts = namespace.split('.'); + var nameSpace = window['gv']; + for (var i = 0; i < parts.length; i++) { + var newObject = nameSpace[parts[i]]; + if (typeof newObject == 'undefined') { + nameSpace[parts[i]] = {}; + } + nameSpace = nameSpace[parts[i]]; + } + return nameSpace; + } + provide('util'); + window['gv'].util.provide = provide; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.default = provide; + + +/***/ }, +/* 5 */ +/***/ function(module, exports, __webpack_require__) { + + "use strict"; + exports.ol = __webpack_require__(6); + // // export default require('../ol/ol-build'); + // + // const fish = 10; + // export = fish; + // + // + // export function cat(bird: string){ + // console.log('eat the fish') + // } + // + // export function nice(eat: number){ + // console.log('eat that fish'); + // } + // + // export class Big{ + // glenn: string; + // + // constructor(isGlenn){ + // this.glenn = isGlenn; + // } + // + // set isGlenn(f: string){ + // console.log(this.glenn) + // } + // + // run(){ + // console.log(this.glenn + " can run"); + // } + // } + // + // export namespace HereIt{ + // + // export class Big2 { + // glenn: string; + // + // constructor(isGlenn) { + // this.glenn = isGlenn; + // } + // + // set isGlenn(f: string) { + // console.log(this.glenn) + // } + // + // run() { + // console.log(this.glenn + " can run"); + // } + // } + // + // + // } + + +/***/ }, +/* 6 */ +/***/ function(module, exports, __webpack_require__) { + + var require;var require;/* WEBPACK VAR INJECTION */(function(global) {// OpenLayers 3. See http://openlayers.org/ + // License: https://raw.githubusercontent.com/openlayers/ol3/master/LICENSE.md + ;(function (root, factory) { + if (true) { + module.exports = factory(); + } else if (typeof define === "function" && define.amd) { + define([], factory); + } else { + root.ol = factory(); + } + }(this, function () { + var OPENLAYERS = {}; + var n,aa=this; + function ba(){var a=aa.setImmediate,b=typeof a;if("object"==b)if(a){if(a instanceof Array)return"array";if(a instanceof Object)return b;var c=Object.prototype.toString.call(a);if("[object Window]"==c)return"object";if("[object Array]"==c||"number"==typeof a.length&&"undefined"!=typeof a.splice&&"undefined"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable("splice"))return"array";if("[object Function]"==c||"undefined"!=typeof a.call&&"undefined"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable("call"))return"function"}else return"null"; + else if("function"==b&&"undefined"==typeof a.call)return"object";return b}function ca(a,b,c){return a.call.apply(a.bind,arguments)}function da(a,b,c){if(!a)throw Error();if(2<arguments.length){var d=Array.prototype.slice.call(arguments,2);return function(){var c=Array.prototype.slice.call(arguments);Array.prototype.unshift.apply(c,d);return a.apply(b,c)}}return function(){return a.apply(b,arguments)}} + function ea(a,b,c){ea=Function.prototype.bind&&-1!=Function.prototype.bind.toString().indexOf("native code")?ca:da;return ea.apply(null,arguments)}function y(a,b){var c=a.split("."),d=OPENLAYERS||aa;c[0]in d||!d.execScript||d.execScript("var "+c[0]);for(var e;c.length&&(e=c.shift());)c.length||void 0===b?d[e]?d=d[e]:d=d[e]={}:d[e]=b};var fa;function B(a,b){a.prototype=Object.create(b.prototype);a.prototype.constructor=a}function I(){}function J(a){return a.ie||(a.ie=++ga)}var ga=0;if("undefined"!==typeof window)var K=window;else"undefined"!==typeof global?K=global:"undefined"!==typeof self&&(K=self);function ha(a){this.message="Assertion failed. See /doc/errors/#"+a+" for details.";this.code=a;this.name="AssertionError"}B(ha,Error);function L(a,b){if(!a)throw new ha(b);};function ia(a,b,c){return Math.min(Math.max(a,b),c)}var ja=function(){var a;"cosh"in Math?a=Math.cosh:a=function(a){a=Math.exp(a);return(a+1/a)/2};return a}();function ka(a){L(0<a,29);return Math.pow(2,Math.ceil(Math.log(a)/Math.LN2))}function la(a,b){var c=a%b;return 0>c*b?c+b:c};function ma(a){return function(b){if(b)return[ia(b[0],a[0],a[2]),ia(b[1],a[1],a[3])]}}function na(a){return a};function oa(a,b,c){this.center=a;this.resolution=b;this.rotation=c};var pa="function"===typeof Object.assign?Object.assign:function(a,b){if(!a||!a)throw new TypeError("Cannot convert undefined or null to object");for(var c=Object(a),d=1,e=arguments.length;d<e;++d){var f=arguments[d];if(void 0!==f&&null!==f)for(var g in f)f.hasOwnProperty(g)&&(c[g]=f[g])}return c};function qa(a){for(var b in a)delete a[b]}function ra(a){var b=[],c;for(c in a)b.push(a[c]);return b}function sa(a){for(var b in a)return!1;return!b};function ta(a){function b(b){var d=a.listener,e=a.jc||a.target;a.mc&&M(a);return d.call(e,b)}return a.kc=b}function ua(a,b,c,d){for(var e,f=0,g=a.length;f<g;++f)if(e=a[f],e.listener===b&&e.jc===c)return d&&(e.deleteIndex=f),e}function va(a,b){var c=a.ha;return c?c[b]:void 0}function wa(a){var b=a.ha;b||(b=a.ha={});return b} + function xa(a,b){var c=va(a,b);if(c){for(var d=0,e=c.length;d<e;++d)a.removeEventListener(b,c[d].kc),qa(c[d]);c.length=0;if(c=a.ha)delete c[b],0===Object.keys(c).length&&delete a.ha}}function R(a,b,c,d,e){var f=wa(a),g=f[b];g||(g=f[b]=[]);(f=ua(g,c,d,!1))?e||(f.mc=!1):(f={jc:d,mc:!!e,listener:c,target:a,type:b},a.addEventListener(b,ta(f)),g.push(f));return f}function ya(a,b,c,d){(a=va(a,b))&&(c=ua(a,c,d,!0))&&M(c)} + function M(a){if(a&&a.target){a.target.removeEventListener(a.type,a.kc);var b=va(a.target,a.type);if(b){var c="deleteIndex"in a?a.deleteIndex:b.indexOf(a);-1!==c&&b.splice(c,1);0===b.length&&xa(a.target,a.type)}qa(a)}}function za(a){var b=wa(a),c;for(c in b)xa(a,c)};function Aa(){}Aa.prototype.ra=!1;function Da(a){a.ra||(a.ra=!0,a.R())}Aa.prototype.R=I;function T(a){this.type=a;this.target=null}T.prototype.preventDefault=T.prototype.stopPropagation=function(){this.qe=!0};function Ea(a){a.stopPropagation()}function Fa(a){a.preventDefault()};function Ga(){this.ca={};this.K={};this.C={}}B(Ga,Aa);Ga.prototype.addEventListener=function(a,b){var c=this.C[a];c||(c=this.C[a]=[]);-1===c.indexOf(b)&&c.push(b)};function U(a,b){var c="string"===typeof b?new T(b):b,d=c.type;c.target=a;var e=a.C[d],f;if(e){d in a.K||(a.K[d]=0,a.ca[d]=0);++a.K[d];for(var g=0,h=e.length;g<h;++g)if(!1===e[g].call(a,c)||c.qe){f=!1;break}--a.K[d];if(0===a.K[d]){c=a.ca[d];for(delete a.ca[d];c--;)a.removeEventListener(d,I);delete a.K[d]}return f}}Ga.prototype.R=function(){za(this)}; + function Ha(a,b){return b?b in a.C:0<Object.keys(a.C).length}Ga.prototype.removeEventListener=function(a,b){var c=this.C[a];if(c){var d=c.indexOf(b);a in this.ca?(c[d]=I,++this.ca[a]):(c.splice(d,1),0===c.length&&delete this.C[a])}};function Ia(){Ga.call(this);this.b=0}B(Ia,Ga);Ia.prototype.w=function(){++this.b;U(this,"change")};Ia.prototype.Y=function(a,b,c){if(Array.isArray(a)){for(var d=a.length,e=Array(d),f=0;f<d;++f)e[f]=R(this,a[f],b,c);return e}return R(this,a,b,c)};Ia.prototype.hd=function(a,b,c){if(Array.isArray(a)){for(var d=a.length,e=Array(d),f=0;f<d;++f)e[f]=R(this,a[f],b,c,!0);return e}return R(this,a,b,c,!0)};function Ja(a,b,c){T.call(this,a);this.key=b;this.oldValue=c}B(Ja,T);function V(a){Ia.call(this);J(this);this.M={};void 0!==a&&this.l(a)}B(V,Ia);var Ka={};function La(a){return Ka.hasOwnProperty(a)?Ka[a]:Ka[a]="change:"+a}V.prototype.get=function(a){var b;this.M.hasOwnProperty(a)&&(b=this.M[a]);return b};V.prototype.Ea=function(){return pa({},this.M)};V.prototype.set=function(a,b,c){c?this.M[a]=b:(c=this.M[a],this.M[a]=b,c!==b&&(b=La(a),U(this,new Ja(b,a,c)),U(this,new Ja("propertychange",a,c))))}; + V.prototype.l=function(a,b){for(var c in a)this.set(c,a[c],b)};function Ma(a,b){return a>b?1:a<b?-1:0}function Na(a,b,c){var d=a.length;if(a[0]<=b)return 0;if(!(b<=a[d-1]))if(0<c)for(c=1;c<d;++c){if(a[c]<b)return c-1}else if(0>c)for(c=1;c<d;++c){if(a[c]<=b)return c}else for(c=1;c<d;++c){if(a[c]==b)return c;if(a[c]<b)return a[c-1]-b<b-a[c]?c-1:c}return d-1}function Oa(a){return a.reduce(function(a,c){return Array.isArray(c)?a.concat(Oa(c)):a.concat(c)},[])}function Pa(a,b){var c,d=Array.isArray(b)?b:[b],e=d.length;for(c=0;c<e;c++)a[a.length]=d[c]} + function Qa(a,b){var c=a.indexOf(b),d=-1<c;d&&a.splice(c,1);return d}function Ra(a,b){var c=a.length;if(c!==b.length)return!1;for(var d=0;d<c;d++)if(a[d]!==b[d])return!1;return!0}function Sa(a){var b=Ta,c=a.length,d=Array(a.length),e;for(e=0;e<c;e++)d[e]={index:e,value:a[e]};d.sort(function(a,c){return b(a.value,c.value)||a.index-c.index});for(e=0;e<a.length;e++)a[e]=d[e].value}function Ua(a,b){var c=b||Ma;return a.every(function(b,e){if(0===e)return!0;var f=c(a[e-1],b);return!(0<f||0===f)})};function Va(a){return function(b,c,d){if(void 0!==b)return b=Na(a,b,d),b=ia(b+c,0,a.length-1),c=Math.floor(b),b!=c&&c<a.length-1?a[c]/Math.pow(a[c]/a[c+1],b-c):a[c]}}function Wa(a,b,c){return function(d,e,f){if(void 0!==d)return d=Math.max(Math.floor(Math.log(b/d)/Math.log(a)+(-f/2+.5))+e,0),void 0!==c&&(d=Math.min(d,c)),b/Math.pow(a,d)}};function Xa(a){if(void 0!==a)return 0}function Ya(a,b){if(void 0!==a)return a+b}function Za(a){var b=2*Math.PI/a;return function(a,d){if(void 0!==a)return a=Math.floor((a+d)/b+.5)*b}}function $a(){var a=5*Math.PI/180;return function(b,c){if(void 0!==b)return Math.abs(b+c)<=a?0:b+c}};function ab(a,b){a[0]+=b[0];a[1]+=b[1]}function bb(a,b){var c=Math.cos(b),d=Math.sin(b),e=a[1]*c+a[0]*d;a[0]=a[0]*c-a[1]*d;a[1]=e};function cb(a){for(var b=db(),c=0,d=a.length;c<d;++c)eb(b,a[c]);return b}function fb(a,b,c){return c?(c[0]=a[0]-b,c[1]=a[1]-b,c[2]=a[2]+b,c[3]=a[3]+b,c):[a[0]-b,a[1]-b,a[2]+b,a[3]+b]}function gb(a,b){return b?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3],b):a.slice()}function hb(a,b){return a[0]<=b[0]&&b[2]<=a[2]&&a[1]<=b[1]&&b[3]<=a[3]}function db(){return[Infinity,Infinity,-Infinity,-Infinity]}function ib(a,b,c,d,e){return e?(e[0]=a,e[1]=b,e[2]=c,e[3]=d,e):[a,b,c,d]} + function jb(a){return ib(Infinity,Infinity,-Infinity,-Infinity,a)}function kb(a,b){var c=a[0],d=a[1];return ib(c,d,c,d,b)}function lb(a,b){return a[0]==b[0]&&a[2]==b[2]&&a[1]==b[1]&&a[3]==b[3]}function mb(a,b){b[0]<a[0]&&(a[0]=b[0]);b[2]>a[2]&&(a[2]=b[2]);b[1]<a[1]&&(a[1]=b[1]);b[3]>a[3]&&(a[3]=b[3])}function eb(a,b){b[0]<a[0]&&(a[0]=b[0]);b[0]>a[2]&&(a[2]=b[0]);b[1]<a[1]&&(a[1]=b[1]);b[1]>a[3]&&(a[3]=b[1])} + function nb(a,b,c,d,e){for(;c<d;c+=e){var f=a,g=b[c],h=b[c+1];f[0]=Math.min(f[0],g);f[1]=Math.min(f[1],h);f[2]=Math.max(f[2],g);f[3]=Math.max(f[3],h)}return a}function ob(a){var b=0;pb(a)||(b=qb(a)*rb(a));return b}function sb(a){return[a[0],a[1]]}function tb(a){return[(a[0]+a[2])/2,(a[1]+a[3])/2]} + function ub(a,b,c,d,e){var f=b*d[0]/2;d=b*d[1]/2;b=Math.cos(c);var g=Math.sin(c);c=f*b;f*=g;b*=d;var h=d*g,k=a[0],l=a[1];a=k-c+h;d=k-c-h;g=k+c-h;c=k+c+h;var h=l-f-b,k=l-f+b,m=l+f+b,f=l+f-b;return ib(Math.min(a,d,g,c),Math.min(h,k,m,f),Math.max(a,d,g,c),Math.max(h,k,m,f),e)}function rb(a){return a[3]-a[1]}function vb(a,b){var c=db();wb(a,b)&&(c[0]=a[0]>b[0]?a[0]:b[0],c[1]=a[1]>b[1]?a[1]:b[1],c[2]=a[2]<b[2]?a[2]:b[2],c[3]=a[3]<b[3]?a[3]:b[3]);return c}function xb(a){return[a[0],a[3]]} + function qb(a){return a[2]-a[0]}function wb(a,b){return a[0]<=b[2]&&a[2]>=b[0]&&a[1]<=b[3]&&a[3]>=b[1]}function pb(a){return a[2]<a[0]||a[3]<a[1]};function yb(){return!0}function zb(){return!1};/* + + Latitude/longitude spherical geodesy formulae taken from + http://www.movable-type.co.uk/scripts/latlong.html + Licensed under CC-BY-3.0. + */ + function Ab(a){this.radius=a}function Bb(a,b){var c=a[1]*Math.PI/180,d=b[1]*Math.PI/180,e=(d-c)/2,f=(b[0]-a[0])*Math.PI/180/2,c=Math.sin(e)*Math.sin(e)+Math.sin(f)*Math.sin(f)*Math.cos(c)*Math.cos(d);return 2*Cb.radius*Math.atan2(Math.sqrt(c),Math.sqrt(1-c))} + Ab.prototype.offset=function(a,b,c){var d=a[1]*Math.PI/180;b/=this.radius;var e=Math.asin(Math.sin(d)*Math.cos(b)+Math.cos(d)*Math.sin(b)*Math.cos(c));return[180*(a[0]*Math.PI/180+Math.atan2(Math.sin(c)*Math.sin(b)*Math.cos(d),Math.cos(b)-Math.sin(d)*Math.sin(e)))/Math.PI,180*e/Math.PI]};var Cb=new Ab(6370997);var Db={};Db.degrees=2*Math.PI*Cb.radius/360;Db.ft=.3048;Db.m=1;Db["us-ft"]=1200/3937; + function Eb(a){this.ya=a.code;this.a=a.units;this.h=void 0!==a.extent?a.extent:null;this.c=void 0!==a.global?a.global:!1;this.b=!(!this.c||!this.h);this.i=void 0!==a.getPointResolution?a.getPointResolution:this.j;this.f=null;this.g=a.metersPerUnit;var b=Fb,c=a.code,d=Gb||K.proj4;if("function"==typeof d&&void 0===b[c]){var e=d.defs(c);if(void 0!==e){void 0===a.metersPerUnit&&(this.g=e.to_meter);void 0===a.units&&(this.a=e.units);var f,g;for(f in b)if(a=d.defs(f),void 0!==a)if(b=Hb(f),a===e)Ib([b,this]); + else{g=d(f,c);a=g.forward;g=g.inverse;var b=Hb(b),h=Hb(this);Jb(b,h,Kb(a));Jb(h,b,Kb(g))}}}}Eb.prototype.l=function(){return this.ya};Eb.prototype.G=function(){return this.h};function Lb(a){return a.g||Db[a.a]}Eb.prototype.j=function(a,b){if("degrees"==this.a)return a;var c=Mb(this,Hb("EPSG:4326")),d=[b[0]-a/2,b[1],b[0]+a/2,b[1],b[0],b[1]-a/2,b[0],b[1]+a/2],d=c(d,d,2),c=(Bb(d.slice(0,2),d.slice(2,4))+Bb(d.slice(4,6),d.slice(6,8)))/2,d=Lb(this);void 0!==d&&(c/=d);return c}; + Eb.prototype.getPointResolution=function(a,b){return this.i(a,b)};var Fb={},Ob={},Gb=null;function Ib(a){Pb(a);a.forEach(function(b){a.forEach(function(a){b!==a&&Jb(b,a,Qb)})})}function Rb(a){Fb[a.ya]=a;Jb(a,a,Qb)}function Pb(a){var b=[];a.forEach(function(a){b.push(Rb(a))})}function Sb(a){return a?"string"===typeof a?Hb(a):a:Hb("EPSG:3857")}function Jb(a,b,c){a=a.ya;b=b.ya;a in Ob||(Ob[a]={});Ob[a][b]=c} + function Kb(a){return function(b,c,d){var e=b.length;d=void 0!==d?d:2;c=void 0!==c?c:Array(e);var f,g;for(g=0;g<e;g+=d)for(f=a([b[g],b[g+1]]),c[g]=f[0],c[g+1]=f[1],f=d-1;2<=f;--f)c[g+f]=b[g+f];return c}}function Hb(a){var b;if(a instanceof Eb)b=a;else if("string"===typeof a){b=Fb[a];var c=Gb||K.proj4;void 0===b&&"function"==typeof c&&void 0!==c.defs(a)&&(b=new Eb({code:a}),Rb(b))}return b||null}function Tb(a,b){if(a===b)return!0;var c=a.a===b.a;return a.ya===b.ya?c:Mb(a,b)===Qb&&c} + function Ub(a,b){var c=Hb(a),d=Hb(b);return Mb(c,d)}function Mb(a,b){var c=a.ya,d=b.ya,e;c in Ob&&d in Ob[c]&&(e=Ob[c][d]);void 0===e&&(e=Vb);return e}function Vb(a,b){if(void 0!==b&&a!==b){for(var c=0,d=a.length;c<d;++c)b[c]=a[c];a=b}return a}function Qb(a,b){var c;if(void 0!==b){c=0;for(var d=a.length;c<d;++c)b[c]=a[c];c=b}else c=a.slice();return c};function Wb(){V.call(this);this.j=db();this.s=-1;this.f={};this.i=this.g=0}B(Wb,V);Wb.prototype.G=function(a){this.s!=this.b&&(this.j=this.mb(this.j),this.s=this.b);var b=this.j;a?(a[0]=b[0],a[1]=b[1],a[2]=b[2],a[3]=b[3]):a=b;return a};Wb.prototype.transform=function(a,b){this.Hb(Ub(a,b));return this};function Xb(a,b,c,d,e,f){for(var g=f?f:[],h=0;b<c;b+=d){var k=a[b],l=a[b+1];g[h++]=e[0]*k+e[2]*l+e[4];g[h++]=e[1]*k+e[3]*l+e[5]}f&&g.length!=h&&(g.length=h);return g};function Yb(){Wb.call(this);this.c="XY";this.A=2;this.o=null}B(Yb,Wb);function Zb(a){var b;"XY"==a?b=2:"XYZ"==a||"XYM"==a?b=3:"XYZM"==a&&(b=4);return b}n=Yb.prototype;n.mb=function(a){var b=this.o,c=this.o.length,d=this.A;a=jb(a);return nb(a,b,0,c,d)};n.Rb=function(a){this.i!=this.b&&(qa(this.f),this.g=0,this.i=this.b);if(0>a||0!==this.g&&a<=this.g)return this;var b=a.toString();if(this.f.hasOwnProperty(b))return this.f[b];var c=this.Qa(a);if(c.o.length<this.o.length)return this.f[b]=c;this.g=a;return this}; + n.Qa=function(){return this};function $b(a,b,c){a.A=Zb(b);a.c=b;a.o=c}function ac(a,b,c,d){if(b)c=Zb(b);else{for(b=0;b<d;++b){if(0===c.length){a.c="XY";a.A=2;return}c=c[0]}c=c.length;var e;2==c?e="XY":3==c?e="XYZ":4==c&&(e="XYZM");b=e}a.c=b;a.A=c}n.Hb=function(a){this.o&&(a(this.o,this.o,this.A),this.w())}; + n.rotate=function(a,b){var c=this.o;if(c){for(var d=c.length,e=this.A,f=c?c:[],g=Math.cos(a),h=Math.sin(a),k=b[0],l=b[1],m=0,p=0;p<d;p+=e){var q=c[p]-k,u=c[p+1]-l;f[m++]=k+q*g-u*h;f[m++]=l+q*h+u*g;for(q=p+2;q<p+e;++q)f[m++]=c[q]}c&&f.length!=m&&(f.length=m);this.w()}}; + n.scale=function(a,b,c){var d=b;void 0===d&&(d=a);var e=c;e||(e=tb(this.G()));if(c=this.o){b=c.length;for(var f=this.A,g=c?c:[],h=e[0],e=e[1],k=0,l=0;l<b;l+=f){var m=c[l]-h,p=c[l+1]-e;g[k++]=h+a*m;g[k++]=e+d*p;for(m=l+2;m<l+f;++m)g[k++]=c[m]}c&&g.length!=k&&(g.length=k);this.w()}};n.translate=function(a,b){var c=this.o;if(c){var d=c.length,e=this.A,f=c?c:[],g=0,h,k;for(h=0;h<d;h+=e)for(f[g++]=c[h]+a,f[g++]=c[h+1]+b,k=h+2;k<h+e;++k)f[g++]=c[k];c&&f.length!=g&&(f.length=g);this.w()}};function bc(a,b){var c=0,d,e;d=0;for(e=b.length;d<e;++d)a[c++]=b[d];return c}function cc(a,b,c,d){var e,f;e=0;for(f=c.length;e<f;++e){var g=c[e],h;for(h=0;h<d;++h)a[b++]=g[h]}return b}function dc(a,b,c,d,e){e=e?e:[];var f=0,g,h;g=0;for(h=c.length;g<h;++g)b=cc(a,b,c[g],d),e[f++]=b;e.length=f;return e};function ec(a,b,c,d,e){e=void 0!==e?e:[];for(var f=0;b<c;b+=d)e[f++]=a.slice(b,b+d);e.length=f;return e}function fc(a,b,c,d,e){e=void 0!==e?e:[];var f=0,g,h;g=0;for(h=c.length;g<h;++g){var k=c[g];e[f++]=ec(a,b,k,d,e[f]);b=k}e.length=f;return e};function gc(a,b,c,d,e,f,g){var h=(c-b)/d;if(3>h){for(;b<c;b+=d)f[g++]=a[b],f[g++]=a[b+1];return g}var k=Array(h);k[0]=1;k[h-1]=1;c=[b,c-d];for(var l=0,m;0<c.length;){var p=c.pop(),q=c.pop(),u=0,w=a[q],r=a[q+1],x=a[p],D=a[p+1];for(m=q+d;m<p;m+=d){var t,z=a[m];t=a[m+1];var C=w,E=r,v=x-C,H=D-E;if(0!==v||0!==H){var G=((z-C)*v+(t-E)*H)/(v*v+H*H);1<G?(C=x,E=D):0<G&&(C+=v*G,E+=H*G)}z=C-z;t=E-t;t=z*z+t*t;t>u&&(l=m,u=t)}u>e&&(k[(l-b)/d]=1,q+d<l&&c.push(q,l),l+d<p&&c.push(l,p))}for(m=0;m<h;++m)k[m]&&(f[g++]= + a[b+m*d],f[g++]=a[b+m*d+1]);return g} + function hc(a,b,c,d,e,f,g,h){var k,l;k=0;for(l=c.length;k<l;++k){var m=c[k];a:{var p=a,q=m,u=d,w=e,r=f;if(b!=q){var x=w*Math.round(p[b]/w),D=w*Math.round(p[b+1]/w);b+=u;r[g++]=x;r[g++]=D;var t,z;do if(t=w*Math.round(p[b]/w),z=w*Math.round(p[b+1]/w),b+=u,b==q){r[g++]=t;r[g++]=z;break a}while(t==x&&z==D);for(;b<q;){var C,E;C=w*Math.round(p[b]/w);E=w*Math.round(p[b+1]/w);b+=u;if(C!=t||E!=z){var v=t-x,H=z-D,G=C-x,A=E-D;v*A==H*G&&(0>v&&G<v||v==G||0<v&&G>v)&&(0>H&&A<H||H==A||0<H&&A>H)||(r[g++]=t,r[g++]= + z,x=t,D=z);t=C;z=E}}r[g++]=t;r[g++]=z}}h.push(g);b=m}return g};function ic(a,b){Yb.call(this);this.ea(a,b)}B(ic,Yb);n=ic.prototype;n.clone=function(){var a=new ic(null);$b(a,this.c,this.o.slice());a.w();return a};n.za=function(){return ec(this.o,0,this.o.length,this.A)};n.Qa=function(a){var b=[];b.length=gc(this.o,0,this.o.length,this.A,a,b,0);a=new ic(null);$b(a,"XY",b);a.w();return a};n.$=function(){return"LinearRing"};n.ea=function(a,b){a?(ac(this,b,a,1),this.o||(this.o=[]),this.o.length=cc(this.o,0,a,this.A)):$b(this,"XY",null);this.w()};function jc(a,b){Yb.call(this);this.ea(a,b)}B(jc,Yb);n=jc.prototype;n.clone=function(){var a=new jc(null);$b(a,this.c,this.o.slice());a.w();return a};n.za=function(){return this.o?this.o.slice():[]};n.mb=function(a){return kb(this.o,a)};n.$=function(){return"Point"};n.ea=function(a,b){a?(ac(this,b,a,0),this.o||(this.o=[]),this.o.length=bc(this.o,a)):$b(this,"XY",null);this.w()};function kc(a,b,c,d,e,f){for(var g=!1,h=a[c-d],k=a[c-d+1];b<c;b+=d){var l=a[b],m=a[b+1];k>f!=m>f&&e<(l-h)*(f-k)/(m-k)+h&&(g=!g);h=l;k=m}return g};function lc(a,b,c,d,e,f,g){var h,k,l,m,p,q=e[f+1],u=[],w=c[0];l=a[w-d];p=a[w-d+1];for(h=b;h<w;h+=d){m=a[h];k=a[h+1];if(q<=p&&k<=q||p<=q&&q<=k)l=(q-p)/(k-p)*(m-l)+l,u.push(l);l=m;p=k}w=NaN;p=-Infinity;u.sort(Ma);l=u[0];h=1;for(k=u.length;h<k;++h){m=u[h];var r=Math.abs(m-l);if(r>p){l=(l+m)/2;var x;a:if(0!==c.length&&kc(a,b,c[0],d,l,q)){var D;x=1;for(D=c.length;x<D;++x)if(kc(a,c[x-1],c[x],d,l,q)){x=!1;break a}x=!0}else x=!1;x&&(w=l,p=r)}l=m}isNaN(w)&&(w=e[f]);return g?(g.push(w,q),g):[w,q]};function mc(a,b,c,d){for(var e=0,f=a[c-d],g=a[c-d+1];b<c;b+=d)var h=a[b],k=a[b+1],e=e+(h-f)*(k+g),f=h,g=k;return 0<e}function nc(a,b,c,d){var e=0;d=void 0!==d?d:!1;var f,g;f=0;for(g=b.length;f<g;++f){var h=b[f],e=mc(a,e,h,c);if(0===f){if(d&&e||!d&&!e)return!1}else if(d&&!e||!d&&e)return!1;e=h}return!0} + function oc(a,b,c,d,e){e=void 0!==e?e:!1;var f,g;f=0;for(g=c.length;f<g;++f){var h=c[f],k=mc(a,b,h,d);if(0===f?e&&k||!e&&!k:e&&!k||!e&&k)for(var k=a,l=h,m=d;b<l-m;){var p;for(p=0;p<m;++p){var q=k[b+p];k[b+p]=k[l-m+p];k[l-m+p]=q}b+=m;l-=m}b=h}return b}function pc(a,b,c,d){var e=0,f,g;f=0;for(g=b.length;f<g;++f)e=oc(a,e,b[f],c,d);return e};function qc(a,b){Yb.call(this);this.ja=[];this.h=-1;this.v=null;this.u=-1;this.a=null;this.ea(a,b)}B(qc,Yb);n=qc.prototype;n.clone=function(){var a=new qc(null);rc(a,this.c,this.o.slice(),this.ja.slice());return a};n.za=function(a){var b;void 0!==a?(b=sc(this).slice(),oc(b,0,this.ja,this.A,a)):b=this.o;return fc(b,0,this.ja,this.A)};function tc(a){if(a.h!=a.b){var b=tb(a.G());a.v=lc(sc(a),0,a.ja,a.A,b,0);a.h=a.b}return a.v} + function sc(a){if(a.u!=a.b){var b=a.o;nc(b,a.ja,a.A)?a.a=b:(a.a=b.slice(),a.a.length=oc(a.a,0,a.ja,a.A));a.u=a.b}return a.a}n.Qa=function(a){var b=[],c=[];b.length=hc(this.o,0,this.ja,this.A,Math.sqrt(a),b,0,c);a=new qc(null);rc(a,"XY",b,c);return a};n.$=function(){return"Polygon"};n.ea=function(a,b){if(a){ac(this,b,a,2);this.o||(this.o=[]);var c=dc(this.o,0,a,this.A,this.ja);this.o.length=0===c.length?0:c[c.length-1];this.w()}else rc(this,"XY",null,this.ja)}; + function rc(a,b,c,d){$b(a,b,c);a.ja=d;a.w()};function uc(a){V.call(this);a=a||{};this.c=[0,0];var b={};b[vc]=void 0!==a.center?a.center:null;this.j=Sb(a.projection);var c,d,e,f=void 0!==a.minZoom?a.minZoom:0;c=void 0!==a.maxZoom?a.maxZoom:28;var g=void 0!==a.zoomFactor?a.zoomFactor:2;if(void 0!==a.resolutions)c=a.resolutions,d=c[0],e=c[c.length-1],c=Va(c);else{d=Sb(a.projection);e=d.G();var h=(e?Math.max(qb(e),rb(e)):360*Db.degrees/Lb(d))/256/Math.pow(2,0),k=h/Math.pow(2,28);d=a.maxResolution;void 0!==d?f=0:d=h/Math.pow(g,f);e=a.minResolution; + void 0===e&&(e=void 0!==a.maxZoom?void 0!==a.maxResolution?d/Math.pow(g,c):h/Math.pow(g,c):k);c=f+Math.floor(Math.log(d/e)/Math.log(g));e=d/Math.pow(g,c-f);c=Wa(g,d,c-f)}this.f=d;this.i=e;this.s=g;this.g=a.resolutions;this.h=f;f=void 0!==a.extent?ma(a.extent):na;(void 0!==a.enableRotation?a.enableRotation:1)?(g=a.constrainRotation,g=void 0===g||!0===g?$a():!1===g?Ya:"number"===typeof g?Za(g):Ya):g=Xa;this.a=new oa(f,c,g);void 0!==a.resolution?b[wc]=a.resolution:void 0!==a.zoom&&(b[wc]=this.constrainResolution(this.f, + a.zoom-this.h));b[xc]=void 0!==a.rotation?a.rotation:0;this.l(b)}B(uc,V);n=uc.prototype;n.constrainResolution=function(a,b,c){return this.a.resolution(a,b||0,c||0)};n.constrainRotation=function(a,b){return this.a.rotation(a,b||0)};n.qa=function(){return this.get(vc)};n.lc=function(a){var b=this.qa();L(b,1);var c=this.O();L(void 0!==c,2);var d=this.get(xc);L(void 0!==d,3);return ub(b,c,d,a)};n.ia=function(){return this.j};n.O=function(){return this.get(wc)}; + function yc(a,b){return Math.max(qb(a)/b[0],rb(a)/b[1])}n.T=function(){var a=this.qa(),b=this.ia(),c=this.O(),d=this.get(xc);return{center:a.slice(),projection:void 0!==b?b:null,resolution:c,rotation:d}};n.rd=function(){var a,b=this.O();if(void 0!==b&&b>=this.i&&b<=this.f){a=this.h||0;var c,d;if(this.g){d=Na(this.g,b,1);a+=d;if(d==this.g.length-1)return a;c=this.g[d];d=c/this.g[d+1]}else c=this.f,d=this.s;a+=Math.log(c/b)/Math.log(d)}return a}; + n.md=function(a,b,c){if(!(a instanceof Yb)){L(Array.isArray(a),24);L(!pb(a),25);var d=a[0],e=a[1],f=a[2],g=a[3],d=[d,e,d,g,f,g,f,e,d,e],e=new qc(null);rc(e,"XY",d,[d.length]);a=e}d=c||{};c=void 0!==d.padding?d.padding:[0,0,0,0];var g=void 0!==d.constrainResolution?d.constrainResolution:!0,e=void 0!==d.nearest?d.nearest:!1,h;void 0!==d.minResolution?h=d.minResolution:void 0!==d.maxZoom?h=this.constrainResolution(this.f,d.maxZoom-this.h,0):h=0;var k=a.o,f=this.get(xc),d=Math.cos(-f),f=Math.sin(-f), + l=Infinity,m=Infinity,p=-Infinity,q=-Infinity;a=a.A;for(var u=0,w=k.length;u<w;u+=a)var r=k[u]*d-k[u+1]*f,x=k[u]*f+k[u+1]*d,l=Math.min(l,r),m=Math.min(m,x),p=Math.max(p,r),q=Math.max(q,x);b=yc([l,m,p,q],[b[0]-c[1]-c[3],b[1]-c[0]-c[2]]);b=isNaN(b)?h:Math.max(b,h);g&&(h=this.constrainResolution(b,0,0),!e&&h<b&&(h=this.constrainResolution(h,-1,0)),b=h);this.set(wc,b);f=-f;h=(l+p)/2+(c[1]-c[3])/2*b;b=(m+q)/2+(c[0]-c[2])/2*b;this.xa([h*d-b*f,b*d+h*f])}; + n.rotate=function(a,b){if(void 0!==b){var c,d=this.qa();void 0!==d&&(c=[d[0]-b[0],d[1]-b[1]],bb(c,a-this.get(xc)),ab(c,b));this.xa(c)}this.set(xc,a)};n.xa=function(a){this.set(vc,a)};function zc(a,b){a.c[1]+=b}n.ye=function(a){a=this.constrainResolution(this.f,a-this.h,0);this.set(wc,a)};var vc="center",wc="resolution",xc="rotation";function Ac(a){return 1-Math.pow(1-a,3)}function Bc(a){return 3*a*a-2*a*a*a}function Cc(a){return a};function Dc(a){var b=a.source,c=a.start?a.start:Date.now(),d=b[0],e=b[1],f=void 0!==a.duration?a.duration:1E3,g=a.easing?a.easing:Bc;return function(a,b){if(b.time<c)return b.animate=!0,b.viewHints[0]+=1,!0;if(b.time<c+f){var l=1-g((b.time-c)/f),m=d-b.viewState.center[0],p=e-b.viewState.center[1];b.animate=!0;b.viewState.center[0]+=l*m;b.viewState.center[1]+=l*p;b.viewHints[0]+=1;return!0}return!1}} + function Ec(a){var b=a.rotation?a.rotation:0,c=a.start?a.start:Date.now(),d=void 0!==a.duration?a.duration:1E3,e=a.easing?a.easing:Bc,f=a.anchor?a.anchor:null;return function(a,h){if(h.time<c)return h.animate=!0,h.viewHints[0]+=1,!0;if(h.time<c+d){var k=1-e((h.time-c)/d),k=(b-h.viewState.rotation)*k;h.animate=!0;h.viewState.rotation+=k;if(f){var l=h.viewState.center;l[0]-=f[0];l[1]-=f[1];bb(l,k);ab(l,f)}h.viewHints[0]+=1;return!0}return!1}} + function Fc(a){var b=a.resolution,c=a.start?a.start:Date.now(),d=void 0!==a.duration?a.duration:1E3,e=a.easing?a.easing:Bc;return function(a,g){if(g.time<c)return g.animate=!0,g.viewHints[0]+=1,!0;if(g.time<c+d){var h=1-e((g.time-c)/d),k=b-g.viewState.resolution;g.animate=!0;g.viewState.resolution+=h*k;g.viewHints[0]+=1;return!0}return!1}};function Gc(a,b,c,d){this.H=a;this.I=b;this.J=c;this.L=d}function Hc(a,b,c){return a.H<=b&&b<=a.I&&a.J<=c&&c<=a.L}function Ic(a,b){return a.H==b.H&&a.J==b.J&&a.I==b.I&&a.L==b.L}function Jc(a,b){return a.H<=b.I&&a.I>=b.H&&a.J<=b.L&&a.L>=b.J};function Kc(a,b,c){void 0===c&&(c=[0,0]);c[0]=a[0]*b+.5|0;c[1]=a[1]*b+.5|0;return c}function Lc(a,b){if(Array.isArray(a))return a;void 0===b?b=[a,a]:b[0]=b[1]=a;return b};function Mc(a){this.minZoom=void 0!==a.minZoom?a.minZoom:0;this.b=a.resolutions;L(Ua(this.b,function(a,b){return b-a}),17);this.maxZoom=this.b.length-1;this.c=void 0!==a.origin?a.origin:null;this.f=null;void 0!==a.origins&&(this.f=a.origins,L(this.f.length==this.b.length,20));var b=a.extent;void 0===b||this.c||this.f||(this.c=xb(b));L(!this.c&&this.f||this.c&&!this.f,18);this.g=null;void 0!==a.tileSizes&&(this.g=a.tileSizes,L(this.g.length==this.b.length,19));this.h=void 0!==a.tileSize?a.tileSize: + this.g?null:256;L(!this.h&&this.g||this.h&&!this.g,22);this.i=void 0!==b?b:null;this.a=null;this.l=[0,0];void 0!==a.sizes?this.a=a.sizes.map(function(a){return new Gc(Math.min(0,a[0]),Math.max(a[0]-1,-1),Math.min(0,a[1]),Math.max(a[1]-1,-1))},this):b&&Nc(this,b)}var Oc=[0,0,0];function Pc(a,b,c,d,e){e=Qc(a,b,e);for(b=b[0]-1;b>=a.minZoom;){if(c.call(null,b,Rc(a,e,b,d)))return!0;--b}return!1}Mc.prototype.G=function(){return this.i};Mc.prototype.pa=function(a){return this.c?this.c:this.f[a]}; + Mc.prototype.O=function(a){return this.b[a]};function Sc(a,b,c,d){return b[0]<a.maxZoom?(d=Qc(a,b,d),Rc(a,d,b[0]+1,c)):null}function Tc(a,b,c,d){Uc(a,b[0],b[1],c,!1,Oc);var e=Oc[1],f=Oc[2];Uc(a,b[2],b[3],c,!0,Oc);a=Oc[1];b=Oc[2];void 0!==d?(d.H=e,d.I=a,d.J=f,d.L=b):d=new Gc(e,a,f,b);return d}function Rc(a,b,c,d){c=a.O(c);return Tc(a,b,c,d)}function Vc(a,b){var c=a.pa(b[0]),d=a.O(b[0]),e=Lc(Wc(a,b[0]),a.l);return[c[0]+(b[1]+.5)*e[0]*d,c[1]+(b[2]+.5)*e[1]*d]} + function Qc(a,b,c){var d=a.pa(b[0]),e=a.O(b[0]);a=Lc(Wc(a,b[0]),a.l);var f=d[0]+b[1]*a[0]*e;b=d[1]+b[2]*a[1]*e;return ib(f,b,f+a[0]*e,b+a[1]*e,c)}function Uc(a,b,c,d,e,f){var g=Xc(a,d),h=d/a.O(g),k=a.pa(g);a=Lc(Wc(a,g),a.l);b=h*Math.floor((b-k[0])/d+(e?.5:0))/a[0];c=h*Math.floor((c-k[1])/d+(e?0:.5))/a[1];e?(b=Math.ceil(b)-1,c=Math.ceil(c)-1):(b=Math.floor(b),c=Math.floor(c));e=b;void 0!==f?(f[0]=g,f[1]=e,f[2]=c):f=[g,e,c];return f}function Yc(a,b,c,d){c=a.O(c);return Uc(a,b[0],b[1],c,!1,d)} + function Wc(a,b){return a.h?a.h:a.g[b]}function Xc(a,b,c){return ia(Na(a.b,b,c||0),a.minZoom,a.maxZoom)}function Nc(a,b){for(var c=a.b.length,d=Array(c),e=a.minZoom;e<c;++e)d[e]=Rc(a,b,e);a.a=d};function Zc(a){var b=a.f;if(!b){var b=$c(a),c=ad(b,void 0,void 0),b=new Mc({extent:b,origin:xb(b),resolutions:c,tileSize:void 0});a.f=b}return b}function ad(a,b,c){b=void 0!==b?b:42;var d=rb(a);a=qb(a);c=Lc(void 0!==c?c:256);c=Math.max(a/c[0],d/c[1]);b+=1;d=Array(b);for(a=0;a<b;++a)d[a]=c/Math.pow(2,a);return d}function $c(a){a=Hb(a);var b=a.G();b||(a=180*Db.degrees/Lb(a),b=ib(-a,-a,a,a));return b};function bd(a){this.a=a.html;this.b=a.tileRanges?a.tileRanges:null};function cd(a){V.call(this);this.a=a?a:[];dd(this)}B(cd,V);cd.prototype.clear=function(){for(;0<this.get("length");)this.pop()};function ed(a,b,c){a.a.forEach(b,c)}cd.prototype.pop=function(){return fd(this,this.get("length")-1)};cd.prototype.push=function(a){var b=this.a.length;this.a.splice(b,0,a);dd(this);U(this,new gd(hd,a));return b};cd.prototype.remove=function(a){var b=this.a,c,d;c=0;for(d=b.length;c<d;++c)if(b[c]===a)return fd(this,c)}; + function fd(a,b){var c=a.a[b];a.a.splice(b,1);dd(a);U(a,new gd(id,c));return c}function dd(a){a.set("length",a.a.length)}var hd="add",id="remove";function gd(a,b){T.call(this,a);this.element=b}B(gd,T);var jd=/^#(?:[0-9a-f]{3}){1,2}$/i,kd=/^(?:rgb)?\((0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2})\)$/i,ld=/^(?:rgba)?\((0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2}),\s?(0|1|0\.\d{0,10})\)$/i,md=/^([a-z]*)$/i;function nd(a){if("string"!==typeof a){var b=a[0];b!=(b|0)&&(b=b+.5|0);var c=a[1];c!=(c|0)&&(c=c+.5|0);var d=a[2];d!=(d|0)&&(d=d+.5|0);a="rgba("+b+","+c+","+d+","+(void 0===a[3]?1:a[3])+")"}return a} + var pd=function(){var a={},b=0;return function(c){var d;if(a.hasOwnProperty(c))d=a[c];else{if(1024<=b){d=0;for(var e in a)0===(d++&3)&&(delete a[e],--b)}d=c;var f,g;md.exec(d)&&(e=document.createElement("div"),e.style.color=d,document.body.appendChild(e),d=window.getComputedStyle(e).color,document.body.removeChild(e));jd.exec(d)?(f=d.length-1,L(3==f||6==f,54),g=3==f?1:2,f=parseInt(d.substr(1+0*g,g),16),e=parseInt(d.substr(1+1*g,g),16),d=parseInt(d.substr(1+2*g,g),16),1==g&&(f=(f<<4)+f,e=(e<<4)+e, + d=(d<<4)+d),f=[f,e,d,1]):(g=ld.exec(d))?(f=Number(g[1]),e=Number(g[2]),d=Number(g[3]),g=Number(g[4]),f=od([f,e,d,g])):(g=kd.exec(d))?(f=Number(g[1]),e=Number(g[2]),d=Number(g[3]),f=od([f,e,d,1])):L(!1,14);d=f;a[c]=d;++b}return d}}();function od(a){var b=[];b[0]=ia(a[0]+.5|0,0,255);b[1]=ia(a[1]+.5|0,0,255);b[2]=ia(a[2]+.5|0,0,255);b[3]=ia(a[3],0,1);return b};function qd(a){return"string"===typeof a||a instanceof CanvasPattern||a instanceof CanvasGradient?a:nd(a)};var rd=String.prototype.trim?function(a){return a.trim()}:function(a){return a.replace(/^[\s\xa0]+|[\s\xa0]+$/g,"")};function sd(a,b){return a<b?-1:a>b?1:0};function td(a,b,c){return 2>=arguments.length?Array.prototype.slice.call(a,b):Array.prototype.slice.call(a,b,c)};var ud;a:{var vd=aa.navigator;if(vd){var wd=vd.userAgent;if(wd){ud=wd;break a}}ud=""}function xd(a){return-1!=ud.indexOf(a)};var yd=xd("Opera"),zd=xd("Trident")||xd("MSIE"),Ad=xd("Edge"),Bd=xd("Gecko")&&!(-1!=ud.toLowerCase().indexOf("webkit")&&!xd("Edge"))&&!(xd("Trident")||xd("MSIE"))&&!xd("Edge"),Cd=-1!=ud.toLowerCase().indexOf("webkit")&&!xd("Edge"),Dd; + a:{var Ed="",Fd=function(){var a=ud;if(Bd)return/rv\:([^\);]+)(\)|;)/.exec(a);if(Ad)return/Edge\/([\d\.]+)/.exec(a);if(zd)return/\b(?:MSIE|rv)[: ]([^\);]+)(\)|;)/.exec(a);if(Cd)return/WebKit\/(\S+)/.exec(a);if(yd)return/(?:Version)[ \/]?(\S+)/.exec(a)}();Fd&&(Ed=Fd?Fd[1]:"");if(zd){var Gd,Hd=aa.document;Gd=Hd?Hd.documentMode:void 0;if(null!=Gd&&Gd>parseFloat(Ed)){Dd=String(Gd);break a}}Dd=Ed}var Id={};function Jd(){return[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]}function Kd(a,b){a[0]=b[0];a[1]=b[1];a[4]=b[2];a[5]=b[3];a[12]=b[4];a[13]=b[5];return a};var Ld=Jd();function Md(a,b){var c=document.createElement("CANVAS");a&&(c.width=a);b&&(c.height=b);return c.getContext("2d")} + var Nd=function(){var a;return function(){if(void 0===a){var b=document.createElement("P"),c,d={webkitTransform:"-webkit-transform",OTransform:"-o-transform",msTransform:"-ms-transform",MozTransform:"-moz-transform",transform:"transform"};document.body.appendChild(b);for(var e in d)e in b.style&&(b.style[e]="translate(1px,1px)",c=K.getComputedStyle(b).getPropertyValue(d[e]));document.body.removeChild(b);a=c&&"none"!==c}return a}}(),Od=function(){var a;return function(){if(void 0===a){var b=document.createElement("P"), + c,d={webkitTransform:"-webkit-transform",OTransform:"-o-transform",msTransform:"-ms-transform",MozTransform:"-moz-transform",transform:"transform"};document.body.appendChild(b);for(var e in d)e in b.style&&(b.style[e]="translate3d(1px,1px,1px)",c=K.getComputedStyle(b).getPropertyValue(d[e]));document.body.removeChild(b);a=c&&"none"!==c}return a}}(); + function Pd(a,b){var c=a.style;c.WebkitTransform=b;c.MozTransform=b;c.b=b;c.msTransform=b;c.transform=b;if((c=zd)&&!(c=Id["9.0"])){for(var c=0,d=rd(String(Dd)).split("."),e=rd("9.0").split("."),f=Math.max(d.length,e.length),g=0;0==c&&g<f;g++){var h=d[g]||"",k=e[g]||"",l=RegExp("(\\d*)(\\D*)","g"),m=RegExp("(\\d*)(\\D*)","g");do{var p=l.exec(h)||["","",""],q=m.exec(k)||["","",""];if(0==p[0].length&&0==q[0].length)break;c=sd(0==p[1].length?0:parseInt(p[1],10),0==q[1].length?0:parseInt(q[1],10))||sd(0== + p[2].length,0==q[2].length)||sd(p[2],q[2])}while(0==c)}c=Id["9.0"]=0<=c}c&&(a.style.transformOrigin="0 0")}function Qd(a,b){var c;if(Od()){var d=Kd(Ld,b),e=Array(16);for(c=0;16>c;++c)e[c]=d[c].toFixed(6);Pd(a,"matrix3d("+e.join(",")+")")}else if(Nd()){d=Array(6);for(c=0;6>c;++c)d[c]=b[c].toFixed(6);Pd(a,"matrix("+d.join(",")+")")}else a.style.left=Math.round(b[4])+"px",a.style.top=Math.round(b[5])+"px"}function Rd(a,b){var c=b.parentNode;c&&c.replaceChild(a,b)} + function Sd(a){a&&a.parentNode&&a.parentNode.removeChild(a)};function Td(a,b,c){T.call(this,a);this.map=b;this.frameState=void 0!==c?c:null}B(Td,T);function Ud(a){V.call(this);this.element=a.element?a.element:null;this.f=this.D=null;this.i=[];this.render=a.render?a.render:I;a.target&&(a=a.target,this.D="string"===typeof a?document.getElementById(a):a)}B(Ud,V);Ud.prototype.R=function(){Sd(this.element);V.prototype.R.call(this)}; + Ud.prototype.setMap=function(a){this.f&&Sd(this.element);for(var b=0,c=this.i.length;b<c;++b)M(this.i[b]);this.i.length=0;if(this.f=a)(this.D?this.D:a.j).appendChild(this.element),this.render!==I&&this.i.push(R(a,"postrender",this.render,this)),a.render()};function Vd(a){a=a?a:{};this.B=document.createElement("UL");this.j=document.createElement("LI");this.B.appendChild(this.j);this.j.style.display="none";this.g=void 0!==a.collapsed?a.collapsed:!0;this.v=void 0!==a.collapsible?a.collapsible:!0;this.v||(this.g=!1);var b=void 0!==a.className?a.className:"ol-attribution",c=void 0!==a.tipLabel?a.tipLabel:"Attributions",d=void 0!==a.collapseLabel?a.collapseLabel:"\u00bb";"string"===typeof d?(this.h=document.createElement("span"),this.h.textContent=d):this.h= + d;d=void 0!==a.label?a.label:"i";"string"===typeof d?(this.s=document.createElement("span"),this.s.textContent=d):this.s=d;var e=this.v&&!this.g?this.h:this.s,d=document.createElement("button");d.setAttribute("type","button");d.title=c;d.appendChild(e);R(d,"click",this.P,this);c=document.createElement("div");c.className=b+" ol-unselectable ol-control"+(this.g&&this.v?" ol-collapsed":"")+(this.v?"":" ol-uncollapsible");c.appendChild(this.B);c.appendChild(d);Ud.call(this,{element:c,render:a.render? + a.render:Wd,target:a.target});this.u=!0;this.c={};this.a={};this.N={}}B(Vd,Ud); + function Wd(a){if(a=a.frameState){var b,c,d,e,f,g,h,k,l,m,p,q=a.layerStatesArray,u=pa({},a.attributions),w={},r=a.viewState.projection;c=0;for(b=q.length;c<b;c++)if(g=q[c].layer.da())if(m=J(g).toString(),l=g.h)for(d=0,e=l.length;d<e;d++)if(h=l[d],k=J(h).toString(),!(k in u)){if(f=a.usedTiles[m]){var x=g.sa(r);a:{p=h;var D=r;if(p.b){var t,z,C,E=void 0;for(E in f)if(E in p.b){C=f[E];var v;t=0;for(z=p.b[E].length;t<z;++t){v=p.b[E][t];if(Jc(v,C)){p=!0;break a}var H=Rc(x,$c(D),parseInt(E,10)),G=H.I-H.H+ + 1;if(C.H<H.H||C.I>H.I)if(Jc(v,new Gc(la(C.H,G),la(C.I,G),C.J,C.L))||C.I-C.H+1>G&&Jc(v,H)){p=!0;break a}}}p=!1}else p=!0}}else p=!1;p?(k in w&&delete w[k],u[k]=h):w[k]=h}b=[u,w];c=b[0];b=b[1];for(var A in this.c)A in c?(this.a[A]||(this.c[A].style.display="",this.a[A]=!0),delete c[A]):A in b?(this.a[A]&&(this.c[A].style.display="none",delete this.a[A]),delete b[A]):(Sd(this.c[A]),delete this.c[A],delete this.a[A]);for(A in c)d=document.createElement("LI"),d.innerHTML=c[A].a,this.B.appendChild(d),this.c[A]= + d,this.a[A]=!0;for(A in b)d=document.createElement("LI"),d.innerHTML=b[A].a,d.style.display="none",this.B.appendChild(d),this.c[A]=d;A=!sa(this.a)||!sa(a.logos);this.u!=A&&(this.element.style.display=A?"":"none",this.u=A);A&&sa(this.a)?this.element.classList.add("ol-logo-only"):this.element.classList.remove("ol-logo-only");var F;a=a.logos;A=this.N;for(F in A)F in a||(Sd(A[F]),delete A[F]);for(var Q in a)b=a[Q],b instanceof HTMLElement&&(this.j.appendChild(b),A[Q]=b),Q in A||(F=new Image,F.src=Q,""=== + b?c=F:(c=document.createElement("a"),c.href=b,c.appendChild(F)),this.j.appendChild(c),A[Q]=c);this.j.style.display=sa(a)?"none":""}else this.u&&(this.element.style.display="none",this.u=!1)}Vd.prototype.P=function(a){a.preventDefault();this.element.classList.toggle("ol-collapsed");this.g?Rd(this.h,this.s):Rd(this.s,this.h);this.g=!this.g};function Xd(a){a=a?a:{};this.a=void 0!==a.className?a.className:"ol-full-screen";var b=void 0!==a.label?a.label:"\u2922";this.g="string"===typeof b?document.createTextNode(b):b;b=void 0!==a.labelActive?a.labelActive:"\u00d7";this.h="string"===typeof b?document.createTextNode(b):b;var c=a.tipLabel?a.tipLabel:"Toggle full-screen",b=document.createElement("button");b.className=this.a+"-"+Yd();b.setAttribute("type","button");b.title=c;b.appendChild(this.g);R(b,"click",this.v,this);c=document.createElement("div"); + c.className=this.a+" ol-unselectable ol-control "+(Zd()?"":"ol-unsupported");c.appendChild(b);Ud.call(this,{element:c,target:a.target});this.s=void 0!==a.keys?a.keys:!1;this.c=a.source}B(Xd,Ud); + Xd.prototype.v=function(a){a.preventDefault();Zd()&&(a=this.f)&&(Yd()?document.exitFullscreen?document.exitFullscreen():document.msExitFullscreen?document.msExitFullscreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.webkitExitFullscreen&&document.webkitExitFullscreen():(a=this.c?"string"===typeof this.c?document.getElementById(this.c):this.c:a.Ra(),this.s?a.mozRequestFullScreenWithKeys?a.mozRequestFullScreenWithKeys():a.webkitRequestFullscreen?a.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT): + $d(a):$d(a)))};Xd.prototype.j=function(){var a=this.element.firstElementChild,b=this.f;Yd()?(a.className=this.a+"-true",Rd(this.h,this.g)):(a.className=this.a+"-false",Rd(this.g,this.h));b&&b.yb()};Xd.prototype.setMap=function(a){Ud.prototype.setMap.call(this,a);a&&this.i.push(R(K.document,ae(),this.j,this))}; + function Zd(){var a=document.body;return!!(a.webkitRequestFullscreen||a.mozRequestFullScreen&&document.mozFullScreenEnabled||a.msRequestFullscreen&&document.msFullscreenEnabled||a.requestFullscreen&&document.fullscreenEnabled)}function Yd(){return!!(document.webkitIsFullScreen||document.mozFullScreen||document.msFullscreenElement||document.fullscreenElement)} + function $d(a){a.requestFullscreen?a.requestFullscreen():a.msRequestFullscreen?a.msRequestFullscreen():a.mozRequestFullScreen?a.mozRequestFullScreen():a.webkitRequestFullscreen&&a.webkitRequestFullscreen()}var ae=function(){var a;return function(){if(!a){var b=document.body;b.webkitRequestFullscreen?a="webkitfullscreenchange":b.mozRequestFullScreen?a="mozfullscreenchange":b.msRequestFullscreen?a="MSFullscreenChange":b.requestFullscreen&&(a="fullscreenchange")}return a}}();function be(a){a=a?a:{};var b=void 0!==a.className?a.className:"ol-rotate",c=void 0!==a.label?a.label:"\u21e7";this.a=null;"string"===typeof c?(this.a=document.createElement("span"),this.a.className="ol-compass",this.a.textContent=c):(this.a=c,this.a.classList.add("ol-compass"));var d=a.tipLabel?a.tipLabel:"Reset rotation",c=document.createElement("button");c.className=b+"-reset";c.setAttribute("type","button");c.title=d;c.appendChild(this.a);R(c,"click",be.prototype.s,this);d=document.createElement("div"); + d.className=b+" ol-unselectable ol-control";d.appendChild(c);b=a.render?a.render:ce;this.g=a.resetNorth?a.resetNorth:void 0;Ud.call(this,{element:d,render:b,target:a.target});this.h=void 0!==a.duration?a.duration:250;this.c=void 0!==a.autoHide?a.autoHide:!0;this.j=void 0;this.c&&this.element.classList.add("ol-hidden")}B(be,Ud); + be.prototype.s=function(a){a.preventDefault();if(void 0!==this.g)this.g();else{a=this.f;var b=a.U();if(b){var c=b.get(xc);void 0!==c&&(0<this.h&&(c%=2*Math.PI,c<-Math.PI&&(c+=2*Math.PI),c>Math.PI&&(c-=2*Math.PI),a.oa(Ec({rotation:c,duration:this.h,easing:Ac}))),b.set(xc,0))}}}; + function ce(a){if(a=a.frameState){a=a.viewState.rotation;if(a!=this.j){var b="rotate("+a+"rad)";if(this.c){var c=this.element.classList.contains("ol-hidden");c||0!==a?c&&0!==a&&this.element.classList.remove("ol-hidden"):this.element.classList.add("ol-hidden")}this.a.style.msTransform=b;this.a.style.webkitTransform=b;this.a.style.transform=b}this.j=a}};function de(a){a=a?a:{};var b=void 0!==a.className?a.className:"ol-zoom",c=void 0!==a.delta?a.delta:1,d=void 0!==a.zoomInLabel?a.zoomInLabel:"+",e=void 0!==a.zoomOutLabel?a.zoomOutLabel:"\u2212",f=void 0!==a.zoomInTipLabel?a.zoomInTipLabel:"Zoom in",g=void 0!==a.zoomOutTipLabel?a.zoomOutTipLabel:"Zoom out",h=document.createElement("button");h.className=b+"-in";h.setAttribute("type","button");h.title=f;h.appendChild("string"===typeof d?document.createTextNode(d):d);R(h,"click",de.prototype.c.bind(this, + c));d=document.createElement("button");d.className=b+"-out";d.setAttribute("type","button");d.title=g;d.appendChild("string"===typeof e?document.createTextNode(e):e);R(d,"click",de.prototype.c.bind(this,-c));c=document.createElement("div");c.className=b+" ol-unselectable ol-control";c.appendChild(h);c.appendChild(d);Ud.call(this,{element:c,target:a.target});this.a=void 0!==a.duration?a.duration:250}B(de,Ud); + de.prototype.c=function(a,b){b.preventDefault();var c=this.f,d=c.U();if(d){var e=d.O();e&&(0<this.a&&c.oa(Fc({resolution:e,duration:this.a,easing:Ac})),c=d.constrainResolution(e,a),d.set(wc,c))}};function ee(a){a=a?a:{};var b=new cd;(void 0!==a.zoom?a.zoom:1)&&b.push(new de(a.zoomOptions));(void 0!==a.rotate?a.rotate:1)&&b.push(new be(a.rotateOptions));(void 0!==a.attribution?a.attribution:1)&&b.push(new Vd(a.attributionOptions));return b};var fe; + function ge(){var a=aa.MessageChannel;"undefined"===typeof a&&"undefined"!==typeof window&&window.postMessage&&window.addEventListener&&!xd("Presto")&&(a=function(){var a=document.createElement("IFRAME");a.style.display="none";a.src="";document.documentElement.appendChild(a);var b=a.contentWindow,a=b.document;a.open();a.write("");a.close();var c="callImmediate"+Math.random(),d="file:"==b.location.protocol?"*":b.location.protocol+"//"+b.location.host,a=ea(function(a){if(("*"==d||a.origin==d)&&a.data== + c)this.port1.onmessage()},this);b.addEventListener("message",a,!1);this.port1={};this.port2={postMessage:function(){b.postMessage(c,d)}}});if("undefined"!==typeof a&&!xd("Trident")&&!xd("MSIE")){var b=new a,c={},d=c;b.port1.onmessage=function(){if(void 0!==c.next){c=c.next;var a=c.nc;c.nc=null;a()}};return function(a){d.next={nc:a};d=d.next;b.port2.postMessage(0)}}return"undefined"!==typeof document&&"onreadystatechange"in document.createElement("SCRIPT")?function(a){var b=document.createElement("SCRIPT"); + b.onreadystatechange=function(){b.onreadystatechange=null;b.parentNode.removeChild(b);b=null;a();a=null};document.documentElement.appendChild(b)}:function(a){aa.setTimeout(a,0)}};var he=["experimental-webgl","webgl","webkit-3d","moz-webgl"];function ie(a,b){var c,d,e=he.length;for(d=0;d<e;++d)try{if(c=a.getContext(he[d],b))return c}catch(f){}return null};var je,ke="undefined"!==typeof navigator?navigator.userAgent.toLowerCase():"",le=-1!==ke.indexOf("firefox"),me=-1!==ke.indexOf("safari")&&-1===ke.indexOf("chrom"),ne=-1!==ke.indexOf("macintosh"),oe=K.devicePixelRatio||1,pe=!1,qe=function(){if(!("HTMLCanvasElement"in K))return!1;try{var a=Md();return a?(a.setLineDash&&(pe=!0),!0):!1}catch(b){return!1}}(),re="ontouchstart"in K,se="PointerEvent"in K,te=!!K.navigator.msPointerEnabled,ue=!1,ve=[]; + if("WebGLRenderingContext"in K)try{var we=ie(document.createElement("CANVAS"),{failIfMajorPerformanceCaveat:!0});we&&(ue=!0,ve=we.getSupportedExtensions())}catch(a){}je=ue;fa=ve;function xe(a,b){this.b=a;this.g=b};function ye(a){xe.call(this,a,{mousedown:this.Pd,mousemove:this.Qd,mouseup:this.Td,mouseover:this.Sd,mouseout:this.Rd});this.a=a.a;this.c=[]}B(ye,xe);function ze(a,b){for(var c=a.c,d=b.clientX,e=b.clientY,f=0,g=c.length,h;f<g&&(h=c[f]);f++){var k=Math.abs(e-h[1]);if(25>=Math.abs(d-h[0])&&25>=k)return!0}return!1}function Ae(a){var b=Be(a,a),c=b.preventDefault;b.preventDefault=function(){a.preventDefault();c()};b.pointerId=1;b.isPrimary=!0;b.pointerType="mouse";return b}n=ye.prototype; + n.Pd=function(a){if(!ze(this,a)){if((1).toString()in this.a){var b=Ae(a);Ce(this.b,De,b,a);delete this.a[(1).toString()]}b=Ae(a);this.a[(1).toString()]=a;Ce(this.b,Ee,b,a)}};n.Qd=function(a){if(!ze(this,a)){var b=Ae(a);Ce(this.b,Fe,b,a)}};n.Td=function(a){if(!ze(this,a)){var b=this.a[(1).toString()];b&&b.button===a.button&&(b=Ae(a),Ce(this.b,Ge,b,a),delete this.a[(1).toString()])}};n.Sd=function(a){if(!ze(this,a)){var b=Ae(a);He(this.b,b,a)}}; + n.Rd=function(a){if(!ze(this,a)){var b=Ae(a);Ie(this.b,b,a)}};function Je(a){xe.call(this,a,{MSPointerDown:this.Yd,MSPointerMove:this.Zd,MSPointerUp:this.be,MSPointerOut:this.$d,MSPointerOver:this.ae,MSPointerCancel:this.Xd,MSGotPointerCapture:this.Vd,MSLostPointerCapture:this.Wd});this.a=a.a;this.c=["","unavailable","touch","pen","mouse"]}B(Je,xe);function Ke(a,b){var c=b;"number"===typeof b.pointerType&&(c=Be(b,b),c.pointerType=a.c[b.pointerType]);return c}n=Je.prototype;n.Yd=function(a){this.a[a.pointerId.toString()]=a;var b=Ke(this,a);Ce(this.b,Ee,b,a)}; + n.Zd=function(a){var b=Ke(this,a);Ce(this.b,Fe,b,a)};n.be=function(a){var b=Ke(this,a);Ce(this.b,Ge,b,a);delete this.a[a.pointerId.toString()]};n.$d=function(a){var b=Ke(this,a);Ie(this.b,b,a)};n.ae=function(a){var b=Ke(this,a);He(this.b,b,a)};n.Xd=function(a){var b=Ke(this,a);Ce(this.b,De,b,a);delete this.a[a.pointerId.toString()]};n.Wd=function(a){U(this.b,new Le("lostpointercapture",a,a))};n.Vd=function(a){U(this.b,new Le("gotpointercapture",a,a))};function Me(a){xe.call(this,a,{pointerdown:this.le,pointermove:this.me,pointerup:this.pe,pointerout:this.ne,pointerover:this.oe,pointercancel:this.ke,gotpointercapture:this.sd,lostpointercapture:this.Od})}B(Me,xe);n=Me.prototype;n.le=function(a){Ne(this.b,a)};n.me=function(a){Ne(this.b,a)};n.pe=function(a){Ne(this.b,a)};n.ne=function(a){Ne(this.b,a)};n.oe=function(a){Ne(this.b,a)};n.ke=function(a){Ne(this.b,a)};n.Od=function(a){Ne(this.b,a)};n.sd=function(a){Ne(this.b,a)};function Le(a,b,c){T.call(this,a);this.b=b;a=c?c:{};this.buttons=Oe(a);this.pressure=Pe(a,this.buttons);this.bubbles="bubbles"in a?a.bubbles:!1;this.cancelable="cancelable"in a?a.cancelable:!1;this.view="view"in a?a.view:null;this.detail="detail"in a?a.detail:null;this.screenX="screenX"in a?a.screenX:0;this.screenY="screenY"in a?a.screenY:0;this.clientX="clientX"in a?a.clientX:0;this.clientY="clientY"in a?a.clientY:0;this.button="button"in a?a.button:0;this.relatedTarget="relatedTarget"in a?a.relatedTarget: + null;this.pointerId="pointerId"in a?a.pointerId:0;this.width="width"in a?a.width:0;this.height="height"in a?a.height:0;this.pointerType="pointerType"in a?a.pointerType:"";this.isPrimary="isPrimary"in a?a.isPrimary:!1;b.preventDefault&&(this.preventDefault=function(){b.preventDefault()})}B(Le,T);function Oe(a){if(a.buttons||Qe)a=a.buttons;else switch(a.which){case 1:a=1;break;case 2:a=4;break;case 3:a=2;break;default:a=0}return a}function Pe(a,b){var c=0;a.pressure?c=a.pressure:c=b?.5:0;return c} + var Qe=!1;try{Qe=1===(new MouseEvent("click",{buttons:1})).buttons}catch(a){};function Re(a,b){xe.call(this,a,{touchstart:this.Ce,touchmove:this.Be,touchend:this.Ae,touchcancel:this.ze});this.a=a.a;this.l=b;this.c=void 0;this.h=0;this.f=void 0}B(Re,xe);n=Re.prototype;n.Uc=function(){this.h=0;this.f=void 0}; + function Se(a,b,c){b=Be(b,c);b.pointerId=c.identifier+2;b.bubbles=!0;b.cancelable=!0;b.detail=a.h;b.button=0;b.buttons=1;b.width=c.webkitRadiusX||c.radiusX||0;b.height=c.webkitRadiusY||c.radiusY||0;b.pressure=c.webkitForce||c.force||.5;b.isPrimary=a.c===c.identifier;b.pointerType="touch";b.clientX=c.clientX;b.clientY=c.clientY;b.screenX=c.screenX;b.screenY=c.screenY;return b} + function Te(a,b,c){function d(){b.preventDefault()}var e=Array.prototype.slice.call(b.changedTouches),f=e.length,g,h;for(g=0;g<f;++g)h=Se(a,b,e[g]),h.preventDefault=d,c.call(a,b,h)} + n.Ce=function(a){var b=a.touches,c=Object.keys(this.a),d=c.length;if(d>=b.length){var e=[],f,g,h;for(f=0;f<d;++f){g=c[f];h=this.a[g];var k;if(!(k=1==g))a:{k=b.length;for(var l,m=0;m<k;m++)if(l=b[m],l.identifier===g-2){k=!0;break a}k=!1}k||e.push(h.out)}for(f=0;f<e.length;++f)this.Ib(a,e[f])}b=a.changedTouches[0];c=Object.keys(this.a).length;if(0===c||1===c&&(1).toString()in this.a)this.c=b.identifier,b=K,void 0!==this.f&&b.clearTimeout(this.f);Ue(this,a);this.h++;Te(this,a,this.je)}; + n.je=function(a,b){this.a[b.pointerId]={target:b.target,out:b,Rc:b.target};var c=this.b;b.bubbles=!0;Ce(c,Ve,b,a);c=this.b;b.bubbles=!1;Ce(c,We,b,a);Ce(this.b,Ee,b,a)};n.Be=function(a){a.preventDefault();Te(this,a,this.Ud)};n.Ud=function(a,b){var c=this.a[b.pointerId];if(c){var d=c.out,e=c.Rc;Ce(this.b,Fe,b,a);d&&e!==b.target&&(d.relatedTarget=b.target,b.relatedTarget=e,d.target=e,b.target?(Ie(this.b,d,a),He(this.b,b,a)):(b.target=e,b.relatedTarget=null,this.Ib(a,b)));c.out=b;c.Rc=b.target}}; + n.Ae=function(a){Ue(this,a);Te(this,a,this.De)};n.De=function(a,b){Ce(this.b,Ge,b,a);this.b.out(b,a);var c=this.b;b.bubbles=!1;Ce(c,Xe,b,a);delete this.a[b.pointerId];b.isPrimary&&(this.c=void 0,this.f=K.setTimeout(this.Uc.bind(this),200))};n.ze=function(a){Te(this,a,this.Ib)};n.Ib=function(a,b){Ce(this.b,De,b,a);this.b.out(b,a);var c=this.b;b.bubbles=!1;Ce(c,Xe,b,a);delete this.a[b.pointerId];b.isPrimary&&(this.c=void 0,this.f=K.setTimeout(this.Uc.bind(this),200))}; + function Ue(a,b){var c=a.l.c,d=b.changedTouches[0];if(a.c===d.identifier){var e=[d.clientX,d.clientY];c.push(e);K.setTimeout(function(){Qa(c,e)},2500)}};function Ye(a){Ga.call(this);this.g=a;this.a={};this.f={};this.b=[];se?Ze(this,new Me(this)):te?Ze(this,new Je(this)):(a=new ye(this),Ze(this,a),re&&Ze(this,new Re(this,a)));a=this.b.length;for(var b,c=0;c<a;c++)b=this.b[c],$e(this,Object.keys(b.g))}B(Ye,Ga);function Ze(a,b){var c=Object.keys(b.g);c&&(c.forEach(function(a){var c=b.g[a];c&&(this.f[a]=c.bind(b))},a),a.b.push(b))}Ye.prototype.c=function(a){var b=this.f[a.type];b&&b(a)}; + function $e(a,b){b.forEach(function(a){R(this.g,a,this.c,this)},a)}function af(a,b){b.forEach(function(a){ya(this.g,a,this.c,this)},a)}function Be(a,b){for(var c={},d,e=0,f=bf.length;e<f;e++)d=bf[e][0],c[d]=a[d]||b[d]||bf[e][1];return c}Ye.prototype.out=function(a,b){a.bubbles=!0;Ce(this,cf,a,b)};function Ie(a,b,c){a.out(b,c);var d=b.target,e=b.relatedTarget;d&&e&&d.contains(e)||(b.bubbles=!1,Ce(a,Xe,b,c))} + function He(a,b,c){b.bubbles=!0;Ce(a,Ve,b,c);var d=b.target,e=b.relatedTarget;d&&e&&d.contains(e)||(b.bubbles=!1,Ce(a,We,b,c))}function Ce(a,b,c,d){U(a,new Le(b,d,c))}function Ne(a,b){U(a,new Le(b.type,b,b))}Ye.prototype.R=function(){for(var a=this.b.length,b,c=0;c<a;c++)b=this.b[c],af(this,Object.keys(b.g));Ga.prototype.R.call(this)}; + var Fe="pointermove",Ee="pointerdown",Ge="pointerup",Ve="pointerover",cf="pointerout",We="pointerenter",Xe="pointerleave",De="pointercancel",bf=[["bubbles",!1],["cancelable",!1],["view",null],["detail",null],["screenX",0],["screenY",0],["clientX",0],["clientY",0],["ctrlKey",!1],["altKey",!1],["shiftKey",!1],["metaKey",!1],["button",0],["relatedTarget",null],["buttons",0],["pointerId",0],["width",0],["height",0],["pressure",0],["tiltX",0],["tiltY",0],["pointerType",""],["hwTimestamp",0],["isPrimary", + !1],["type",""],["target",null],["currentTarget",null],["which",0]];function df(a,b,c,d,e){Td.call(this,a,b,e);this.originalEvent=c;this.pixel=b.uc(c);this.coordinate=b.Ba(this.pixel);this.dragging=void 0!==d?d:!1}B(df,Td);df.prototype.preventDefault=function(){Td.prototype.preventDefault.call(this);this.originalEvent.preventDefault()};df.prototype.stopPropagation=function(){Td.prototype.stopPropagation.call(this);this.originalEvent.stopPropagation()};function ef(a,b,c,d,e){df.call(this,a,b,c.b,d,e);this.b=c}B(ef,df); + function ff(a){Ga.call(this);this.c=a;this.h=0;this.l=!1;this.f=[];this.a=null;a=this.c.a;this.v=0;this.s={};this.g=new Ye(a);this.b=null;this.i=R(this.g,Ee,this.Cd,this);this.j=R(this.g,Fe,this.re,this)}B(ff,Ga);function gf(a,b){var c;c=new ef(hf,a.c,b);U(a,c);0!==a.h?(K.clearTimeout(a.h),a.h=0,c=new ef(jf,a.c,b),U(a,c)):a.h=K.setTimeout(function(){this.h=0;var a=new ef(kf,this.c,b);U(this,a)}.bind(a),250)} + function lf(a,b){b.type==mf||b.type==nf?delete a.s[b.pointerId]:b.type==of&&(a.s[b.pointerId]=!0);a.v=Object.keys(a.s).length}n=ff.prototype;n.xc=function(a){lf(this,a);var b=new ef(mf,this.c,a);U(this,b);!this.l&&0===a.button&&gf(this,this.a);0===this.v&&(this.f.forEach(M),this.f.length=0,this.l=!1,this.a=null,Da(this.b),this.b=null)}; + n.Cd=function(a){lf(this,a);var b=new ef(of,this.c,a);U(this,b);this.a=a;0===this.f.length&&(this.b=new Ye(document),this.f.push(R(this.b,pf,this.ee,this),R(this.b,mf,this.xc,this),R(this.g,nf,this.xc,this)))};n.ee=function(a){if(a.clientX!=this.a.clientX||a.clientY!=this.a.clientY){this.l=!0;var b=new ef(qf,this.c,a,this.l);U(this,b)}a.preventDefault()};n.re=function(a){U(this,new ef(a.type,this.c,a,!(!this.a||a.clientX==this.a.clientX&&a.clientY==this.a.clientY)))}; + n.R=function(){this.j&&(M(this.j),this.j=null);this.i&&(M(this.i),this.i=null);this.f.forEach(M);this.f.length=0;this.b&&(Da(this.b),this.b=null);this.g&&(Da(this.g),this.g=null);Ga.prototype.R.call(this)};var kf="singleclick",hf="click",jf="dblclick",qf="pointerdrag",pf="pointermove",of="pointerdown",mf="pointerup",nf="pointercancel",rf={Pe:kf,Ee:hf,Fe:jf,Ie:qf,Le:pf,He:of,Oe:mf,Ne:"pointerover",Me:"pointerout",Je:"pointerenter",Ke:"pointerleave",Ge:nf};function sf(a){V.call(this);var b=pa({},a);b.opacity=void 0!==a.opacity?a.opacity:1;b.visible=void 0!==a.visible?a.visible:!0;b.zIndex=void 0!==a.zIndex?a.zIndex:0;b.maxResolution=void 0!==a.maxResolution?a.maxResolution:Infinity;b.minResolution=void 0!==a.minResolution?a.minResolution:0;this.l(b)}B(sf,V); + function tf(a){var b=a.Xb(),c=a.Sb(),d=a.gb(),e=a.G(),f=a.Yb(),g=a.get("maxResolution"),h=a.get("minResolution");return{layer:a,opacity:ia(b,0,1),ac:c,visible:d,hb:!0,extent:e,zIndex:f,maxResolution:g,minResolution:Math.max(h,0)}}n=sf.prototype;n.G=function(){return this.get("extent")};n.Xb=function(){return this.get("opacity")};n.gb=function(){return this.get("visible")};n.Yb=function(){return this.get("zIndex")};n.Bc=function(a){this.set("opacity",a)};n.Cc=function(a){this.set("visible",a)}; + n.Dc=function(a){this.set("zIndex",a)};function uf(a,b,c,d,e){T.call(this,a);this.vectorContext=b;this.frameState=c;this.context=d;this.glContext=e}B(uf,T);function vf(a){V.call(this);this.N=Hb(a.projection);this.h=wf(a.attributions);this.D=a.logo;this.P=void 0!==a.state?a.state:"ready";this.i=void 0!==a.wrapX?a.wrapX:!1}B(vf,V);function wf(a){if("string"===typeof a)return[new bd({html:a})];if(a instanceof bd)return[a];if(Array.isArray(a)){for(var b=a.length,c=Array(b),d=0;d<b;d++){var e=a[d];c[d]="string"===typeof e?new bd({html:e}):e}return c}return null}vf.prototype.fa=I;vf.prototype.ia=function(){return this.N};vf.prototype.T=function(){return this.P}; + vf.prototype.Ja=function(){this.w()};function xf(a){var b=pa({},a);delete b.source;sf.call(this,b);this.h=this.f=this.c=null;a.map&&this.setMap(a.map);R(this,La("source"),this.Hd,this);this.$b(a.source?a.source:null)}B(xf,sf);function yf(a,b){return a.visible&&b>=a.minResolution&&b<a.maxResolution}n=xf.prototype;n.Pb=function(a){a=a?a:[];a.push(tf(this));return a};n.da=function(){return this.get("source")||null};n.Sb=function(){var a=this.da();return a?a.T():"undefined"};n.fe=function(){this.w()}; + n.Hd=function(){this.h&&(M(this.h),this.h=null);var a=this.da();a&&(this.h=R(a,"change",this.fe,this));this.w()};n.setMap=function(a){this.c&&(M(this.c),this.c=null);a||this.w();this.f&&(M(this.f),this.f=null);a&&(this.c=R(a,"precompose",function(a){var c=tf(this);c.hb=!1;c.zIndex=Infinity;a.frameState.layerStatesArray.push(c);a.frameState.layerStates[J(this)]=c},this),this.f=R(this,"change",a.render,a),this.w())};n.$b=function(a){this.set("source",a)};function zf(){this.b={};this.a=0}zf.prototype.clear=function(){this.b={};this.a=0};zf.prototype.get=function(a,b,c){a=b+":"+a+":"+(c?nd(c):"null");return a in this.b?this.b[a]:null};zf.prototype.set=function(a,b,c,d){this.b[b+":"+a+":"+(c?nd(c):"null")]=d;++this.a};var Af=new zf;var Bf=Array(6);function Cf(){return[1,0,0,1,0,0]}function Df(a){return Ef(a,1,0,0,1,0,0)}function Ff(a,b){var c=a[0],d=a[1],e=a[2],f=a[3],g=a[4],h=a[5],k=b[0],l=b[1],m=b[2],p=b[3],q=b[4],u=b[5];a[0]=c*k+e*l;a[1]=d*k+f*l;a[2]=c*m+e*p;a[3]=d*m+f*p;a[4]=c*q+e*u+g;a[5]=d*q+f*u+h}function Ef(a,b,c,d,e,f,g){a[0]=b;a[1]=c;a[2]=d;a[3]=e;a[4]=f;a[5]=g;return a}function Gf(a,b){a[0]=b[0];a[1]=b[1];a[2]=b[2];a[3]=b[3];a[4]=b[4];a[5]=b[5];return a} + function Hf(a,b){var c=b[0],d=b[1];b[0]=a[0]*c+a[2]*d+a[4];b[1]=a[1]*c+a[3]*d+a[5];return b}function If(a,b){var c=Math.cos(b),d=Math.sin(b);Ff(a,Ef(Bf,c,d,-d,c,0,0))}function Jf(a,b,c){Ff(a,Ef(Bf,b,0,0,c,0,0))}function Kf(a,b,c){Ff(a,Ef(Bf,1,0,0,1,b,c))}function Lf(a,b,c,d,e,f,g,h){var k=Math.sin(f);f=Math.cos(f);a[0]=d*f;a[1]=e*k;a[2]=-d*k;a[3]=e*f;a[4]=g*d*f-h*d*k+b;a[5]=g*e*k+h*e*f+c;return a} + function Mf(a){var b=a[0]*a[3]-a[1]*a[2];L(0!==b,32);var c=a[0],d=a[1],e=a[2],f=a[3],g=a[4],h=a[5];a[0]=f/b;a[1]=-d/b;a[2]=-e/b;a[3]=c/b;a[4]=(e*h-f*g)/b;a[5]=-(c*h-d*g)/b};function Nf(a,b){this.g=b;this.c={};this.j={}}B(Nf,Aa);function Of(a){var b=a.viewState,c=a.coordinateToPixelTransform,d=a.pixelToCoordinateTransform;Lf(c,a.size[0]/2,a.size[1]/2,1/b.resolution,-1/b.resolution,-b.rotation,-b.center[0],-b.center[1]);Mf(Gf(d,c))}n=Nf.prototype;n.R=function(){for(var a in this.c)Da(this.c[a])};function Pf(){if(32<Af.a){var a=0,b,c;for(b in Af.b)c=Af.b[b],0!==(a++&3)||Ha(c)||(delete Af.b[b],--Af.a)}} + n.fa=function(a,b,c,d,e,f){function g(a,e){var f=J(a).toString(),g=b.layerStates[J(e)].hb;if(!(f in b.skippedFeatureUids)||g)return c.call(d,a,g?e:null)}var h,k=b.viewState,l=k.resolution,m=k.projection,k=a;if(m.b){var m=m.G(),p=qb(m),q=a[0];if(q<m[0]||q>m[2])k=[q+p*Math.ceil((m[0]-q)/p),a[1]]}m=b.layerStatesArray;for(p=m.length-1;0<=p;--p){var u=m[p],q=u.layer;if(yf(u,l)&&e.call(f,q)&&(u=Qf(this,q),q.da()&&(h=u.fa(q.da().i?k:a,b,g,d)),h))return h}}; + n.Fc=function(a,b,c,d){return void 0!==this.fa(a,b,yb,this,c,d)};function Qf(a,b){var c=J(b).toString();if(c in a.c)return a.c[c];var d=a.Mb(b);a.c[c]=d;a.j[c]=R(d,"change",a.wd,a);return d}n.wd=function(){this.g.render()};n.vb=I;n.ue=function(a,b){for(var c in this.c)if(!(b&&c in b.layerStates)){var d=c,e=this.c[d];delete this.c[d];M(this.j[d]);delete this.j[d];Da(e)}};function Rf(a,b){for(var c in a.c)if(!(c in b.layerStates)){b.postRenderFunctions.push(a.ue.bind(a));break}} + function Ta(a,b){return a.zIndex-b.zIndex};function Sf(a,b){Ga.call(this);this.V=a;this.state=b;this.b=null;this.key=""}B(Sf,Ga);function Tf(a){U(a,"change")}Sf.prototype.getKey=function(){return this.key+"/"+this.V};Sf.prototype.T=function(){return this.state};function Uf(a,b){this.j=a;this.f=b;this.b=[];this.c=[];this.a={}}Uf.prototype.clear=function(){this.b.length=0;this.c.length=0;qa(this.a)};function Vf(a){var b=a.b,c=a.c,d=b[0];1==b.length?(b.length=0,c.length=0):(b[0]=b.pop(),c[0]=c.pop(),Wf(a,0));b=a.f(d);delete a.a[b];return d}Uf.prototype.g=function(a){L(!(this.f(a)in this.a),31);var b=this.j(a);return Infinity!=b?(this.b.push(a),this.c.push(b),this.a[this.f(a)]=!0,Xf(this,0,this.b.length-1),!0):!1}; + function Wf(a,b){for(var c=a.b,d=a.c,e=c.length,f=c[b],g=d[b],h=b;b<e>>1;){var k=2*b+1,l=2*b+2,k=l<e&&d[l]<d[k]?l:k;c[b]=c[k];d[b]=d[k];b=k}c[b]=f;d[b]=g;Xf(a,h,b)}function Xf(a,b,c){var d=a.b;a=a.c;for(var e=d[c],f=a[c];c>b;){var g=c-1>>1;if(a[g]>f)d[c]=d[g],a[c]=a[g],c=g;else break}d[c]=e;a[c]=f}function Yf(a){var b=a.j,c=a.b,d=a.c,e=0,f=c.length,g,h,k;for(h=0;h<f;++h)g=c[h],k=b(g),Infinity==k?delete a.a[a.f(g)]:(d[e]=k,c[e++]=g);c.length=e;d.length=e;for(b=(a.b.length>>1)-1;0<=b;b--)Wf(a,b)};function Zf(a,b){Uf.call(this,function(b){return a.apply(null,b)},function(a){return a[0].getKey()});this.C=b;this.l=0;this.h={}}B(Zf,Uf);Zf.prototype.g=function(a){var b=Uf.prototype.g.call(this,a);b&&R(a[0],"change",this.i,this);return b};Zf.prototype.i=function(a){a=a.target;var b=a.T();if(2===b||3===b||4===b||5===b)ya(a,"change",this.i,this),a=a.getKey(),a in this.h&&(delete this.h[a],--this.l),this.C()};function $f(){this.b=[];this.a=this.c=0}function ag(a,b){var c=a.a,d=.05-c,e=Math.log(.05/a.a)/-.005;return Dc({source:b,duration:e,easing:function(a){return c*(Math.exp(-.005*a*e)-1)/d}})};function bg(a){V.call(this);this.aa=null;this.set("active",!0);this.handleEvent=a.handleEvent}B(bg,V);bg.prototype.setMap=function(a){this.aa=a};function cg(a,b,c,d,e){if(void 0!==c){var f=b.get(xc),g=b.qa();void 0!==f&&g&&e&&0<e&&(a.oa(Ec({rotation:f,duration:e,easing:Ac})),d&&a.oa(Dc({source:g,duration:e,easing:Ac})));b.rotate(c,d)}}function dg(a,b,c,d,e){var f=b.O();c=b.constrainResolution(f,c,0);eg(a,b,c,d,e)} + function eg(a,b,c,d,e){if(c){var f=b.O(),g=b.qa();void 0!==f&&g&&c!==f&&e&&0<e&&(a.oa(Fc({resolution:f,duration:e,easing:Ac})),d&&a.oa(Dc({source:g,duration:e,easing:Ac})));if(d){var h;a=b.qa();e=b.O();void 0!==a&&void 0!==e&&(h=[d[0]-c*(d[0]-a[0])/e,d[1]-c*(d[1]-a[1])/e]);b.xa(h)}b.set(wc,c)}};function fg(a){a=a?a:{};this.a=a.delta?a.delta:1;bg.call(this,{handleEvent:gg});this.c=void 0!==a.duration?a.duration:250}B(fg,bg);function gg(a){var b=!1,c=a.originalEvent;if(a.type==jf){var b=a.map,d=a.coordinate,c=c.shiftKey?-this.a:this.a,e=b.U();dg(b,e,c,d,this.c);a.preventDefault();b=!0}return!b};function hg(a){a=a.originalEvent;return a.altKey&&!(a.metaKey||a.ctrlKey)&&a.shiftKey}function ig(a){a=a.originalEvent;return 0==a.button&&!(Cd&&ne&&a.ctrlKey)}function jg(a){a=a.originalEvent;return!a.altKey&&!(a.metaKey||a.ctrlKey)&&!a.shiftKey}function kg(a){a=a.originalEvent;return!a.altKey&&!(a.metaKey||a.ctrlKey)&&a.shiftKey}function lg(a){a=a.originalEvent.target.tagName;return"INPUT"!==a&&"SELECT"!==a&&"TEXTAREA"!==a}function mg(a){L(a.b,56);return"mouse"==a.b.pointerType};function ng(a){a=a?a:{};bg.call(this,{handleEvent:a.handleEvent?a.handleEvent:og});this.Bb=a.handleDownEvent?a.handleDownEvent:zb;this.Cb=a.handleDragEvent?a.handleDragEvent:I;this.zb=a.handleMoveEvent?a.handleMoveEvent:I;this.Eb=a.handleUpEvent?a.handleUpEvent:zb;this.v=!1;this.N={};this.f=[]}B(ng,bg);function pg(a){for(var b=a.length,c=0,d=0,e=0;e<b;e++)c+=a[e].clientX,d+=a[e].clientY;return[c/b,d/b]} + function og(a){if(!(a instanceof ef))return!0;var b=!1,c=a.type;if(c===of||c===qf||c===mf)c=a.b,a.type==mf?delete this.N[c.pointerId]:a.type==of?this.N[c.pointerId]=c:c.pointerId in this.N&&(this.N[c.pointerId]=c),this.f=ra(this.N);this.v&&(a.type==qf?this.Cb(a):a.type==mf&&(this.v=this.Eb(a)));a.type==of?(this.v=a=this.Bb(a),b=this.B(a)):a.type==pf&&this.zb(a);return!b}ng.prototype.B=function(a){return a};function qg(a){ng.call(this,{handleDownEvent:rg,handleDragEvent:sg,handleUpEvent:tg});a=a?a:{};this.a=a.kinetic;this.c=this.g=null;this.i=a.condition?a.condition:jg;this.h=!1}B(qg,ng);function sg(a){var b=pg(this.f);this.a&&this.a.b.push(b[0],b[1],Date.now());if(this.c){var c=this.c[0]-b[0],d=b[1]-this.c[1];a=a.map.U();var e=a.T(),d=c=[c,d],f=e.resolution;d[0]*=f;d[1]*=f;bb(c,e.rotation);ab(c,e.center);c=a.a.center(c);a.xa(c)}this.c=b} + function tg(a){var b=a.map;a=b.U();if(0===this.f.length){var c;if(c=!this.h&&this.a)if(c=this.a,6>c.b.length)c=!1;else{var d=Date.now()-100,e=c.b.length-3;if(c.b[e+2]<d)c=!1;else{for(var f=e-3;0<f&&c.b[f+2]>d;)f-=3;var d=c.b[e+2]-c.b[f+2],g=c.b[e]-c.b[f],e=c.b[e+1]-c.b[f+1];c.c=Math.atan2(e,g);c.a=Math.sqrt(g*g+e*e)/d;c=.05<c.a}}c?(c=(.05-this.a.a)/-.005,e=this.a.c,f=a.qa(),this.g=ag(this.a,f),b.oa(this.g),f=ug(b,f),b=b.Ba([f[0]-c*Math.cos(e),f[1]-c*Math.sin(e)]),b=a.a.center(b),a.xa(b)):b.render(); + zc(a,-1);return!1}this.c=null;return!0}function rg(a){if(0<this.f.length&&this.i(a)){var b=a.map,c=b.U();this.c=null;this.v||zc(c,1);this.g&&Qa(b.D,this.g)&&(c.xa(a.frameState.viewState.center),this.g=null);this.a&&(a=this.a,a.b.length=0,a.c=0,a.a=0);this.h=1<this.f.length;return!0}return!1}qg.prototype.B=zb;function vg(a){a=a?a:{};ng.call(this,{handleDownEvent:wg,handleDragEvent:xg,handleUpEvent:yg});this.c=a.condition?a.condition:hg;this.a=void 0;this.g=void 0!==a.duration?a.duration:250}B(vg,ng);function xg(a){if(mg(a)){var b=a.map,c=b.Ta();a=a.pixel;c=Math.atan2(c[1]/2-a[1],a[0]-c[0]/2);if(void 0!==this.a){a=c-this.a;var d=b.U(),e=d.get(xc);cg(b,d,e-a)}this.a=c}} + function yg(a){if(!mg(a))return!0;a=a.map;var b=a.U();zc(b,-1);var c=b.get(xc),d=this.g,c=b.constrainRotation(c,0);cg(a,b,c,void 0,d);return!1}function wg(a){return mg(a)&&ig(a)&&this.c(a)?(zc(a.map.U(),1),this.a=void 0,!0):!1}vg.prototype.B=zb;function zg(a){this.f=null;this.a=document.createElement("div");this.a.style.position="absolute";this.a.className="ol-box "+a;this.c=this.g=this.b=null}B(zg,Aa);zg.prototype.R=function(){this.setMap(null)};function Ag(a){var b=a.g,c=a.c;a=a.a.style;a.left=Math.min(b[0],c[0])+"px";a.top=Math.min(b[1],c[1])+"px";a.width=Math.abs(c[0]-b[0])+"px";a.height=Math.abs(c[1]-b[1])+"px"} + zg.prototype.setMap=function(a){if(this.b){this.b.s.removeChild(this.a);var b=this.a.style;b.left=b.top=b.width=b.height="inherit"}(this.b=a)&&this.b.s.appendChild(this.a)};function Bg(a){var b=a.g,c=a.c,b=[b,[b[0],c[1]],c,[c[0],b[1]]].map(a.b.Ba,a.b);b[4]=b[0].slice();a.f?a.f.ea([b]):a.f=new qc([b])}zg.prototype.S=function(){return this.f};function Cg(a,b,c){T.call(this,a);this.coordinate=b;this.mapBrowserEvent=c}B(Cg,T);function Dg(a){ng.call(this,{handleDownEvent:Eg,handleDragEvent:Fg,handleUpEvent:Gg});a=a?a:{};this.a=new zg(a.className||"ol-dragbox");this.c=null;this.j=a.condition?a.condition:yb;this.i=a.boxEndCondition?a.boxEndCondition:Hg}B(Dg,ng);function Hg(a,b,c){a=c[0]-b[0];b=c[1]-b[1];return 64<=a*a+b*b} + function Fg(a){if(mg(a)){var b=this.a,c=a.pixel;b.g=this.c;b.c=c;Bg(b);Ag(b);U(this,new Cg("boxdrag",a.coordinate,a))}}Dg.prototype.S=function(){return this.a.S()};Dg.prototype.h=I;function Gg(a){if(!mg(a))return!0;this.a.setMap(null);this.i(a,this.c,a.pixel)&&(this.h(a),U(this,new Cg("boxend",a.coordinate,a)));return!1} + function Eg(a){if(mg(a)&&ig(a)&&this.j(a)){this.c=a.pixel;this.a.setMap(a.map);var b=this.a,c=this.c;b.g=this.c;b.c=c;Bg(b);Ag(b);U(this,new Cg("boxstart",a.coordinate,a));return!0}return!1};function Ig(a){a=a?a:{};var b=a.condition?a.condition:kg;this.g=void 0!==a.duration?a.duration:200;this.s=void 0!==a.out?a.out:!1;Dg.call(this,{condition:b,className:a.className||"ol-dragzoom"})}B(Ig,Dg); + Ig.prototype.h=function(){var a=this.aa,b=a.U(),c=a.Ta(),d=this.S().G();if(this.s){var e=b.lc(c),d=[ug(a,sb(d)),ug(a,[d[2],d[3]])],f=jb(void 0),g,h;g=0;for(h=d.length;g<h;++g)eb(f,d[g]);f=1/yc(f,c);d=(e[2]-e[0])/2*(f-1);f=(e[3]-e[1])/2*(f-1);e[0]-=d;e[2]+=d;e[1]-=f;e[3]+=f;d=e}c=b.constrainResolution(yc(d,c));e=b.O();f=b.qa();a.oa(Fc({resolution:e,duration:this.g,easing:Ac}));a.oa(Dc({source:f,duration:this.g,easing:Ac}));b.xa(tb(d));b.set(wc,c)};function Jg(a){bg.call(this,{handleEvent:Kg});a=a||{};this.a=function(a){return jg(a)&&lg(a)};this.c=void 0!==a.condition?a.condition:this.a;this.f=void 0!==a.duration?a.duration:100;this.g=void 0!==a.pixelDelta?a.pixelDelta:128}B(Jg,bg); + function Kg(a){var b=!1;if("keydown"==a.type){var c=a.originalEvent.keyCode;if(this.c(a)&&(40==c||37==c||39==c||38==c)){var d=a.map,b=d.U(),e=b.O()*this.g,f=0,g=0;40==c?g=-e:37==c?f=-e:39==c?f=e:g=e;c=[f,g];bb(c,b.get(xc));e=this.f;if(f=b.qa())e&&0<e&&d.oa(Dc({source:f,duration:e,easing:Cc})),d=b.a.center([f[0]+c[0],f[1]+c[1]]),b.xa(d);a.preventDefault();b=!0}}return!b};function Lg(a){bg.call(this,{handleEvent:Mg});a=a?a:{};this.c=a.condition?a.condition:lg;this.a=a.delta?a.delta:1;this.f=void 0!==a.duration?a.duration:100}B(Lg,bg);function Mg(a){var b=!1;if("keydown"==a.type||"keypress"==a.type){var c=a.originalEvent.charCode;if(this.c(a)&&(43==c||45==c)){var b=a.map,c=43==c?this.a:-this.a,d=b.U();dg(b,d,c,void 0,this.f);a.preventDefault();b=!0}}return!b};function Ng(a){bg.call(this,{handleEvent:Og});a=a||{};this.a=0;this.i=void 0!==a.duration?a.duration:250;this.j=void 0!==a.useAnchor?a.useAnchor:!0;this.f=null;this.g=this.c=void 0}B(Ng,bg); + function Og(a){var b=!1;if("wheel"==a.type||"mousewheel"==a.type){var b=a.map,c=a.originalEvent;this.j&&(this.f=a.coordinate);var d;"wheel"==a.type?(d=c.deltaY,le&&c.deltaMode===K.WheelEvent.DOM_DELTA_PIXEL&&(d/=oe),c.deltaMode===K.WheelEvent.DOM_DELTA_LINE&&(d*=40)):"mousewheel"==a.type&&(d=-c.wheelDeltaY,me&&(d/=3));this.a+=d;void 0===this.c&&(this.c=Date.now());d=Math.max(80-(Date.now()-this.c),0);K.clearTimeout(this.g);this.g=K.setTimeout(this.h.bind(this,b),d);a.preventDefault();b=!0}return!b} + Ng.prototype.h=function(a){var b=ia(this.a,-1,1),c=a.U();dg(a,c,-b,this.f,this.i);this.a=0;this.f=null;this.g=this.c=void 0};function Pg(a){ng.call(this,{handleDownEvent:Qg,handleDragEvent:Rg,handleUpEvent:Sg});a=a||{};this.c=null;this.g=void 0;this.a=!1;this.h=0;this.j=void 0!==a.threshold?a.threshold:.3;this.i=void 0!==a.duration?a.duration:250}B(Pg,ng); + function Rg(a){var b=0,c=this.f[0],d=this.f[1],c=Math.atan2(d.clientY-c.clientY,d.clientX-c.clientX);void 0!==this.g&&(b=c-this.g,this.h+=b,!this.a&&Math.abs(this.h)>this.j&&(this.a=!0));this.g=c;a=a.map;c=a.a.getBoundingClientRect();d=pg(this.f);d[0]-=c.left;d[1]-=c.top;this.c=a.Ba(d);this.a&&(c=a.U(),d=c.get(xc),a.render(),cg(a,c,d+b,this.c))} + function Sg(a){if(2>this.f.length){a=a.map;var b=a.U();zc(b,-1);if(this.a){var c=b.get(xc),d=this.c,e=this.i,c=b.constrainRotation(c,0);cg(a,b,c,d,e)}return!1}return!0}function Qg(a){return 2<=this.f.length?(a=a.map,this.c=null,this.g=void 0,this.a=!1,this.h=0,this.v||zc(a.U(),1),a.render(),!0):!1}Pg.prototype.B=zb;function Tg(a){ng.call(this,{handleDownEvent:Ug,handleDragEvent:Vg,handleUpEvent:Wg});a=a?a:{};this.c=null;this.h=void 0!==a.duration?a.duration:400;this.a=void 0;this.g=1}B(Tg,ng);function Vg(a){var b=1,c=this.f[0],d=this.f[1],e=c.clientX-d.clientX,c=c.clientY-d.clientY,e=Math.sqrt(e*e+c*c);void 0!==this.a&&(b=this.a/e);this.a=e;1!=b&&(this.g=b);a=a.map;var e=a.U(),c=e.O(),d=a.a.getBoundingClientRect(),f=pg(this.f);f[0]-=d.left;f[1]-=d.top;this.c=a.Ba(f);a.render();eg(a,e,c*b,this.c)} + function Wg(a){if(2>this.f.length){a=a.map;var b=a.U();zc(b,-1);var c=b.O(),d=this.c,e=this.h,c=b.constrainResolution(c,0,this.g-1);eg(a,b,c,d,e);return!1}return!0}function Ug(a){return 2<=this.f.length?(a=a.map,this.c=null,this.a=void 0,this.g=1,this.v||zc(a.U(),1),a.render(),!0):!1}Tg.prototype.B=zb;function Xg(a){var b=a||{};a=pa({},b);delete a.layers;b=b.layers;sf.call(this,a);this.c=[];this.a={};R(this,La("layers"),this.yd,this);b?Array.isArray(b)?b=new cd(b.slice()):L(b instanceof cd,43):b=new cd;this.set("layers",b)}B(Xg,sf);n=Xg.prototype;n.rb=function(){this.gb()&&this.w()}; + n.yd=function(){this.c.forEach(M);this.c.length=0;var a=this.get("layers");this.c.push(R(a,hd,this.xd,this),R(a,id,this.zd,this));for(var b in this.a)this.a[b].forEach(M);qa(this.a);var a=a.a,c,d;b=0;for(c=a.length;b<c;b++)d=a[b],this.a[J(d).toString()]=[R(d,"propertychange",this.rb,this),R(d,"change",this.rb,this)];this.w()};n.xd=function(a){a=a.element;var b=J(a).toString();this.a[b]=[R(a,"propertychange",this.rb,this),R(a,"change",this.rb,this)];this.w()}; + n.zd=function(a){a=J(a.element).toString();this.a[a].forEach(M);delete this.a[a];this.w()};n.Pb=function(a){var b=void 0!==a?a:[],c=b.length;ed(this.get("layers"),function(a){a.Pb(b)});a=tf(this);var d,e;for(d=b.length;c<d;c++)e=b[c],e.opacity*=a.opacity,e.visible=e.visible&&a.visible,e.maxResolution=Math.min(e.maxResolution,a.maxResolution),e.minResolution=Math.max(e.minResolution,a.minResolution),void 0!==a.extent&&(e.extent=void 0!==e.extent?vb(e.extent,a.extent):a.extent);return b};n.Sb=function(){return"ready"};function Yg(a){Eb.call(this,{code:a,units:"m",extent:Zg,global:!0,worldExtent:$g})}B(Yg,Eb);Yg.prototype.getPointResolution=function(a,b){return a/ja(b[1]/6378137)};var ah=6378137*Math.PI,Zg=[-ah,-ah,ah,ah],$g=[-180,-85,180,85],bh="EPSG:3857 EPSG:102100 EPSG:102113 EPSG:900913 urn:ogc:def:crs:EPSG:6.18:3:3857 urn:ogc:def:crs:EPSG::3857 http://www.opengis.net/gml/srs/epsg.xml#3857".split(" ").map(function(a){return new Yg(a)}); + function ch(a,b,c){var d=a.length;c=1<c?c:2;void 0===b&&(2<c?b=a.slice():b=Array(d));for(var e=0;e<d;e+=c)b[e]=6378137*Math.PI*a[e]/180,b[e+1]=6378137*Math.log(Math.tan(Math.PI*(a[e+1]+90)/360));return b}function dh(a,b,c){var d=a.length;c=1<c?c:2;void 0===b&&(2<c?b=a.slice():b=Array(d));for(var e=0;e<d;e+=c)b[e]=180*a[e]/(6378137*Math.PI),b[e+1]=360*Math.atan(Math.exp(a[e+1]/6378137))/Math.PI-90;return b};var eh=new Ab(6378137);function fh(a,b){Eb.call(this,{code:a,units:"degrees",extent:gh,axisOrientation:b,global:!0,metersPerUnit:hh,worldExtent:gh})}B(fh,Eb);fh.prototype.getPointResolution=function(a){return a}; + var gh=[-180,-90,180,90],hh=Math.PI*eh.radius/180,ih=[new fh("CRS:84"),new fh("EPSG:4326","neu"),new fh("urn:ogc:def:crs:EPSG::4326","neu"),new fh("urn:ogc:def:crs:EPSG:6.6:4326","neu"),new fh("urn:ogc:def:crs:OGC:1.3:CRS84"),new fh("urn:ogc:def:crs:OGC:2:84"),new fh("http://www.opengis.net/gml/srs/epsg.xml#4326","neu"),new fh("urn:x-ogc:def:crs:EPSG:4326","neu")];function W(a){a=a?a:{};var b=pa({},a);delete b.preload;delete b.useInterimTilesOnError;xf.call(this,b);this.set("preload",void 0!==a.preload?a.preload:0);this.set("useInterimTilesOnError",void 0!==a.useInterimTilesOnError?a.useInterimTilesOnError:!0)}B(W,xf);function jh(a){return a.get("useInterimTilesOnError")};var kh=[0,0,0,1],lh=[],mh=[0,0,0,1];function nh(a,b,c,d){0!==b&&(a.translate(c,d),a.rotate(b),a.translate(-c,-d))};function oh(a){this.C=a.opacity;this.K=a.rotateWithView;this.s=a.rotation;this.v=a.scale;this.B=a.snapToPixel};function ph(a){a=a||{};this.h=this.c=this.f=null;this.g=void 0!==a.fill?a.fill:null;this.b=void 0!==a.stroke?a.stroke:null;this.a=a.radius;this.j=[0,0];this.i=this.u=this.l=null;var b=a.atlasManager,c,d=null,e,f=0;this.b&&(e=nd(this.b.a),f=this.b.c,void 0===f&&(f=1),d=this.b.b,pe||(d=null));var g=2*(this.a+f)+1;e={strokeStyle:e,jb:f,size:g,lineDash:d};if(void 0===b)b=Md(g,g),this.c=b.canvas,c=g=this.c.width,this.Oc(e,b,0,0),this.g?this.h=this.c:(b=Md(e.size,e.size),this.h=b.canvas,this.Nc(e,b,0,0)); + else{g=Math.round(g);(d=!this.g)&&(c=this.Nc.bind(this,e));var f=this.b?qh(this.b):"-",h=this.g?rh(this.g):"-";this.f&&f==this.f[1]&&h==this.f[2]&&this.a==this.f[3]||(this.f=["c"+f+h+(void 0!==this.a?this.a.toString():"-"),f,h,this.a]);b=b.add(this.f[0],g,g,this.Oc.bind(this,e),c);this.c=b.image;this.j=[b.offsetX,b.offsetY];c=b.image.width;d?this.h=b.Nd:this.h=this.c}this.l=[g/2,g/2];this.u=[g,g];this.i=[c,c];oh.call(this,{opacity:1,rotateWithView:!1,rotation:0,scale:1,snapToPixel:void 0!==a.snapToPixel? + a.snapToPixel:!0})}B(ph,oh);n=ph.prototype;n.eb=function(){return this.l};n.ub=function(){return this.h};n.Z=function(){return this.c};n.ib=function(){return 2};n.Ob=function(){return this.i};n.pa=function(){return this.j};n.Ka=function(){return this.u};n.Vb=I;n.load=I;n.bc=I; + n.Oc=function(a,b,c,d){b.setTransform(1,0,0,1,0,0);b.translate(c,d);b.beginPath();b.arc(a.size/2,a.size/2,this.a,0,2*Math.PI,!0);this.g&&(b.fillStyle=qd(this.g.b),b.fill());this.b&&(b.strokeStyle=a.strokeStyle,b.lineWidth=a.jb,a.lineDash&&b.setLineDash(a.lineDash),b.stroke());b.closePath()}; + n.Nc=function(a,b,c,d){b.setTransform(1,0,0,1,0,0);b.translate(c,d);b.beginPath();b.arc(a.size/2,a.size/2,this.a,0,2*Math.PI,!0);b.fillStyle=nd(kh);b.fill();this.b&&(b.strokeStyle=a.strokeStyle,b.lineWidth=a.jb,a.lineDash&&b.setLineDash(a.lineDash),b.stroke());b.closePath()};function sh(a){a=a||{};this.b=void 0!==a.color?a.color:null;this.a=void 0}function rh(a){void 0===a.a&&(a.a=a.b instanceof CanvasPattern||a.b instanceof CanvasGradient?J(a.b).toString():"f"+(a.b?nd(a.b):"-"));return a.a};function th(){this.a=-1};function uh(){this.a=64;this.b=Array(4);this.g=Array(this.a);this.b[0]=1732584193;this.b[1]=4023233417;this.b[2]=2562383102;this.b[3]=271733878;this.f=this.c=0}(function(){function a(){}a.prototype=th.prototype;uh.a=th.prototype;uh.prototype=new a;uh.prototype.constructor=uh;uh.b=function(a,c,d){for(var e=Array(arguments.length-2),f=2;f<arguments.length;f++)e[f-2]=arguments[f];return th.prototype[c].apply(a,e)}})(); + function vh(a,b,c){c||(c=0);var d=Array(16);if("string"==typeof b)for(var e=0;16>e;++e)d[e]=b.charCodeAt(c++)|b.charCodeAt(c++)<<8|b.charCodeAt(c++)<<16|b.charCodeAt(c++)<<24;else for(e=0;16>e;++e)d[e]=b[c++]|b[c++]<<8|b[c++]<<16|b[c++]<<24;b=a.b[0];c=a.b[1];var e=a.b[2],f=a.b[3],g;g=b+(f^c&(e^f))+d[0]+3614090360&4294967295;b=c+(g<<7&4294967295|g>>>25);g=f+(e^b&(c^e))+d[1]+3905402710&4294967295;f=b+(g<<12&4294967295|g>>>20);g=e+(c^f&(b^c))+d[2]+606105819&4294967295;e=f+(g<<17&4294967295|g>>>15);g= + c+(b^e&(f^b))+d[3]+3250441966&4294967295;c=e+(g<<22&4294967295|g>>>10);g=b+(f^c&(e^f))+d[4]+4118548399&4294967295;b=c+(g<<7&4294967295|g>>>25);g=f+(e^b&(c^e))+d[5]+1200080426&4294967295;f=b+(g<<12&4294967295|g>>>20);g=e+(c^f&(b^c))+d[6]+2821735955&4294967295;e=f+(g<<17&4294967295|g>>>15);g=c+(b^e&(f^b))+d[7]+4249261313&4294967295;c=e+(g<<22&4294967295|g>>>10);g=b+(f^c&(e^f))+d[8]+1770035416&4294967295;b=c+(g<<7&4294967295|g>>>25);g=f+(e^b&(c^e))+d[9]+2336552879&4294967295;f=b+(g<<12&4294967295|g>>> + 20);g=e+(c^f&(b^c))+d[10]+4294925233&4294967295;e=f+(g<<17&4294967295|g>>>15);g=c+(b^e&(f^b))+d[11]+2304563134&4294967295;c=e+(g<<22&4294967295|g>>>10);g=b+(f^c&(e^f))+d[12]+1804603682&4294967295;b=c+(g<<7&4294967295|g>>>25);g=f+(e^b&(c^e))+d[13]+4254626195&4294967295;f=b+(g<<12&4294967295|g>>>20);g=e+(c^f&(b^c))+d[14]+2792965006&4294967295;e=f+(g<<17&4294967295|g>>>15);g=c+(b^e&(f^b))+d[15]+1236535329&4294967295;c=e+(g<<22&4294967295|g>>>10);g=b+(e^f&(c^e))+d[1]+4129170786&4294967295;b=c+(g<<5&4294967295| + g>>>27);g=f+(c^e&(b^c))+d[6]+3225465664&4294967295;f=b+(g<<9&4294967295|g>>>23);g=e+(b^c&(f^b))+d[11]+643717713&4294967295;e=f+(g<<14&4294967295|g>>>18);g=c+(f^b&(e^f))+d[0]+3921069994&4294967295;c=e+(g<<20&4294967295|g>>>12);g=b+(e^f&(c^e))+d[5]+3593408605&4294967295;b=c+(g<<5&4294967295|g>>>27);g=f+(c^e&(b^c))+d[10]+38016083&4294967295;f=b+(g<<9&4294967295|g>>>23);g=e+(b^c&(f^b))+d[15]+3634488961&4294967295;e=f+(g<<14&4294967295|g>>>18);g=c+(f^b&(e^f))+d[4]+3889429448&4294967295;c=e+(g<<20&4294967295| + g>>>12);g=b+(e^f&(c^e))+d[9]+568446438&4294967295;b=c+(g<<5&4294967295|g>>>27);g=f+(c^e&(b^c))+d[14]+3275163606&4294967295;f=b+(g<<9&4294967295|g>>>23);g=e+(b^c&(f^b))+d[3]+4107603335&4294967295;e=f+(g<<14&4294967295|g>>>18);g=c+(f^b&(e^f))+d[8]+1163531501&4294967295;c=e+(g<<20&4294967295|g>>>12);g=b+(e^f&(c^e))+d[13]+2850285829&4294967295;b=c+(g<<5&4294967295|g>>>27);g=f+(c^e&(b^c))+d[2]+4243563512&4294967295;f=b+(g<<9&4294967295|g>>>23);g=e+(b^c&(f^b))+d[7]+1735328473&4294967295;e=f+(g<<14&4294967295| + g>>>18);g=c+(f^b&(e^f))+d[12]+2368359562&4294967295;c=e+(g<<20&4294967295|g>>>12);g=b+(c^e^f)+d[5]+4294588738&4294967295;b=c+(g<<4&4294967295|g>>>28);g=f+(b^c^e)+d[8]+2272392833&4294967295;f=b+(g<<11&4294967295|g>>>21);g=e+(f^b^c)+d[11]+1839030562&4294967295;e=f+(g<<16&4294967295|g>>>16);g=c+(e^f^b)+d[14]+4259657740&4294967295;c=e+(g<<23&4294967295|g>>>9);g=b+(c^e^f)+d[1]+2763975236&4294967295;b=c+(g<<4&4294967295|g>>>28);g=f+(b^c^e)+d[4]+1272893353&4294967295;f=b+(g<<11&4294967295|g>>>21);g=e+(f^ + b^c)+d[7]+4139469664&4294967295;e=f+(g<<16&4294967295|g>>>16);g=c+(e^f^b)+d[10]+3200236656&4294967295;c=e+(g<<23&4294967295|g>>>9);g=b+(c^e^f)+d[13]+681279174&4294967295;b=c+(g<<4&4294967295|g>>>28);g=f+(b^c^e)+d[0]+3936430074&4294967295;f=b+(g<<11&4294967295|g>>>21);g=e+(f^b^c)+d[3]+3572445317&4294967295;e=f+(g<<16&4294967295|g>>>16);g=c+(e^f^b)+d[6]+76029189&4294967295;c=e+(g<<23&4294967295|g>>>9);g=b+(c^e^f)+d[9]+3654602809&4294967295;b=c+(g<<4&4294967295|g>>>28);g=f+(b^c^e)+d[12]+3873151461&4294967295; + f=b+(g<<11&4294967295|g>>>21);g=e+(f^b^c)+d[15]+530742520&4294967295;e=f+(g<<16&4294967295|g>>>16);g=c+(e^f^b)+d[2]+3299628645&4294967295;c=e+(g<<23&4294967295|g>>>9);g=b+(e^(c|~f))+d[0]+4096336452&4294967295;b=c+(g<<6&4294967295|g>>>26);g=f+(c^(b|~e))+d[7]+1126891415&4294967295;f=b+(g<<10&4294967295|g>>>22);g=e+(b^(f|~c))+d[14]+2878612391&4294967295;e=f+(g<<15&4294967295|g>>>17);g=c+(f^(e|~b))+d[5]+4237533241&4294967295;c=e+(g<<21&4294967295|g>>>11);g=b+(e^(c|~f))+d[12]+1700485571&4294967295;b=c+ + (g<<6&4294967295|g>>>26);g=f+(c^(b|~e))+d[3]+2399980690&4294967295;f=b+(g<<10&4294967295|g>>>22);g=e+(b^(f|~c))+d[10]+4293915773&4294967295;e=f+(g<<15&4294967295|g>>>17);g=c+(f^(e|~b))+d[1]+2240044497&4294967295;c=e+(g<<21&4294967295|g>>>11);g=b+(e^(c|~f))+d[8]+1873313359&4294967295;b=c+(g<<6&4294967295|g>>>26);g=f+(c^(b|~e))+d[15]+4264355552&4294967295;f=b+(g<<10&4294967295|g>>>22);g=e+(b^(f|~c))+d[6]+2734768916&4294967295;e=f+(g<<15&4294967295|g>>>17);g=c+(f^(e|~b))+d[13]+1309151649&4294967295; + c=e+(g<<21&4294967295|g>>>11);g=b+(e^(c|~f))+d[4]+4149444226&4294967295;b=c+(g<<6&4294967295|g>>>26);g=f+(c^(b|~e))+d[11]+3174756917&4294967295;f=b+(g<<10&4294967295|g>>>22);g=e+(b^(f|~c))+d[2]+718787259&4294967295;e=f+(g<<15&4294967295|g>>>17);g=c+(f^(e|~b))+d[9]+3951481745&4294967295;a.b[0]=a.b[0]+b&4294967295;a.b[1]=a.b[1]+(e+(g<<21&4294967295|g>>>11))&4294967295;a.b[2]=a.b[2]+e&4294967295;a.b[3]=a.b[3]+f&4294967295} + function wh(a,b){var c;void 0===c&&(c=b.length);for(var d=c-a.a,e=a.g,f=a.c,g=0;g<c;){if(0==f)for(;g<=d;)vh(a,b,g),g+=a.a;if("string"==typeof b)for(;g<c;){if(e[f++]=b.charCodeAt(g++),f==a.a){vh(a,e);f=0;break}}else for(;g<c;)if(e[f++]=b[g++],f==a.a){vh(a,e);f=0;break}}a.c=f;a.f+=c};function xh(a){a=a||{};this.a=void 0!==a.color?a.color:null;this.f=a.lineCap;this.b=void 0!==a.lineDash?a.lineDash:null;this.g=a.lineJoin;this.h=a.miterLimit;this.c=a.width;this.l=void 0} + function qh(a){if(void 0===a.l){var b="s"+(a.a?nd(a.a):"-")+","+(void 0!==a.f?a.f.toString():"-")+","+(a.b?a.b.toString():"-")+","+(void 0!==a.g?a.g:"-")+","+(void 0!==a.h?a.h.toString():"-")+","+(void 0!==a.c?a.c.toString():"-"),c=new uh;wh(c,b);var d=Array((56>c.c?c.a:2*c.a)-c.c);d[0]=128;for(b=1;b<d.length-8;++b)d[b]=0;for(var e=8*c.f,b=d.length-8;b<d.length;++b)d[b]=e&255,e/=256;wh(c,d);d=Array(16);for(b=e=0;4>b;++b)for(var f=0;32>f;f+=8)d[e++]=c.b[b]>>>f&255;if(8192>=d.length)c=String.fromCharCode.apply(null, + d);else for(c="",b=0;b<d.length;b+=8192)c+=String.fromCharCode.apply(null,td(d,b,b+8192));a.l=c}return a.l};function yh(a){a=a||{};this.h=null;this.c=zh;void 0!==a.geometry&&Ah(this,a.geometry);this.g=void 0!==a.fill?a.fill:null;this.l=void 0!==a.image?a.image:null;this.f=void 0!==a.stroke?a.stroke:null;this.a=void 0!==a.text?a.text:null;this.b=a.zIndex}yh.prototype.S=function(){return this.h};yh.prototype.Z=function(){return this.l};function Ah(a,b){"function"===typeof b?a.c=b:"string"===typeof b?a.c=function(a){return a.get(b)}:b?b&&(a.c=function(){return b}):a.c=zh;a.h=b} + function Bh(a){if("function"!==typeof a){var b;Array.isArray(a)?b=a:(L(a instanceof yh,41),b=[a]);a=function(){return b}}return a}var Ch=null;function Dh(){if(!Ch){var a=new sh({color:"rgba(255,255,255,0.4)"}),b=new xh({color:"#3399CC",width:1.25});Ch=[new yh({image:new ph({fill:a,stroke:b,radius:5}),fill:a,stroke:b})]}return Ch} + function Eh(){var a={},b=[255,255,255,1],c=[0,153,255,1];a.Polygon=[new yh({fill:new sh({color:[255,255,255,.5]})})];a.MultiPolygon=a.Polygon;a.LineString=[new yh({stroke:new xh({color:b,width:5})}),new yh({stroke:new xh({color:c,width:3})})];a.MultiLineString=a.LineString;a.Circle=a.Polygon.concat(a.LineString);a.Point=[new yh({image:new ph({radius:6,fill:new sh({color:c}),stroke:new xh({color:b,width:1.5})}),zIndex:Infinity})];a.MultiPoint=a.Point;a.GeometryCollection=a.Polygon.concat(a.LineString, + a.Point);return a}function zh(a){return a.S()};function Y(a){a=a?a:{};var b=pa({},a);delete b.style;delete b.renderBuffer;delete b.updateWhileAnimating;delete b.updateWhileInteracting;xf.call(this,b);this.a=void 0!==a.renderBuffer?a.renderBuffer:100;this.s=null;this.g=void 0;this.v(a.style);this.i=void 0!==a.updateWhileAnimating?a.updateWhileAnimating:!1;this.j=void 0!==a.updateWhileInteracting?a.updateWhileInteracting:!1}B(Y,xf);Y.prototype.v=function(a){this.s=void 0!==a?a:Dh;this.g=null===a?void 0:Bh(this.s);this.w()};function Fh(){};function Gh(a,b,c,d,e){this.f=a;this.v=b;this.l=c;this.u=d;this.Ga=e;this.g=this.b=this.a=this.ha=this.P=this.N=null;this.aa=this.W=this.K=this.M=this.D=this.B=0;this.ba=!1;this.h=this.ra=0;this.ma=!1;this.Y=0;this.c="";this.Ea=this.na=0;this.va=!1;this.j=this.wa=0;this.ca=this.C=this.i=null;this.s=[];this.Fa=Cf()}B(Gh,Fh); + function Hh(a,b,c){if(a.g){b=Xb(b,0,c,2,a.u,a.s);c=a.f;var d=a.Fa,e=c.globalAlpha;1!=a.K&&(c.globalAlpha=e*a.K);var f=a.ra;a.ba&&(f+=a.Ga);var g,h;g=0;for(h=b.length;g<h;g+=2){var k=b[g]-a.B,l=b[g+1]-a.D;a.ma&&(k=Math.round(k),l=Math.round(l));if(0!==f||1!=a.h){var m=k+a.B,p=l+a.D;Lf(d,m,p,a.h,a.h,f,-m,-p);c.setTransform.apply(c,d)}c.drawImage(a.g,a.W,a.aa,a.Y,a.M,k,l,a.Y,a.M)}0===f&&1==a.h||c.setTransform(1,0,0,1,0,0);1!=a.K&&(c.globalAlpha=e)}} + function Ih(a,b,c,d){var e=0;if(a.ca&&""!==a.c){a.i&&Jh(a,a.i);a.C&&Kh(a,a.C);var f=a.ca,g=a.f,h=a.ha;h?(h.font!=f.font&&(h.font=g.font=f.font),h.textAlign!=f.textAlign&&(h.textAlign=g.textAlign=f.textAlign),h.textBaseline!=f.textBaseline&&(h.textBaseline=g.textBaseline=f.textBaseline)):(g.font=f.font,g.textAlign=f.textAlign,g.textBaseline=f.textBaseline,a.ha={font:f.font,textAlign:f.textAlign,textBaseline:f.textBaseline});b=Xb(b,e,c,d,a.u,a.s);f=a.f;g=a.wa;for(a.va&&(g+=a.Ga);e<c;e+=d){var h=b[e]+ + a.na,k=b[e+1]+a.Ea;if(0!==g||1!=a.j){var l=Lf(a.Fa,h,k,a.j,a.j,g,-h,-k);f.setTransform.apply(f,l)}a.C&&f.strokeText(a.c,h,k);a.i&&f.fillText(a.c,h,k)}0===g&&1==a.j||f.setTransform(1,0,0,1,0,0)}}function Lh(a,b,c,d,e,f){var g=a.f;a=Xb(b,c,d,e,a.u,a.s);g.moveTo(a[0],a[1]);b=a.length;f&&(b-=2);for(c=2;c<b;c+=2)g.lineTo(a[c],a[c+1]);f&&g.closePath();return d}function Mh(a,b,c,d,e){var f,g;f=0;for(g=d.length;f<g;++f)c=Lh(a,b,c,d[f],e,!0);return c}n=Gh.prototype; + n.pc=function(a){if(wb(this.l,a.G())){if(this.a||this.b){this.a&&Jh(this,this.a);this.b&&Kh(this,this.b);var b;b=(b=a.o)?Xb(b,0,b.length,a.A,this.u,this.s):null;var c=b[2]-b[0],d=b[3]-b[1],c=Math.sqrt(c*c+d*d),d=this.f;d.beginPath();d.arc(b[0],b[1],c,0,2*Math.PI);this.a&&d.fill();this.b&&d.stroke()}""!==this.c&&Ih(this,a.o.slice(0,a.A),2,2)}};n.cb=function(a){var b=a.o;a=a.A;this.g&&Hh(this,b,b.length);""!==this.c&&Ih(this,b,b.length,a)}; + n.bb=function(a){var b=a.o;a=a.A;this.g&&Hh(this,b,b.length);""!==this.c&&Ih(this,b,b.length,a)};n.qc=function(a){if(wb(this.l,a.G())){if(this.b){Kh(this,this.b);var b=this.f,c=a.o;b.beginPath();Lh(this,c,0,c.length,a.A,!1);b.stroke()}""!==this.c&&(a=Nh(a),Ih(this,a,2,2))}}; + n.rc=function(a){var b=a.G();if(wb(this.l,b)){if(this.b){Kh(this,this.b);var b=this.f,c=a.o,d=0,e=a.ua,f=a.A;b.beginPath();var g,h;g=0;for(h=e.length;g<h;++g)d=Lh(this,c,d,e[g],f,!1);b.stroke()}""!==this.c&&(a=Oh(a),Ih(this,a,a.length,2))}};n.tc=function(a){if(wb(this.l,a.G())){if(this.b||this.a){this.a&&Jh(this,this.a);this.b&&Kh(this,this.b);var b=this.f;b.beginPath();Mh(this,sc(a),0,a.ja,a.A);this.a&&b.fill();this.b&&b.stroke()}""!==this.c&&(a=tc(a),Ih(this,a,2,2))}}; + n.sc=function(a){if(wb(this.l,a.G())){if(this.b||this.a){this.a&&Jh(this,this.a);this.b&&Kh(this,this.b);var b=this.f,c=Ph(a),d=0,e=a.a,f=a.A,g,h;g=0;for(h=e.length;g<h;++g){var k=e[g];b.beginPath();d=Mh(this,c,d,k,f);this.a&&b.fill();this.b&&b.stroke()}}""!==this.c&&(a=Qh(a),Ih(this,a,a.length,2))}};function Jh(a,b){var c=a.f,d=a.N;d?d.fillStyle!=b.fillStyle&&(d.fillStyle=c.fillStyle=b.fillStyle):(c.fillStyle=b.fillStyle,a.N={fillStyle:b.fillStyle})} + function Kh(a,b){var c=a.f,d=a.P;d?(d.lineCap!=b.lineCap&&(d.lineCap=c.lineCap=b.lineCap),pe&&!Ra(d.lineDash,b.lineDash)&&c.setLineDash(d.lineDash=b.lineDash),d.lineJoin!=b.lineJoin&&(d.lineJoin=c.lineJoin=b.lineJoin),d.lineWidth!=b.lineWidth&&(d.lineWidth=c.lineWidth=b.lineWidth),d.miterLimit!=b.miterLimit&&(d.miterLimit=c.miterLimit=b.miterLimit),d.strokeStyle!=b.strokeStyle&&(d.strokeStyle=c.strokeStyle=b.strokeStyle)):(c.lineCap=b.lineCap,pe&&c.setLineDash(b.lineDash),c.lineJoin=b.lineJoin,c.lineWidth= + b.lineWidth,c.miterLimit=b.miterLimit,c.strokeStyle=b.strokeStyle,a.P={lineCap:b.lineCap,lineDash:b.lineDash,lineJoin:b.lineJoin,lineWidth:b.lineWidth,miterLimit:b.miterLimit,strokeStyle:b.strokeStyle})} + n.La=function(a,b){if(a){var c=a.b;this.a={fillStyle:qd(c?c:kh)}}else this.a=null;if(b){var c=b.a,d=b.f,e=b.b,f=b.g,g=b.c,h=b.h;this.b={lineCap:void 0!==d?d:"round",lineDash:e?e:lh,lineJoin:void 0!==f?f:"round",lineWidth:this.v*(void 0!==g?g:1),miterLimit:void 0!==h?h:10,strokeStyle:nd(c?c:mh)}}else this.b=null}; + n.Ma=function(a){if(a){var b=a.eb(),c=a.Z(1),d=a.pa(),e=a.Ka();this.B=b[0];this.D=b[1];this.M=e[1];this.g=c;this.K=a.C;this.W=d[0];this.aa=d[1];this.ba=a.K;this.ra=a.s;this.h=a.v;this.ma=a.B;this.Y=e[0]}else this.g=null}; + n.Ca=function(a){if(a){var b=a.f;b?(b=b.b,this.i={fillStyle:qd(b?b:kh)}):this.i=null;var c=a.i;if(c){var b=c.a,d=c.f,e=c.b,f=c.g,g=c.c,c=c.h;this.C={lineCap:void 0!==d?d:"round",lineDash:e?e:lh,lineJoin:void 0!==f?f:"round",lineWidth:void 0!==g?g:1,miterLimit:void 0!==c?c:10,strokeStyle:nd(b?b:mh)}}else this.C=null;var b=a.b,d=a.a,e=a.c,f=a.g,g=a.h,c=a.l,h=a.j,k=a.C;a=a.K;this.ca={font:void 0!==b?b:"10px sans-serif",textAlign:void 0!==k?k:"center",textBaseline:void 0!==a?a:"middle"};this.c=void 0!== + h?h:"";this.na=void 0!==d?this.v*d:0;this.Ea=void 0!==e?this.v*e:0;this.va=void 0!==f?f:!1;this.wa=void 0!==g?g:0;this.j=this.v*(void 0!==c?c:1)}else this.c=""};function Rh(a){Ia.call(this);this.a=a}B(Rh,Ia);Rh.prototype.fa=I;Rh.prototype.Ec=zb;Rh.prototype.l=function(a,b,c){return function(d,e){return Sh(a,b,d,e,function(a){c[d]||(c[d]={});c[d][a.V.toString()]=a})}};function Th(a){var b=a.a;b.gb()&&"ready"==b.Sb()&&a.w()}function Uh(a,b){b.Mc()&&a.postRenderFunctions.push(function(a,b,e){b=J(a).toString();a.Oa(e.viewState.projection,e.usedTiles[b])}.bind(null,b))}function Vh(a,b){if(b){var c,d,e;d=0;for(e=b.length;d<e;++d)c=b[d],a[J(c).toString()]=c}} + function Wh(a,b){var c=b.D;void 0!==c&&("string"===typeof c?a.logos[c]="":c&&(L("string"==typeof c.href,44),L("string"==typeof c.src,45),a.logos[c.src]=c.href))}function Xh(a,b,c,d){b=J(b).toString();c=c.toString();b in a?c in a[b]?(a=a[b][c],d.H<a.H&&(a.H=d.H),d.I>a.I&&(a.I=d.I),d.J<a.J&&(a.J=d.J),d.L>a.L&&(a.L=d.L)):a[b][c]=d:(a[b]={},a[b][c]=d)}function Yh(a,b,c){return[b*(Math.round(a[0]/b)+c[0]%2/2),b*(Math.round(a[1]/b)+c[1]%2/2)]} + function Zh(a,b,c,d,e,f,g,h,k,l){var m=J(b).toString();m in a.wantedTiles||(a.wantedTiles[m]={});var p=a.wantedTiles[m];a=a.tileQueue;var q=c.minZoom,u,w,r,x,D,t;for(t=g;t>=q;--t)for(w=Rc(c,f,t,w),r=c.O(t),x=w.H;x<=w.I;++x)for(D=w.J;D<=w.L;++D)g-t<=h?(u=$h(b,t,x,D,d,e),0==u.T()&&(p[u.getKey()]=!0,u.getKey()in a.a||a.g([u,m,Vc(c,u.V),r])),void 0!==k&&k.call(l,u)):b.Vc(t,x,D,e)};function ai(a){Rh.call(this,a);this.M=Cf()}B(ai,Rh);function bi(a,b,c){var d=b.pixelRatio,e=b.size[0]*d,f=b.size[1]*d,g=b.viewState.rotation,h=xb(c),k=[c[2],c[3]],l=[c[2],c[1]];c=sb(c);Hf(b.coordinateToPixelTransform,h);Hf(b.coordinateToPixelTransform,k);Hf(b.coordinateToPixelTransform,l);Hf(b.coordinateToPixelTransform,c);a.save();nh(a,-g,e/2,f/2);a.beginPath();a.moveTo(h[0]*d,h[1]*d);a.lineTo(k[0]*d,k[1]*d);a.lineTo(l[0]*d,l[1]*d);a.lineTo(c[0]*d,c[1]*d);a.clip();nh(a,g,e/2,f/2)} + ai.prototype.g=function(a,b,c){ci(this,"precompose",c,a,void 0);var d=this.Z();if(d){var e=b.extent,f=void 0!==e;f&&bi(c,a,e);var e=this.N,g=c.globalAlpha;c.globalAlpha=b.opacity;c.drawImage(d,0,0,+d.width,+d.height,Math.round(e[4]),Math.round(e[5]),Math.round(d.width*e[0]),Math.round(d.height*e[3]));c.globalAlpha=g;f&&c.restore()}ci(this,"postcompose",c,a,void 0)}; + function ci(a,b,c,d,e){var f=a.a;if(Ha(f,b)){var g=d.size[0]*d.pixelRatio,h=d.size[1]*d.pixelRatio,k=d.viewState.rotation;nh(c,-k,g/2,h/2);a=void 0!==e?e:di(a,d,0);U(f,new uf(b,new Gh(c,d.pixelRatio,d.extent,a,d.viewState.rotation),d,c,null));nh(c,k,g/2,h/2)}}function di(a,b,c){var d=b.viewState,e=b.pixelRatio,f=e/d.resolution;return Lf(a.M,e*b.size[0]/2,e*b.size[1]/2,f,-f,-d.rotation,-d.center[0]+c,-d.center[1])};function ei(){};var fi=["Polygon","LineString","Image","Text"];function gi(a,b,c,d){this.ra=a;this.P=b;this.overlaps=d;this.g=null;this.h=0;this.resolution=c;this.ca=this.Y=null;this.a=[];this.coordinates=[];this.W=Cf();this.b=[];this.ha=[];this.aa=Cf();this.ba=Cf()}B(gi,Fh); + function hi(a,b,c,d,e,f){var g=a.coordinates.length,h=a.Nb(),k=[b[c],b[c+1]],l=[NaN,NaN],m=!0,p,q,u;for(p=c+e;p<d;p+=e){l[0]=b[p];l[1]=b[p+1];u=h[1];var w=h[2],r=h[3],x=l[0],D=l[1],t=0;x<h[0]?t|=16:x>w&&(t|=4);D<u?t|=8:D>r&&(t|=2);0===t&&(t=1);u=t;u!==q?(m&&(a.coordinates[g++]=k[0],a.coordinates[g++]=k[1]),a.coordinates[g++]=l[0],a.coordinates[g++]=l[1],m=!1):1===u?(a.coordinates[g++]=l[0],a.coordinates[g++]=l[1],m=!1):m=!0;k[0]=l[0];k[1]=l[1];q=u}p===c+e&&(a.coordinates[g++]=k[0],a.coordinates[g++]= + k[1]);f&&(a.coordinates[g++]=b[c],a.coordinates[g++]=b[c+1]);return g}function ii(a,b){a.Y=[0,b,0];a.a.push(a.Y);a.ca=[0,b,0];a.b.push(a.ca)} + function ji(a,b,c,d,e,f,g,h,k){var l;Ra(d,a.W)?l=a.ha:(l=Xb(a.coordinates,0,a.coordinates.length,2,d,a.ha),Gf(a.W,d));d=!sa(f);var m=0,p=g.length,q,u,w=a.aa,r=a.ba,x,D,t,z,C=0,E=0;for(a=a.a!=g||a.overlaps?0:200;m<p;){var v=g[m],H,G,A,F;switch(v[0]){case 0:q=v[1];d&&f[J(q).toString()]||!q.S()?m=v[2]:void 0===k||wb(k,q.S().G())?++m:m=v[2]+1;break;case 1:C>a&&(b.fill(),C=0);E>a&&(b.stroke(),E=0);C||E||b.beginPath();++m;break;case 2:q=v[1];u=l[q];v=l[q+1];t=l[q+2]-u;q=l[q+3]-v;q=Math.sqrt(t*t+q*q);b.moveTo(u+ + q,v);b.arc(u,v,q,0,2*Math.PI,!0);++m;break;case 3:b.closePath();++m;break;case 4:q=v[1];u=v[2];H=v[3];G=v[4]*c;A=v[5]*c;var Q=v[6],N=v[7],O=v[8],S=v[9];F=v[10];t=v[11];z=v[12];var X=v[13],P=v[14];for(F&&(t+=e);q<u;q+=2){v=l[q]-G;F=l[q+1]-A;X&&(v=Math.round(v),F=Math.round(F));if(1!=z||0!==t){var Ba=v+G,Nb=F+A;Lf(w,Ba,Nb,z,z,t,-Ba,-Nb);b.transform.apply(b,w)}Ba=b.globalAlpha;1!=N&&(b.globalAlpha=Ba*N);var Nb=P+O>H.width?H.width-O:P,Ca=Q+S>H.height?H.height-S:Q;b.drawImage(H,O,S,Nb,Ca,v,F,Nb*c,Ca*c); + 1!=N&&(b.globalAlpha=Ba);if(1!=z||0!==t)Mf(Gf(r,w)),b.transform.apply(b,r)}++m;break;case 5:q=v[1];u=v[2];A=v[3];Q=v[4]*c;N=v[5]*c;t=v[6];z=v[7]*c;H=v[8];G=v[9];for((F=v[10])&&(t+=e);q<u;q+=2){v=l[q]+Q;F=l[q+1]+N;if(1!=z||0!==t)Lf(w,v,F,z,z,t,-v,-F),b.transform.apply(b,w);O=A.split("\n");S=O.length;1<S?(X=Math.round(1.5*b.measureText("M").width),F-=(S-1)/2*X):X=0;for(P=0;P<S;P++)Ba=O[P],G&&b.strokeText(Ba,v,F),H&&b.fillText(Ba,v,F),F+=X;if(1!=z||0!==t)Mf(Gf(r,w)),b.transform.apply(b,r)}++m;break; + case 6:if(void 0!==h&&(q=v[1],q=h(q)))return q;++m;break;case 7:a?C++:b.fill();++m;break;case 8:q=v[1];u=v[2];v=l[q];F=l[q+1];t=v+.5|0;z=F+.5|0;if(t!==x||z!==D)b.moveTo(v,F),x=t,D=z;for(q+=2;q<u;q+=2)if(v=l[q],F=l[q+1],t=v+.5|0,z=F+.5|0,q==u-2||t!==x||z!==D)b.lineTo(v,F),x=t,D=z;++m;break;case 9:C&&(b.fill(),C=0);b.fillStyle=v[1];++m;break;case 10:x=void 0!==v[7]?v[7]:!0;D=v[2];E&&(b.stroke(),E=0);b.strokeStyle=v[1];b.lineWidth=x?D*c:D;b.lineCap=v[3];b.lineJoin=v[4];b.miterLimit=v[5];pe&&b.setLineDash(v[6]); + D=x=NaN;++m;break;case 11:b.font=v[1];b.textAlign=v[2];b.textBaseline=v[3];++m;break;case 12:a?E++:b.stroke();++m;break;default:++m}}C&&b.fill();E&&b.stroke()}gi.prototype.f=function(a,b,c,d,e){ji(this,a,b,c,d,e,this.a,void 0,void 0)};function ki(a){var b=a.b;b.reverse();var c,d=b.length,e,f,g=-1;for(c=0;c<d;++c)if(e=b[c],f=e[0],6==f)g=c;else if(0==f){e[2]=c;e=a.b;for(f=c;g<f;){var h=e[g];e[g]=e[f];e[f]=h;++g;--f}g=-1}} + function li(a,b){a.Y[2]=a.a.length;a.Y=null;a.ca[2]=a.b.length;a.ca=null;var c=[6,b];a.a.push(c);a.b.push(c)}gi.prototype.tb=I;gi.prototype.Nb=function(){return this.P};function mi(a,b,c,d){gi.call(this,a,b,c,d);this.j=this.N=null;this.M=this.D=this.B=this.u=this.v=this.s=this.K=this.C=this.i=this.l=this.c=void 0}B(mi,gi); + mi.prototype.cb=function(a,b){if(this.j){ii(this,b);var c=a.o,d=this.coordinates.length,c=hi(this,c,0,c.length,a.A,!1);this.a.push([4,d,c,this.j,this.c,this.l,this.i,this.C,this.K,this.s,this.v,this.u,this.B,this.D,this.M]);this.b.push([4,d,c,this.N,this.c,this.l,this.i,this.C,this.K,this.s,this.v,this.u,this.B,this.D,this.M]);li(this,b)}}; + mi.prototype.bb=function(a,b){if(this.j){ii(this,b);var c=a.o,d=this.coordinates.length,c=hi(this,c,0,c.length,a.A,!1);this.a.push([4,d,c,this.j,this.c,this.l,this.i,this.C,this.K,this.s,this.v,this.u,this.B,this.D,this.M]);this.b.push([4,d,c,this.N,this.c,this.l,this.i,this.C,this.K,this.s,this.v,this.u,this.B,this.D,this.M]);li(this,b)}};mi.prototype.tb=function(){ki(this);this.l=this.c=void 0;this.j=this.N=null;this.M=this.D=this.u=this.v=this.s=this.K=this.C=this.B=this.i=void 0}; + mi.prototype.Ma=function(a){var b=a.eb(),c=a.Ka(),d=a.ub(1),e=a.Z(1),f=a.pa();this.c=b[0];this.l=b[1];this.N=d;this.j=e;this.i=c[1];this.C=a.C;this.K=f[0];this.s=f[1];this.v=a.K;this.u=a.s;this.B=a.v;this.D=a.B;this.M=c[0]};function ni(a,b,c,d){gi.call(this,a,b,c,d);this.c={ab:void 0,Wa:void 0,Xa:null,Ya:void 0,Za:void 0,$a:void 0,Ub:0,strokeStyle:void 0,lineCap:void 0,lineDash:null,lineJoin:void 0,lineWidth:void 0,miterLimit:void 0}}B(ni,gi); + function oi(a,b,c,d,e){var f=a.coordinates.length;b=hi(a,b,c,d,e,!1);f=[8,f,b];a.a.push(f);a.b.push(f);return d}n=ni.prototype;n.Nb=function(){this.g||(this.g=gb(this.P),0<this.h&&fb(this.g,this.resolution*(this.h+1)/2,this.g));return this.g}; + function pi(a){var b=a.c,c=b.strokeStyle,d=b.lineCap,e=b.lineDash,f=b.lineJoin,g=b.lineWidth,h=b.miterLimit;b.ab==c&&b.Wa==d&&Ra(b.Xa,e)&&b.Ya==f&&b.Za==g&&b.$a==h||(b.Ub!=a.coordinates.length&&(a.a.push([12]),b.Ub=a.coordinates.length),a.a.push([10,c,g,d,f,h,e],[1]),b.ab=c,b.Wa=d,b.Xa=e,b.Ya=f,b.Za=g,b.$a=h)} + n.qc=function(a,b){var c=this.c,d=c.lineWidth;void 0!==c.strokeStyle&&void 0!==d&&(pi(this),ii(this,b),this.b.push([10,c.strokeStyle,c.lineWidth,c.lineCap,c.lineJoin,c.miterLimit,c.lineDash],[1]),c=a.o,oi(this,c,0,c.length,a.A),this.b.push([12]),li(this,b))}; + n.rc=function(a,b){var c=this.c,d=c.lineWidth;if(void 0!==c.strokeStyle&&void 0!==d){pi(this);ii(this,b);this.b.push([10,c.strokeStyle,c.lineWidth,c.lineCap,c.lineJoin,c.miterLimit,c.lineDash],[1]);var c=a.ua,d=a.o,e=a.A,f=0,g,h;g=0;for(h=c.length;g<h;++g)f=oi(this,d,f,c[g],e);this.b.push([12]);li(this,b)}};n.tb=function(){this.c.Ub!=this.coordinates.length&&this.a.push([12]);ki(this);this.c=null}; + n.La=function(a,b){var c=b.a;this.c.strokeStyle=nd(c?c:mh);c=b.f;this.c.lineCap=void 0!==c?c:"round";c=b.b;this.c.lineDash=c?c:lh;c=b.g;this.c.lineJoin=void 0!==c?c:"round";c=b.c;this.c.lineWidth=void 0!==c?c:1;c=b.h;this.c.miterLimit=void 0!==c?c:10;this.c.lineWidth>this.h&&(this.h=this.c.lineWidth,this.g=null)}; + function qi(a,b,c,d){gi.call(this,a,b,c,d);this.c={oc:void 0,ab:void 0,Wa:void 0,Xa:null,Ya:void 0,Za:void 0,$a:void 0,fillStyle:void 0,strokeStyle:void 0,lineCap:void 0,lineDash:null,lineJoin:void 0,lineWidth:void 0,miterLimit:void 0}}B(qi,gi); + function ri(a,b,c,d,e){var f=a.c,g=void 0!==f.fillStyle,f=void 0!=f.strokeStyle,h=d.length;if(!g&&!f)return d[h-1];var k=[1];a.a.push(k);a.b.push(k);for(k=0;k<h;++k){var l=d[k],m=a.coordinates.length;c=hi(a,b,c,l,e,!0);c=[8,m,c];a.a.push(c);a.b.push(c);f&&(c=[3],a.a.push(c),a.b.push(c));c=l}b=[7];a.b.push(b);g&&a.a.push(b);f&&(g=[12],a.a.push(g),a.b.push(g));return c}n=qi.prototype; + n.pc=function(a,b){var c=this.c,d=c.strokeStyle;if(void 0!==c.fillStyle||void 0!==d){si(this);ii(this,b);this.b.push([9,nd(kh)]);void 0!==c.strokeStyle&&this.b.push([10,c.strokeStyle,c.lineWidth,c.lineCap,c.lineJoin,c.miterLimit,c.lineDash]);var e=a.o,d=this.coordinates.length;hi(this,e,0,e.length,a.A,!1);e=[1];d=[2,d];this.a.push(e,d);this.b.push(e,d);d=[7];this.b.push(d);void 0!==c.fillStyle&&this.a.push(d);void 0!==c.strokeStyle&&(c=[12],this.a.push(c),this.b.push(c));li(this,b)}}; + n.tc=function(a,b){var c=this.c,d=c.strokeStyle;if(void 0!==c.fillStyle||void 0!==d)si(this),ii(this,b),this.b.push([9,nd(kh)]),void 0!==c.strokeStyle&&this.b.push([10,c.strokeStyle,c.lineWidth,c.lineCap,c.lineJoin,c.miterLimit,c.lineDash]),c=a.ja,d=sc(a),ri(this,d,0,c,a.A),li(this,b)}; + n.sc=function(a,b){var c=this.c,d=c.strokeStyle;if(void 0!==c.fillStyle||void 0!==d){si(this);ii(this,b);this.b.push([9,nd(kh)]);void 0!==c.strokeStyle&&this.b.push([10,c.strokeStyle,c.lineWidth,c.lineCap,c.lineJoin,c.miterLimit,c.lineDash]);var c=a.a,d=Ph(a),e=a.A,f=0,g,h;g=0;for(h=c.length;g<h;++g)f=ri(this,d,f,c[g],e);li(this,b)}};n.tb=function(){ki(this);this.c=null;var a=this.ra;if(0!==a){var b=this.coordinates,c,d;c=0;for(d=b.length;c<d;++c)b[c]=a*Math.round(b[c]/a)}}; + n.Nb=function(){this.g||(this.g=gb(this.P),0<this.h&&fb(this.g,this.resolution*(this.h+1)/2,this.g));return this.g}; + n.La=function(a,b){var c=this.c;if(a){var d=a.b;c.fillStyle=qd(d?d:kh)}else c.fillStyle=void 0;b?(d=b.a,c.strokeStyle=nd(d?d:mh),d=b.f,c.lineCap=void 0!==d?d:"round",d=b.b,c.lineDash=d?d.slice():lh,d=b.g,c.lineJoin=void 0!==d?d:"round",d=b.c,c.lineWidth=void 0!==d?d:1,d=b.h,c.miterLimit=void 0!==d?d:10,c.lineWidth>this.h&&(this.h=c.lineWidth,this.g=null)):(c.strokeStyle=void 0,c.lineCap=void 0,c.lineDash=null,c.lineJoin=void 0,c.lineWidth=void 0,c.miterLimit=void 0)}; + function si(a){var b=a.c,c=b.fillStyle,d=b.strokeStyle,e=b.lineCap,f=b.lineDash,g=b.lineJoin,h=b.lineWidth,k=b.miterLimit;void 0!==c&&b.oc!=c&&(a.a.push([9,c]),b.oc=b.fillStyle);void 0===d||b.ab==d&&b.Wa==e&&b.Xa==f&&b.Ya==g&&b.Za==h&&b.$a==k||(a.a.push([10,d,h,e,g,k,f]),b.ab=d,b.Wa=e,b.Xa=f,b.Ya=g,b.Za=h,b.$a=k)}function ti(a,b,c,d){gi.call(this,a,b,c,d);this.M=this.D=this.B=null;this.j="";this.K=this.C=0;this.s=void 0;this.u=this.v=0;this.i=this.l=this.c=null}B(ti,gi); + function ui(a,b,c,d,e){if(""!==a.j&&a.i&&(a.c||a.l)){if(a.c){var f=a.c,g=a.B;if(!g||g.fillStyle!=f.fillStyle){var h=[9,f.fillStyle];a.a.push(h);a.b.push(h);g?g.fillStyle=f.fillStyle:a.B={fillStyle:f.fillStyle}}}a.l&&(f=a.l,g=a.D,g&&g.lineCap==f.lineCap&&g.lineDash==f.lineDash&&g.lineJoin==f.lineJoin&&g.lineWidth==f.lineWidth&&g.miterLimit==f.miterLimit&&g.strokeStyle==f.strokeStyle||(h=[10,f.strokeStyle,f.lineWidth,f.lineCap,f.lineJoin,f.miterLimit,f.lineDash,!1],a.a.push(h),a.b.push(h),g?(g.lineCap= + f.lineCap,g.lineDash=f.lineDash,g.lineJoin=f.lineJoin,g.lineWidth=f.lineWidth,g.miterLimit=f.miterLimit,g.strokeStyle=f.strokeStyle):a.D={lineCap:f.lineCap,lineDash:f.lineDash,lineJoin:f.lineJoin,lineWidth:f.lineWidth,miterLimit:f.miterLimit,strokeStyle:f.strokeStyle}));f=a.i;g=a.M;g&&g.font==f.font&&g.textAlign==f.textAlign&&g.textBaseline==f.textBaseline||(h=[11,f.font,f.textAlign,f.textBaseline],a.a.push(h),a.b.push(h),g?(g.font=f.font,g.textAlign=f.textAlign,g.textBaseline=f.textBaseline):a.M= + {font:f.font,textAlign:f.textAlign,textBaseline:f.textBaseline});ii(a,e);f=a.coordinates.length;b=hi(a,b,0,c,d,!1);b=[5,f,b,a.j,a.C,a.K,a.v,a.u,!!a.c,!!a.l,a.s];a.a.push(b);a.b.push(b);li(a,e)}} + ti.prototype.Ca=function(a){if(a){var b=a.f;b?(b=b.b,b=qd(b?b:kh),this.c?this.c.fillStyle=b:this.c={fillStyle:b}):this.c=null;var c=a.i;if(c){var b=c.a,d=c.f,e=c.b,f=c.g,g=c.c,c=c.h,d=void 0!==d?d:"round",e=e?e.slice():lh,f=void 0!==f?f:"round",g=void 0!==g?g:1,c=void 0!==c?c:10,b=nd(b?b:mh);if(this.l){var h=this.l;h.lineCap=d;h.lineDash=e;h.lineJoin=f;h.lineWidth=g;h.miterLimit=c;h.strokeStyle=b}else this.l={lineCap:d,lineDash:e,lineJoin:f,lineWidth:g,miterLimit:c,strokeStyle:b}}else this.l=null; + var k=a.b,b=a.a,d=a.c,e=a.g,g=a.h,c=a.l,f=a.j,h=a.C,l=a.K;a=void 0!==k?k:"10px sans-serif";h=void 0!==h?h:"center";l=void 0!==l?l:"middle";this.i?(k=this.i,k.font=a,k.textAlign=h,k.textBaseline=l):this.i={font:a,textAlign:h,textBaseline:l};this.j=void 0!==f?f:"";this.C=void 0!==b?b:0;this.K=void 0!==d?d:0;this.s=void 0!==e?e:!1;this.v=void 0!==g?g:0;this.u=void 0!==c?c:1}else this.j=""};function vi(a,b,c,d,e){this.K=a;this.g=b;this.j=d;this.C=c;this.h=e;this.a={};this.l=Md(1,1);this.i=Cf()}B(vi,ei); + function wi(a){for(var b in a.a){var c=a.a[b],d;for(d in c)c[d].tb()}}vi.prototype.fa=function(a,b,c,d,e){var f=Lf(this.i,.5,.5,1/b,-1/b,-c,-a[0],-a[1]),g=this.l;g.clearRect(0,0,1,1);var h;void 0!==this.h&&(h=db(),eb(h,a),fb(h,b*this.h,h));return xi(this,g,f,c,d,function(a){if(0<g.getImageData(0,0,1,1).data[3]){if(a=e(a))return a;g.clearRect(0,0,1,1)}},h)}; + vi.prototype.b=function(a,b){var c=void 0!==a?a.toString():"0",d=this.a[c];void 0===d&&(d={},this.a[c]=d);c=d[b];void 0===c&&(c=new yi[b](this.K,this.g,this.C,this.j),d[b]=c);return c};vi.prototype.c=function(){return sa(this.a)}; + vi.prototype.f=function(a,b,c,d,e,f){var g=Object.keys(this.a).map(Number);g.sort(Ma);var h=this.g,k=h[0],l=h[1],m=h[2],h=h[3],k=[k,l,k,h,m,h,m,l];Xb(k,0,8,2,c,k);a.save();a.beginPath();a.moveTo(k[0],k[1]);a.lineTo(k[2],k[3]);a.lineTo(k[4],k[5]);a.lineTo(k[6],k[7]);a.clip();f=f?f:fi;for(var p,q,k=0,l=g.length;k<l;++k)for(p=this.a[g[k].toString()],m=0,h=f.length;m<h;++m)q=p[f[m]],void 0!==q&&q.f(a,b,c,d,e);a.restore()}; + function xi(a,b,c,d,e,f,g){var h=Object.keys(a.a).map(Number);h.sort(function(a,b){return b-a});var k,l,m,p,q;k=0;for(l=h.length;k<l;++k)for(p=a.a[h[k].toString()],m=fi.length-1;0<=m;--m)if(q=p[fi[m]],void 0!==q&&(q=ji(q,b,1,c,d,e,q.b,f,g)))return q}var yi={Image:mi,LineString:ni,Polygon:qi,Text:ti};function zi(a,b){return J(a)-J(b)}function Ai(a,b){var c=.5*a/b;return c*c}function Bi(a,b,c,d,e,f){var g=!1,h,k;if(h=c.Z())k=h.ib(),2==k||3==k?h.bc(e,f):(0==k&&h.load(),h.Vb(e,f),g=!0);if(e=(0,c.c)(b))d=e.Rb(d),(0,Ci[d.$()])(a,d,c,b);return g} + var Ci={Point:function(a,b,c,d){var e=c.Z();if(e){if(2!=e.ib())return;var f=a.b(c.b,"Image");f.Ma(e);f.cb(b,d)}if(e=c.a)a=a.b(c.b,"Text"),a.Ca(e),ui(a,b.o,2,2,d)},LineString:function(a,b,c,d){var e=c.f;if(e){var f=a.b(c.b,"LineString");f.La(null,e);f.qc(b,d)}if(e=c.a)a=a.b(c.b,"Text"),a.Ca(e),ui(a,Nh(b),2,2,d)},Polygon:function(a,b,c,d){var e=c.g,f=c.f;if(e||f){var g=a.b(c.b,"Polygon");g.La(e,f);g.tc(b,d)}if(e=c.a)a=a.b(c.b,"Text"),a.Ca(e),ui(a,tc(b),2,2,d)},MultiPoint:function(a,b,c,d){var e=c.Z(); + if(e){if(2!=e.ib())return;var f=a.b(c.b,"Image");f.Ma(e);f.bb(b,d)}if(e=c.a)a=a.b(c.b,"Text"),a.Ca(e),c=b.o,ui(a,c,c.length,b.A,d)},MultiLineString:function(a,b,c,d){var e=c.f;if(e){var f=a.b(c.b,"LineString");f.La(null,e);f.rc(b,d)}if(e=c.a)a=a.b(c.b,"Text"),a.Ca(e),b=Oh(b),ui(a,b,b.length,2,d)},MultiPolygon:function(a,b,c,d){var e=c.g,f=c.f;if(f||e){var g=a.b(c.b,"Polygon");g.La(e,f);g.sc(b,d)}if(e=c.a)a=a.b(c.b,"Text"),a.Ca(e),b=Qh(b),ui(a,b,b.length,2,d)},GeometryCollection:function(a,b,c,d){b= + b.a;var e,f;e=0;for(f=b.length;e<f;++e)(0,Ci[b[e].$()])(a,b[e],c,d)},Circle:function(a,b,c,d){var e=c.g,f=c.f;if(e||f){var g=a.b(c.b,"Polygon");g.La(e,f);g.pc(b,d)}if(e=c.a)a=a.b(c.b,"Text"),a.Ca(e),ui(a,b.o.slice(0,b.A),2,2,d)}};var Di,Ei=K,Fi=-1<Ei.navigator.userAgent.indexOf("OPR"),Gi=-1<Ei.navigator.userAgent.indexOf("Edge");Di=!(!Ei.navigator.userAgent.match("CriOS")&&null!==Ei.chrome&&void 0!==Ei.chrome&&"Google Inc."===Ei.navigator.vendor&&0==Fi&&0==Gi);function Hi(a,b,c,d){a=c-a;b=d-b;var e=Math.sqrt(a*a+b*b);return[Math.round(c+a/e),Math.round(d+b/e)]} + function Ii(a,b,c,d,e,f,g,h,k,l,m){var p=Md(Math.round(c*a),Math.round(c*b));if(0===k.length)return p.canvas;p.scale(c,c);var q=db();k.forEach(function(a){mb(q,a.extent)});var u=Md(Math.round(c*qb(q)/d),Math.round(c*rb(q)/d)),w=c/d;k.forEach(function(a){u.drawImage(a.image,l,l,a.image.width-2*l,a.image.height-2*l,(a.extent[0]-q[0])*w,-(a.extent[3]-q[3])*w,qb(a.extent)*w,rb(a.extent)*w)});var r=xb(g);h.f.forEach(function(a){var b=a.source,e=a.target,g=b[1][0],h=b[1][1],k=b[2][0],l=b[2][1];a=(e[0][0]- + r[0])/f;var m=-(e[0][1]-r[1])/f,w=(e[1][0]-r[0])/f,A=-(e[1][1]-r[1])/f,F=(e[2][0]-r[0])/f,Q=-(e[2][1]-r[1])/f,e=b[0][0],b=b[0][1],g=g-e,h=h-b,k=k-e,l=l-b;a:{g=[[g,h,0,0,w-a],[k,l,0,0,F-a],[0,0,g,h,A-m],[0,0,k,l,Q-m]];h=g.length;for(k=0;k<h;k++){for(var l=k,N=Math.abs(g[k][k]),O=k+1;O<h;O++){var S=Math.abs(g[O][k]);S>N&&(N=S,l=O)}if(0===N){g=null;break a}N=g[l];g[l]=g[k];g[k]=N;for(l=k+1;l<h;l++)for(N=-g[l][k]/g[k][k],O=k;O<h+1;O++)g[l][O]=k==O?0:g[l][O]+N*g[k][O]}k=Array(h);for(l=h-1;0<=l;l--)for(k[l]= + g[l][h]/g[l][l],N=l-1;0<=N;N--)g[N][h]-=g[N][l]*k[l];g=k}g&&(p.save(),p.beginPath(),Di?(k=(a+w+F)/3,l=(m+A+Q)/3,h=Hi(k,l,a,m),w=Hi(k,l,w,A),F=Hi(k,l,F,Q),p.moveTo(w[0],w[1]),p.lineTo(h[0],h[1]),p.lineTo(F[0],F[1])):(p.moveTo(w,A),p.lineTo(a,m),p.lineTo(F,Q)),p.clip(),p.transform(g[0],g[2],g[1],g[3],a,m),p.translate(q[0]-e,q[3]-b),p.scale(d/c,-d/c),p.drawImage(u.canvas,0,0),p.restore())});m&&(p.save(),p.strokeStyle="black",p.lineWidth=1,h.f.forEach(function(a){var b=a.target;a=(b[0][0]-r[0])/f;var c= + -(b[0][1]-r[1])/f,d=(b[1][0]-r[0])/f,e=-(b[1][1]-r[1])/f,g=(b[2][0]-r[0])/f,b=-(b[2][1]-r[1])/f;p.beginPath();p.moveTo(d,e);p.lineTo(a,c);p.lineTo(g,b);p.closePath();p.stroke()}),p.restore());return p.canvas};function Ji(a,b,c,d,e){this.c=a;this.g=b;var f={},g=Ub(this.g,this.c);this.a=function(a){var b=a[0]+"/"+a[1];f[b]||(f[b]=g(a));return f[b]};this.h=d;this.C=e*e;this.f=[];this.i=!1;this.j=this.c.b&&!!d&&!!this.c.G()&&qb(d)==qb(this.c.G());this.b=this.c.G()?qb(this.c.G()):null;this.l=this.g.G()?qb(this.g.G()):null;a=xb(c);b=[c[2],c[3]];d=[c[2],c[1]];c=sb(c);e=this.a(a);var h=this.a(b),k=this.a(d),l=this.a(c);Ki(this,a,b,d,c,e,h,k,l,10);if(this.i){var m=Infinity;this.f.forEach(function(a){m=Math.min(m, + a.source[0][0],a.source[1][0],a.source[2][0])});this.f.forEach(function(a){if(Math.max(a.source[0][0],a.source[1][0],a.source[2][0])-m>this.b/2){var b=[[a.source[0][0],a.source[0][1]],[a.source[1][0],a.source[1][1]],[a.source[2][0],a.source[2][1]]];b[0][0]-m>this.b/2&&(b[0][0]-=this.b);b[1][0]-m>this.b/2&&(b[1][0]-=this.b);b[2][0]-m>this.b/2&&(b[2][0]-=this.b);Math.max(b[0][0],b[1][0],b[2][0])-Math.min(b[0][0],b[1][0],b[2][0])<this.b/2&&(a.source=b)}},this)}f={}} + function Ki(a,b,c,d,e,f,g,h,k,l){var m=cb([f,g,h,k]),p=a.b?qb(m)/a.b:null,q=a.b,u=a.c.b&&.5<p&&1>p,w=!1;if(0<l){if(a.g.c&&a.l)var r=cb([b,c,d,e]),w=w|.25<qb(r)/a.l;!u&&a.c.c&&p&&(w|=.25<p)}if(w||!a.h||wb(m,a.h)){if(!(w||isFinite(f[0])&&isFinite(f[1])&&isFinite(g[0])&&isFinite(g[1])&&isFinite(h[0])&&isFinite(h[1])&&isFinite(k[0])&&isFinite(k[1])))if(0<l)w=!0;else return;if(0<l&&(w||(m=a.a([(b[0]+d[0])/2,(b[1]+d[1])/2]),q=u?(la(f[0],q)+la(h[0],q))/2-la(m[0],q):(f[0]+h[0])/2-m[0],m=(f[1]+h[1])/2-m[1], + w=q*q+m*m>a.C),w)){Math.abs(b[0]-d[0])<=Math.abs(b[1]-d[1])?(u=[(c[0]+d[0])/2,(c[1]+d[1])/2],q=a.a(u),m=[(e[0]+b[0])/2,(e[1]+b[1])/2],p=a.a(m),Ki(a,b,c,u,m,f,g,q,p,l-1),Ki(a,m,u,d,e,p,q,h,k,l-1)):(u=[(b[0]+c[0])/2,(b[1]+c[1])/2],q=a.a(u),m=[(d[0]+e[0])/2,(d[1]+e[1])/2],p=a.a(m),Ki(a,b,u,m,e,f,q,p,k,l-1),Ki(a,u,c,d,m,q,g,h,p,l-1));return}if(u){if(!a.j)return;a.i=!0}a.f.push({source:[f,h,k],target:[b,d,e]});a.f.push({source:[f,g,h],target:[b,c,d]})}} + function Li(a){var b=db();a.f.forEach(function(a){a=a.source;eb(b,a[0]);eb(b,a[1]);eb(b,a[2])});return b};function Mi(a){ai.call(this,a);this.f=Md();this.c=null;this.j=db();this.s=[0,0,0];this.h=Cf()}B(Mi,ai); + Mi.prototype.g=function(a,b,c){var d=di(this,a,0);ci(this,"precompose",c,a,d);var e=a.pixelRatio,f=a.viewState,g=f.center,h=f.projection,k=f.rotation,l=a.size,m=Math.round(e*l[0]/2),l=Math.round(e*l[1]/2),f=e/f.resolution,p=this.a,q=p.da(),u=e*q.nb(h),w=q.sa(h),p=Ha(p,"render"),r=c,x=1,D,t,z;if(k||p){r=this.f;D=r.canvas;var x=q.pb(e)/e,C=c.canvas.width*x;t=c.canvas.height*x;z=Math.round(Math.sqrt(C*C+t*t));D.width!=z?D.width=D.height=z:r.clearRect(0,0,z,z);D=(z-C)/2/x;t=(z-t)/2/x;f*=x;m=Math.round(x* + (m+D));l=Math.round(x*(l+t))}C=r.globalAlpha;r.globalAlpha=b.opacity;var E=this.c,v,H=q.Qb(h)&&1==b.opacity;H||(E.reverse(),v=[]);var G=b.extent;if(b=void 0!==G){var A=xb(G),F=[G[2],G[3]],Q=[G[2],G[1]],G=sb(G);Hf(a.coordinateToPixelTransform,A);Hf(a.coordinateToPixelTransform,F);Hf(a.coordinateToPixelTransform,Q);Hf(a.coordinateToPixelTransform,G);var N=D||0,O=t||0;r.save();var S=r.canvas.width/2,X=r.canvas.height/2;nh(r,-k,S,X);r.beginPath();r.moveTo(x*(A[0]*e+N),x*(A[1]*e+O));r.lineTo(x*(F[0]*e+ + N),x*(F[1]*e+O));r.lineTo(x*(Q[0]*e+N),x*(Q[1]*e+O));r.lineTo(x*(G[0]*e+N),x*(G[1]*e+O));r.clip();nh(r,k,S,X)}A=0;for(F=E.length;A<F;++A){var Q=E[A],G=Q.V,X=Qc(w,G,this.j),S=G[0],P=sb(Qc(w,Yc(w,g,S,this.s))),G=Math.round(qb(X)*f),N=Math.round(rb(X)*f),O=Math.round((X[0]-P[0])*f/G)*G+m+Math.round((P[0]-g[0])*f),X=Math.round((P[1]-X[3])*f/N)*N+l+Math.round((g[1]-P[1])*f);if(!H){P=[O,X,O+G,X+N];r.save();for(var Ba=0,Nb=v.length;Ba<Nb;++Ba){var Ca=v[Ba];wb(P,Ca)&&(r.beginPath(),r.moveTo(P[0],P[1]),r.lineTo(P[0], + P[3]),r.lineTo(P[2],P[3]),r.lineTo(P[2],P[1]),r.moveTo(Ca[0],Ca[1]),r.lineTo(Ca[2],Ca[1]),r.lineTo(Ca[2],Ca[3]),r.lineTo(Ca[0],Ca[3]),r.closePath(),r.clip())}v.push(P)}S=Ni(q,S,e,h);r.drawImage(Q.Z(),u,u,S[0],S[1],O,X,G,N);H||r.restore()}b&&r.restore();p&&(e=D-m/x+m,h=t-l/x+l,g=Lf(this.h,z/2-e,z/2-h,f,-f,-k,-g[0]+e/f,-g[1]-h/f),ci(this,"render",r,a,g));(k||p)&&c.drawImage(r.canvas,-Math.round(D),-Math.round(t),z/x,z/x);r.globalAlpha=C;ci(this,"postcompose",c,a,d)}; + Mi.prototype.i=function(a,b){function c(a){a=a.T();return 2==a||4==a||3==a&&!u}var d=a.pixelRatio,e=a.viewState,f=e.projection,g=this.a,h=g.da(),k=h.sa(f),l=Xc(k,e.resolution,0),m=k.O(l),p=e.center;m==e.resolution?(p=Yh(p,m,a.size),e=ub(p,m,e.rotation,a.size)):e=a.extent;void 0!==b.extent&&(e=vb(e,b.extent));if(pb(e))return!1;m=Tc(k,e,m);p={};p[l]={};var q=this.l(h,f,p),u=jh(g),w=db(),r=new Gc(0,0,0,0),x,D,t,z;for(t=m.H;t<=m.I;++t)for(z=m.J;z<=m.L;++z)x=$h(h,l,t,z,d,f),!c(x)&&x.b&&(x=x.b),c(x)?p[l][x.V.toString()]= + x:(D=Pc(k,x.V,q,r,w),D||(x=Sc(k,x.V,r,w))&&q(l+1,x));q=Object.keys(p).map(Number);q.sort(Ma);var w=[],C,r=0;for(t=q.length;r<t;++r)for(C in x=q[r],z=p[x],z)x=z[C],2==x.T()&&w.push(x);this.c=w;Xh(a.usedTiles,h,l,m);Zh(a,h,k,d,f,e,l,g.get("preload"));Uh(a,h);Wh(a,h);return!0};function Oi(a){ai.call(this,a);this.c=!1;this.B=-1;this.u=NaN;this.j=db();this.f=this.s=null;this.h=Md()}B(Oi,ai); + Oi.prototype.g=function(a,b,c){var d=a.extent,e=a.pixelRatio,f=b.hb?a.skippedFeatureUids:{},g=a.viewState,h=g.projection,g=g.rotation,k=h.G(),l=this.a.da(),m=di(this,a,0);ci(this,"precompose",c,a,m);var p=b.extent,q=void 0!==p;q&&bi(c,a,p);if((p=this.f)&&!p.c()){var u=0,w=0,r;if(Ha(this.a,"render")){r=c.canvas.width;var x=c.canvas.height;if(g){var D=Math.round(Math.sqrt(r*r+x*x)),u=(D-r)/2,w=(D-x)/2;r=x=D}this.h.canvas.width=r;this.h.canvas.height=x;r=this.h}else r=c;x=r.globalAlpha;r.globalAlpha= + b.opacity;r!=c&&r.translate(u,w);b=a.size[0]*e;D=a.size[1]*e;nh(r,-g,b/2,D/2);p.f(r,e,m,g,f);if(l.i&&h.b&&!hb(k,d)){for(var h=d[0],l=qb(k),t=0;h<k[0];)--t,m=l*t,m=di(this,a,m),p.f(r,e,m,g,f),h+=l;t=0;for(h=d[2];h>k[2];)++t,m=l*t,m=di(this,a,m),p.f(r,e,m,g,f),h-=l;m=di(this,a,0)}nh(r,g,b/2,D/2);r!=c&&(ci(this,"render",r,a,m),c.drawImage(r.canvas,-u,-w),r.translate(-u,-w));r.globalAlpha=x}q&&c.restore();ci(this,"postcompose",c,a,m)}; + Oi.prototype.fa=function(a,b,c,d){if(this.f){var e=this.a,f={};return this.f.fa(a,b.viewState.resolution,b.viewState.rotation,{},function(a){var b=J(a).toString();if(!(b in f))return f[b]=!0,c.call(d,a,e)})}};Oi.prototype.D=function(){Th(this)}; + Oi.prototype.i=function(a){function b(a){var b,d=a.f;d?b=d.call(a,l):(d=c.g)&&(b=d(a,l));if(b){if(b){d=!1;if(Array.isArray(b))for(var e=0,f=b.length;e<f;++e)d=Bi(q,a,b[e],Ai(l,m),this.D,this)||d;else d=Bi(q,a,b,Ai(l,m),this.D,this)||d;a=d}else a=!1;this.c=this.c||a}}var c=this.a,d=c.da();Vh(a.attributions,d.h);Wh(a,d);var e=a.viewHints[0],f=a.viewHints[1],g=c.i,h=c.j;if(!this.c&&!g&&e||!h&&f)return!0;var k=a.extent,h=a.viewState,e=h.projection,l=h.resolution,m=a.pixelRatio,f=c.b,p=c.a,g=c.get("renderOrder"); + void 0===g&&(g=zi);k=fb(k,p*l);p=h.projection.G();d.i&&h.projection.b&&!hb(p,a.extent)&&(a=Math.max(qb(k)/2,qb(p)),k[0]=p[0]-a,k[2]=p[2]+a);if(!this.c&&this.u==l&&this.B==f&&this.s==g&&hb(this.j,k))return!0;this.f=null;this.c=!1;var q=new vi(.5*l/m,k,l,d.u,c.a);Pi(d,k,l,e);if(g){var u=[];Qi(d,k,function(a){u.push(a)},this);u.sort(g);u.forEach(b,this)}else Qi(d,k,b,this);wi(q);this.u=l;this.B=f;this.s=g;this.j=k;this.f=q;return!0};function Ri(a,b){Nf.call(this,0,b);this.f=Md();this.b=this.f.canvas;this.b.style.width="100%";this.b.style.height="100%";this.b.className="ol-unselectable";a.insertBefore(this.b,a.childNodes[0]||null);this.a=!0;this.h=Cf()}B(Ri,Nf);Ri.prototype.Mb=function(a){return a instanceof W?new Mi(a):a instanceof Y?new Oi(a):null}; + function Si(a,b,c){var d=a.g,e=a.f;if(Ha(d,b)){var f=c.extent,g=c.pixelRatio,h=c.viewState.rotation,k=c.viewState,l=c.pixelRatio/k.resolution;a=Lf(a.h,a.b.width/2,a.b.height/2,l,-l,-k.rotation,-k.center[0],-k.center[1]);U(d,new uf(b,new Gh(e,g,f,a,h),c,e,null))}}Ri.prototype.$=function(){return"canvas"}; + Ri.prototype.vb=function(a){if(a){var b=this.f,c=a.pixelRatio,d=Math.round(a.size[0]*c),c=Math.round(a.size[1]*c);this.b.width!=d||this.b.height!=c?(this.b.width=d,this.b.height=c):b.clearRect(0,0,d,c);var e=a.viewState.rotation;Of(a);Si(this,"precompose",a);var f=a.layerStatesArray;Sa(f);nh(b,e,d/2,c/2);var g=a.viewState.resolution,h,k,l,m;h=0;for(k=f.length;h<k;++h)m=f[h],l=m.layer,l=Qf(this,l),yf(m,g)&&"ready"==m.ac&&l.i(a,m)&&l.g(a,m,b);nh(b,-e,d/2,c/2);Si(this,"postcompose",a);this.a||(this.b.style.display= + "",this.a=!0);Rf(this,a);a.postRenderFunctions.push(Pf)}else this.a&&(this.b.style.display="none",this.a=!1)};function Ti(a,b){Rh.call(this,a);this.target=b}B(Ti,Rh);Ti.prototype.Jb=I;Ti.prototype.Gc=I;function Ui(a){var b=document.createElement("DIV");b.style.position="absolute";Ti.call(this,a,b);this.f=!0;this.h=1;this.g=0;this.c={}}B(Ui,Ti);Ui.prototype.Jb=function(){for(var a=this.target;a.lastChild;)a.removeChild(a.lastChild);this.g=0}; + Ui.prototype.Hc=function(a,b){if(!b.visible)return this.f&&(this.target.style.display="none",this.f=!1),!0;var c=a.pixelRatio,d=a.viewState,e=d.projection,f=this.a,g=f.da(),h=g.sa(e),k=c*g.nb(e),l=Xc(h,d.resolution),m=h.O(l),p=d.center,q;m==d.resolution?(p=Yh(p,m,a.size),q=ub(p,m,d.rotation,a.size)):q=a.extent;void 0!==b.extent&&(q=vb(q,b.extent));var m=Tc(h,q,m),u={};u[l]={};var w=this.l(g,e,u),r=jh(f),x=db(),D=new Gc(0,0,0,0),t,z,C,E;for(C=m.H;C<=m.I;++C)for(E=m.J;E<=m.L;++E)t=$h(g,l,C,E,c,e),z= + t.T(),z=2==z||4==z||3==z&&!r,!z&&t.b&&(t=t.b),z=t.T(),2==z?u[l][t.V.toString()]=t:4==z||3==z&&!r||(z=Pc(h,t.V,w,D,x),z||(t=Sc(h,t.V,D,x))&&w(l+1,t));var v;if(this.g!=g.b){for(v in this.c)r=this.c[+v],Sd(r.target);this.c={};this.g=g.b}x=Object.keys(u).map(Number);x.sort(Ma);var w={},H;C=0;for(E=x.length;C<E;++C){v=x[C];v in this.c?r=this.c[v]:(r=Yc(h,p,v),r=new Vi(h,r),w[v]=!0,this.c[v]=r);v=u[v];for(H in v){t=r;z=v[H];var G=k,A=z.V,F=A[0],Q=A[1],N=A[2],A=A.toString();if(!(A in t.a)){var F=Lc(Wc(t.g, + F),t.i),O=z.Z(t),S=O.style;S.maxWidth="none";var X,P;0<G?(X=document.createElement("DIV"),P=X.style,P.overflow="hidden",P.width=F[0]+"px",P.height=F[1]+"px",S.position="absolute",S.left=-G+"px",S.top=-G+"px",S.width=F[0]+2*G+"px",S.height=F[1]+2*G+"px",X.appendChild(O)):(S.width=F[0]+"px",S.height=F[1]+"px",X=O,P=S);P.position="absolute";P.left=(Q-t.c[1])*F[0]+"px";P.top=(t.c[2]-N)*F[1]+"px";t.b||(t.b=document.createDocumentFragment());t.b.appendChild(X);t.a[A]=z}}r.b&&(r.target.appendChild(r.b), + r.b=null)}k=Object.keys(this.c).map(Number);k.sort(Ma);C=Cf();H=0;for(x=k.length;H<x;++H)if(v=k[H],r=this.c[v],v in u)if(t=r.O(),E=r.pa(),Lf(C,a.size[0]/2,a.size[1]/2,t/d.resolution,t/d.resolution,d.rotation,(E[0]-p[0])/t,(p[1]-E[1])/t),r.setTransform(C),v in w){for(--v;0<=v;--v)if(v in this.c){this.c[v].target.parentNode&&this.c[v].target.parentNode.insertBefore(r.target,this.c[v].target.nextSibling);break}0>v&&this.target.insertBefore(r.target,this.target.childNodes[0]||null)}else{if(!a.viewHints[0]&& + !a.viewHints[1]){z=Rc(r.g,q,r.c[0],D);v=[];t=void 0;for(t in r.a)E=r.a[t],G=E.V,Hc(z,G[1],G[2])||v.push(E);z=0;for(G=v.length;z<G;++z)E=v[z],t=E.V.toString(),Sd(E.Z(r)),delete r.a[t]}}else Sd(r.target),delete this.c[v];b.opacity!=this.h&&(this.h=this.target.style.opacity=b.opacity);b.visible&&!this.f&&(this.target.style.display="",this.f=!0);Xh(a.usedTiles,g,l,m);Zh(a,g,h,c,e,q,l,f.get("preload"));Uh(a,g);Wh(a,g);return!0}; + function Vi(a,b){this.target=document.createElement("DIV");this.target.style.position="absolute";this.target.style.width="100%";this.target.style.height="100%";this.g=a;this.c=b;this.h=xb(Qc(a,b));this.l=a.O(b[0]);this.a={};this.b=null;this.f=Cf();this.i=[0,0]}Vi.prototype.pa=function(){return this.h};Vi.prototype.O=function(){return this.l};Vi.prototype.setTransform=function(a){Ra(a,this.f)||(Qd(this.target,a),Gf(this.f,a))};function Wi(a){this.g=Md();var b=this.g.canvas;b.style.maxWidth="none";b.style.position="absolute";Ti.call(this,a,b);this.c=!1;this.h=-1;this.s=NaN;this.i=db();this.f=this.j=null;this.B=Cf();this.u=Cf()}B(Wi,Ti);n=Wi.prototype;n.Jb=function(){var a=this.g.canvas;a.width=a.width;this.h=0}; + n.Gc=function(a,b){var c=a.viewState,d=c.center,e=c.rotation,f=c.resolution,c=a.pixelRatio,g=a.size[0],h=a.size[1],k=g*c,l=h*c,d=Lf(this.B,c*g/2,c*h/2,c/f,-c/f,-e,-d[0],-d[1]),f=this.g;f.canvas.width=k;f.canvas.height=l;var m=Df(this.u);Jf(m,1/c,1/c);Kf(m,-(k-g)/2*c,-(l-h)/2*c);Qd(f.canvas,m);Xi(this,"precompose",a,d);(g=this.f)&&!g.c()&&(f.globalAlpha=b.opacity,g.f(f,c,d,e,b.hb?a.skippedFeatureUids:{}),Xi(this,"render",a,d));Xi(this,"postcompose",a,d)}; + function Xi(a,b,c,d){var e=a.g;a=a.a;Ha(a,b)&&U(a,new uf(b,new Gh(e,c.pixelRatio,c.extent,d,c.viewState.rotation),c,e,null))}n.fa=function(a,b,c,d){if(this.f){var e=this.a,f={};return this.f.fa(a,b.viewState.resolution,b.viewState.rotation,{},function(a){var b=J(a).toString();if(!(b in f))return f[b]=!0,c.call(d,a,e)})}};n.Ic=function(){Th(this)}; + n.Hc=function(a){function b(a){var b,d=a.f;d?b=d.call(a,k):(d=c.g)&&(b=d(a,k));if(b){if(b){d=!1;if(Array.isArray(b))for(var e=0,f=b.length;e<f;++e)d=Bi(m,a,b[e],Ai(k,l),this.Ic,this)||d;else d=Bi(m,a,b,Ai(k,l),this.Ic,this)||d;a=d}else a=!1;this.c=this.c||a}}var c=this.a,d=c.da();Vh(a.attributions,d.h);Wh(a,d);var e=a.viewHints[0],f=a.viewHints[1],g=c.i,h=c.j;if(!this.c&&!g&&e||!h&&f)return!0;var f=a.extent,g=a.viewState,e=g.projection,k=g.resolution,l=a.pixelRatio;a=c.b;h=c.a;g=c.get("renderOrder"); + void 0===g&&(g=zi);f=fb(f,h*k);if(!this.c&&this.s==k&&this.h==a&&this.j==g&&hb(this.i,f))return!0;this.f=null;this.c=!1;var m=new vi(.5*k/l,f,k,d.u,c.a);Pi(d,f,k,e);if(g){var p=[];Qi(d,f,function(a){p.push(a)},this);p.sort(g);p.forEach(b,this)}else Qi(d,f,b,this);wi(m);this.s=k;this.h=a;this.j=g;this.i=f;this.f=m;return!0};function Yi(a,b){Nf.call(this,0,b);this.f=Md();var c=this.f.canvas;c.style.position="absolute";c.style.width="100%";c.style.height="100%";c.className="ol-unselectable";a.insertBefore(c,a.childNodes[0]||null);this.h=Cf();this.b=document.createElement("DIV");this.b.className="ol-unselectable";c=this.b.style;c.position="absolute";c.width="100%";c.height="100%";R(this.b,"touchstart",Fa);a.insertBefore(this.b,a.childNodes[0]||null);this.a=!0}B(Yi,Nf);Yi.prototype.R=function(){Sd(this.b);Nf.prototype.R.call(this)}; + Yi.prototype.Mb=function(a){if(a instanceof W)a=new Ui(a);else if(a instanceof Y)a=new Wi(a);else return null;return a};function Zi(a,b,c){var d=a.g;if(Ha(d,b)){var e=c.extent,f=c.pixelRatio,g=c.viewState,h=g.rotation,k=a.f,l=k.canvas;a=Lf(a.h,l.width/2,l.height/2,f/g.resolution,-f/g.resolution,-h,-g.center[0],-g.center[1]);U(d,new uf(b,new Gh(k,f,e,a,h),c,k,null))}}Yi.prototype.$=function(){return"dom"}; + Yi.prototype.vb=function(a){if(a){var b=this.g;if(Ha(b,"precompose")||Ha(b,"postcompose")){var b=this.f.canvas,c=a.pixelRatio;b.width=a.size[0]*c;b.height=a.size[1]*c}Zi(this,"precompose",a);b=a.layerStatesArray;Sa(b);var c=a.viewState.resolution,d,e,f,g;d=0;for(e=b.length;d<e;++d)g=b[d],f=g.layer,f=Qf(this,f),this.b.insertBefore(f.target,this.b.childNodes[d]||null),yf(g,c)&&"ready"==g.ac?f.Hc(a,g)&&f.Gc(a,g):f.Jb();var b=a.layerStates,h;for(h in this.c)h in b||(f=this.c[h],Sd(f.target));this.a|| + (this.b.style.display="",this.a=!0);Of(a);Rf(this,a);a.postRenderFunctions.push(Pf);Zi(this,"postcompose",a)}else this.a&&(this.b.style.display="none",this.a=!1)};function $i(a){this.b=a};function aj(a){this.b=a}B(aj,$i);aj.prototype.$=function(){return 35632};function bj(a){this.b=a}B(bj,$i);bj.prototype.$=function(){return 35633};function cj(){this.b="precision mediump float;varying vec2 a;varying float b;uniform float k;uniform sampler2D l;void main(void){vec4 texColor=texture2D(l,a);gl_FragColor.rgb=texColor.rgb;float alpha=texColor.a*b*k;if(alpha==0.0){discard;}gl_FragColor.a=alpha;}"}B(cj,aj);var dj=new cj; + function ej(){this.b="varying vec2 a;varying float b;attribute vec2 c;attribute vec2 d;attribute vec2 e;attribute float f;attribute float g;uniform mat4 h;uniform mat4 i;uniform mat4 j;void main(void){mat4 offsetMatrix=i;if(g==1.0){offsetMatrix=i*j;}vec4 offsets=offsetMatrix*vec4(e,0.,0.);gl_Position=h*vec4(c,0.,1.)+offsets;a=d;b=f;}"}B(ej,bj);var fj=new ej; + function gj(a,b){this.i=a.getUniformLocation(b,"j");this.j=a.getUniformLocation(b,"i");this.h=a.getUniformLocation(b,"k");this.l=a.getUniformLocation(b,"h");this.b=a.getAttribLocation(b,"e");this.a=a.getAttribLocation(b,"f");this.f=a.getAttribLocation(b,"c");this.c=a.getAttribLocation(b,"g");this.g=a.getAttribLocation(b,"d")};function hj(a){this.b=void 0!==a?a:[];this.a=ij}var ij=35044;function jj(a,b){this.C=a;this.b=b;this.a={};this.g={};this.f={};this.i=this.j=this.h=this.l=null;(this.c=0<=fa.indexOf("OES_element_index_uint"))&&b.getExtension("OES_element_index_uint");R(this.C,"webglcontextlost",this.K,this);R(this.C,"webglcontextrestored",this.s,this)}B(jj,Aa); + function kj(a,b,c){var d=a.b,e=c.b,f=String(J(c));if(f in a.a)d.bindBuffer(b,a.a[f].buffer);else{var g=d.createBuffer();d.bindBuffer(b,g);var h;34962==b?h=new Float32Array(e):34963==b&&(h=a.c?new Uint32Array(e):new Uint16Array(e));d.bufferData(b,h,c.a);a.a[f]={Qe:c,buffer:g}}}function lj(a,b){var c=a.b,d=String(J(b)),e=a.a[d];c.isContextLost()||c.deleteBuffer(e.buffer);delete a.a[d]} + jj.prototype.R=function(){za(this.C);var a=this.b;if(!a.isContextLost()){for(var b in this.a)a.deleteBuffer(this.a[b].buffer);for(b in this.f)a.deleteProgram(this.f[b]);for(b in this.g)a.deleteShader(this.g[b]);a.deleteFramebuffer(this.h);a.deleteRenderbuffer(this.i);a.deleteTexture(this.j)}}; + function mj(a){if(!a.h){var b=a.b,c=b.createFramebuffer();b.bindFramebuffer(b.FRAMEBUFFER,c);var d=nj(b,1,1),e=b.createRenderbuffer();b.bindRenderbuffer(b.RENDERBUFFER,e);b.renderbufferStorage(b.RENDERBUFFER,b.DEPTH_COMPONENT16,1,1);b.framebufferTexture2D(b.FRAMEBUFFER,b.COLOR_ATTACHMENT0,b.TEXTURE_2D,d,0);b.framebufferRenderbuffer(b.FRAMEBUFFER,b.DEPTH_ATTACHMENT,b.RENDERBUFFER,e);b.bindTexture(b.TEXTURE_2D,null);b.bindRenderbuffer(b.RENDERBUFFER,null);b.bindFramebuffer(b.FRAMEBUFFER,null);a.h=c; + a.j=d;a.i=e}return a.h}function oj(a,b){var c=String(J(b));if(c in a.g)return a.g[c];var d=a.b,e=d.createShader(b.$());d.shaderSource(e,b.b);d.compileShader(e);return a.g[c]=e}function pj(a,b,c){var d=J(b)+"/"+J(c);if(d in a.f)return a.f[d];var e=a.b,f=e.createProgram();e.attachShader(f,oj(a,b));e.attachShader(f,oj(a,c));e.linkProgram(f);return a.f[d]=f}jj.prototype.K=function(){qa(this.a);qa(this.g);qa(this.f);this.i=this.j=this.h=this.l=null};jj.prototype.s=function(){}; + function qj(a,b){if(b==a.l)return!1;a.b.useProgram(b);a.l=b;return!0}function rj(a,b,c){var d=a.createTexture();a.bindTexture(a.TEXTURE_2D,d);a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MAG_FILTER,a.LINEAR);a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MIN_FILTER,a.LINEAR);void 0!==b&&a.texParameteri(3553,10242,b);void 0!==c&&a.texParameteri(3553,10243,c);return d}function nj(a,b,c){var d=rj(a,void 0,void 0);a.texImage2D(a.TEXTURE_2D,0,a.RGBA,b,c,0,a.RGBA,a.UNSIGNED_BYTE,null);return d};function sj(a,b){this.B=this.u=void 0;this.C=tb(b);this.v=[];this.l=[];this.M=void 0;this.h=[];this.g=[];this.ca=this.Y=void 0;this.a=[];this.D=this.j=null;this.N=void 0;this.Ea=Cf();this.va=Cf();this.ha=this.P=void 0;this.wa=Cf();this.ra=Jd();this.ba=this.aa=this.W=void 0;this.na=[];this.i=[];this.b=[];this.s=null;this.c=[];this.K=[];this.ma=void 0}B(sj,Fh); + function tj(a,b){var c=a.s,d=a.j,e=a.na,f=a.i,g=b.b;return function(){if(!g.isContextLost()){var a,k;a=0;for(k=e.length;a<k;++a)g.deleteTexture(e[a]);a=0;for(k=f.length;a<k;++a)g.deleteTexture(f[a])}lj(b,c);lj(b,d)}} + function uj(a,b,c,d){var e=a.u,f=a.B,g=a.M,h=a.Y,k=a.ca,l=a.N,m=a.P,p=a.ha,q=a.W?1:0,u=a.aa,w=a.ba,r=a.ma,x=Math.cos(u),u=Math.sin(u),D=a.a.length,t=a.b.length,z,C,E,v,H,G;for(z=0;z<c;z+=d)H=b[z]-a.C[0],G=b[z+1]-a.C[1],C=t/8,E=-w*e,v=-w*(g-f),a.b[t++]=H,a.b[t++]=G,a.b[t++]=E*x-v*u,a.b[t++]=E*u+v*x,a.b[t++]=m/k,a.b[t++]=(p+g)/h,a.b[t++]=l,a.b[t++]=q,E=w*(r-e),v=-w*(g-f),a.b[t++]=H,a.b[t++]=G,a.b[t++]=E*x-v*u,a.b[t++]=E*u+v*x,a.b[t++]=(m+r)/k,a.b[t++]=(p+g)/h,a.b[t++]=l,a.b[t++]=q,E=w*(r-e),v=w*f,a.b[t++]= + H,a.b[t++]=G,a.b[t++]=E*x-v*u,a.b[t++]=E*u+v*x,a.b[t++]=(m+r)/k,a.b[t++]=p/h,a.b[t++]=l,a.b[t++]=q,E=-w*e,v=w*f,a.b[t++]=H,a.b[t++]=G,a.b[t++]=E*x-v*u,a.b[t++]=E*u+v*x,a.b[t++]=m/k,a.b[t++]=p/h,a.b[t++]=l,a.b[t++]=q,a.a[D++]=C,a.a[D++]=C+1,a.a[D++]=C+2,a.a[D++]=C,a.a[D++]=C+2,a.a[D++]=C+3}sj.prototype.bb=function(a,b){this.c.push(this.a.length);this.K.push(b);var c=a.o;uj(this,c,c.length,a.A)};sj.prototype.cb=function(a,b){this.c.push(this.a.length);this.K.push(b);var c=a.o;uj(this,c,c.length,a.A)}; + function vj(a,b){var c=b.b;a.v.push(a.a.length);a.l.push(a.a.length);a.s=new hj(a.b);kj(b,34962,a.s);a.j=new hj(a.a);kj(b,34963,a.j);var d={};wj(a.na,a.h,d,c);wj(a.i,a.g,d,c);a.u=void 0;a.B=void 0;a.M=void 0;a.h=null;a.g=null;a.Y=void 0;a.ca=void 0;a.a=null;a.N=void 0;a.P=void 0;a.ha=void 0;a.W=void 0;a.aa=void 0;a.ba=void 0;a.b=null;a.ma=void 0} + function wj(a,b,c,d){var e,f,g,h,k=b.length;for(h=0;h<k;++h){f=b[h];g=J(f).toString();if(g in c)e=c[g];else{e=d;var l=rj(e,33071,33071);e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,f);e=l;c[g]=e}a[h]=e}} + sj.prototype.f=function(a,b,c,d,e,f,g,h,k,l,m){f=a.b;kj(a,34962,this.s);kj(a,34963,this.j);var p=pj(a,dj,fj),q;this.D?q=this.D:this.D=q=new gj(f,p);qj(a,p);f.enableVertexAttribArray(q.f);f.vertexAttribPointer(q.f,2,5126,!1,32,0);f.enableVertexAttribArray(q.b);f.vertexAttribPointer(q.b,2,5126,!1,32,8);f.enableVertexAttribArray(q.g);f.vertexAttribPointer(q.g,2,5126,!1,32,16);f.enableVertexAttribArray(q.a);f.vertexAttribPointer(q.a,1,5126,!1,32,24);f.enableVertexAttribArray(q.c);f.vertexAttribPointer(q.c, + 1,5126,!1,32,28);p=Df(this.wa);Jf(p,2/(c*e[0]),2/(c*e[1]));If(p,-d);Kf(p,-(b[0]-this.C[0]),-(b[1]-this.C[1]));b=Df(this.va);Jf(b,2/e[0],2/e[1]);e=Df(this.Ea);0!==d&&If(e,-d);f.uniformMatrix4fv(q.l,!1,Kd(this.ra,p));f.uniformMatrix4fv(q.j,!1,Kd(this.ra,b));f.uniformMatrix4fv(q.i,!1,Kd(this.ra,e));f.uniform1f(q.h,g);var u;if(void 0===k)xj(this,f,a,h,this.na,this.v);else{if(l)a:{d=a.c?5125:5123;a=a.c?4:2;e=this.c.length-1;for(g=this.i.length-1;0<=g;--g)for(f.bindTexture(3553,this.i[g]),l=0<g?this.l[g- + 1]:0,b=this.l[g];0<=e&&this.c[e]>=l;){u=this.c[e];c=this.K[e];p=J(c).toString();if(void 0===h[p]&&c.S()&&(void 0===m||wb(m,c.S().G()))&&(f.clear(f.COLOR_BUFFER_BIT|f.DEPTH_BUFFER_BIT),f.drawElements(4,b-u,d,u*a),b=k(c))){h=b;break a}b=u;e--}h=void 0}else f.clear(f.COLOR_BUFFER_BIT|f.DEPTH_BUFFER_BIT),xj(this,f,a,h,this.i,this.l),h=(h=k(null))?h:void 0;u=h}f.disableVertexAttribArray(q.f);f.disableVertexAttribArray(q.b);f.disableVertexAttribArray(q.g);f.disableVertexAttribArray(q.a);f.disableVertexAttribArray(q.c); + return u};function xj(a,b,c,d,e,f){var g=c.c?5125:5123;c=c.c?4:2;if(sa(d)){var h;a=0;d=e.length;for(h=0;a<d;++a){b.bindTexture(3553,e[a]);var k=f[a];b.drawElements(4,k-h,g,h*c);h=k}}else{h=0;var l,k=0;for(l=e.length;k<l;++k){b.bindTexture(3553,e[k]);for(var m=0<k?f[k-1]:0,p=f[k],q=m;h<a.c.length&&a.c[h]<=p;){var u=J(a.K[h]).toString();void 0!==d[u]?(q!==m&&b.drawElements(4,m-q,g,q*c),m=q=h===a.c.length-1?p:a.c[h+1]):m=h===a.c.length-1?p:a.c[h+1];h++}q!==m&&b.drawElements(4,m-q,g,q*c)}}} + sj.prototype.Ma=function(a){var b=a.eb(),c=a.Z(1),d=a.Ob(),e=a.ub(1),f=a.C,g=a.pa(),h=a.K,k=a.s,l=a.Ka();a=a.v;var m;0===this.h.length?this.h.push(c):(m=this.h[this.h.length-1],J(m)!=J(c)&&(this.v.push(this.a.length),this.h.push(c)));0===this.g.length?this.g.push(e):(m=this.g[this.g.length-1],J(m)!=J(e)&&(this.l.push(this.a.length),this.g.push(e)));this.u=b[0];this.B=b[1];this.M=l[1];this.Y=d[1];this.ca=d[0];this.N=f;this.P=g[0];this.ha=g[1];this.aa=k;this.W=h;this.ba=a;this.ma=l[0]}; + function yj(a,b,c){this.h=b;this.l=a;this.g=c;this.a={}}B(yj,ei);function zj(a,b){var c=[],d;for(d in a.a)c.push(tj(a.a[d],b));return function(){for(var a=c.length,b,d=0;d<a;d++)b=c[d].apply(this,arguments);return b}}function Aj(a,b){for(var c in a.a)vj(a.a[c],b)}yj.prototype.b=function(a,b){var c=this.a[b];void 0===c&&(c=new Bj[b](this.l,this.h),this.a[b]=c);return c};yj.prototype.c=function(){return sa(this.a)}; + yj.prototype.f=function(a,b,c,d,e,f,g,h){var k,l,m;k=0;for(l=fi.length;k<l;++k)m=this.a[fi[k]],void 0!==m&&m.f(a,b,c,d,e,f,g,h,void 0,!1)};function Cj(a,b,c,d,e,f,g,h,k,l,m){var p=Dj,q,u;for(q=fi.length-1;0<=q;--q)if(u=a.a[fi[q]],void 0!==u&&(u=u.f(b,c,d,e,p,f,g,h,k,l,m)))return u} + yj.prototype.fa=function(a,b,c,d,e,f,g,h,k,l){var m=b.b;m.bindFramebuffer(m.FRAMEBUFFER,mj(b));var p;void 0!==this.g&&(p=fb(kb(a),d*this.g));return Cj(this,b,a,d,e,g,h,k,function(a){var b=new Uint8Array(4);m.readPixels(0,0,1,1,m.RGBA,m.UNSIGNED_BYTE,b);if(0<b[3]&&(a=l(a)))return a},!0,p)}; + function Ej(a,b,c,d,e,f,g,h){var k=c.b;k.bindFramebuffer(k.FRAMEBUFFER,mj(c));return void 0!==Cj(a,c,b,d,e,f,g,h,function(){var a=new Uint8Array(4);k.readPixels(0,0,1,1,k.RGBA,k.UNSIGNED_BYTE,a);return 0<a[3]},!1)}var Bj={Image:sj},Dj=[1,1];function Fj(a,b,c,d,e,f,g){this.b=a;this.c=b;this.f=f;this.g=g;this.i=e;this.l=d;this.h=c;this.a=null}B(Fj,Fh);Fj.prototype.cb=function(a,b){var c=this.b,d=(new yj(1,this.f)).b(0,"Image");d.Ma(this.a);d.cb(a,b);vj(d,c);d.f(this.b,this.c,this.h,this.l,this.i,this.g,1,{},void 0,!1);tj(d,c)()};Fj.prototype.bb=function(a,b){var c=this.b,d=(new yj(1,this.f)).b(0,"Image");d.Ma(this.a);d.bb(a,b);vj(d,c);d.f(this.b,this.c,this.h,this.l,this.i,this.g,1,{},void 0,!1);tj(d,c)()}; + Fj.prototype.Ma=function(a){this.a=a};function Gj(){this.b="precision mediump float;varying vec2 a;uniform float f;uniform sampler2D g;void main(void){vec4 texColor=texture2D(g,a);gl_FragColor.rgb=texColor.rgb;gl_FragColor.a=texColor.a*f;}"}B(Gj,aj);var Hj=new Gj;function Ij(){this.b="varying vec2 a;attribute vec2 b;attribute vec2 c;uniform mat4 d;uniform mat4 e;void main(void){gl_Position=e*vec4(b,0.,1.);a=(d*vec4(c,0.,1.)).st;}"}B(Ij,bj);var Jj=new Ij; + function Kj(a,b){this.c=a.getUniformLocation(b,"f");this.f=a.getUniformLocation(b,"e");this.h=a.getUniformLocation(b,"d");this.g=a.getUniformLocation(b,"g");this.b=a.getAttribLocation(b,"b");this.a=a.getAttribLocation(b,"c")};function Lj(a,b){Rh.call(this,b);this.f=a;this.W=new hj([-1,-1,0,0,1,-1,1,0,-1,1,0,1,1,1,1,1]);this.i=this.Da=null;this.j=void 0;this.P=Cf();this.aa=Cf();this.B=Jd();this.s=null}B(Lj,Rh); + function Mj(a,b,c){var d=a.f.f;if(void 0===a.j||a.j!=c){b.postRenderFunctions.push(function(a,b,c){a.isContextLost()||(a.deleteFramebuffer(b),a.deleteTexture(c))}.bind(null,d,a.i,a.Da));b=nj(d,c,c);var e=d.createFramebuffer();d.bindFramebuffer(36160,e);d.framebufferTexture2D(36160,36064,3553,b,0);a.Da=b;a.i=e;a.j=c}else d.bindFramebuffer(36160,a.i)} + Lj.prototype.Jc=function(a,b,c){Nj(this,"precompose",c,a);kj(c,34962,this.W);var d=c.b,e=pj(c,Hj,Jj),f;this.s?f=this.s:this.s=f=new Kj(d,e);qj(c,e)&&(d.enableVertexAttribArray(f.b),d.vertexAttribPointer(f.b,2,5126,!1,16,0),d.enableVertexAttribArray(f.a),d.vertexAttribPointer(f.a,2,5126,!1,16,8),d.uniform1i(f.g,0));d.uniformMatrix4fv(f.h,!1,Kd(this.B,this.P));d.uniformMatrix4fv(f.f,!1,Kd(this.B,this.aa));d.uniform1f(f.c,b.opacity);d.bindTexture(3553,this.Da);d.drawArrays(5,0,4);Nj(this,"postcompose", + c,a)};function Nj(a,b,c,d){a=a.a;if(Ha(a,b)){var e=d.viewState;U(a,new uf(b,new Fj(c,e.center,e.resolution,e.rotation,d.size,d.extent,d.pixelRatio),d,null,c))}}Lj.prototype.v=function(){this.i=this.Da=null;this.j=void 0};function Oj(){this.b="precision mediump float;varying vec2 a;uniform sampler2D e;void main(void){gl_FragColor=texture2D(e,a);}"}B(Oj,aj);var Pj=new Oj;function Qj(){this.b="varying vec2 a;attribute vec2 b;attribute vec2 c;uniform vec4 d;void main(void){gl_Position=vec4(b*d.xy+d.zw,0.,1.);a=c;}"}B(Qj,bj);var Rj=new Qj;function Sj(a,b){this.c=a.getUniformLocation(b,"e");this.f=a.getUniformLocation(b,"d");this.b=a.getAttribLocation(b,"b");this.a=a.getAttribLocation(b,"c")};function Tj(a,b){Lj.call(this,a,b);this.M=Pj;this.ba=Rj;this.c=null;this.D=new hj([0,0,0,1,1,0,1,1,0,1,0,0,1,1,1,0]);this.u=this.g=null;this.h=-1;this.N=[0,0]}B(Tj,Lj);Tj.prototype.R=function(){lj(this.f.getContext(),this.D);Lj.prototype.R.call(this)};Tj.prototype.l=function(a,b,c){var d=this.f;return function(e,f){return Sh(a,b,e,f,function(a){var b=Uj(d.a,a.getKey());b&&(c[e]||(c[e]={}),c[e][a.V.toString()]=a);return b})}};Tj.prototype.v=function(){Lj.prototype.v.call(this);this.c=null}; + Tj.prototype.Kc=function(a,b,c){var d=this.f,e=c.b,f=a.viewState,g=f.projection,h=this.a,k=h.da(),l=k.sa(g),m=Xc(l,f.resolution),p=l.O(m),q=Ni(k,m,a.pixelRatio,g),u=q[0]/Lc(Wc(l,m),this.N)[0],w=p/u,r=a.pixelRatio*k.nb(g),x=f.center,D;p==f.resolution?(x=Yh(x,p,a.size),D=ub(x,p,f.rotation,a.size)):D=a.extent;p=Tc(l,D,p);if(this.g&&Ic(this.g,p)&&this.h==k.b)w=this.u;else{var t=[p.I-p.H+1,p.L-p.J+1],z=ka(Math.max(t[0]*q[0],t[1]*q[1])),t=w*z,C=l.pa(m),E=C[0]+p.H*q[0]*w,w=C[1]+p.J*q[1]*w,w=[E,w,E+t,w+t]; + Mj(this,a,z);e.viewport(0,0,z,z);e.clearColor(0,0,0,0);e.clear(16384);e.disable(3042);z=pj(c,this.M,this.ba);qj(c,z);this.c||(this.c=new Sj(e,z));kj(c,34962,this.D);e.enableVertexAttribArray(this.c.b);e.vertexAttribPointer(this.c.b,2,5126,!1,16,0);e.enableVertexAttribArray(this.c.a);e.vertexAttribPointer(this.c.a,2,5126,!1,16,8);e.uniform1i(this.c.c,0);c={};c[m]={};var v=this.l(k,g,c),H=jh(h),z=!0,E=db(),G=new Gc(0,0,0,0),A,F,Q;for(F=p.H;F<=p.I;++F)for(Q=p.J;Q<=p.L;++Q){C=$h(k,m,F,Q,u,g);if(void 0!== + b.extent&&(A=Qc(l,C.V,E),!wb(A,b.extent)))continue;A=C.T();A=2==A||4==A||3==A&&!H;!A&&C.b&&(C=C.b);A=C.T();if(2==A){if(Uj(d.a,C.getKey())){c[m][C.V.toString()]=C;continue}}else if(4==A||3==A&&!H)continue;z=!1;A=Pc(l,C.V,v,G,E);A||(C=Sc(l,C.V,G,E))&&v(m+1,C)}b=Object.keys(c).map(Number);b.sort(Ma);for(var v=new Float32Array(4),N,H=0,G=b.length;H<G;++H)for(N in F=c[b[H]],F)C=F[N],A=Qc(l,C.V,E),v[0]=2*(A[2]-A[0])/t,v[1]=2*(A[3]-A[1])/t,v[2]=2*(A[0]-w[0])/t-1,v[3]=2*(A[1]-w[1])/t-1,e.uniform4fv(this.c.f, + v),Vj(d,C,q,r*u),e.drawArrays(5,0,4);z?(this.g=p,this.u=w,this.h=k.b):(this.u=this.g=null,this.h=-1,a.animate=!0)}Xh(a.usedTiles,k,m,p);var O=d.l;Zh(a,k,l,u,g,D,m,h.get("preload"),function(a){var b;(b=2!=a.T()||Uj(d.a,a.getKey()))||(b=a.getKey()in O.a);b||O.g([a,Vc(l,a.V),l.O(a.V[0]),q,r*u])},this);Uh(a,k);Wh(a,k);e=this.P;Df(e);Kf(e,(x[0]-w[0])/(w[2]-w[0]),(x[1]-w[1])/(w[3]-w[1]));0!==f.rotation&&If(e,f.rotation);Jf(e,a.size[0]*f.resolution/(w[2]-w[0]),a.size[1]*f.resolution/(w[3]-w[1]));Kf(e,-.5, + -.5);return!0};function Wj(a,b){Lj.call(this,a,b);this.h=!1;this.N=-1;this.M=NaN;this.u=db();this.g=this.c=this.D=null}B(Wj,Lj);n=Wj.prototype;n.Jc=function(a,b,c){this.g=b;var d=a.viewState,e=this.c;e&&!e.c()&&e.f(c,d.center,d.resolution,d.rotation,a.size,a.pixelRatio,b.opacity,b.hb?a.skippedFeatureUids:{})};n.R=function(){var a=this.c;if(a){var b=this.f.getContext();zj(a,b)();this.c=null}Lj.prototype.R.call(this)}; + n.fa=function(a,b,c,d){if(this.c&&this.g){var e=this.f.getContext(),f=b.viewState,g=this.a,h={};return this.c.fa(a,e,f.center,f.resolution,f.rotation,b.size,b.pixelRatio,this.g.opacity,{},function(a){var b=J(a).toString();if(!(b in h))return h[b]=!0,c.call(d,a,g)})}};n.Ec=function(a,b){if(this.c&&this.g){var c=this.f.getContext(),d=b.viewState;return Ej(this.c,a,c,d.resolution,d.rotation,b.pixelRatio,this.g.opacity,b.skippedFeatureUids)}return!1};n.Lc=function(){Th(this)}; + n.Kc=function(a,b,c){function d(a){var b,c=a.f;c?b=c.call(a,l):(c=e.g)&&(b=c(a,l));if(b){if(b){c=!1;if(Array.isArray(b))for(var d=0,f=b.length;d<f;++d)c=Bi(q,a,b[d],Ai(l,m),this.Lc,this)||c;else c=Bi(q,a,b,Ai(l,m),this.Lc,this)||c;a=c}else a=!1;this.h=this.h||a}}var e=this.a;b=e.da();Vh(a.attributions,b.h);Wh(a,b);var f=a.viewHints[0],g=a.viewHints[1],h=e.i,k=e.j;if(!this.h&&!h&&f||!k&&g)return!0;var g=a.extent,h=a.viewState,f=h.projection,l=h.resolution,m=a.pixelRatio,h=e.b,p=e.a,k=e.get("renderOrder"); + void 0===k&&(k=zi);g=fb(g,p*l);if(!this.h&&this.M==l&&this.N==h&&this.D==k&&hb(this.u,g))return!0;this.c&&a.postRenderFunctions.push(zj(this.c,c));this.h=!1;var q=new yj(.5*l/m,g,e.a);Pi(b,g,l,f);if(k){var u=[];Qi(b,g,function(a){u.push(a)},this);u.sort(k);u.forEach(d,this)}else Qi(b,g,d,this);Aj(q,c);this.M=l;this.N=h;this.D=k;this.u=g;this.c=q;return!0};function Xj(){this.f=0;this.c={};this.a=this.b=null}Xj.prototype.clear=function(){this.f=0;this.c={};this.a=this.b=null};function Uj(a,b){return a.c.hasOwnProperty(b)}function Yj(a,b){for(var c=a.b;c;)b.call(void 0,c.Na,c.Ia,a),c=c.ta}Xj.prototype.get=function(a){a=this.c[a];L(void 0!==a,15);if(a===this.a)return a.Na;a===this.b?(this.b=this.b.ta,this.b.Ua=null):(a.ta.Ua=a.Ua,a.Ua.ta=a.ta);a.ta=null;a.Ua=this.a;this.a=this.a.ta=a;return a.Na}; + Xj.prototype.pop=function(){var a=this.b;delete this.c[a.Ia];a.ta&&(a.ta.Ua=null);this.b=a.ta;this.b||(this.a=null);--this.f;return a.Na};function Zj(a,b,c){a.get(b);a.c[b].Na=c}Xj.prototype.set=function(a,b){L(!(a in this.c),16);var c={Ia:a,ta:null,Ua:this.a,Na:b};this.a?this.a.ta=c:this.b=c;this.a=c;this.c[a]=c;++this.f};function ak(a,b){Nf.call(this,0,b);this.b=document.createElement("CANVAS");this.b.style.width="100%";this.b.style.height="100%";this.b.className="ol-unselectable";a.insertBefore(this.b,a.childNodes[0]||null);this.s=this.v=0;this.u=Md();this.i=!0;this.f=ie(this.b,{antialias:!0,depth:!1,failIfMajorPerformanceCaveat:!0,preserveDrawingBuffer:!1,stencil:!0});this.C=new jj(this.b,this.f);R(this.b,"webglcontextlost",this.ge,this);R(this.b,"webglcontextrestored",this.he,this);this.a=new Xj;this.K=null;this.l= + new Uf(function(a){var b=a[1];a=a[2];var e=b[0]-this.K[0],b=b[1]-this.K[1];return 65536*Math.log(a)+Math.sqrt(e*e+b*b)/a}.bind(this),function(a){return a[0].getKey()});this.B=function(){if(0!==this.l.b.length){Yf(this.l);var a=Vf(this.l);Vj(this,a[0],a[3],a[4])}return!1}.bind(this);this.h=0;bk(this)}B(ak,Nf); + function Vj(a,b,c,d){var e=a.f,f=b.getKey();if(Uj(a.a,f))a=a.a.get(f),e.bindTexture(3553,a.Da),9729!=a.yc&&(e.texParameteri(3553,10240,9729),a.yc=9729),9729!=a.zc&&(e.texParameteri(3553,10241,9729),a.zc=9729);else{var g=e.createTexture();e.bindTexture(3553,g);if(0<d){var h=a.u.canvas,k=a.u;a.v!==c[0]||a.s!==c[1]?(h.width=c[0],h.height=c[1],a.v=c[0],a.s=c[1]):k.clearRect(0,0,c[0],c[1]);k.drawImage(b.Z(),d,d,c[0],c[1],0,0,c[0],c[1]);e.texImage2D(3553,0,6408,6408,5121,h)}else e.texImage2D(3553,0,6408, + 6408,5121,b.Z());e.texParameteri(3553,10240,9729);e.texParameteri(3553,10241,9729);e.texParameteri(3553,10242,33071);e.texParameteri(3553,10243,33071);a.a.set(f,{Da:g,yc:9729,zc:9729})}}n=ak.prototype;n.Mb=function(a){return a instanceof W?new Tj(this,a):a instanceof Y?new Wj(this,a):null};function ck(a,b,c){var d=a.g;if(Ha(d,b)){a=a.C;var e=c.viewState;U(d,new uf(b,new Fj(a,e.center,e.resolution,e.rotation,c.size,c.extent,c.pixelRatio),c,null,a))}} + n.R=function(){var a=this.f;a.isContextLost()||Yj(this.a,function(b){b&&a.deleteTexture(b.Da)});Da(this.C);Nf.prototype.R.call(this)};n.ld=function(a,b){for(var c=this.f,d;1024<this.a.f-this.h;){if(d=this.a.b.Na)c.deleteTexture(d.Da);else if(+this.a.b.Ia==b.index)break;else--this.h;this.a.pop()}};n.getContext=function(){return this.C};n.$=function(){return"webgl"};n.ge=function(a){a.preventDefault();this.a.clear();this.h=0;a=this.c;for(var b in a)a[b].v()};n.he=function(){bk(this);this.g.render()}; + function bk(a){a=a.f;a.activeTexture(33984);a.blendFuncSeparate(770,771,1,771);a.disable(2884);a.disable(2929);a.disable(3089);a.disable(2960)} + n.vb=function(a){var b=this.getContext(),c=this.f;if(c.isContextLost())return!1;if(!a)return this.i&&(this.b.style.display="none",this.i=!1),!1;this.K=a.focus;this.a.set((-a.index).toString(),null);++this.h;ck(this,"precompose",a);var d=[],e=a.layerStatesArray;Sa(e);var f=a.viewState.resolution,g,h,k,l;g=0;for(h=e.length;g<h;++g)l=e[g],yf(l,f)&&"ready"==l.ac&&(k=Qf(this,l.layer),k.Kc(a,l,b)&&d.push(l));e=a.size[0]*a.pixelRatio;f=a.size[1]*a.pixelRatio;if(this.b.width!=e||this.b.height!=f)this.b.width= + e,this.b.height=f;c.bindFramebuffer(36160,null);c.clearColor(0,0,0,0);c.clear(16384);c.enable(3042);c.viewport(0,0,this.b.width,this.b.height);g=0;for(h=d.length;g<h;++g)l=d[g],k=Qf(this,l.layer),k.Jc(a,l,b);this.i||(this.b.style.display="",this.i=!0);Of(a);1024<this.a.f-this.h&&a.postRenderFunctions.push(this.ld.bind(this));0!==this.l.b.length&&(a.postRenderFunctions.push(this.B),a.animate=!0);ck(this,"postcompose",a);Rf(this,a);a.postRenderFunctions.push(Pf)}; + n.fa=function(a,b,c,d,e,f){var g;if(this.f.isContextLost())return!1;var h=b.viewState,k=b.layerStatesArray,l;for(l=k.length-1;0<=l;--l){g=k[l];var m=g.layer;if(yf(g,h.resolution)&&e.call(f,m)&&(g=Qf(this,m).fa(a,b,c,d)))return g}};n.Fc=function(a,b,c,d){var e=!1;if(this.f.isContextLost())return!1;var f=b.viewState,g=b.layerStatesArray,h;for(h=g.length-1;0<=h;--h){var k=g[h],l=k.layer;if(yf(k,f.resolution)&&c.call(d,l)&&(e=Qf(this,l).Ec(a,b)))return!0}return e};var dk=["canvas","webgl","dom"]; + function Z(a){V.call(this);var b=ek(a);this.kb=void 0!==a.loadTilesWhileAnimating?a.loadTilesWhileAnimating:!1;this.Ab=void 0!==a.loadTilesWhileInteracting?a.loadTilesWhileInteracting:!1;this.Cb=void 0!==a.pixelRatio?a.pixelRatio:oe;this.Bb=b.logos;this.aa=function(){this.g=void 0;this.ve.call(this,Date.now())}.bind(this);this.Fa=Cf();this.zb=Cf();this.Ga=0;this.c=null;this.va=db();this.u=this.P=null;this.a=document.createElement("DIV");this.a.className="ol-viewport"+(re?" ol-touch":"");this.a.style.position= + "relative";this.a.style.overflow="hidden";this.a.style.width="100%";this.a.style.height="100%";this.a.style.msTouchAction="none";this.a.style.touchAction="none";this.s=document.createElement("DIV");this.s.className="ol-overlaycontainer";this.a.appendChild(this.s);this.j=document.createElement("DIV");this.j.className="ol-overlaycontainer-stopevent";a=["click","dblclick","mousedown","touchstart","mspointerdown",of,"mousewheel","wheel"];for(var c=0,d=a.length;c<d;++c)R(this.j,a[c],Ea);this.a.appendChild(this.j); + this.ma=new ff(this);for(var e in rf)R(this.ma,rf[e],this.wc,this);this.ba=b.keyboardEventTarget;this.i=null;R(this.a,"wheel",this.Sa,this);R(this.a,"mousewheel",this.Sa,this);this.v=b.controls;this.h=b.interactions;this.B=b.overlays;this.Sc={};this.N=new b.xe(this.a,this);this.W=null;this.D=[];this.na=[];this.wa=new Zf(this.qd.bind(this),this.Jd.bind(this));this.Eb={};R(this,La("layergroup"),this.vd,this);R(this,La("view"),this.Kd,this);R(this,La("size"),this.Gd,this);R(this,La("target"),this.Id, + this);this.l(b.values);ed(this.v,function(a){a.setMap(this)},this);R(this.v,hd,function(a){a.element.setMap(this)},this);R(this.v,id,function(a){a.element.setMap(null)},this);ed(this.h,function(a){a.setMap(this)},this);R(this.h,hd,function(a){a.element.setMap(this)},this);R(this.h,id,function(a){a.element.setMap(null)},this);ed(this.B,this.ic,this);R(this.B,hd,function(a){this.ic(a.element)},this);R(this.B,id,function(a){var b=a.element.Pa();void 0!==b&&delete this.Sc[b.toString()];a.element.setMap(null)}, + this)}B(Z,V);n=Z.prototype;n.cd=function(a){this.v.push(a)};n.dd=function(a){this.h.push(a)};n.ed=function(a){fk(this).get("layers").push(a)};n.fd=function(a){this.B.push(a)};n.ic=function(a){var b=a.Pa();void 0!==b&&(this.Sc[b.toString()]=a);a.setMap(this)};n.oa=function(a){this.render();Array.prototype.push.apply(this.D,arguments)}; + n.R=function(){Da(this.ma);Da(this.N);ya(this.a,"wheel",this.Sa,this);ya(this.a,"mousewheel",this.Sa,this);void 0!==this.f&&(K.removeEventListener("resize",this.f,!1),this.f=void 0);this.g&&(K.cancelAnimationFrame(this.g),this.g=void 0);this.set("target",null);V.prototype.R.call(this)};n.od=function(a,b,c,d,e){if(this.c)return a=this.Ba(a),this.N.fa(a,this.c,b,void 0!==c?c:null,void 0!==d?d:yb,void 0!==e?e:null)}; + n.Md=function(a,b,c){if(!this.c)return!1;a=this.Ba(a);return this.N.Fc(a,this.c,void 0!==b?b:yb,void 0!==c?c:null)};n.uc=function(a){var b=this.a.getBoundingClientRect();a=a.changedTouches?a.changedTouches[0]:a;return[a.clientX-b.left,a.clientY-b.top]};n.Wb=function(){return this.get("target")};n.Ra=function(){var a=this.Wb();return void 0!==a?"string"===typeof a?document.getElementById(a):a:null};n.Ba=function(a){var b=this.c;return b?Hf(b.pixelToCoordinateTransform,a.slice()):null}; + function fk(a){return a.get("layergroup")}function ug(a,b){var c=a.c;return c?Hf(c.coordinateToPixelTransform,b.slice(0,2)):null}n.Ta=function(){return this.get("size")};n.U=function(){return this.get("view")};n.qd=function(a,b,c,d){var e=this.c;if(!(e&&b in e.wantedTiles&&e.wantedTiles[b][a.getKey()]))return Infinity;a=c[0]-e.focus[0];c=c[1]-e.focus[1];return 65536*Math.log(d)+Math.sqrt(a*a+c*c)/d};n.Sa=function(a,b){var c=new df(b||a.type,this,a);this.wc(c)}; + n.wc=function(a){if(this.c){this.W=a.coordinate;a.frameState=this.c;var b=this.h.a,c;if(!1!==U(this,a))for(c=b.length-1;0<=c;c--){var d=b[c];if(d.get("active")&&!d.handleEvent(a))break}}}; + n.Fd=function(){var a=this.c,b=this.wa;if(0!==b.b.length){var c=16,d=c;if(a){var e=a.viewHints;e[0]&&(c=this.kb?8:0,d=2);e[1]&&(c=this.Ab?8:0,d=2)}if(b.l<c){Yf(b);for(var e=0,f,g;b.l<c&&e<d&&0<b.b.length;)f=Vf(b)[0],g=f.getKey(),0!==f.T()||g in b.h||(b.h[g]=!0,++b.l,++e,f.load())}}b=this.na;c=0;for(d=b.length;c<d;++c)b[c](this,a);b.length=0};n.Gd=function(){this.render()}; + n.Id=function(){var a;this.Wb()&&(a=this.Ra());if(this.i){for(var b=0,c=this.i.length;b<c;++b)M(this.i[b]);this.i=null}a?(a.appendChild(this.a),a=this.ba?this.ba:a,this.i=[R(a,"keydown",this.Sa,this),R(a,"keypress",this.Sa,this)],this.f||(this.f=this.yb.bind(this),K.addEventListener("resize",this.f,!1))):(Sd(this.a),void 0!==this.f&&(K.removeEventListener("resize",this.f,!1),this.f=void 0));this.yb()};n.Jd=function(){this.render()};n.Ld=function(){this.render()}; + n.Kd=function(){this.P&&(M(this.P),this.P=null);var a=this.U();a&&(this.P=R(a,"propertychange",this.Ld,this));this.render()};n.vd=function(){this.u&&(this.u.forEach(M),this.u=null);var a=fk(this);a&&(this.u=[R(a,"propertychange",this.render,this),R(a,"change",this.render,this)]);this.render()};n.we=function(){this.g&&K.cancelAnimationFrame(this.g);this.aa()};n.render=function(){void 0===this.g&&(this.g=K.requestAnimationFrame(this.aa))};n.se=function(a){return this.h.remove(a)};n.te=function(a){return fk(this).get("layers").remove(a)}; + n.ve=function(a){var b,c,d,e=this.Ta(),f=this.U(),g=db(),h=null;if(b=void 0!==e&&0<e[0]&&0<e[1]&&f)b=!!f.qa()&&void 0!==f.O();if(b){d=this.c?this.c.viewHints:void 0;void 0!==d?(d[0]=f.c[0],d[1]=f.c[1],h=d):h=f.c.slice();var k=fk(this).Pb(),l={};b=0;for(c=k.length;b<c;++b)l[J(k[b].layer)]=k[b];d=f.T();h={animate:!1,attributions:{},coordinateToPixelTransform:this.Fa,extent:g,focus:this.W?this.W:d.center,index:this.Ga++,layerStates:l,layerStatesArray:k,logos:pa({},this.Bb),pixelRatio:this.Cb,pixelToCoordinateTransform:this.zb, + postRenderFunctions:[],size:e,skippedFeatureUids:this.Eb,tileQueue:this.wa,time:a,usedTiles:{},viewState:d,viewHints:h,wantedTiles:{}}}if(h){a=this.D;b=e=0;for(c=a.length;b<c;++b)f=a[b],f(this,h)&&(a[e++]=f);a.length=e;h.extent=ub(d.center,d.resolution,d.rotation,h.size,g)}this.c=h;this.N.vb(h);h&&(h.animate&&this.render(),Array.prototype.push.apply(this.na,h.postRenderFunctions),0!==this.D.length||h.viewHints[0]||h.viewHints[1]||lb(h.extent,this.va)||(U(this,new Td("moveend",this,h)),gb(h.extent, + this.va)));U(this,new Td("postrender",this,h));d=g=this.Fd;this&&(d=ea(g,this));"function"!=ba()||aa.Window&&aa.Window.prototype&&!xd("Edge")&&aa.Window.prototype.setImmediate==aa.setImmediate?(fe||(fe=ge()),fe(d)):aa.setImmediate(d)}; + n.yb=function(){var a=this.Ra();if(a){var b=K.getComputedStyle(a);this.set("size",[a.offsetWidth-parseFloat(b.borderLeftWidth)-parseFloat(b.paddingLeft)-parseFloat(b.paddingRight)-parseFloat(b.borderRightWidth),a.offsetHeight-parseFloat(b.borderTopWidth)-parseFloat(b.paddingTop)-parseFloat(b.paddingBottom)-parseFloat(b.borderBottomWidth)])}else this.set("size",void 0)}; + function ek(a){var b=null;void 0!==a.keyboardEventTarget&&(b="string"===typeof a.keyboardEventTarget?document.getElementById(a.keyboardEventTarget):a.keyboardEventTarget);var c={},d={};if(void 0===a.logo||"boolean"===typeof a.logo&&a.logo)d["data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAHGAAABxgEXwfpGAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAhNQTFRF////AP//AICAgP//AFVVQECA////K1VVSbbbYL/fJ05idsTYJFtbbcjbJllmZszWWMTOIFhoHlNiZszTa9DdUcHNHlNlV8XRIVdiasrUHlZjIVZjaMnVH1RlIFRkH1RkH1ZlasvYasvXVsPQH1VkacnVa8vWIVZjIFRjVMPQa8rXIVVkXsXRsNveIFVkIFZlIVVj3eDeh6GmbMvXH1ZkIFRka8rWbMvXIFVkIFVjIFVkbMvWH1VjbMvWIFVlbcvWIFVla8vVIFVkbMvWbMvVH1VkbMvWIFVlbcvWIFVkbcvVbMvWjNPbIFVkU8LPwMzNIFVkbczWIFVkbsvWbMvXIFVkRnB8bcvW2+TkW8XRIFVkIlZlJVloJlpoKlxrLl9tMmJwOWd0Omh1RXF8TneCT3iDUHiDU8LPVMLPVcLPVcPQVsPPVsPQV8PQWMTQWsTQW8TQXMXSXsXRX4SNX8bSYMfTYcfTYsfTY8jUZcfSZsnUaIqTacrVasrVa8jTa8rWbI2VbMvWbcvWdJObdcvUdszUd8vVeJaee87Yfc3WgJyjhqGnitDYjaarldPZnrK2oNbborW5o9bbo9fbpLa6q9ndrL3ArtndscDDutzfu8fJwN7gwt7gxc/QyuHhy+HizeHi0NfX0+Pj19zb1+Tj2uXk29/e3uLg3+Lh3+bl4uXj4ufl4+fl5Ofl5ufl5ujm5+jmySDnBAAAAFp0Uk5TAAECAgMEBAYHCA0NDg4UGRogIiMmKSssLzU7PkJJT1JTVFliY2hrdHZ3foSFhYeJjY2QkpugqbG1tre5w8zQ09XY3uXn6+zx8vT09vf4+Pj5+fr6/P39/f3+gz7SsAAAAVVJREFUOMtjYKA7EBDnwCPLrObS1BRiLoJLnte6CQy8FLHLCzs2QUG4FjZ5GbcmBDDjxJBXDWxCBrb8aM4zbkIDzpLYnAcE9VXlJSWlZRU13koIeW57mGx5XjoMZEUqwxWYQaQbSzLSkYGfKFSe0QMsX5WbjgY0YS4MBplemI4BdGBW+DQ11eZiymfqQuXZIjqwyadPNoSZ4L+0FVM6e+oGI6g8a9iKNT3o8kVzNkzRg5lgl7p4wyRUL9Yt2jAxVh6mQCogae6GmflI8p0r13VFWTHBQ0rWPW7ahgWVcPm+9cuLoyy4kCJDzCm6d8PSFoh0zvQNC5OjDJhQopPPJqph1doJBUD5tnkbZiUEqaCnB3bTqLTFG1bPn71kw4b+GFdpLElKIzRxxgYgWNYc5SCENVHKeUaltHdXx0dZ8uBI1hJ2UUDgq82CM2MwKeibqAvSO7MCABq0wXEPiqWEAAAAAElFTkSuQmCC"]= + "http://openlayers.org/";else{var e=a.logo;"string"===typeof e?d[e]="":e instanceof HTMLElement?d[J(e).toString()]=e:e&&(L("string"==typeof e.href,44),L("string"==typeof e.src,45),d[e.src]=e.href)}e=a.layers instanceof Xg?a.layers:new Xg({layers:a.layers});c.layergroup=e;c.target=a.target;c.view=void 0!==a.view?a.view:new uc;var e=Nf,f;void 0!==a.renderer?Array.isArray(a.renderer)?f=a.renderer:"string"===typeof a.renderer?f=[a.renderer]:L(!1,46):f=dk;var g,h;g=0;for(h=f.length;g<h;++g){var k=f[g]; + if("canvas"==k){if(qe){e=Ri;break}}else if("dom"==k){e=Yi;break}else if("webgl"==k&&je){e=ak;break}}void 0!==a.controls?Array.isArray(a.controls)?f=new cd(a.controls.slice()):(L(a.controls instanceof cd,47),f=a.controls):f=ee();if(void 0!==a.interactions)Array.isArray(a.interactions)?g=new cd(a.interactions.slice()):(L(a.interactions instanceof cd,48),g=a.interactions);else{g={};h=new cd;k=new $f;(void 0!==g.altShiftDragRotate?g.altShiftDragRotate:1)&&h.push(new vg);(void 0!==g.doubleClickZoom?g.doubleClickZoom: + 1)&&h.push(new fg({delta:g.zoomDelta,duration:g.zoomDuration}));(void 0!==g.dragPan?g.dragPan:1)&&h.push(new qg({kinetic:k}));(void 0!==g.pinchRotate?g.pinchRotate:1)&&h.push(new Pg);(void 0!==g.pinchZoom?g.pinchZoom:1)&&h.push(new Tg({duration:g.zoomDuration}));if(void 0!==g.keyboard?g.keyboard:1)h.push(new Jg),h.push(new Lg({delta:g.zoomDelta,duration:g.zoomDuration}));(void 0!==g.mouseWheelZoom?g.mouseWheelZoom:1)&&h.push(new Ng({duration:g.zoomDuration}));(void 0!==g.shiftDragZoom?g.shiftDragZoom: + 1)&&h.push(new Ig({duration:g.zoomDuration}));g=h}void 0!==a.overlays?Array.isArray(a.overlays)?a=new cd(a.overlays.slice()):(L(a.overlays instanceof cd,49),a=a.overlays):a=new cd;return{controls:f,interactions:g,keyboardEventTarget:b,logos:d,overlays:a,xe:e,values:c}}Ib(bh);Ib(ih);ih.forEach(function(a){bh.forEach(function(b){Jb(a,b,ch);Jb(b,a,dh)})});function gk(a){V.call(this);this.j=a.id;this.i=void 0!==a.insertFirst?a.insertFirst:!0;this.s=void 0!==a.stopEvent?a.stopEvent:!0;this.c=document.createElement("DIV");this.c.className="ol-overlay-container";this.c.style.position="absolute";this.autoPan=void 0!==a.autoPan?a.autoPan:!1;this.g=void 0!==a.autoPanAnimation?a.autoPanAnimation:{};this.h=void 0!==a.autoPanMargin?a.autoPanMargin:20;this.a={lb:"",sb:"",wb:"",xb:"",visible:!0};this.f=null;R(this,La("element"),this.td,this);R(this,La("map"), + this.Ad,this);R(this,La("offset"),this.Bd,this);R(this,La("position"),this.Dd,this);R(this,La("positioning"),this.Ed,this);void 0!==a.element&&this.set("element",a.element);this.set("offset",void 0!==a.offset?a.offset:[0,0]);this.set("positioning",void 0!==a.positioning?a.positioning:"top-left");void 0!==a.position&&this.Ac(a.position)}B(gk,V);n=gk.prototype;n.Pa=function(){return this.j};n.td=function(){for(var a=this.c;a.lastChild;)a.removeChild(a.lastChild);(a=this.get("element"))&&this.c.appendChild(a)}; + n.Ad=function(){this.f&&(Sd(this.c),M(this.f),this.f=null);var a=this.get("map");a&&(this.f=R(a,"postrender",this.render,this),hk(this),a=this.s?a.j:a.s,this.i?a.insertBefore(this.c,a.childNodes[0]||null):a.appendChild(this.c))};n.render=function(){hk(this)};n.Bd=function(){hk(this)}; + n.Dd=function(){hk(this);if(void 0!==this.get("position")&&this.autoPan){var a=this.get("map");if(void 0!==a&&a.Ra()){var b=ik(a.Ra(),a.Ta()),c=this.get("element"),d=c.offsetWidth,e=c.currentStyle||K.getComputedStyle(c),d=d+(parseInt(e.marginLeft,10)+parseInt(e.marginRight,10)),e=c.offsetHeight,f=c.currentStyle||K.getComputedStyle(c),e=e+(parseInt(f.marginTop,10)+parseInt(f.marginBottom,10)),g=ik(c,[d,e]),c=this.h;hb(b,g)||(d=g[0]-b[0],e=b[2]-g[2],f=g[1]-b[1],g=b[3]-g[3],b=[0,0],0>d?b[0]=d-c:0>e&& + (b[0]=Math.abs(e)+c),0>f?b[1]=f-c:0>g&&(b[1]=Math.abs(g)+c),0===b[0]&&0===b[1])||(c=a.U().qa(),d=ug(a,c),b=[d[0]+b[0],d[1]+b[1]],this.g&&(this.g.source=c,a.oa(Dc(this.g))),a.U().xa(a.Ba(b)))}}};n.Ed=function(){hk(this)};n.setMap=function(a){this.set("map",a)};n.Ac=function(a){this.set("position",a)};function ik(a,b){var c=a.getBoundingClientRect(),d=c.left+K.pageXOffset,c=c.top+K.pageYOffset;return[d,c,d+b[0],c+b[1]]} + function jk(a,b){a.a.visible!==b&&(a.c.style.display=b?"":"none",a.a.visible=b)} + function hk(a){var b=a.get("map"),c=a.get("position");if(void 0!==b&&b.c&&void 0!==c){var c=ug(b,c),d=b.Ta(),b=a.c.style,e=a.get("offset"),f=a.get("positioning"),g=e[0],e=e[1];if("bottom-right"==f||"center-right"==f||"top-right"==f)""!==a.a.sb&&(a.a.sb=b.left=""),g=Math.round(d[0]-c[0]-g)+"px",a.a.wb!=g&&(a.a.wb=b.right=g);else{""!==a.a.wb&&(a.a.wb=b.right="");if("bottom-center"==f||"center-center"==f||"top-center"==f)g-=a.c.offsetWidth/2;g=Math.round(c[0]+g)+"px";a.a.sb!=g&&(a.a.sb=b.left=g)}if("bottom-left"== + f||"bottom-center"==f||"bottom-right"==f)""!==a.a.xb&&(a.a.xb=b.top=""),c=Math.round(d[1]-c[1]-e)+"px",a.a.lb!=c&&(a.a.lb=b.bottom=c);else{""!==a.a.lb&&(a.a.lb=b.bottom="");if("center-left"==f||"center-center"==f||"center-right"==f)e-=a.c.offsetHeight/2;c=Math.round(c[1]+e)+"px";a.a.xb!=c&&(a.a.xb=b.top=c)}jk(a,!0)}else jk(a,!1)};function kk(a){V.call(this);this.g=void 0;this.a="geometry";this.h=null;this.f=void 0;this.c=null;R(this,La(this.a),this.qb,this);void 0!==a&&(a instanceof Wb||!a?lk(this,a):this.l(a))}B(kk,V);n=kk.prototype;n.clone=function(){var a=new kk(this.Ea());mk(a,this.a);var b=this.S();b&&lk(a,b.clone());if(b=this.h)a.h=b,a.f=b?nk(b):void 0,a.w();return a};n.S=function(){return this.get(this.a)};n.Pa=function(){return this.g};n.ud=function(){this.w()}; + n.qb=function(){this.c&&(M(this.c),this.c=null);var a=this.S();a&&(this.c=R(a,"change",this.ud,this));this.w()};function lk(a,b){a.set(a.a,b)}function mk(a,b){ya(a,La(a.a),a.qb,a);a.a=b;R(a,La(a.a),a.qb,a);a.qb()}function nk(a){if("function"!==typeof a){var b;Array.isArray(a)?b=a:(L(a instanceof yh,41),b=[a]);a=function(){return b}}return a};function ok(a,b,c){return function(d,e,f){var g=new XMLHttpRequest;g.open("GET","function"===typeof a?a(d,e,f):a,!0);"arraybuffer"==b.$()&&(g.responseType="arraybuffer");g.onload=function(){if(!g.status||200<=g.status&&300>g.status){var a=b.$(),d;"json"==a||"text"==a?d=g.responseText:"xml"==a?(d=g.responseXML,d||(a=g.responseText,d=(new DOMParser).parseFromString(a,"application/xml"))):"arraybuffer"==a&&(d=g.response);d&&c.call(this,b.a(d,{featureProjection:f}),b.c(pk(d)))}}.bind(this);g.send()}} + function qk(a,b){return ok(a,b,function(a){this.Gb(a)})};function rk(){this.defaultDataProjection=null}function sk(a,b,c){var d;c&&(d={dataProjection:c.dataProjection?c.dataProjection:a.c(pk(b)),featureProjection:c.featureProjection});var e;d&&(e={featureProjection:d.featureProjection,dataProjection:d.dataProjection?d.dataProjection:a.defaultDataProjection,rightHanded:d.rightHanded},d.decimals&&(e.decimals=d.decimals));return e} + function tk(a,b){var c=b?Hb(b.featureProjection):null,d=b?Hb(b.dataProjection):null;if(c&&d&&!Tb(c,d))if(a instanceof Wb)c=a.transform(d,c);else{d=Ub(d,c);c=[a[0],a[1],a[0],a[3],a[2],a[1],a[2],a[3]];d(c,c,2);var e=[c[0],c[2],c[4],c[6]],f=[c[1],c[3],c[5],c[7]],c=Math.min.apply(null,e),d=Math.min.apply(null,f),e=Math.max.apply(null,e),f=Math.max.apply(null,f),c=ib(c,d,e,f,void 0)}else c=a;return c};function uk(){this.defaultDataProjection=null}B(uk,rk);function pk(a){return"string"===typeof a?(a=JSON.parse(a))?a:null:null!==a?a:null}uk.prototype.$=function(){return"json"};uk.prototype.g=function(a,b){return this.b(pk(a),sk(this,a,b))};uk.prototype.a=function(a,b){return this.h(pk(a),sk(this,a,b))};function vk(a,b,c,d,e){var f=NaN,g=NaN,h=(c-b)/d;if(0!==h)if(1==h)f=a[b],g=a[b+1];else if(2==h)f=.5*a[b]+.5*a[b+d],g=.5*a[b+1]+.5*a[b+d+1];else{var g=a[b],h=a[b+1],k=0,f=[0],l;for(l=b+d;l<c;l+=d){var m=a[l],p=a[l+1],k=k+Math.sqrt((m-g)*(m-g)+(p-h)*(p-h));f.push(k);g=m;h=p}c=.5*k;k=0;l=f.length;for(m=!1;k<l;)g=k+(l-k>>1),h=+Ma(f[g],c),0>h?k=g+1:(l=g,m=!h);g=m?k:~k;0>g?(c=(c-f[-g-2])/(f[-g-1]-f[-g-2]),b+=(-g-2)*d,f=a[b],f+=c*(a[b+d]-f),g=a[b+1],g+=c*(a[b+d+1]-g)):(f=a[b+g*d],g=a[b+g*d+1])}return e? + (e[0]=f,e[1]=g,e):[f,g]};function wk(a,b){Yb.call(this);this.a=null;this.h=-1;this.ea(a,b)}B(wk,Yb);n=wk.prototype;n.clone=function(){var a=new wk(null);$b(a,this.c,this.o.slice());a.w();return a};n.za=function(){return ec(this.o,0,this.o.length,this.A)};function Nh(a){if(a.h!=a.b){var b;b=vk(a.o,0,a.o.length,a.A,a.a);a.a=b;a.h=a.b}return a.a}n.Qa=function(a){var b=[];b.length=gc(this.o,0,this.o.length,this.A,a,b,0);a=new wk(null);$b(a,"XY",b);a.w();return a};n.$=function(){return"LineString"}; + n.ea=function(a,b){a?(ac(this,b,a,1),this.o||(this.o=[]),this.o.length=cc(this.o,0,a,this.A)):$b(this,"XY",null);this.w()};function xk(a,b){Yb.call(this);this.ua=[];this.ea(a,b)}B(xk,Yb);n=xk.prototype;n.clone=function(){var a=new xk(null),b=this.ua.slice();$b(a,this.c,this.o.slice());a.ua=b;a.w();return a};n.za=function(){return fc(this.o,0,this.ua,this.A)};function Oh(a){var b=[],c=a.o,d=0,e=a.ua;a=a.A;var f,g;f=0;for(g=e.length;f<g;++f){var h=e[f],d=vk(c,d,h,a);Pa(b,d);d=h}return b} + n.Qa=function(a){var b=[],c=[],d=this.o,e=this.ua,f=this.A,g=0,h=0,k,l;k=0;for(l=e.length;k<l;++k){var m=e[k],h=gc(d,g,m,f,a,b,h);c.push(h);g=m}b.length=h;a=new xk(null);$b(a,"XY",b);a.ua=c;a.w();return a};n.$=function(){return"MultiLineString"};n.ea=function(a,b){if(a){ac(this,b,a,2);this.o||(this.o=[]);var c=dc(this.o,0,a,this.A,this.ua);this.o.length=0===c.length?0:c[c.length-1]}else c=this.ua,$b(this,"XY",null),this.ua=c;this.w()};function yk(a,b){Yb.call(this);this.ea(a,b)}B(yk,Yb);yk.prototype.clone=function(){var a=new yk(null);$b(a,this.c,this.o.slice());a.w();return a};yk.prototype.za=function(){return ec(this.o,0,this.o.length,this.A)};yk.prototype.$=function(){return"MultiPoint"};yk.prototype.ea=function(a,b){a?(ac(this,b,a,1),this.o||(this.o=[]),this.o.length=cc(this.o,0,a,this.A)):$b(this,"XY",null);this.w()};function zk(a,b){Yb.call(this);this.a=[];this.v=-1;this.u=null;this.B=-1;this.h=null;this.ea(a,b)}B(zk,Yb);n=zk.prototype;n.clone=function(){for(var a=new zk(null),b=this.a.length,c=Array(b),d=0;d<b;++d)c[d]=this.a[d].slice();$b(a,this.c,this.o.slice());a.a=c;a.w();return a};n.za=function(a){var b;void 0!==a?(b=Ph(this).slice(),pc(b,this.a,this.A,a)):b=this.o;a=b;b=this.a;var c=this.A,d=0,e=[],f=0,g,h;g=0;for(h=b.length;g<h;++g){var k=b[g];e[f++]=fc(a,d,k,c,e[f]);d=k[k.length-1]}e.length=f;return e}; + function Qh(a){if(a.v!=a.b){var b=a.o,c=a.a,d=a.A,e=0,f=[],g,h,k;g=0;for(h=c.length;g<h;++g){var l=c[g];k=b;var m=l[0],p=d,q=jb(void 0);k=nb(q,k,e,m,p);f.push((k[0]+k[2])/2,(k[1]+k[3])/2);e=l[l.length-1]}b=Ph(a);c=a.a;d=a.A;g=0;h=[];l=0;for(k=c.length;l<k;++l)e=c[l],h=lc(b,g,e,d,f,2*l,h),g=e[e.length-1];a.u=h;a.v=a.b}return a.u} + function Ph(a){if(a.B!=a.b){var b=a.o,c;a:{c=a.a;var d,e;d=0;for(e=c.length;d<e;++d)if(!nc(b,c[d],a.A,void 0)){c=!1;break a}c=!0}c?a.h=b:(a.h=b.slice(),a.h.length=pc(a.h,a.a,a.A));a.B=a.b}return a.h}n.Qa=function(a){var b=[],c=[],d=this.o,e=this.a,f=this.A;a=Math.sqrt(a);var g=0,h=0,k,l;k=0;for(l=e.length;k<l;++k){var m=e[k],p=[],h=hc(d,g,m,f,a,b,h,p);c.push(p);g=m[m.length-1]}b.length=h;d=new zk(null);$b(d,"XY",b);d.a=c;d.w();return d};n.$=function(){return"MultiPolygon"}; + n.ea=function(a,b){if(a){ac(this,b,a,3);this.o||(this.o=[]);var c=this.o,d=this.A,e=this.a,f=0,e=e?e:[],g=0,h,k;h=0;for(k=a.length;h<k;++h)f=dc(c,f,a[h],d,e[g]),e[g++]=f,f=f[f.length-1];e.length=g;0===e.length?this.o.length=0:(c=e[e.length-1],this.o.length=0===c.length?0:c[c.length-1])}else c=this.a,$b(this,"XY",null),this.a=c;this.w()};function Ak(a){a=a?a:{};this.defaultDataProjection=null;this.f=a.geometryName}B(Ak,uk);function Bk(a){var b="XY";!0===a.hasZ&&!0===a.hasM?b="XYZM":!0===a.hasZ?b="XYZ":!0===a.hasM&&(b="XYM");return b} + var Ck={Point:function(a){return void 0!==a.m&&void 0!==a.z?new jc([a.x,a.y,a.z,a.m],"XYZM"):void 0!==a.z?new jc([a.x,a.y,a.z],"XYZ"):void 0!==a.m?new jc([a.x,a.y,a.m],"XYM"):new jc([a.x,a.y])},LineString:function(a){return new wk(a.paths[0],Bk(a))},Polygon:function(a){return new qc(a.rings,Bk(a))},MultiPoint:function(a){return new yk(a.points,Bk(a))},MultiLineString:function(a){return new xk(a.paths,Bk(a))},MultiPolygon:function(a){return new zk(a.rings,Bk(a))}}; + Ak.prototype.b=function(a,b){var c;if(c=a.geometry){var d;if("number"===typeof c.x&&"number"===typeof c.y)d="Point";else if(c.points)d="MultiPoint";else if(c.paths)d=1===c.paths.length?"LineString":"MultiLineString";else if(c.rings){var e=c.rings,f=Bk(c),g=[];d=[];var h,k;h=0;for(k=e.length;h<k;++h){var l=Oa(e[h]);mc(l,0,l.length,f.length)?g.push([e[h]]):d.push(e[h])}for(;d.length;){e=d.shift();f=!1;for(h=g.length-1;0<=h;h--)if(hb((new ic(g[h][0])).G(),(new ic(e)).G())){g[h].push(e);f=!0;break}f|| + g.push([e.reverse()])}c=pa({},c);1===g.length?(d="Polygon",c.rings=g[0]):(d="MultiPolygon",c.rings=g)}c=tk((0,Ck[d])(c),b)}else c=null;g=new kk;this.f&&mk(g,this.f);lk(g,c);b&&b.Tb&&a.attributes[b.Tb]&&(g.g=a.attributes[b.Tb],g.w());a.attributes&&g.l(a.attributes);return g};Ak.prototype.h=function(a,b){var c=b?b:{};if(a.features){var d=[],e=a.features,f,g;c.Tb=a.objectIdFieldName;f=0;for(g=e.length;f<g;++f)d.push(this.b(e[f],c));return d}return[this.b(a,c)]}; + Ak.prototype.c=function(a){return a.spatialReference&&a.spatialReference.wkid?Hb("EPSG:"+a.spatialReference.wkid):null};function Dk(a){Wb.call(this);this.a=a?a:null;Ek(this)}B(Dk,Wb);function Fk(a){var b,c;if(a.a)for(b=0,c=a.a.length;b<c;++b)ya(a.a[b],"change",a.w,a)}function Ek(a){var b,c;if(a.a)for(b=0,c=a.a.length;b<c;++b)R(a.a[b],"change",a.w,a)}n=Dk.prototype;n.clone=function(){var a=new Dk(null),b=this.a,c=[],d,e;d=0;for(e=b.length;d<e;++d)c.push(b[d].clone());Fk(a);a.a=c;Ek(a);a.w();return a};n.mb=function(a){jb(a);for(var b=this.a,c=0,d=b.length;c<d;++c)mb(a,b[c].G());return a}; + n.Rb=function(a){this.i!=this.b&&(qa(this.f),this.g=0,this.i=this.b);if(0>a||0!==this.g&&a<this.g)return this;var b=a.toString();if(this.f.hasOwnProperty(b))return this.f[b];var c=[],d=this.a,e=!1,f,g;f=0;for(g=d.length;f<g;++f){var h=d[f],k=h.Rb(a);c.push(k);k!==h&&(e=!0)}if(e)return a=new Dk(null),Fk(a),a.a=c,Ek(a),a.w(),this.f[b]=a;this.g=a;return this};n.$=function(){return"GeometryCollection"};n.rotate=function(a,b){for(var c=this.a,d=0,e=c.length;d<e;++d)c[d].rotate(a,b);this.w()}; + n.scale=function(a,b,c){c||(c=tb(this.G()));for(var d=this.a,e=0,f=d.length;e<f;++e)d[e].scale(a,b,c);this.w()};n.Hb=function(a){var b=this.a,c,d;c=0;for(d=b.length;c<d;++c)b[c].Hb(a);this.w()};n.translate=function(a,b){var c=this.a,d,e;d=0;for(e=c.length;d<e;++d)c[d].translate(a,b);this.w()};n.R=function(){Fk(this);Wb.prototype.R.call(this)};function Gk(a){a=a?a:{};this.defaultDataProjection=null;this.defaultDataProjection=Hb(a.defaultDataProjection?a.defaultDataProjection:"EPSG:4326");this.f=a.geometryName}B(Gk,uk);function Hk(a,b){return a?tk((0,Ik[a.type])(a),b):null} + var Ik={Point:function(a){return new jc(a.coordinates)},LineString:function(a){return new wk(a.coordinates)},Polygon:function(a){return new qc(a.coordinates)},MultiPoint:function(a){return new yk(a.coordinates)},MultiLineString:function(a){return new xk(a.coordinates)},MultiPolygon:function(a){return new zk(a.coordinates)},GeometryCollection:function(a,b){var c=a.geometries.map(function(a){return Hk(a,b)});return new Dk(c)}}; + Gk.prototype.b=function(a,b){var c=Hk(a.geometry,b),d=new kk;this.f&&mk(d,this.f);lk(d,c);void 0!==a.id&&(d.g=a.id,d.w());a.properties&&d.l(a.properties);return d};Gk.prototype.h=function(a,b){var c;if("Feature"==a.type)c=[this.b(a,b)];else if("FeatureCollection"==a.type){c=[];var d=a.features,e,f;e=0;for(f=d.length;e<f;++e)c.push(this.b(d[e],b))}else L(!1,35);return c}; + Gk.prototype.c=function(a){a=a.crs;var b;a?"name"==a.type?b=Hb(a.properties.name):"EPSG"==a.type?b=Hb("EPSG:"+a.properties.code):L(!1,36):b=this.defaultDataProjection;return b};function Jk(a,b,c,d,e,f){Ga.call(this);this.l=null;this.b=a?a:new Image;null!==d&&(this.b.crossOrigin=d);this.f=f?document.createElement("CANVAS"):null;this.h=f;this.g=null;this.c=e;this.a=c;this.s=b;this.i=!1;2==this.c&&Kk(this)}B(Jk,Ga);function Kk(a){var b=Md(1,1);try{b.drawImage(a.b,0,0),b.getImageData(0,0,1,1)}catch(c){a.i=!0}}Jk.prototype.j=function(){this.c=3;this.g.forEach(M);this.g=null;U(this,"change")}; + Jk.prototype.v=function(){this.c=2;this.a&&(this.b.width=this.a[0],this.b.height=this.a[1]);this.a=[this.b.width,this.b.height];this.g.forEach(M);this.g=null;Kk(this);if(!this.i&&null!==this.h){this.f.width=this.b.width;this.f.height=this.b.height;var a=this.f.getContext("2d");a.drawImage(this.b,0,0);for(var b=a.getImageData(0,0,this.b.width,this.b.height),c=b.data,d=this.h[0]/255,e=this.h[1]/255,f=this.h[2]/255,g=0,h=c.length;g<h;g+=4)c[g]*=d,c[g+1]*=e,c[g+2]*=f;a.putImageData(b,0,0)}U(this,"change")}; + Jk.prototype.Z=function(){return this.f?this.f:this.b};Jk.prototype.load=function(){if(0==this.c){this.c=1;this.g=[R(this.b,"error",this.j,this,!0),R(this.b,"load",this.v,this,!0)];try{this.b.src=this.s}catch(a){this.j()}}};function Lk(a){a=a||{};this.g=void 0!==a.anchor?a.anchor:[.5,.5];this.f=null;this.a=void 0!==a.anchorOrigin?a.anchorOrigin:"top-left";this.l=void 0!==a.anchorXUnits?a.anchorXUnits:"fraction";this.i=void 0!==a.anchorYUnits?a.anchorYUnits:"fraction";var b=void 0!==a.crossOrigin?a.crossOrigin:null,c=void 0!==a.img?a.img:null,d=void 0!==a.imgSize?a.imgSize:null,e=a.src;L(!(void 0!==e&&c),4);L(!c||c&&d,5);void 0!==e&&0!==e.length||!c||(e=c.src||J(c).toString());L(void 0!==e&&0<e.length,6);var f=void 0!== + a.src?0:2,g;void 0!==a.color?(g=a.color,g=Array.isArray(g)?g:pd(g)):g=null;var h=Af.get(e,b,g);h||(h=new Jk(c,e,d,b,f,g),Af.set(e,b,g,h));this.b=h;this.u=void 0!==a.offset?a.offset:[0,0];this.c=void 0!==a.offsetOrigin?a.offsetOrigin:"top-left";this.h=null;this.j=void 0!==a.size?a.size:null;oh.call(this,{opacity:void 0!==a.opacity?a.opacity:1,rotation:void 0!==a.rotation?a.rotation:0,scale:void 0!==a.scale?a.scale:1,snapToPixel:void 0!==a.snapToPixel?a.snapToPixel:!0,rotateWithView:void 0!==a.rotateWithView? + a.rotateWithView:!1})}B(Lk,oh);n=Lk.prototype;n.eb=function(){if(this.f)return this.f;var a=this.g,b=this.Ka();if("fraction"==this.l||"fraction"==this.i){if(!b)return null;a=this.g.slice();"fraction"==this.l&&(a[0]*=b[0]);"fraction"==this.i&&(a[1]*=b[1])}if("top-left"!=this.a){if(!b)return null;a===this.g&&(a=this.g.slice());if("top-right"==this.a||"bottom-right"==this.a)a[0]=-a[0]+b[0];if("bottom-left"==this.a||"bottom-right"==this.a)a[1]=-a[1]+b[1]}return this.f=a};n.Z=function(a){return this.b.Z(a)}; + n.Ob=function(){return this.b.a};n.ib=function(){return this.b.c};n.ub=function(){var a=this.b;if(!a.l)if(a.i){var b=a.a[0],c=a.a[1],d=Md(b,c);d.fillRect(0,0,b,c);a.l=d.canvas}else a.l=a.b;return a.l};n.pa=function(){if(this.h)return this.h;var a=this.u;if("top-left"!=this.c){var b=this.Ka(),c=this.b.a;if(!b||!c)return null;a=a.slice();if("top-right"==this.c||"bottom-right"==this.c)a[0]=c[0]-b[0]-a[0];if("bottom-left"==this.c||"bottom-right"==this.c)a[1]=c[1]-b[1]-a[1]}return this.h=a}; + n.Ka=function(){return this.j?this.j:this.b.a};n.Vb=function(a,b){return R(this.b,"change",a,b)};n.load=function(){this.b.load()};n.bc=function(a,b){ya(this.b,"change",a,b)};function Mk(a,b,c){Yb.call(this);Nk(this,a,b?b:0,c)}B(Mk,Yb);Mk.prototype.clone=function(){var a=new Mk(null);$b(a,this.c,this.o.slice());a.w();return a};Mk.prototype.mb=function(a){var b=this.o,c=b[this.A]-b[0];return ib(b[0]-c,b[1]-c,b[0]+c,b[1]+c,a)};Mk.prototype.$=function(){return"Circle"};function Nk(a,b,c,d){if(b){ac(a,d,b,0);a.o||(a.o=[]);d=a.o;b=bc(d,b);d[b++]=d[0]+c;var e;c=1;for(e=a.A;c<e;++c)d[b++]=d[c];d.length=b}else $b(a,"XY",null);a.w()};function Ok(a,b,c,d,e){Sf.call(this,a,b);this.g=c;this.a=new Image;null!==d&&(this.a.crossOrigin=d);this.c={};this.f=null;this.h=e}B(Ok,Sf);n=Ok.prototype;n.R=function(){1==this.state&&Pk(this);this.b&&Da(this.b);this.state=5;Tf(this);Sf.prototype.R.call(this)};n.Z=function(a){if(void 0!==a){var b=J(a);if(b in this.c)return this.c[b];a=sa(this.c)?this.a:this.a.cloneNode(!1);return this.c[b]=a}return this.a};n.getKey=function(){return this.g};n.ce=function(){this.state=3;Pk(this);Tf(this)}; + n.de=function(){this.state=this.a.naturalWidth&&this.a.naturalHeight?2:4;Pk(this);Tf(this)};n.load=function(){if(0==this.state||3==this.state)this.state=1,Tf(this),this.f=[R(this.a,"error",this.ce,this,!0),R(this.a,"load",this.de,this,!0)],this.h(this,this.g)};function Pk(a){a.f.forEach(M);a.f=null};function Qk(){return[[-Infinity,-Infinity,Infinity,Infinity]]};var Rk; + (function(){var a={},b={Aa:a};(function(c){if("object"===typeof a&&"undefined"!==typeof b)b.Aa=c();else{var d;"undefined"!==typeof window?d=window:"undefined"!==typeof global?d=global:"undefined"!==typeof self?d=self:d=this;d.Re=c()}})(function(){return function d(a,b,g){function h(l,p){if(!b[l]){if(!a[l]){var q="function"==typeof require&&require;if(!p&&q)return require(l,!0);if(k)return k(l,!0);q=Error("Cannot find module '"+l+"'");throw q.code="MODULE_NOT_FOUND",q;}q=b[l]={Aa:{}};a[l][0].call(q.Aa,function(b){var d= + a[l][1][b];return h(d?d:b)},q,q.Aa,d,a,b,g)}return b[l].Aa}for(var k="function"==typeof require&&require,l=0;l<g.length;l++)h(g[l]);return h}({1:[function(a,b){function f(a,b){if(!(this instanceof f))return new f(a,b);this.Db=Math.max(4,a||9);this.gc=Math.max(2,Math.ceil(.4*this.Db));b&&this.ad(b);this.clear()}function g(a,b){h(a,0,a.children.length,b,a)}function h(a,b,d,e,g){g||(g=r(null));g.H=Infinity;g.J=Infinity;g.I=-Infinity;g.L=-Infinity;for(var f;b<d;b++)f=a.children[b],k(g,a.ga?e(f):f);return g} + function k(a,b){a.H=Math.min(a.H,b.H);a.J=Math.min(a.J,b.J);a.I=Math.max(a.I,b.I);a.L=Math.max(a.L,b.L)}function l(a,b){return a.H-b.H}function m(a,b){return a.J-b.J}function p(a){return(a.I-a.H)*(a.L-a.J)}function q(a){return a.I-a.H+(a.L-a.J)}function u(a,b){return a.H<=b.H&&a.J<=b.J&&b.I<=a.I&&b.L<=a.L}function w(a,b){return b.H<=a.I&&b.J<=a.L&&b.I>=a.H&&b.L>=a.J}function r(a){return{children:a,height:1,ga:!0,H:Infinity,J:Infinity,I:-Infinity,L:-Infinity}}function x(a,b,d,e,g){for(var f=[b,d], + h;f.length;)d=f.pop(),b=f.pop(),d-b<=e||(h=b+Math.ceil((d-b)/e/2)*e,D(a,h,b,d,g),f.push(b,h,h,d))}b.Aa=f;var D=a("quickselect");f.prototype={all:function(){return this.cc(this.data,[])},search:function(a){var b=this.data,d=[],e=this.la;if(!w(a,b))return d;for(var g=[],f,h,k,l;b;){f=0;for(h=b.children.length;f<h;f++)k=b.children[f],l=b.ga?e(k):k,w(a,l)&&(b.ga?d.push(k):u(a,l)?this.cc(k,d):g.push(k));b=g.pop()}return d},load:function(a){if(!a||!a.length)return this;if(a.length<this.gc){for(var b=0, + d=a.length;b<d;b++)this.Ha(a[b]);return this}a=this.ec(a.slice(),0,a.length-1,0);this.data.children.length?this.data.height===a.height?this.hc(this.data,a):(this.data.height<a.height&&(b=this.data,this.data=a,a=b),this.fc(a,this.data.height-a.height-1,!0)):this.data=a;return this},Ha:function(a){a&&this.fc(a,this.data.height-1);return this},clear:function(){this.data=r([]);return this},remove:function(a,b){if(!a)return this;for(var d=this.data,e=this.la(a),g=[],f=[],h,k,l,m;d||g.length;){d||(d=g.pop(), + k=g[g.length-1],h=f.pop(),m=!0);if(d.ga){a:{l=a;var p=d.children,q=b;if(q){for(var r=0;r<p.length;r++)if(q(l,p[r])){l=r;break a}l=-1}else l=p.indexOf(l)}if(-1!==l){d.children.splice(l,1);g.push(d);this.$c(g);break}}m||d.ga||!u(d,e)?k?(h++,d=k.children[h],m=!1):d=null:(g.push(d),f.push(h),h=0,k=d,d=d.children[0])}return this},la:function(a){return a},Kb:l,Lb:m,toJSON:function(){return this.data},cc:function(a,b){for(var d=[];a;)a.ga?b.push.apply(b,a.children):d.push.apply(d,a.children),a=d.pop();return b}, + ec:function(a,b,d,e){var f=d-b+1,h=this.Db,k;if(f<=h)return k=r(a.slice(b,d+1)),g(k,this.la),k;e||(e=Math.ceil(Math.log(f)/Math.log(h)),h=Math.ceil(f/Math.pow(h,e-1)));k=r([]);k.ga=!1;k.height=e;var f=Math.ceil(f/h),h=f*Math.ceil(Math.sqrt(h)),l,m,p;for(x(a,b,d,h,this.Kb);b<=d;b+=h)for(m=Math.min(b+h-1,d),x(a,b,m,f,this.Lb),l=b;l<=m;l+=f)p=Math.min(l+f-1,m),k.children.push(this.ec(a,l,p,e-1));g(k,this.la);return k},Zc:function(a,b,d,e){for(var f,g,h,k,l,m,q,r;;){e.push(b);if(b.ga||e.length-1===d)break; + q=r=Infinity;f=0;for(g=b.children.length;f<g;f++)h=b.children[f],l=p(h),m=(Math.max(h.I,a.I)-Math.min(h.H,a.H))*(Math.max(h.L,a.L)-Math.min(h.J,a.J))-l,m<r?(r=m,q=l<q?l:q,k=h):m===r&&l<q&&(q=l,k=h);b=k||b.children[0]}return b},fc:function(a,b,d){var e=this.la;d=d?a:e(a);var e=[],f=this.Zc(d,this.data,b,e);f.children.push(a);for(k(f,d);0<=b;)if(e[b].children.length>this.Db)this.bd(e,b),b--;else break;this.Wc(d,e,b)},bd:function(a,b){var d=a[b],e=d.children.length,f=this.gc;this.Xc(d,f,e);e=this.Yc(d, + f,e);e=r(d.children.splice(e,d.children.length-e));e.height=d.height;e.ga=d.ga;g(d,this.la);g(e,this.la);b?a[b-1].children.push(e):this.hc(d,e)},hc:function(a,b){this.data=r([a,b]);this.data.height=a.height+1;this.data.ga=!1;g(this.data,this.la)},Yc:function(a,b,d){var e,f,g,k,l,m,q;l=m=Infinity;for(e=b;e<=d-b;e++)f=h(a,0,e,this.la),g=h(a,e,d,this.la),k=Math.max(0,Math.min(f.I,g.I)-Math.max(f.H,g.H))*Math.max(0,Math.min(f.L,g.L)-Math.max(f.J,g.J)),f=p(f)+p(g),k<l?(l=k,q=e,m=f<m?f:m):k===l&&f<m&&(m= + f,q=e);return q},Xc:function(a,b,d){var e=a.ga?this.Kb:l,f=a.ga?this.Lb:m,g=this.dc(a,b,d,e);b=this.dc(a,b,d,f);g<b&&a.children.sort(e)},dc:function(a,b,d,e){a.children.sort(e);e=this.la;var f=h(a,0,b,e),g=h(a,d-b,d,e),l=q(f)+q(g),m,p;for(m=b;m<d-b;m++)p=a.children[m],k(f,a.ga?e(p):p),l+=q(f);for(m=d-b-1;m>=b;m--)p=a.children[m],k(g,a.ga?e(p):p),l+=q(g);return l},Wc:function(a,b,d){for(;0<=d;d--)k(b[d],a)},$c:function(a){for(var b=a.length-1,d;0<=b;b--)0===a[b].children.length?0<b?(d=a[b-1].children, + d.splice(d.indexOf(a[b]),1)):this.clear():g(a[b],this.la)},ad:function(a){var b=["return a"," - b",";"];this.Kb=new Function("a","b",b.join(a[0]));this.Lb=new Function("a","b",b.join(a[1]));this.la=new Function("a","return {minX: a"+a[0]+", minY: a"+a[1]+", maxX: a"+a[2]+", maxY: a"+a[3]+"};")}}},{quickselect:2}],2:[function(a,b){function f(a,b,d,e,q){d=d||0;e=e||a.length-1;for(q=q||h;e>d;){if(600<e-d){var u=e-d+1,w=b-d+1,r=Math.log(u),x=.5*Math.exp(2*r/3),r=.5*Math.sqrt(r*x*(u-x)/u)*(0>w-u/2?-1: + 1);f(a,b,Math.max(d,Math.floor(b-w*x/u+r)),Math.min(e,Math.floor(b+(u-w)*x/u+r)),q)}u=a[b];w=d;x=e;g(a,d,b);for(0<q(a[e],u)&&g(a,d,e);w<x;){g(a,w,x);w++;for(x--;0>q(a[w],u);)w++;for(;0<q(a[x],u);)x--}0===q(a[d],u)?g(a,d,x):(x++,g(a,x,e));x<=b&&(d=x+1);b<=x&&(e=x-1)}}function g(a,b,d){var e=a[b];a[b]=a[d];a[d]=e}function h(a,b){return a<b?-1:a>b?1:0}b.Aa=f},{}]},{},[1])(1)});Rk=b.Aa})();function Sk(a){this.b=Rk(a);this.a={}}n=Sk.prototype;n.Ha=function(a,b){var c={H:a[0],J:a[1],I:a[2],L:a[3],value:b};this.b.Ha(c);this.a[J(b)]=c};n.load=function(a,b){for(var c=Array(b.length),d=0,e=b.length;d<e;d++){var f=a[d],g=b[d],f={H:f[0],J:f[1],I:f[2],L:f[3],value:g};c[d]=f;this.a[J(g)]=f}this.b.load(c)};n.remove=function(a){a=J(a);var b=this.a[a];delete this.a[a];return null!==this.b.remove(b)};function Tk(a){return a.b.all().map(function(a){return a.value})} + function Uk(a,b){return a.b.search({H:b[0],J:b[1],I:b[2],L:b[3]}).map(function(a){return a.value})}function Vk(a,b,c,d){return Wk(Uk(a,b),c,d)}function Wk(a,b,c){for(var d,e=0,f=a.length;e<f&&!(d=b.call(c,a[e]));e++);return d}n.clear=function(){this.b.clear();this.a={}};n.G=function(){var a=this.b.data;return[a.H,a.J,a.I,a.L]};function Xk(a){a=a||{};vf.call(this,{attributions:a.attributions,logo:a.logo,projection:void 0,state:"ready",wrapX:void 0!==a.wrapX?a.wrapX:!0});this.j=I;this.s=a.format;this.u=void 0==a.overlaps?!0:a.overlaps;this.B=a.url;void 0!==a.loader?this.j=a.loader:void 0!==this.B&&(L(this.s,7),this.j=qk(this.B,this.s));this.W=void 0!==a.strategy?a.strategy:Qk;var b=void 0!==a.useSpatialIndex?a.useSpatialIndex:!0;this.X=b?new Sk:null;this.v=new Sk;this.ka={};this.c={};this.f={};this.g={};this.a=null;var c, + d;a.features instanceof cd?(c=a.features,d=c.a):Array.isArray(a.features)&&(d=a.features);b||void 0!==c||(c=new cd(d));void 0!==d&&Yk(this,d);void 0!==c&&Zk(this,c)}B(Xk,vf);n=Xk.prototype;n.Fb=function(a){var b=J(a).toString();if($k(this,b,a)){al(this,b,a);var c=a.S();c?(b=c.G(),this.X&&this.X.Ha(b,a)):this.ka[b]=a;U(this,new bl("addfeature",a))}this.w()};function al(a,b,c){a.g[b]=[R(c,"change",a.vc,a),R(c,"propertychange",a.vc,a)]} + function $k(a,b,c){var d=!0,e=c.Pa();void 0!==e?e.toString()in a.c?d=!1:a.c[e.toString()]=c:(L(!(b in a.f),30),a.f[b]=c);return d}n.Gb=function(a){Yk(this,a);this.w()};function Yk(a,b){var c,d,e,f,g=[],h=[],k=[];d=0;for(e=b.length;d<e;d++)f=b[d],c=J(f).toString(),$k(a,c,f)&&h.push(f);d=0;for(e=h.length;d<e;d++){f=h[d];c=J(f).toString();al(a,c,f);var l=f.S();l?(c=l.G(),g.push(c),k.push(f)):a.ka[c]=f}a.X&&a.X.load(g,k);d=0;for(e=h.length;d<e;d++)U(a,new bl("addfeature",h[d]))} + function Zk(a,b){var c=!1;R(a,"addfeature",function(a){c||(c=!0,b.push(a.feature),c=!1)});R(a,"removefeature",function(a){c||(c=!0,b.remove(a.feature),c=!1)});R(b,hd,function(a){c||(c=!0,this.Fb(a.element),c=!1)},a);R(b,id,function(a){if(!c){c=!0;a=a.element;var b=J(a).toString();b in this.ka?delete this.ka[b]:this.X&&this.X.remove(a);this.Zb(a);this.w();c=!1}},a);a.a=b} + n.clear=function(a){if(a){for(var b in this.g)this.g[b].forEach(M);this.a||(this.g={},this.c={},this.f={})}else if(this.X){a=this.Zb;Wk(Tk(this.X),a,this);for(var c in this.ka)this.Zb(this.ka[c])}this.a&&this.a.clear();this.X&&this.X.clear();this.v.clear();this.ka={};U(this,new bl("clear"));this.w()};n.nd=function(a,b){if(this.X)return Wk(Tk(this.X),a,b);if(this.a)return ed(this.a,a,b)};function Qi(a,b,c,d){a.X?Vk(a.X,b,c,d):a.a&&ed(a.a,c,d)} + n.pd=function(){var a;this.a?a=this.a.a:this.X&&(a=Tk(this.X),sa(this.ka)||Pa(a,ra(this.ka)));return a};n.G=function(){return this.X.G()}; + n.vc=function(a){a=a.target;var b=J(a).toString(),c=a.S();if(c)if(c=c.G(),b in this.ka)delete this.ka[b],this.X&&this.X.Ha(c,a);else{if(this.X){var d=this.X,e=d.a[J(a)];lb([e.H,e.J,e.I,e.L],c)||(d.remove(a),d.Ha(c,a))}}else b in this.ka||(this.X&&this.X.remove(a),this.ka[b]=a);c=a.Pa();void 0!==c?(c=c.toString(),b in this.f?(delete this.f[b],this.c[c]=a):this.c[c]!==a&&(cl(this,a),this.c[c]=a)):b in this.f||(cl(this,a),this.f[b]=a);this.w();U(this,new bl("changefeature",a))}; + function Pi(a,b,c,d){var e=a.v;b=a.W(b,c);var f,g;f=0;for(g=b.length;f<g;++f){var h=b[f];Vk(e,h,function(a){return hb(a.extent,h)})||(a.j.call(a,h,c,d),e.Ha(h,{extent:h.slice()}))}}n.Zb=function(a){var b=J(a).toString();this.g[b].forEach(M);delete this.g[b];var c=a.Pa();void 0!==c?delete this.c[c.toString()]:delete this.f[b];U(this,new bl("removefeature",a))};function cl(a,b){for(var c in a.c)if(a.c[c]===b){delete a.c[c];break}}function bl(a,b){T.call(this,a);this.feature=b}B(bl,T);function dl(a,b){T.call(this,a);this.feature=b}B(dl,T); + function el(a){ng.call(this,{handleDownEvent:fl,handleEvent:gl,handleUpEvent:hl});this.W=null;this.s=!1;this.Ga=a.source?a.source:null;this.ma=a.features?a.features:null;this.jd=a.snapTolerance?a.snapTolerance:12;this.P=a.type;this.c=il(this.P);this.wa=a.minPoints?a.minPoints:this.c===jl?3:2;this.va=a.maxPoints?a.maxPoints:Infinity;this.Ab=a.finishCondition?a.finishCondition:yb;var b=a.geometryFunction;if(!b)if("Circle"===this.P)b=function(a,b){var c=b?b:new Mk([NaN,NaN]),g=a[0],h=a[1],k=g[0]-h[0], + g=g[1]-h[1];Nk(c,a[0],Math.sqrt(k*k+g*g));return c};else{var c,b=this.c;b===kl?c=jc:b===ll?c=wk:b===jl&&(c=qc);b=function(a,b){var f=b;f?f.ea(a):f=new c(a);return f}}this.u=b;this.D=this.i=this.a=this.j=this.g=this.h=null;this.kd=a.clickTolerance?a.clickTolerance*a.clickTolerance:36;this.ba=new Y({source:new Xk({useSpatialIndex:!1,wrapX:a.wrapX?a.wrapX:!1}),style:a.style?a.style:ml()});this.Fa=a.geometryName;this.gd=a.condition?a.condition:jg;this.na=a.freehandCondition?a.freehandCondition:kg;R(this, + La("active"),this.kb,this)}B(el,ng);function ml(){var a=Eh();return function(b){return a[b.S().$()]}}el.prototype.setMap=function(a){ng.prototype.setMap.call(this,a);this.kb()};function gl(a){this.c!==ll&&this.c!==jl||!this.na(a)||(this.s=!0);var b=!this.s;this.s&&a.type===qf?(nl(this,a),b=!1):a.type===pf?b=pl(this,a):a.type===jf&&(b=!1);return og.call(this,a)&&b}function fl(a){return this.gd(a)?(this.W=a.pixel,!0):this.s?(this.W=a.pixel,this.h||ql(this,a),!0):!1} + function hl(a){this.s=!1;var b=this.W,c=a.pixel,d=b[0]-c[0],b=b[1]-c[1],c=!0;d*d+b*b<=this.kd&&(pl(this,a),this.h?this.c===rl?sl(this):tl(this,a)?this.Ab(a)&&sl(this):nl(this,a):(ql(this,a),this.c===kl&&sl(this)),c=!1);return c} + function pl(a,b){if(a.h){var c=b.coordinate,d=a.g.S(),e;a.c===kl?e=a.a:a.c===jl?(e=a.a[0],e=e[e.length-1],tl(a,b)&&(c=a.h.slice())):(e=a.a,e=e[e.length-1]);e[0]=c[0];e[1]=c[1];a.u(a.a,d);a.j&&a.j.S().ea(c);d instanceof qc&&a.c!==jl?(a.i||(a.i=new kk(new wk(null))),0>=d.ja.length?d=null:(c=new ic(null),$b(c,d.c,d.o.slice(0,d.ja[0])),c.w(),d=c),c=a.i.S(),$b(c,d.c,d.o),c.w()):a.D&&(c=a.i.S(),c.ea(a.D));ul(a)}else d=b.coordinate.slice(),a.j?a.j.S().ea(d):(a.j=new kk(new jc(d)),ul(a));return!0} + function tl(a,b){var c=!1;if(a.g){var d=!1,e=[a.h];a.c===ll?d=a.a.length>a.wa:a.c===jl&&(d=a.a[0].length>a.wa,e=[a.a[0][0],a.a[0][a.a[0].length-2]]);if(d)for(var d=b.map,f=0,g=e.length;f<g;f++){var h=e[f],k=ug(d,h),l=b.pixel,c=l[0]-k[0],k=l[1]-k[1],l=a.s&&a.na(b)?1:a.jd;if(c=Math.sqrt(c*c+k*k)<=l){a.h=h;break}}}return c} + function ql(a,b){var c=b.coordinate;a.h=c;a.c===kl?a.a=c.slice():a.c===jl?(a.a=[[c.slice(),c.slice()]],a.D=a.a[0]):(a.a=[c.slice(),c.slice()],a.c===rl&&(a.D=a.a));a.D&&(a.i=new kk(new wk(a.D)));c=a.u(a.a);a.g=new kk;a.Fa&&mk(a.g,a.Fa);lk(a.g,c);ul(a);U(a,new dl("drawstart",a.g))} + function nl(a,b){var c=b.coordinate,d=a.g.S(),e,f;if(a.c===ll)a.h=c.slice(),f=a.a,f.push(c.slice()),e=f.length>a.va,a.u(f,d);else if(a.c===jl){f=a.a[0];f.push(c.slice());if(e=f.length>a.va)a.h=f[0];a.u(a.a,d)}ul(a);e&&sl(a)} + function sl(a){var b=vl(a),c=a.a,d=b.S();a.c===ll?(c.pop(),a.u(c,d)):a.c===jl&&(c[0].pop(),c[0].push(c[0][0]),a.u(c,d));"MultiPoint"===a.P?lk(b,new yk([c])):"MultiLineString"===a.P?lk(b,new xk([c])):"MultiPolygon"===a.P&&lk(b,new zk([c]));U(a,new dl("drawend",b));a.ma&&a.ma.push(b);a.Ga&&a.Ga.Fb(b)}function vl(a){a.h=null;var b=a.g;b&&(a.g=null,a.j=null,a.i=null,a.ba.da().clear(!0));return b}el.prototype.B=zb; + function ul(a){var b=[];a.g&&b.push(a.g);a.i&&b.push(a.i);a.j&&b.push(a.j);a=a.ba.da();a.clear(!0);a.Gb(b)}el.prototype.kb=function(){var a=this.aa,b=this.get("active");a&&b||vl(this);this.ba.setMap(b?a:null)};function il(a){var b;"Point"===a||"MultiPoint"===a?b=kl:"LineString"===a||"MultiLineString"===a?b=ll:"Polygon"===a||"MultiPolygon"===a?b=jl:"Circle"===a&&(b=rl);return b}var kl="Point",ll="LineString",jl="Polygon",rl="Circle";function wl(a,b,c,d,e,f,g,h,k,l,m){Sf.call(this,e,0);this.u=void 0!==m?m:!1;this.v=g;this.s=h;this.f=null;this.c={};this.g=b;this.l=d;this.i=f?f:e;this.a=[];this.Va=null;this.h=0;f=Qc(d,this.i);h=this.l.G();e=this.g.G();f=h?vb(f,h):f;if(0===ob(f))this.state=4;else if((h=a.G())&&(e?e=vb(e,h):e=h),h=d.O(this.i[0]),m=tb(f),d=Ub(c,a)(m,void 0,m.length),h=c.getPointResolution(h,m),m=Lb(c),void 0!==m&&(h*=m),m=Lb(a),void 0!==m&&(h/=m),d=a.getPointResolution(h,d)/h,isFinite(d)&&0<d&&(h/=d),d=h,!isFinite(d)|| + 0>=d)this.state=4;else if(this.j=new Ji(a,c,f,e,d*(void 0!==l?l:.5)),0===this.j.f.length)this.state=4;else if(this.h=Xc(b,d),c=Li(this.j),e&&(a.b?(c[1]=ia(c[1],e[1],e[3]),c[3]=ia(c[3],e[1],e[3])):c=vb(c,e)),ob(c)){a=Rc(b,c,this.h);for(b=a.H;b<=a.I;b++)for(c=a.J;c<=a.L;c++)(l=k(this.h,b,c,g))&&this.a.push(l);0===this.a.length&&(this.state=4)}else this.state=4}B(wl,Sf);wl.prototype.R=function(){1==this.state&&(this.Va.forEach(M),this.Va=null);Sf.prototype.R.call(this)}; + wl.prototype.Z=function(a){if(void 0!==a){var b=J(a);if(b in this.c)return this.c[b];a=sa(this.c)?this.f:this.f.cloneNode(!1);return this.c[b]=a}return this.f}; + wl.prototype.Tc=function(){var a=[];this.a.forEach(function(b){b&&2==b.T()&&a.push({extent:Qc(this.g,b.V),image:b.Z()})},this);this.a.length=0;if(0===a.length)this.state=3;else{var b=this.i[0],c=Wc(this.l,b),d="number"===typeof c?c:c[0],c="number"===typeof c?c:c[1],b=this.l.O(b),e=this.g.O(this.h),f=Qc(this.l,this.i);this.f=Ii(d,c,this.v,e,this.g.G(),b,f,this.j,a,this.s,this.u);this.state=2}Tf(this)}; + wl.prototype.load=function(){if(0==this.state){this.state=1;Tf(this);var a=0;this.Va=[];this.a.forEach(function(b){var c=b.T();if(0==c||1==c){a++;var d;d=R(b,"change",function(){var c=b.T();if(2==c||3==c||4==c)M(d),a--,0===a&&(this.Va.forEach(M),this.Va=null,this.Tc())},this);this.Va.push(d)}},this);this.a.forEach(function(a){0==a.T()&&a.load()});0===a&&K.setTimeout(this.Tc.bind(this),0)}};function xl(a,b){var c=/\{z\}/g,d=/\{x\}/g,e=/\{y\}/g,f=/\{-y\}/g;return function(g){if(g)return a.replace(c,g[0].toString()).replace(d,g[1].toString()).replace(e,function(){return(-g[2]-1).toString()}).replace(f,function(){var a=b.a?b.a[g[0]]:null;L(a,55);return(a.L-a.J+1+g[2]).toString()})}}function yl(a,b){for(var c=a.length,d=Array(c),e=0;e<c;++e)d[e]=xl(a[e],b);return zl(d)}function zl(a){return 1===a.length?a[0]:function(b,c,d){if(b)return a[la((b[1]<<b[0])+b[2],a.length)](b,c,d)}} + function Al(){};function Bl(a){Xj.call(this);this.g=void 0!==a?a:2048}B(Bl,Xj);function Cl(a){return a.f>a.g}Bl.prototype.Oa=function(a){for(var b,c;Cl(this);){b=this.b.Na;c=b.V[0].toString();var d;if(d=c in a)b=b.V,d=Hc(a[c],b[1],b[2]);if(d)break;else Da(this.pop())}};function Dl(a){vf.call(this,{attributions:a.attributions,extent:a.extent,logo:a.logo,projection:a.projection,state:a.state,wrapX:a.wrapX});this.u=void 0!==a.opaque?a.opaque:!1;this.aa=void 0!==a.tilePixelRatio?a.tilePixelRatio:1;this.tileGrid=void 0!==a.tileGrid?a.tileGrid:null;this.a=new Bl(a.cacheSize);this.g=[0,0];this.Ia=""}B(Dl,vf);n=Dl.prototype;n.Mc=function(){return Cl(this.a)};n.Oa=function(a,b){var c=this.fb(a);c&&c.Oa(b)}; + function Sh(a,b,c,d,e){b=a.fb(b);if(!b)return!1;for(var f=!0,g,h,k=d.H;k<=d.I;++k)for(var l=d.J;l<=d.L;++l)g=a.ob(c,k,l),h=!1,Uj(b,g)&&(g=b.get(g),(h=2===g.T())&&(h=!1!==e(g))),h||(f=!1);return f}n.nb=function(){return 0};n.getKey=function(){return this.Ia};n.ob=function(a,b,c){return a+"/"+b+"/"+c};n.Qb=function(){return this.u};n.sa=function(a){return this.tileGrid?this.tileGrid:Zc(a)};n.fb=function(a){var b=this.ia();return b&&!Tb(b,a)?null:this.a};n.pb=function(){return this.aa}; + function Ni(a,b,c,d){d=a.sa(d);c=a.pb(c);b=Lc(Wc(d,b),a.g);return 1==c?b:Kc(b,c,a.g)}function El(a,b,c){var d=void 0!==c?c:a.ia();c=a.sa(d);if(a.i&&d.c){var e=b;b=e[0];a=Vc(c,e);var d=$c(d),f=a[0],g=a[1];d[0]<=f&&f<=d[2]&&d[1]<=g&&g<=d[3]?b=e:(e=qb(d),a[0]+=e*Math.ceil((d[0]-a[0])/e),b=Yc(c,a,b))}d=b[0];a=b[1];e=b[2];c=c.minZoom>d||d>c.maxZoom?!1:(c=(f=c.G())?Rc(c,f,d):c.a?c.a[d]:null)?Hc(c,a,e):!0;return c?b:null}n.Ja=function(){this.a.clear();this.w()};n.Vc=I; + function Fl(a,b){T.call(this,a);this.tile=b}B(Fl,T);function Gl(a){Dl.call(this,{attributions:a.attributions,cacheSize:a.cacheSize,extent:a.extent,logo:a.logo,opaque:a.opaque,projection:a.projection,state:a.state,tileGrid:a.tileGrid,tilePixelRatio:a.tilePixelRatio,wrapX:a.wrapX});this.tileLoadFunction=a.tileLoadFunction;this.tileUrlFunction=this.f?this.f.bind(this):Al;this.urls=null;if(a.urls){var b=a.urls;this.urls=b;var c=b.join("\n");Hl(this,this.f?this.f.bind(this):yl(b,this.tileGrid),c)}else a.url&&this.s(a.url);a.tileUrlFunction&&Hl(this,a.tileUrlFunction)} + B(Gl,Dl);Gl.prototype.v=function(a){a=a.target;switch(a.T()){case 1:U(this,new Fl("tileloadstart",a));break;case 2:U(this,new Fl("tileloadend",a));break;case 3:U(this,new Fl("tileloaderror",a))}};function Hl(a,b,c){a.tileUrlFunction=b;"undefined"!==typeof c?a.Ia!==c&&(a.Ia=c,a.w()):a.w()} + Gl.prototype.s=function(a){var b=[],c=/\{(\d)-(\d)\}/.exec(a)||/\{([a-z])-([a-z])\}/.exec(a);if(c){var d=c[2].charCodeAt(0),e;for(e=c[1].charCodeAt(0);e<=d;++e)b.push(a.replace(c[0],String.fromCharCode(e)))}else b.push(a);b=this.urls=b;Hl(this,this.f?this.f.bind(this):yl(b,this.tileGrid),a)};Gl.prototype.Vc=function(a,b,c){a=this.ob(a,b,c);Uj(this.a,a)&&this.a.get(a)};function Il(a){Gl.call(this,{attributions:a.attributions,cacheSize:a.cacheSize,extent:a.extent,logo:a.logo,opaque:a.opaque,projection:a.projection,state:a.state,tileGrid:a.tileGrid,tileLoadFunction:a.tileLoadFunction?a.tileLoadFunction:Jl,tilePixelRatio:a.tilePixelRatio,tileUrlFunction:a.tileUrlFunction,url:a.url,urls:a.urls,wrapX:a.wrapX});this.crossOrigin=void 0!==a.crossOrigin?a.crossOrigin:null;this.tileClass=void 0!==a.tileClass?a.tileClass:Ok;this.c={};this.j={};this.W=a.reprojectionErrorThreshold} + B(Il,Gl);n=Il.prototype;n.Mc=function(){if(Cl(this.a))return!0;for(var a in this.c)if(Cl(this.c[a]))return!0;return!1};n.Oa=function(a,b){var c=this.fb(a);this.a.Oa(this.a==c?b:{});for(var d in this.c){var e=this.c[d];e.Oa(e==c?b:{})}};n.nb=function(a){return this.ia()&&a&&Tb(this.ia(),a),0};n.Qb=function(a){return this.ia()&&a&&!Tb(this.ia(),a)?!1:Gl.prototype.Qb.call(this,a)}; + n.sa=function(a){var b=this.ia();return!this.tileGrid||b&&!Tb(b,a)?(b=J(a).toString(),b in this.j||(this.j[b]=Zc(a)),this.j[b]):this.tileGrid};n.fb=function(a){var b=this.ia();if(!b||Tb(b,a))return this.a;a=J(a).toString();a in this.c||(this.c[a]=new Bl);return this.c[a]};function Kl(a,b,c,d,e,f,g){b=[b,c,d];e=(c=El(a,b,f))?a.tileUrlFunction(c,e,f):void 0;e=new a.tileClass(b,void 0!==e?0:4,void 0!==e?e:"",a.crossOrigin,a.tileLoadFunction);e.key=g;R(e,"change",a.v,a);return e} + function $h(a,b,c,d,e,f){if(a.ia()&&f&&!Tb(a.ia(),f)){var g=a.fb(f);d=[b,c,d];var h;b=a.ob.apply(a,d);Uj(g,b)&&(h=g.get(b));c=a.getKey();if(h&&h.key==c)return h;var k=a.ia(),l=a.sa(k),m=a.sa(f),p=El(a,d,f);a=new wl(k,l,f,m,d,p,a.pb(e),0,function(a,b,c,d){return Ll(this,a,b,c,d,k)}.bind(a),a.W,!1);a.key=c;h?(a.b=h,Zj(g,b,a)):g.set(b,a);return a}return Ll(a,b,c,d,e,f)} + function Ll(a,b,c,d,e,f){var g,h=a.ob(b,c,d),k=a.getKey();if(Uj(a.a,h)){if(g=a.a.get(h),g.key!=k){var l=g;g.b&&g.b.key==k?(g=g.b,2==l.T()&&(g.b=l)):(g=Kl(a,b,c,d,e,f,k),2==l.T()?g.b=l:l.b&&2==l.b.T()&&(g.b=l.b,l.b=null));g.b&&(g.b.b=null);Zj(a.a,h,g)}}else g=Kl(a,b,c,d,e,f,k),a.a.set(h,g);return g}function Jl(a,b){a.Z().src=b};function Ml(a){a=a||{};var b=void 0!==a.projection?a.projection:"EPSG:3857",c;if(void 0!==a.tileGrid)c=a.tileGrid;else{c={extent:$c(b),maxZoom:a.maxZoom,minZoom:a.minZoom,tileSize:a.tileSize};var d={};pa(d,void 0!==c?c:{});void 0===d.extent&&(d.extent=Hb("EPSG:3857").G());d.resolutions=ad(d.extent,d.maxZoom,d.tileSize);delete d.maxZoom;c=new Mc(d)}Il.call(this,{attributions:a.attributions,cacheSize:a.cacheSize,crossOrigin:a.crossOrigin,logo:a.logo,opaque:a.opaque,projection:b,reprojectionErrorThreshold:a.reprojectionErrorThreshold, + tileGrid:c,tileLoadFunction:a.tileLoadFunction,tilePixelRatio:a.tilePixelRatio,tileUrlFunction:a.tileUrlFunction,url:a.url,urls:a.urls,wrapX:void 0!==a.wrapX?a.wrapX:!0})}B(Ml,Il);function Nl(a,b){var c=[];Object.keys(b).forEach(function(a){null!==b[a]&&void 0!==b[a]&&c.push(a+"="+encodeURIComponent(b[a]))});var d=c.join("&");a=a.replace(/[?&]$/,"");a=-1===a.indexOf("?")?a+"?":a+"&";return a+d};function Ol(a){a=a||{};var b;void 0!==a.attributions?b=a.attributions:b=[Pl];Ml.call(this,{attributions:b,cacheSize:a.cacheSize,crossOrigin:void 0!==a.crossOrigin?a.crossOrigin:"anonymous",opaque:void 0!==a.opaque?a.opaque:!0,maxZoom:void 0!==a.maxZoom?a.maxZoom:19,reprojectionErrorThreshold:a.reprojectionErrorThreshold,tileLoadFunction:a.tileLoadFunction,url:void 0!==a.url?a.url:"https://{a-c}.tile.openstreetmap.org/{z}/{x}/{y}.png",wrapX:a.wrapX})}B(Ol,Ml);var Pl=new bd({html:'© <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors.'});function Ql(a){a=a||{};Il.call(this,{attributions:a.attributions,cacheSize:a.cacheSize,crossOrigin:a.crossOrigin,logo:a.logo,projection:a.projection,reprojectionErrorThreshold:a.reprojectionErrorThreshold,tileGrid:a.tileGrid,tileLoadFunction:a.tileLoadFunction,url:a.url,urls:a.urls,wrapX:void 0!==a.wrapX?a.wrapX:!0});this.B=a.params||{};this.ba=db()}B(Ql,Il);Ql.prototype.pb=function(a){return a}; + Ql.prototype.f=function(a,b,c){var d=this.tileGrid;d||(d=this.sa(c));if(!(d.b.length<=a[0])){var e=Qc(d,a,this.ba),f=Lc(Wc(d,a[0]),this.g);1!=b&&(f=Kc(f,b,this.g));d={F:"image",FORMAT:"PNG32",TRANSPARENT:!0};pa(d,this.B);var g=this.urls;g?(c=c.ya.split(":").pop(),d.SIZE=f[0]+","+f[1],d.BBOX=e.join(","),d.BBOXSR=c,d.IMAGESR=c,d.DPI=Math.round(d.DPI?d.DPI*b:90*b),a=1==g.length?g[0]:g[la((a[1]<<a[0])+a[2],g.length)],b=a.replace(/MapServer\/?$/,"MapServer/export").replace(/ImageServer\/?$/,"ImageServer/exportImage"), + b==a&&L(!1,50),d=Nl(b,d)):d=void 0;return d}};function Rl(a){this.j=this.l=this.f=null;this.i=void 0!==a.fill?a.fill:null;this.M=[0,0];this.b=a.points;this.c=void 0!==a.radius?a.radius:a.radius1;this.g=void 0!==a.radius2?a.radius2:this.c;this.h=void 0!==a.angle?a.angle:0;this.a=void 0!==a.stroke?a.stroke:null;this.D=this.Y=this.u=null;var b=a.atlasManager,c="",d="",e=0,f=null,g,h=0;this.a&&(g=nd(this.a.a),h=this.a.c,void 0===h&&(h=1),f=this.a.b,pe||(f=null),d=this.a.g,void 0===d&&(d="round"),c=this.a.f,void 0===c&&(c="round"),e=this.a.h,void 0=== + e&&(e=10));var k=2*(this.c+h)+1,c={strokeStyle:g,jb:h,size:k,lineCap:c,lineDash:f,lineJoin:d,miterLimit:e};if(void 0===b){var l=Md(k,k);this.l=l.canvas;b=k=this.l.width;this.Qc(c,l,0,0);this.i?this.j=this.l:(l=Md(c.size,c.size),this.j=l.canvas,this.Pc(c,l,0,0))}else k=Math.round(k),(d=!this.i)&&(l=this.Pc.bind(this,c)),e=this.a?qh(this.a):"-",f=this.i?rh(this.i):"-",this.f&&e==this.f[1]&&f==this.f[2]&&this.c==this.f[3]&&this.g==this.f[4]&&this.h==this.f[5]&&this.b==this.f[6]||(this.f=["r"+e+f+(void 0!== + this.c?this.c.toString():"-")+(void 0!==this.g?this.g.toString():"-")+(void 0!==this.h?this.h.toString():"-")+(void 0!==this.b?this.b.toString():"-"),e,f,this.c,this.g,this.h,this.b]),l=b.add(this.f[0],k,k,this.Qc.bind(this,c),l),this.l=l.image,this.M=[l.offsetX,l.offsetY],b=l.image.width,d?this.j=l.Nd:this.j=this.l;this.u=[k/2,k/2];this.Y=[k,k];this.D=[b,b];oh.call(this,{opacity:1,rotateWithView:void 0!==a.rotateWithView?a.rotateWithView:!1,rotation:void 0!==a.rotation?a.rotation:0,scale:1,snapToPixel:void 0!== + a.snapToPixel?a.snapToPixel:!0})}B(Rl,oh);n=Rl.prototype;n.eb=function(){return this.u};n.ub=function(){return this.j};n.Z=function(){return this.l};n.Ob=function(){return this.D};n.ib=function(){return 2};n.pa=function(){return this.M};n.Ka=function(){return this.Y};n.Vb=I;n.load=I;n.bc=I; + n.Qc=function(a,b,c,d){var e;b.setTransform(1,0,0,1,0,0);b.translate(c,d);b.beginPath();this.g!==this.c&&(this.b*=2);for(c=0;c<=this.b;c++)d=2*c*Math.PI/this.b-Math.PI/2+this.h,e=0===c%2?this.c:this.g,b.lineTo(a.size/2+e*Math.cos(d),a.size/2+e*Math.sin(d));this.i&&(b.fillStyle=qd(this.i.b),b.fill());this.a&&(b.strokeStyle=a.strokeStyle,b.lineWidth=a.jb,a.lineDash&&b.setLineDash(a.lineDash),b.lineCap=a.lineCap,b.lineJoin=a.lineJoin,b.miterLimit=a.miterLimit,b.stroke());b.closePath()}; + n.Pc=function(a,b,c,d){b.setTransform(1,0,0,1,0,0);b.translate(c,d);b.beginPath();this.g!==this.c&&(this.b*=2);var e;for(c=0;c<=this.b;c++)e=2*c*Math.PI/this.b-Math.PI/2+this.h,d=0===c%2?this.c:this.g,b.lineTo(a.size/2+d*Math.cos(e),a.size/2+d*Math.sin(e));b.fillStyle=kh;b.fill();this.a&&(b.strokeStyle=a.strokeStyle,b.lineWidth=a.jb,a.lineDash&&b.setLineDash(a.lineDash),b.stroke());b.closePath()};y("ol.format.GeoJSON",Gk);Gk.prototype.readFeatures=Gk.prototype.a;Gk.prototype.readFeature=Gk.prototype.g;y("ol.format.EsriJSON",Ak);Ak.prototype.readFeatures=Ak.prototype.a;Ak.prototype.readFeature=Ak.prototype.g;y("ol.style.Style",yh);y("ol.style.Circle",ph);y("ol.style.RegularShape",Rl);y("ol.style.Fill",sh);y("ol.style.Stroke",xh);y("ol.style.Icon",Lk); + y("ol.style.Text",function(a){a=a||{};this.b=a.font;this.h=a.rotation;this.g=a.rotateWithView;this.l=a.scale;this.j=a.text;this.C=a.textAlign;this.K=a.textBaseline;this.f=void 0!==a.fill?a.fill:new sh({color:"#333"});this.i=void 0!==a.stroke?a.stroke:null;this.a=void 0!==a.offsetX?a.offsetX:0;this.c=void 0!==a.offsetY?a.offsetY:0});y("ol.View",uc);uc.prototype.on=uc.prototype.Y;uc.prototype.getZoom=uc.prototype.rd;uc.prototype.setZoom=uc.prototype.ye;uc.prototype.getCenter=uc.prototype.qa; + uc.prototype.setCenter=uc.prototype.xa;uc.prototype.calculateExtent=uc.prototype.lc;uc.prototype.getProjection=uc.prototype.ia;uc.prototype.fit=uc.prototype.md;y("ol.control.defaults",ee);y("ol.layer.Tile",W);W.prototype.getVisible=W.prototype.gb;W.prototype.setVisible=W.prototype.Cc;W.prototype.getZIndex=W.prototype.Yb;W.prototype.setZIndex=W.prototype.Dc;W.prototype.getOpacity=W.prototype.Xb;W.prototype.setOpacity=W.prototype.Bc;W.prototype.getSource=W.prototype.da;W.prototype.setSource=W.prototype.$b; + W.prototype.on=W.prototype.Y;y("ol.layer.Vector",Y);Y.prototype.getVisible=Y.prototype.gb;Y.prototype.setVisible=Y.prototype.Cc;Y.prototype.getSource=Y.prototype.da;Y.prototype.setStyle=Y.prototype.v;Y.prototype.getZIndex=Y.prototype.Yb;Y.prototype.setZIndex=Y.prototype.Dc;Y.prototype.getOpacity=Y.prototype.Xb;Y.prototype.setOpacity=Y.prototype.Bc;Y.prototype.getSource=Y.prototype.da;Y.prototype.setSource=Y.prototype.$b;Y.prototype.on=Y.prototype.Y;y("ol.source.OSM",Ol);Ol.prototype.refresh=Ol.prototype.Ja; + y("ol.source.XYZ",Ml);Ml.prototype.refresh=Ml.prototype.Ja;Ml.prototype.setUrl=Ml.prototype.s;Ml.prototype.refresh=Ml.prototype.Ja;y("ol.Map",Z);Z.prototype.on=Z.prototype.Y;Z.prototype.getTarget=Z.prototype.Wb;Z.prototype.getTargetElement=Z.prototype.Ra;Z.prototype.getView=Z.prototype.U;Z.prototype.addOverlay=Z.prototype.fd;Z.prototype.addLayer=Z.prototype.ed;Z.prototype.removeLayer=Z.prototype.te;Z.prototype.getEventPixel=Z.prototype.uc;Z.prototype.hasFeatureAtPixel=Z.prototype.Md; + Z.prototype.getSize=Z.prototype.Ta;Z.prototype.updateSize=Z.prototype.yb;Z.prototype.forEachFeatureAtPixel=Z.prototype.od;Z.prototype.addInteraction=Z.prototype.dd;Z.prototype.removeInteraction=Z.prototype.se;Z.prototype.beforeRender=Z.prototype.oa;Z.prototype.addControl=Z.prototype.cd;Z.prototype.once=Z.prototype.hd;Z.prototype.renderSync=Z.prototype.we;y("ol.source.Vector",Xk);Xk.prototype.getFeatures=Xk.prototype.pd;Xk.prototype.getExtent=Xk.prototype.G;Xk.prototype.refresh=Xk.prototype.Ja; + Xk.prototype.addFeatures=Xk.prototype.Gb;Xk.prototype.addFeature=Xk.prototype.Fb;Xk.prototype.clear=Xk.prototype.clear;Xk.prototype.forEachFeature=Xk.prototype.nd;Xk.prototype.refresh=Xk.prototype.Ja;y("ol.source.TileArcGISRest",Ql);Ql.prototype.refresh=Ql.prototype.Ja;y("ol.Overlay",gk);gk.prototype.setPosition=gk.prototype.Ac;y("ol.Feature",kk);kk.prototype.getProperties=kk.prototype.Ea;kk.prototype.setProperties=kk.prototype.l;kk.prototype.getGeometry=kk.prototype.S;y("ol.geom.Point",jc); + jc.prototype.transform=jc.prototype.transform;jc.prototype.getCoordinates=jc.prototype.za;jc.prototype.getExtent=jc.prototype.G;y("ol.geom.Polygon",qc);qc.prototype.getCoordinates=qc.prototype.za;qc.prototype.getExtent=qc.prototype.G;qc.prototype.transform=qc.prototype.transform;y("ol.geom.LineString",wk);wk.prototype.getCoordinates=wk.prototype.za;wk.prototype.getExtent=wk.prototype.G;wk.prototype.transform=wk.prototype.transform;y("ol.proj.Projection",Eb);Eb.prototype.getCode=Eb.prototype.l; + y("ol.interaction.Draw",el);el.prototype.on=el.prototype.Y;y("ol.animation.pan",Dc);y("ol.control.FullScreen",Xd); + return OPENLAYERS.ol; + })); + + + /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }()))) + +/***/ }, +/* 7 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Created by gavorhes on 11/3/2015. + */ + "use strict"; + var mapMoveCls_1 = __webpack_require__(8); + /** + * The single map move object catch is that it is common to multimap pages + * @type {MapMoveCls} + */ + exports.mapMove = new mapMoveCls_1.default(); + Object.defineProperty(exports, "__esModule", { value: true }); + exports.default = exports.mapMove; + + +/***/ }, +/* 8 */ +/***/ function(module, exports, __webpack_require__) { + + "use strict"; + var __extends = (this && this.__extends) || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + var mapInteractionBase_1 = __webpack_require__(9); + var checkDefined = __webpack_require__(10); + var provide_1 = __webpack_require__(4); + var makeGuid_1 = __webpack_require__(11); + var $ = __webpack_require__(3); + var nm = provide_1.default('olHelpers'); + /** + * assists with map move interactions, trigger callback functions + * @augments MapInteractionBase + */ + var MapMoveCls = (function (_super) { + __extends(MapMoveCls, _super); + /** + * constructor called implicitly + */ + function MapMoveCls() { + _super.call(this, 'map move'); + this._arrLyrRequest = []; + this._arrLyrTimeout = []; + this._arrLayer = []; + this._lookupLayer = {}; + this._mapMoveCallbacks = []; + this._mapMoveCallbacksLookup = {}; + this._mapMoveCallbackDelays = []; + this._mapMoveCallbackContext = []; + this._mapMoveCallbackTimeout = []; + this._mapExtent = undefined; + this._zoomLevel = undefined; + } + /** + * initialize the map move object + * @param theMap - the ol map + */ + MapMoveCls.prototype.init = function (theMap) { + var _this = this; + _super.prototype.init.call(this, theMap); + this.map.getView().on(['change:center', 'change:resolution'], function (e) { + _this._updateMapExtent(); + // trigger the layer updates + for (var i = 0; i < _this._arrLayer.length; i++) { + _this.triggerLyrLoad(_this._arrLayer[i], i, e.type); + } + // trigger the map callbacks + for (var i = 0; i < _this._mapMoveCallbacks.length; i++) { + _this.triggerMoveCallback(i, e.type); + } + }); + }; + MapMoveCls.prototype._updateMapExtent = function () { + var theView = this.map.getView(); + this._zoomLevel = theView.getZoom(); + var extentArray = theView.calculateExtent(this.map.getSize()); + this._mapExtent = { + minX: extentArray[0], + minY: extentArray[1], + maxX: extentArray[2], + maxY: extentArray[3] + }; + }; + Object.defineProperty(MapMoveCls.prototype, "mapExtent", { + /** + * return the map extent + */ + get: function () { + if (!this._mapExtent) { + this._updateMapExtent(); + } + return this._mapExtent; + }, + enumerable: true, + configurable: true + }); + /** + * Trigger the layer load + * @param lyr the layer being acted on + * @param index index of the layer + * @param eventType the event triggering the load, as 'change:center' or 'change:resolution' + */ + MapMoveCls.prototype.triggerLyrLoad = function (lyr, index, eventType) { + if (checkDefined.undefinedOrNull(lyr) && checkDefined.undefinedOrNull(index)) { + throw 'need to define lyr or index'; + } + else if (checkDefined.definedAndNotNull(lyr) && checkDefined.undefinedOrNull(index)) { + index = this._arrLayer.indexOf(lyr); + } + else if (checkDefined.undefinedOrNull(lyr) && checkDefined.definedAndNotNull(index)) { + lyr = this._arrLayer[index]; + } + // clear the timeout + if (this._arrLyrTimeout[index] != null) { + clearTimeout(this._arrLyrTimeout[index]); + this._arrLyrTimeout[index] = null; + } + // abort if necessary and clear the request + if (this._arrLyrRequest[index] != null && this._arrLyrRequest[index] != 4) { + this._arrLyrRequest[index].abort(); + this._arrLyrRequest[index] = null; + } + // dummy callback used if before load returns false + var callbackFunc = function () { }; + if (lyr.mapMoveBefore(this._zoomLevel, eventType)) { + lyr.mapMoveMakeGetParams(this._mapExtent, this._zoomLevel); + var _this_1 = this; + callbackFunc = function () { + function innerFunction(theLayer, theIndex) { + var _innerThis = this; + this._arrLyrRequest[theIndex] = $.get(theLayer.url, theLayer.mapMoveParams, function (d) { + /** + * @type {LayerBaseVector} + */ + theLayer.mapMoveCallback(d); + theLayer.loadCallback(); + }, 'json').fail(function (jqXHR) { + if (jqXHR.statusText != 'abort') { + console.log('failed'); + console.log(theLayer.url); + console.log(theLayer.mapMoveParams); + } + }).always(function () { + _innerThis._arrLyrTimeout[theIndex] = null; + _innerThis._arrLyrRequest[theIndex] = null; + }); + } + innerFunction.call(_this_1, lyr, index); + }; + } + else { + lyr.clear(); + } + this._arrLyrTimeout[index] = setTimeout(callbackFunc, lyr.onDemandDelay); + }; + /** + * trigger the map move call back at the given index + * @param ind - the index of the layer + * @param eventType=undefined the event triggering the load as 'change:center' or 'change:resolution' + * @param functionId=undefined the function id used to reference the added callback function + */ + MapMoveCls.prototype.triggerMoveCallback = function (ind, eventType, functionId) { + if (typeof ind == 'undefined' && typeof functionId == 'undefined') { + throw 'either the function index or the id must be defined'; + } + if (typeof ind !== 'number') { + ind = this._mapMoveCallbacks.indexOf(this._mapMoveCallbacksLookup[functionId]); + } + if (ind < 0) { + console.log('function not found'); + return; + } + // clear the timeout + if (this._mapMoveCallbackTimeout[ind] != null) { + clearTimeout(this._mapMoveCallbackTimeout[ind]); + this._mapMoveCallbackTimeout[ind] = null; + } + var ctx = this._mapMoveCallbackContext[ind]; + var theFunc = this._mapMoveCallbacks[ind]; + var _this = this; + var f = function () { + if (ctx !== null) { + theFunc.call(ctx, _this._mapExtent, _this._zoomLevel, eventType); + } + else { + theFunc(_this._mapExtent, _this._zoomLevel, eventType); + } + }; + this._mapMoveCallbackTimeout[ind] = setTimeout(f, this._mapMoveCallbackDelays[ind]); + }; + /** + * Add a layer to the interaction + * @param lyr - layer to add + * @param triggerOnAdd - if the layer should be loaded on add + */ + MapMoveCls.prototype.addVectorLayer = function (lyr, triggerOnAdd) { + if (triggerOnAdd === void 0) { triggerOnAdd = true; } + if (this._arrLayer.indexOf(lyr) > -1) { + console.log('already added ' + lyr.name + ' to map move'); + return; + } + this._checkInit(); + this._arrLyrRequest.push(null); + this._arrLyrTimeout.push(null); + this._arrLayer.push(lyr); + this._lookupLayer[lyr.id] = lyr; + triggerOnAdd = typeof triggerOnAdd == 'boolean' ? triggerOnAdd : true; + if (triggerOnAdd) { + if (this._mapExtent === undefined) { + this._updateMapExtent(); + } + this.triggerLyrLoad(lyr, this._arrLayer.length - 1); + } + }; + /** + * add a callback to the map move event + * @param func - callback function + * @param context - the context to use for this function + * @param delay=50 the delay before call load + * @param triggerOnAdd if the layer should be loaded on add to mapMove + * @param functionId optional id to reference the function later for outside triggering + */ + MapMoveCls.prototype.addCallback = function (func, context, delay, triggerOnAdd, functionId) { + if (this._mapMoveCallbacks.indexOf(func) > -1) { + console.log('this function already added to map move'); + return; + } + this._checkInit(); + if (!functionId) { + functionId = makeGuid_1.default(); + } + this._mapMoveCallbacks.push(func); + this._mapMoveCallbacksLookup[functionId] = functionId; + this._mapMoveCallbackDelays.push(typeof delay == 'number' ? delay : 50); + this._mapMoveCallbackContext.push(checkDefined.definedAndNotNull(context) ? context : null); + this._mapMoveCallbackTimeout.push(null); + triggerOnAdd = typeof triggerOnAdd == 'boolean' ? triggerOnAdd : true; + if (triggerOnAdd) { + if (this._mapExtent === undefined) { + this._updateMapExtent(); + } + this.triggerMoveCallback(this._mapMoveCallbacks.length - 1); + } + }; + return MapMoveCls; + }(mapInteractionBase_1.default)); + exports.MapMoveCls = MapMoveCls; + nm.MapMoveCls = MapMoveCls; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.default = MapMoveCls; + + +/***/ }, +/* 9 */ +/***/ function(module, exports, __webpack_require__) { + + "use strict"; + /** + * Created by gavorhes on 12/8/2015. + */ + var provide_1 = __webpack_require__(4); + var nm = provide_1.default('olHelpers'); + /** + * base interaction + */ + var MapInteractionBase = (function () { + /** + * map interaction base + * @param subtype - the interaction subtype + */ + function MapInteractionBase(subtype) { + this._map = null; + this._initialized = false; + this._subtype = subtype; + } + /** + * base initializer, returns true for already initialized + * @param theMap - the ol Map + * @returns true for already initialized + */ + MapInteractionBase.prototype.init = function (theMap) { + if (!this._initialized) { + this._map = theMap; + this._initialized = true; + } + }; + Object.defineProperty(MapInteractionBase.prototype, "map", { + /** + * get reference to the ol map object + * @returns {ol.Map} the map object + */ + get: function () { + return this._map; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MapInteractionBase.prototype, "initialized", { + /** + * get if is initialized + * @returns {boolean} is initialized + */ + get: function () { + return this._initialized; + }, + enumerable: true, + configurable: true + }); + /** + * Check the initialization status and throw exception if not valid yet + * @protected + */ + MapInteractionBase.prototype._checkInit = function () { + if (!this.initialized) { + var msg = this._subtype + " object not initialized"; + alert(msg); + console.log(msg); + throw msg; + } + }; + /** + * Check the initialization status and throw exception if not valid yet + */ + MapInteractionBase.prototype.checkInit = function () { + this._checkInit(); + }; + return MapInteractionBase; + }()); + exports.MapInteractionBase = MapInteractionBase; + nm.MapInteractionBase = MapInteractionBase; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.default = MapInteractionBase; + + +/***/ }, +/* 10 */ +/***/ function(module, exports, __webpack_require__) { + + "use strict"; + var provide_1 = __webpack_require__(4); + var nm = provide_1.default('util.checkDefined'); + /** + * check if the input is undefined or null + * @param input - input pointer + * @returns true undefined or null + */ + function undefinedOrNull(input) { + "use strict"; + return (typeof input === 'undefined' || input === null); + } + exports.undefinedOrNull = undefinedOrNull; + nm.undefinedOrNull = undefinedOrNull; + /** + * check if the input is defined and not null + * @param input - input pointer + * @returns true defined and not null + */ + function definedAndNotNull(input) { + "use strict"; + return !(undefinedOrNull(input)); + } + exports.definedAndNotNull = definedAndNotNull; + nm.definedAndNotNull = definedAndNotNull; + + +/***/ }, +/* 11 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Created by gavorhes on 11/3/2015. + */ + "use strict"; + var provide_1 = __webpack_require__(4); + var nm = provide_1.default('util'); + /** + * guids are used to uniquely identify groups and features + * @returns {string} a new guid + */ + function makeGuid() { + return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx' + .replace(/[xy]/g, function (c) { + var r = Math.random() * 16 | 0, v = c == 'x' ? r : r & 0x3 | 0x8; + return v.toString(16); + }); + } + nm.makeGuid = makeGuid; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.default = makeGuid; + + +/***/ }, +/* 12 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Created by gavorhes on 11/3/2015. + */ + "use strict"; + var mapPopupCls_1 = __webpack_require__(13); + /** + * The single popup object catch is that it is common to multimap pages + * @type {MapPopupCls} + */ + exports.mapPopup = new mapPopupCls_1.default(); + Object.defineProperty(exports, "__esModule", { value: true }); + exports.default = exports.mapPopup; + + +/***/ }, +/* 13 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Created by gavorhes on 11/3/2015. + */ + "use strict"; + var __extends = (this && this.__extends) || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + var mapInteractionBase_1 = __webpack_require__(9); + var provide_1 = __webpack_require__(4); + var custom_ol_1 = __webpack_require__(5); + var $ = __webpack_require__(3); + var nm = provide_1.default('olHelpers'); + var FeatureLayerProperties = (function () { + /** + * + * @param feature the feature + * @param layer - the layer in the popup + * @param layerIndex - index of the layer + * @param selectionLayer - the ol selection layer + * @param [esriLayerName=undefined] - esri layer name + */ + function FeatureLayerProperties(feature, layer, layerIndex, selectionLayer, esriLayerName) { + this.feature = feature; + this.layer = layer; + this.layerIndex = layerIndex; + this.selectionLayer = selectionLayer; + this.popupContent = ''; + this.esriLayerName = typeof esriLayerName == 'string' ? esriLayerName : undefined; + } + Object.defineProperty(FeatureLayerProperties.prototype, "layerName", { + get: function () { + if (typeof this.esriLayerName == 'string') { + return this.esriLayerName; + } + else { + return this.layer.name; + } + }, + enumerable: true, + configurable: true + }); + return FeatureLayerProperties; + }()); + exports.FeatureLayerProperties = FeatureLayerProperties; + /** + * map popup class + * @augments MapInteractionBase + */ + var MapPopupCls = (function (_super) { + __extends(MapPopupCls, _super); + /** + * Definition for openlayers style function + * @callback olStyleFunction + * ¶m feature the openlayers vector feature + * $param + */ + /** + * map popup constructor + */ + function MapPopupCls() { + _super.call(this, 'map popup'); + this._arrPopupLayerIds = []; + this._arrPopupLayerNames = []; + this._arrPopupLayers = []; + this._arrPopupOlLayers = []; + this._arrPopupContentFunction = []; + this._$popupContainer = undefined; + this._$popupContent = undefined; + this._$popupCloser = undefined; + this._popupOverlay = undefined; + this._selectionLayers = []; + this._selectionLayerLookup = {}; + this._mapClickFunctions = []; + //let a = function($jqueryContent){console.log($jqueryContent)}; + //this._popupChangedLookup = {'a': a}; + this._popupChangedFunctions = []; + this._esriMapServiceLayers = []; + this._popupOpen = false; + this._popupCoordinate = null; + this._passThroughLayerFeatureArray = []; + this._currentPopupIndex = -1; + this._popupContentLength = 0; + } + /** + * map popup initialization + * @param {ol.Map} theMap - the ol map + */ + MapPopupCls.prototype.init = function (theMap) { + var _this = this; + _super.prototype.init.call(this, theMap); + var $map; + var target = this.map.getTarget(); + if (typeof target == 'string') { + $map = $('#' + target); + } + else { + $map = $(target); + } + $map.append('<div class="ol-popup">' + + '<span class="ol-popup-closer">X</span>' + + '<div class="popup-content"></div>' + + '</div>'); + this._$popupContainer = $map.find('.ol-popup'); + this._$popupContent = $map.find('.popup-content'); + this._$popupCloser = $map.find('.ol-popup-closer'); + this._popupOverlay = new custom_ol_1.ol.Overlay({ element: this._$popupContainer[0], autoPan: true, + autoPanAnimation: { + duration: 250, + source: theMap.getView().getCenter() + } }); + this._map.addOverlay(this._popupOverlay); + this._$popupCloser.click(function (evt) { + _this.closePopup(); + }); + // display popup on click + this._map.on('singleclick', function (evt) { + _this.closePopup(); + _this._popupCoordinate = evt['coordinate']; + // esri map service layers + if (_this._esriMapServiceLayers.length > 0) { + var queryParams = { + geometry: evt['coordinate'].join(','), + geometryType: 'esriGeometryPoint', + layers: 'all', + sr: _this._map.getView().getProjection().getCode().split(':')[1], + mapExtent: _this._map.getView().calculateExtent(_this._map.getSize()).join(','), + imageDisplay: _this._map.getSize().join(',') + ',96', + returnGeometry: true, + tolerance: 15, + f: 'pjson' + }; + for (var _i = 0, _a = _this._esriMapServiceLayers; _i < _a.length; _i++) { + var l = _a[_i]; + l.getPopupInfo(queryParams); + } + } + var layerFeatureObjectArray = _this._featuresAtPixel(evt['pixel']); + _this._passThroughLayerFeatureArray = []; + _this._currentPopupIndex = -1; + for (var i = 0; i < layerFeatureObjectArray.length; i++) { + var featObj = layerFeatureObjectArray[i]; + var props = featObj.feature.getProperties(); + var popupContentResponse = _this._arrPopupContentFunction[featObj.layerIndex](props, _this._$popupContent); + //skip if return was false + if (popupContentResponse === false) { + } + else if (typeof popupContentResponse == 'string') { + featObj.popupContent = popupContentResponse; + _this._passThroughLayerFeatureArray.push(featObj); + } + else { + featObj.selectionLayer.getSource().addFeature(featObj.feature); + } + } + _this._popupContentLength = _this._passThroughLayerFeatureArray.length; + _this._currentPopupIndex = -1; + var popupHtml = '<div class="ol-popup-nav">'; + popupHtml += '<span class="previous-popup ol-popup-nav-arrow">◀</span>'; + popupHtml += '<span class="next-popup ol-popup-nav-arrow">▶</span>'; + popupHtml += "<span class=\"current-popup-item-number\" style=\"font-weight: bold;\"></span>"; + popupHtml += "<span> of </span>"; + popupHtml += "<span class=\"popup-content-length\" style=\"font-weight: bold;\">" + _this._popupContentLength + "</span>"; + popupHtml += "<span> - </span>"; + popupHtml += "<span class=\"current-popup-layer-name\"></span>"; + popupHtml += '</div>'; + popupHtml += '<div class="ol-popup-inner">'; + popupHtml += '</div>'; + _this._$popupContent.html(popupHtml); + _this._$popupContent.find('.previous-popup').click(function () { + if (_this._popupContentLength == 1) { + return; + } + if (_this._currentPopupIndex == 0) { + _this._currentPopupIndex = _this._popupContentLength - 1; + } + else { + _this._currentPopupIndex--; + } + _this._triggerFeatSelect(); + }); + var nextPopup = _this._$popupContent.find('.next-popup'); + nextPopup.click(function () { + if (_this._popupContentLength == 1 && _this._currentPopupIndex > -1) { + return; + } + if (_this._currentPopupIndex == _this._popupContentLength - 1) { + _this._currentPopupIndex = 0; + } + else { + _this._currentPopupIndex++; + } + _this._triggerFeatSelect(); + }); + if (_this._popupContentLength > 0) { + nextPopup.trigger('click'); + _this._popupOverlay.setPosition(_this._popupCoordinate); + _this._$popupContent.scrollTop(0); + _this._popupOpen = true; + } + }); + //change mouse cursor when over marker + this._map.on('pointermove', function (evt) { + if (evt['dragging']) { + return; + } + var pixel = _this.map.getEventPixel(evt['originalEvent']); + var hit = _this.map.hasFeatureAtPixel(pixel, function (lyrCandidate) { + for (var _i = 0, _a = _this._arrPopupOlLayers; _i < _a.length; _i++) { + var olLayer = _a[_i]; + if (lyrCandidate == olLayer) { + return true; + } + } + return false; + }); + var mapElement = _this.map.getTargetElement(); + mapElement.style.cursor = hit ? 'pointer' : ''; + }); + return true; + }; + /** + * helper to select features + * @private + */ + MapPopupCls.prototype._triggerFeatSelect = function () { + var $currentPopupItemNumber = this._$popupContent.find('.current-popup-item-number'); + var $innerPopup = this._$popupContent.find('.ol-popup-inner'); + var $layerNameSpan = this._$popupContent.find('.current-popup-layer-name'); + this.clearSelection(); + var lyrFeatObj = this._passThroughLayerFeatureArray[this._currentPopupIndex]; + $currentPopupItemNumber.html((this._currentPopupIndex + 1).toFixed()); + $layerNameSpan.html(lyrFeatObj.layerName); + $innerPopup.html(lyrFeatObj.popupContent); + lyrFeatObj.selectionLayer.getSource().addFeature(lyrFeatObj.feature); + for (var _i = 0, _a = this._popupChangedFunctions; _i < _a.length; _i++) { + var f = _a[_i]; + f(this._$popupContent); + } + }; + /** + * + * @param feature - the ol feature + * @param {LayerEsriMapServer} lyr - the map server layer + * @param {string} popupContent - popup content + * @param {string} esriName - esri layer name + */ + MapPopupCls.prototype.addMapServicePopupContent = function (feature, lyr, popupContent, esriName) { + var featLayerObject = new FeatureLayerProperties(feature, lyr, this._popupContentLength, this._selectionLayerLookup[lyr.id], esriName); + featLayerObject.popupContent = popupContent; + this._passThroughLayerFeatureArray.push(featLayerObject); + this._popupContentLength++; + $('.popup-content-length').html(this._popupContentLength.toFixed()); + if (!this._popupOpen) { + this._$popupContent.find('.next-popup').trigger('click'); + this._popupOverlay.setPosition(this._popupCoordinate); + this._$popupContent.scrollTop(0); + this._popupOpen = true; + } + }; + /** + * + * @param pixel - the ol pixel + * @returns feature layer properties + * @private + */ + MapPopupCls.prototype._featuresAtPixel = function (pixel) { + var _this = this; + var layerFeatureObjectArray = []; + this.map.forEachFeatureAtPixel(pixel, function (feature, layer) { + var lyrIndex = _this._arrPopupOlLayers.indexOf(layer); + if (lyrIndex > -1) { + layerFeatureObjectArray.push(new FeatureLayerProperties(feature, _this._arrPopupLayers[lyrIndex], lyrIndex, _this._selectionLayers[lyrIndex])); + } + }); + return layerFeatureObjectArray; + }; + MapPopupCls.prototype.closePopup = function () { + this._checkInit(); + this._popupOpen = false; + this._popupOverlay.setPosition(undefined); + this._$popupCloser[0].blur(); + this.clearSelection(); + this._$popupContent.html(''); + return false; + }; + ; + /** + * + * @param chgFunction - popup change function + */ + MapPopupCls.prototype.addPopupChangedFunction = function (chgFunction) { + this._popupChangedFunctions.push(chgFunction); + }; + /** + * + * @param {LayerBase|*} lyr - the layer being acted on + * @param {object} [selectionStyle={}] the selection style configuration + * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color + * @param {number} [selectionStyle.width=10] the selection width for linear features + * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function + * @returns the new selection layer + * @private + */ + MapPopupCls.prototype._addPopupLayer = function (lyr, selectionStyle) { + this._checkInit(); + selectionStyle = selectionStyle || {}; + selectionStyle.color = selectionStyle.color || 'rgba(255,170,0,0.5)'; + selectionStyle.width = selectionStyle.width || 10; + var theStyle; + if (selectionStyle.olStyle) { + theStyle = selectionStyle.olStyle; + } + else { + theStyle = new custom_ol_1.ol.style.Style({ + stroke: new custom_ol_1.ol.style.Stroke({ + color: selectionStyle.color, + width: selectionStyle.width + }), + image: new custom_ol_1.ol.style.Circle({ + radius: 7, + fill: new custom_ol_1.ol.style.Fill({ color: selectionStyle.color }), + stroke: new custom_ol_1.ol.style.Stroke({ color: selectionStyle.color, width: 1 }) + }), + fill: new custom_ol_1.ol.style.Fill({ + color: selectionStyle.color + }) + }); + } + var selectionLayer = new custom_ol_1.ol.layer.Vector({ + source: new custom_ol_1.ol.source.Vector(), + style: theStyle, + zIndex: 100 + }); + this._selectionLayers.push(selectionLayer); + this._selectionLayerLookup[lyr.id] = selectionLayer; + this.map.addLayer(selectionLayer); + return selectionLayer; + }; + /** + * Add popup to the map + * @param {LayerBase|*} lyr The layer that the popup with act on + * @param {popupCallback} popupContentFunction - popup content function that makes popup info + * @param {object} [selectionStyle={}] the selection style configuration + * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color + * @param {number} [selectionStyle.width=10] the selection width for linear features + * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function + * @returns {object} a reference to the ol selection layer + */ + MapPopupCls.prototype.addVectorPopup = function (lyr, popupContentFunction, selectionStyle) { + var selectionLayer = this._addPopupLayer(lyr, selectionStyle); + this._arrPopupLayerIds.push(lyr.id); + this._arrPopupLayerNames.push(lyr.name); + this._arrPopupLayers.push(lyr); + this._arrPopupOlLayers.push(lyr.olLayer); + this._arrPopupContentFunction.push(popupContentFunction); + return selectionLayer; + }; + ; + /** + * + * @param {LayerBase} lyr - layer + */ + MapPopupCls.prototype.removeVectorPopup = function (lyr) { + var idx = this._arrPopupLayerIds.indexOf(lyr.id); + if (idx > -1) { + this._arrPopupLayerIds.splice(idx, 1); + this._arrPopupLayerNames.splice(idx, 1); + this._arrPopupLayers.splice(idx, 1); + this._arrPopupOlLayers.splice(idx, 1); + this._arrPopupContentFunction.splice(idx, 1); + this._selectionLayers.splice(idx, 1); + delete this._selectionLayerLookup[lyr.id]; + } + }; + /** + * + * @param {LayerEsriMapServer} lyr - map server layer + * @param {object} [selectionStyle={}] the selection style configuration + * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color + * @param {number} [selectionStyle.width=10] the selection width for linear features + * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function + * @returns {object} a reference to the ol selection layer + */ + MapPopupCls.prototype.addMapServicePopup = function (lyr, selectionStyle) { + var selectionLayer = this._addPopupLayer(lyr, selectionStyle); + this._esriMapServiceLayers.push(lyr); + return selectionLayer; + }; + MapPopupCls.prototype.clearSelection = function () { + this._checkInit(); + for (var i = 0; i < this._selectionLayers.length; i++) { + this._selectionLayers[i].getSource().clear(); + } + for (var _i = 0, _a = this._mapClickFunctions; _i < _a.length; _i++) { + var f = _a[_i]; + f(); + } + }; + ; + /** + * Add a function to be called when the map is clicked but before any popups are implemented + * @param {function} func - the map click function + */ + MapPopupCls.prototype.addMapClickFunction = function (func) { + this._mapClickFunctions.push(func); + }; + return MapPopupCls; + }(mapInteractionBase_1.default)); + nm.MapPopupCls = MapPopupCls; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.default = MapPopupCls; + + +/***/ }, +/* 14 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Created by gavorhes on 6/1/2016. + */ + "use strict"; + var provide_1 = __webpack_require__(4); + var $ = __webpack_require__(3); + var nm = provide_1.default('collections.layerSwipe'); + var LayerSwipe = (function () { + /** + * + * @param {ol.Map} map - the map + * @param {string} [sliderContent=''] - additional html to be added inside the slider div + */ + function LayerSwipe(map, sliderContent) { + var _this = this; + if (sliderContent === void 0) { sliderContent = ''; } + sliderContent = sliderContent || ''; + /** + * + * @type {Array<LayerBase>} + */ + this.leftLayers = []; + /** + * + * @type {Array<LayerBase>} + */ + this.rightLayers = []; + this._percentRight = 50; + this.offset = null; + this._map = map; + this.$mapElement = $(map.getTargetElement()); + this.$mapElement.append("<div class=\"layer-swiper\">" + sliderContent + "</div>"); + this.$swiper = this.$mapElement.find('.layer-swiper'); + this.percentRight = this.percentRight; + this.dragging = false; + this.$mapElement.mouseleave(function () { + _this.dragging = false; + }); + this.$swiper.bind('mousewheel DOMMouseScroll', function (evt) { + evt.preventDefault(); + }); + this.$swiper.mousedown(function (evt) { + _this.dragging = true; + _this.offset = evt.offsetX; + }); + $(window).mouseup(function () { + _this.dragging = false; + }); + this.$mapElement.mousemove(function (evt) { + if (_this.dragging) { + var mapLeft = _this.$mapElement.position().left; + var mapWidth = _this.$mapElement.width(); + _this.percentRight = 100 * (evt.pageX - _this.offset - mapLeft) / mapWidth; + } + }); + } + /** + * + * @param {LayerBase|*} lyr - layer to be added to left side + */ + LayerSwipe.prototype.addLeftLayer = function (lyr) { + var _this = this; + if (this.leftLayers.indexOf(lyr) != -1) { + return; + } + lyr.olLayer.on('precompose', function (event) { + var ctx = event['context']; + var width = ctx.canvas.width * (_this.percentRight / 100); + ctx.save(); + ctx.beginPath(); + ctx.rect(0, 0, width, ctx.canvas.height); + ctx.clip(); + }); + lyr.olLayer.on('postcompose', function (event) { + var ctx = event['context']; + ctx.restore(); + }); + this.leftLayers.push(lyr); + }; + /** + * + * @param {LayerBase|*} lyr - layer to be added to right side + */ + LayerSwipe.prototype.addRightLayer = function (lyr) { + var _this = this; + if (this.rightLayers.indexOf(lyr) != -1) { + return; + } + lyr.olLayer.on('precompose', function (event) { + var ctx = event['context']; + var width = ctx.canvas.width * (_this.percentRight / 100); + ctx.save(); + ctx.beginPath(); + ctx.rect(width, 0, ctx.canvas.width - width, ctx.canvas.height); + ctx.clip(); + }); + lyr.olLayer.on('postcompose', function (event) { + var ctx = event['context']; + ctx.restore(); + }); + this.rightLayers.push(lyr); + }; + Object.defineProperty(LayerSwipe.prototype, "percentRight", { + get: function () { + return this._percentRight; + }, + set: function (percent) { + var maxed = this.$swiper.position().left + this.$swiper.width() > this.$mapElement.width(); + if (percent < 0) { + return; + } + else if (maxed && percent > this.percentRight) { + return; + } + this._percentRight = percent; + this.$swiper.css('left', this._percentRight.toFixed(2) + "%"); + this._map.render(); + }, + enumerable: true, + configurable: true + }); + return LayerSwipe; + }()); + nm.LayerSwipe = LayerSwipe; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.default = LayerSwipe; + + +/***/ }, +/* 15 */ +/***/ function(module, exports, __webpack_require__) { + + "use strict"; + var __extends = (this && this.__extends) || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + /** + * Created by gavorhes on 12/7/2015. + */ + var LayerBase_1 = __webpack_require__(16); + var esriToOl = __webpack_require__(18); + var mapPopup_1 = __webpack_require__(12); + var provide_1 = __webpack_require__(4); + var custom_ol_1 = __webpack_require__(5); + var nm = provide_1.default('layers'); + var $ = __webpack_require__(3); + /** + * esri mapserver layer + * @augments LayerBase + */ + var LayerEsriMapServer = (function (_super) { + __extends(LayerEsriMapServer, _super); + /** + * The base layer for all others + * @param {string} url - resource url + * @param {object} [options] - config + * @param {string} [options.id] - layer id + * @param {string} [options.name=Unnamed Layer] - layer name + * @param {number} [options.opacity=1] - opacity + * @param {boolean} [options.visible=true] - default visible + * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28 + * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28 + * @param {object} [options.params={}] the get parameters to include to retrieve the layer + * @param {number} [options.zIndex=0] the z index for the layer + * @param {function} [options.loadCallback] function to call on load, context this is the layer object + * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed + * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility + * @param {boolean} [options.legendContent] additional content to add to the legend + * @param {boolean} [options.addPopup=false] if a popup should be added + * @param {undefined|Array<number>} [options.showLayers=undefined] if a popup should be added + */ + function LayerEsriMapServer(url, options) { + if (options === void 0) { options = {}; } + _super.call(this, url, options); + this._source = new custom_ol_1.ol.source.TileArcGISRest({ + url: this.url == '' ? undefined : this.url, + params: typeof options.showLayers == 'undefined' ? undefined : { layers: 'show:' + options.showLayers.join(',') } + }); + this._olLayer = new custom_ol_1.ol.layer.Tile({ + source: this._source, + visible: this.visible, + opacity: this.opacity, + minResolution: this._minResolution, + maxResolution: this._maxResolution, + zIndex: this._zIndex + }); + options.addPopup = typeof options.addPopup == 'boolean' ? options.addPopup : false; + this._esriFormat = new custom_ol_1.ol.format.EsriJSON(); + this._popupRequest = null; + this.addLegendContent(); + if (options.addPopup) { + mapPopup_1.default.addMapServicePopup(this); + } + } + /** + * add additional content to the legend + * @param {string} [additionalContent=''] additional content for legend + */ + LayerEsriMapServer.prototype.addLegendContent = function (additionalContent) { + var _this = this; + var urlCopy = this.url; + if (urlCopy[urlCopy.length - 1] !== '/') { + urlCopy += '/'; + } + urlCopy += 'legend?f=pjson&callback=?'; + $.get(urlCopy, {}, function (d) { + var newHtml = esriToOl.makeMapServiceLegend(d); + _super.prototype.addLegendContent.call(_this, newHtml); + }, 'json'); + }; + LayerEsriMapServer.prototype.getPopupInfo = function (queryParams) { + if (!this.visible) { + return; + } + var urlCopy = this.url; + if (urlCopy[urlCopy.length - 1] != '/') { + urlCopy += '/'; + } + urlCopy += 'identify?callback=?'; + var _this = this; + if (this._popupRequest != null) { + this._popupRequest.abort(); + } + this._popupRequest = $.get(urlCopy, queryParams, function (d) { + for (var _i = 0, _a = d['results']; _i < _a.length; _i++) { + var r = _a[_i]; + var popupHtml = '<table class="esri-popup-table">'; + for (var a in r['attributes']) { + if (r['attributes'].hasOwnProperty(a)) { + var attrVal = r['attributes'][a]; + if (attrVal == null || attrVal.toString().toLowerCase() == 'null') { + continue; + } + var attr = a; + if (attr.length > 14) { + attr = attr.slice(0, 11) + '...'; + } + popupHtml += "<tr><td>" + attr + "</td><td>" + attrVal + "</td></tr>"; + } + } + popupHtml += '</table>'; + mapPopup_1.default.addMapServicePopupContent(_this._esriFormat.readFeature(r), _this, popupHtml, r['layerName']); + } + }, 'json').always(function () { + _this._popupRequest = null; + }); + }; + Object.defineProperty(LayerEsriMapServer.prototype, "source", { + /** + * + * @returns {ol.source.TileArcGISRest} the vector source + */ + get: function () { + return _super.prototype.getSource.call(this); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(LayerEsriMapServer.prototype, "olLayer", { + /** + * + * @returns the ol layer + */ + get: function () { + return _super.prototype.getOlLayer.call(this); + }, + enumerable: true, + configurable: true + }); + return LayerEsriMapServer; + }(LayerBase_1.LayerBase)); + exports.LayerEsriMapServer = LayerEsriMapServer; + nm.LayerEsriMapServer = LayerEsriMapServer; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.default = LayerEsriMapServer; + + +/***/ }, +/* 16 */ +/***/ function(module, exports, __webpack_require__) { + + "use strict"; + var zoomResolutionConvert = __webpack_require__(17); + var provide_1 = __webpack_require__(4); + var makeGuid_1 = __webpack_require__(11); + var nm = provide_1.default('layers'); + var $ = __webpack_require__(3); + /** + * The base layer class + * @abstract + */ + var LayerBase = (function () { + /** + * The base layer for all others + * @param {string} url - url for source + * @param {object} options - config + * @param {string} [options.id=makeGuid()] - layer id + * @param {string} [options.name=Unnamed Layer] - layer name + * @param {number} [options.opacity=1] - opacity + * @param {boolean} [options.visible=true] - default visible + * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28 + * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28 + * @param {object} [options.params={}] - the get parameters to include to retrieve the layer + * @param {number} [options.zIndex=0] - the z index for the layer + * @param {function} [options.loadCallback] - function to call on load, context this is the layer object + * @param {boolean} [options.legendCollapse=false] - if the legend item should be initially collapsed + * @param {boolean} [options.legendCheckbox=true] - if the legend item should have a checkbox for visibility + * @param {boolean} [options.legendContent=undefined] - additional content to add to the legend + */ + function LayerBase(url, options) { + if (options === void 0) { options = {}; } + options = options || {}; + if (typeof url !== 'string') { + throw 'Invalid URL'; + } + this._url = url; + this._params = typeof options.params == 'object' ? options.params : {}; + this._legendCollapse = typeof options.legendCollapse == 'boolean' ? options.legendCollapse : false; + this._legendCheckbox = typeof options.legendCheckbox == 'boolean' ? options.legendCheckbox : true; + this.id = options.id || makeGuid_1.default(); + this._name = options.name || 'Unnamed Layer'; + this.animate = false; + this._opacity = typeof options.opacity == 'number' ? options.opacity : 1; + if (this._opacity > 1) { + this._opacity = 1; + } + else if (this._opacity < 0) { + this._opacity = 0; + } + this._visible = typeof options.visible === 'boolean' ? options.visible : true; + this._source = undefined; + /** + * + * @protected + */ + this._olLayer = undefined; + this._loaded = false; + this._maxResolution = zoomResolutionConvert.zoomToResolution(options.minZoom); + if (typeof this._maxResolution !== 'undefined') { + this._maxResolution += 0.00001; + } + this._minResolution = zoomResolutionConvert.zoomToResolution(options.maxZoom); + this._minZoom = typeof options.minZoom == 'number' ? options.minZoom : undefined; + this._maxZoom = typeof options.maxZoom == 'number' ? options.maxZoom : undefined; + this._zIndex = typeof options.zIndex == 'number' ? options.zIndex : 0; + this.loadCallback = typeof options.loadCallback == 'function' ? options.loadCallback : function () { + }; + this._legendContent = ''; + if (this._legendCheckbox) { + this._legendContent += ("<input type=\"checkbox\" " + (this.visible ? 'checked' : '') + " ") + + ("class=\"legend-check\" id=\"" + this.id + "-legend-layer-check\"><span></span>"); + this._legendContent += "<label for=\"" + this.id + "-legend-layer-check\" class=\"legend-layer-name\">" + this.name + "</label>"; + } + else { + this._legendContent += "<label class=\"legend-layer-name\">" + this.name + "</label>"; + } + this._$legendDiv = null; + this._applyCollapseCalled = false; + this._addLegendContent(typeof options.legendContent === 'string' ? options.legendContent : undefined); + } + /** + * base load function, sets _loaded = true if it is not already + * @protected + * @returns {boolean} if already loaded + */ + LayerBase.prototype._load = function () { + if (this.loaded == true) { + return true; + } + else { + this._loaded = true; + return false; + } + }; + /** + * Get the legend html, be sure to only add to the DOM once + * @returns {string} html for layer wrapped in a div + */ + LayerBase.prototype.getLegendDiv = function () { + return "<div class=\"legend-layer-div\" id=\"" + this.id + "-legend-layer-div\">" + this._legendContent + "</div>"; + }; + /** + * + * @param {string|undefined} additionalContent - additional content to add to legend + * @private + */ + LayerBase.prototype._addLegendContent = function (additionalContent) { + additionalContent = typeof additionalContent == 'string' ? additionalContent : ''; + var addCollapse = additionalContent.indexOf('<ul>') > -1; + if (addCollapse) { + additionalContent = '<span class="legend-items-expander" title="Expand/Collapse">▼</span>' + additionalContent; + } + this._legendContent += additionalContent; + this._$legendDiv = $("#" + this.id + "-legend-layer-div"); + if (this._$legendDiv.length > 0) { + this._$legendDiv.append(additionalContent); + this.applyCollapse(); + } + }; + /** + * add additional content to the legend + * @param {string} [additionalContent=] - additonal content to add + */ + LayerBase.prototype.addLegendContent = function (additionalContent) { + this._addLegendContent(additionalContent); + }; + LayerBase.prototype.applyCollapse = function () { + if (this._applyCollapseCalled) { + console.log('collapse already applied'); + return undefined; + } + this._$legendDiv = $("#" + this.id + "-legend-layer-div"); + if (this._$legendDiv.length > 0) { + var $expander = this._$legendDiv.find('.legend-items-expander'); + if ($expander.length > 0) { + this._applyCollapseCalled = true; + $expander.click(function () { + var $this = $(this); + $this.siblings('ul').slideToggle(); + if ($this.hasClass('legend-layer-group-collapsed')) { + $this.removeClass('legend-layer-group-collapsed'); + $this.html('▼'); + } + else { + $this.addClass('legend-layer-group-collapsed'); + $this.html('▶'); + } + }); + if (this._legendCollapse) { + $expander.trigger('click'); + } + } + } + }; + /** + * trick to refresh the layer + */ + LayerBase.prototype.refresh = function () { + if (this.source) { + this.source.refresh(); + } + }; + Object.defineProperty(LayerBase.prototype, "legendContent", { + /** + * get the legend content + * @type {string} + */ + get: function () { + return this._legendContent; + }, + /** + * set the legend content directly + * @param {string} newVal - new content + * @protected + */ + set: function (newVal) { + this._legendContent = newVal; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(LayerBase.prototype, "params", { + /** + * get the map get params + * @type {object} + */ + get: function () { + return this._params; + }, + /** + * set the map get params + * @param {object} newParams - new get params + * @protected + */ + set: function (newParams) { + this._params = newParams; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(LayerBase.prototype, "minResolution", { + /** + * get the minimum resolution + * @type {number|*} + */ + get: function () { + return this._minResolution; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(LayerBase.prototype, "maxResolution", { + /** + * get the maximum resolution + * @type {number|*} + */ + get: function () { + return this._maxResolution; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(LayerBase.prototype, "minZoom", { + /** + * get min zoom + * @type {number|*} + */ + get: function () { + return this._minZoom; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(LayerBase.prototype, "maxZoom", { + /** + * get max zoom + * @type {number|*} + */ + get: function () { + return this._maxZoom; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(LayerBase.prototype, "url", { + /** + * get the url + * @type {string} + */ + get: function () { + return this._url; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(LayerBase.prototype, "visible", { + /** + * Get the layer visibility + * @type {boolean} + */ + get: function () { + return this._visible; + }, + /** + * set the visibility + * @param visibility + */ + set: function (visibility) { + this.setVisible(visibility); + }, + enumerable: true, + configurable: true + }); + LayerBase.prototype.setVisible = function (visibility) { + this._visible = visibility; + if (this.olLayer) { + this.olLayer.setVisible(this._visible); + if (visibility && !this._loaded) { + this._load(); + } + } + }; + Object.defineProperty(LayerBase.prototype, "opacity", { + /** + * Get the layer opacity + * @type {number} + */ + get: function () { + return this._opacity; + }, + /** + * Set the layer opacity + * @param {number} opacity - layer opacity + */ + set: function (opacity) { + this._opacity = opacity; + if (this.olLayer) { + this.olLayer.setOpacity(this._opacity); + } + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(LayerBase.prototype, "name", { + /** + * Get the layer name + * @type {string} + */ + get: function () { + return this._name; + }, + /** + * set the layer name + * @param {string} newName - the new name + */ + set: function (newName) { + this._name = newName; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(LayerBase.prototype, "loaded", { + /** + * Check if the layer is loaded + * @type {boolean} + */ + get: function () { + return this._loaded; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(LayerBase.prototype, "source", { + /** + * get the layer source + * @type {*} + */ + get: function () { + return this.getSource(); + }, + enumerable: true, + configurable: true + }); + LayerBase.prototype.getSource = function () { + return this._source; + }; + Object.defineProperty(LayerBase.prototype, "zIndex", { + /** + * get the z index + */ + get: function () { + return this._zIndex; + }, + /** + * set the z index + */ + set: function (newZ) { + this._zIndex = newZ; + }, + enumerable: true, + configurable: true + }); + LayerBase.prototype.setZIndex = function (newZ) { + }; + Object.defineProperty(LayerBase.prototype, "olLayer", { + /** + * the the ol layer + */ + get: function () { + return this.getOlLayer(); + }, + enumerable: true, + configurable: true + }); + LayerBase.prototype.getOlLayer = function () { + return this._olLayer; + }; + return LayerBase; + }()); + exports.LayerBase = LayerBase; + nm.LayerBase = LayerBase; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.default = LayerBase; + + +/***/ }, +/* 17 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Created by gavorhes on 12/14/2015. + */ + "use strict"; + var provide_1 = __webpack_require__(4); + var nm = provide_1.default('olHelpers.zoomResolutionConvert'); + var _zoomResLookup = [ + 156543.03392804097, + 78271.51696402048, + 39135.75848201024, + 19567.87924100512, + 9783.93962050256, + 4891.96981025128, + 2445.98490512564, + 1222.99245256282, + 611.49622628141, + 305.748113140705, + 152.8740565703525, + 76.43702828517625, + 38.21851414258813, + 19.109257071294063, + 9.554628535647032, + 4.777314267823516, + 2.388657133911758, + 1.194328566955879, + 0.5971642834779395, + 0.29858214173896974, + 0.14929107086948487, + 0.07464553543474244, + 0.03732276771737122, + 0.01866138385868561, + 0.009330691929342804, + 0.004665345964671402, + 0.002332672982335701, + 0.0011663364911678506, + 0.0005831682455839253 //28 + ]; + /** + * Get the resolution given the zoom level + * @param {number} zoomLevel - the zoom level + * @returns {number|*} the map resolution + */ + function zoomToResolution(zoomLevel) { + "use strict"; + if (typeof zoomLevel == 'number') { + if (zoomLevel % 1 === 0 && zoomLevel >= 0 && zoomLevel <= 28) { + return _zoomResLookup[zoomLevel]; + } + else { + console.log("invalid zoom level provided: " + zoomLevel); + return undefined; + } + } + else { + return undefined; + } + } + exports.zoomToResolution = zoomToResolution; + nm.zoomToResolution = zoomToResolution; + /** + * Get resolution from the zoom level + * @param {number} resolution - the resolution + * @returns {number|*} the zoom level + */ + function resolutionToZoom(resolution) { + for (var i = 0; i < _zoomResLookup.length; i++) { + if (resolution >= _zoomResLookup[i]) { + return i; + } + } + return 0; + } + exports.resolutionToZoom = resolutionToZoom; + nm.resolutionToZoom = resolutionToZoom; + + +/***/ }, +/* 18 */ +/***/ function(module, exports, __webpack_require__) { + + "use strict"; + var __extends = (this && this.__extends) || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + /** + * Created by gavorhes on 1/4/2016. + */ + var provide_1 = __webpack_require__(4); + var custom_ol_1 = __webpack_require__(5); + var nm = provide_1.default('olHelpers.esriToOlStyle'); + /** + * This callback is displayed as part of the Requester class. + * @callback styleFunc + * @param {ol.Feature} feat - openlayers feature + * @param {number} resolution - map resolution + */ + /** + * + * @param {Array<number>} colorArray - input color array + * @param {number} opacity - the opacity 0 to 1 + * @returns {string} rgba string + * @private + */ + function _colorArrayToRgba(colorArray, opacity) { + "use strict"; + return "rgba(" + colorArray[0] + "," + colorArray[1] + "," + colorArray[2] + "," + opacity + ")"; + } + /** + * escape html charcters + * @param {string} str - input string + * @returns {string} escaped string + */ + function htmlEscape(str) { + return String(str) + .replace(/&/g, '&') + .replace(/"/g, '"') + .replace(/'/g, ''') + .replace(/</g, '<') + .replace(/>/g, '>'); + } + nm.htmlEscape = htmlEscape; + var CommonSymbol = (function () { + /** + * + * @param symbolObj + * @param {number} opacity + */ + function CommonSymbol(symbolObj, opacity) { + this.symbolObj = symbolObj; + this.opacity = opacity; + this.olStyle = undefined; + this.legendHtml = ''; + } + return CommonSymbol; + }()); + var PointSymbol = (function (_super) { + __extends(PointSymbol, _super); + function PointSymbol(symbolObj, opacity) { + _super.call(this, symbolObj, opacity); + switch (this.symbolObj.type) { + case 'esriSMS': + var innerColor = _colorArrayToRgba(this.symbolObj.color, this.opacity); + var outerColor = _colorArrayToRgba(this.symbolObj.outline.color, this.opacity); + var outlineWidth = this.symbolObj.outline.width; + var radius = this.symbolObj.size; + this.olStyle = new custom_ol_1.ol.style.Style({ + image: new custom_ol_1.ol.style.Circle({ + radius: radius, + fill: new custom_ol_1.ol.style.Fill({ + color: innerColor + }), + stroke: new custom_ol_1.ol.style.Stroke({ color: outerColor, width: outlineWidth }) + }) + }); + this.legendHtml = "<span class=\"legend-layer-icon\" style=\"color: " + innerColor + "\">●</span>"; + break; + case 'esriPMS': + this.olStyle = new custom_ol_1.ol.style.Style({ + image: new custom_ol_1.ol.style.Icon({ src: "data:image/png;base64," + this.symbolObj['imageData'] }) + }); + this.legendHtml = "<img class=\"legend-layer-icon\" height=\"17\" src=\"data:image/png;base64," + this.symbolObj['imageData'] + "\">"; + break; + default: + console.log(this.symbolObj); + alert('Point symbol does not handle symbol type: ' + this.symbolObj['type']); + } + } + return PointSymbol; + }(CommonSymbol)); + var LineSymbol = (function (_super) { + __extends(LineSymbol, _super); + function LineSymbol(symbolObj, opacity) { + _super.call(this, symbolObj, opacity); + switch (this.symbolObj.type) { + case 'esriSLS': + var innerColor = _colorArrayToRgba(this.symbolObj.color, this.opacity); + var lineWidth = this.symbolObj.width; + this.olStyle = new custom_ol_1.ol.style.Style({ + stroke: new custom_ol_1.ol.style.Stroke({ + color: innerColor, + //lineDash: [4], + width: lineWidth + }) + }); + this.legendHtml = "<span class=\"legend-layer-icon\" "; + this.legendHtml += "style=\""; + this.legendHtml += "background-color: " + innerColor + ";"; + this.legendHtml += "width: 40px;"; + this.legendHtml += "height: 4px;"; + this.legendHtml += "position: relative;"; + this.legendHtml += "display: inline-block;"; + this.legendHtml += "top: -1px;"; + this.legendHtml += "\"></span>"; + break; + default: + console.log(this.symbolObj); + alert('Line symbol does not handle symbol type: ' + this.symbolObj['type']); + } + } + return LineSymbol; + }(CommonSymbol)); + var PolygonSymbol = (function (_super) { + __extends(PolygonSymbol, _super); + function PolygonSymbol(symbolObj, opacity) { + _super.call(this, symbolObj, opacity); + switch (this.symbolObj['type']) { + case 'esriSFS': + var innerColor = _colorArrayToRgba(this.symbolObj.color, this.opacity); + var outerColor = _colorArrayToRgba(this.symbolObj.outline.color, this.opacity); + var outlineWidth = this.symbolObj.outline.width; + this.olStyle = new custom_ol_1.ol.style.Style({ + stroke: new custom_ol_1.ol.style.Stroke({ + color: outerColor, + //lineDash: [4], + width: outlineWidth + }), + fill: new custom_ol_1.ol.style.Fill({ + color: innerColor + }) + }); + this.legendHtml = "<span class=\"legend-layer-icon\" "; + this.legendHtml += "style=\""; + this.legendHtml += "background-color: " + innerColor + ";"; + this.legendHtml += "border: solid " + outerColor + " 1px;"; + this.legendHtml += "width: 40px;"; + this.legendHtml += "height: 9px;"; + this.legendHtml += "position: relative;"; + this.legendHtml += "display: inline-block;"; + this.legendHtml += "top: 2px;"; + this.legendHtml += "\"></span>"; + break; + default: + console.log(this.symbolObj); + alert('Polygon symbol does handle symbol type: ' + this.symbolObj['type']); + } + } + return PolygonSymbol; + }(CommonSymbol)); + var SymbolGenerator = (function () { + function SymbolGenerator(esriResponse) { + this.opacity = (100 - (esriResponse['drawingInfo']['transparency'] || 0)) / 100; + this.renderer = esriResponse.drawingInfo.renderer; + this.olStyle = undefined; + this.legendHtml = ''; + } + return SymbolGenerator; + }()); + var SingleSymbol = (function (_super) { + __extends(SingleSymbol, _super); + /** + * + * @param {object} esriResponse - layer info + * @param {Constructor|*} SymbolClass - the symbol class to use + */ + function SingleSymbol(esriResponse, SymbolClass) { + _super.call(this, esriResponse); + this.symbol = this.renderer.symbol; + var symbolObj = new SymbolClass(this.symbol, this.opacity); + this.olStyle = symbolObj.olStyle; + this.legendHtml = symbolObj.legendHtml; + } + return SingleSymbol; + }(SymbolGenerator)); + var UniqueValueSymbol = (function (_super) { + __extends(UniqueValueSymbol, _super); + /** + * + * @param {object} esriResponse - layer info + * @param {Constructor|*} SymbolClass - the Symbol class definition + */ + function UniqueValueSymbol(esriResponse, SymbolClass) { + var _this = this; + _super.call(this, esriResponse); + this.uniqueValueInfos = this.renderer['uniqueValueInfos']; + this.propertyName = this.renderer['field1']; + this.defaultSymbol = this.renderer['defaultSymbol']; + if (this.defaultSymbol) { + var symbolObj = new SymbolClass(this.defaultSymbol, this.opacity); + this.defaultStyle = symbolObj.olStyle; + this.defaultLabelHtml = ("<span class=\"legend-layer-subitem\">" + htmlEscape(this.renderer['defaultLabel']) + "</span>") + symbolObj.legendHtml; + } + else { + this.defaultStyle = undefined; + this.defaultLabelHtml = 'other'; + } + this.valueArray = []; + this.labelArray = []; + this.legendArray = []; + this.propertyStyleLookup = {}; + for (var _i = 0, _a = this.uniqueValueInfos; _i < _a.length; _i++) { + var uniqueVal = _a[_i]; + this.labelArray.push(uniqueVal['label']); + this.valueArray.push(uniqueVal['value']); + var uniqueSym = new SymbolClass(uniqueVal.symbol, this.opacity); + this.legendArray.push(("<span class=\"legend-layer-subitem\">" + htmlEscape(uniqueVal['label']) + "</span>") + uniqueSym.legendHtml); + this.propertyStyleLookup[uniqueVal['value']] = uniqueSym.olStyle; + } + this.olStyle = function (feature) { + var checkProperties = feature.getProperties(); + var checkProperty = checkProperties[_this.propertyName]; + var returnValue; + if (_this.propertyStyleLookup[checkProperty] !== undefined) { + returnValue = [_this.propertyStyleLookup[checkProperty]]; + } + else { + returnValue = [_this.defaultStyle]; + } + return returnValue; + }; + if (this.defaultLabelHtml !== null) { + this.legendArray.push(this.defaultLabelHtml); + } + this.legendHtml = '<ul>'; + for (var _b = 0, _c = this.legendArray; _b < _c.length; _b++) { + var h = _c[_b]; + this.legendHtml += "<li>" + h + "</li>"; + } + this.legendHtml += '</ul>'; + } + return UniqueValueSymbol; + }(SymbolGenerator)); + /** + * style and legend object + * @typedef {object} styleAndLegend + * @property {styleFunc} style - style function + * @property {string} legend - legend content + */ + /** + * + * @param {object} esriResponse - layer info + * @returns {styleAndLegend} style and legend object + */ + function makeFeatureServiceLegendAndSymbol(esriResponse) { + "use strict"; + var renderer = esriResponse.drawingInfo.renderer; + var symbolLegendOut = null; + switch (renderer.type) { + case 'simple': + switch (esriResponse.geometryType) { + case 'esriGeometryPoint': + symbolLegendOut = new SingleSymbol(esriResponse, PointSymbol); + break; + case 'esriGeometryPolyline': + symbolLegendOut = new SingleSymbol(esriResponse, LineSymbol); + break; + case 'esriGeometryPolygon': + symbolLegendOut = new SingleSymbol(esriResponse, PolygonSymbol); + break; + default: + console.log(esriResponse); + alert(esriResponse.geometryType + ' not handled'); + } + break; + case 'uniqueValue': + switch (esriResponse.geometryType) { + case 'esriGeometryPoint': + symbolLegendOut = new UniqueValueSymbol(esriResponse, PointSymbol); + break; + case 'esriGeometryPolyline': + symbolLegendOut = new UniqueValueSymbol(esriResponse, LineSymbol); + break; + case 'esriGeometryPolygon': + symbolLegendOut = new UniqueValueSymbol(esriResponse, PolygonSymbol); + break; + default: + console.log(esriResponse); + alert(esriResponse['geometryType'] + ' not handled'); + } + break; + default: + alert('not handled renderer type: ' + renderer['type']); + } + if (symbolLegendOut == null) { + return { style: undefined, legend: '' }; + } + else { + return { style: symbolLegendOut.olStyle, legend: symbolLegendOut.legendHtml }; + } + } + exports.makeFeatureServiceLegendAndSymbol = makeFeatureServiceLegendAndSymbol; + nm.makeFeatureServiceLegendAndSymbol = makeFeatureServiceLegendAndSymbol; + /** + * + * @param {object} lyrObject - the layer as defined in the response + * @param {boolean} [skipLayerNameAndExpander=false] use only icons + * @returns {string} legend html + */ + function mapServiceLegendItem(lyrObject, skipLayerNameAndExpander) { + if (skipLayerNameAndExpander === void 0) { skipLayerNameAndExpander = false; } + skipLayerNameAndExpander = typeof skipLayerNameAndExpander == 'boolean' ? skipLayerNameAndExpander : false; + var layerName = lyrObject['layerName']; + var legendItems = lyrObject['legend']; + var legendHtml = ''; + if (!skipLayerNameAndExpander) { + legendHtml += "<span class=\"legend-layer-subitem\">" + layerName + "</span>"; + } + if (legendItems.length == 1) { + legendHtml = "<img class=\"legend-layer-icon\" height=\"17\" src=\"data:image/png;base64," + legendItems[0]['imageData'] + "\">"; + } + else { + if (!skipLayerNameAndExpander) { + legendHtml += '<span class="legend-items-expander" title="Expand/Collapse">▼</span>'; + } + legendHtml += '<ul>'; + for (var i = 0; i < legendItems.length; i++) { + legendHtml += "<li>"; + legendHtml += "<span class=\"legend-layer-subitem\">" + htmlEscape(legendItems[i]['label']) + "</span>"; + legendHtml += "<img class=\"legend-layer-icon\" height=\"17\" src=\"data:image/png;base64," + legendItems[i]['imageData'] + "\">"; + legendHtml += "</li>"; + } + legendHtml += '</ul>'; + } + if (!skipLayerNameAndExpander) { + legendHtml = ("<span class=\"legend-layer-subitem\">" + layerName + "</span>") + legendHtml; + } + return legendHtml; + } + /** + * make map service legent + * @param {object} esriResponse - layer info + * @returns {string} legend content + */ + function makeMapServiceLegend(esriResponse) { + "use strict"; + var newLegendHtml = ''; + var layers = esriResponse['layers']; + if (layers.length == 1) { + newLegendHtml += mapServiceLegendItem(layers[0], true); + } + else { + newLegendHtml += '<ul>'; + for (var i = 0; i < layers.length; i++) { + newLegendHtml += '<li>' + mapServiceLegendItem(layers[i]) + '</li>'; + } + newLegendHtml += '</ul>'; + } + return newLegendHtml; + } + exports.makeMapServiceLegend = makeMapServiceLegend; + nm.makeMapServiceLegend = makeMapServiceLegend; + + +/***/ } +/******/ ]); +//# sourceMappingURL=compare-test.js.map \ No newline at end of file diff --git a/test-html/js/compare-test.js.map b/test-html/js/compare-test.js.map new file mode 100644 index 0000000000000000000000000000000000000000..7587d2f627f892da77f9b79b4b708545914570a6 --- /dev/null +++ b/test-html/js/compare-test.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///webpack/bootstrap ef760a4c28bc3d5b9fb4?77b8","webpack:///./src-ts/_test/compare-test.ts","webpack:///./src-ts/olHelpers/quickMap.ts","webpack:///./src-ts/olHelpers/quickMapBase.ts","webpack:///./~/jquery/dist/jquery.js","webpack:///./src-ts/util/provide.ts","webpack:///./~/custom-ol/lib/index.js","webpack:///./~/custom-ol/ol/ol-build.js","webpack:///./src-ts/olHelpers/mapMove.ts","webpack:///./src-ts/olHelpers/mapMoveCls.ts","webpack:///./src-ts/olHelpers/mapInteractionBase.ts","webpack:///./src-ts/util/checkDefined.ts","webpack:///./src-ts/util/makeGuid.ts","webpack:///./src-ts/olHelpers/mapPopup.ts","webpack:///./src-ts/olHelpers/mapPopupCls.ts","webpack:///./src-ts/olHelpers/layerSwipe.ts","webpack:///./src-ts/layers/LayerEsriMapServer.ts","webpack:///./src-ts/layers/LayerBase.ts","webpack:///./src-ts/olHelpers/zoomResolutionConvert.ts","webpack:///./src-ts/olHelpers/esriToOlStyle.ts"],"names":[],"mappings":"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A;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gCAA+B;AAC/B;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,SAAQ,YAAY;;AAEpB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,OAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF,qBAAoB;;AAEpB;AACA;AACA,GAAE;;AAEF;;AAEA;AACA;AACA,GAAE;;AAEF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kDAAiD;AACjD;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF,iCAAgC;AAChC;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA,WAAU,YAAY;AACtB;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA,UAAS,SAAS;AAClB;AACA;;AAEA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAS,YAAY;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAU,YAAY;AACtB;;AAEA;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,GAAE;;AAEF;;AAEA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAC;;AAED;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS,SAAS;AAClB;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,2BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA,iBAAgB,IAAI;;AAEpB;AACA;;AAEA;AACA;;AAEA;AACA,yCAAwC,IAAI;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD,UAAS;;AAET;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA,OAAM;;AAEN;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,MAAK;AACL;AACA;;AAEA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA,OAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAM;AACN,OAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,cAAa,yBAAyB;AACtC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;;AAEA;AACA;AACA,GAAE;AACF;AACA,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,QAAQ;AACnB,YAAW,QAAQ;AACnB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;AACF;;AAEA;AACA;AACA,YAAW,gBAAgB;AAC3B,cAAa,uBAAuB;AACpC;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,YAAW,eAAe;AAC1B,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,eAAe;AAC1B,cAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,YAAW,UAAU;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,YAAW,cAAc;AACzB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;AACA,IAAG;AACH;AACA,iCAAgC,MAAM;AACtC;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;;AAEA,gBAAe;;AAEf,UAAS;;AAET;AACA,SAAQ,iCAAiC;AACzC,SAAQ,oBAAoB;AAC5B,SAAQ,sCAAsC;AAC9C,SAAQ;AACR,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;;AAEA;AACA;AACA;AACA,iBAAgB,aAAa,EAAE;AAC/B;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,6DAA4D;;AAE5D;AACA;AACA;AACA,0CAAyC;;AAEzC;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,QAAO;AACP;AACA;AACA;AACA;AACA,8DAA6D;;AAE7D;AACA;AACA;AACA,2CAA0C;;AAE1C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,iEAAgE;;AAEhE;AACA;AACA;AACA,8CAA6C;;AAE7C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA,kEAAiE,UAAU;AAC3E,uCAAsC,2BAA2B;AACjE;AACA,iCAAgC,MAAM;AACtC;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA,WAAU,YAAY;AACtB;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,WAAU,YAAY;AACtB;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,WAAU,UAAU;AACpB;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,WAAU,cAAc;AACxB;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;;AAEA;AACA,aAAY,uEAAuE;AACnF;AACA;AACA,aAAY,4BAA4B;AACxC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAQ,SAAS;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA,4DAA2D;;AAE3D;AACA;AACA,qFAAoF;;AAEpF;AACA;;AAEA;AACA;AACA,QAAO;AACP;AACA;;AAEA,oCAAmC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA,SAAQ,SAAS;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAAQ,SAAS;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA,GAAE;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH,SAAQ,SAAS;AACjB;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAuC,iDAAiD;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kDAAiD;AACjD,WAAU,wCAAwC;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,gBAAgB;AAC3B;AACA,YAAW,QAAQ;AACnB,YAAW,MAAM;AACjB,YAAW,MAAM;AACjB;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;AACA,GAAE;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;AACA,GAAE;AACF;;AAEA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;;AAEA;;AAEA,EAAC;;;;AAID;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA,SAAQ,GAAG;AACX;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;;AAEA;;;;AAIA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAE;AACF;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA,KAAI;AACJ;;AAEA,eAAc,SAAS;AACvB;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;AAGD;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,KAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,SAAQ;AACR;AACA;AACA;AACA;;AAEA;;AAEA;AACA,MAAK;AACL;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;;AAEA;AACA;AACA,KAAI;AACJ;AACA;;AAEA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAU,OAAO;AACjB;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,UAAS,OAAO;AAChB,0BAAyB,wBAAwB;;AAEjD;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA,2CAA0C;AAC1C,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA;AACA,EAAC;AACD;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAC;AACD;;;;AAIA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAmB;;AAEnB;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAU,cAAc;AACxB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,MAAK;AACL;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAQ;;AAER;AACA;AACA;AACA,QAAO;AACP,OAAM;;AAEN;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAQ;AACR,QAAO;AACP;AACA,OAAM;AACN,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,+CAA8C;AAC9C,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAM;AACN;AACA;AACA;AACA,KAAI;;AAEJ;;AAEA,6CAA4C;AAC5C;AACA;AACA;AACA;AACA,WAAU,YAAY;AACtB;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAC;;;AAGD;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;AACF;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,WAAU,SAAS;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;AAKA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA,GAAE;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,OAAM;AACN;AACA;AACA;;AAEA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;;AAEA,wBAAuB,aAAa;AACpC,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,qBAAoB,SAAS;AAC7B;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA,IAAG;AACH;AACA,EAAC;;;AAGD;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ,IAAG;AACH;AACA,EAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ,GAAE;AACF;AACA;AACA;AACA,IAAG;AACH,GAAE;AACF;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;;AAEA;;;AAGA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA,gBAAe,oBAAoB,EAAE;AACrC,gBAAe,qCAAqC,EAAE;AACtD;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;;;AAIA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA,SAAQ,OAAO;AACf;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,uBAAsB;;AAEtB;AACA;AACA;AACA;AACA;AACA;;AAEA,SAAQ,OAAO;AACf;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;;AAEA;AACA,KAAI;AACJ;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAC;;;AAGD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAE,gBAAgB;AAClB;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAE;AACF;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;;AAEA;AACA;AACA;AACA;AACA;;AAEA,YAAW;;AAEX;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;AACA;;AAEA;AACA;AACA;;AAEA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,4CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;;AAEF;;AAEA;AACA;;AAEA;AACA;AACA;AACA,qDAAoD;AACpD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,0BAAyB;AACzB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,gEAA+D;AAC/D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,WAAU,cAAc;;AAExB;AACA;AACA;AACA;AACA,kBAAiB,mBAAmB;AACpC;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA0B,+BAA+B;AACzD;AACA;AACA;AACA;;AAEA;AACA;AACA,wBAAuB,wDAAwD;AAC/E;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA,cAAa;;AAEb;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,uCAAsC,cAAc;AACpD;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,sCAAqC;AACrC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,uCAAsC;AACtC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,sCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA,EAAC;;;AAGD;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,4CAA2C,OAAO;AAClD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,+BAA8B;;AAE9B;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAE;AACF;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAU,OAAO;AACjB;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,iBAAgB,gBAAgB;AAChC;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,SAAQ,+BAA+B;AACvC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,wCAAuC,OAAO;AAC9C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,yCAAwC,OAAO;AAC/C;AACA;AACA,KAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA,UAAS,qCAAqC;AAC9C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,SAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;;AAEA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;;AAEA,UAAS,8BAA8B;AACvC;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA,8BAA6B;AAC7B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,aAAY,OAAO;AACnB;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;;AAEA,UAAS,WAAW;AACpB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAC;;;AAGD;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,YAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;;;;AAIA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,sCAAqC,UAAU,SAAS,MAAM,aAAa;AAC3E,cAAa,eAAe;AAC5B;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,mCAAkC,2BAA2B,sBAAsB;AACnF,uBAAsB,cAAc;AACpC,iBAAgB,WAAW,YAAY;AACvC,YAAW;AACX;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAA4B,SAAS,QAAQ,QAAQ;AACrD;;AAEA;AACA;AACA,qCAAoC,uBAAuB;AAC3D,oBAAmB,SAAS,SAAS;AACrC;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,GAAE;AACF,EAAC;;;AAGD;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,mBAAkB;AAClB;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;;AAEA,aAAY,+DAA+D;AAC3E;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA,SAAQ,OAAO;;AAEf;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,SAAQ,gBAAgB;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAiB,gBAAgB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,IAAG;;AAEH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA,mBAAkB,gBAAgB;AAClC;AACA,OAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,wBAAuB,4BAA4B;AACnD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA,kBAAiB;;AAEjB;AACA;;AAEA,WAAU,OAAO;AACjB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA,aAAY;AACZ;;AAEA;AACA;AACA;;AAEA,YAAW,SAAS;AACpB;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA,IAAG;AACH;AACA,EAAC;;;AAGD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;;AAEA;;AAEA;AACA;;;;;AAKA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW;;AAEX;AACA;AACA;AACA,SAAQ,QAAQ;AAChB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAQ,gBAAgB;AACxB;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ,IAAG;AACH;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,kDAAiD;AACjD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,KAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,WAAU,iBAAiB;AAC3B;AACA;;AAEA;;AAEA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,4BAA2B;AAC3B;AACA,sBAAqB;AACrB;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,iBAAiB;AAC5B;AACA;;AAEA,8CAA6C;AAC7C;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;;AAEA,SAAQ,iBAAiB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA,UAAS,iBAAiB;AAC1B;AACA;AACA;AACA;AACA,GAAE;;AAEF;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,EAAC;;AAED;AACA,kEAAiE;AACjE;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,qBAAoB,cAAc;AAClC,GAAE;AACF;AACA;AACA;AACA;;AAEA;AACA,kDAAiD;;AAEjD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA;;AAEA,gCAA+B,SAAS;AACxC;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,gCAA+B,SAAS;AACxC;AACA;AACA;AACA;AACA;;AAEA;AACA,oBAAmB,gBAAgB;AACnC;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA,WAAU,kBAAkB;AAC5B,YAAW,kBAAkB;AAC7B,eAAc;AACd,EAAC;AACD;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;;AAEA,SAAQ,mBAAmB;AAC3B;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;;;AAGA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;AAGD;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA,IAAG;AACH;AACA,EAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;AAKD;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA,IAAG;AACH;AACA,EAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;AAKD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,OAAM;AACN;AACA;AACA;;AAEA;AACA,KAAI;AACJ;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAC;;;;;AAKD;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,KAAI;AACJ;AACA;;AAEA,kCAAiC;AACjC;AACA;;AAEA,KAAI;AACJ;;AAEA,KAAI;AACJ;AACA;AACA,MAAK;AACL;;AAEA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA,EAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,SAAS;AACpB;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;AAKD;;;AAGA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA,uCAAsC;AACtC;AACA;AACA;;AAEA;;AAEA,0BAAyB;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,+CAA8C;AAC9C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,4CAA2C;AAC3C;;AAEA;AACA;AACA;AACA;AACA,WAAU,KAAK;AACf;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kDAAiD;AACjD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,sCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA,EAAC;;AAED;;AAEA;AACA;AACA;AACA,IAAG;AACH,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;AAGD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA,EAAC;;;;;AAKD;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,qCAAqC;;AAEpD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;;AAEA,MAAK;AACL;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;;AAEA;;;;AAIA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;;AAEhB;AACA;AACA;AACA;AACA;AACA,iBAAgB;;AAEhB,iDAAgD;AAChD;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,oBAAmB;AACnB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,yDAAwD;AACxD;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAiB;;AAEjB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA,KAAI;;AAEJ;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,OAAM;AACN;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,UAAS;AACT;;AAEA;;AAEA;AACA;;AAEA;AACA,kBAAiB;AACjB,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAkD;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,4BAA2B;;AAE3B;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,mCAAkC;;AAElC;AACA,uBAAsB;AACtB,4BAA2B;;AAE3B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAO;;AAEP;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,uDAAsD;AACtD;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,eAAc,oCAAoC;AAClD;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;;AAEA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,MAAK;AACL;;AAEA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA,EAAC;;AAED;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA,EAAC;;;AAGD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,KAAI;AACJ;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;;AAEA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA,EAAC;;;AAGD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH,GAAE;;AAEF;AACA;AACA;AACA;;AAEA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAc;AACd,OAAM;AACN,OAAM;AACN,IAAG;AACH;AACA,EAAC;;;AAGD;AACA;AACA;AACA,GAAE;AACF;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAE;AACF;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAQ;;AAER;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;;AAEA,oDAAmD;AACnD;AACA;AACA;AACA;AACA,SAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,uBAAuB;AAClC,YAAW,yBAAyB;AACpC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;AAKD;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;AAKD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA,EAAC;;;;;AAKD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,KAAI;AACJ,IAAG;AACH;;AAEA;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;AAKD;AACA;AACA;AACA,GAAE;AACF;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,IAAG;AACH;AACA;AACA;;AAEA;;AAEA;AACA,sDAAqD;AACrD;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA,WAAU,kBAAkB;AAC5B;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAmB;;AAEnB,6DAA4D,eAAe;AAC3E;AACA;;AAEA;AACA;;AAEA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA,EAAC;;AAED;AACA,eAAc,sDA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","file":"compare-test.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap ef760a4c28bc3d5b9fb4\n **/","/**\r\n * Created by gavorhes on 6/1/2016.\r\n */\r\nimport {quickMap} from '../olHelpers/quickMap';\r\nimport LayerSwipe from '../olHelpers/layerSwipe';\r\nimport {LayerEsriMapServer} from '../layers/LayerEsriMapServer';\r\n\r\nlet map = quickMap();\r\n\r\n\r\nlet swiper = new LayerSwipe(map);\r\n\r\n\r\nlet wisDotRegions = new LayerEsriMapServer(\r\n 'http://transportal.cee.wisc.edu/applications/arcgis2/rest/services/MetaManager/Metamanager_regions/MapServer',\r\n {\r\n minZoom: 6,\r\n maxZoom: 12,\r\n name: 'WisDOT Regions'\r\n });\r\n\r\nlet metamanagerSegments = new LayerEsriMapServer(\r\n 'http://transportal.cee.wisc.edu/applications/arcgis2/rest/services/MetaManager/MM_All_Segments/MapServer',\r\n {\r\n minZoom: 7,\r\n visible: true,\r\n name: 'Metamanager Segments'\r\n });\r\n\r\nlet truckSpeed2014 = new LayerEsriMapServer(\r\n 'http://transportal.cee.wisc.edu/applications/arcgis2/rest/services/NPMRDS/compareDynamic/MapServer',\r\n {\r\n minZoom: 7,\r\n visible: true,\r\n name: 'truck2014',\r\n showLayers: [8]\r\n });\r\n\r\nlet truckSpeed2015 = new LayerEsriMapServer(\r\n 'http://transportal.cee.wisc.edu/applications/arcgis2/rest/services/NPMRDS/compareDynamic/MapServer',\r\n {\r\n minZoom: 7,\r\n visible: true,\r\n name: 'truck2015',\r\n showLayers: [9]\r\n });\r\n\r\nmap.addLayer(wisDotRegions.olLayer);\r\nmap.addLayer(truckSpeed2014.olLayer);\r\nmap.addLayer(truckSpeed2015.olLayer);\r\nmap.addLayer(metamanagerSegments.olLayer);\r\n\r\n\r\nswiper.addLeftLayer(wisDotRegions);\r\nswiper.addRightLayer(metamanagerSegments);\r\n\r\nswiper.addLeftLayer(truckSpeed2014);\r\nswiper.addRightLayer(truckSpeed2015);\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/_test/compare-test.ts\n **/","/**\r\n * Created by gavorhes on 12/15/2015.\r\n */\r\n\r\nimport {quickMapOptions, quickMapBase} from './quickMapBase';\r\nimport provide from '../util/provide';\r\nimport mapMove from './mapMove';\r\nimport mapPopup from './mapPopup';\r\nlet nm = provide('olHelpers');\r\nimport {ol} from 'custom-ol'\r\n\r\n/**\r\n * Sets up a map with some default parameters and initializes\r\n * mapMove and mapPopup\r\n *\r\n * @param {object} [options={}] config options\r\n * @param {string} [options.divId=map] map div id\r\n * @param {object} [options.center={}] center config object\r\n * @param {number} [options.center.x=-10018378] center x, web mercator x or lon\r\n * @param {number} [options.center.y=5574910] center y, web mercator y or lat\r\n * @param {number} [options.zoom=7] zoom level\r\n * @param {number} [options.minZoom=undefined] min zoom\r\n * @param {number} [options.maxZoom=undefined] max zoom\r\n * @param {boolean} [options.baseSwitcher=true] if add base map switcher\r\n * @param {boolean} [options.fullScreen=false] if add base map switcher\r\n * @returns the ol map\r\n */\r\nexport function quickMap(options? : quickMapOptions): ol.Map {\r\n let m = quickMapBase(options);\r\n mapMove.init(m);\r\n mapPopup.init(m);\r\n\r\n return m;\r\n}\r\n\r\n\r\nnm.quickMap = quickMap;\r\nexport default quickMap;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/olHelpers/quickMap.ts\n **/","/**\r\n * Created by gavorhes on 12/15/2015.\r\n */\r\n\r\nconst $ = require('jquery');\r\nimport provide from '../util/provide';\r\nimport {ol} from 'custom-ol';\r\nconst nm = provide('olHelpers');\r\n\r\n\r\nexport interface quickMapOptions {\r\n divId?: string;\r\n center?: {x: number, y: number};\r\n zoom?: number;\r\n minZoom?: number;\r\n maxZoom?: number;\r\n baseSwitcher?: boolean;\r\n fullScreen?: boolean;\r\n}\r\n\r\n/**\r\n * Sets up a map with some default parameters and initializes\r\n * mapMove and mapPopup\r\n *\r\n * @param [options={}] config options\r\n * @param [options.divId=map] map div id\r\n * @param [options.center={}] center config object\r\n * @param [options.center.x=-10018378] center x, web mercator x or lon\r\n * @param [options.center.y=5574910] center y, web mercator y or lat\r\n * @param [options.zoom=7] zoom level\r\n * @param [options.minZoom=undefined] min zoom\r\n * @param [options.maxZoom=undefined] max zoom\r\n * @param [options.baseSwitcher=true] if add base map switcher\r\n * @param [options.fullScreen=false] if add base map switcher\r\n * @returns the ol map\r\n */\r\nexport function quickMapBase(options?: quickMapOptions): ol.Map {\r\n options = options || {} as quickMapOptions;\r\n options.divId = options.divId || 'map';\r\n options.center = options.center || {x: -10018378, y: 5574910};\r\n options.zoom = typeof options.zoom == 'number' ? options.zoom : 7;\r\n options.baseSwitcher = typeof options.baseSwitcher == 'boolean' ? options.baseSwitcher : true;\r\n options.fullScreen = typeof options.fullScreen == 'boolean' ? options.fullScreen : false;\r\n\r\n\r\n let $mapDiv = $('#' + options.divId);\r\n $mapDiv.css('position', 'relative');\r\n\r\n let osmLayer = new ol.layer.Tile({source: new ol.source.OSM()});\r\n // let satLayer = new ol.layer.Tile({visible: false, source: new ol.source.MapQuest({layer: 'sat'})});\r\n\r\n let osmCss = \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMAUExURQAAADQ1NDk5OURFREtLS1FHSFlZWGJRVGJiYWdmZWxsbHRmaXBpanN0c3V0dHp5eX5+fIVzd4F3eeV0jud5juZ8k4aHhomHhoyGh5eGj5OVlJiVlZiYl5qZmJydnKOTlaKZmqKdnaOioaqqqKuzsbOvrrSysLa3tbW4uLm6ub27ub+/vbGXwbCZwbCgxLKlxrOqyLStybO3yrSxyrWzzbW2y7a1zbK4y7W6zbW8y760yrTAzbTFzrPKzrLOzrTJzrTOzr7CwbXC0LXK0LTO0L3I0bPQz7TQz7PS0bXQ0LnR0brW1bzT0r7U077V1Lzc2dqNqteUsdyXscaquuOHneaGmueHnOeJnuiBleiKn+eNoOiOoOWUpOiRo+iSpeiUpeqYpumaqOmdrPSynemgruSqtOmisOmlsuuqtequuOW1vOuxu+uxvOq1ve+xvPK0pvW3o/W5pfO5qvS7qfCwvMOuwc2/wNenxNyyzNe/0Nq31Nq51dy72Oy3wOu4wOu+xey4wO+6xO2+xfTAr/TCsvfFtPHLvvTJuMPDwMfHxcXKyc3DxMvFyMvLyM3PzcDV08DV1MTX1cbY1s7X1sjZ1sra2Mnd3M7b2c7c2tfH1tnB1t7F2d7M29fX1tLY1tDd2tHe3NTf3NnS19rZ1tva2Nnf3t3d28rh3tXg3Nnh3tzj393k39ni4N7k4N7n5uXDyOfLz+zAxu3CyOzEyezKzeDJ3eLM3uvP0u3P0ePf2+7R0u7Q1u/U0+7U1ezc0+7a2e/d2+3f3vbFzvLOwfHN0PPQw/TUx/LWyvLYzPDQ1fPe0ubc4vve4uHh3+nh3+/h2u/h3vHj2vHl3uHm4eTn4uDp5ebo4+Xo5ODq6ebq6OTv6+nl4+/j4O7l4e7n5ujp4+np5Ozq5e7s5urt6O7t6Orw6u7x6u3x7vPj5PDl4fDo4vDq5fDt5vDu6PDv7PTv6fDx6vHx7fH17fXw6fXy7fb07/bz8fT18vn38vr39fr48/r59Pr6+P3++//+/gAAALNTSk0AAAEAdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wBT9wclAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGHRFWHRTb2Z0d2FyZQBwYWludC5uZXQgNC4wLjlsM35OAAAFNElEQVRIS1VVCZxVUxi/9l0UIUT2bMnY43bVI2c0Y01kSWIaS0j2JEtkN41piomZrPPKQ2aQ7JKImOZlnm2493TJzDufuU1Zi+v/fee+mZ//793vnPOd7zvfes5zDBEZkBBjAcIjb+Iiotqgdhat8AMK0vl7/R9N7GiWtshqIr+EZ5gYKibyUsXY1l/mfFpssvUlWQ0FkU3gy4+RB/+kwYcO8pRSnldcOU/r2lAHARSwk2ORgEmOdC1EsuRiYSqMPwwroMIraZk5V2fYJQjCKfZrRmh3gSAZi2i4b7wSylWu8EqZwS59JkFUaW96JbNSc+CEUmt4rorwuZmWdDaoc+uZETuQlTCU5xYzR7muUnVUVo+BcRhre/VwUpasgJwhH7JkYIYA0sNxhmCwUK+lw6vCKBZehw01dEiyw4Q4aE0Z4ahDhKaFQsGnJ2BgqKoTBsNjFy0SlW6whRAZTdm8DBJmkBZhDi1j4xJQBk6ywrWUTymaCxac8lROcdauRGzQSNtA7EHUYhXyEwhhgjFUqRuO+rauhF1awFpzCsmwUbjIFBR0u1bKtyGpulW/H/cVVzkyGaIWTIR9pFAV6GK2gPMXMX8gPk9zzxXgI1kimcAltEYr+cjio1imlKpEa9rOipLm+p+CZ6Bw//qd1/f/O+GwMxbSLpyoZEcwkyh2jIks+3hmdd2jWUw4scxNysnHxU7nSspTRcJjCZGL3IsjsYJMMg5mwgx7gaIOLBFCogAgBBoNa9w+DE6I+Bs7FTgwwrJbHjWDgpYo2KwtBTcYEDuloC9geQw+k2RGnPGpTaOlq7AS+YICUz4DZVaX2TiNDhuYfTtY4geLi0IoCm3XccwM9hx4kU28StQEljDs3ZEpFGA+8dKzLmV9ymIwF5FOGn2GdJM8KLHDJbXyiYVMG9MRTLiXGGg2QKaxM3khPSRrwM9zEIardxU2w/EiA0gOeYKHzDR0V7/QGV3lKIA9ktrDArxO3gdA+k6SKoBiVwcm7NjZb9+Hnztg282TuHVZ9LOISFNt9MgyCetZVczSxnyDbl17Penq6mqpg1IhRaEO2aVLUO4/r17H8tTv6f13h71dduvZI3Y+uMdWksNSauLovJw5hsqiPIUvt0ku7/iBeUR3sksmomYWtRbAjbiLfv2lX9/V7LVG4uYnUZXhQ7f2OPCZEx9wrYWTcePEQqPEML8pl4mMdr/jlXlvHiRiJ2+MSTFY4TTSYStuvz2R/JXh+PPeGXm055J+3/YDWuNu3R3DArPutyg0ZgykMVDU9Ndm22+wYalr2rse48CnsTIFcMn73vfhNrktx1EUcZnPv6ah3Yy5cDTRdBEoGoBeah71dqFyjZDJLkWk3N3v4uuktssjWpzciMPxQeHj8nMKzcGuB0tAyzFhdCKOYWv4HwOQVwIxLG99a6uvH3sJCyO3h+k4EZ+G7+xj5f4XXksoaGrdMRzSc8ARA8+cdOuk2x6fffNNt5x+Ro1omPlrT/CQDlcNlpx4NBIWXhkx7Y3Zp3ofNR7Uv89Om/beW0TLIynHv3vs1VsOFpSWSXvfuPUf9BrRFyxgXdHoKJnQFegPOovvzz59ntrzye240ig8UQ3lDI2VqwagrKIQcLXNFL3wglN2OHdBQ6/vI3kENDVBwRb3k1XtczFbjWn4EzMYi7CF3129+JTYuRSdrGuS92g5dpqn6qXoJQs5xmL8p+Wt4hLbt0mx2OLNZR2bbPy8zJNQGFM/f/CfXZekRYFjGCWjIJpM+WiCzGBPWHhoyaAsjRT/B2Gy5yzYJkwUAAAAAElFTkSuQmCC')\";\r\n let aerialCss = \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMAUExURQALBgIMDQgOBwQOEQcTBwUSCwoVDAwdBw8ZDgUREwYUGAYZFQYZGgkTFQoVGQsZFAwZHBMeDhIbFBEbHAwWIA4bIREcIQ4hCQwjFw4lHBgkDB8sDxUiExIiGhAoGxohFRshGRorHQcrKQsiIQwmKgooJA0pKQ81Jw8yLRMiIxImKxUrJREuKhslJB0rIhooKRUuMBMyLhkwJhozKh48LxUzMRM9MBwzMiUvFCMtGiMwEiwzFCgzHDI+GSIsISkvJSQxIiM2LiY5Jic+Lyk0JSo0Ky49JSs9KSU1NSM7NCs2NS8+NDM1JzU9Ljg7IDJCHS1DLSNAMitCMSxIOjREITZLIDZJKDlFIjpFKztKJT1LKzJBMzpHMD1JMjpKPD1RKjlQNC1DQj5QQEA8MEJGJkBKJUJNK0lLLEJMMkVMPEpONENSLUdZL0pTLkpaLkRUMkRSPEVZMktUM0pVOklZMklZNEpcNU1ZMk1ZNUxfMk5dNkxcOVFUM1RUOFJbNVFZOVNYPVFdOVJdPFVaOVVaPVVdOlVdPVpaNlpdO0phN01hOlBiN1NhPFNoP1piPWFbPmRjPENOQEtPSURTQkJVS0xVQk1VSkxbQkxcS0heUVFXRFRcQlJfTFxeQlpeS05lQk1kSFRjQVRjSlZpQ1tkQlxlSlxpRF1rSVVnUVtlU1llXF9tU1xoXlxwSl9ramRfQmJlQ2FhSWFlSWFlTmVlSWRmTGFoQWFpRWFsRmVpRWVtRmNsSmtlRGpqRmpsS2BmWGRsUmFrW2ptUmZyR2RxTGpxTWVyU2RyW2d5V2tzUmt0WW15VG15WXFuTHNtVnFxTXF4T3h0TnJzUnJ1XHJ4VXN6Wnp0VHx1W315VXp8XGR0YGx0YHVzZXJ0aHR9ZXV+aHl9YHOCXXqBXXeCYHyCY3iEaHyIYn+JaXqKcYB5WIN6Y4SCXoCDZIGEaYCIZoOLa4iCaImJbIOOdYuMco6OeIuVcpOKbZKPc5aQb5eXe5ufg6KjhAAAAAAAAAAAAAAAAOGCeQgAAAEAdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wBT9wclAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGHRFWHRTb2Z0d2FyZQBwYWludC5uZXQgNC4wLjlsM35OAAAH80lEQVRISy1WbXQUVxm+6wqnk3Zmpxl2FG2EGg92C8GDlWptVTwa+uF3xcKmDfFzCUzDsJNsunXipglJXJbrtJWmwZNSnHD3jojRgUIm2UumIZ0JZ7JByrALbMWW0IBW8aRa4+cf76TeX3Nm3uc+z/s+7/vugl4r/aMTrT4e1pPTqnnmJNn5AyUzRnrRle/qE33dsvrBtAQVoxtpZNK3zSzYjUjviWO2Ag+R77dl7W36n/1Ep9KBPG/S+Py0PkjU/gPKQGqwTHryiWYFAXSvMairsio7SjyNsnCzh0qKImV9/7mhfHQZx2yN1O+7rXUm33MUPaboOkAJHaoIdXfJj2xWeyD8jMFEXkvIu5qzpU988gWB5zl+GS+sFe55trEVPdWZB2miq8bBVkNFO2R0qnrfkiXhcJhtDNXE6tbW97/s9O9/7ZfVhx86/CwrROpfvvxboMqeLsuqPr1j44qEwDNMOBximUiYoU8sw7BC/a7T72uEnyJDlGxZ9KcglZRyuqqrv/tSZErgOI4NgRBTIw9EmHAoFGZZnp6aGaJ2GTxfxYs8kKVUQh7WB5hQeC3LsUxoxVKW14l3BX2WcoUYPiZyLLe8teZ+iuT4GGhvV5KpKWkpyzxEr2MZgQ1xdRjfRBoH+2k6lIHjKTHPPBo8CSJISqqq4wGGOcWylIGlgvgNX1Gd8vF5f+IUIwb30ng+Gg2QfBRIMvy0jG8SVkYo4N0zvUXVRztbJ/L6xL7lUZEXBEHkuZqlS6gEAUgKJurnhFtfpACOYd8b/hVbJPqwi44a6KA0sPVjIi/SIyxb3u8KlAJ0S8jRVgrlW+nVHPdrhiXCxu42d86ByksDc80P3MkJFBFQ8Ho1lQegpWJRWFGsDsRwwv7pIyvuQW0ZkrX6NDVFbqcvaQI8vbyqzt5AARrsbKx5yhQEGs+wPO56bOK+0rcwMrOKkpUbZWYxV04UeZZv/cBKFhRL6Qdv9y4LfEDA7/thg7tTmv1a5/GnO0wl0dQg80wglZaHUmxRvjwAHOfyN0mxrpqLUpcjsK3NHYMo4R1o6eho2ZyIb2FoeOC3ILK8kZ2HQMOuWywGXUkJBCeTbYFS0+ym1h2/6UgmvnrvKYZZtIEXGf75C2cIAp5LHNd71x7uPoTjakrWH9e3KFpaatjUvJUysFw0KrLMYMW2lTg4PeUQx6kJEALvxXEmCdVyPLHtCSjBhc01XCjIgafxou+PE6KC1dhxSCwoBCc+N4P3btM84pmdSSjJnjO/nvY4LQfVyz5/I+v6IwjUOMjy+MVCxIbKupTJaEktp7cTKU42Pvjh2m/8cSpC6aPsaX/MHSuUQLVVsIa4RUTs/r/BVAexNdjdnsNG7j/rV93xheLMzKnFrPeTEQchCyCcKb25aAIn7lrAertrZwyNXM8N6zfWrFo3d2SmOEcF83x/r+OOFgrAHYWF7cELjhV7UQo/6WAIUVl9JFl8a//HZ66VpbY3I9QKZqPru77lA+iOWAIr0hKxHCmmr0othSyeIl5y3qt4xT8gSNrKEZozs8Els67rgsLOZ+ygzwMfbtNhobfgzpEyGnz7htPtzUi6PuOoj7K0WF/MXiUFxwGajRD1hjYXHXI9p406qOyinp5/tiWcDHY0jIu4n64Qfq7kliB2gemag9QbOia0PbbDMbd43SHuvxFxrAocxins7MX5Kqbe1QixKBxoV4//PfAgGCu+Rlm4SvZizyDH+0reDHp92iO0BuX3bCfItl0PEwvYLqpwXG2MHlGsQ4S8pMJZv1JGmHiEoHQDdOjwmVlEP/nE9ADKjI8xLI0OOGITfy0SbeG/C2jKUDGSlDhM9I3IpK9iup6XnbRNC7yqueNsJCCIiXzdQhnaGN+46umnEdy5U5UbUJ48LFM9GkJo8BdDOiAZ7ZIQbKhYLMqvhU2wmNxjEAsS2AI7y4nWF64duePbk7YV3zvAVLEMD9AxJRNa3KDUibV7DjnkuprMEYjScFNcaR2ceP2u9R/5k1052Ryme5phAFRswlHjAudiP4dOy7CaxLgdJh9vUlU1702/+LPa1U9fvPi9qlA4XEUBJc3dFlpsR457IDl1iPqLp7o81NQgyV19iYU38uTiv975Pd3SiwQcsGjx+v4/6fl5T7EOOMTCtpbKxfemsQq/3olQZcminADAAI0cuGLHaHOFxbuGvRk/Z9u7CULqoVR6NE0yx1avj30oRhc/jWUoIALGxkz0dg1Dl9iaI7LqOOXKsXJFwjiuEAi70Jra2nW1PL08zLBhZsMABpW5csI7TPfew9ipFKcn5k1i+1KyCWKjC3W/8dF1d666+RaabBVTFTHacjoojBNDh0NDxk+IPTlwfqJkWpbnpFHXIbLbmpxEQ3ff/Z0g/mauXsoln9wDRjy/NHsQFw3P6vWuTJ43/+FZrk2cvAFRipCKdfD9y2+pjRj78s0KdCUDKJvdV91ChngV38T20TM+gghjpJaPlpFr2xbEz5g4A/NGt5rNwdwmYGeeeMXBSLHHUIc+6RsojRH9VTUm3/mLf/64b470XvoxoTKhlMBQ2jMEzo2PjxdGMppmn1RM24bWFJqaQv4BcuJa2Sam7Zokq1ldCsz06NCBHrhwqVQYpfFj42NZexz1EW9SR/kT58nEeQKJb2fPXjjp0u/YUkwHEgLeOnf2nOuf1TRTM02CLKLTPy60/x1CCztqn7Ev+BdsC3m+30decQvW/wBNTwU+CfUQAQAAAABJRU5ErkJggg==')\";\r\n\r\n if (options.baseSwitcher) {\r\n // let switcherContent = '<div class=\"base-map-switcher\" title=\"Toggle Base Layer\" style=\"';\r\n // switcherContent += 'position: absolute; top: 70px; left: 4px; border: solid black 1px; ';\r\n // switcherContent += `height: 50px; width: 50px; z-index: 10; border-radius: 4px; background: ${aerialCss};`;\r\n // switcherContent += '\"></div>';\r\n // $mapDiv.append(switcherContent);\r\n //\r\n // $mapDiv.find('.base-map-switcher').click(function() {\r\n // \"use strict\";\r\n // osmLayer.setVisible(!osmLayer.getVisible());\r\n // satLayer.setVisible(!satLayer.getVisible());\r\n //\r\n // if (osmLayer.getVisible()){\r\n // $(this).css('background', aerialCss);\r\n // } else {\r\n // $(this).css('background', osmCss);\r\n // }\r\n // });\r\n }\r\n\r\n if (options.zoom < 0 || options.zoom > 28) {\r\n throw 'zoom out of range';\r\n }\r\n\r\n if (options.center.x >= -180 && options.center.x <= 180 && options.center.y >= -90 && options.center.y <= 90) {\r\n let p = new ol.geom.Point([options.center.x, options.center.y]);\r\n new ol.proj.Projection({code: \"EPSG:4326\"});\r\n\r\n p.transform(new ol.proj.Projection({code: \"EPSG:4326\"}), new ol.proj.Projection({code: \"EPSG:3857\"}));\r\n let coordinates = p.getCoordinates();\r\n options.center.x = coordinates[0];\r\n options.center.y = coordinates[1];\r\n }\r\n\r\n let map = new ol.Map({\r\n layers: [osmLayer],\r\n target: options.divId,\r\n controls: ol.control.defaults({\r\n attributionOptions: {collapsible: false}\r\n }),\r\n view: new ol.View({\r\n center: [options.center.x, options.center.y],\r\n zoom: options.zoom,\r\n minZoom: options.minZoom,\r\n maxZoom: options.maxZoom\r\n })\r\n });\r\n\r\n if (options.fullScreen) {\r\n //TODO add full screen options to ts\r\n map.addControl(new ol.control.FullScreen({}));\r\n }\r\n\r\n return map;\r\n}\r\n\r\nnm.quickMapBase = quickMapBase;\r\nexport default quickMapBase;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/olHelpers/quickMapBase.ts\n **/","/*!\n * jQuery JavaScript Library v2.2.3\n * http://jquery.com/\n *\n * Includes Sizzle.js\n * http://sizzlejs.com/\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2016-04-05T19:26Z\n */\n\n(function( global, factory ) {\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket #14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n}(typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Support: Firefox 18+\n// Can't be in strict mode, several libs including ASP.NET trace\n// the stack via arguments.caller.callee and Firefox dies if\n// you try to trace through \"use strict\" call chains. (#13335)\n//\"use strict\";\nvar arr = [];\n\nvar document = window.document;\n\nvar slice = arr.slice;\n\nvar concat = arr.concat;\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar support = {};\n\n\n\nvar\n\tversion = \"2.2.3\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t},\n\n\t// Support: Android<4.1\n\t// Make sure we trim BOM and NBSP\n\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,\n\n\t// Matches dashed string for camelizing\n\trmsPrefix = /^-ms-/,\n\trdashAlpha = /-([\\da-z])/gi,\n\n\t// Used by jQuery.camelCase as callback to replace()\n\tfcamelCase = function( all, letter ) {\n\t\treturn letter.toUpperCase();\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// Start with an empty selector\n\tselector: \"\",\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\t\treturn num != null ?\n\n\t\t\t// Return just the one element from the set\n\t\t\t( num < 0 ? this[ num + this.length ] : this[ num ] ) :\n\n\t\t\t// Return all the elements in a clean array\n\t\t\tslice.call( this );\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\t\tret.context = this.context;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !jQuery.isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tsrc = target[ name ];\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = jQuery.isArray( copy ) ) ) ) {\n\n\t\t\t\t\tif ( copyIsArray ) {\n\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\tclone = src && jQuery.isArray( src ) ? src : [];\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src && jQuery.isPlainObject( src ) ? src : {};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisFunction: function( obj ) {\n\t\treturn jQuery.type( obj ) === \"function\";\n\t},\n\n\tisArray: Array.isArray,\n\n\tisWindow: function( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t},\n\n\tisNumeric: function( obj ) {\n\n\t\t// parseFloat NaNs numeric-cast false positives (null|true|false|\"\")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t// subtraction forces infinities to NaN\n\t\t// adding 1 corrects loss of precision from parseFloat (#15100)\n\t\tvar realStringObj = obj && obj.toString();\n\t\treturn !jQuery.isArray( obj ) && ( realStringObj - parseFloat( realStringObj ) + 1 ) >= 0;\n\t},\n\n\tisPlainObject: function( obj ) {\n\t\tvar key;\n\n\t\t// Not plain objects:\n\t\t// - Any object or value whose internal [[Class]] property is not \"[object Object]\"\n\t\t// - DOM nodes\n\t\t// - window\n\t\tif ( jQuery.type( obj ) !== \"object\" || obj.nodeType || jQuery.isWindow( obj ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Not own constructor property must be Object\n\t\tif ( obj.constructor &&\n\t\t\t\t!hasOwn.call( obj, \"constructor\" ) &&\n\t\t\t\t!hasOwn.call( obj.constructor.prototype || {}, \"isPrototypeOf\" ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Own properties are enumerated firstly, so to speed up,\n\t\t// if last one is own, then all properties are own\n\t\tfor ( key in obj ) {}\n\n\t\treturn key === undefined || hasOwn.call( obj, key );\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\ttype: function( obj ) {\n\t\tif ( obj == null ) {\n\t\t\treturn obj + \"\";\n\t\t}\n\n\t\t// Support: Android<4.0, iOS<6 (functionish RegExp)\n\t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\t\ttypeof obj;\n\t},\n\n\t// Evaluates a script in a global context\n\tglobalEval: function( code ) {\n\t\tvar script,\n\t\t\tindirect = eval;\n\n\t\tcode = jQuery.trim( code );\n\n\t\tif ( code ) {\n\n\t\t\t// If the code includes a valid, prologue position\n\t\t\t// strict mode pragma, execute code by injecting a\n\t\t\t// script tag into the document.\n\t\t\tif ( code.indexOf( \"use strict\" ) === 1 ) {\n\t\t\t\tscript = document.createElement( \"script\" );\n\t\t\t\tscript.text = code;\n\t\t\t\tdocument.head.appendChild( script ).parentNode.removeChild( script );\n\t\t\t} else {\n\n\t\t\t\t// Otherwise, avoid the DOM node creation, insertion\n\t\t\t\t// and removal by using an indirect global eval\n\n\t\t\t\tindirect( code );\n\t\t\t}\n\t\t}\n\t},\n\n\t// Convert dashed to camelCase; used by the css and data modules\n\t// Support: IE9-11+\n\t// Microsoft forgot to hump their vendor prefix (#9572)\n\tcamelCase: function( string ) {\n\t\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n\t},\n\n\tnodeName: function( elem, name ) {\n\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// Support: Android<4.1\n\ttrim: function( text ) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t( text + \"\" ).replace( rtrim, \"\" );\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn concat.apply( [], ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// Bind a function to a context, optionally partially applying any\n\t// arguments.\n\tproxy: function( fn, context ) {\n\t\tvar tmp, args, proxy;\n\n\t\tif ( typeof context === \"string\" ) {\n\t\t\ttmp = fn[ context ];\n\t\t\tcontext = fn;\n\t\t\tfn = tmp;\n\t\t}\n\n\t\t// Quick check to determine if target is callable, in the spec\n\t\t// this throws a TypeError, but we will just return undefined.\n\t\tif ( !jQuery.isFunction( fn ) ) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Simulated bind\n\t\targs = slice.call( arguments, 2 );\n\t\tproxy = function() {\n\t\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t\t};\n\n\t\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\t\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\t\treturn proxy;\n\t},\n\n\tnow: Date.now,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\n// JSHint would error on this code due to the Symbol not being defined in ES5.\n// Defining this global in .jshintrc would create a danger of using the global\n// unguarded in another place, it seems safer to just disable JSHint for these\n// three lines.\n/* jshint ignore: start */\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n/* jshint ignore: end */\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\nfunction( i, name ) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: iOS 8.2 (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = jQuery.type( obj );\n\n\tif ( type === \"function\" || jQuery.isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v2.2.1\n * http://sizzlejs.com/\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2015-10-17\n */\n(function( window ) {\n\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// General-purpose constants\n\tMAX_NEGATIVE = 1 << 31,\n\n\t// Instance methods\n\thasOwn = ({}).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpush_native = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\t// Use a stripped-down indexOf as it's faster than native\n\t// http://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[i] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\n\t// http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n\tidentifier = \"(?:\\\\\\\\.|[\\\\w-]|[^\\\\x00-\\\\xa0])+\",\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace +\n\t\t\"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\" ),\n\n\trattributeQuotes = new RegExp( \"=\" + whitespace + \"*([^\\\\]'\\\"]*?)\" + whitespace + \"*\\\\]\", \"g\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace +\n\t\t\t\"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace +\n\t\t\t\"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" +\n\t\t\twhitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\trescape = /'|\\\\/g,\n\n\t// CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\([\\\\da-f]{1,6}\" + whitespace + \"?|(\" + whitespace + \")|.)\", \"ig\" ),\n\tfunescape = function( _, escaped, escapedWhitespace ) {\n\t\tvar high = \"0x\" + escaped - 0x10000;\n\t\t// NaN means non-codepoint\n\t\t// Support: Firefox<24\n\t\t// Workaround erroneous numeric interpretation of +\"0x\"\n\t\treturn high !== high || escapedWhitespace ?\n\t\t\tescaped :\n\t\t\thigh < 0 ?\n\t\t\t\t// BMP codepoint\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\t// Supplemental Plane codepoint (surrogate pair)\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t};\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t(arr = slice.call( preferredDoc.childNodes )),\n\t\tpreferredDoc.childNodes\n\t);\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpush_native.apply( target, slice.call(els) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( (target[j++] = els[i++]) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar m, i, elem, nid, nidselect, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\n\t\tif ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {\n\t\t\tsetDocument( context );\n\t\t}\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( (m = match[1]) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( (elem = context.getElementById( m )) ) {\n\n\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && (elem = newContext.getElementById( m )) &&\n\t\t\t\t\t\t\tcontains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[2] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( (m = match[3]) && support.getElementsByClassName &&\n\t\t\t\t\tcontext.getElementsByClassName ) {\n\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( support.qsa &&\n\t\t\t\t!compilerCache[ selector + \" \" ] &&\n\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test( selector )) ) {\n\n\t\t\t\tif ( nodeType !== 1 ) {\n\t\t\t\t\tnewContext = context;\n\t\t\t\t\tnewSelector = selector;\n\n\t\t\t\t// qSA looks outside Element context, which is not what we want\n\t\t\t\t// Thanks to Andrew Dupont for this workaround technique\n\t\t\t\t// Support: IE <=8\n\t\t\t\t// Exclude object elements\n\t\t\t\t} else if ( context.nodeName.toLowerCase() !== \"object\" ) {\n\n\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\tif ( (nid = context.getAttribute( \"id\" )) ) {\n\t\t\t\t\t\tnid = nid.replace( rescape, \"\\\\$&\" );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontext.setAttribute( \"id\", (nid = expando) );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\tnidselect = ridentifier.test( nid ) ? \"#\" + nid : \"[id='\" + nid + \"']\";\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[i] = nidselect + \" \" + toSelector( groups[i] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\t\t\t\t}\n\n\t\t\t\tif ( newSelector ) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn (cache[ key + \" \" ] = value);\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created div and expects a boolean result\n */\nfunction assert( fn ) {\n\tvar div = document.createElement(\"div\");\n\n\ttry {\n\t\treturn !!fn( div );\n\t} catch (e) {\n\t\treturn false;\n\t} finally {\n\t\t// Remove from its parent by default\n\t\tif ( div.parentNode ) {\n\t\t\tdiv.parentNode.removeChild( div );\n\t\t}\n\t\t// release memory in IE\n\t\tdiv = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split(\"|\"),\n\t\ti = arr.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[i] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\t( ~b.sourceIndex || MAX_NEGATIVE ) -\n\t\t\t( ~a.sourceIndex || MAX_NEGATIVE );\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( (cur = cur.nextSibling) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn (name === \"input\" || name === \"button\") && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction(function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction(function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ (j = matchIndexes[i]) ] ) {\n\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\t// documentElement is verified for cases where it doesn't yet exist\n\t// (such as loading iframes in IE - #4833)\n\tvar documentElement = elem && (elem.ownerDocument || elem).documentElement;\n\treturn documentElement ? documentElement.nodeName !== \"HTML\" : false;\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, parent,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\tif ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocElem = document.documentElement;\n\tdocumentIsHTML = !isXML( document );\n\n\t// Support: IE 9-11, Edge\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\tif ( (parent = document.defaultView) && parent.top !== parent ) {\n\t\t// Support: IE 11\n\t\tif ( parent.addEventListener ) {\n\t\t\tparent.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( parent.attachEvent ) {\n\t\t\tparent.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert(function( div ) {\n\t\tdiv.className = \"i\";\n\t\treturn !div.getAttribute(\"className\");\n\t});\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert(function( div ) {\n\t\tdiv.appendChild( document.createComment(\"\") );\n\t\treturn !div.getElementsByTagName(\"*\").length;\n\t});\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert(function( div ) {\n\t\tdocElem.appendChild( div ).id = expando;\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\n\t});\n\n\t// ID find and filter\n\tif ( support.getById ) {\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar m = context.getElementById( id );\n\t\t\t\treturn m ? [ m ] : [];\n\t\t\t}\n\t\t};\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t};\n\t\t};\n\t} else {\n\t\t// Support: IE6/7\n\t\t// getElementById is not reliable as a find shortcut\n\t\tdelete Expr.find[\"ID\"];\n\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode(\"id\");\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[\"TAG\"] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( (elem = results[i++]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[\"CLASS\"] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See http://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( (support.qsa = rnative.test( document.querySelectorAll )) ) {\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert(function( div ) {\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// http://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( div ).innerHTML = \"<a id='\" + expando + \"'></a>\" +\n\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' msallowcapture=''>\" +\n\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( div.querySelectorAll(\"[msallowcapture^='']\").length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !div.querySelectorAll(\"[selected]\").length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\t\t\tif ( !div.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push(\"~=\");\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !div.querySelectorAll(\":checked\").length ) {\n\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibing-combinator selector` fails\n\t\t\tif ( !div.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\n\t\t\t}\n\t\t});\n\n\t\tassert(function( div ) {\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = document.createElement(\"input\");\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tdiv.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( div.querySelectorAll(\"[name=d]\").length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !div.querySelectorAll(\":enabled\").length ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tdiv.querySelectorAll(\"*,:x\");\n\t\t\trbuggyQSA.push(\",.*:\");\n\t\t});\n\t}\n\n\tif ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector) )) ) {\n\n\t\tassert(function( div ) {\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( div, \"div\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( div, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t});\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join(\"|\") );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join(\"|\") );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully self-exclusive\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t));\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( (b = b.parentNode) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\tcompare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\tif ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\n\t\t\treturn a === document ? -1 :\n\t\t\t\tb === document ? 1 :\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[i] === bp[i] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[i], bp[i] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\tap[i] === preferredDoc ? -1 :\n\t\t\tbp[i] === preferredDoc ? 1 :\n\t\t\t0;\n\t};\n\n\treturn document;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\t// Make sure that attribute selectors are quoted\n\texpr = expr.replace( rattributeQuotes, \"='$1']\" );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!compilerCache[ expr + \" \" ] &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch (e) {}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\t// Set document vars if needed\n\tif ( ( context.ownerDocument || context ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t(val = elem.getAttributeNode(name)) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( (elem = results[i++]) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( (node = elem[i++]) ) {\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[1] = match[1].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[3] = ( match[3] || match[4] || match[5] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[2] === \"~=\" ) {\n\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\tif ( match[1].slice( 0, 3 ) === \"nth\" ) {\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[3] ) {\n\t\t\t\t\tSizzle.error( match[0] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === \"even\" || match[3] === \"odd\" ) );\n\t\t\t\tmatch[5] = +( ( match[7] + match[8] ) || match[3] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[3] ) {\n\t\t\t\tSizzle.error( match[0] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\tif ( matchExpr[\"CHILD\"].test( match[0] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[3] ) {\n\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t(excess = tokenize( unquoted, true )) &&\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t(excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[0] = match[0].slice( 0, excess );\n\t\t\t\tmatch[2] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() { return true; } :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t(pattern = new RegExp( \"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\" )) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test( typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== \"undefined\" && elem.getAttribute(\"class\") || \"\" );\n\t\t\t\t});\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tvar cache, uniqueCache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( (node = node[ dir ]) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction(function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf( seed, matched[i] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[i] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction(function( selector ) {\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction(function( seed, matches, context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = unmatched[i]) ) {\n\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}) :\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\t\t\t\t\t// Don't keep the element (issue #299)\n\t\t\t\t\tinput[0] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t}),\n\n\t\t\"has\": markFunction(function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t}),\n\n\t\t\"contains\": markFunction(function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t}),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test(lang || \"\") ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( (elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( (elem = elem.parentNode) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": function( elem ) {\n\t\t\treturn elem.disabled === false;\n\t\t},\n\n\t\t\"disabled\": function( elem ) {\n\t\t\treturn elem.disabled === true;\n\t\t},\n\n\t\t\"checked\": function( elem ) {\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn (nodeName === \"input\" && !!elem.checked) || (nodeName === \"option\" && !!elem.selected);\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t// but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[\"empty\"]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo(function() {\n\t\t\treturn [ 0 ];\n\t\t}),\n\n\t\t\"last\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t}),\n\n\t\t\"eq\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t}),\n\n\t\t\"even\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"odd\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"lt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"gt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t})\n\t}\n};\n\nExpr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || (match = rcomma.exec( soFar )) ) {\n\t\t\tif ( match ) {\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[0].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( (tokens = []) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( (match = rcombinators.exec( soFar )) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push({\n\t\t\t\tvalue: matched,\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[0].replace( rtrim, \" \" )\n\t\t\t});\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\n\t\t\t\t(match = preFilters[ type ]( match ))) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push({\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t});\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[i].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tcheckNonElements = base && dir === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, uniqueCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || (elem[ expando ] = {});\n\n\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});\n\n\t\t\t\t\t\tif ( (oldCache = uniqueCache[ dir ]) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn (newCache[ 2 ] = oldCache[ 2 ]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\tuniqueCache[ dir ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[i]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[0];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[i], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (elem = unmatched[i]) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction(function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts( selector || \"*\", context.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( (elem = temp[i]) ) {\n\t\t\t\t\tmatcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = matcherOut[i]) ) {\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( (matcherIn[i] = elem) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, (matcherOut = []), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( (elem = matcherOut[i]) &&\n\t\t\t\t\t\t(temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {\n\n\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[0].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\t\t\t// Avoid hanging onto element (issue #299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (matcher = Expr.relative[ tokens[i].type ]) ) {\n\t\t\tmatchers = [ addCombinator(elementMatcher( matchers ), matcher) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[j].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( (tokens = tokens.slice( j )) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[\"TAG\"]( \"*\", outermost ),\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\t\t\t\toutermostContext = context === document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching elements by id\n\t\t\tfor ( ; i !== len && (elem = elems[i]) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\tif ( !context && elem.ownerDocument !== document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( (matcher = elementMatchers[j++]) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( (elem = !matcher && elem) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (matcher = setMatchers[j++]) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !(unmatched[i] || setMatched[i]) ) {\n\t\t\t\t\t\t\t\tsetMatched[i] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[i] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\n\n/**\n * A low-level selection function that works with Sizzle's compiled\n * selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n * selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( (selector = compiled.selector || selector) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[0] = match[0].slice( 0 );\n\t\tif ( tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\tsupport.getById && context.nodeType === 9 && documentIsHTML &&\n\t\t\t\tExpr.relative[ tokens[1].type ] ) {\n\n\t\t\tcontext = ( Expr.find[\"ID\"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[\"needsContext\"].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[i];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ (type = token.type) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( (find = Expr.find[ type ]) ) {\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( (seed = find(\n\t\t\t\t\ttoken.matches[0].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context\n\t\t\t\t)) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n};\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split(\"\").sort( sortOrder ).join(\"\") === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert(function( div1 ) {\n\t// Should return 1, but returns 4 (following)\n\treturn div1.compareDocumentPosition( document.createElement(\"div\") ) & 1;\n});\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert(function( div ) {\n\tdiv.innerHTML = \"<a href='#'></a>\";\n\treturn div.firstChild.getAttribute(\"href\") === \"#\" ;\n}) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert(function( div ) {\n\tdiv.innerHTML = \"<input/>\";\n\tdiv.firstChild.setAttribute( \"value\", \"\" );\n\treturn div.firstChild.getAttribute( \"value\" ) === \"\";\n}) ) {\n\taddHandle( \"value\", function( elem, name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert(function( div ) {\n\treturn div.getAttribute(\"disabled\") == null;\n}) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t\t(val = elem.getAttributeNode( name )) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\tnull;\n\t\t}\n\t});\n}\n\nreturn Sizzle;\n\n})( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\n\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\nvar rsingleTag = ( /^<([\\w-]+)\\s*\\/?>(?:<\\/\\1>|)$/ );\n\n\n\nvar risSimple = /^.[^:#\\[\\.,]*$/;\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( jQuery.isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\t/* jshint -W018 */\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\n\t}\n\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\n\t}\n\n\tif ( typeof qualifier === \"string\" ) {\n\t\tif ( risSimple.test( qualifier ) ) {\n\t\t\treturn jQuery.filter( qualifier, elements, not );\n\t\t}\n\n\t\tqualifier = jQuery.filter( qualifier, elements );\n\t}\n\n\treturn jQuery.grep( elements, function( elem ) {\n\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t} );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\treturn elems.length === 1 && elem.nodeType === 1 ?\n\t\tjQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :\n\t\tjQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\t\treturn elem.nodeType === 1;\n\t\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i,\n\t\t\tlen = this.length,\n\t\t\tret = [],\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\t// Needed because $( selector, context ) becomes $( context ).find( selector )\n\t\tret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );\n\t\tret.selector = this.selector ? this.selector + \" \" + selector : selector;\n\t\treturn ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]*))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( jQuery.isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\t// Support: Blackberry 4.6\n\t\t\t\t\t// gEBID returns nodes no longer in the document (#6963)\n\t\t\t\t\tif ( elem && elem.parentNode ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.context = document;\n\t\t\t\t\tthis.selector = selector;\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis.context = this[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( jQuery.isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\tif ( selector.selector !== undefined ) {\n\t\t\tthis.selector = selector.selector;\n\t\t\tthis.context = selector.context;\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\tpos = rneedsContext.test( selectors ) || typeof selectors !== \"string\" ?\n\t\t\t\tjQuery( selectors, context || this.context ) :\n\t\t\t\t0;\n\n\t\tfor ( ; i < l; i++ ) {\n\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t// Always skip document fragments\n\t\t\t\tif ( cur.nodeType < 11 && ( pos ?\n\t\t\t\t\tpos.index( cur ) > -1 :\n\n\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\treturn elem.contentDocument || jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnotwhite = ( /\\S+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnotwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( jQuery.isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && jQuery.type( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, listener list, final state\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ), \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ), \"rejected\" ],\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ) ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tthen: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\t\t\t\t\tvar fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];\n\n\t\t\t\t\t\t\t// deferred[ done | fail | progress ] for forwarding actions to newDefer\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && jQuery.isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis === promise ? newDefer.promise() : this,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Keep pipe for back-compat\n\t\tpromise.pipe = promise.then;\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 3 ];\n\n\t\t\t// promise[ done | fail | progress ] = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add( function() {\n\n\t\t\t\t\t// state = [ resolved | rejected ]\n\t\t\t\t\tstate = stateString;\n\n\t\t\t\t// [ reject_list | resolve_list ].disable; progress_list.lock\n\t\t\t\t}, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );\n\t\t\t}\n\n\t\t\t// deferred[ resolve | reject | notify ]\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? promise : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( subordinate /* , ..., subordinateN */ ) {\n\t\tvar i = 0,\n\t\t\tresolveValues = slice.call( arguments ),\n\t\t\tlength = resolveValues.length,\n\n\t\t\t// the count of uncompleted subordinates\n\t\t\tremaining = length !== 1 ||\n\t\t\t\t( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,\n\n\t\t\t// the master Deferred.\n\t\t\t// If resolveValues consist of only a single Deferred, just use that.\n\t\t\tdeferred = remaining === 1 ? subordinate : jQuery.Deferred(),\n\n\t\t\t// Update function for both resolve and progress values\n\t\t\tupdateFunc = function( i, contexts, values ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tcontexts[ i ] = this;\n\t\t\t\t\tvalues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( values === progressValues ) {\n\t\t\t\t\t\tdeferred.notifyWith( contexts, values );\n\t\t\t\t\t} else if ( !( --remaining ) ) {\n\t\t\t\t\t\tdeferred.resolveWith( contexts, values );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t},\n\n\t\t\tprogressValues, progressContexts, resolveContexts;\n\n\t\t// Add listeners to Deferred subordinates; treat others as resolved\n\t\tif ( length > 1 ) {\n\t\t\tprogressValues = new Array( length );\n\t\t\tprogressContexts = new Array( length );\n\t\t\tresolveContexts = new Array( length );\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {\n\t\t\t\t\tresolveValues[ i ].promise()\n\t\t\t\t\t\t.progress( updateFunc( i, progressContexts, progressValues ) )\n\t\t\t\t\t\t.done( updateFunc( i, resolveContexts, resolveValues ) )\n\t\t\t\t\t\t.fail( deferred.reject );\n\t\t\t\t} else {\n\t\t\t\t\t--remaining;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// If we're not waiting on anything, resolve the master\n\t\tif ( !remaining ) {\n\t\t\tdeferred.resolveWith( resolveContexts, resolveValues );\n\t\t}\n\n\t\treturn deferred.promise();\n\t}\n} );\n\n\n// The deferred used on DOM ready\nvar readyList;\n\njQuery.fn.ready = function( fn ) {\n\n\t// Add the callback\n\tjQuery.ready.promise().done( fn );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Hold (or release) the ready event\n\tholdReady: function( hold ) {\n\t\tif ( hold ) {\n\t\t\tjQuery.readyWait++;\n\t\t} else {\n\t\t\tjQuery.ready( true );\n\t\t}\n\t},\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\n\t\t// Trigger any bound ready events\n\t\tif ( jQuery.fn.triggerHandler ) {\n\t\t\tjQuery( document ).triggerHandler( \"ready\" );\n\t\t\tjQuery( document ).off( \"ready\" );\n\t\t}\n\t}\n} );\n\n/**\n * The ready event handler and self cleanup method\n */\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\njQuery.ready.promise = function( obj ) {\n\tif ( !readyList ) {\n\n\t\treadyList = jQuery.Deferred();\n\n\t\t// Catch cases where $(document).ready() is called\n\t\t// after the browser event has already occurred.\n\t\t// Support: IE9-10 only\n\t\t// Older IE sometimes signals \"interactive\" too soon\n\t\tif ( document.readyState === \"complete\" ||\n\t\t\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t\t\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\t\t\twindow.setTimeout( jQuery.ready );\n\n\t\t} else {\n\n\t\t\t// Use the handy event callback\n\t\t\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t\t\t// A fallback to window.onload, that will always work\n\t\t\twindow.addEventListener( \"load\", completed );\n\t\t}\n\t}\n\treturn readyList.promise( obj );\n};\n\n// Kick off the DOM ready check even if the user does not\njQuery.ready.promise();\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( jQuery.type( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !jQuery.isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\tvalue :\n\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn chainable ?\n\t\telems :\n\n\t\t// Gets\n\t\tbulk ?\n\t\t\tfn.call( elems ) :\n\t\t\tlen ? fn( elems[ 0 ], key ) : emptyGet;\n};\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t// - Node\n\t// - Node.ELEMENT_NODE\n\t// - Node.DOCUMENT_NODE\n\t// - Object\n\t// - Any\n\t/* jshint -W018 */\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tregister: function( owner, initial ) {\n\t\tvar value = initial || {};\n\n\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t// use plain assignment\n\t\tif ( owner.nodeType ) {\n\t\t\towner[ this.expando ] = value;\n\n\t\t// Otherwise secure it in a non-enumerable, non-writable property\n\t\t// configurability must be true to allow the property to be\n\t\t// deleted with the delete operator\n\t\t} else {\n\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\tvalue: value,\n\t\t\t\twritable: true,\n\t\t\t\tconfigurable: true\n\t\t\t} );\n\t\t}\n\t\treturn owner[ this.expando ];\n\t},\n\tcache: function( owner ) {\n\n\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t// but we should not, see #8335.\n\t\t// Always return an empty object.\n\t\tif ( !acceptData( owner ) ) {\n\t\t\treturn {};\n\t\t}\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see #8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ data ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ prop ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\t\t\towner[ this.expando ] && owner[ this.expando ][ key ];\n\t},\n\taccess: function( owner, key, value ) {\n\t\tvar stored;\n\n\t\t// In cases where either:\n\t\t//\n\t\t// 1. No key was specified\n\t\t// 2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t// 1. The entire cache object\n\t\t// 2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\tstored = this.get( owner, key );\n\n\t\t\treturn stored !== undefined ?\n\t\t\t\tstored : this.get( owner, jQuery.camelCase( key ) );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t// 1. An object of properties\n\t\t// 2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i, name, camel,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key === undefined ) {\n\t\t\tthis.register( owner );\n\n\t\t} else {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( jQuery.isArray( key ) ) {\n\n\t\t\t\t// If \"name\" is an array of keys...\n\t\t\t\t// When data is initially created, via (\"key\", \"val\") signature,\n\t\t\t\t// keys will be converted to camelCase.\n\t\t\t\t// Since there is no way to tell _how_ a key was added, remove\n\t\t\t\t// both plain key and camelCase key. #12786\n\t\t\t\t// This will only penalize the array argument path.\n\t\t\t\tname = key.concat( key.map( jQuery.camelCase ) );\n\t\t\t} else {\n\t\t\t\tcamel = jQuery.camelCase( key );\n\n\t\t\t\t// Try the string as a key before any manipulation\n\t\t\t\tif ( key in cache ) {\n\t\t\t\t\tname = [ key, camel ];\n\t\t\t\t} else {\n\n\t\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\t\tname = camel;\n\t\t\t\t\tname = name in cache ?\n\t\t\t\t\t\t[ name ] : ( name.match( rnotwhite ) || [] );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\ti = name.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ name[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <= 35-45+\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://code.google.com/p/chromium/issues/detail?id=378607\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = data === \"true\" ? true :\n\t\t\t\t\tdata === \"false\" ? false :\n\t\t\t\t\tdata === \"null\" ? null :\n\n\t\t\t\t\t// Only convert to a number if it doesn't change the string\n\t\t\t\t\t+data + \"\" === data ? +data :\n\t\t\t\t\trbrace.test( data ) ? jQuery.parseJSON( data ) :\n\t\t\t\t\tdata;\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE11+\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = jQuery.camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data, camelKey;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// with the key as-is\n\t\t\t\tdata = dataUser.get( elem, key ) ||\n\n\t\t\t\t\t// Try to find dashed key if it exists (gh-2779)\n\t\t\t\t\t// This is for 2.2.x only\n\t\t\t\t\tdataUser.get( elem, key.replace( rmultiDash, \"-$&\" ).toLowerCase() );\n\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\tcamelKey = jQuery.camelCase( key );\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// with the key camelized\n\t\t\t\tdata = dataUser.get( elem, camelKey );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, camelKey, undefined );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tcamelKey = jQuery.camelCase( key );\n\t\t\tthis.each( function() {\n\n\t\t\t\t// First, attempt to store a copy or reference of any\n\t\t\t\t// data that might've been store with a camelCased key.\n\t\t\t\tvar data = dataUser.get( this, camelKey );\n\n\t\t\t\t// For HTML5 data-* attribute interop, we have to\n\t\t\t\t// store property names with dashes in a camelCase form.\n\t\t\t\t// This might not apply to all properties...*\n\t\t\t\tdataUser.set( this, camelKey, value );\n\n\t\t\t\t// *... In the case of properties that might _actually_\n\t\t\t\t// have dashes, we need to also store a copy of that\n\t\t\t\t// unchanged property.\n\t\t\t\tif ( key.indexOf( \"-\" ) > -1 && data !== undefined ) {\n\t\t\t\t\tdataUser.set( this, key, value );\n\t\t\t\t}\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || jQuery.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar isHidden = function( elem, el ) {\n\n\t\t// isHidden might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\t\treturn jQuery.css( elem, \"display\" ) === \"none\" ||\n\t\t\t!jQuery.contains( elem.ownerDocument, elem );\n\t};\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted,\n\t\tscale = 1,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() { return tween.cur(); } :\n\t\t\tfunction() { return jQuery.css( elem, prop, \"\" ); },\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = ( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\tdo {\n\n\t\t\t// If previous iteration zeroed out, double until we get *something*.\n\t\t\t// Use string for doubling so we don't accidentally see scale as unchanged below\n\t\t\tscale = scale || \".5\";\n\n\t\t\t// Adjust and apply\n\t\t\tinitialInUnit = initialInUnit / scale;\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Update scale, tolerating zero or NaN from tween.cur()\n\t\t// Break the loop if scale is unchanged or perfect, or if we've just had enough.\n\t\t} while (\n\t\t\tscale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations\n\t\t);\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([\\w:-]+)/ );\n\nvar rscriptType = ( /^$|\\/(?:java|ecma)script/i );\n\n\n\n// We have to close these tags to support XHTML (#13200)\nvar wrapMap = {\n\n\t// Support: IE9\n\toption: [ 1, \"<select multiple='multiple'>\", \"</select>\" ],\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting <tbody> or other required elements.\n\tthead: [ 1, \"<table>\", \"</table>\" ],\n\tcol: [ 2, \"<table><colgroup>\", \"</colgroup></table>\" ],\n\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\n// Support: IE9\nwrapMap.optgroup = wrapMap.option;\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE9-11+\n\t// Use typeof to avoid zero-argument method invocation on host objects (#15151)\n\tvar ret = typeof context.getElementsByTagName !== \"undefined\" ?\n\t\t\tcontext.getElementsByTagName( tag || \"*\" ) :\n\t\t\ttypeof context.querySelectorAll !== \"undefined\" ?\n\t\t\t\tcontext.querySelectorAll( tag || \"*\" ) :\n\t\t\t[];\n\n\treturn tag === undefined || tag && jQuery.nodeName( context, tag ) ?\n\t\tjQuery.merge( [ context ], ret ) :\n\t\tret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, contains, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( jQuery.type( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android<4.1, PhantomJS<2\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android<4.1, PhantomJS<2\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (#12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tcontains = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( contains ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0-4.3, Safari<=5.1\n\t// Check state lost if the name is set (#11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (#14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Safari<=5.1, Android<4.2\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE<=11+\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n} )();\n\n\nvar\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\n// Support: IE9\n// See #13393 for more info\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Don't attach events to noData or text/comment nodes (but allow plain objects)\n\t\tif ( !elemData ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = {};\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnotwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnotwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( event ) {\n\n\t\t// Make a writable jQuery.Event from the native event object\n\t\tevent = jQuery.event.fix( event );\n\n\t\tvar i, j, ret, matched, handleObj,\n\t\t\thandlerQueue = [],\n\t\t\targs = slice.call( arguments ),\n\t\t\thandlers = ( dataPriv.get( this, \"events\" ) || {} )[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// Triggered event must either 1) have no namespace, or 2) have namespace(s)\n\t\t\t\t// a subset or equal to those in the bound event (both can have no namespace).\n\t\t\t\tif ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, matches, sel, handleObj,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Support (at least): Chrome, IE9\n\t\t// Find delegate handlers\n\t\t// Black-hole SVG <use> instance trees (#13180)\n\t\t//\n\t\t// Support: Firefox<=42+\n\t\t// Avoid non-left-click in FF but don't block IE radio events (#3861, gh-2343)\n\t\tif ( delegateCount && cur.nodeType &&\n\t\t\t( event.type !== \"click\" || isNaN( event.button ) || event.button < 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && ( cur.disabled !== true || event.type !== \"click\" ) ) {\n\t\t\t\t\tmatches = [];\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matches[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatches[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matches[ sel ] ) {\n\t\t\t\t\t\t\tmatches.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matches.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matches } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: this, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\t// Includes some event props shared by KeyEvent and MouseEvent\n\tprops: ( \"altKey bubbles cancelable ctrlKey currentTarget detail eventPhase \" +\n\t\t\"metaKey relatedTarget shiftKey target timeStamp view which\" ).split( \" \" ),\n\n\tfixHooks: {},\n\n\tkeyHooks: {\n\t\tprops: \"char charCode key keyCode\".split( \" \" ),\n\t\tfilter: function( event, original ) {\n\n\t\t\t// Add which for key events\n\t\t\tif ( event.which == null ) {\n\t\t\t\tevent.which = original.charCode != null ? original.charCode : original.keyCode;\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tmouseHooks: {\n\t\tprops: ( \"button buttons clientX clientY offsetX offsetY pageX pageY \" +\n\t\t\t\"screenX screenY toElement\" ).split( \" \" ),\n\t\tfilter: function( event, original ) {\n\t\t\tvar eventDoc, doc, body,\n\t\t\t\tbutton = original.button;\n\n\t\t\t// Calculate pageX/Y if missing and clientX/Y available\n\t\t\tif ( event.pageX == null && original.clientX != null ) {\n\t\t\t\teventDoc = event.target.ownerDocument || document;\n\t\t\t\tdoc = eventDoc.documentElement;\n\t\t\t\tbody = eventDoc.body;\n\n\t\t\t\tevent.pageX = original.clientX +\n\t\t\t\t\t( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) -\n\t\t\t\t\t( doc && doc.clientLeft || body && body.clientLeft || 0 );\n\t\t\t\tevent.pageY = original.clientY +\n\t\t\t\t\t( doc && doc.scrollTop || body && body.scrollTop || 0 ) -\n\t\t\t\t\t( doc && doc.clientTop || body && body.clientTop || 0 );\n\t\t\t}\n\n\t\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\t\t// Note: button is not normalized, so don't use it\n\t\t\tif ( !event.which && button !== undefined ) {\n\t\t\t\tevent.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tfix: function( event ) {\n\t\tif ( event[ jQuery.expando ] ) {\n\t\t\treturn event;\n\t\t}\n\n\t\t// Create a writable copy of the event object and normalize some properties\n\t\tvar i, prop, copy,\n\t\t\ttype = event.type,\n\t\t\toriginalEvent = event,\n\t\t\tfixHook = this.fixHooks[ type ];\n\n\t\tif ( !fixHook ) {\n\t\t\tthis.fixHooks[ type ] = fixHook =\n\t\t\t\trmouseEvent.test( type ) ? this.mouseHooks :\n\t\t\t\trkeyEvent.test( type ) ? this.keyHooks :\n\t\t\t\t{};\n\t\t}\n\t\tcopy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;\n\n\t\tevent = new jQuery.Event( originalEvent );\n\n\t\ti = copy.length;\n\t\twhile ( i-- ) {\n\t\t\tprop = copy[ i ];\n\t\t\tevent[ prop ] = originalEvent[ prop ];\n\t\t}\n\n\t\t// Support: Cordova 2.5 (WebKit) (#13255)\n\t\t// All events should have a target; Cordova deviceready doesn't\n\t\tif ( !event.target ) {\n\t\t\tevent.target = document;\n\t\t}\n\n\t\t// Support: Safari 6.0+, Chrome<28\n\t\t// Target should not be a text node (#504, #13143)\n\t\tif ( event.target.nodeType === 3 ) {\n\t\t\tevent.target = event.target.parentNode;\n\t\t}\n\n\t\treturn fixHook.filter ? fixHook.filter( event, originalEvent ) : event;\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tfocus: {\n\n\t\t\t// Fire native event if possible so blur/focus sequence is correct\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this !== safeActiveElement() && this.focus ) {\n\t\t\t\t\tthis.focus();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusin\"\n\t\t},\n\t\tblur: {\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this === safeActiveElement() && this.blur ) {\n\t\t\t\t\tthis.blur();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusout\"\n\t\t},\n\t\tclick: {\n\n\t\t\t// For checkbox, fire native event so checked state will be right\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this.type === \"checkbox\" && this.click && jQuery.nodeName( this, \"input\" ) ) {\n\t\t\t\t\tthis.click();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, don't fire native .click() on links\n\t\t\t_default: function( event ) {\n\t\t\t\treturn jQuery.nodeName( event.target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android<4.0\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || jQuery.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://code.google.com/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event ) dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:-]+)[^>]*)\\/>/gi,\n\n\t// Support: IE 10-11, Edge 10240+\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /<script|<style|<link/i,\n\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\trscriptTypeMasked = /^true\\/(.*)/,\n\trcleanScript = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;\n\n// Manipulating tables requires a tbody\nfunction manipulationTarget( elem, content ) {\n\treturn jQuery.nodeName( elem, \"table\" ) &&\n\t\tjQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ?\n\n\t\telem.getElementsByTagName( \"tbody\" )[ 0 ] ||\n\t\t\telem.appendChild( elem.ownerDocument.createElement( \"tbody\" ) ) :\n\t\telem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tvar match = rscriptTypeMasked.exec( elem.type );\n\n\tif ( match ) {\n\t\telem.type = match[ 1 ];\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.access( src );\n\t\tpdataCur = dataPriv.set( dest, pdataOld );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdelete pdataCur.handle;\n\t\t\tpdataCur.events = {};\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = concat.apply( [], args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tisFunction = jQuery.isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( isFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( isFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android<4.1, PhantomJS<2\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Reenable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tjQuery.globalEval( node.textContent.replace( rcleanScript, \"\" ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && jQuery.contains( node.ownerDocument, node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html.replace( rxhtmlTag, \"<$1></$2>\" );\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <= 35-45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <= 35-45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\n\t// Keep domManip exposed until 3.0 (gh-2225)\n\tdomManip: domManip,\n\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: QtWebKit\n\t\t\t// .get() because push.apply(_, arraylike) throws\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\n\n\nvar iframe,\n\telemdisplay = {\n\n\t\t// Support: Firefox\n\t\t// We have to pre-define these values for FF (#10227)\n\t\tHTML: \"block\",\n\t\tBODY: \"block\"\n\t};\n\n/**\n * Retrieve the actual display of a element\n * @param {String} name nodeName of the element\n * @param {Object} doc Document object\n */\n\n// Called only from within defaultDisplay\nfunction actualDisplay( name, doc ) {\n\tvar elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),\n\n\t\tdisplay = jQuery.css( elem[ 0 ], \"display\" );\n\n\t// We don't have any data stored on the element,\n\t// so use \"detach\" method as fast way to get rid of the element\n\telem.detach();\n\n\treturn display;\n}\n\n/**\n * Try to determine the default display value of an element\n * @param {String} nodeName\n */\nfunction defaultDisplay( nodeName ) {\n\tvar doc = document,\n\t\tdisplay = elemdisplay[ nodeName ];\n\n\tif ( !display ) {\n\t\tdisplay = actualDisplay( nodeName, doc );\n\n\t\t// If the simple way fails, read from inside an iframe\n\t\tif ( display === \"none\" || !display ) {\n\n\t\t\t// Use the already-created iframe if possible\n\t\t\tiframe = ( iframe || jQuery( \"<iframe frameborder='0' width='0' height='0'/>\" ) )\n\t\t\t\t.appendTo( doc.documentElement );\n\n\t\t\t// Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse\n\t\t\tdoc = iframe[ 0 ].contentDocument;\n\n\t\t\t// Support: IE\n\t\t\tdoc.write();\n\t\t\tdoc.close();\n\n\t\t\tdisplay = actualDisplay( nodeName, doc );\n\t\t\tiframe.detach();\n\t\t}\n\n\t\t// Store the correct default display\n\t\telemdisplay[ nodeName ] = display;\n\t}\n\n\treturn display;\n}\nvar rmargin = ( /^margin/ );\n\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE<=11+, Firefox<=30+ (#15098, #14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\nvar swap = function( elem, options, callback, args ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.apply( elem, args || [] );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\nvar documentElement = document.documentElement;\n\n\n\n( function() {\n\tvar pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, reliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE9-11+\n\t// Style of cloned element affects source element cloned (#8908)\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tcontainer.style.cssText = \"border:0;width:8px;height:0;top:0;left:-9999px;\" +\n\t\t\"padding:0;margin-top:1px;position:absolute\";\n\tcontainer.appendChild( div );\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computeStyleTests() {\n\t\tdiv.style.cssText =\n\n\t\t\t// Support: Firefox<29, Android 2.3\n\t\t\t// Vendor-prefix box-sizing\n\t\t\t\"-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;\" +\n\t\t\t\"position:relative;display:block;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"top:1%;width:50%\";\n\t\tdiv.innerHTML = \"\";\n\t\tdocumentElement.appendChild( container );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\t\treliableMarginLeftVal = divStyle.marginLeft === \"2px\";\n\t\tboxSizingReliableVal = divStyle.width === \"4px\";\n\n\t\t// Support: Android 4.0 - 4.3 only\n\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\tdiv.style.marginRight = \"50%\";\n\t\tpixelMarginRightVal = divStyle.marginRight === \"4px\";\n\n\t\tdocumentElement.removeChild( container );\n\t}\n\n\tjQuery.extend( support, {\n\t\tpixelPosition: function() {\n\n\t\t\t// This test is executed only once but we still do memoizing\n\t\t\t// since we can use the boxSizingReliable pre-computing.\n\t\t\t// No need to check if the test was already performed, though.\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\tboxSizingReliable: function() {\n\t\t\tif ( boxSizingReliableVal == null ) {\n\t\t\t\tcomputeStyleTests();\n\t\t\t}\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelMarginRight: function() {\n\n\t\t\t// Support: Android 4.0-4.3\n\t\t\t// We're checking for boxSizingReliableVal here instead of pixelMarginRightVal\n\t\t\t// since that compresses better and they're computed together anyway.\n\t\t\tif ( boxSizingReliableVal == null ) {\n\t\t\t\tcomputeStyleTests();\n\t\t\t}\n\t\t\treturn pixelMarginRightVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\n\t\t\t// Support: IE <=8 only, Android 4.0 - 4.3 only, Firefox <=3 - 37\n\t\t\tif ( boxSizingReliableVal == null ) {\n\t\t\t\tcomputeStyleTests();\n\t\t\t}\n\t\t\treturn reliableMarginLeftVal;\n\t\t},\n\t\treliableMarginRight: function() {\n\n\t\t\t// Support: Android 2.3\n\t\t\t// Check if div with explicit width and no margin-right incorrectly\n\t\t\t// gets computed margin-right based on width of container. (#3333)\n\t\t\t// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right\n\t\t\t// This support function is only executed once so no memoizing is needed.\n\t\t\tvar ret,\n\t\t\t\tmarginDiv = div.appendChild( document.createElement( \"div\" ) );\n\n\t\t\t// Reset CSS: box-sizing; display; margin; border; padding\n\t\t\tmarginDiv.style.cssText = div.style.cssText =\n\n\t\t\t\t// Support: Android 2.3\n\t\t\t\t// Vendor-prefix box-sizing\n\t\t\t\t\"-webkit-box-sizing:content-box;box-sizing:content-box;\" +\n\t\t\t\t\"display:block;margin:0;border:0;padding:0\";\n\t\t\tmarginDiv.style.marginRight = marginDiv.style.width = \"0\";\n\t\t\tdiv.style.width = \"1px\";\n\t\t\tdocumentElement.appendChild( container );\n\n\t\t\tret = !parseFloat( window.getComputedStyle( marginDiv ).marginRight );\n\n\t\t\tdocumentElement.removeChild( container );\n\t\t\tdiv.removeChild( marginDiv );\n\n\t\t\treturn ret;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\tret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined;\n\n\t// Support: Opera 12.1x only\n\t// Fall back to style even without computed\n\t// computed is undefined for elems on document fragments\n\tif ( ( ret === \"\" || ret === undefined ) && !jQuery.contains( elem.ownerDocument, elem ) ) {\n\t\tret = jQuery.style( elem, name );\n\t}\n\n\t// Support: IE9\n\t// getPropertyValue is only needed for .css('filter') (#12537)\n\tif ( computed ) {\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// http://dev.w3.org/csswg/cssom/#resolved-values\n\t\tif ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE9-11+\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t},\n\n\tcssPrefixes = [ \"Webkit\", \"O\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style;\n\n// Return a css property mapped to a potentially vendor prefixed property\nfunction vendorPropName( name ) {\n\n\t// Shortcut for names that are not vendor prefixed\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\nfunction setPositiveNumber( elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {\n\tvar i = extra === ( isBorderBox ? \"border\" : \"content\" ) ?\n\n\t\t// If we already have the right measurement, avoid augmentation\n\t\t4 :\n\n\t\t// Otherwise initialize for horizontal or vertical properties\n\t\tname === \"width\" ? 1 : 0,\n\n\t\tval = 0;\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin, so add it if we want it\n\t\tif ( extra === \"margin\" ) {\n\t\t\tval += jQuery.css( elem, extra + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\tif ( isBorderBox ) {\n\n\t\t\t// border-box includes padding, so remove it if we want content\n\t\t\tif ( extra === \"content\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// At this point, extra isn't border nor margin, so remove border\n\t\t\tif ( extra !== \"margin\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t} else {\n\n\t\t\t// At this point, extra isn't content, so add padding\n\t\t\tval += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// At this point, extra isn't content nor padding, so add border\n\t\t\tif ( extra !== \"padding\" ) {\n\t\t\t\tval += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn val;\n}\n\nfunction getWidthOrHeight( elem, name, extra ) {\n\n\t// Start with offset property, which is equivalent to the border-box value\n\tvar valueIsBorderBox = true,\n\t\tval = name === \"width\" ? elem.offsetWidth : elem.offsetHeight,\n\t\tstyles = getStyles( elem ),\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t// Support: IE11 only\n\t// In IE 11 fullscreen elements inside of an iframe have\n\t// 100x too small dimensions (gh-1764).\n\tif ( document.msFullscreenElement && window.top !== window ) {\n\n\t\t// Support: IE11 only\n\t\t// Running getBoundingClientRect on a disconnected node\n\t\t// in IE throws an error.\n\t\tif ( elem.getClientRects().length ) {\n\t\t\tval = Math.round( elem.getBoundingClientRect()[ name ] * 100 );\n\t\t}\n\t}\n\n\t// Some non-html elements return undefined for offsetWidth, so check for null/undefined\n\t// svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285\n\t// MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668\n\tif ( val <= 0 || val == null ) {\n\n\t\t// Fall back to computed then uncomputed css if necessary\n\t\tval = curCSS( elem, name, styles );\n\t\tif ( val < 0 || val == null ) {\n\t\t\tval = elem.style[ name ];\n\t\t}\n\n\t\t// Computed unit is not pixels. Stop here and return.\n\t\tif ( rnumnonpx.test( val ) ) {\n\t\t\treturn val;\n\t\t}\n\n\t\t// Check for style in case a browser which returns unreliable values\n\t\t// for getComputedStyle silently falls back to the reliable elem.style\n\t\tvalueIsBorderBox = isBorderBox &&\n\t\t\t( support.boxSizingReliable() || val === elem.style[ name ] );\n\n\t\t// Normalize \"\", auto, and prepare for extra\n\t\tval = parseFloat( val ) || 0;\n\t}\n\n\t// Use the active box-sizing model to add/subtract irrelevant styles\n\treturn ( val +\n\t\taugmentWidthOrHeight(\n\t\t\telem,\n\t\t\tname,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles\n\t\t)\n\t) + \"px\";\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem, hidden,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tvalues[ index ] = dataPriv.get( elem, \"olddisplay\" );\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Reset the inline display of this element to learn if it is\n\t\t\t// being hidden by cascaded rules or not\n\t\t\tif ( !values[ index ] && display === \"none\" ) {\n\t\t\t\telem.style.display = \"\";\n\t\t\t}\n\n\t\t\t// Set elements which have been overridden with display: none\n\t\t\t// in a stylesheet to whatever the default browser style is\n\t\t\t// for such an element\n\t\t\tif ( elem.style.display === \"\" && isHidden( elem ) ) {\n\t\t\t\tvalues[ index ] = dataPriv.access(\n\t\t\t\t\telem,\n\t\t\t\t\t\"olddisplay\",\n\t\t\t\t\tdefaultDisplay( elem.nodeName )\n\t\t\t\t);\n\t\t\t}\n\t\t} else {\n\t\t\thidden = isHidden( elem );\n\n\t\t\tif ( display !== \"none\" || !hidden ) {\n\t\t\t\tdataPriv.set(\n\t\t\t\t\telem,\n\t\t\t\t\t\"olddisplay\",\n\t\t\t\t\thidden ? display : jQuery.css( elem, \"display\" )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of most of the elements in a second loop\n\t// to avoid the constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\t\tif ( !show || elem.style.display === \"none\" || elem.style.display === \"\" ) {\n\t\t\telem.style.display = show ? values[ index ] || \"\" : \"none\";\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"animationIterationCount\": true,\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"flexGrow\": true,\n\t\t\"flexShrink\": true,\n\t\t\"fontWeight\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {\n\t\t\"float\": \"cssFloat\"\n\t},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = jQuery.camelCase( name ),\n\t\t\tstyle = elem.style;\n\n\t\tname = jQuery.cssProps[ origName ] ||\n\t\t\t( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName );\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (#7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (#7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\tif ( type === \"number\" ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// Support: IE9-11+\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tstyle[ name ] = value;\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = jQuery.camelCase( name );\n\n\t\t// Make sure that we're working with the right name\n\t\tname = jQuery.cssProps[ origName ] ||\n\t\t\t( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName );\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( i, name ) {\n\tjQuery.cssHooks[ name ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\t\t\t\t\telem.offsetWidth === 0 ?\n\t\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\t\treturn getWidthOrHeight( elem, name, extra );\n\t\t\t\t\t\t} ) :\n\t\t\t\t\t\tgetWidthOrHeight( elem, name, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = extra && getStyles( elem ),\n\t\t\t\tsubtract = extra && augmentWidthOrHeight(\n\t\t\t\t\telem,\n\t\t\t\t\tname,\n\t\t\t\t\textra,\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\t\tstyles\n\t\t\t\t);\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ name ] = value;\n\t\t\t\tvalue = jQuery.css( elem, name );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// Support: Android 2.3\njQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn swap( elem, { \"display\": \"inline-block\" },\n\t\t\t\tcurCSS, [ elem, \"marginRight\" ] );\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( !rmargin.test( prefix ) ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( jQuery.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t},\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHidden( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 &&\n\t\t\t\t( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null ||\n\t\t\t\t\tjQuery.cssHooks[ tween.prop ] ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE9\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back Compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, timerId,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = jQuery.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4 ; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\t/* jshint validthis: true */\n\tvar prop, value, toggle, tween, hooks, oldfire, display, checkDisplay,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHidden( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Handle queue: false promises\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Height/width overflow pass\n\tif ( elem.nodeType === 1 && ( \"height\" in props || \"width\" in props ) ) {\n\n\t\t// Make sure that nothing sneaks out\n\t\t// Record all 3 overflow attributes because IE9-10 do not\n\t\t// change the overflow attribute when overflowX and\n\t\t// overflowY are set to the same value\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Set display property to inline-block for height/width\n\t\t// animations on inline elements that are having width/height animated\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\n\t\t// Test default display if display is currently \"none\"\n\t\tcheckDisplay = display === \"none\" ?\n\t\t\tdataPriv.get( elem, \"olddisplay\" ) || defaultDisplay( elem.nodeName ) : display;\n\n\t\tif ( checkDisplay === \"inline\" && jQuery.css( elem, \"float\" ) === \"none\" ) {\n\t\t\tstyle.display = \"inline-block\";\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// show/hide pass\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.exec( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// If there is dataShow left over from a stopped hide or show\n\t\t\t\t// and we are going to proceed with show, we should pretend to be hidden\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\n\t\t// Any non-fx value stops us from restoring the original display value\n\t\t} else {\n\t\t\tdisplay = undefined;\n\t\t}\n\t}\n\n\tif ( !jQuery.isEmptyObject( orig ) ) {\n\t\tif ( dataShow ) {\n\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\thidden = dataShow.hidden;\n\t\t\t}\n\t\t} else {\n\t\t\tdataShow = dataPriv.access( elem, \"fxshow\", {} );\n\t\t}\n\n\t\t// Store state if its toggle - enables .stop().toggle() to \"reverse\"\n\t\tif ( toggle ) {\n\t\t\tdataShow.hidden = !hidden;\n\t\t}\n\t\tif ( hidden ) {\n\t\t\tjQuery( elem ).show();\n\t\t} else {\n\t\t\tanim.done( function() {\n\t\t\t\tjQuery( elem ).hide();\n\t\t\t} );\n\t\t}\n\t\tanim.done( function() {\n\t\t\tvar prop;\n\n\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\tfor ( prop in orig ) {\n\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t}\n\t\t} );\n\t\tfor ( prop in orig ) {\n\t\t\ttween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\n\t\t\tif ( !( prop in dataShow ) ) {\n\t\t\t\tdataShow[ prop ] = tween.start;\n\t\t\t\tif ( hidden ) {\n\t\t\t\t\ttween.end = tween.start;\n\t\t\t\t\ttween.start = prop === \"width\" || prop === \"height\" ? 1 : 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t// If this is a noop like .hide().hide(), restore an overwritten display value\n\t} else if ( ( display === \"none\" ? defaultDisplay( elem.nodeName ) : display ) === \"inline\" ) {\n\t\tstyle.display = display;\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = jQuery.camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( jQuery.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length ; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t} else {\n\t\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length ; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length ; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( jQuery.isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tjQuery.proxy( result.stop, result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( jQuery.isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\t// attach callbacks from options\n\treturn animation.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( jQuery.isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnotwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length ; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tjQuery.isFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !jQuery.isFunction( easing ) && easing\n\t};\n\n\topt.duration = jQuery.fx.off ? 0 : typeof opt.duration === \"number\" ?\n\t\topt.duration : opt.duration in jQuery.fx.speeds ?\n\t\t\tjQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( jQuery.isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHidden ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue && type !== false ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = jQuery.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Checks the timer has not already been removed\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tif ( timer() ) {\n\t\tjQuery.fx.start();\n\t} else {\n\t\tjQuery.timers.pop();\n\t}\n};\n\njQuery.fx.interval = 13;\njQuery.fx.start = function() {\n\tif ( !timerId ) {\n\t\ttimerId = window.setInterval( jQuery.fx.tick, jQuery.fx.interval );\n\t}\n};\n\njQuery.fx.stop = function() {\n\twindow.clearInterval( timerId );\n\n\ttimerId = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\n// http://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: iOS<=5.1, Android<=4.2+\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE<=11+\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: Android<=2.3\n\t// Options inside disabled selects are incorrectly marked as disabled\n\tselect.disabled = true;\n\tsupport.optDisabled = !opt.disabled;\n\n\t// Support: IE<=11+\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// All attributes are lowercase\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\tname = name.toLowerCase();\n\t\t\thooks = jQuery.attrHooks[ name ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tjQuery.nodeName( elem, \"input\" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name, propName,\n\t\t\ti = 0,\n\t\t\tattrNames = value && value.match( rnotwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\tpropName = jQuery.propFix[ name ] || name;\n\n\t\t\t\t// Boolean attributes get special treatment (#10870)\n\t\t\t\tif ( jQuery.expr.match.bool.test( name ) ) {\n\n\t\t\t\t\t// Set corresponding property to false\n\t\t\t\t\telem[ propName ] = false;\n\t\t\t\t}\n\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle;\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ name ];\n\t\t\tattrHandle[ name ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tname.toLowerCase() :\n\t\t\t\tnull;\n\t\t\tattrHandle[ name ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\t// Use proper attribute retrieval(#12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\treturn tabindex ?\n\t\t\t\t\tparseInt( tabindex, 10 ) :\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\t\trclickable.test( elem.nodeName ) && elem.href ?\n\t\t\t\t\t\t\t0 :\n\t\t\t\t\t\t\t-1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11 only\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n\n\n\nvar rclass = /[\\t\\r\\n\\f]/g;\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( typeof value === \"string\" && value ) {\n\t\t\tclasses = value.match( rnotwhite ) || [];\n\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\t\t\t\tcur = elem.nodeType === 1 &&\n\t\t\t\t\t( \" \" + curValue + \" \" ).replace( rclass, \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = jQuery.trim( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tif ( typeof value === \"string\" && value ) {\n\t\t\tclasses = value.match( rnotwhite ) || [];\n\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 &&\n\t\t\t\t\t( \" \" + curValue + \" \" ).replace( rclass, \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = jQuery.trim( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value;\n\n\t\tif ( typeof stateVal === \"boolean\" && type === \"string\" ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar className, i, self, classNames;\n\n\t\t\tif ( type === \"string\" ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\ti = 0;\n\t\t\t\tself = jQuery( this );\n\t\t\t\tclassNames = value.match( rnotwhite ) || [];\n\n\t\t\t\twhile ( ( className = classNames[ i++ ] ) ) {\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, \"__className__\", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( \"class\",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\tdataPriv.get( this, \"__className__\" ) || \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + getClass( elem ) + \" \" ).replace( rclass, \" \" )\n\t\t\t\t\t.indexOf( className ) > -1\n\t\t\t) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\nvar rreturn = /\\r/g,\n\trspaces = /[\\x20\\t\\r\\n\\f]+/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, isFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\treturn typeof ret === \"string\" ?\n\n\t\t\t\t\t// Handle most common string cases\n\t\t\t\t\tret.replace( rreturn, \"\" ) :\n\n\t\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\t\tret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tisFunction = jQuery.isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( isFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( jQuery.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE10-11+\n\t\t\t\t\t// option.text throws exceptions (#14686, #14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tjQuery.trim( jQuery.text( elem ) ).replace( rspaces, \" \" );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\" || index < 0,\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length,\n\t\t\t\t\ti = index < 0 ?\n\t\t\t\t\t\tmax :\n\t\t\t\t\t\tone ? index : 0;\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// IE8-9 doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t( support.optDisabled ?\n\t\t\t\t\t\t\t\t!option.disabled : option.getAttribute( \"disabled\" ) === null ) &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!jQuery.nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( jQuery.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/;\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || {} )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\t\t\t\t\telem[ type ]();\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\n\t\t\t\t// Previously, `originalEvent: {}` was set here, so stopPropagation call\n\t\t\t\t// would not be triggered on donor event, since in our own\n\t\t\t\t// jQuery.event.stopPropagation function we had a check for existence of\n\t\t\t\t// originalEvent.stopPropagation method, so, consequently it would be a noop.\n\t\t\t\t//\n\t\t\t\t// But now, this \"simulate\" function is used only for events\n\t\t\t\t// for which stopPropagation() is noop, so there is no need for that anymore.\n\t\t\t\t//\n\t\t\t\t// For the 1.x branch though, guard for \"click\" and \"submit\"\n\t\t\t\t// events is still used, but was moved to jQuery.event.stopPropagation function\n\t\t\t\t// because `originalEvent` should point to the original event for the constancy\n\t\t\t\t// with other events and for more focused logic\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\n\t\tif ( e.isDefaultPrevented() ) {\n\t\t\tevent.preventDefault();\n\t\t}\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\njQuery.each( ( \"blur focus focusin focusout load resize scroll unload click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup error contextmenu\" ).split( \" \" ),\n\tfunction( i, name ) {\n\n\t// Handle event binding\n\tjQuery.fn[ name ] = function( data, fn ) {\n\t\treturn arguments.length > 0 ?\n\t\t\tthis.on( name, null, data, fn ) :\n\t\t\tthis.trigger( name );\n\t};\n} );\n\njQuery.fn.extend( {\n\thover: function( fnOver, fnOut ) {\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t}\n} );\n\n\n\n\nsupport.focusin = \"onfocusin\" in window;\n\n\n// Support: Firefox\n// Firefox doesn't have focus(in | out) events\n// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n//\n// Support: Chrome, Safari\n// focus(in | out) events fire after focus & blur events,\n// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n// Related ticket - https://code.google.com/p/chromium/issues/detail?id=449857\nif ( !support.focusin ) {\n\tjQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );\n\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.access( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tdataPriv.remove( doc, fix );\n\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.access( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t} );\n}\nvar location = window.location;\n\nvar nonce = jQuery.now();\n\nvar rquery = ( /\\?/ );\n\n\n\n// Support: Android 2.3\n// Workaround failure to string-cast null input\njQuery.parseJSON = function( data ) {\n\treturn JSON.parse( data + \"\" );\n};\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE9\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {\n\t\txml = undefined;\n\t}\n\n\tif ( !xml || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\tjQuery.error( \"Invalid XML: \" + data );\n\t}\n\treturn xml;\n};\n\n\nvar\n\trhash = /#.*$/,\n\trts = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t * - BEFORE asking for a transport\n\t * - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document.createElement( \"a\" );\n\toriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || [];\n\n\t\tif ( jQuery.isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": jQuery.parseJSON,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// The jqXHR state\n\t\t\tstate = 0,\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( state === 2 ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match;\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn state === 2 ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tvar lname = name.toLowerCase();\n\t\t\t\t\tif ( !state ) {\n\t\t\t\t\t\tname = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( !state ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( state < 2 ) {\n\t\t\t\t\t\t\tfor ( code in map ) {\n\n\t\t\t\t\t\t\t\t// Lazy-add the new callback in a way that preserves old ones\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR ).complete = completeDeferred.add;\n\t\tjqXHR.success = jqXHR.done;\n\t\tjqXHR.error = jqXHR.fail;\n\n\t\t// Remove hash character (#7531: and string promotion)\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (#10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" ).replace( rhash, \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket #12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = jQuery.trim( s.dataType || \"*\" ).toLowerCase().match( rnotwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document.createElement( \"a\" );\n\n\t\t\t// Support: IE8-11+\n\t\t\t// IE throws exception if url is malformed, e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE8-11+\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( state === 2 ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\tcacheURL = s.url;\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// If data is available, append data to url\n\t\t\tif ( s.data ) {\n\t\t\t\tcacheURL = ( s.url += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data );\n\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add anti-cache in url if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\ts.url = rts.test( cacheURL ) ?\n\n\t\t\t\t\t// If there is already a '_' parameter, set its value\n\t\t\t\t\tcacheURL.replace( rts, \"$1_=\" + nonce++ ) :\n\n\t\t\t\t\t// Otherwise add one to the end\n\t\t\t\t\tcacheURL + ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + nonce++;\n\t\t\t}\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tfor ( i in { success: 1, error: 1, complete: 1 } ) {\n\t\t\tjqXHR[ i ]( s[ i ] );\n\t\t}\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( state === 2 ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tstate = 1;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Propagate exception as error if not done\n\t\t\t\tif ( state < 2 ) {\n\t\t\t\t\tdone( -1, e );\n\n\t\t\t\t// Simply rethrow otherwise\n\t\t\t\t} else {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Called once\n\t\t\tif ( state === 2 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// State is \"done\" now\n\t\t\tstate = 2;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( jQuery.isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\n\njQuery._evalUrl = function( url ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (#11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tasync: false,\n\t\tglobal: false,\n\t\t\"throws\": true\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapAll( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( this[ 0 ] ) {\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar isFunction = jQuery.isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function() {\n\t\treturn this.parent().each( function() {\n\t\t\tif ( !jQuery.nodeName( this, \"body\" ) ) {\n\t\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t\t}\n\t\t} ).end();\n\t}\n} );\n\n\njQuery.expr.filters.hidden = function( elem ) {\n\treturn !jQuery.expr.filters.visible( elem );\n};\njQuery.expr.filters.visible = function( elem ) {\n\n\t// Support: Opera <= 12.12\n\t// Opera reports offsetWidths and offsetHeights less than zero on some elements\n\t// Use OR instead of AND as the element is not visible if either is true\n\t// See tickets #10406 and #13132\n\treturn elem.offsetWidth > 0 || elem.offsetHeight > 0 || elem.getClientRects().length > 0;\n};\n\n\n\n\nvar r20 = /%20/g,\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( jQuery.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && jQuery.type( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, value ) {\n\n\t\t\t// If value is a function, invoke it and return its value\n\t\t\tvalue = jQuery.isFunction( value ) ? value() : ( value == null ? \"\" : value );\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" + encodeURIComponent( value );\n\t\t};\n\n\t// Set traditional to true for jQuery <= 1.3.2 behavior.\n\tif ( traditional === undefined ) {\n\t\ttraditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" ).replace( r20, \"+\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} )\n\t\t.filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} )\n\t\t.map( function( i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\treturn val == null ?\n\t\t\t\tnull :\n\t\t\t\tjQuery.isArray( val ) ?\n\t\t\t\t\tjQuery.map( val, function( val ) {\n\t\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t\t} ) :\n\t\t\t\t\t{ name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE9\n\t\t// #1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback, errorCallback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\txhr.open(\n\t\t\t\t\toptions.type,\n\t\t\t\t\toptions.url,\n\t\t\t\t\toptions.async,\n\t\t\t\t\toptions.username,\n\t\t\t\t\toptions.password\n\t\t\t\t);\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\n\t\t\t\t\t\t\t\t// Support: IE9\n\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\tif ( typeof xhr.status !== \"number\" ) {\n\t\t\t\t\t\t\t\t\tcomplete( 0, \"error\" );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see #8605, #14207\n\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t// Support: IE9 only\n\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) !== \"text\" ||\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\terrorCallback = xhr.onerror = callback( \"error\" );\n\n\t\t\t\t// Support: IE9\n\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t// to handle uncaught aborts\n\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t} else {\n\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = callback( \"abort\" );\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// #14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\n\t// This transport only deals with cross domain requests\n\tif ( s.crossDomain ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"<script>\" ).prop( {\n\t\t\t\t\tcharset: s.scriptCharset,\n\t\t\t\t\tsrc: s.url\n\t\t\t\t} ).on(\n\t\t\t\t\t\"load error\",\n\t\t\t\t\tcallback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === \"error\" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\tdocument.head.appendChild( script[ 0 ] );\n\t\t\t},\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup( {\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n} );\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t( s.contentType || \"\" )\n\t\t\t\t\t.indexOf( \"application/x-www-form-urlencoded\" ) === 0 &&\n\t\t\t\trjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[ \"script json\" ] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// Force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always( function() {\n\n\t\t\t// If previous value didn't exist - remove it\n\t\t\tif ( overwritten === undefined ) {\n\t\t\t\tjQuery( window ).removeProp( callbackName );\n\n\t\t\t// Otherwise restore preexisting value\n\t\t\t} else {\n\t\t\t\twindow[ callbackName ] = overwritten;\n\t\t\t}\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\n\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// Save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && jQuery.isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t} );\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n} );\n\n\n\n\n// Argument \"data\" should be string of html\n// context (optional): If specified, the fragment will be created in this context,\n// defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\tcontext = context || document;\n\n\tvar parsed = rsingleTag.exec( data ),\n\t\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[ 1 ] ) ];\n\t}\n\n\tparsed = buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\n// Keep a copy of the old load method\nvar _load = jQuery.fn.load;\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tif ( typeof url !== \"string\" && _load ) {\n\t\treturn _load.apply( this, arguments );\n\t}\n\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf( \" \" );\n\n\tif ( off > -1 ) {\n\t\tselector = jQuery.trim( url.slice( off ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( jQuery.isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax( {\n\t\t\turl: url,\n\n\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t// Make value of this field explicit since\n\t\t\t// user can override it through ajaxSetup method\n\t\t\ttype: type || \"GET\",\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t} ).done( function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery( \"<div>\" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t// but they are ignored because response was set above.\n\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t} ).always( callback && function( jqXHR, status ) {\n\t\t\tself.each( function() {\n\t\t\t\tcallback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t} );\n\t\t} );\n\t}\n\n\treturn this;\n};\n\n\n\n\n// Attach a bunch of functions for handling common AJAX events\njQuery.each( [\n\t\"ajaxStart\",\n\t\"ajaxStop\",\n\t\"ajaxComplete\",\n\t\"ajaxError\",\n\t\"ajaxSuccess\",\n\t\"ajaxSend\"\n], function( i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n} );\n\n\n\n\njQuery.expr.filters.animated = function( elem ) {\n\treturn jQuery.grep( jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t} ).length;\n};\n\n\n\n\n/**\n * Gets a window from an element\n */\nfunction getWindow( elem ) {\n\treturn jQuery.isWindow( elem ) ? elem : elem.nodeType === 9 && elem.defaultView;\n}\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// Set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf( \"auto\" ) > -1;\n\n\t\t// Need to be able to calculate position if either\n\t\t// top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( jQuery.isFunction( options ) ) {\n\n\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\toptions = options.call( elem, i, jQuery.extend( {}, curOffset ) );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend( {\n\toffset: function( options ) {\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each( function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t} );\n\t\t}\n\n\t\tvar docElem, win,\n\t\t\telem = this[ 0 ],\n\t\t\tbox = { top: 0, left: 0 },\n\t\t\tdoc = elem && elem.ownerDocument;\n\n\t\tif ( !doc ) {\n\t\t\treturn;\n\t\t}\n\n\t\tdocElem = doc.documentElement;\n\n\t\t// Make sure it's not a disconnected DOM node\n\t\tif ( !jQuery.contains( docElem, elem ) ) {\n\t\t\treturn box;\n\t\t}\n\n\t\tbox = elem.getBoundingClientRect();\n\t\twin = getWindow( doc );\n\t\treturn {\n\t\t\ttop: box.top + win.pageYOffset - docElem.clientTop,\n\t\t\tleft: box.left + win.pageXOffset - docElem.clientLeft\n\t\t};\n\t},\n\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// Fixed elements are offset from window (parentOffset = {top:0, left: 0},\n\t\t// because it is its only offset parent\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\n\t\t\t// Assume getBoundingClientRect is there when computed position is fixed\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\n\t\t\t// Get *real* offsetParent\n\t\t\toffsetParent = this.offsetParent();\n\n\t\t\t// Get correct offsets\n\t\t\toffset = this.offset();\n\t\t\tif ( !jQuery.nodeName( offsetParent[ 0 ], \"html\" ) ) {\n\t\t\t\tparentOffset = offsetParent.offset();\n\t\t\t}\n\n\t\t\t// Add offsetParent borders\n\t\t\tparentOffset.top += jQuery.css( offsetParent[ 0 ], \"borderTopWidth\", true );\n\t\t\tparentOffset.left += jQuery.css( offsetParent[ 0 ], \"borderLeftWidth\", true );\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\t// This method will return documentElement in the following cases:\n\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t// documentElement of the parent window\n\t// 2) For the hidden or detached element\n\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t//\n\t// but those exceptions were never presented as a real life use-cases\n\t// and might be considered as more preferable results.\n\t//\n\t// This logic, however, is not guaranteed and can change at any point in the future\n\toffsetParent: function() {\n\t\treturn this.map( function() {\n\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\twhile ( offsetParent && jQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || documentElement;\n\t\t} );\n\t}\n} );\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = \"pageYOffset\" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\t\t\tvar win = getWindow( elem );\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length );\n\t};\n} );\n\n// Support: Safari<7-8+, Chrome<37-44+\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// Blink bug: https://code.google.com/p/chromium/issues/detail?id=229280\n// getComputedStyle returns percent when specified for top/left/bottom/right;\n// rather than make the css module depend on the offset module, just check for it here\njQuery.each( [ \"top\", \"left\" ], function( i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\n\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n} );\n\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( { padding: \"inner\" + name, content: type, \"\": \"outer\" + name },\n\t\tfunction( defaultExtra, funcName ) {\n\n\t\t// Margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( jQuery.isWindow( elem ) ) {\n\n\t\t\t\t\t// As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there\n\t\t\t\t\t// isn't a whole lot we can do. See pull request at this URL for discussion:\n\t\t\t\t\t// https://github.com/jquery/jquery/pull/764\n\t\t\t\t\treturn elem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable, null );\n\t\t};\n\t} );\n} );\n\n\njQuery.fn.extend( {\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ?\n\t\t\tthis.off( selector, \"**\" ) :\n\t\t\tthis.off( types, selector || \"**\", fn );\n\t},\n\tsize: function() {\n\t\treturn this.length;\n\t}\n} );\n\njQuery.fn.andSelf = jQuery.fn.addBack;\n\n\n\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t} );\n}\n\n\n\nvar\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in AMD\n// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (#13566)\nif ( !noGlobal ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\nreturn jQuery;\n}));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/jquery/dist/jquery.js\n ** module id = 3\n ** module chunks = 1 2 3 5 6\n **/","/**\r\n * Created by gavorhes on 12/10/2015.\r\n */\r\n\r\n\r\n/**\r\n * create a namespace on the gv object\r\n * @param {string} namespace to create\r\n * @returns {object} object representing the namespace\r\n */\r\nfunction provide(namespace){\r\n \"use strict\";\r\n if (typeof window['gv'] == 'undefined'){\r\n window['gv'] = {};\r\n }\r\n\r\n let parts = namespace.split('.');\r\n let nameSpace = window['gv'];\r\n\r\n for (let i=0; i< parts.length; i++){\r\n let newObject = nameSpace[parts[i]];\r\n\r\n if (typeof newObject == 'undefined'){\r\n nameSpace[parts[i]] = {};\r\n }\r\n\r\n nameSpace = nameSpace[parts[i]];\r\n }\r\n\r\n return nameSpace;\r\n}\r\n\r\nprovide('util');\r\nwindow['gv'].util.provide = provide;\r\n\r\nexport default provide;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/util/provide.ts\n **/","\"use strict\";\r\nexports.ol = require('../ol/ol-build');\r\n// // export default require('../ol/ol-build');\r\n//\r\n// const fish = 10;\r\n// export = fish;\r\n//\r\n//\r\n// export function cat(bird: string){\r\n// console.log('eat the fish')\r\n// }\r\n//\r\n// export function nice(eat: number){\r\n// console.log('eat that fish');\r\n// }\r\n//\r\n// export class Big{\r\n// glenn: string;\r\n//\r\n// constructor(isGlenn){\r\n// this.glenn = isGlenn;\r\n// }\r\n//\r\n// set isGlenn(f: string){\r\n// console.log(this.glenn)\r\n// }\r\n//\r\n// run(){\r\n// console.log(this.glenn + \" can run\");\r\n// }\r\n// }\r\n//\r\n// export namespace HereIt{\r\n//\r\n// export class Big2 {\r\n// glenn: string;\r\n//\r\n// constructor(isGlenn) {\r\n// this.glenn = isGlenn;\r\n// }\r\n//\r\n// set isGlenn(f: string) {\r\n// console.log(this.glenn)\r\n// }\r\n//\r\n// run() {\r\n// console.log(this.glenn + \" can run\");\r\n// }\r\n// }\r\n//\r\n//\r\n// } \r\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/custom-ol/lib/index.js\n ** module id = 5\n ** module chunks = 1 2 5\n **/","// OpenLayers 3. See http://openlayers.org/\r\n// License: https://raw.githubusercontent.com/openlayers/ol3/master/LICENSE.md\r\n;(function (root, factory) {\r\n if (typeof exports === \"object\") {\r\n module.exports = factory();\r\n } else if (typeof define === \"function\" && define.amd) {\r\n define([], factory);\r\n } else {\r\n root.ol = factory();\r\n }\r\n}(this, function () {\r\n var OPENLAYERS = {};\r\n var n,aa=this;\r\nfunction ba(){var a=aa.setImmediate,b=typeof a;if(\"object\"==b)if(a){if(a instanceof Array)return\"array\";if(a instanceof Object)return b;var c=Object.prototype.toString.call(a);if(\"[object Window]\"==c)return\"object\";if(\"[object Array]\"==c||\"number\"==typeof a.length&&\"undefined\"!=typeof a.splice&&\"undefined\"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable(\"splice\"))return\"array\";if(\"[object Function]\"==c||\"undefined\"!=typeof a.call&&\"undefined\"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable(\"call\"))return\"function\"}else return\"null\";\r\nelse if(\"function\"==b&&\"undefined\"==typeof a.call)return\"object\";return b}function ca(a,b,c){return a.call.apply(a.bind,arguments)}function da(a,b,c){if(!a)throw Error();if(2<arguments.length){var d=Array.prototype.slice.call(arguments,2);return function(){var c=Array.prototype.slice.call(arguments);Array.prototype.unshift.apply(c,d);return a.apply(b,c)}}return function(){return a.apply(b,arguments)}}\r\nfunction ea(a,b,c){ea=Function.prototype.bind&&-1!=Function.prototype.bind.toString().indexOf(\"native code\")?ca:da;return ea.apply(null,arguments)}function y(a,b){var c=a.split(\".\"),d=OPENLAYERS||aa;c[0]in d||!d.execScript||d.execScript(\"var \"+c[0]);for(var e;c.length&&(e=c.shift());)c.length||void 0===b?d[e]?d=d[e]:d=d[e]={}:d[e]=b};var fa;function B(a,b){a.prototype=Object.create(b.prototype);a.prototype.constructor=a}function I(){}function J(a){return a.ie||(a.ie=++ga)}var ga=0;if(\"undefined\"!==typeof window)var K=window;else\"undefined\"!==typeof global?K=global:\"undefined\"!==typeof self&&(K=self);function ha(a){this.message=\"Assertion failed. See /doc/errors/#\"+a+\" for details.\";this.code=a;this.name=\"AssertionError\"}B(ha,Error);function L(a,b){if(!a)throw new ha(b);};function ia(a,b,c){return Math.min(Math.max(a,b),c)}var ja=function(){var a;\"cosh\"in Math?a=Math.cosh:a=function(a){a=Math.exp(a);return(a+1/a)/2};return a}();function ka(a){L(0<a,29);return Math.pow(2,Math.ceil(Math.log(a)/Math.LN2))}function la(a,b){var c=a%b;return 0>c*b?c+b:c};function ma(a){return function(b){if(b)return[ia(b[0],a[0],a[2]),ia(b[1],a[1],a[3])]}}function na(a){return a};function oa(a,b,c){this.center=a;this.resolution=b;this.rotation=c};var pa=\"function\"===typeof Object.assign?Object.assign:function(a,b){if(!a||!a)throw new TypeError(\"Cannot convert undefined or null to object\");for(var c=Object(a),d=1,e=arguments.length;d<e;++d){var f=arguments[d];if(void 0!==f&&null!==f)for(var g in f)f.hasOwnProperty(g)&&(c[g]=f[g])}return c};function qa(a){for(var b in a)delete a[b]}function ra(a){var b=[],c;for(c in a)b.push(a[c]);return b}function sa(a){for(var b in a)return!1;return!b};function ta(a){function b(b){var d=a.listener,e=a.jc||a.target;a.mc&&M(a);return d.call(e,b)}return a.kc=b}function ua(a,b,c,d){for(var e,f=0,g=a.length;f<g;++f)if(e=a[f],e.listener===b&&e.jc===c)return d&&(e.deleteIndex=f),e}function va(a,b){var c=a.ha;return c?c[b]:void 0}function wa(a){var b=a.ha;b||(b=a.ha={});return b}\r\nfunction xa(a,b){var c=va(a,b);if(c){for(var d=0,e=c.length;d<e;++d)a.removeEventListener(b,c[d].kc),qa(c[d]);c.length=0;if(c=a.ha)delete c[b],0===Object.keys(c).length&&delete a.ha}}function R(a,b,c,d,e){var f=wa(a),g=f[b];g||(g=f[b]=[]);(f=ua(g,c,d,!1))?e||(f.mc=!1):(f={jc:d,mc:!!e,listener:c,target:a,type:b},a.addEventListener(b,ta(f)),g.push(f));return f}function ya(a,b,c,d){(a=va(a,b))&&(c=ua(a,c,d,!0))&&M(c)}\r\nfunction M(a){if(a&&a.target){a.target.removeEventListener(a.type,a.kc);var b=va(a.target,a.type);if(b){var c=\"deleteIndex\"in a?a.deleteIndex:b.indexOf(a);-1!==c&&b.splice(c,1);0===b.length&&xa(a.target,a.type)}qa(a)}}function za(a){var b=wa(a),c;for(c in b)xa(a,c)};function Aa(){}Aa.prototype.ra=!1;function Da(a){a.ra||(a.ra=!0,a.R())}Aa.prototype.R=I;function T(a){this.type=a;this.target=null}T.prototype.preventDefault=T.prototype.stopPropagation=function(){this.qe=!0};function Ea(a){a.stopPropagation()}function Fa(a){a.preventDefault()};function Ga(){this.ca={};this.K={};this.C={}}B(Ga,Aa);Ga.prototype.addEventListener=function(a,b){var c=this.C[a];c||(c=this.C[a]=[]);-1===c.indexOf(b)&&c.push(b)};function U(a,b){var c=\"string\"===typeof b?new T(b):b,d=c.type;c.target=a;var e=a.C[d],f;if(e){d in a.K||(a.K[d]=0,a.ca[d]=0);++a.K[d];for(var g=0,h=e.length;g<h;++g)if(!1===e[g].call(a,c)||c.qe){f=!1;break}--a.K[d];if(0===a.K[d]){c=a.ca[d];for(delete a.ca[d];c--;)a.removeEventListener(d,I);delete a.K[d]}return f}}Ga.prototype.R=function(){za(this)};\r\nfunction Ha(a,b){return b?b in a.C:0<Object.keys(a.C).length}Ga.prototype.removeEventListener=function(a,b){var c=this.C[a];if(c){var d=c.indexOf(b);a in this.ca?(c[d]=I,++this.ca[a]):(c.splice(d,1),0===c.length&&delete this.C[a])}};function Ia(){Ga.call(this);this.b=0}B(Ia,Ga);Ia.prototype.w=function(){++this.b;U(this,\"change\")};Ia.prototype.Y=function(a,b,c){if(Array.isArray(a)){for(var d=a.length,e=Array(d),f=0;f<d;++f)e[f]=R(this,a[f],b,c);return e}return R(this,a,b,c)};Ia.prototype.hd=function(a,b,c){if(Array.isArray(a)){for(var d=a.length,e=Array(d),f=0;f<d;++f)e[f]=R(this,a[f],b,c,!0);return e}return R(this,a,b,c,!0)};function Ja(a,b,c){T.call(this,a);this.key=b;this.oldValue=c}B(Ja,T);function V(a){Ia.call(this);J(this);this.M={};void 0!==a&&this.l(a)}B(V,Ia);var Ka={};function La(a){return Ka.hasOwnProperty(a)?Ka[a]:Ka[a]=\"change:\"+a}V.prototype.get=function(a){var b;this.M.hasOwnProperty(a)&&(b=this.M[a]);return b};V.prototype.Ea=function(){return pa({},this.M)};V.prototype.set=function(a,b,c){c?this.M[a]=b:(c=this.M[a],this.M[a]=b,c!==b&&(b=La(a),U(this,new Ja(b,a,c)),U(this,new Ja(\"propertychange\",a,c))))};\r\nV.prototype.l=function(a,b){for(var c in a)this.set(c,a[c],b)};function Ma(a,b){return a>b?1:a<b?-1:0}function Na(a,b,c){var d=a.length;if(a[0]<=b)return 0;if(!(b<=a[d-1]))if(0<c)for(c=1;c<d;++c){if(a[c]<b)return c-1}else if(0>c)for(c=1;c<d;++c){if(a[c]<=b)return c}else for(c=1;c<d;++c){if(a[c]==b)return c;if(a[c]<b)return a[c-1]-b<b-a[c]?c-1:c}return d-1}function Oa(a){return a.reduce(function(a,c){return Array.isArray(c)?a.concat(Oa(c)):a.concat(c)},[])}function Pa(a,b){var c,d=Array.isArray(b)?b:[b],e=d.length;for(c=0;c<e;c++)a[a.length]=d[c]}\r\nfunction Qa(a,b){var c=a.indexOf(b),d=-1<c;d&&a.splice(c,1);return d}function Ra(a,b){var c=a.length;if(c!==b.length)return!1;for(var d=0;d<c;d++)if(a[d]!==b[d])return!1;return!0}function Sa(a){var b=Ta,c=a.length,d=Array(a.length),e;for(e=0;e<c;e++)d[e]={index:e,value:a[e]};d.sort(function(a,c){return b(a.value,c.value)||a.index-c.index});for(e=0;e<a.length;e++)a[e]=d[e].value}function Ua(a,b){var c=b||Ma;return a.every(function(b,e){if(0===e)return!0;var f=c(a[e-1],b);return!(0<f||0===f)})};function Va(a){return function(b,c,d){if(void 0!==b)return b=Na(a,b,d),b=ia(b+c,0,a.length-1),c=Math.floor(b),b!=c&&c<a.length-1?a[c]/Math.pow(a[c]/a[c+1],b-c):a[c]}}function Wa(a,b,c){return function(d,e,f){if(void 0!==d)return d=Math.max(Math.floor(Math.log(b/d)/Math.log(a)+(-f/2+.5))+e,0),void 0!==c&&(d=Math.min(d,c)),b/Math.pow(a,d)}};function Xa(a){if(void 0!==a)return 0}function Ya(a,b){if(void 0!==a)return a+b}function Za(a){var b=2*Math.PI/a;return function(a,d){if(void 0!==a)return a=Math.floor((a+d)/b+.5)*b}}function $a(){var a=5*Math.PI/180;return function(b,c){if(void 0!==b)return Math.abs(b+c)<=a?0:b+c}};function ab(a,b){a[0]+=b[0];a[1]+=b[1]}function bb(a,b){var c=Math.cos(b),d=Math.sin(b),e=a[1]*c+a[0]*d;a[0]=a[0]*c-a[1]*d;a[1]=e};function cb(a){for(var b=db(),c=0,d=a.length;c<d;++c)eb(b,a[c]);return b}function fb(a,b,c){return c?(c[0]=a[0]-b,c[1]=a[1]-b,c[2]=a[2]+b,c[3]=a[3]+b,c):[a[0]-b,a[1]-b,a[2]+b,a[3]+b]}function gb(a,b){return b?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3],b):a.slice()}function hb(a,b){return a[0]<=b[0]&&b[2]<=a[2]&&a[1]<=b[1]&&b[3]<=a[3]}function db(){return[Infinity,Infinity,-Infinity,-Infinity]}function ib(a,b,c,d,e){return e?(e[0]=a,e[1]=b,e[2]=c,e[3]=d,e):[a,b,c,d]}\r\nfunction jb(a){return ib(Infinity,Infinity,-Infinity,-Infinity,a)}function kb(a,b){var c=a[0],d=a[1];return ib(c,d,c,d,b)}function lb(a,b){return a[0]==b[0]&&a[2]==b[2]&&a[1]==b[1]&&a[3]==b[3]}function mb(a,b){b[0]<a[0]&&(a[0]=b[0]);b[2]>a[2]&&(a[2]=b[2]);b[1]<a[1]&&(a[1]=b[1]);b[3]>a[3]&&(a[3]=b[3])}function eb(a,b){b[0]<a[0]&&(a[0]=b[0]);b[0]>a[2]&&(a[2]=b[0]);b[1]<a[1]&&(a[1]=b[1]);b[1]>a[3]&&(a[3]=b[1])}\r\nfunction nb(a,b,c,d,e){for(;c<d;c+=e){var f=a,g=b[c],h=b[c+1];f[0]=Math.min(f[0],g);f[1]=Math.min(f[1],h);f[2]=Math.max(f[2],g);f[3]=Math.max(f[3],h)}return a}function ob(a){var b=0;pb(a)||(b=qb(a)*rb(a));return b}function sb(a){return[a[0],a[1]]}function tb(a){return[(a[0]+a[2])/2,(a[1]+a[3])/2]}\r\nfunction ub(a,b,c,d,e){var f=b*d[0]/2;d=b*d[1]/2;b=Math.cos(c);var g=Math.sin(c);c=f*b;f*=g;b*=d;var h=d*g,k=a[0],l=a[1];a=k-c+h;d=k-c-h;g=k+c-h;c=k+c+h;var h=l-f-b,k=l-f+b,m=l+f+b,f=l+f-b;return ib(Math.min(a,d,g,c),Math.min(h,k,m,f),Math.max(a,d,g,c),Math.max(h,k,m,f),e)}function rb(a){return a[3]-a[1]}function vb(a,b){var c=db();wb(a,b)&&(c[0]=a[0]>b[0]?a[0]:b[0],c[1]=a[1]>b[1]?a[1]:b[1],c[2]=a[2]<b[2]?a[2]:b[2],c[3]=a[3]<b[3]?a[3]:b[3]);return c}function xb(a){return[a[0],a[3]]}\r\nfunction qb(a){return a[2]-a[0]}function wb(a,b){return a[0]<=b[2]&&a[2]>=b[0]&&a[1]<=b[3]&&a[3]>=b[1]}function pb(a){return a[2]<a[0]||a[3]<a[1]};function yb(){return!0}function zb(){return!1};/*\r\n\r\n Latitude/longitude spherical geodesy formulae taken from\r\n http://www.movable-type.co.uk/scripts/latlong.html\r\n Licensed under CC-BY-3.0.\r\n*/\r\nfunction Ab(a){this.radius=a}function Bb(a,b){var c=a[1]*Math.PI/180,d=b[1]*Math.PI/180,e=(d-c)/2,f=(b[0]-a[0])*Math.PI/180/2,c=Math.sin(e)*Math.sin(e)+Math.sin(f)*Math.sin(f)*Math.cos(c)*Math.cos(d);return 2*Cb.radius*Math.atan2(Math.sqrt(c),Math.sqrt(1-c))}\r\nAb.prototype.offset=function(a,b,c){var d=a[1]*Math.PI/180;b/=this.radius;var e=Math.asin(Math.sin(d)*Math.cos(b)+Math.cos(d)*Math.sin(b)*Math.cos(c));return[180*(a[0]*Math.PI/180+Math.atan2(Math.sin(c)*Math.sin(b)*Math.cos(d),Math.cos(b)-Math.sin(d)*Math.sin(e)))/Math.PI,180*e/Math.PI]};var Cb=new Ab(6370997);var Db={};Db.degrees=2*Math.PI*Cb.radius/360;Db.ft=.3048;Db.m=1;Db[\"us-ft\"]=1200/3937;\r\nfunction Eb(a){this.ya=a.code;this.a=a.units;this.h=void 0!==a.extent?a.extent:null;this.c=void 0!==a.global?a.global:!1;this.b=!(!this.c||!this.h);this.i=void 0!==a.getPointResolution?a.getPointResolution:this.j;this.f=null;this.g=a.metersPerUnit;var b=Fb,c=a.code,d=Gb||K.proj4;if(\"function\"==typeof d&&void 0===b[c]){var e=d.defs(c);if(void 0!==e){void 0===a.metersPerUnit&&(this.g=e.to_meter);void 0===a.units&&(this.a=e.units);var f,g;for(f in b)if(a=d.defs(f),void 0!==a)if(b=Hb(f),a===e)Ib([b,this]);\r\nelse{g=d(f,c);a=g.forward;g=g.inverse;var b=Hb(b),h=Hb(this);Jb(b,h,Kb(a));Jb(h,b,Kb(g))}}}}Eb.prototype.l=function(){return this.ya};Eb.prototype.G=function(){return this.h};function Lb(a){return a.g||Db[a.a]}Eb.prototype.j=function(a,b){if(\"degrees\"==this.a)return a;var c=Mb(this,Hb(\"EPSG:4326\")),d=[b[0]-a/2,b[1],b[0]+a/2,b[1],b[0],b[1]-a/2,b[0],b[1]+a/2],d=c(d,d,2),c=(Bb(d.slice(0,2),d.slice(2,4))+Bb(d.slice(4,6),d.slice(6,8)))/2,d=Lb(this);void 0!==d&&(c/=d);return c};\r\nEb.prototype.getPointResolution=function(a,b){return this.i(a,b)};var Fb={},Ob={},Gb=null;function Ib(a){Pb(a);a.forEach(function(b){a.forEach(function(a){b!==a&&Jb(b,a,Qb)})})}function Rb(a){Fb[a.ya]=a;Jb(a,a,Qb)}function Pb(a){var b=[];a.forEach(function(a){b.push(Rb(a))})}function Sb(a){return a?\"string\"===typeof a?Hb(a):a:Hb(\"EPSG:3857\")}function Jb(a,b,c){a=a.ya;b=b.ya;a in Ob||(Ob[a]={});Ob[a][b]=c}\r\nfunction Kb(a){return function(b,c,d){var e=b.length;d=void 0!==d?d:2;c=void 0!==c?c:Array(e);var f,g;for(g=0;g<e;g+=d)for(f=a([b[g],b[g+1]]),c[g]=f[0],c[g+1]=f[1],f=d-1;2<=f;--f)c[g+f]=b[g+f];return c}}function Hb(a){var b;if(a instanceof Eb)b=a;else if(\"string\"===typeof a){b=Fb[a];var c=Gb||K.proj4;void 0===b&&\"function\"==typeof c&&void 0!==c.defs(a)&&(b=new Eb({code:a}),Rb(b))}return b||null}function Tb(a,b){if(a===b)return!0;var c=a.a===b.a;return a.ya===b.ya?c:Mb(a,b)===Qb&&c}\r\nfunction Ub(a,b){var c=Hb(a),d=Hb(b);return Mb(c,d)}function Mb(a,b){var c=a.ya,d=b.ya,e;c in Ob&&d in Ob[c]&&(e=Ob[c][d]);void 0===e&&(e=Vb);return e}function Vb(a,b){if(void 0!==b&&a!==b){for(var c=0,d=a.length;c<d;++c)b[c]=a[c];a=b}return a}function Qb(a,b){var c;if(void 0!==b){c=0;for(var d=a.length;c<d;++c)b[c]=a[c];c=b}else c=a.slice();return c};function Wb(){V.call(this);this.j=db();this.s=-1;this.f={};this.i=this.g=0}B(Wb,V);Wb.prototype.G=function(a){this.s!=this.b&&(this.j=this.mb(this.j),this.s=this.b);var b=this.j;a?(a[0]=b[0],a[1]=b[1],a[2]=b[2],a[3]=b[3]):a=b;return a};Wb.prototype.transform=function(a,b){this.Hb(Ub(a,b));return this};function Xb(a,b,c,d,e,f){for(var g=f?f:[],h=0;b<c;b+=d){var k=a[b],l=a[b+1];g[h++]=e[0]*k+e[2]*l+e[4];g[h++]=e[1]*k+e[3]*l+e[5]}f&&g.length!=h&&(g.length=h);return g};function Yb(){Wb.call(this);this.c=\"XY\";this.A=2;this.o=null}B(Yb,Wb);function Zb(a){var b;\"XY\"==a?b=2:\"XYZ\"==a||\"XYM\"==a?b=3:\"XYZM\"==a&&(b=4);return b}n=Yb.prototype;n.mb=function(a){var b=this.o,c=this.o.length,d=this.A;a=jb(a);return nb(a,b,0,c,d)};n.Rb=function(a){this.i!=this.b&&(qa(this.f),this.g=0,this.i=this.b);if(0>a||0!==this.g&&a<=this.g)return this;var b=a.toString();if(this.f.hasOwnProperty(b))return this.f[b];var c=this.Qa(a);if(c.o.length<this.o.length)return this.f[b]=c;this.g=a;return this};\r\nn.Qa=function(){return this};function $b(a,b,c){a.A=Zb(b);a.c=b;a.o=c}function ac(a,b,c,d){if(b)c=Zb(b);else{for(b=0;b<d;++b){if(0===c.length){a.c=\"XY\";a.A=2;return}c=c[0]}c=c.length;var e;2==c?e=\"XY\":3==c?e=\"XYZ\":4==c&&(e=\"XYZM\");b=e}a.c=b;a.A=c}n.Hb=function(a){this.o&&(a(this.o,this.o,this.A),this.w())};\r\nn.rotate=function(a,b){var c=this.o;if(c){for(var d=c.length,e=this.A,f=c?c:[],g=Math.cos(a),h=Math.sin(a),k=b[0],l=b[1],m=0,p=0;p<d;p+=e){var q=c[p]-k,u=c[p+1]-l;f[m++]=k+q*g-u*h;f[m++]=l+q*h+u*g;for(q=p+2;q<p+e;++q)f[m++]=c[q]}c&&f.length!=m&&(f.length=m);this.w()}};\r\nn.scale=function(a,b,c){var d=b;void 0===d&&(d=a);var e=c;e||(e=tb(this.G()));if(c=this.o){b=c.length;for(var f=this.A,g=c?c:[],h=e[0],e=e[1],k=0,l=0;l<b;l+=f){var m=c[l]-h,p=c[l+1]-e;g[k++]=h+a*m;g[k++]=e+d*p;for(m=l+2;m<l+f;++m)g[k++]=c[m]}c&&g.length!=k&&(g.length=k);this.w()}};n.translate=function(a,b){var c=this.o;if(c){var d=c.length,e=this.A,f=c?c:[],g=0,h,k;for(h=0;h<d;h+=e)for(f[g++]=c[h]+a,f[g++]=c[h+1]+b,k=h+2;k<h+e;++k)f[g++]=c[k];c&&f.length!=g&&(f.length=g);this.w()}};function bc(a,b){var c=0,d,e;d=0;for(e=b.length;d<e;++d)a[c++]=b[d];return c}function cc(a,b,c,d){var e,f;e=0;for(f=c.length;e<f;++e){var g=c[e],h;for(h=0;h<d;++h)a[b++]=g[h]}return b}function dc(a,b,c,d,e){e=e?e:[];var f=0,g,h;g=0;for(h=c.length;g<h;++g)b=cc(a,b,c[g],d),e[f++]=b;e.length=f;return e};function ec(a,b,c,d,e){e=void 0!==e?e:[];for(var f=0;b<c;b+=d)e[f++]=a.slice(b,b+d);e.length=f;return e}function fc(a,b,c,d,e){e=void 0!==e?e:[];var f=0,g,h;g=0;for(h=c.length;g<h;++g){var k=c[g];e[f++]=ec(a,b,k,d,e[f]);b=k}e.length=f;return e};function gc(a,b,c,d,e,f,g){var h=(c-b)/d;if(3>h){for(;b<c;b+=d)f[g++]=a[b],f[g++]=a[b+1];return g}var k=Array(h);k[0]=1;k[h-1]=1;c=[b,c-d];for(var l=0,m;0<c.length;){var p=c.pop(),q=c.pop(),u=0,w=a[q],r=a[q+1],x=a[p],D=a[p+1];for(m=q+d;m<p;m+=d){var t,z=a[m];t=a[m+1];var C=w,E=r,v=x-C,H=D-E;if(0!==v||0!==H){var G=((z-C)*v+(t-E)*H)/(v*v+H*H);1<G?(C=x,E=D):0<G&&(C+=v*G,E+=H*G)}z=C-z;t=E-t;t=z*z+t*t;t>u&&(l=m,u=t)}u>e&&(k[(l-b)/d]=1,q+d<l&&c.push(q,l),l+d<p&&c.push(l,p))}for(m=0;m<h;++m)k[m]&&(f[g++]=\r\na[b+m*d],f[g++]=a[b+m*d+1]);return g}\r\nfunction hc(a,b,c,d,e,f,g,h){var k,l;k=0;for(l=c.length;k<l;++k){var m=c[k];a:{var p=a,q=m,u=d,w=e,r=f;if(b!=q){var x=w*Math.round(p[b]/w),D=w*Math.round(p[b+1]/w);b+=u;r[g++]=x;r[g++]=D;var t,z;do if(t=w*Math.round(p[b]/w),z=w*Math.round(p[b+1]/w),b+=u,b==q){r[g++]=t;r[g++]=z;break a}while(t==x&&z==D);for(;b<q;){var C,E;C=w*Math.round(p[b]/w);E=w*Math.round(p[b+1]/w);b+=u;if(C!=t||E!=z){var v=t-x,H=z-D,G=C-x,A=E-D;v*A==H*G&&(0>v&&G<v||v==G||0<v&&G>v)&&(0>H&&A<H||H==A||0<H&&A>H)||(r[g++]=t,r[g++]=\r\nz,x=t,D=z);t=C;z=E}}r[g++]=t;r[g++]=z}}h.push(g);b=m}return g};function ic(a,b){Yb.call(this);this.ea(a,b)}B(ic,Yb);n=ic.prototype;n.clone=function(){var a=new ic(null);$b(a,this.c,this.o.slice());a.w();return a};n.za=function(){return ec(this.o,0,this.o.length,this.A)};n.Qa=function(a){var b=[];b.length=gc(this.o,0,this.o.length,this.A,a,b,0);a=new ic(null);$b(a,\"XY\",b);a.w();return a};n.$=function(){return\"LinearRing\"};n.ea=function(a,b){a?(ac(this,b,a,1),this.o||(this.o=[]),this.o.length=cc(this.o,0,a,this.A)):$b(this,\"XY\",null);this.w()};function jc(a,b){Yb.call(this);this.ea(a,b)}B(jc,Yb);n=jc.prototype;n.clone=function(){var a=new jc(null);$b(a,this.c,this.o.slice());a.w();return a};n.za=function(){return this.o?this.o.slice():[]};n.mb=function(a){return kb(this.o,a)};n.$=function(){return\"Point\"};n.ea=function(a,b){a?(ac(this,b,a,0),this.o||(this.o=[]),this.o.length=bc(this.o,a)):$b(this,\"XY\",null);this.w()};function kc(a,b,c,d,e,f){for(var g=!1,h=a[c-d],k=a[c-d+1];b<c;b+=d){var l=a[b],m=a[b+1];k>f!=m>f&&e<(l-h)*(f-k)/(m-k)+h&&(g=!g);h=l;k=m}return g};function lc(a,b,c,d,e,f,g){var h,k,l,m,p,q=e[f+1],u=[],w=c[0];l=a[w-d];p=a[w-d+1];for(h=b;h<w;h+=d){m=a[h];k=a[h+1];if(q<=p&&k<=q||p<=q&&q<=k)l=(q-p)/(k-p)*(m-l)+l,u.push(l);l=m;p=k}w=NaN;p=-Infinity;u.sort(Ma);l=u[0];h=1;for(k=u.length;h<k;++h){m=u[h];var r=Math.abs(m-l);if(r>p){l=(l+m)/2;var x;a:if(0!==c.length&&kc(a,b,c[0],d,l,q)){var D;x=1;for(D=c.length;x<D;++x)if(kc(a,c[x-1],c[x],d,l,q)){x=!1;break a}x=!0}else x=!1;x&&(w=l,p=r)}l=m}isNaN(w)&&(w=e[f]);return g?(g.push(w,q),g):[w,q]};function mc(a,b,c,d){for(var e=0,f=a[c-d],g=a[c-d+1];b<c;b+=d)var h=a[b],k=a[b+1],e=e+(h-f)*(k+g),f=h,g=k;return 0<e}function nc(a,b,c,d){var e=0;d=void 0!==d?d:!1;var f,g;f=0;for(g=b.length;f<g;++f){var h=b[f],e=mc(a,e,h,c);if(0===f){if(d&&e||!d&&!e)return!1}else if(d&&!e||!d&&e)return!1;e=h}return!0}\r\nfunction oc(a,b,c,d,e){e=void 0!==e?e:!1;var f,g;f=0;for(g=c.length;f<g;++f){var h=c[f],k=mc(a,b,h,d);if(0===f?e&&k||!e&&!k:e&&!k||!e&&k)for(var k=a,l=h,m=d;b<l-m;){var p;for(p=0;p<m;++p){var q=k[b+p];k[b+p]=k[l-m+p];k[l-m+p]=q}b+=m;l-=m}b=h}return b}function pc(a,b,c,d){var e=0,f,g;f=0;for(g=b.length;f<g;++f)e=oc(a,e,b[f],c,d);return e};function qc(a,b){Yb.call(this);this.ja=[];this.h=-1;this.v=null;this.u=-1;this.a=null;this.ea(a,b)}B(qc,Yb);n=qc.prototype;n.clone=function(){var a=new qc(null);rc(a,this.c,this.o.slice(),this.ja.slice());return a};n.za=function(a){var b;void 0!==a?(b=sc(this).slice(),oc(b,0,this.ja,this.A,a)):b=this.o;return fc(b,0,this.ja,this.A)};function tc(a){if(a.h!=a.b){var b=tb(a.G());a.v=lc(sc(a),0,a.ja,a.A,b,0);a.h=a.b}return a.v}\r\nfunction sc(a){if(a.u!=a.b){var b=a.o;nc(b,a.ja,a.A)?a.a=b:(a.a=b.slice(),a.a.length=oc(a.a,0,a.ja,a.A));a.u=a.b}return a.a}n.Qa=function(a){var b=[],c=[];b.length=hc(this.o,0,this.ja,this.A,Math.sqrt(a),b,0,c);a=new qc(null);rc(a,\"XY\",b,c);return a};n.$=function(){return\"Polygon\"};n.ea=function(a,b){if(a){ac(this,b,a,2);this.o||(this.o=[]);var c=dc(this.o,0,a,this.A,this.ja);this.o.length=0===c.length?0:c[c.length-1];this.w()}else rc(this,\"XY\",null,this.ja)};\r\nfunction rc(a,b,c,d){$b(a,b,c);a.ja=d;a.w()};function uc(a){V.call(this);a=a||{};this.c=[0,0];var b={};b[vc]=void 0!==a.center?a.center:null;this.j=Sb(a.projection);var c,d,e,f=void 0!==a.minZoom?a.minZoom:0;c=void 0!==a.maxZoom?a.maxZoom:28;var g=void 0!==a.zoomFactor?a.zoomFactor:2;if(void 0!==a.resolutions)c=a.resolutions,d=c[0],e=c[c.length-1],c=Va(c);else{d=Sb(a.projection);e=d.G();var h=(e?Math.max(qb(e),rb(e)):360*Db.degrees/Lb(d))/256/Math.pow(2,0),k=h/Math.pow(2,28);d=a.maxResolution;void 0!==d?f=0:d=h/Math.pow(g,f);e=a.minResolution;\r\nvoid 0===e&&(e=void 0!==a.maxZoom?void 0!==a.maxResolution?d/Math.pow(g,c):h/Math.pow(g,c):k);c=f+Math.floor(Math.log(d/e)/Math.log(g));e=d/Math.pow(g,c-f);c=Wa(g,d,c-f)}this.f=d;this.i=e;this.s=g;this.g=a.resolutions;this.h=f;f=void 0!==a.extent?ma(a.extent):na;(void 0!==a.enableRotation?a.enableRotation:1)?(g=a.constrainRotation,g=void 0===g||!0===g?$a():!1===g?Ya:\"number\"===typeof g?Za(g):Ya):g=Xa;this.a=new oa(f,c,g);void 0!==a.resolution?b[wc]=a.resolution:void 0!==a.zoom&&(b[wc]=this.constrainResolution(this.f,\r\na.zoom-this.h));b[xc]=void 0!==a.rotation?a.rotation:0;this.l(b)}B(uc,V);n=uc.prototype;n.constrainResolution=function(a,b,c){return this.a.resolution(a,b||0,c||0)};n.constrainRotation=function(a,b){return this.a.rotation(a,b||0)};n.qa=function(){return this.get(vc)};n.lc=function(a){var b=this.qa();L(b,1);var c=this.O();L(void 0!==c,2);var d=this.get(xc);L(void 0!==d,3);return ub(b,c,d,a)};n.ia=function(){return this.j};n.O=function(){return this.get(wc)};\r\nfunction yc(a,b){return Math.max(qb(a)/b[0],rb(a)/b[1])}n.T=function(){var a=this.qa(),b=this.ia(),c=this.O(),d=this.get(xc);return{center:a.slice(),projection:void 0!==b?b:null,resolution:c,rotation:d}};n.rd=function(){var a,b=this.O();if(void 0!==b&&b>=this.i&&b<=this.f){a=this.h||0;var c,d;if(this.g){d=Na(this.g,b,1);a+=d;if(d==this.g.length-1)return a;c=this.g[d];d=c/this.g[d+1]}else c=this.f,d=this.s;a+=Math.log(c/b)/Math.log(d)}return a};\r\nn.md=function(a,b,c){if(!(a instanceof Yb)){L(Array.isArray(a),24);L(!pb(a),25);var d=a[0],e=a[1],f=a[2],g=a[3],d=[d,e,d,g,f,g,f,e,d,e],e=new qc(null);rc(e,\"XY\",d,[d.length]);a=e}d=c||{};c=void 0!==d.padding?d.padding:[0,0,0,0];var g=void 0!==d.constrainResolution?d.constrainResolution:!0,e=void 0!==d.nearest?d.nearest:!1,h;void 0!==d.minResolution?h=d.minResolution:void 0!==d.maxZoom?h=this.constrainResolution(this.f,d.maxZoom-this.h,0):h=0;var k=a.o,f=this.get(xc),d=Math.cos(-f),f=Math.sin(-f),\r\nl=Infinity,m=Infinity,p=-Infinity,q=-Infinity;a=a.A;for(var u=0,w=k.length;u<w;u+=a)var r=k[u]*d-k[u+1]*f,x=k[u]*f+k[u+1]*d,l=Math.min(l,r),m=Math.min(m,x),p=Math.max(p,r),q=Math.max(q,x);b=yc([l,m,p,q],[b[0]-c[1]-c[3],b[1]-c[0]-c[2]]);b=isNaN(b)?h:Math.max(b,h);g&&(h=this.constrainResolution(b,0,0),!e&&h<b&&(h=this.constrainResolution(h,-1,0)),b=h);this.set(wc,b);f=-f;h=(l+p)/2+(c[1]-c[3])/2*b;b=(m+q)/2+(c[0]-c[2])/2*b;this.xa([h*d-b*f,b*d+h*f])};\r\nn.rotate=function(a,b){if(void 0!==b){var c,d=this.qa();void 0!==d&&(c=[d[0]-b[0],d[1]-b[1]],bb(c,a-this.get(xc)),ab(c,b));this.xa(c)}this.set(xc,a)};n.xa=function(a){this.set(vc,a)};function zc(a,b){a.c[1]+=b}n.ye=function(a){a=this.constrainResolution(this.f,a-this.h,0);this.set(wc,a)};var vc=\"center\",wc=\"resolution\",xc=\"rotation\";function Ac(a){return 1-Math.pow(1-a,3)}function Bc(a){return 3*a*a-2*a*a*a}function Cc(a){return a};function Dc(a){var b=a.source,c=a.start?a.start:Date.now(),d=b[0],e=b[1],f=void 0!==a.duration?a.duration:1E3,g=a.easing?a.easing:Bc;return function(a,b){if(b.time<c)return b.animate=!0,b.viewHints[0]+=1,!0;if(b.time<c+f){var l=1-g((b.time-c)/f),m=d-b.viewState.center[0],p=e-b.viewState.center[1];b.animate=!0;b.viewState.center[0]+=l*m;b.viewState.center[1]+=l*p;b.viewHints[0]+=1;return!0}return!1}}\r\nfunction Ec(a){var b=a.rotation?a.rotation:0,c=a.start?a.start:Date.now(),d=void 0!==a.duration?a.duration:1E3,e=a.easing?a.easing:Bc,f=a.anchor?a.anchor:null;return function(a,h){if(h.time<c)return h.animate=!0,h.viewHints[0]+=1,!0;if(h.time<c+d){var k=1-e((h.time-c)/d),k=(b-h.viewState.rotation)*k;h.animate=!0;h.viewState.rotation+=k;if(f){var l=h.viewState.center;l[0]-=f[0];l[1]-=f[1];bb(l,k);ab(l,f)}h.viewHints[0]+=1;return!0}return!1}}\r\nfunction Fc(a){var b=a.resolution,c=a.start?a.start:Date.now(),d=void 0!==a.duration?a.duration:1E3,e=a.easing?a.easing:Bc;return function(a,g){if(g.time<c)return g.animate=!0,g.viewHints[0]+=1,!0;if(g.time<c+d){var h=1-e((g.time-c)/d),k=b-g.viewState.resolution;g.animate=!0;g.viewState.resolution+=h*k;g.viewHints[0]+=1;return!0}return!1}};function Gc(a,b,c,d){this.H=a;this.I=b;this.J=c;this.L=d}function Hc(a,b,c){return a.H<=b&&b<=a.I&&a.J<=c&&c<=a.L}function Ic(a,b){return a.H==b.H&&a.J==b.J&&a.I==b.I&&a.L==b.L}function Jc(a,b){return a.H<=b.I&&a.I>=b.H&&a.J<=b.L&&a.L>=b.J};function Kc(a,b,c){void 0===c&&(c=[0,0]);c[0]=a[0]*b+.5|0;c[1]=a[1]*b+.5|0;return c}function Lc(a,b){if(Array.isArray(a))return a;void 0===b?b=[a,a]:b[0]=b[1]=a;return b};function Mc(a){this.minZoom=void 0!==a.minZoom?a.minZoom:0;this.b=a.resolutions;L(Ua(this.b,function(a,b){return b-a}),17);this.maxZoom=this.b.length-1;this.c=void 0!==a.origin?a.origin:null;this.f=null;void 0!==a.origins&&(this.f=a.origins,L(this.f.length==this.b.length,20));var b=a.extent;void 0===b||this.c||this.f||(this.c=xb(b));L(!this.c&&this.f||this.c&&!this.f,18);this.g=null;void 0!==a.tileSizes&&(this.g=a.tileSizes,L(this.g.length==this.b.length,19));this.h=void 0!==a.tileSize?a.tileSize:\r\nthis.g?null:256;L(!this.h&&this.g||this.h&&!this.g,22);this.i=void 0!==b?b:null;this.a=null;this.l=[0,0];void 0!==a.sizes?this.a=a.sizes.map(function(a){return new Gc(Math.min(0,a[0]),Math.max(a[0]-1,-1),Math.min(0,a[1]),Math.max(a[1]-1,-1))},this):b&&Nc(this,b)}var Oc=[0,0,0];function Pc(a,b,c,d,e){e=Qc(a,b,e);for(b=b[0]-1;b>=a.minZoom;){if(c.call(null,b,Rc(a,e,b,d)))return!0;--b}return!1}Mc.prototype.G=function(){return this.i};Mc.prototype.pa=function(a){return this.c?this.c:this.f[a]};\r\nMc.prototype.O=function(a){return this.b[a]};function Sc(a,b,c,d){return b[0]<a.maxZoom?(d=Qc(a,b,d),Rc(a,d,b[0]+1,c)):null}function Tc(a,b,c,d){Uc(a,b[0],b[1],c,!1,Oc);var e=Oc[1],f=Oc[2];Uc(a,b[2],b[3],c,!0,Oc);a=Oc[1];b=Oc[2];void 0!==d?(d.H=e,d.I=a,d.J=f,d.L=b):d=new Gc(e,a,f,b);return d}function Rc(a,b,c,d){c=a.O(c);return Tc(a,b,c,d)}function Vc(a,b){var c=a.pa(b[0]),d=a.O(b[0]),e=Lc(Wc(a,b[0]),a.l);return[c[0]+(b[1]+.5)*e[0]*d,c[1]+(b[2]+.5)*e[1]*d]}\r\nfunction Qc(a,b,c){var d=a.pa(b[0]),e=a.O(b[0]);a=Lc(Wc(a,b[0]),a.l);var f=d[0]+b[1]*a[0]*e;b=d[1]+b[2]*a[1]*e;return ib(f,b,f+a[0]*e,b+a[1]*e,c)}function Uc(a,b,c,d,e,f){var g=Xc(a,d),h=d/a.O(g),k=a.pa(g);a=Lc(Wc(a,g),a.l);b=h*Math.floor((b-k[0])/d+(e?.5:0))/a[0];c=h*Math.floor((c-k[1])/d+(e?0:.5))/a[1];e?(b=Math.ceil(b)-1,c=Math.ceil(c)-1):(b=Math.floor(b),c=Math.floor(c));e=b;void 0!==f?(f[0]=g,f[1]=e,f[2]=c):f=[g,e,c];return f}function Yc(a,b,c,d){c=a.O(c);return Uc(a,b[0],b[1],c,!1,d)}\r\nfunction Wc(a,b){return a.h?a.h:a.g[b]}function Xc(a,b,c){return ia(Na(a.b,b,c||0),a.minZoom,a.maxZoom)}function Nc(a,b){for(var c=a.b.length,d=Array(c),e=a.minZoom;e<c;++e)d[e]=Rc(a,b,e);a.a=d};function Zc(a){var b=a.f;if(!b){var b=$c(a),c=ad(b,void 0,void 0),b=new Mc({extent:b,origin:xb(b),resolutions:c,tileSize:void 0});a.f=b}return b}function ad(a,b,c){b=void 0!==b?b:42;var d=rb(a);a=qb(a);c=Lc(void 0!==c?c:256);c=Math.max(a/c[0],d/c[1]);b+=1;d=Array(b);for(a=0;a<b;++a)d[a]=c/Math.pow(2,a);return d}function $c(a){a=Hb(a);var b=a.G();b||(a=180*Db.degrees/Lb(a),b=ib(-a,-a,a,a));return b};function bd(a){this.a=a.html;this.b=a.tileRanges?a.tileRanges:null};function cd(a){V.call(this);this.a=a?a:[];dd(this)}B(cd,V);cd.prototype.clear=function(){for(;0<this.get(\"length\");)this.pop()};function ed(a,b,c){a.a.forEach(b,c)}cd.prototype.pop=function(){return fd(this,this.get(\"length\")-1)};cd.prototype.push=function(a){var b=this.a.length;this.a.splice(b,0,a);dd(this);U(this,new gd(hd,a));return b};cd.prototype.remove=function(a){var b=this.a,c,d;c=0;for(d=b.length;c<d;++c)if(b[c]===a)return fd(this,c)};\r\nfunction fd(a,b){var c=a.a[b];a.a.splice(b,1);dd(a);U(a,new gd(id,c));return c}function dd(a){a.set(\"length\",a.a.length)}var hd=\"add\",id=\"remove\";function gd(a,b){T.call(this,a);this.element=b}B(gd,T);var jd=/^#(?:[0-9a-f]{3}){1,2}$/i,kd=/^(?:rgb)?\\((0|[1-9]\\d{0,2}),\\s?(0|[1-9]\\d{0,2}),\\s?(0|[1-9]\\d{0,2})\\)$/i,ld=/^(?:rgba)?\\((0|[1-9]\\d{0,2}),\\s?(0|[1-9]\\d{0,2}),\\s?(0|[1-9]\\d{0,2}),\\s?(0|1|0\\.\\d{0,10})\\)$/i,md=/^([a-z]*)$/i;function nd(a){if(\"string\"!==typeof a){var b=a[0];b!=(b|0)&&(b=b+.5|0);var c=a[1];c!=(c|0)&&(c=c+.5|0);var d=a[2];d!=(d|0)&&(d=d+.5|0);a=\"rgba(\"+b+\",\"+c+\",\"+d+\",\"+(void 0===a[3]?1:a[3])+\")\"}return a}\r\nvar pd=function(){var a={},b=0;return function(c){var d;if(a.hasOwnProperty(c))d=a[c];else{if(1024<=b){d=0;for(var e in a)0===(d++&3)&&(delete a[e],--b)}d=c;var f,g;md.exec(d)&&(e=document.createElement(\"div\"),e.style.color=d,document.body.appendChild(e),d=window.getComputedStyle(e).color,document.body.removeChild(e));jd.exec(d)?(f=d.length-1,L(3==f||6==f,54),g=3==f?1:2,f=parseInt(d.substr(1+0*g,g),16),e=parseInt(d.substr(1+1*g,g),16),d=parseInt(d.substr(1+2*g,g),16),1==g&&(f=(f<<4)+f,e=(e<<4)+e,\r\nd=(d<<4)+d),f=[f,e,d,1]):(g=ld.exec(d))?(f=Number(g[1]),e=Number(g[2]),d=Number(g[3]),g=Number(g[4]),f=od([f,e,d,g])):(g=kd.exec(d))?(f=Number(g[1]),e=Number(g[2]),d=Number(g[3]),f=od([f,e,d,1])):L(!1,14);d=f;a[c]=d;++b}return d}}();function od(a){var b=[];b[0]=ia(a[0]+.5|0,0,255);b[1]=ia(a[1]+.5|0,0,255);b[2]=ia(a[2]+.5|0,0,255);b[3]=ia(a[3],0,1);return b};function qd(a){return\"string\"===typeof a||a instanceof CanvasPattern||a instanceof CanvasGradient?a:nd(a)};var rd=String.prototype.trim?function(a){return a.trim()}:function(a){return a.replace(/^[\\s\\xa0]+|[\\s\\xa0]+$/g,\"\")};function sd(a,b){return a<b?-1:a>b?1:0};function td(a,b,c){return 2>=arguments.length?Array.prototype.slice.call(a,b):Array.prototype.slice.call(a,b,c)};var ud;a:{var vd=aa.navigator;if(vd){var wd=vd.userAgent;if(wd){ud=wd;break a}}ud=\"\"}function xd(a){return-1!=ud.indexOf(a)};var yd=xd(\"Opera\"),zd=xd(\"Trident\")||xd(\"MSIE\"),Ad=xd(\"Edge\"),Bd=xd(\"Gecko\")&&!(-1!=ud.toLowerCase().indexOf(\"webkit\")&&!xd(\"Edge\"))&&!(xd(\"Trident\")||xd(\"MSIE\"))&&!xd(\"Edge\"),Cd=-1!=ud.toLowerCase().indexOf(\"webkit\")&&!xd(\"Edge\"),Dd;\r\na:{var Ed=\"\",Fd=function(){var a=ud;if(Bd)return/rv\\:([^\\);]+)(\\)|;)/.exec(a);if(Ad)return/Edge\\/([\\d\\.]+)/.exec(a);if(zd)return/\\b(?:MSIE|rv)[: ]([^\\);]+)(\\)|;)/.exec(a);if(Cd)return/WebKit\\/(\\S+)/.exec(a);if(yd)return/(?:Version)[ \\/]?(\\S+)/.exec(a)}();Fd&&(Ed=Fd?Fd[1]:\"\");if(zd){var Gd,Hd=aa.document;Gd=Hd?Hd.documentMode:void 0;if(null!=Gd&&Gd>parseFloat(Ed)){Dd=String(Gd);break a}}Dd=Ed}var Id={};function Jd(){return[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]}function Kd(a,b){a[0]=b[0];a[1]=b[1];a[4]=b[2];a[5]=b[3];a[12]=b[4];a[13]=b[5];return a};var Ld=Jd();function Md(a,b){var c=document.createElement(\"CANVAS\");a&&(c.width=a);b&&(c.height=b);return c.getContext(\"2d\")}\r\nvar Nd=function(){var a;return function(){if(void 0===a){var b=document.createElement(\"P\"),c,d={webkitTransform:\"-webkit-transform\",OTransform:\"-o-transform\",msTransform:\"-ms-transform\",MozTransform:\"-moz-transform\",transform:\"transform\"};document.body.appendChild(b);for(var e in d)e in b.style&&(b.style[e]=\"translate(1px,1px)\",c=K.getComputedStyle(b).getPropertyValue(d[e]));document.body.removeChild(b);a=c&&\"none\"!==c}return a}}(),Od=function(){var a;return function(){if(void 0===a){var b=document.createElement(\"P\"),\r\nc,d={webkitTransform:\"-webkit-transform\",OTransform:\"-o-transform\",msTransform:\"-ms-transform\",MozTransform:\"-moz-transform\",transform:\"transform\"};document.body.appendChild(b);for(var e in d)e in b.style&&(b.style[e]=\"translate3d(1px,1px,1px)\",c=K.getComputedStyle(b).getPropertyValue(d[e]));document.body.removeChild(b);a=c&&\"none\"!==c}return a}}();\r\nfunction Pd(a,b){var c=a.style;c.WebkitTransform=b;c.MozTransform=b;c.b=b;c.msTransform=b;c.transform=b;if((c=zd)&&!(c=Id[\"9.0\"])){for(var c=0,d=rd(String(Dd)).split(\".\"),e=rd(\"9.0\").split(\".\"),f=Math.max(d.length,e.length),g=0;0==c&&g<f;g++){var h=d[g]||\"\",k=e[g]||\"\",l=RegExp(\"(\\\\d*)(\\\\D*)\",\"g\"),m=RegExp(\"(\\\\d*)(\\\\D*)\",\"g\");do{var p=l.exec(h)||[\"\",\"\",\"\"],q=m.exec(k)||[\"\",\"\",\"\"];if(0==p[0].length&&0==q[0].length)break;c=sd(0==p[1].length?0:parseInt(p[1],10),0==q[1].length?0:parseInt(q[1],10))||sd(0==\r\np[2].length,0==q[2].length)||sd(p[2],q[2])}while(0==c)}c=Id[\"9.0\"]=0<=c}c&&(a.style.transformOrigin=\"0 0\")}function Qd(a,b){var c;if(Od()){var d=Kd(Ld,b),e=Array(16);for(c=0;16>c;++c)e[c]=d[c].toFixed(6);Pd(a,\"matrix3d(\"+e.join(\",\")+\")\")}else if(Nd()){d=Array(6);for(c=0;6>c;++c)d[c]=b[c].toFixed(6);Pd(a,\"matrix(\"+d.join(\",\")+\")\")}else a.style.left=Math.round(b[4])+\"px\",a.style.top=Math.round(b[5])+\"px\"}function Rd(a,b){var c=b.parentNode;c&&c.replaceChild(a,b)}\r\nfunction Sd(a){a&&a.parentNode&&a.parentNode.removeChild(a)};function Td(a,b,c){T.call(this,a);this.map=b;this.frameState=void 0!==c?c:null}B(Td,T);function Ud(a){V.call(this);this.element=a.element?a.element:null;this.f=this.D=null;this.i=[];this.render=a.render?a.render:I;a.target&&(a=a.target,this.D=\"string\"===typeof a?document.getElementById(a):a)}B(Ud,V);Ud.prototype.R=function(){Sd(this.element);V.prototype.R.call(this)};\r\nUd.prototype.setMap=function(a){this.f&&Sd(this.element);for(var b=0,c=this.i.length;b<c;++b)M(this.i[b]);this.i.length=0;if(this.f=a)(this.D?this.D:a.j).appendChild(this.element),this.render!==I&&this.i.push(R(a,\"postrender\",this.render,this)),a.render()};function Vd(a){a=a?a:{};this.B=document.createElement(\"UL\");this.j=document.createElement(\"LI\");this.B.appendChild(this.j);this.j.style.display=\"none\";this.g=void 0!==a.collapsed?a.collapsed:!0;this.v=void 0!==a.collapsible?a.collapsible:!0;this.v||(this.g=!1);var b=void 0!==a.className?a.className:\"ol-attribution\",c=void 0!==a.tipLabel?a.tipLabel:\"Attributions\",d=void 0!==a.collapseLabel?a.collapseLabel:\"\\u00bb\";\"string\"===typeof d?(this.h=document.createElement(\"span\"),this.h.textContent=d):this.h=\r\nd;d=void 0!==a.label?a.label:\"i\";\"string\"===typeof d?(this.s=document.createElement(\"span\"),this.s.textContent=d):this.s=d;var e=this.v&&!this.g?this.h:this.s,d=document.createElement(\"button\");d.setAttribute(\"type\",\"button\");d.title=c;d.appendChild(e);R(d,\"click\",this.P,this);c=document.createElement(\"div\");c.className=b+\" ol-unselectable ol-control\"+(this.g&&this.v?\" ol-collapsed\":\"\")+(this.v?\"\":\" ol-uncollapsible\");c.appendChild(this.B);c.appendChild(d);Ud.call(this,{element:c,render:a.render?\r\na.render:Wd,target:a.target});this.u=!0;this.c={};this.a={};this.N={}}B(Vd,Ud);\r\nfunction Wd(a){if(a=a.frameState){var b,c,d,e,f,g,h,k,l,m,p,q=a.layerStatesArray,u=pa({},a.attributions),w={},r=a.viewState.projection;c=0;for(b=q.length;c<b;c++)if(g=q[c].layer.da())if(m=J(g).toString(),l=g.h)for(d=0,e=l.length;d<e;d++)if(h=l[d],k=J(h).toString(),!(k in u)){if(f=a.usedTiles[m]){var x=g.sa(r);a:{p=h;var D=r;if(p.b){var t,z,C,E=void 0;for(E in f)if(E in p.b){C=f[E];var v;t=0;for(z=p.b[E].length;t<z;++t){v=p.b[E][t];if(Jc(v,C)){p=!0;break a}var H=Rc(x,$c(D),parseInt(E,10)),G=H.I-H.H+\r\n1;if(C.H<H.H||C.I>H.I)if(Jc(v,new Gc(la(C.H,G),la(C.I,G),C.J,C.L))||C.I-C.H+1>G&&Jc(v,H)){p=!0;break a}}}p=!1}else p=!0}}else p=!1;p?(k in w&&delete w[k],u[k]=h):w[k]=h}b=[u,w];c=b[0];b=b[1];for(var A in this.c)A in c?(this.a[A]||(this.c[A].style.display=\"\",this.a[A]=!0),delete c[A]):A in b?(this.a[A]&&(this.c[A].style.display=\"none\",delete this.a[A]),delete b[A]):(Sd(this.c[A]),delete this.c[A],delete this.a[A]);for(A in c)d=document.createElement(\"LI\"),d.innerHTML=c[A].a,this.B.appendChild(d),this.c[A]=\r\nd,this.a[A]=!0;for(A in b)d=document.createElement(\"LI\"),d.innerHTML=b[A].a,d.style.display=\"none\",this.B.appendChild(d),this.c[A]=d;A=!sa(this.a)||!sa(a.logos);this.u!=A&&(this.element.style.display=A?\"\":\"none\",this.u=A);A&&sa(this.a)?this.element.classList.add(\"ol-logo-only\"):this.element.classList.remove(\"ol-logo-only\");var F;a=a.logos;A=this.N;for(F in A)F in a||(Sd(A[F]),delete A[F]);for(var Q in a)b=a[Q],b instanceof HTMLElement&&(this.j.appendChild(b),A[Q]=b),Q in A||(F=new Image,F.src=Q,\"\"===\r\nb?c=F:(c=document.createElement(\"a\"),c.href=b,c.appendChild(F)),this.j.appendChild(c),A[Q]=c);this.j.style.display=sa(a)?\"none\":\"\"}else this.u&&(this.element.style.display=\"none\",this.u=!1)}Vd.prototype.P=function(a){a.preventDefault();this.element.classList.toggle(\"ol-collapsed\");this.g?Rd(this.h,this.s):Rd(this.s,this.h);this.g=!this.g};function Xd(a){a=a?a:{};this.a=void 0!==a.className?a.className:\"ol-full-screen\";var b=void 0!==a.label?a.label:\"\\u2922\";this.g=\"string\"===typeof b?document.createTextNode(b):b;b=void 0!==a.labelActive?a.labelActive:\"\\u00d7\";this.h=\"string\"===typeof b?document.createTextNode(b):b;var c=a.tipLabel?a.tipLabel:\"Toggle full-screen\",b=document.createElement(\"button\");b.className=this.a+\"-\"+Yd();b.setAttribute(\"type\",\"button\");b.title=c;b.appendChild(this.g);R(b,\"click\",this.v,this);c=document.createElement(\"div\");\r\nc.className=this.a+\" ol-unselectable ol-control \"+(Zd()?\"\":\"ol-unsupported\");c.appendChild(b);Ud.call(this,{element:c,target:a.target});this.s=void 0!==a.keys?a.keys:!1;this.c=a.source}B(Xd,Ud);\r\nXd.prototype.v=function(a){a.preventDefault();Zd()&&(a=this.f)&&(Yd()?document.exitFullscreen?document.exitFullscreen():document.msExitFullscreen?document.msExitFullscreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.webkitExitFullscreen&&document.webkitExitFullscreen():(a=this.c?\"string\"===typeof this.c?document.getElementById(this.c):this.c:a.Ra(),this.s?a.mozRequestFullScreenWithKeys?a.mozRequestFullScreenWithKeys():a.webkitRequestFullscreen?a.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT):\r\n$d(a):$d(a)))};Xd.prototype.j=function(){var a=this.element.firstElementChild,b=this.f;Yd()?(a.className=this.a+\"-true\",Rd(this.h,this.g)):(a.className=this.a+\"-false\",Rd(this.g,this.h));b&&b.yb()};Xd.prototype.setMap=function(a){Ud.prototype.setMap.call(this,a);a&&this.i.push(R(K.document,ae(),this.j,this))};\r\nfunction Zd(){var a=document.body;return!!(a.webkitRequestFullscreen||a.mozRequestFullScreen&&document.mozFullScreenEnabled||a.msRequestFullscreen&&document.msFullscreenEnabled||a.requestFullscreen&&document.fullscreenEnabled)}function Yd(){return!!(document.webkitIsFullScreen||document.mozFullScreen||document.msFullscreenElement||document.fullscreenElement)}\r\nfunction $d(a){a.requestFullscreen?a.requestFullscreen():a.msRequestFullscreen?a.msRequestFullscreen():a.mozRequestFullScreen?a.mozRequestFullScreen():a.webkitRequestFullscreen&&a.webkitRequestFullscreen()}var ae=function(){var a;return function(){if(!a){var b=document.body;b.webkitRequestFullscreen?a=\"webkitfullscreenchange\":b.mozRequestFullScreen?a=\"mozfullscreenchange\":b.msRequestFullscreen?a=\"MSFullscreenChange\":b.requestFullscreen&&(a=\"fullscreenchange\")}return a}}();function be(a){a=a?a:{};var b=void 0!==a.className?a.className:\"ol-rotate\",c=void 0!==a.label?a.label:\"\\u21e7\";this.a=null;\"string\"===typeof c?(this.a=document.createElement(\"span\"),this.a.className=\"ol-compass\",this.a.textContent=c):(this.a=c,this.a.classList.add(\"ol-compass\"));var d=a.tipLabel?a.tipLabel:\"Reset rotation\",c=document.createElement(\"button\");c.className=b+\"-reset\";c.setAttribute(\"type\",\"button\");c.title=d;c.appendChild(this.a);R(c,\"click\",be.prototype.s,this);d=document.createElement(\"div\");\r\nd.className=b+\" ol-unselectable ol-control\";d.appendChild(c);b=a.render?a.render:ce;this.g=a.resetNorth?a.resetNorth:void 0;Ud.call(this,{element:d,render:b,target:a.target});this.h=void 0!==a.duration?a.duration:250;this.c=void 0!==a.autoHide?a.autoHide:!0;this.j=void 0;this.c&&this.element.classList.add(\"ol-hidden\")}B(be,Ud);\r\nbe.prototype.s=function(a){a.preventDefault();if(void 0!==this.g)this.g();else{a=this.f;var b=a.U();if(b){var c=b.get(xc);void 0!==c&&(0<this.h&&(c%=2*Math.PI,c<-Math.PI&&(c+=2*Math.PI),c>Math.PI&&(c-=2*Math.PI),a.oa(Ec({rotation:c,duration:this.h,easing:Ac}))),b.set(xc,0))}}};\r\nfunction ce(a){if(a=a.frameState){a=a.viewState.rotation;if(a!=this.j){var b=\"rotate(\"+a+\"rad)\";if(this.c){var c=this.element.classList.contains(\"ol-hidden\");c||0!==a?c&&0!==a&&this.element.classList.remove(\"ol-hidden\"):this.element.classList.add(\"ol-hidden\")}this.a.style.msTransform=b;this.a.style.webkitTransform=b;this.a.style.transform=b}this.j=a}};function de(a){a=a?a:{};var b=void 0!==a.className?a.className:\"ol-zoom\",c=void 0!==a.delta?a.delta:1,d=void 0!==a.zoomInLabel?a.zoomInLabel:\"+\",e=void 0!==a.zoomOutLabel?a.zoomOutLabel:\"\\u2212\",f=void 0!==a.zoomInTipLabel?a.zoomInTipLabel:\"Zoom in\",g=void 0!==a.zoomOutTipLabel?a.zoomOutTipLabel:\"Zoom out\",h=document.createElement(\"button\");h.className=b+\"-in\";h.setAttribute(\"type\",\"button\");h.title=f;h.appendChild(\"string\"===typeof d?document.createTextNode(d):d);R(h,\"click\",de.prototype.c.bind(this,\r\nc));d=document.createElement(\"button\");d.className=b+\"-out\";d.setAttribute(\"type\",\"button\");d.title=g;d.appendChild(\"string\"===typeof e?document.createTextNode(e):e);R(d,\"click\",de.prototype.c.bind(this,-c));c=document.createElement(\"div\");c.className=b+\" ol-unselectable ol-control\";c.appendChild(h);c.appendChild(d);Ud.call(this,{element:c,target:a.target});this.a=void 0!==a.duration?a.duration:250}B(de,Ud);\r\nde.prototype.c=function(a,b){b.preventDefault();var c=this.f,d=c.U();if(d){var e=d.O();e&&(0<this.a&&c.oa(Fc({resolution:e,duration:this.a,easing:Ac})),c=d.constrainResolution(e,a),d.set(wc,c))}};function ee(a){a=a?a:{};var b=new cd;(void 0!==a.zoom?a.zoom:1)&&b.push(new de(a.zoomOptions));(void 0!==a.rotate?a.rotate:1)&&b.push(new be(a.rotateOptions));(void 0!==a.attribution?a.attribution:1)&&b.push(new Vd(a.attributionOptions));return b};var fe;\r\nfunction ge(){var a=aa.MessageChannel;\"undefined\"===typeof a&&\"undefined\"!==typeof window&&window.postMessage&&window.addEventListener&&!xd(\"Presto\")&&(a=function(){var a=document.createElement(\"IFRAME\");a.style.display=\"none\";a.src=\"\";document.documentElement.appendChild(a);var b=a.contentWindow,a=b.document;a.open();a.write(\"\");a.close();var c=\"callImmediate\"+Math.random(),d=\"file:\"==b.location.protocol?\"*\":b.location.protocol+\"//\"+b.location.host,a=ea(function(a){if((\"*\"==d||a.origin==d)&&a.data==\r\nc)this.port1.onmessage()},this);b.addEventListener(\"message\",a,!1);this.port1={};this.port2={postMessage:function(){b.postMessage(c,d)}}});if(\"undefined\"!==typeof a&&!xd(\"Trident\")&&!xd(\"MSIE\")){var b=new a,c={},d=c;b.port1.onmessage=function(){if(void 0!==c.next){c=c.next;var a=c.nc;c.nc=null;a()}};return function(a){d.next={nc:a};d=d.next;b.port2.postMessage(0)}}return\"undefined\"!==typeof document&&\"onreadystatechange\"in document.createElement(\"SCRIPT\")?function(a){var b=document.createElement(\"SCRIPT\");\r\nb.onreadystatechange=function(){b.onreadystatechange=null;b.parentNode.removeChild(b);b=null;a();a=null};document.documentElement.appendChild(b)}:function(a){aa.setTimeout(a,0)}};var he=[\"experimental-webgl\",\"webgl\",\"webkit-3d\",\"moz-webgl\"];function ie(a,b){var c,d,e=he.length;for(d=0;d<e;++d)try{if(c=a.getContext(he[d],b))return c}catch(f){}return null};var je,ke=\"undefined\"!==typeof navigator?navigator.userAgent.toLowerCase():\"\",le=-1!==ke.indexOf(\"firefox\"),me=-1!==ke.indexOf(\"safari\")&&-1===ke.indexOf(\"chrom\"),ne=-1!==ke.indexOf(\"macintosh\"),oe=K.devicePixelRatio||1,pe=!1,qe=function(){if(!(\"HTMLCanvasElement\"in K))return!1;try{var a=Md();return a?(a.setLineDash&&(pe=!0),!0):!1}catch(b){return!1}}(),re=\"ontouchstart\"in K,se=\"PointerEvent\"in K,te=!!K.navigator.msPointerEnabled,ue=!1,ve=[];\r\nif(\"WebGLRenderingContext\"in K)try{var we=ie(document.createElement(\"CANVAS\"),{failIfMajorPerformanceCaveat:!0});we&&(ue=!0,ve=we.getSupportedExtensions())}catch(a){}je=ue;fa=ve;function xe(a,b){this.b=a;this.g=b};function ye(a){xe.call(this,a,{mousedown:this.Pd,mousemove:this.Qd,mouseup:this.Td,mouseover:this.Sd,mouseout:this.Rd});this.a=a.a;this.c=[]}B(ye,xe);function ze(a,b){for(var c=a.c,d=b.clientX,e=b.clientY,f=0,g=c.length,h;f<g&&(h=c[f]);f++){var k=Math.abs(e-h[1]);if(25>=Math.abs(d-h[0])&&25>=k)return!0}return!1}function Ae(a){var b=Be(a,a),c=b.preventDefault;b.preventDefault=function(){a.preventDefault();c()};b.pointerId=1;b.isPrimary=!0;b.pointerType=\"mouse\";return b}n=ye.prototype;\r\nn.Pd=function(a){if(!ze(this,a)){if((1).toString()in this.a){var b=Ae(a);Ce(this.b,De,b,a);delete this.a[(1).toString()]}b=Ae(a);this.a[(1).toString()]=a;Ce(this.b,Ee,b,a)}};n.Qd=function(a){if(!ze(this,a)){var b=Ae(a);Ce(this.b,Fe,b,a)}};n.Td=function(a){if(!ze(this,a)){var b=this.a[(1).toString()];b&&b.button===a.button&&(b=Ae(a),Ce(this.b,Ge,b,a),delete this.a[(1).toString()])}};n.Sd=function(a){if(!ze(this,a)){var b=Ae(a);He(this.b,b,a)}};\r\nn.Rd=function(a){if(!ze(this,a)){var b=Ae(a);Ie(this.b,b,a)}};function Je(a){xe.call(this,a,{MSPointerDown:this.Yd,MSPointerMove:this.Zd,MSPointerUp:this.be,MSPointerOut:this.$d,MSPointerOver:this.ae,MSPointerCancel:this.Xd,MSGotPointerCapture:this.Vd,MSLostPointerCapture:this.Wd});this.a=a.a;this.c=[\"\",\"unavailable\",\"touch\",\"pen\",\"mouse\"]}B(Je,xe);function Ke(a,b){var c=b;\"number\"===typeof b.pointerType&&(c=Be(b,b),c.pointerType=a.c[b.pointerType]);return c}n=Je.prototype;n.Yd=function(a){this.a[a.pointerId.toString()]=a;var b=Ke(this,a);Ce(this.b,Ee,b,a)};\r\nn.Zd=function(a){var b=Ke(this,a);Ce(this.b,Fe,b,a)};n.be=function(a){var b=Ke(this,a);Ce(this.b,Ge,b,a);delete this.a[a.pointerId.toString()]};n.$d=function(a){var b=Ke(this,a);Ie(this.b,b,a)};n.ae=function(a){var b=Ke(this,a);He(this.b,b,a)};n.Xd=function(a){var b=Ke(this,a);Ce(this.b,De,b,a);delete this.a[a.pointerId.toString()]};n.Wd=function(a){U(this.b,new Le(\"lostpointercapture\",a,a))};n.Vd=function(a){U(this.b,new Le(\"gotpointercapture\",a,a))};function Me(a){xe.call(this,a,{pointerdown:this.le,pointermove:this.me,pointerup:this.pe,pointerout:this.ne,pointerover:this.oe,pointercancel:this.ke,gotpointercapture:this.sd,lostpointercapture:this.Od})}B(Me,xe);n=Me.prototype;n.le=function(a){Ne(this.b,a)};n.me=function(a){Ne(this.b,a)};n.pe=function(a){Ne(this.b,a)};n.ne=function(a){Ne(this.b,a)};n.oe=function(a){Ne(this.b,a)};n.ke=function(a){Ne(this.b,a)};n.Od=function(a){Ne(this.b,a)};n.sd=function(a){Ne(this.b,a)};function Le(a,b,c){T.call(this,a);this.b=b;a=c?c:{};this.buttons=Oe(a);this.pressure=Pe(a,this.buttons);this.bubbles=\"bubbles\"in a?a.bubbles:!1;this.cancelable=\"cancelable\"in a?a.cancelable:!1;this.view=\"view\"in a?a.view:null;this.detail=\"detail\"in a?a.detail:null;this.screenX=\"screenX\"in a?a.screenX:0;this.screenY=\"screenY\"in a?a.screenY:0;this.clientX=\"clientX\"in a?a.clientX:0;this.clientY=\"clientY\"in a?a.clientY:0;this.button=\"button\"in a?a.button:0;this.relatedTarget=\"relatedTarget\"in a?a.relatedTarget:\r\nnull;this.pointerId=\"pointerId\"in a?a.pointerId:0;this.width=\"width\"in a?a.width:0;this.height=\"height\"in a?a.height:0;this.pointerType=\"pointerType\"in a?a.pointerType:\"\";this.isPrimary=\"isPrimary\"in a?a.isPrimary:!1;b.preventDefault&&(this.preventDefault=function(){b.preventDefault()})}B(Le,T);function Oe(a){if(a.buttons||Qe)a=a.buttons;else switch(a.which){case 1:a=1;break;case 2:a=4;break;case 3:a=2;break;default:a=0}return a}function Pe(a,b){var c=0;a.pressure?c=a.pressure:c=b?.5:0;return c}\r\nvar Qe=!1;try{Qe=1===(new MouseEvent(\"click\",{buttons:1})).buttons}catch(a){};function Re(a,b){xe.call(this,a,{touchstart:this.Ce,touchmove:this.Be,touchend:this.Ae,touchcancel:this.ze});this.a=a.a;this.l=b;this.c=void 0;this.h=0;this.f=void 0}B(Re,xe);n=Re.prototype;n.Uc=function(){this.h=0;this.f=void 0};\r\nfunction Se(a,b,c){b=Be(b,c);b.pointerId=c.identifier+2;b.bubbles=!0;b.cancelable=!0;b.detail=a.h;b.button=0;b.buttons=1;b.width=c.webkitRadiusX||c.radiusX||0;b.height=c.webkitRadiusY||c.radiusY||0;b.pressure=c.webkitForce||c.force||.5;b.isPrimary=a.c===c.identifier;b.pointerType=\"touch\";b.clientX=c.clientX;b.clientY=c.clientY;b.screenX=c.screenX;b.screenY=c.screenY;return b}\r\nfunction Te(a,b,c){function d(){b.preventDefault()}var e=Array.prototype.slice.call(b.changedTouches),f=e.length,g,h;for(g=0;g<f;++g)h=Se(a,b,e[g]),h.preventDefault=d,c.call(a,b,h)}\r\nn.Ce=function(a){var b=a.touches,c=Object.keys(this.a),d=c.length;if(d>=b.length){var e=[],f,g,h;for(f=0;f<d;++f){g=c[f];h=this.a[g];var k;if(!(k=1==g))a:{k=b.length;for(var l,m=0;m<k;m++)if(l=b[m],l.identifier===g-2){k=!0;break a}k=!1}k||e.push(h.out)}for(f=0;f<e.length;++f)this.Ib(a,e[f])}b=a.changedTouches[0];c=Object.keys(this.a).length;if(0===c||1===c&&(1).toString()in this.a)this.c=b.identifier,b=K,void 0!==this.f&&b.clearTimeout(this.f);Ue(this,a);this.h++;Te(this,a,this.je)};\r\nn.je=function(a,b){this.a[b.pointerId]={target:b.target,out:b,Rc:b.target};var c=this.b;b.bubbles=!0;Ce(c,Ve,b,a);c=this.b;b.bubbles=!1;Ce(c,We,b,a);Ce(this.b,Ee,b,a)};n.Be=function(a){a.preventDefault();Te(this,a,this.Ud)};n.Ud=function(a,b){var c=this.a[b.pointerId];if(c){var d=c.out,e=c.Rc;Ce(this.b,Fe,b,a);d&&e!==b.target&&(d.relatedTarget=b.target,b.relatedTarget=e,d.target=e,b.target?(Ie(this.b,d,a),He(this.b,b,a)):(b.target=e,b.relatedTarget=null,this.Ib(a,b)));c.out=b;c.Rc=b.target}};\r\nn.Ae=function(a){Ue(this,a);Te(this,a,this.De)};n.De=function(a,b){Ce(this.b,Ge,b,a);this.b.out(b,a);var c=this.b;b.bubbles=!1;Ce(c,Xe,b,a);delete this.a[b.pointerId];b.isPrimary&&(this.c=void 0,this.f=K.setTimeout(this.Uc.bind(this),200))};n.ze=function(a){Te(this,a,this.Ib)};n.Ib=function(a,b){Ce(this.b,De,b,a);this.b.out(b,a);var c=this.b;b.bubbles=!1;Ce(c,Xe,b,a);delete this.a[b.pointerId];b.isPrimary&&(this.c=void 0,this.f=K.setTimeout(this.Uc.bind(this),200))};\r\nfunction Ue(a,b){var c=a.l.c,d=b.changedTouches[0];if(a.c===d.identifier){var e=[d.clientX,d.clientY];c.push(e);K.setTimeout(function(){Qa(c,e)},2500)}};function Ye(a){Ga.call(this);this.g=a;this.a={};this.f={};this.b=[];se?Ze(this,new Me(this)):te?Ze(this,new Je(this)):(a=new ye(this),Ze(this,a),re&&Ze(this,new Re(this,a)));a=this.b.length;for(var b,c=0;c<a;c++)b=this.b[c],$e(this,Object.keys(b.g))}B(Ye,Ga);function Ze(a,b){var c=Object.keys(b.g);c&&(c.forEach(function(a){var c=b.g[a];c&&(this.f[a]=c.bind(b))},a),a.b.push(b))}Ye.prototype.c=function(a){var b=this.f[a.type];b&&b(a)};\r\nfunction $e(a,b){b.forEach(function(a){R(this.g,a,this.c,this)},a)}function af(a,b){b.forEach(function(a){ya(this.g,a,this.c,this)},a)}function Be(a,b){for(var c={},d,e=0,f=bf.length;e<f;e++)d=bf[e][0],c[d]=a[d]||b[d]||bf[e][1];return c}Ye.prototype.out=function(a,b){a.bubbles=!0;Ce(this,cf,a,b)};function Ie(a,b,c){a.out(b,c);var d=b.target,e=b.relatedTarget;d&&e&&d.contains(e)||(b.bubbles=!1,Ce(a,Xe,b,c))}\r\nfunction He(a,b,c){b.bubbles=!0;Ce(a,Ve,b,c);var d=b.target,e=b.relatedTarget;d&&e&&d.contains(e)||(b.bubbles=!1,Ce(a,We,b,c))}function Ce(a,b,c,d){U(a,new Le(b,d,c))}function Ne(a,b){U(a,new Le(b.type,b,b))}Ye.prototype.R=function(){for(var a=this.b.length,b,c=0;c<a;c++)b=this.b[c],af(this,Object.keys(b.g));Ga.prototype.R.call(this)};\r\nvar Fe=\"pointermove\",Ee=\"pointerdown\",Ge=\"pointerup\",Ve=\"pointerover\",cf=\"pointerout\",We=\"pointerenter\",Xe=\"pointerleave\",De=\"pointercancel\",bf=[[\"bubbles\",!1],[\"cancelable\",!1],[\"view\",null],[\"detail\",null],[\"screenX\",0],[\"screenY\",0],[\"clientX\",0],[\"clientY\",0],[\"ctrlKey\",!1],[\"altKey\",!1],[\"shiftKey\",!1],[\"metaKey\",!1],[\"button\",0],[\"relatedTarget\",null],[\"buttons\",0],[\"pointerId\",0],[\"width\",0],[\"height\",0],[\"pressure\",0],[\"tiltX\",0],[\"tiltY\",0],[\"pointerType\",\"\"],[\"hwTimestamp\",0],[\"isPrimary\",\r\n!1],[\"type\",\"\"],[\"target\",null],[\"currentTarget\",null],[\"which\",0]];function df(a,b,c,d,e){Td.call(this,a,b,e);this.originalEvent=c;this.pixel=b.uc(c);this.coordinate=b.Ba(this.pixel);this.dragging=void 0!==d?d:!1}B(df,Td);df.prototype.preventDefault=function(){Td.prototype.preventDefault.call(this);this.originalEvent.preventDefault()};df.prototype.stopPropagation=function(){Td.prototype.stopPropagation.call(this);this.originalEvent.stopPropagation()};function ef(a,b,c,d,e){df.call(this,a,b,c.b,d,e);this.b=c}B(ef,df);\r\nfunction ff(a){Ga.call(this);this.c=a;this.h=0;this.l=!1;this.f=[];this.a=null;a=this.c.a;this.v=0;this.s={};this.g=new Ye(a);this.b=null;this.i=R(this.g,Ee,this.Cd,this);this.j=R(this.g,Fe,this.re,this)}B(ff,Ga);function gf(a,b){var c;c=new ef(hf,a.c,b);U(a,c);0!==a.h?(K.clearTimeout(a.h),a.h=0,c=new ef(jf,a.c,b),U(a,c)):a.h=K.setTimeout(function(){this.h=0;var a=new ef(kf,this.c,b);U(this,a)}.bind(a),250)}\r\nfunction lf(a,b){b.type==mf||b.type==nf?delete a.s[b.pointerId]:b.type==of&&(a.s[b.pointerId]=!0);a.v=Object.keys(a.s).length}n=ff.prototype;n.xc=function(a){lf(this,a);var b=new ef(mf,this.c,a);U(this,b);!this.l&&0===a.button&&gf(this,this.a);0===this.v&&(this.f.forEach(M),this.f.length=0,this.l=!1,this.a=null,Da(this.b),this.b=null)};\r\nn.Cd=function(a){lf(this,a);var b=new ef(of,this.c,a);U(this,b);this.a=a;0===this.f.length&&(this.b=new Ye(document),this.f.push(R(this.b,pf,this.ee,this),R(this.b,mf,this.xc,this),R(this.g,nf,this.xc,this)))};n.ee=function(a){if(a.clientX!=this.a.clientX||a.clientY!=this.a.clientY){this.l=!0;var b=new ef(qf,this.c,a,this.l);U(this,b)}a.preventDefault()};n.re=function(a){U(this,new ef(a.type,this.c,a,!(!this.a||a.clientX==this.a.clientX&&a.clientY==this.a.clientY)))};\r\nn.R=function(){this.j&&(M(this.j),this.j=null);this.i&&(M(this.i),this.i=null);this.f.forEach(M);this.f.length=0;this.b&&(Da(this.b),this.b=null);this.g&&(Da(this.g),this.g=null);Ga.prototype.R.call(this)};var kf=\"singleclick\",hf=\"click\",jf=\"dblclick\",qf=\"pointerdrag\",pf=\"pointermove\",of=\"pointerdown\",mf=\"pointerup\",nf=\"pointercancel\",rf={Pe:kf,Ee:hf,Fe:jf,Ie:qf,Le:pf,He:of,Oe:mf,Ne:\"pointerover\",Me:\"pointerout\",Je:\"pointerenter\",Ke:\"pointerleave\",Ge:nf};function sf(a){V.call(this);var b=pa({},a);b.opacity=void 0!==a.opacity?a.opacity:1;b.visible=void 0!==a.visible?a.visible:!0;b.zIndex=void 0!==a.zIndex?a.zIndex:0;b.maxResolution=void 0!==a.maxResolution?a.maxResolution:Infinity;b.minResolution=void 0!==a.minResolution?a.minResolution:0;this.l(b)}B(sf,V);\r\nfunction tf(a){var b=a.Xb(),c=a.Sb(),d=a.gb(),e=a.G(),f=a.Yb(),g=a.get(\"maxResolution\"),h=a.get(\"minResolution\");return{layer:a,opacity:ia(b,0,1),ac:c,visible:d,hb:!0,extent:e,zIndex:f,maxResolution:g,minResolution:Math.max(h,0)}}n=sf.prototype;n.G=function(){return this.get(\"extent\")};n.Xb=function(){return this.get(\"opacity\")};n.gb=function(){return this.get(\"visible\")};n.Yb=function(){return this.get(\"zIndex\")};n.Bc=function(a){this.set(\"opacity\",a)};n.Cc=function(a){this.set(\"visible\",a)};\r\nn.Dc=function(a){this.set(\"zIndex\",a)};function uf(a,b,c,d,e){T.call(this,a);this.vectorContext=b;this.frameState=c;this.context=d;this.glContext=e}B(uf,T);function vf(a){V.call(this);this.N=Hb(a.projection);this.h=wf(a.attributions);this.D=a.logo;this.P=void 0!==a.state?a.state:\"ready\";this.i=void 0!==a.wrapX?a.wrapX:!1}B(vf,V);function wf(a){if(\"string\"===typeof a)return[new bd({html:a})];if(a instanceof bd)return[a];if(Array.isArray(a)){for(var b=a.length,c=Array(b),d=0;d<b;d++){var e=a[d];c[d]=\"string\"===typeof e?new bd({html:e}):e}return c}return null}vf.prototype.fa=I;vf.prototype.ia=function(){return this.N};vf.prototype.T=function(){return this.P};\r\nvf.prototype.Ja=function(){this.w()};function xf(a){var b=pa({},a);delete b.source;sf.call(this,b);this.h=this.f=this.c=null;a.map&&this.setMap(a.map);R(this,La(\"source\"),this.Hd,this);this.$b(a.source?a.source:null)}B(xf,sf);function yf(a,b){return a.visible&&b>=a.minResolution&&b<a.maxResolution}n=xf.prototype;n.Pb=function(a){a=a?a:[];a.push(tf(this));return a};n.da=function(){return this.get(\"source\")||null};n.Sb=function(){var a=this.da();return a?a.T():\"undefined\"};n.fe=function(){this.w()};\r\nn.Hd=function(){this.h&&(M(this.h),this.h=null);var a=this.da();a&&(this.h=R(a,\"change\",this.fe,this));this.w()};n.setMap=function(a){this.c&&(M(this.c),this.c=null);a||this.w();this.f&&(M(this.f),this.f=null);a&&(this.c=R(a,\"precompose\",function(a){var c=tf(this);c.hb=!1;c.zIndex=Infinity;a.frameState.layerStatesArray.push(c);a.frameState.layerStates[J(this)]=c},this),this.f=R(this,\"change\",a.render,a),this.w())};n.$b=function(a){this.set(\"source\",a)};function zf(){this.b={};this.a=0}zf.prototype.clear=function(){this.b={};this.a=0};zf.prototype.get=function(a,b,c){a=b+\":\"+a+\":\"+(c?nd(c):\"null\");return a in this.b?this.b[a]:null};zf.prototype.set=function(a,b,c,d){this.b[b+\":\"+a+\":\"+(c?nd(c):\"null\")]=d;++this.a};var Af=new zf;var Bf=Array(6);function Cf(){return[1,0,0,1,0,0]}function Df(a){return Ef(a,1,0,0,1,0,0)}function Ff(a,b){var c=a[0],d=a[1],e=a[2],f=a[3],g=a[4],h=a[5],k=b[0],l=b[1],m=b[2],p=b[3],q=b[4],u=b[5];a[0]=c*k+e*l;a[1]=d*k+f*l;a[2]=c*m+e*p;a[3]=d*m+f*p;a[4]=c*q+e*u+g;a[5]=d*q+f*u+h}function Ef(a,b,c,d,e,f,g){a[0]=b;a[1]=c;a[2]=d;a[3]=e;a[4]=f;a[5]=g;return a}function Gf(a,b){a[0]=b[0];a[1]=b[1];a[2]=b[2];a[3]=b[3];a[4]=b[4];a[5]=b[5];return a}\r\nfunction Hf(a,b){var c=b[0],d=b[1];b[0]=a[0]*c+a[2]*d+a[4];b[1]=a[1]*c+a[3]*d+a[5];return b}function If(a,b){var c=Math.cos(b),d=Math.sin(b);Ff(a,Ef(Bf,c,d,-d,c,0,0))}function Jf(a,b,c){Ff(a,Ef(Bf,b,0,0,c,0,0))}function Kf(a,b,c){Ff(a,Ef(Bf,1,0,0,1,b,c))}function Lf(a,b,c,d,e,f,g,h){var k=Math.sin(f);f=Math.cos(f);a[0]=d*f;a[1]=e*k;a[2]=-d*k;a[3]=e*f;a[4]=g*d*f-h*d*k+b;a[5]=g*e*k+h*e*f+c;return a}\r\nfunction Mf(a){var b=a[0]*a[3]-a[1]*a[2];L(0!==b,32);var c=a[0],d=a[1],e=a[2],f=a[3],g=a[4],h=a[5];a[0]=f/b;a[1]=-d/b;a[2]=-e/b;a[3]=c/b;a[4]=(e*h-f*g)/b;a[5]=-(c*h-d*g)/b};function Nf(a,b){this.g=b;this.c={};this.j={}}B(Nf,Aa);function Of(a){var b=a.viewState,c=a.coordinateToPixelTransform,d=a.pixelToCoordinateTransform;Lf(c,a.size[0]/2,a.size[1]/2,1/b.resolution,-1/b.resolution,-b.rotation,-b.center[0],-b.center[1]);Mf(Gf(d,c))}n=Nf.prototype;n.R=function(){for(var a in this.c)Da(this.c[a])};function Pf(){if(32<Af.a){var a=0,b,c;for(b in Af.b)c=Af.b[b],0!==(a++&3)||Ha(c)||(delete Af.b[b],--Af.a)}}\r\nn.fa=function(a,b,c,d,e,f){function g(a,e){var f=J(a).toString(),g=b.layerStates[J(e)].hb;if(!(f in b.skippedFeatureUids)||g)return c.call(d,a,g?e:null)}var h,k=b.viewState,l=k.resolution,m=k.projection,k=a;if(m.b){var m=m.G(),p=qb(m),q=a[0];if(q<m[0]||q>m[2])k=[q+p*Math.ceil((m[0]-q)/p),a[1]]}m=b.layerStatesArray;for(p=m.length-1;0<=p;--p){var u=m[p],q=u.layer;if(yf(u,l)&&e.call(f,q)&&(u=Qf(this,q),q.da()&&(h=u.fa(q.da().i?k:a,b,g,d)),h))return h}};\r\nn.Fc=function(a,b,c,d){return void 0!==this.fa(a,b,yb,this,c,d)};function Qf(a,b){var c=J(b).toString();if(c in a.c)return a.c[c];var d=a.Mb(b);a.c[c]=d;a.j[c]=R(d,\"change\",a.wd,a);return d}n.wd=function(){this.g.render()};n.vb=I;n.ue=function(a,b){for(var c in this.c)if(!(b&&c in b.layerStates)){var d=c,e=this.c[d];delete this.c[d];M(this.j[d]);delete this.j[d];Da(e)}};function Rf(a,b){for(var c in a.c)if(!(c in b.layerStates)){b.postRenderFunctions.push(a.ue.bind(a));break}}\r\nfunction Ta(a,b){return a.zIndex-b.zIndex};function Sf(a,b){Ga.call(this);this.V=a;this.state=b;this.b=null;this.key=\"\"}B(Sf,Ga);function Tf(a){U(a,\"change\")}Sf.prototype.getKey=function(){return this.key+\"/\"+this.V};Sf.prototype.T=function(){return this.state};function Uf(a,b){this.j=a;this.f=b;this.b=[];this.c=[];this.a={}}Uf.prototype.clear=function(){this.b.length=0;this.c.length=0;qa(this.a)};function Vf(a){var b=a.b,c=a.c,d=b[0];1==b.length?(b.length=0,c.length=0):(b[0]=b.pop(),c[0]=c.pop(),Wf(a,0));b=a.f(d);delete a.a[b];return d}Uf.prototype.g=function(a){L(!(this.f(a)in this.a),31);var b=this.j(a);return Infinity!=b?(this.b.push(a),this.c.push(b),this.a[this.f(a)]=!0,Xf(this,0,this.b.length-1),!0):!1};\r\nfunction Wf(a,b){for(var c=a.b,d=a.c,e=c.length,f=c[b],g=d[b],h=b;b<e>>1;){var k=2*b+1,l=2*b+2,k=l<e&&d[l]<d[k]?l:k;c[b]=c[k];d[b]=d[k];b=k}c[b]=f;d[b]=g;Xf(a,h,b)}function Xf(a,b,c){var d=a.b;a=a.c;for(var e=d[c],f=a[c];c>b;){var g=c-1>>1;if(a[g]>f)d[c]=d[g],a[c]=a[g],c=g;else break}d[c]=e;a[c]=f}function Yf(a){var b=a.j,c=a.b,d=a.c,e=0,f=c.length,g,h,k;for(h=0;h<f;++h)g=c[h],k=b(g),Infinity==k?delete a.a[a.f(g)]:(d[e]=k,c[e++]=g);c.length=e;d.length=e;for(b=(a.b.length>>1)-1;0<=b;b--)Wf(a,b)};function Zf(a,b){Uf.call(this,function(b){return a.apply(null,b)},function(a){return a[0].getKey()});this.C=b;this.l=0;this.h={}}B(Zf,Uf);Zf.prototype.g=function(a){var b=Uf.prototype.g.call(this,a);b&&R(a[0],\"change\",this.i,this);return b};Zf.prototype.i=function(a){a=a.target;var b=a.T();if(2===b||3===b||4===b||5===b)ya(a,\"change\",this.i,this),a=a.getKey(),a in this.h&&(delete this.h[a],--this.l),this.C()};function $f(){this.b=[];this.a=this.c=0}function ag(a,b){var c=a.a,d=.05-c,e=Math.log(.05/a.a)/-.005;return Dc({source:b,duration:e,easing:function(a){return c*(Math.exp(-.005*a*e)-1)/d}})};function bg(a){V.call(this);this.aa=null;this.set(\"active\",!0);this.handleEvent=a.handleEvent}B(bg,V);bg.prototype.setMap=function(a){this.aa=a};function cg(a,b,c,d,e){if(void 0!==c){var f=b.get(xc),g=b.qa();void 0!==f&&g&&e&&0<e&&(a.oa(Ec({rotation:f,duration:e,easing:Ac})),d&&a.oa(Dc({source:g,duration:e,easing:Ac})));b.rotate(c,d)}}function dg(a,b,c,d,e){var f=b.O();c=b.constrainResolution(f,c,0);eg(a,b,c,d,e)}\r\nfunction eg(a,b,c,d,e){if(c){var f=b.O(),g=b.qa();void 0!==f&&g&&c!==f&&e&&0<e&&(a.oa(Fc({resolution:f,duration:e,easing:Ac})),d&&a.oa(Dc({source:g,duration:e,easing:Ac})));if(d){var h;a=b.qa();e=b.O();void 0!==a&&void 0!==e&&(h=[d[0]-c*(d[0]-a[0])/e,d[1]-c*(d[1]-a[1])/e]);b.xa(h)}b.set(wc,c)}};function fg(a){a=a?a:{};this.a=a.delta?a.delta:1;bg.call(this,{handleEvent:gg});this.c=void 0!==a.duration?a.duration:250}B(fg,bg);function gg(a){var b=!1,c=a.originalEvent;if(a.type==jf){var b=a.map,d=a.coordinate,c=c.shiftKey?-this.a:this.a,e=b.U();dg(b,e,c,d,this.c);a.preventDefault();b=!0}return!b};function hg(a){a=a.originalEvent;return a.altKey&&!(a.metaKey||a.ctrlKey)&&a.shiftKey}function ig(a){a=a.originalEvent;return 0==a.button&&!(Cd&&ne&&a.ctrlKey)}function jg(a){a=a.originalEvent;return!a.altKey&&!(a.metaKey||a.ctrlKey)&&!a.shiftKey}function kg(a){a=a.originalEvent;return!a.altKey&&!(a.metaKey||a.ctrlKey)&&a.shiftKey}function lg(a){a=a.originalEvent.target.tagName;return\"INPUT\"!==a&&\"SELECT\"!==a&&\"TEXTAREA\"!==a}function mg(a){L(a.b,56);return\"mouse\"==a.b.pointerType};function ng(a){a=a?a:{};bg.call(this,{handleEvent:a.handleEvent?a.handleEvent:og});this.Bb=a.handleDownEvent?a.handleDownEvent:zb;this.Cb=a.handleDragEvent?a.handleDragEvent:I;this.zb=a.handleMoveEvent?a.handleMoveEvent:I;this.Eb=a.handleUpEvent?a.handleUpEvent:zb;this.v=!1;this.N={};this.f=[]}B(ng,bg);function pg(a){for(var b=a.length,c=0,d=0,e=0;e<b;e++)c+=a[e].clientX,d+=a[e].clientY;return[c/b,d/b]}\r\nfunction og(a){if(!(a instanceof ef))return!0;var b=!1,c=a.type;if(c===of||c===qf||c===mf)c=a.b,a.type==mf?delete this.N[c.pointerId]:a.type==of?this.N[c.pointerId]=c:c.pointerId in this.N&&(this.N[c.pointerId]=c),this.f=ra(this.N);this.v&&(a.type==qf?this.Cb(a):a.type==mf&&(this.v=this.Eb(a)));a.type==of?(this.v=a=this.Bb(a),b=this.B(a)):a.type==pf&&this.zb(a);return!b}ng.prototype.B=function(a){return a};function qg(a){ng.call(this,{handleDownEvent:rg,handleDragEvent:sg,handleUpEvent:tg});a=a?a:{};this.a=a.kinetic;this.c=this.g=null;this.i=a.condition?a.condition:jg;this.h=!1}B(qg,ng);function sg(a){var b=pg(this.f);this.a&&this.a.b.push(b[0],b[1],Date.now());if(this.c){var c=this.c[0]-b[0],d=b[1]-this.c[1];a=a.map.U();var e=a.T(),d=c=[c,d],f=e.resolution;d[0]*=f;d[1]*=f;bb(c,e.rotation);ab(c,e.center);c=a.a.center(c);a.xa(c)}this.c=b}\r\nfunction tg(a){var b=a.map;a=b.U();if(0===this.f.length){var c;if(c=!this.h&&this.a)if(c=this.a,6>c.b.length)c=!1;else{var d=Date.now()-100,e=c.b.length-3;if(c.b[e+2]<d)c=!1;else{for(var f=e-3;0<f&&c.b[f+2]>d;)f-=3;var d=c.b[e+2]-c.b[f+2],g=c.b[e]-c.b[f],e=c.b[e+1]-c.b[f+1];c.c=Math.atan2(e,g);c.a=Math.sqrt(g*g+e*e)/d;c=.05<c.a}}c?(c=(.05-this.a.a)/-.005,e=this.a.c,f=a.qa(),this.g=ag(this.a,f),b.oa(this.g),f=ug(b,f),b=b.Ba([f[0]-c*Math.cos(e),f[1]-c*Math.sin(e)]),b=a.a.center(b),a.xa(b)):b.render();\r\nzc(a,-1);return!1}this.c=null;return!0}function rg(a){if(0<this.f.length&&this.i(a)){var b=a.map,c=b.U();this.c=null;this.v||zc(c,1);this.g&&Qa(b.D,this.g)&&(c.xa(a.frameState.viewState.center),this.g=null);this.a&&(a=this.a,a.b.length=0,a.c=0,a.a=0);this.h=1<this.f.length;return!0}return!1}qg.prototype.B=zb;function vg(a){a=a?a:{};ng.call(this,{handleDownEvent:wg,handleDragEvent:xg,handleUpEvent:yg});this.c=a.condition?a.condition:hg;this.a=void 0;this.g=void 0!==a.duration?a.duration:250}B(vg,ng);function xg(a){if(mg(a)){var b=a.map,c=b.Ta();a=a.pixel;c=Math.atan2(c[1]/2-a[1],a[0]-c[0]/2);if(void 0!==this.a){a=c-this.a;var d=b.U(),e=d.get(xc);cg(b,d,e-a)}this.a=c}}\r\nfunction yg(a){if(!mg(a))return!0;a=a.map;var b=a.U();zc(b,-1);var c=b.get(xc),d=this.g,c=b.constrainRotation(c,0);cg(a,b,c,void 0,d);return!1}function wg(a){return mg(a)&&ig(a)&&this.c(a)?(zc(a.map.U(),1),this.a=void 0,!0):!1}vg.prototype.B=zb;function zg(a){this.f=null;this.a=document.createElement(\"div\");this.a.style.position=\"absolute\";this.a.className=\"ol-box \"+a;this.c=this.g=this.b=null}B(zg,Aa);zg.prototype.R=function(){this.setMap(null)};function Ag(a){var b=a.g,c=a.c;a=a.a.style;a.left=Math.min(b[0],c[0])+\"px\";a.top=Math.min(b[1],c[1])+\"px\";a.width=Math.abs(c[0]-b[0])+\"px\";a.height=Math.abs(c[1]-b[1])+\"px\"}\r\nzg.prototype.setMap=function(a){if(this.b){this.b.s.removeChild(this.a);var b=this.a.style;b.left=b.top=b.width=b.height=\"inherit\"}(this.b=a)&&this.b.s.appendChild(this.a)};function Bg(a){var b=a.g,c=a.c,b=[b,[b[0],c[1]],c,[c[0],b[1]]].map(a.b.Ba,a.b);b[4]=b[0].slice();a.f?a.f.ea([b]):a.f=new qc([b])}zg.prototype.S=function(){return this.f};function Cg(a,b,c){T.call(this,a);this.coordinate=b;this.mapBrowserEvent=c}B(Cg,T);function Dg(a){ng.call(this,{handleDownEvent:Eg,handleDragEvent:Fg,handleUpEvent:Gg});a=a?a:{};this.a=new zg(a.className||\"ol-dragbox\");this.c=null;this.j=a.condition?a.condition:yb;this.i=a.boxEndCondition?a.boxEndCondition:Hg}B(Dg,ng);function Hg(a,b,c){a=c[0]-b[0];b=c[1]-b[1];return 64<=a*a+b*b}\r\nfunction Fg(a){if(mg(a)){var b=this.a,c=a.pixel;b.g=this.c;b.c=c;Bg(b);Ag(b);U(this,new Cg(\"boxdrag\",a.coordinate,a))}}Dg.prototype.S=function(){return this.a.S()};Dg.prototype.h=I;function Gg(a){if(!mg(a))return!0;this.a.setMap(null);this.i(a,this.c,a.pixel)&&(this.h(a),U(this,new Cg(\"boxend\",a.coordinate,a)));return!1}\r\nfunction Eg(a){if(mg(a)&&ig(a)&&this.j(a)){this.c=a.pixel;this.a.setMap(a.map);var b=this.a,c=this.c;b.g=this.c;b.c=c;Bg(b);Ag(b);U(this,new Cg(\"boxstart\",a.coordinate,a));return!0}return!1};function Ig(a){a=a?a:{};var b=a.condition?a.condition:kg;this.g=void 0!==a.duration?a.duration:200;this.s=void 0!==a.out?a.out:!1;Dg.call(this,{condition:b,className:a.className||\"ol-dragzoom\"})}B(Ig,Dg);\r\nIg.prototype.h=function(){var a=this.aa,b=a.U(),c=a.Ta(),d=this.S().G();if(this.s){var e=b.lc(c),d=[ug(a,sb(d)),ug(a,[d[2],d[3]])],f=jb(void 0),g,h;g=0;for(h=d.length;g<h;++g)eb(f,d[g]);f=1/yc(f,c);d=(e[2]-e[0])/2*(f-1);f=(e[3]-e[1])/2*(f-1);e[0]-=d;e[2]+=d;e[1]-=f;e[3]+=f;d=e}c=b.constrainResolution(yc(d,c));e=b.O();f=b.qa();a.oa(Fc({resolution:e,duration:this.g,easing:Ac}));a.oa(Dc({source:f,duration:this.g,easing:Ac}));b.xa(tb(d));b.set(wc,c)};function Jg(a){bg.call(this,{handleEvent:Kg});a=a||{};this.a=function(a){return jg(a)&&lg(a)};this.c=void 0!==a.condition?a.condition:this.a;this.f=void 0!==a.duration?a.duration:100;this.g=void 0!==a.pixelDelta?a.pixelDelta:128}B(Jg,bg);\r\nfunction Kg(a){var b=!1;if(\"keydown\"==a.type){var c=a.originalEvent.keyCode;if(this.c(a)&&(40==c||37==c||39==c||38==c)){var d=a.map,b=d.U(),e=b.O()*this.g,f=0,g=0;40==c?g=-e:37==c?f=-e:39==c?f=e:g=e;c=[f,g];bb(c,b.get(xc));e=this.f;if(f=b.qa())e&&0<e&&d.oa(Dc({source:f,duration:e,easing:Cc})),d=b.a.center([f[0]+c[0],f[1]+c[1]]),b.xa(d);a.preventDefault();b=!0}}return!b};function Lg(a){bg.call(this,{handleEvent:Mg});a=a?a:{};this.c=a.condition?a.condition:lg;this.a=a.delta?a.delta:1;this.f=void 0!==a.duration?a.duration:100}B(Lg,bg);function Mg(a){var b=!1;if(\"keydown\"==a.type||\"keypress\"==a.type){var c=a.originalEvent.charCode;if(this.c(a)&&(43==c||45==c)){var b=a.map,c=43==c?this.a:-this.a,d=b.U();dg(b,d,c,void 0,this.f);a.preventDefault();b=!0}}return!b};function Ng(a){bg.call(this,{handleEvent:Og});a=a||{};this.a=0;this.i=void 0!==a.duration?a.duration:250;this.j=void 0!==a.useAnchor?a.useAnchor:!0;this.f=null;this.g=this.c=void 0}B(Ng,bg);\r\nfunction Og(a){var b=!1;if(\"wheel\"==a.type||\"mousewheel\"==a.type){var b=a.map,c=a.originalEvent;this.j&&(this.f=a.coordinate);var d;\"wheel\"==a.type?(d=c.deltaY,le&&c.deltaMode===K.WheelEvent.DOM_DELTA_PIXEL&&(d/=oe),c.deltaMode===K.WheelEvent.DOM_DELTA_LINE&&(d*=40)):\"mousewheel\"==a.type&&(d=-c.wheelDeltaY,me&&(d/=3));this.a+=d;void 0===this.c&&(this.c=Date.now());d=Math.max(80-(Date.now()-this.c),0);K.clearTimeout(this.g);this.g=K.setTimeout(this.h.bind(this,b),d);a.preventDefault();b=!0}return!b}\r\nNg.prototype.h=function(a){var b=ia(this.a,-1,1),c=a.U();dg(a,c,-b,this.f,this.i);this.a=0;this.f=null;this.g=this.c=void 0};function Pg(a){ng.call(this,{handleDownEvent:Qg,handleDragEvent:Rg,handleUpEvent:Sg});a=a||{};this.c=null;this.g=void 0;this.a=!1;this.h=0;this.j=void 0!==a.threshold?a.threshold:.3;this.i=void 0!==a.duration?a.duration:250}B(Pg,ng);\r\nfunction Rg(a){var b=0,c=this.f[0],d=this.f[1],c=Math.atan2(d.clientY-c.clientY,d.clientX-c.clientX);void 0!==this.g&&(b=c-this.g,this.h+=b,!this.a&&Math.abs(this.h)>this.j&&(this.a=!0));this.g=c;a=a.map;c=a.a.getBoundingClientRect();d=pg(this.f);d[0]-=c.left;d[1]-=c.top;this.c=a.Ba(d);this.a&&(c=a.U(),d=c.get(xc),a.render(),cg(a,c,d+b,this.c))}\r\nfunction Sg(a){if(2>this.f.length){a=a.map;var b=a.U();zc(b,-1);if(this.a){var c=b.get(xc),d=this.c,e=this.i,c=b.constrainRotation(c,0);cg(a,b,c,d,e)}return!1}return!0}function Qg(a){return 2<=this.f.length?(a=a.map,this.c=null,this.g=void 0,this.a=!1,this.h=0,this.v||zc(a.U(),1),a.render(),!0):!1}Pg.prototype.B=zb;function Tg(a){ng.call(this,{handleDownEvent:Ug,handleDragEvent:Vg,handleUpEvent:Wg});a=a?a:{};this.c=null;this.h=void 0!==a.duration?a.duration:400;this.a=void 0;this.g=1}B(Tg,ng);function Vg(a){var b=1,c=this.f[0],d=this.f[1],e=c.clientX-d.clientX,c=c.clientY-d.clientY,e=Math.sqrt(e*e+c*c);void 0!==this.a&&(b=this.a/e);this.a=e;1!=b&&(this.g=b);a=a.map;var e=a.U(),c=e.O(),d=a.a.getBoundingClientRect(),f=pg(this.f);f[0]-=d.left;f[1]-=d.top;this.c=a.Ba(f);a.render();eg(a,e,c*b,this.c)}\r\nfunction Wg(a){if(2>this.f.length){a=a.map;var b=a.U();zc(b,-1);var c=b.O(),d=this.c,e=this.h,c=b.constrainResolution(c,0,this.g-1);eg(a,b,c,d,e);return!1}return!0}function Ug(a){return 2<=this.f.length?(a=a.map,this.c=null,this.a=void 0,this.g=1,this.v||zc(a.U(),1),a.render(),!0):!1}Tg.prototype.B=zb;function Xg(a){var b=a||{};a=pa({},b);delete a.layers;b=b.layers;sf.call(this,a);this.c=[];this.a={};R(this,La(\"layers\"),this.yd,this);b?Array.isArray(b)?b=new cd(b.slice()):L(b instanceof cd,43):b=new cd;this.set(\"layers\",b)}B(Xg,sf);n=Xg.prototype;n.rb=function(){this.gb()&&this.w()};\r\nn.yd=function(){this.c.forEach(M);this.c.length=0;var a=this.get(\"layers\");this.c.push(R(a,hd,this.xd,this),R(a,id,this.zd,this));for(var b in this.a)this.a[b].forEach(M);qa(this.a);var a=a.a,c,d;b=0;for(c=a.length;b<c;b++)d=a[b],this.a[J(d).toString()]=[R(d,\"propertychange\",this.rb,this),R(d,\"change\",this.rb,this)];this.w()};n.xd=function(a){a=a.element;var b=J(a).toString();this.a[b]=[R(a,\"propertychange\",this.rb,this),R(a,\"change\",this.rb,this)];this.w()};\r\nn.zd=function(a){a=J(a.element).toString();this.a[a].forEach(M);delete this.a[a];this.w()};n.Pb=function(a){var b=void 0!==a?a:[],c=b.length;ed(this.get(\"layers\"),function(a){a.Pb(b)});a=tf(this);var d,e;for(d=b.length;c<d;c++)e=b[c],e.opacity*=a.opacity,e.visible=e.visible&&a.visible,e.maxResolution=Math.min(e.maxResolution,a.maxResolution),e.minResolution=Math.max(e.minResolution,a.minResolution),void 0!==a.extent&&(e.extent=void 0!==e.extent?vb(e.extent,a.extent):a.extent);return b};n.Sb=function(){return\"ready\"};function Yg(a){Eb.call(this,{code:a,units:\"m\",extent:Zg,global:!0,worldExtent:$g})}B(Yg,Eb);Yg.prototype.getPointResolution=function(a,b){return a/ja(b[1]/6378137)};var ah=6378137*Math.PI,Zg=[-ah,-ah,ah,ah],$g=[-180,-85,180,85],bh=\"EPSG:3857 EPSG:102100 EPSG:102113 EPSG:900913 urn:ogc:def:crs:EPSG:6.18:3:3857 urn:ogc:def:crs:EPSG::3857 http://www.opengis.net/gml/srs/epsg.xml#3857\".split(\" \").map(function(a){return new Yg(a)});\r\nfunction ch(a,b,c){var d=a.length;c=1<c?c:2;void 0===b&&(2<c?b=a.slice():b=Array(d));for(var e=0;e<d;e+=c)b[e]=6378137*Math.PI*a[e]/180,b[e+1]=6378137*Math.log(Math.tan(Math.PI*(a[e+1]+90)/360));return b}function dh(a,b,c){var d=a.length;c=1<c?c:2;void 0===b&&(2<c?b=a.slice():b=Array(d));for(var e=0;e<d;e+=c)b[e]=180*a[e]/(6378137*Math.PI),b[e+1]=360*Math.atan(Math.exp(a[e+1]/6378137))/Math.PI-90;return b};var eh=new Ab(6378137);function fh(a,b){Eb.call(this,{code:a,units:\"degrees\",extent:gh,axisOrientation:b,global:!0,metersPerUnit:hh,worldExtent:gh})}B(fh,Eb);fh.prototype.getPointResolution=function(a){return a};\r\nvar gh=[-180,-90,180,90],hh=Math.PI*eh.radius/180,ih=[new fh(\"CRS:84\"),new fh(\"EPSG:4326\",\"neu\"),new fh(\"urn:ogc:def:crs:EPSG::4326\",\"neu\"),new fh(\"urn:ogc:def:crs:EPSG:6.6:4326\",\"neu\"),new fh(\"urn:ogc:def:crs:OGC:1.3:CRS84\"),new fh(\"urn:ogc:def:crs:OGC:2:84\"),new fh(\"http://www.opengis.net/gml/srs/epsg.xml#4326\",\"neu\"),new fh(\"urn:x-ogc:def:crs:EPSG:4326\",\"neu\")];function W(a){a=a?a:{};var b=pa({},a);delete b.preload;delete b.useInterimTilesOnError;xf.call(this,b);this.set(\"preload\",void 0!==a.preload?a.preload:0);this.set(\"useInterimTilesOnError\",void 0!==a.useInterimTilesOnError?a.useInterimTilesOnError:!0)}B(W,xf);function jh(a){return a.get(\"useInterimTilesOnError\")};var kh=[0,0,0,1],lh=[],mh=[0,0,0,1];function nh(a,b,c,d){0!==b&&(a.translate(c,d),a.rotate(b),a.translate(-c,-d))};function oh(a){this.C=a.opacity;this.K=a.rotateWithView;this.s=a.rotation;this.v=a.scale;this.B=a.snapToPixel};function ph(a){a=a||{};this.h=this.c=this.f=null;this.g=void 0!==a.fill?a.fill:null;this.b=void 0!==a.stroke?a.stroke:null;this.a=a.radius;this.j=[0,0];this.i=this.u=this.l=null;var b=a.atlasManager,c,d=null,e,f=0;this.b&&(e=nd(this.b.a),f=this.b.c,void 0===f&&(f=1),d=this.b.b,pe||(d=null));var g=2*(this.a+f)+1;e={strokeStyle:e,jb:f,size:g,lineDash:d};if(void 0===b)b=Md(g,g),this.c=b.canvas,c=g=this.c.width,this.Oc(e,b,0,0),this.g?this.h=this.c:(b=Md(e.size,e.size),this.h=b.canvas,this.Nc(e,b,0,0));\r\nelse{g=Math.round(g);(d=!this.g)&&(c=this.Nc.bind(this,e));var f=this.b?qh(this.b):\"-\",h=this.g?rh(this.g):\"-\";this.f&&f==this.f[1]&&h==this.f[2]&&this.a==this.f[3]||(this.f=[\"c\"+f+h+(void 0!==this.a?this.a.toString():\"-\"),f,h,this.a]);b=b.add(this.f[0],g,g,this.Oc.bind(this,e),c);this.c=b.image;this.j=[b.offsetX,b.offsetY];c=b.image.width;d?this.h=b.Nd:this.h=this.c}this.l=[g/2,g/2];this.u=[g,g];this.i=[c,c];oh.call(this,{opacity:1,rotateWithView:!1,rotation:0,scale:1,snapToPixel:void 0!==a.snapToPixel?\r\na.snapToPixel:!0})}B(ph,oh);n=ph.prototype;n.eb=function(){return this.l};n.ub=function(){return this.h};n.Z=function(){return this.c};n.ib=function(){return 2};n.Ob=function(){return this.i};n.pa=function(){return this.j};n.Ka=function(){return this.u};n.Vb=I;n.load=I;n.bc=I;\r\nn.Oc=function(a,b,c,d){b.setTransform(1,0,0,1,0,0);b.translate(c,d);b.beginPath();b.arc(a.size/2,a.size/2,this.a,0,2*Math.PI,!0);this.g&&(b.fillStyle=qd(this.g.b),b.fill());this.b&&(b.strokeStyle=a.strokeStyle,b.lineWidth=a.jb,a.lineDash&&b.setLineDash(a.lineDash),b.stroke());b.closePath()};\r\nn.Nc=function(a,b,c,d){b.setTransform(1,0,0,1,0,0);b.translate(c,d);b.beginPath();b.arc(a.size/2,a.size/2,this.a,0,2*Math.PI,!0);b.fillStyle=nd(kh);b.fill();this.b&&(b.strokeStyle=a.strokeStyle,b.lineWidth=a.jb,a.lineDash&&b.setLineDash(a.lineDash),b.stroke());b.closePath()};function sh(a){a=a||{};this.b=void 0!==a.color?a.color:null;this.a=void 0}function rh(a){void 0===a.a&&(a.a=a.b instanceof CanvasPattern||a.b instanceof CanvasGradient?J(a.b).toString():\"f\"+(a.b?nd(a.b):\"-\"));return a.a};function th(){this.a=-1};function uh(){this.a=64;this.b=Array(4);this.g=Array(this.a);this.b[0]=1732584193;this.b[1]=4023233417;this.b[2]=2562383102;this.b[3]=271733878;this.f=this.c=0}(function(){function a(){}a.prototype=th.prototype;uh.a=th.prototype;uh.prototype=new a;uh.prototype.constructor=uh;uh.b=function(a,c,d){for(var e=Array(arguments.length-2),f=2;f<arguments.length;f++)e[f-2]=arguments[f];return th.prototype[c].apply(a,e)}})();\r\nfunction vh(a,b,c){c||(c=0);var d=Array(16);if(\"string\"==typeof b)for(var e=0;16>e;++e)d[e]=b.charCodeAt(c++)|b.charCodeAt(c++)<<8|b.charCodeAt(c++)<<16|b.charCodeAt(c++)<<24;else for(e=0;16>e;++e)d[e]=b[c++]|b[c++]<<8|b[c++]<<16|b[c++]<<24;b=a.b[0];c=a.b[1];var e=a.b[2],f=a.b[3],g;g=b+(f^c&(e^f))+d[0]+3614090360&4294967295;b=c+(g<<7&4294967295|g>>>25);g=f+(e^b&(c^e))+d[1]+3905402710&4294967295;f=b+(g<<12&4294967295|g>>>20);g=e+(c^f&(b^c))+d[2]+606105819&4294967295;e=f+(g<<17&4294967295|g>>>15);g=\r\nc+(b^e&(f^b))+d[3]+3250441966&4294967295;c=e+(g<<22&4294967295|g>>>10);g=b+(f^c&(e^f))+d[4]+4118548399&4294967295;b=c+(g<<7&4294967295|g>>>25);g=f+(e^b&(c^e))+d[5]+1200080426&4294967295;f=b+(g<<12&4294967295|g>>>20);g=e+(c^f&(b^c))+d[6]+2821735955&4294967295;e=f+(g<<17&4294967295|g>>>15);g=c+(b^e&(f^b))+d[7]+4249261313&4294967295;c=e+(g<<22&4294967295|g>>>10);g=b+(f^c&(e^f))+d[8]+1770035416&4294967295;b=c+(g<<7&4294967295|g>>>25);g=f+(e^b&(c^e))+d[9]+2336552879&4294967295;f=b+(g<<12&4294967295|g>>>\r\n20);g=e+(c^f&(b^c))+d[10]+4294925233&4294967295;e=f+(g<<17&4294967295|g>>>15);g=c+(b^e&(f^b))+d[11]+2304563134&4294967295;c=e+(g<<22&4294967295|g>>>10);g=b+(f^c&(e^f))+d[12]+1804603682&4294967295;b=c+(g<<7&4294967295|g>>>25);g=f+(e^b&(c^e))+d[13]+4254626195&4294967295;f=b+(g<<12&4294967295|g>>>20);g=e+(c^f&(b^c))+d[14]+2792965006&4294967295;e=f+(g<<17&4294967295|g>>>15);g=c+(b^e&(f^b))+d[15]+1236535329&4294967295;c=e+(g<<22&4294967295|g>>>10);g=b+(e^f&(c^e))+d[1]+4129170786&4294967295;b=c+(g<<5&4294967295|\r\ng>>>27);g=f+(c^e&(b^c))+d[6]+3225465664&4294967295;f=b+(g<<9&4294967295|g>>>23);g=e+(b^c&(f^b))+d[11]+643717713&4294967295;e=f+(g<<14&4294967295|g>>>18);g=c+(f^b&(e^f))+d[0]+3921069994&4294967295;c=e+(g<<20&4294967295|g>>>12);g=b+(e^f&(c^e))+d[5]+3593408605&4294967295;b=c+(g<<5&4294967295|g>>>27);g=f+(c^e&(b^c))+d[10]+38016083&4294967295;f=b+(g<<9&4294967295|g>>>23);g=e+(b^c&(f^b))+d[15]+3634488961&4294967295;e=f+(g<<14&4294967295|g>>>18);g=c+(f^b&(e^f))+d[4]+3889429448&4294967295;c=e+(g<<20&4294967295|\r\ng>>>12);g=b+(e^f&(c^e))+d[9]+568446438&4294967295;b=c+(g<<5&4294967295|g>>>27);g=f+(c^e&(b^c))+d[14]+3275163606&4294967295;f=b+(g<<9&4294967295|g>>>23);g=e+(b^c&(f^b))+d[3]+4107603335&4294967295;e=f+(g<<14&4294967295|g>>>18);g=c+(f^b&(e^f))+d[8]+1163531501&4294967295;c=e+(g<<20&4294967295|g>>>12);g=b+(e^f&(c^e))+d[13]+2850285829&4294967295;b=c+(g<<5&4294967295|g>>>27);g=f+(c^e&(b^c))+d[2]+4243563512&4294967295;f=b+(g<<9&4294967295|g>>>23);g=e+(b^c&(f^b))+d[7]+1735328473&4294967295;e=f+(g<<14&4294967295|\r\ng>>>18);g=c+(f^b&(e^f))+d[12]+2368359562&4294967295;c=e+(g<<20&4294967295|g>>>12);g=b+(c^e^f)+d[5]+4294588738&4294967295;b=c+(g<<4&4294967295|g>>>28);g=f+(b^c^e)+d[8]+2272392833&4294967295;f=b+(g<<11&4294967295|g>>>21);g=e+(f^b^c)+d[11]+1839030562&4294967295;e=f+(g<<16&4294967295|g>>>16);g=c+(e^f^b)+d[14]+4259657740&4294967295;c=e+(g<<23&4294967295|g>>>9);g=b+(c^e^f)+d[1]+2763975236&4294967295;b=c+(g<<4&4294967295|g>>>28);g=f+(b^c^e)+d[4]+1272893353&4294967295;f=b+(g<<11&4294967295|g>>>21);g=e+(f^\r\nb^c)+d[7]+4139469664&4294967295;e=f+(g<<16&4294967295|g>>>16);g=c+(e^f^b)+d[10]+3200236656&4294967295;c=e+(g<<23&4294967295|g>>>9);g=b+(c^e^f)+d[13]+681279174&4294967295;b=c+(g<<4&4294967295|g>>>28);g=f+(b^c^e)+d[0]+3936430074&4294967295;f=b+(g<<11&4294967295|g>>>21);g=e+(f^b^c)+d[3]+3572445317&4294967295;e=f+(g<<16&4294967295|g>>>16);g=c+(e^f^b)+d[6]+76029189&4294967295;c=e+(g<<23&4294967295|g>>>9);g=b+(c^e^f)+d[9]+3654602809&4294967295;b=c+(g<<4&4294967295|g>>>28);g=f+(b^c^e)+d[12]+3873151461&4294967295;\r\nf=b+(g<<11&4294967295|g>>>21);g=e+(f^b^c)+d[15]+530742520&4294967295;e=f+(g<<16&4294967295|g>>>16);g=c+(e^f^b)+d[2]+3299628645&4294967295;c=e+(g<<23&4294967295|g>>>9);g=b+(e^(c|~f))+d[0]+4096336452&4294967295;b=c+(g<<6&4294967295|g>>>26);g=f+(c^(b|~e))+d[7]+1126891415&4294967295;f=b+(g<<10&4294967295|g>>>22);g=e+(b^(f|~c))+d[14]+2878612391&4294967295;e=f+(g<<15&4294967295|g>>>17);g=c+(f^(e|~b))+d[5]+4237533241&4294967295;c=e+(g<<21&4294967295|g>>>11);g=b+(e^(c|~f))+d[12]+1700485571&4294967295;b=c+\r\n(g<<6&4294967295|g>>>26);g=f+(c^(b|~e))+d[3]+2399980690&4294967295;f=b+(g<<10&4294967295|g>>>22);g=e+(b^(f|~c))+d[10]+4293915773&4294967295;e=f+(g<<15&4294967295|g>>>17);g=c+(f^(e|~b))+d[1]+2240044497&4294967295;c=e+(g<<21&4294967295|g>>>11);g=b+(e^(c|~f))+d[8]+1873313359&4294967295;b=c+(g<<6&4294967295|g>>>26);g=f+(c^(b|~e))+d[15]+4264355552&4294967295;f=b+(g<<10&4294967295|g>>>22);g=e+(b^(f|~c))+d[6]+2734768916&4294967295;e=f+(g<<15&4294967295|g>>>17);g=c+(f^(e|~b))+d[13]+1309151649&4294967295;\r\nc=e+(g<<21&4294967295|g>>>11);g=b+(e^(c|~f))+d[4]+4149444226&4294967295;b=c+(g<<6&4294967295|g>>>26);g=f+(c^(b|~e))+d[11]+3174756917&4294967295;f=b+(g<<10&4294967295|g>>>22);g=e+(b^(f|~c))+d[2]+718787259&4294967295;e=f+(g<<15&4294967295|g>>>17);g=c+(f^(e|~b))+d[9]+3951481745&4294967295;a.b[0]=a.b[0]+b&4294967295;a.b[1]=a.b[1]+(e+(g<<21&4294967295|g>>>11))&4294967295;a.b[2]=a.b[2]+e&4294967295;a.b[3]=a.b[3]+f&4294967295}\r\nfunction wh(a,b){var c;void 0===c&&(c=b.length);for(var d=c-a.a,e=a.g,f=a.c,g=0;g<c;){if(0==f)for(;g<=d;)vh(a,b,g),g+=a.a;if(\"string\"==typeof b)for(;g<c;){if(e[f++]=b.charCodeAt(g++),f==a.a){vh(a,e);f=0;break}}else for(;g<c;)if(e[f++]=b[g++],f==a.a){vh(a,e);f=0;break}}a.c=f;a.f+=c};function xh(a){a=a||{};this.a=void 0!==a.color?a.color:null;this.f=a.lineCap;this.b=void 0!==a.lineDash?a.lineDash:null;this.g=a.lineJoin;this.h=a.miterLimit;this.c=a.width;this.l=void 0}\r\nfunction qh(a){if(void 0===a.l){var b=\"s\"+(a.a?nd(a.a):\"-\")+\",\"+(void 0!==a.f?a.f.toString():\"-\")+\",\"+(a.b?a.b.toString():\"-\")+\",\"+(void 0!==a.g?a.g:\"-\")+\",\"+(void 0!==a.h?a.h.toString():\"-\")+\",\"+(void 0!==a.c?a.c.toString():\"-\"),c=new uh;wh(c,b);var d=Array((56>c.c?c.a:2*c.a)-c.c);d[0]=128;for(b=1;b<d.length-8;++b)d[b]=0;for(var e=8*c.f,b=d.length-8;b<d.length;++b)d[b]=e&255,e/=256;wh(c,d);d=Array(16);for(b=e=0;4>b;++b)for(var f=0;32>f;f+=8)d[e++]=c.b[b]>>>f&255;if(8192>=d.length)c=String.fromCharCode.apply(null,\r\nd);else for(c=\"\",b=0;b<d.length;b+=8192)c+=String.fromCharCode.apply(null,td(d,b,b+8192));a.l=c}return a.l};function yh(a){a=a||{};this.h=null;this.c=zh;void 0!==a.geometry&&Ah(this,a.geometry);this.g=void 0!==a.fill?a.fill:null;this.l=void 0!==a.image?a.image:null;this.f=void 0!==a.stroke?a.stroke:null;this.a=void 0!==a.text?a.text:null;this.b=a.zIndex}yh.prototype.S=function(){return this.h};yh.prototype.Z=function(){return this.l};function Ah(a,b){\"function\"===typeof b?a.c=b:\"string\"===typeof b?a.c=function(a){return a.get(b)}:b?b&&(a.c=function(){return b}):a.c=zh;a.h=b}\r\nfunction Bh(a){if(\"function\"!==typeof a){var b;Array.isArray(a)?b=a:(L(a instanceof yh,41),b=[a]);a=function(){return b}}return a}var Ch=null;function Dh(){if(!Ch){var a=new sh({color:\"rgba(255,255,255,0.4)\"}),b=new xh({color:\"#3399CC\",width:1.25});Ch=[new yh({image:new ph({fill:a,stroke:b,radius:5}),fill:a,stroke:b})]}return Ch}\r\nfunction Eh(){var a={},b=[255,255,255,1],c=[0,153,255,1];a.Polygon=[new yh({fill:new sh({color:[255,255,255,.5]})})];a.MultiPolygon=a.Polygon;a.LineString=[new yh({stroke:new xh({color:b,width:5})}),new yh({stroke:new xh({color:c,width:3})})];a.MultiLineString=a.LineString;a.Circle=a.Polygon.concat(a.LineString);a.Point=[new yh({image:new ph({radius:6,fill:new sh({color:c}),stroke:new xh({color:b,width:1.5})}),zIndex:Infinity})];a.MultiPoint=a.Point;a.GeometryCollection=a.Polygon.concat(a.LineString,\r\na.Point);return a}function zh(a){return a.S()};function Y(a){a=a?a:{};var b=pa({},a);delete b.style;delete b.renderBuffer;delete b.updateWhileAnimating;delete b.updateWhileInteracting;xf.call(this,b);this.a=void 0!==a.renderBuffer?a.renderBuffer:100;this.s=null;this.g=void 0;this.v(a.style);this.i=void 0!==a.updateWhileAnimating?a.updateWhileAnimating:!1;this.j=void 0!==a.updateWhileInteracting?a.updateWhileInteracting:!1}B(Y,xf);Y.prototype.v=function(a){this.s=void 0!==a?a:Dh;this.g=null===a?void 0:Bh(this.s);this.w()};function Fh(){};function Gh(a,b,c,d,e){this.f=a;this.v=b;this.l=c;this.u=d;this.Ga=e;this.g=this.b=this.a=this.ha=this.P=this.N=null;this.aa=this.W=this.K=this.M=this.D=this.B=0;this.ba=!1;this.h=this.ra=0;this.ma=!1;this.Y=0;this.c=\"\";this.Ea=this.na=0;this.va=!1;this.j=this.wa=0;this.ca=this.C=this.i=null;this.s=[];this.Fa=Cf()}B(Gh,Fh);\r\nfunction Hh(a,b,c){if(a.g){b=Xb(b,0,c,2,a.u,a.s);c=a.f;var d=a.Fa,e=c.globalAlpha;1!=a.K&&(c.globalAlpha=e*a.K);var f=a.ra;a.ba&&(f+=a.Ga);var g,h;g=0;for(h=b.length;g<h;g+=2){var k=b[g]-a.B,l=b[g+1]-a.D;a.ma&&(k=Math.round(k),l=Math.round(l));if(0!==f||1!=a.h){var m=k+a.B,p=l+a.D;Lf(d,m,p,a.h,a.h,f,-m,-p);c.setTransform.apply(c,d)}c.drawImage(a.g,a.W,a.aa,a.Y,a.M,k,l,a.Y,a.M)}0===f&&1==a.h||c.setTransform(1,0,0,1,0,0);1!=a.K&&(c.globalAlpha=e)}}\r\nfunction Ih(a,b,c,d){var e=0;if(a.ca&&\"\"!==a.c){a.i&&Jh(a,a.i);a.C&&Kh(a,a.C);var f=a.ca,g=a.f,h=a.ha;h?(h.font!=f.font&&(h.font=g.font=f.font),h.textAlign!=f.textAlign&&(h.textAlign=g.textAlign=f.textAlign),h.textBaseline!=f.textBaseline&&(h.textBaseline=g.textBaseline=f.textBaseline)):(g.font=f.font,g.textAlign=f.textAlign,g.textBaseline=f.textBaseline,a.ha={font:f.font,textAlign:f.textAlign,textBaseline:f.textBaseline});b=Xb(b,e,c,d,a.u,a.s);f=a.f;g=a.wa;for(a.va&&(g+=a.Ga);e<c;e+=d){var h=b[e]+\r\na.na,k=b[e+1]+a.Ea;if(0!==g||1!=a.j){var l=Lf(a.Fa,h,k,a.j,a.j,g,-h,-k);f.setTransform.apply(f,l)}a.C&&f.strokeText(a.c,h,k);a.i&&f.fillText(a.c,h,k)}0===g&&1==a.j||f.setTransform(1,0,0,1,0,0)}}function Lh(a,b,c,d,e,f){var g=a.f;a=Xb(b,c,d,e,a.u,a.s);g.moveTo(a[0],a[1]);b=a.length;f&&(b-=2);for(c=2;c<b;c+=2)g.lineTo(a[c],a[c+1]);f&&g.closePath();return d}function Mh(a,b,c,d,e){var f,g;f=0;for(g=d.length;f<g;++f)c=Lh(a,b,c,d[f],e,!0);return c}n=Gh.prototype;\r\nn.pc=function(a){if(wb(this.l,a.G())){if(this.a||this.b){this.a&&Jh(this,this.a);this.b&&Kh(this,this.b);var b;b=(b=a.o)?Xb(b,0,b.length,a.A,this.u,this.s):null;var c=b[2]-b[0],d=b[3]-b[1],c=Math.sqrt(c*c+d*d),d=this.f;d.beginPath();d.arc(b[0],b[1],c,0,2*Math.PI);this.a&&d.fill();this.b&&d.stroke()}\"\"!==this.c&&Ih(this,a.o.slice(0,a.A),2,2)}};n.cb=function(a){var b=a.o;a=a.A;this.g&&Hh(this,b,b.length);\"\"!==this.c&&Ih(this,b,b.length,a)};\r\nn.bb=function(a){var b=a.o;a=a.A;this.g&&Hh(this,b,b.length);\"\"!==this.c&&Ih(this,b,b.length,a)};n.qc=function(a){if(wb(this.l,a.G())){if(this.b){Kh(this,this.b);var b=this.f,c=a.o;b.beginPath();Lh(this,c,0,c.length,a.A,!1);b.stroke()}\"\"!==this.c&&(a=Nh(a),Ih(this,a,2,2))}};\r\nn.rc=function(a){var b=a.G();if(wb(this.l,b)){if(this.b){Kh(this,this.b);var b=this.f,c=a.o,d=0,e=a.ua,f=a.A;b.beginPath();var g,h;g=0;for(h=e.length;g<h;++g)d=Lh(this,c,d,e[g],f,!1);b.stroke()}\"\"!==this.c&&(a=Oh(a),Ih(this,a,a.length,2))}};n.tc=function(a){if(wb(this.l,a.G())){if(this.b||this.a){this.a&&Jh(this,this.a);this.b&&Kh(this,this.b);var b=this.f;b.beginPath();Mh(this,sc(a),0,a.ja,a.A);this.a&&b.fill();this.b&&b.stroke()}\"\"!==this.c&&(a=tc(a),Ih(this,a,2,2))}};\r\nn.sc=function(a){if(wb(this.l,a.G())){if(this.b||this.a){this.a&&Jh(this,this.a);this.b&&Kh(this,this.b);var b=this.f,c=Ph(a),d=0,e=a.a,f=a.A,g,h;g=0;for(h=e.length;g<h;++g){var k=e[g];b.beginPath();d=Mh(this,c,d,k,f);this.a&&b.fill();this.b&&b.stroke()}}\"\"!==this.c&&(a=Qh(a),Ih(this,a,a.length,2))}};function Jh(a,b){var c=a.f,d=a.N;d?d.fillStyle!=b.fillStyle&&(d.fillStyle=c.fillStyle=b.fillStyle):(c.fillStyle=b.fillStyle,a.N={fillStyle:b.fillStyle})}\r\nfunction Kh(a,b){var c=a.f,d=a.P;d?(d.lineCap!=b.lineCap&&(d.lineCap=c.lineCap=b.lineCap),pe&&!Ra(d.lineDash,b.lineDash)&&c.setLineDash(d.lineDash=b.lineDash),d.lineJoin!=b.lineJoin&&(d.lineJoin=c.lineJoin=b.lineJoin),d.lineWidth!=b.lineWidth&&(d.lineWidth=c.lineWidth=b.lineWidth),d.miterLimit!=b.miterLimit&&(d.miterLimit=c.miterLimit=b.miterLimit),d.strokeStyle!=b.strokeStyle&&(d.strokeStyle=c.strokeStyle=b.strokeStyle)):(c.lineCap=b.lineCap,pe&&c.setLineDash(b.lineDash),c.lineJoin=b.lineJoin,c.lineWidth=\r\nb.lineWidth,c.miterLimit=b.miterLimit,c.strokeStyle=b.strokeStyle,a.P={lineCap:b.lineCap,lineDash:b.lineDash,lineJoin:b.lineJoin,lineWidth:b.lineWidth,miterLimit:b.miterLimit,strokeStyle:b.strokeStyle})}\r\nn.La=function(a,b){if(a){var c=a.b;this.a={fillStyle:qd(c?c:kh)}}else this.a=null;if(b){var c=b.a,d=b.f,e=b.b,f=b.g,g=b.c,h=b.h;this.b={lineCap:void 0!==d?d:\"round\",lineDash:e?e:lh,lineJoin:void 0!==f?f:\"round\",lineWidth:this.v*(void 0!==g?g:1),miterLimit:void 0!==h?h:10,strokeStyle:nd(c?c:mh)}}else this.b=null};\r\nn.Ma=function(a){if(a){var b=a.eb(),c=a.Z(1),d=a.pa(),e=a.Ka();this.B=b[0];this.D=b[1];this.M=e[1];this.g=c;this.K=a.C;this.W=d[0];this.aa=d[1];this.ba=a.K;this.ra=a.s;this.h=a.v;this.ma=a.B;this.Y=e[0]}else this.g=null};\r\nn.Ca=function(a){if(a){var b=a.f;b?(b=b.b,this.i={fillStyle:qd(b?b:kh)}):this.i=null;var c=a.i;if(c){var b=c.a,d=c.f,e=c.b,f=c.g,g=c.c,c=c.h;this.C={lineCap:void 0!==d?d:\"round\",lineDash:e?e:lh,lineJoin:void 0!==f?f:\"round\",lineWidth:void 0!==g?g:1,miterLimit:void 0!==c?c:10,strokeStyle:nd(b?b:mh)}}else this.C=null;var b=a.b,d=a.a,e=a.c,f=a.g,g=a.h,c=a.l,h=a.j,k=a.C;a=a.K;this.ca={font:void 0!==b?b:\"10px sans-serif\",textAlign:void 0!==k?k:\"center\",textBaseline:void 0!==a?a:\"middle\"};this.c=void 0!==\r\nh?h:\"\";this.na=void 0!==d?this.v*d:0;this.Ea=void 0!==e?this.v*e:0;this.va=void 0!==f?f:!1;this.wa=void 0!==g?g:0;this.j=this.v*(void 0!==c?c:1)}else this.c=\"\"};function Rh(a){Ia.call(this);this.a=a}B(Rh,Ia);Rh.prototype.fa=I;Rh.prototype.Ec=zb;Rh.prototype.l=function(a,b,c){return function(d,e){return Sh(a,b,d,e,function(a){c[d]||(c[d]={});c[d][a.V.toString()]=a})}};function Th(a){var b=a.a;b.gb()&&\"ready\"==b.Sb()&&a.w()}function Uh(a,b){b.Mc()&&a.postRenderFunctions.push(function(a,b,e){b=J(a).toString();a.Oa(e.viewState.projection,e.usedTiles[b])}.bind(null,b))}function Vh(a,b){if(b){var c,d,e;d=0;for(e=b.length;d<e;++d)c=b[d],a[J(c).toString()]=c}}\r\nfunction Wh(a,b){var c=b.D;void 0!==c&&(\"string\"===typeof c?a.logos[c]=\"\":c&&(L(\"string\"==typeof c.href,44),L(\"string\"==typeof c.src,45),a.logos[c.src]=c.href))}function Xh(a,b,c,d){b=J(b).toString();c=c.toString();b in a?c in a[b]?(a=a[b][c],d.H<a.H&&(a.H=d.H),d.I>a.I&&(a.I=d.I),d.J<a.J&&(a.J=d.J),d.L>a.L&&(a.L=d.L)):a[b][c]=d:(a[b]={},a[b][c]=d)}function Yh(a,b,c){return[b*(Math.round(a[0]/b)+c[0]%2/2),b*(Math.round(a[1]/b)+c[1]%2/2)]}\r\nfunction Zh(a,b,c,d,e,f,g,h,k,l){var m=J(b).toString();m in a.wantedTiles||(a.wantedTiles[m]={});var p=a.wantedTiles[m];a=a.tileQueue;var q=c.minZoom,u,w,r,x,D,t;for(t=g;t>=q;--t)for(w=Rc(c,f,t,w),r=c.O(t),x=w.H;x<=w.I;++x)for(D=w.J;D<=w.L;++D)g-t<=h?(u=$h(b,t,x,D,d,e),0==u.T()&&(p[u.getKey()]=!0,u.getKey()in a.a||a.g([u,m,Vc(c,u.V),r])),void 0!==k&&k.call(l,u)):b.Vc(t,x,D,e)};function ai(a){Rh.call(this,a);this.M=Cf()}B(ai,Rh);function bi(a,b,c){var d=b.pixelRatio,e=b.size[0]*d,f=b.size[1]*d,g=b.viewState.rotation,h=xb(c),k=[c[2],c[3]],l=[c[2],c[1]];c=sb(c);Hf(b.coordinateToPixelTransform,h);Hf(b.coordinateToPixelTransform,k);Hf(b.coordinateToPixelTransform,l);Hf(b.coordinateToPixelTransform,c);a.save();nh(a,-g,e/2,f/2);a.beginPath();a.moveTo(h[0]*d,h[1]*d);a.lineTo(k[0]*d,k[1]*d);a.lineTo(l[0]*d,l[1]*d);a.lineTo(c[0]*d,c[1]*d);a.clip();nh(a,g,e/2,f/2)}\r\nai.prototype.g=function(a,b,c){ci(this,\"precompose\",c,a,void 0);var d=this.Z();if(d){var e=b.extent,f=void 0!==e;f&&bi(c,a,e);var e=this.N,g=c.globalAlpha;c.globalAlpha=b.opacity;c.drawImage(d,0,0,+d.width,+d.height,Math.round(e[4]),Math.round(e[5]),Math.round(d.width*e[0]),Math.round(d.height*e[3]));c.globalAlpha=g;f&&c.restore()}ci(this,\"postcompose\",c,a,void 0)};\r\nfunction ci(a,b,c,d,e){var f=a.a;if(Ha(f,b)){var g=d.size[0]*d.pixelRatio,h=d.size[1]*d.pixelRatio,k=d.viewState.rotation;nh(c,-k,g/2,h/2);a=void 0!==e?e:di(a,d,0);U(f,new uf(b,new Gh(c,d.pixelRatio,d.extent,a,d.viewState.rotation),d,c,null));nh(c,k,g/2,h/2)}}function di(a,b,c){var d=b.viewState,e=b.pixelRatio,f=e/d.resolution;return Lf(a.M,e*b.size[0]/2,e*b.size[1]/2,f,-f,-d.rotation,-d.center[0]+c,-d.center[1])};function ei(){};var fi=[\"Polygon\",\"LineString\",\"Image\",\"Text\"];function gi(a,b,c,d){this.ra=a;this.P=b;this.overlaps=d;this.g=null;this.h=0;this.resolution=c;this.ca=this.Y=null;this.a=[];this.coordinates=[];this.W=Cf();this.b=[];this.ha=[];this.aa=Cf();this.ba=Cf()}B(gi,Fh);\r\nfunction hi(a,b,c,d,e,f){var g=a.coordinates.length,h=a.Nb(),k=[b[c],b[c+1]],l=[NaN,NaN],m=!0,p,q,u;for(p=c+e;p<d;p+=e){l[0]=b[p];l[1]=b[p+1];u=h[1];var w=h[2],r=h[3],x=l[0],D=l[1],t=0;x<h[0]?t|=16:x>w&&(t|=4);D<u?t|=8:D>r&&(t|=2);0===t&&(t=1);u=t;u!==q?(m&&(a.coordinates[g++]=k[0],a.coordinates[g++]=k[1]),a.coordinates[g++]=l[0],a.coordinates[g++]=l[1],m=!1):1===u?(a.coordinates[g++]=l[0],a.coordinates[g++]=l[1],m=!1):m=!0;k[0]=l[0];k[1]=l[1];q=u}p===c+e&&(a.coordinates[g++]=k[0],a.coordinates[g++]=\r\nk[1]);f&&(a.coordinates[g++]=b[c],a.coordinates[g++]=b[c+1]);return g}function ii(a,b){a.Y=[0,b,0];a.a.push(a.Y);a.ca=[0,b,0];a.b.push(a.ca)}\r\nfunction ji(a,b,c,d,e,f,g,h,k){var l;Ra(d,a.W)?l=a.ha:(l=Xb(a.coordinates,0,a.coordinates.length,2,d,a.ha),Gf(a.W,d));d=!sa(f);var m=0,p=g.length,q,u,w=a.aa,r=a.ba,x,D,t,z,C=0,E=0;for(a=a.a!=g||a.overlaps?0:200;m<p;){var v=g[m],H,G,A,F;switch(v[0]){case 0:q=v[1];d&&f[J(q).toString()]||!q.S()?m=v[2]:void 0===k||wb(k,q.S().G())?++m:m=v[2]+1;break;case 1:C>a&&(b.fill(),C=0);E>a&&(b.stroke(),E=0);C||E||b.beginPath();++m;break;case 2:q=v[1];u=l[q];v=l[q+1];t=l[q+2]-u;q=l[q+3]-v;q=Math.sqrt(t*t+q*q);b.moveTo(u+\r\nq,v);b.arc(u,v,q,0,2*Math.PI,!0);++m;break;case 3:b.closePath();++m;break;case 4:q=v[1];u=v[2];H=v[3];G=v[4]*c;A=v[5]*c;var Q=v[6],N=v[7],O=v[8],S=v[9];F=v[10];t=v[11];z=v[12];var X=v[13],P=v[14];for(F&&(t+=e);q<u;q+=2){v=l[q]-G;F=l[q+1]-A;X&&(v=Math.round(v),F=Math.round(F));if(1!=z||0!==t){var Ba=v+G,Nb=F+A;Lf(w,Ba,Nb,z,z,t,-Ba,-Nb);b.transform.apply(b,w)}Ba=b.globalAlpha;1!=N&&(b.globalAlpha=Ba*N);var Nb=P+O>H.width?H.width-O:P,Ca=Q+S>H.height?H.height-S:Q;b.drawImage(H,O,S,Nb,Ca,v,F,Nb*c,Ca*c);\r\n1!=N&&(b.globalAlpha=Ba);if(1!=z||0!==t)Mf(Gf(r,w)),b.transform.apply(b,r)}++m;break;case 5:q=v[1];u=v[2];A=v[3];Q=v[4]*c;N=v[5]*c;t=v[6];z=v[7]*c;H=v[8];G=v[9];for((F=v[10])&&(t+=e);q<u;q+=2){v=l[q]+Q;F=l[q+1]+N;if(1!=z||0!==t)Lf(w,v,F,z,z,t,-v,-F),b.transform.apply(b,w);O=A.split(\"\\n\");S=O.length;1<S?(X=Math.round(1.5*b.measureText(\"M\").width),F-=(S-1)/2*X):X=0;for(P=0;P<S;P++)Ba=O[P],G&&b.strokeText(Ba,v,F),H&&b.fillText(Ba,v,F),F+=X;if(1!=z||0!==t)Mf(Gf(r,w)),b.transform.apply(b,r)}++m;break;\r\ncase 6:if(void 0!==h&&(q=v[1],q=h(q)))return q;++m;break;case 7:a?C++:b.fill();++m;break;case 8:q=v[1];u=v[2];v=l[q];F=l[q+1];t=v+.5|0;z=F+.5|0;if(t!==x||z!==D)b.moveTo(v,F),x=t,D=z;for(q+=2;q<u;q+=2)if(v=l[q],F=l[q+1],t=v+.5|0,z=F+.5|0,q==u-2||t!==x||z!==D)b.lineTo(v,F),x=t,D=z;++m;break;case 9:C&&(b.fill(),C=0);b.fillStyle=v[1];++m;break;case 10:x=void 0!==v[7]?v[7]:!0;D=v[2];E&&(b.stroke(),E=0);b.strokeStyle=v[1];b.lineWidth=x?D*c:D;b.lineCap=v[3];b.lineJoin=v[4];b.miterLimit=v[5];pe&&b.setLineDash(v[6]);\r\nD=x=NaN;++m;break;case 11:b.font=v[1];b.textAlign=v[2];b.textBaseline=v[3];++m;break;case 12:a?E++:b.stroke();++m;break;default:++m}}C&&b.fill();E&&b.stroke()}gi.prototype.f=function(a,b,c,d,e){ji(this,a,b,c,d,e,this.a,void 0,void 0)};function ki(a){var b=a.b;b.reverse();var c,d=b.length,e,f,g=-1;for(c=0;c<d;++c)if(e=b[c],f=e[0],6==f)g=c;else if(0==f){e[2]=c;e=a.b;for(f=c;g<f;){var h=e[g];e[g]=e[f];e[f]=h;++g;--f}g=-1}}\r\nfunction li(a,b){a.Y[2]=a.a.length;a.Y=null;a.ca[2]=a.b.length;a.ca=null;var c=[6,b];a.a.push(c);a.b.push(c)}gi.prototype.tb=I;gi.prototype.Nb=function(){return this.P};function mi(a,b,c,d){gi.call(this,a,b,c,d);this.j=this.N=null;this.M=this.D=this.B=this.u=this.v=this.s=this.K=this.C=this.i=this.l=this.c=void 0}B(mi,gi);\r\nmi.prototype.cb=function(a,b){if(this.j){ii(this,b);var c=a.o,d=this.coordinates.length,c=hi(this,c,0,c.length,a.A,!1);this.a.push([4,d,c,this.j,this.c,this.l,this.i,this.C,this.K,this.s,this.v,this.u,this.B,this.D,this.M]);this.b.push([4,d,c,this.N,this.c,this.l,this.i,this.C,this.K,this.s,this.v,this.u,this.B,this.D,this.M]);li(this,b)}};\r\nmi.prototype.bb=function(a,b){if(this.j){ii(this,b);var c=a.o,d=this.coordinates.length,c=hi(this,c,0,c.length,a.A,!1);this.a.push([4,d,c,this.j,this.c,this.l,this.i,this.C,this.K,this.s,this.v,this.u,this.B,this.D,this.M]);this.b.push([4,d,c,this.N,this.c,this.l,this.i,this.C,this.K,this.s,this.v,this.u,this.B,this.D,this.M]);li(this,b)}};mi.prototype.tb=function(){ki(this);this.l=this.c=void 0;this.j=this.N=null;this.M=this.D=this.u=this.v=this.s=this.K=this.C=this.B=this.i=void 0};\r\nmi.prototype.Ma=function(a){var b=a.eb(),c=a.Ka(),d=a.ub(1),e=a.Z(1),f=a.pa();this.c=b[0];this.l=b[1];this.N=d;this.j=e;this.i=c[1];this.C=a.C;this.K=f[0];this.s=f[1];this.v=a.K;this.u=a.s;this.B=a.v;this.D=a.B;this.M=c[0]};function ni(a,b,c,d){gi.call(this,a,b,c,d);this.c={ab:void 0,Wa:void 0,Xa:null,Ya:void 0,Za:void 0,$a:void 0,Ub:0,strokeStyle:void 0,lineCap:void 0,lineDash:null,lineJoin:void 0,lineWidth:void 0,miterLimit:void 0}}B(ni,gi);\r\nfunction oi(a,b,c,d,e){var f=a.coordinates.length;b=hi(a,b,c,d,e,!1);f=[8,f,b];a.a.push(f);a.b.push(f);return d}n=ni.prototype;n.Nb=function(){this.g||(this.g=gb(this.P),0<this.h&&fb(this.g,this.resolution*(this.h+1)/2,this.g));return this.g};\r\nfunction pi(a){var b=a.c,c=b.strokeStyle,d=b.lineCap,e=b.lineDash,f=b.lineJoin,g=b.lineWidth,h=b.miterLimit;b.ab==c&&b.Wa==d&&Ra(b.Xa,e)&&b.Ya==f&&b.Za==g&&b.$a==h||(b.Ub!=a.coordinates.length&&(a.a.push([12]),b.Ub=a.coordinates.length),a.a.push([10,c,g,d,f,h,e],[1]),b.ab=c,b.Wa=d,b.Xa=e,b.Ya=f,b.Za=g,b.$a=h)}\r\nn.qc=function(a,b){var c=this.c,d=c.lineWidth;void 0!==c.strokeStyle&&void 0!==d&&(pi(this),ii(this,b),this.b.push([10,c.strokeStyle,c.lineWidth,c.lineCap,c.lineJoin,c.miterLimit,c.lineDash],[1]),c=a.o,oi(this,c,0,c.length,a.A),this.b.push([12]),li(this,b))};\r\nn.rc=function(a,b){var c=this.c,d=c.lineWidth;if(void 0!==c.strokeStyle&&void 0!==d){pi(this);ii(this,b);this.b.push([10,c.strokeStyle,c.lineWidth,c.lineCap,c.lineJoin,c.miterLimit,c.lineDash],[1]);var c=a.ua,d=a.o,e=a.A,f=0,g,h;g=0;for(h=c.length;g<h;++g)f=oi(this,d,f,c[g],e);this.b.push([12]);li(this,b)}};n.tb=function(){this.c.Ub!=this.coordinates.length&&this.a.push([12]);ki(this);this.c=null};\r\nn.La=function(a,b){var c=b.a;this.c.strokeStyle=nd(c?c:mh);c=b.f;this.c.lineCap=void 0!==c?c:\"round\";c=b.b;this.c.lineDash=c?c:lh;c=b.g;this.c.lineJoin=void 0!==c?c:\"round\";c=b.c;this.c.lineWidth=void 0!==c?c:1;c=b.h;this.c.miterLimit=void 0!==c?c:10;this.c.lineWidth>this.h&&(this.h=this.c.lineWidth,this.g=null)};\r\nfunction qi(a,b,c,d){gi.call(this,a,b,c,d);this.c={oc:void 0,ab:void 0,Wa:void 0,Xa:null,Ya:void 0,Za:void 0,$a:void 0,fillStyle:void 0,strokeStyle:void 0,lineCap:void 0,lineDash:null,lineJoin:void 0,lineWidth:void 0,miterLimit:void 0}}B(qi,gi);\r\nfunction ri(a,b,c,d,e){var f=a.c,g=void 0!==f.fillStyle,f=void 0!=f.strokeStyle,h=d.length;if(!g&&!f)return d[h-1];var k=[1];a.a.push(k);a.b.push(k);for(k=0;k<h;++k){var l=d[k],m=a.coordinates.length;c=hi(a,b,c,l,e,!0);c=[8,m,c];a.a.push(c);a.b.push(c);f&&(c=[3],a.a.push(c),a.b.push(c));c=l}b=[7];a.b.push(b);g&&a.a.push(b);f&&(g=[12],a.a.push(g),a.b.push(g));return c}n=qi.prototype;\r\nn.pc=function(a,b){var c=this.c,d=c.strokeStyle;if(void 0!==c.fillStyle||void 0!==d){si(this);ii(this,b);this.b.push([9,nd(kh)]);void 0!==c.strokeStyle&&this.b.push([10,c.strokeStyle,c.lineWidth,c.lineCap,c.lineJoin,c.miterLimit,c.lineDash]);var e=a.o,d=this.coordinates.length;hi(this,e,0,e.length,a.A,!1);e=[1];d=[2,d];this.a.push(e,d);this.b.push(e,d);d=[7];this.b.push(d);void 0!==c.fillStyle&&this.a.push(d);void 0!==c.strokeStyle&&(c=[12],this.a.push(c),this.b.push(c));li(this,b)}};\r\nn.tc=function(a,b){var c=this.c,d=c.strokeStyle;if(void 0!==c.fillStyle||void 0!==d)si(this),ii(this,b),this.b.push([9,nd(kh)]),void 0!==c.strokeStyle&&this.b.push([10,c.strokeStyle,c.lineWidth,c.lineCap,c.lineJoin,c.miterLimit,c.lineDash]),c=a.ja,d=sc(a),ri(this,d,0,c,a.A),li(this,b)};\r\nn.sc=function(a,b){var c=this.c,d=c.strokeStyle;if(void 0!==c.fillStyle||void 0!==d){si(this);ii(this,b);this.b.push([9,nd(kh)]);void 0!==c.strokeStyle&&this.b.push([10,c.strokeStyle,c.lineWidth,c.lineCap,c.lineJoin,c.miterLimit,c.lineDash]);var c=a.a,d=Ph(a),e=a.A,f=0,g,h;g=0;for(h=c.length;g<h;++g)f=ri(this,d,f,c[g],e);li(this,b)}};n.tb=function(){ki(this);this.c=null;var a=this.ra;if(0!==a){var b=this.coordinates,c,d;c=0;for(d=b.length;c<d;++c)b[c]=a*Math.round(b[c]/a)}};\r\nn.Nb=function(){this.g||(this.g=gb(this.P),0<this.h&&fb(this.g,this.resolution*(this.h+1)/2,this.g));return this.g};\r\nn.La=function(a,b){var c=this.c;if(a){var d=a.b;c.fillStyle=qd(d?d:kh)}else c.fillStyle=void 0;b?(d=b.a,c.strokeStyle=nd(d?d:mh),d=b.f,c.lineCap=void 0!==d?d:\"round\",d=b.b,c.lineDash=d?d.slice():lh,d=b.g,c.lineJoin=void 0!==d?d:\"round\",d=b.c,c.lineWidth=void 0!==d?d:1,d=b.h,c.miterLimit=void 0!==d?d:10,c.lineWidth>this.h&&(this.h=c.lineWidth,this.g=null)):(c.strokeStyle=void 0,c.lineCap=void 0,c.lineDash=null,c.lineJoin=void 0,c.lineWidth=void 0,c.miterLimit=void 0)};\r\nfunction si(a){var b=a.c,c=b.fillStyle,d=b.strokeStyle,e=b.lineCap,f=b.lineDash,g=b.lineJoin,h=b.lineWidth,k=b.miterLimit;void 0!==c&&b.oc!=c&&(a.a.push([9,c]),b.oc=b.fillStyle);void 0===d||b.ab==d&&b.Wa==e&&b.Xa==f&&b.Ya==g&&b.Za==h&&b.$a==k||(a.a.push([10,d,h,e,g,k,f]),b.ab=d,b.Wa=e,b.Xa=f,b.Ya=g,b.Za=h,b.$a=k)}function ti(a,b,c,d){gi.call(this,a,b,c,d);this.M=this.D=this.B=null;this.j=\"\";this.K=this.C=0;this.s=void 0;this.u=this.v=0;this.i=this.l=this.c=null}B(ti,gi);\r\nfunction ui(a,b,c,d,e){if(\"\"!==a.j&&a.i&&(a.c||a.l)){if(a.c){var f=a.c,g=a.B;if(!g||g.fillStyle!=f.fillStyle){var h=[9,f.fillStyle];a.a.push(h);a.b.push(h);g?g.fillStyle=f.fillStyle:a.B={fillStyle:f.fillStyle}}}a.l&&(f=a.l,g=a.D,g&&g.lineCap==f.lineCap&&g.lineDash==f.lineDash&&g.lineJoin==f.lineJoin&&g.lineWidth==f.lineWidth&&g.miterLimit==f.miterLimit&&g.strokeStyle==f.strokeStyle||(h=[10,f.strokeStyle,f.lineWidth,f.lineCap,f.lineJoin,f.miterLimit,f.lineDash,!1],a.a.push(h),a.b.push(h),g?(g.lineCap=\r\nf.lineCap,g.lineDash=f.lineDash,g.lineJoin=f.lineJoin,g.lineWidth=f.lineWidth,g.miterLimit=f.miterLimit,g.strokeStyle=f.strokeStyle):a.D={lineCap:f.lineCap,lineDash:f.lineDash,lineJoin:f.lineJoin,lineWidth:f.lineWidth,miterLimit:f.miterLimit,strokeStyle:f.strokeStyle}));f=a.i;g=a.M;g&&g.font==f.font&&g.textAlign==f.textAlign&&g.textBaseline==f.textBaseline||(h=[11,f.font,f.textAlign,f.textBaseline],a.a.push(h),a.b.push(h),g?(g.font=f.font,g.textAlign=f.textAlign,g.textBaseline=f.textBaseline):a.M=\r\n{font:f.font,textAlign:f.textAlign,textBaseline:f.textBaseline});ii(a,e);f=a.coordinates.length;b=hi(a,b,0,c,d,!1);b=[5,f,b,a.j,a.C,a.K,a.v,a.u,!!a.c,!!a.l,a.s];a.a.push(b);a.b.push(b);li(a,e)}}\r\nti.prototype.Ca=function(a){if(a){var b=a.f;b?(b=b.b,b=qd(b?b:kh),this.c?this.c.fillStyle=b:this.c={fillStyle:b}):this.c=null;var c=a.i;if(c){var b=c.a,d=c.f,e=c.b,f=c.g,g=c.c,c=c.h,d=void 0!==d?d:\"round\",e=e?e.slice():lh,f=void 0!==f?f:\"round\",g=void 0!==g?g:1,c=void 0!==c?c:10,b=nd(b?b:mh);if(this.l){var h=this.l;h.lineCap=d;h.lineDash=e;h.lineJoin=f;h.lineWidth=g;h.miterLimit=c;h.strokeStyle=b}else this.l={lineCap:d,lineDash:e,lineJoin:f,lineWidth:g,miterLimit:c,strokeStyle:b}}else this.l=null;\r\nvar k=a.b,b=a.a,d=a.c,e=a.g,g=a.h,c=a.l,f=a.j,h=a.C,l=a.K;a=void 0!==k?k:\"10px sans-serif\";h=void 0!==h?h:\"center\";l=void 0!==l?l:\"middle\";this.i?(k=this.i,k.font=a,k.textAlign=h,k.textBaseline=l):this.i={font:a,textAlign:h,textBaseline:l};this.j=void 0!==f?f:\"\";this.C=void 0!==b?b:0;this.K=void 0!==d?d:0;this.s=void 0!==e?e:!1;this.v=void 0!==g?g:0;this.u=void 0!==c?c:1}else this.j=\"\"};function vi(a,b,c,d,e){this.K=a;this.g=b;this.j=d;this.C=c;this.h=e;this.a={};this.l=Md(1,1);this.i=Cf()}B(vi,ei);\r\nfunction wi(a){for(var b in a.a){var c=a.a[b],d;for(d in c)c[d].tb()}}vi.prototype.fa=function(a,b,c,d,e){var f=Lf(this.i,.5,.5,1/b,-1/b,-c,-a[0],-a[1]),g=this.l;g.clearRect(0,0,1,1);var h;void 0!==this.h&&(h=db(),eb(h,a),fb(h,b*this.h,h));return xi(this,g,f,c,d,function(a){if(0<g.getImageData(0,0,1,1).data[3]){if(a=e(a))return a;g.clearRect(0,0,1,1)}},h)};\r\nvi.prototype.b=function(a,b){var c=void 0!==a?a.toString():\"0\",d=this.a[c];void 0===d&&(d={},this.a[c]=d);c=d[b];void 0===c&&(c=new yi[b](this.K,this.g,this.C,this.j),d[b]=c);return c};vi.prototype.c=function(){return sa(this.a)};\r\nvi.prototype.f=function(a,b,c,d,e,f){var g=Object.keys(this.a).map(Number);g.sort(Ma);var h=this.g,k=h[0],l=h[1],m=h[2],h=h[3],k=[k,l,k,h,m,h,m,l];Xb(k,0,8,2,c,k);a.save();a.beginPath();a.moveTo(k[0],k[1]);a.lineTo(k[2],k[3]);a.lineTo(k[4],k[5]);a.lineTo(k[6],k[7]);a.clip();f=f?f:fi;for(var p,q,k=0,l=g.length;k<l;++k)for(p=this.a[g[k].toString()],m=0,h=f.length;m<h;++m)q=p[f[m]],void 0!==q&&q.f(a,b,c,d,e);a.restore()};\r\nfunction xi(a,b,c,d,e,f,g){var h=Object.keys(a.a).map(Number);h.sort(function(a,b){return b-a});var k,l,m,p,q;k=0;for(l=h.length;k<l;++k)for(p=a.a[h[k].toString()],m=fi.length-1;0<=m;--m)if(q=p[fi[m]],void 0!==q&&(q=ji(q,b,1,c,d,e,q.b,f,g)))return q}var yi={Image:mi,LineString:ni,Polygon:qi,Text:ti};function zi(a,b){return J(a)-J(b)}function Ai(a,b){var c=.5*a/b;return c*c}function Bi(a,b,c,d,e,f){var g=!1,h,k;if(h=c.Z())k=h.ib(),2==k||3==k?h.bc(e,f):(0==k&&h.load(),h.Vb(e,f),g=!0);if(e=(0,c.c)(b))d=e.Rb(d),(0,Ci[d.$()])(a,d,c,b);return g}\r\nvar Ci={Point:function(a,b,c,d){var e=c.Z();if(e){if(2!=e.ib())return;var f=a.b(c.b,\"Image\");f.Ma(e);f.cb(b,d)}if(e=c.a)a=a.b(c.b,\"Text\"),a.Ca(e),ui(a,b.o,2,2,d)},LineString:function(a,b,c,d){var e=c.f;if(e){var f=a.b(c.b,\"LineString\");f.La(null,e);f.qc(b,d)}if(e=c.a)a=a.b(c.b,\"Text\"),a.Ca(e),ui(a,Nh(b),2,2,d)},Polygon:function(a,b,c,d){var e=c.g,f=c.f;if(e||f){var g=a.b(c.b,\"Polygon\");g.La(e,f);g.tc(b,d)}if(e=c.a)a=a.b(c.b,\"Text\"),a.Ca(e),ui(a,tc(b),2,2,d)},MultiPoint:function(a,b,c,d){var e=c.Z();\r\nif(e){if(2!=e.ib())return;var f=a.b(c.b,\"Image\");f.Ma(e);f.bb(b,d)}if(e=c.a)a=a.b(c.b,\"Text\"),a.Ca(e),c=b.o,ui(a,c,c.length,b.A,d)},MultiLineString:function(a,b,c,d){var e=c.f;if(e){var f=a.b(c.b,\"LineString\");f.La(null,e);f.rc(b,d)}if(e=c.a)a=a.b(c.b,\"Text\"),a.Ca(e),b=Oh(b),ui(a,b,b.length,2,d)},MultiPolygon:function(a,b,c,d){var e=c.g,f=c.f;if(f||e){var g=a.b(c.b,\"Polygon\");g.La(e,f);g.sc(b,d)}if(e=c.a)a=a.b(c.b,\"Text\"),a.Ca(e),b=Qh(b),ui(a,b,b.length,2,d)},GeometryCollection:function(a,b,c,d){b=\r\nb.a;var e,f;e=0;for(f=b.length;e<f;++e)(0,Ci[b[e].$()])(a,b[e],c,d)},Circle:function(a,b,c,d){var e=c.g,f=c.f;if(e||f){var g=a.b(c.b,\"Polygon\");g.La(e,f);g.pc(b,d)}if(e=c.a)a=a.b(c.b,\"Text\"),a.Ca(e),ui(a,b.o.slice(0,b.A),2,2,d)}};var Di,Ei=K,Fi=-1<Ei.navigator.userAgent.indexOf(\"OPR\"),Gi=-1<Ei.navigator.userAgent.indexOf(\"Edge\");Di=!(!Ei.navigator.userAgent.match(\"CriOS\")&&null!==Ei.chrome&&void 0!==Ei.chrome&&\"Google Inc.\"===Ei.navigator.vendor&&0==Fi&&0==Gi);function Hi(a,b,c,d){a=c-a;b=d-b;var e=Math.sqrt(a*a+b*b);return[Math.round(c+a/e),Math.round(d+b/e)]}\r\nfunction Ii(a,b,c,d,e,f,g,h,k,l,m){var p=Md(Math.round(c*a),Math.round(c*b));if(0===k.length)return p.canvas;p.scale(c,c);var q=db();k.forEach(function(a){mb(q,a.extent)});var u=Md(Math.round(c*qb(q)/d),Math.round(c*rb(q)/d)),w=c/d;k.forEach(function(a){u.drawImage(a.image,l,l,a.image.width-2*l,a.image.height-2*l,(a.extent[0]-q[0])*w,-(a.extent[3]-q[3])*w,qb(a.extent)*w,rb(a.extent)*w)});var r=xb(g);h.f.forEach(function(a){var b=a.source,e=a.target,g=b[1][0],h=b[1][1],k=b[2][0],l=b[2][1];a=(e[0][0]-\r\nr[0])/f;var m=-(e[0][1]-r[1])/f,w=(e[1][0]-r[0])/f,A=-(e[1][1]-r[1])/f,F=(e[2][0]-r[0])/f,Q=-(e[2][1]-r[1])/f,e=b[0][0],b=b[0][1],g=g-e,h=h-b,k=k-e,l=l-b;a:{g=[[g,h,0,0,w-a],[k,l,0,0,F-a],[0,0,g,h,A-m],[0,0,k,l,Q-m]];h=g.length;for(k=0;k<h;k++){for(var l=k,N=Math.abs(g[k][k]),O=k+1;O<h;O++){var S=Math.abs(g[O][k]);S>N&&(N=S,l=O)}if(0===N){g=null;break a}N=g[l];g[l]=g[k];g[k]=N;for(l=k+1;l<h;l++)for(N=-g[l][k]/g[k][k],O=k;O<h+1;O++)g[l][O]=k==O?0:g[l][O]+N*g[k][O]}k=Array(h);for(l=h-1;0<=l;l--)for(k[l]=\r\ng[l][h]/g[l][l],N=l-1;0<=N;N--)g[N][h]-=g[N][l]*k[l];g=k}g&&(p.save(),p.beginPath(),Di?(k=(a+w+F)/3,l=(m+A+Q)/3,h=Hi(k,l,a,m),w=Hi(k,l,w,A),F=Hi(k,l,F,Q),p.moveTo(w[0],w[1]),p.lineTo(h[0],h[1]),p.lineTo(F[0],F[1])):(p.moveTo(w,A),p.lineTo(a,m),p.lineTo(F,Q)),p.clip(),p.transform(g[0],g[2],g[1],g[3],a,m),p.translate(q[0]-e,q[3]-b),p.scale(d/c,-d/c),p.drawImage(u.canvas,0,0),p.restore())});m&&(p.save(),p.strokeStyle=\"black\",p.lineWidth=1,h.f.forEach(function(a){var b=a.target;a=(b[0][0]-r[0])/f;var c=\r\n-(b[0][1]-r[1])/f,d=(b[1][0]-r[0])/f,e=-(b[1][1]-r[1])/f,g=(b[2][0]-r[0])/f,b=-(b[2][1]-r[1])/f;p.beginPath();p.moveTo(d,e);p.lineTo(a,c);p.lineTo(g,b);p.closePath();p.stroke()}),p.restore());return p.canvas};function Ji(a,b,c,d,e){this.c=a;this.g=b;var f={},g=Ub(this.g,this.c);this.a=function(a){var b=a[0]+\"/\"+a[1];f[b]||(f[b]=g(a));return f[b]};this.h=d;this.C=e*e;this.f=[];this.i=!1;this.j=this.c.b&&!!d&&!!this.c.G()&&qb(d)==qb(this.c.G());this.b=this.c.G()?qb(this.c.G()):null;this.l=this.g.G()?qb(this.g.G()):null;a=xb(c);b=[c[2],c[3]];d=[c[2],c[1]];c=sb(c);e=this.a(a);var h=this.a(b),k=this.a(d),l=this.a(c);Ki(this,a,b,d,c,e,h,k,l,10);if(this.i){var m=Infinity;this.f.forEach(function(a){m=Math.min(m,\r\na.source[0][0],a.source[1][0],a.source[2][0])});this.f.forEach(function(a){if(Math.max(a.source[0][0],a.source[1][0],a.source[2][0])-m>this.b/2){var b=[[a.source[0][0],a.source[0][1]],[a.source[1][0],a.source[1][1]],[a.source[2][0],a.source[2][1]]];b[0][0]-m>this.b/2&&(b[0][0]-=this.b);b[1][0]-m>this.b/2&&(b[1][0]-=this.b);b[2][0]-m>this.b/2&&(b[2][0]-=this.b);Math.max(b[0][0],b[1][0],b[2][0])-Math.min(b[0][0],b[1][0],b[2][0])<this.b/2&&(a.source=b)}},this)}f={}}\r\nfunction Ki(a,b,c,d,e,f,g,h,k,l){var m=cb([f,g,h,k]),p=a.b?qb(m)/a.b:null,q=a.b,u=a.c.b&&.5<p&&1>p,w=!1;if(0<l){if(a.g.c&&a.l)var r=cb([b,c,d,e]),w=w|.25<qb(r)/a.l;!u&&a.c.c&&p&&(w|=.25<p)}if(w||!a.h||wb(m,a.h)){if(!(w||isFinite(f[0])&&isFinite(f[1])&&isFinite(g[0])&&isFinite(g[1])&&isFinite(h[0])&&isFinite(h[1])&&isFinite(k[0])&&isFinite(k[1])))if(0<l)w=!0;else return;if(0<l&&(w||(m=a.a([(b[0]+d[0])/2,(b[1]+d[1])/2]),q=u?(la(f[0],q)+la(h[0],q))/2-la(m[0],q):(f[0]+h[0])/2-m[0],m=(f[1]+h[1])/2-m[1],\r\nw=q*q+m*m>a.C),w)){Math.abs(b[0]-d[0])<=Math.abs(b[1]-d[1])?(u=[(c[0]+d[0])/2,(c[1]+d[1])/2],q=a.a(u),m=[(e[0]+b[0])/2,(e[1]+b[1])/2],p=a.a(m),Ki(a,b,c,u,m,f,g,q,p,l-1),Ki(a,m,u,d,e,p,q,h,k,l-1)):(u=[(b[0]+c[0])/2,(b[1]+c[1])/2],q=a.a(u),m=[(d[0]+e[0])/2,(d[1]+e[1])/2],p=a.a(m),Ki(a,b,u,m,e,f,q,p,k,l-1),Ki(a,u,c,d,m,q,g,h,p,l-1));return}if(u){if(!a.j)return;a.i=!0}a.f.push({source:[f,h,k],target:[b,d,e]});a.f.push({source:[f,g,h],target:[b,c,d]})}}\r\nfunction Li(a){var b=db();a.f.forEach(function(a){a=a.source;eb(b,a[0]);eb(b,a[1]);eb(b,a[2])});return b};function Mi(a){ai.call(this,a);this.f=Md();this.c=null;this.j=db();this.s=[0,0,0];this.h=Cf()}B(Mi,ai);\r\nMi.prototype.g=function(a,b,c){var d=di(this,a,0);ci(this,\"precompose\",c,a,d);var e=a.pixelRatio,f=a.viewState,g=f.center,h=f.projection,k=f.rotation,l=a.size,m=Math.round(e*l[0]/2),l=Math.round(e*l[1]/2),f=e/f.resolution,p=this.a,q=p.da(),u=e*q.nb(h),w=q.sa(h),p=Ha(p,\"render\"),r=c,x=1,D,t,z;if(k||p){r=this.f;D=r.canvas;var x=q.pb(e)/e,C=c.canvas.width*x;t=c.canvas.height*x;z=Math.round(Math.sqrt(C*C+t*t));D.width!=z?D.width=D.height=z:r.clearRect(0,0,z,z);D=(z-C)/2/x;t=(z-t)/2/x;f*=x;m=Math.round(x*\r\n(m+D));l=Math.round(x*(l+t))}C=r.globalAlpha;r.globalAlpha=b.opacity;var E=this.c,v,H=q.Qb(h)&&1==b.opacity;H||(E.reverse(),v=[]);var G=b.extent;if(b=void 0!==G){var A=xb(G),F=[G[2],G[3]],Q=[G[2],G[1]],G=sb(G);Hf(a.coordinateToPixelTransform,A);Hf(a.coordinateToPixelTransform,F);Hf(a.coordinateToPixelTransform,Q);Hf(a.coordinateToPixelTransform,G);var N=D||0,O=t||0;r.save();var S=r.canvas.width/2,X=r.canvas.height/2;nh(r,-k,S,X);r.beginPath();r.moveTo(x*(A[0]*e+N),x*(A[1]*e+O));r.lineTo(x*(F[0]*e+\r\nN),x*(F[1]*e+O));r.lineTo(x*(Q[0]*e+N),x*(Q[1]*e+O));r.lineTo(x*(G[0]*e+N),x*(G[1]*e+O));r.clip();nh(r,k,S,X)}A=0;for(F=E.length;A<F;++A){var Q=E[A],G=Q.V,X=Qc(w,G,this.j),S=G[0],P=sb(Qc(w,Yc(w,g,S,this.s))),G=Math.round(qb(X)*f),N=Math.round(rb(X)*f),O=Math.round((X[0]-P[0])*f/G)*G+m+Math.round((P[0]-g[0])*f),X=Math.round((P[1]-X[3])*f/N)*N+l+Math.round((g[1]-P[1])*f);if(!H){P=[O,X,O+G,X+N];r.save();for(var Ba=0,Nb=v.length;Ba<Nb;++Ba){var Ca=v[Ba];wb(P,Ca)&&(r.beginPath(),r.moveTo(P[0],P[1]),r.lineTo(P[0],\r\nP[3]),r.lineTo(P[2],P[3]),r.lineTo(P[2],P[1]),r.moveTo(Ca[0],Ca[1]),r.lineTo(Ca[2],Ca[1]),r.lineTo(Ca[2],Ca[3]),r.lineTo(Ca[0],Ca[3]),r.closePath(),r.clip())}v.push(P)}S=Ni(q,S,e,h);r.drawImage(Q.Z(),u,u,S[0],S[1],O,X,G,N);H||r.restore()}b&&r.restore();p&&(e=D-m/x+m,h=t-l/x+l,g=Lf(this.h,z/2-e,z/2-h,f,-f,-k,-g[0]+e/f,-g[1]-h/f),ci(this,\"render\",r,a,g));(k||p)&&c.drawImage(r.canvas,-Math.round(D),-Math.round(t),z/x,z/x);r.globalAlpha=C;ci(this,\"postcompose\",c,a,d)};\r\nMi.prototype.i=function(a,b){function c(a){a=a.T();return 2==a||4==a||3==a&&!u}var d=a.pixelRatio,e=a.viewState,f=e.projection,g=this.a,h=g.da(),k=h.sa(f),l=Xc(k,e.resolution,0),m=k.O(l),p=e.center;m==e.resolution?(p=Yh(p,m,a.size),e=ub(p,m,e.rotation,a.size)):e=a.extent;void 0!==b.extent&&(e=vb(e,b.extent));if(pb(e))return!1;m=Tc(k,e,m);p={};p[l]={};var q=this.l(h,f,p),u=jh(g),w=db(),r=new Gc(0,0,0,0),x,D,t,z;for(t=m.H;t<=m.I;++t)for(z=m.J;z<=m.L;++z)x=$h(h,l,t,z,d,f),!c(x)&&x.b&&(x=x.b),c(x)?p[l][x.V.toString()]=\r\nx:(D=Pc(k,x.V,q,r,w),D||(x=Sc(k,x.V,r,w))&&q(l+1,x));q=Object.keys(p).map(Number);q.sort(Ma);var w=[],C,r=0;for(t=q.length;r<t;++r)for(C in x=q[r],z=p[x],z)x=z[C],2==x.T()&&w.push(x);this.c=w;Xh(a.usedTiles,h,l,m);Zh(a,h,k,d,f,e,l,g.get(\"preload\"));Uh(a,h);Wh(a,h);return!0};function Oi(a){ai.call(this,a);this.c=!1;this.B=-1;this.u=NaN;this.j=db();this.f=this.s=null;this.h=Md()}B(Oi,ai);\r\nOi.prototype.g=function(a,b,c){var d=a.extent,e=a.pixelRatio,f=b.hb?a.skippedFeatureUids:{},g=a.viewState,h=g.projection,g=g.rotation,k=h.G(),l=this.a.da(),m=di(this,a,0);ci(this,\"precompose\",c,a,m);var p=b.extent,q=void 0!==p;q&&bi(c,a,p);if((p=this.f)&&!p.c()){var u=0,w=0,r;if(Ha(this.a,\"render\")){r=c.canvas.width;var x=c.canvas.height;if(g){var D=Math.round(Math.sqrt(r*r+x*x)),u=(D-r)/2,w=(D-x)/2;r=x=D}this.h.canvas.width=r;this.h.canvas.height=x;r=this.h}else r=c;x=r.globalAlpha;r.globalAlpha=\r\nb.opacity;r!=c&&r.translate(u,w);b=a.size[0]*e;D=a.size[1]*e;nh(r,-g,b/2,D/2);p.f(r,e,m,g,f);if(l.i&&h.b&&!hb(k,d)){for(var h=d[0],l=qb(k),t=0;h<k[0];)--t,m=l*t,m=di(this,a,m),p.f(r,e,m,g,f),h+=l;t=0;for(h=d[2];h>k[2];)++t,m=l*t,m=di(this,a,m),p.f(r,e,m,g,f),h-=l;m=di(this,a,0)}nh(r,g,b/2,D/2);r!=c&&(ci(this,\"render\",r,a,m),c.drawImage(r.canvas,-u,-w),r.translate(-u,-w));r.globalAlpha=x}q&&c.restore();ci(this,\"postcompose\",c,a,m)};\r\nOi.prototype.fa=function(a,b,c,d){if(this.f){var e=this.a,f={};return this.f.fa(a,b.viewState.resolution,b.viewState.rotation,{},function(a){var b=J(a).toString();if(!(b in f))return f[b]=!0,c.call(d,a,e)})}};Oi.prototype.D=function(){Th(this)};\r\nOi.prototype.i=function(a){function b(a){var b,d=a.f;d?b=d.call(a,l):(d=c.g)&&(b=d(a,l));if(b){if(b){d=!1;if(Array.isArray(b))for(var e=0,f=b.length;e<f;++e)d=Bi(q,a,b[e],Ai(l,m),this.D,this)||d;else d=Bi(q,a,b,Ai(l,m),this.D,this)||d;a=d}else a=!1;this.c=this.c||a}}var c=this.a,d=c.da();Vh(a.attributions,d.h);Wh(a,d);var e=a.viewHints[0],f=a.viewHints[1],g=c.i,h=c.j;if(!this.c&&!g&&e||!h&&f)return!0;var k=a.extent,h=a.viewState,e=h.projection,l=h.resolution,m=a.pixelRatio,f=c.b,p=c.a,g=c.get(\"renderOrder\");\r\nvoid 0===g&&(g=zi);k=fb(k,p*l);p=h.projection.G();d.i&&h.projection.b&&!hb(p,a.extent)&&(a=Math.max(qb(k)/2,qb(p)),k[0]=p[0]-a,k[2]=p[2]+a);if(!this.c&&this.u==l&&this.B==f&&this.s==g&&hb(this.j,k))return!0;this.f=null;this.c=!1;var q=new vi(.5*l/m,k,l,d.u,c.a);Pi(d,k,l,e);if(g){var u=[];Qi(d,k,function(a){u.push(a)},this);u.sort(g);u.forEach(b,this)}else Qi(d,k,b,this);wi(q);this.u=l;this.B=f;this.s=g;this.j=k;this.f=q;return!0};function Ri(a,b){Nf.call(this,0,b);this.f=Md();this.b=this.f.canvas;this.b.style.width=\"100%\";this.b.style.height=\"100%\";this.b.className=\"ol-unselectable\";a.insertBefore(this.b,a.childNodes[0]||null);this.a=!0;this.h=Cf()}B(Ri,Nf);Ri.prototype.Mb=function(a){return a instanceof W?new Mi(a):a instanceof Y?new Oi(a):null};\r\nfunction Si(a,b,c){var d=a.g,e=a.f;if(Ha(d,b)){var f=c.extent,g=c.pixelRatio,h=c.viewState.rotation,k=c.viewState,l=c.pixelRatio/k.resolution;a=Lf(a.h,a.b.width/2,a.b.height/2,l,-l,-k.rotation,-k.center[0],-k.center[1]);U(d,new uf(b,new Gh(e,g,f,a,h),c,e,null))}}Ri.prototype.$=function(){return\"canvas\"};\r\nRi.prototype.vb=function(a){if(a){var b=this.f,c=a.pixelRatio,d=Math.round(a.size[0]*c),c=Math.round(a.size[1]*c);this.b.width!=d||this.b.height!=c?(this.b.width=d,this.b.height=c):b.clearRect(0,0,d,c);var e=a.viewState.rotation;Of(a);Si(this,\"precompose\",a);var f=a.layerStatesArray;Sa(f);nh(b,e,d/2,c/2);var g=a.viewState.resolution,h,k,l,m;h=0;for(k=f.length;h<k;++h)m=f[h],l=m.layer,l=Qf(this,l),yf(m,g)&&\"ready\"==m.ac&&l.i(a,m)&&l.g(a,m,b);nh(b,-e,d/2,c/2);Si(this,\"postcompose\",a);this.a||(this.b.style.display=\r\n\"\",this.a=!0);Rf(this,a);a.postRenderFunctions.push(Pf)}else this.a&&(this.b.style.display=\"none\",this.a=!1)};function Ti(a,b){Rh.call(this,a);this.target=b}B(Ti,Rh);Ti.prototype.Jb=I;Ti.prototype.Gc=I;function Ui(a){var b=document.createElement(\"DIV\");b.style.position=\"absolute\";Ti.call(this,a,b);this.f=!0;this.h=1;this.g=0;this.c={}}B(Ui,Ti);Ui.prototype.Jb=function(){for(var a=this.target;a.lastChild;)a.removeChild(a.lastChild);this.g=0};\r\nUi.prototype.Hc=function(a,b){if(!b.visible)return this.f&&(this.target.style.display=\"none\",this.f=!1),!0;var c=a.pixelRatio,d=a.viewState,e=d.projection,f=this.a,g=f.da(),h=g.sa(e),k=c*g.nb(e),l=Xc(h,d.resolution),m=h.O(l),p=d.center,q;m==d.resolution?(p=Yh(p,m,a.size),q=ub(p,m,d.rotation,a.size)):q=a.extent;void 0!==b.extent&&(q=vb(q,b.extent));var m=Tc(h,q,m),u={};u[l]={};var w=this.l(g,e,u),r=jh(f),x=db(),D=new Gc(0,0,0,0),t,z,C,E;for(C=m.H;C<=m.I;++C)for(E=m.J;E<=m.L;++E)t=$h(g,l,C,E,c,e),z=\r\nt.T(),z=2==z||4==z||3==z&&!r,!z&&t.b&&(t=t.b),z=t.T(),2==z?u[l][t.V.toString()]=t:4==z||3==z&&!r||(z=Pc(h,t.V,w,D,x),z||(t=Sc(h,t.V,D,x))&&w(l+1,t));var v;if(this.g!=g.b){for(v in this.c)r=this.c[+v],Sd(r.target);this.c={};this.g=g.b}x=Object.keys(u).map(Number);x.sort(Ma);var w={},H;C=0;for(E=x.length;C<E;++C){v=x[C];v in this.c?r=this.c[v]:(r=Yc(h,p,v),r=new Vi(h,r),w[v]=!0,this.c[v]=r);v=u[v];for(H in v){t=r;z=v[H];var G=k,A=z.V,F=A[0],Q=A[1],N=A[2],A=A.toString();if(!(A in t.a)){var F=Lc(Wc(t.g,\r\nF),t.i),O=z.Z(t),S=O.style;S.maxWidth=\"none\";var X,P;0<G?(X=document.createElement(\"DIV\"),P=X.style,P.overflow=\"hidden\",P.width=F[0]+\"px\",P.height=F[1]+\"px\",S.position=\"absolute\",S.left=-G+\"px\",S.top=-G+\"px\",S.width=F[0]+2*G+\"px\",S.height=F[1]+2*G+\"px\",X.appendChild(O)):(S.width=F[0]+\"px\",S.height=F[1]+\"px\",X=O,P=S);P.position=\"absolute\";P.left=(Q-t.c[1])*F[0]+\"px\";P.top=(t.c[2]-N)*F[1]+\"px\";t.b||(t.b=document.createDocumentFragment());t.b.appendChild(X);t.a[A]=z}}r.b&&(r.target.appendChild(r.b),\r\nr.b=null)}k=Object.keys(this.c).map(Number);k.sort(Ma);C=Cf();H=0;for(x=k.length;H<x;++H)if(v=k[H],r=this.c[v],v in u)if(t=r.O(),E=r.pa(),Lf(C,a.size[0]/2,a.size[1]/2,t/d.resolution,t/d.resolution,d.rotation,(E[0]-p[0])/t,(p[1]-E[1])/t),r.setTransform(C),v in w){for(--v;0<=v;--v)if(v in this.c){this.c[v].target.parentNode&&this.c[v].target.parentNode.insertBefore(r.target,this.c[v].target.nextSibling);break}0>v&&this.target.insertBefore(r.target,this.target.childNodes[0]||null)}else{if(!a.viewHints[0]&&\r\n!a.viewHints[1]){z=Rc(r.g,q,r.c[0],D);v=[];t=void 0;for(t in r.a)E=r.a[t],G=E.V,Hc(z,G[1],G[2])||v.push(E);z=0;for(G=v.length;z<G;++z)E=v[z],t=E.V.toString(),Sd(E.Z(r)),delete r.a[t]}}else Sd(r.target),delete this.c[v];b.opacity!=this.h&&(this.h=this.target.style.opacity=b.opacity);b.visible&&!this.f&&(this.target.style.display=\"\",this.f=!0);Xh(a.usedTiles,g,l,m);Zh(a,g,h,c,e,q,l,f.get(\"preload\"));Uh(a,g);Wh(a,g);return!0};\r\nfunction Vi(a,b){this.target=document.createElement(\"DIV\");this.target.style.position=\"absolute\";this.target.style.width=\"100%\";this.target.style.height=\"100%\";this.g=a;this.c=b;this.h=xb(Qc(a,b));this.l=a.O(b[0]);this.a={};this.b=null;this.f=Cf();this.i=[0,0]}Vi.prototype.pa=function(){return this.h};Vi.prototype.O=function(){return this.l};Vi.prototype.setTransform=function(a){Ra(a,this.f)||(Qd(this.target,a),Gf(this.f,a))};function Wi(a){this.g=Md();var b=this.g.canvas;b.style.maxWidth=\"none\";b.style.position=\"absolute\";Ti.call(this,a,b);this.c=!1;this.h=-1;this.s=NaN;this.i=db();this.f=this.j=null;this.B=Cf();this.u=Cf()}B(Wi,Ti);n=Wi.prototype;n.Jb=function(){var a=this.g.canvas;a.width=a.width;this.h=0};\r\nn.Gc=function(a,b){var c=a.viewState,d=c.center,e=c.rotation,f=c.resolution,c=a.pixelRatio,g=a.size[0],h=a.size[1],k=g*c,l=h*c,d=Lf(this.B,c*g/2,c*h/2,c/f,-c/f,-e,-d[0],-d[1]),f=this.g;f.canvas.width=k;f.canvas.height=l;var m=Df(this.u);Jf(m,1/c,1/c);Kf(m,-(k-g)/2*c,-(l-h)/2*c);Qd(f.canvas,m);Xi(this,\"precompose\",a,d);(g=this.f)&&!g.c()&&(f.globalAlpha=b.opacity,g.f(f,c,d,e,b.hb?a.skippedFeatureUids:{}),Xi(this,\"render\",a,d));Xi(this,\"postcompose\",a,d)};\r\nfunction Xi(a,b,c,d){var e=a.g;a=a.a;Ha(a,b)&&U(a,new uf(b,new Gh(e,c.pixelRatio,c.extent,d,c.viewState.rotation),c,e,null))}n.fa=function(a,b,c,d){if(this.f){var e=this.a,f={};return this.f.fa(a,b.viewState.resolution,b.viewState.rotation,{},function(a){var b=J(a).toString();if(!(b in f))return f[b]=!0,c.call(d,a,e)})}};n.Ic=function(){Th(this)};\r\nn.Hc=function(a){function b(a){var b,d=a.f;d?b=d.call(a,k):(d=c.g)&&(b=d(a,k));if(b){if(b){d=!1;if(Array.isArray(b))for(var e=0,f=b.length;e<f;++e)d=Bi(m,a,b[e],Ai(k,l),this.Ic,this)||d;else d=Bi(m,a,b,Ai(k,l),this.Ic,this)||d;a=d}else a=!1;this.c=this.c||a}}var c=this.a,d=c.da();Vh(a.attributions,d.h);Wh(a,d);var e=a.viewHints[0],f=a.viewHints[1],g=c.i,h=c.j;if(!this.c&&!g&&e||!h&&f)return!0;var f=a.extent,g=a.viewState,e=g.projection,k=g.resolution,l=a.pixelRatio;a=c.b;h=c.a;g=c.get(\"renderOrder\");\r\nvoid 0===g&&(g=zi);f=fb(f,h*k);if(!this.c&&this.s==k&&this.h==a&&this.j==g&&hb(this.i,f))return!0;this.f=null;this.c=!1;var m=new vi(.5*k/l,f,k,d.u,c.a);Pi(d,f,k,e);if(g){var p=[];Qi(d,f,function(a){p.push(a)},this);p.sort(g);p.forEach(b,this)}else Qi(d,f,b,this);wi(m);this.s=k;this.h=a;this.j=g;this.i=f;this.f=m;return!0};function Yi(a,b){Nf.call(this,0,b);this.f=Md();var c=this.f.canvas;c.style.position=\"absolute\";c.style.width=\"100%\";c.style.height=\"100%\";c.className=\"ol-unselectable\";a.insertBefore(c,a.childNodes[0]||null);this.h=Cf();this.b=document.createElement(\"DIV\");this.b.className=\"ol-unselectable\";c=this.b.style;c.position=\"absolute\";c.width=\"100%\";c.height=\"100%\";R(this.b,\"touchstart\",Fa);a.insertBefore(this.b,a.childNodes[0]||null);this.a=!0}B(Yi,Nf);Yi.prototype.R=function(){Sd(this.b);Nf.prototype.R.call(this)};\r\nYi.prototype.Mb=function(a){if(a instanceof W)a=new Ui(a);else if(a instanceof Y)a=new Wi(a);else return null;return a};function Zi(a,b,c){var d=a.g;if(Ha(d,b)){var e=c.extent,f=c.pixelRatio,g=c.viewState,h=g.rotation,k=a.f,l=k.canvas;a=Lf(a.h,l.width/2,l.height/2,f/g.resolution,-f/g.resolution,-h,-g.center[0],-g.center[1]);U(d,new uf(b,new Gh(k,f,e,a,h),c,k,null))}}Yi.prototype.$=function(){return\"dom\"};\r\nYi.prototype.vb=function(a){if(a){var b=this.g;if(Ha(b,\"precompose\")||Ha(b,\"postcompose\")){var b=this.f.canvas,c=a.pixelRatio;b.width=a.size[0]*c;b.height=a.size[1]*c}Zi(this,\"precompose\",a);b=a.layerStatesArray;Sa(b);var c=a.viewState.resolution,d,e,f,g;d=0;for(e=b.length;d<e;++d)g=b[d],f=g.layer,f=Qf(this,f),this.b.insertBefore(f.target,this.b.childNodes[d]||null),yf(g,c)&&\"ready\"==g.ac?f.Hc(a,g)&&f.Gc(a,g):f.Jb();var b=a.layerStates,h;for(h in this.c)h in b||(f=this.c[h],Sd(f.target));this.a||\r\n(this.b.style.display=\"\",this.a=!0);Of(a);Rf(this,a);a.postRenderFunctions.push(Pf);Zi(this,\"postcompose\",a)}else this.a&&(this.b.style.display=\"none\",this.a=!1)};function $i(a){this.b=a};function aj(a){this.b=a}B(aj,$i);aj.prototype.$=function(){return 35632};function bj(a){this.b=a}B(bj,$i);bj.prototype.$=function(){return 35633};function cj(){this.b=\"precision mediump float;varying vec2 a;varying float b;uniform float k;uniform sampler2D l;void main(void){vec4 texColor=texture2D(l,a);gl_FragColor.rgb=texColor.rgb;float alpha=texColor.a*b*k;if(alpha==0.0){discard;}gl_FragColor.a=alpha;}\"}B(cj,aj);var dj=new cj;\r\nfunction ej(){this.b=\"varying vec2 a;varying float b;attribute vec2 c;attribute vec2 d;attribute vec2 e;attribute float f;attribute float g;uniform mat4 h;uniform mat4 i;uniform mat4 j;void main(void){mat4 offsetMatrix=i;if(g==1.0){offsetMatrix=i*j;}vec4 offsets=offsetMatrix*vec4(e,0.,0.);gl_Position=h*vec4(c,0.,1.)+offsets;a=d;b=f;}\"}B(ej,bj);var fj=new ej;\r\nfunction gj(a,b){this.i=a.getUniformLocation(b,\"j\");this.j=a.getUniformLocation(b,\"i\");this.h=a.getUniformLocation(b,\"k\");this.l=a.getUniformLocation(b,\"h\");this.b=a.getAttribLocation(b,\"e\");this.a=a.getAttribLocation(b,\"f\");this.f=a.getAttribLocation(b,\"c\");this.c=a.getAttribLocation(b,\"g\");this.g=a.getAttribLocation(b,\"d\")};function hj(a){this.b=void 0!==a?a:[];this.a=ij}var ij=35044;function jj(a,b){this.C=a;this.b=b;this.a={};this.g={};this.f={};this.i=this.j=this.h=this.l=null;(this.c=0<=fa.indexOf(\"OES_element_index_uint\"))&&b.getExtension(\"OES_element_index_uint\");R(this.C,\"webglcontextlost\",this.K,this);R(this.C,\"webglcontextrestored\",this.s,this)}B(jj,Aa);\r\nfunction kj(a,b,c){var d=a.b,e=c.b,f=String(J(c));if(f in a.a)d.bindBuffer(b,a.a[f].buffer);else{var g=d.createBuffer();d.bindBuffer(b,g);var h;34962==b?h=new Float32Array(e):34963==b&&(h=a.c?new Uint32Array(e):new Uint16Array(e));d.bufferData(b,h,c.a);a.a[f]={Qe:c,buffer:g}}}function lj(a,b){var c=a.b,d=String(J(b)),e=a.a[d];c.isContextLost()||c.deleteBuffer(e.buffer);delete a.a[d]}\r\njj.prototype.R=function(){za(this.C);var a=this.b;if(!a.isContextLost()){for(var b in this.a)a.deleteBuffer(this.a[b].buffer);for(b in this.f)a.deleteProgram(this.f[b]);for(b in this.g)a.deleteShader(this.g[b]);a.deleteFramebuffer(this.h);a.deleteRenderbuffer(this.i);a.deleteTexture(this.j)}};\r\nfunction mj(a){if(!a.h){var b=a.b,c=b.createFramebuffer();b.bindFramebuffer(b.FRAMEBUFFER,c);var d=nj(b,1,1),e=b.createRenderbuffer();b.bindRenderbuffer(b.RENDERBUFFER,e);b.renderbufferStorage(b.RENDERBUFFER,b.DEPTH_COMPONENT16,1,1);b.framebufferTexture2D(b.FRAMEBUFFER,b.COLOR_ATTACHMENT0,b.TEXTURE_2D,d,0);b.framebufferRenderbuffer(b.FRAMEBUFFER,b.DEPTH_ATTACHMENT,b.RENDERBUFFER,e);b.bindTexture(b.TEXTURE_2D,null);b.bindRenderbuffer(b.RENDERBUFFER,null);b.bindFramebuffer(b.FRAMEBUFFER,null);a.h=c;\r\na.j=d;a.i=e}return a.h}function oj(a,b){var c=String(J(b));if(c in a.g)return a.g[c];var d=a.b,e=d.createShader(b.$());d.shaderSource(e,b.b);d.compileShader(e);return a.g[c]=e}function pj(a,b,c){var d=J(b)+\"/\"+J(c);if(d in a.f)return a.f[d];var e=a.b,f=e.createProgram();e.attachShader(f,oj(a,b));e.attachShader(f,oj(a,c));e.linkProgram(f);return a.f[d]=f}jj.prototype.K=function(){qa(this.a);qa(this.g);qa(this.f);this.i=this.j=this.h=this.l=null};jj.prototype.s=function(){};\r\nfunction qj(a,b){if(b==a.l)return!1;a.b.useProgram(b);a.l=b;return!0}function rj(a,b,c){var d=a.createTexture();a.bindTexture(a.TEXTURE_2D,d);a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MAG_FILTER,a.LINEAR);a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MIN_FILTER,a.LINEAR);void 0!==b&&a.texParameteri(3553,10242,b);void 0!==c&&a.texParameteri(3553,10243,c);return d}function nj(a,b,c){var d=rj(a,void 0,void 0);a.texImage2D(a.TEXTURE_2D,0,a.RGBA,b,c,0,a.RGBA,a.UNSIGNED_BYTE,null);return d};function sj(a,b){this.B=this.u=void 0;this.C=tb(b);this.v=[];this.l=[];this.M=void 0;this.h=[];this.g=[];this.ca=this.Y=void 0;this.a=[];this.D=this.j=null;this.N=void 0;this.Ea=Cf();this.va=Cf();this.ha=this.P=void 0;this.wa=Cf();this.ra=Jd();this.ba=this.aa=this.W=void 0;this.na=[];this.i=[];this.b=[];this.s=null;this.c=[];this.K=[];this.ma=void 0}B(sj,Fh);\r\nfunction tj(a,b){var c=a.s,d=a.j,e=a.na,f=a.i,g=b.b;return function(){if(!g.isContextLost()){var a,k;a=0;for(k=e.length;a<k;++a)g.deleteTexture(e[a]);a=0;for(k=f.length;a<k;++a)g.deleteTexture(f[a])}lj(b,c);lj(b,d)}}\r\nfunction uj(a,b,c,d){var e=a.u,f=a.B,g=a.M,h=a.Y,k=a.ca,l=a.N,m=a.P,p=a.ha,q=a.W?1:0,u=a.aa,w=a.ba,r=a.ma,x=Math.cos(u),u=Math.sin(u),D=a.a.length,t=a.b.length,z,C,E,v,H,G;for(z=0;z<c;z+=d)H=b[z]-a.C[0],G=b[z+1]-a.C[1],C=t/8,E=-w*e,v=-w*(g-f),a.b[t++]=H,a.b[t++]=G,a.b[t++]=E*x-v*u,a.b[t++]=E*u+v*x,a.b[t++]=m/k,a.b[t++]=(p+g)/h,a.b[t++]=l,a.b[t++]=q,E=w*(r-e),v=-w*(g-f),a.b[t++]=H,a.b[t++]=G,a.b[t++]=E*x-v*u,a.b[t++]=E*u+v*x,a.b[t++]=(m+r)/k,a.b[t++]=(p+g)/h,a.b[t++]=l,a.b[t++]=q,E=w*(r-e),v=w*f,a.b[t++]=\r\nH,a.b[t++]=G,a.b[t++]=E*x-v*u,a.b[t++]=E*u+v*x,a.b[t++]=(m+r)/k,a.b[t++]=p/h,a.b[t++]=l,a.b[t++]=q,E=-w*e,v=w*f,a.b[t++]=H,a.b[t++]=G,a.b[t++]=E*x-v*u,a.b[t++]=E*u+v*x,a.b[t++]=m/k,a.b[t++]=p/h,a.b[t++]=l,a.b[t++]=q,a.a[D++]=C,a.a[D++]=C+1,a.a[D++]=C+2,a.a[D++]=C,a.a[D++]=C+2,a.a[D++]=C+3}sj.prototype.bb=function(a,b){this.c.push(this.a.length);this.K.push(b);var c=a.o;uj(this,c,c.length,a.A)};sj.prototype.cb=function(a,b){this.c.push(this.a.length);this.K.push(b);var c=a.o;uj(this,c,c.length,a.A)};\r\nfunction vj(a,b){var c=b.b;a.v.push(a.a.length);a.l.push(a.a.length);a.s=new hj(a.b);kj(b,34962,a.s);a.j=new hj(a.a);kj(b,34963,a.j);var d={};wj(a.na,a.h,d,c);wj(a.i,a.g,d,c);a.u=void 0;a.B=void 0;a.M=void 0;a.h=null;a.g=null;a.Y=void 0;a.ca=void 0;a.a=null;a.N=void 0;a.P=void 0;a.ha=void 0;a.W=void 0;a.aa=void 0;a.ba=void 0;a.b=null;a.ma=void 0}\r\nfunction wj(a,b,c,d){var e,f,g,h,k=b.length;for(h=0;h<k;++h){f=b[h];g=J(f).toString();if(g in c)e=c[g];else{e=d;var l=rj(e,33071,33071);e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,f);e=l;c[g]=e}a[h]=e}}\r\nsj.prototype.f=function(a,b,c,d,e,f,g,h,k,l,m){f=a.b;kj(a,34962,this.s);kj(a,34963,this.j);var p=pj(a,dj,fj),q;this.D?q=this.D:this.D=q=new gj(f,p);qj(a,p);f.enableVertexAttribArray(q.f);f.vertexAttribPointer(q.f,2,5126,!1,32,0);f.enableVertexAttribArray(q.b);f.vertexAttribPointer(q.b,2,5126,!1,32,8);f.enableVertexAttribArray(q.g);f.vertexAttribPointer(q.g,2,5126,!1,32,16);f.enableVertexAttribArray(q.a);f.vertexAttribPointer(q.a,1,5126,!1,32,24);f.enableVertexAttribArray(q.c);f.vertexAttribPointer(q.c,\r\n1,5126,!1,32,28);p=Df(this.wa);Jf(p,2/(c*e[0]),2/(c*e[1]));If(p,-d);Kf(p,-(b[0]-this.C[0]),-(b[1]-this.C[1]));b=Df(this.va);Jf(b,2/e[0],2/e[1]);e=Df(this.Ea);0!==d&&If(e,-d);f.uniformMatrix4fv(q.l,!1,Kd(this.ra,p));f.uniformMatrix4fv(q.j,!1,Kd(this.ra,b));f.uniformMatrix4fv(q.i,!1,Kd(this.ra,e));f.uniform1f(q.h,g);var u;if(void 0===k)xj(this,f,a,h,this.na,this.v);else{if(l)a:{d=a.c?5125:5123;a=a.c?4:2;e=this.c.length-1;for(g=this.i.length-1;0<=g;--g)for(f.bindTexture(3553,this.i[g]),l=0<g?this.l[g-\r\n1]:0,b=this.l[g];0<=e&&this.c[e]>=l;){u=this.c[e];c=this.K[e];p=J(c).toString();if(void 0===h[p]&&c.S()&&(void 0===m||wb(m,c.S().G()))&&(f.clear(f.COLOR_BUFFER_BIT|f.DEPTH_BUFFER_BIT),f.drawElements(4,b-u,d,u*a),b=k(c))){h=b;break a}b=u;e--}h=void 0}else f.clear(f.COLOR_BUFFER_BIT|f.DEPTH_BUFFER_BIT),xj(this,f,a,h,this.i,this.l),h=(h=k(null))?h:void 0;u=h}f.disableVertexAttribArray(q.f);f.disableVertexAttribArray(q.b);f.disableVertexAttribArray(q.g);f.disableVertexAttribArray(q.a);f.disableVertexAttribArray(q.c);\r\nreturn u};function xj(a,b,c,d,e,f){var g=c.c?5125:5123;c=c.c?4:2;if(sa(d)){var h;a=0;d=e.length;for(h=0;a<d;++a){b.bindTexture(3553,e[a]);var k=f[a];b.drawElements(4,k-h,g,h*c);h=k}}else{h=0;var l,k=0;for(l=e.length;k<l;++k){b.bindTexture(3553,e[k]);for(var m=0<k?f[k-1]:0,p=f[k],q=m;h<a.c.length&&a.c[h]<=p;){var u=J(a.K[h]).toString();void 0!==d[u]?(q!==m&&b.drawElements(4,m-q,g,q*c),m=q=h===a.c.length-1?p:a.c[h+1]):m=h===a.c.length-1?p:a.c[h+1];h++}q!==m&&b.drawElements(4,m-q,g,q*c)}}}\r\nsj.prototype.Ma=function(a){var b=a.eb(),c=a.Z(1),d=a.Ob(),e=a.ub(1),f=a.C,g=a.pa(),h=a.K,k=a.s,l=a.Ka();a=a.v;var m;0===this.h.length?this.h.push(c):(m=this.h[this.h.length-1],J(m)!=J(c)&&(this.v.push(this.a.length),this.h.push(c)));0===this.g.length?this.g.push(e):(m=this.g[this.g.length-1],J(m)!=J(e)&&(this.l.push(this.a.length),this.g.push(e)));this.u=b[0];this.B=b[1];this.M=l[1];this.Y=d[1];this.ca=d[0];this.N=f;this.P=g[0];this.ha=g[1];this.aa=k;this.W=h;this.ba=a;this.ma=l[0]};\r\nfunction yj(a,b,c){this.h=b;this.l=a;this.g=c;this.a={}}B(yj,ei);function zj(a,b){var c=[],d;for(d in a.a)c.push(tj(a.a[d],b));return function(){for(var a=c.length,b,d=0;d<a;d++)b=c[d].apply(this,arguments);return b}}function Aj(a,b){for(var c in a.a)vj(a.a[c],b)}yj.prototype.b=function(a,b){var c=this.a[b];void 0===c&&(c=new Bj[b](this.l,this.h),this.a[b]=c);return c};yj.prototype.c=function(){return sa(this.a)};\r\nyj.prototype.f=function(a,b,c,d,e,f,g,h){var k,l,m;k=0;for(l=fi.length;k<l;++k)m=this.a[fi[k]],void 0!==m&&m.f(a,b,c,d,e,f,g,h,void 0,!1)};function Cj(a,b,c,d,e,f,g,h,k,l,m){var p=Dj,q,u;for(q=fi.length-1;0<=q;--q)if(u=a.a[fi[q]],void 0!==u&&(u=u.f(b,c,d,e,p,f,g,h,k,l,m)))return u}\r\nyj.prototype.fa=function(a,b,c,d,e,f,g,h,k,l){var m=b.b;m.bindFramebuffer(m.FRAMEBUFFER,mj(b));var p;void 0!==this.g&&(p=fb(kb(a),d*this.g));return Cj(this,b,a,d,e,g,h,k,function(a){var b=new Uint8Array(4);m.readPixels(0,0,1,1,m.RGBA,m.UNSIGNED_BYTE,b);if(0<b[3]&&(a=l(a)))return a},!0,p)};\r\nfunction Ej(a,b,c,d,e,f,g,h){var k=c.b;k.bindFramebuffer(k.FRAMEBUFFER,mj(c));return void 0!==Cj(a,c,b,d,e,f,g,h,function(){var a=new Uint8Array(4);k.readPixels(0,0,1,1,k.RGBA,k.UNSIGNED_BYTE,a);return 0<a[3]},!1)}var Bj={Image:sj},Dj=[1,1];function Fj(a,b,c,d,e,f,g){this.b=a;this.c=b;this.f=f;this.g=g;this.i=e;this.l=d;this.h=c;this.a=null}B(Fj,Fh);Fj.prototype.cb=function(a,b){var c=this.b,d=(new yj(1,this.f)).b(0,\"Image\");d.Ma(this.a);d.cb(a,b);vj(d,c);d.f(this.b,this.c,this.h,this.l,this.i,this.g,1,{},void 0,!1);tj(d,c)()};Fj.prototype.bb=function(a,b){var c=this.b,d=(new yj(1,this.f)).b(0,\"Image\");d.Ma(this.a);d.bb(a,b);vj(d,c);d.f(this.b,this.c,this.h,this.l,this.i,this.g,1,{},void 0,!1);tj(d,c)()};\r\nFj.prototype.Ma=function(a){this.a=a};function Gj(){this.b=\"precision mediump float;varying vec2 a;uniform float f;uniform sampler2D g;void main(void){vec4 texColor=texture2D(g,a);gl_FragColor.rgb=texColor.rgb;gl_FragColor.a=texColor.a*f;}\"}B(Gj,aj);var Hj=new Gj;function Ij(){this.b=\"varying vec2 a;attribute vec2 b;attribute vec2 c;uniform mat4 d;uniform mat4 e;void main(void){gl_Position=e*vec4(b,0.,1.);a=(d*vec4(c,0.,1.)).st;}\"}B(Ij,bj);var Jj=new Ij;\r\nfunction Kj(a,b){this.c=a.getUniformLocation(b,\"f\");this.f=a.getUniformLocation(b,\"e\");this.h=a.getUniformLocation(b,\"d\");this.g=a.getUniformLocation(b,\"g\");this.b=a.getAttribLocation(b,\"b\");this.a=a.getAttribLocation(b,\"c\")};function Lj(a,b){Rh.call(this,b);this.f=a;this.W=new hj([-1,-1,0,0,1,-1,1,0,-1,1,0,1,1,1,1,1]);this.i=this.Da=null;this.j=void 0;this.P=Cf();this.aa=Cf();this.B=Jd();this.s=null}B(Lj,Rh);\r\nfunction Mj(a,b,c){var d=a.f.f;if(void 0===a.j||a.j!=c){b.postRenderFunctions.push(function(a,b,c){a.isContextLost()||(a.deleteFramebuffer(b),a.deleteTexture(c))}.bind(null,d,a.i,a.Da));b=nj(d,c,c);var e=d.createFramebuffer();d.bindFramebuffer(36160,e);d.framebufferTexture2D(36160,36064,3553,b,0);a.Da=b;a.i=e;a.j=c}else d.bindFramebuffer(36160,a.i)}\r\nLj.prototype.Jc=function(a,b,c){Nj(this,\"precompose\",c,a);kj(c,34962,this.W);var d=c.b,e=pj(c,Hj,Jj),f;this.s?f=this.s:this.s=f=new Kj(d,e);qj(c,e)&&(d.enableVertexAttribArray(f.b),d.vertexAttribPointer(f.b,2,5126,!1,16,0),d.enableVertexAttribArray(f.a),d.vertexAttribPointer(f.a,2,5126,!1,16,8),d.uniform1i(f.g,0));d.uniformMatrix4fv(f.h,!1,Kd(this.B,this.P));d.uniformMatrix4fv(f.f,!1,Kd(this.B,this.aa));d.uniform1f(f.c,b.opacity);d.bindTexture(3553,this.Da);d.drawArrays(5,0,4);Nj(this,\"postcompose\",\r\nc,a)};function Nj(a,b,c,d){a=a.a;if(Ha(a,b)){var e=d.viewState;U(a,new uf(b,new Fj(c,e.center,e.resolution,e.rotation,d.size,d.extent,d.pixelRatio),d,null,c))}}Lj.prototype.v=function(){this.i=this.Da=null;this.j=void 0};function Oj(){this.b=\"precision mediump float;varying vec2 a;uniform sampler2D e;void main(void){gl_FragColor=texture2D(e,a);}\"}B(Oj,aj);var Pj=new Oj;function Qj(){this.b=\"varying vec2 a;attribute vec2 b;attribute vec2 c;uniform vec4 d;void main(void){gl_Position=vec4(b*d.xy+d.zw,0.,1.);a=c;}\"}B(Qj,bj);var Rj=new Qj;function Sj(a,b){this.c=a.getUniformLocation(b,\"e\");this.f=a.getUniformLocation(b,\"d\");this.b=a.getAttribLocation(b,\"b\");this.a=a.getAttribLocation(b,\"c\")};function Tj(a,b){Lj.call(this,a,b);this.M=Pj;this.ba=Rj;this.c=null;this.D=new hj([0,0,0,1,1,0,1,1,0,1,0,0,1,1,1,0]);this.u=this.g=null;this.h=-1;this.N=[0,0]}B(Tj,Lj);Tj.prototype.R=function(){lj(this.f.getContext(),this.D);Lj.prototype.R.call(this)};Tj.prototype.l=function(a,b,c){var d=this.f;return function(e,f){return Sh(a,b,e,f,function(a){var b=Uj(d.a,a.getKey());b&&(c[e]||(c[e]={}),c[e][a.V.toString()]=a);return b})}};Tj.prototype.v=function(){Lj.prototype.v.call(this);this.c=null};\r\nTj.prototype.Kc=function(a,b,c){var d=this.f,e=c.b,f=a.viewState,g=f.projection,h=this.a,k=h.da(),l=k.sa(g),m=Xc(l,f.resolution),p=l.O(m),q=Ni(k,m,a.pixelRatio,g),u=q[0]/Lc(Wc(l,m),this.N)[0],w=p/u,r=a.pixelRatio*k.nb(g),x=f.center,D;p==f.resolution?(x=Yh(x,p,a.size),D=ub(x,p,f.rotation,a.size)):D=a.extent;p=Tc(l,D,p);if(this.g&&Ic(this.g,p)&&this.h==k.b)w=this.u;else{var t=[p.I-p.H+1,p.L-p.J+1],z=ka(Math.max(t[0]*q[0],t[1]*q[1])),t=w*z,C=l.pa(m),E=C[0]+p.H*q[0]*w,w=C[1]+p.J*q[1]*w,w=[E,w,E+t,w+t];\r\nMj(this,a,z);e.viewport(0,0,z,z);e.clearColor(0,0,0,0);e.clear(16384);e.disable(3042);z=pj(c,this.M,this.ba);qj(c,z);this.c||(this.c=new Sj(e,z));kj(c,34962,this.D);e.enableVertexAttribArray(this.c.b);e.vertexAttribPointer(this.c.b,2,5126,!1,16,0);e.enableVertexAttribArray(this.c.a);e.vertexAttribPointer(this.c.a,2,5126,!1,16,8);e.uniform1i(this.c.c,0);c={};c[m]={};var v=this.l(k,g,c),H=jh(h),z=!0,E=db(),G=new Gc(0,0,0,0),A,F,Q;for(F=p.H;F<=p.I;++F)for(Q=p.J;Q<=p.L;++Q){C=$h(k,m,F,Q,u,g);if(void 0!==\r\nb.extent&&(A=Qc(l,C.V,E),!wb(A,b.extent)))continue;A=C.T();A=2==A||4==A||3==A&&!H;!A&&C.b&&(C=C.b);A=C.T();if(2==A){if(Uj(d.a,C.getKey())){c[m][C.V.toString()]=C;continue}}else if(4==A||3==A&&!H)continue;z=!1;A=Pc(l,C.V,v,G,E);A||(C=Sc(l,C.V,G,E))&&v(m+1,C)}b=Object.keys(c).map(Number);b.sort(Ma);for(var v=new Float32Array(4),N,H=0,G=b.length;H<G;++H)for(N in F=c[b[H]],F)C=F[N],A=Qc(l,C.V,E),v[0]=2*(A[2]-A[0])/t,v[1]=2*(A[3]-A[1])/t,v[2]=2*(A[0]-w[0])/t-1,v[3]=2*(A[1]-w[1])/t-1,e.uniform4fv(this.c.f,\r\nv),Vj(d,C,q,r*u),e.drawArrays(5,0,4);z?(this.g=p,this.u=w,this.h=k.b):(this.u=this.g=null,this.h=-1,a.animate=!0)}Xh(a.usedTiles,k,m,p);var O=d.l;Zh(a,k,l,u,g,D,m,h.get(\"preload\"),function(a){var b;(b=2!=a.T()||Uj(d.a,a.getKey()))||(b=a.getKey()in O.a);b||O.g([a,Vc(l,a.V),l.O(a.V[0]),q,r*u])},this);Uh(a,k);Wh(a,k);e=this.P;Df(e);Kf(e,(x[0]-w[0])/(w[2]-w[0]),(x[1]-w[1])/(w[3]-w[1]));0!==f.rotation&&If(e,f.rotation);Jf(e,a.size[0]*f.resolution/(w[2]-w[0]),a.size[1]*f.resolution/(w[3]-w[1]));Kf(e,-.5,\r\n-.5);return!0};function Wj(a,b){Lj.call(this,a,b);this.h=!1;this.N=-1;this.M=NaN;this.u=db();this.g=this.c=this.D=null}B(Wj,Lj);n=Wj.prototype;n.Jc=function(a,b,c){this.g=b;var d=a.viewState,e=this.c;e&&!e.c()&&e.f(c,d.center,d.resolution,d.rotation,a.size,a.pixelRatio,b.opacity,b.hb?a.skippedFeatureUids:{})};n.R=function(){var a=this.c;if(a){var b=this.f.getContext();zj(a,b)();this.c=null}Lj.prototype.R.call(this)};\r\nn.fa=function(a,b,c,d){if(this.c&&this.g){var e=this.f.getContext(),f=b.viewState,g=this.a,h={};return this.c.fa(a,e,f.center,f.resolution,f.rotation,b.size,b.pixelRatio,this.g.opacity,{},function(a){var b=J(a).toString();if(!(b in h))return h[b]=!0,c.call(d,a,g)})}};n.Ec=function(a,b){if(this.c&&this.g){var c=this.f.getContext(),d=b.viewState;return Ej(this.c,a,c,d.resolution,d.rotation,b.pixelRatio,this.g.opacity,b.skippedFeatureUids)}return!1};n.Lc=function(){Th(this)};\r\nn.Kc=function(a,b,c){function d(a){var b,c=a.f;c?b=c.call(a,l):(c=e.g)&&(b=c(a,l));if(b){if(b){c=!1;if(Array.isArray(b))for(var d=0,f=b.length;d<f;++d)c=Bi(q,a,b[d],Ai(l,m),this.Lc,this)||c;else c=Bi(q,a,b,Ai(l,m),this.Lc,this)||c;a=c}else a=!1;this.h=this.h||a}}var e=this.a;b=e.da();Vh(a.attributions,b.h);Wh(a,b);var f=a.viewHints[0],g=a.viewHints[1],h=e.i,k=e.j;if(!this.h&&!h&&f||!k&&g)return!0;var g=a.extent,h=a.viewState,f=h.projection,l=h.resolution,m=a.pixelRatio,h=e.b,p=e.a,k=e.get(\"renderOrder\");\r\nvoid 0===k&&(k=zi);g=fb(g,p*l);if(!this.h&&this.M==l&&this.N==h&&this.D==k&&hb(this.u,g))return!0;this.c&&a.postRenderFunctions.push(zj(this.c,c));this.h=!1;var q=new yj(.5*l/m,g,e.a);Pi(b,g,l,f);if(k){var u=[];Qi(b,g,function(a){u.push(a)},this);u.sort(k);u.forEach(d,this)}else Qi(b,g,d,this);Aj(q,c);this.M=l;this.N=h;this.D=k;this.u=g;this.c=q;return!0};function Xj(){this.f=0;this.c={};this.a=this.b=null}Xj.prototype.clear=function(){this.f=0;this.c={};this.a=this.b=null};function Uj(a,b){return a.c.hasOwnProperty(b)}function Yj(a,b){for(var c=a.b;c;)b.call(void 0,c.Na,c.Ia,a),c=c.ta}Xj.prototype.get=function(a){a=this.c[a];L(void 0!==a,15);if(a===this.a)return a.Na;a===this.b?(this.b=this.b.ta,this.b.Ua=null):(a.ta.Ua=a.Ua,a.Ua.ta=a.ta);a.ta=null;a.Ua=this.a;this.a=this.a.ta=a;return a.Na};\r\nXj.prototype.pop=function(){var a=this.b;delete this.c[a.Ia];a.ta&&(a.ta.Ua=null);this.b=a.ta;this.b||(this.a=null);--this.f;return a.Na};function Zj(a,b,c){a.get(b);a.c[b].Na=c}Xj.prototype.set=function(a,b){L(!(a in this.c),16);var c={Ia:a,ta:null,Ua:this.a,Na:b};this.a?this.a.ta=c:this.b=c;this.a=c;this.c[a]=c;++this.f};function ak(a,b){Nf.call(this,0,b);this.b=document.createElement(\"CANVAS\");this.b.style.width=\"100%\";this.b.style.height=\"100%\";this.b.className=\"ol-unselectable\";a.insertBefore(this.b,a.childNodes[0]||null);this.s=this.v=0;this.u=Md();this.i=!0;this.f=ie(this.b,{antialias:!0,depth:!1,failIfMajorPerformanceCaveat:!0,preserveDrawingBuffer:!1,stencil:!0});this.C=new jj(this.b,this.f);R(this.b,\"webglcontextlost\",this.ge,this);R(this.b,\"webglcontextrestored\",this.he,this);this.a=new Xj;this.K=null;this.l=\r\nnew Uf(function(a){var b=a[1];a=a[2];var e=b[0]-this.K[0],b=b[1]-this.K[1];return 65536*Math.log(a)+Math.sqrt(e*e+b*b)/a}.bind(this),function(a){return a[0].getKey()});this.B=function(){if(0!==this.l.b.length){Yf(this.l);var a=Vf(this.l);Vj(this,a[0],a[3],a[4])}return!1}.bind(this);this.h=0;bk(this)}B(ak,Nf);\r\nfunction Vj(a,b,c,d){var e=a.f,f=b.getKey();if(Uj(a.a,f))a=a.a.get(f),e.bindTexture(3553,a.Da),9729!=a.yc&&(e.texParameteri(3553,10240,9729),a.yc=9729),9729!=a.zc&&(e.texParameteri(3553,10241,9729),a.zc=9729);else{var g=e.createTexture();e.bindTexture(3553,g);if(0<d){var h=a.u.canvas,k=a.u;a.v!==c[0]||a.s!==c[1]?(h.width=c[0],h.height=c[1],a.v=c[0],a.s=c[1]):k.clearRect(0,0,c[0],c[1]);k.drawImage(b.Z(),d,d,c[0],c[1],0,0,c[0],c[1]);e.texImage2D(3553,0,6408,6408,5121,h)}else e.texImage2D(3553,0,6408,\r\n6408,5121,b.Z());e.texParameteri(3553,10240,9729);e.texParameteri(3553,10241,9729);e.texParameteri(3553,10242,33071);e.texParameteri(3553,10243,33071);a.a.set(f,{Da:g,yc:9729,zc:9729})}}n=ak.prototype;n.Mb=function(a){return a instanceof W?new Tj(this,a):a instanceof Y?new Wj(this,a):null};function ck(a,b,c){var d=a.g;if(Ha(d,b)){a=a.C;var e=c.viewState;U(d,new uf(b,new Fj(a,e.center,e.resolution,e.rotation,c.size,c.extent,c.pixelRatio),c,null,a))}}\r\nn.R=function(){var a=this.f;a.isContextLost()||Yj(this.a,function(b){b&&a.deleteTexture(b.Da)});Da(this.C);Nf.prototype.R.call(this)};n.ld=function(a,b){for(var c=this.f,d;1024<this.a.f-this.h;){if(d=this.a.b.Na)c.deleteTexture(d.Da);else if(+this.a.b.Ia==b.index)break;else--this.h;this.a.pop()}};n.getContext=function(){return this.C};n.$=function(){return\"webgl\"};n.ge=function(a){a.preventDefault();this.a.clear();this.h=0;a=this.c;for(var b in a)a[b].v()};n.he=function(){bk(this);this.g.render()};\r\nfunction bk(a){a=a.f;a.activeTexture(33984);a.blendFuncSeparate(770,771,1,771);a.disable(2884);a.disable(2929);a.disable(3089);a.disable(2960)}\r\nn.vb=function(a){var b=this.getContext(),c=this.f;if(c.isContextLost())return!1;if(!a)return this.i&&(this.b.style.display=\"none\",this.i=!1),!1;this.K=a.focus;this.a.set((-a.index).toString(),null);++this.h;ck(this,\"precompose\",a);var d=[],e=a.layerStatesArray;Sa(e);var f=a.viewState.resolution,g,h,k,l;g=0;for(h=e.length;g<h;++g)l=e[g],yf(l,f)&&\"ready\"==l.ac&&(k=Qf(this,l.layer),k.Kc(a,l,b)&&d.push(l));e=a.size[0]*a.pixelRatio;f=a.size[1]*a.pixelRatio;if(this.b.width!=e||this.b.height!=f)this.b.width=\r\ne,this.b.height=f;c.bindFramebuffer(36160,null);c.clearColor(0,0,0,0);c.clear(16384);c.enable(3042);c.viewport(0,0,this.b.width,this.b.height);g=0;for(h=d.length;g<h;++g)l=d[g],k=Qf(this,l.layer),k.Jc(a,l,b);this.i||(this.b.style.display=\"\",this.i=!0);Of(a);1024<this.a.f-this.h&&a.postRenderFunctions.push(this.ld.bind(this));0!==this.l.b.length&&(a.postRenderFunctions.push(this.B),a.animate=!0);ck(this,\"postcompose\",a);Rf(this,a);a.postRenderFunctions.push(Pf)};\r\nn.fa=function(a,b,c,d,e,f){var g;if(this.f.isContextLost())return!1;var h=b.viewState,k=b.layerStatesArray,l;for(l=k.length-1;0<=l;--l){g=k[l];var m=g.layer;if(yf(g,h.resolution)&&e.call(f,m)&&(g=Qf(this,m).fa(a,b,c,d)))return g}};n.Fc=function(a,b,c,d){var e=!1;if(this.f.isContextLost())return!1;var f=b.viewState,g=b.layerStatesArray,h;for(h=g.length-1;0<=h;--h){var k=g[h],l=k.layer;if(yf(k,f.resolution)&&c.call(d,l)&&(e=Qf(this,l).Ec(a,b)))return!0}return e};var dk=[\"canvas\",\"webgl\",\"dom\"];\r\nfunction Z(a){V.call(this);var b=ek(a);this.kb=void 0!==a.loadTilesWhileAnimating?a.loadTilesWhileAnimating:!1;this.Ab=void 0!==a.loadTilesWhileInteracting?a.loadTilesWhileInteracting:!1;this.Cb=void 0!==a.pixelRatio?a.pixelRatio:oe;this.Bb=b.logos;this.aa=function(){this.g=void 0;this.ve.call(this,Date.now())}.bind(this);this.Fa=Cf();this.zb=Cf();this.Ga=0;this.c=null;this.va=db();this.u=this.P=null;this.a=document.createElement(\"DIV\");this.a.className=\"ol-viewport\"+(re?\" ol-touch\":\"\");this.a.style.position=\r\n\"relative\";this.a.style.overflow=\"hidden\";this.a.style.width=\"100%\";this.a.style.height=\"100%\";this.a.style.msTouchAction=\"none\";this.a.style.touchAction=\"none\";this.s=document.createElement(\"DIV\");this.s.className=\"ol-overlaycontainer\";this.a.appendChild(this.s);this.j=document.createElement(\"DIV\");this.j.className=\"ol-overlaycontainer-stopevent\";a=[\"click\",\"dblclick\",\"mousedown\",\"touchstart\",\"mspointerdown\",of,\"mousewheel\",\"wheel\"];for(var c=0,d=a.length;c<d;++c)R(this.j,a[c],Ea);this.a.appendChild(this.j);\r\nthis.ma=new ff(this);for(var e in rf)R(this.ma,rf[e],this.wc,this);this.ba=b.keyboardEventTarget;this.i=null;R(this.a,\"wheel\",this.Sa,this);R(this.a,\"mousewheel\",this.Sa,this);this.v=b.controls;this.h=b.interactions;this.B=b.overlays;this.Sc={};this.N=new b.xe(this.a,this);this.W=null;this.D=[];this.na=[];this.wa=new Zf(this.qd.bind(this),this.Jd.bind(this));this.Eb={};R(this,La(\"layergroup\"),this.vd,this);R(this,La(\"view\"),this.Kd,this);R(this,La(\"size\"),this.Gd,this);R(this,La(\"target\"),this.Id,\r\nthis);this.l(b.values);ed(this.v,function(a){a.setMap(this)},this);R(this.v,hd,function(a){a.element.setMap(this)},this);R(this.v,id,function(a){a.element.setMap(null)},this);ed(this.h,function(a){a.setMap(this)},this);R(this.h,hd,function(a){a.element.setMap(this)},this);R(this.h,id,function(a){a.element.setMap(null)},this);ed(this.B,this.ic,this);R(this.B,hd,function(a){this.ic(a.element)},this);R(this.B,id,function(a){var b=a.element.Pa();void 0!==b&&delete this.Sc[b.toString()];a.element.setMap(null)},\r\nthis)}B(Z,V);n=Z.prototype;n.cd=function(a){this.v.push(a)};n.dd=function(a){this.h.push(a)};n.ed=function(a){fk(this).get(\"layers\").push(a)};n.fd=function(a){this.B.push(a)};n.ic=function(a){var b=a.Pa();void 0!==b&&(this.Sc[b.toString()]=a);a.setMap(this)};n.oa=function(a){this.render();Array.prototype.push.apply(this.D,arguments)};\r\nn.R=function(){Da(this.ma);Da(this.N);ya(this.a,\"wheel\",this.Sa,this);ya(this.a,\"mousewheel\",this.Sa,this);void 0!==this.f&&(K.removeEventListener(\"resize\",this.f,!1),this.f=void 0);this.g&&(K.cancelAnimationFrame(this.g),this.g=void 0);this.set(\"target\",null);V.prototype.R.call(this)};n.od=function(a,b,c,d,e){if(this.c)return a=this.Ba(a),this.N.fa(a,this.c,b,void 0!==c?c:null,void 0!==d?d:yb,void 0!==e?e:null)};\r\nn.Md=function(a,b,c){if(!this.c)return!1;a=this.Ba(a);return this.N.Fc(a,this.c,void 0!==b?b:yb,void 0!==c?c:null)};n.uc=function(a){var b=this.a.getBoundingClientRect();a=a.changedTouches?a.changedTouches[0]:a;return[a.clientX-b.left,a.clientY-b.top]};n.Wb=function(){return this.get(\"target\")};n.Ra=function(){var a=this.Wb();return void 0!==a?\"string\"===typeof a?document.getElementById(a):a:null};n.Ba=function(a){var b=this.c;return b?Hf(b.pixelToCoordinateTransform,a.slice()):null};\r\nfunction fk(a){return a.get(\"layergroup\")}function ug(a,b){var c=a.c;return c?Hf(c.coordinateToPixelTransform,b.slice(0,2)):null}n.Ta=function(){return this.get(\"size\")};n.U=function(){return this.get(\"view\")};n.qd=function(a,b,c,d){var e=this.c;if(!(e&&b in e.wantedTiles&&e.wantedTiles[b][a.getKey()]))return Infinity;a=c[0]-e.focus[0];c=c[1]-e.focus[1];return 65536*Math.log(d)+Math.sqrt(a*a+c*c)/d};n.Sa=function(a,b){var c=new df(b||a.type,this,a);this.wc(c)};\r\nn.wc=function(a){if(this.c){this.W=a.coordinate;a.frameState=this.c;var b=this.h.a,c;if(!1!==U(this,a))for(c=b.length-1;0<=c;c--){var d=b[c];if(d.get(\"active\")&&!d.handleEvent(a))break}}};\r\nn.Fd=function(){var a=this.c,b=this.wa;if(0!==b.b.length){var c=16,d=c;if(a){var e=a.viewHints;e[0]&&(c=this.kb?8:0,d=2);e[1]&&(c=this.Ab?8:0,d=2)}if(b.l<c){Yf(b);for(var e=0,f,g;b.l<c&&e<d&&0<b.b.length;)f=Vf(b)[0],g=f.getKey(),0!==f.T()||g in b.h||(b.h[g]=!0,++b.l,++e,f.load())}}b=this.na;c=0;for(d=b.length;c<d;++c)b[c](this,a);b.length=0};n.Gd=function(){this.render()};\r\nn.Id=function(){var a;this.Wb()&&(a=this.Ra());if(this.i){for(var b=0,c=this.i.length;b<c;++b)M(this.i[b]);this.i=null}a?(a.appendChild(this.a),a=this.ba?this.ba:a,this.i=[R(a,\"keydown\",this.Sa,this),R(a,\"keypress\",this.Sa,this)],this.f||(this.f=this.yb.bind(this),K.addEventListener(\"resize\",this.f,!1))):(Sd(this.a),void 0!==this.f&&(K.removeEventListener(\"resize\",this.f,!1),this.f=void 0));this.yb()};n.Jd=function(){this.render()};n.Ld=function(){this.render()};\r\nn.Kd=function(){this.P&&(M(this.P),this.P=null);var a=this.U();a&&(this.P=R(a,\"propertychange\",this.Ld,this));this.render()};n.vd=function(){this.u&&(this.u.forEach(M),this.u=null);var a=fk(this);a&&(this.u=[R(a,\"propertychange\",this.render,this),R(a,\"change\",this.render,this)]);this.render()};n.we=function(){this.g&&K.cancelAnimationFrame(this.g);this.aa()};n.render=function(){void 0===this.g&&(this.g=K.requestAnimationFrame(this.aa))};n.se=function(a){return this.h.remove(a)};n.te=function(a){return fk(this).get(\"layers\").remove(a)};\r\nn.ve=function(a){var b,c,d,e=this.Ta(),f=this.U(),g=db(),h=null;if(b=void 0!==e&&0<e[0]&&0<e[1]&&f)b=!!f.qa()&&void 0!==f.O();if(b){d=this.c?this.c.viewHints:void 0;void 0!==d?(d[0]=f.c[0],d[1]=f.c[1],h=d):h=f.c.slice();var k=fk(this).Pb(),l={};b=0;for(c=k.length;b<c;++b)l[J(k[b].layer)]=k[b];d=f.T();h={animate:!1,attributions:{},coordinateToPixelTransform:this.Fa,extent:g,focus:this.W?this.W:d.center,index:this.Ga++,layerStates:l,layerStatesArray:k,logos:pa({},this.Bb),pixelRatio:this.Cb,pixelToCoordinateTransform:this.zb,\r\npostRenderFunctions:[],size:e,skippedFeatureUids:this.Eb,tileQueue:this.wa,time:a,usedTiles:{},viewState:d,viewHints:h,wantedTiles:{}}}if(h){a=this.D;b=e=0;for(c=a.length;b<c;++b)f=a[b],f(this,h)&&(a[e++]=f);a.length=e;h.extent=ub(d.center,d.resolution,d.rotation,h.size,g)}this.c=h;this.N.vb(h);h&&(h.animate&&this.render(),Array.prototype.push.apply(this.na,h.postRenderFunctions),0!==this.D.length||h.viewHints[0]||h.viewHints[1]||lb(h.extent,this.va)||(U(this,new Td(\"moveend\",this,h)),gb(h.extent,\r\nthis.va)));U(this,new Td(\"postrender\",this,h));d=g=this.Fd;this&&(d=ea(g,this));\"function\"!=ba()||aa.Window&&aa.Window.prototype&&!xd(\"Edge\")&&aa.Window.prototype.setImmediate==aa.setImmediate?(fe||(fe=ge()),fe(d)):aa.setImmediate(d)};\r\nn.yb=function(){var a=this.Ra();if(a){var b=K.getComputedStyle(a);this.set(\"size\",[a.offsetWidth-parseFloat(b.borderLeftWidth)-parseFloat(b.paddingLeft)-parseFloat(b.paddingRight)-parseFloat(b.borderRightWidth),a.offsetHeight-parseFloat(b.borderTopWidth)-parseFloat(b.paddingTop)-parseFloat(b.paddingBottom)-parseFloat(b.borderBottomWidth)])}else this.set(\"size\",void 0)};\r\nfunction ek(a){var b=null;void 0!==a.keyboardEventTarget&&(b=\"string\"===typeof a.keyboardEventTarget?document.getElementById(a.keyboardEventTarget):a.keyboardEventTarget);var c={},d={};if(void 0===a.logo||\"boolean\"===typeof a.logo&&a.logo)d[\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAHGAAABxgEXwfpGAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAhNQTFRF////AP//AICAgP//AFVVQECA////K1VVSbbbYL/fJ05idsTYJFtbbcjbJllmZszWWMTOIFhoHlNiZszTa9DdUcHNHlNlV8XRIVdiasrUHlZjIVZjaMnVH1RlIFRkH1RkH1ZlasvYasvXVsPQH1VkacnVa8vWIVZjIFRjVMPQa8rXIVVkXsXRsNveIFVkIFZlIVVj3eDeh6GmbMvXH1ZkIFRka8rWbMvXIFVkIFVjIFVkbMvWH1VjbMvWIFVlbcvWIFVla8vVIFVkbMvWbMvVH1VkbMvWIFVlbcvWIFVkbcvVbMvWjNPbIFVkU8LPwMzNIFVkbczWIFVkbsvWbMvXIFVkRnB8bcvW2+TkW8XRIFVkIlZlJVloJlpoKlxrLl9tMmJwOWd0Omh1RXF8TneCT3iDUHiDU8LPVMLPVcLPVcPQVsPPVsPQV8PQWMTQWsTQW8TQXMXSXsXRX4SNX8bSYMfTYcfTYsfTY8jUZcfSZsnUaIqTacrVasrVa8jTa8rWbI2VbMvWbcvWdJObdcvUdszUd8vVeJaee87Yfc3WgJyjhqGnitDYjaarldPZnrK2oNbborW5o9bbo9fbpLa6q9ndrL3ArtndscDDutzfu8fJwN7gwt7gxc/QyuHhy+HizeHi0NfX0+Pj19zb1+Tj2uXk29/e3uLg3+Lh3+bl4uXj4ufl4+fl5Ofl5ufl5ujm5+jmySDnBAAAAFp0Uk5TAAECAgMEBAYHCA0NDg4UGRogIiMmKSssLzU7PkJJT1JTVFliY2hrdHZ3foSFhYeJjY2QkpugqbG1tre5w8zQ09XY3uXn6+zx8vT09vf4+Pj5+fr6/P39/f3+gz7SsAAAAVVJREFUOMtjYKA7EBDnwCPLrObS1BRiLoJLnte6CQy8FLHLCzs2QUG4FjZ5GbcmBDDjxJBXDWxCBrb8aM4zbkIDzpLYnAcE9VXlJSWlZRU13koIeW57mGx5XjoMZEUqwxWYQaQbSzLSkYGfKFSe0QMsX5WbjgY0YS4MBplemI4BdGBW+DQ11eZiymfqQuXZIjqwyadPNoSZ4L+0FVM6e+oGI6g8a9iKNT3o8kVzNkzRg5lgl7p4wyRUL9Yt2jAxVh6mQCogae6GmflI8p0r13VFWTHBQ0rWPW7ahgWVcPm+9cuLoyy4kCJDzCm6d8PSFoh0zvQNC5OjDJhQopPPJqph1doJBUD5tnkbZiUEqaCnB3bTqLTFG1bPn71kw4b+GFdpLElKIzRxxgYgWNYc5SCENVHKeUaltHdXx0dZ8uBI1hJ2UUDgq82CM2MwKeibqAvSO7MCABq0wXEPiqWEAAAAAElFTkSuQmCC\"]=\r\n\"http://openlayers.org/\";else{var e=a.logo;\"string\"===typeof e?d[e]=\"\":e instanceof HTMLElement?d[J(e).toString()]=e:e&&(L(\"string\"==typeof e.href,44),L(\"string\"==typeof e.src,45),d[e.src]=e.href)}e=a.layers instanceof Xg?a.layers:new Xg({layers:a.layers});c.layergroup=e;c.target=a.target;c.view=void 0!==a.view?a.view:new uc;var e=Nf,f;void 0!==a.renderer?Array.isArray(a.renderer)?f=a.renderer:\"string\"===typeof a.renderer?f=[a.renderer]:L(!1,46):f=dk;var g,h;g=0;for(h=f.length;g<h;++g){var k=f[g];\r\nif(\"canvas\"==k){if(qe){e=Ri;break}}else if(\"dom\"==k){e=Yi;break}else if(\"webgl\"==k&&je){e=ak;break}}void 0!==a.controls?Array.isArray(a.controls)?f=new cd(a.controls.slice()):(L(a.controls instanceof cd,47),f=a.controls):f=ee();if(void 0!==a.interactions)Array.isArray(a.interactions)?g=new cd(a.interactions.slice()):(L(a.interactions instanceof cd,48),g=a.interactions);else{g={};h=new cd;k=new $f;(void 0!==g.altShiftDragRotate?g.altShiftDragRotate:1)&&h.push(new vg);(void 0!==g.doubleClickZoom?g.doubleClickZoom:\r\n1)&&h.push(new fg({delta:g.zoomDelta,duration:g.zoomDuration}));(void 0!==g.dragPan?g.dragPan:1)&&h.push(new qg({kinetic:k}));(void 0!==g.pinchRotate?g.pinchRotate:1)&&h.push(new Pg);(void 0!==g.pinchZoom?g.pinchZoom:1)&&h.push(new Tg({duration:g.zoomDuration}));if(void 0!==g.keyboard?g.keyboard:1)h.push(new Jg),h.push(new Lg({delta:g.zoomDelta,duration:g.zoomDuration}));(void 0!==g.mouseWheelZoom?g.mouseWheelZoom:1)&&h.push(new Ng({duration:g.zoomDuration}));(void 0!==g.shiftDragZoom?g.shiftDragZoom:\r\n1)&&h.push(new Ig({duration:g.zoomDuration}));g=h}void 0!==a.overlays?Array.isArray(a.overlays)?a=new cd(a.overlays.slice()):(L(a.overlays instanceof cd,49),a=a.overlays):a=new cd;return{controls:f,interactions:g,keyboardEventTarget:b,logos:d,overlays:a,xe:e,values:c}}Ib(bh);Ib(ih);ih.forEach(function(a){bh.forEach(function(b){Jb(a,b,ch);Jb(b,a,dh)})});function gk(a){V.call(this);this.j=a.id;this.i=void 0!==a.insertFirst?a.insertFirst:!0;this.s=void 0!==a.stopEvent?a.stopEvent:!0;this.c=document.createElement(\"DIV\");this.c.className=\"ol-overlay-container\";this.c.style.position=\"absolute\";this.autoPan=void 0!==a.autoPan?a.autoPan:!1;this.g=void 0!==a.autoPanAnimation?a.autoPanAnimation:{};this.h=void 0!==a.autoPanMargin?a.autoPanMargin:20;this.a={lb:\"\",sb:\"\",wb:\"\",xb:\"\",visible:!0};this.f=null;R(this,La(\"element\"),this.td,this);R(this,La(\"map\"),\r\nthis.Ad,this);R(this,La(\"offset\"),this.Bd,this);R(this,La(\"position\"),this.Dd,this);R(this,La(\"positioning\"),this.Ed,this);void 0!==a.element&&this.set(\"element\",a.element);this.set(\"offset\",void 0!==a.offset?a.offset:[0,0]);this.set(\"positioning\",void 0!==a.positioning?a.positioning:\"top-left\");void 0!==a.position&&this.Ac(a.position)}B(gk,V);n=gk.prototype;n.Pa=function(){return this.j};n.td=function(){for(var a=this.c;a.lastChild;)a.removeChild(a.lastChild);(a=this.get(\"element\"))&&this.c.appendChild(a)};\r\nn.Ad=function(){this.f&&(Sd(this.c),M(this.f),this.f=null);var a=this.get(\"map\");a&&(this.f=R(a,\"postrender\",this.render,this),hk(this),a=this.s?a.j:a.s,this.i?a.insertBefore(this.c,a.childNodes[0]||null):a.appendChild(this.c))};n.render=function(){hk(this)};n.Bd=function(){hk(this)};\r\nn.Dd=function(){hk(this);if(void 0!==this.get(\"position\")&&this.autoPan){var a=this.get(\"map\");if(void 0!==a&&a.Ra()){var b=ik(a.Ra(),a.Ta()),c=this.get(\"element\"),d=c.offsetWidth,e=c.currentStyle||K.getComputedStyle(c),d=d+(parseInt(e.marginLeft,10)+parseInt(e.marginRight,10)),e=c.offsetHeight,f=c.currentStyle||K.getComputedStyle(c),e=e+(parseInt(f.marginTop,10)+parseInt(f.marginBottom,10)),g=ik(c,[d,e]),c=this.h;hb(b,g)||(d=g[0]-b[0],e=b[2]-g[2],f=g[1]-b[1],g=b[3]-g[3],b=[0,0],0>d?b[0]=d-c:0>e&&\r\n(b[0]=Math.abs(e)+c),0>f?b[1]=f-c:0>g&&(b[1]=Math.abs(g)+c),0===b[0]&&0===b[1])||(c=a.U().qa(),d=ug(a,c),b=[d[0]+b[0],d[1]+b[1]],this.g&&(this.g.source=c,a.oa(Dc(this.g))),a.U().xa(a.Ba(b)))}}};n.Ed=function(){hk(this)};n.setMap=function(a){this.set(\"map\",a)};n.Ac=function(a){this.set(\"position\",a)};function ik(a,b){var c=a.getBoundingClientRect(),d=c.left+K.pageXOffset,c=c.top+K.pageYOffset;return[d,c,d+b[0],c+b[1]]}\r\nfunction jk(a,b){a.a.visible!==b&&(a.c.style.display=b?\"\":\"none\",a.a.visible=b)}\r\nfunction hk(a){var b=a.get(\"map\"),c=a.get(\"position\");if(void 0!==b&&b.c&&void 0!==c){var c=ug(b,c),d=b.Ta(),b=a.c.style,e=a.get(\"offset\"),f=a.get(\"positioning\"),g=e[0],e=e[1];if(\"bottom-right\"==f||\"center-right\"==f||\"top-right\"==f)\"\"!==a.a.sb&&(a.a.sb=b.left=\"\"),g=Math.round(d[0]-c[0]-g)+\"px\",a.a.wb!=g&&(a.a.wb=b.right=g);else{\"\"!==a.a.wb&&(a.a.wb=b.right=\"\");if(\"bottom-center\"==f||\"center-center\"==f||\"top-center\"==f)g-=a.c.offsetWidth/2;g=Math.round(c[0]+g)+\"px\";a.a.sb!=g&&(a.a.sb=b.left=g)}if(\"bottom-left\"==\r\nf||\"bottom-center\"==f||\"bottom-right\"==f)\"\"!==a.a.xb&&(a.a.xb=b.top=\"\"),c=Math.round(d[1]-c[1]-e)+\"px\",a.a.lb!=c&&(a.a.lb=b.bottom=c);else{\"\"!==a.a.lb&&(a.a.lb=b.bottom=\"\");if(\"center-left\"==f||\"center-center\"==f||\"center-right\"==f)e-=a.c.offsetHeight/2;c=Math.round(c[1]+e)+\"px\";a.a.xb!=c&&(a.a.xb=b.top=c)}jk(a,!0)}else jk(a,!1)};function kk(a){V.call(this);this.g=void 0;this.a=\"geometry\";this.h=null;this.f=void 0;this.c=null;R(this,La(this.a),this.qb,this);void 0!==a&&(a instanceof Wb||!a?lk(this,a):this.l(a))}B(kk,V);n=kk.prototype;n.clone=function(){var a=new kk(this.Ea());mk(a,this.a);var b=this.S();b&&lk(a,b.clone());if(b=this.h)a.h=b,a.f=b?nk(b):void 0,a.w();return a};n.S=function(){return this.get(this.a)};n.Pa=function(){return this.g};n.ud=function(){this.w()};\r\nn.qb=function(){this.c&&(M(this.c),this.c=null);var a=this.S();a&&(this.c=R(a,\"change\",this.ud,this));this.w()};function lk(a,b){a.set(a.a,b)}function mk(a,b){ya(a,La(a.a),a.qb,a);a.a=b;R(a,La(a.a),a.qb,a);a.qb()}function nk(a){if(\"function\"!==typeof a){var b;Array.isArray(a)?b=a:(L(a instanceof yh,41),b=[a]);a=function(){return b}}return a};function ok(a,b,c){return function(d,e,f){var g=new XMLHttpRequest;g.open(\"GET\",\"function\"===typeof a?a(d,e,f):a,!0);\"arraybuffer\"==b.$()&&(g.responseType=\"arraybuffer\");g.onload=function(){if(!g.status||200<=g.status&&300>g.status){var a=b.$(),d;\"json\"==a||\"text\"==a?d=g.responseText:\"xml\"==a?(d=g.responseXML,d||(a=g.responseText,d=(new DOMParser).parseFromString(a,\"application/xml\"))):\"arraybuffer\"==a&&(d=g.response);d&&c.call(this,b.a(d,{featureProjection:f}),b.c(pk(d)))}}.bind(this);g.send()}}\r\nfunction qk(a,b){return ok(a,b,function(a){this.Gb(a)})};function rk(){this.defaultDataProjection=null}function sk(a,b,c){var d;c&&(d={dataProjection:c.dataProjection?c.dataProjection:a.c(pk(b)),featureProjection:c.featureProjection});var e;d&&(e={featureProjection:d.featureProjection,dataProjection:d.dataProjection?d.dataProjection:a.defaultDataProjection,rightHanded:d.rightHanded},d.decimals&&(e.decimals=d.decimals));return e}\r\nfunction tk(a,b){var c=b?Hb(b.featureProjection):null,d=b?Hb(b.dataProjection):null;if(c&&d&&!Tb(c,d))if(a instanceof Wb)c=a.transform(d,c);else{d=Ub(d,c);c=[a[0],a[1],a[0],a[3],a[2],a[1],a[2],a[3]];d(c,c,2);var e=[c[0],c[2],c[4],c[6]],f=[c[1],c[3],c[5],c[7]],c=Math.min.apply(null,e),d=Math.min.apply(null,f),e=Math.max.apply(null,e),f=Math.max.apply(null,f),c=ib(c,d,e,f,void 0)}else c=a;return c};function uk(){this.defaultDataProjection=null}B(uk,rk);function pk(a){return\"string\"===typeof a?(a=JSON.parse(a))?a:null:null!==a?a:null}uk.prototype.$=function(){return\"json\"};uk.prototype.g=function(a,b){return this.b(pk(a),sk(this,a,b))};uk.prototype.a=function(a,b){return this.h(pk(a),sk(this,a,b))};function vk(a,b,c,d,e){var f=NaN,g=NaN,h=(c-b)/d;if(0!==h)if(1==h)f=a[b],g=a[b+1];else if(2==h)f=.5*a[b]+.5*a[b+d],g=.5*a[b+1]+.5*a[b+d+1];else{var g=a[b],h=a[b+1],k=0,f=[0],l;for(l=b+d;l<c;l+=d){var m=a[l],p=a[l+1],k=k+Math.sqrt((m-g)*(m-g)+(p-h)*(p-h));f.push(k);g=m;h=p}c=.5*k;k=0;l=f.length;for(m=!1;k<l;)g=k+(l-k>>1),h=+Ma(f[g],c),0>h?k=g+1:(l=g,m=!h);g=m?k:~k;0>g?(c=(c-f[-g-2])/(f[-g-1]-f[-g-2]),b+=(-g-2)*d,f=a[b],f+=c*(a[b+d]-f),g=a[b+1],g+=c*(a[b+d+1]-g)):(f=a[b+g*d],g=a[b+g*d+1])}return e?\r\n(e[0]=f,e[1]=g,e):[f,g]};function wk(a,b){Yb.call(this);this.a=null;this.h=-1;this.ea(a,b)}B(wk,Yb);n=wk.prototype;n.clone=function(){var a=new wk(null);$b(a,this.c,this.o.slice());a.w();return a};n.za=function(){return ec(this.o,0,this.o.length,this.A)};function Nh(a){if(a.h!=a.b){var b;b=vk(a.o,0,a.o.length,a.A,a.a);a.a=b;a.h=a.b}return a.a}n.Qa=function(a){var b=[];b.length=gc(this.o,0,this.o.length,this.A,a,b,0);a=new wk(null);$b(a,\"XY\",b);a.w();return a};n.$=function(){return\"LineString\"};\r\nn.ea=function(a,b){a?(ac(this,b,a,1),this.o||(this.o=[]),this.o.length=cc(this.o,0,a,this.A)):$b(this,\"XY\",null);this.w()};function xk(a,b){Yb.call(this);this.ua=[];this.ea(a,b)}B(xk,Yb);n=xk.prototype;n.clone=function(){var a=new xk(null),b=this.ua.slice();$b(a,this.c,this.o.slice());a.ua=b;a.w();return a};n.za=function(){return fc(this.o,0,this.ua,this.A)};function Oh(a){var b=[],c=a.o,d=0,e=a.ua;a=a.A;var f,g;f=0;for(g=e.length;f<g;++f){var h=e[f],d=vk(c,d,h,a);Pa(b,d);d=h}return b}\r\nn.Qa=function(a){var b=[],c=[],d=this.o,e=this.ua,f=this.A,g=0,h=0,k,l;k=0;for(l=e.length;k<l;++k){var m=e[k],h=gc(d,g,m,f,a,b,h);c.push(h);g=m}b.length=h;a=new xk(null);$b(a,\"XY\",b);a.ua=c;a.w();return a};n.$=function(){return\"MultiLineString\"};n.ea=function(a,b){if(a){ac(this,b,a,2);this.o||(this.o=[]);var c=dc(this.o,0,a,this.A,this.ua);this.o.length=0===c.length?0:c[c.length-1]}else c=this.ua,$b(this,\"XY\",null),this.ua=c;this.w()};function yk(a,b){Yb.call(this);this.ea(a,b)}B(yk,Yb);yk.prototype.clone=function(){var a=new yk(null);$b(a,this.c,this.o.slice());a.w();return a};yk.prototype.za=function(){return ec(this.o,0,this.o.length,this.A)};yk.prototype.$=function(){return\"MultiPoint\"};yk.prototype.ea=function(a,b){a?(ac(this,b,a,1),this.o||(this.o=[]),this.o.length=cc(this.o,0,a,this.A)):$b(this,\"XY\",null);this.w()};function zk(a,b){Yb.call(this);this.a=[];this.v=-1;this.u=null;this.B=-1;this.h=null;this.ea(a,b)}B(zk,Yb);n=zk.prototype;n.clone=function(){for(var a=new zk(null),b=this.a.length,c=Array(b),d=0;d<b;++d)c[d]=this.a[d].slice();$b(a,this.c,this.o.slice());a.a=c;a.w();return a};n.za=function(a){var b;void 0!==a?(b=Ph(this).slice(),pc(b,this.a,this.A,a)):b=this.o;a=b;b=this.a;var c=this.A,d=0,e=[],f=0,g,h;g=0;for(h=b.length;g<h;++g){var k=b[g];e[f++]=fc(a,d,k,c,e[f]);d=k[k.length-1]}e.length=f;return e};\r\nfunction Qh(a){if(a.v!=a.b){var b=a.o,c=a.a,d=a.A,e=0,f=[],g,h,k;g=0;for(h=c.length;g<h;++g){var l=c[g];k=b;var m=l[0],p=d,q=jb(void 0);k=nb(q,k,e,m,p);f.push((k[0]+k[2])/2,(k[1]+k[3])/2);e=l[l.length-1]}b=Ph(a);c=a.a;d=a.A;g=0;h=[];l=0;for(k=c.length;l<k;++l)e=c[l],h=lc(b,g,e,d,f,2*l,h),g=e[e.length-1];a.u=h;a.v=a.b}return a.u}\r\nfunction Ph(a){if(a.B!=a.b){var b=a.o,c;a:{c=a.a;var d,e;d=0;for(e=c.length;d<e;++d)if(!nc(b,c[d],a.A,void 0)){c=!1;break a}c=!0}c?a.h=b:(a.h=b.slice(),a.h.length=pc(a.h,a.a,a.A));a.B=a.b}return a.h}n.Qa=function(a){var b=[],c=[],d=this.o,e=this.a,f=this.A;a=Math.sqrt(a);var g=0,h=0,k,l;k=0;for(l=e.length;k<l;++k){var m=e[k],p=[],h=hc(d,g,m,f,a,b,h,p);c.push(p);g=m[m.length-1]}b.length=h;d=new zk(null);$b(d,\"XY\",b);d.a=c;d.w();return d};n.$=function(){return\"MultiPolygon\"};\r\nn.ea=function(a,b){if(a){ac(this,b,a,3);this.o||(this.o=[]);var c=this.o,d=this.A,e=this.a,f=0,e=e?e:[],g=0,h,k;h=0;for(k=a.length;h<k;++h)f=dc(c,f,a[h],d,e[g]),e[g++]=f,f=f[f.length-1];e.length=g;0===e.length?this.o.length=0:(c=e[e.length-1],this.o.length=0===c.length?0:c[c.length-1])}else c=this.a,$b(this,\"XY\",null),this.a=c;this.w()};function Ak(a){a=a?a:{};this.defaultDataProjection=null;this.f=a.geometryName}B(Ak,uk);function Bk(a){var b=\"XY\";!0===a.hasZ&&!0===a.hasM?b=\"XYZM\":!0===a.hasZ?b=\"XYZ\":!0===a.hasM&&(b=\"XYM\");return b}\r\nvar Ck={Point:function(a){return void 0!==a.m&&void 0!==a.z?new jc([a.x,a.y,a.z,a.m],\"XYZM\"):void 0!==a.z?new jc([a.x,a.y,a.z],\"XYZ\"):void 0!==a.m?new jc([a.x,a.y,a.m],\"XYM\"):new jc([a.x,a.y])},LineString:function(a){return new wk(a.paths[0],Bk(a))},Polygon:function(a){return new qc(a.rings,Bk(a))},MultiPoint:function(a){return new yk(a.points,Bk(a))},MultiLineString:function(a){return new xk(a.paths,Bk(a))},MultiPolygon:function(a){return new zk(a.rings,Bk(a))}};\r\nAk.prototype.b=function(a,b){var c;if(c=a.geometry){var d;if(\"number\"===typeof c.x&&\"number\"===typeof c.y)d=\"Point\";else if(c.points)d=\"MultiPoint\";else if(c.paths)d=1===c.paths.length?\"LineString\":\"MultiLineString\";else if(c.rings){var e=c.rings,f=Bk(c),g=[];d=[];var h,k;h=0;for(k=e.length;h<k;++h){var l=Oa(e[h]);mc(l,0,l.length,f.length)?g.push([e[h]]):d.push(e[h])}for(;d.length;){e=d.shift();f=!1;for(h=g.length-1;0<=h;h--)if(hb((new ic(g[h][0])).G(),(new ic(e)).G())){g[h].push(e);f=!0;break}f||\r\ng.push([e.reverse()])}c=pa({},c);1===g.length?(d=\"Polygon\",c.rings=g[0]):(d=\"MultiPolygon\",c.rings=g)}c=tk((0,Ck[d])(c),b)}else c=null;g=new kk;this.f&&mk(g,this.f);lk(g,c);b&&b.Tb&&a.attributes[b.Tb]&&(g.g=a.attributes[b.Tb],g.w());a.attributes&&g.l(a.attributes);return g};Ak.prototype.h=function(a,b){var c=b?b:{};if(a.features){var d=[],e=a.features,f,g;c.Tb=a.objectIdFieldName;f=0;for(g=e.length;f<g;++f)d.push(this.b(e[f],c));return d}return[this.b(a,c)]};\r\nAk.prototype.c=function(a){return a.spatialReference&&a.spatialReference.wkid?Hb(\"EPSG:\"+a.spatialReference.wkid):null};function Dk(a){Wb.call(this);this.a=a?a:null;Ek(this)}B(Dk,Wb);function Fk(a){var b,c;if(a.a)for(b=0,c=a.a.length;b<c;++b)ya(a.a[b],\"change\",a.w,a)}function Ek(a){var b,c;if(a.a)for(b=0,c=a.a.length;b<c;++b)R(a.a[b],\"change\",a.w,a)}n=Dk.prototype;n.clone=function(){var a=new Dk(null),b=this.a,c=[],d,e;d=0;for(e=b.length;d<e;++d)c.push(b[d].clone());Fk(a);a.a=c;Ek(a);a.w();return a};n.mb=function(a){jb(a);for(var b=this.a,c=0,d=b.length;c<d;++c)mb(a,b[c].G());return a};\r\nn.Rb=function(a){this.i!=this.b&&(qa(this.f),this.g=0,this.i=this.b);if(0>a||0!==this.g&&a<this.g)return this;var b=a.toString();if(this.f.hasOwnProperty(b))return this.f[b];var c=[],d=this.a,e=!1,f,g;f=0;for(g=d.length;f<g;++f){var h=d[f],k=h.Rb(a);c.push(k);k!==h&&(e=!0)}if(e)return a=new Dk(null),Fk(a),a.a=c,Ek(a),a.w(),this.f[b]=a;this.g=a;return this};n.$=function(){return\"GeometryCollection\"};n.rotate=function(a,b){for(var c=this.a,d=0,e=c.length;d<e;++d)c[d].rotate(a,b);this.w()};\r\nn.scale=function(a,b,c){c||(c=tb(this.G()));for(var d=this.a,e=0,f=d.length;e<f;++e)d[e].scale(a,b,c);this.w()};n.Hb=function(a){var b=this.a,c,d;c=0;for(d=b.length;c<d;++c)b[c].Hb(a);this.w()};n.translate=function(a,b){var c=this.a,d,e;d=0;for(e=c.length;d<e;++d)c[d].translate(a,b);this.w()};n.R=function(){Fk(this);Wb.prototype.R.call(this)};function Gk(a){a=a?a:{};this.defaultDataProjection=null;this.defaultDataProjection=Hb(a.defaultDataProjection?a.defaultDataProjection:\"EPSG:4326\");this.f=a.geometryName}B(Gk,uk);function Hk(a,b){return a?tk((0,Ik[a.type])(a),b):null}\r\nvar Ik={Point:function(a){return new jc(a.coordinates)},LineString:function(a){return new wk(a.coordinates)},Polygon:function(a){return new qc(a.coordinates)},MultiPoint:function(a){return new yk(a.coordinates)},MultiLineString:function(a){return new xk(a.coordinates)},MultiPolygon:function(a){return new zk(a.coordinates)},GeometryCollection:function(a,b){var c=a.geometries.map(function(a){return Hk(a,b)});return new Dk(c)}};\r\nGk.prototype.b=function(a,b){var c=Hk(a.geometry,b),d=new kk;this.f&&mk(d,this.f);lk(d,c);void 0!==a.id&&(d.g=a.id,d.w());a.properties&&d.l(a.properties);return d};Gk.prototype.h=function(a,b){var c;if(\"Feature\"==a.type)c=[this.b(a,b)];else if(\"FeatureCollection\"==a.type){c=[];var d=a.features,e,f;e=0;for(f=d.length;e<f;++e)c.push(this.b(d[e],b))}else L(!1,35);return c};\r\nGk.prototype.c=function(a){a=a.crs;var b;a?\"name\"==a.type?b=Hb(a.properties.name):\"EPSG\"==a.type?b=Hb(\"EPSG:\"+a.properties.code):L(!1,36):b=this.defaultDataProjection;return b};function Jk(a,b,c,d,e,f){Ga.call(this);this.l=null;this.b=a?a:new Image;null!==d&&(this.b.crossOrigin=d);this.f=f?document.createElement(\"CANVAS\"):null;this.h=f;this.g=null;this.c=e;this.a=c;this.s=b;this.i=!1;2==this.c&&Kk(this)}B(Jk,Ga);function Kk(a){var b=Md(1,1);try{b.drawImage(a.b,0,0),b.getImageData(0,0,1,1)}catch(c){a.i=!0}}Jk.prototype.j=function(){this.c=3;this.g.forEach(M);this.g=null;U(this,\"change\")};\r\nJk.prototype.v=function(){this.c=2;this.a&&(this.b.width=this.a[0],this.b.height=this.a[1]);this.a=[this.b.width,this.b.height];this.g.forEach(M);this.g=null;Kk(this);if(!this.i&&null!==this.h){this.f.width=this.b.width;this.f.height=this.b.height;var a=this.f.getContext(\"2d\");a.drawImage(this.b,0,0);for(var b=a.getImageData(0,0,this.b.width,this.b.height),c=b.data,d=this.h[0]/255,e=this.h[1]/255,f=this.h[2]/255,g=0,h=c.length;g<h;g+=4)c[g]*=d,c[g+1]*=e,c[g+2]*=f;a.putImageData(b,0,0)}U(this,\"change\")};\r\nJk.prototype.Z=function(){return this.f?this.f:this.b};Jk.prototype.load=function(){if(0==this.c){this.c=1;this.g=[R(this.b,\"error\",this.j,this,!0),R(this.b,\"load\",this.v,this,!0)];try{this.b.src=this.s}catch(a){this.j()}}};function Lk(a){a=a||{};this.g=void 0!==a.anchor?a.anchor:[.5,.5];this.f=null;this.a=void 0!==a.anchorOrigin?a.anchorOrigin:\"top-left\";this.l=void 0!==a.anchorXUnits?a.anchorXUnits:\"fraction\";this.i=void 0!==a.anchorYUnits?a.anchorYUnits:\"fraction\";var b=void 0!==a.crossOrigin?a.crossOrigin:null,c=void 0!==a.img?a.img:null,d=void 0!==a.imgSize?a.imgSize:null,e=a.src;L(!(void 0!==e&&c),4);L(!c||c&&d,5);void 0!==e&&0!==e.length||!c||(e=c.src||J(c).toString());L(void 0!==e&&0<e.length,6);var f=void 0!==\r\na.src?0:2,g;void 0!==a.color?(g=a.color,g=Array.isArray(g)?g:pd(g)):g=null;var h=Af.get(e,b,g);h||(h=new Jk(c,e,d,b,f,g),Af.set(e,b,g,h));this.b=h;this.u=void 0!==a.offset?a.offset:[0,0];this.c=void 0!==a.offsetOrigin?a.offsetOrigin:\"top-left\";this.h=null;this.j=void 0!==a.size?a.size:null;oh.call(this,{opacity:void 0!==a.opacity?a.opacity:1,rotation:void 0!==a.rotation?a.rotation:0,scale:void 0!==a.scale?a.scale:1,snapToPixel:void 0!==a.snapToPixel?a.snapToPixel:!0,rotateWithView:void 0!==a.rotateWithView?\r\na.rotateWithView:!1})}B(Lk,oh);n=Lk.prototype;n.eb=function(){if(this.f)return this.f;var a=this.g,b=this.Ka();if(\"fraction\"==this.l||\"fraction\"==this.i){if(!b)return null;a=this.g.slice();\"fraction\"==this.l&&(a[0]*=b[0]);\"fraction\"==this.i&&(a[1]*=b[1])}if(\"top-left\"!=this.a){if(!b)return null;a===this.g&&(a=this.g.slice());if(\"top-right\"==this.a||\"bottom-right\"==this.a)a[0]=-a[0]+b[0];if(\"bottom-left\"==this.a||\"bottom-right\"==this.a)a[1]=-a[1]+b[1]}return this.f=a};n.Z=function(a){return this.b.Z(a)};\r\nn.Ob=function(){return this.b.a};n.ib=function(){return this.b.c};n.ub=function(){var a=this.b;if(!a.l)if(a.i){var b=a.a[0],c=a.a[1],d=Md(b,c);d.fillRect(0,0,b,c);a.l=d.canvas}else a.l=a.b;return a.l};n.pa=function(){if(this.h)return this.h;var a=this.u;if(\"top-left\"!=this.c){var b=this.Ka(),c=this.b.a;if(!b||!c)return null;a=a.slice();if(\"top-right\"==this.c||\"bottom-right\"==this.c)a[0]=c[0]-b[0]-a[0];if(\"bottom-left\"==this.c||\"bottom-right\"==this.c)a[1]=c[1]-b[1]-a[1]}return this.h=a};\r\nn.Ka=function(){return this.j?this.j:this.b.a};n.Vb=function(a,b){return R(this.b,\"change\",a,b)};n.load=function(){this.b.load()};n.bc=function(a,b){ya(this.b,\"change\",a,b)};function Mk(a,b,c){Yb.call(this);Nk(this,a,b?b:0,c)}B(Mk,Yb);Mk.prototype.clone=function(){var a=new Mk(null);$b(a,this.c,this.o.slice());a.w();return a};Mk.prototype.mb=function(a){var b=this.o,c=b[this.A]-b[0];return ib(b[0]-c,b[1]-c,b[0]+c,b[1]+c,a)};Mk.prototype.$=function(){return\"Circle\"};function Nk(a,b,c,d){if(b){ac(a,d,b,0);a.o||(a.o=[]);d=a.o;b=bc(d,b);d[b++]=d[0]+c;var e;c=1;for(e=a.A;c<e;++c)d[b++]=d[c];d.length=b}else $b(a,\"XY\",null);a.w()};function Ok(a,b,c,d,e){Sf.call(this,a,b);this.g=c;this.a=new Image;null!==d&&(this.a.crossOrigin=d);this.c={};this.f=null;this.h=e}B(Ok,Sf);n=Ok.prototype;n.R=function(){1==this.state&&Pk(this);this.b&&Da(this.b);this.state=5;Tf(this);Sf.prototype.R.call(this)};n.Z=function(a){if(void 0!==a){var b=J(a);if(b in this.c)return this.c[b];a=sa(this.c)?this.a:this.a.cloneNode(!1);return this.c[b]=a}return this.a};n.getKey=function(){return this.g};n.ce=function(){this.state=3;Pk(this);Tf(this)};\r\nn.de=function(){this.state=this.a.naturalWidth&&this.a.naturalHeight?2:4;Pk(this);Tf(this)};n.load=function(){if(0==this.state||3==this.state)this.state=1,Tf(this),this.f=[R(this.a,\"error\",this.ce,this,!0),R(this.a,\"load\",this.de,this,!0)],this.h(this,this.g)};function Pk(a){a.f.forEach(M);a.f=null};function Qk(){return[[-Infinity,-Infinity,Infinity,Infinity]]};var Rk;\r\n(function(){var a={},b={Aa:a};(function(c){if(\"object\"===typeof a&&\"undefined\"!==typeof b)b.Aa=c();else{var d;\"undefined\"!==typeof window?d=window:\"undefined\"!==typeof global?d=global:\"undefined\"!==typeof self?d=self:d=this;d.Re=c()}})(function(){return function d(a,b,g){function h(l,p){if(!b[l]){if(!a[l]){var q=\"function\"==typeof require&&require;if(!p&&q)return q(l,!0);if(k)return k(l,!0);q=Error(\"Cannot find module '\"+l+\"'\");throw q.code=\"MODULE_NOT_FOUND\",q;}q=b[l]={Aa:{}};a[l][0].call(q.Aa,function(b){var d=\r\na[l][1][b];return h(d?d:b)},q,q.Aa,d,a,b,g)}return b[l].Aa}for(var k=\"function\"==typeof require&&require,l=0;l<g.length;l++)h(g[l]);return h}({1:[function(a,b){function f(a,b){if(!(this instanceof f))return new f(a,b);this.Db=Math.max(4,a||9);this.gc=Math.max(2,Math.ceil(.4*this.Db));b&&this.ad(b);this.clear()}function g(a,b){h(a,0,a.children.length,b,a)}function h(a,b,d,e,g){g||(g=r(null));g.H=Infinity;g.J=Infinity;g.I=-Infinity;g.L=-Infinity;for(var f;b<d;b++)f=a.children[b],k(g,a.ga?e(f):f);return g}\r\nfunction k(a,b){a.H=Math.min(a.H,b.H);a.J=Math.min(a.J,b.J);a.I=Math.max(a.I,b.I);a.L=Math.max(a.L,b.L)}function l(a,b){return a.H-b.H}function m(a,b){return a.J-b.J}function p(a){return(a.I-a.H)*(a.L-a.J)}function q(a){return a.I-a.H+(a.L-a.J)}function u(a,b){return a.H<=b.H&&a.J<=b.J&&b.I<=a.I&&b.L<=a.L}function w(a,b){return b.H<=a.I&&b.J<=a.L&&b.I>=a.H&&b.L>=a.J}function r(a){return{children:a,height:1,ga:!0,H:Infinity,J:Infinity,I:-Infinity,L:-Infinity}}function x(a,b,d,e,g){for(var f=[b,d],\r\nh;f.length;)d=f.pop(),b=f.pop(),d-b<=e||(h=b+Math.ceil((d-b)/e/2)*e,D(a,h,b,d,g),f.push(b,h,h,d))}b.Aa=f;var D=a(\"quickselect\");f.prototype={all:function(){return this.cc(this.data,[])},search:function(a){var b=this.data,d=[],e=this.la;if(!w(a,b))return d;for(var g=[],f,h,k,l;b;){f=0;for(h=b.children.length;f<h;f++)k=b.children[f],l=b.ga?e(k):k,w(a,l)&&(b.ga?d.push(k):u(a,l)?this.cc(k,d):g.push(k));b=g.pop()}return d},load:function(a){if(!a||!a.length)return this;if(a.length<this.gc){for(var b=0,\r\nd=a.length;b<d;b++)this.Ha(a[b]);return this}a=this.ec(a.slice(),0,a.length-1,0);this.data.children.length?this.data.height===a.height?this.hc(this.data,a):(this.data.height<a.height&&(b=this.data,this.data=a,a=b),this.fc(a,this.data.height-a.height-1,!0)):this.data=a;return this},Ha:function(a){a&&this.fc(a,this.data.height-1);return this},clear:function(){this.data=r([]);return this},remove:function(a,b){if(!a)return this;for(var d=this.data,e=this.la(a),g=[],f=[],h,k,l,m;d||g.length;){d||(d=g.pop(),\r\nk=g[g.length-1],h=f.pop(),m=!0);if(d.ga){a:{l=a;var p=d.children,q=b;if(q){for(var r=0;r<p.length;r++)if(q(l,p[r])){l=r;break a}l=-1}else l=p.indexOf(l)}if(-1!==l){d.children.splice(l,1);g.push(d);this.$c(g);break}}m||d.ga||!u(d,e)?k?(h++,d=k.children[h],m=!1):d=null:(g.push(d),f.push(h),h=0,k=d,d=d.children[0])}return this},la:function(a){return a},Kb:l,Lb:m,toJSON:function(){return this.data},cc:function(a,b){for(var d=[];a;)a.ga?b.push.apply(b,a.children):d.push.apply(d,a.children),a=d.pop();return b},\r\nec:function(a,b,d,e){var f=d-b+1,h=this.Db,k;if(f<=h)return k=r(a.slice(b,d+1)),g(k,this.la),k;e||(e=Math.ceil(Math.log(f)/Math.log(h)),h=Math.ceil(f/Math.pow(h,e-1)));k=r([]);k.ga=!1;k.height=e;var f=Math.ceil(f/h),h=f*Math.ceil(Math.sqrt(h)),l,m,p;for(x(a,b,d,h,this.Kb);b<=d;b+=h)for(m=Math.min(b+h-1,d),x(a,b,m,f,this.Lb),l=b;l<=m;l+=f)p=Math.min(l+f-1,m),k.children.push(this.ec(a,l,p,e-1));g(k,this.la);return k},Zc:function(a,b,d,e){for(var f,g,h,k,l,m,q,r;;){e.push(b);if(b.ga||e.length-1===d)break;\r\nq=r=Infinity;f=0;for(g=b.children.length;f<g;f++)h=b.children[f],l=p(h),m=(Math.max(h.I,a.I)-Math.min(h.H,a.H))*(Math.max(h.L,a.L)-Math.min(h.J,a.J))-l,m<r?(r=m,q=l<q?l:q,k=h):m===r&&l<q&&(q=l,k=h);b=k||b.children[0]}return b},fc:function(a,b,d){var e=this.la;d=d?a:e(a);var e=[],f=this.Zc(d,this.data,b,e);f.children.push(a);for(k(f,d);0<=b;)if(e[b].children.length>this.Db)this.bd(e,b),b--;else break;this.Wc(d,e,b)},bd:function(a,b){var d=a[b],e=d.children.length,f=this.gc;this.Xc(d,f,e);e=this.Yc(d,\r\nf,e);e=r(d.children.splice(e,d.children.length-e));e.height=d.height;e.ga=d.ga;g(d,this.la);g(e,this.la);b?a[b-1].children.push(e):this.hc(d,e)},hc:function(a,b){this.data=r([a,b]);this.data.height=a.height+1;this.data.ga=!1;g(this.data,this.la)},Yc:function(a,b,d){var e,f,g,k,l,m,q;l=m=Infinity;for(e=b;e<=d-b;e++)f=h(a,0,e,this.la),g=h(a,e,d,this.la),k=Math.max(0,Math.min(f.I,g.I)-Math.max(f.H,g.H))*Math.max(0,Math.min(f.L,g.L)-Math.max(f.J,g.J)),f=p(f)+p(g),k<l?(l=k,q=e,m=f<m?f:m):k===l&&f<m&&(m=\r\nf,q=e);return q},Xc:function(a,b,d){var e=a.ga?this.Kb:l,f=a.ga?this.Lb:m,g=this.dc(a,b,d,e);b=this.dc(a,b,d,f);g<b&&a.children.sort(e)},dc:function(a,b,d,e){a.children.sort(e);e=this.la;var f=h(a,0,b,e),g=h(a,d-b,d,e),l=q(f)+q(g),m,p;for(m=b;m<d-b;m++)p=a.children[m],k(f,a.ga?e(p):p),l+=q(f);for(m=d-b-1;m>=b;m--)p=a.children[m],k(g,a.ga?e(p):p),l+=q(g);return l},Wc:function(a,b,d){for(;0<=d;d--)k(b[d],a)},$c:function(a){for(var b=a.length-1,d;0<=b;b--)0===a[b].children.length?0<b?(d=a[b-1].children,\r\nd.splice(d.indexOf(a[b]),1)):this.clear():g(a[b],this.la)},ad:function(a){var b=[\"return a\",\" - b\",\";\"];this.Kb=new Function(\"a\",\"b\",b.join(a[0]));this.Lb=new Function(\"a\",\"b\",b.join(a[1]));this.la=new Function(\"a\",\"return {minX: a\"+a[0]+\", minY: a\"+a[1]+\", maxX: a\"+a[2]+\", maxY: a\"+a[3]+\"};\")}}},{quickselect:2}],2:[function(a,b){function f(a,b,d,e,q){d=d||0;e=e||a.length-1;for(q=q||h;e>d;){if(600<e-d){var u=e-d+1,w=b-d+1,r=Math.log(u),x=.5*Math.exp(2*r/3),r=.5*Math.sqrt(r*x*(u-x)/u)*(0>w-u/2?-1:\r\n1);f(a,b,Math.max(d,Math.floor(b-w*x/u+r)),Math.min(e,Math.floor(b+(u-w)*x/u+r)),q)}u=a[b];w=d;x=e;g(a,d,b);for(0<q(a[e],u)&&g(a,d,e);w<x;){g(a,w,x);w++;for(x--;0>q(a[w],u);)w++;for(;0<q(a[x],u);)x--}0===q(a[d],u)?g(a,d,x):(x++,g(a,x,e));x<=b&&(d=x+1);b<=x&&(e=x-1)}}function g(a,b,d){var e=a[b];a[b]=a[d];a[d]=e}function h(a,b){return a<b?-1:a>b?1:0}b.Aa=f},{}]},{},[1])(1)});Rk=b.Aa})();function Sk(a){this.b=Rk(a);this.a={}}n=Sk.prototype;n.Ha=function(a,b){var c={H:a[0],J:a[1],I:a[2],L:a[3],value:b};this.b.Ha(c);this.a[J(b)]=c};n.load=function(a,b){for(var c=Array(b.length),d=0,e=b.length;d<e;d++){var f=a[d],g=b[d],f={H:f[0],J:f[1],I:f[2],L:f[3],value:g};c[d]=f;this.a[J(g)]=f}this.b.load(c)};n.remove=function(a){a=J(a);var b=this.a[a];delete this.a[a];return null!==this.b.remove(b)};function Tk(a){return a.b.all().map(function(a){return a.value})}\r\nfunction Uk(a,b){return a.b.search({H:b[0],J:b[1],I:b[2],L:b[3]}).map(function(a){return a.value})}function Vk(a,b,c,d){return Wk(Uk(a,b),c,d)}function Wk(a,b,c){for(var d,e=0,f=a.length;e<f&&!(d=b.call(c,a[e]));e++);return d}n.clear=function(){this.b.clear();this.a={}};n.G=function(){var a=this.b.data;return[a.H,a.J,a.I,a.L]};function Xk(a){a=a||{};vf.call(this,{attributions:a.attributions,logo:a.logo,projection:void 0,state:\"ready\",wrapX:void 0!==a.wrapX?a.wrapX:!0});this.j=I;this.s=a.format;this.u=void 0==a.overlaps?!0:a.overlaps;this.B=a.url;void 0!==a.loader?this.j=a.loader:void 0!==this.B&&(L(this.s,7),this.j=qk(this.B,this.s));this.W=void 0!==a.strategy?a.strategy:Qk;var b=void 0!==a.useSpatialIndex?a.useSpatialIndex:!0;this.X=b?new Sk:null;this.v=new Sk;this.ka={};this.c={};this.f={};this.g={};this.a=null;var c,\r\nd;a.features instanceof cd?(c=a.features,d=c.a):Array.isArray(a.features)&&(d=a.features);b||void 0!==c||(c=new cd(d));void 0!==d&&Yk(this,d);void 0!==c&&Zk(this,c)}B(Xk,vf);n=Xk.prototype;n.Fb=function(a){var b=J(a).toString();if($k(this,b,a)){al(this,b,a);var c=a.S();c?(b=c.G(),this.X&&this.X.Ha(b,a)):this.ka[b]=a;U(this,new bl(\"addfeature\",a))}this.w()};function al(a,b,c){a.g[b]=[R(c,\"change\",a.vc,a),R(c,\"propertychange\",a.vc,a)]}\r\nfunction $k(a,b,c){var d=!0,e=c.Pa();void 0!==e?e.toString()in a.c?d=!1:a.c[e.toString()]=c:(L(!(b in a.f),30),a.f[b]=c);return d}n.Gb=function(a){Yk(this,a);this.w()};function Yk(a,b){var c,d,e,f,g=[],h=[],k=[];d=0;for(e=b.length;d<e;d++)f=b[d],c=J(f).toString(),$k(a,c,f)&&h.push(f);d=0;for(e=h.length;d<e;d++){f=h[d];c=J(f).toString();al(a,c,f);var l=f.S();l?(c=l.G(),g.push(c),k.push(f)):a.ka[c]=f}a.X&&a.X.load(g,k);d=0;for(e=h.length;d<e;d++)U(a,new bl(\"addfeature\",h[d]))}\r\nfunction Zk(a,b){var c=!1;R(a,\"addfeature\",function(a){c||(c=!0,b.push(a.feature),c=!1)});R(a,\"removefeature\",function(a){c||(c=!0,b.remove(a.feature),c=!1)});R(b,hd,function(a){c||(c=!0,this.Fb(a.element),c=!1)},a);R(b,id,function(a){if(!c){c=!0;a=a.element;var b=J(a).toString();b in this.ka?delete this.ka[b]:this.X&&this.X.remove(a);this.Zb(a);this.w();c=!1}},a);a.a=b}\r\nn.clear=function(a){if(a){for(var b in this.g)this.g[b].forEach(M);this.a||(this.g={},this.c={},this.f={})}else if(this.X){a=this.Zb;Wk(Tk(this.X),a,this);for(var c in this.ka)this.Zb(this.ka[c])}this.a&&this.a.clear();this.X&&this.X.clear();this.v.clear();this.ka={};U(this,new bl(\"clear\"));this.w()};n.nd=function(a,b){if(this.X)return Wk(Tk(this.X),a,b);if(this.a)return ed(this.a,a,b)};function Qi(a,b,c,d){a.X?Vk(a.X,b,c,d):a.a&&ed(a.a,c,d)}\r\nn.pd=function(){var a;this.a?a=this.a.a:this.X&&(a=Tk(this.X),sa(this.ka)||Pa(a,ra(this.ka)));return a};n.G=function(){return this.X.G()};\r\nn.vc=function(a){a=a.target;var b=J(a).toString(),c=a.S();if(c)if(c=c.G(),b in this.ka)delete this.ka[b],this.X&&this.X.Ha(c,a);else{if(this.X){var d=this.X,e=d.a[J(a)];lb([e.H,e.J,e.I,e.L],c)||(d.remove(a),d.Ha(c,a))}}else b in this.ka||(this.X&&this.X.remove(a),this.ka[b]=a);c=a.Pa();void 0!==c?(c=c.toString(),b in this.f?(delete this.f[b],this.c[c]=a):this.c[c]!==a&&(cl(this,a),this.c[c]=a)):b in this.f||(cl(this,a),this.f[b]=a);this.w();U(this,new bl(\"changefeature\",a))};\r\nfunction Pi(a,b,c,d){var e=a.v;b=a.W(b,c);var f,g;f=0;for(g=b.length;f<g;++f){var h=b[f];Vk(e,h,function(a){return hb(a.extent,h)})||(a.j.call(a,h,c,d),e.Ha(h,{extent:h.slice()}))}}n.Zb=function(a){var b=J(a).toString();this.g[b].forEach(M);delete this.g[b];var c=a.Pa();void 0!==c?delete this.c[c.toString()]:delete this.f[b];U(this,new bl(\"removefeature\",a))};function cl(a,b){for(var c in a.c)if(a.c[c]===b){delete a.c[c];break}}function bl(a,b){T.call(this,a);this.feature=b}B(bl,T);function dl(a,b){T.call(this,a);this.feature=b}B(dl,T);\r\nfunction el(a){ng.call(this,{handleDownEvent:fl,handleEvent:gl,handleUpEvent:hl});this.W=null;this.s=!1;this.Ga=a.source?a.source:null;this.ma=a.features?a.features:null;this.jd=a.snapTolerance?a.snapTolerance:12;this.P=a.type;this.c=il(this.P);this.wa=a.minPoints?a.minPoints:this.c===jl?3:2;this.va=a.maxPoints?a.maxPoints:Infinity;this.Ab=a.finishCondition?a.finishCondition:yb;var b=a.geometryFunction;if(!b)if(\"Circle\"===this.P)b=function(a,b){var c=b?b:new Mk([NaN,NaN]),g=a[0],h=a[1],k=g[0]-h[0],\r\ng=g[1]-h[1];Nk(c,a[0],Math.sqrt(k*k+g*g));return c};else{var c,b=this.c;b===kl?c=jc:b===ll?c=wk:b===jl&&(c=qc);b=function(a,b){var f=b;f?f.ea(a):f=new c(a);return f}}this.u=b;this.D=this.i=this.a=this.j=this.g=this.h=null;this.kd=a.clickTolerance?a.clickTolerance*a.clickTolerance:36;this.ba=new Y({source:new Xk({useSpatialIndex:!1,wrapX:a.wrapX?a.wrapX:!1}),style:a.style?a.style:ml()});this.Fa=a.geometryName;this.gd=a.condition?a.condition:jg;this.na=a.freehandCondition?a.freehandCondition:kg;R(this,\r\nLa(\"active\"),this.kb,this)}B(el,ng);function ml(){var a=Eh();return function(b){return a[b.S().$()]}}el.prototype.setMap=function(a){ng.prototype.setMap.call(this,a);this.kb()};function gl(a){this.c!==ll&&this.c!==jl||!this.na(a)||(this.s=!0);var b=!this.s;this.s&&a.type===qf?(nl(this,a),b=!1):a.type===pf?b=pl(this,a):a.type===jf&&(b=!1);return og.call(this,a)&&b}function fl(a){return this.gd(a)?(this.W=a.pixel,!0):this.s?(this.W=a.pixel,this.h||ql(this,a),!0):!1}\r\nfunction hl(a){this.s=!1;var b=this.W,c=a.pixel,d=b[0]-c[0],b=b[1]-c[1],c=!0;d*d+b*b<=this.kd&&(pl(this,a),this.h?this.c===rl?sl(this):tl(this,a)?this.Ab(a)&&sl(this):nl(this,a):(ql(this,a),this.c===kl&&sl(this)),c=!1);return c}\r\nfunction pl(a,b){if(a.h){var c=b.coordinate,d=a.g.S(),e;a.c===kl?e=a.a:a.c===jl?(e=a.a[0],e=e[e.length-1],tl(a,b)&&(c=a.h.slice())):(e=a.a,e=e[e.length-1]);e[0]=c[0];e[1]=c[1];a.u(a.a,d);a.j&&a.j.S().ea(c);d instanceof qc&&a.c!==jl?(a.i||(a.i=new kk(new wk(null))),0>=d.ja.length?d=null:(c=new ic(null),$b(c,d.c,d.o.slice(0,d.ja[0])),c.w(),d=c),c=a.i.S(),$b(c,d.c,d.o),c.w()):a.D&&(c=a.i.S(),c.ea(a.D));ul(a)}else d=b.coordinate.slice(),a.j?a.j.S().ea(d):(a.j=new kk(new jc(d)),ul(a));return!0}\r\nfunction tl(a,b){var c=!1;if(a.g){var d=!1,e=[a.h];a.c===ll?d=a.a.length>a.wa:a.c===jl&&(d=a.a[0].length>a.wa,e=[a.a[0][0],a.a[0][a.a[0].length-2]]);if(d)for(var d=b.map,f=0,g=e.length;f<g;f++){var h=e[f],k=ug(d,h),l=b.pixel,c=l[0]-k[0],k=l[1]-k[1],l=a.s&&a.na(b)?1:a.jd;if(c=Math.sqrt(c*c+k*k)<=l){a.h=h;break}}}return c}\r\nfunction ql(a,b){var c=b.coordinate;a.h=c;a.c===kl?a.a=c.slice():a.c===jl?(a.a=[[c.slice(),c.slice()]],a.D=a.a[0]):(a.a=[c.slice(),c.slice()],a.c===rl&&(a.D=a.a));a.D&&(a.i=new kk(new wk(a.D)));c=a.u(a.a);a.g=new kk;a.Fa&&mk(a.g,a.Fa);lk(a.g,c);ul(a);U(a,new dl(\"drawstart\",a.g))}\r\nfunction nl(a,b){var c=b.coordinate,d=a.g.S(),e,f;if(a.c===ll)a.h=c.slice(),f=a.a,f.push(c.slice()),e=f.length>a.va,a.u(f,d);else if(a.c===jl){f=a.a[0];f.push(c.slice());if(e=f.length>a.va)a.h=f[0];a.u(a.a,d)}ul(a);e&&sl(a)}\r\nfunction sl(a){var b=vl(a),c=a.a,d=b.S();a.c===ll?(c.pop(),a.u(c,d)):a.c===jl&&(c[0].pop(),c[0].push(c[0][0]),a.u(c,d));\"MultiPoint\"===a.P?lk(b,new yk([c])):\"MultiLineString\"===a.P?lk(b,new xk([c])):\"MultiPolygon\"===a.P&&lk(b,new zk([c]));U(a,new dl(\"drawend\",b));a.ma&&a.ma.push(b);a.Ga&&a.Ga.Fb(b)}function vl(a){a.h=null;var b=a.g;b&&(a.g=null,a.j=null,a.i=null,a.ba.da().clear(!0));return b}el.prototype.B=zb;\r\nfunction ul(a){var b=[];a.g&&b.push(a.g);a.i&&b.push(a.i);a.j&&b.push(a.j);a=a.ba.da();a.clear(!0);a.Gb(b)}el.prototype.kb=function(){var a=this.aa,b=this.get(\"active\");a&&b||vl(this);this.ba.setMap(b?a:null)};function il(a){var b;\"Point\"===a||\"MultiPoint\"===a?b=kl:\"LineString\"===a||\"MultiLineString\"===a?b=ll:\"Polygon\"===a||\"MultiPolygon\"===a?b=jl:\"Circle\"===a&&(b=rl);return b}var kl=\"Point\",ll=\"LineString\",jl=\"Polygon\",rl=\"Circle\";function wl(a,b,c,d,e,f,g,h,k,l,m){Sf.call(this,e,0);this.u=void 0!==m?m:!1;this.v=g;this.s=h;this.f=null;this.c={};this.g=b;this.l=d;this.i=f?f:e;this.a=[];this.Va=null;this.h=0;f=Qc(d,this.i);h=this.l.G();e=this.g.G();f=h?vb(f,h):f;if(0===ob(f))this.state=4;else if((h=a.G())&&(e?e=vb(e,h):e=h),h=d.O(this.i[0]),m=tb(f),d=Ub(c,a)(m,void 0,m.length),h=c.getPointResolution(h,m),m=Lb(c),void 0!==m&&(h*=m),m=Lb(a),void 0!==m&&(h/=m),d=a.getPointResolution(h,d)/h,isFinite(d)&&0<d&&(h/=d),d=h,!isFinite(d)||\r\n0>=d)this.state=4;else if(this.j=new Ji(a,c,f,e,d*(void 0!==l?l:.5)),0===this.j.f.length)this.state=4;else if(this.h=Xc(b,d),c=Li(this.j),e&&(a.b?(c[1]=ia(c[1],e[1],e[3]),c[3]=ia(c[3],e[1],e[3])):c=vb(c,e)),ob(c)){a=Rc(b,c,this.h);for(b=a.H;b<=a.I;b++)for(c=a.J;c<=a.L;c++)(l=k(this.h,b,c,g))&&this.a.push(l);0===this.a.length&&(this.state=4)}else this.state=4}B(wl,Sf);wl.prototype.R=function(){1==this.state&&(this.Va.forEach(M),this.Va=null);Sf.prototype.R.call(this)};\r\nwl.prototype.Z=function(a){if(void 0!==a){var b=J(a);if(b in this.c)return this.c[b];a=sa(this.c)?this.f:this.f.cloneNode(!1);return this.c[b]=a}return this.f};\r\nwl.prototype.Tc=function(){var a=[];this.a.forEach(function(b){b&&2==b.T()&&a.push({extent:Qc(this.g,b.V),image:b.Z()})},this);this.a.length=0;if(0===a.length)this.state=3;else{var b=this.i[0],c=Wc(this.l,b),d=\"number\"===typeof c?c:c[0],c=\"number\"===typeof c?c:c[1],b=this.l.O(b),e=this.g.O(this.h),f=Qc(this.l,this.i);this.f=Ii(d,c,this.v,e,this.g.G(),b,f,this.j,a,this.s,this.u);this.state=2}Tf(this)};\r\nwl.prototype.load=function(){if(0==this.state){this.state=1;Tf(this);var a=0;this.Va=[];this.a.forEach(function(b){var c=b.T();if(0==c||1==c){a++;var d;d=R(b,\"change\",function(){var c=b.T();if(2==c||3==c||4==c)M(d),a--,0===a&&(this.Va.forEach(M),this.Va=null,this.Tc())},this);this.Va.push(d)}},this);this.a.forEach(function(a){0==a.T()&&a.load()});0===a&&K.setTimeout(this.Tc.bind(this),0)}};function xl(a,b){var c=/\\{z\\}/g,d=/\\{x\\}/g,e=/\\{y\\}/g,f=/\\{-y\\}/g;return function(g){if(g)return a.replace(c,g[0].toString()).replace(d,g[1].toString()).replace(e,function(){return(-g[2]-1).toString()}).replace(f,function(){var a=b.a?b.a[g[0]]:null;L(a,55);return(a.L-a.J+1+g[2]).toString()})}}function yl(a,b){for(var c=a.length,d=Array(c),e=0;e<c;++e)d[e]=xl(a[e],b);return zl(d)}function zl(a){return 1===a.length?a[0]:function(b,c,d){if(b)return a[la((b[1]<<b[0])+b[2],a.length)](b,c,d)}}\r\nfunction Al(){};function Bl(a){Xj.call(this);this.g=void 0!==a?a:2048}B(Bl,Xj);function Cl(a){return a.f>a.g}Bl.prototype.Oa=function(a){for(var b,c;Cl(this);){b=this.b.Na;c=b.V[0].toString();var d;if(d=c in a)b=b.V,d=Hc(a[c],b[1],b[2]);if(d)break;else Da(this.pop())}};function Dl(a){vf.call(this,{attributions:a.attributions,extent:a.extent,logo:a.logo,projection:a.projection,state:a.state,wrapX:a.wrapX});this.u=void 0!==a.opaque?a.opaque:!1;this.aa=void 0!==a.tilePixelRatio?a.tilePixelRatio:1;this.tileGrid=void 0!==a.tileGrid?a.tileGrid:null;this.a=new Bl(a.cacheSize);this.g=[0,0];this.Ia=\"\"}B(Dl,vf);n=Dl.prototype;n.Mc=function(){return Cl(this.a)};n.Oa=function(a,b){var c=this.fb(a);c&&c.Oa(b)};\r\nfunction Sh(a,b,c,d,e){b=a.fb(b);if(!b)return!1;for(var f=!0,g,h,k=d.H;k<=d.I;++k)for(var l=d.J;l<=d.L;++l)g=a.ob(c,k,l),h=!1,Uj(b,g)&&(g=b.get(g),(h=2===g.T())&&(h=!1!==e(g))),h||(f=!1);return f}n.nb=function(){return 0};n.getKey=function(){return this.Ia};n.ob=function(a,b,c){return a+\"/\"+b+\"/\"+c};n.Qb=function(){return this.u};n.sa=function(a){return this.tileGrid?this.tileGrid:Zc(a)};n.fb=function(a){var b=this.ia();return b&&!Tb(b,a)?null:this.a};n.pb=function(){return this.aa};\r\nfunction Ni(a,b,c,d){d=a.sa(d);c=a.pb(c);b=Lc(Wc(d,b),a.g);return 1==c?b:Kc(b,c,a.g)}function El(a,b,c){var d=void 0!==c?c:a.ia();c=a.sa(d);if(a.i&&d.c){var e=b;b=e[0];a=Vc(c,e);var d=$c(d),f=a[0],g=a[1];d[0]<=f&&f<=d[2]&&d[1]<=g&&g<=d[3]?b=e:(e=qb(d),a[0]+=e*Math.ceil((d[0]-a[0])/e),b=Yc(c,a,b))}d=b[0];a=b[1];e=b[2];c=c.minZoom>d||d>c.maxZoom?!1:(c=(f=c.G())?Rc(c,f,d):c.a?c.a[d]:null)?Hc(c,a,e):!0;return c?b:null}n.Ja=function(){this.a.clear();this.w()};n.Vc=I;\r\nfunction Fl(a,b){T.call(this,a);this.tile=b}B(Fl,T);function Gl(a){Dl.call(this,{attributions:a.attributions,cacheSize:a.cacheSize,extent:a.extent,logo:a.logo,opaque:a.opaque,projection:a.projection,state:a.state,tileGrid:a.tileGrid,tilePixelRatio:a.tilePixelRatio,wrapX:a.wrapX});this.tileLoadFunction=a.tileLoadFunction;this.tileUrlFunction=this.f?this.f.bind(this):Al;this.urls=null;if(a.urls){var b=a.urls;this.urls=b;var c=b.join(\"\\n\");Hl(this,this.f?this.f.bind(this):yl(b,this.tileGrid),c)}else a.url&&this.s(a.url);a.tileUrlFunction&&Hl(this,a.tileUrlFunction)}\r\nB(Gl,Dl);Gl.prototype.v=function(a){a=a.target;switch(a.T()){case 1:U(this,new Fl(\"tileloadstart\",a));break;case 2:U(this,new Fl(\"tileloadend\",a));break;case 3:U(this,new Fl(\"tileloaderror\",a))}};function Hl(a,b,c){a.tileUrlFunction=b;\"undefined\"!==typeof c?a.Ia!==c&&(a.Ia=c,a.w()):a.w()}\r\nGl.prototype.s=function(a){var b=[],c=/\\{(\\d)-(\\d)\\}/.exec(a)||/\\{([a-z])-([a-z])\\}/.exec(a);if(c){var d=c[2].charCodeAt(0),e;for(e=c[1].charCodeAt(0);e<=d;++e)b.push(a.replace(c[0],String.fromCharCode(e)))}else b.push(a);b=this.urls=b;Hl(this,this.f?this.f.bind(this):yl(b,this.tileGrid),a)};Gl.prototype.Vc=function(a,b,c){a=this.ob(a,b,c);Uj(this.a,a)&&this.a.get(a)};function Il(a){Gl.call(this,{attributions:a.attributions,cacheSize:a.cacheSize,extent:a.extent,logo:a.logo,opaque:a.opaque,projection:a.projection,state:a.state,tileGrid:a.tileGrid,tileLoadFunction:a.tileLoadFunction?a.tileLoadFunction:Jl,tilePixelRatio:a.tilePixelRatio,tileUrlFunction:a.tileUrlFunction,url:a.url,urls:a.urls,wrapX:a.wrapX});this.crossOrigin=void 0!==a.crossOrigin?a.crossOrigin:null;this.tileClass=void 0!==a.tileClass?a.tileClass:Ok;this.c={};this.j={};this.W=a.reprojectionErrorThreshold}\r\nB(Il,Gl);n=Il.prototype;n.Mc=function(){if(Cl(this.a))return!0;for(var a in this.c)if(Cl(this.c[a]))return!0;return!1};n.Oa=function(a,b){var c=this.fb(a);this.a.Oa(this.a==c?b:{});for(var d in this.c){var e=this.c[d];e.Oa(e==c?b:{})}};n.nb=function(a){return this.ia()&&a&&Tb(this.ia(),a),0};n.Qb=function(a){return this.ia()&&a&&!Tb(this.ia(),a)?!1:Gl.prototype.Qb.call(this,a)};\r\nn.sa=function(a){var b=this.ia();return!this.tileGrid||b&&!Tb(b,a)?(b=J(a).toString(),b in this.j||(this.j[b]=Zc(a)),this.j[b]):this.tileGrid};n.fb=function(a){var b=this.ia();if(!b||Tb(b,a))return this.a;a=J(a).toString();a in this.c||(this.c[a]=new Bl);return this.c[a]};function Kl(a,b,c,d,e,f,g){b=[b,c,d];e=(c=El(a,b,f))?a.tileUrlFunction(c,e,f):void 0;e=new a.tileClass(b,void 0!==e?0:4,void 0!==e?e:\"\",a.crossOrigin,a.tileLoadFunction);e.key=g;R(e,\"change\",a.v,a);return e}\r\nfunction $h(a,b,c,d,e,f){if(a.ia()&&f&&!Tb(a.ia(),f)){var g=a.fb(f);d=[b,c,d];var h;b=a.ob.apply(a,d);Uj(g,b)&&(h=g.get(b));c=a.getKey();if(h&&h.key==c)return h;var k=a.ia(),l=a.sa(k),m=a.sa(f),p=El(a,d,f);a=new wl(k,l,f,m,d,p,a.pb(e),0,function(a,b,c,d){return Ll(this,a,b,c,d,k)}.bind(a),a.W,!1);a.key=c;h?(a.b=h,Zj(g,b,a)):g.set(b,a);return a}return Ll(a,b,c,d,e,f)}\r\nfunction Ll(a,b,c,d,e,f){var g,h=a.ob(b,c,d),k=a.getKey();if(Uj(a.a,h)){if(g=a.a.get(h),g.key!=k){var l=g;g.b&&g.b.key==k?(g=g.b,2==l.T()&&(g.b=l)):(g=Kl(a,b,c,d,e,f,k),2==l.T()?g.b=l:l.b&&2==l.b.T()&&(g.b=l.b,l.b=null));g.b&&(g.b.b=null);Zj(a.a,h,g)}}else g=Kl(a,b,c,d,e,f,k),a.a.set(h,g);return g}function Jl(a,b){a.Z().src=b};function Ml(a){a=a||{};var b=void 0!==a.projection?a.projection:\"EPSG:3857\",c;if(void 0!==a.tileGrid)c=a.tileGrid;else{c={extent:$c(b),maxZoom:a.maxZoom,minZoom:a.minZoom,tileSize:a.tileSize};var d={};pa(d,void 0!==c?c:{});void 0===d.extent&&(d.extent=Hb(\"EPSG:3857\").G());d.resolutions=ad(d.extent,d.maxZoom,d.tileSize);delete d.maxZoom;c=new Mc(d)}Il.call(this,{attributions:a.attributions,cacheSize:a.cacheSize,crossOrigin:a.crossOrigin,logo:a.logo,opaque:a.opaque,projection:b,reprojectionErrorThreshold:a.reprojectionErrorThreshold,\r\ntileGrid:c,tileLoadFunction:a.tileLoadFunction,tilePixelRatio:a.tilePixelRatio,tileUrlFunction:a.tileUrlFunction,url:a.url,urls:a.urls,wrapX:void 0!==a.wrapX?a.wrapX:!0})}B(Ml,Il);function Nl(a,b){var c=[];Object.keys(b).forEach(function(a){null!==b[a]&&void 0!==b[a]&&c.push(a+\"=\"+encodeURIComponent(b[a]))});var d=c.join(\"&\");a=a.replace(/[?&]$/,\"\");a=-1===a.indexOf(\"?\")?a+\"?\":a+\"&\";return a+d};function Ol(a){a=a||{};var b;void 0!==a.attributions?b=a.attributions:b=[Pl];Ml.call(this,{attributions:b,cacheSize:a.cacheSize,crossOrigin:void 0!==a.crossOrigin?a.crossOrigin:\"anonymous\",opaque:void 0!==a.opaque?a.opaque:!0,maxZoom:void 0!==a.maxZoom?a.maxZoom:19,reprojectionErrorThreshold:a.reprojectionErrorThreshold,tileLoadFunction:a.tileLoadFunction,url:void 0!==a.url?a.url:\"https://{a-c}.tile.openstreetmap.org/{z}/{x}/{y}.png\",wrapX:a.wrapX})}B(Ol,Ml);var Pl=new bd({html:'© <a href=\"http://www.openstreetmap.org/copyright\">OpenStreetMap</a> contributors.'});function Ql(a){a=a||{};Il.call(this,{attributions:a.attributions,cacheSize:a.cacheSize,crossOrigin:a.crossOrigin,logo:a.logo,projection:a.projection,reprojectionErrorThreshold:a.reprojectionErrorThreshold,tileGrid:a.tileGrid,tileLoadFunction:a.tileLoadFunction,url:a.url,urls:a.urls,wrapX:void 0!==a.wrapX?a.wrapX:!0});this.B=a.params||{};this.ba=db()}B(Ql,Il);Ql.prototype.pb=function(a){return a};\r\nQl.prototype.f=function(a,b,c){var d=this.tileGrid;d||(d=this.sa(c));if(!(d.b.length<=a[0])){var e=Qc(d,a,this.ba),f=Lc(Wc(d,a[0]),this.g);1!=b&&(f=Kc(f,b,this.g));d={F:\"image\",FORMAT:\"PNG32\",TRANSPARENT:!0};pa(d,this.B);var g=this.urls;g?(c=c.ya.split(\":\").pop(),d.SIZE=f[0]+\",\"+f[1],d.BBOX=e.join(\",\"),d.BBOXSR=c,d.IMAGESR=c,d.DPI=Math.round(d.DPI?d.DPI*b:90*b),a=1==g.length?g[0]:g[la((a[1]<<a[0])+a[2],g.length)],b=a.replace(/MapServer\\/?$/,\"MapServer/export\").replace(/ImageServer\\/?$/,\"ImageServer/exportImage\"),\r\nb==a&&L(!1,50),d=Nl(b,d)):d=void 0;return d}};function Rl(a){this.j=this.l=this.f=null;this.i=void 0!==a.fill?a.fill:null;this.M=[0,0];this.b=a.points;this.c=void 0!==a.radius?a.radius:a.radius1;this.g=void 0!==a.radius2?a.radius2:this.c;this.h=void 0!==a.angle?a.angle:0;this.a=void 0!==a.stroke?a.stroke:null;this.D=this.Y=this.u=null;var b=a.atlasManager,c=\"\",d=\"\",e=0,f=null,g,h=0;this.a&&(g=nd(this.a.a),h=this.a.c,void 0===h&&(h=1),f=this.a.b,pe||(f=null),d=this.a.g,void 0===d&&(d=\"round\"),c=this.a.f,void 0===c&&(c=\"round\"),e=this.a.h,void 0===\r\ne&&(e=10));var k=2*(this.c+h)+1,c={strokeStyle:g,jb:h,size:k,lineCap:c,lineDash:f,lineJoin:d,miterLimit:e};if(void 0===b){var l=Md(k,k);this.l=l.canvas;b=k=this.l.width;this.Qc(c,l,0,0);this.i?this.j=this.l:(l=Md(c.size,c.size),this.j=l.canvas,this.Pc(c,l,0,0))}else k=Math.round(k),(d=!this.i)&&(l=this.Pc.bind(this,c)),e=this.a?qh(this.a):\"-\",f=this.i?rh(this.i):\"-\",this.f&&e==this.f[1]&&f==this.f[2]&&this.c==this.f[3]&&this.g==this.f[4]&&this.h==this.f[5]&&this.b==this.f[6]||(this.f=[\"r\"+e+f+(void 0!==\r\nthis.c?this.c.toString():\"-\")+(void 0!==this.g?this.g.toString():\"-\")+(void 0!==this.h?this.h.toString():\"-\")+(void 0!==this.b?this.b.toString():\"-\"),e,f,this.c,this.g,this.h,this.b]),l=b.add(this.f[0],k,k,this.Qc.bind(this,c),l),this.l=l.image,this.M=[l.offsetX,l.offsetY],b=l.image.width,d?this.j=l.Nd:this.j=this.l;this.u=[k/2,k/2];this.Y=[k,k];this.D=[b,b];oh.call(this,{opacity:1,rotateWithView:void 0!==a.rotateWithView?a.rotateWithView:!1,rotation:void 0!==a.rotation?a.rotation:0,scale:1,snapToPixel:void 0!==\r\na.snapToPixel?a.snapToPixel:!0})}B(Rl,oh);n=Rl.prototype;n.eb=function(){return this.u};n.ub=function(){return this.j};n.Z=function(){return this.l};n.Ob=function(){return this.D};n.ib=function(){return 2};n.pa=function(){return this.M};n.Ka=function(){return this.Y};n.Vb=I;n.load=I;n.bc=I;\r\nn.Qc=function(a,b,c,d){var e;b.setTransform(1,0,0,1,0,0);b.translate(c,d);b.beginPath();this.g!==this.c&&(this.b*=2);for(c=0;c<=this.b;c++)d=2*c*Math.PI/this.b-Math.PI/2+this.h,e=0===c%2?this.c:this.g,b.lineTo(a.size/2+e*Math.cos(d),a.size/2+e*Math.sin(d));this.i&&(b.fillStyle=qd(this.i.b),b.fill());this.a&&(b.strokeStyle=a.strokeStyle,b.lineWidth=a.jb,a.lineDash&&b.setLineDash(a.lineDash),b.lineCap=a.lineCap,b.lineJoin=a.lineJoin,b.miterLimit=a.miterLimit,b.stroke());b.closePath()};\r\nn.Pc=function(a,b,c,d){b.setTransform(1,0,0,1,0,0);b.translate(c,d);b.beginPath();this.g!==this.c&&(this.b*=2);var e;for(c=0;c<=this.b;c++)e=2*c*Math.PI/this.b-Math.PI/2+this.h,d=0===c%2?this.c:this.g,b.lineTo(a.size/2+d*Math.cos(e),a.size/2+d*Math.sin(e));b.fillStyle=kh;b.fill();this.a&&(b.strokeStyle=a.strokeStyle,b.lineWidth=a.jb,a.lineDash&&b.setLineDash(a.lineDash),b.stroke());b.closePath()};y(\"ol.format.GeoJSON\",Gk);Gk.prototype.readFeatures=Gk.prototype.a;Gk.prototype.readFeature=Gk.prototype.g;y(\"ol.format.EsriJSON\",Ak);Ak.prototype.readFeatures=Ak.prototype.a;Ak.prototype.readFeature=Ak.prototype.g;y(\"ol.style.Style\",yh);y(\"ol.style.Circle\",ph);y(\"ol.style.RegularShape\",Rl);y(\"ol.style.Fill\",sh);y(\"ol.style.Stroke\",xh);y(\"ol.style.Icon\",Lk);\r\ny(\"ol.style.Text\",function(a){a=a||{};this.b=a.font;this.h=a.rotation;this.g=a.rotateWithView;this.l=a.scale;this.j=a.text;this.C=a.textAlign;this.K=a.textBaseline;this.f=void 0!==a.fill?a.fill:new sh({color:\"#333\"});this.i=void 0!==a.stroke?a.stroke:null;this.a=void 0!==a.offsetX?a.offsetX:0;this.c=void 0!==a.offsetY?a.offsetY:0});y(\"ol.View\",uc);uc.prototype.on=uc.prototype.Y;uc.prototype.getZoom=uc.prototype.rd;uc.prototype.setZoom=uc.prototype.ye;uc.prototype.getCenter=uc.prototype.qa;\r\nuc.prototype.setCenter=uc.prototype.xa;uc.prototype.calculateExtent=uc.prototype.lc;uc.prototype.getProjection=uc.prototype.ia;uc.prototype.fit=uc.prototype.md;y(\"ol.control.defaults\",ee);y(\"ol.layer.Tile\",W);W.prototype.getVisible=W.prototype.gb;W.prototype.setVisible=W.prototype.Cc;W.prototype.getZIndex=W.prototype.Yb;W.prototype.setZIndex=W.prototype.Dc;W.prototype.getOpacity=W.prototype.Xb;W.prototype.setOpacity=W.prototype.Bc;W.prototype.getSource=W.prototype.da;W.prototype.setSource=W.prototype.$b;\r\nW.prototype.on=W.prototype.Y;y(\"ol.layer.Vector\",Y);Y.prototype.getVisible=Y.prototype.gb;Y.prototype.setVisible=Y.prototype.Cc;Y.prototype.getSource=Y.prototype.da;Y.prototype.setStyle=Y.prototype.v;Y.prototype.getZIndex=Y.prototype.Yb;Y.prototype.setZIndex=Y.prototype.Dc;Y.prototype.getOpacity=Y.prototype.Xb;Y.prototype.setOpacity=Y.prototype.Bc;Y.prototype.getSource=Y.prototype.da;Y.prototype.setSource=Y.prototype.$b;Y.prototype.on=Y.prototype.Y;y(\"ol.source.OSM\",Ol);Ol.prototype.refresh=Ol.prototype.Ja;\r\ny(\"ol.source.XYZ\",Ml);Ml.prototype.refresh=Ml.prototype.Ja;Ml.prototype.setUrl=Ml.prototype.s;Ml.prototype.refresh=Ml.prototype.Ja;y(\"ol.Map\",Z);Z.prototype.on=Z.prototype.Y;Z.prototype.getTarget=Z.prototype.Wb;Z.prototype.getTargetElement=Z.prototype.Ra;Z.prototype.getView=Z.prototype.U;Z.prototype.addOverlay=Z.prototype.fd;Z.prototype.addLayer=Z.prototype.ed;Z.prototype.removeLayer=Z.prototype.te;Z.prototype.getEventPixel=Z.prototype.uc;Z.prototype.hasFeatureAtPixel=Z.prototype.Md;\r\nZ.prototype.getSize=Z.prototype.Ta;Z.prototype.updateSize=Z.prototype.yb;Z.prototype.forEachFeatureAtPixel=Z.prototype.od;Z.prototype.addInteraction=Z.prototype.dd;Z.prototype.removeInteraction=Z.prototype.se;Z.prototype.beforeRender=Z.prototype.oa;Z.prototype.addControl=Z.prototype.cd;Z.prototype.once=Z.prototype.hd;Z.prototype.renderSync=Z.prototype.we;y(\"ol.source.Vector\",Xk);Xk.prototype.getFeatures=Xk.prototype.pd;Xk.prototype.getExtent=Xk.prototype.G;Xk.prototype.refresh=Xk.prototype.Ja;\r\nXk.prototype.addFeatures=Xk.prototype.Gb;Xk.prototype.addFeature=Xk.prototype.Fb;Xk.prototype.clear=Xk.prototype.clear;Xk.prototype.forEachFeature=Xk.prototype.nd;Xk.prototype.refresh=Xk.prototype.Ja;y(\"ol.source.TileArcGISRest\",Ql);Ql.prototype.refresh=Ql.prototype.Ja;y(\"ol.Overlay\",gk);gk.prototype.setPosition=gk.prototype.Ac;y(\"ol.Feature\",kk);kk.prototype.getProperties=kk.prototype.Ea;kk.prototype.setProperties=kk.prototype.l;kk.prototype.getGeometry=kk.prototype.S;y(\"ol.geom.Point\",jc);\r\njc.prototype.transform=jc.prototype.transform;jc.prototype.getCoordinates=jc.prototype.za;jc.prototype.getExtent=jc.prototype.G;y(\"ol.geom.Polygon\",qc);qc.prototype.getCoordinates=qc.prototype.za;qc.prototype.getExtent=qc.prototype.G;qc.prototype.transform=qc.prototype.transform;y(\"ol.geom.LineString\",wk);wk.prototype.getCoordinates=wk.prototype.za;wk.prototype.getExtent=wk.prototype.G;wk.prototype.transform=wk.prototype.transform;y(\"ol.proj.Projection\",Eb);Eb.prototype.getCode=Eb.prototype.l;\r\ny(\"ol.interaction.Draw\",el);el.prototype.on=el.prototype.Y;y(\"ol.animation.pan\",Dc);y(\"ol.control.FullScreen\",Xd);\r\n return OPENLAYERS.ol;\r\n}));\r\n\r\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/custom-ol/ol/ol-build.js\n ** module id = 6\n ** module chunks = 1 2 5\n **/","/**\r\n * Created by gavorhes on 11/3/2015.\r\n */\r\n\r\nimport MapMoveCls from './mapMoveCls';\r\n\r\n/**\r\n * The single map move object catch is that it is common to multimap pages\r\n * @type {MapMoveCls}\r\n */\r\n\r\nexport const mapMove = new MapMoveCls();\r\nexport default mapMove;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/olHelpers/mapMove.ts\n **/","import LayerBaseVector from \"../layers/LayerBaseVector\";\r\nimport MapInteractionBase from './mapInteractionBase';\r\nimport * as checkDefined from '../util/checkDefined';\r\nimport provide from '../util/provide';\r\nimport makeGuid from '../util/makeGuid';\r\nimport {ol} from 'custom-ol'\r\nimport Timer = NodeJS.Timer;\r\nconst $ = require('jquery');\r\nconst nm = provide('olHelpers');\r\n\r\n\r\nexport interface extentObject{\r\n minX: number;\r\n minY: number;\r\n maxX: number;\r\n maxY: number;\r\n}\r\n\r\nexport interface mapMoveCallbackFunction{\r\n /**\r\n *\r\n * @param extent extent as predefined object minX, minX, maxX, maxY\r\n * @param zoomLevel current zoom level\r\n * @param evtType the event type 'change:center', 'change:resolution'\r\n */\r\n (extent: extentObject, zoomLevel: number, evtType?: string): any\r\n}\r\n\r\n\r\n/**\r\n * assists with map move interactions, trigger callback functions\r\n * @augments MapInteractionBase\r\n */\r\nexport class MapMoveCls extends MapInteractionBase {\r\n _mapExtent: extentObject;\r\n _zoomLevel: number;\r\n _lookupLayer: Object;\r\n _arrLayer: Array<LayerBaseVector>;\r\n _arrLyrTimeout: Array<Timer>;\r\n _mapMoveCallbackTimeout: Array<Timer>;\r\n _mapMoveCallbackDelays: Array<number>;\r\n _mapMoveCallbacksLookup: Object;\r\n _mapMoveCallbackContext: Array<Object>;\r\n _mapMoveCallbacks: Array<mapMoveCallbackFunction>;\r\n _arrLyrRequest: Array<any>;\r\n\r\n /**\r\n * constructor called implicitly\r\n */\r\n constructor() {\r\n super('map move');\r\n this._arrLyrRequest = [];\r\n this._arrLyrTimeout = [];\r\n this._arrLayer = [];\r\n this._lookupLayer = {};\r\n\r\n this._mapMoveCallbacks = [];\r\n this._mapMoveCallbacksLookup = {};\r\n this._mapMoveCallbackDelays = [];\r\n this._mapMoveCallbackContext = [];\r\n this._mapMoveCallbackTimeout = [];\r\n\r\n this._mapExtent = undefined;\r\n this._zoomLevel = undefined;\r\n\r\n }\r\n\r\n /**\r\n * initialize the map move object\r\n * @param theMap - the ol map\r\n */\r\n init(theMap: ol.Map){\r\n super.init(theMap);\r\n\r\n this.map.getView().on(['change:center', 'change:resolution'], (e) =>{\r\n\r\n this._updateMapExtent();\r\n\r\n // trigger the layer updates\r\n for (let i = 0; i < this._arrLayer.length; i++) {\r\n this.triggerLyrLoad(this._arrLayer[i], i, e.type);\r\n }\r\n\r\n // trigger the map callbacks\r\n for (let i = 0; i < this._mapMoveCallbacks.length; i++) {\r\n this.triggerMoveCallback(i, e.type);\r\n }\r\n });\r\n }\r\n\r\n _updateMapExtent() {\r\n let theView = this.map.getView();\r\n this._zoomLevel = theView.getZoom();\r\n\r\n let extentArray = theView.calculateExtent(this.map.getSize());\r\n\r\n this._mapExtent = {\r\n minX: extentArray[0],\r\n minY: extentArray[1],\r\n maxX: extentArray[2],\r\n maxY: extentArray[3]\r\n };\r\n }\r\n\r\n /**\r\n * return the map extent\r\n */\r\n get mapExtent() {\r\n if (!this._mapExtent) {\r\n this._updateMapExtent();\r\n }\r\n\r\n return this._mapExtent;\r\n }\r\n\r\n /**\r\n * Trigger the layer load\r\n * @param lyr the layer being acted on\r\n * @param index index of the layer\r\n * @param eventType the event triggering the load, as 'change:center' or 'change:resolution'\r\n */\r\n triggerLyrLoad(lyr: LayerBaseVector, index?: number, eventType?: string) {\r\n\r\n if (checkDefined.undefinedOrNull(lyr) && checkDefined.undefinedOrNull(index)) {\r\n throw 'need to define lyr or index';\r\n } else if (checkDefined.definedAndNotNull(lyr) && checkDefined.undefinedOrNull(index)) {\r\n index = this._arrLayer.indexOf(lyr);\r\n } else if (checkDefined.undefinedOrNull(lyr) && checkDefined.definedAndNotNull(index)) {\r\n lyr = this._arrLayer[index];\r\n }\r\n\r\n // clear the timeout\r\n if (this._arrLyrTimeout[index] != null) {\r\n clearTimeout(this._arrLyrTimeout[index]);\r\n this._arrLyrTimeout[index] = null;\r\n }\r\n\r\n // abort if necessary and clear the request\r\n if (this._arrLyrRequest[index] != null && this._arrLyrRequest[index] != 4) {\r\n this._arrLyrRequest[index].abort();\r\n this._arrLyrRequest[index] = null;\r\n }\r\n\r\n // dummy callback used if before load returns false\r\n let callbackFunc = function () {};\r\n\r\n if (lyr.mapMoveBefore(this._zoomLevel, eventType)) {\r\n lyr.mapMoveMakeGetParams(this._mapExtent, this._zoomLevel);\r\n\r\n let _this = this;\r\n\r\n callbackFunc = function () {\r\n function innerFunction(theLayer, theIndex) {\r\n let _innerThis = this;\r\n this._arrLyrRequest[theIndex] = $.get(\r\n theLayer.url,\r\n theLayer.mapMoveParams,\r\n function (d) {\r\n /**\r\n * @type {LayerBaseVector}\r\n */\r\n theLayer.mapMoveCallback(d);\r\n theLayer.loadCallback();\r\n }, 'json').fail(\r\n function (jqXHR) {\r\n if (jqXHR.statusText != 'abort') {\r\n console.log('failed');\r\n console.log(theLayer.url);\r\n console.log(theLayer.mapMoveParams);\r\n }\r\n }).always(\r\n function () {\r\n _innerThis._arrLyrTimeout[theIndex] = null;\r\n _innerThis._arrLyrRequest[theIndex] = null;\r\n });\r\n }\r\n innerFunction.call(_this, lyr, index);\r\n };\r\n } else {\r\n lyr.clear();\r\n }\r\n this._arrLyrTimeout[index] = setTimeout(callbackFunc, lyr.onDemandDelay);\r\n }\r\n\r\n /**\r\n * trigger the map move call back at the given index\r\n * @param ind - the index of the layer\r\n * @param eventType=undefined the event triggering the load as 'change:center' or 'change:resolution'\r\n * @param functionId=undefined the function id used to reference the added callback function\r\n */\r\n triggerMoveCallback(ind: number, eventType?: string, functionId?: string) {\r\n\r\n if (typeof ind == 'undefined' && typeof functionId == 'undefined'){\r\n throw 'either the function index or the id must be defined';\r\n }\r\n\r\n if (typeof ind !== 'number'){\r\n ind = this._mapMoveCallbacks.indexOf(this._mapMoveCallbacksLookup[functionId]);\r\n }\r\n\r\n if (ind < 0){\r\n console.log('function not found');\r\n\r\n return;\r\n }\r\n\r\n // clear the timeout\r\n if (this._mapMoveCallbackTimeout[ind] != null) {\r\n clearTimeout(this._mapMoveCallbackTimeout[ind]);\r\n this._mapMoveCallbackTimeout[ind] = null;\r\n }\r\n\r\n let ctx = this._mapMoveCallbackContext[ind];\r\n let theFunc = this._mapMoveCallbacks[ind];\r\n\r\n let _this = this;\r\n\r\n let f = function () {\r\n if (ctx !== null) {\r\n theFunc.call(ctx, _this._mapExtent, _this._zoomLevel, eventType);\r\n } else {\r\n theFunc(_this._mapExtent, _this._zoomLevel, eventType);\r\n }\r\n };\r\n\r\n this._mapMoveCallbackTimeout[ind] = setTimeout(f, this._mapMoveCallbackDelays[ind]);\r\n }\r\n\r\n /**\r\n * Add a layer to the interaction\r\n * @param lyr - layer to add\r\n * @param triggerOnAdd - if the layer should be loaded on add\r\n */\r\n addVectorLayer(lyr: LayerBaseVector, triggerOnAdd: boolean = true) {\r\n if (this._arrLayer.indexOf(lyr) > -1) {\r\n console.log('already added ' + lyr.name + ' to map move');\r\n\r\n return;\r\n }\r\n this._checkInit();\r\n\r\n this._arrLyrRequest.push(null);\r\n this._arrLyrTimeout.push(null);\r\n this._arrLayer.push(lyr);\r\n this._lookupLayer[lyr.id] = lyr;\r\n\r\n triggerOnAdd = typeof triggerOnAdd == 'boolean' ? triggerOnAdd : true;\r\n\r\n if (triggerOnAdd) {\r\n if (this._mapExtent === undefined) {\r\n this._updateMapExtent();\r\n }\r\n this.triggerLyrLoad(lyr, this._arrLayer.length - 1);\r\n }\r\n }\r\n\r\n\r\n /**\r\n * add a callback to the map move event\r\n * @param func - callback function\r\n * @param context - the context to use for this function\r\n * @param delay=50 the delay before call load\r\n * @param triggerOnAdd if the layer should be loaded on add to mapMove\r\n * @param functionId optional id to reference the function later for outside triggering\r\n */\r\n addCallback(func: mapMoveCallbackFunction, context?: any, delay?: number, triggerOnAdd? : boolean, functionId?: string) {\r\n\r\n if (this._mapMoveCallbacks.indexOf(func) > -1) {\r\n console.log('this function already added to map move');\r\n return;\r\n }\r\n this._checkInit();\r\n if (!functionId){\r\n functionId = makeGuid();\r\n }\r\n\r\n this._mapMoveCallbacks.push(func);\r\n this._mapMoveCallbacksLookup[functionId] = functionId;\r\n this._mapMoveCallbackDelays.push(typeof delay == 'number' ? delay : 50);\r\n this._mapMoveCallbackContext.push(checkDefined.definedAndNotNull(context) ? context : null);\r\n this._mapMoveCallbackTimeout.push(null);\r\n\r\n triggerOnAdd = typeof triggerOnAdd == 'boolean' ? triggerOnAdd : true;\r\n\r\n if (triggerOnAdd) {\r\n if (this._mapExtent === undefined) {\r\n this._updateMapExtent();\r\n }\r\n this.triggerMoveCallback(this._mapMoveCallbacks.length - 1);\r\n }\r\n }\r\n}\r\n\r\nnm.MapMoveCls = MapMoveCls;\r\nexport default MapMoveCls;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/olHelpers/mapMoveCls.ts\n **/","/**\r\n * Created by gavorhes on 12/8/2015.\r\n */\r\nimport provide from '../util/provide';\r\nimport {ol} from 'custom-ol';\r\nconst nm = provide('olHelpers');\r\n\r\n\r\n\r\n/**\r\n * base interaction\r\n */\r\nexport class MapInteractionBase {\r\n _map: ol.Map;\r\n _initialized: boolean;\r\n _subtype: string;\r\n\r\n /**\r\n * map interaction base\r\n * @param subtype - the interaction subtype\r\n */\r\n constructor(subtype: string) {\r\n this._map = null;\r\n this._initialized = false;\r\n this._subtype = subtype;\r\n }\r\n\r\n /**\r\n * base initializer, returns true for already initialized\r\n * @param theMap - the ol Map\r\n * @returns true for already initialized\r\n */\r\n init(theMap: ol.Map){\r\n if (!this._initialized){\r\n this._map = theMap;\r\n this._initialized = true;\r\n }\r\n }\r\n\r\n /**\r\n * get reference to the ol map object\r\n * @returns {ol.Map} the map object\r\n */\r\n get map() {\r\n return this._map;\r\n }\r\n\r\n /**\r\n * get if is initialized\r\n * @returns {boolean} is initialized\r\n */\r\n get initialized() {\r\n return this._initialized;\r\n }\r\n\r\n /**\r\n * Check the initialization status and throw exception if not valid yet\r\n * @protected\r\n */\r\n _checkInit() {\r\n if (!this.initialized) {\r\n let msg = `${this._subtype} object not initialized`;\r\n alert(msg);\r\n console.log(msg);\r\n throw msg;\r\n }\r\n }\r\n\r\n /**\r\n * Check the initialization status and throw exception if not valid yet\r\n */\r\n checkInit(){\r\n this._checkInit();\r\n }\r\n}\r\n\r\nnm.MapInteractionBase = MapInteractionBase;\r\nexport default MapInteractionBase;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/olHelpers/mapInteractionBase.ts\n **/","import provide from './provide';\r\nlet nm = provide('util.checkDefined');\r\n\r\n/**\r\n * check if the input is undefined or null\r\n * @param input - input pointer\r\n * @returns true undefined or null\r\n */\r\nexport function undefinedOrNull (input): boolean{\r\n \"use strict\";\r\n\r\n return (typeof input === 'undefined' || input === null);\r\n}\r\n\r\nnm.undefinedOrNull = undefinedOrNull;\r\n\r\n\r\n/**\r\n * check if the input is defined and not null\r\n * @param input - input pointer\r\n * @returns true defined and not null\r\n */\r\nexport function definedAndNotNull (input: any): boolean{\r\n \"use strict\";\r\n\r\n return !(undefinedOrNull(input));\r\n}\r\n\r\nnm.definedAndNotNull = definedAndNotNull;\r\n\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/util/checkDefined.ts\n **/","/**\r\n * Created by gavorhes on 11/3/2015.\r\n */\r\n\r\nimport provide from './provide';\r\nlet nm = provide('util');\r\n\r\n\r\n/**\r\n * guids are used to uniquely identify groups and features\r\n * @returns {string} a new guid\r\n */\r\nfunction makeGuid() {\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'\r\n .replace(/[xy]/g, function (c) {\r\n let r = Math.random() * 16 | 0, v = c == 'x' ? r : r & 0x3 | 0x8;\r\n\r\n return v.toString(16);\r\n });\r\n\r\n}\r\nnm.makeGuid = makeGuid;\r\nexport default makeGuid;\r\n\r\n\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/util/makeGuid.ts\n **/","/**\r\n * Created by gavorhes on 11/3/2015.\r\n */\r\n\r\nimport MapPopupCls from './mapPopupCls';\r\n\r\n/**\r\n * The single popup object catch is that it is common to multimap pages\r\n * @type {MapPopupCls}\r\n */\r\n\r\nexport const mapPopup = new MapPopupCls() as MapPopupCls;\r\nexport default mapPopup;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/olHelpers/mapPopup.ts\n **/","/**\r\n * Created by gavorhes on 11/3/2015.\r\n */\r\n\r\nimport MapInteractionBase from './mapInteractionBase';\r\nimport propertiesZoomStyle from '../olHelpers/propertiesZoomStyle';\r\nimport provide from '../util/provide';\r\nimport {ol} from 'custom-ol';\r\nimport {LayerBaseVector} from \"../layers/LayerBaseVector\";\r\nimport LayerEsriMapServer from \"../layers/LayerEsriMapServer\";\r\nimport MapEvent = ol.MapEvent;\r\nconst $ = require('jquery');\r\n\r\nconst nm = provide('olHelpers');\r\n\r\nexport interface popupChangedFunction{\r\n ($popContent: JQuery): any;\r\n}\r\n\r\n/**\r\n *\r\n */\r\nexport interface popupCallback{\r\n /**\r\n * Callback function for the popup\r\n * @param featureProperties\r\n * @param jqRef\r\n */\r\n (featureProperties: Object, jqRef?: JQuery): string | boolean;\r\n}\r\n\r\ninterface mapEvent{\r\n coordinate: ol.Coordinate;\r\n pixel: ol.Pixel;\r\n dragging: boolean|any;\r\n originalEvent: Event;\r\n}\r\n\r\n\r\nexport class FeatureLayerProperties {\r\n\r\n feature: ol.Feature;\r\n layer: LayerBaseVector|LayerEsriMapServer;\r\n layerIndex: number;\r\n selectionLayer: ol.layer.Vector;\r\n popupContent: string;\r\n esriLayerName: string;\r\n\r\n /**\r\n *\r\n * @param feature the feature\r\n * @param layer - the layer in the popup\r\n * @param layerIndex - index of the layer\r\n * @param selectionLayer - the ol selection layer\r\n * @param [esriLayerName=undefined] - esri layer name\r\n */\r\n constructor(feature: ol.Feature, layer: LayerBaseVector|LayerEsriMapServer, layerIndex: number, selectionLayer: ol.layer.Vector, esriLayerName?: string) {\r\n this.feature = feature;\r\n this.layer = layer;\r\n this.layerIndex = layerIndex;\r\n this.selectionLayer = selectionLayer;\r\n this.popupContent = '';\r\n this.esriLayerName = typeof esriLayerName == 'string' ? esriLayerName : undefined;\r\n }\r\n\r\n get layerName() {\r\n if (typeof this.esriLayerName == 'string') {\r\n return this.esriLayerName;\r\n } else {\r\n return this.layer.name;\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * map popup class\r\n * @augments MapInteractionBase\r\n */\r\nclass MapPopupCls extends MapInteractionBase {\r\n _popupOpen: boolean;\r\n _passThroughLayerFeatureArray: Array<FeatureLayerProperties>;\r\n _currentPopupIndex: number;\r\n _popupContentLength: number;\r\n _esriMapServiceLayers: Array<LayerEsriMapServer>;\r\n _$popupCloser: JQuery;\r\n _$popupContent: JQuery;\r\n _$popupContainer: JQuery;\r\n _popupOverlay: ol.Overlay;\r\n _arrPopupLayers: Array<LayerBaseVector>;\r\n _popupCoordinate: ol.Coordinate;\r\n _popupChangedFunctions: Array<popupChangedFunction>;\r\n _mapClickFunctions: Array<Function>;\r\n _selectionLayerLookup: Object;\r\n _arrPopupLayerIds: Array<string>;\r\n _arrPopupLayerNames: Array<string>;\r\n _arrPopupOlLayers: Array<ol.layer.Vector>;\r\n _arrPopupContentFunction: Array<popupCallback>;\r\n _selectionLayers: Array<ol.layer.Vector>;\r\n\r\n /**\r\n * Definition for openlayers style function\r\n * @callback olStyleFunction\r\n * ¶m feature the openlayers vector feature\r\n * $param\r\n */\r\n\r\n\r\n\r\n /**\r\n * map popup constructor\r\n */\r\n constructor() {\r\n super('map popup');\r\n this._arrPopupLayerIds = [];\r\n this._arrPopupLayerNames = [];\r\n this._arrPopupLayers = [];\r\n this._arrPopupOlLayers = [];\r\n this._arrPopupContentFunction = [];\r\n this._$popupContainer = undefined;\r\n this._$popupContent = undefined;\r\n this._$popupCloser = undefined;\r\n this._popupOverlay = undefined;\r\n this._selectionLayers = [];\r\n this._selectionLayerLookup = {};\r\n this._mapClickFunctions = [];\r\n\r\n //let a = function($jqueryContent){console.log($jqueryContent)};\r\n //this._popupChangedLookup = {'a': a};\r\n this._popupChangedFunctions = [];\r\n this._esriMapServiceLayers = [];\r\n\r\n this._popupOpen = false;\r\n this._popupCoordinate = null;\r\n\r\n this._passThroughLayerFeatureArray = [];\r\n\r\n this._currentPopupIndex = -1;\r\n this._popupContentLength = 0;\r\n\r\n }\r\n\r\n /**\r\n * map popup initialization\r\n * @param {ol.Map} theMap - the ol map\r\n */\r\n init(theMap: ol.Map) {\r\n super.init(theMap);\r\n\r\n let $map;\r\n let target = this.map.getTarget();\r\n\r\n if(typeof target == 'string'){\r\n $map = $('#' + target);\r\n }\r\n else {\r\n $map = $(target);\r\n }\r\n\r\n $map.append(\r\n '<div class=\"ol-popup\">' +\r\n '<span class=\"ol-popup-closer\">X</span>' +\r\n '<div class=\"popup-content\"></div>' +\r\n '</div>'\r\n );\r\n\r\n this._$popupContainer = $map.find('.ol-popup');\r\n this._$popupContent = $map.find('.popup-content');\r\n this._$popupCloser = $map.find('.ol-popup-closer');\r\n\r\n\r\n this._popupOverlay = new ol.Overlay({element: this._$popupContainer[0], autoPan: true,\r\n autoPanAnimation: {\r\n duration: 250,\r\n source: theMap.getView().getCenter()\r\n }});\r\n\r\n this._map.addOverlay(this._popupOverlay);\r\n\r\n this._$popupCloser.click((evt) => {\r\n this.closePopup();\r\n });\r\n\r\n // display popup on click\r\n this._map.on('singleclick', (evt) => {\r\n\r\n this.closePopup();\r\n this._popupCoordinate = evt['coordinate'];\r\n\r\n // esri map service layers\r\n if (this._esriMapServiceLayers.length > 0) {\r\n let queryParams = {\r\n geometry: evt['coordinate'].join(','),\r\n geometryType: 'esriGeometryPoint',\r\n layers: 'all',\r\n sr: this._map.getView().getProjection().getCode().split(':')[1],\r\n mapExtent: this._map.getView().calculateExtent(this._map.getSize()).join(','),\r\n imageDisplay: this._map.getSize().join(',') + ',96',\r\n returnGeometry: true,\r\n tolerance: 15,\r\n f: 'pjson'\r\n };\r\n\r\n for (let l of this._esriMapServiceLayers) {\r\n l.getPopupInfo(queryParams);\r\n }\r\n }\r\n\r\n let layerFeatureObjectArray = this._featuresAtPixel(evt['pixel']);\r\n\r\n this._passThroughLayerFeatureArray = [];\r\n this._currentPopupIndex = -1;\r\n\r\n for (let i = 0; i < layerFeatureObjectArray.length; i++) {\r\n let featObj = layerFeatureObjectArray[i];\r\n\r\n let props = featObj.feature.getProperties();\r\n\r\n let popupContentResponse = this._arrPopupContentFunction[featObj.layerIndex](props, this._$popupContent);\r\n\r\n //skip if return was false\r\n if (popupContentResponse === false) {\r\n //continue;\r\n } else if (typeof popupContentResponse == 'string') {\r\n featObj.popupContent = popupContentResponse as string;\r\n this._passThroughLayerFeatureArray.push(featObj);\r\n } else {\r\n featObj.selectionLayer.getSource().addFeature(featObj.feature);\r\n }\r\n }\r\n\r\n this._popupContentLength = this._passThroughLayerFeatureArray.length;\r\n\r\n this._currentPopupIndex = -1;\r\n\r\n let popupHtml = '<div class=\"ol-popup-nav\">';\r\n popupHtml += '<span class=\"previous-popup ol-popup-nav-arrow\">◀</span>';\r\n popupHtml += '<span class=\"next-popup ol-popup-nav-arrow\">▶</span>';\r\n popupHtml += `<span class=\"current-popup-item-number\" style=\"font-weight: bold;\"></span>`;\r\n popupHtml += `<span> of </span>`;\r\n popupHtml += `<span class=\"popup-content-length\" style=\"font-weight: bold;\">${this._popupContentLength}</span>`;\r\n popupHtml += `<span> - </span>`;\r\n popupHtml += `<span class=\"current-popup-layer-name\"></span>`;\r\n popupHtml += '</div>';\r\n popupHtml += '<div class=\"ol-popup-inner\">';\r\n\r\n popupHtml += '</div>';\r\n\r\n this._$popupContent.html(popupHtml);\r\n\r\n this._$popupContent.find('.previous-popup').click(() => {\r\n if (this._popupContentLength == 1) {\r\n return;\r\n }\r\n\r\n if (this._currentPopupIndex == 0) {\r\n this._currentPopupIndex = this._popupContentLength - 1;\r\n } else {\r\n this._currentPopupIndex--;\r\n }\r\n this._triggerFeatSelect();\r\n });\r\n\r\n let nextPopup = this._$popupContent.find('.next-popup');\r\n\r\n nextPopup.click(() => {\r\n if (this._popupContentLength == 1 && this._currentPopupIndex > -1) {\r\n return;\r\n }\r\n\r\n if (this._currentPopupIndex == this._popupContentLength - 1) {\r\n this._currentPopupIndex = 0;\r\n } else {\r\n this._currentPopupIndex++;\r\n }\r\n this._triggerFeatSelect();\r\n });\r\n\r\n\r\n if (this._popupContentLength > 0) {\r\n nextPopup.trigger('click');\r\n this._popupOverlay.setPosition(this._popupCoordinate);\r\n this._$popupContent.scrollTop(0);\r\n this._popupOpen = true;\r\n }\r\n });\r\n\r\n //change mouse cursor when over marker\r\n this._map.on('pointermove', (evt) => {\r\n if (evt['dragging']) {\r\n return;\r\n }\r\n let pixel = this.map.getEventPixel(evt['originalEvent']);\r\n let hit = this.map.hasFeatureAtPixel(pixel, (lyrCandidate) => {\r\n for (let olLayer of this._arrPopupOlLayers) {\r\n if (lyrCandidate == olLayer) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n });\r\n let mapElement = this.map.getTargetElement() as HTMLElement;\r\n mapElement.style.cursor = hit ? 'pointer' : '';\r\n });\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * helper to select features\r\n * @private\r\n */\r\n _triggerFeatSelect() {\r\n let $currentPopupItemNumber = this._$popupContent.find('.current-popup-item-number');\r\n let $innerPopup = this._$popupContent.find('.ol-popup-inner');\r\n let $layerNameSpan = this._$popupContent.find('.current-popup-layer-name');\r\n this.clearSelection();\r\n let lyrFeatObj = this._passThroughLayerFeatureArray[this._currentPopupIndex];\r\n $currentPopupItemNumber.html((this._currentPopupIndex + 1).toFixed());\r\n $layerNameSpan.html(lyrFeatObj.layerName);\r\n $innerPopup.html(lyrFeatObj.popupContent);\r\n lyrFeatObj.selectionLayer.getSource().addFeature(lyrFeatObj.feature);\r\n for (let f of this._popupChangedFunctions) {\r\n f(this._$popupContent);\r\n }\r\n }\r\n\r\n\r\n /**\r\n *\r\n * @param feature - the ol feature\r\n * @param {LayerEsriMapServer} lyr - the map server layer\r\n * @param {string} popupContent - popup content\r\n * @param {string} esriName - esri layer name\r\n */\r\n addMapServicePopupContent(feature: ol.Feature, lyr: LayerEsriMapServer, popupContent: string, esriName: string) {\r\n\r\n let featLayerObject = new FeatureLayerProperties(\r\n feature, lyr, this._popupContentLength, this._selectionLayerLookup[lyr.id], esriName\r\n );\r\n featLayerObject.popupContent = popupContent;\r\n\r\n this._passThroughLayerFeatureArray.push(featLayerObject);\r\n this._popupContentLength++;\r\n\r\n $('.popup-content-length').html(this._popupContentLength.toFixed());\r\n\r\n if (!this._popupOpen) {\r\n this._$popupContent.find('.next-popup').trigger('click');\r\n\r\n this._popupOverlay.setPosition(this._popupCoordinate);\r\n this._$popupContent.scrollTop(0);\r\n this._popupOpen = true;\r\n }\r\n }\r\n\r\n /**\r\n *\r\n * @param pixel - the ol pixel\r\n * @returns feature layer properties\r\n * @private\r\n */\r\n _featuresAtPixel(pixel: ol.Pixel): Array<FeatureLayerProperties> {\r\n let layerFeatureObjectArray = [];\r\n\r\n this.map.forEachFeatureAtPixel(pixel, (feature: ol.Feature, layer: ol.layer.Vector) =>{\r\n let lyrIndex = this._arrPopupOlLayers.indexOf(layer);\r\n\r\n if (lyrIndex > -1) {\r\n layerFeatureObjectArray.push(\r\n new FeatureLayerProperties(\r\n feature, this._arrPopupLayers[lyrIndex], lyrIndex, this._selectionLayers[lyrIndex]));\r\n }\r\n });\r\n\r\n return layerFeatureObjectArray;\r\n }\r\n\r\n closePopup() {\r\n this._checkInit();\r\n this._popupOpen = false;\r\n this._popupOverlay.setPosition(undefined);\r\n this._$popupCloser[0].blur();\r\n this.clearSelection();\r\n this._$popupContent.html('');\r\n\r\n return false;\r\n };\r\n\r\n\r\n /**\r\n *\r\n * @param chgFunction - popup change function\r\n */\r\n addPopupChangedFunction(chgFunction: popupChangedFunction) {\r\n this._popupChangedFunctions.push(chgFunction);\r\n }\r\n\r\n /**\r\n *\r\n * @param {LayerBase|*} lyr - the layer being acted on\r\n * @param {object} [selectionStyle={}] the selection style configuration\r\n * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color\r\n * @param {number} [selectionStyle.width=10] the selection width for linear features\r\n * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function\r\n * @returns the new selection layer\r\n * @private\r\n */\r\n _addPopupLayer(lyr, selectionStyle): ol.layer.Vector {\r\n this._checkInit();\r\n\r\n selectionStyle = selectionStyle || {};\r\n selectionStyle.color = selectionStyle.color || 'rgba(255,170,0,0.5)';\r\n selectionStyle.width = selectionStyle.width || 10;\r\n\r\n let theStyle;\r\n\r\n if (selectionStyle.olStyle) {\r\n theStyle = selectionStyle.olStyle;\r\n } else {\r\n theStyle = new ol.style.Style({\r\n stroke: new ol.style.Stroke({\r\n color: selectionStyle.color,\r\n width: selectionStyle.width\r\n }),\r\n image: new ol.style.Circle({\r\n radius: 7,\r\n fill: new ol.style.Fill({color: selectionStyle.color}),\r\n stroke: new ol.style.Stroke({color: selectionStyle.color, width: 1})\r\n }),\r\n fill: new ol.style.Fill({\r\n color: selectionStyle.color\r\n })\r\n });\r\n }\r\n\r\n let selectionLayer = new ol.layer.Vector(\r\n {\r\n source: new ol.source.Vector(),\r\n style: theStyle,\r\n zIndex: 100\r\n }\r\n );\r\n\r\n this._selectionLayers.push(selectionLayer);\r\n this._selectionLayerLookup[lyr.id] = selectionLayer;\r\n this.map.addLayer(selectionLayer);\r\n\r\n return selectionLayer;\r\n }\r\n\r\n\r\n\r\n /**\r\n * Add popup to the map\r\n * @param {LayerBase|*} lyr The layer that the popup with act on\r\n * @param {popupCallback} popupContentFunction - popup content function that makes popup info\r\n * @param {object} [selectionStyle={}] the selection style configuration\r\n * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color\r\n * @param {number} [selectionStyle.width=10] the selection width for linear features\r\n * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function\r\n * @returns {object} a reference to the ol selection layer\r\n */\r\n addVectorPopup(lyr: LayerBaseVector, popupContentFunction: popupCallback,\r\n selectionStyle?: ol.style.Style|Array<ol.style.Style>|ol.style.StyleFunction) {\r\n let selectionLayer = this._addPopupLayer(lyr, selectionStyle);\r\n this._arrPopupLayerIds.push(lyr.id);\r\n this._arrPopupLayerNames.push(lyr.name);\r\n this._arrPopupLayers.push(lyr);\r\n this._arrPopupOlLayers.push(lyr.olLayer);\r\n this._arrPopupContentFunction.push(popupContentFunction);\r\n\r\n return selectionLayer;\r\n };\r\n\r\n\r\n /**\r\n *\r\n * @param {LayerBase} lyr - layer\r\n */\r\n removeVectorPopup(lyr) {\r\n let idx = this._arrPopupLayerIds.indexOf(lyr.id);\r\n\r\n if (idx > -1) {\r\n this._arrPopupLayerIds.splice(idx, 1);\r\n this._arrPopupLayerNames.splice(idx, 1);\r\n this._arrPopupLayers.splice(idx, 1);\r\n this._arrPopupOlLayers.splice(idx, 1);\r\n this._arrPopupContentFunction.splice(idx, 1);\r\n this._selectionLayers.splice(idx, 1);\r\n delete this._selectionLayerLookup[lyr.id];\r\n }\r\n }\r\n\r\n /**\r\n *\r\n * @param {LayerEsriMapServer} lyr - map server layer\r\n * @param {object} [selectionStyle={}] the selection style configuration\r\n * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color\r\n * @param {number} [selectionStyle.width=10] the selection width for linear features\r\n * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function\r\n * @returns {object} a reference to the ol selection layer\r\n */\r\n addMapServicePopup(lyr, selectionStyle?: ol.style.Style|Array<ol.style.Style>|ol.style.StyleFunction) {\r\n let selectionLayer = this._addPopupLayer(lyr, selectionStyle);\r\n this._esriMapServiceLayers.push(lyr);\r\n\r\n return selectionLayer;\r\n }\r\n\r\n clearSelection() {\r\n this._checkInit();\r\n for (let i = 0; i < this._selectionLayers.length; i++) {\r\n this._selectionLayers[i].getSource().clear();\r\n }\r\n for (let f of this._mapClickFunctions) {\r\n f();\r\n }\r\n };\r\n\r\n /**\r\n * Add a function to be called when the map is clicked but before any popups are implemented\r\n * @param {function} func - the map click function\r\n */\r\n addMapClickFunction(func: Function) {\r\n this._mapClickFunctions.push(func);\r\n }\r\n}\r\nnm.MapPopupCls = MapPopupCls;\r\nexport default MapPopupCls;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/olHelpers/mapPopupCls.ts\n **/","/**\r\n * Created by gavorhes on 6/1/2016.\r\n */\r\n\r\n\r\nimport provide from '../util/provide';\r\nimport {LayerBase} from \"../layers/LayerBase\";\r\nconst $ = require('jquery');\r\nimport {ol} from 'custom-ol';\r\n\r\nlet nm = provide('collections.layerSwipe');\r\n\r\n\r\nclass LayerSwipe {\r\n leftLayers: Array<LayerBase>;\r\n rightLayers: Array<LayerBase>;\r\n _percentRight: number;\r\n _map: ol.Map;\r\n $mapElement: JQuery;\r\n $swiper: JQuery;\r\n dragging: boolean;\r\n offset: number;\r\n /**\r\n *\r\n * @param {ol.Map} map - the map\r\n * @param {string} [sliderContent=''] - additional html to be added inside the slider div\r\n */\r\n constructor(map: ol.Map, sliderContent: string = '') {\r\n\r\n sliderContent = sliderContent || '';\r\n /**\r\n *\r\n * @type {Array<LayerBase>}\r\n */\r\n this.leftLayers = [];\r\n\r\n /**\r\n *\r\n * @type {Array<LayerBase>}\r\n */\r\n this.rightLayers = [];\r\n\r\n this._percentRight = 50;\r\n this.offset = null;\r\n\r\n this._map = map;\r\n this.$mapElement = $(map.getTargetElement());\r\n this.$mapElement.append(`<div class=\"layer-swiper\">${sliderContent}</div>`);\r\n\r\n\r\n this.$swiper = this.$mapElement.find('.layer-swiper');\r\n this.percentRight = this.percentRight;\r\n\r\n this.dragging = false;\r\n\r\n this.$mapElement.mouseleave(() => {\r\n this.dragging = false;\r\n });\r\n\r\n this.$swiper.bind('mousewheel DOMMouseScroll', function(evt){\r\n evt.preventDefault();\r\n });\r\n\r\n this.$swiper.mousedown((evt) => {\r\n this.dragging = true;\r\n this.offset = evt.offsetX;\r\n });\r\n\r\n $(window).mouseup(() => {\r\n this.dragging = false;\r\n });\r\n\r\n this.$mapElement.mousemove((evt) => {\r\n if (this.dragging) {\r\n let mapLeft = this.$mapElement.position().left;\r\n let mapWidth = this.$mapElement.width();\r\n\r\n this.percentRight = 100 * (evt.pageX - this.offset - mapLeft) / mapWidth;\r\n }\r\n });\r\n }\r\n\r\n /**\r\n *\r\n * @param {LayerBase|*} lyr - layer to be added to left side\r\n */\r\n addLeftLayer(lyr) {\r\n\r\n if (this.leftLayers.indexOf(lyr) != -1){\r\n return;\r\n }\r\n\r\n lyr.olLayer.on('precompose', (event) => {\r\n let ctx = event['context'];\r\n let width = ctx.canvas.width * (this.percentRight / 100);\r\n\r\n ctx.save();\r\n ctx.beginPath();\r\n ctx.rect(0, 0, width, ctx.canvas.height);\r\n ctx.clip();\r\n });\r\n\r\n lyr.olLayer.on('postcompose', function (event) {\r\n let ctx = event['context'];\r\n ctx.restore();\r\n });\r\n\r\n\r\n this.leftLayers.push(lyr);\r\n }\r\n\r\n /**\r\n *\r\n * @param {LayerBase|*} lyr - layer to be added to right side\r\n */\r\n addRightLayer(lyr) {\r\n\r\n if (this.rightLayers.indexOf(lyr) != -1){\r\n return;\r\n }\r\n\r\n lyr.olLayer.on('precompose', (event) => {\r\n let ctx = event['context'];\r\n let width = ctx.canvas.width * (this.percentRight / 100);\r\n\r\n ctx.save();\r\n ctx.beginPath();\r\n ctx.rect(width, 0, ctx.canvas.width - width, ctx.canvas.height);\r\n ctx.clip();\r\n });\r\n\r\n lyr.olLayer.on('postcompose', function (event) {\r\n let ctx = event['context'];\r\n ctx.restore();\r\n });\r\n\r\n this.rightLayers.push(lyr);\r\n }\r\n\r\n get percentRight() : number{\r\n return this._percentRight;\r\n }\r\n\r\n set percentRight(percent: number) {\r\n let maxed = this.$swiper.position().left + this.$swiper.width() > this.$mapElement.width();\r\n\r\n if (percent < 0) {\r\n return;\r\n } else if (maxed && percent > this.percentRight) {\r\n return;\r\n }\r\n\r\n this._percentRight = percent;\r\n this.$swiper.css('left', `${this._percentRight.toFixed(2)}%`);\r\n this._map.render();\r\n }\r\n}\r\n\r\nnm.LayerSwipe = LayerSwipe;\r\nexport default LayerSwipe;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/olHelpers/layerSwipe.ts\n **/","/**\r\n * Created by gavorhes on 12/7/2015.\r\n */\r\nimport {LayerBase, LayerBaseOptions} from './LayerBase';\r\nimport * as esriToOl from '../olHelpers/esriToOlStyle';\r\nimport mapPopup from '../olHelpers/mapPopup';\r\nimport provide from '../util/provide';\r\nimport {ol} from 'custom-ol';\r\nconst nm = provide('layers');\r\n\r\nconst $ = require('jquery');\r\n\r\n\r\nexport interface LayerEsriMapServerOptions extends LayerBaseOptions{\r\n addPopup?: boolean;\r\n showLayers?: Array<number>;\r\n}\r\n\r\n/**\r\n * esri mapserver layer\r\n * @augments LayerBase\r\n */\r\nexport class LayerEsriMapServer extends LayerBase {\r\n _esriFormat: ol.format.EsriJSON;\r\n _popupRequest: JQueryXHR;\r\n\r\n /**\r\n * The base layer for all others\r\n * @param {string} url - resource url\r\n * @param {object} [options] - config\r\n * @param {string} [options.id] - layer id\r\n * @param {string} [options.name=Unnamed Layer] - layer name\r\n * @param {number} [options.opacity=1] - opacity\r\n * @param {boolean} [options.visible=true] - default visible\r\n * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28\r\n * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28\r\n * @param {object} [options.params={}] the get parameters to include to retrieve the layer\r\n * @param {number} [options.zIndex=0] the z index for the layer\r\n * @param {function} [options.loadCallback] function to call on load, context this is the layer object\r\n * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed\r\n * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility\r\n * @param {boolean} [options.legendContent] additional content to add to the legend\r\n * @param {boolean} [options.addPopup=false] if a popup should be added\r\n * @param {undefined|Array<number>} [options.showLayers=undefined] if a popup should be added\r\n */\r\n constructor(url, options: LayerEsriMapServerOptions = {}) {\r\n\r\n super(url, options);\r\n this._source = new ol.source.TileArcGISRest(\r\n {\r\n url: this.url == '' ? undefined : this.url,\r\n params: typeof options.showLayers == 'undefined' ? undefined : {layers: 'show:' + options.showLayers.join(',')}\r\n }\r\n );\r\n\r\n this._olLayer = new ol.layer.Tile({\r\n source: this._source,\r\n visible: this.visible,\r\n opacity: this.opacity,\r\n minResolution: this._minResolution,\r\n maxResolution: this._maxResolution,\r\n zIndex: this._zIndex\r\n });\r\n\r\n options.addPopup = typeof options.addPopup == 'boolean' ? options.addPopup : false;\r\n\r\n this._esriFormat = new ol.format.EsriJSON();\r\n this._popupRequest = null;\r\n\r\n this.addLegendContent();\r\n\r\n if (options.addPopup) {\r\n mapPopup.addMapServicePopup(this);\r\n }\r\n }\r\n\r\n /**\r\n * add additional content to the legend\r\n * @param {string} [additionalContent=''] additional content for legend\r\n */\r\n addLegendContent(additionalContent?: string) {\r\n let urlCopy = this.url;\r\n\r\n if (urlCopy[urlCopy.length - 1] !== '/') {\r\n urlCopy += '/';\r\n }\r\n\r\n urlCopy += 'legend?f=pjson&callback=?';\r\n\r\n $.get(urlCopy, {}, (d) => {\r\n let newHtml = esriToOl.makeMapServiceLegend(d);\r\n super.addLegendContent(newHtml);\r\n }, 'json');\r\n }\r\n\r\n\r\n getPopupInfo(queryParams) {\r\n if (!this.visible) {\r\n return;\r\n }\r\n\r\n let urlCopy = this.url;\r\n\r\n if (urlCopy[urlCopy.length - 1] != '/') {\r\n urlCopy += '/';\r\n }\r\n\r\n urlCopy += 'identify?callback=?';\r\n\r\n let _this = this;\r\n\r\n if (this._popupRequest != null) {\r\n this._popupRequest.abort();\r\n }\r\n\r\n this._popupRequest = $.get(urlCopy, queryParams, function (d) {\r\n for (let r of d['results']) {\r\n\r\n let popupHtml = '<table class=\"esri-popup-table\">';\r\n\r\n for (let a in r['attributes']) {\r\n if (r['attributes'].hasOwnProperty(a)) {\r\n let attrVal = r['attributes'][a];\r\n\r\n if (attrVal == null || attrVal.toString().toLowerCase() == 'null') {\r\n continue;\r\n }\r\n\r\n let attr = a;\r\n if (attr.length > 14) {\r\n attr = attr.slice(0, 11) + '...';\r\n }\r\n\r\n popupHtml += `<tr><td>${attr}</td><td>${attrVal}</td></tr>`;\r\n }\r\n }\r\n\r\n popupHtml += '</table>';\r\n\r\n mapPopup.addMapServicePopupContent(_this._esriFormat.readFeature(r), _this, popupHtml, r['layerName']);\r\n }\r\n }, 'json').always(function () {\r\n _this._popupRequest = null;\r\n });\r\n }\r\n\r\n /**\r\n *\r\n * @returns {ol.source.TileArcGISRest} the vector source\r\n */\r\n get source(): ol.source.TileArcGISRest {\r\n return super.getSource() as ol.source.TileArcGISRest;\r\n }\r\n\r\n /**\r\n *\r\n * @returns the ol layer\r\n */\r\n get olLayer(): ol.layer.Tile {\r\n return super.getOlLayer() as ol.layer.Tile;\r\n }\r\n}\r\nnm.LayerEsriMapServer = LayerEsriMapServer;\r\nexport default LayerEsriMapServer;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/layers/LayerEsriMapServer.ts\n **/","import * as zoomResolutionConvert from '../olHelpers/zoomResolutionConvert';\r\nimport provide from '../util/provide';\r\nimport {ol} from 'custom-ol';\r\nimport makeGuid from '../util/makeGuid';\r\nconst nm = provide('layers');\r\nconst $ = require('jquery');\r\n\r\n\r\nexport interface LayerBaseOptions{\r\n id?: string;\r\n name?: string;\r\n opacity?: number;\r\n visible?: boolean;\r\n minZoom?: number;\r\n maxZoom?: number;\r\n params?: any;\r\n zIndex?: number;\r\n loadCallback?: Function;\r\n legendCollapse?: boolean;\r\n legendCheckbox?: boolean;\r\n legendContent?: string;\r\n}\r\n\r\n\r\n/**\r\n * The base layer class\r\n * @abstract\r\n */\r\nexport abstract class LayerBase {\r\n\r\n _legendCheckbox: boolean;\r\n _url: string;\r\n _opacity: number;\r\n _minZoom: number;\r\n _maxZoom: number;\r\n _visible: boolean;\r\n _loaded: boolean;\r\n _zIndex: number;\r\n _legendContent: string;\r\n _params: any;\r\n id: string;\r\n _name: string;\r\n _source: ol.source.Source;\r\n animate: boolean;\r\n _legendCollapse: boolean;\r\n _maxResolution: number;\r\n _minResolution: number;\r\n _$legendDiv: JQuery;\r\n loadCallback: Function;\r\n _olLayer: ol.layer.Layer;\r\n _applyCollapseCalled: boolean;\r\n\r\n\r\n\r\n /**\r\n * The base layer for all others\r\n * @param {string} url - url for source\r\n * @param {object} options - config\r\n * @param {string} [options.id=makeGuid()] - layer id\r\n * @param {string} [options.name=Unnamed Layer] - layer name\r\n * @param {number} [options.opacity=1] - opacity\r\n * @param {boolean} [options.visible=true] - default visible\r\n * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28\r\n * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28\r\n * @param {object} [options.params={}] - the get parameters to include to retrieve the layer\r\n * @param {number} [options.zIndex=0] - the z index for the layer\r\n * @param {function} [options.loadCallback] - function to call on load, context this is the layer object\r\n * @param {boolean} [options.legendCollapse=false] - if the legend item should be initially collapsed\r\n * @param {boolean} [options.legendCheckbox=true] - if the legend item should have a checkbox for visibility\r\n * @param {boolean} [options.legendContent=undefined] - additional content to add to the legend\r\n */\r\n constructor(url: string, options: LayerBaseOptions = {}) {\r\n options = options || {} as LayerBaseOptions;\r\n\r\n if (typeof url !== 'string') {\r\n throw 'Invalid URL';\r\n }\r\n this._url = url;\r\n\r\n\r\n this._params = typeof options.params == 'object' ? options.params : {};\r\n this._legendCollapse = typeof options.legendCollapse == 'boolean' ? options.legendCollapse : false;\r\n this._legendCheckbox = typeof options.legendCheckbox == 'boolean' ? options.legendCheckbox : true;\r\n\r\n this.id = options.id || makeGuid();\r\n this._name = options.name || 'Unnamed Layer';\r\n this.animate = false;\r\n this._opacity = typeof options.opacity == 'number' ? options.opacity : 1;\r\n\r\n if (this._opacity > 1) {\r\n this._opacity = 1;\r\n } else if (this._opacity < 0) {\r\n this._opacity = 0;\r\n }\r\n\r\n this._visible = typeof options.visible === 'boolean' ? options.visible : true;\r\n\r\n this._source = undefined;\r\n\r\n /**\r\n *\r\n * @protected\r\n */\r\n this._olLayer = undefined;\r\n this._loaded = false;\r\n\r\n this._maxResolution = zoomResolutionConvert.zoomToResolution(options.minZoom);\r\n if (typeof this._maxResolution !== 'undefined') {\r\n this._maxResolution += 0.00001;\r\n }\r\n this._minResolution = zoomResolutionConvert.zoomToResolution(options.maxZoom);\r\n\r\n this._minZoom = typeof options.minZoom == 'number' ? options.minZoom : undefined;\r\n this._maxZoom = typeof options.maxZoom == 'number' ? options.maxZoom : undefined;\r\n this._zIndex = typeof options.zIndex == 'number' ? options.zIndex : 0;\r\n\r\n this.loadCallback = typeof options.loadCallback == 'function' ? options.loadCallback : function () {\r\n };\r\n\r\n\r\n this._legendContent = '';\r\n\r\n if (this._legendCheckbox) {\r\n this._legendContent += `<input type=\"checkbox\" ${this.visible ? 'checked' : ''} ` +\r\n `class=\"legend-check\" id=\"${this.id}-legend-layer-check\"><span></span>`;\r\n this._legendContent += `<label for=\"${this.id}-legend-layer-check\" class=\"legend-layer-name\">${this.name}</label>`;\r\n } else {\r\n this._legendContent += `<label class=\"legend-layer-name\">${this.name}</label>`;\r\n }\r\n\r\n this._$legendDiv = null;\r\n this._applyCollapseCalled = false;\r\n this._addLegendContent(typeof options.legendContent === 'string' ? options.legendContent : undefined);\r\n }\r\n\r\n /**\r\n * base load function, sets _loaded = true if it is not already\r\n * @protected\r\n * @returns {boolean} if already loaded\r\n */\r\n _load() {\r\n if (this.loaded == true) {\r\n return true;\r\n } else {\r\n this._loaded = true;\r\n\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Get the legend html, be sure to only add to the DOM once\r\n * @returns {string} html for layer wrapped in a div\r\n */\r\n getLegendDiv() {\r\n return `<div class=\"legend-layer-div\" id=\"${this.id}-legend-layer-div\">${this._legendContent}</div>`;\r\n }\r\n\r\n /**\r\n *\r\n * @param {string|undefined} additionalContent - additional content to add to legend\r\n * @private\r\n */\r\n _addLegendContent(additionalContent) {\r\n additionalContent = typeof additionalContent == 'string' ? additionalContent : '';\r\n\r\n let addCollapse = additionalContent.indexOf('<ul>') > -1;\r\n\r\n if (addCollapse) {\r\n additionalContent = '<span class=\"legend-items-expander\" title=\"Expand/Collapse\">▼</span>' + additionalContent;\r\n }\r\n\r\n this._legendContent += additionalContent;\r\n\r\n this._$legendDiv = $(`#${this.id}-legend-layer-div`);\r\n\r\n if (this._$legendDiv.length > 0) {\r\n this._$legendDiv.append(additionalContent);\r\n this.applyCollapse();\r\n }\r\n }\r\n\r\n /**\r\n * add additional content to the legend\r\n * @param {string} [additionalContent=] - additonal content to add\r\n */\r\n addLegendContent(additionalContent) {\r\n this._addLegendContent(additionalContent);\r\n }\r\n\r\n applyCollapse() {\r\n if (this._applyCollapseCalled) {\r\n console.log('collapse already applied');\r\n\r\n return undefined;\r\n }\r\n\r\n this._$legendDiv = $(`#${this.id}-legend-layer-div`);\r\n\r\n if (this._$legendDiv.length > 0) {\r\n\r\n let $expander = this._$legendDiv.find('.legend-items-expander');\r\n\r\n if ($expander.length > 0) {\r\n this._applyCollapseCalled = true;\r\n\r\n $expander.click(function () {\r\n let $this = $(this);\r\n\r\n $this.siblings('ul').slideToggle();\r\n\r\n if ($this.hasClass('legend-layer-group-collapsed')) {\r\n $this.removeClass('legend-layer-group-collapsed');\r\n $this.html('▼');\r\n } else {\r\n $this.addClass('legend-layer-group-collapsed');\r\n $this.html('▶');\r\n }\r\n });\r\n\r\n if (this._legendCollapse) {\r\n $expander.trigger('click');\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * trick to refresh the layer\r\n */\r\n refresh() {\r\n if (this.source) {\r\n this.source.refresh();\r\n }\r\n }\r\n\r\n\r\n /**\r\n * get the legend content\r\n * @type {string}\r\n */\r\n get legendContent() {\r\n return this._legendContent;\r\n }\r\n\r\n /**\r\n * set the legend content directly\r\n * @param {string} newVal - new content\r\n * @protected\r\n */\r\n set legendContent(newVal) {\r\n this._legendContent = newVal;\r\n }\r\n\r\n /**\r\n * get the map get params\r\n * @type {object}\r\n */\r\n get params() {\r\n return this._params;\r\n }\r\n\r\n /**\r\n * set the map get params\r\n * @param {object} newParams - new get params\r\n * @protected\r\n */\r\n set params(newParams) {\r\n this._params = newParams;\r\n }\r\n\r\n /**\r\n * get the minimum resolution\r\n * @type {number|*}\r\n */\r\n get minResolution() {\r\n return this._minResolution;\r\n }\r\n\r\n /**\r\n * get the maximum resolution\r\n * @type {number|*}\r\n */\r\n get maxResolution() {\r\n return this._maxResolution;\r\n }\r\n\r\n /**\r\n * get min zoom\r\n * @type {number|*}\r\n */\r\n get minZoom() {\r\n return this._minZoom;\r\n }\r\n\r\n /**\r\n * get max zoom\r\n * @type {number|*}\r\n */\r\n get maxZoom() {\r\n return this._maxZoom;\r\n }\r\n\r\n /**\r\n * get the url\r\n * @type {string}\r\n */\r\n get url() {\r\n return this._url;\r\n }\r\n\r\n /**\r\n * Get the layer visibility\r\n * @type {boolean}\r\n */\r\n get visible(): boolean {\r\n return this._visible;\r\n }\r\n\r\n /**\r\n * set the visibility\r\n * @param visibility\r\n */\r\n set visible(visibility: boolean) {\r\n this.setVisible(visibility);\r\n }\r\n\r\n protected setVisible(visibility: boolean) {\r\n this._visible = visibility;\r\n if (this.olLayer) {\r\n this.olLayer.setVisible(this._visible);\r\n if (visibility && !this._loaded) {\r\n this._load();\r\n }\r\n }\r\n }\r\n\r\n\r\n /**\r\n * Get the layer opacity\r\n * @type {number}\r\n */\r\n get opacity() {\r\n return this._opacity;\r\n }\r\n\r\n /**\r\n * Set the layer opacity\r\n * @param {number} opacity - layer opacity\r\n */\r\n set opacity(opacity) {\r\n this._opacity = opacity;\r\n if (this.olLayer) {\r\n this.olLayer.setOpacity(this._opacity);\r\n }\r\n }\r\n\r\n /**\r\n * Get the layer name\r\n * @type {string}\r\n */\r\n get name() {\r\n return this._name;\r\n }\r\n\r\n /**\r\n * set the layer name\r\n * @param {string} newName - the new name\r\n */\r\n set name(newName) {\r\n this._name = newName;\r\n }\r\n\r\n /**\r\n * Check if the layer is loaded\r\n * @type {boolean}\r\n */\r\n get loaded() {\r\n return this._loaded;\r\n }\r\n\r\n /**\r\n * get the layer source\r\n * @type {*}\r\n */\r\n get source(): ol.source.Source {\r\n return this.getSource();\r\n }\r\n\r\n\r\n protected getSource(): ol.source.Source{\r\n return this._source;\r\n }\r\n\r\n /**\r\n * get the z index\r\n */\r\n get zIndex(): number {\r\n return this._zIndex;\r\n }\r\n\r\n /**\r\n * set the z index\r\n */\r\n set zIndex(newZ: number) {\r\n this._zIndex = newZ;\r\n }\r\n\r\n protected setZIndex(newZ: number){\r\n\r\n }\r\n\r\n /**\r\n * the the ol layer\r\n */\r\n get olLayer(): ol.layer.Layer {\r\n return this.getOlLayer();\r\n }\r\n\r\n protected getOlLayer(): ol.layer.Layer{\r\n return this._olLayer;\r\n }\r\n}\r\n\r\nnm.LayerBase = LayerBase;\r\nexport default LayerBase;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/layers/LayerBase.ts\n **/","/**\r\n * Created by gavorhes on 12/14/2015.\r\n */\r\n\r\nimport provide from '../util/provide';\r\nconst nm = provide('olHelpers.zoomResolutionConvert');\r\n\r\nlet _zoomResLookup = [\r\n 156543.03392804097, //0\r\n 78271.51696402048, //1\r\n 39135.75848201024, //2\r\n 19567.87924100512, //3\r\n 9783.93962050256, //4\r\n 4891.96981025128, //5\r\n 2445.98490512564, //6\r\n 1222.99245256282, //7\r\n 611.49622628141, //8\r\n 305.748113140705, //9\r\n 152.8740565703525, //10\r\n 76.43702828517625, //11\r\n 38.21851414258813, //12\r\n 19.109257071294063, //13\r\n 9.554628535647032, //14\r\n 4.777314267823516, //15\r\n 2.388657133911758, //16\r\n 1.194328566955879, //17\r\n 0.5971642834779395, //18\r\n 0.29858214173896974, //19\r\n 0.14929107086948487, //20\r\n 0.07464553543474244, //21\r\n 0.03732276771737122, //22\r\n 0.01866138385868561, //23\r\n 0.009330691929342804, //24\r\n 0.004665345964671402, //25\r\n 0.002332672982335701, //26\r\n 0.0011663364911678506, //27\r\n 0.0005831682455839253 //28\r\n];\r\n\r\n/**\r\n * Get the resolution given the zoom level\r\n * @param {number} zoomLevel - the zoom level\r\n * @returns {number|*} the map resolution\r\n */\r\nexport function zoomToResolution(zoomLevel) {\r\n \"use strict\";\r\n\r\n if (typeof zoomLevel == 'number') {\r\n if (zoomLevel % 1 === 0 && zoomLevel >= 0 && zoomLevel <= 28) {\r\n return _zoomResLookup[zoomLevel];\r\n } else {\r\n console.log(`invalid zoom level provided: ${zoomLevel}`);\r\n\r\n return undefined;\r\n }\r\n } else {\r\n return undefined;\r\n }\r\n}\r\nnm.zoomToResolution = zoomToResolution;\r\n\r\n\r\n/**\r\n * Get resolution from the zoom level\r\n * @param {number} resolution - the resolution\r\n * @returns {number|*} the zoom level\r\n */\r\nexport function resolutionToZoom(resolution){\r\n for (let i = 0; i < _zoomResLookup.length; i++){\r\n if (resolution >= _zoomResLookup[i] ){\r\n return i;\r\n }\r\n }\r\n\r\n return 0;\r\n}\r\n\r\nnm.resolutionToZoom = resolutionToZoom;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/olHelpers/zoomResolutionConvert.ts\n **/","/**\r\n * Created by gavorhes on 1/4/2016.\r\n */\r\nimport provide from '../util/provide';\r\nimport {ol} from 'custom-ol';\r\nconst nm = provide('olHelpers.esriToOlStyle');\r\n\r\n/**\r\n * This callback is displayed as part of the Requester class.\r\n * @callback styleFunc\r\n * @param {ol.Feature} feat - openlayers feature\r\n * @param {number} resolution - map resolution\r\n */\r\n\r\n/**\r\n *\r\n * @param {Array<number>} colorArray - input color array\r\n * @param {number} opacity - the opacity 0 to 1\r\n * @returns {string} rgba string\r\n * @private\r\n */\r\nfunction _colorArrayToRgba(colorArray, opacity) {\r\n \"use strict\";\r\n\r\n return `rgba(${colorArray[0]},${colorArray[1]},${colorArray[2]},${opacity})`;\r\n}\r\n\r\n/**\r\n * escape html charcters\r\n * @param {string} str - input string\r\n * @returns {string} escaped string\r\n */\r\nfunction htmlEscape(str) {\r\n return String(str)\r\n .replace(/&/g, '&')\r\n .replace(/\"/g, '"')\r\n .replace(/'/g, ''')\r\n .replace(/</g, '<')\r\n .replace(/>/g, '>');\r\n}\r\n\r\nnm.htmlEscape = htmlEscape;\r\n\r\n\r\nexport interface EsriResponse{\r\n drawingInfo: {\r\n renderer: EsriRenderer\r\n },\r\n geometryType: string\r\n}\r\n\r\nexport interface EsriRenderer{\r\n type: string;\r\n symbol: EsriSymbol;\r\n uniqueValueInfos: Array<{label: string, value: any, symbol: EsriSymbol}>;\r\n}\r\n\r\nexport interface EsriSymbol{\r\n size: number;\r\n type: string;\r\n outline:{\r\n color: string;\r\n width: number;\r\n },\r\n color: string;\r\n width: number;\r\n}\r\n\r\n\r\nclass CommonSymbol {\r\n legendHtml: string;\r\n opacity: number;\r\n symbolObj: EsriSymbol;\r\n olStyle: ol.style.Style|Array<ol.style.Style>|ol.style.StyleFunction;\r\n\r\n /**\r\n *\r\n * @param symbolObj\r\n * @param {number} opacity\r\n */\r\n constructor(symbolObj: EsriSymbol, opacity: number) {\r\n this.symbolObj = symbolObj;\r\n this.opacity = opacity;\r\n this.olStyle = undefined;\r\n this.legendHtml = '';\r\n }\r\n}\r\n\r\ninterface ICommonSymbol{\r\n new (symbolObj: EsriSymbol, opacity: number): CommonSymbol\r\n}\r\n\r\n\r\nclass PointSymbol extends CommonSymbol {\r\n constructor(symbolObj: EsriSymbol, opacity: number) {\r\n super(symbolObj, opacity);\r\n switch (this.symbolObj.type) {\r\n case 'esriSMS':\r\n let innerColor = _colorArrayToRgba(this.symbolObj.color, this.opacity);\r\n let outerColor = _colorArrayToRgba(this.symbolObj.outline.color, this.opacity);\r\n let outlineWidth = this.symbolObj.outline.width;\r\n let radius = this.symbolObj.size;\r\n\r\n\r\n this.olStyle = new ol.style.Style({\r\n image: new ol.style.Circle({\r\n radius: radius,\r\n fill: new ol.style.Fill({\r\n color: innerColor\r\n }),\r\n stroke: new ol.style.Stroke({color: outerColor, width: outlineWidth})\r\n })\r\n });\r\n this.legendHtml = `<span class=\"legend-layer-icon\" style=\"color: ${innerColor}\">●</span>`;\r\n break;\r\n case 'esriPMS':\r\n this.olStyle = new ol.style.Style({\r\n image: new ol.style.Icon({src: `data:image/png;base64,${this.symbolObj['imageData']}`})\r\n });\r\n this.legendHtml = `<img class=\"legend-layer-icon\" height=\"17\" src=\"data:image/png;base64,${this.symbolObj['imageData']}\">`;\r\n break;\r\n default:\r\n console.log(this.symbolObj);\r\n alert('Point symbol does not handle symbol type: ' + this.symbolObj['type']);\r\n }\r\n }\r\n}\r\n\r\nclass LineSymbol extends CommonSymbol {\r\n constructor(symbolObj: EsriSymbol, opacity: number) {\r\n super(symbolObj, opacity);\r\n switch (this.symbolObj.type) {\r\n case 'esriSLS':\r\n let innerColor = _colorArrayToRgba(this.symbolObj.color, this.opacity);\r\n let lineWidth = this.symbolObj.width;\r\n\r\n this.olStyle = new ol.style.Style({\r\n stroke: new ol.style.Stroke({\r\n color: innerColor,\r\n //lineDash: [4],\r\n width: lineWidth\r\n })\r\n });\r\n\r\n this.legendHtml = `<span class=\"legend-layer-icon\" `;\r\n this.legendHtml += `style=\"`;\r\n this.legendHtml += `background-color: ${innerColor};`;\r\n this.legendHtml += `width: 40px;`;\r\n this.legendHtml += `height: 4px;`;\r\n this.legendHtml += `position: relative;`;\r\n this.legendHtml += `display: inline-block;`;\r\n this.legendHtml += `top: -1px;`;\r\n this.legendHtml += `\"></span>`;\r\n break;\r\n default:\r\n console.log(this.symbolObj);\r\n alert('Line symbol does not handle symbol type: ' + this.symbolObj['type']);\r\n }\r\n }\r\n}\r\n\r\nclass PolygonSymbol extends CommonSymbol {\r\n constructor(symbolObj: EsriSymbol, opacity: number) {\r\n super(symbolObj, opacity);\r\n switch (this.symbolObj['type']) {\r\n case 'esriSFS':\r\n let innerColor = _colorArrayToRgba(this.symbolObj.color, this.opacity);\r\n let outerColor = _colorArrayToRgba(this.symbolObj.outline.color, this.opacity);\r\n let outlineWidth = this.symbolObj.outline.width;\r\n\r\n this.olStyle = new ol.style.Style({\r\n stroke: new ol.style.Stroke({\r\n color: outerColor,\r\n //lineDash: [4],\r\n width: outlineWidth\r\n }),\r\n fill: new ol.style.Fill({\r\n color: innerColor\r\n })\r\n });\r\n\r\n this.legendHtml = `<span class=\"legend-layer-icon\" `;\r\n this.legendHtml += `style=\"`;\r\n this.legendHtml += `background-color: ${innerColor};`;\r\n this.legendHtml += `border: solid ${outerColor} 1px;`;\r\n this.legendHtml += `width: 40px;`;\r\n this.legendHtml += `height: 9px;`;\r\n this.legendHtml += `position: relative;`;\r\n this.legendHtml += `display: inline-block;`;\r\n this.legendHtml += `top: 2px;`;\r\n this.legendHtml += `\"></span>`;\r\n break;\r\n\r\n default:\r\n console.log(this.symbolObj);\r\n alert('Polygon symbol does handle symbol type: ' + this.symbolObj['type']);\r\n }\r\n }\r\n}\r\n\r\nclass SymbolGenerator {\r\n opacity: number;\r\n renderer: EsriRenderer;\r\n legendHtml: string;\r\n olStyle: ol.style.Style|Array<ol.style.Style>|ol.style.StyleFunction;\r\n\r\n constructor(esriResponse: EsriResponse) {\r\n this.opacity = (100 - (esriResponse['drawingInfo']['transparency'] || 0)) / 100;\r\n this.renderer = esriResponse.drawingInfo.renderer;\r\n this.olStyle = undefined;\r\n this.legendHtml = '';\r\n }\r\n}\r\n\r\nclass SingleSymbol extends SymbolGenerator {\r\n symbol: EsriSymbol;\r\n /**\r\n *\r\n * @param {object} esriResponse - layer info\r\n * @param {Constructor|*} SymbolClass - the symbol class to use\r\n */\r\n constructor(esriResponse, SymbolClass: ICommonSymbol) {\r\n super(esriResponse);\r\n this.symbol = this.renderer.symbol;\r\n let symbolObj = new SymbolClass(this.symbol, this.opacity);\r\n this.olStyle = symbolObj.olStyle;\r\n this.legendHtml = symbolObj.legendHtml;\r\n }\r\n}\r\n\r\nclass UniqueValueSymbol extends SymbolGenerator {\r\n\r\n propertyName: string;\r\n defaultSymbol: EsriSymbol;\r\n defaultStyle: ol.style.Style|Array<ol.style.Style>|ol.style.StyleFunction;\r\n defaultLabelHtml: string;\r\n labelArray: Array<string>;\r\n legendArray: Array<string>;\r\n propertyStyleLookup: Object;\r\n valueArray: Array<any>;\r\n uniqueValueInfos: Array<{label: string, value: any, symbol: EsriSymbol}>;\r\n\r\n /**\r\n *\r\n * @param {object} esriResponse - layer info\r\n * @param {Constructor|*} SymbolClass - the Symbol class definition\r\n */\r\n constructor(esriResponse: EsriResponse, SymbolClass) {\r\n super(esriResponse);\r\n this.uniqueValueInfos = this.renderer['uniqueValueInfos'];\r\n this.propertyName = this.renderer['field1'];\r\n this.defaultSymbol = this.renderer['defaultSymbol'];\r\n\r\n\r\n if (this.defaultSymbol) {\r\n let symbolObj = new SymbolClass(this.defaultSymbol, this.opacity);\r\n this.defaultStyle = symbolObj.olStyle;\r\n this.defaultLabelHtml = `<span class=\"legend-layer-subitem\">${htmlEscape(this.renderer['defaultLabel'])}</span>` + symbolObj.legendHtml;\r\n } else {\r\n this.defaultStyle = undefined;\r\n this.defaultLabelHtml = 'other';\r\n }\r\n\r\n this.valueArray = [];\r\n this.labelArray = [];\r\n this.legendArray = [];\r\n this.propertyStyleLookup = {};\r\n\r\n for (let uniqueVal of this.uniqueValueInfos) {\r\n this.labelArray.push(uniqueVal['label']);\r\n this.valueArray.push(uniqueVal['value']);\r\n let uniqueSym = new SymbolClass(uniqueVal.symbol, this.opacity);\r\n this.legendArray.push(`<span class=\"legend-layer-subitem\">${htmlEscape(uniqueVal['label'])}</span>` + uniqueSym.legendHtml);\r\n this.propertyStyleLookup[uniqueVal['value']] = uniqueSym.olStyle;\r\n }\r\n\r\n\r\n this.olStyle = (feature: ol.Feature) => {\r\n let checkProperties = feature.getProperties();\r\n let checkProperty = checkProperties[this.propertyName];\r\n\r\n let returnValue;\r\n if (this.propertyStyleLookup[checkProperty] !== undefined) {\r\n returnValue = [this.propertyStyleLookup[checkProperty]];\r\n } else {\r\n returnValue = [this.defaultStyle];\r\n }\r\n\r\n return returnValue;\r\n };\r\n\r\n if (this.defaultLabelHtml !== null) {\r\n this.legendArray.push(this.defaultLabelHtml);\r\n }\r\n\r\n this.legendHtml = '<ul>';\r\n for (let h of this.legendArray) {\r\n this.legendHtml += `<li>${h}</li>`;\r\n }\r\n this.legendHtml += '</ul>';\r\n }\r\n}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n/**\r\n * style and legend object\r\n * @typedef {object} styleAndLegend\r\n * @property {styleFunc} style - style function\r\n * @property {string} legend - legend content\r\n */\r\n\r\n/**\r\n *\r\n * @param {object} esriResponse - layer info\r\n * @returns {styleAndLegend} style and legend object\r\n */\r\nexport function makeFeatureServiceLegendAndSymbol(esriResponse: EsriResponse) {\r\n \"use strict\";\r\n let renderer = esriResponse.drawingInfo.renderer;\r\n let symbolLegendOut: SymbolGenerator = null;\r\n\r\n switch (renderer.type) {\r\n case 'simple':\r\n switch (esriResponse.geometryType) {\r\n case 'esriGeometryPoint':\r\n symbolLegendOut = new SingleSymbol(esriResponse, PointSymbol);\r\n break;\r\n case 'esriGeometryPolyline':\r\n symbolLegendOut = new SingleSymbol(esriResponse, LineSymbol);\r\n break;\r\n case 'esriGeometryPolygon':\r\n symbolLegendOut = new SingleSymbol(esriResponse, PolygonSymbol);\r\n break;\r\n default:\r\n console.log(esriResponse);\r\n alert(esriResponse.geometryType + ' not handled');\r\n }\r\n break;\r\n case 'uniqueValue':\r\n switch (esriResponse.geometryType) {\r\n case 'esriGeometryPoint':\r\n symbolLegendOut = new UniqueValueSymbol(esriResponse, PointSymbol);\r\n break;\r\n case 'esriGeometryPolyline':\r\n symbolLegendOut = new UniqueValueSymbol(esriResponse, LineSymbol);\r\n break;\r\n case 'esriGeometryPolygon':\r\n symbolLegendOut = new UniqueValueSymbol(esriResponse, PolygonSymbol);\r\n break;\r\n default:\r\n console.log(esriResponse);\r\n alert(esriResponse['geometryType'] + ' not handled');\r\n }\r\n break;\r\n default:\r\n alert('not handled renderer type: ' + renderer['type']);\r\n }\r\n\r\n if (symbolLegendOut == null) {\r\n return {style: undefined, legend: ''};\r\n } else {\r\n return {style: symbolLegendOut.olStyle, legend: symbolLegendOut.legendHtml};\r\n }\r\n}\r\n\r\nnm.makeFeatureServiceLegendAndSymbol = makeFeatureServiceLegendAndSymbol;\r\n\r\n\r\n/**\r\n *\r\n * @param {object} lyrObject - the layer as defined in the response\r\n * @param {boolean} [skipLayerNameAndExpander=false] use only icons\r\n * @returns {string} legend html\r\n */\r\nfunction mapServiceLegendItem(lyrObject, skipLayerNameAndExpander: boolean = false) {\r\n\r\n\r\n skipLayerNameAndExpander = typeof skipLayerNameAndExpander == 'boolean' ? skipLayerNameAndExpander : false;\r\n let layerName = lyrObject['layerName'];\r\n let legendItems = lyrObject['legend'];\r\n let legendHtml = '';\r\n\r\n if (!skipLayerNameAndExpander) {\r\n legendHtml += `<span class=\"legend-layer-subitem\">${layerName}</span>`;\r\n }\r\n\r\n if (legendItems.length == 1) {\r\n legendHtml = `<img class=\"legend-layer-icon\" height=\"17\" src=\"data:image/png;base64,${legendItems[0]['imageData']}\">`;\r\n } else {\r\n if (!skipLayerNameAndExpander) {\r\n legendHtml += '<span class=\"legend-items-expander\" title=\"Expand/Collapse\">▼</span>';\r\n }\r\n legendHtml += '<ul>';\r\n for (let i = 0; i < legendItems.length; i++) {\r\n legendHtml += `<li>`;\r\n legendHtml += `<span class=\"legend-layer-subitem\">${htmlEscape(legendItems[i]['label'])}</span>`;\r\n legendHtml += `<img class=\"legend-layer-icon\" height=\"17\" src=\"data:image/png;base64,${legendItems[i]['imageData']}\">`;\r\n legendHtml += `</li>`;\r\n }\r\n legendHtml += '</ul>';\r\n }\r\n\r\n if (!skipLayerNameAndExpander) {\r\n legendHtml = `<span class=\"legend-layer-subitem\">${layerName}</span>` + legendHtml;\r\n }\r\n\r\n return legendHtml;\r\n}\r\n\r\n/**\r\n * make map service legent\r\n * @param {object} esriResponse - layer info\r\n * @returns {string} legend content\r\n */\r\nexport function makeMapServiceLegend(esriResponse) {\r\n \"use strict\";\r\n\r\n let newLegendHtml = '';\r\n\r\n let layers = esriResponse['layers'];\r\n\r\n if (layers.length == 1) {\r\n newLegendHtml += mapServiceLegendItem(layers[0], true);\r\n } else {\r\n newLegendHtml += '<ul>';\r\n for (let i = 0; i < layers.length; i++) {\r\n newLegendHtml += '<li>' + mapServiceLegendItem(layers[i]) + '</li>';\r\n }\r\n newLegendHtml += '</ul>';\r\n }\r\n\r\n return newLegendHtml;\r\n}\r\n\r\nnm.makeMapServiceLegend = makeMapServiceLegend;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/olHelpers/esriToOlStyle.ts\n **/"],"sourceRoot":""} \ No newline at end of file diff --git a/test-html/js/itsMap.js b/test-html/js/itsMap.js new file mode 100644 index 0000000000000000000000000000000000000000..c9251f0379d31e750e71c9dfd243f444c3fafb69 --- /dev/null +++ b/test-html/js/itsMap.js @@ -0,0 +1,13175 @@ +/******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) +/******/ return installedModules[moduleId].exports; +/******/ +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ exports: {}, +/******/ id: moduleId, +/******/ loaded: false +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.loaded = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(0); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ function(module, exports, __webpack_require__) { + + "use strict"; + /** + * Created by gavorhes on 12/18/2015. + */ + // import 'babel-polyfill/dist/polyfill.min'; + var ItsLayerCollection_1 = __webpack_require__(19); + var LayerLegend_1 = __webpack_require__(24); + var quickMap_1 = __webpack_require__(1); + var map = quickMap_1.default(); + window['map'] = map; + var itsLayerCollection = new ItsLayerCollection_1.default(map); + var layerArray = [ + { + groupName: 'ITS Inventory Layers', + collapse: false, + addCheck: true, + items: itsLayerCollection.layers + } + ]; + var legend = new LayerLegend_1.default(layerArray, 'legend-container', {}); + console.log('it works'); + console.log('it works'); + console.log('it works'); + console.log('it works'); + + +/***/ }, +/* 1 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Created by gavorhes on 12/15/2015. + */ + "use strict"; + var quickMapBase_1 = __webpack_require__(2); + var provide_1 = __webpack_require__(4); + var mapMove_1 = __webpack_require__(7); + var mapPopup_1 = __webpack_require__(12); + var nm = provide_1.default('olHelpers'); + /** + * Sets up a map with some default parameters and initializes + * mapMove and mapPopup + * + * @param {object} [options={}] config options + * @param {string} [options.divId=map] map div id + * @param {object} [options.center={}] center config object + * @param {number} [options.center.x=-10018378] center x, web mercator x or lon + * @param {number} [options.center.y=5574910] center y, web mercator y or lat + * @param {number} [options.zoom=7] zoom level + * @param {number} [options.minZoom=undefined] min zoom + * @param {number} [options.maxZoom=undefined] max zoom + * @param {boolean} [options.baseSwitcher=true] if add base map switcher + * @param {boolean} [options.fullScreen=false] if add base map switcher + * @returns the ol map + */ + function quickMap(options) { + var m = quickMapBase_1.quickMapBase(options); + mapMove_1.default.init(m); + mapPopup_1.default.init(m); + return m; + } + exports.quickMap = quickMap; + nm.quickMap = quickMap; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.default = quickMap; + + +/***/ }, +/* 2 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Created by gavorhes on 12/15/2015. + */ + "use strict"; + var $ = __webpack_require__(3); + var provide_1 = __webpack_require__(4); + var custom_ol_1 = __webpack_require__(5); + var nm = provide_1.default('olHelpers'); + /** + * Sets up a map with some default parameters and initializes + * mapMove and mapPopup + * + * @param [options={}] config options + * @param [options.divId=map] map div id + * @param [options.center={}] center config object + * @param [options.center.x=-10018378] center x, web mercator x or lon + * @param [options.center.y=5574910] center y, web mercator y or lat + * @param [options.zoom=7] zoom level + * @param [options.minZoom=undefined] min zoom + * @param [options.maxZoom=undefined] max zoom + * @param [options.baseSwitcher=true] if add base map switcher + * @param [options.fullScreen=false] if add base map switcher + * @returns the ol map + */ + function quickMapBase(options) { + options = options || {}; + options.divId = options.divId || 'map'; + options.center = options.center || { x: -10018378, y: 5574910 }; + options.zoom = typeof options.zoom == 'number' ? options.zoom : 7; + options.baseSwitcher = typeof options.baseSwitcher == 'boolean' ? options.baseSwitcher : true; + options.fullScreen = typeof options.fullScreen == 'boolean' ? options.fullScreen : false; + var $mapDiv = $('#' + options.divId); + $mapDiv.css('position', 'relative'); + var osmLayer = new custom_ol_1.ol.layer.Tile({ source: new custom_ol_1.ol.source.OSM() }); + // let satLayer = new ol.layer.Tile({visible: false, source: new ol.source.MapQuest({layer: 'sat'})}); + var osmCss = "url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMAUExURQAAADQ1NDk5OURFREtLS1FHSFlZWGJRVGJiYWdmZWxsbHRmaXBpanN0c3V0dHp5eX5+fIVzd4F3eeV0jud5juZ8k4aHhomHhoyGh5eGj5OVlJiVlZiYl5qZmJydnKOTlaKZmqKdnaOioaqqqKuzsbOvrrSysLa3tbW4uLm6ub27ub+/vbGXwbCZwbCgxLKlxrOqyLStybO3yrSxyrWzzbW2y7a1zbK4y7W6zbW8y760yrTAzbTFzrPKzrLOzrTJzrTOzr7CwbXC0LXK0LTO0L3I0bPQz7TQz7PS0bXQ0LnR0brW1bzT0r7U077V1Lzc2dqNqteUsdyXscaquuOHneaGmueHnOeJnuiBleiKn+eNoOiOoOWUpOiRo+iSpeiUpeqYpumaqOmdrPSynemgruSqtOmisOmlsuuqtequuOW1vOuxu+uxvOq1ve+xvPK0pvW3o/W5pfO5qvS7qfCwvMOuwc2/wNenxNyyzNe/0Nq31Nq51dy72Oy3wOu4wOu+xey4wO+6xO2+xfTAr/TCsvfFtPHLvvTJuMPDwMfHxcXKyc3DxMvFyMvLyM3PzcDV08DV1MTX1cbY1s7X1sjZ1sra2Mnd3M7b2c7c2tfH1tnB1t7F2d7M29fX1tLY1tDd2tHe3NTf3NnS19rZ1tva2Nnf3t3d28rh3tXg3Nnh3tzj393k39ni4N7k4N7n5uXDyOfLz+zAxu3CyOzEyezKzeDJ3eLM3uvP0u3P0ePf2+7R0u7Q1u/U0+7U1ezc0+7a2e/d2+3f3vbFzvLOwfHN0PPQw/TUx/LWyvLYzPDQ1fPe0ubc4vve4uHh3+nh3+/h2u/h3vHj2vHl3uHm4eTn4uDp5ebo4+Xo5ODq6ebq6OTv6+nl4+/j4O7l4e7n5ujp4+np5Ozq5e7s5urt6O7t6Orw6u7x6u3x7vPj5PDl4fDo4vDq5fDt5vDu6PDv7PTv6fDx6vHx7fH17fXw6fXy7fb07/bz8fT18vn38vr39fr48/r59Pr6+P3++//+/gAAALNTSk0AAAEAdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wBT9wclAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGHRFWHRTb2Z0d2FyZQBwYWludC5uZXQgNC4wLjlsM35OAAAFNElEQVRIS1VVCZxVUxi/9l0UIUT2bMnY43bVI2c0Y01kSWIaS0j2JEtkN41piomZrPPKQ2aQ7JKImOZlnm2493TJzDufuU1Zi+v/fee+mZ//793vnPOd7zvfes5zDBEZkBBjAcIjb+Iiotqgdhat8AMK0vl7/R9N7GiWtshqIr+EZ5gYKibyUsXY1l/mfFpssvUlWQ0FkU3gy4+RB/+kwYcO8pRSnldcOU/r2lAHARSwk2ORgEmOdC1EsuRiYSqMPwwroMIraZk5V2fYJQjCKfZrRmh3gSAZi2i4b7wSylWu8EqZwS59JkFUaW96JbNSc+CEUmt4rorwuZmWdDaoc+uZETuQlTCU5xYzR7muUnVUVo+BcRhre/VwUpasgJwhH7JkYIYA0sNxhmCwUK+lw6vCKBZehw01dEiyw4Q4aE0Z4ahDhKaFQsGnJ2BgqKoTBsNjFy0SlW6whRAZTdm8DBJmkBZhDi1j4xJQBk6ywrWUTymaCxac8lROcdauRGzQSNtA7EHUYhXyEwhhgjFUqRuO+rauhF1awFpzCsmwUbjIFBR0u1bKtyGpulW/H/cVVzkyGaIWTIR9pFAV6GK2gPMXMX8gPk9zzxXgI1kimcAltEYr+cjio1imlKpEa9rOipLm+p+CZ6Bw//qd1/f/O+GwMxbSLpyoZEcwkyh2jIks+3hmdd2jWUw4scxNysnHxU7nSspTRcJjCZGL3IsjsYJMMg5mwgx7gaIOLBFCogAgBBoNa9w+DE6I+Bs7FTgwwrJbHjWDgpYo2KwtBTcYEDuloC9geQw+k2RGnPGpTaOlq7AS+YICUz4DZVaX2TiNDhuYfTtY4geLi0IoCm3XccwM9hx4kU28StQEljDs3ZEpFGA+8dKzLmV9ymIwF5FOGn2GdJM8KLHDJbXyiYVMG9MRTLiXGGg2QKaxM3khPSRrwM9zEIardxU2w/EiA0gOeYKHzDR0V7/QGV3lKIA9ktrDArxO3gdA+k6SKoBiVwcm7NjZb9+Hnztg282TuHVZ9LOISFNt9MgyCetZVczSxnyDbl17Penq6mqpg1IhRaEO2aVLUO4/r17H8tTv6f13h71dduvZI3Y+uMdWksNSauLovJw5hsqiPIUvt0ku7/iBeUR3sksmomYWtRbAjbiLfv2lX9/V7LVG4uYnUZXhQ7f2OPCZEx9wrYWTcePEQqPEML8pl4mMdr/jlXlvHiRiJ2+MSTFY4TTSYStuvz2R/JXh+PPeGXm055J+3/YDWuNu3R3DArPutyg0ZgykMVDU9Ndm22+wYalr2rse48CnsTIFcMn73vfhNrktx1EUcZnPv6ah3Yy5cDTRdBEoGoBeah71dqFyjZDJLkWk3N3v4uuktssjWpzciMPxQeHj8nMKzcGuB0tAyzFhdCKOYWv4HwOQVwIxLG99a6uvH3sJCyO3h+k4EZ+G7+xj5f4XXksoaGrdMRzSc8ARA8+cdOuk2x6fffNNt5x+Ro1omPlrT/CQDlcNlpx4NBIWXhkx7Y3Zp3ofNR7Uv89Om/beW0TLIynHv3vs1VsOFpSWSXvfuPUf9BrRFyxgXdHoKJnQFegPOovvzz59ntrzye240ig8UQ3lDI2VqwagrKIQcLXNFL3wglN2OHdBQ6/vI3kENDVBwRb3k1XtczFbjWn4EzMYi7CF3129+JTYuRSdrGuS92g5dpqn6qXoJQs5xmL8p+Wt4hLbt0mx2OLNZR2bbPy8zJNQGFM/f/CfXZekRYFjGCWjIJpM+WiCzGBPWHhoyaAsjRT/B2Gy5yzYJkwUAAAAAElFTkSuQmCC')"; + var aerialCss = "url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMAUExURQALBgIMDQgOBwQOEQcTBwUSCwoVDAwdBw8ZDgUREwYUGAYZFQYZGgkTFQoVGQsZFAwZHBMeDhIbFBEbHAwWIA4bIREcIQ4hCQwjFw4lHBgkDB8sDxUiExIiGhAoGxohFRshGRorHQcrKQsiIQwmKgooJA0pKQ81Jw8yLRMiIxImKxUrJREuKhslJB0rIhooKRUuMBMyLhkwJhozKh48LxUzMRM9MBwzMiUvFCMtGiMwEiwzFCgzHDI+GSIsISkvJSQxIiM2LiY5Jic+Lyk0JSo0Ky49JSs9KSU1NSM7NCs2NS8+NDM1JzU9Ljg7IDJCHS1DLSNAMitCMSxIOjREITZLIDZJKDlFIjpFKztKJT1LKzJBMzpHMD1JMjpKPD1RKjlQNC1DQj5QQEA8MEJGJkBKJUJNK0lLLEJMMkVMPEpONENSLUdZL0pTLkpaLkRUMkRSPEVZMktUM0pVOklZMklZNEpcNU1ZMk1ZNUxfMk5dNkxcOVFUM1RUOFJbNVFZOVNYPVFdOVJdPFVaOVVaPVVdOlVdPVpaNlpdO0phN01hOlBiN1NhPFNoP1piPWFbPmRjPENOQEtPSURTQkJVS0xVQk1VSkxbQkxcS0heUVFXRFRcQlJfTFxeQlpeS05lQk1kSFRjQVRjSlZpQ1tkQlxlSlxpRF1rSVVnUVtlU1llXF9tU1xoXlxwSl9ramRfQmJlQ2FhSWFlSWFlTmVlSWRmTGFoQWFpRWFsRmVpRWVtRmNsSmtlRGpqRmpsS2BmWGRsUmFrW2ptUmZyR2RxTGpxTWVyU2RyW2d5V2tzUmt0WW15VG15WXFuTHNtVnFxTXF4T3h0TnJzUnJ1XHJ4VXN6Wnp0VHx1W315VXp8XGR0YGx0YHVzZXJ0aHR9ZXV+aHl9YHOCXXqBXXeCYHyCY3iEaHyIYn+JaXqKcYB5WIN6Y4SCXoCDZIGEaYCIZoOLa4iCaImJbIOOdYuMco6OeIuVcpOKbZKPc5aQb5eXe5ufg6KjhAAAAAAAAAAAAAAAAOGCeQgAAAEAdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wBT9wclAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGHRFWHRTb2Z0d2FyZQBwYWludC5uZXQgNC4wLjlsM35OAAAH80lEQVRISy1WbXQUVxm+6wqnk3Zmpxl2FG2EGg92C8GDlWptVTwa+uF3xcKmDfFzCUzDsJNsunXipglJXJbrtJWmwZNSnHD3jojRgUIm2UumIZ0JZ7JByrALbMWW0IBW8aRa4+cf76TeX3Nm3uc+z/s+7/vugl4r/aMTrT4e1pPTqnnmJNn5AyUzRnrRle/qE33dsvrBtAQVoxtpZNK3zSzYjUjviWO2Ag+R77dl7W36n/1Ep9KBPG/S+Py0PkjU/gPKQGqwTHryiWYFAXSvMairsio7SjyNsnCzh0qKImV9/7mhfHQZx2yN1O+7rXUm33MUPaboOkAJHaoIdXfJj2xWeyD8jMFEXkvIu5qzpU988gWB5zl+GS+sFe55trEVPdWZB2miq8bBVkNFO2R0qnrfkiXhcJhtDNXE6tbW97/s9O9/7ZfVhx86/CwrROpfvvxboMqeLsuqPr1j44qEwDNMOBximUiYoU8sw7BC/a7T72uEnyJDlGxZ9KcglZRyuqqrv/tSZErgOI4NgRBTIw9EmHAoFGZZnp6aGaJ2GTxfxYs8kKVUQh7WB5hQeC3LsUxoxVKW14l3BX2WcoUYPiZyLLe8teZ+iuT4GGhvV5KpKWkpyzxEr2MZgQ1xdRjfRBoH+2k6lIHjKTHPPBo8CSJISqqq4wGGOcWylIGlgvgNX1Gd8vF5f+IUIwb30ng+Gg2QfBRIMvy0jG8SVkYo4N0zvUXVRztbJ/L6xL7lUZEXBEHkuZqlS6gEAUgKJurnhFtfpACOYd8b/hVbJPqwi44a6KA0sPVjIi/SIyxb3u8KlAJ0S8jRVgrlW+nVHPdrhiXCxu42d86ByksDc80P3MkJFBFQ8Ho1lQegpWJRWFGsDsRwwv7pIyvuQW0ZkrX6NDVFbqcvaQI8vbyqzt5AARrsbKx5yhQEGs+wPO56bOK+0rcwMrOKkpUbZWYxV04UeZZv/cBKFhRL6Qdv9y4LfEDA7/thg7tTmv1a5/GnO0wl0dQg80wglZaHUmxRvjwAHOfyN0mxrpqLUpcjsK3NHYMo4R1o6eho2ZyIb2FoeOC3ILK8kZ2HQMOuWywGXUkJBCeTbYFS0+ym1h2/6UgmvnrvKYZZtIEXGf75C2cIAp5LHNd71x7uPoTjakrWH9e3KFpaatjUvJUysFw0KrLMYMW2lTg4PeUQx6kJEALvxXEmCdVyPLHtCSjBhc01XCjIgafxou+PE6KC1dhxSCwoBCc+N4P3btM84pmdSSjJnjO/nvY4LQfVyz5/I+v6IwjUOMjy+MVCxIbKupTJaEktp7cTKU42Pvjh2m/8cSpC6aPsaX/MHSuUQLVVsIa4RUTs/r/BVAexNdjdnsNG7j/rV93xheLMzKnFrPeTEQchCyCcKb25aAIn7lrAertrZwyNXM8N6zfWrFo3d2SmOEcF83x/r+OOFgrAHYWF7cELjhV7UQo/6WAIUVl9JFl8a//HZ66VpbY3I9QKZqPru77lA+iOWAIr0hKxHCmmr0othSyeIl5y3qt4xT8gSNrKEZozs8Els67rgsLOZ+ygzwMfbtNhobfgzpEyGnz7htPtzUi6PuOoj7K0WF/MXiUFxwGajRD1hjYXHXI9p406qOyinp5/tiWcDHY0jIu4n64Qfq7kliB2gemag9QbOia0PbbDMbd43SHuvxFxrAocxins7MX5Kqbe1QixKBxoV4//PfAgGCu+Rlm4SvZizyDH+0reDHp92iO0BuX3bCfItl0PEwvYLqpwXG2MHlGsQ4S8pMJZv1JGmHiEoHQDdOjwmVlEP/nE9ADKjI8xLI0OOGITfy0SbeG/C2jKUDGSlDhM9I3IpK9iup6XnbRNC7yqueNsJCCIiXzdQhnaGN+46umnEdy5U5UbUJ48LFM9GkJo8BdDOiAZ7ZIQbKhYLMqvhU2wmNxjEAsS2AI7y4nWF64duePbk7YV3zvAVLEMD9AxJRNa3KDUibV7DjnkuprMEYjScFNcaR2ceP2u9R/5k1052Ryme5phAFRswlHjAudiP4dOy7CaxLgdJh9vUlU1702/+LPa1U9fvPi9qlA4XEUBJc3dFlpsR457IDl1iPqLp7o81NQgyV19iYU38uTiv975Pd3SiwQcsGjx+v4/6fl5T7EOOMTCtpbKxfemsQq/3olQZcminADAAI0cuGLHaHOFxbuGvRk/Z9u7CULqoVR6NE0yx1avj30oRhc/jWUoIALGxkz0dg1Dl9iaI7LqOOXKsXJFwjiuEAi70Jra2nW1PL08zLBhZsMABpW5csI7TPfew9ipFKcn5k1i+1KyCWKjC3W/8dF1d666+RaabBVTFTHacjoojBNDh0NDxk+IPTlwfqJkWpbnpFHXIbLbmpxEQ3ff/Z0g/mauXsoln9wDRjy/NHsQFw3P6vWuTJ43/+FZrk2cvAFRipCKdfD9y2+pjRj78s0KdCUDKJvdV91ChngV38T20TM+gghjpJaPlpFr2xbEz5g4A/NGt5rNwdwmYGeeeMXBSLHHUIc+6RsojRH9VTUm3/mLf/64b470XvoxoTKhlMBQ2jMEzo2PjxdGMppmn1RM24bWFJqaQv4BcuJa2Sam7Zokq1ldCsz06NCBHrhwqVQYpfFj42NZexz1EW9SR/kT58nEeQKJb2fPXjjp0u/YUkwHEgLeOnf2nOuf1TRTM02CLKLTPy60/x1CCztqn7Ev+BdsC3m+30decQvW/wBNTwU+CfUQAQAAAABJRU5ErkJggg==')"; + if (options.baseSwitcher) { + } + if (options.zoom < 0 || options.zoom > 28) { + throw 'zoom out of range'; + } + if (options.center.x >= -180 && options.center.x <= 180 && options.center.y >= -90 && options.center.y <= 90) { + var p = new custom_ol_1.ol.geom.Point([options.center.x, options.center.y]); + new custom_ol_1.ol.proj.Projection({ code: "EPSG:4326" }); + p.transform(new custom_ol_1.ol.proj.Projection({ code: "EPSG:4326" }), new custom_ol_1.ol.proj.Projection({ code: "EPSG:3857" })); + var coordinates = p.getCoordinates(); + options.center.x = coordinates[0]; + options.center.y = coordinates[1]; + } + var map = new custom_ol_1.ol.Map({ + layers: [osmLayer], + target: options.divId, + controls: custom_ol_1.ol.control.defaults({ + attributionOptions: { collapsible: false } + }), + view: new custom_ol_1.ol.View({ + center: [options.center.x, options.center.y], + zoom: options.zoom, + minZoom: options.minZoom, + maxZoom: options.maxZoom + }) + }); + if (options.fullScreen) { + //TODO add full screen options to ts + map.addControl(new custom_ol_1.ol.control.FullScreen({})); + } + return map; + } + exports.quickMapBase = quickMapBase; + nm.quickMapBase = quickMapBase; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.default = quickMapBase; + + +/***/ }, +/* 3 */ +/***/ function(module, exports, __webpack_require__) { + + var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! + * jQuery JavaScript Library v2.2.3 + * http://jquery.com/ + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2016-04-05T19:26Z + */ + + (function( global, factory ) { + + if ( typeof module === "object" && typeof module.exports === "object" ) { + // For CommonJS and CommonJS-like environments where a proper `window` + // is present, execute the factory and get jQuery. + // For environments that do not have a `window` with a `document` + // (such as Node.js), expose a factory as module.exports. + // This accentuates the need for the creation of a real `window`. + // e.g. var jQuery = require("jquery")(window); + // See ticket #14549 for more info. + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + + // Pass this if window is not defined yet + }(typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + + // Support: Firefox 18+ + // Can't be in strict mode, several libs including ASP.NET trace + // the stack via arguments.caller.callee and Firefox dies if + // you try to trace through "use strict" call chains. (#13335) + //"use strict"; + var arr = []; + + var document = window.document; + + var slice = arr.slice; + + var concat = arr.concat; + + var push = arr.push; + + var indexOf = arr.indexOf; + + var class2type = {}; + + var toString = class2type.toString; + + var hasOwn = class2type.hasOwnProperty; + + var support = {}; + + + + var + version = "2.2.3", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }, + + // Support: Android<4.1 + // Make sure we trim BOM and NBSP + rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, + + // Matches dashed string for camelizing + rmsPrefix = /^-ms-/, + rdashAlpha = /-([\da-z])/gi, + + // Used by jQuery.camelCase as callback to replace() + fcamelCase = function( all, letter ) { + return letter.toUpperCase(); + }; + + jQuery.fn = jQuery.prototype = { + + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // Start with an empty selector + selector: "", + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + return num != null ? + + // Return just the one element from the set + ( num < 0 ? this[ num + this.length ] : this[ num ] ) : + + // Return all the elements in a clean array + slice.call( this ); + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + ret.context = this.context; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + each: function( callback ) { + return jQuery.each( this, callback ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map( this, function( elem, i ) { + return callback.call( elem, i, elem ); + } ) ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: arr.sort, + splice: arr.splice + }; + + jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[ 0 ] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // Skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !jQuery.isFunction( target ) ) { + target = {}; + } + + // Extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + + // Only deal with non-null/undefined values + if ( ( options = arguments[ i ] ) != null ) { + + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject( copy ) || + ( copyIsArray = jQuery.isArray( copy ) ) ) ) { + + if ( copyIsArray ) { + copyIsArray = false; + clone = src && jQuery.isArray( src ) ? src : []; + + } else { + clone = src && jQuery.isPlainObject( src ) ? src : {}; + } + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; + }; + + jQuery.extend( { + + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + isFunction: function( obj ) { + return jQuery.type( obj ) === "function"; + }, + + isArray: Array.isArray, + + isWindow: function( obj ) { + return obj != null && obj === obj.window; + }, + + isNumeric: function( obj ) { + + // parseFloat NaNs numeric-cast false positives (null|true|false|"") + // ...but misinterprets leading-number strings, particularly hex literals ("0x...") + // subtraction forces infinities to NaN + // adding 1 corrects loss of precision from parseFloat (#15100) + var realStringObj = obj && obj.toString(); + return !jQuery.isArray( obj ) && ( realStringObj - parseFloat( realStringObj ) + 1 ) >= 0; + }, + + isPlainObject: function( obj ) { + var key; + + // Not plain objects: + // - Any object or value whose internal [[Class]] property is not "[object Object]" + // - DOM nodes + // - window + if ( jQuery.type( obj ) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { + return false; + } + + // Not own constructor property must be Object + if ( obj.constructor && + !hasOwn.call( obj, "constructor" ) && + !hasOwn.call( obj.constructor.prototype || {}, "isPrototypeOf" ) ) { + return false; + } + + // Own properties are enumerated firstly, so to speed up, + // if last one is own, then all properties are own + for ( key in obj ) {} + + return key === undefined || hasOwn.call( obj, key ); + }, + + isEmptyObject: function( obj ) { + var name; + for ( name in obj ) { + return false; + } + return true; + }, + + type: function( obj ) { + if ( obj == null ) { + return obj + ""; + } + + // Support: Android<4.0, iOS<6 (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; + }, + + // Evaluates a script in a global context + globalEval: function( code ) { + var script, + indirect = eval; + + code = jQuery.trim( code ); + + if ( code ) { + + // If the code includes a valid, prologue position + // strict mode pragma, execute code by injecting a + // script tag into the document. + if ( code.indexOf( "use strict" ) === 1 ) { + script = document.createElement( "script" ); + script.text = code; + document.head.appendChild( script ).parentNode.removeChild( script ); + } else { + + // Otherwise, avoid the DOM node creation, insertion + // and removal by using an indirect global eval + + indirect( code ); + } + } + }, + + // Convert dashed to camelCase; used by the css and data modules + // Support: IE9-11+ + // Microsoft forgot to hump their vendor prefix (#9572) + camelCase: function( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); + }, + + nodeName: function( elem, name ) { + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + }, + + each: function( obj, callback ) { + var length, i = 0; + + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + // Support: Android<4.1 + trim: function( text ) { + return text == null ? + "" : + ( text + "" ).replace( rtrim, "" ); + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArrayLike( Object( arr ) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + return arr == null ? -1 : indexOf.call( arr, elem, i ); + }, + + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + for ( ; j < len; j++ ) { + first[ i++ ] = second[ j ]; + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var length, value, + i = 0, + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArrayLike( elems ) ) { + length = elems.length; + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // Bind a function to a context, optionally partially applying any + // arguments. + proxy: function( fn, context ) { + var tmp, args, proxy; + + if ( typeof context === "string" ) { + tmp = fn[ context ]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if ( !jQuery.isFunction( fn ) ) { + return undefined; + } + + // Simulated bind + args = slice.call( arguments, 2 ); + proxy = function() { + return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || jQuery.guid++; + + return proxy; + }, + + now: Date.now, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support + } ); + + // JSHint would error on this code due to the Symbol not being defined in ES5. + // Defining this global in .jshintrc would create a danger of using the global + // unguarded in another place, it seems safer to just disable JSHint for these + // three lines. + /* jshint ignore: start */ + if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; + } + /* jshint ignore: end */ + + // Populate the class2type map + jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), + function( i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); + } ); + + function isArrayLike( obj ) { + + // Support: iOS 8.2 (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, + type = jQuery.type( obj ); + + if ( type === "function" || jQuery.isWindow( obj ) ) { + return false; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; + } + var Sizzle = + /*! + * Sizzle CSS Selector Engine v2.2.1 + * http://sizzlejs.com/ + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2015-10-17 + */ + (function( window ) { + + var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + 1 * new Date(), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // General-purpose constants + MAX_NEGATIVE = 1 << 31, + + // Instance methods + hasOwn = ({}).hasOwnProperty, + arr = [], + pop = arr.pop, + push_native = arr.push, + push = arr.push, + slice = arr.slice, + // Use a stripped-down indexOf as it's faster than native + // http://jsperf.com/thor-indexof-vs-for/5 + indexOf = function( list, elem ) { + var i = 0, + len = list.length; + for ( ; i < len; i++ ) { + if ( list[i] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + + // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier + identifier = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + + "*\\]", + + pseudos = ":(" + identifier + ")(?:\\((" + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), + + rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + identifier + ")" ), + "CLASS": new RegExp( "^\\.(" + identifier + ")" ), + "TAG": new RegExp( "^(" + identifier + "|[*])" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + rescape = /'|\\/g, + + // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), + funescape = function( _, escaped, escapedWhitespace ) { + var high = "0x" + escaped - 0x10000; + // NaN means non-codepoint + // Support: Firefox<24 + // Workaround erroneous numeric interpretation of +"0x" + return high !== high || escapedWhitespace ? + escaped : + high < 0 ? + // BMP codepoint + String.fromCharCode( high + 0x10000 ) : + // Supplemental Plane codepoint (surrogate pair) + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }; + + // Optimize for push.apply( _, NodeList ) + try { + push.apply( + (arr = slice.call( preferredDoc.childNodes )), + preferredDoc.childNodes + ); + // Support: Android<4.0 + // Detect silently failing push.apply + arr[ preferredDoc.childNodes.length ].nodeType; + } catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + push_native.apply( target, slice.call(els) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + // Can't trust NodeList.length + while ( (target[j++] = els[i++]) ) {} + target.length = j - 1; + } + }; + } + + function Sizzle( selector, context, results, seed ) { + var m, i, elem, nid, nidselect, match, groups, newSelector, + newContext = context && context.ownerDocument, + + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; + + results = results || []; + + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { + + if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { + setDocument( context ); + } + context = context || document; + + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) { + + // ID selector + if ( (m = match[1]) ) { + + // Document context + if ( nodeType === 9 ) { + if ( (elem = context.getElementById( m )) ) { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + + // Element context + } else { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( newContext && (elem = newContext.getElementById( m )) && + contains( context, elem ) && + elem.id === m ) { + + results.push( elem ); + return results; + } + } + + // Type selector + } else if ( match[2] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Class selector + } else if ( (m = match[3]) && support.getElementsByClassName && + context.getElementsByClassName ) { + + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // Take advantage of querySelectorAll + if ( support.qsa && + !compilerCache[ selector + " " ] && + (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { + + if ( nodeType !== 1 ) { + newContext = context; + newSelector = selector; + + // qSA looks outside Element context, which is not what we want + // Thanks to Andrew Dupont for this workaround technique + // Support: IE <=8 + // Exclude object elements + } else if ( context.nodeName.toLowerCase() !== "object" ) { + + // Capture the context ID, setting it first if necessary + if ( (nid = context.getAttribute( "id" )) ) { + nid = nid.replace( rescape, "\\$&" ); + } else { + context.setAttribute( "id", (nid = expando) ); + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + nidselect = ridentifier.test( nid ) ? "#" + nid : "[id='" + nid + "']"; + while ( i-- ) { + groups[i] = nidselect + " " + toSelector( groups[i] ); + } + newSelector = groups.join( "," ); + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + } + + if ( newSelector ) { + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + } finally { + if ( nid === expando ) { + context.removeAttribute( "id" ); + } + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); + } + + /** + * Create key-value caches of limited size + * @returns {function(string, object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ + function createCache() { + var keys = []; + + function cache( key, value ) { + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return (cache[ key + " " ] = value); + } + return cache; + } + + /** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ + function markFunction( fn ) { + fn[ expando ] = true; + return fn; + } + + /** + * Support testing using an element + * @param {Function} fn Passed the created div and expects a boolean result + */ + function assert( fn ) { + var div = document.createElement("div"); + + try { + return !!fn( div ); + } catch (e) { + return false; + } finally { + // Remove from its parent by default + if ( div.parentNode ) { + div.parentNode.removeChild( div ); + } + // release memory in IE + div = null; + } + } + + /** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ + function addHandle( attrs, handler ) { + var arr = attrs.split("|"), + i = arr.length; + + while ( i-- ) { + Expr.attrHandle[ arr[i] ] = handler; + } + } + + /** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ + function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + ( ~b.sourceIndex || MAX_NEGATIVE ) - + ( ~a.sourceIndex || MAX_NEGATIVE ); + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( (cur = cur.nextSibling) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; + } + + /** + * Returns a function to use in pseudos for input types + * @param {String} type + */ + function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; + } + + /** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ + function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && elem.type === type; + }; + } + + /** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ + function createPositionalPseudo( fn ) { + return markFunction(function( argument ) { + argument = +argument; + return markFunction(function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ (j = matchIndexes[i]) ] ) { + seed[j] = !(matches[j] = seed[j]); + } + } + }); + }); + } + + /** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ + function testContext( context ) { + return context && typeof context.getElementsByTagName !== "undefined" && context; + } + + // Expose support vars for convenience + support = Sizzle.support = {}; + + /** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ + isXML = Sizzle.isXML = function( elem ) { + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = elem && (elem.ownerDocument || elem).documentElement; + return documentElement ? documentElement.nodeName !== "HTML" : false; + }; + + /** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ + setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, parent, + doc = node ? node.ownerDocument || node : preferredDoc; + + // Return early if doc is invalid or already selected + if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Update global variables + document = doc; + docElem = document.documentElement; + documentIsHTML = !isXML( document ); + + // Support: IE 9-11, Edge + // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) + if ( (parent = document.defaultView) && parent.top !== parent ) { + // Support: IE 11 + if ( parent.addEventListener ) { + parent.addEventListener( "unload", unloadHandler, false ); + + // Support: IE 9 - 10 only + } else if ( parent.attachEvent ) { + parent.attachEvent( "onunload", unloadHandler ); + } + } + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties + // (excepting IE8 booleans) + support.attributes = assert(function( div ) { + div.className = "i"; + return !div.getAttribute("className"); + }); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert(function( div ) { + div.appendChild( document.createComment("") ); + return !div.getElementsByTagName("*").length; + }); + + // Support: IE<9 + support.getElementsByClassName = rnative.test( document.getElementsByClassName ); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert(function( div ) { + docElem.appendChild( div ).id = expando; + return !document.getElementsByName || !document.getElementsByName( expando ).length; + }); + + // ID find and filter + if ( support.getById ) { + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var m = context.getElementById( id ); + return m ? [ m ] : []; + } + }; + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute("id") === attrId; + }; + }; + } else { + // Support: IE6/7 + // getElementById is not reliable as a find shortcut + delete Expr.find["ID"]; + + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== "undefined" && + elem.getAttributeNode("id"); + return node && node.value === attrId; + }; + }; + } + + // Tag + Expr.find["TAG"] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( tag ); + + // DocumentFragment nodes don't have gEBTN + } else if ( support.qsa ) { + return context.querySelectorAll( tag ); + } + } : + + function( tag, context ) { + var elem, + tmp = [], + i = 0, + // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( (elem = results[i++]) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See http://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( (support.qsa = rnative.test( document.querySelectorAll )) ) { + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert(function( div ) { + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // http://bugs.jquery.com/ticket/12359 + docElem.appendChild( div ).innerHTML = "<a id='" + expando + "'></a>" + + "<select id='" + expando + "-\r\\' msallowcapture=''>" + + "<option selected=''></option></select>"; + + // Support: IE8, Opera 11-12.16 + // Nothing should be selected when empty strings follow ^= or $= or *= + // The test attribute must be unknown in Opera but "safe" for WinRT + // http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( div.querySelectorAll("[msallowcapture^='']").length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !div.querySelectorAll("[selected]").length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ + if ( !div.querySelectorAll( "[id~=" + expando + "-]" ).length ) { + rbuggyQSA.push("~="); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !div.querySelectorAll(":checked").length ) { + rbuggyQSA.push(":checked"); + } + + // Support: Safari 8+, iOS 8+ + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibing-combinator selector` fails + if ( !div.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push(".#.+[+~]"); + } + }); + + assert(function( div ) { + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = document.createElement("input"); + input.setAttribute( "type", "hidden" ); + div.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( div.querySelectorAll("[name=d]").length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( !div.querySelectorAll(":enabled").length ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Opera 10-11 does not throw on post-comma invalid pseudos + div.querySelectorAll("*,:x"); + rbuggyQSA.push(",.*:"); + }); + } + + if ( (support.matchesSelector = rnative.test( (matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector) )) ) { + + assert(function( div ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( div, "div" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( div, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + }); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + // Element contains another + // Purposefully self-exclusive + // As in, an element does not contain itself + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + )); + } : + function( a, b ) { + if ( b ) { + while ( (b = b.parentNode) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = hasCompare ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + // Sort on method existence if only one input has compareDocumentPosition + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + // Calculate position if both inputs belong to the same document + compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + // Otherwise we know they are disconnected + 1; + + // Disconnected nodes + if ( compare & 1 || + (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { + + // Choose the first element that is related to our preferred document + if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { + return -1; + } + if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Parentless nodes are either documents or disconnected + if ( !aup || !bup ) { + return a === document ? -1 : + b === document ? 1 : + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( (cur = cur.parentNode) ) { + ap.unshift( cur ); + } + cur = b; + while ( (cur = cur.parentNode) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[i] === bp[i] ) { + i++; + } + + return i ? + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[i], bp[i] ) : + + // Otherwise nodes in our document sort first + ap[i] === preferredDoc ? -1 : + bp[i] === preferredDoc ? 1 : + 0; + }; + + return document; + }; + + Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); + }; + + Sizzle.matchesSelector = function( elem, expr ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + // Make sure that attribute selectors are quoted + expr = expr.replace( rattributeQuotes, "='$1']" ); + + if ( support.matchesSelector && documentIsHTML && + !compilerCache[ expr + " " ] && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch (e) {} + } + + return Sizzle( expr, document, null, [ elem ] ).length > 0; + }; + + Sizzle.contains = function( context, elem ) { + // Set document vars if needed + if ( ( context.ownerDocument || context ) !== document ) { + setDocument( context ); + } + return contains( context, elem ); + }; + + Sizzle.attr = function( elem, name ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + // Don't get fooled by Object.prototype properties (jQuery #13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + (val = elem.getAttributeNode(name)) && val.specified ? + val.value : + null; + }; + + Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); + }; + + /** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ + Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( (elem = results[i++]) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + // Clear input after sorting to release objects + // See https://github.com/jquery/sizzle/pull/225 + sortInput = null; + + return results; + }; + + /** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ + getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + // If no nodeType, this is expected to be an array + while ( (node = elem[i++]) ) { + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + // Use textContent for elements + // innerText usage removed for consistency of new lines (jQuery #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + // Do not include comment or processing instruction nodes + + return ret; + }; + + Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[1] = match[1].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape ); + + if ( match[2] === "~=" ) { + match[3] = " " + match[3] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[1] = match[1].toLowerCase(); + + if ( match[1].slice( 0, 3 ) === "nth" ) { + // nth-* requires argument + if ( !match[3] ) { + Sizzle.error( match[0] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); + match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); + + // other types prohibit arguments + } else if ( match[3] ) { + Sizzle.error( match[0] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[6] && match[2]; + + if ( matchExpr["CHILD"].test( match[0] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[3] ) { + match[2] = match[4] || match[5] || ""; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + // Get excess from tokenize (recursively) + (excess = tokenize( unquoted, true )) && + // advance to the next closing parenthesis + (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { + + // excess is a negative index + match[0] = match[0].slice( 0, excess ); + match[2] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { return true; } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && + classCache( className, function( elem ) { + return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" ); + }); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + }; + }, + + "CHILD": function( type, what, argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, context, xml ) { + var cache, uniqueCache, outerCache, node, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType, + diff = false; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( (node = node[ dir ]) ) { + if ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) { + + return false; + } + } + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + + // Seek `elem` from a previously-cached index + + // ...in a gzip-friendly way + node = parent; + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex && cache[ 2 ]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( (node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + (diff = nodeIndex = 0) || start.pop()) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else { + // Use previously-cached element index if available + if ( useCache ) { + // ...in a gzip-friendly way + node = elem; + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex; + } + + // xml :nth-child(...) + // or :nth-last-child(...) or :nth(-last)?-of-type(...) + if ( diff === false ) { + // Use the same loop as above to seek `elem` from the start + while ( (node = ++nodeIndex && node && node[ dir ] || + (diff = nodeIndex = 0) || start.pop()) ) { + + if ( ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) && + ++diff ) { + + // Cache the index of each encountered element + if ( useCache ) { + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + uniqueCache[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction(function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf( seed, matched[i] ); + seed[ idx ] = !( matches[ idx ] = matched[i] ); + } + }) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + // Potentially complex pseudos + "not": markFunction(function( selector ) { + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction(function( seed, matches, context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( (elem = unmatched[i]) ) { + seed[i] = !(matches[i] = elem); + } + } + }) : + function( elem, context, xml ) { + input[0] = elem; + matcher( input, null, xml, results ); + // Don't keep the element (issue #299) + input[0] = null; + return !results.pop(); + }; + }), + + "has": markFunction(function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + }), + + "contains": markFunction(function( text ) { + text = text.replace( runescape, funescape ); + return function( elem ) { + return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; + }; + }), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + // lang value must be a valid identifier + if ( !ridentifier.test(lang || "") ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( (elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); + return false; + }; + }), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); + }, + + // Boolean properties + "enabled": function( elem ) { + return elem.disabled === false; + }, + + "disabled": function( elem ) { + return elem.disabled === true; + }, + + "checked": function( elem ) { + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); + }, + + "selected": function( elem ) { + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), + // but not by others (comment: 8; processing instruction: 7; etc.) + // nodeType < 6 works because attributes (2) do not appear as children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos["empty"]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + // Support: IE<8 + // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" + ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); + }, + + // Position-in-collection + "first": createPositionalPseudo(function() { + return [ 0 ]; + }), + + "last": createPositionalPseudo(function( matchIndexes, length ) { + return [ length - 1 ]; + }), + + "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + }), + + "even": createPositionalPseudo(function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "odd": createPositionalPseudo(function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }) + } + }; + + Expr.pseudos["nth"] = Expr.pseudos["eq"]; + + // Add button/input type pseudos + for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); + } + for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); + } + + // Easy API for creating new setFilters + function setFilters() {} + setFilters.prototype = Expr.filters = Expr.pseudos; + Expr.setFilters = new setFilters(); + + tokenize = Sizzle.tokenize = function( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || (match = rcomma.exec( soFar )) ) { + if ( match ) { + // Don't consume trailing commas as valid + soFar = soFar.slice( match[0].length ) || soFar; + } + groups.push( (tokens = []) ); + } + + matched = false; + + // Combinators + if ( (match = rcombinators.exec( soFar )) ) { + matched = match.shift(); + tokens.push({ + value: matched, + // Cast descendant combinators to space + type: match[0].replace( rtrim, " " ) + }); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || + (match = preFilters[ type ]( match ))) ) { + matched = match.shift(); + tokens.push({ + value: matched, + type: type, + matches: match + }); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); + }; + + function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[i].value; + } + return selector; + } + + function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + checkNonElements = base && dir === "parentNode", + doneName = done++; + + return combinator.first ? + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, uniqueCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching + if ( xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || (elem[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {}); + + if ( (oldCache = uniqueCache[ dir ]) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + // Assign to newCache so results back-propagate to previous elements + return (newCache[ 2 ] = oldCache[ 2 ]); + } else { + // Reuse newcache so results back-propagate to previous elements + uniqueCache[ dir ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { + return true; + } + } + } + } + } + }; + } + + function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[i]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[0]; + } + + function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[i], results ); + } + return results; + } + + function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( (elem = unmatched[i]) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; + } + + function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction(function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( (elem = temp[i]) ) { + matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) ) { + // Restore matcherIn since elem is not yet a final match + temp.push( (matcherIn[i] = elem) ); + } + } + postFinder( null, (matcherOut = []), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) && + (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) { + + seed[temp] = !(results[temp] = elem); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + }); + } + + function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[0].type ], + implicitRelative = leadingRelative || Expr.relative[" "], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + (checkContext = context).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + // Avoid hanging onto element (issue #299) + checkContext = null; + return ret; + } ]; + + for ( ; i < len; i++ ) { + if ( (matcher = Expr.relative[ tokens[i].type ]) ) { + matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; + } else { + matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[j].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); + } + + function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + // We must always have either seed elements or outermost context + elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), + len = elems.length; + + if ( outermost ) { + outermostContext = context === document || context || outermost; + } + + // Add elements passing elementMatchers directly to results + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id + for ( ; i !== len && (elem = elems[i]) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + if ( !context && elem.ownerDocument !== document ) { + setDocument( elem ); + xml = !documentIsHTML; + } + while ( (matcher = elementMatchers[j++]) ) { + if ( matcher( elem, context || document, xml) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + // They will have gone through all possible matchers + if ( (elem = !matcher && elem) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // `i` is now the count of elements visited above, and adding it to `matchedCount` + // makes the latter nonnegative. + matchedCount += i; + + // Apply set filters to unmatched elements + // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` + // equals `i`), unless we didn't visit _any_ elements in the above loop because we have + // no element matchers and no seed. + // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that + // case, which will result in a "00" `matchedCount` that differs from `i` but is also + // numerically zero. + if ( bySet && i !== matchedCount ) { + j = 0; + while ( (matcher = setMatchers[j++]) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !(unmatched[i] || setMatched[i]) ) { + setMatched[i] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; + } + + compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + // Generate a function of recursive functions that can be used to check each element + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[i] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); + + // Save selector and tokenization + cached.selector = selector; + } + return cached; + }; + + /** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ + select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( (selector = compiled.selector || selector) ); + + results = results || []; + + // Try to minimize operations if there is only one selector in the list and no seed + // (the latter of which guarantees us context) + if ( match.length === 1 ) { + + // Reduce context if the leading compound selector is an ID + tokens = match[0] = match[0].slice( 0 ); + if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && + support.getById && context.nodeType === 9 && documentIsHTML && + Expr.relative[ tokens[1].type ] ) { + + context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; + if ( !context ) { + return results; + + // Precompiled matchers will still verify ancestry, so step up a level + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[i]; + + // Abort if we hit a combinator + if ( Expr.relative[ (type = token.type) ] ) { + break; + } + if ( (find = Expr.find[ type ]) ) { + // Search, expanding context for leading sibling combinators + if ( (seed = find( + token.matches[0].replace( runescape, funescape ), + rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context + )) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + // Compile and execute a filtering function if one is not provided + // Provide `match` to avoid retokenization if we modified the selector above + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + !context || rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; + }; + + // One-time assignments + + // Sort stability + support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; + + // Support: Chrome 14-35+ + // Always assume duplicates if they aren't passed to the comparison function + support.detectDuplicates = !!hasDuplicate; + + // Initialize against the default document + setDocument(); + + // Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) + // Detached nodes confoundingly follow *each other* + support.sortDetached = assert(function( div1 ) { + // Should return 1, but returns 4 (following) + return div1.compareDocumentPosition( document.createElement("div") ) & 1; + }); + + // Support: IE<8 + // Prevent attribute/property "interpolation" + // http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx + if ( !assert(function( div ) { + div.innerHTML = "<a href='#'></a>"; + return div.firstChild.getAttribute("href") === "#" ; + }) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + }); + } + + // Support: IE<9 + // Use defaultValue in place of getAttribute("value") + if ( !support.attributes || !assert(function( div ) { + div.innerHTML = "<input/>"; + div.firstChild.setAttribute( "value", "" ); + return div.firstChild.getAttribute( "value" ) === ""; + }) ) { + addHandle( "value", function( elem, name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + }); + } + + // Support: IE<9 + // Use getAttributeNode to fetch booleans when getAttribute lies + if ( !assert(function( div ) { + return div.getAttribute("disabled") == null; + }) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + (val = elem.getAttributeNode( name )) && val.specified ? + val.value : + null; + } + }); + } + + return Sizzle; + + })( window ); + + + + jQuery.find = Sizzle; + jQuery.expr = Sizzle.selectors; + jQuery.expr[ ":" ] = jQuery.expr.pseudos; + jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; + jQuery.text = Sizzle.getText; + jQuery.isXMLDoc = Sizzle.isXML; + jQuery.contains = Sizzle.contains; + + + + var dir = function( elem, dir, until ) { + var matched = [], + truncate = until !== undefined; + + while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { + if ( elem.nodeType === 1 ) { + if ( truncate && jQuery( elem ).is( until ) ) { + break; + } + matched.push( elem ); + } + } + return matched; + }; + + + var siblings = function( n, elem ) { + var matched = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + matched.push( n ); + } + } + + return matched; + }; + + + var rneedsContext = jQuery.expr.match.needsContext; + + var rsingleTag = ( /^<([\w-]+)\s*\/?>(?:<\/\1>|)$/ ); + + + + var risSimple = /^.[^:#\[\.,]*$/; + + // Implement the identical functionality for filter and not + function winnow( elements, qualifier, not ) { + if ( jQuery.isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + /* jshint -W018 */ + return !!qualifier.call( elem, i, elem ) !== not; + } ); + + } + + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + } ); + + } + + if ( typeof qualifier === "string" ) { + if ( risSimple.test( qualifier ) ) { + return jQuery.filter( qualifier, elements, not ); + } + + qualifier = jQuery.filter( qualifier, elements ); + } + + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not; + } ); + } + + jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + return elems.length === 1 && elem.nodeType === 1 ? + jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] : + jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + } ) ); + }; + + jQuery.fn.extend( { + find: function( selector ) { + var i, + len = this.length, + ret = [], + self = this; + + if ( typeof selector !== "string" ) { + return this.pushStack( jQuery( selector ).filter( function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + } ) ); + } + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + // Needed because $( selector, context ) becomes $( context ).find( selector ) + ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret ); + ret.selector = this.selector ? this.selector + " " + selector : selector; + return ret; + }, + filter: function( selector ) { + return this.pushStack( winnow( this, selector || [], false ) ); + }, + not: function( selector ) { + return this.pushStack( winnow( this, selector || [], true ) ); + }, + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + } + } ); + + + // Initialize a jQuery object + + + // A central reference to the root jQuery(document) + var rootjQuery, + + // A simple way to check for HTML strings + // Prioritize #id over <tag> to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/, + + init = jQuery.fn.init = function( selector, context, root ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Method init() accepts an alternate rootjQuery + // so migrate can support jQuery.sub (gh-2101) + root = root || rootjQuery; + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector[ 0 ] === "<" && + selector[ selector.length - 1 ] === ">" && + selector.length >= 3 ) { + + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && ( match[ 1 ] || !context ) ) { + + // HANDLE: $(html) -> $(array) + if ( match[ 1 ] ) { + context = context instanceof jQuery ? context[ 0 ] : context; + + // Option to run scripts is true for back-compat + // Intentionally let the error be thrown if parseHTML is not present + jQuery.merge( this, jQuery.parseHTML( + match[ 1 ], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + + // Properties of context are called as methods if possible + if ( jQuery.isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[ 2 ] ); + + // Support: Blackberry 4.6 + // gEBID returns nodes no longer in the document (#6963) + if ( elem && elem.parentNode ) { + + // Inject the element directly into the jQuery object + this.length = 1; + this[ 0 ] = elem; + } + + this.context = document; + this.selector = selector; + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || root ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this.context = this[ 0 ] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( jQuery.isFunction( selector ) ) { + return root.ready !== undefined ? + root.ready( selector ) : + + // Execute immediately if ready is not present + selector( jQuery ); + } + + if ( selector.selector !== undefined ) { + this.selector = selector.selector; + this.context = selector.context; + } + + return jQuery.makeArray( selector, this ); + }; + + // Give the init function the jQuery prototype for later instantiation + init.prototype = jQuery.fn; + + // Initialize central reference + rootjQuery = jQuery( document ); + + + var rparentsprev = /^(?:parents|prev(?:Until|All))/, + + // Methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + + jQuery.fn.extend( { + has: function( target ) { + var targets = jQuery( target, this ), + l = targets.length; + + return this.filter( function() { + var i = 0; + for ( ; i < l; i++ ) { + if ( jQuery.contains( this, targets[ i ] ) ) { + return true; + } + } + } ); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + matched = [], + pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ? + jQuery( selectors, context || this.context ) : + 0; + + for ( ; i < l; i++ ) { + for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { + + // Always skip document fragments + if ( cur.nodeType < 11 && ( pos ? + pos.index( cur ) > -1 : + + // Don't pass non-elements to Sizzle + cur.nodeType === 1 && + jQuery.find.matchesSelector( cur, selectors ) ) ) { + + matched.push( cur ); + break; + } + } + } + + return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); + }, + + // Determine the position of an element within the set + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; + } + + // Index in selector + if ( typeof elem === "string" ) { + return indexOf.call( jQuery( elem ), this[ 0 ] ); + } + + // Locate the position of the desired element + return indexOf.call( this, + + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[ 0 ] : elem + ); + }, + + add: function( selector, context ) { + return this.pushStack( + jQuery.uniqueSort( + jQuery.merge( this.get(), jQuery( selector, context ) ) + ) + ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter( selector ) + ); + } + } ); + + function sibling( cur, dir ) { + while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} + return cur; + } + + jQuery.each( { + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return siblings( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return siblings( elem.firstChild ); + }, + contents: function( elem ) { + return elem.contentDocument || jQuery.merge( [], elem.childNodes ); + } + }, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var matched = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + matched = jQuery.filter( selector, matched ); + } + + if ( this.length > 1 ) { + + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + jQuery.uniqueSort( matched ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + matched.reverse(); + } + } + + return this.pushStack( matched ); + }; + } ); + var rnotwhite = ( /\S+/g ); + + + + // Convert String-formatted options into Object-formatted ones + function createOptions( options ) { + var object = {}; + jQuery.each( options.match( rnotwhite ) || [], function( _, flag ) { + object[ flag ] = true; + } ); + return object; + } + + /* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ + jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + createOptions( options ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + + // Last fire value for non-forgettable lists + memory, + + // Flag to know if list was already fired + fired, + + // Flag to prevent firing + locked, + + // Actual callback list + list = [], + + // Queue of execution data for repeatable lists + queue = [], + + // Index of currently firing callback (modified by add/remove as needed) + firingIndex = -1, + + // Fire callbacks + fire = function() { + + // Enforce single-firing + locked = options.once; + + // Execute callbacks for all pending executions, + // respecting firingIndex overrides and runtime changes + fired = firing = true; + for ( ; queue.length; firingIndex = -1 ) { + memory = queue.shift(); + while ( ++firingIndex < list.length ) { + + // Run callback and check for early termination + if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && + options.stopOnFalse ) { + + // Jump to end and forget the data so .add doesn't re-fire + firingIndex = list.length; + memory = false; + } + } + } + + // Forget the data if we're done with it + if ( !options.memory ) { + memory = false; + } + + firing = false; + + // Clean up if we're done firing for good + if ( locked ) { + + // Keep an empty list if we have data for future add calls + if ( memory ) { + list = []; + + // Otherwise, this object is spent + } else { + list = ""; + } + } + }, + + // Actual Callbacks object + self = { + + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + + // If we have memory from a past run, we should fire after adding + if ( memory && !firing ) { + firingIndex = list.length - 1; + queue.push( memory ); + } + + ( function add( args ) { + jQuery.each( args, function( _, arg ) { + if ( jQuery.isFunction( arg ) ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && jQuery.type( arg ) !== "string" ) { + + // Inspect recursively + add( arg ); + } + } ); + } )( arguments ); + + if ( memory && !firing ) { + fire(); + } + } + return this; + }, + + // Remove a callback from the list + remove: function() { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + + // Handle firing indexes + if ( index <= firingIndex ) { + firingIndex--; + } + } + } ); + return this; + }, + + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? + jQuery.inArray( fn, list ) > -1 : + list.length > 0; + }, + + // Remove all callbacks from the list + empty: function() { + if ( list ) { + list = []; + } + return this; + }, + + // Disable .fire and .add + // Abort any current/pending executions + // Clear all callbacks and values + disable: function() { + locked = queue = []; + list = memory = ""; + return this; + }, + disabled: function() { + return !list; + }, + + // Disable .fire + // Also disable .add unless we have memory (since it would have no effect) + // Abort any pending executions + lock: function() { + locked = queue = []; + if ( !memory ) { + list = memory = ""; + } + return this; + }, + locked: function() { + return !!locked; + }, + + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( !locked ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + queue.push( args ); + if ( !firing ) { + fire(); + } + } + return this; + }, + + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; + }; + + + jQuery.extend( { + + Deferred: function( func ) { + var tuples = [ + + // action, add listener, listener list, final state + [ "resolve", "done", jQuery.Callbacks( "once memory" ), "resolved" ], + [ "reject", "fail", jQuery.Callbacks( "once memory" ), "rejected" ], + [ "notify", "progress", jQuery.Callbacks( "memory" ) ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + then: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + return jQuery.Deferred( function( newDefer ) { + jQuery.each( tuples, function( i, tuple ) { + var fn = jQuery.isFunction( fns[ i ] ) && fns[ i ]; + + // deferred[ done | fail | progress ] for forwarding actions to newDefer + deferred[ tuple[ 1 ] ]( function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && jQuery.isFunction( returned.promise ) ) { + returned.promise() + .progress( newDefer.notify ) + .done( newDefer.resolve ) + .fail( newDefer.reject ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( + this === promise ? newDefer.promise() : this, + fn ? [ returned ] : arguments + ); + } + } ); + } ); + fns = null; + } ).promise(); + }, + + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Keep pipe for back-compat + promise.pipe = promise.then; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 3 ]; + + // promise[ done | fail | progress ] = list.add + promise[ tuple[ 1 ] ] = list.add; + + // Handle state + if ( stateString ) { + list.add( function() { + + // state = [ resolved | rejected ] + state = stateString; + + // [ reject_list | resolve_list ].disable; progress_list.lock + }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock ); + } + + // deferred[ resolve | reject | notify ] + deferred[ tuple[ 0 ] ] = function() { + deferred[ tuple[ 0 ] + "With" ]( this === deferred ? promise : this, arguments ); + return this; + }; + deferred[ tuple[ 0 ] + "With" ] = list.fireWith; + } ); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( subordinate /* , ..., subordinateN */ ) { + var i = 0, + resolveValues = slice.call( arguments ), + length = resolveValues.length, + + // the count of uncompleted subordinates + remaining = length !== 1 || + ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0, + + // the master Deferred. + // If resolveValues consist of only a single Deferred, just use that. + deferred = remaining === 1 ? subordinate : jQuery.Deferred(), + + // Update function for both resolve and progress values + updateFunc = function( i, contexts, values ) { + return function( value ) { + contexts[ i ] = this; + values[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( values === progressValues ) { + deferred.notifyWith( contexts, values ); + } else if ( !( --remaining ) ) { + deferred.resolveWith( contexts, values ); + } + }; + }, + + progressValues, progressContexts, resolveContexts; + + // Add listeners to Deferred subordinates; treat others as resolved + if ( length > 1 ) { + progressValues = new Array( length ); + progressContexts = new Array( length ); + resolveContexts = new Array( length ); + for ( ; i < length; i++ ) { + if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) { + resolveValues[ i ].promise() + .progress( updateFunc( i, progressContexts, progressValues ) ) + .done( updateFunc( i, resolveContexts, resolveValues ) ) + .fail( deferred.reject ); + } else { + --remaining; + } + } + } + + // If we're not waiting on anything, resolve the master + if ( !remaining ) { + deferred.resolveWith( resolveContexts, resolveValues ); + } + + return deferred.promise(); + } + } ); + + + // The deferred used on DOM ready + var readyList; + + jQuery.fn.ready = function( fn ) { + + // Add the callback + jQuery.ready.promise().done( fn ); + + return this; + }; + + jQuery.extend( { + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Hold (or release) the ready event + holdReady: function( hold ) { + if ( hold ) { + jQuery.readyWait++; + } else { + jQuery.ready( true ); + } + }, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + + // Trigger any bound ready events + if ( jQuery.fn.triggerHandler ) { + jQuery( document ).triggerHandler( "ready" ); + jQuery( document ).off( "ready" ); + } + } + } ); + + /** + * The ready event handler and self cleanup method + */ + function completed() { + document.removeEventListener( "DOMContentLoaded", completed ); + window.removeEventListener( "load", completed ); + jQuery.ready(); + } + + jQuery.ready.promise = function( obj ) { + if ( !readyList ) { + + readyList = jQuery.Deferred(); + + // Catch cases where $(document).ready() is called + // after the browser event has already occurred. + // Support: IE9-10 only + // Older IE sometimes signals "interactive" too soon + if ( document.readyState === "complete" || + ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { + + // Handle it asynchronously to allow scripts the opportunity to delay ready + window.setTimeout( jQuery.ready ); + + } else { + + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed ); + } + } + return readyList.promise( obj ); + }; + + // Kick off the DOM ready check even if the user does not + jQuery.ready.promise(); + + + + + // Multifunctional method to get and set values of a collection + // The value/s can optionally be executed if it's a function + var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + len = elems.length, + bulk = key == null; + + // Sets many values + if ( jQuery.type( key ) === "object" ) { + chainable = true; + for ( i in key ) { + access( elems, fn, i, key[ i ], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !jQuery.isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < len; i++ ) { + fn( + elems[ i ], key, raw ? + value : + value.call( elems[ i ], i, fn( elems[ i ], key ) ) + ); + } + } + } + + return chainable ? + elems : + + // Gets + bulk ? + fn.call( elems ) : + len ? fn( elems[ 0 ], key ) : emptyGet; + }; + var acceptData = function( owner ) { + + // Accepts only: + // - Node + // - Node.ELEMENT_NODE + // - Node.DOCUMENT_NODE + // - Object + // - Any + /* jshint -W018 */ + return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); + }; + + + + + function Data() { + this.expando = jQuery.expando + Data.uid++; + } + + Data.uid = 1; + + Data.prototype = { + + register: function( owner, initial ) { + var value = initial || {}; + + // If it is a node unlikely to be stringify-ed or looped over + // use plain assignment + if ( owner.nodeType ) { + owner[ this.expando ] = value; + + // Otherwise secure it in a non-enumerable, non-writable property + // configurability must be true to allow the property to be + // deleted with the delete operator + } else { + Object.defineProperty( owner, this.expando, { + value: value, + writable: true, + configurable: true + } ); + } + return owner[ this.expando ]; + }, + cache: function( owner ) { + + // We can accept data for non-element nodes in modern browsers, + // but we should not, see #8335. + // Always return an empty object. + if ( !acceptData( owner ) ) { + return {}; + } + + // Check if the owner object already has a cache + var value = owner[ this.expando ]; + + // If not, create one + if ( !value ) { + value = {}; + + // We can accept data for non-element nodes in modern browsers, + // but we should not, see #8335. + // Always return an empty object. + if ( acceptData( owner ) ) { + + // If it is a node unlikely to be stringify-ed or looped over + // use plain assignment + if ( owner.nodeType ) { + owner[ this.expando ] = value; + + // Otherwise secure it in a non-enumerable property + // configurable must be true to allow the property to be + // deleted when data is removed + } else { + Object.defineProperty( owner, this.expando, { + value: value, + configurable: true + } ); + } + } + } + + return value; + }, + set: function( owner, data, value ) { + var prop, + cache = this.cache( owner ); + + // Handle: [ owner, key, value ] args + if ( typeof data === "string" ) { + cache[ data ] = value; + + // Handle: [ owner, { properties } ] args + } else { + + // Copy the properties one-by-one to the cache object + for ( prop in data ) { + cache[ prop ] = data[ prop ]; + } + } + return cache; + }, + get: function( owner, key ) { + return key === undefined ? + this.cache( owner ) : + owner[ this.expando ] && owner[ this.expando ][ key ]; + }, + access: function( owner, key, value ) { + var stored; + + // In cases where either: + // + // 1. No key was specified + // 2. A string key was specified, but no value provided + // + // Take the "read" path and allow the get method to determine + // which value to return, respectively either: + // + // 1. The entire cache object + // 2. The data stored at the key + // + if ( key === undefined || + ( ( key && typeof key === "string" ) && value === undefined ) ) { + + stored = this.get( owner, key ); + + return stored !== undefined ? + stored : this.get( owner, jQuery.camelCase( key ) ); + } + + // When the key is not a string, or both a key and value + // are specified, set or extend (existing objects) with either: + // + // 1. An object of properties + // 2. A key and value + // + this.set( owner, key, value ); + + // Since the "set" path can have two possible entry points + // return the expected data based on which path was taken[*] + return value !== undefined ? value : key; + }, + remove: function( owner, key ) { + var i, name, camel, + cache = owner[ this.expando ]; + + if ( cache === undefined ) { + return; + } + + if ( key === undefined ) { + this.register( owner ); + + } else { + + // Support array or space separated string of keys + if ( jQuery.isArray( key ) ) { + + // If "name" is an array of keys... + // When data is initially created, via ("key", "val") signature, + // keys will be converted to camelCase. + // Since there is no way to tell _how_ a key was added, remove + // both plain key and camelCase key. #12786 + // This will only penalize the array argument path. + name = key.concat( key.map( jQuery.camelCase ) ); + } else { + camel = jQuery.camelCase( key ); + + // Try the string as a key before any manipulation + if ( key in cache ) { + name = [ key, camel ]; + } else { + + // If a key with the spaces exists, use it. + // Otherwise, create an array by matching non-whitespace + name = camel; + name = name in cache ? + [ name ] : ( name.match( rnotwhite ) || [] ); + } + } + + i = name.length; + + while ( i-- ) { + delete cache[ name[ i ] ]; + } + } + + // Remove the expando if there's no more data + if ( key === undefined || jQuery.isEmptyObject( cache ) ) { + + // Support: Chrome <= 35-45+ + // Webkit & Blink performance suffers when deleting properties + // from DOM nodes, so set to undefined instead + // https://code.google.com/p/chromium/issues/detail?id=378607 + if ( owner.nodeType ) { + owner[ this.expando ] = undefined; + } else { + delete owner[ this.expando ]; + } + } + }, + hasData: function( owner ) { + var cache = owner[ this.expando ]; + return cache !== undefined && !jQuery.isEmptyObject( cache ); + } + }; + var dataPriv = new Data(); + + var dataUser = new Data(); + + + + // Implementation Summary + // + // 1. Enforce API surface and semantic compatibility with 1.9.x branch + // 2. Improve the module's maintainability by reducing the storage + // paths to a single mechanism. + // 3. Use the same single mechanism to support "private" and "user" data. + // 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) + // 5. Avoid exposing implementation details on user objects (eg. expando properties) + // 6. Provide a clear path for implementation upgrade to WeakMap in 2014 + + var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + rmultiDash = /[A-Z]/g; + + function dataAttr( elem, key, data ) { + var name; + + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = data === "true" ? true : + data === "false" ? false : + data === "null" ? null : + + // Only convert to a number if it doesn't change the string + +data + "" === data ? +data : + rbrace.test( data ) ? jQuery.parseJSON( data ) : + data; + } catch ( e ) {} + + // Make sure we set the data so it isn't changed later + dataUser.set( elem, key, data ); + } else { + data = undefined; + } + } + return data; + } + + jQuery.extend( { + hasData: function( elem ) { + return dataUser.hasData( elem ) || dataPriv.hasData( elem ); + }, + + data: function( elem, name, data ) { + return dataUser.access( elem, name, data ); + }, + + removeData: function( elem, name ) { + dataUser.remove( elem, name ); + }, + + // TODO: Now that all calls to _data and _removeData have been replaced + // with direct calls to dataPriv methods, these can be deprecated. + _data: function( elem, name, data ) { + return dataPriv.access( elem, name, data ); + }, + + _removeData: function( elem, name ) { + dataPriv.remove( elem, name ); + } + } ); + + jQuery.fn.extend( { + data: function( key, value ) { + var i, name, data, + elem = this[ 0 ], + attrs = elem && elem.attributes; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = dataUser.get( elem ); + + if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE11+ + // The attrs elements can be null (#14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = jQuery.camelCase( name.slice( 5 ) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + dataPriv.set( elem, "hasDataAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each( function() { + dataUser.set( this, key ); + } ); + } + + return access( this, function( value ) { + var data, camelKey; + + // The calling jQuery object (element matches) is not empty + // (and therefore has an element appears at this[ 0 ]) and the + // `value` parameter was not undefined. An empty jQuery object + // will result in `undefined` for elem = this[ 0 ] which will + // throw an exception if an attempt to read a data cache is made. + if ( elem && value === undefined ) { + + // Attempt to get data from the cache + // with the key as-is + data = dataUser.get( elem, key ) || + + // Try to find dashed key if it exists (gh-2779) + // This is for 2.2.x only + dataUser.get( elem, key.replace( rmultiDash, "-$&" ).toLowerCase() ); + + if ( data !== undefined ) { + return data; + } + + camelKey = jQuery.camelCase( key ); + + // Attempt to get data from the cache + // with the key camelized + data = dataUser.get( elem, camelKey ); + if ( data !== undefined ) { + return data; + } + + // Attempt to "discover" the data in + // HTML5 custom data-* attrs + data = dataAttr( elem, camelKey, undefined ); + if ( data !== undefined ) { + return data; + } + + // We tried really hard, but the data doesn't exist. + return; + } + + // Set the data... + camelKey = jQuery.camelCase( key ); + this.each( function() { + + // First, attempt to store a copy or reference of any + // data that might've been store with a camelCased key. + var data = dataUser.get( this, camelKey ); + + // For HTML5 data-* attribute interop, we have to + // store property names with dashes in a camelCase form. + // This might not apply to all properties...* + dataUser.set( this, camelKey, value ); + + // *... In the case of properties that might _actually_ + // have dashes, we need to also store a copy of that + // unchanged property. + if ( key.indexOf( "-" ) > -1 && data !== undefined ) { + dataUser.set( this, key, value ); + } + } ); + }, null, value, arguments.length > 1, null, true ); + }, + + removeData: function( key ) { + return this.each( function() { + dataUser.remove( this, key ); + } ); + } + } ); + + + jQuery.extend( { + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = dataPriv.get( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || jQuery.isArray( data ) ) { + queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // Clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // Not public - generate a queueHooks object, or return the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { + empty: jQuery.Callbacks( "once memory" ).add( function() { + dataPriv.remove( elem, [ type + "queue", key ] ); + } ) + } ); + } + } ); + + jQuery.fn.extend( { + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[ 0 ], type ); + } + + return data === undefined ? + this : + this.each( function() { + var queue = jQuery.queue( this, type, data ); + + // Ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + } ); + }, + dequeue: function( type ) { + return this.each( function() { + jQuery.dequeue( this, type ); + } ); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while ( i-- ) { + tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } + } ); + var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; + + var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); + + + var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + + var isHidden = function( elem, el ) { + + // isHidden might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + return jQuery.css( elem, "display" ) === "none" || + !jQuery.contains( elem.ownerDocument, elem ); + }; + + + + function adjustCSS( elem, prop, valueParts, tween ) { + var adjusted, + scale = 1, + maxIterations = 20, + currentValue = tween ? + function() { return tween.cur(); } : + function() { return jQuery.css( elem, prop, "" ); }, + initial = currentValue(), + unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), + + // Starting value computation is required for potential unit mismatches + initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && + rcssNum.exec( jQuery.css( elem, prop ) ); + + if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { + + // Trust units reported by jQuery.css + unit = unit || initialInUnit[ 3 ]; + + // Make sure we update the tween properties later on + valueParts = valueParts || []; + + // Iteratively approximate from a nonzero starting point + initialInUnit = +initial || 1; + + do { + + // If previous iteration zeroed out, double until we get *something*. + // Use string for doubling so we don't accidentally see scale as unchanged below + scale = scale || ".5"; + + // Adjust and apply + initialInUnit = initialInUnit / scale; + jQuery.style( elem, prop, initialInUnit + unit ); + + // Update scale, tolerating zero or NaN from tween.cur() + // Break the loop if scale is unchanged or perfect, or if we've just had enough. + } while ( + scale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations + ); + } + + if ( valueParts ) { + initialInUnit = +initialInUnit || +initial || 0; + + // Apply relative offset (+=/-=) if specified + adjusted = valueParts[ 1 ] ? + initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : + +valueParts[ 2 ]; + if ( tween ) { + tween.unit = unit; + tween.start = initialInUnit; + tween.end = adjusted; + } + } + return adjusted; + } + var rcheckableType = ( /^(?:checkbox|radio)$/i ); + + var rtagName = ( /<([\w:-]+)/ ); + + var rscriptType = ( /^$|\/(?:java|ecma)script/i ); + + + + // We have to close these tags to support XHTML (#13200) + var wrapMap = { + + // Support: IE9 + option: [ 1, "<select multiple='multiple'>", "</select>" ], + + // XHTML parsers do not magically insert elements in the + // same way that tag soup parsers do. So we cannot shorten + // this by omitting <tbody> or other required elements. + thead: [ 1, "<table>", "</table>" ], + col: [ 2, "<table><colgroup>", "</colgroup></table>" ], + tr: [ 2, "<table><tbody>", "</tbody></table>" ], + td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ], + + _default: [ 0, "", "" ] + }; + + // Support: IE9 + wrapMap.optgroup = wrapMap.option; + + wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; + wrapMap.th = wrapMap.td; + + + function getAll( context, tag ) { + + // Support: IE9-11+ + // Use typeof to avoid zero-argument method invocation on host objects (#15151) + var ret = typeof context.getElementsByTagName !== "undefined" ? + context.getElementsByTagName( tag || "*" ) : + typeof context.querySelectorAll !== "undefined" ? + context.querySelectorAll( tag || "*" ) : + []; + + return tag === undefined || tag && jQuery.nodeName( context, tag ) ? + jQuery.merge( [ context ], ret ) : + ret; + } + + + // Mark scripts as having already been evaluated + function setGlobalEval( elems, refElements ) { + var i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + dataPriv.set( + elems[ i ], + "globalEval", + !refElements || dataPriv.get( refElements[ i ], "globalEval" ) + ); + } + } + + + var rhtml = /<|&#?\w+;/; + + function buildFragment( elems, context, scripts, selection, ignored ) { + var elem, tmp, tag, wrap, contains, j, + fragment = context.createDocumentFragment(), + nodes = [], + i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( jQuery.type( elem ) === "object" ) { + + // Support: Android<4.1, PhantomJS<2 + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); + + // Deserialize a standard representation + tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; + + // Descend through wrappers to the right content + j = wrap[ 0 ]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Support: Android<4.1, PhantomJS<2 + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, tmp.childNodes ); + + // Remember the top-level container + tmp = fragment.firstChild; + + // Ensure the created nodes are orphaned (#12392) + tmp.textContent = ""; + } + } + } + + // Remove wrapper from fragment + fragment.textContent = ""; + + i = 0; + while ( ( elem = nodes[ i++ ] ) ) { + + // Skip elements already in the context collection (trac-4087) + if ( selection && jQuery.inArray( elem, selection ) > -1 ) { + if ( ignored ) { + ignored.push( elem ); + } + continue; + } + + contains = jQuery.contains( elem.ownerDocument, elem ); + + // Append to fragment + tmp = getAll( fragment.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( contains ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( ( elem = tmp[ j++ ] ) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + return fragment; + } + + + ( function() { + var fragment = document.createDocumentFragment(), + div = fragment.appendChild( document.createElement( "div" ) ), + input = document.createElement( "input" ); + + // Support: Android 4.0-4.3, Safari<=5.1 + // Check state lost if the name is set (#11217) + // Support: Windows Web Apps (WWA) + // `name` and `type` must use .setAttribute for WWA (#14901) + input.setAttribute( "type", "radio" ); + input.setAttribute( "checked", "checked" ); + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + + // Support: Safari<=5.1, Android<4.2 + // Older WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE<=11+ + // Make sure textarea (and checkbox) defaultValue is properly cloned + div.innerHTML = "<textarea>x</textarea>"; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; + } )(); + + + var + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, + rtypenamespace = /^([^.]*)(?:\.(.+)|)/; + + function returnTrue() { + return true; + } + + function returnFalse() { + return false; + } + + // Support: IE9 + // See #13393 for more info + function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } + } + + function on( elem, types, selector, data, fn, one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + on( elem, type, selector, data, types[ type ], one ); + } + return elem; + } + + if ( data == null && fn == null ) { + + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return elem; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return elem.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + } ); + } + + /* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ + jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + + var handleObjIn, eventHandle, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.get( elem ); + + // Don't attach events to noData or text/comment nodes (but allow plain objects) + if ( !elemData ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !( events = elemData.events ) ) { + events = elemData.events = {}; + } + if ( !( eventHandle = elemData.handle ) ) { + eventHandle = elemData.handle = function( e ) { + + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? + jQuery.event.dispatch.apply( elem, arguments ) : undefined; + }; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnotwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend( { + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join( "." ) + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !( handlers = events[ type ] ) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener if the special events handler returns false + if ( !special.setup || + special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var j, origCount, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); + + if ( !elemData || !( events = elemData.events ) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnotwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[ 2 ] && + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || + selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || + special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove data and the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + dataPriv.remove( elem, "handle events" ); + } + }, + + dispatch: function( event ) { + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( event ); + + var i, j, ret, matched, handleObj, + handlerQueue = [], + args = slice.call( arguments ), + handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[ 0 ] = event; + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( ( handleObj = matched.handlers[ j++ ] ) && + !event.isImmediatePropagationStopped() ) { + + // Triggered event must either 1) have no namespace, or 2) have namespace(s) + // a subset or equal to those in the bound event (both can have no namespace). + if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || + handleObj.handler ).apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( ( event.result = ret ) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var i, matches, sel, handleObj, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Support (at least): Chrome, IE9 + // Find delegate handlers + // Black-hole SVG <use> instance trees (#13180) + // + // Support: Firefox<=42+ + // Avoid non-left-click in FF but don't block IE radio events (#3861, gh-2343) + if ( delegateCount && cur.nodeType && + ( event.type !== "click" || isNaN( event.button ) || event.button < 1 ) ) { + + for ( ; cur !== this; cur = cur.parentNode || this ) { + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && ( cur.disabled !== true || event.type !== "click" ) ) { + matches = []; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matches[ sel ] === undefined ) { + matches[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) > -1 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matches[ sel ] ) { + matches.push( handleObj ); + } + } + if ( matches.length ) { + handlerQueue.push( { elem: cur, handlers: matches } ); + } + } + } + } + + // Add the remaining (directly-bound) handlers + if ( delegateCount < handlers.length ) { + handlerQueue.push( { elem: this, handlers: handlers.slice( delegateCount ) } ); + } + + return handlerQueue; + }, + + // Includes some event props shared by KeyEvent and MouseEvent + props: ( "altKey bubbles cancelable ctrlKey currentTarget detail eventPhase " + + "metaKey relatedTarget shiftKey target timeStamp view which" ).split( " " ), + + fixHooks: {}, + + keyHooks: { + props: "char charCode key keyCode".split( " " ), + filter: function( event, original ) { + + // Add which for key events + if ( event.which == null ) { + event.which = original.charCode != null ? original.charCode : original.keyCode; + } + + return event; + } + }, + + mouseHooks: { + props: ( "button buttons clientX clientY offsetX offsetY pageX pageY " + + "screenX screenY toElement" ).split( " " ), + filter: function( event, original ) { + var eventDoc, doc, body, + button = original.button; + + // Calculate pageX/Y if missing and clientX/Y available + if ( event.pageX == null && original.clientX != null ) { + eventDoc = event.target.ownerDocument || document; + doc = eventDoc.documentElement; + body = eventDoc.body; + + event.pageX = original.clientX + + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - + ( doc && doc.clientLeft || body && body.clientLeft || 0 ); + event.pageY = original.clientY + + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - + ( doc && doc.clientTop || body && body.clientTop || 0 ); + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + // Note: button is not normalized, so don't use it + if ( !event.which && button !== undefined ) { + event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); + } + + return event; + } + }, + + fix: function( event ) { + if ( event[ jQuery.expando ] ) { + return event; + } + + // Create a writable copy of the event object and normalize some properties + var i, prop, copy, + type = event.type, + originalEvent = event, + fixHook = this.fixHooks[ type ]; + + if ( !fixHook ) { + this.fixHooks[ type ] = fixHook = + rmouseEvent.test( type ) ? this.mouseHooks : + rkeyEvent.test( type ) ? this.keyHooks : + {}; + } + copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; + + event = new jQuery.Event( originalEvent ); + + i = copy.length; + while ( i-- ) { + prop = copy[ i ]; + event[ prop ] = originalEvent[ prop ]; + } + + // Support: Cordova 2.5 (WebKit) (#13255) + // All events should have a target; Cordova deviceready doesn't + if ( !event.target ) { + event.target = document; + } + + // Support: Safari 6.0+, Chrome<28 + // Target should not be a text node (#504, #13143) + if ( event.target.nodeType === 3 ) { + event.target = event.target.parentNode; + } + + return fixHook.filter ? fixHook.filter( event, originalEvent ) : event; + }, + + special: { + load: { + + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + focus: { + + // Fire native event if possible so blur/focus sequence is correct + trigger: function() { + if ( this !== safeActiveElement() && this.focus ) { + this.focus(); + return false; + } + }, + delegateType: "focusin" + }, + blur: { + trigger: function() { + if ( this === safeActiveElement() && this.blur ) { + this.blur(); + return false; + } + }, + delegateType: "focusout" + }, + click: { + + // For checkbox, fire native event so checked state will be right + trigger: function() { + if ( this.type === "checkbox" && this.click && jQuery.nodeName( this, "input" ) ) { + this.click(); + return false; + } + }, + + // For cross-browser consistency, don't fire native .click() on links + _default: function( event ) { + return jQuery.nodeName( event.target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Support: Firefox 20+ + // Firefox doesn't alert if the returnValue field is not set. + if ( event.result !== undefined && event.originalEvent ) { + event.originalEvent.returnValue = event.result; + } + } + } + } + }; + + jQuery.removeEvent = function( elem, type, handle ) { + + // This "if" is needed for plain objects + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle ); + } + }; + + jQuery.Event = function( src, props ) { + + // Allow instantiation without the 'new' keyword + if ( !( this instanceof jQuery.Event ) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = src.defaultPrevented || + src.defaultPrevented === undefined && + + // Support: Android<4.0 + src.returnValue === false ? + returnTrue : + returnFalse; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || jQuery.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; + }; + + // jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding + // http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html + jQuery.Event.prototype = { + constructor: jQuery.Event, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + + if ( e ) { + e.preventDefault(); + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + + if ( e ) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } + }; + + // Create mouseenter/leave events using mouseover/out and event-time checks + // so that event delegation works in jQuery. + // Do the same for pointerenter/pointerleave and pointerover/pointerout + // + // Support: Safari 7 only + // Safari sends mouseenter too often; see: + // https://code.google.com/p/chromium/issues/detail?id=470258 + // for the description of the bug (it existed in older Chrome versions as well). + jQuery.each( { + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" + }, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mouseenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; + } ); + + jQuery.fn.extend( { + on: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn ); + }, + one: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? + handleObj.origType + "." + handleObj.namespace : + handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each( function() { + jQuery.event.remove( this, types, fn, selector ); + } ); + } + } ); + + + var + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi, + + // Support: IE 10-11, Edge 10240+ + // In IE/Edge using regex groups here causes severe slowdowns. + // See https://connect.microsoft.com/IE/feedback/details/1736512/ + rnoInnerhtml = /<script|<style|<link/i, + + // checked="checked" or checked + rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, + rscriptTypeMasked = /^true\/(.*)/, + rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g; + + // Manipulating tables requires a tbody + function manipulationTarget( elem, content ) { + return jQuery.nodeName( elem, "table" ) && + jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ? + + elem.getElementsByTagName( "tbody" )[ 0 ] || + elem.appendChild( elem.ownerDocument.createElement( "tbody" ) ) : + elem; + } + + // Replace/restore the type attribute of script elements for safe DOM manipulation + function disableScript( elem ) { + elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; + return elem; + } + function restoreScript( elem ) { + var match = rscriptTypeMasked.exec( elem.type ); + + if ( match ) { + elem.type = match[ 1 ]; + } else { + elem.removeAttribute( "type" ); + } + + return elem; + } + + function cloneCopyEvent( src, dest ) { + var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events; + + if ( dest.nodeType !== 1 ) { + return; + } + + // 1. Copy private data: events, handlers, etc. + if ( dataPriv.hasData( src ) ) { + pdataOld = dataPriv.access( src ); + pdataCur = dataPriv.set( dest, pdataOld ); + events = pdataOld.events; + + if ( events ) { + delete pdataCur.handle; + pdataCur.events = {}; + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + } + + // 2. Copy user data + if ( dataUser.hasData( src ) ) { + udataOld = dataUser.access( src ); + udataCur = jQuery.extend( {}, udataOld ); + + dataUser.set( dest, udataCur ); + } + } + + // Fix IE bugs, see support tests + function fixInput( src, dest ) { + var nodeName = dest.nodeName.toLowerCase(); + + // Fails to persist the checked state of a cloned checkbox or radio button. + if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + dest.checked = src.checked; + + // Fails to return the selected option to the default selected state when cloning options + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } + } + + function domManip( collection, args, callback, ignored ) { + + // Flatten any nested arrays + args = concat.apply( [], args ); + + var fragment, first, scripts, hasScripts, node, doc, + i = 0, + l = collection.length, + iNoClone = l - 1, + value = args[ 0 ], + isFunction = jQuery.isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( isFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return collection.each( function( index ) { + var self = collection.eq( index ); + if ( isFunction ) { + args[ 0 ] = value.call( this, index, self.html() ); + } + domManip( self, args, callback, ignored ); + } ); + } + + if ( l ) { + fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + // Require either new content or an interest in ignored elements to invoke the callback + if ( first || ignored ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item + // instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + + // Support: Android<4.1, PhantomJS<2 + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( collection[ i ], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !dataPriv.access( node, "globalEval" ) && + jQuery.contains( doc, node ) ) { + + if ( node.src ) { + + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl ) { + jQuery._evalUrl( node.src ); + } + } else { + jQuery.globalEval( node.textContent.replace( rcleanScript, "" ) ); + } + } + } + } + } + } + + return collection; + } + + function remove( elem, selector, keepData ) { + var node, + nodes = selector ? jQuery.filter( selector, elem ) : elem, + i = 0; + + for ( ; ( node = nodes[ i ] ) != null; i++ ) { + if ( !keepData && node.nodeType === 1 ) { + jQuery.cleanData( getAll( node ) ); + } + + if ( node.parentNode ) { + if ( keepData && jQuery.contains( node.ownerDocument, node ) ) { + setGlobalEval( getAll( node, "script" ) ); + } + node.parentNode.removeChild( node ); + } + } + + return elem; + } + + jQuery.extend( { + htmlPrefilter: function( html ) { + return html.replace( rxhtmlTag, "<$1></$2>" ); + }, + + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var i, l, srcElements, destElements, + clone = elem.cloneNode( true ), + inPage = jQuery.contains( elem.ownerDocument, elem ); + + // Fix IE cloning issues + if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && + !jQuery.isXMLDoc( elem ) ) { + + // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + fixInput( srcElements[ i ], destElements[ i ] ); + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + cloneCopyEvent( srcElements[ i ], destElements[ i ] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + // Return the cloned set + return clone; + }, + + cleanData: function( elems ) { + var data, elem, type, + special = jQuery.event.special, + i = 0; + + for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { + if ( acceptData( elem ) ) { + if ( ( data = elem[ dataPriv.expando ] ) ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Support: Chrome <= 35-45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataPriv.expando ] = undefined; + } + if ( elem[ dataUser.expando ] ) { + + // Support: Chrome <= 35-45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataUser.expando ] = undefined; + } + } + } + } + } ); + + jQuery.fn.extend( { + + // Keep domManip exposed until 3.0 (gh-2225) + domManip: domManip, + + detach: function( selector ) { + return remove( this, selector, true ); + }, + + remove: function( selector ) { + return remove( this, selector ); + }, + + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().each( function() { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.textContent = value; + } + } ); + }, null, value, arguments.length ); + }, + + append: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + } ); + }, + + prepend: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + } ); + }, + + before: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + } ); + }, + + after: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + } ); + }, + + empty: function() { + var elem, + i = 0; + + for ( ; ( elem = this[ i ] ) != null; i++ ) { + if ( elem.nodeType === 1 ) { + + // Prevent memory leaks + jQuery.cleanData( getAll( elem, false ) ); + + // Remove any remaining nodes + elem.textContent = ""; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function() { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + } ); + }, + + html: function( value ) { + return access( this, function( value ) { + var elem = this[ 0 ] || {}, + i = 0, + l = this.length; + + if ( value === undefined && elem.nodeType === 1 ) { + return elem.innerHTML; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { + + value = jQuery.htmlPrefilter( value ); + + try { + for ( ; i < l; i++ ) { + elem = this[ i ] || {}; + + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch ( e ) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var ignored = []; + + // Make the changes, replacing each non-ignored context element with the new content + return domManip( this, arguments, function( elem ) { + var parent = this.parentNode; + + if ( jQuery.inArray( this, ignored ) < 0 ) { + jQuery.cleanData( getAll( this ) ); + if ( parent ) { + parent.replaceChild( elem, this ); + } + } + + // Force callback invocation + }, ignored ); + } + } ); + + jQuery.each( { + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" + }, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1, + i = 0; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone( true ); + jQuery( insert[ i ] )[ original ]( elems ); + + // Support: QtWebKit + // .get() because push.apply(_, arraylike) throws + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; + } ); + + + var iframe, + elemdisplay = { + + // Support: Firefox + // We have to pre-define these values for FF (#10227) + HTML: "block", + BODY: "block" + }; + + /** + * Retrieve the actual display of a element + * @param {String} name nodeName of the element + * @param {Object} doc Document object + */ + + // Called only from within defaultDisplay + function actualDisplay( name, doc ) { + var elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ), + + display = jQuery.css( elem[ 0 ], "display" ); + + // We don't have any data stored on the element, + // so use "detach" method as fast way to get rid of the element + elem.detach(); + + return display; + } + + /** + * Try to determine the default display value of an element + * @param {String} nodeName + */ + function defaultDisplay( nodeName ) { + var doc = document, + display = elemdisplay[ nodeName ]; + + if ( !display ) { + display = actualDisplay( nodeName, doc ); + + // If the simple way fails, read from inside an iframe + if ( display === "none" || !display ) { + + // Use the already-created iframe if possible + iframe = ( iframe || jQuery( "<iframe frameborder='0' width='0' height='0'/>" ) ) + .appendTo( doc.documentElement ); + + // Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse + doc = iframe[ 0 ].contentDocument; + + // Support: IE + doc.write(); + doc.close(); + + display = actualDisplay( nodeName, doc ); + iframe.detach(); + } + + // Store the correct default display + elemdisplay[ nodeName ] = display; + } + + return display; + } + var rmargin = ( /^margin/ ); + + var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); + + var getStyles = function( elem ) { + + // Support: IE<=11+, Firefox<=30+ (#15098, #14150) + // IE throws on elements created in popups + // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" + var view = elem.ownerDocument.defaultView; + + if ( !view || !view.opener ) { + view = window; + } + + return view.getComputedStyle( elem ); + }; + + var swap = function( elem, options, callback, args ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.apply( elem, args || [] ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; + }; + + + var documentElement = document.documentElement; + + + + ( function() { + var pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, reliableMarginLeftVal, + container = document.createElement( "div" ), + div = document.createElement( "div" ); + + // Finish early in limited (non-browser) environments + if ( !div.style ) { + return; + } + + // Support: IE9-11+ + // Style of cloned element affects source element cloned (#8908) + div.style.backgroundClip = "content-box"; + div.cloneNode( true ).style.backgroundClip = ""; + support.clearCloneStyle = div.style.backgroundClip === "content-box"; + + container.style.cssText = "border:0;width:8px;height:0;top:0;left:-9999px;" + + "padding:0;margin-top:1px;position:absolute"; + container.appendChild( div ); + + // Executing both pixelPosition & boxSizingReliable tests require only one layout + // so they're executed at the same time to save the second computation. + function computeStyleTests() { + div.style.cssText = + + // Support: Firefox<29, Android 2.3 + // Vendor-prefix box-sizing + "-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;" + + "position:relative;display:block;" + + "margin:auto;border:1px;padding:1px;" + + "top:1%;width:50%"; + div.innerHTML = ""; + documentElement.appendChild( container ); + + var divStyle = window.getComputedStyle( div ); + pixelPositionVal = divStyle.top !== "1%"; + reliableMarginLeftVal = divStyle.marginLeft === "2px"; + boxSizingReliableVal = divStyle.width === "4px"; + + // Support: Android 4.0 - 4.3 only + // Some styles come back with percentage values, even though they shouldn't + div.style.marginRight = "50%"; + pixelMarginRightVal = divStyle.marginRight === "4px"; + + documentElement.removeChild( container ); + } + + jQuery.extend( support, { + pixelPosition: function() { + + // This test is executed only once but we still do memoizing + // since we can use the boxSizingReliable pre-computing. + // No need to check if the test was already performed, though. + computeStyleTests(); + return pixelPositionVal; + }, + boxSizingReliable: function() { + if ( boxSizingReliableVal == null ) { + computeStyleTests(); + } + return boxSizingReliableVal; + }, + pixelMarginRight: function() { + + // Support: Android 4.0-4.3 + // We're checking for boxSizingReliableVal here instead of pixelMarginRightVal + // since that compresses better and they're computed together anyway. + if ( boxSizingReliableVal == null ) { + computeStyleTests(); + } + return pixelMarginRightVal; + }, + reliableMarginLeft: function() { + + // Support: IE <=8 only, Android 4.0 - 4.3 only, Firefox <=3 - 37 + if ( boxSizingReliableVal == null ) { + computeStyleTests(); + } + return reliableMarginLeftVal; + }, + reliableMarginRight: function() { + + // Support: Android 2.3 + // Check if div with explicit width and no margin-right incorrectly + // gets computed margin-right based on width of container. (#3333) + // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right + // This support function is only executed once so no memoizing is needed. + var ret, + marginDiv = div.appendChild( document.createElement( "div" ) ); + + // Reset CSS: box-sizing; display; margin; border; padding + marginDiv.style.cssText = div.style.cssText = + + // Support: Android 2.3 + // Vendor-prefix box-sizing + "-webkit-box-sizing:content-box;box-sizing:content-box;" + + "display:block;margin:0;border:0;padding:0"; + marginDiv.style.marginRight = marginDiv.style.width = "0"; + div.style.width = "1px"; + documentElement.appendChild( container ); + + ret = !parseFloat( window.getComputedStyle( marginDiv ).marginRight ); + + documentElement.removeChild( container ); + div.removeChild( marginDiv ); + + return ret; + } + } ); + } )(); + + + function curCSS( elem, name, computed ) { + var width, minWidth, maxWidth, ret, + style = elem.style; + + computed = computed || getStyles( elem ); + ret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined; + + // Support: Opera 12.1x only + // Fall back to style even without computed + // computed is undefined for elems on document fragments + if ( ( ret === "" || ret === undefined ) && !jQuery.contains( elem.ownerDocument, elem ) ) { + ret = jQuery.style( elem, name ); + } + + // Support: IE9 + // getPropertyValue is only needed for .css('filter') (#12537) + if ( computed ) { + + // A tribute to the "awesome hack by Dean Edwards" + // Android Browser returns percentage for some values, + // but width seems to be reliably pixels. + // This is against the CSSOM draft spec: + // http://dev.w3.org/csswg/cssom/#resolved-values + if ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) { + + // Remember the original values + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + // Put in the new values to get a computed value out + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + // Revert the changed values + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret !== undefined ? + + // Support: IE9-11+ + // IE returns zIndex value as an integer. + ret + "" : + ret; + } + + + function addGetHookIf( conditionFn, hookFn ) { + + // Define the hook, we'll check on the first run if it's really needed. + return { + get: function() { + if ( conditionFn() ) { + + // Hook not needed (or it's not possible to use it due + // to missing dependency), remove it. + delete this.get; + return; + } + + // Hook needed; redefine it so that the support test is not executed again. + return ( this.get = hookFn ).apply( this, arguments ); + } + }; + } + + + var + + // Swappable if display is none or starts with table + // except "table", "table-cell", or "table-caption" + // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: "0", + fontWeight: "400" + }, + + cssPrefixes = [ "Webkit", "O", "Moz", "ms" ], + emptyStyle = document.createElement( "div" ).style; + + // Return a css property mapped to a potentially vendor prefixed property + function vendorPropName( name ) { + + // Shortcut for names that are not vendor prefixed + if ( name in emptyStyle ) { + return name; + } + + // Check for vendor prefixed names + var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in emptyStyle ) { + return name; + } + } + } + + function setPositiveNumber( elem, value, subtract ) { + + // Any relative (+/-) values have already been + // normalized at this point + var matches = rcssNum.exec( value ); + return matches ? + + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : + value; + } + + function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) { + var i = extra === ( isBorderBox ? "border" : "content" ) ? + + // If we already have the right measurement, avoid augmentation + 4 : + + // Otherwise initialize for horizontal or vertical properties + name === "width" ? 1 : 0, + + val = 0; + + for ( ; i < 4; i += 2 ) { + + // Both box models exclude margin, so add it if we want it + if ( extra === "margin" ) { + val += jQuery.css( elem, extra + cssExpand[ i ], true, styles ); + } + + if ( isBorderBox ) { + + // border-box includes padding, so remove it if we want content + if ( extra === "content" ) { + val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // At this point, extra isn't border nor margin, so remove border + if ( extra !== "margin" ) { + val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } else { + + // At this point, extra isn't content, so add padding + val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // At this point, extra isn't content nor padding, so add border + if ( extra !== "padding" ) { + val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + return val; + } + + function getWidthOrHeight( elem, name, extra ) { + + // Start with offset property, which is equivalent to the border-box value + var valueIsBorderBox = true, + val = name === "width" ? elem.offsetWidth : elem.offsetHeight, + styles = getStyles( elem ), + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; + + // Support: IE11 only + // In IE 11 fullscreen elements inside of an iframe have + // 100x too small dimensions (gh-1764). + if ( document.msFullscreenElement && window.top !== window ) { + + // Support: IE11 only + // Running getBoundingClientRect on a disconnected node + // in IE throws an error. + if ( elem.getClientRects().length ) { + val = Math.round( elem.getBoundingClientRect()[ name ] * 100 ); + } + } + + // Some non-html elements return undefined for offsetWidth, so check for null/undefined + // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285 + // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668 + if ( val <= 0 || val == null ) { + + // Fall back to computed then uncomputed css if necessary + val = curCSS( elem, name, styles ); + if ( val < 0 || val == null ) { + val = elem.style[ name ]; + } + + // Computed unit is not pixels. Stop here and return. + if ( rnumnonpx.test( val ) ) { + return val; + } + + // Check for style in case a browser which returns unreliable values + // for getComputedStyle silently falls back to the reliable elem.style + valueIsBorderBox = isBorderBox && + ( support.boxSizingReliable() || val === elem.style[ name ] ); + + // Normalize "", auto, and prepare for extra + val = parseFloat( val ) || 0; + } + + // Use the active box-sizing model to add/subtract irrelevant styles + return ( val + + augmentWidthOrHeight( + elem, + name, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles + ) + ) + "px"; + } + + function showHide( elements, show ) { + var display, elem, hidden, + values = [], + index = 0, + length = elements.length; + + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + + values[ index ] = dataPriv.get( elem, "olddisplay" ); + display = elem.style.display; + if ( show ) { + + // Reset the inline display of this element to learn if it is + // being hidden by cascaded rules or not + if ( !values[ index ] && display === "none" ) { + elem.style.display = ""; + } + + // Set elements which have been overridden with display: none + // in a stylesheet to whatever the default browser style is + // for such an element + if ( elem.style.display === "" && isHidden( elem ) ) { + values[ index ] = dataPriv.access( + elem, + "olddisplay", + defaultDisplay( elem.nodeName ) + ); + } + } else { + hidden = isHidden( elem ); + + if ( display !== "none" || !hidden ) { + dataPriv.set( + elem, + "olddisplay", + hidden ? display : jQuery.css( elem, "display" ) + ); + } + } + } + + // Set the display of most of the elements in a second loop + // to avoid the constant reflow + for ( index = 0; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + if ( !show || elem.style.display === "none" || elem.style.display === "" ) { + elem.style.display = show ? values[ index ] || "" : "none"; + } + } + + return elements; + } + + jQuery.extend( { + + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + } + } + } + }, + + // Don't automatically add "px" to these possibly-unitless properties + cssNumber: { + "animationIterationCount": true, + "columnCount": true, + "fillOpacity": true, + "flexGrow": true, + "flexShrink": true, + "fontWeight": true, + "lineHeight": true, + "opacity": true, + "order": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: { + "float": "cssFloat" + }, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = jQuery.camelCase( name ), + style = elem.style; + + name = jQuery.cssProps[ origName ] || + ( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName ); + + // Gets hook for the prefixed version, then unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // Convert "+=" or "-=" to relative numbers (#7345) + if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { + value = adjustCSS( elem, name, ret ); + + // Fixes bug #9237 + type = "number"; + } + + // Make sure that null and NaN values aren't set (#7116) + if ( value == null || value !== value ) { + return; + } + + // If a number was passed in, add the unit (except for certain CSS properties) + if ( type === "number" ) { + value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); + } + + // Support: IE9-11+ + // background-* props affect original clone's values + if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { + style[ name ] = "inherit"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !( "set" in hooks ) || + ( value = hooks.set( elem, value, extra ) ) !== undefined ) { + + style[ name ] = value; + } + + } else { + + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && + ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { + + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, extra, styles ) { + var val, num, hooks, + origName = jQuery.camelCase( name ); + + // Make sure that we're working with the right name + name = jQuery.cssProps[ origName ] || + ( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName ); + + // Try prefixed name followed by the unprefixed name + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name, styles ); + } + + // Convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Make numeric if forced or a qualifier was provided and val looks numeric + if ( extra === "" || extra ) { + num = parseFloat( val ); + return extra === true || isFinite( num ) ? num || 0 : val; + } + return val; + } + } ); + + jQuery.each( [ "height", "width" ], function( i, name ) { + jQuery.cssHooks[ name ] = { + get: function( elem, computed, extra ) { + if ( computed ) { + + // Certain elements can have dimension info if we invisibly show them + // but it must have a current display style that would benefit + return rdisplayswap.test( jQuery.css( elem, "display" ) ) && + elem.offsetWidth === 0 ? + swap( elem, cssShow, function() { + return getWidthOrHeight( elem, name, extra ); + } ) : + getWidthOrHeight( elem, name, extra ); + } + }, + + set: function( elem, value, extra ) { + var matches, + styles = extra && getStyles( elem ), + subtract = extra && augmentWidthOrHeight( + elem, + name, + extra, + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + styles + ); + + // Convert to pixels if value adjustment is needed + if ( subtract && ( matches = rcssNum.exec( value ) ) && + ( matches[ 3 ] || "px" ) !== "px" ) { + + elem.style[ name ] = value; + value = jQuery.css( elem, name ); + } + + return setPositiveNumber( elem, value, subtract ); + } + }; + } ); + + jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, + function( elem, computed ) { + if ( computed ) { + return ( parseFloat( curCSS( elem, "marginLeft" ) ) || + elem.getBoundingClientRect().left - + swap( elem, { marginLeft: 0 }, function() { + return elem.getBoundingClientRect().left; + } ) + ) + "px"; + } + } + ); + + // Support: Android 2.3 + jQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight, + function( elem, computed ) { + if ( computed ) { + return swap( elem, { "display": "inline-block" }, + curCSS, [ elem, "marginRight" ] ); + } + } + ); + + // These hooks are used by animate to expand properties + jQuery.each( { + margin: "", + padding: "", + border: "Width" + }, function( prefix, suffix ) { + jQuery.cssHooks[ prefix + suffix ] = { + expand: function( value ) { + var i = 0, + expanded = {}, + + // Assumes a single number if not a string + parts = typeof value === "string" ? value.split( " " ) : [ value ]; + + for ( ; i < 4; i++ ) { + expanded[ prefix + cssExpand[ i ] + suffix ] = + parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; + } + + return expanded; + } + }; + + if ( !rmargin.test( prefix ) ) { + jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; + } + } ); + + jQuery.fn.extend( { + css: function( name, value ) { + return access( this, function( elem, name, value ) { + var styles, len, + map = {}, + i = 0; + + if ( jQuery.isArray( name ) ) { + styles = getStyles( elem ); + len = name.length; + + for ( ; i < len; i++ ) { + map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); + } + + return map; + } + + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + }, + show: function() { + return showHide( this, true ); + }, + hide: function() { + return showHide( this ); + }, + toggle: function( state ) { + if ( typeof state === "boolean" ) { + return state ? this.show() : this.hide(); + } + + return this.each( function() { + if ( isHidden( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + } ); + } + } ); + + + function Tween( elem, options, prop, end, easing ) { + return new Tween.prototype.init( elem, options, prop, end, easing ); + } + jQuery.Tween = Tween; + + Tween.prototype = { + constructor: Tween, + init: function( elem, options, prop, end, easing, unit ) { + this.elem = elem; + this.prop = prop; + this.easing = easing || jQuery.easing._default; + this.options = options; + this.start = this.now = this.cur(); + this.end = end; + this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + }, + cur: function() { + var hooks = Tween.propHooks[ this.prop ]; + + return hooks && hooks.get ? + hooks.get( this ) : + Tween.propHooks._default.get( this ); + }, + run: function( percent ) { + var eased, + hooks = Tween.propHooks[ this.prop ]; + + if ( this.options.duration ) { + this.pos = eased = jQuery.easing[ this.easing ]( + percent, this.options.duration * percent, 0, 1, this.options.duration + ); + } else { + this.pos = eased = percent; + } + this.now = ( this.end - this.start ) * eased + this.start; + + if ( this.options.step ) { + this.options.step.call( this.elem, this.now, this ); + } + + if ( hooks && hooks.set ) { + hooks.set( this ); + } else { + Tween.propHooks._default.set( this ); + } + return this; + } + }; + + Tween.prototype.init.prototype = Tween.prototype; + + Tween.propHooks = { + _default: { + get: function( tween ) { + var result; + + // Use a property on the element directly when it is not a DOM element, + // or when there is no matching style property that exists. + if ( tween.elem.nodeType !== 1 || + tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { + return tween.elem[ tween.prop ]; + } + + // Passing an empty string as a 3rd parameter to .css will automatically + // attempt a parseFloat and fallback to a string if the parse fails. + // Simple values such as "10px" are parsed to Float; + // complex values such as "rotate(1rad)" are returned as-is. + result = jQuery.css( tween.elem, tween.prop, "" ); + + // Empty strings, null, undefined and "auto" are converted to 0. + return !result || result === "auto" ? 0 : result; + }, + set: function( tween ) { + + // Use step hook for back compat. + // Use cssHook if its there. + // Use .style if available and use plain properties where available. + if ( jQuery.fx.step[ tween.prop ] ) { + jQuery.fx.step[ tween.prop ]( tween ); + } else if ( tween.elem.nodeType === 1 && + ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || + jQuery.cssHooks[ tween.prop ] ) ) { + jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); + } else { + tween.elem[ tween.prop ] = tween.now; + } + } + } + }; + + // Support: IE9 + // Panic based approach to setting things on disconnected nodes + Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { + set: function( tween ) { + if ( tween.elem.nodeType && tween.elem.parentNode ) { + tween.elem[ tween.prop ] = tween.now; + } + } + }; + + jQuery.easing = { + linear: function( p ) { + return p; + }, + swing: function( p ) { + return 0.5 - Math.cos( p * Math.PI ) / 2; + }, + _default: "swing" + }; + + jQuery.fx = Tween.prototype.init; + + // Back Compat <1.8 extension point + jQuery.fx.step = {}; + + + + + var + fxNow, timerId, + rfxtypes = /^(?:toggle|show|hide)$/, + rrun = /queueHooks$/; + + // Animations created synchronously will run synchronously + function createFxNow() { + window.setTimeout( function() { + fxNow = undefined; + } ); + return ( fxNow = jQuery.now() ); + } + + // Generate parameters to create a standard animation + function genFx( type, includeWidth ) { + var which, + i = 0, + attrs = { height: type }; + + // If we include width, step value is 1 to do all cssExpand values, + // otherwise step value is 2 to skip over Left and Right + includeWidth = includeWidth ? 1 : 0; + for ( ; i < 4 ; i += 2 - includeWidth ) { + which = cssExpand[ i ]; + attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; + } + + if ( includeWidth ) { + attrs.opacity = attrs.width = type; + } + + return attrs; + } + + function createTween( value, prop, animation ) { + var tween, + collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), + index = 0, + length = collection.length; + for ( ; index < length; index++ ) { + if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { + + // We're done with this property + return tween; + } + } + } + + function defaultPrefilter( elem, props, opts ) { + /* jshint validthis: true */ + var prop, value, toggle, tween, hooks, oldfire, display, checkDisplay, + anim = this, + orig = {}, + style = elem.style, + hidden = elem.nodeType && isHidden( elem ), + dataShow = dataPriv.get( elem, "fxshow" ); + + // Handle queue: false promises + if ( !opts.queue ) { + hooks = jQuery._queueHooks( elem, "fx" ); + if ( hooks.unqueued == null ) { + hooks.unqueued = 0; + oldfire = hooks.empty.fire; + hooks.empty.fire = function() { + if ( !hooks.unqueued ) { + oldfire(); + } + }; + } + hooks.unqueued++; + + anim.always( function() { + + // Ensure the complete handler is called before this completes + anim.always( function() { + hooks.unqueued--; + if ( !jQuery.queue( elem, "fx" ).length ) { + hooks.empty.fire(); + } + } ); + } ); + } + + // Height/width overflow pass + if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) { + + // Make sure that nothing sneaks out + // Record all 3 overflow attributes because IE9-10 do not + // change the overflow attribute when overflowX and + // overflowY are set to the same value + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + + // Set display property to inline-block for height/width + // animations on inline elements that are having width/height animated + display = jQuery.css( elem, "display" ); + + // Test default display if display is currently "none" + checkDisplay = display === "none" ? + dataPriv.get( elem, "olddisplay" ) || defaultDisplay( elem.nodeName ) : display; + + if ( checkDisplay === "inline" && jQuery.css( elem, "float" ) === "none" ) { + style.display = "inline-block"; + } + } + + if ( opts.overflow ) { + style.overflow = "hidden"; + anim.always( function() { + style.overflow = opts.overflow[ 0 ]; + style.overflowX = opts.overflow[ 1 ]; + style.overflowY = opts.overflow[ 2 ]; + } ); + } + + // show/hide pass + for ( prop in props ) { + value = props[ prop ]; + if ( rfxtypes.exec( value ) ) { + delete props[ prop ]; + toggle = toggle || value === "toggle"; + if ( value === ( hidden ? "hide" : "show" ) ) { + + // If there is dataShow left over from a stopped hide or show + // and we are going to proceed with show, we should pretend to be hidden + if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { + hidden = true; + } else { + continue; + } + } + orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); + + // Any non-fx value stops us from restoring the original display value + } else { + display = undefined; + } + } + + if ( !jQuery.isEmptyObject( orig ) ) { + if ( dataShow ) { + if ( "hidden" in dataShow ) { + hidden = dataShow.hidden; + } + } else { + dataShow = dataPriv.access( elem, "fxshow", {} ); + } + + // Store state if its toggle - enables .stop().toggle() to "reverse" + if ( toggle ) { + dataShow.hidden = !hidden; + } + if ( hidden ) { + jQuery( elem ).show(); + } else { + anim.done( function() { + jQuery( elem ).hide(); + } ); + } + anim.done( function() { + var prop; + + dataPriv.remove( elem, "fxshow" ); + for ( prop in orig ) { + jQuery.style( elem, prop, orig[ prop ] ); + } + } ); + for ( prop in orig ) { + tween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); + + if ( !( prop in dataShow ) ) { + dataShow[ prop ] = tween.start; + if ( hidden ) { + tween.end = tween.start; + tween.start = prop === "width" || prop === "height" ? 1 : 0; + } + } + } + + // If this is a noop like .hide().hide(), restore an overwritten display value + } else if ( ( display === "none" ? defaultDisplay( elem.nodeName ) : display ) === "inline" ) { + style.display = display; + } + } + + function propFilter( props, specialEasing ) { + var index, name, easing, value, hooks; + + // camelCase, specialEasing and expand cssHook pass + for ( index in props ) { + name = jQuery.camelCase( index ); + easing = specialEasing[ name ]; + value = props[ index ]; + if ( jQuery.isArray( value ) ) { + easing = value[ 1 ]; + value = props[ index ] = value[ 0 ]; + } + + if ( index !== name ) { + props[ name ] = value; + delete props[ index ]; + } + + hooks = jQuery.cssHooks[ name ]; + if ( hooks && "expand" in hooks ) { + value = hooks.expand( value ); + delete props[ name ]; + + // Not quite $.extend, this won't overwrite existing keys. + // Reusing 'index' because we have the correct "name" + for ( index in value ) { + if ( !( index in props ) ) { + props[ index ] = value[ index ]; + specialEasing[ index ] = easing; + } + } + } else { + specialEasing[ name ] = easing; + } + } + } + + function Animation( elem, properties, options ) { + var result, + stopped, + index = 0, + length = Animation.prefilters.length, + deferred = jQuery.Deferred().always( function() { + + // Don't match elem in the :animated selector + delete tick.elem; + } ), + tick = function() { + if ( stopped ) { + return false; + } + var currentTime = fxNow || createFxNow(), + remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), + + // Support: Android 2.3 + // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) + temp = remaining / animation.duration || 0, + percent = 1 - temp, + index = 0, + length = animation.tweens.length; + + for ( ; index < length ; index++ ) { + animation.tweens[ index ].run( percent ); + } + + deferred.notifyWith( elem, [ animation, percent, remaining ] ); + + if ( percent < 1 && length ) { + return remaining; + } else { + deferred.resolveWith( elem, [ animation ] ); + return false; + } + }, + animation = deferred.promise( { + elem: elem, + props: jQuery.extend( {}, properties ), + opts: jQuery.extend( true, { + specialEasing: {}, + easing: jQuery.easing._default + }, options ), + originalProperties: properties, + originalOptions: options, + startTime: fxNow || createFxNow(), + duration: options.duration, + tweens: [], + createTween: function( prop, end ) { + var tween = jQuery.Tween( elem, animation.opts, prop, end, + animation.opts.specialEasing[ prop ] || animation.opts.easing ); + animation.tweens.push( tween ); + return tween; + }, + stop: function( gotoEnd ) { + var index = 0, + + // If we are going to the end, we want to run all the tweens + // otherwise we skip this part + length = gotoEnd ? animation.tweens.length : 0; + if ( stopped ) { + return this; + } + stopped = true; + for ( ; index < length ; index++ ) { + animation.tweens[ index ].run( 1 ); + } + + // Resolve when we played the last frame; otherwise, reject + if ( gotoEnd ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + deferred.resolveWith( elem, [ animation, gotoEnd ] ); + } else { + deferred.rejectWith( elem, [ animation, gotoEnd ] ); + } + return this; + } + } ), + props = animation.props; + + propFilter( props, animation.opts.specialEasing ); + + for ( ; index < length ; index++ ) { + result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); + if ( result ) { + if ( jQuery.isFunction( result.stop ) ) { + jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = + jQuery.proxy( result.stop, result ); + } + return result; + } + } + + jQuery.map( props, createTween, animation ); + + if ( jQuery.isFunction( animation.opts.start ) ) { + animation.opts.start.call( elem, animation ); + } + + jQuery.fx.timer( + jQuery.extend( tick, { + elem: elem, + anim: animation, + queue: animation.opts.queue + } ) + ); + + // attach callbacks from options + return animation.progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); + } + + jQuery.Animation = jQuery.extend( Animation, { + tweeners: { + "*": [ function( prop, value ) { + var tween = this.createTween( prop, value ); + adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); + return tween; + } ] + }, + + tweener: function( props, callback ) { + if ( jQuery.isFunction( props ) ) { + callback = props; + props = [ "*" ]; + } else { + props = props.match( rnotwhite ); + } + + var prop, + index = 0, + length = props.length; + + for ( ; index < length ; index++ ) { + prop = props[ index ]; + Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; + Animation.tweeners[ prop ].unshift( callback ); + } + }, + + prefilters: [ defaultPrefilter ], + + prefilter: function( callback, prepend ) { + if ( prepend ) { + Animation.prefilters.unshift( callback ); + } else { + Animation.prefilters.push( callback ); + } + } + } ); + + jQuery.speed = function( speed, easing, fn ) { + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { + complete: fn || !fn && easing || + jQuery.isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing + }; + + opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? + opt.duration : opt.duration in jQuery.fx.speeds ? + jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default; + + // Normalize opt.queue - true/undefined/null -> "fx" + if ( opt.queue == null || opt.queue === true ) { + opt.queue = "fx"; + } + + // Queueing + opt.old = opt.complete; + + opt.complete = function() { + if ( jQuery.isFunction( opt.old ) ) { + opt.old.call( this ); + } + + if ( opt.queue ) { + jQuery.dequeue( this, opt.queue ); + } + }; + + return opt; + }; + + jQuery.fn.extend( { + fadeTo: function( speed, to, easing, callback ) { + + // Show any hidden elements after setting opacity to 0 + return this.filter( isHidden ).css( "opacity", 0 ).show() + + // Animate to the value specified + .end().animate( { opacity: to }, speed, easing, callback ); + }, + animate: function( prop, speed, easing, callback ) { + var empty = jQuery.isEmptyObject( prop ), + optall = jQuery.speed( speed, easing, callback ), + doAnimation = function() { + + // Operate on a copy of prop so per-property easing won't be lost + var anim = Animation( this, jQuery.extend( {}, prop ), optall ); + + // Empty animations, or finishing resolves immediately + if ( empty || dataPriv.get( this, "finish" ) ) { + anim.stop( true ); + } + }; + doAnimation.finish = doAnimation; + + return empty || optall.queue === false ? + this.each( doAnimation ) : + this.queue( optall.queue, doAnimation ); + }, + stop: function( type, clearQueue, gotoEnd ) { + var stopQueue = function( hooks ) { + var stop = hooks.stop; + delete hooks.stop; + stop( gotoEnd ); + }; + + if ( typeof type !== "string" ) { + gotoEnd = clearQueue; + clearQueue = type; + type = undefined; + } + if ( clearQueue && type !== false ) { + this.queue( type || "fx", [] ); + } + + return this.each( function() { + var dequeue = true, + index = type != null && type + "queueHooks", + timers = jQuery.timers, + data = dataPriv.get( this ); + + if ( index ) { + if ( data[ index ] && data[ index ].stop ) { + stopQueue( data[ index ] ); + } + } else { + for ( index in data ) { + if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { + stopQueue( data[ index ] ); + } + } + } + + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && + ( type == null || timers[ index ].queue === type ) ) { + + timers[ index ].anim.stop( gotoEnd ); + dequeue = false; + timers.splice( index, 1 ); + } + } + + // Start the next in the queue if the last step wasn't forced. + // Timers currently will call their complete callbacks, which + // will dequeue but only if they were gotoEnd. + if ( dequeue || !gotoEnd ) { + jQuery.dequeue( this, type ); + } + } ); + }, + finish: function( type ) { + if ( type !== false ) { + type = type || "fx"; + } + return this.each( function() { + var index, + data = dataPriv.get( this ), + queue = data[ type + "queue" ], + hooks = data[ type + "queueHooks" ], + timers = jQuery.timers, + length = queue ? queue.length : 0; + + // Enable finishing flag on private data + data.finish = true; + + // Empty the queue first + jQuery.queue( this, type, [] ); + + if ( hooks && hooks.stop ) { + hooks.stop.call( this, true ); + } + + // Look for any active animations, and finish them + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && timers[ index ].queue === type ) { + timers[ index ].anim.stop( true ); + timers.splice( index, 1 ); + } + } + + // Look for any animations in the old queue and finish them + for ( index = 0; index < length; index++ ) { + if ( queue[ index ] && queue[ index ].finish ) { + queue[ index ].finish.call( this ); + } + } + + // Turn off finishing flag + delete data.finish; + } ); + } + } ); + + jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) { + var cssFn = jQuery.fn[ name ]; + jQuery.fn[ name ] = function( speed, easing, callback ) { + return speed == null || typeof speed === "boolean" ? + cssFn.apply( this, arguments ) : + this.animate( genFx( name, true ), speed, easing, callback ); + }; + } ); + + // Generate shortcuts for custom animations + jQuery.each( { + slideDown: genFx( "show" ), + slideUp: genFx( "hide" ), + slideToggle: genFx( "toggle" ), + fadeIn: { opacity: "show" }, + fadeOut: { opacity: "hide" }, + fadeToggle: { opacity: "toggle" } + }, function( name, props ) { + jQuery.fn[ name ] = function( speed, easing, callback ) { + return this.animate( props, speed, easing, callback ); + }; + } ); + + jQuery.timers = []; + jQuery.fx.tick = function() { + var timer, + i = 0, + timers = jQuery.timers; + + fxNow = jQuery.now(); + + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + + // Checks the timer has not already been removed + if ( !timer() && timers[ i ] === timer ) { + timers.splice( i--, 1 ); + } + } + + if ( !timers.length ) { + jQuery.fx.stop(); + } + fxNow = undefined; + }; + + jQuery.fx.timer = function( timer ) { + jQuery.timers.push( timer ); + if ( timer() ) { + jQuery.fx.start(); + } else { + jQuery.timers.pop(); + } + }; + + jQuery.fx.interval = 13; + jQuery.fx.start = function() { + if ( !timerId ) { + timerId = window.setInterval( jQuery.fx.tick, jQuery.fx.interval ); + } + }; + + jQuery.fx.stop = function() { + window.clearInterval( timerId ); + + timerId = null; + }; + + jQuery.fx.speeds = { + slow: 600, + fast: 200, + + // Default speed + _default: 400 + }; + + + // Based off of the plugin by Clint Helfers, with permission. + // http://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ + jQuery.fn.delay = function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = window.setTimeout( next, time ); + hooks.stop = function() { + window.clearTimeout( timeout ); + }; + } ); + }; + + + ( function() { + var input = document.createElement( "input" ), + select = document.createElement( "select" ), + opt = select.appendChild( document.createElement( "option" ) ); + + input.type = "checkbox"; + + // Support: iOS<=5.1, Android<=4.2+ + // Default value for a checkbox should be "on" + support.checkOn = input.value !== ""; + + // Support: IE<=11+ + // Must access selectedIndex to make default options select + support.optSelected = opt.selected; + + // Support: Android<=2.3 + // Options inside disabled selects are incorrectly marked as disabled + select.disabled = true; + support.optDisabled = !opt.disabled; + + // Support: IE<=11+ + // An input loses its value after becoming a radio + input = document.createElement( "input" ); + input.value = "t"; + input.type = "radio"; + support.radioValue = input.value === "t"; + } )(); + + + var boolHook, + attrHandle = jQuery.expr.attrHandle; + + jQuery.fn.extend( { + attr: function( name, value ) { + return access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each( function() { + jQuery.removeAttr( this, name ); + } ); + } + } ); + + jQuery.extend( { + attr: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set attributes on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + // All attributes are lowercase + // Grab necessary hook if one is defined + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + name = name.toLowerCase(); + hooks = jQuery.attrHooks[ name ] || + ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); + } + + if ( value !== undefined ) { + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + } + + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + elem.setAttribute( name, value + "" ); + return value; + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + ret = jQuery.find.attr( elem, name ); + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? undefined : ret; + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !support.radioValue && value === "radio" && + jQuery.nodeName( elem, "input" ) ) { + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + }, + + removeAttr: function( elem, value ) { + var name, propName, + i = 0, + attrNames = value && value.match( rnotwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( ( name = attrNames[ i++ ] ) ) { + propName = jQuery.propFix[ name ] || name; + + // Boolean attributes get special treatment (#10870) + if ( jQuery.expr.match.bool.test( name ) ) { + + // Set corresponding property to false + elem[ propName ] = false; + } + + elem.removeAttribute( name ); + } + } + } + } ); + + // Hooks for boolean attributes + boolHook = { + set: function( elem, value, name ) { + if ( value === false ) { + + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + elem.setAttribute( name, name ); + } + return name; + } + }; + jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) { + var getter = attrHandle[ name ] || jQuery.find.attr; + + attrHandle[ name ] = function( elem, name, isXML ) { + var ret, handle; + if ( !isXML ) { + + // Avoid an infinite loop by temporarily removing this function from the getter + handle = attrHandle[ name ]; + attrHandle[ name ] = ret; + ret = getter( elem, name, isXML ) != null ? + name.toLowerCase() : + null; + attrHandle[ name ] = handle; + } + return ret; + }; + } ); + + + + + var rfocusable = /^(?:input|select|textarea|button)$/i, + rclickable = /^(?:a|area)$/i; + + jQuery.fn.extend( { + prop: function( name, value ) { + return access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + return this.each( function() { + delete this[ jQuery.propFix[ name ] || name ]; + } ); + } + } ); + + jQuery.extend( { + prop: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set properties on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + return ( elem[ name ] = value ); + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + return elem[ name ]; + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + + // elem.tabIndex doesn't always return the + // correct value when it hasn't been explicitly set + // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + // Use proper attribute retrieval(#12072) + var tabindex = jQuery.find.attr( elem, "tabindex" ); + + return tabindex ? + parseInt( tabindex, 10 ) : + rfocusable.test( elem.nodeName ) || + rclickable.test( elem.nodeName ) && elem.href ? + 0 : + -1; + } + } + }, + + propFix: { + "for": "htmlFor", + "class": "className" + } + } ); + + // Support: IE <=11 only + // Accessing the selectedIndex property + // forces the browser to respect setting selected + // on the option + // The getter ensures a default option is selected + // when in an optgroup + if ( !support.optSelected ) { + jQuery.propHooks.selected = { + get: function( elem ) { + var parent = elem.parentNode; + if ( parent && parent.parentNode ) { + parent.parentNode.selectedIndex; + } + return null; + }, + set: function( elem ) { + var parent = elem.parentNode; + if ( parent ) { + parent.selectedIndex; + + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + } + }; + } + + jQuery.each( [ + "tabIndex", + "readOnly", + "maxLength", + "cellSpacing", + "cellPadding", + "rowSpan", + "colSpan", + "useMap", + "frameBorder", + "contentEditable" + ], function() { + jQuery.propFix[ this.toLowerCase() ] = this; + } ); + + + + + var rclass = /[\t\r\n\f]/g; + + function getClass( elem ) { + return elem.getAttribute && elem.getAttribute( "class" ) || ""; + } + + jQuery.fn.extend( { + addClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( jQuery.isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( typeof value === "string" && value ) { + classes = value.match( rnotwhite ) || []; + + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + cur = elem.nodeType === 1 && + ( " " + curValue + " " ).replace( rclass, " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + if ( cur.indexOf( " " + clazz + " " ) < 0 ) { + cur += clazz + " "; + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = jQuery.trim( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( jQuery.isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( !arguments.length ) { + return this.attr( "class", "" ); + } + + if ( typeof value === "string" && value ) { + classes = value.match( rnotwhite ) || []; + + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + + // This expression is here for better compressibility (see addClass) + cur = elem.nodeType === 1 && + ( " " + curValue + " " ).replace( rclass, " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + + // Remove *all* instances + while ( cur.indexOf( " " + clazz + " " ) > -1 ) { + cur = cur.replace( " " + clazz + " ", " " ); + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = jQuery.trim( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value; + + if ( typeof stateVal === "boolean" && type === "string" ) { + return stateVal ? this.addClass( value ) : this.removeClass( value ); + } + + if ( jQuery.isFunction( value ) ) { + return this.each( function( i ) { + jQuery( this ).toggleClass( + value.call( this, i, getClass( this ), stateVal ), + stateVal + ); + } ); + } + + return this.each( function() { + var className, i, self, classNames; + + if ( type === "string" ) { + + // Toggle individual class names + i = 0; + self = jQuery( this ); + classNames = value.match( rnotwhite ) || []; + + while ( ( className = classNames[ i++ ] ) ) { + + // Check each className given, space separated list + if ( self.hasClass( className ) ) { + self.removeClass( className ); + } else { + self.addClass( className ); + } + } + + // Toggle whole class name + } else if ( value === undefined || type === "boolean" ) { + className = getClass( this ); + if ( className ) { + + // Store className if set + dataPriv.set( this, "__className__", className ); + } + + // If the element has a class name or if we're passed `false`, + // then remove the whole classname (if there was one, the above saved it). + // Otherwise bring back whatever was previously saved (if anything), + // falling back to the empty string if nothing was stored. + if ( this.setAttribute ) { + this.setAttribute( "class", + className || value === false ? + "" : + dataPriv.get( this, "__className__" ) || "" + ); + } + } + } ); + }, + + hasClass: function( selector ) { + var className, elem, + i = 0; + + className = " " + selector + " "; + while ( ( elem = this[ i++ ] ) ) { + if ( elem.nodeType === 1 && + ( " " + getClass( elem ) + " " ).replace( rclass, " " ) + .indexOf( className ) > -1 + ) { + return true; + } + } + + return false; + } + } ); + + + + + var rreturn = /\r/g, + rspaces = /[\x20\t\r\n\f]+/g; + + jQuery.fn.extend( { + val: function( value ) { + var hooks, ret, isFunction, + elem = this[ 0 ]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || + jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && + "get" in hooks && + ( ret = hooks.get( elem, "value" ) ) !== undefined + ) { + return ret; + } + + ret = elem.value; + + return typeof ret === "string" ? + + // Handle most common string cases + ret.replace( rreturn, "" ) : + + // Handle cases where value is null/undef or number + ret == null ? "" : ret; + } + + return; + } + + isFunction = jQuery.isFunction( value ); + + return this.each( function( i ) { + var val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( isFunction ) { + val = value.call( this, i, jQuery( this ).val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + + } else if ( typeof val === "number" ) { + val += ""; + + } else if ( jQuery.isArray( val ) ) { + val = jQuery.map( val, function( value ) { + return value == null ? "" : value + ""; + } ); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + } ); + } + } ); + + jQuery.extend( { + valHooks: { + option: { + get: function( elem ) { + + var val = jQuery.find.attr( elem, "value" ); + return val != null ? + val : + + // Support: IE10-11+ + // option.text throws exceptions (#14686, #14858) + // Strip and collapse whitespace + // https://html.spec.whatwg.org/#strip-and-collapse-whitespace + jQuery.trim( jQuery.text( elem ) ).replace( rspaces, " " ); + } + }, + select: { + get: function( elem ) { + var value, option, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one" || index < 0, + values = one ? null : [], + max = one ? index + 1 : options.length, + i = index < 0 ? + max : + one ? index : 0; + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // IE8-9 doesn't update selected after form reset (#2551) + if ( ( option.selected || i === index ) && + + // Don't return options that are disabled or in a disabled optgroup + ( support.optDisabled ? + !option.disabled : option.getAttribute( "disabled" ) === null ) && + ( !option.parentNode.disabled || + !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + }, + + set: function( elem, value ) { + var optionSet, option, + options = elem.options, + values = jQuery.makeArray( value ), + i = options.length; + + while ( i-- ) { + option = options[ i ]; + if ( option.selected = + jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 + ) { + optionSet = true; + } + } + + // Force browsers to behave consistently when non-matching value is set + if ( !optionSet ) { + elem.selectedIndex = -1; + } + return values; + } + } + } + } ); + + // Radios and checkboxes getter/setter + jQuery.each( [ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + set: function( elem, value ) { + if ( jQuery.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); + } + } + }; + if ( !support.checkOn ) { + jQuery.valHooks[ this ].get = function( elem ) { + return elem.getAttribute( "value" ) === null ? "on" : elem.value; + }; + } + } ); + + + + + // Return jQuery for attributes-only inclusion + + + var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/; + + jQuery.extend( jQuery.event, { + + trigger: function( event, data, elem, onlyHandlers ) { + + var i, cur, tmp, bubbleType, ontype, handle, special, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; + + cur = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "." ) > -1 ) { + + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split( "." ); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf( ":" ) < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join( "." ); + event.rnamespace = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === ( elem.ownerDocument || document ) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { + + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] && + dataPriv.get( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && acceptData( cur ) ) { + event.result = handle.apply( cur, data ); + if ( event.result === false ) { + event.preventDefault(); + } + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( ( !special._default || + special._default.apply( eventPath.pop(), data ) === false ) && + acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name name as the event. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + elem[ type ](); + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + // Piggyback on a donor event to simulate a different one + simulate: function( type, elem, event ) { + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true + + // Previously, `originalEvent: {}` was set here, so stopPropagation call + // would not be triggered on donor event, since in our own + // jQuery.event.stopPropagation function we had a check for existence of + // originalEvent.stopPropagation method, so, consequently it would be a noop. + // + // But now, this "simulate" function is used only for events + // for which stopPropagation() is noop, so there is no need for that anymore. + // + // For the 1.x branch though, guard for "click" and "submit" + // events is still used, but was moved to jQuery.event.stopPropagation function + // because `originalEvent` should point to the original event for the constancy + // with other events and for more focused logic + } + ); + + jQuery.event.trigger( e, null, elem ); + + if ( e.isDefaultPrevented() ) { + event.preventDefault(); + } + } + + } ); + + jQuery.fn.extend( { + + trigger: function( type, data ) { + return this.each( function() { + jQuery.event.trigger( type, data, this ); + } ); + }, + triggerHandler: function( type, data ) { + var elem = this[ 0 ]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } + } ); + + + jQuery.each( ( "blur focus focusin focusout load resize scroll unload click dblclick " + + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + + "change select submit keydown keypress keyup error contextmenu" ).split( " " ), + function( i, name ) { + + // Handle event binding + jQuery.fn[ name ] = function( data, fn ) { + return arguments.length > 0 ? + this.on( name, null, data, fn ) : + this.trigger( name ); + }; + } ); + + jQuery.fn.extend( { + hover: function( fnOver, fnOut ) { + return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); + } + } ); + + + + + support.focusin = "onfocusin" in window; + + + // Support: Firefox + // Firefox doesn't have focus(in | out) events + // Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 + // + // Support: Chrome, Safari + // focus(in | out) events fire after focus & blur events, + // which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order + // Related ticket - https://code.google.com/p/chromium/issues/detail?id=449857 + if ( !support.focusin ) { + jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler on the document while someone wants focusin/focusout + var handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + var doc = this.ownerDocument || this, + attaches = dataPriv.access( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this, + attaches = dataPriv.access( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + dataPriv.remove( doc, fix ); + + } else { + dataPriv.access( doc, fix, attaches ); + } + } + }; + } ); + } + var location = window.location; + + var nonce = jQuery.now(); + + var rquery = ( /\?/ ); + + + + // Support: Android 2.3 + // Workaround failure to string-cast null input + jQuery.parseJSON = function( data ) { + return JSON.parse( data + "" ); + }; + + + // Cross-browser xml parsing + jQuery.parseXML = function( data ) { + var xml; + if ( !data || typeof data !== "string" ) { + return null; + } + + // Support: IE9 + try { + xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); + } catch ( e ) { + xml = undefined; + } + + if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; + }; + + + var + rhash = /#.*$/, + rts = /([?&])_=[^&]*/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, + + // #7653, #8125, #8152: local protocol detection + rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + + /* Prefilters + * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) + * 2) These are called: + * - BEFORE asking for a transport + * - AFTER param serialization (s.data is a string if s.processData is true) + * 3) key is the dataType + * 4) the catchall symbol "*" can be used + * 5) execution will start with transport dataType and THEN continue down to "*" if needed + */ + prefilters = {}, + + /* Transports bindings + * 1) key is the dataType + * 2) the catchall symbol "*" can be used + * 3) selection will start with transport dataType and THEN go to "*" if needed + */ + transports = {}, + + // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression + allTypes = "*/".concat( "*" ), + + // Anchor tag for parsing the document origin + originAnchor = document.createElement( "a" ); + originAnchor.href = location.href; + + // Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport + function addToPrefiltersOrTransports( structure ) { + + // dataTypeExpression is optional and defaults to "*" + return function( dataTypeExpression, func ) { + + if ( typeof dataTypeExpression !== "string" ) { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + var dataType, + i = 0, + dataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || []; + + if ( jQuery.isFunction( func ) ) { + + // For each dataType in the dataTypeExpression + while ( ( dataType = dataTypes[ i++ ] ) ) { + + // Prepend if requested + if ( dataType[ 0 ] === "+" ) { + dataType = dataType.slice( 1 ) || "*"; + ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); + + // Otherwise append + } else { + ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); + } + } + } + }; + } + + // Base inspection function for prefilters and transports + function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { + + var inspected = {}, + seekingTransport = ( structure === transports ); + + function inspect( dataType ) { + var selected; + inspected[ dataType ] = true; + jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { + var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); + if ( typeof dataTypeOrTransport === "string" && + !seekingTransport && !inspected[ dataTypeOrTransport ] ) { + + options.dataTypes.unshift( dataTypeOrTransport ); + inspect( dataTypeOrTransport ); + return false; + } else if ( seekingTransport ) { + return !( selected = dataTypeOrTransport ); + } + } ); + return selected; + } + + return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); + } + + // A special extend for ajax options + // that takes "flat" options (not to be deep extended) + // Fixes #9887 + function ajaxExtend( target, src ) { + var key, deep, + flatOptions = jQuery.ajaxSettings.flatOptions || {}; + + for ( key in src ) { + if ( src[ key ] !== undefined ) { + ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; + } + } + if ( deep ) { + jQuery.extend( true, target, deep ); + } + + return target; + } + + /* Handles responses to an ajax request: + * - finds the right dataType (mediates between content-type and expected dataType) + * - returns the corresponding response + */ + function ajaxHandleResponses( s, jqXHR, responses ) { + + var ct, type, finalDataType, firstDataType, + contents = s.contents, + dataTypes = s.dataTypes; + + // Remove auto dataType and get content-type in the process + while ( dataTypes[ 0 ] === "*" ) { + dataTypes.shift(); + if ( ct === undefined ) { + ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); + } + } + + // Check if we're dealing with a known content-type + if ( ct ) { + for ( type in contents ) { + if ( contents[ type ] && contents[ type ].test( ct ) ) { + dataTypes.unshift( type ); + break; + } + } + } + + // Check to see if we have a response for the expected dataType + if ( dataTypes[ 0 ] in responses ) { + finalDataType = dataTypes[ 0 ]; + } else { + + // Try convertible dataTypes + for ( type in responses ) { + if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { + finalDataType = type; + break; + } + if ( !firstDataType ) { + firstDataType = type; + } + } + + // Or just use first one + finalDataType = finalDataType || firstDataType; + } + + // If we found a dataType + // We add the dataType to the list if needed + // and return the corresponding response + if ( finalDataType ) { + if ( finalDataType !== dataTypes[ 0 ] ) { + dataTypes.unshift( finalDataType ); + } + return responses[ finalDataType ]; + } + } + + /* Chain conversions given the request and the original response + * Also sets the responseXXX fields on the jqXHR instance + */ + function ajaxConvert( s, response, jqXHR, isSuccess ) { + var conv2, current, conv, tmp, prev, + converters = {}, + + // Work with a copy of dataTypes in case we need to modify it for conversion + dataTypes = s.dataTypes.slice(); + + // Create converters map with lowercased keys + if ( dataTypes[ 1 ] ) { + for ( conv in s.converters ) { + converters[ conv.toLowerCase() ] = s.converters[ conv ]; + } + } + + current = dataTypes.shift(); + + // Convert to each sequential dataType + while ( current ) { + + if ( s.responseFields[ current ] ) { + jqXHR[ s.responseFields[ current ] ] = response; + } + + // Apply the dataFilter if provided + if ( !prev && isSuccess && s.dataFilter ) { + response = s.dataFilter( response, s.dataType ); + } + + prev = current; + current = dataTypes.shift(); + + if ( current ) { + + // There's only work to do if current dataType is non-auto + if ( current === "*" ) { + + current = prev; + + // Convert response if prev dataType is non-auto and differs from current + } else if ( prev !== "*" && prev !== current ) { + + // Seek a direct converter + conv = converters[ prev + " " + current ] || converters[ "* " + current ]; + + // If none found, seek a pair + if ( !conv ) { + for ( conv2 in converters ) { + + // If conv2 outputs current + tmp = conv2.split( " " ); + if ( tmp[ 1 ] === current ) { + + // If prev can be converted to accepted input + conv = converters[ prev + " " + tmp[ 0 ] ] || + converters[ "* " + tmp[ 0 ] ]; + if ( conv ) { + + // Condense equivalence converters + if ( conv === true ) { + conv = converters[ conv2 ]; + + // Otherwise, insert the intermediate dataType + } else if ( converters[ conv2 ] !== true ) { + current = tmp[ 0 ]; + dataTypes.unshift( tmp[ 1 ] ); + } + break; + } + } + } + } + + // Apply converter (if not an equivalence) + if ( conv !== true ) { + + // Unless errors are allowed to bubble, catch and return them + if ( conv && s.throws ) { + response = conv( response ); + } else { + try { + response = conv( response ); + } catch ( e ) { + return { + state: "parsererror", + error: conv ? e : "No conversion from " + prev + " to " + current + }; + } + } + } + } + } + } + + return { state: "success", data: response }; + } + + jQuery.extend( { + + // Counter for holding the number of active queries + active: 0, + + // Last-Modified header cache for next request + lastModified: {}, + etag: {}, + + ajaxSettings: { + url: location.href, + type: "GET", + isLocal: rlocalProtocol.test( location.protocol ), + global: true, + processData: true, + async: true, + contentType: "application/x-www-form-urlencoded; charset=UTF-8", + /* + timeout: 0, + data: null, + dataType: null, + username: null, + password: null, + cache: null, + throws: false, + traditional: false, + headers: {}, + */ + + accepts: { + "*": allTypes, + text: "text/plain", + html: "text/html", + xml: "application/xml, text/xml", + json: "application/json, text/javascript" + }, + + contents: { + xml: /\bxml\b/, + html: /\bhtml/, + json: /\bjson\b/ + }, + + responseFields: { + xml: "responseXML", + text: "responseText", + json: "responseJSON" + }, + + // Data converters + // Keys separate source (or catchall "*") and destination types with a single space + converters: { + + // Convert anything to text + "* text": String, + + // Text to html (true = no transformation) + "text html": true, + + // Evaluate text as a json expression + "text json": jQuery.parseJSON, + + // Parse text as xml + "text xml": jQuery.parseXML + }, + + // For options that shouldn't be deep extended: + // you can add your own custom options here if + // and when you create one that shouldn't be + // deep extended (see ajaxExtend) + flatOptions: { + url: true, + context: true + } + }, + + // Creates a full fledged settings object into target + // with both ajaxSettings and settings fields. + // If target is omitted, writes into ajaxSettings. + ajaxSetup: function( target, settings ) { + return settings ? + + // Building a settings object + ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : + + // Extending ajaxSettings + ajaxExtend( jQuery.ajaxSettings, target ); + }, + + ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), + ajaxTransport: addToPrefiltersOrTransports( transports ), + + // Main method + ajax: function( url, options ) { + + // If url is an object, simulate pre-1.5 signature + if ( typeof url === "object" ) { + options = url; + url = undefined; + } + + // Force options to be an object + options = options || {}; + + var transport, + + // URL without anti-cache param + cacheURL, + + // Response headers + responseHeadersString, + responseHeaders, + + // timeout handle + timeoutTimer, + + // Url cleanup var + urlAnchor, + + // To know if global events are to be dispatched + fireGlobals, + + // Loop variable + i, + + // Create the final options object + s = jQuery.ajaxSetup( {}, options ), + + // Callbacks context + callbackContext = s.context || s, + + // Context for global events is callbackContext if it is a DOM node or jQuery collection + globalEventContext = s.context && + ( callbackContext.nodeType || callbackContext.jquery ) ? + jQuery( callbackContext ) : + jQuery.event, + + // Deferreds + deferred = jQuery.Deferred(), + completeDeferred = jQuery.Callbacks( "once memory" ), + + // Status-dependent callbacks + statusCode = s.statusCode || {}, + + // Headers (they are sent all at once) + requestHeaders = {}, + requestHeadersNames = {}, + + // The jqXHR state + state = 0, + + // Default abort message + strAbort = "canceled", + + // Fake xhr + jqXHR = { + readyState: 0, + + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( state === 2 ) { + if ( !responseHeaders ) { + responseHeaders = {}; + while ( ( match = rheaders.exec( responseHeadersString ) ) ) { + responseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ]; + } + } + match = responseHeaders[ key.toLowerCase() ]; + } + return match == null ? null : match; + }, + + // Raw string + getAllResponseHeaders: function() { + return state === 2 ? responseHeadersString : null; + }, + + // Caches the header + setRequestHeader: function( name, value ) { + var lname = name.toLowerCase(); + if ( !state ) { + name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( !state ) { + s.mimeType = type; + } + return this; + }, + + // Status-dependent callbacks + statusCode: function( map ) { + var code; + if ( map ) { + if ( state < 2 ) { + for ( code in map ) { + + // Lazy-add the new callback in a way that preserves old ones + statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; + } + } else { + + // Execute the appropriate callbacks + jqXHR.always( map[ jqXHR.status ] ); + } + } + return this; + }, + + // Cancel the request + abort: function( statusText ) { + var finalText = statusText || strAbort; + if ( transport ) { + transport.abort( finalText ); + } + done( 0, finalText ); + return this; + } + }; + + // Attach deferreds + deferred.promise( jqXHR ).complete = completeDeferred.add; + jqXHR.success = jqXHR.done; + jqXHR.error = jqXHR.fail; + + // Remove hash character (#7531: and string promotion) + // Add protocol if not provided (prefilters might expect it) + // Handle falsy url in the settings object (#10093: consistency with old signature) + // We also use the url parameter if available + s.url = ( ( url || s.url || location.href ) + "" ).replace( rhash, "" ) + .replace( rprotocol, location.protocol + "//" ); + + // Alias method option to type as per ticket #12004 + s.type = options.method || options.type || s.method || s.type; + + // Extract dataTypes list + s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().match( rnotwhite ) || [ "" ]; + + // A cross-domain request is in order when the origin doesn't match the current origin. + if ( s.crossDomain == null ) { + urlAnchor = document.createElement( "a" ); + + // Support: IE8-11+ + // IE throws exception if url is malformed, e.g. http://example.com:80x/ + try { + urlAnchor.href = s.url; + + // Support: IE8-11+ + // Anchor's host property isn't correctly set when s.url is relative + urlAnchor.href = urlAnchor.href; + s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== + urlAnchor.protocol + "//" + urlAnchor.host; + } catch ( e ) { + + // If there is an error parsing the URL, assume it is crossDomain, + // it can be rejected by the transport if it is invalid + s.crossDomain = true; + } + } + + // Convert data if not already a string + if ( s.data && s.processData && typeof s.data !== "string" ) { + s.data = jQuery.param( s.data, s.traditional ); + } + + // Apply prefilters + inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); + + // If request was aborted inside a prefilter, stop there + if ( state === 2 ) { + return jqXHR; + } + + // We can fire global events as of now if asked to + // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) + fireGlobals = jQuery.event && s.global; + + // Watch for a new set of requests + if ( fireGlobals && jQuery.active++ === 0 ) { + jQuery.event.trigger( "ajaxStart" ); + } + + // Uppercase the type + s.type = s.type.toUpperCase(); + + // Determine if request has content + s.hasContent = !rnoContent.test( s.type ); + + // Save the URL in case we're toying with the If-Modified-Since + // and/or If-None-Match header later on + cacheURL = s.url; + + // More options handling for requests with no content + if ( !s.hasContent ) { + + // If data is available, append data to url + if ( s.data ) { + cacheURL = ( s.url += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data ); + + // #9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Add anti-cache in url if needed + if ( s.cache === false ) { + s.url = rts.test( cacheURL ) ? + + // If there is already a '_' parameter, set its value + cacheURL.replace( rts, "$1_=" + nonce++ ) : + + // Otherwise add one to the end + cacheURL + ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + nonce++; + } + } + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + if ( jQuery.lastModified[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); + } + if ( jQuery.etag[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); + } + } + + // Set the correct header, if data is being sent + if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { + jqXHR.setRequestHeader( "Content-Type", s.contentType ); + } + + // Set the Accepts header for the server, depending on the dataType + jqXHR.setRequestHeader( + "Accept", + s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? + s.accepts[ s.dataTypes[ 0 ] ] + + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : + s.accepts[ "*" ] + ); + + // Check for headers option + for ( i in s.headers ) { + jqXHR.setRequestHeader( i, s.headers[ i ] ); + } + + // Allow custom headers/mimetypes and early abort + if ( s.beforeSend && + ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) { + + // Abort if not done already and return + return jqXHR.abort(); + } + + // Aborting is no longer a cancellation + strAbort = "abort"; + + // Install callbacks on deferreds + for ( i in { success: 1, error: 1, complete: 1 } ) { + jqXHR[ i ]( s[ i ] ); + } + + // Get transport + transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); + + // If no transport, we auto-abort + if ( !transport ) { + done( -1, "No Transport" ); + } else { + jqXHR.readyState = 1; + + // Send global event + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); + } + + // If request was aborted inside ajaxSend, stop there + if ( state === 2 ) { + return jqXHR; + } + + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = window.setTimeout( function() { + jqXHR.abort( "timeout" ); + }, s.timeout ); + } + + try { + state = 1; + transport.send( requestHeaders, done ); + } catch ( e ) { + + // Propagate exception as error if not done + if ( state < 2 ) { + done( -1, e ); + + // Simply rethrow otherwise + } else { + throw e; + } + } + } + + // Callback for when everything is done + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; + + // Called once + if ( state === 2 ) { + return; + } + + // State is "done" now + state = 2; + + // Clear timeout if it exists + if ( timeoutTimer ) { + window.clearTimeout( timeoutTimer ); + } + + // Dereference transport for early garbage collection + // (no matter how long the jqXHR object will be used) + transport = undefined; + + // Cache response headers + responseHeadersString = headers || ""; + + // Set readyState + jqXHR.readyState = status > 0 ? 4 : 0; + + // Determine if successful + isSuccess = status >= 200 && status < 300 || status === 304; + + // Get response data + if ( responses ) { + response = ajaxHandleResponses( s, jqXHR, responses ); + } + + // Convert no matter what (that way responseXXX fields are always set) + response = ajaxConvert( s, response, jqXHR, isSuccess ); + + // If successful, handle type chaining + if ( isSuccess ) { + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + modified = jqXHR.getResponseHeader( "Last-Modified" ); + if ( modified ) { + jQuery.lastModified[ cacheURL ] = modified; + } + modified = jqXHR.getResponseHeader( "etag" ); + if ( modified ) { + jQuery.etag[ cacheURL ] = modified; + } + } + + // if no content + if ( status === 204 || s.type === "HEAD" ) { + statusText = "nocontent"; + + // if not modified + } else if ( status === 304 ) { + statusText = "notmodified"; + + // If we have data, let's convert it + } else { + statusText = response.state; + success = response.data; + error = response.error; + isSuccess = !error; + } + } else { + + // Extract error from statusText and normalize for non-aborts + error = statusText; + if ( status || !statusText ) { + statusText = "error"; + if ( status < 0 ) { + status = 0; + } + } + } + + // Set data for the fake xhr object + jqXHR.status = status; + jqXHR.statusText = ( nativeStatusText || statusText ) + ""; + + // Success/Error + if ( isSuccess ) { + deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); + } else { + deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); + } + + // Status-dependent callbacks + jqXHR.statusCode( statusCode ); + statusCode = undefined; + + if ( fireGlobals ) { + globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", + [ jqXHR, s, isSuccess ? success : error ] ); + } + + // Complete + completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); + + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); + + // Handle the global AJAX counter + if ( !( --jQuery.active ) ) { + jQuery.event.trigger( "ajaxStop" ); + } + } + } + + return jqXHR; + }, + + getJSON: function( url, data, callback ) { + return jQuery.get( url, data, callback, "json" ); + }, + + getScript: function( url, callback ) { + return jQuery.get( url, undefined, callback, "script" ); + } + } ); + + jQuery.each( [ "get", "post" ], function( i, method ) { + jQuery[ method ] = function( url, data, callback, type ) { + + // Shift arguments if data argument was omitted + if ( jQuery.isFunction( data ) ) { + type = type || callback; + callback = data; + data = undefined; + } + + // The url can be an options object (which then must have .url) + return jQuery.ajax( jQuery.extend( { + url: url, + type: method, + dataType: type, + data: data, + success: callback + }, jQuery.isPlainObject( url ) && url ) ); + }; + } ); + + + jQuery._evalUrl = function( url ) { + return jQuery.ajax( { + url: url, + + // Make this explicit, since user can override this through ajaxSetup (#11264) + type: "GET", + dataType: "script", + async: false, + global: false, + "throws": true + } ); + }; + + + jQuery.fn.extend( { + wrapAll: function( html ) { + var wrap; + + if ( jQuery.isFunction( html ) ) { + return this.each( function( i ) { + jQuery( this ).wrapAll( html.call( this, i ) ); + } ); + } + + if ( this[ 0 ] ) { + + // The elements to wrap the target around + wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); + + if ( this[ 0 ].parentNode ) { + wrap.insertBefore( this[ 0 ] ); + } + + wrap.map( function() { + var elem = this; + + while ( elem.firstElementChild ) { + elem = elem.firstElementChild; + } + + return elem; + } ).append( this ); + } + + return this; + }, + + wrapInner: function( html ) { + if ( jQuery.isFunction( html ) ) { + return this.each( function( i ) { + jQuery( this ).wrapInner( html.call( this, i ) ); + } ); + } + + return this.each( function() { + var self = jQuery( this ), + contents = self.contents(); + + if ( contents.length ) { + contents.wrapAll( html ); + + } else { + self.append( html ); + } + } ); + }, + + wrap: function( html ) { + var isFunction = jQuery.isFunction( html ); + + return this.each( function( i ) { + jQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html ); + } ); + }, + + unwrap: function() { + return this.parent().each( function() { + if ( !jQuery.nodeName( this, "body" ) ) { + jQuery( this ).replaceWith( this.childNodes ); + } + } ).end(); + } + } ); + + + jQuery.expr.filters.hidden = function( elem ) { + return !jQuery.expr.filters.visible( elem ); + }; + jQuery.expr.filters.visible = function( elem ) { + + // Support: Opera <= 12.12 + // Opera reports offsetWidths and offsetHeights less than zero on some elements + // Use OR instead of AND as the element is not visible if either is true + // See tickets #10406 and #13132 + return elem.offsetWidth > 0 || elem.offsetHeight > 0 || elem.getClientRects().length > 0; + }; + + + + + var r20 = /%20/g, + rbracket = /\[\]$/, + rCRLF = /\r?\n/g, + rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, + rsubmittable = /^(?:input|select|textarea|keygen)/i; + + function buildParams( prefix, obj, traditional, add ) { + var name; + + if ( jQuery.isArray( obj ) ) { + + // Serialize array item. + jQuery.each( obj, function( i, v ) { + if ( traditional || rbracket.test( prefix ) ) { + + // Treat each array item as a scalar. + add( prefix, v ); + + } else { + + // Item is non-scalar (array or object), encode its numeric index. + buildParams( + prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", + v, + traditional, + add + ); + } + } ); + + } else if ( !traditional && jQuery.type( obj ) === "object" ) { + + // Serialize object item. + for ( name in obj ) { + buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); + } + + } else { + + // Serialize scalar item. + add( prefix, obj ); + } + } + + // Serialize an array of form elements or a set of + // key/values into a query string + jQuery.param = function( a, traditional ) { + var prefix, + s = [], + add = function( key, value ) { + + // If value is a function, invoke it and return its value + value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value ); + s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value ); + }; + + // Set traditional to true for jQuery <= 1.3.2 behavior. + if ( traditional === undefined ) { + traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional; + } + + // If an array was passed in, assume that it is an array of form elements. + if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { + + // Serialize the form elements + jQuery.each( a, function() { + add( this.name, this.value ); + } ); + + } else { + + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for ( prefix in a ) { + buildParams( prefix, a[ prefix ], traditional, add ); + } + } + + // Return the resulting serialization + return s.join( "&" ).replace( r20, "+" ); + }; + + jQuery.fn.extend( { + serialize: function() { + return jQuery.param( this.serializeArray() ); + }, + serializeArray: function() { + return this.map( function() { + + // Can add propHook for "elements" to filter or add form elements + var elements = jQuery.prop( this, "elements" ); + return elements ? jQuery.makeArray( elements ) : this; + } ) + .filter( function() { + var type = this.type; + + // Use .is( ":disabled" ) so that fieldset[disabled] works + return this.name && !jQuery( this ).is( ":disabled" ) && + rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && + ( this.checked || !rcheckableType.test( type ) ); + } ) + .map( function( i, elem ) { + var val = jQuery( this ).val(); + + return val == null ? + null : + jQuery.isArray( val ) ? + jQuery.map( val, function( val ) { + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ) : + { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ).get(); + } + } ); + + + jQuery.ajaxSettings.xhr = function() { + try { + return new window.XMLHttpRequest(); + } catch ( e ) {} + }; + + var xhrSuccessStatus = { + + // File protocol always yields status code 0, assume 200 + 0: 200, + + // Support: IE9 + // #1450: sometimes IE returns 1223 when it should be 204 + 1223: 204 + }, + xhrSupported = jQuery.ajaxSettings.xhr(); + + support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); + support.ajax = xhrSupported = !!xhrSupported; + + jQuery.ajaxTransport( function( options ) { + var callback, errorCallback; + + // Cross domain only allowed if supported through XMLHttpRequest + if ( support.cors || xhrSupported && !options.crossDomain ) { + return { + send: function( headers, complete ) { + var i, + xhr = options.xhr(); + + xhr.open( + options.type, + options.url, + options.async, + options.username, + options.password + ); + + // Apply custom fields if provided + if ( options.xhrFields ) { + for ( i in options.xhrFields ) { + xhr[ i ] = options.xhrFields[ i ]; + } + } + + // Override mime type if needed + if ( options.mimeType && xhr.overrideMimeType ) { + xhr.overrideMimeType( options.mimeType ); + } + + // X-Requested-With header + // For cross-domain requests, seeing as conditions for a preflight are + // akin to a jigsaw puzzle, we simply never set it to be sure. + // (it can always be set on a per-request basis or even using ajaxSetup) + // For same-domain requests, won't change header if already provided. + if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { + headers[ "X-Requested-With" ] = "XMLHttpRequest"; + } + + // Set headers + for ( i in headers ) { + xhr.setRequestHeader( i, headers[ i ] ); + } + + // Callback + callback = function( type ) { + return function() { + if ( callback ) { + callback = errorCallback = xhr.onload = + xhr.onerror = xhr.onabort = xhr.onreadystatechange = null; + + if ( type === "abort" ) { + xhr.abort(); + } else if ( type === "error" ) { + + // Support: IE9 + // On a manual native abort, IE9 throws + // errors on any property access that is not readyState + if ( typeof xhr.status !== "number" ) { + complete( 0, "error" ); + } else { + complete( + + // File: protocol always yields status 0; see #8605, #14207 + xhr.status, + xhr.statusText + ); + } + } else { + complete( + xhrSuccessStatus[ xhr.status ] || xhr.status, + xhr.statusText, + + // Support: IE9 only + // IE9 has no XHR2 but throws on binary (trac-11426) + // For XHR2 non-text, let the caller handle it (gh-2498) + ( xhr.responseType || "text" ) !== "text" || + typeof xhr.responseText !== "string" ? + { binary: xhr.response } : + { text: xhr.responseText }, + xhr.getAllResponseHeaders() + ); + } + } + }; + }; + + // Listen to events + xhr.onload = callback(); + errorCallback = xhr.onerror = callback( "error" ); + + // Support: IE9 + // Use onreadystatechange to replace onabort + // to handle uncaught aborts + if ( xhr.onabort !== undefined ) { + xhr.onabort = errorCallback; + } else { + xhr.onreadystatechange = function() { + + // Check readyState before timeout as it changes + if ( xhr.readyState === 4 ) { + + // Allow onerror to be called first, + // but that will not handle a native abort + // Also, save errorCallback to a variable + // as xhr.onerror cannot be accessed + window.setTimeout( function() { + if ( callback ) { + errorCallback(); + } + } ); + } + }; + } + + // Create the abort callback + callback = callback( "abort" ); + + try { + + // Do send the request (this may raise an exception) + xhr.send( options.hasContent && options.data || null ); + } catch ( e ) { + + // #14683: Only rethrow if this hasn't been notified as an error yet + if ( callback ) { + throw e; + } + } + }, + + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } + } ); + + + + + // Install script dataType + jQuery.ajaxSetup( { + accepts: { + script: "text/javascript, application/javascript, " + + "application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /\b(?:java|ecma)script\b/ + }, + converters: { + "text script": function( text ) { + jQuery.globalEval( text ); + return text; + } + } + } ); + + // Handle cache's special case and crossDomain + jQuery.ajaxPrefilter( "script", function( s ) { + if ( s.cache === undefined ) { + s.cache = false; + } + if ( s.crossDomain ) { + s.type = "GET"; + } + } ); + + // Bind script tag hack transport + jQuery.ajaxTransport( "script", function( s ) { + + // This transport only deals with cross domain requests + if ( s.crossDomain ) { + var script, callback; + return { + send: function( _, complete ) { + script = jQuery( "<script>" ).prop( { + charset: s.scriptCharset, + src: s.url + } ).on( + "load error", + callback = function( evt ) { + script.remove(); + callback = null; + if ( evt ) { + complete( evt.type === "error" ? 404 : 200, evt.type ); + } + } + ); + + // Use native DOM manipulation to avoid our domManip AJAX trickery + document.head.appendChild( script[ 0 ] ); + }, + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } + } ); + + + + + var oldCallbacks = [], + rjsonp = /(=)\?(?=&|$)|\?\?/; + + // Default jsonp settings + jQuery.ajaxSetup( { + jsonp: "callback", + jsonpCallback: function() { + var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) ); + this[ callback ] = true; + return callback; + } + } ); + + // Detect, normalize options and install callbacks for jsonp requests + jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) { + + var callbackName, overwritten, responseContainer, + jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ? + "url" : + typeof s.data === "string" && + ( s.contentType || "" ) + .indexOf( "application/x-www-form-urlencoded" ) === 0 && + rjsonp.test( s.data ) && "data" + ); + + // Handle iff the expected data type is "jsonp" or we have a parameter to set + if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) { + + // Get callback name, remembering preexisting value associated with it + callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ? + s.jsonpCallback() : + s.jsonpCallback; + + // Insert callback into url or form data + if ( jsonProp ) { + s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName ); + } else if ( s.jsonp !== false ) { + s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName; + } + + // Use data converter to retrieve json after script execution + s.converters[ "script json" ] = function() { + if ( !responseContainer ) { + jQuery.error( callbackName + " was not called" ); + } + return responseContainer[ 0 ]; + }; + + // Force json dataType + s.dataTypes[ 0 ] = "json"; + + // Install callback + overwritten = window[ callbackName ]; + window[ callbackName ] = function() { + responseContainer = arguments; + }; + + // Clean-up function (fires after converters) + jqXHR.always( function() { + + // If previous value didn't exist - remove it + if ( overwritten === undefined ) { + jQuery( window ).removeProp( callbackName ); + + // Otherwise restore preexisting value + } else { + window[ callbackName ] = overwritten; + } + + // Save back as free + if ( s[ callbackName ] ) { + + // Make sure that re-using the options doesn't screw things around + s.jsonpCallback = originalSettings.jsonpCallback; + + // Save the callback name for future use + oldCallbacks.push( callbackName ); + } + + // Call if it was a function and we have a response + if ( responseContainer && jQuery.isFunction( overwritten ) ) { + overwritten( responseContainer[ 0 ] ); + } + + responseContainer = overwritten = undefined; + } ); + + // Delegate to script + return "script"; + } + } ); + + + + + // Argument "data" should be string of html + // context (optional): If specified, the fragment will be created in this context, + // defaults to document + // keepScripts (optional): If true, will include scripts passed in the html string + jQuery.parseHTML = function( data, context, keepScripts ) { + if ( !data || typeof data !== "string" ) { + return null; + } + if ( typeof context === "boolean" ) { + keepScripts = context; + context = false; + } + context = context || document; + + var parsed = rsingleTag.exec( data ), + scripts = !keepScripts && []; + + // Single tag + if ( parsed ) { + return [ context.createElement( parsed[ 1 ] ) ]; + } + + parsed = buildFragment( [ data ], context, scripts ); + + if ( scripts && scripts.length ) { + jQuery( scripts ).remove(); + } + + return jQuery.merge( [], parsed.childNodes ); + }; + + + // Keep a copy of the old load method + var _load = jQuery.fn.load; + + /** + * Load a url into a page + */ + jQuery.fn.load = function( url, params, callback ) { + if ( typeof url !== "string" && _load ) { + return _load.apply( this, arguments ); + } + + var selector, type, response, + self = this, + off = url.indexOf( " " ); + + if ( off > -1 ) { + selector = jQuery.trim( url.slice( off ) ); + url = url.slice( 0, off ); + } + + // If it's a function + if ( jQuery.isFunction( params ) ) { + + // We assume that it's the callback + callback = params; + params = undefined; + + // Otherwise, build a param string + } else if ( params && typeof params === "object" ) { + type = "POST"; + } + + // If we have elements to modify, make the request + if ( self.length > 0 ) { + jQuery.ajax( { + url: url, + + // If "type" variable is undefined, then "GET" method will be used. + // Make value of this field explicit since + // user can override it through ajaxSetup method + type: type || "GET", + dataType: "html", + data: params + } ).done( function( responseText ) { + + // Save response for use in complete callback + response = arguments; + + self.html( selector ? + + // If a selector was specified, locate the right elements in a dummy div + // Exclude scripts to avoid IE 'Permission Denied' errors + jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) : + + // Otherwise use the full result + responseText ); + + // If the request succeeds, this function gets "data", "status", "jqXHR" + // but they are ignored because response was set above. + // If it fails, this function gets "jqXHR", "status", "error" + } ).always( callback && function( jqXHR, status ) { + self.each( function() { + callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] ); + } ); + } ); + } + + return this; + }; + + + + + // Attach a bunch of functions for handling common AJAX events + jQuery.each( [ + "ajaxStart", + "ajaxStop", + "ajaxComplete", + "ajaxError", + "ajaxSuccess", + "ajaxSend" + ], function( i, type ) { + jQuery.fn[ type ] = function( fn ) { + return this.on( type, fn ); + }; + } ); + + + + + jQuery.expr.filters.animated = function( elem ) { + return jQuery.grep( jQuery.timers, function( fn ) { + return elem === fn.elem; + } ).length; + }; + + + + + /** + * Gets a window from an element + */ + function getWindow( elem ) { + return jQuery.isWindow( elem ) ? elem : elem.nodeType === 9 && elem.defaultView; + } + + jQuery.offset = { + setOffset: function( elem, options, i ) { + var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition, + position = jQuery.css( elem, "position" ), + curElem = jQuery( elem ), + props = {}; + + // Set position first, in-case top/left are set even on static elem + if ( position === "static" ) { + elem.style.position = "relative"; + } + + curOffset = curElem.offset(); + curCSSTop = jQuery.css( elem, "top" ); + curCSSLeft = jQuery.css( elem, "left" ); + calculatePosition = ( position === "absolute" || position === "fixed" ) && + ( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1; + + // Need to be able to calculate position if either + // top or left is auto and position is either absolute or fixed + if ( calculatePosition ) { + curPosition = curElem.position(); + curTop = curPosition.top; + curLeft = curPosition.left; + + } else { + curTop = parseFloat( curCSSTop ) || 0; + curLeft = parseFloat( curCSSLeft ) || 0; + } + + if ( jQuery.isFunction( options ) ) { + + // Use jQuery.extend here to allow modification of coordinates argument (gh-1848) + options = options.call( elem, i, jQuery.extend( {}, curOffset ) ); + } + + if ( options.top != null ) { + props.top = ( options.top - curOffset.top ) + curTop; + } + if ( options.left != null ) { + props.left = ( options.left - curOffset.left ) + curLeft; + } + + if ( "using" in options ) { + options.using.call( elem, props ); + + } else { + curElem.css( props ); + } + } + }; + + jQuery.fn.extend( { + offset: function( options ) { + if ( arguments.length ) { + return options === undefined ? + this : + this.each( function( i ) { + jQuery.offset.setOffset( this, options, i ); + } ); + } + + var docElem, win, + elem = this[ 0 ], + box = { top: 0, left: 0 }, + doc = elem && elem.ownerDocument; + + if ( !doc ) { + return; + } + + docElem = doc.documentElement; + + // Make sure it's not a disconnected DOM node + if ( !jQuery.contains( docElem, elem ) ) { + return box; + } + + box = elem.getBoundingClientRect(); + win = getWindow( doc ); + return { + top: box.top + win.pageYOffset - docElem.clientTop, + left: box.left + win.pageXOffset - docElem.clientLeft + }; + }, + + position: function() { + if ( !this[ 0 ] ) { + return; + } + + var offsetParent, offset, + elem = this[ 0 ], + parentOffset = { top: 0, left: 0 }; + + // Fixed elements are offset from window (parentOffset = {top:0, left: 0}, + // because it is its only offset parent + if ( jQuery.css( elem, "position" ) === "fixed" ) { + + // Assume getBoundingClientRect is there when computed position is fixed + offset = elem.getBoundingClientRect(); + + } else { + + // Get *real* offsetParent + offsetParent = this.offsetParent(); + + // Get correct offsets + offset = this.offset(); + if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) { + parentOffset = offsetParent.offset(); + } + + // Add offsetParent borders + parentOffset.top += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true ); + parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true ); + } + + // Subtract parent offsets and element margins + return { + top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ), + left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true ) + }; + }, + + // This method will return documentElement in the following cases: + // 1) For the element inside the iframe without offsetParent, this method will return + // documentElement of the parent window + // 2) For the hidden or detached element + // 3) For body or html element, i.e. in case of the html node - it will return itself + // + // but those exceptions were never presented as a real life use-cases + // and might be considered as more preferable results. + // + // This logic, however, is not guaranteed and can change at any point in the future + offsetParent: function() { + return this.map( function() { + var offsetParent = this.offsetParent; + + while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) { + offsetParent = offsetParent.offsetParent; + } + + return offsetParent || documentElement; + } ); + } + } ); + + // Create scrollLeft and scrollTop methods + jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) { + var top = "pageYOffset" === prop; + + jQuery.fn[ method ] = function( val ) { + return access( this, function( elem, method, val ) { + var win = getWindow( elem ); + + if ( val === undefined ) { + return win ? win[ prop ] : elem[ method ]; + } + + if ( win ) { + win.scrollTo( + !top ? val : win.pageXOffset, + top ? val : win.pageYOffset + ); + + } else { + elem[ method ] = val; + } + }, method, val, arguments.length ); + }; + } ); + + // Support: Safari<7-8+, Chrome<37-44+ + // Add the top/left cssHooks using jQuery.fn.position + // Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084 + // Blink bug: https://code.google.com/p/chromium/issues/detail?id=229280 + // getComputedStyle returns percent when specified for top/left/bottom/right; + // rather than make the css module depend on the offset module, just check for it here + jQuery.each( [ "top", "left" ], function( i, prop ) { + jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition, + function( elem, computed ) { + if ( computed ) { + computed = curCSS( elem, prop ); + + // If curCSS returns percentage, fallback to offset + return rnumnonpx.test( computed ) ? + jQuery( elem ).position()[ prop ] + "px" : + computed; + } + } + ); + } ); + + + // Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods + jQuery.each( { Height: "height", Width: "width" }, function( name, type ) { + jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, + function( defaultExtra, funcName ) { + + // Margin is only for outerHeight, outerWidth + jQuery.fn[ funcName ] = function( margin, value ) { + var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ), + extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" ); + + return access( this, function( elem, type, value ) { + var doc; + + if ( jQuery.isWindow( elem ) ) { + + // As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there + // isn't a whole lot we can do. See pull request at this URL for discussion: + // https://github.com/jquery/jquery/pull/764 + return elem.document.documentElement[ "client" + name ]; + } + + // Get document width or height + if ( elem.nodeType === 9 ) { + doc = elem.documentElement; + + // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], + // whichever is greatest + return Math.max( + elem.body[ "scroll" + name ], doc[ "scroll" + name ], + elem.body[ "offset" + name ], doc[ "offset" + name ], + doc[ "client" + name ] + ); + } + + return value === undefined ? + + // Get width or height on the element, requesting but not forcing parseFloat + jQuery.css( elem, type, extra ) : + + // Set width or height on the element + jQuery.style( elem, type, value, extra ); + }, type, chainable ? margin : undefined, chainable, null ); + }; + } ); + } ); + + + jQuery.fn.extend( { + + bind: function( types, data, fn ) { + return this.on( types, null, data, fn ); + }, + unbind: function( types, fn ) { + return this.off( types, null, fn ); + }, + + delegate: function( selector, types, data, fn ) { + return this.on( types, selector, data, fn ); + }, + undelegate: function( selector, types, fn ) { + + // ( namespace ) or ( selector, types [, fn] ) + return arguments.length === 1 ? + this.off( selector, "**" ) : + this.off( types, selector || "**", fn ); + }, + size: function() { + return this.length; + } + } ); + + jQuery.fn.andSelf = jQuery.fn.addBack; + + + + + // Register as a named AMD module, since jQuery can be concatenated with other + // files that may use define, but not via a proper concatenation script that + // understands anonymous AMD modules. A named AMD is safest and most robust + // way to register. Lowercase jquery is used because AMD module names are + // derived from file names, and jQuery is normally delivered in a lowercase + // file name. Do this after creating the global so that if an AMD module wants + // to call noConflict to hide this version of jQuery, it will work. + + // Note that for maximum portability, libraries that are not jQuery should + // declare themselves as anonymous modules, and avoid setting a global if an + // AMD loader is present. jQuery is a special case. For more information, see + // https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon + + if ( true ) { + !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function() { + return jQuery; + }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); + } + + + + var + + // Map over jQuery in case of overwrite + _jQuery = window.jQuery, + + // Map over the $ in case of overwrite + _$ = window.$; + + jQuery.noConflict = function( deep ) { + if ( window.$ === jQuery ) { + window.$ = _$; + } + + if ( deep && window.jQuery === jQuery ) { + window.jQuery = _jQuery; + } + + return jQuery; + }; + + // Expose jQuery and $ identifiers, even in AMD + // (#7102#comment:10, https://github.com/jquery/jquery/pull/557) + // and CommonJS for browser emulators (#13566) + if ( !noGlobal ) { + window.jQuery = window.$ = jQuery; + } + + return jQuery; + })); + + +/***/ }, +/* 4 */ +/***/ function(module, exports) { + + /** + * Created by gavorhes on 12/10/2015. + */ + "use strict"; + /** + * create a namespace on the gv object + * @param {string} namespace to create + * @returns {object} object representing the namespace + */ + function provide(namespace) { + "use strict"; + if (typeof window['gv'] == 'undefined') { + window['gv'] = {}; + } + var parts = namespace.split('.'); + var nameSpace = window['gv']; + for (var i = 0; i < parts.length; i++) { + var newObject = nameSpace[parts[i]]; + if (typeof newObject == 'undefined') { + nameSpace[parts[i]] = {}; + } + nameSpace = nameSpace[parts[i]]; + } + return nameSpace; + } + provide('util'); + window['gv'].util.provide = provide; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.default = provide; + + +/***/ }, +/* 5 */ +/***/ function(module, exports, __webpack_require__) { + + "use strict"; + exports.ol = __webpack_require__(6); + // // export default require('../ol/ol-build'); + // + // const fish = 10; + // export = fish; + // + // + // export function cat(bird: string){ + // console.log('eat the fish') + // } + // + // export function nice(eat: number){ + // console.log('eat that fish'); + // } + // + // export class Big{ + // glenn: string; + // + // constructor(isGlenn){ + // this.glenn = isGlenn; + // } + // + // set isGlenn(f: string){ + // console.log(this.glenn) + // } + // + // run(){ + // console.log(this.glenn + " can run"); + // } + // } + // + // export namespace HereIt{ + // + // export class Big2 { + // glenn: string; + // + // constructor(isGlenn) { + // this.glenn = isGlenn; + // } + // + // set isGlenn(f: string) { + // console.log(this.glenn) + // } + // + // run() { + // console.log(this.glenn + " can run"); + // } + // } + // + // + // } + + +/***/ }, +/* 6 */ +/***/ function(module, exports, __webpack_require__) { + + var require;var require;/* WEBPACK VAR INJECTION */(function(global) {// OpenLayers 3. See http://openlayers.org/ + // License: https://raw.githubusercontent.com/openlayers/ol3/master/LICENSE.md + ;(function (root, factory) { + if (true) { + module.exports = factory(); + } else if (typeof define === "function" && define.amd) { + define([], factory); + } else { + root.ol = factory(); + } + }(this, function () { + var OPENLAYERS = {}; + var n,aa=this; + function ba(){var a=aa.setImmediate,b=typeof a;if("object"==b)if(a){if(a instanceof Array)return"array";if(a instanceof Object)return b;var c=Object.prototype.toString.call(a);if("[object Window]"==c)return"object";if("[object Array]"==c||"number"==typeof a.length&&"undefined"!=typeof a.splice&&"undefined"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable("splice"))return"array";if("[object Function]"==c||"undefined"!=typeof a.call&&"undefined"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable("call"))return"function"}else return"null"; + else if("function"==b&&"undefined"==typeof a.call)return"object";return b}function ca(a,b,c){return a.call.apply(a.bind,arguments)}function da(a,b,c){if(!a)throw Error();if(2<arguments.length){var d=Array.prototype.slice.call(arguments,2);return function(){var c=Array.prototype.slice.call(arguments);Array.prototype.unshift.apply(c,d);return a.apply(b,c)}}return function(){return a.apply(b,arguments)}} + function ea(a,b,c){ea=Function.prototype.bind&&-1!=Function.prototype.bind.toString().indexOf("native code")?ca:da;return ea.apply(null,arguments)}function y(a,b){var c=a.split("."),d=OPENLAYERS||aa;c[0]in d||!d.execScript||d.execScript("var "+c[0]);for(var e;c.length&&(e=c.shift());)c.length||void 0===b?d[e]?d=d[e]:d=d[e]={}:d[e]=b};var fa;function B(a,b){a.prototype=Object.create(b.prototype);a.prototype.constructor=a}function I(){}function J(a){return a.ie||(a.ie=++ga)}var ga=0;if("undefined"!==typeof window)var K=window;else"undefined"!==typeof global?K=global:"undefined"!==typeof self&&(K=self);function ha(a){this.message="Assertion failed. See /doc/errors/#"+a+" for details.";this.code=a;this.name="AssertionError"}B(ha,Error);function L(a,b){if(!a)throw new ha(b);};function ia(a,b,c){return Math.min(Math.max(a,b),c)}var ja=function(){var a;"cosh"in Math?a=Math.cosh:a=function(a){a=Math.exp(a);return(a+1/a)/2};return a}();function ka(a){L(0<a,29);return Math.pow(2,Math.ceil(Math.log(a)/Math.LN2))}function la(a,b){var c=a%b;return 0>c*b?c+b:c};function ma(a){return function(b){if(b)return[ia(b[0],a[0],a[2]),ia(b[1],a[1],a[3])]}}function na(a){return a};function oa(a,b,c){this.center=a;this.resolution=b;this.rotation=c};var pa="function"===typeof Object.assign?Object.assign:function(a,b){if(!a||!a)throw new TypeError("Cannot convert undefined or null to object");for(var c=Object(a),d=1,e=arguments.length;d<e;++d){var f=arguments[d];if(void 0!==f&&null!==f)for(var g in f)f.hasOwnProperty(g)&&(c[g]=f[g])}return c};function qa(a){for(var b in a)delete a[b]}function ra(a){var b=[],c;for(c in a)b.push(a[c]);return b}function sa(a){for(var b in a)return!1;return!b};function ta(a){function b(b){var d=a.listener,e=a.jc||a.target;a.mc&&M(a);return d.call(e,b)}return a.kc=b}function ua(a,b,c,d){for(var e,f=0,g=a.length;f<g;++f)if(e=a[f],e.listener===b&&e.jc===c)return d&&(e.deleteIndex=f),e}function va(a,b){var c=a.ha;return c?c[b]:void 0}function wa(a){var b=a.ha;b||(b=a.ha={});return b} + function xa(a,b){var c=va(a,b);if(c){for(var d=0,e=c.length;d<e;++d)a.removeEventListener(b,c[d].kc),qa(c[d]);c.length=0;if(c=a.ha)delete c[b],0===Object.keys(c).length&&delete a.ha}}function R(a,b,c,d,e){var f=wa(a),g=f[b];g||(g=f[b]=[]);(f=ua(g,c,d,!1))?e||(f.mc=!1):(f={jc:d,mc:!!e,listener:c,target:a,type:b},a.addEventListener(b,ta(f)),g.push(f));return f}function ya(a,b,c,d){(a=va(a,b))&&(c=ua(a,c,d,!0))&&M(c)} + function M(a){if(a&&a.target){a.target.removeEventListener(a.type,a.kc);var b=va(a.target,a.type);if(b){var c="deleteIndex"in a?a.deleteIndex:b.indexOf(a);-1!==c&&b.splice(c,1);0===b.length&&xa(a.target,a.type)}qa(a)}}function za(a){var b=wa(a),c;for(c in b)xa(a,c)};function Aa(){}Aa.prototype.ra=!1;function Da(a){a.ra||(a.ra=!0,a.R())}Aa.prototype.R=I;function T(a){this.type=a;this.target=null}T.prototype.preventDefault=T.prototype.stopPropagation=function(){this.qe=!0};function Ea(a){a.stopPropagation()}function Fa(a){a.preventDefault()};function Ga(){this.ca={};this.K={};this.C={}}B(Ga,Aa);Ga.prototype.addEventListener=function(a,b){var c=this.C[a];c||(c=this.C[a]=[]);-1===c.indexOf(b)&&c.push(b)};function U(a,b){var c="string"===typeof b?new T(b):b,d=c.type;c.target=a;var e=a.C[d],f;if(e){d in a.K||(a.K[d]=0,a.ca[d]=0);++a.K[d];for(var g=0,h=e.length;g<h;++g)if(!1===e[g].call(a,c)||c.qe){f=!1;break}--a.K[d];if(0===a.K[d]){c=a.ca[d];for(delete a.ca[d];c--;)a.removeEventListener(d,I);delete a.K[d]}return f}}Ga.prototype.R=function(){za(this)}; + function Ha(a,b){return b?b in a.C:0<Object.keys(a.C).length}Ga.prototype.removeEventListener=function(a,b){var c=this.C[a];if(c){var d=c.indexOf(b);a in this.ca?(c[d]=I,++this.ca[a]):(c.splice(d,1),0===c.length&&delete this.C[a])}};function Ia(){Ga.call(this);this.b=0}B(Ia,Ga);Ia.prototype.w=function(){++this.b;U(this,"change")};Ia.prototype.Y=function(a,b,c){if(Array.isArray(a)){for(var d=a.length,e=Array(d),f=0;f<d;++f)e[f]=R(this,a[f],b,c);return e}return R(this,a,b,c)};Ia.prototype.hd=function(a,b,c){if(Array.isArray(a)){for(var d=a.length,e=Array(d),f=0;f<d;++f)e[f]=R(this,a[f],b,c,!0);return e}return R(this,a,b,c,!0)};function Ja(a,b,c){T.call(this,a);this.key=b;this.oldValue=c}B(Ja,T);function V(a){Ia.call(this);J(this);this.M={};void 0!==a&&this.l(a)}B(V,Ia);var Ka={};function La(a){return Ka.hasOwnProperty(a)?Ka[a]:Ka[a]="change:"+a}V.prototype.get=function(a){var b;this.M.hasOwnProperty(a)&&(b=this.M[a]);return b};V.prototype.Ea=function(){return pa({},this.M)};V.prototype.set=function(a,b,c){c?this.M[a]=b:(c=this.M[a],this.M[a]=b,c!==b&&(b=La(a),U(this,new Ja(b,a,c)),U(this,new Ja("propertychange",a,c))))}; + V.prototype.l=function(a,b){for(var c in a)this.set(c,a[c],b)};function Ma(a,b){return a>b?1:a<b?-1:0}function Na(a,b,c){var d=a.length;if(a[0]<=b)return 0;if(!(b<=a[d-1]))if(0<c)for(c=1;c<d;++c){if(a[c]<b)return c-1}else if(0>c)for(c=1;c<d;++c){if(a[c]<=b)return c}else for(c=1;c<d;++c){if(a[c]==b)return c;if(a[c]<b)return a[c-1]-b<b-a[c]?c-1:c}return d-1}function Oa(a){return a.reduce(function(a,c){return Array.isArray(c)?a.concat(Oa(c)):a.concat(c)},[])}function Pa(a,b){var c,d=Array.isArray(b)?b:[b],e=d.length;for(c=0;c<e;c++)a[a.length]=d[c]} + function Qa(a,b){var c=a.indexOf(b),d=-1<c;d&&a.splice(c,1);return d}function Ra(a,b){var c=a.length;if(c!==b.length)return!1;for(var d=0;d<c;d++)if(a[d]!==b[d])return!1;return!0}function Sa(a){var b=Ta,c=a.length,d=Array(a.length),e;for(e=0;e<c;e++)d[e]={index:e,value:a[e]};d.sort(function(a,c){return b(a.value,c.value)||a.index-c.index});for(e=0;e<a.length;e++)a[e]=d[e].value}function Ua(a,b){var c=b||Ma;return a.every(function(b,e){if(0===e)return!0;var f=c(a[e-1],b);return!(0<f||0===f)})};function Va(a){return function(b,c,d){if(void 0!==b)return b=Na(a,b,d),b=ia(b+c,0,a.length-1),c=Math.floor(b),b!=c&&c<a.length-1?a[c]/Math.pow(a[c]/a[c+1],b-c):a[c]}}function Wa(a,b,c){return function(d,e,f){if(void 0!==d)return d=Math.max(Math.floor(Math.log(b/d)/Math.log(a)+(-f/2+.5))+e,0),void 0!==c&&(d=Math.min(d,c)),b/Math.pow(a,d)}};function Xa(a){if(void 0!==a)return 0}function Ya(a,b){if(void 0!==a)return a+b}function Za(a){var b=2*Math.PI/a;return function(a,d){if(void 0!==a)return a=Math.floor((a+d)/b+.5)*b}}function $a(){var a=5*Math.PI/180;return function(b,c){if(void 0!==b)return Math.abs(b+c)<=a?0:b+c}};function ab(a,b){a[0]+=b[0];a[1]+=b[1]}function bb(a,b){var c=Math.cos(b),d=Math.sin(b),e=a[1]*c+a[0]*d;a[0]=a[0]*c-a[1]*d;a[1]=e};function cb(a){for(var b=db(),c=0,d=a.length;c<d;++c)eb(b,a[c]);return b}function fb(a,b,c){return c?(c[0]=a[0]-b,c[1]=a[1]-b,c[2]=a[2]+b,c[3]=a[3]+b,c):[a[0]-b,a[1]-b,a[2]+b,a[3]+b]}function gb(a,b){return b?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3],b):a.slice()}function hb(a,b){return a[0]<=b[0]&&b[2]<=a[2]&&a[1]<=b[1]&&b[3]<=a[3]}function db(){return[Infinity,Infinity,-Infinity,-Infinity]}function ib(a,b,c,d,e){return e?(e[0]=a,e[1]=b,e[2]=c,e[3]=d,e):[a,b,c,d]} + function jb(a){return ib(Infinity,Infinity,-Infinity,-Infinity,a)}function kb(a,b){var c=a[0],d=a[1];return ib(c,d,c,d,b)}function lb(a,b){return a[0]==b[0]&&a[2]==b[2]&&a[1]==b[1]&&a[3]==b[3]}function mb(a,b){b[0]<a[0]&&(a[0]=b[0]);b[2]>a[2]&&(a[2]=b[2]);b[1]<a[1]&&(a[1]=b[1]);b[3]>a[3]&&(a[3]=b[3])}function eb(a,b){b[0]<a[0]&&(a[0]=b[0]);b[0]>a[2]&&(a[2]=b[0]);b[1]<a[1]&&(a[1]=b[1]);b[1]>a[3]&&(a[3]=b[1])} + function nb(a,b,c,d,e){for(;c<d;c+=e){var f=a,g=b[c],h=b[c+1];f[0]=Math.min(f[0],g);f[1]=Math.min(f[1],h);f[2]=Math.max(f[2],g);f[3]=Math.max(f[3],h)}return a}function ob(a){var b=0;pb(a)||(b=qb(a)*rb(a));return b}function sb(a){return[a[0],a[1]]}function tb(a){return[(a[0]+a[2])/2,(a[1]+a[3])/2]} + function ub(a,b,c,d,e){var f=b*d[0]/2;d=b*d[1]/2;b=Math.cos(c);var g=Math.sin(c);c=f*b;f*=g;b*=d;var h=d*g,k=a[0],l=a[1];a=k-c+h;d=k-c-h;g=k+c-h;c=k+c+h;var h=l-f-b,k=l-f+b,m=l+f+b,f=l+f-b;return ib(Math.min(a,d,g,c),Math.min(h,k,m,f),Math.max(a,d,g,c),Math.max(h,k,m,f),e)}function rb(a){return a[3]-a[1]}function vb(a,b){var c=db();wb(a,b)&&(c[0]=a[0]>b[0]?a[0]:b[0],c[1]=a[1]>b[1]?a[1]:b[1],c[2]=a[2]<b[2]?a[2]:b[2],c[3]=a[3]<b[3]?a[3]:b[3]);return c}function xb(a){return[a[0],a[3]]} + function qb(a){return a[2]-a[0]}function wb(a,b){return a[0]<=b[2]&&a[2]>=b[0]&&a[1]<=b[3]&&a[3]>=b[1]}function pb(a){return a[2]<a[0]||a[3]<a[1]};function yb(){return!0}function zb(){return!1};/* + + Latitude/longitude spherical geodesy formulae taken from + http://www.movable-type.co.uk/scripts/latlong.html + Licensed under CC-BY-3.0. + */ + function Ab(a){this.radius=a}function Bb(a,b){var c=a[1]*Math.PI/180,d=b[1]*Math.PI/180,e=(d-c)/2,f=(b[0]-a[0])*Math.PI/180/2,c=Math.sin(e)*Math.sin(e)+Math.sin(f)*Math.sin(f)*Math.cos(c)*Math.cos(d);return 2*Cb.radius*Math.atan2(Math.sqrt(c),Math.sqrt(1-c))} + Ab.prototype.offset=function(a,b,c){var d=a[1]*Math.PI/180;b/=this.radius;var e=Math.asin(Math.sin(d)*Math.cos(b)+Math.cos(d)*Math.sin(b)*Math.cos(c));return[180*(a[0]*Math.PI/180+Math.atan2(Math.sin(c)*Math.sin(b)*Math.cos(d),Math.cos(b)-Math.sin(d)*Math.sin(e)))/Math.PI,180*e/Math.PI]};var Cb=new Ab(6370997);var Db={};Db.degrees=2*Math.PI*Cb.radius/360;Db.ft=.3048;Db.m=1;Db["us-ft"]=1200/3937; + function Eb(a){this.ya=a.code;this.a=a.units;this.h=void 0!==a.extent?a.extent:null;this.c=void 0!==a.global?a.global:!1;this.b=!(!this.c||!this.h);this.i=void 0!==a.getPointResolution?a.getPointResolution:this.j;this.f=null;this.g=a.metersPerUnit;var b=Fb,c=a.code,d=Gb||K.proj4;if("function"==typeof d&&void 0===b[c]){var e=d.defs(c);if(void 0!==e){void 0===a.metersPerUnit&&(this.g=e.to_meter);void 0===a.units&&(this.a=e.units);var f,g;for(f in b)if(a=d.defs(f),void 0!==a)if(b=Hb(f),a===e)Ib([b,this]); + else{g=d(f,c);a=g.forward;g=g.inverse;var b=Hb(b),h=Hb(this);Jb(b,h,Kb(a));Jb(h,b,Kb(g))}}}}Eb.prototype.l=function(){return this.ya};Eb.prototype.G=function(){return this.h};function Lb(a){return a.g||Db[a.a]}Eb.prototype.j=function(a,b){if("degrees"==this.a)return a;var c=Mb(this,Hb("EPSG:4326")),d=[b[0]-a/2,b[1],b[0]+a/2,b[1],b[0],b[1]-a/2,b[0],b[1]+a/2],d=c(d,d,2),c=(Bb(d.slice(0,2),d.slice(2,4))+Bb(d.slice(4,6),d.slice(6,8)))/2,d=Lb(this);void 0!==d&&(c/=d);return c}; + Eb.prototype.getPointResolution=function(a,b){return this.i(a,b)};var Fb={},Ob={},Gb=null;function Ib(a){Pb(a);a.forEach(function(b){a.forEach(function(a){b!==a&&Jb(b,a,Qb)})})}function Rb(a){Fb[a.ya]=a;Jb(a,a,Qb)}function Pb(a){var b=[];a.forEach(function(a){b.push(Rb(a))})}function Sb(a){return a?"string"===typeof a?Hb(a):a:Hb("EPSG:3857")}function Jb(a,b,c){a=a.ya;b=b.ya;a in Ob||(Ob[a]={});Ob[a][b]=c} + function Kb(a){return function(b,c,d){var e=b.length;d=void 0!==d?d:2;c=void 0!==c?c:Array(e);var f,g;for(g=0;g<e;g+=d)for(f=a([b[g],b[g+1]]),c[g]=f[0],c[g+1]=f[1],f=d-1;2<=f;--f)c[g+f]=b[g+f];return c}}function Hb(a){var b;if(a instanceof Eb)b=a;else if("string"===typeof a){b=Fb[a];var c=Gb||K.proj4;void 0===b&&"function"==typeof c&&void 0!==c.defs(a)&&(b=new Eb({code:a}),Rb(b))}return b||null}function Tb(a,b){if(a===b)return!0;var c=a.a===b.a;return a.ya===b.ya?c:Mb(a,b)===Qb&&c} + function Ub(a,b){var c=Hb(a),d=Hb(b);return Mb(c,d)}function Mb(a,b){var c=a.ya,d=b.ya,e;c in Ob&&d in Ob[c]&&(e=Ob[c][d]);void 0===e&&(e=Vb);return e}function Vb(a,b){if(void 0!==b&&a!==b){for(var c=0,d=a.length;c<d;++c)b[c]=a[c];a=b}return a}function Qb(a,b){var c;if(void 0!==b){c=0;for(var d=a.length;c<d;++c)b[c]=a[c];c=b}else c=a.slice();return c};function Wb(){V.call(this);this.j=db();this.s=-1;this.f={};this.i=this.g=0}B(Wb,V);Wb.prototype.G=function(a){this.s!=this.b&&(this.j=this.mb(this.j),this.s=this.b);var b=this.j;a?(a[0]=b[0],a[1]=b[1],a[2]=b[2],a[3]=b[3]):a=b;return a};Wb.prototype.transform=function(a,b){this.Hb(Ub(a,b));return this};function Xb(a,b,c,d,e,f){for(var g=f?f:[],h=0;b<c;b+=d){var k=a[b],l=a[b+1];g[h++]=e[0]*k+e[2]*l+e[4];g[h++]=e[1]*k+e[3]*l+e[5]}f&&g.length!=h&&(g.length=h);return g};function Yb(){Wb.call(this);this.c="XY";this.A=2;this.o=null}B(Yb,Wb);function Zb(a){var b;"XY"==a?b=2:"XYZ"==a||"XYM"==a?b=3:"XYZM"==a&&(b=4);return b}n=Yb.prototype;n.mb=function(a){var b=this.o,c=this.o.length,d=this.A;a=jb(a);return nb(a,b,0,c,d)};n.Rb=function(a){this.i!=this.b&&(qa(this.f),this.g=0,this.i=this.b);if(0>a||0!==this.g&&a<=this.g)return this;var b=a.toString();if(this.f.hasOwnProperty(b))return this.f[b];var c=this.Qa(a);if(c.o.length<this.o.length)return this.f[b]=c;this.g=a;return this}; + n.Qa=function(){return this};function $b(a,b,c){a.A=Zb(b);a.c=b;a.o=c}function ac(a,b,c,d){if(b)c=Zb(b);else{for(b=0;b<d;++b){if(0===c.length){a.c="XY";a.A=2;return}c=c[0]}c=c.length;var e;2==c?e="XY":3==c?e="XYZ":4==c&&(e="XYZM");b=e}a.c=b;a.A=c}n.Hb=function(a){this.o&&(a(this.o,this.o,this.A),this.w())}; + n.rotate=function(a,b){var c=this.o;if(c){for(var d=c.length,e=this.A,f=c?c:[],g=Math.cos(a),h=Math.sin(a),k=b[0],l=b[1],m=0,p=0;p<d;p+=e){var q=c[p]-k,u=c[p+1]-l;f[m++]=k+q*g-u*h;f[m++]=l+q*h+u*g;for(q=p+2;q<p+e;++q)f[m++]=c[q]}c&&f.length!=m&&(f.length=m);this.w()}}; + n.scale=function(a,b,c){var d=b;void 0===d&&(d=a);var e=c;e||(e=tb(this.G()));if(c=this.o){b=c.length;for(var f=this.A,g=c?c:[],h=e[0],e=e[1],k=0,l=0;l<b;l+=f){var m=c[l]-h,p=c[l+1]-e;g[k++]=h+a*m;g[k++]=e+d*p;for(m=l+2;m<l+f;++m)g[k++]=c[m]}c&&g.length!=k&&(g.length=k);this.w()}};n.translate=function(a,b){var c=this.o;if(c){var d=c.length,e=this.A,f=c?c:[],g=0,h,k;for(h=0;h<d;h+=e)for(f[g++]=c[h]+a,f[g++]=c[h+1]+b,k=h+2;k<h+e;++k)f[g++]=c[k];c&&f.length!=g&&(f.length=g);this.w()}};function bc(a,b){var c=0,d,e;d=0;for(e=b.length;d<e;++d)a[c++]=b[d];return c}function cc(a,b,c,d){var e,f;e=0;for(f=c.length;e<f;++e){var g=c[e],h;for(h=0;h<d;++h)a[b++]=g[h]}return b}function dc(a,b,c,d,e){e=e?e:[];var f=0,g,h;g=0;for(h=c.length;g<h;++g)b=cc(a,b,c[g],d),e[f++]=b;e.length=f;return e};function ec(a,b,c,d,e){e=void 0!==e?e:[];for(var f=0;b<c;b+=d)e[f++]=a.slice(b,b+d);e.length=f;return e}function fc(a,b,c,d,e){e=void 0!==e?e:[];var f=0,g,h;g=0;for(h=c.length;g<h;++g){var k=c[g];e[f++]=ec(a,b,k,d,e[f]);b=k}e.length=f;return e};function gc(a,b,c,d,e,f,g){var h=(c-b)/d;if(3>h){for(;b<c;b+=d)f[g++]=a[b],f[g++]=a[b+1];return g}var k=Array(h);k[0]=1;k[h-1]=1;c=[b,c-d];for(var l=0,m;0<c.length;){var p=c.pop(),q=c.pop(),u=0,w=a[q],r=a[q+1],x=a[p],D=a[p+1];for(m=q+d;m<p;m+=d){var t,z=a[m];t=a[m+1];var C=w,E=r,v=x-C,H=D-E;if(0!==v||0!==H){var G=((z-C)*v+(t-E)*H)/(v*v+H*H);1<G?(C=x,E=D):0<G&&(C+=v*G,E+=H*G)}z=C-z;t=E-t;t=z*z+t*t;t>u&&(l=m,u=t)}u>e&&(k[(l-b)/d]=1,q+d<l&&c.push(q,l),l+d<p&&c.push(l,p))}for(m=0;m<h;++m)k[m]&&(f[g++]= + a[b+m*d],f[g++]=a[b+m*d+1]);return g} + function hc(a,b,c,d,e,f,g,h){var k,l;k=0;for(l=c.length;k<l;++k){var m=c[k];a:{var p=a,q=m,u=d,w=e,r=f;if(b!=q){var x=w*Math.round(p[b]/w),D=w*Math.round(p[b+1]/w);b+=u;r[g++]=x;r[g++]=D;var t,z;do if(t=w*Math.round(p[b]/w),z=w*Math.round(p[b+1]/w),b+=u,b==q){r[g++]=t;r[g++]=z;break a}while(t==x&&z==D);for(;b<q;){var C,E;C=w*Math.round(p[b]/w);E=w*Math.round(p[b+1]/w);b+=u;if(C!=t||E!=z){var v=t-x,H=z-D,G=C-x,A=E-D;v*A==H*G&&(0>v&&G<v||v==G||0<v&&G>v)&&(0>H&&A<H||H==A||0<H&&A>H)||(r[g++]=t,r[g++]= + z,x=t,D=z);t=C;z=E}}r[g++]=t;r[g++]=z}}h.push(g);b=m}return g};function ic(a,b){Yb.call(this);this.ea(a,b)}B(ic,Yb);n=ic.prototype;n.clone=function(){var a=new ic(null);$b(a,this.c,this.o.slice());a.w();return a};n.za=function(){return ec(this.o,0,this.o.length,this.A)};n.Qa=function(a){var b=[];b.length=gc(this.o,0,this.o.length,this.A,a,b,0);a=new ic(null);$b(a,"XY",b);a.w();return a};n.$=function(){return"LinearRing"};n.ea=function(a,b){a?(ac(this,b,a,1),this.o||(this.o=[]),this.o.length=cc(this.o,0,a,this.A)):$b(this,"XY",null);this.w()};function jc(a,b){Yb.call(this);this.ea(a,b)}B(jc,Yb);n=jc.prototype;n.clone=function(){var a=new jc(null);$b(a,this.c,this.o.slice());a.w();return a};n.za=function(){return this.o?this.o.slice():[]};n.mb=function(a){return kb(this.o,a)};n.$=function(){return"Point"};n.ea=function(a,b){a?(ac(this,b,a,0),this.o||(this.o=[]),this.o.length=bc(this.o,a)):$b(this,"XY",null);this.w()};function kc(a,b,c,d,e,f){for(var g=!1,h=a[c-d],k=a[c-d+1];b<c;b+=d){var l=a[b],m=a[b+1];k>f!=m>f&&e<(l-h)*(f-k)/(m-k)+h&&(g=!g);h=l;k=m}return g};function lc(a,b,c,d,e,f,g){var h,k,l,m,p,q=e[f+1],u=[],w=c[0];l=a[w-d];p=a[w-d+1];for(h=b;h<w;h+=d){m=a[h];k=a[h+1];if(q<=p&&k<=q||p<=q&&q<=k)l=(q-p)/(k-p)*(m-l)+l,u.push(l);l=m;p=k}w=NaN;p=-Infinity;u.sort(Ma);l=u[0];h=1;for(k=u.length;h<k;++h){m=u[h];var r=Math.abs(m-l);if(r>p){l=(l+m)/2;var x;a:if(0!==c.length&&kc(a,b,c[0],d,l,q)){var D;x=1;for(D=c.length;x<D;++x)if(kc(a,c[x-1],c[x],d,l,q)){x=!1;break a}x=!0}else x=!1;x&&(w=l,p=r)}l=m}isNaN(w)&&(w=e[f]);return g?(g.push(w,q),g):[w,q]};function mc(a,b,c,d){for(var e=0,f=a[c-d],g=a[c-d+1];b<c;b+=d)var h=a[b],k=a[b+1],e=e+(h-f)*(k+g),f=h,g=k;return 0<e}function nc(a,b,c,d){var e=0;d=void 0!==d?d:!1;var f,g;f=0;for(g=b.length;f<g;++f){var h=b[f],e=mc(a,e,h,c);if(0===f){if(d&&e||!d&&!e)return!1}else if(d&&!e||!d&&e)return!1;e=h}return!0} + function oc(a,b,c,d,e){e=void 0!==e?e:!1;var f,g;f=0;for(g=c.length;f<g;++f){var h=c[f],k=mc(a,b,h,d);if(0===f?e&&k||!e&&!k:e&&!k||!e&&k)for(var k=a,l=h,m=d;b<l-m;){var p;for(p=0;p<m;++p){var q=k[b+p];k[b+p]=k[l-m+p];k[l-m+p]=q}b+=m;l-=m}b=h}return b}function pc(a,b,c,d){var e=0,f,g;f=0;for(g=b.length;f<g;++f)e=oc(a,e,b[f],c,d);return e};function qc(a,b){Yb.call(this);this.ja=[];this.h=-1;this.v=null;this.u=-1;this.a=null;this.ea(a,b)}B(qc,Yb);n=qc.prototype;n.clone=function(){var a=new qc(null);rc(a,this.c,this.o.slice(),this.ja.slice());return a};n.za=function(a){var b;void 0!==a?(b=sc(this).slice(),oc(b,0,this.ja,this.A,a)):b=this.o;return fc(b,0,this.ja,this.A)};function tc(a){if(a.h!=a.b){var b=tb(a.G());a.v=lc(sc(a),0,a.ja,a.A,b,0);a.h=a.b}return a.v} + function sc(a){if(a.u!=a.b){var b=a.o;nc(b,a.ja,a.A)?a.a=b:(a.a=b.slice(),a.a.length=oc(a.a,0,a.ja,a.A));a.u=a.b}return a.a}n.Qa=function(a){var b=[],c=[];b.length=hc(this.o,0,this.ja,this.A,Math.sqrt(a),b,0,c);a=new qc(null);rc(a,"XY",b,c);return a};n.$=function(){return"Polygon"};n.ea=function(a,b){if(a){ac(this,b,a,2);this.o||(this.o=[]);var c=dc(this.o,0,a,this.A,this.ja);this.o.length=0===c.length?0:c[c.length-1];this.w()}else rc(this,"XY",null,this.ja)}; + function rc(a,b,c,d){$b(a,b,c);a.ja=d;a.w()};function uc(a){V.call(this);a=a||{};this.c=[0,0];var b={};b[vc]=void 0!==a.center?a.center:null;this.j=Sb(a.projection);var c,d,e,f=void 0!==a.minZoom?a.minZoom:0;c=void 0!==a.maxZoom?a.maxZoom:28;var g=void 0!==a.zoomFactor?a.zoomFactor:2;if(void 0!==a.resolutions)c=a.resolutions,d=c[0],e=c[c.length-1],c=Va(c);else{d=Sb(a.projection);e=d.G();var h=(e?Math.max(qb(e),rb(e)):360*Db.degrees/Lb(d))/256/Math.pow(2,0),k=h/Math.pow(2,28);d=a.maxResolution;void 0!==d?f=0:d=h/Math.pow(g,f);e=a.minResolution; + void 0===e&&(e=void 0!==a.maxZoom?void 0!==a.maxResolution?d/Math.pow(g,c):h/Math.pow(g,c):k);c=f+Math.floor(Math.log(d/e)/Math.log(g));e=d/Math.pow(g,c-f);c=Wa(g,d,c-f)}this.f=d;this.i=e;this.s=g;this.g=a.resolutions;this.h=f;f=void 0!==a.extent?ma(a.extent):na;(void 0!==a.enableRotation?a.enableRotation:1)?(g=a.constrainRotation,g=void 0===g||!0===g?$a():!1===g?Ya:"number"===typeof g?Za(g):Ya):g=Xa;this.a=new oa(f,c,g);void 0!==a.resolution?b[wc]=a.resolution:void 0!==a.zoom&&(b[wc]=this.constrainResolution(this.f, + a.zoom-this.h));b[xc]=void 0!==a.rotation?a.rotation:0;this.l(b)}B(uc,V);n=uc.prototype;n.constrainResolution=function(a,b,c){return this.a.resolution(a,b||0,c||0)};n.constrainRotation=function(a,b){return this.a.rotation(a,b||0)};n.qa=function(){return this.get(vc)};n.lc=function(a){var b=this.qa();L(b,1);var c=this.O();L(void 0!==c,2);var d=this.get(xc);L(void 0!==d,3);return ub(b,c,d,a)};n.ia=function(){return this.j};n.O=function(){return this.get(wc)}; + function yc(a,b){return Math.max(qb(a)/b[0],rb(a)/b[1])}n.T=function(){var a=this.qa(),b=this.ia(),c=this.O(),d=this.get(xc);return{center:a.slice(),projection:void 0!==b?b:null,resolution:c,rotation:d}};n.rd=function(){var a,b=this.O();if(void 0!==b&&b>=this.i&&b<=this.f){a=this.h||0;var c,d;if(this.g){d=Na(this.g,b,1);a+=d;if(d==this.g.length-1)return a;c=this.g[d];d=c/this.g[d+1]}else c=this.f,d=this.s;a+=Math.log(c/b)/Math.log(d)}return a}; + n.md=function(a,b,c){if(!(a instanceof Yb)){L(Array.isArray(a),24);L(!pb(a),25);var d=a[0],e=a[1],f=a[2],g=a[3],d=[d,e,d,g,f,g,f,e,d,e],e=new qc(null);rc(e,"XY",d,[d.length]);a=e}d=c||{};c=void 0!==d.padding?d.padding:[0,0,0,0];var g=void 0!==d.constrainResolution?d.constrainResolution:!0,e=void 0!==d.nearest?d.nearest:!1,h;void 0!==d.minResolution?h=d.minResolution:void 0!==d.maxZoom?h=this.constrainResolution(this.f,d.maxZoom-this.h,0):h=0;var k=a.o,f=this.get(xc),d=Math.cos(-f),f=Math.sin(-f), + l=Infinity,m=Infinity,p=-Infinity,q=-Infinity;a=a.A;for(var u=0,w=k.length;u<w;u+=a)var r=k[u]*d-k[u+1]*f,x=k[u]*f+k[u+1]*d,l=Math.min(l,r),m=Math.min(m,x),p=Math.max(p,r),q=Math.max(q,x);b=yc([l,m,p,q],[b[0]-c[1]-c[3],b[1]-c[0]-c[2]]);b=isNaN(b)?h:Math.max(b,h);g&&(h=this.constrainResolution(b,0,0),!e&&h<b&&(h=this.constrainResolution(h,-1,0)),b=h);this.set(wc,b);f=-f;h=(l+p)/2+(c[1]-c[3])/2*b;b=(m+q)/2+(c[0]-c[2])/2*b;this.xa([h*d-b*f,b*d+h*f])}; + n.rotate=function(a,b){if(void 0!==b){var c,d=this.qa();void 0!==d&&(c=[d[0]-b[0],d[1]-b[1]],bb(c,a-this.get(xc)),ab(c,b));this.xa(c)}this.set(xc,a)};n.xa=function(a){this.set(vc,a)};function zc(a,b){a.c[1]+=b}n.ye=function(a){a=this.constrainResolution(this.f,a-this.h,0);this.set(wc,a)};var vc="center",wc="resolution",xc="rotation";function Ac(a){return 1-Math.pow(1-a,3)}function Bc(a){return 3*a*a-2*a*a*a}function Cc(a){return a};function Dc(a){var b=a.source,c=a.start?a.start:Date.now(),d=b[0],e=b[1],f=void 0!==a.duration?a.duration:1E3,g=a.easing?a.easing:Bc;return function(a,b){if(b.time<c)return b.animate=!0,b.viewHints[0]+=1,!0;if(b.time<c+f){var l=1-g((b.time-c)/f),m=d-b.viewState.center[0],p=e-b.viewState.center[1];b.animate=!0;b.viewState.center[0]+=l*m;b.viewState.center[1]+=l*p;b.viewHints[0]+=1;return!0}return!1}} + function Ec(a){var b=a.rotation?a.rotation:0,c=a.start?a.start:Date.now(),d=void 0!==a.duration?a.duration:1E3,e=a.easing?a.easing:Bc,f=a.anchor?a.anchor:null;return function(a,h){if(h.time<c)return h.animate=!0,h.viewHints[0]+=1,!0;if(h.time<c+d){var k=1-e((h.time-c)/d),k=(b-h.viewState.rotation)*k;h.animate=!0;h.viewState.rotation+=k;if(f){var l=h.viewState.center;l[0]-=f[0];l[1]-=f[1];bb(l,k);ab(l,f)}h.viewHints[0]+=1;return!0}return!1}} + function Fc(a){var b=a.resolution,c=a.start?a.start:Date.now(),d=void 0!==a.duration?a.duration:1E3,e=a.easing?a.easing:Bc;return function(a,g){if(g.time<c)return g.animate=!0,g.viewHints[0]+=1,!0;if(g.time<c+d){var h=1-e((g.time-c)/d),k=b-g.viewState.resolution;g.animate=!0;g.viewState.resolution+=h*k;g.viewHints[0]+=1;return!0}return!1}};function Gc(a,b,c,d){this.H=a;this.I=b;this.J=c;this.L=d}function Hc(a,b,c){return a.H<=b&&b<=a.I&&a.J<=c&&c<=a.L}function Ic(a,b){return a.H==b.H&&a.J==b.J&&a.I==b.I&&a.L==b.L}function Jc(a,b){return a.H<=b.I&&a.I>=b.H&&a.J<=b.L&&a.L>=b.J};function Kc(a,b,c){void 0===c&&(c=[0,0]);c[0]=a[0]*b+.5|0;c[1]=a[1]*b+.5|0;return c}function Lc(a,b){if(Array.isArray(a))return a;void 0===b?b=[a,a]:b[0]=b[1]=a;return b};function Mc(a){this.minZoom=void 0!==a.minZoom?a.minZoom:0;this.b=a.resolutions;L(Ua(this.b,function(a,b){return b-a}),17);this.maxZoom=this.b.length-1;this.c=void 0!==a.origin?a.origin:null;this.f=null;void 0!==a.origins&&(this.f=a.origins,L(this.f.length==this.b.length,20));var b=a.extent;void 0===b||this.c||this.f||(this.c=xb(b));L(!this.c&&this.f||this.c&&!this.f,18);this.g=null;void 0!==a.tileSizes&&(this.g=a.tileSizes,L(this.g.length==this.b.length,19));this.h=void 0!==a.tileSize?a.tileSize: + this.g?null:256;L(!this.h&&this.g||this.h&&!this.g,22);this.i=void 0!==b?b:null;this.a=null;this.l=[0,0];void 0!==a.sizes?this.a=a.sizes.map(function(a){return new Gc(Math.min(0,a[0]),Math.max(a[0]-1,-1),Math.min(0,a[1]),Math.max(a[1]-1,-1))},this):b&&Nc(this,b)}var Oc=[0,0,0];function Pc(a,b,c,d,e){e=Qc(a,b,e);for(b=b[0]-1;b>=a.minZoom;){if(c.call(null,b,Rc(a,e,b,d)))return!0;--b}return!1}Mc.prototype.G=function(){return this.i};Mc.prototype.pa=function(a){return this.c?this.c:this.f[a]}; + Mc.prototype.O=function(a){return this.b[a]};function Sc(a,b,c,d){return b[0]<a.maxZoom?(d=Qc(a,b,d),Rc(a,d,b[0]+1,c)):null}function Tc(a,b,c,d){Uc(a,b[0],b[1],c,!1,Oc);var e=Oc[1],f=Oc[2];Uc(a,b[2],b[3],c,!0,Oc);a=Oc[1];b=Oc[2];void 0!==d?(d.H=e,d.I=a,d.J=f,d.L=b):d=new Gc(e,a,f,b);return d}function Rc(a,b,c,d){c=a.O(c);return Tc(a,b,c,d)}function Vc(a,b){var c=a.pa(b[0]),d=a.O(b[0]),e=Lc(Wc(a,b[0]),a.l);return[c[0]+(b[1]+.5)*e[0]*d,c[1]+(b[2]+.5)*e[1]*d]} + function Qc(a,b,c){var d=a.pa(b[0]),e=a.O(b[0]);a=Lc(Wc(a,b[0]),a.l);var f=d[0]+b[1]*a[0]*e;b=d[1]+b[2]*a[1]*e;return ib(f,b,f+a[0]*e,b+a[1]*e,c)}function Uc(a,b,c,d,e,f){var g=Xc(a,d),h=d/a.O(g),k=a.pa(g);a=Lc(Wc(a,g),a.l);b=h*Math.floor((b-k[0])/d+(e?.5:0))/a[0];c=h*Math.floor((c-k[1])/d+(e?0:.5))/a[1];e?(b=Math.ceil(b)-1,c=Math.ceil(c)-1):(b=Math.floor(b),c=Math.floor(c));e=b;void 0!==f?(f[0]=g,f[1]=e,f[2]=c):f=[g,e,c];return f}function Yc(a,b,c,d){c=a.O(c);return Uc(a,b[0],b[1],c,!1,d)} + function Wc(a,b){return a.h?a.h:a.g[b]}function Xc(a,b,c){return ia(Na(a.b,b,c||0),a.minZoom,a.maxZoom)}function Nc(a,b){for(var c=a.b.length,d=Array(c),e=a.minZoom;e<c;++e)d[e]=Rc(a,b,e);a.a=d};function Zc(a){var b=a.f;if(!b){var b=$c(a),c=ad(b,void 0,void 0),b=new Mc({extent:b,origin:xb(b),resolutions:c,tileSize:void 0});a.f=b}return b}function ad(a,b,c){b=void 0!==b?b:42;var d=rb(a);a=qb(a);c=Lc(void 0!==c?c:256);c=Math.max(a/c[0],d/c[1]);b+=1;d=Array(b);for(a=0;a<b;++a)d[a]=c/Math.pow(2,a);return d}function $c(a){a=Hb(a);var b=a.G();b||(a=180*Db.degrees/Lb(a),b=ib(-a,-a,a,a));return b};function bd(a){this.a=a.html;this.b=a.tileRanges?a.tileRanges:null};function cd(a){V.call(this);this.a=a?a:[];dd(this)}B(cd,V);cd.prototype.clear=function(){for(;0<this.get("length");)this.pop()};function ed(a,b,c){a.a.forEach(b,c)}cd.prototype.pop=function(){return fd(this,this.get("length")-1)};cd.prototype.push=function(a){var b=this.a.length;this.a.splice(b,0,a);dd(this);U(this,new gd(hd,a));return b};cd.prototype.remove=function(a){var b=this.a,c,d;c=0;for(d=b.length;c<d;++c)if(b[c]===a)return fd(this,c)}; + function fd(a,b){var c=a.a[b];a.a.splice(b,1);dd(a);U(a,new gd(id,c));return c}function dd(a){a.set("length",a.a.length)}var hd="add",id="remove";function gd(a,b){T.call(this,a);this.element=b}B(gd,T);var jd=/^#(?:[0-9a-f]{3}){1,2}$/i,kd=/^(?:rgb)?\((0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2})\)$/i,ld=/^(?:rgba)?\((0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2}),\s?(0|1|0\.\d{0,10})\)$/i,md=/^([a-z]*)$/i;function nd(a){if("string"!==typeof a){var b=a[0];b!=(b|0)&&(b=b+.5|0);var c=a[1];c!=(c|0)&&(c=c+.5|0);var d=a[2];d!=(d|0)&&(d=d+.5|0);a="rgba("+b+","+c+","+d+","+(void 0===a[3]?1:a[3])+")"}return a} + var pd=function(){var a={},b=0;return function(c){var d;if(a.hasOwnProperty(c))d=a[c];else{if(1024<=b){d=0;for(var e in a)0===(d++&3)&&(delete a[e],--b)}d=c;var f,g;md.exec(d)&&(e=document.createElement("div"),e.style.color=d,document.body.appendChild(e),d=window.getComputedStyle(e).color,document.body.removeChild(e));jd.exec(d)?(f=d.length-1,L(3==f||6==f,54),g=3==f?1:2,f=parseInt(d.substr(1+0*g,g),16),e=parseInt(d.substr(1+1*g,g),16),d=parseInt(d.substr(1+2*g,g),16),1==g&&(f=(f<<4)+f,e=(e<<4)+e, + d=(d<<4)+d),f=[f,e,d,1]):(g=ld.exec(d))?(f=Number(g[1]),e=Number(g[2]),d=Number(g[3]),g=Number(g[4]),f=od([f,e,d,g])):(g=kd.exec(d))?(f=Number(g[1]),e=Number(g[2]),d=Number(g[3]),f=od([f,e,d,1])):L(!1,14);d=f;a[c]=d;++b}return d}}();function od(a){var b=[];b[0]=ia(a[0]+.5|0,0,255);b[1]=ia(a[1]+.5|0,0,255);b[2]=ia(a[2]+.5|0,0,255);b[3]=ia(a[3],0,1);return b};function qd(a){return"string"===typeof a||a instanceof CanvasPattern||a instanceof CanvasGradient?a:nd(a)};var rd=String.prototype.trim?function(a){return a.trim()}:function(a){return a.replace(/^[\s\xa0]+|[\s\xa0]+$/g,"")};function sd(a,b){return a<b?-1:a>b?1:0};function td(a,b,c){return 2>=arguments.length?Array.prototype.slice.call(a,b):Array.prototype.slice.call(a,b,c)};var ud;a:{var vd=aa.navigator;if(vd){var wd=vd.userAgent;if(wd){ud=wd;break a}}ud=""}function xd(a){return-1!=ud.indexOf(a)};var yd=xd("Opera"),zd=xd("Trident")||xd("MSIE"),Ad=xd("Edge"),Bd=xd("Gecko")&&!(-1!=ud.toLowerCase().indexOf("webkit")&&!xd("Edge"))&&!(xd("Trident")||xd("MSIE"))&&!xd("Edge"),Cd=-1!=ud.toLowerCase().indexOf("webkit")&&!xd("Edge"),Dd; + a:{var Ed="",Fd=function(){var a=ud;if(Bd)return/rv\:([^\);]+)(\)|;)/.exec(a);if(Ad)return/Edge\/([\d\.]+)/.exec(a);if(zd)return/\b(?:MSIE|rv)[: ]([^\);]+)(\)|;)/.exec(a);if(Cd)return/WebKit\/(\S+)/.exec(a);if(yd)return/(?:Version)[ \/]?(\S+)/.exec(a)}();Fd&&(Ed=Fd?Fd[1]:"");if(zd){var Gd,Hd=aa.document;Gd=Hd?Hd.documentMode:void 0;if(null!=Gd&&Gd>parseFloat(Ed)){Dd=String(Gd);break a}}Dd=Ed}var Id={};function Jd(){return[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]}function Kd(a,b){a[0]=b[0];a[1]=b[1];a[4]=b[2];a[5]=b[3];a[12]=b[4];a[13]=b[5];return a};var Ld=Jd();function Md(a,b){var c=document.createElement("CANVAS");a&&(c.width=a);b&&(c.height=b);return c.getContext("2d")} + var Nd=function(){var a;return function(){if(void 0===a){var b=document.createElement("P"),c,d={webkitTransform:"-webkit-transform",OTransform:"-o-transform",msTransform:"-ms-transform",MozTransform:"-moz-transform",transform:"transform"};document.body.appendChild(b);for(var e in d)e in b.style&&(b.style[e]="translate(1px,1px)",c=K.getComputedStyle(b).getPropertyValue(d[e]));document.body.removeChild(b);a=c&&"none"!==c}return a}}(),Od=function(){var a;return function(){if(void 0===a){var b=document.createElement("P"), + c,d={webkitTransform:"-webkit-transform",OTransform:"-o-transform",msTransform:"-ms-transform",MozTransform:"-moz-transform",transform:"transform"};document.body.appendChild(b);for(var e in d)e in b.style&&(b.style[e]="translate3d(1px,1px,1px)",c=K.getComputedStyle(b).getPropertyValue(d[e]));document.body.removeChild(b);a=c&&"none"!==c}return a}}(); + function Pd(a,b){var c=a.style;c.WebkitTransform=b;c.MozTransform=b;c.b=b;c.msTransform=b;c.transform=b;if((c=zd)&&!(c=Id["9.0"])){for(var c=0,d=rd(String(Dd)).split("."),e=rd("9.0").split("."),f=Math.max(d.length,e.length),g=0;0==c&&g<f;g++){var h=d[g]||"",k=e[g]||"",l=RegExp("(\\d*)(\\D*)","g"),m=RegExp("(\\d*)(\\D*)","g");do{var p=l.exec(h)||["","",""],q=m.exec(k)||["","",""];if(0==p[0].length&&0==q[0].length)break;c=sd(0==p[1].length?0:parseInt(p[1],10),0==q[1].length?0:parseInt(q[1],10))||sd(0== + p[2].length,0==q[2].length)||sd(p[2],q[2])}while(0==c)}c=Id["9.0"]=0<=c}c&&(a.style.transformOrigin="0 0")}function Qd(a,b){var c;if(Od()){var d=Kd(Ld,b),e=Array(16);for(c=0;16>c;++c)e[c]=d[c].toFixed(6);Pd(a,"matrix3d("+e.join(",")+")")}else if(Nd()){d=Array(6);for(c=0;6>c;++c)d[c]=b[c].toFixed(6);Pd(a,"matrix("+d.join(",")+")")}else a.style.left=Math.round(b[4])+"px",a.style.top=Math.round(b[5])+"px"}function Rd(a,b){var c=b.parentNode;c&&c.replaceChild(a,b)} + function Sd(a){a&&a.parentNode&&a.parentNode.removeChild(a)};function Td(a,b,c){T.call(this,a);this.map=b;this.frameState=void 0!==c?c:null}B(Td,T);function Ud(a){V.call(this);this.element=a.element?a.element:null;this.f=this.D=null;this.i=[];this.render=a.render?a.render:I;a.target&&(a=a.target,this.D="string"===typeof a?document.getElementById(a):a)}B(Ud,V);Ud.prototype.R=function(){Sd(this.element);V.prototype.R.call(this)}; + Ud.prototype.setMap=function(a){this.f&&Sd(this.element);for(var b=0,c=this.i.length;b<c;++b)M(this.i[b]);this.i.length=0;if(this.f=a)(this.D?this.D:a.j).appendChild(this.element),this.render!==I&&this.i.push(R(a,"postrender",this.render,this)),a.render()};function Vd(a){a=a?a:{};this.B=document.createElement("UL");this.j=document.createElement("LI");this.B.appendChild(this.j);this.j.style.display="none";this.g=void 0!==a.collapsed?a.collapsed:!0;this.v=void 0!==a.collapsible?a.collapsible:!0;this.v||(this.g=!1);var b=void 0!==a.className?a.className:"ol-attribution",c=void 0!==a.tipLabel?a.tipLabel:"Attributions",d=void 0!==a.collapseLabel?a.collapseLabel:"\u00bb";"string"===typeof d?(this.h=document.createElement("span"),this.h.textContent=d):this.h= + d;d=void 0!==a.label?a.label:"i";"string"===typeof d?(this.s=document.createElement("span"),this.s.textContent=d):this.s=d;var e=this.v&&!this.g?this.h:this.s,d=document.createElement("button");d.setAttribute("type","button");d.title=c;d.appendChild(e);R(d,"click",this.P,this);c=document.createElement("div");c.className=b+" ol-unselectable ol-control"+(this.g&&this.v?" ol-collapsed":"")+(this.v?"":" ol-uncollapsible");c.appendChild(this.B);c.appendChild(d);Ud.call(this,{element:c,render:a.render? + a.render:Wd,target:a.target});this.u=!0;this.c={};this.a={};this.N={}}B(Vd,Ud); + function Wd(a){if(a=a.frameState){var b,c,d,e,f,g,h,k,l,m,p,q=a.layerStatesArray,u=pa({},a.attributions),w={},r=a.viewState.projection;c=0;for(b=q.length;c<b;c++)if(g=q[c].layer.da())if(m=J(g).toString(),l=g.h)for(d=0,e=l.length;d<e;d++)if(h=l[d],k=J(h).toString(),!(k in u)){if(f=a.usedTiles[m]){var x=g.sa(r);a:{p=h;var D=r;if(p.b){var t,z,C,E=void 0;for(E in f)if(E in p.b){C=f[E];var v;t=0;for(z=p.b[E].length;t<z;++t){v=p.b[E][t];if(Jc(v,C)){p=!0;break a}var H=Rc(x,$c(D),parseInt(E,10)),G=H.I-H.H+ + 1;if(C.H<H.H||C.I>H.I)if(Jc(v,new Gc(la(C.H,G),la(C.I,G),C.J,C.L))||C.I-C.H+1>G&&Jc(v,H)){p=!0;break a}}}p=!1}else p=!0}}else p=!1;p?(k in w&&delete w[k],u[k]=h):w[k]=h}b=[u,w];c=b[0];b=b[1];for(var A in this.c)A in c?(this.a[A]||(this.c[A].style.display="",this.a[A]=!0),delete c[A]):A in b?(this.a[A]&&(this.c[A].style.display="none",delete this.a[A]),delete b[A]):(Sd(this.c[A]),delete this.c[A],delete this.a[A]);for(A in c)d=document.createElement("LI"),d.innerHTML=c[A].a,this.B.appendChild(d),this.c[A]= + d,this.a[A]=!0;for(A in b)d=document.createElement("LI"),d.innerHTML=b[A].a,d.style.display="none",this.B.appendChild(d),this.c[A]=d;A=!sa(this.a)||!sa(a.logos);this.u!=A&&(this.element.style.display=A?"":"none",this.u=A);A&&sa(this.a)?this.element.classList.add("ol-logo-only"):this.element.classList.remove("ol-logo-only");var F;a=a.logos;A=this.N;for(F in A)F in a||(Sd(A[F]),delete A[F]);for(var Q in a)b=a[Q],b instanceof HTMLElement&&(this.j.appendChild(b),A[Q]=b),Q in A||(F=new Image,F.src=Q,""=== + b?c=F:(c=document.createElement("a"),c.href=b,c.appendChild(F)),this.j.appendChild(c),A[Q]=c);this.j.style.display=sa(a)?"none":""}else this.u&&(this.element.style.display="none",this.u=!1)}Vd.prototype.P=function(a){a.preventDefault();this.element.classList.toggle("ol-collapsed");this.g?Rd(this.h,this.s):Rd(this.s,this.h);this.g=!this.g};function Xd(a){a=a?a:{};this.a=void 0!==a.className?a.className:"ol-full-screen";var b=void 0!==a.label?a.label:"\u2922";this.g="string"===typeof b?document.createTextNode(b):b;b=void 0!==a.labelActive?a.labelActive:"\u00d7";this.h="string"===typeof b?document.createTextNode(b):b;var c=a.tipLabel?a.tipLabel:"Toggle full-screen",b=document.createElement("button");b.className=this.a+"-"+Yd();b.setAttribute("type","button");b.title=c;b.appendChild(this.g);R(b,"click",this.v,this);c=document.createElement("div"); + c.className=this.a+" ol-unselectable ol-control "+(Zd()?"":"ol-unsupported");c.appendChild(b);Ud.call(this,{element:c,target:a.target});this.s=void 0!==a.keys?a.keys:!1;this.c=a.source}B(Xd,Ud); + Xd.prototype.v=function(a){a.preventDefault();Zd()&&(a=this.f)&&(Yd()?document.exitFullscreen?document.exitFullscreen():document.msExitFullscreen?document.msExitFullscreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.webkitExitFullscreen&&document.webkitExitFullscreen():(a=this.c?"string"===typeof this.c?document.getElementById(this.c):this.c:a.Ra(),this.s?a.mozRequestFullScreenWithKeys?a.mozRequestFullScreenWithKeys():a.webkitRequestFullscreen?a.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT): + $d(a):$d(a)))};Xd.prototype.j=function(){var a=this.element.firstElementChild,b=this.f;Yd()?(a.className=this.a+"-true",Rd(this.h,this.g)):(a.className=this.a+"-false",Rd(this.g,this.h));b&&b.yb()};Xd.prototype.setMap=function(a){Ud.prototype.setMap.call(this,a);a&&this.i.push(R(K.document,ae(),this.j,this))}; + function Zd(){var a=document.body;return!!(a.webkitRequestFullscreen||a.mozRequestFullScreen&&document.mozFullScreenEnabled||a.msRequestFullscreen&&document.msFullscreenEnabled||a.requestFullscreen&&document.fullscreenEnabled)}function Yd(){return!!(document.webkitIsFullScreen||document.mozFullScreen||document.msFullscreenElement||document.fullscreenElement)} + function $d(a){a.requestFullscreen?a.requestFullscreen():a.msRequestFullscreen?a.msRequestFullscreen():a.mozRequestFullScreen?a.mozRequestFullScreen():a.webkitRequestFullscreen&&a.webkitRequestFullscreen()}var ae=function(){var a;return function(){if(!a){var b=document.body;b.webkitRequestFullscreen?a="webkitfullscreenchange":b.mozRequestFullScreen?a="mozfullscreenchange":b.msRequestFullscreen?a="MSFullscreenChange":b.requestFullscreen&&(a="fullscreenchange")}return a}}();function be(a){a=a?a:{};var b=void 0!==a.className?a.className:"ol-rotate",c=void 0!==a.label?a.label:"\u21e7";this.a=null;"string"===typeof c?(this.a=document.createElement("span"),this.a.className="ol-compass",this.a.textContent=c):(this.a=c,this.a.classList.add("ol-compass"));var d=a.tipLabel?a.tipLabel:"Reset rotation",c=document.createElement("button");c.className=b+"-reset";c.setAttribute("type","button");c.title=d;c.appendChild(this.a);R(c,"click",be.prototype.s,this);d=document.createElement("div"); + d.className=b+" ol-unselectable ol-control";d.appendChild(c);b=a.render?a.render:ce;this.g=a.resetNorth?a.resetNorth:void 0;Ud.call(this,{element:d,render:b,target:a.target});this.h=void 0!==a.duration?a.duration:250;this.c=void 0!==a.autoHide?a.autoHide:!0;this.j=void 0;this.c&&this.element.classList.add("ol-hidden")}B(be,Ud); + be.prototype.s=function(a){a.preventDefault();if(void 0!==this.g)this.g();else{a=this.f;var b=a.U();if(b){var c=b.get(xc);void 0!==c&&(0<this.h&&(c%=2*Math.PI,c<-Math.PI&&(c+=2*Math.PI),c>Math.PI&&(c-=2*Math.PI),a.oa(Ec({rotation:c,duration:this.h,easing:Ac}))),b.set(xc,0))}}}; + function ce(a){if(a=a.frameState){a=a.viewState.rotation;if(a!=this.j){var b="rotate("+a+"rad)";if(this.c){var c=this.element.classList.contains("ol-hidden");c||0!==a?c&&0!==a&&this.element.classList.remove("ol-hidden"):this.element.classList.add("ol-hidden")}this.a.style.msTransform=b;this.a.style.webkitTransform=b;this.a.style.transform=b}this.j=a}};function de(a){a=a?a:{};var b=void 0!==a.className?a.className:"ol-zoom",c=void 0!==a.delta?a.delta:1,d=void 0!==a.zoomInLabel?a.zoomInLabel:"+",e=void 0!==a.zoomOutLabel?a.zoomOutLabel:"\u2212",f=void 0!==a.zoomInTipLabel?a.zoomInTipLabel:"Zoom in",g=void 0!==a.zoomOutTipLabel?a.zoomOutTipLabel:"Zoom out",h=document.createElement("button");h.className=b+"-in";h.setAttribute("type","button");h.title=f;h.appendChild("string"===typeof d?document.createTextNode(d):d);R(h,"click",de.prototype.c.bind(this, + c));d=document.createElement("button");d.className=b+"-out";d.setAttribute("type","button");d.title=g;d.appendChild("string"===typeof e?document.createTextNode(e):e);R(d,"click",de.prototype.c.bind(this,-c));c=document.createElement("div");c.className=b+" ol-unselectable ol-control";c.appendChild(h);c.appendChild(d);Ud.call(this,{element:c,target:a.target});this.a=void 0!==a.duration?a.duration:250}B(de,Ud); + de.prototype.c=function(a,b){b.preventDefault();var c=this.f,d=c.U();if(d){var e=d.O();e&&(0<this.a&&c.oa(Fc({resolution:e,duration:this.a,easing:Ac})),c=d.constrainResolution(e,a),d.set(wc,c))}};function ee(a){a=a?a:{};var b=new cd;(void 0!==a.zoom?a.zoom:1)&&b.push(new de(a.zoomOptions));(void 0!==a.rotate?a.rotate:1)&&b.push(new be(a.rotateOptions));(void 0!==a.attribution?a.attribution:1)&&b.push(new Vd(a.attributionOptions));return b};var fe; + function ge(){var a=aa.MessageChannel;"undefined"===typeof a&&"undefined"!==typeof window&&window.postMessage&&window.addEventListener&&!xd("Presto")&&(a=function(){var a=document.createElement("IFRAME");a.style.display="none";a.src="";document.documentElement.appendChild(a);var b=a.contentWindow,a=b.document;a.open();a.write("");a.close();var c="callImmediate"+Math.random(),d="file:"==b.location.protocol?"*":b.location.protocol+"//"+b.location.host,a=ea(function(a){if(("*"==d||a.origin==d)&&a.data== + c)this.port1.onmessage()},this);b.addEventListener("message",a,!1);this.port1={};this.port2={postMessage:function(){b.postMessage(c,d)}}});if("undefined"!==typeof a&&!xd("Trident")&&!xd("MSIE")){var b=new a,c={},d=c;b.port1.onmessage=function(){if(void 0!==c.next){c=c.next;var a=c.nc;c.nc=null;a()}};return function(a){d.next={nc:a};d=d.next;b.port2.postMessage(0)}}return"undefined"!==typeof document&&"onreadystatechange"in document.createElement("SCRIPT")?function(a){var b=document.createElement("SCRIPT"); + b.onreadystatechange=function(){b.onreadystatechange=null;b.parentNode.removeChild(b);b=null;a();a=null};document.documentElement.appendChild(b)}:function(a){aa.setTimeout(a,0)}};var he=["experimental-webgl","webgl","webkit-3d","moz-webgl"];function ie(a,b){var c,d,e=he.length;for(d=0;d<e;++d)try{if(c=a.getContext(he[d],b))return c}catch(f){}return null};var je,ke="undefined"!==typeof navigator?navigator.userAgent.toLowerCase():"",le=-1!==ke.indexOf("firefox"),me=-1!==ke.indexOf("safari")&&-1===ke.indexOf("chrom"),ne=-1!==ke.indexOf("macintosh"),oe=K.devicePixelRatio||1,pe=!1,qe=function(){if(!("HTMLCanvasElement"in K))return!1;try{var a=Md();return a?(a.setLineDash&&(pe=!0),!0):!1}catch(b){return!1}}(),re="ontouchstart"in K,se="PointerEvent"in K,te=!!K.navigator.msPointerEnabled,ue=!1,ve=[]; + if("WebGLRenderingContext"in K)try{var we=ie(document.createElement("CANVAS"),{failIfMajorPerformanceCaveat:!0});we&&(ue=!0,ve=we.getSupportedExtensions())}catch(a){}je=ue;fa=ve;function xe(a,b){this.b=a;this.g=b};function ye(a){xe.call(this,a,{mousedown:this.Pd,mousemove:this.Qd,mouseup:this.Td,mouseover:this.Sd,mouseout:this.Rd});this.a=a.a;this.c=[]}B(ye,xe);function ze(a,b){for(var c=a.c,d=b.clientX,e=b.clientY,f=0,g=c.length,h;f<g&&(h=c[f]);f++){var k=Math.abs(e-h[1]);if(25>=Math.abs(d-h[0])&&25>=k)return!0}return!1}function Ae(a){var b=Be(a,a),c=b.preventDefault;b.preventDefault=function(){a.preventDefault();c()};b.pointerId=1;b.isPrimary=!0;b.pointerType="mouse";return b}n=ye.prototype; + n.Pd=function(a){if(!ze(this,a)){if((1).toString()in this.a){var b=Ae(a);Ce(this.b,De,b,a);delete this.a[(1).toString()]}b=Ae(a);this.a[(1).toString()]=a;Ce(this.b,Ee,b,a)}};n.Qd=function(a){if(!ze(this,a)){var b=Ae(a);Ce(this.b,Fe,b,a)}};n.Td=function(a){if(!ze(this,a)){var b=this.a[(1).toString()];b&&b.button===a.button&&(b=Ae(a),Ce(this.b,Ge,b,a),delete this.a[(1).toString()])}};n.Sd=function(a){if(!ze(this,a)){var b=Ae(a);He(this.b,b,a)}}; + n.Rd=function(a){if(!ze(this,a)){var b=Ae(a);Ie(this.b,b,a)}};function Je(a){xe.call(this,a,{MSPointerDown:this.Yd,MSPointerMove:this.Zd,MSPointerUp:this.be,MSPointerOut:this.$d,MSPointerOver:this.ae,MSPointerCancel:this.Xd,MSGotPointerCapture:this.Vd,MSLostPointerCapture:this.Wd});this.a=a.a;this.c=["","unavailable","touch","pen","mouse"]}B(Je,xe);function Ke(a,b){var c=b;"number"===typeof b.pointerType&&(c=Be(b,b),c.pointerType=a.c[b.pointerType]);return c}n=Je.prototype;n.Yd=function(a){this.a[a.pointerId.toString()]=a;var b=Ke(this,a);Ce(this.b,Ee,b,a)}; + n.Zd=function(a){var b=Ke(this,a);Ce(this.b,Fe,b,a)};n.be=function(a){var b=Ke(this,a);Ce(this.b,Ge,b,a);delete this.a[a.pointerId.toString()]};n.$d=function(a){var b=Ke(this,a);Ie(this.b,b,a)};n.ae=function(a){var b=Ke(this,a);He(this.b,b,a)};n.Xd=function(a){var b=Ke(this,a);Ce(this.b,De,b,a);delete this.a[a.pointerId.toString()]};n.Wd=function(a){U(this.b,new Le("lostpointercapture",a,a))};n.Vd=function(a){U(this.b,new Le("gotpointercapture",a,a))};function Me(a){xe.call(this,a,{pointerdown:this.le,pointermove:this.me,pointerup:this.pe,pointerout:this.ne,pointerover:this.oe,pointercancel:this.ke,gotpointercapture:this.sd,lostpointercapture:this.Od})}B(Me,xe);n=Me.prototype;n.le=function(a){Ne(this.b,a)};n.me=function(a){Ne(this.b,a)};n.pe=function(a){Ne(this.b,a)};n.ne=function(a){Ne(this.b,a)};n.oe=function(a){Ne(this.b,a)};n.ke=function(a){Ne(this.b,a)};n.Od=function(a){Ne(this.b,a)};n.sd=function(a){Ne(this.b,a)};function Le(a,b,c){T.call(this,a);this.b=b;a=c?c:{};this.buttons=Oe(a);this.pressure=Pe(a,this.buttons);this.bubbles="bubbles"in a?a.bubbles:!1;this.cancelable="cancelable"in a?a.cancelable:!1;this.view="view"in a?a.view:null;this.detail="detail"in a?a.detail:null;this.screenX="screenX"in a?a.screenX:0;this.screenY="screenY"in a?a.screenY:0;this.clientX="clientX"in a?a.clientX:0;this.clientY="clientY"in a?a.clientY:0;this.button="button"in a?a.button:0;this.relatedTarget="relatedTarget"in a?a.relatedTarget: + null;this.pointerId="pointerId"in a?a.pointerId:0;this.width="width"in a?a.width:0;this.height="height"in a?a.height:0;this.pointerType="pointerType"in a?a.pointerType:"";this.isPrimary="isPrimary"in a?a.isPrimary:!1;b.preventDefault&&(this.preventDefault=function(){b.preventDefault()})}B(Le,T);function Oe(a){if(a.buttons||Qe)a=a.buttons;else switch(a.which){case 1:a=1;break;case 2:a=4;break;case 3:a=2;break;default:a=0}return a}function Pe(a,b){var c=0;a.pressure?c=a.pressure:c=b?.5:0;return c} + var Qe=!1;try{Qe=1===(new MouseEvent("click",{buttons:1})).buttons}catch(a){};function Re(a,b){xe.call(this,a,{touchstart:this.Ce,touchmove:this.Be,touchend:this.Ae,touchcancel:this.ze});this.a=a.a;this.l=b;this.c=void 0;this.h=0;this.f=void 0}B(Re,xe);n=Re.prototype;n.Uc=function(){this.h=0;this.f=void 0}; + function Se(a,b,c){b=Be(b,c);b.pointerId=c.identifier+2;b.bubbles=!0;b.cancelable=!0;b.detail=a.h;b.button=0;b.buttons=1;b.width=c.webkitRadiusX||c.radiusX||0;b.height=c.webkitRadiusY||c.radiusY||0;b.pressure=c.webkitForce||c.force||.5;b.isPrimary=a.c===c.identifier;b.pointerType="touch";b.clientX=c.clientX;b.clientY=c.clientY;b.screenX=c.screenX;b.screenY=c.screenY;return b} + function Te(a,b,c){function d(){b.preventDefault()}var e=Array.prototype.slice.call(b.changedTouches),f=e.length,g,h;for(g=0;g<f;++g)h=Se(a,b,e[g]),h.preventDefault=d,c.call(a,b,h)} + n.Ce=function(a){var b=a.touches,c=Object.keys(this.a),d=c.length;if(d>=b.length){var e=[],f,g,h;for(f=0;f<d;++f){g=c[f];h=this.a[g];var k;if(!(k=1==g))a:{k=b.length;for(var l,m=0;m<k;m++)if(l=b[m],l.identifier===g-2){k=!0;break a}k=!1}k||e.push(h.out)}for(f=0;f<e.length;++f)this.Ib(a,e[f])}b=a.changedTouches[0];c=Object.keys(this.a).length;if(0===c||1===c&&(1).toString()in this.a)this.c=b.identifier,b=K,void 0!==this.f&&b.clearTimeout(this.f);Ue(this,a);this.h++;Te(this,a,this.je)}; + n.je=function(a,b){this.a[b.pointerId]={target:b.target,out:b,Rc:b.target};var c=this.b;b.bubbles=!0;Ce(c,Ve,b,a);c=this.b;b.bubbles=!1;Ce(c,We,b,a);Ce(this.b,Ee,b,a)};n.Be=function(a){a.preventDefault();Te(this,a,this.Ud)};n.Ud=function(a,b){var c=this.a[b.pointerId];if(c){var d=c.out,e=c.Rc;Ce(this.b,Fe,b,a);d&&e!==b.target&&(d.relatedTarget=b.target,b.relatedTarget=e,d.target=e,b.target?(Ie(this.b,d,a),He(this.b,b,a)):(b.target=e,b.relatedTarget=null,this.Ib(a,b)));c.out=b;c.Rc=b.target}}; + n.Ae=function(a){Ue(this,a);Te(this,a,this.De)};n.De=function(a,b){Ce(this.b,Ge,b,a);this.b.out(b,a);var c=this.b;b.bubbles=!1;Ce(c,Xe,b,a);delete this.a[b.pointerId];b.isPrimary&&(this.c=void 0,this.f=K.setTimeout(this.Uc.bind(this),200))};n.ze=function(a){Te(this,a,this.Ib)};n.Ib=function(a,b){Ce(this.b,De,b,a);this.b.out(b,a);var c=this.b;b.bubbles=!1;Ce(c,Xe,b,a);delete this.a[b.pointerId];b.isPrimary&&(this.c=void 0,this.f=K.setTimeout(this.Uc.bind(this),200))}; + function Ue(a,b){var c=a.l.c,d=b.changedTouches[0];if(a.c===d.identifier){var e=[d.clientX,d.clientY];c.push(e);K.setTimeout(function(){Qa(c,e)},2500)}};function Ye(a){Ga.call(this);this.g=a;this.a={};this.f={};this.b=[];se?Ze(this,new Me(this)):te?Ze(this,new Je(this)):(a=new ye(this),Ze(this,a),re&&Ze(this,new Re(this,a)));a=this.b.length;for(var b,c=0;c<a;c++)b=this.b[c],$e(this,Object.keys(b.g))}B(Ye,Ga);function Ze(a,b){var c=Object.keys(b.g);c&&(c.forEach(function(a){var c=b.g[a];c&&(this.f[a]=c.bind(b))},a),a.b.push(b))}Ye.prototype.c=function(a){var b=this.f[a.type];b&&b(a)}; + function $e(a,b){b.forEach(function(a){R(this.g,a,this.c,this)},a)}function af(a,b){b.forEach(function(a){ya(this.g,a,this.c,this)},a)}function Be(a,b){for(var c={},d,e=0,f=bf.length;e<f;e++)d=bf[e][0],c[d]=a[d]||b[d]||bf[e][1];return c}Ye.prototype.out=function(a,b){a.bubbles=!0;Ce(this,cf,a,b)};function Ie(a,b,c){a.out(b,c);var d=b.target,e=b.relatedTarget;d&&e&&d.contains(e)||(b.bubbles=!1,Ce(a,Xe,b,c))} + function He(a,b,c){b.bubbles=!0;Ce(a,Ve,b,c);var d=b.target,e=b.relatedTarget;d&&e&&d.contains(e)||(b.bubbles=!1,Ce(a,We,b,c))}function Ce(a,b,c,d){U(a,new Le(b,d,c))}function Ne(a,b){U(a,new Le(b.type,b,b))}Ye.prototype.R=function(){for(var a=this.b.length,b,c=0;c<a;c++)b=this.b[c],af(this,Object.keys(b.g));Ga.prototype.R.call(this)}; + var Fe="pointermove",Ee="pointerdown",Ge="pointerup",Ve="pointerover",cf="pointerout",We="pointerenter",Xe="pointerleave",De="pointercancel",bf=[["bubbles",!1],["cancelable",!1],["view",null],["detail",null],["screenX",0],["screenY",0],["clientX",0],["clientY",0],["ctrlKey",!1],["altKey",!1],["shiftKey",!1],["metaKey",!1],["button",0],["relatedTarget",null],["buttons",0],["pointerId",0],["width",0],["height",0],["pressure",0],["tiltX",0],["tiltY",0],["pointerType",""],["hwTimestamp",0],["isPrimary", + !1],["type",""],["target",null],["currentTarget",null],["which",0]];function df(a,b,c,d,e){Td.call(this,a,b,e);this.originalEvent=c;this.pixel=b.uc(c);this.coordinate=b.Ba(this.pixel);this.dragging=void 0!==d?d:!1}B(df,Td);df.prototype.preventDefault=function(){Td.prototype.preventDefault.call(this);this.originalEvent.preventDefault()};df.prototype.stopPropagation=function(){Td.prototype.stopPropagation.call(this);this.originalEvent.stopPropagation()};function ef(a,b,c,d,e){df.call(this,a,b,c.b,d,e);this.b=c}B(ef,df); + function ff(a){Ga.call(this);this.c=a;this.h=0;this.l=!1;this.f=[];this.a=null;a=this.c.a;this.v=0;this.s={};this.g=new Ye(a);this.b=null;this.i=R(this.g,Ee,this.Cd,this);this.j=R(this.g,Fe,this.re,this)}B(ff,Ga);function gf(a,b){var c;c=new ef(hf,a.c,b);U(a,c);0!==a.h?(K.clearTimeout(a.h),a.h=0,c=new ef(jf,a.c,b),U(a,c)):a.h=K.setTimeout(function(){this.h=0;var a=new ef(kf,this.c,b);U(this,a)}.bind(a),250)} + function lf(a,b){b.type==mf||b.type==nf?delete a.s[b.pointerId]:b.type==of&&(a.s[b.pointerId]=!0);a.v=Object.keys(a.s).length}n=ff.prototype;n.xc=function(a){lf(this,a);var b=new ef(mf,this.c,a);U(this,b);!this.l&&0===a.button&&gf(this,this.a);0===this.v&&(this.f.forEach(M),this.f.length=0,this.l=!1,this.a=null,Da(this.b),this.b=null)}; + n.Cd=function(a){lf(this,a);var b=new ef(of,this.c,a);U(this,b);this.a=a;0===this.f.length&&(this.b=new Ye(document),this.f.push(R(this.b,pf,this.ee,this),R(this.b,mf,this.xc,this),R(this.g,nf,this.xc,this)))};n.ee=function(a){if(a.clientX!=this.a.clientX||a.clientY!=this.a.clientY){this.l=!0;var b=new ef(qf,this.c,a,this.l);U(this,b)}a.preventDefault()};n.re=function(a){U(this,new ef(a.type,this.c,a,!(!this.a||a.clientX==this.a.clientX&&a.clientY==this.a.clientY)))}; + n.R=function(){this.j&&(M(this.j),this.j=null);this.i&&(M(this.i),this.i=null);this.f.forEach(M);this.f.length=0;this.b&&(Da(this.b),this.b=null);this.g&&(Da(this.g),this.g=null);Ga.prototype.R.call(this)};var kf="singleclick",hf="click",jf="dblclick",qf="pointerdrag",pf="pointermove",of="pointerdown",mf="pointerup",nf="pointercancel",rf={Pe:kf,Ee:hf,Fe:jf,Ie:qf,Le:pf,He:of,Oe:mf,Ne:"pointerover",Me:"pointerout",Je:"pointerenter",Ke:"pointerleave",Ge:nf};function sf(a){V.call(this);var b=pa({},a);b.opacity=void 0!==a.opacity?a.opacity:1;b.visible=void 0!==a.visible?a.visible:!0;b.zIndex=void 0!==a.zIndex?a.zIndex:0;b.maxResolution=void 0!==a.maxResolution?a.maxResolution:Infinity;b.minResolution=void 0!==a.minResolution?a.minResolution:0;this.l(b)}B(sf,V); + function tf(a){var b=a.Xb(),c=a.Sb(),d=a.gb(),e=a.G(),f=a.Yb(),g=a.get("maxResolution"),h=a.get("minResolution");return{layer:a,opacity:ia(b,0,1),ac:c,visible:d,hb:!0,extent:e,zIndex:f,maxResolution:g,minResolution:Math.max(h,0)}}n=sf.prototype;n.G=function(){return this.get("extent")};n.Xb=function(){return this.get("opacity")};n.gb=function(){return this.get("visible")};n.Yb=function(){return this.get("zIndex")};n.Bc=function(a){this.set("opacity",a)};n.Cc=function(a){this.set("visible",a)}; + n.Dc=function(a){this.set("zIndex",a)};function uf(a,b,c,d,e){T.call(this,a);this.vectorContext=b;this.frameState=c;this.context=d;this.glContext=e}B(uf,T);function vf(a){V.call(this);this.N=Hb(a.projection);this.h=wf(a.attributions);this.D=a.logo;this.P=void 0!==a.state?a.state:"ready";this.i=void 0!==a.wrapX?a.wrapX:!1}B(vf,V);function wf(a){if("string"===typeof a)return[new bd({html:a})];if(a instanceof bd)return[a];if(Array.isArray(a)){for(var b=a.length,c=Array(b),d=0;d<b;d++){var e=a[d];c[d]="string"===typeof e?new bd({html:e}):e}return c}return null}vf.prototype.fa=I;vf.prototype.ia=function(){return this.N};vf.prototype.T=function(){return this.P}; + vf.prototype.Ja=function(){this.w()};function xf(a){var b=pa({},a);delete b.source;sf.call(this,b);this.h=this.f=this.c=null;a.map&&this.setMap(a.map);R(this,La("source"),this.Hd,this);this.$b(a.source?a.source:null)}B(xf,sf);function yf(a,b){return a.visible&&b>=a.minResolution&&b<a.maxResolution}n=xf.prototype;n.Pb=function(a){a=a?a:[];a.push(tf(this));return a};n.da=function(){return this.get("source")||null};n.Sb=function(){var a=this.da();return a?a.T():"undefined"};n.fe=function(){this.w()}; + n.Hd=function(){this.h&&(M(this.h),this.h=null);var a=this.da();a&&(this.h=R(a,"change",this.fe,this));this.w()};n.setMap=function(a){this.c&&(M(this.c),this.c=null);a||this.w();this.f&&(M(this.f),this.f=null);a&&(this.c=R(a,"precompose",function(a){var c=tf(this);c.hb=!1;c.zIndex=Infinity;a.frameState.layerStatesArray.push(c);a.frameState.layerStates[J(this)]=c},this),this.f=R(this,"change",a.render,a),this.w())};n.$b=function(a){this.set("source",a)};function zf(){this.b={};this.a=0}zf.prototype.clear=function(){this.b={};this.a=0};zf.prototype.get=function(a,b,c){a=b+":"+a+":"+(c?nd(c):"null");return a in this.b?this.b[a]:null};zf.prototype.set=function(a,b,c,d){this.b[b+":"+a+":"+(c?nd(c):"null")]=d;++this.a};var Af=new zf;var Bf=Array(6);function Cf(){return[1,0,0,1,0,0]}function Df(a){return Ef(a,1,0,0,1,0,0)}function Ff(a,b){var c=a[0],d=a[1],e=a[2],f=a[3],g=a[4],h=a[5],k=b[0],l=b[1],m=b[2],p=b[3],q=b[4],u=b[5];a[0]=c*k+e*l;a[1]=d*k+f*l;a[2]=c*m+e*p;a[3]=d*m+f*p;a[4]=c*q+e*u+g;a[5]=d*q+f*u+h}function Ef(a,b,c,d,e,f,g){a[0]=b;a[1]=c;a[2]=d;a[3]=e;a[4]=f;a[5]=g;return a}function Gf(a,b){a[0]=b[0];a[1]=b[1];a[2]=b[2];a[3]=b[3];a[4]=b[4];a[5]=b[5];return a} + function Hf(a,b){var c=b[0],d=b[1];b[0]=a[0]*c+a[2]*d+a[4];b[1]=a[1]*c+a[3]*d+a[5];return b}function If(a,b){var c=Math.cos(b),d=Math.sin(b);Ff(a,Ef(Bf,c,d,-d,c,0,0))}function Jf(a,b,c){Ff(a,Ef(Bf,b,0,0,c,0,0))}function Kf(a,b,c){Ff(a,Ef(Bf,1,0,0,1,b,c))}function Lf(a,b,c,d,e,f,g,h){var k=Math.sin(f);f=Math.cos(f);a[0]=d*f;a[1]=e*k;a[2]=-d*k;a[3]=e*f;a[4]=g*d*f-h*d*k+b;a[5]=g*e*k+h*e*f+c;return a} + function Mf(a){var b=a[0]*a[3]-a[1]*a[2];L(0!==b,32);var c=a[0],d=a[1],e=a[2],f=a[3],g=a[4],h=a[5];a[0]=f/b;a[1]=-d/b;a[2]=-e/b;a[3]=c/b;a[4]=(e*h-f*g)/b;a[5]=-(c*h-d*g)/b};function Nf(a,b){this.g=b;this.c={};this.j={}}B(Nf,Aa);function Of(a){var b=a.viewState,c=a.coordinateToPixelTransform,d=a.pixelToCoordinateTransform;Lf(c,a.size[0]/2,a.size[1]/2,1/b.resolution,-1/b.resolution,-b.rotation,-b.center[0],-b.center[1]);Mf(Gf(d,c))}n=Nf.prototype;n.R=function(){for(var a in this.c)Da(this.c[a])};function Pf(){if(32<Af.a){var a=0,b,c;for(b in Af.b)c=Af.b[b],0!==(a++&3)||Ha(c)||(delete Af.b[b],--Af.a)}} + n.fa=function(a,b,c,d,e,f){function g(a,e){var f=J(a).toString(),g=b.layerStates[J(e)].hb;if(!(f in b.skippedFeatureUids)||g)return c.call(d,a,g?e:null)}var h,k=b.viewState,l=k.resolution,m=k.projection,k=a;if(m.b){var m=m.G(),p=qb(m),q=a[0];if(q<m[0]||q>m[2])k=[q+p*Math.ceil((m[0]-q)/p),a[1]]}m=b.layerStatesArray;for(p=m.length-1;0<=p;--p){var u=m[p],q=u.layer;if(yf(u,l)&&e.call(f,q)&&(u=Qf(this,q),q.da()&&(h=u.fa(q.da().i?k:a,b,g,d)),h))return h}}; + n.Fc=function(a,b,c,d){return void 0!==this.fa(a,b,yb,this,c,d)};function Qf(a,b){var c=J(b).toString();if(c in a.c)return a.c[c];var d=a.Mb(b);a.c[c]=d;a.j[c]=R(d,"change",a.wd,a);return d}n.wd=function(){this.g.render()};n.vb=I;n.ue=function(a,b){for(var c in this.c)if(!(b&&c in b.layerStates)){var d=c,e=this.c[d];delete this.c[d];M(this.j[d]);delete this.j[d];Da(e)}};function Rf(a,b){for(var c in a.c)if(!(c in b.layerStates)){b.postRenderFunctions.push(a.ue.bind(a));break}} + function Ta(a,b){return a.zIndex-b.zIndex};function Sf(a,b){Ga.call(this);this.V=a;this.state=b;this.b=null;this.key=""}B(Sf,Ga);function Tf(a){U(a,"change")}Sf.prototype.getKey=function(){return this.key+"/"+this.V};Sf.prototype.T=function(){return this.state};function Uf(a,b){this.j=a;this.f=b;this.b=[];this.c=[];this.a={}}Uf.prototype.clear=function(){this.b.length=0;this.c.length=0;qa(this.a)};function Vf(a){var b=a.b,c=a.c,d=b[0];1==b.length?(b.length=0,c.length=0):(b[0]=b.pop(),c[0]=c.pop(),Wf(a,0));b=a.f(d);delete a.a[b];return d}Uf.prototype.g=function(a){L(!(this.f(a)in this.a),31);var b=this.j(a);return Infinity!=b?(this.b.push(a),this.c.push(b),this.a[this.f(a)]=!0,Xf(this,0,this.b.length-1),!0):!1}; + function Wf(a,b){for(var c=a.b,d=a.c,e=c.length,f=c[b],g=d[b],h=b;b<e>>1;){var k=2*b+1,l=2*b+2,k=l<e&&d[l]<d[k]?l:k;c[b]=c[k];d[b]=d[k];b=k}c[b]=f;d[b]=g;Xf(a,h,b)}function Xf(a,b,c){var d=a.b;a=a.c;for(var e=d[c],f=a[c];c>b;){var g=c-1>>1;if(a[g]>f)d[c]=d[g],a[c]=a[g],c=g;else break}d[c]=e;a[c]=f}function Yf(a){var b=a.j,c=a.b,d=a.c,e=0,f=c.length,g,h,k;for(h=0;h<f;++h)g=c[h],k=b(g),Infinity==k?delete a.a[a.f(g)]:(d[e]=k,c[e++]=g);c.length=e;d.length=e;for(b=(a.b.length>>1)-1;0<=b;b--)Wf(a,b)};function Zf(a,b){Uf.call(this,function(b){return a.apply(null,b)},function(a){return a[0].getKey()});this.C=b;this.l=0;this.h={}}B(Zf,Uf);Zf.prototype.g=function(a){var b=Uf.prototype.g.call(this,a);b&&R(a[0],"change",this.i,this);return b};Zf.prototype.i=function(a){a=a.target;var b=a.T();if(2===b||3===b||4===b||5===b)ya(a,"change",this.i,this),a=a.getKey(),a in this.h&&(delete this.h[a],--this.l),this.C()};function $f(){this.b=[];this.a=this.c=0}function ag(a,b){var c=a.a,d=.05-c,e=Math.log(.05/a.a)/-.005;return Dc({source:b,duration:e,easing:function(a){return c*(Math.exp(-.005*a*e)-1)/d}})};function bg(a){V.call(this);this.aa=null;this.set("active",!0);this.handleEvent=a.handleEvent}B(bg,V);bg.prototype.setMap=function(a){this.aa=a};function cg(a,b,c,d,e){if(void 0!==c){var f=b.get(xc),g=b.qa();void 0!==f&&g&&e&&0<e&&(a.oa(Ec({rotation:f,duration:e,easing:Ac})),d&&a.oa(Dc({source:g,duration:e,easing:Ac})));b.rotate(c,d)}}function dg(a,b,c,d,e){var f=b.O();c=b.constrainResolution(f,c,0);eg(a,b,c,d,e)} + function eg(a,b,c,d,e){if(c){var f=b.O(),g=b.qa();void 0!==f&&g&&c!==f&&e&&0<e&&(a.oa(Fc({resolution:f,duration:e,easing:Ac})),d&&a.oa(Dc({source:g,duration:e,easing:Ac})));if(d){var h;a=b.qa();e=b.O();void 0!==a&&void 0!==e&&(h=[d[0]-c*(d[0]-a[0])/e,d[1]-c*(d[1]-a[1])/e]);b.xa(h)}b.set(wc,c)}};function fg(a){a=a?a:{};this.a=a.delta?a.delta:1;bg.call(this,{handleEvent:gg});this.c=void 0!==a.duration?a.duration:250}B(fg,bg);function gg(a){var b=!1,c=a.originalEvent;if(a.type==jf){var b=a.map,d=a.coordinate,c=c.shiftKey?-this.a:this.a,e=b.U();dg(b,e,c,d,this.c);a.preventDefault();b=!0}return!b};function hg(a){a=a.originalEvent;return a.altKey&&!(a.metaKey||a.ctrlKey)&&a.shiftKey}function ig(a){a=a.originalEvent;return 0==a.button&&!(Cd&&ne&&a.ctrlKey)}function jg(a){a=a.originalEvent;return!a.altKey&&!(a.metaKey||a.ctrlKey)&&!a.shiftKey}function kg(a){a=a.originalEvent;return!a.altKey&&!(a.metaKey||a.ctrlKey)&&a.shiftKey}function lg(a){a=a.originalEvent.target.tagName;return"INPUT"!==a&&"SELECT"!==a&&"TEXTAREA"!==a}function mg(a){L(a.b,56);return"mouse"==a.b.pointerType};function ng(a){a=a?a:{};bg.call(this,{handleEvent:a.handleEvent?a.handleEvent:og});this.Bb=a.handleDownEvent?a.handleDownEvent:zb;this.Cb=a.handleDragEvent?a.handleDragEvent:I;this.zb=a.handleMoveEvent?a.handleMoveEvent:I;this.Eb=a.handleUpEvent?a.handleUpEvent:zb;this.v=!1;this.N={};this.f=[]}B(ng,bg);function pg(a){for(var b=a.length,c=0,d=0,e=0;e<b;e++)c+=a[e].clientX,d+=a[e].clientY;return[c/b,d/b]} + function og(a){if(!(a instanceof ef))return!0;var b=!1,c=a.type;if(c===of||c===qf||c===mf)c=a.b,a.type==mf?delete this.N[c.pointerId]:a.type==of?this.N[c.pointerId]=c:c.pointerId in this.N&&(this.N[c.pointerId]=c),this.f=ra(this.N);this.v&&(a.type==qf?this.Cb(a):a.type==mf&&(this.v=this.Eb(a)));a.type==of?(this.v=a=this.Bb(a),b=this.B(a)):a.type==pf&&this.zb(a);return!b}ng.prototype.B=function(a){return a};function qg(a){ng.call(this,{handleDownEvent:rg,handleDragEvent:sg,handleUpEvent:tg});a=a?a:{};this.a=a.kinetic;this.c=this.g=null;this.i=a.condition?a.condition:jg;this.h=!1}B(qg,ng);function sg(a){var b=pg(this.f);this.a&&this.a.b.push(b[0],b[1],Date.now());if(this.c){var c=this.c[0]-b[0],d=b[1]-this.c[1];a=a.map.U();var e=a.T(),d=c=[c,d],f=e.resolution;d[0]*=f;d[1]*=f;bb(c,e.rotation);ab(c,e.center);c=a.a.center(c);a.xa(c)}this.c=b} + function tg(a){var b=a.map;a=b.U();if(0===this.f.length){var c;if(c=!this.h&&this.a)if(c=this.a,6>c.b.length)c=!1;else{var d=Date.now()-100,e=c.b.length-3;if(c.b[e+2]<d)c=!1;else{for(var f=e-3;0<f&&c.b[f+2]>d;)f-=3;var d=c.b[e+2]-c.b[f+2],g=c.b[e]-c.b[f],e=c.b[e+1]-c.b[f+1];c.c=Math.atan2(e,g);c.a=Math.sqrt(g*g+e*e)/d;c=.05<c.a}}c?(c=(.05-this.a.a)/-.005,e=this.a.c,f=a.qa(),this.g=ag(this.a,f),b.oa(this.g),f=ug(b,f),b=b.Ba([f[0]-c*Math.cos(e),f[1]-c*Math.sin(e)]),b=a.a.center(b),a.xa(b)):b.render(); + zc(a,-1);return!1}this.c=null;return!0}function rg(a){if(0<this.f.length&&this.i(a)){var b=a.map,c=b.U();this.c=null;this.v||zc(c,1);this.g&&Qa(b.D,this.g)&&(c.xa(a.frameState.viewState.center),this.g=null);this.a&&(a=this.a,a.b.length=0,a.c=0,a.a=0);this.h=1<this.f.length;return!0}return!1}qg.prototype.B=zb;function vg(a){a=a?a:{};ng.call(this,{handleDownEvent:wg,handleDragEvent:xg,handleUpEvent:yg});this.c=a.condition?a.condition:hg;this.a=void 0;this.g=void 0!==a.duration?a.duration:250}B(vg,ng);function xg(a){if(mg(a)){var b=a.map,c=b.Ta();a=a.pixel;c=Math.atan2(c[1]/2-a[1],a[0]-c[0]/2);if(void 0!==this.a){a=c-this.a;var d=b.U(),e=d.get(xc);cg(b,d,e-a)}this.a=c}} + function yg(a){if(!mg(a))return!0;a=a.map;var b=a.U();zc(b,-1);var c=b.get(xc),d=this.g,c=b.constrainRotation(c,0);cg(a,b,c,void 0,d);return!1}function wg(a){return mg(a)&&ig(a)&&this.c(a)?(zc(a.map.U(),1),this.a=void 0,!0):!1}vg.prototype.B=zb;function zg(a){this.f=null;this.a=document.createElement("div");this.a.style.position="absolute";this.a.className="ol-box "+a;this.c=this.g=this.b=null}B(zg,Aa);zg.prototype.R=function(){this.setMap(null)};function Ag(a){var b=a.g,c=a.c;a=a.a.style;a.left=Math.min(b[0],c[0])+"px";a.top=Math.min(b[1],c[1])+"px";a.width=Math.abs(c[0]-b[0])+"px";a.height=Math.abs(c[1]-b[1])+"px"} + zg.prototype.setMap=function(a){if(this.b){this.b.s.removeChild(this.a);var b=this.a.style;b.left=b.top=b.width=b.height="inherit"}(this.b=a)&&this.b.s.appendChild(this.a)};function Bg(a){var b=a.g,c=a.c,b=[b,[b[0],c[1]],c,[c[0],b[1]]].map(a.b.Ba,a.b);b[4]=b[0].slice();a.f?a.f.ea([b]):a.f=new qc([b])}zg.prototype.S=function(){return this.f};function Cg(a,b,c){T.call(this,a);this.coordinate=b;this.mapBrowserEvent=c}B(Cg,T);function Dg(a){ng.call(this,{handleDownEvent:Eg,handleDragEvent:Fg,handleUpEvent:Gg});a=a?a:{};this.a=new zg(a.className||"ol-dragbox");this.c=null;this.j=a.condition?a.condition:yb;this.i=a.boxEndCondition?a.boxEndCondition:Hg}B(Dg,ng);function Hg(a,b,c){a=c[0]-b[0];b=c[1]-b[1];return 64<=a*a+b*b} + function Fg(a){if(mg(a)){var b=this.a,c=a.pixel;b.g=this.c;b.c=c;Bg(b);Ag(b);U(this,new Cg("boxdrag",a.coordinate,a))}}Dg.prototype.S=function(){return this.a.S()};Dg.prototype.h=I;function Gg(a){if(!mg(a))return!0;this.a.setMap(null);this.i(a,this.c,a.pixel)&&(this.h(a),U(this,new Cg("boxend",a.coordinate,a)));return!1} + function Eg(a){if(mg(a)&&ig(a)&&this.j(a)){this.c=a.pixel;this.a.setMap(a.map);var b=this.a,c=this.c;b.g=this.c;b.c=c;Bg(b);Ag(b);U(this,new Cg("boxstart",a.coordinate,a));return!0}return!1};function Ig(a){a=a?a:{};var b=a.condition?a.condition:kg;this.g=void 0!==a.duration?a.duration:200;this.s=void 0!==a.out?a.out:!1;Dg.call(this,{condition:b,className:a.className||"ol-dragzoom"})}B(Ig,Dg); + Ig.prototype.h=function(){var a=this.aa,b=a.U(),c=a.Ta(),d=this.S().G();if(this.s){var e=b.lc(c),d=[ug(a,sb(d)),ug(a,[d[2],d[3]])],f=jb(void 0),g,h;g=0;for(h=d.length;g<h;++g)eb(f,d[g]);f=1/yc(f,c);d=(e[2]-e[0])/2*(f-1);f=(e[3]-e[1])/2*(f-1);e[0]-=d;e[2]+=d;e[1]-=f;e[3]+=f;d=e}c=b.constrainResolution(yc(d,c));e=b.O();f=b.qa();a.oa(Fc({resolution:e,duration:this.g,easing:Ac}));a.oa(Dc({source:f,duration:this.g,easing:Ac}));b.xa(tb(d));b.set(wc,c)};function Jg(a){bg.call(this,{handleEvent:Kg});a=a||{};this.a=function(a){return jg(a)&&lg(a)};this.c=void 0!==a.condition?a.condition:this.a;this.f=void 0!==a.duration?a.duration:100;this.g=void 0!==a.pixelDelta?a.pixelDelta:128}B(Jg,bg); + function Kg(a){var b=!1;if("keydown"==a.type){var c=a.originalEvent.keyCode;if(this.c(a)&&(40==c||37==c||39==c||38==c)){var d=a.map,b=d.U(),e=b.O()*this.g,f=0,g=0;40==c?g=-e:37==c?f=-e:39==c?f=e:g=e;c=[f,g];bb(c,b.get(xc));e=this.f;if(f=b.qa())e&&0<e&&d.oa(Dc({source:f,duration:e,easing:Cc})),d=b.a.center([f[0]+c[0],f[1]+c[1]]),b.xa(d);a.preventDefault();b=!0}}return!b};function Lg(a){bg.call(this,{handleEvent:Mg});a=a?a:{};this.c=a.condition?a.condition:lg;this.a=a.delta?a.delta:1;this.f=void 0!==a.duration?a.duration:100}B(Lg,bg);function Mg(a){var b=!1;if("keydown"==a.type||"keypress"==a.type){var c=a.originalEvent.charCode;if(this.c(a)&&(43==c||45==c)){var b=a.map,c=43==c?this.a:-this.a,d=b.U();dg(b,d,c,void 0,this.f);a.preventDefault();b=!0}}return!b};function Ng(a){bg.call(this,{handleEvent:Og});a=a||{};this.a=0;this.i=void 0!==a.duration?a.duration:250;this.j=void 0!==a.useAnchor?a.useAnchor:!0;this.f=null;this.g=this.c=void 0}B(Ng,bg); + function Og(a){var b=!1;if("wheel"==a.type||"mousewheel"==a.type){var b=a.map,c=a.originalEvent;this.j&&(this.f=a.coordinate);var d;"wheel"==a.type?(d=c.deltaY,le&&c.deltaMode===K.WheelEvent.DOM_DELTA_PIXEL&&(d/=oe),c.deltaMode===K.WheelEvent.DOM_DELTA_LINE&&(d*=40)):"mousewheel"==a.type&&(d=-c.wheelDeltaY,me&&(d/=3));this.a+=d;void 0===this.c&&(this.c=Date.now());d=Math.max(80-(Date.now()-this.c),0);K.clearTimeout(this.g);this.g=K.setTimeout(this.h.bind(this,b),d);a.preventDefault();b=!0}return!b} + Ng.prototype.h=function(a){var b=ia(this.a,-1,1),c=a.U();dg(a,c,-b,this.f,this.i);this.a=0;this.f=null;this.g=this.c=void 0};function Pg(a){ng.call(this,{handleDownEvent:Qg,handleDragEvent:Rg,handleUpEvent:Sg});a=a||{};this.c=null;this.g=void 0;this.a=!1;this.h=0;this.j=void 0!==a.threshold?a.threshold:.3;this.i=void 0!==a.duration?a.duration:250}B(Pg,ng); + function Rg(a){var b=0,c=this.f[0],d=this.f[1],c=Math.atan2(d.clientY-c.clientY,d.clientX-c.clientX);void 0!==this.g&&(b=c-this.g,this.h+=b,!this.a&&Math.abs(this.h)>this.j&&(this.a=!0));this.g=c;a=a.map;c=a.a.getBoundingClientRect();d=pg(this.f);d[0]-=c.left;d[1]-=c.top;this.c=a.Ba(d);this.a&&(c=a.U(),d=c.get(xc),a.render(),cg(a,c,d+b,this.c))} + function Sg(a){if(2>this.f.length){a=a.map;var b=a.U();zc(b,-1);if(this.a){var c=b.get(xc),d=this.c,e=this.i,c=b.constrainRotation(c,0);cg(a,b,c,d,e)}return!1}return!0}function Qg(a){return 2<=this.f.length?(a=a.map,this.c=null,this.g=void 0,this.a=!1,this.h=0,this.v||zc(a.U(),1),a.render(),!0):!1}Pg.prototype.B=zb;function Tg(a){ng.call(this,{handleDownEvent:Ug,handleDragEvent:Vg,handleUpEvent:Wg});a=a?a:{};this.c=null;this.h=void 0!==a.duration?a.duration:400;this.a=void 0;this.g=1}B(Tg,ng);function Vg(a){var b=1,c=this.f[0],d=this.f[1],e=c.clientX-d.clientX,c=c.clientY-d.clientY,e=Math.sqrt(e*e+c*c);void 0!==this.a&&(b=this.a/e);this.a=e;1!=b&&(this.g=b);a=a.map;var e=a.U(),c=e.O(),d=a.a.getBoundingClientRect(),f=pg(this.f);f[0]-=d.left;f[1]-=d.top;this.c=a.Ba(f);a.render();eg(a,e,c*b,this.c)} + function Wg(a){if(2>this.f.length){a=a.map;var b=a.U();zc(b,-1);var c=b.O(),d=this.c,e=this.h,c=b.constrainResolution(c,0,this.g-1);eg(a,b,c,d,e);return!1}return!0}function Ug(a){return 2<=this.f.length?(a=a.map,this.c=null,this.a=void 0,this.g=1,this.v||zc(a.U(),1),a.render(),!0):!1}Tg.prototype.B=zb;function Xg(a){var b=a||{};a=pa({},b);delete a.layers;b=b.layers;sf.call(this,a);this.c=[];this.a={};R(this,La("layers"),this.yd,this);b?Array.isArray(b)?b=new cd(b.slice()):L(b instanceof cd,43):b=new cd;this.set("layers",b)}B(Xg,sf);n=Xg.prototype;n.rb=function(){this.gb()&&this.w()}; + n.yd=function(){this.c.forEach(M);this.c.length=0;var a=this.get("layers");this.c.push(R(a,hd,this.xd,this),R(a,id,this.zd,this));for(var b in this.a)this.a[b].forEach(M);qa(this.a);var a=a.a,c,d;b=0;for(c=a.length;b<c;b++)d=a[b],this.a[J(d).toString()]=[R(d,"propertychange",this.rb,this),R(d,"change",this.rb,this)];this.w()};n.xd=function(a){a=a.element;var b=J(a).toString();this.a[b]=[R(a,"propertychange",this.rb,this),R(a,"change",this.rb,this)];this.w()}; + n.zd=function(a){a=J(a.element).toString();this.a[a].forEach(M);delete this.a[a];this.w()};n.Pb=function(a){var b=void 0!==a?a:[],c=b.length;ed(this.get("layers"),function(a){a.Pb(b)});a=tf(this);var d,e;for(d=b.length;c<d;c++)e=b[c],e.opacity*=a.opacity,e.visible=e.visible&&a.visible,e.maxResolution=Math.min(e.maxResolution,a.maxResolution),e.minResolution=Math.max(e.minResolution,a.minResolution),void 0!==a.extent&&(e.extent=void 0!==e.extent?vb(e.extent,a.extent):a.extent);return b};n.Sb=function(){return"ready"};function Yg(a){Eb.call(this,{code:a,units:"m",extent:Zg,global:!0,worldExtent:$g})}B(Yg,Eb);Yg.prototype.getPointResolution=function(a,b){return a/ja(b[1]/6378137)};var ah=6378137*Math.PI,Zg=[-ah,-ah,ah,ah],$g=[-180,-85,180,85],bh="EPSG:3857 EPSG:102100 EPSG:102113 EPSG:900913 urn:ogc:def:crs:EPSG:6.18:3:3857 urn:ogc:def:crs:EPSG::3857 http://www.opengis.net/gml/srs/epsg.xml#3857".split(" ").map(function(a){return new Yg(a)}); + function ch(a,b,c){var d=a.length;c=1<c?c:2;void 0===b&&(2<c?b=a.slice():b=Array(d));for(var e=0;e<d;e+=c)b[e]=6378137*Math.PI*a[e]/180,b[e+1]=6378137*Math.log(Math.tan(Math.PI*(a[e+1]+90)/360));return b}function dh(a,b,c){var d=a.length;c=1<c?c:2;void 0===b&&(2<c?b=a.slice():b=Array(d));for(var e=0;e<d;e+=c)b[e]=180*a[e]/(6378137*Math.PI),b[e+1]=360*Math.atan(Math.exp(a[e+1]/6378137))/Math.PI-90;return b};var eh=new Ab(6378137);function fh(a,b){Eb.call(this,{code:a,units:"degrees",extent:gh,axisOrientation:b,global:!0,metersPerUnit:hh,worldExtent:gh})}B(fh,Eb);fh.prototype.getPointResolution=function(a){return a}; + var gh=[-180,-90,180,90],hh=Math.PI*eh.radius/180,ih=[new fh("CRS:84"),new fh("EPSG:4326","neu"),new fh("urn:ogc:def:crs:EPSG::4326","neu"),new fh("urn:ogc:def:crs:EPSG:6.6:4326","neu"),new fh("urn:ogc:def:crs:OGC:1.3:CRS84"),new fh("urn:ogc:def:crs:OGC:2:84"),new fh("http://www.opengis.net/gml/srs/epsg.xml#4326","neu"),new fh("urn:x-ogc:def:crs:EPSG:4326","neu")];function W(a){a=a?a:{};var b=pa({},a);delete b.preload;delete b.useInterimTilesOnError;xf.call(this,b);this.set("preload",void 0!==a.preload?a.preload:0);this.set("useInterimTilesOnError",void 0!==a.useInterimTilesOnError?a.useInterimTilesOnError:!0)}B(W,xf);function jh(a){return a.get("useInterimTilesOnError")};var kh=[0,0,0,1],lh=[],mh=[0,0,0,1];function nh(a,b,c,d){0!==b&&(a.translate(c,d),a.rotate(b),a.translate(-c,-d))};function oh(a){this.C=a.opacity;this.K=a.rotateWithView;this.s=a.rotation;this.v=a.scale;this.B=a.snapToPixel};function ph(a){a=a||{};this.h=this.c=this.f=null;this.g=void 0!==a.fill?a.fill:null;this.b=void 0!==a.stroke?a.stroke:null;this.a=a.radius;this.j=[0,0];this.i=this.u=this.l=null;var b=a.atlasManager,c,d=null,e,f=0;this.b&&(e=nd(this.b.a),f=this.b.c,void 0===f&&(f=1),d=this.b.b,pe||(d=null));var g=2*(this.a+f)+1;e={strokeStyle:e,jb:f,size:g,lineDash:d};if(void 0===b)b=Md(g,g),this.c=b.canvas,c=g=this.c.width,this.Oc(e,b,0,0),this.g?this.h=this.c:(b=Md(e.size,e.size),this.h=b.canvas,this.Nc(e,b,0,0)); + else{g=Math.round(g);(d=!this.g)&&(c=this.Nc.bind(this,e));var f=this.b?qh(this.b):"-",h=this.g?rh(this.g):"-";this.f&&f==this.f[1]&&h==this.f[2]&&this.a==this.f[3]||(this.f=["c"+f+h+(void 0!==this.a?this.a.toString():"-"),f,h,this.a]);b=b.add(this.f[0],g,g,this.Oc.bind(this,e),c);this.c=b.image;this.j=[b.offsetX,b.offsetY];c=b.image.width;d?this.h=b.Nd:this.h=this.c}this.l=[g/2,g/2];this.u=[g,g];this.i=[c,c];oh.call(this,{opacity:1,rotateWithView:!1,rotation:0,scale:1,snapToPixel:void 0!==a.snapToPixel? + a.snapToPixel:!0})}B(ph,oh);n=ph.prototype;n.eb=function(){return this.l};n.ub=function(){return this.h};n.Z=function(){return this.c};n.ib=function(){return 2};n.Ob=function(){return this.i};n.pa=function(){return this.j};n.Ka=function(){return this.u};n.Vb=I;n.load=I;n.bc=I; + n.Oc=function(a,b,c,d){b.setTransform(1,0,0,1,0,0);b.translate(c,d);b.beginPath();b.arc(a.size/2,a.size/2,this.a,0,2*Math.PI,!0);this.g&&(b.fillStyle=qd(this.g.b),b.fill());this.b&&(b.strokeStyle=a.strokeStyle,b.lineWidth=a.jb,a.lineDash&&b.setLineDash(a.lineDash),b.stroke());b.closePath()}; + n.Nc=function(a,b,c,d){b.setTransform(1,0,0,1,0,0);b.translate(c,d);b.beginPath();b.arc(a.size/2,a.size/2,this.a,0,2*Math.PI,!0);b.fillStyle=nd(kh);b.fill();this.b&&(b.strokeStyle=a.strokeStyle,b.lineWidth=a.jb,a.lineDash&&b.setLineDash(a.lineDash),b.stroke());b.closePath()};function sh(a){a=a||{};this.b=void 0!==a.color?a.color:null;this.a=void 0}function rh(a){void 0===a.a&&(a.a=a.b instanceof CanvasPattern||a.b instanceof CanvasGradient?J(a.b).toString():"f"+(a.b?nd(a.b):"-"));return a.a};function th(){this.a=-1};function uh(){this.a=64;this.b=Array(4);this.g=Array(this.a);this.b[0]=1732584193;this.b[1]=4023233417;this.b[2]=2562383102;this.b[3]=271733878;this.f=this.c=0}(function(){function a(){}a.prototype=th.prototype;uh.a=th.prototype;uh.prototype=new a;uh.prototype.constructor=uh;uh.b=function(a,c,d){for(var e=Array(arguments.length-2),f=2;f<arguments.length;f++)e[f-2]=arguments[f];return th.prototype[c].apply(a,e)}})(); + function vh(a,b,c){c||(c=0);var d=Array(16);if("string"==typeof b)for(var e=0;16>e;++e)d[e]=b.charCodeAt(c++)|b.charCodeAt(c++)<<8|b.charCodeAt(c++)<<16|b.charCodeAt(c++)<<24;else for(e=0;16>e;++e)d[e]=b[c++]|b[c++]<<8|b[c++]<<16|b[c++]<<24;b=a.b[0];c=a.b[1];var e=a.b[2],f=a.b[3],g;g=b+(f^c&(e^f))+d[0]+3614090360&4294967295;b=c+(g<<7&4294967295|g>>>25);g=f+(e^b&(c^e))+d[1]+3905402710&4294967295;f=b+(g<<12&4294967295|g>>>20);g=e+(c^f&(b^c))+d[2]+606105819&4294967295;e=f+(g<<17&4294967295|g>>>15);g= + c+(b^e&(f^b))+d[3]+3250441966&4294967295;c=e+(g<<22&4294967295|g>>>10);g=b+(f^c&(e^f))+d[4]+4118548399&4294967295;b=c+(g<<7&4294967295|g>>>25);g=f+(e^b&(c^e))+d[5]+1200080426&4294967295;f=b+(g<<12&4294967295|g>>>20);g=e+(c^f&(b^c))+d[6]+2821735955&4294967295;e=f+(g<<17&4294967295|g>>>15);g=c+(b^e&(f^b))+d[7]+4249261313&4294967295;c=e+(g<<22&4294967295|g>>>10);g=b+(f^c&(e^f))+d[8]+1770035416&4294967295;b=c+(g<<7&4294967295|g>>>25);g=f+(e^b&(c^e))+d[9]+2336552879&4294967295;f=b+(g<<12&4294967295|g>>> + 20);g=e+(c^f&(b^c))+d[10]+4294925233&4294967295;e=f+(g<<17&4294967295|g>>>15);g=c+(b^e&(f^b))+d[11]+2304563134&4294967295;c=e+(g<<22&4294967295|g>>>10);g=b+(f^c&(e^f))+d[12]+1804603682&4294967295;b=c+(g<<7&4294967295|g>>>25);g=f+(e^b&(c^e))+d[13]+4254626195&4294967295;f=b+(g<<12&4294967295|g>>>20);g=e+(c^f&(b^c))+d[14]+2792965006&4294967295;e=f+(g<<17&4294967295|g>>>15);g=c+(b^e&(f^b))+d[15]+1236535329&4294967295;c=e+(g<<22&4294967295|g>>>10);g=b+(e^f&(c^e))+d[1]+4129170786&4294967295;b=c+(g<<5&4294967295| + g>>>27);g=f+(c^e&(b^c))+d[6]+3225465664&4294967295;f=b+(g<<9&4294967295|g>>>23);g=e+(b^c&(f^b))+d[11]+643717713&4294967295;e=f+(g<<14&4294967295|g>>>18);g=c+(f^b&(e^f))+d[0]+3921069994&4294967295;c=e+(g<<20&4294967295|g>>>12);g=b+(e^f&(c^e))+d[5]+3593408605&4294967295;b=c+(g<<5&4294967295|g>>>27);g=f+(c^e&(b^c))+d[10]+38016083&4294967295;f=b+(g<<9&4294967295|g>>>23);g=e+(b^c&(f^b))+d[15]+3634488961&4294967295;e=f+(g<<14&4294967295|g>>>18);g=c+(f^b&(e^f))+d[4]+3889429448&4294967295;c=e+(g<<20&4294967295| + g>>>12);g=b+(e^f&(c^e))+d[9]+568446438&4294967295;b=c+(g<<5&4294967295|g>>>27);g=f+(c^e&(b^c))+d[14]+3275163606&4294967295;f=b+(g<<9&4294967295|g>>>23);g=e+(b^c&(f^b))+d[3]+4107603335&4294967295;e=f+(g<<14&4294967295|g>>>18);g=c+(f^b&(e^f))+d[8]+1163531501&4294967295;c=e+(g<<20&4294967295|g>>>12);g=b+(e^f&(c^e))+d[13]+2850285829&4294967295;b=c+(g<<5&4294967295|g>>>27);g=f+(c^e&(b^c))+d[2]+4243563512&4294967295;f=b+(g<<9&4294967295|g>>>23);g=e+(b^c&(f^b))+d[7]+1735328473&4294967295;e=f+(g<<14&4294967295| + g>>>18);g=c+(f^b&(e^f))+d[12]+2368359562&4294967295;c=e+(g<<20&4294967295|g>>>12);g=b+(c^e^f)+d[5]+4294588738&4294967295;b=c+(g<<4&4294967295|g>>>28);g=f+(b^c^e)+d[8]+2272392833&4294967295;f=b+(g<<11&4294967295|g>>>21);g=e+(f^b^c)+d[11]+1839030562&4294967295;e=f+(g<<16&4294967295|g>>>16);g=c+(e^f^b)+d[14]+4259657740&4294967295;c=e+(g<<23&4294967295|g>>>9);g=b+(c^e^f)+d[1]+2763975236&4294967295;b=c+(g<<4&4294967295|g>>>28);g=f+(b^c^e)+d[4]+1272893353&4294967295;f=b+(g<<11&4294967295|g>>>21);g=e+(f^ + b^c)+d[7]+4139469664&4294967295;e=f+(g<<16&4294967295|g>>>16);g=c+(e^f^b)+d[10]+3200236656&4294967295;c=e+(g<<23&4294967295|g>>>9);g=b+(c^e^f)+d[13]+681279174&4294967295;b=c+(g<<4&4294967295|g>>>28);g=f+(b^c^e)+d[0]+3936430074&4294967295;f=b+(g<<11&4294967295|g>>>21);g=e+(f^b^c)+d[3]+3572445317&4294967295;e=f+(g<<16&4294967295|g>>>16);g=c+(e^f^b)+d[6]+76029189&4294967295;c=e+(g<<23&4294967295|g>>>9);g=b+(c^e^f)+d[9]+3654602809&4294967295;b=c+(g<<4&4294967295|g>>>28);g=f+(b^c^e)+d[12]+3873151461&4294967295; + f=b+(g<<11&4294967295|g>>>21);g=e+(f^b^c)+d[15]+530742520&4294967295;e=f+(g<<16&4294967295|g>>>16);g=c+(e^f^b)+d[2]+3299628645&4294967295;c=e+(g<<23&4294967295|g>>>9);g=b+(e^(c|~f))+d[0]+4096336452&4294967295;b=c+(g<<6&4294967295|g>>>26);g=f+(c^(b|~e))+d[7]+1126891415&4294967295;f=b+(g<<10&4294967295|g>>>22);g=e+(b^(f|~c))+d[14]+2878612391&4294967295;e=f+(g<<15&4294967295|g>>>17);g=c+(f^(e|~b))+d[5]+4237533241&4294967295;c=e+(g<<21&4294967295|g>>>11);g=b+(e^(c|~f))+d[12]+1700485571&4294967295;b=c+ + (g<<6&4294967295|g>>>26);g=f+(c^(b|~e))+d[3]+2399980690&4294967295;f=b+(g<<10&4294967295|g>>>22);g=e+(b^(f|~c))+d[10]+4293915773&4294967295;e=f+(g<<15&4294967295|g>>>17);g=c+(f^(e|~b))+d[1]+2240044497&4294967295;c=e+(g<<21&4294967295|g>>>11);g=b+(e^(c|~f))+d[8]+1873313359&4294967295;b=c+(g<<6&4294967295|g>>>26);g=f+(c^(b|~e))+d[15]+4264355552&4294967295;f=b+(g<<10&4294967295|g>>>22);g=e+(b^(f|~c))+d[6]+2734768916&4294967295;e=f+(g<<15&4294967295|g>>>17);g=c+(f^(e|~b))+d[13]+1309151649&4294967295; + c=e+(g<<21&4294967295|g>>>11);g=b+(e^(c|~f))+d[4]+4149444226&4294967295;b=c+(g<<6&4294967295|g>>>26);g=f+(c^(b|~e))+d[11]+3174756917&4294967295;f=b+(g<<10&4294967295|g>>>22);g=e+(b^(f|~c))+d[2]+718787259&4294967295;e=f+(g<<15&4294967295|g>>>17);g=c+(f^(e|~b))+d[9]+3951481745&4294967295;a.b[0]=a.b[0]+b&4294967295;a.b[1]=a.b[1]+(e+(g<<21&4294967295|g>>>11))&4294967295;a.b[2]=a.b[2]+e&4294967295;a.b[3]=a.b[3]+f&4294967295} + function wh(a,b){var c;void 0===c&&(c=b.length);for(var d=c-a.a,e=a.g,f=a.c,g=0;g<c;){if(0==f)for(;g<=d;)vh(a,b,g),g+=a.a;if("string"==typeof b)for(;g<c;){if(e[f++]=b.charCodeAt(g++),f==a.a){vh(a,e);f=0;break}}else for(;g<c;)if(e[f++]=b[g++],f==a.a){vh(a,e);f=0;break}}a.c=f;a.f+=c};function xh(a){a=a||{};this.a=void 0!==a.color?a.color:null;this.f=a.lineCap;this.b=void 0!==a.lineDash?a.lineDash:null;this.g=a.lineJoin;this.h=a.miterLimit;this.c=a.width;this.l=void 0} + function qh(a){if(void 0===a.l){var b="s"+(a.a?nd(a.a):"-")+","+(void 0!==a.f?a.f.toString():"-")+","+(a.b?a.b.toString():"-")+","+(void 0!==a.g?a.g:"-")+","+(void 0!==a.h?a.h.toString():"-")+","+(void 0!==a.c?a.c.toString():"-"),c=new uh;wh(c,b);var d=Array((56>c.c?c.a:2*c.a)-c.c);d[0]=128;for(b=1;b<d.length-8;++b)d[b]=0;for(var e=8*c.f,b=d.length-8;b<d.length;++b)d[b]=e&255,e/=256;wh(c,d);d=Array(16);for(b=e=0;4>b;++b)for(var f=0;32>f;f+=8)d[e++]=c.b[b]>>>f&255;if(8192>=d.length)c=String.fromCharCode.apply(null, + d);else for(c="",b=0;b<d.length;b+=8192)c+=String.fromCharCode.apply(null,td(d,b,b+8192));a.l=c}return a.l};function yh(a){a=a||{};this.h=null;this.c=zh;void 0!==a.geometry&&Ah(this,a.geometry);this.g=void 0!==a.fill?a.fill:null;this.l=void 0!==a.image?a.image:null;this.f=void 0!==a.stroke?a.stroke:null;this.a=void 0!==a.text?a.text:null;this.b=a.zIndex}yh.prototype.S=function(){return this.h};yh.prototype.Z=function(){return this.l};function Ah(a,b){"function"===typeof b?a.c=b:"string"===typeof b?a.c=function(a){return a.get(b)}:b?b&&(a.c=function(){return b}):a.c=zh;a.h=b} + function Bh(a){if("function"!==typeof a){var b;Array.isArray(a)?b=a:(L(a instanceof yh,41),b=[a]);a=function(){return b}}return a}var Ch=null;function Dh(){if(!Ch){var a=new sh({color:"rgba(255,255,255,0.4)"}),b=new xh({color:"#3399CC",width:1.25});Ch=[new yh({image:new ph({fill:a,stroke:b,radius:5}),fill:a,stroke:b})]}return Ch} + function Eh(){var a={},b=[255,255,255,1],c=[0,153,255,1];a.Polygon=[new yh({fill:new sh({color:[255,255,255,.5]})})];a.MultiPolygon=a.Polygon;a.LineString=[new yh({stroke:new xh({color:b,width:5})}),new yh({stroke:new xh({color:c,width:3})})];a.MultiLineString=a.LineString;a.Circle=a.Polygon.concat(a.LineString);a.Point=[new yh({image:new ph({radius:6,fill:new sh({color:c}),stroke:new xh({color:b,width:1.5})}),zIndex:Infinity})];a.MultiPoint=a.Point;a.GeometryCollection=a.Polygon.concat(a.LineString, + a.Point);return a}function zh(a){return a.S()};function Y(a){a=a?a:{};var b=pa({},a);delete b.style;delete b.renderBuffer;delete b.updateWhileAnimating;delete b.updateWhileInteracting;xf.call(this,b);this.a=void 0!==a.renderBuffer?a.renderBuffer:100;this.s=null;this.g=void 0;this.v(a.style);this.i=void 0!==a.updateWhileAnimating?a.updateWhileAnimating:!1;this.j=void 0!==a.updateWhileInteracting?a.updateWhileInteracting:!1}B(Y,xf);Y.prototype.v=function(a){this.s=void 0!==a?a:Dh;this.g=null===a?void 0:Bh(this.s);this.w()};function Fh(){};function Gh(a,b,c,d,e){this.f=a;this.v=b;this.l=c;this.u=d;this.Ga=e;this.g=this.b=this.a=this.ha=this.P=this.N=null;this.aa=this.W=this.K=this.M=this.D=this.B=0;this.ba=!1;this.h=this.ra=0;this.ma=!1;this.Y=0;this.c="";this.Ea=this.na=0;this.va=!1;this.j=this.wa=0;this.ca=this.C=this.i=null;this.s=[];this.Fa=Cf()}B(Gh,Fh); + function Hh(a,b,c){if(a.g){b=Xb(b,0,c,2,a.u,a.s);c=a.f;var d=a.Fa,e=c.globalAlpha;1!=a.K&&(c.globalAlpha=e*a.K);var f=a.ra;a.ba&&(f+=a.Ga);var g,h;g=0;for(h=b.length;g<h;g+=2){var k=b[g]-a.B,l=b[g+1]-a.D;a.ma&&(k=Math.round(k),l=Math.round(l));if(0!==f||1!=a.h){var m=k+a.B,p=l+a.D;Lf(d,m,p,a.h,a.h,f,-m,-p);c.setTransform.apply(c,d)}c.drawImage(a.g,a.W,a.aa,a.Y,a.M,k,l,a.Y,a.M)}0===f&&1==a.h||c.setTransform(1,0,0,1,0,0);1!=a.K&&(c.globalAlpha=e)}} + function Ih(a,b,c,d){var e=0;if(a.ca&&""!==a.c){a.i&&Jh(a,a.i);a.C&&Kh(a,a.C);var f=a.ca,g=a.f,h=a.ha;h?(h.font!=f.font&&(h.font=g.font=f.font),h.textAlign!=f.textAlign&&(h.textAlign=g.textAlign=f.textAlign),h.textBaseline!=f.textBaseline&&(h.textBaseline=g.textBaseline=f.textBaseline)):(g.font=f.font,g.textAlign=f.textAlign,g.textBaseline=f.textBaseline,a.ha={font:f.font,textAlign:f.textAlign,textBaseline:f.textBaseline});b=Xb(b,e,c,d,a.u,a.s);f=a.f;g=a.wa;for(a.va&&(g+=a.Ga);e<c;e+=d){var h=b[e]+ + a.na,k=b[e+1]+a.Ea;if(0!==g||1!=a.j){var l=Lf(a.Fa,h,k,a.j,a.j,g,-h,-k);f.setTransform.apply(f,l)}a.C&&f.strokeText(a.c,h,k);a.i&&f.fillText(a.c,h,k)}0===g&&1==a.j||f.setTransform(1,0,0,1,0,0)}}function Lh(a,b,c,d,e,f){var g=a.f;a=Xb(b,c,d,e,a.u,a.s);g.moveTo(a[0],a[1]);b=a.length;f&&(b-=2);for(c=2;c<b;c+=2)g.lineTo(a[c],a[c+1]);f&&g.closePath();return d}function Mh(a,b,c,d,e){var f,g;f=0;for(g=d.length;f<g;++f)c=Lh(a,b,c,d[f],e,!0);return c}n=Gh.prototype; + n.pc=function(a){if(wb(this.l,a.G())){if(this.a||this.b){this.a&&Jh(this,this.a);this.b&&Kh(this,this.b);var b;b=(b=a.o)?Xb(b,0,b.length,a.A,this.u,this.s):null;var c=b[2]-b[0],d=b[3]-b[1],c=Math.sqrt(c*c+d*d),d=this.f;d.beginPath();d.arc(b[0],b[1],c,0,2*Math.PI);this.a&&d.fill();this.b&&d.stroke()}""!==this.c&&Ih(this,a.o.slice(0,a.A),2,2)}};n.cb=function(a){var b=a.o;a=a.A;this.g&&Hh(this,b,b.length);""!==this.c&&Ih(this,b,b.length,a)}; + n.bb=function(a){var b=a.o;a=a.A;this.g&&Hh(this,b,b.length);""!==this.c&&Ih(this,b,b.length,a)};n.qc=function(a){if(wb(this.l,a.G())){if(this.b){Kh(this,this.b);var b=this.f,c=a.o;b.beginPath();Lh(this,c,0,c.length,a.A,!1);b.stroke()}""!==this.c&&(a=Nh(a),Ih(this,a,2,2))}}; + n.rc=function(a){var b=a.G();if(wb(this.l,b)){if(this.b){Kh(this,this.b);var b=this.f,c=a.o,d=0,e=a.ua,f=a.A;b.beginPath();var g,h;g=0;for(h=e.length;g<h;++g)d=Lh(this,c,d,e[g],f,!1);b.stroke()}""!==this.c&&(a=Oh(a),Ih(this,a,a.length,2))}};n.tc=function(a){if(wb(this.l,a.G())){if(this.b||this.a){this.a&&Jh(this,this.a);this.b&&Kh(this,this.b);var b=this.f;b.beginPath();Mh(this,sc(a),0,a.ja,a.A);this.a&&b.fill();this.b&&b.stroke()}""!==this.c&&(a=tc(a),Ih(this,a,2,2))}}; + n.sc=function(a){if(wb(this.l,a.G())){if(this.b||this.a){this.a&&Jh(this,this.a);this.b&&Kh(this,this.b);var b=this.f,c=Ph(a),d=0,e=a.a,f=a.A,g,h;g=0;for(h=e.length;g<h;++g){var k=e[g];b.beginPath();d=Mh(this,c,d,k,f);this.a&&b.fill();this.b&&b.stroke()}}""!==this.c&&(a=Qh(a),Ih(this,a,a.length,2))}};function Jh(a,b){var c=a.f,d=a.N;d?d.fillStyle!=b.fillStyle&&(d.fillStyle=c.fillStyle=b.fillStyle):(c.fillStyle=b.fillStyle,a.N={fillStyle:b.fillStyle})} + function Kh(a,b){var c=a.f,d=a.P;d?(d.lineCap!=b.lineCap&&(d.lineCap=c.lineCap=b.lineCap),pe&&!Ra(d.lineDash,b.lineDash)&&c.setLineDash(d.lineDash=b.lineDash),d.lineJoin!=b.lineJoin&&(d.lineJoin=c.lineJoin=b.lineJoin),d.lineWidth!=b.lineWidth&&(d.lineWidth=c.lineWidth=b.lineWidth),d.miterLimit!=b.miterLimit&&(d.miterLimit=c.miterLimit=b.miterLimit),d.strokeStyle!=b.strokeStyle&&(d.strokeStyle=c.strokeStyle=b.strokeStyle)):(c.lineCap=b.lineCap,pe&&c.setLineDash(b.lineDash),c.lineJoin=b.lineJoin,c.lineWidth= + b.lineWidth,c.miterLimit=b.miterLimit,c.strokeStyle=b.strokeStyle,a.P={lineCap:b.lineCap,lineDash:b.lineDash,lineJoin:b.lineJoin,lineWidth:b.lineWidth,miterLimit:b.miterLimit,strokeStyle:b.strokeStyle})} + n.La=function(a,b){if(a){var c=a.b;this.a={fillStyle:qd(c?c:kh)}}else this.a=null;if(b){var c=b.a,d=b.f,e=b.b,f=b.g,g=b.c,h=b.h;this.b={lineCap:void 0!==d?d:"round",lineDash:e?e:lh,lineJoin:void 0!==f?f:"round",lineWidth:this.v*(void 0!==g?g:1),miterLimit:void 0!==h?h:10,strokeStyle:nd(c?c:mh)}}else this.b=null}; + n.Ma=function(a){if(a){var b=a.eb(),c=a.Z(1),d=a.pa(),e=a.Ka();this.B=b[0];this.D=b[1];this.M=e[1];this.g=c;this.K=a.C;this.W=d[0];this.aa=d[1];this.ba=a.K;this.ra=a.s;this.h=a.v;this.ma=a.B;this.Y=e[0]}else this.g=null}; + n.Ca=function(a){if(a){var b=a.f;b?(b=b.b,this.i={fillStyle:qd(b?b:kh)}):this.i=null;var c=a.i;if(c){var b=c.a,d=c.f,e=c.b,f=c.g,g=c.c,c=c.h;this.C={lineCap:void 0!==d?d:"round",lineDash:e?e:lh,lineJoin:void 0!==f?f:"round",lineWidth:void 0!==g?g:1,miterLimit:void 0!==c?c:10,strokeStyle:nd(b?b:mh)}}else this.C=null;var b=a.b,d=a.a,e=a.c,f=a.g,g=a.h,c=a.l,h=a.j,k=a.C;a=a.K;this.ca={font:void 0!==b?b:"10px sans-serif",textAlign:void 0!==k?k:"center",textBaseline:void 0!==a?a:"middle"};this.c=void 0!== + h?h:"";this.na=void 0!==d?this.v*d:0;this.Ea=void 0!==e?this.v*e:0;this.va=void 0!==f?f:!1;this.wa=void 0!==g?g:0;this.j=this.v*(void 0!==c?c:1)}else this.c=""};function Rh(a){Ia.call(this);this.a=a}B(Rh,Ia);Rh.prototype.fa=I;Rh.prototype.Ec=zb;Rh.prototype.l=function(a,b,c){return function(d,e){return Sh(a,b,d,e,function(a){c[d]||(c[d]={});c[d][a.V.toString()]=a})}};function Th(a){var b=a.a;b.gb()&&"ready"==b.Sb()&&a.w()}function Uh(a,b){b.Mc()&&a.postRenderFunctions.push(function(a,b,e){b=J(a).toString();a.Oa(e.viewState.projection,e.usedTiles[b])}.bind(null,b))}function Vh(a,b){if(b){var c,d,e;d=0;for(e=b.length;d<e;++d)c=b[d],a[J(c).toString()]=c}} + function Wh(a,b){var c=b.D;void 0!==c&&("string"===typeof c?a.logos[c]="":c&&(L("string"==typeof c.href,44),L("string"==typeof c.src,45),a.logos[c.src]=c.href))}function Xh(a,b,c,d){b=J(b).toString();c=c.toString();b in a?c in a[b]?(a=a[b][c],d.H<a.H&&(a.H=d.H),d.I>a.I&&(a.I=d.I),d.J<a.J&&(a.J=d.J),d.L>a.L&&(a.L=d.L)):a[b][c]=d:(a[b]={},a[b][c]=d)}function Yh(a,b,c){return[b*(Math.round(a[0]/b)+c[0]%2/2),b*(Math.round(a[1]/b)+c[1]%2/2)]} + function Zh(a,b,c,d,e,f,g,h,k,l){var m=J(b).toString();m in a.wantedTiles||(a.wantedTiles[m]={});var p=a.wantedTiles[m];a=a.tileQueue;var q=c.minZoom,u,w,r,x,D,t;for(t=g;t>=q;--t)for(w=Rc(c,f,t,w),r=c.O(t),x=w.H;x<=w.I;++x)for(D=w.J;D<=w.L;++D)g-t<=h?(u=$h(b,t,x,D,d,e),0==u.T()&&(p[u.getKey()]=!0,u.getKey()in a.a||a.g([u,m,Vc(c,u.V),r])),void 0!==k&&k.call(l,u)):b.Vc(t,x,D,e)};function ai(a){Rh.call(this,a);this.M=Cf()}B(ai,Rh);function bi(a,b,c){var d=b.pixelRatio,e=b.size[0]*d,f=b.size[1]*d,g=b.viewState.rotation,h=xb(c),k=[c[2],c[3]],l=[c[2],c[1]];c=sb(c);Hf(b.coordinateToPixelTransform,h);Hf(b.coordinateToPixelTransform,k);Hf(b.coordinateToPixelTransform,l);Hf(b.coordinateToPixelTransform,c);a.save();nh(a,-g,e/2,f/2);a.beginPath();a.moveTo(h[0]*d,h[1]*d);a.lineTo(k[0]*d,k[1]*d);a.lineTo(l[0]*d,l[1]*d);a.lineTo(c[0]*d,c[1]*d);a.clip();nh(a,g,e/2,f/2)} + ai.prototype.g=function(a,b,c){ci(this,"precompose",c,a,void 0);var d=this.Z();if(d){var e=b.extent,f=void 0!==e;f&&bi(c,a,e);var e=this.N,g=c.globalAlpha;c.globalAlpha=b.opacity;c.drawImage(d,0,0,+d.width,+d.height,Math.round(e[4]),Math.round(e[5]),Math.round(d.width*e[0]),Math.round(d.height*e[3]));c.globalAlpha=g;f&&c.restore()}ci(this,"postcompose",c,a,void 0)}; + function ci(a,b,c,d,e){var f=a.a;if(Ha(f,b)){var g=d.size[0]*d.pixelRatio,h=d.size[1]*d.pixelRatio,k=d.viewState.rotation;nh(c,-k,g/2,h/2);a=void 0!==e?e:di(a,d,0);U(f,new uf(b,new Gh(c,d.pixelRatio,d.extent,a,d.viewState.rotation),d,c,null));nh(c,k,g/2,h/2)}}function di(a,b,c){var d=b.viewState,e=b.pixelRatio,f=e/d.resolution;return Lf(a.M,e*b.size[0]/2,e*b.size[1]/2,f,-f,-d.rotation,-d.center[0]+c,-d.center[1])};function ei(){};var fi=["Polygon","LineString","Image","Text"];function gi(a,b,c,d){this.ra=a;this.P=b;this.overlaps=d;this.g=null;this.h=0;this.resolution=c;this.ca=this.Y=null;this.a=[];this.coordinates=[];this.W=Cf();this.b=[];this.ha=[];this.aa=Cf();this.ba=Cf()}B(gi,Fh); + function hi(a,b,c,d,e,f){var g=a.coordinates.length,h=a.Nb(),k=[b[c],b[c+1]],l=[NaN,NaN],m=!0,p,q,u;for(p=c+e;p<d;p+=e){l[0]=b[p];l[1]=b[p+1];u=h[1];var w=h[2],r=h[3],x=l[0],D=l[1],t=0;x<h[0]?t|=16:x>w&&(t|=4);D<u?t|=8:D>r&&(t|=2);0===t&&(t=1);u=t;u!==q?(m&&(a.coordinates[g++]=k[0],a.coordinates[g++]=k[1]),a.coordinates[g++]=l[0],a.coordinates[g++]=l[1],m=!1):1===u?(a.coordinates[g++]=l[0],a.coordinates[g++]=l[1],m=!1):m=!0;k[0]=l[0];k[1]=l[1];q=u}p===c+e&&(a.coordinates[g++]=k[0],a.coordinates[g++]= + k[1]);f&&(a.coordinates[g++]=b[c],a.coordinates[g++]=b[c+1]);return g}function ii(a,b){a.Y=[0,b,0];a.a.push(a.Y);a.ca=[0,b,0];a.b.push(a.ca)} + function ji(a,b,c,d,e,f,g,h,k){var l;Ra(d,a.W)?l=a.ha:(l=Xb(a.coordinates,0,a.coordinates.length,2,d,a.ha),Gf(a.W,d));d=!sa(f);var m=0,p=g.length,q,u,w=a.aa,r=a.ba,x,D,t,z,C=0,E=0;for(a=a.a!=g||a.overlaps?0:200;m<p;){var v=g[m],H,G,A,F;switch(v[0]){case 0:q=v[1];d&&f[J(q).toString()]||!q.S()?m=v[2]:void 0===k||wb(k,q.S().G())?++m:m=v[2]+1;break;case 1:C>a&&(b.fill(),C=0);E>a&&(b.stroke(),E=0);C||E||b.beginPath();++m;break;case 2:q=v[1];u=l[q];v=l[q+1];t=l[q+2]-u;q=l[q+3]-v;q=Math.sqrt(t*t+q*q);b.moveTo(u+ + q,v);b.arc(u,v,q,0,2*Math.PI,!0);++m;break;case 3:b.closePath();++m;break;case 4:q=v[1];u=v[2];H=v[3];G=v[4]*c;A=v[5]*c;var Q=v[6],N=v[7],O=v[8],S=v[9];F=v[10];t=v[11];z=v[12];var X=v[13],P=v[14];for(F&&(t+=e);q<u;q+=2){v=l[q]-G;F=l[q+1]-A;X&&(v=Math.round(v),F=Math.round(F));if(1!=z||0!==t){var Ba=v+G,Nb=F+A;Lf(w,Ba,Nb,z,z,t,-Ba,-Nb);b.transform.apply(b,w)}Ba=b.globalAlpha;1!=N&&(b.globalAlpha=Ba*N);var Nb=P+O>H.width?H.width-O:P,Ca=Q+S>H.height?H.height-S:Q;b.drawImage(H,O,S,Nb,Ca,v,F,Nb*c,Ca*c); + 1!=N&&(b.globalAlpha=Ba);if(1!=z||0!==t)Mf(Gf(r,w)),b.transform.apply(b,r)}++m;break;case 5:q=v[1];u=v[2];A=v[3];Q=v[4]*c;N=v[5]*c;t=v[6];z=v[7]*c;H=v[8];G=v[9];for((F=v[10])&&(t+=e);q<u;q+=2){v=l[q]+Q;F=l[q+1]+N;if(1!=z||0!==t)Lf(w,v,F,z,z,t,-v,-F),b.transform.apply(b,w);O=A.split("\n");S=O.length;1<S?(X=Math.round(1.5*b.measureText("M").width),F-=(S-1)/2*X):X=0;for(P=0;P<S;P++)Ba=O[P],G&&b.strokeText(Ba,v,F),H&&b.fillText(Ba,v,F),F+=X;if(1!=z||0!==t)Mf(Gf(r,w)),b.transform.apply(b,r)}++m;break; + case 6:if(void 0!==h&&(q=v[1],q=h(q)))return q;++m;break;case 7:a?C++:b.fill();++m;break;case 8:q=v[1];u=v[2];v=l[q];F=l[q+1];t=v+.5|0;z=F+.5|0;if(t!==x||z!==D)b.moveTo(v,F),x=t,D=z;for(q+=2;q<u;q+=2)if(v=l[q],F=l[q+1],t=v+.5|0,z=F+.5|0,q==u-2||t!==x||z!==D)b.lineTo(v,F),x=t,D=z;++m;break;case 9:C&&(b.fill(),C=0);b.fillStyle=v[1];++m;break;case 10:x=void 0!==v[7]?v[7]:!0;D=v[2];E&&(b.stroke(),E=0);b.strokeStyle=v[1];b.lineWidth=x?D*c:D;b.lineCap=v[3];b.lineJoin=v[4];b.miterLimit=v[5];pe&&b.setLineDash(v[6]); + D=x=NaN;++m;break;case 11:b.font=v[1];b.textAlign=v[2];b.textBaseline=v[3];++m;break;case 12:a?E++:b.stroke();++m;break;default:++m}}C&&b.fill();E&&b.stroke()}gi.prototype.f=function(a,b,c,d,e){ji(this,a,b,c,d,e,this.a,void 0,void 0)};function ki(a){var b=a.b;b.reverse();var c,d=b.length,e,f,g=-1;for(c=0;c<d;++c)if(e=b[c],f=e[0],6==f)g=c;else if(0==f){e[2]=c;e=a.b;for(f=c;g<f;){var h=e[g];e[g]=e[f];e[f]=h;++g;--f}g=-1}} + function li(a,b){a.Y[2]=a.a.length;a.Y=null;a.ca[2]=a.b.length;a.ca=null;var c=[6,b];a.a.push(c);a.b.push(c)}gi.prototype.tb=I;gi.prototype.Nb=function(){return this.P};function mi(a,b,c,d){gi.call(this,a,b,c,d);this.j=this.N=null;this.M=this.D=this.B=this.u=this.v=this.s=this.K=this.C=this.i=this.l=this.c=void 0}B(mi,gi); + mi.prototype.cb=function(a,b){if(this.j){ii(this,b);var c=a.o,d=this.coordinates.length,c=hi(this,c,0,c.length,a.A,!1);this.a.push([4,d,c,this.j,this.c,this.l,this.i,this.C,this.K,this.s,this.v,this.u,this.B,this.D,this.M]);this.b.push([4,d,c,this.N,this.c,this.l,this.i,this.C,this.K,this.s,this.v,this.u,this.B,this.D,this.M]);li(this,b)}}; + mi.prototype.bb=function(a,b){if(this.j){ii(this,b);var c=a.o,d=this.coordinates.length,c=hi(this,c,0,c.length,a.A,!1);this.a.push([4,d,c,this.j,this.c,this.l,this.i,this.C,this.K,this.s,this.v,this.u,this.B,this.D,this.M]);this.b.push([4,d,c,this.N,this.c,this.l,this.i,this.C,this.K,this.s,this.v,this.u,this.B,this.D,this.M]);li(this,b)}};mi.prototype.tb=function(){ki(this);this.l=this.c=void 0;this.j=this.N=null;this.M=this.D=this.u=this.v=this.s=this.K=this.C=this.B=this.i=void 0}; + mi.prototype.Ma=function(a){var b=a.eb(),c=a.Ka(),d=a.ub(1),e=a.Z(1),f=a.pa();this.c=b[0];this.l=b[1];this.N=d;this.j=e;this.i=c[1];this.C=a.C;this.K=f[0];this.s=f[1];this.v=a.K;this.u=a.s;this.B=a.v;this.D=a.B;this.M=c[0]};function ni(a,b,c,d){gi.call(this,a,b,c,d);this.c={ab:void 0,Wa:void 0,Xa:null,Ya:void 0,Za:void 0,$a:void 0,Ub:0,strokeStyle:void 0,lineCap:void 0,lineDash:null,lineJoin:void 0,lineWidth:void 0,miterLimit:void 0}}B(ni,gi); + function oi(a,b,c,d,e){var f=a.coordinates.length;b=hi(a,b,c,d,e,!1);f=[8,f,b];a.a.push(f);a.b.push(f);return d}n=ni.prototype;n.Nb=function(){this.g||(this.g=gb(this.P),0<this.h&&fb(this.g,this.resolution*(this.h+1)/2,this.g));return this.g}; + function pi(a){var b=a.c,c=b.strokeStyle,d=b.lineCap,e=b.lineDash,f=b.lineJoin,g=b.lineWidth,h=b.miterLimit;b.ab==c&&b.Wa==d&&Ra(b.Xa,e)&&b.Ya==f&&b.Za==g&&b.$a==h||(b.Ub!=a.coordinates.length&&(a.a.push([12]),b.Ub=a.coordinates.length),a.a.push([10,c,g,d,f,h,e],[1]),b.ab=c,b.Wa=d,b.Xa=e,b.Ya=f,b.Za=g,b.$a=h)} + n.qc=function(a,b){var c=this.c,d=c.lineWidth;void 0!==c.strokeStyle&&void 0!==d&&(pi(this),ii(this,b),this.b.push([10,c.strokeStyle,c.lineWidth,c.lineCap,c.lineJoin,c.miterLimit,c.lineDash],[1]),c=a.o,oi(this,c,0,c.length,a.A),this.b.push([12]),li(this,b))}; + n.rc=function(a,b){var c=this.c,d=c.lineWidth;if(void 0!==c.strokeStyle&&void 0!==d){pi(this);ii(this,b);this.b.push([10,c.strokeStyle,c.lineWidth,c.lineCap,c.lineJoin,c.miterLimit,c.lineDash],[1]);var c=a.ua,d=a.o,e=a.A,f=0,g,h;g=0;for(h=c.length;g<h;++g)f=oi(this,d,f,c[g],e);this.b.push([12]);li(this,b)}};n.tb=function(){this.c.Ub!=this.coordinates.length&&this.a.push([12]);ki(this);this.c=null}; + n.La=function(a,b){var c=b.a;this.c.strokeStyle=nd(c?c:mh);c=b.f;this.c.lineCap=void 0!==c?c:"round";c=b.b;this.c.lineDash=c?c:lh;c=b.g;this.c.lineJoin=void 0!==c?c:"round";c=b.c;this.c.lineWidth=void 0!==c?c:1;c=b.h;this.c.miterLimit=void 0!==c?c:10;this.c.lineWidth>this.h&&(this.h=this.c.lineWidth,this.g=null)}; + function qi(a,b,c,d){gi.call(this,a,b,c,d);this.c={oc:void 0,ab:void 0,Wa:void 0,Xa:null,Ya:void 0,Za:void 0,$a:void 0,fillStyle:void 0,strokeStyle:void 0,lineCap:void 0,lineDash:null,lineJoin:void 0,lineWidth:void 0,miterLimit:void 0}}B(qi,gi); + function ri(a,b,c,d,e){var f=a.c,g=void 0!==f.fillStyle,f=void 0!=f.strokeStyle,h=d.length;if(!g&&!f)return d[h-1];var k=[1];a.a.push(k);a.b.push(k);for(k=0;k<h;++k){var l=d[k],m=a.coordinates.length;c=hi(a,b,c,l,e,!0);c=[8,m,c];a.a.push(c);a.b.push(c);f&&(c=[3],a.a.push(c),a.b.push(c));c=l}b=[7];a.b.push(b);g&&a.a.push(b);f&&(g=[12],a.a.push(g),a.b.push(g));return c}n=qi.prototype; + n.pc=function(a,b){var c=this.c,d=c.strokeStyle;if(void 0!==c.fillStyle||void 0!==d){si(this);ii(this,b);this.b.push([9,nd(kh)]);void 0!==c.strokeStyle&&this.b.push([10,c.strokeStyle,c.lineWidth,c.lineCap,c.lineJoin,c.miterLimit,c.lineDash]);var e=a.o,d=this.coordinates.length;hi(this,e,0,e.length,a.A,!1);e=[1];d=[2,d];this.a.push(e,d);this.b.push(e,d);d=[7];this.b.push(d);void 0!==c.fillStyle&&this.a.push(d);void 0!==c.strokeStyle&&(c=[12],this.a.push(c),this.b.push(c));li(this,b)}}; + n.tc=function(a,b){var c=this.c,d=c.strokeStyle;if(void 0!==c.fillStyle||void 0!==d)si(this),ii(this,b),this.b.push([9,nd(kh)]),void 0!==c.strokeStyle&&this.b.push([10,c.strokeStyle,c.lineWidth,c.lineCap,c.lineJoin,c.miterLimit,c.lineDash]),c=a.ja,d=sc(a),ri(this,d,0,c,a.A),li(this,b)}; + n.sc=function(a,b){var c=this.c,d=c.strokeStyle;if(void 0!==c.fillStyle||void 0!==d){si(this);ii(this,b);this.b.push([9,nd(kh)]);void 0!==c.strokeStyle&&this.b.push([10,c.strokeStyle,c.lineWidth,c.lineCap,c.lineJoin,c.miterLimit,c.lineDash]);var c=a.a,d=Ph(a),e=a.A,f=0,g,h;g=0;for(h=c.length;g<h;++g)f=ri(this,d,f,c[g],e);li(this,b)}};n.tb=function(){ki(this);this.c=null;var a=this.ra;if(0!==a){var b=this.coordinates,c,d;c=0;for(d=b.length;c<d;++c)b[c]=a*Math.round(b[c]/a)}}; + n.Nb=function(){this.g||(this.g=gb(this.P),0<this.h&&fb(this.g,this.resolution*(this.h+1)/2,this.g));return this.g}; + n.La=function(a,b){var c=this.c;if(a){var d=a.b;c.fillStyle=qd(d?d:kh)}else c.fillStyle=void 0;b?(d=b.a,c.strokeStyle=nd(d?d:mh),d=b.f,c.lineCap=void 0!==d?d:"round",d=b.b,c.lineDash=d?d.slice():lh,d=b.g,c.lineJoin=void 0!==d?d:"round",d=b.c,c.lineWidth=void 0!==d?d:1,d=b.h,c.miterLimit=void 0!==d?d:10,c.lineWidth>this.h&&(this.h=c.lineWidth,this.g=null)):(c.strokeStyle=void 0,c.lineCap=void 0,c.lineDash=null,c.lineJoin=void 0,c.lineWidth=void 0,c.miterLimit=void 0)}; + function si(a){var b=a.c,c=b.fillStyle,d=b.strokeStyle,e=b.lineCap,f=b.lineDash,g=b.lineJoin,h=b.lineWidth,k=b.miterLimit;void 0!==c&&b.oc!=c&&(a.a.push([9,c]),b.oc=b.fillStyle);void 0===d||b.ab==d&&b.Wa==e&&b.Xa==f&&b.Ya==g&&b.Za==h&&b.$a==k||(a.a.push([10,d,h,e,g,k,f]),b.ab=d,b.Wa=e,b.Xa=f,b.Ya=g,b.Za=h,b.$a=k)}function ti(a,b,c,d){gi.call(this,a,b,c,d);this.M=this.D=this.B=null;this.j="";this.K=this.C=0;this.s=void 0;this.u=this.v=0;this.i=this.l=this.c=null}B(ti,gi); + function ui(a,b,c,d,e){if(""!==a.j&&a.i&&(a.c||a.l)){if(a.c){var f=a.c,g=a.B;if(!g||g.fillStyle!=f.fillStyle){var h=[9,f.fillStyle];a.a.push(h);a.b.push(h);g?g.fillStyle=f.fillStyle:a.B={fillStyle:f.fillStyle}}}a.l&&(f=a.l,g=a.D,g&&g.lineCap==f.lineCap&&g.lineDash==f.lineDash&&g.lineJoin==f.lineJoin&&g.lineWidth==f.lineWidth&&g.miterLimit==f.miterLimit&&g.strokeStyle==f.strokeStyle||(h=[10,f.strokeStyle,f.lineWidth,f.lineCap,f.lineJoin,f.miterLimit,f.lineDash,!1],a.a.push(h),a.b.push(h),g?(g.lineCap= + f.lineCap,g.lineDash=f.lineDash,g.lineJoin=f.lineJoin,g.lineWidth=f.lineWidth,g.miterLimit=f.miterLimit,g.strokeStyle=f.strokeStyle):a.D={lineCap:f.lineCap,lineDash:f.lineDash,lineJoin:f.lineJoin,lineWidth:f.lineWidth,miterLimit:f.miterLimit,strokeStyle:f.strokeStyle}));f=a.i;g=a.M;g&&g.font==f.font&&g.textAlign==f.textAlign&&g.textBaseline==f.textBaseline||(h=[11,f.font,f.textAlign,f.textBaseline],a.a.push(h),a.b.push(h),g?(g.font=f.font,g.textAlign=f.textAlign,g.textBaseline=f.textBaseline):a.M= + {font:f.font,textAlign:f.textAlign,textBaseline:f.textBaseline});ii(a,e);f=a.coordinates.length;b=hi(a,b,0,c,d,!1);b=[5,f,b,a.j,a.C,a.K,a.v,a.u,!!a.c,!!a.l,a.s];a.a.push(b);a.b.push(b);li(a,e)}} + ti.prototype.Ca=function(a){if(a){var b=a.f;b?(b=b.b,b=qd(b?b:kh),this.c?this.c.fillStyle=b:this.c={fillStyle:b}):this.c=null;var c=a.i;if(c){var b=c.a,d=c.f,e=c.b,f=c.g,g=c.c,c=c.h,d=void 0!==d?d:"round",e=e?e.slice():lh,f=void 0!==f?f:"round",g=void 0!==g?g:1,c=void 0!==c?c:10,b=nd(b?b:mh);if(this.l){var h=this.l;h.lineCap=d;h.lineDash=e;h.lineJoin=f;h.lineWidth=g;h.miterLimit=c;h.strokeStyle=b}else this.l={lineCap:d,lineDash:e,lineJoin:f,lineWidth:g,miterLimit:c,strokeStyle:b}}else this.l=null; + var k=a.b,b=a.a,d=a.c,e=a.g,g=a.h,c=a.l,f=a.j,h=a.C,l=a.K;a=void 0!==k?k:"10px sans-serif";h=void 0!==h?h:"center";l=void 0!==l?l:"middle";this.i?(k=this.i,k.font=a,k.textAlign=h,k.textBaseline=l):this.i={font:a,textAlign:h,textBaseline:l};this.j=void 0!==f?f:"";this.C=void 0!==b?b:0;this.K=void 0!==d?d:0;this.s=void 0!==e?e:!1;this.v=void 0!==g?g:0;this.u=void 0!==c?c:1}else this.j=""};function vi(a,b,c,d,e){this.K=a;this.g=b;this.j=d;this.C=c;this.h=e;this.a={};this.l=Md(1,1);this.i=Cf()}B(vi,ei); + function wi(a){for(var b in a.a){var c=a.a[b],d;for(d in c)c[d].tb()}}vi.prototype.fa=function(a,b,c,d,e){var f=Lf(this.i,.5,.5,1/b,-1/b,-c,-a[0],-a[1]),g=this.l;g.clearRect(0,0,1,1);var h;void 0!==this.h&&(h=db(),eb(h,a),fb(h,b*this.h,h));return xi(this,g,f,c,d,function(a){if(0<g.getImageData(0,0,1,1).data[3]){if(a=e(a))return a;g.clearRect(0,0,1,1)}},h)}; + vi.prototype.b=function(a,b){var c=void 0!==a?a.toString():"0",d=this.a[c];void 0===d&&(d={},this.a[c]=d);c=d[b];void 0===c&&(c=new yi[b](this.K,this.g,this.C,this.j),d[b]=c);return c};vi.prototype.c=function(){return sa(this.a)}; + vi.prototype.f=function(a,b,c,d,e,f){var g=Object.keys(this.a).map(Number);g.sort(Ma);var h=this.g,k=h[0],l=h[1],m=h[2],h=h[3],k=[k,l,k,h,m,h,m,l];Xb(k,0,8,2,c,k);a.save();a.beginPath();a.moveTo(k[0],k[1]);a.lineTo(k[2],k[3]);a.lineTo(k[4],k[5]);a.lineTo(k[6],k[7]);a.clip();f=f?f:fi;for(var p,q,k=0,l=g.length;k<l;++k)for(p=this.a[g[k].toString()],m=0,h=f.length;m<h;++m)q=p[f[m]],void 0!==q&&q.f(a,b,c,d,e);a.restore()}; + function xi(a,b,c,d,e,f,g){var h=Object.keys(a.a).map(Number);h.sort(function(a,b){return b-a});var k,l,m,p,q;k=0;for(l=h.length;k<l;++k)for(p=a.a[h[k].toString()],m=fi.length-1;0<=m;--m)if(q=p[fi[m]],void 0!==q&&(q=ji(q,b,1,c,d,e,q.b,f,g)))return q}var yi={Image:mi,LineString:ni,Polygon:qi,Text:ti};function zi(a,b){return J(a)-J(b)}function Ai(a,b){var c=.5*a/b;return c*c}function Bi(a,b,c,d,e,f){var g=!1,h,k;if(h=c.Z())k=h.ib(),2==k||3==k?h.bc(e,f):(0==k&&h.load(),h.Vb(e,f),g=!0);if(e=(0,c.c)(b))d=e.Rb(d),(0,Ci[d.$()])(a,d,c,b);return g} + var Ci={Point:function(a,b,c,d){var e=c.Z();if(e){if(2!=e.ib())return;var f=a.b(c.b,"Image");f.Ma(e);f.cb(b,d)}if(e=c.a)a=a.b(c.b,"Text"),a.Ca(e),ui(a,b.o,2,2,d)},LineString:function(a,b,c,d){var e=c.f;if(e){var f=a.b(c.b,"LineString");f.La(null,e);f.qc(b,d)}if(e=c.a)a=a.b(c.b,"Text"),a.Ca(e),ui(a,Nh(b),2,2,d)},Polygon:function(a,b,c,d){var e=c.g,f=c.f;if(e||f){var g=a.b(c.b,"Polygon");g.La(e,f);g.tc(b,d)}if(e=c.a)a=a.b(c.b,"Text"),a.Ca(e),ui(a,tc(b),2,2,d)},MultiPoint:function(a,b,c,d){var e=c.Z(); + if(e){if(2!=e.ib())return;var f=a.b(c.b,"Image");f.Ma(e);f.bb(b,d)}if(e=c.a)a=a.b(c.b,"Text"),a.Ca(e),c=b.o,ui(a,c,c.length,b.A,d)},MultiLineString:function(a,b,c,d){var e=c.f;if(e){var f=a.b(c.b,"LineString");f.La(null,e);f.rc(b,d)}if(e=c.a)a=a.b(c.b,"Text"),a.Ca(e),b=Oh(b),ui(a,b,b.length,2,d)},MultiPolygon:function(a,b,c,d){var e=c.g,f=c.f;if(f||e){var g=a.b(c.b,"Polygon");g.La(e,f);g.sc(b,d)}if(e=c.a)a=a.b(c.b,"Text"),a.Ca(e),b=Qh(b),ui(a,b,b.length,2,d)},GeometryCollection:function(a,b,c,d){b= + b.a;var e,f;e=0;for(f=b.length;e<f;++e)(0,Ci[b[e].$()])(a,b[e],c,d)},Circle:function(a,b,c,d){var e=c.g,f=c.f;if(e||f){var g=a.b(c.b,"Polygon");g.La(e,f);g.pc(b,d)}if(e=c.a)a=a.b(c.b,"Text"),a.Ca(e),ui(a,b.o.slice(0,b.A),2,2,d)}};var Di,Ei=K,Fi=-1<Ei.navigator.userAgent.indexOf("OPR"),Gi=-1<Ei.navigator.userAgent.indexOf("Edge");Di=!(!Ei.navigator.userAgent.match("CriOS")&&null!==Ei.chrome&&void 0!==Ei.chrome&&"Google Inc."===Ei.navigator.vendor&&0==Fi&&0==Gi);function Hi(a,b,c,d){a=c-a;b=d-b;var e=Math.sqrt(a*a+b*b);return[Math.round(c+a/e),Math.round(d+b/e)]} + function Ii(a,b,c,d,e,f,g,h,k,l,m){var p=Md(Math.round(c*a),Math.round(c*b));if(0===k.length)return p.canvas;p.scale(c,c);var q=db();k.forEach(function(a){mb(q,a.extent)});var u=Md(Math.round(c*qb(q)/d),Math.round(c*rb(q)/d)),w=c/d;k.forEach(function(a){u.drawImage(a.image,l,l,a.image.width-2*l,a.image.height-2*l,(a.extent[0]-q[0])*w,-(a.extent[3]-q[3])*w,qb(a.extent)*w,rb(a.extent)*w)});var r=xb(g);h.f.forEach(function(a){var b=a.source,e=a.target,g=b[1][0],h=b[1][1],k=b[2][0],l=b[2][1];a=(e[0][0]- + r[0])/f;var m=-(e[0][1]-r[1])/f,w=(e[1][0]-r[0])/f,A=-(e[1][1]-r[1])/f,F=(e[2][0]-r[0])/f,Q=-(e[2][1]-r[1])/f,e=b[0][0],b=b[0][1],g=g-e,h=h-b,k=k-e,l=l-b;a:{g=[[g,h,0,0,w-a],[k,l,0,0,F-a],[0,0,g,h,A-m],[0,0,k,l,Q-m]];h=g.length;for(k=0;k<h;k++){for(var l=k,N=Math.abs(g[k][k]),O=k+1;O<h;O++){var S=Math.abs(g[O][k]);S>N&&(N=S,l=O)}if(0===N){g=null;break a}N=g[l];g[l]=g[k];g[k]=N;for(l=k+1;l<h;l++)for(N=-g[l][k]/g[k][k],O=k;O<h+1;O++)g[l][O]=k==O?0:g[l][O]+N*g[k][O]}k=Array(h);for(l=h-1;0<=l;l--)for(k[l]= + g[l][h]/g[l][l],N=l-1;0<=N;N--)g[N][h]-=g[N][l]*k[l];g=k}g&&(p.save(),p.beginPath(),Di?(k=(a+w+F)/3,l=(m+A+Q)/3,h=Hi(k,l,a,m),w=Hi(k,l,w,A),F=Hi(k,l,F,Q),p.moveTo(w[0],w[1]),p.lineTo(h[0],h[1]),p.lineTo(F[0],F[1])):(p.moveTo(w,A),p.lineTo(a,m),p.lineTo(F,Q)),p.clip(),p.transform(g[0],g[2],g[1],g[3],a,m),p.translate(q[0]-e,q[3]-b),p.scale(d/c,-d/c),p.drawImage(u.canvas,0,0),p.restore())});m&&(p.save(),p.strokeStyle="black",p.lineWidth=1,h.f.forEach(function(a){var b=a.target;a=(b[0][0]-r[0])/f;var c= + -(b[0][1]-r[1])/f,d=(b[1][0]-r[0])/f,e=-(b[1][1]-r[1])/f,g=(b[2][0]-r[0])/f,b=-(b[2][1]-r[1])/f;p.beginPath();p.moveTo(d,e);p.lineTo(a,c);p.lineTo(g,b);p.closePath();p.stroke()}),p.restore());return p.canvas};function Ji(a,b,c,d,e){this.c=a;this.g=b;var f={},g=Ub(this.g,this.c);this.a=function(a){var b=a[0]+"/"+a[1];f[b]||(f[b]=g(a));return f[b]};this.h=d;this.C=e*e;this.f=[];this.i=!1;this.j=this.c.b&&!!d&&!!this.c.G()&&qb(d)==qb(this.c.G());this.b=this.c.G()?qb(this.c.G()):null;this.l=this.g.G()?qb(this.g.G()):null;a=xb(c);b=[c[2],c[3]];d=[c[2],c[1]];c=sb(c);e=this.a(a);var h=this.a(b),k=this.a(d),l=this.a(c);Ki(this,a,b,d,c,e,h,k,l,10);if(this.i){var m=Infinity;this.f.forEach(function(a){m=Math.min(m, + a.source[0][0],a.source[1][0],a.source[2][0])});this.f.forEach(function(a){if(Math.max(a.source[0][0],a.source[1][0],a.source[2][0])-m>this.b/2){var b=[[a.source[0][0],a.source[0][1]],[a.source[1][0],a.source[1][1]],[a.source[2][0],a.source[2][1]]];b[0][0]-m>this.b/2&&(b[0][0]-=this.b);b[1][0]-m>this.b/2&&(b[1][0]-=this.b);b[2][0]-m>this.b/2&&(b[2][0]-=this.b);Math.max(b[0][0],b[1][0],b[2][0])-Math.min(b[0][0],b[1][0],b[2][0])<this.b/2&&(a.source=b)}},this)}f={}} + function Ki(a,b,c,d,e,f,g,h,k,l){var m=cb([f,g,h,k]),p=a.b?qb(m)/a.b:null,q=a.b,u=a.c.b&&.5<p&&1>p,w=!1;if(0<l){if(a.g.c&&a.l)var r=cb([b,c,d,e]),w=w|.25<qb(r)/a.l;!u&&a.c.c&&p&&(w|=.25<p)}if(w||!a.h||wb(m,a.h)){if(!(w||isFinite(f[0])&&isFinite(f[1])&&isFinite(g[0])&&isFinite(g[1])&&isFinite(h[0])&&isFinite(h[1])&&isFinite(k[0])&&isFinite(k[1])))if(0<l)w=!0;else return;if(0<l&&(w||(m=a.a([(b[0]+d[0])/2,(b[1]+d[1])/2]),q=u?(la(f[0],q)+la(h[0],q))/2-la(m[0],q):(f[0]+h[0])/2-m[0],m=(f[1]+h[1])/2-m[1], + w=q*q+m*m>a.C),w)){Math.abs(b[0]-d[0])<=Math.abs(b[1]-d[1])?(u=[(c[0]+d[0])/2,(c[1]+d[1])/2],q=a.a(u),m=[(e[0]+b[0])/2,(e[1]+b[1])/2],p=a.a(m),Ki(a,b,c,u,m,f,g,q,p,l-1),Ki(a,m,u,d,e,p,q,h,k,l-1)):(u=[(b[0]+c[0])/2,(b[1]+c[1])/2],q=a.a(u),m=[(d[0]+e[0])/2,(d[1]+e[1])/2],p=a.a(m),Ki(a,b,u,m,e,f,q,p,k,l-1),Ki(a,u,c,d,m,q,g,h,p,l-1));return}if(u){if(!a.j)return;a.i=!0}a.f.push({source:[f,h,k],target:[b,d,e]});a.f.push({source:[f,g,h],target:[b,c,d]})}} + function Li(a){var b=db();a.f.forEach(function(a){a=a.source;eb(b,a[0]);eb(b,a[1]);eb(b,a[2])});return b};function Mi(a){ai.call(this,a);this.f=Md();this.c=null;this.j=db();this.s=[0,0,0];this.h=Cf()}B(Mi,ai); + Mi.prototype.g=function(a,b,c){var d=di(this,a,0);ci(this,"precompose",c,a,d);var e=a.pixelRatio,f=a.viewState,g=f.center,h=f.projection,k=f.rotation,l=a.size,m=Math.round(e*l[0]/2),l=Math.round(e*l[1]/2),f=e/f.resolution,p=this.a,q=p.da(),u=e*q.nb(h),w=q.sa(h),p=Ha(p,"render"),r=c,x=1,D,t,z;if(k||p){r=this.f;D=r.canvas;var x=q.pb(e)/e,C=c.canvas.width*x;t=c.canvas.height*x;z=Math.round(Math.sqrt(C*C+t*t));D.width!=z?D.width=D.height=z:r.clearRect(0,0,z,z);D=(z-C)/2/x;t=(z-t)/2/x;f*=x;m=Math.round(x* + (m+D));l=Math.round(x*(l+t))}C=r.globalAlpha;r.globalAlpha=b.opacity;var E=this.c,v,H=q.Qb(h)&&1==b.opacity;H||(E.reverse(),v=[]);var G=b.extent;if(b=void 0!==G){var A=xb(G),F=[G[2],G[3]],Q=[G[2],G[1]],G=sb(G);Hf(a.coordinateToPixelTransform,A);Hf(a.coordinateToPixelTransform,F);Hf(a.coordinateToPixelTransform,Q);Hf(a.coordinateToPixelTransform,G);var N=D||0,O=t||0;r.save();var S=r.canvas.width/2,X=r.canvas.height/2;nh(r,-k,S,X);r.beginPath();r.moveTo(x*(A[0]*e+N),x*(A[1]*e+O));r.lineTo(x*(F[0]*e+ + N),x*(F[1]*e+O));r.lineTo(x*(Q[0]*e+N),x*(Q[1]*e+O));r.lineTo(x*(G[0]*e+N),x*(G[1]*e+O));r.clip();nh(r,k,S,X)}A=0;for(F=E.length;A<F;++A){var Q=E[A],G=Q.V,X=Qc(w,G,this.j),S=G[0],P=sb(Qc(w,Yc(w,g,S,this.s))),G=Math.round(qb(X)*f),N=Math.round(rb(X)*f),O=Math.round((X[0]-P[0])*f/G)*G+m+Math.round((P[0]-g[0])*f),X=Math.round((P[1]-X[3])*f/N)*N+l+Math.round((g[1]-P[1])*f);if(!H){P=[O,X,O+G,X+N];r.save();for(var Ba=0,Nb=v.length;Ba<Nb;++Ba){var Ca=v[Ba];wb(P,Ca)&&(r.beginPath(),r.moveTo(P[0],P[1]),r.lineTo(P[0], + P[3]),r.lineTo(P[2],P[3]),r.lineTo(P[2],P[1]),r.moveTo(Ca[0],Ca[1]),r.lineTo(Ca[2],Ca[1]),r.lineTo(Ca[2],Ca[3]),r.lineTo(Ca[0],Ca[3]),r.closePath(),r.clip())}v.push(P)}S=Ni(q,S,e,h);r.drawImage(Q.Z(),u,u,S[0],S[1],O,X,G,N);H||r.restore()}b&&r.restore();p&&(e=D-m/x+m,h=t-l/x+l,g=Lf(this.h,z/2-e,z/2-h,f,-f,-k,-g[0]+e/f,-g[1]-h/f),ci(this,"render",r,a,g));(k||p)&&c.drawImage(r.canvas,-Math.round(D),-Math.round(t),z/x,z/x);r.globalAlpha=C;ci(this,"postcompose",c,a,d)}; + Mi.prototype.i=function(a,b){function c(a){a=a.T();return 2==a||4==a||3==a&&!u}var d=a.pixelRatio,e=a.viewState,f=e.projection,g=this.a,h=g.da(),k=h.sa(f),l=Xc(k,e.resolution,0),m=k.O(l),p=e.center;m==e.resolution?(p=Yh(p,m,a.size),e=ub(p,m,e.rotation,a.size)):e=a.extent;void 0!==b.extent&&(e=vb(e,b.extent));if(pb(e))return!1;m=Tc(k,e,m);p={};p[l]={};var q=this.l(h,f,p),u=jh(g),w=db(),r=new Gc(0,0,0,0),x,D,t,z;for(t=m.H;t<=m.I;++t)for(z=m.J;z<=m.L;++z)x=$h(h,l,t,z,d,f),!c(x)&&x.b&&(x=x.b),c(x)?p[l][x.V.toString()]= + x:(D=Pc(k,x.V,q,r,w),D||(x=Sc(k,x.V,r,w))&&q(l+1,x));q=Object.keys(p).map(Number);q.sort(Ma);var w=[],C,r=0;for(t=q.length;r<t;++r)for(C in x=q[r],z=p[x],z)x=z[C],2==x.T()&&w.push(x);this.c=w;Xh(a.usedTiles,h,l,m);Zh(a,h,k,d,f,e,l,g.get("preload"));Uh(a,h);Wh(a,h);return!0};function Oi(a){ai.call(this,a);this.c=!1;this.B=-1;this.u=NaN;this.j=db();this.f=this.s=null;this.h=Md()}B(Oi,ai); + Oi.prototype.g=function(a,b,c){var d=a.extent,e=a.pixelRatio,f=b.hb?a.skippedFeatureUids:{},g=a.viewState,h=g.projection,g=g.rotation,k=h.G(),l=this.a.da(),m=di(this,a,0);ci(this,"precompose",c,a,m);var p=b.extent,q=void 0!==p;q&&bi(c,a,p);if((p=this.f)&&!p.c()){var u=0,w=0,r;if(Ha(this.a,"render")){r=c.canvas.width;var x=c.canvas.height;if(g){var D=Math.round(Math.sqrt(r*r+x*x)),u=(D-r)/2,w=(D-x)/2;r=x=D}this.h.canvas.width=r;this.h.canvas.height=x;r=this.h}else r=c;x=r.globalAlpha;r.globalAlpha= + b.opacity;r!=c&&r.translate(u,w);b=a.size[0]*e;D=a.size[1]*e;nh(r,-g,b/2,D/2);p.f(r,e,m,g,f);if(l.i&&h.b&&!hb(k,d)){for(var h=d[0],l=qb(k),t=0;h<k[0];)--t,m=l*t,m=di(this,a,m),p.f(r,e,m,g,f),h+=l;t=0;for(h=d[2];h>k[2];)++t,m=l*t,m=di(this,a,m),p.f(r,e,m,g,f),h-=l;m=di(this,a,0)}nh(r,g,b/2,D/2);r!=c&&(ci(this,"render",r,a,m),c.drawImage(r.canvas,-u,-w),r.translate(-u,-w));r.globalAlpha=x}q&&c.restore();ci(this,"postcompose",c,a,m)}; + Oi.prototype.fa=function(a,b,c,d){if(this.f){var e=this.a,f={};return this.f.fa(a,b.viewState.resolution,b.viewState.rotation,{},function(a){var b=J(a).toString();if(!(b in f))return f[b]=!0,c.call(d,a,e)})}};Oi.prototype.D=function(){Th(this)}; + Oi.prototype.i=function(a){function b(a){var b,d=a.f;d?b=d.call(a,l):(d=c.g)&&(b=d(a,l));if(b){if(b){d=!1;if(Array.isArray(b))for(var e=0,f=b.length;e<f;++e)d=Bi(q,a,b[e],Ai(l,m),this.D,this)||d;else d=Bi(q,a,b,Ai(l,m),this.D,this)||d;a=d}else a=!1;this.c=this.c||a}}var c=this.a,d=c.da();Vh(a.attributions,d.h);Wh(a,d);var e=a.viewHints[0],f=a.viewHints[1],g=c.i,h=c.j;if(!this.c&&!g&&e||!h&&f)return!0;var k=a.extent,h=a.viewState,e=h.projection,l=h.resolution,m=a.pixelRatio,f=c.b,p=c.a,g=c.get("renderOrder"); + void 0===g&&(g=zi);k=fb(k,p*l);p=h.projection.G();d.i&&h.projection.b&&!hb(p,a.extent)&&(a=Math.max(qb(k)/2,qb(p)),k[0]=p[0]-a,k[2]=p[2]+a);if(!this.c&&this.u==l&&this.B==f&&this.s==g&&hb(this.j,k))return!0;this.f=null;this.c=!1;var q=new vi(.5*l/m,k,l,d.u,c.a);Pi(d,k,l,e);if(g){var u=[];Qi(d,k,function(a){u.push(a)},this);u.sort(g);u.forEach(b,this)}else Qi(d,k,b,this);wi(q);this.u=l;this.B=f;this.s=g;this.j=k;this.f=q;return!0};function Ri(a,b){Nf.call(this,0,b);this.f=Md();this.b=this.f.canvas;this.b.style.width="100%";this.b.style.height="100%";this.b.className="ol-unselectable";a.insertBefore(this.b,a.childNodes[0]||null);this.a=!0;this.h=Cf()}B(Ri,Nf);Ri.prototype.Mb=function(a){return a instanceof W?new Mi(a):a instanceof Y?new Oi(a):null}; + function Si(a,b,c){var d=a.g,e=a.f;if(Ha(d,b)){var f=c.extent,g=c.pixelRatio,h=c.viewState.rotation,k=c.viewState,l=c.pixelRatio/k.resolution;a=Lf(a.h,a.b.width/2,a.b.height/2,l,-l,-k.rotation,-k.center[0],-k.center[1]);U(d,new uf(b,new Gh(e,g,f,a,h),c,e,null))}}Ri.prototype.$=function(){return"canvas"}; + Ri.prototype.vb=function(a){if(a){var b=this.f,c=a.pixelRatio,d=Math.round(a.size[0]*c),c=Math.round(a.size[1]*c);this.b.width!=d||this.b.height!=c?(this.b.width=d,this.b.height=c):b.clearRect(0,0,d,c);var e=a.viewState.rotation;Of(a);Si(this,"precompose",a);var f=a.layerStatesArray;Sa(f);nh(b,e,d/2,c/2);var g=a.viewState.resolution,h,k,l,m;h=0;for(k=f.length;h<k;++h)m=f[h],l=m.layer,l=Qf(this,l),yf(m,g)&&"ready"==m.ac&&l.i(a,m)&&l.g(a,m,b);nh(b,-e,d/2,c/2);Si(this,"postcompose",a);this.a||(this.b.style.display= + "",this.a=!0);Rf(this,a);a.postRenderFunctions.push(Pf)}else this.a&&(this.b.style.display="none",this.a=!1)};function Ti(a,b){Rh.call(this,a);this.target=b}B(Ti,Rh);Ti.prototype.Jb=I;Ti.prototype.Gc=I;function Ui(a){var b=document.createElement("DIV");b.style.position="absolute";Ti.call(this,a,b);this.f=!0;this.h=1;this.g=0;this.c={}}B(Ui,Ti);Ui.prototype.Jb=function(){for(var a=this.target;a.lastChild;)a.removeChild(a.lastChild);this.g=0}; + Ui.prototype.Hc=function(a,b){if(!b.visible)return this.f&&(this.target.style.display="none",this.f=!1),!0;var c=a.pixelRatio,d=a.viewState,e=d.projection,f=this.a,g=f.da(),h=g.sa(e),k=c*g.nb(e),l=Xc(h,d.resolution),m=h.O(l),p=d.center,q;m==d.resolution?(p=Yh(p,m,a.size),q=ub(p,m,d.rotation,a.size)):q=a.extent;void 0!==b.extent&&(q=vb(q,b.extent));var m=Tc(h,q,m),u={};u[l]={};var w=this.l(g,e,u),r=jh(f),x=db(),D=new Gc(0,0,0,0),t,z,C,E;for(C=m.H;C<=m.I;++C)for(E=m.J;E<=m.L;++E)t=$h(g,l,C,E,c,e),z= + t.T(),z=2==z||4==z||3==z&&!r,!z&&t.b&&(t=t.b),z=t.T(),2==z?u[l][t.V.toString()]=t:4==z||3==z&&!r||(z=Pc(h,t.V,w,D,x),z||(t=Sc(h,t.V,D,x))&&w(l+1,t));var v;if(this.g!=g.b){for(v in this.c)r=this.c[+v],Sd(r.target);this.c={};this.g=g.b}x=Object.keys(u).map(Number);x.sort(Ma);var w={},H;C=0;for(E=x.length;C<E;++C){v=x[C];v in this.c?r=this.c[v]:(r=Yc(h,p,v),r=new Vi(h,r),w[v]=!0,this.c[v]=r);v=u[v];for(H in v){t=r;z=v[H];var G=k,A=z.V,F=A[0],Q=A[1],N=A[2],A=A.toString();if(!(A in t.a)){var F=Lc(Wc(t.g, + F),t.i),O=z.Z(t),S=O.style;S.maxWidth="none";var X,P;0<G?(X=document.createElement("DIV"),P=X.style,P.overflow="hidden",P.width=F[0]+"px",P.height=F[1]+"px",S.position="absolute",S.left=-G+"px",S.top=-G+"px",S.width=F[0]+2*G+"px",S.height=F[1]+2*G+"px",X.appendChild(O)):(S.width=F[0]+"px",S.height=F[1]+"px",X=O,P=S);P.position="absolute";P.left=(Q-t.c[1])*F[0]+"px";P.top=(t.c[2]-N)*F[1]+"px";t.b||(t.b=document.createDocumentFragment());t.b.appendChild(X);t.a[A]=z}}r.b&&(r.target.appendChild(r.b), + r.b=null)}k=Object.keys(this.c).map(Number);k.sort(Ma);C=Cf();H=0;for(x=k.length;H<x;++H)if(v=k[H],r=this.c[v],v in u)if(t=r.O(),E=r.pa(),Lf(C,a.size[0]/2,a.size[1]/2,t/d.resolution,t/d.resolution,d.rotation,(E[0]-p[0])/t,(p[1]-E[1])/t),r.setTransform(C),v in w){for(--v;0<=v;--v)if(v in this.c){this.c[v].target.parentNode&&this.c[v].target.parentNode.insertBefore(r.target,this.c[v].target.nextSibling);break}0>v&&this.target.insertBefore(r.target,this.target.childNodes[0]||null)}else{if(!a.viewHints[0]&& + !a.viewHints[1]){z=Rc(r.g,q,r.c[0],D);v=[];t=void 0;for(t in r.a)E=r.a[t],G=E.V,Hc(z,G[1],G[2])||v.push(E);z=0;for(G=v.length;z<G;++z)E=v[z],t=E.V.toString(),Sd(E.Z(r)),delete r.a[t]}}else Sd(r.target),delete this.c[v];b.opacity!=this.h&&(this.h=this.target.style.opacity=b.opacity);b.visible&&!this.f&&(this.target.style.display="",this.f=!0);Xh(a.usedTiles,g,l,m);Zh(a,g,h,c,e,q,l,f.get("preload"));Uh(a,g);Wh(a,g);return!0}; + function Vi(a,b){this.target=document.createElement("DIV");this.target.style.position="absolute";this.target.style.width="100%";this.target.style.height="100%";this.g=a;this.c=b;this.h=xb(Qc(a,b));this.l=a.O(b[0]);this.a={};this.b=null;this.f=Cf();this.i=[0,0]}Vi.prototype.pa=function(){return this.h};Vi.prototype.O=function(){return this.l};Vi.prototype.setTransform=function(a){Ra(a,this.f)||(Qd(this.target,a),Gf(this.f,a))};function Wi(a){this.g=Md();var b=this.g.canvas;b.style.maxWidth="none";b.style.position="absolute";Ti.call(this,a,b);this.c=!1;this.h=-1;this.s=NaN;this.i=db();this.f=this.j=null;this.B=Cf();this.u=Cf()}B(Wi,Ti);n=Wi.prototype;n.Jb=function(){var a=this.g.canvas;a.width=a.width;this.h=0}; + n.Gc=function(a,b){var c=a.viewState,d=c.center,e=c.rotation,f=c.resolution,c=a.pixelRatio,g=a.size[0],h=a.size[1],k=g*c,l=h*c,d=Lf(this.B,c*g/2,c*h/2,c/f,-c/f,-e,-d[0],-d[1]),f=this.g;f.canvas.width=k;f.canvas.height=l;var m=Df(this.u);Jf(m,1/c,1/c);Kf(m,-(k-g)/2*c,-(l-h)/2*c);Qd(f.canvas,m);Xi(this,"precompose",a,d);(g=this.f)&&!g.c()&&(f.globalAlpha=b.opacity,g.f(f,c,d,e,b.hb?a.skippedFeatureUids:{}),Xi(this,"render",a,d));Xi(this,"postcompose",a,d)}; + function Xi(a,b,c,d){var e=a.g;a=a.a;Ha(a,b)&&U(a,new uf(b,new Gh(e,c.pixelRatio,c.extent,d,c.viewState.rotation),c,e,null))}n.fa=function(a,b,c,d){if(this.f){var e=this.a,f={};return this.f.fa(a,b.viewState.resolution,b.viewState.rotation,{},function(a){var b=J(a).toString();if(!(b in f))return f[b]=!0,c.call(d,a,e)})}};n.Ic=function(){Th(this)}; + n.Hc=function(a){function b(a){var b,d=a.f;d?b=d.call(a,k):(d=c.g)&&(b=d(a,k));if(b){if(b){d=!1;if(Array.isArray(b))for(var e=0,f=b.length;e<f;++e)d=Bi(m,a,b[e],Ai(k,l),this.Ic,this)||d;else d=Bi(m,a,b,Ai(k,l),this.Ic,this)||d;a=d}else a=!1;this.c=this.c||a}}var c=this.a,d=c.da();Vh(a.attributions,d.h);Wh(a,d);var e=a.viewHints[0],f=a.viewHints[1],g=c.i,h=c.j;if(!this.c&&!g&&e||!h&&f)return!0;var f=a.extent,g=a.viewState,e=g.projection,k=g.resolution,l=a.pixelRatio;a=c.b;h=c.a;g=c.get("renderOrder"); + void 0===g&&(g=zi);f=fb(f,h*k);if(!this.c&&this.s==k&&this.h==a&&this.j==g&&hb(this.i,f))return!0;this.f=null;this.c=!1;var m=new vi(.5*k/l,f,k,d.u,c.a);Pi(d,f,k,e);if(g){var p=[];Qi(d,f,function(a){p.push(a)},this);p.sort(g);p.forEach(b,this)}else Qi(d,f,b,this);wi(m);this.s=k;this.h=a;this.j=g;this.i=f;this.f=m;return!0};function Yi(a,b){Nf.call(this,0,b);this.f=Md();var c=this.f.canvas;c.style.position="absolute";c.style.width="100%";c.style.height="100%";c.className="ol-unselectable";a.insertBefore(c,a.childNodes[0]||null);this.h=Cf();this.b=document.createElement("DIV");this.b.className="ol-unselectable";c=this.b.style;c.position="absolute";c.width="100%";c.height="100%";R(this.b,"touchstart",Fa);a.insertBefore(this.b,a.childNodes[0]||null);this.a=!0}B(Yi,Nf);Yi.prototype.R=function(){Sd(this.b);Nf.prototype.R.call(this)}; + Yi.prototype.Mb=function(a){if(a instanceof W)a=new Ui(a);else if(a instanceof Y)a=new Wi(a);else return null;return a};function Zi(a,b,c){var d=a.g;if(Ha(d,b)){var e=c.extent,f=c.pixelRatio,g=c.viewState,h=g.rotation,k=a.f,l=k.canvas;a=Lf(a.h,l.width/2,l.height/2,f/g.resolution,-f/g.resolution,-h,-g.center[0],-g.center[1]);U(d,new uf(b,new Gh(k,f,e,a,h),c,k,null))}}Yi.prototype.$=function(){return"dom"}; + Yi.prototype.vb=function(a){if(a){var b=this.g;if(Ha(b,"precompose")||Ha(b,"postcompose")){var b=this.f.canvas,c=a.pixelRatio;b.width=a.size[0]*c;b.height=a.size[1]*c}Zi(this,"precompose",a);b=a.layerStatesArray;Sa(b);var c=a.viewState.resolution,d,e,f,g;d=0;for(e=b.length;d<e;++d)g=b[d],f=g.layer,f=Qf(this,f),this.b.insertBefore(f.target,this.b.childNodes[d]||null),yf(g,c)&&"ready"==g.ac?f.Hc(a,g)&&f.Gc(a,g):f.Jb();var b=a.layerStates,h;for(h in this.c)h in b||(f=this.c[h],Sd(f.target));this.a|| + (this.b.style.display="",this.a=!0);Of(a);Rf(this,a);a.postRenderFunctions.push(Pf);Zi(this,"postcompose",a)}else this.a&&(this.b.style.display="none",this.a=!1)};function $i(a){this.b=a};function aj(a){this.b=a}B(aj,$i);aj.prototype.$=function(){return 35632};function bj(a){this.b=a}B(bj,$i);bj.prototype.$=function(){return 35633};function cj(){this.b="precision mediump float;varying vec2 a;varying float b;uniform float k;uniform sampler2D l;void main(void){vec4 texColor=texture2D(l,a);gl_FragColor.rgb=texColor.rgb;float alpha=texColor.a*b*k;if(alpha==0.0){discard;}gl_FragColor.a=alpha;}"}B(cj,aj);var dj=new cj; + function ej(){this.b="varying vec2 a;varying float b;attribute vec2 c;attribute vec2 d;attribute vec2 e;attribute float f;attribute float g;uniform mat4 h;uniform mat4 i;uniform mat4 j;void main(void){mat4 offsetMatrix=i;if(g==1.0){offsetMatrix=i*j;}vec4 offsets=offsetMatrix*vec4(e,0.,0.);gl_Position=h*vec4(c,0.,1.)+offsets;a=d;b=f;}"}B(ej,bj);var fj=new ej; + function gj(a,b){this.i=a.getUniformLocation(b,"j");this.j=a.getUniformLocation(b,"i");this.h=a.getUniformLocation(b,"k");this.l=a.getUniformLocation(b,"h");this.b=a.getAttribLocation(b,"e");this.a=a.getAttribLocation(b,"f");this.f=a.getAttribLocation(b,"c");this.c=a.getAttribLocation(b,"g");this.g=a.getAttribLocation(b,"d")};function hj(a){this.b=void 0!==a?a:[];this.a=ij}var ij=35044;function jj(a,b){this.C=a;this.b=b;this.a={};this.g={};this.f={};this.i=this.j=this.h=this.l=null;(this.c=0<=fa.indexOf("OES_element_index_uint"))&&b.getExtension("OES_element_index_uint");R(this.C,"webglcontextlost",this.K,this);R(this.C,"webglcontextrestored",this.s,this)}B(jj,Aa); + function kj(a,b,c){var d=a.b,e=c.b,f=String(J(c));if(f in a.a)d.bindBuffer(b,a.a[f].buffer);else{var g=d.createBuffer();d.bindBuffer(b,g);var h;34962==b?h=new Float32Array(e):34963==b&&(h=a.c?new Uint32Array(e):new Uint16Array(e));d.bufferData(b,h,c.a);a.a[f]={Qe:c,buffer:g}}}function lj(a,b){var c=a.b,d=String(J(b)),e=a.a[d];c.isContextLost()||c.deleteBuffer(e.buffer);delete a.a[d]} + jj.prototype.R=function(){za(this.C);var a=this.b;if(!a.isContextLost()){for(var b in this.a)a.deleteBuffer(this.a[b].buffer);for(b in this.f)a.deleteProgram(this.f[b]);for(b in this.g)a.deleteShader(this.g[b]);a.deleteFramebuffer(this.h);a.deleteRenderbuffer(this.i);a.deleteTexture(this.j)}}; + function mj(a){if(!a.h){var b=a.b,c=b.createFramebuffer();b.bindFramebuffer(b.FRAMEBUFFER,c);var d=nj(b,1,1),e=b.createRenderbuffer();b.bindRenderbuffer(b.RENDERBUFFER,e);b.renderbufferStorage(b.RENDERBUFFER,b.DEPTH_COMPONENT16,1,1);b.framebufferTexture2D(b.FRAMEBUFFER,b.COLOR_ATTACHMENT0,b.TEXTURE_2D,d,0);b.framebufferRenderbuffer(b.FRAMEBUFFER,b.DEPTH_ATTACHMENT,b.RENDERBUFFER,e);b.bindTexture(b.TEXTURE_2D,null);b.bindRenderbuffer(b.RENDERBUFFER,null);b.bindFramebuffer(b.FRAMEBUFFER,null);a.h=c; + a.j=d;a.i=e}return a.h}function oj(a,b){var c=String(J(b));if(c in a.g)return a.g[c];var d=a.b,e=d.createShader(b.$());d.shaderSource(e,b.b);d.compileShader(e);return a.g[c]=e}function pj(a,b,c){var d=J(b)+"/"+J(c);if(d in a.f)return a.f[d];var e=a.b,f=e.createProgram();e.attachShader(f,oj(a,b));e.attachShader(f,oj(a,c));e.linkProgram(f);return a.f[d]=f}jj.prototype.K=function(){qa(this.a);qa(this.g);qa(this.f);this.i=this.j=this.h=this.l=null};jj.prototype.s=function(){}; + function qj(a,b){if(b==a.l)return!1;a.b.useProgram(b);a.l=b;return!0}function rj(a,b,c){var d=a.createTexture();a.bindTexture(a.TEXTURE_2D,d);a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MAG_FILTER,a.LINEAR);a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MIN_FILTER,a.LINEAR);void 0!==b&&a.texParameteri(3553,10242,b);void 0!==c&&a.texParameteri(3553,10243,c);return d}function nj(a,b,c){var d=rj(a,void 0,void 0);a.texImage2D(a.TEXTURE_2D,0,a.RGBA,b,c,0,a.RGBA,a.UNSIGNED_BYTE,null);return d};function sj(a,b){this.B=this.u=void 0;this.C=tb(b);this.v=[];this.l=[];this.M=void 0;this.h=[];this.g=[];this.ca=this.Y=void 0;this.a=[];this.D=this.j=null;this.N=void 0;this.Ea=Cf();this.va=Cf();this.ha=this.P=void 0;this.wa=Cf();this.ra=Jd();this.ba=this.aa=this.W=void 0;this.na=[];this.i=[];this.b=[];this.s=null;this.c=[];this.K=[];this.ma=void 0}B(sj,Fh); + function tj(a,b){var c=a.s,d=a.j,e=a.na,f=a.i,g=b.b;return function(){if(!g.isContextLost()){var a,k;a=0;for(k=e.length;a<k;++a)g.deleteTexture(e[a]);a=0;for(k=f.length;a<k;++a)g.deleteTexture(f[a])}lj(b,c);lj(b,d)}} + function uj(a,b,c,d){var e=a.u,f=a.B,g=a.M,h=a.Y,k=a.ca,l=a.N,m=a.P,p=a.ha,q=a.W?1:0,u=a.aa,w=a.ba,r=a.ma,x=Math.cos(u),u=Math.sin(u),D=a.a.length,t=a.b.length,z,C,E,v,H,G;for(z=0;z<c;z+=d)H=b[z]-a.C[0],G=b[z+1]-a.C[1],C=t/8,E=-w*e,v=-w*(g-f),a.b[t++]=H,a.b[t++]=G,a.b[t++]=E*x-v*u,a.b[t++]=E*u+v*x,a.b[t++]=m/k,a.b[t++]=(p+g)/h,a.b[t++]=l,a.b[t++]=q,E=w*(r-e),v=-w*(g-f),a.b[t++]=H,a.b[t++]=G,a.b[t++]=E*x-v*u,a.b[t++]=E*u+v*x,a.b[t++]=(m+r)/k,a.b[t++]=(p+g)/h,a.b[t++]=l,a.b[t++]=q,E=w*(r-e),v=w*f,a.b[t++]= + H,a.b[t++]=G,a.b[t++]=E*x-v*u,a.b[t++]=E*u+v*x,a.b[t++]=(m+r)/k,a.b[t++]=p/h,a.b[t++]=l,a.b[t++]=q,E=-w*e,v=w*f,a.b[t++]=H,a.b[t++]=G,a.b[t++]=E*x-v*u,a.b[t++]=E*u+v*x,a.b[t++]=m/k,a.b[t++]=p/h,a.b[t++]=l,a.b[t++]=q,a.a[D++]=C,a.a[D++]=C+1,a.a[D++]=C+2,a.a[D++]=C,a.a[D++]=C+2,a.a[D++]=C+3}sj.prototype.bb=function(a,b){this.c.push(this.a.length);this.K.push(b);var c=a.o;uj(this,c,c.length,a.A)};sj.prototype.cb=function(a,b){this.c.push(this.a.length);this.K.push(b);var c=a.o;uj(this,c,c.length,a.A)}; + function vj(a,b){var c=b.b;a.v.push(a.a.length);a.l.push(a.a.length);a.s=new hj(a.b);kj(b,34962,a.s);a.j=new hj(a.a);kj(b,34963,a.j);var d={};wj(a.na,a.h,d,c);wj(a.i,a.g,d,c);a.u=void 0;a.B=void 0;a.M=void 0;a.h=null;a.g=null;a.Y=void 0;a.ca=void 0;a.a=null;a.N=void 0;a.P=void 0;a.ha=void 0;a.W=void 0;a.aa=void 0;a.ba=void 0;a.b=null;a.ma=void 0} + function wj(a,b,c,d){var e,f,g,h,k=b.length;for(h=0;h<k;++h){f=b[h];g=J(f).toString();if(g in c)e=c[g];else{e=d;var l=rj(e,33071,33071);e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,f);e=l;c[g]=e}a[h]=e}} + sj.prototype.f=function(a,b,c,d,e,f,g,h,k,l,m){f=a.b;kj(a,34962,this.s);kj(a,34963,this.j);var p=pj(a,dj,fj),q;this.D?q=this.D:this.D=q=new gj(f,p);qj(a,p);f.enableVertexAttribArray(q.f);f.vertexAttribPointer(q.f,2,5126,!1,32,0);f.enableVertexAttribArray(q.b);f.vertexAttribPointer(q.b,2,5126,!1,32,8);f.enableVertexAttribArray(q.g);f.vertexAttribPointer(q.g,2,5126,!1,32,16);f.enableVertexAttribArray(q.a);f.vertexAttribPointer(q.a,1,5126,!1,32,24);f.enableVertexAttribArray(q.c);f.vertexAttribPointer(q.c, + 1,5126,!1,32,28);p=Df(this.wa);Jf(p,2/(c*e[0]),2/(c*e[1]));If(p,-d);Kf(p,-(b[0]-this.C[0]),-(b[1]-this.C[1]));b=Df(this.va);Jf(b,2/e[0],2/e[1]);e=Df(this.Ea);0!==d&&If(e,-d);f.uniformMatrix4fv(q.l,!1,Kd(this.ra,p));f.uniformMatrix4fv(q.j,!1,Kd(this.ra,b));f.uniformMatrix4fv(q.i,!1,Kd(this.ra,e));f.uniform1f(q.h,g);var u;if(void 0===k)xj(this,f,a,h,this.na,this.v);else{if(l)a:{d=a.c?5125:5123;a=a.c?4:2;e=this.c.length-1;for(g=this.i.length-1;0<=g;--g)for(f.bindTexture(3553,this.i[g]),l=0<g?this.l[g- + 1]:0,b=this.l[g];0<=e&&this.c[e]>=l;){u=this.c[e];c=this.K[e];p=J(c).toString();if(void 0===h[p]&&c.S()&&(void 0===m||wb(m,c.S().G()))&&(f.clear(f.COLOR_BUFFER_BIT|f.DEPTH_BUFFER_BIT),f.drawElements(4,b-u,d,u*a),b=k(c))){h=b;break a}b=u;e--}h=void 0}else f.clear(f.COLOR_BUFFER_BIT|f.DEPTH_BUFFER_BIT),xj(this,f,a,h,this.i,this.l),h=(h=k(null))?h:void 0;u=h}f.disableVertexAttribArray(q.f);f.disableVertexAttribArray(q.b);f.disableVertexAttribArray(q.g);f.disableVertexAttribArray(q.a);f.disableVertexAttribArray(q.c); + return u};function xj(a,b,c,d,e,f){var g=c.c?5125:5123;c=c.c?4:2;if(sa(d)){var h;a=0;d=e.length;for(h=0;a<d;++a){b.bindTexture(3553,e[a]);var k=f[a];b.drawElements(4,k-h,g,h*c);h=k}}else{h=0;var l,k=0;for(l=e.length;k<l;++k){b.bindTexture(3553,e[k]);for(var m=0<k?f[k-1]:0,p=f[k],q=m;h<a.c.length&&a.c[h]<=p;){var u=J(a.K[h]).toString();void 0!==d[u]?(q!==m&&b.drawElements(4,m-q,g,q*c),m=q=h===a.c.length-1?p:a.c[h+1]):m=h===a.c.length-1?p:a.c[h+1];h++}q!==m&&b.drawElements(4,m-q,g,q*c)}}} + sj.prototype.Ma=function(a){var b=a.eb(),c=a.Z(1),d=a.Ob(),e=a.ub(1),f=a.C,g=a.pa(),h=a.K,k=a.s,l=a.Ka();a=a.v;var m;0===this.h.length?this.h.push(c):(m=this.h[this.h.length-1],J(m)!=J(c)&&(this.v.push(this.a.length),this.h.push(c)));0===this.g.length?this.g.push(e):(m=this.g[this.g.length-1],J(m)!=J(e)&&(this.l.push(this.a.length),this.g.push(e)));this.u=b[0];this.B=b[1];this.M=l[1];this.Y=d[1];this.ca=d[0];this.N=f;this.P=g[0];this.ha=g[1];this.aa=k;this.W=h;this.ba=a;this.ma=l[0]}; + function yj(a,b,c){this.h=b;this.l=a;this.g=c;this.a={}}B(yj,ei);function zj(a,b){var c=[],d;for(d in a.a)c.push(tj(a.a[d],b));return function(){for(var a=c.length,b,d=0;d<a;d++)b=c[d].apply(this,arguments);return b}}function Aj(a,b){for(var c in a.a)vj(a.a[c],b)}yj.prototype.b=function(a,b){var c=this.a[b];void 0===c&&(c=new Bj[b](this.l,this.h),this.a[b]=c);return c};yj.prototype.c=function(){return sa(this.a)}; + yj.prototype.f=function(a,b,c,d,e,f,g,h){var k,l,m;k=0;for(l=fi.length;k<l;++k)m=this.a[fi[k]],void 0!==m&&m.f(a,b,c,d,e,f,g,h,void 0,!1)};function Cj(a,b,c,d,e,f,g,h,k,l,m){var p=Dj,q,u;for(q=fi.length-1;0<=q;--q)if(u=a.a[fi[q]],void 0!==u&&(u=u.f(b,c,d,e,p,f,g,h,k,l,m)))return u} + yj.prototype.fa=function(a,b,c,d,e,f,g,h,k,l){var m=b.b;m.bindFramebuffer(m.FRAMEBUFFER,mj(b));var p;void 0!==this.g&&(p=fb(kb(a),d*this.g));return Cj(this,b,a,d,e,g,h,k,function(a){var b=new Uint8Array(4);m.readPixels(0,0,1,1,m.RGBA,m.UNSIGNED_BYTE,b);if(0<b[3]&&(a=l(a)))return a},!0,p)}; + function Ej(a,b,c,d,e,f,g,h){var k=c.b;k.bindFramebuffer(k.FRAMEBUFFER,mj(c));return void 0!==Cj(a,c,b,d,e,f,g,h,function(){var a=new Uint8Array(4);k.readPixels(0,0,1,1,k.RGBA,k.UNSIGNED_BYTE,a);return 0<a[3]},!1)}var Bj={Image:sj},Dj=[1,1];function Fj(a,b,c,d,e,f,g){this.b=a;this.c=b;this.f=f;this.g=g;this.i=e;this.l=d;this.h=c;this.a=null}B(Fj,Fh);Fj.prototype.cb=function(a,b){var c=this.b,d=(new yj(1,this.f)).b(0,"Image");d.Ma(this.a);d.cb(a,b);vj(d,c);d.f(this.b,this.c,this.h,this.l,this.i,this.g,1,{},void 0,!1);tj(d,c)()};Fj.prototype.bb=function(a,b){var c=this.b,d=(new yj(1,this.f)).b(0,"Image");d.Ma(this.a);d.bb(a,b);vj(d,c);d.f(this.b,this.c,this.h,this.l,this.i,this.g,1,{},void 0,!1);tj(d,c)()}; + Fj.prototype.Ma=function(a){this.a=a};function Gj(){this.b="precision mediump float;varying vec2 a;uniform float f;uniform sampler2D g;void main(void){vec4 texColor=texture2D(g,a);gl_FragColor.rgb=texColor.rgb;gl_FragColor.a=texColor.a*f;}"}B(Gj,aj);var Hj=new Gj;function Ij(){this.b="varying vec2 a;attribute vec2 b;attribute vec2 c;uniform mat4 d;uniform mat4 e;void main(void){gl_Position=e*vec4(b,0.,1.);a=(d*vec4(c,0.,1.)).st;}"}B(Ij,bj);var Jj=new Ij; + function Kj(a,b){this.c=a.getUniformLocation(b,"f");this.f=a.getUniformLocation(b,"e");this.h=a.getUniformLocation(b,"d");this.g=a.getUniformLocation(b,"g");this.b=a.getAttribLocation(b,"b");this.a=a.getAttribLocation(b,"c")};function Lj(a,b){Rh.call(this,b);this.f=a;this.W=new hj([-1,-1,0,0,1,-1,1,0,-1,1,0,1,1,1,1,1]);this.i=this.Da=null;this.j=void 0;this.P=Cf();this.aa=Cf();this.B=Jd();this.s=null}B(Lj,Rh); + function Mj(a,b,c){var d=a.f.f;if(void 0===a.j||a.j!=c){b.postRenderFunctions.push(function(a,b,c){a.isContextLost()||(a.deleteFramebuffer(b),a.deleteTexture(c))}.bind(null,d,a.i,a.Da));b=nj(d,c,c);var e=d.createFramebuffer();d.bindFramebuffer(36160,e);d.framebufferTexture2D(36160,36064,3553,b,0);a.Da=b;a.i=e;a.j=c}else d.bindFramebuffer(36160,a.i)} + Lj.prototype.Jc=function(a,b,c){Nj(this,"precompose",c,a);kj(c,34962,this.W);var d=c.b,e=pj(c,Hj,Jj),f;this.s?f=this.s:this.s=f=new Kj(d,e);qj(c,e)&&(d.enableVertexAttribArray(f.b),d.vertexAttribPointer(f.b,2,5126,!1,16,0),d.enableVertexAttribArray(f.a),d.vertexAttribPointer(f.a,2,5126,!1,16,8),d.uniform1i(f.g,0));d.uniformMatrix4fv(f.h,!1,Kd(this.B,this.P));d.uniformMatrix4fv(f.f,!1,Kd(this.B,this.aa));d.uniform1f(f.c,b.opacity);d.bindTexture(3553,this.Da);d.drawArrays(5,0,4);Nj(this,"postcompose", + c,a)};function Nj(a,b,c,d){a=a.a;if(Ha(a,b)){var e=d.viewState;U(a,new uf(b,new Fj(c,e.center,e.resolution,e.rotation,d.size,d.extent,d.pixelRatio),d,null,c))}}Lj.prototype.v=function(){this.i=this.Da=null;this.j=void 0};function Oj(){this.b="precision mediump float;varying vec2 a;uniform sampler2D e;void main(void){gl_FragColor=texture2D(e,a);}"}B(Oj,aj);var Pj=new Oj;function Qj(){this.b="varying vec2 a;attribute vec2 b;attribute vec2 c;uniform vec4 d;void main(void){gl_Position=vec4(b*d.xy+d.zw,0.,1.);a=c;}"}B(Qj,bj);var Rj=new Qj;function Sj(a,b){this.c=a.getUniformLocation(b,"e");this.f=a.getUniformLocation(b,"d");this.b=a.getAttribLocation(b,"b");this.a=a.getAttribLocation(b,"c")};function Tj(a,b){Lj.call(this,a,b);this.M=Pj;this.ba=Rj;this.c=null;this.D=new hj([0,0,0,1,1,0,1,1,0,1,0,0,1,1,1,0]);this.u=this.g=null;this.h=-1;this.N=[0,0]}B(Tj,Lj);Tj.prototype.R=function(){lj(this.f.getContext(),this.D);Lj.prototype.R.call(this)};Tj.prototype.l=function(a,b,c){var d=this.f;return function(e,f){return Sh(a,b,e,f,function(a){var b=Uj(d.a,a.getKey());b&&(c[e]||(c[e]={}),c[e][a.V.toString()]=a);return b})}};Tj.prototype.v=function(){Lj.prototype.v.call(this);this.c=null}; + Tj.prototype.Kc=function(a,b,c){var d=this.f,e=c.b,f=a.viewState,g=f.projection,h=this.a,k=h.da(),l=k.sa(g),m=Xc(l,f.resolution),p=l.O(m),q=Ni(k,m,a.pixelRatio,g),u=q[0]/Lc(Wc(l,m),this.N)[0],w=p/u,r=a.pixelRatio*k.nb(g),x=f.center,D;p==f.resolution?(x=Yh(x,p,a.size),D=ub(x,p,f.rotation,a.size)):D=a.extent;p=Tc(l,D,p);if(this.g&&Ic(this.g,p)&&this.h==k.b)w=this.u;else{var t=[p.I-p.H+1,p.L-p.J+1],z=ka(Math.max(t[0]*q[0],t[1]*q[1])),t=w*z,C=l.pa(m),E=C[0]+p.H*q[0]*w,w=C[1]+p.J*q[1]*w,w=[E,w,E+t,w+t]; + Mj(this,a,z);e.viewport(0,0,z,z);e.clearColor(0,0,0,0);e.clear(16384);e.disable(3042);z=pj(c,this.M,this.ba);qj(c,z);this.c||(this.c=new Sj(e,z));kj(c,34962,this.D);e.enableVertexAttribArray(this.c.b);e.vertexAttribPointer(this.c.b,2,5126,!1,16,0);e.enableVertexAttribArray(this.c.a);e.vertexAttribPointer(this.c.a,2,5126,!1,16,8);e.uniform1i(this.c.c,0);c={};c[m]={};var v=this.l(k,g,c),H=jh(h),z=!0,E=db(),G=new Gc(0,0,0,0),A,F,Q;for(F=p.H;F<=p.I;++F)for(Q=p.J;Q<=p.L;++Q){C=$h(k,m,F,Q,u,g);if(void 0!== + b.extent&&(A=Qc(l,C.V,E),!wb(A,b.extent)))continue;A=C.T();A=2==A||4==A||3==A&&!H;!A&&C.b&&(C=C.b);A=C.T();if(2==A){if(Uj(d.a,C.getKey())){c[m][C.V.toString()]=C;continue}}else if(4==A||3==A&&!H)continue;z=!1;A=Pc(l,C.V,v,G,E);A||(C=Sc(l,C.V,G,E))&&v(m+1,C)}b=Object.keys(c).map(Number);b.sort(Ma);for(var v=new Float32Array(4),N,H=0,G=b.length;H<G;++H)for(N in F=c[b[H]],F)C=F[N],A=Qc(l,C.V,E),v[0]=2*(A[2]-A[0])/t,v[1]=2*(A[3]-A[1])/t,v[2]=2*(A[0]-w[0])/t-1,v[3]=2*(A[1]-w[1])/t-1,e.uniform4fv(this.c.f, + v),Vj(d,C,q,r*u),e.drawArrays(5,0,4);z?(this.g=p,this.u=w,this.h=k.b):(this.u=this.g=null,this.h=-1,a.animate=!0)}Xh(a.usedTiles,k,m,p);var O=d.l;Zh(a,k,l,u,g,D,m,h.get("preload"),function(a){var b;(b=2!=a.T()||Uj(d.a,a.getKey()))||(b=a.getKey()in O.a);b||O.g([a,Vc(l,a.V),l.O(a.V[0]),q,r*u])},this);Uh(a,k);Wh(a,k);e=this.P;Df(e);Kf(e,(x[0]-w[0])/(w[2]-w[0]),(x[1]-w[1])/(w[3]-w[1]));0!==f.rotation&&If(e,f.rotation);Jf(e,a.size[0]*f.resolution/(w[2]-w[0]),a.size[1]*f.resolution/(w[3]-w[1]));Kf(e,-.5, + -.5);return!0};function Wj(a,b){Lj.call(this,a,b);this.h=!1;this.N=-1;this.M=NaN;this.u=db();this.g=this.c=this.D=null}B(Wj,Lj);n=Wj.prototype;n.Jc=function(a,b,c){this.g=b;var d=a.viewState,e=this.c;e&&!e.c()&&e.f(c,d.center,d.resolution,d.rotation,a.size,a.pixelRatio,b.opacity,b.hb?a.skippedFeatureUids:{})};n.R=function(){var a=this.c;if(a){var b=this.f.getContext();zj(a,b)();this.c=null}Lj.prototype.R.call(this)}; + n.fa=function(a,b,c,d){if(this.c&&this.g){var e=this.f.getContext(),f=b.viewState,g=this.a,h={};return this.c.fa(a,e,f.center,f.resolution,f.rotation,b.size,b.pixelRatio,this.g.opacity,{},function(a){var b=J(a).toString();if(!(b in h))return h[b]=!0,c.call(d,a,g)})}};n.Ec=function(a,b){if(this.c&&this.g){var c=this.f.getContext(),d=b.viewState;return Ej(this.c,a,c,d.resolution,d.rotation,b.pixelRatio,this.g.opacity,b.skippedFeatureUids)}return!1};n.Lc=function(){Th(this)}; + n.Kc=function(a,b,c){function d(a){var b,c=a.f;c?b=c.call(a,l):(c=e.g)&&(b=c(a,l));if(b){if(b){c=!1;if(Array.isArray(b))for(var d=0,f=b.length;d<f;++d)c=Bi(q,a,b[d],Ai(l,m),this.Lc,this)||c;else c=Bi(q,a,b,Ai(l,m),this.Lc,this)||c;a=c}else a=!1;this.h=this.h||a}}var e=this.a;b=e.da();Vh(a.attributions,b.h);Wh(a,b);var f=a.viewHints[0],g=a.viewHints[1],h=e.i,k=e.j;if(!this.h&&!h&&f||!k&&g)return!0;var g=a.extent,h=a.viewState,f=h.projection,l=h.resolution,m=a.pixelRatio,h=e.b,p=e.a,k=e.get("renderOrder"); + void 0===k&&(k=zi);g=fb(g,p*l);if(!this.h&&this.M==l&&this.N==h&&this.D==k&&hb(this.u,g))return!0;this.c&&a.postRenderFunctions.push(zj(this.c,c));this.h=!1;var q=new yj(.5*l/m,g,e.a);Pi(b,g,l,f);if(k){var u=[];Qi(b,g,function(a){u.push(a)},this);u.sort(k);u.forEach(d,this)}else Qi(b,g,d,this);Aj(q,c);this.M=l;this.N=h;this.D=k;this.u=g;this.c=q;return!0};function Xj(){this.f=0;this.c={};this.a=this.b=null}Xj.prototype.clear=function(){this.f=0;this.c={};this.a=this.b=null};function Uj(a,b){return a.c.hasOwnProperty(b)}function Yj(a,b){for(var c=a.b;c;)b.call(void 0,c.Na,c.Ia,a),c=c.ta}Xj.prototype.get=function(a){a=this.c[a];L(void 0!==a,15);if(a===this.a)return a.Na;a===this.b?(this.b=this.b.ta,this.b.Ua=null):(a.ta.Ua=a.Ua,a.Ua.ta=a.ta);a.ta=null;a.Ua=this.a;this.a=this.a.ta=a;return a.Na}; + Xj.prototype.pop=function(){var a=this.b;delete this.c[a.Ia];a.ta&&(a.ta.Ua=null);this.b=a.ta;this.b||(this.a=null);--this.f;return a.Na};function Zj(a,b,c){a.get(b);a.c[b].Na=c}Xj.prototype.set=function(a,b){L(!(a in this.c),16);var c={Ia:a,ta:null,Ua:this.a,Na:b};this.a?this.a.ta=c:this.b=c;this.a=c;this.c[a]=c;++this.f};function ak(a,b){Nf.call(this,0,b);this.b=document.createElement("CANVAS");this.b.style.width="100%";this.b.style.height="100%";this.b.className="ol-unselectable";a.insertBefore(this.b,a.childNodes[0]||null);this.s=this.v=0;this.u=Md();this.i=!0;this.f=ie(this.b,{antialias:!0,depth:!1,failIfMajorPerformanceCaveat:!0,preserveDrawingBuffer:!1,stencil:!0});this.C=new jj(this.b,this.f);R(this.b,"webglcontextlost",this.ge,this);R(this.b,"webglcontextrestored",this.he,this);this.a=new Xj;this.K=null;this.l= + new Uf(function(a){var b=a[1];a=a[2];var e=b[0]-this.K[0],b=b[1]-this.K[1];return 65536*Math.log(a)+Math.sqrt(e*e+b*b)/a}.bind(this),function(a){return a[0].getKey()});this.B=function(){if(0!==this.l.b.length){Yf(this.l);var a=Vf(this.l);Vj(this,a[0],a[3],a[4])}return!1}.bind(this);this.h=0;bk(this)}B(ak,Nf); + function Vj(a,b,c,d){var e=a.f,f=b.getKey();if(Uj(a.a,f))a=a.a.get(f),e.bindTexture(3553,a.Da),9729!=a.yc&&(e.texParameteri(3553,10240,9729),a.yc=9729),9729!=a.zc&&(e.texParameteri(3553,10241,9729),a.zc=9729);else{var g=e.createTexture();e.bindTexture(3553,g);if(0<d){var h=a.u.canvas,k=a.u;a.v!==c[0]||a.s!==c[1]?(h.width=c[0],h.height=c[1],a.v=c[0],a.s=c[1]):k.clearRect(0,0,c[0],c[1]);k.drawImage(b.Z(),d,d,c[0],c[1],0,0,c[0],c[1]);e.texImage2D(3553,0,6408,6408,5121,h)}else e.texImage2D(3553,0,6408, + 6408,5121,b.Z());e.texParameteri(3553,10240,9729);e.texParameteri(3553,10241,9729);e.texParameteri(3553,10242,33071);e.texParameteri(3553,10243,33071);a.a.set(f,{Da:g,yc:9729,zc:9729})}}n=ak.prototype;n.Mb=function(a){return a instanceof W?new Tj(this,a):a instanceof Y?new Wj(this,a):null};function ck(a,b,c){var d=a.g;if(Ha(d,b)){a=a.C;var e=c.viewState;U(d,new uf(b,new Fj(a,e.center,e.resolution,e.rotation,c.size,c.extent,c.pixelRatio),c,null,a))}} + n.R=function(){var a=this.f;a.isContextLost()||Yj(this.a,function(b){b&&a.deleteTexture(b.Da)});Da(this.C);Nf.prototype.R.call(this)};n.ld=function(a,b){for(var c=this.f,d;1024<this.a.f-this.h;){if(d=this.a.b.Na)c.deleteTexture(d.Da);else if(+this.a.b.Ia==b.index)break;else--this.h;this.a.pop()}};n.getContext=function(){return this.C};n.$=function(){return"webgl"};n.ge=function(a){a.preventDefault();this.a.clear();this.h=0;a=this.c;for(var b in a)a[b].v()};n.he=function(){bk(this);this.g.render()}; + function bk(a){a=a.f;a.activeTexture(33984);a.blendFuncSeparate(770,771,1,771);a.disable(2884);a.disable(2929);a.disable(3089);a.disable(2960)} + n.vb=function(a){var b=this.getContext(),c=this.f;if(c.isContextLost())return!1;if(!a)return this.i&&(this.b.style.display="none",this.i=!1),!1;this.K=a.focus;this.a.set((-a.index).toString(),null);++this.h;ck(this,"precompose",a);var d=[],e=a.layerStatesArray;Sa(e);var f=a.viewState.resolution,g,h,k,l;g=0;for(h=e.length;g<h;++g)l=e[g],yf(l,f)&&"ready"==l.ac&&(k=Qf(this,l.layer),k.Kc(a,l,b)&&d.push(l));e=a.size[0]*a.pixelRatio;f=a.size[1]*a.pixelRatio;if(this.b.width!=e||this.b.height!=f)this.b.width= + e,this.b.height=f;c.bindFramebuffer(36160,null);c.clearColor(0,0,0,0);c.clear(16384);c.enable(3042);c.viewport(0,0,this.b.width,this.b.height);g=0;for(h=d.length;g<h;++g)l=d[g],k=Qf(this,l.layer),k.Jc(a,l,b);this.i||(this.b.style.display="",this.i=!0);Of(a);1024<this.a.f-this.h&&a.postRenderFunctions.push(this.ld.bind(this));0!==this.l.b.length&&(a.postRenderFunctions.push(this.B),a.animate=!0);ck(this,"postcompose",a);Rf(this,a);a.postRenderFunctions.push(Pf)}; + n.fa=function(a,b,c,d,e,f){var g;if(this.f.isContextLost())return!1;var h=b.viewState,k=b.layerStatesArray,l;for(l=k.length-1;0<=l;--l){g=k[l];var m=g.layer;if(yf(g,h.resolution)&&e.call(f,m)&&(g=Qf(this,m).fa(a,b,c,d)))return g}};n.Fc=function(a,b,c,d){var e=!1;if(this.f.isContextLost())return!1;var f=b.viewState,g=b.layerStatesArray,h;for(h=g.length-1;0<=h;--h){var k=g[h],l=k.layer;if(yf(k,f.resolution)&&c.call(d,l)&&(e=Qf(this,l).Ec(a,b)))return!0}return e};var dk=["canvas","webgl","dom"]; + function Z(a){V.call(this);var b=ek(a);this.kb=void 0!==a.loadTilesWhileAnimating?a.loadTilesWhileAnimating:!1;this.Ab=void 0!==a.loadTilesWhileInteracting?a.loadTilesWhileInteracting:!1;this.Cb=void 0!==a.pixelRatio?a.pixelRatio:oe;this.Bb=b.logos;this.aa=function(){this.g=void 0;this.ve.call(this,Date.now())}.bind(this);this.Fa=Cf();this.zb=Cf();this.Ga=0;this.c=null;this.va=db();this.u=this.P=null;this.a=document.createElement("DIV");this.a.className="ol-viewport"+(re?" ol-touch":"");this.a.style.position= + "relative";this.a.style.overflow="hidden";this.a.style.width="100%";this.a.style.height="100%";this.a.style.msTouchAction="none";this.a.style.touchAction="none";this.s=document.createElement("DIV");this.s.className="ol-overlaycontainer";this.a.appendChild(this.s);this.j=document.createElement("DIV");this.j.className="ol-overlaycontainer-stopevent";a=["click","dblclick","mousedown","touchstart","mspointerdown",of,"mousewheel","wheel"];for(var c=0,d=a.length;c<d;++c)R(this.j,a[c],Ea);this.a.appendChild(this.j); + this.ma=new ff(this);for(var e in rf)R(this.ma,rf[e],this.wc,this);this.ba=b.keyboardEventTarget;this.i=null;R(this.a,"wheel",this.Sa,this);R(this.a,"mousewheel",this.Sa,this);this.v=b.controls;this.h=b.interactions;this.B=b.overlays;this.Sc={};this.N=new b.xe(this.a,this);this.W=null;this.D=[];this.na=[];this.wa=new Zf(this.qd.bind(this),this.Jd.bind(this));this.Eb={};R(this,La("layergroup"),this.vd,this);R(this,La("view"),this.Kd,this);R(this,La("size"),this.Gd,this);R(this,La("target"),this.Id, + this);this.l(b.values);ed(this.v,function(a){a.setMap(this)},this);R(this.v,hd,function(a){a.element.setMap(this)},this);R(this.v,id,function(a){a.element.setMap(null)},this);ed(this.h,function(a){a.setMap(this)},this);R(this.h,hd,function(a){a.element.setMap(this)},this);R(this.h,id,function(a){a.element.setMap(null)},this);ed(this.B,this.ic,this);R(this.B,hd,function(a){this.ic(a.element)},this);R(this.B,id,function(a){var b=a.element.Pa();void 0!==b&&delete this.Sc[b.toString()];a.element.setMap(null)}, + this)}B(Z,V);n=Z.prototype;n.cd=function(a){this.v.push(a)};n.dd=function(a){this.h.push(a)};n.ed=function(a){fk(this).get("layers").push(a)};n.fd=function(a){this.B.push(a)};n.ic=function(a){var b=a.Pa();void 0!==b&&(this.Sc[b.toString()]=a);a.setMap(this)};n.oa=function(a){this.render();Array.prototype.push.apply(this.D,arguments)}; + n.R=function(){Da(this.ma);Da(this.N);ya(this.a,"wheel",this.Sa,this);ya(this.a,"mousewheel",this.Sa,this);void 0!==this.f&&(K.removeEventListener("resize",this.f,!1),this.f=void 0);this.g&&(K.cancelAnimationFrame(this.g),this.g=void 0);this.set("target",null);V.prototype.R.call(this)};n.od=function(a,b,c,d,e){if(this.c)return a=this.Ba(a),this.N.fa(a,this.c,b,void 0!==c?c:null,void 0!==d?d:yb,void 0!==e?e:null)}; + n.Md=function(a,b,c){if(!this.c)return!1;a=this.Ba(a);return this.N.Fc(a,this.c,void 0!==b?b:yb,void 0!==c?c:null)};n.uc=function(a){var b=this.a.getBoundingClientRect();a=a.changedTouches?a.changedTouches[0]:a;return[a.clientX-b.left,a.clientY-b.top]};n.Wb=function(){return this.get("target")};n.Ra=function(){var a=this.Wb();return void 0!==a?"string"===typeof a?document.getElementById(a):a:null};n.Ba=function(a){var b=this.c;return b?Hf(b.pixelToCoordinateTransform,a.slice()):null}; + function fk(a){return a.get("layergroup")}function ug(a,b){var c=a.c;return c?Hf(c.coordinateToPixelTransform,b.slice(0,2)):null}n.Ta=function(){return this.get("size")};n.U=function(){return this.get("view")};n.qd=function(a,b,c,d){var e=this.c;if(!(e&&b in e.wantedTiles&&e.wantedTiles[b][a.getKey()]))return Infinity;a=c[0]-e.focus[0];c=c[1]-e.focus[1];return 65536*Math.log(d)+Math.sqrt(a*a+c*c)/d};n.Sa=function(a,b){var c=new df(b||a.type,this,a);this.wc(c)}; + n.wc=function(a){if(this.c){this.W=a.coordinate;a.frameState=this.c;var b=this.h.a,c;if(!1!==U(this,a))for(c=b.length-1;0<=c;c--){var d=b[c];if(d.get("active")&&!d.handleEvent(a))break}}}; + n.Fd=function(){var a=this.c,b=this.wa;if(0!==b.b.length){var c=16,d=c;if(a){var e=a.viewHints;e[0]&&(c=this.kb?8:0,d=2);e[1]&&(c=this.Ab?8:0,d=2)}if(b.l<c){Yf(b);for(var e=0,f,g;b.l<c&&e<d&&0<b.b.length;)f=Vf(b)[0],g=f.getKey(),0!==f.T()||g in b.h||(b.h[g]=!0,++b.l,++e,f.load())}}b=this.na;c=0;for(d=b.length;c<d;++c)b[c](this,a);b.length=0};n.Gd=function(){this.render()}; + n.Id=function(){var a;this.Wb()&&(a=this.Ra());if(this.i){for(var b=0,c=this.i.length;b<c;++b)M(this.i[b]);this.i=null}a?(a.appendChild(this.a),a=this.ba?this.ba:a,this.i=[R(a,"keydown",this.Sa,this),R(a,"keypress",this.Sa,this)],this.f||(this.f=this.yb.bind(this),K.addEventListener("resize",this.f,!1))):(Sd(this.a),void 0!==this.f&&(K.removeEventListener("resize",this.f,!1),this.f=void 0));this.yb()};n.Jd=function(){this.render()};n.Ld=function(){this.render()}; + n.Kd=function(){this.P&&(M(this.P),this.P=null);var a=this.U();a&&(this.P=R(a,"propertychange",this.Ld,this));this.render()};n.vd=function(){this.u&&(this.u.forEach(M),this.u=null);var a=fk(this);a&&(this.u=[R(a,"propertychange",this.render,this),R(a,"change",this.render,this)]);this.render()};n.we=function(){this.g&&K.cancelAnimationFrame(this.g);this.aa()};n.render=function(){void 0===this.g&&(this.g=K.requestAnimationFrame(this.aa))};n.se=function(a){return this.h.remove(a)};n.te=function(a){return fk(this).get("layers").remove(a)}; + n.ve=function(a){var b,c,d,e=this.Ta(),f=this.U(),g=db(),h=null;if(b=void 0!==e&&0<e[0]&&0<e[1]&&f)b=!!f.qa()&&void 0!==f.O();if(b){d=this.c?this.c.viewHints:void 0;void 0!==d?(d[0]=f.c[0],d[1]=f.c[1],h=d):h=f.c.slice();var k=fk(this).Pb(),l={};b=0;for(c=k.length;b<c;++b)l[J(k[b].layer)]=k[b];d=f.T();h={animate:!1,attributions:{},coordinateToPixelTransform:this.Fa,extent:g,focus:this.W?this.W:d.center,index:this.Ga++,layerStates:l,layerStatesArray:k,logos:pa({},this.Bb),pixelRatio:this.Cb,pixelToCoordinateTransform:this.zb, + postRenderFunctions:[],size:e,skippedFeatureUids:this.Eb,tileQueue:this.wa,time:a,usedTiles:{},viewState:d,viewHints:h,wantedTiles:{}}}if(h){a=this.D;b=e=0;for(c=a.length;b<c;++b)f=a[b],f(this,h)&&(a[e++]=f);a.length=e;h.extent=ub(d.center,d.resolution,d.rotation,h.size,g)}this.c=h;this.N.vb(h);h&&(h.animate&&this.render(),Array.prototype.push.apply(this.na,h.postRenderFunctions),0!==this.D.length||h.viewHints[0]||h.viewHints[1]||lb(h.extent,this.va)||(U(this,new Td("moveend",this,h)),gb(h.extent, + this.va)));U(this,new Td("postrender",this,h));d=g=this.Fd;this&&(d=ea(g,this));"function"!=ba()||aa.Window&&aa.Window.prototype&&!xd("Edge")&&aa.Window.prototype.setImmediate==aa.setImmediate?(fe||(fe=ge()),fe(d)):aa.setImmediate(d)}; + n.yb=function(){var a=this.Ra();if(a){var b=K.getComputedStyle(a);this.set("size",[a.offsetWidth-parseFloat(b.borderLeftWidth)-parseFloat(b.paddingLeft)-parseFloat(b.paddingRight)-parseFloat(b.borderRightWidth),a.offsetHeight-parseFloat(b.borderTopWidth)-parseFloat(b.paddingTop)-parseFloat(b.paddingBottom)-parseFloat(b.borderBottomWidth)])}else this.set("size",void 0)}; + function ek(a){var b=null;void 0!==a.keyboardEventTarget&&(b="string"===typeof a.keyboardEventTarget?document.getElementById(a.keyboardEventTarget):a.keyboardEventTarget);var c={},d={};if(void 0===a.logo||"boolean"===typeof a.logo&&a.logo)d["data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAHGAAABxgEXwfpGAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAhNQTFRF////AP//AICAgP//AFVVQECA////K1VVSbbbYL/fJ05idsTYJFtbbcjbJllmZszWWMTOIFhoHlNiZszTa9DdUcHNHlNlV8XRIVdiasrUHlZjIVZjaMnVH1RlIFRkH1RkH1ZlasvYasvXVsPQH1VkacnVa8vWIVZjIFRjVMPQa8rXIVVkXsXRsNveIFVkIFZlIVVj3eDeh6GmbMvXH1ZkIFRka8rWbMvXIFVkIFVjIFVkbMvWH1VjbMvWIFVlbcvWIFVla8vVIFVkbMvWbMvVH1VkbMvWIFVlbcvWIFVkbcvVbMvWjNPbIFVkU8LPwMzNIFVkbczWIFVkbsvWbMvXIFVkRnB8bcvW2+TkW8XRIFVkIlZlJVloJlpoKlxrLl9tMmJwOWd0Omh1RXF8TneCT3iDUHiDU8LPVMLPVcLPVcPQVsPPVsPQV8PQWMTQWsTQW8TQXMXSXsXRX4SNX8bSYMfTYcfTYsfTY8jUZcfSZsnUaIqTacrVasrVa8jTa8rWbI2VbMvWbcvWdJObdcvUdszUd8vVeJaee87Yfc3WgJyjhqGnitDYjaarldPZnrK2oNbborW5o9bbo9fbpLa6q9ndrL3ArtndscDDutzfu8fJwN7gwt7gxc/QyuHhy+HizeHi0NfX0+Pj19zb1+Tj2uXk29/e3uLg3+Lh3+bl4uXj4ufl4+fl5Ofl5ufl5ujm5+jmySDnBAAAAFp0Uk5TAAECAgMEBAYHCA0NDg4UGRogIiMmKSssLzU7PkJJT1JTVFliY2hrdHZ3foSFhYeJjY2QkpugqbG1tre5w8zQ09XY3uXn6+zx8vT09vf4+Pj5+fr6/P39/f3+gz7SsAAAAVVJREFUOMtjYKA7EBDnwCPLrObS1BRiLoJLnte6CQy8FLHLCzs2QUG4FjZ5GbcmBDDjxJBXDWxCBrb8aM4zbkIDzpLYnAcE9VXlJSWlZRU13koIeW57mGx5XjoMZEUqwxWYQaQbSzLSkYGfKFSe0QMsX5WbjgY0YS4MBplemI4BdGBW+DQ11eZiymfqQuXZIjqwyadPNoSZ4L+0FVM6e+oGI6g8a9iKNT3o8kVzNkzRg5lgl7p4wyRUL9Yt2jAxVh6mQCogae6GmflI8p0r13VFWTHBQ0rWPW7ahgWVcPm+9cuLoyy4kCJDzCm6d8PSFoh0zvQNC5OjDJhQopPPJqph1doJBUD5tnkbZiUEqaCnB3bTqLTFG1bPn71kw4b+GFdpLElKIzRxxgYgWNYc5SCENVHKeUaltHdXx0dZ8uBI1hJ2UUDgq82CM2MwKeibqAvSO7MCABq0wXEPiqWEAAAAAElFTkSuQmCC"]= + "http://openlayers.org/";else{var e=a.logo;"string"===typeof e?d[e]="":e instanceof HTMLElement?d[J(e).toString()]=e:e&&(L("string"==typeof e.href,44),L("string"==typeof e.src,45),d[e.src]=e.href)}e=a.layers instanceof Xg?a.layers:new Xg({layers:a.layers});c.layergroup=e;c.target=a.target;c.view=void 0!==a.view?a.view:new uc;var e=Nf,f;void 0!==a.renderer?Array.isArray(a.renderer)?f=a.renderer:"string"===typeof a.renderer?f=[a.renderer]:L(!1,46):f=dk;var g,h;g=0;for(h=f.length;g<h;++g){var k=f[g]; + if("canvas"==k){if(qe){e=Ri;break}}else if("dom"==k){e=Yi;break}else if("webgl"==k&&je){e=ak;break}}void 0!==a.controls?Array.isArray(a.controls)?f=new cd(a.controls.slice()):(L(a.controls instanceof cd,47),f=a.controls):f=ee();if(void 0!==a.interactions)Array.isArray(a.interactions)?g=new cd(a.interactions.slice()):(L(a.interactions instanceof cd,48),g=a.interactions);else{g={};h=new cd;k=new $f;(void 0!==g.altShiftDragRotate?g.altShiftDragRotate:1)&&h.push(new vg);(void 0!==g.doubleClickZoom?g.doubleClickZoom: + 1)&&h.push(new fg({delta:g.zoomDelta,duration:g.zoomDuration}));(void 0!==g.dragPan?g.dragPan:1)&&h.push(new qg({kinetic:k}));(void 0!==g.pinchRotate?g.pinchRotate:1)&&h.push(new Pg);(void 0!==g.pinchZoom?g.pinchZoom:1)&&h.push(new Tg({duration:g.zoomDuration}));if(void 0!==g.keyboard?g.keyboard:1)h.push(new Jg),h.push(new Lg({delta:g.zoomDelta,duration:g.zoomDuration}));(void 0!==g.mouseWheelZoom?g.mouseWheelZoom:1)&&h.push(new Ng({duration:g.zoomDuration}));(void 0!==g.shiftDragZoom?g.shiftDragZoom: + 1)&&h.push(new Ig({duration:g.zoomDuration}));g=h}void 0!==a.overlays?Array.isArray(a.overlays)?a=new cd(a.overlays.slice()):(L(a.overlays instanceof cd,49),a=a.overlays):a=new cd;return{controls:f,interactions:g,keyboardEventTarget:b,logos:d,overlays:a,xe:e,values:c}}Ib(bh);Ib(ih);ih.forEach(function(a){bh.forEach(function(b){Jb(a,b,ch);Jb(b,a,dh)})});function gk(a){V.call(this);this.j=a.id;this.i=void 0!==a.insertFirst?a.insertFirst:!0;this.s=void 0!==a.stopEvent?a.stopEvent:!0;this.c=document.createElement("DIV");this.c.className="ol-overlay-container";this.c.style.position="absolute";this.autoPan=void 0!==a.autoPan?a.autoPan:!1;this.g=void 0!==a.autoPanAnimation?a.autoPanAnimation:{};this.h=void 0!==a.autoPanMargin?a.autoPanMargin:20;this.a={lb:"",sb:"",wb:"",xb:"",visible:!0};this.f=null;R(this,La("element"),this.td,this);R(this,La("map"), + this.Ad,this);R(this,La("offset"),this.Bd,this);R(this,La("position"),this.Dd,this);R(this,La("positioning"),this.Ed,this);void 0!==a.element&&this.set("element",a.element);this.set("offset",void 0!==a.offset?a.offset:[0,0]);this.set("positioning",void 0!==a.positioning?a.positioning:"top-left");void 0!==a.position&&this.Ac(a.position)}B(gk,V);n=gk.prototype;n.Pa=function(){return this.j};n.td=function(){for(var a=this.c;a.lastChild;)a.removeChild(a.lastChild);(a=this.get("element"))&&this.c.appendChild(a)}; + n.Ad=function(){this.f&&(Sd(this.c),M(this.f),this.f=null);var a=this.get("map");a&&(this.f=R(a,"postrender",this.render,this),hk(this),a=this.s?a.j:a.s,this.i?a.insertBefore(this.c,a.childNodes[0]||null):a.appendChild(this.c))};n.render=function(){hk(this)};n.Bd=function(){hk(this)}; + n.Dd=function(){hk(this);if(void 0!==this.get("position")&&this.autoPan){var a=this.get("map");if(void 0!==a&&a.Ra()){var b=ik(a.Ra(),a.Ta()),c=this.get("element"),d=c.offsetWidth,e=c.currentStyle||K.getComputedStyle(c),d=d+(parseInt(e.marginLeft,10)+parseInt(e.marginRight,10)),e=c.offsetHeight,f=c.currentStyle||K.getComputedStyle(c),e=e+(parseInt(f.marginTop,10)+parseInt(f.marginBottom,10)),g=ik(c,[d,e]),c=this.h;hb(b,g)||(d=g[0]-b[0],e=b[2]-g[2],f=g[1]-b[1],g=b[3]-g[3],b=[0,0],0>d?b[0]=d-c:0>e&& + (b[0]=Math.abs(e)+c),0>f?b[1]=f-c:0>g&&(b[1]=Math.abs(g)+c),0===b[0]&&0===b[1])||(c=a.U().qa(),d=ug(a,c),b=[d[0]+b[0],d[1]+b[1]],this.g&&(this.g.source=c,a.oa(Dc(this.g))),a.U().xa(a.Ba(b)))}}};n.Ed=function(){hk(this)};n.setMap=function(a){this.set("map",a)};n.Ac=function(a){this.set("position",a)};function ik(a,b){var c=a.getBoundingClientRect(),d=c.left+K.pageXOffset,c=c.top+K.pageYOffset;return[d,c,d+b[0],c+b[1]]} + function jk(a,b){a.a.visible!==b&&(a.c.style.display=b?"":"none",a.a.visible=b)} + function hk(a){var b=a.get("map"),c=a.get("position");if(void 0!==b&&b.c&&void 0!==c){var c=ug(b,c),d=b.Ta(),b=a.c.style,e=a.get("offset"),f=a.get("positioning"),g=e[0],e=e[1];if("bottom-right"==f||"center-right"==f||"top-right"==f)""!==a.a.sb&&(a.a.sb=b.left=""),g=Math.round(d[0]-c[0]-g)+"px",a.a.wb!=g&&(a.a.wb=b.right=g);else{""!==a.a.wb&&(a.a.wb=b.right="");if("bottom-center"==f||"center-center"==f||"top-center"==f)g-=a.c.offsetWidth/2;g=Math.round(c[0]+g)+"px";a.a.sb!=g&&(a.a.sb=b.left=g)}if("bottom-left"== + f||"bottom-center"==f||"bottom-right"==f)""!==a.a.xb&&(a.a.xb=b.top=""),c=Math.round(d[1]-c[1]-e)+"px",a.a.lb!=c&&(a.a.lb=b.bottom=c);else{""!==a.a.lb&&(a.a.lb=b.bottom="");if("center-left"==f||"center-center"==f||"center-right"==f)e-=a.c.offsetHeight/2;c=Math.round(c[1]+e)+"px";a.a.xb!=c&&(a.a.xb=b.top=c)}jk(a,!0)}else jk(a,!1)};function kk(a){V.call(this);this.g=void 0;this.a="geometry";this.h=null;this.f=void 0;this.c=null;R(this,La(this.a),this.qb,this);void 0!==a&&(a instanceof Wb||!a?lk(this,a):this.l(a))}B(kk,V);n=kk.prototype;n.clone=function(){var a=new kk(this.Ea());mk(a,this.a);var b=this.S();b&&lk(a,b.clone());if(b=this.h)a.h=b,a.f=b?nk(b):void 0,a.w();return a};n.S=function(){return this.get(this.a)};n.Pa=function(){return this.g};n.ud=function(){this.w()}; + n.qb=function(){this.c&&(M(this.c),this.c=null);var a=this.S();a&&(this.c=R(a,"change",this.ud,this));this.w()};function lk(a,b){a.set(a.a,b)}function mk(a,b){ya(a,La(a.a),a.qb,a);a.a=b;R(a,La(a.a),a.qb,a);a.qb()}function nk(a){if("function"!==typeof a){var b;Array.isArray(a)?b=a:(L(a instanceof yh,41),b=[a]);a=function(){return b}}return a};function ok(a,b,c){return function(d,e,f){var g=new XMLHttpRequest;g.open("GET","function"===typeof a?a(d,e,f):a,!0);"arraybuffer"==b.$()&&(g.responseType="arraybuffer");g.onload=function(){if(!g.status||200<=g.status&&300>g.status){var a=b.$(),d;"json"==a||"text"==a?d=g.responseText:"xml"==a?(d=g.responseXML,d||(a=g.responseText,d=(new DOMParser).parseFromString(a,"application/xml"))):"arraybuffer"==a&&(d=g.response);d&&c.call(this,b.a(d,{featureProjection:f}),b.c(pk(d)))}}.bind(this);g.send()}} + function qk(a,b){return ok(a,b,function(a){this.Gb(a)})};function rk(){this.defaultDataProjection=null}function sk(a,b,c){var d;c&&(d={dataProjection:c.dataProjection?c.dataProjection:a.c(pk(b)),featureProjection:c.featureProjection});var e;d&&(e={featureProjection:d.featureProjection,dataProjection:d.dataProjection?d.dataProjection:a.defaultDataProjection,rightHanded:d.rightHanded},d.decimals&&(e.decimals=d.decimals));return e} + function tk(a,b){var c=b?Hb(b.featureProjection):null,d=b?Hb(b.dataProjection):null;if(c&&d&&!Tb(c,d))if(a instanceof Wb)c=a.transform(d,c);else{d=Ub(d,c);c=[a[0],a[1],a[0],a[3],a[2],a[1],a[2],a[3]];d(c,c,2);var e=[c[0],c[2],c[4],c[6]],f=[c[1],c[3],c[5],c[7]],c=Math.min.apply(null,e),d=Math.min.apply(null,f),e=Math.max.apply(null,e),f=Math.max.apply(null,f),c=ib(c,d,e,f,void 0)}else c=a;return c};function uk(){this.defaultDataProjection=null}B(uk,rk);function pk(a){return"string"===typeof a?(a=JSON.parse(a))?a:null:null!==a?a:null}uk.prototype.$=function(){return"json"};uk.prototype.g=function(a,b){return this.b(pk(a),sk(this,a,b))};uk.prototype.a=function(a,b){return this.h(pk(a),sk(this,a,b))};function vk(a,b,c,d,e){var f=NaN,g=NaN,h=(c-b)/d;if(0!==h)if(1==h)f=a[b],g=a[b+1];else if(2==h)f=.5*a[b]+.5*a[b+d],g=.5*a[b+1]+.5*a[b+d+1];else{var g=a[b],h=a[b+1],k=0,f=[0],l;for(l=b+d;l<c;l+=d){var m=a[l],p=a[l+1],k=k+Math.sqrt((m-g)*(m-g)+(p-h)*(p-h));f.push(k);g=m;h=p}c=.5*k;k=0;l=f.length;for(m=!1;k<l;)g=k+(l-k>>1),h=+Ma(f[g],c),0>h?k=g+1:(l=g,m=!h);g=m?k:~k;0>g?(c=(c-f[-g-2])/(f[-g-1]-f[-g-2]),b+=(-g-2)*d,f=a[b],f+=c*(a[b+d]-f),g=a[b+1],g+=c*(a[b+d+1]-g)):(f=a[b+g*d],g=a[b+g*d+1])}return e? + (e[0]=f,e[1]=g,e):[f,g]};function wk(a,b){Yb.call(this);this.a=null;this.h=-1;this.ea(a,b)}B(wk,Yb);n=wk.prototype;n.clone=function(){var a=new wk(null);$b(a,this.c,this.o.slice());a.w();return a};n.za=function(){return ec(this.o,0,this.o.length,this.A)};function Nh(a){if(a.h!=a.b){var b;b=vk(a.o,0,a.o.length,a.A,a.a);a.a=b;a.h=a.b}return a.a}n.Qa=function(a){var b=[];b.length=gc(this.o,0,this.o.length,this.A,a,b,0);a=new wk(null);$b(a,"XY",b);a.w();return a};n.$=function(){return"LineString"}; + n.ea=function(a,b){a?(ac(this,b,a,1),this.o||(this.o=[]),this.o.length=cc(this.o,0,a,this.A)):$b(this,"XY",null);this.w()};function xk(a,b){Yb.call(this);this.ua=[];this.ea(a,b)}B(xk,Yb);n=xk.prototype;n.clone=function(){var a=new xk(null),b=this.ua.slice();$b(a,this.c,this.o.slice());a.ua=b;a.w();return a};n.za=function(){return fc(this.o,0,this.ua,this.A)};function Oh(a){var b=[],c=a.o,d=0,e=a.ua;a=a.A;var f,g;f=0;for(g=e.length;f<g;++f){var h=e[f],d=vk(c,d,h,a);Pa(b,d);d=h}return b} + n.Qa=function(a){var b=[],c=[],d=this.o,e=this.ua,f=this.A,g=0,h=0,k,l;k=0;for(l=e.length;k<l;++k){var m=e[k],h=gc(d,g,m,f,a,b,h);c.push(h);g=m}b.length=h;a=new xk(null);$b(a,"XY",b);a.ua=c;a.w();return a};n.$=function(){return"MultiLineString"};n.ea=function(a,b){if(a){ac(this,b,a,2);this.o||(this.o=[]);var c=dc(this.o,0,a,this.A,this.ua);this.o.length=0===c.length?0:c[c.length-1]}else c=this.ua,$b(this,"XY",null),this.ua=c;this.w()};function yk(a,b){Yb.call(this);this.ea(a,b)}B(yk,Yb);yk.prototype.clone=function(){var a=new yk(null);$b(a,this.c,this.o.slice());a.w();return a};yk.prototype.za=function(){return ec(this.o,0,this.o.length,this.A)};yk.prototype.$=function(){return"MultiPoint"};yk.prototype.ea=function(a,b){a?(ac(this,b,a,1),this.o||(this.o=[]),this.o.length=cc(this.o,0,a,this.A)):$b(this,"XY",null);this.w()};function zk(a,b){Yb.call(this);this.a=[];this.v=-1;this.u=null;this.B=-1;this.h=null;this.ea(a,b)}B(zk,Yb);n=zk.prototype;n.clone=function(){for(var a=new zk(null),b=this.a.length,c=Array(b),d=0;d<b;++d)c[d]=this.a[d].slice();$b(a,this.c,this.o.slice());a.a=c;a.w();return a};n.za=function(a){var b;void 0!==a?(b=Ph(this).slice(),pc(b,this.a,this.A,a)):b=this.o;a=b;b=this.a;var c=this.A,d=0,e=[],f=0,g,h;g=0;for(h=b.length;g<h;++g){var k=b[g];e[f++]=fc(a,d,k,c,e[f]);d=k[k.length-1]}e.length=f;return e}; + function Qh(a){if(a.v!=a.b){var b=a.o,c=a.a,d=a.A,e=0,f=[],g,h,k;g=0;for(h=c.length;g<h;++g){var l=c[g];k=b;var m=l[0],p=d,q=jb(void 0);k=nb(q,k,e,m,p);f.push((k[0]+k[2])/2,(k[1]+k[3])/2);e=l[l.length-1]}b=Ph(a);c=a.a;d=a.A;g=0;h=[];l=0;for(k=c.length;l<k;++l)e=c[l],h=lc(b,g,e,d,f,2*l,h),g=e[e.length-1];a.u=h;a.v=a.b}return a.u} + function Ph(a){if(a.B!=a.b){var b=a.o,c;a:{c=a.a;var d,e;d=0;for(e=c.length;d<e;++d)if(!nc(b,c[d],a.A,void 0)){c=!1;break a}c=!0}c?a.h=b:(a.h=b.slice(),a.h.length=pc(a.h,a.a,a.A));a.B=a.b}return a.h}n.Qa=function(a){var b=[],c=[],d=this.o,e=this.a,f=this.A;a=Math.sqrt(a);var g=0,h=0,k,l;k=0;for(l=e.length;k<l;++k){var m=e[k],p=[],h=hc(d,g,m,f,a,b,h,p);c.push(p);g=m[m.length-1]}b.length=h;d=new zk(null);$b(d,"XY",b);d.a=c;d.w();return d};n.$=function(){return"MultiPolygon"}; + n.ea=function(a,b){if(a){ac(this,b,a,3);this.o||(this.o=[]);var c=this.o,d=this.A,e=this.a,f=0,e=e?e:[],g=0,h,k;h=0;for(k=a.length;h<k;++h)f=dc(c,f,a[h],d,e[g]),e[g++]=f,f=f[f.length-1];e.length=g;0===e.length?this.o.length=0:(c=e[e.length-1],this.o.length=0===c.length?0:c[c.length-1])}else c=this.a,$b(this,"XY",null),this.a=c;this.w()};function Ak(a){a=a?a:{};this.defaultDataProjection=null;this.f=a.geometryName}B(Ak,uk);function Bk(a){var b="XY";!0===a.hasZ&&!0===a.hasM?b="XYZM":!0===a.hasZ?b="XYZ":!0===a.hasM&&(b="XYM");return b} + var Ck={Point:function(a){return void 0!==a.m&&void 0!==a.z?new jc([a.x,a.y,a.z,a.m],"XYZM"):void 0!==a.z?new jc([a.x,a.y,a.z],"XYZ"):void 0!==a.m?new jc([a.x,a.y,a.m],"XYM"):new jc([a.x,a.y])},LineString:function(a){return new wk(a.paths[0],Bk(a))},Polygon:function(a){return new qc(a.rings,Bk(a))},MultiPoint:function(a){return new yk(a.points,Bk(a))},MultiLineString:function(a){return new xk(a.paths,Bk(a))},MultiPolygon:function(a){return new zk(a.rings,Bk(a))}}; + Ak.prototype.b=function(a,b){var c;if(c=a.geometry){var d;if("number"===typeof c.x&&"number"===typeof c.y)d="Point";else if(c.points)d="MultiPoint";else if(c.paths)d=1===c.paths.length?"LineString":"MultiLineString";else if(c.rings){var e=c.rings,f=Bk(c),g=[];d=[];var h,k;h=0;for(k=e.length;h<k;++h){var l=Oa(e[h]);mc(l,0,l.length,f.length)?g.push([e[h]]):d.push(e[h])}for(;d.length;){e=d.shift();f=!1;for(h=g.length-1;0<=h;h--)if(hb((new ic(g[h][0])).G(),(new ic(e)).G())){g[h].push(e);f=!0;break}f|| + g.push([e.reverse()])}c=pa({},c);1===g.length?(d="Polygon",c.rings=g[0]):(d="MultiPolygon",c.rings=g)}c=tk((0,Ck[d])(c),b)}else c=null;g=new kk;this.f&&mk(g,this.f);lk(g,c);b&&b.Tb&&a.attributes[b.Tb]&&(g.g=a.attributes[b.Tb],g.w());a.attributes&&g.l(a.attributes);return g};Ak.prototype.h=function(a,b){var c=b?b:{};if(a.features){var d=[],e=a.features,f,g;c.Tb=a.objectIdFieldName;f=0;for(g=e.length;f<g;++f)d.push(this.b(e[f],c));return d}return[this.b(a,c)]}; + Ak.prototype.c=function(a){return a.spatialReference&&a.spatialReference.wkid?Hb("EPSG:"+a.spatialReference.wkid):null};function Dk(a){Wb.call(this);this.a=a?a:null;Ek(this)}B(Dk,Wb);function Fk(a){var b,c;if(a.a)for(b=0,c=a.a.length;b<c;++b)ya(a.a[b],"change",a.w,a)}function Ek(a){var b,c;if(a.a)for(b=0,c=a.a.length;b<c;++b)R(a.a[b],"change",a.w,a)}n=Dk.prototype;n.clone=function(){var a=new Dk(null),b=this.a,c=[],d,e;d=0;for(e=b.length;d<e;++d)c.push(b[d].clone());Fk(a);a.a=c;Ek(a);a.w();return a};n.mb=function(a){jb(a);for(var b=this.a,c=0,d=b.length;c<d;++c)mb(a,b[c].G());return a}; + n.Rb=function(a){this.i!=this.b&&(qa(this.f),this.g=0,this.i=this.b);if(0>a||0!==this.g&&a<this.g)return this;var b=a.toString();if(this.f.hasOwnProperty(b))return this.f[b];var c=[],d=this.a,e=!1,f,g;f=0;for(g=d.length;f<g;++f){var h=d[f],k=h.Rb(a);c.push(k);k!==h&&(e=!0)}if(e)return a=new Dk(null),Fk(a),a.a=c,Ek(a),a.w(),this.f[b]=a;this.g=a;return this};n.$=function(){return"GeometryCollection"};n.rotate=function(a,b){for(var c=this.a,d=0,e=c.length;d<e;++d)c[d].rotate(a,b);this.w()}; + n.scale=function(a,b,c){c||(c=tb(this.G()));for(var d=this.a,e=0,f=d.length;e<f;++e)d[e].scale(a,b,c);this.w()};n.Hb=function(a){var b=this.a,c,d;c=0;for(d=b.length;c<d;++c)b[c].Hb(a);this.w()};n.translate=function(a,b){var c=this.a,d,e;d=0;for(e=c.length;d<e;++d)c[d].translate(a,b);this.w()};n.R=function(){Fk(this);Wb.prototype.R.call(this)};function Gk(a){a=a?a:{};this.defaultDataProjection=null;this.defaultDataProjection=Hb(a.defaultDataProjection?a.defaultDataProjection:"EPSG:4326");this.f=a.geometryName}B(Gk,uk);function Hk(a,b){return a?tk((0,Ik[a.type])(a),b):null} + var Ik={Point:function(a){return new jc(a.coordinates)},LineString:function(a){return new wk(a.coordinates)},Polygon:function(a){return new qc(a.coordinates)},MultiPoint:function(a){return new yk(a.coordinates)},MultiLineString:function(a){return new xk(a.coordinates)},MultiPolygon:function(a){return new zk(a.coordinates)},GeometryCollection:function(a,b){var c=a.geometries.map(function(a){return Hk(a,b)});return new Dk(c)}}; + Gk.prototype.b=function(a,b){var c=Hk(a.geometry,b),d=new kk;this.f&&mk(d,this.f);lk(d,c);void 0!==a.id&&(d.g=a.id,d.w());a.properties&&d.l(a.properties);return d};Gk.prototype.h=function(a,b){var c;if("Feature"==a.type)c=[this.b(a,b)];else if("FeatureCollection"==a.type){c=[];var d=a.features,e,f;e=0;for(f=d.length;e<f;++e)c.push(this.b(d[e],b))}else L(!1,35);return c}; + Gk.prototype.c=function(a){a=a.crs;var b;a?"name"==a.type?b=Hb(a.properties.name):"EPSG"==a.type?b=Hb("EPSG:"+a.properties.code):L(!1,36):b=this.defaultDataProjection;return b};function Jk(a,b,c,d,e,f){Ga.call(this);this.l=null;this.b=a?a:new Image;null!==d&&(this.b.crossOrigin=d);this.f=f?document.createElement("CANVAS"):null;this.h=f;this.g=null;this.c=e;this.a=c;this.s=b;this.i=!1;2==this.c&&Kk(this)}B(Jk,Ga);function Kk(a){var b=Md(1,1);try{b.drawImage(a.b,0,0),b.getImageData(0,0,1,1)}catch(c){a.i=!0}}Jk.prototype.j=function(){this.c=3;this.g.forEach(M);this.g=null;U(this,"change")}; + Jk.prototype.v=function(){this.c=2;this.a&&(this.b.width=this.a[0],this.b.height=this.a[1]);this.a=[this.b.width,this.b.height];this.g.forEach(M);this.g=null;Kk(this);if(!this.i&&null!==this.h){this.f.width=this.b.width;this.f.height=this.b.height;var a=this.f.getContext("2d");a.drawImage(this.b,0,0);for(var b=a.getImageData(0,0,this.b.width,this.b.height),c=b.data,d=this.h[0]/255,e=this.h[1]/255,f=this.h[2]/255,g=0,h=c.length;g<h;g+=4)c[g]*=d,c[g+1]*=e,c[g+2]*=f;a.putImageData(b,0,0)}U(this,"change")}; + Jk.prototype.Z=function(){return this.f?this.f:this.b};Jk.prototype.load=function(){if(0==this.c){this.c=1;this.g=[R(this.b,"error",this.j,this,!0),R(this.b,"load",this.v,this,!0)];try{this.b.src=this.s}catch(a){this.j()}}};function Lk(a){a=a||{};this.g=void 0!==a.anchor?a.anchor:[.5,.5];this.f=null;this.a=void 0!==a.anchorOrigin?a.anchorOrigin:"top-left";this.l=void 0!==a.anchorXUnits?a.anchorXUnits:"fraction";this.i=void 0!==a.anchorYUnits?a.anchorYUnits:"fraction";var b=void 0!==a.crossOrigin?a.crossOrigin:null,c=void 0!==a.img?a.img:null,d=void 0!==a.imgSize?a.imgSize:null,e=a.src;L(!(void 0!==e&&c),4);L(!c||c&&d,5);void 0!==e&&0!==e.length||!c||(e=c.src||J(c).toString());L(void 0!==e&&0<e.length,6);var f=void 0!== + a.src?0:2,g;void 0!==a.color?(g=a.color,g=Array.isArray(g)?g:pd(g)):g=null;var h=Af.get(e,b,g);h||(h=new Jk(c,e,d,b,f,g),Af.set(e,b,g,h));this.b=h;this.u=void 0!==a.offset?a.offset:[0,0];this.c=void 0!==a.offsetOrigin?a.offsetOrigin:"top-left";this.h=null;this.j=void 0!==a.size?a.size:null;oh.call(this,{opacity:void 0!==a.opacity?a.opacity:1,rotation:void 0!==a.rotation?a.rotation:0,scale:void 0!==a.scale?a.scale:1,snapToPixel:void 0!==a.snapToPixel?a.snapToPixel:!0,rotateWithView:void 0!==a.rotateWithView? + a.rotateWithView:!1})}B(Lk,oh);n=Lk.prototype;n.eb=function(){if(this.f)return this.f;var a=this.g,b=this.Ka();if("fraction"==this.l||"fraction"==this.i){if(!b)return null;a=this.g.slice();"fraction"==this.l&&(a[0]*=b[0]);"fraction"==this.i&&(a[1]*=b[1])}if("top-left"!=this.a){if(!b)return null;a===this.g&&(a=this.g.slice());if("top-right"==this.a||"bottom-right"==this.a)a[0]=-a[0]+b[0];if("bottom-left"==this.a||"bottom-right"==this.a)a[1]=-a[1]+b[1]}return this.f=a};n.Z=function(a){return this.b.Z(a)}; + n.Ob=function(){return this.b.a};n.ib=function(){return this.b.c};n.ub=function(){var a=this.b;if(!a.l)if(a.i){var b=a.a[0],c=a.a[1],d=Md(b,c);d.fillRect(0,0,b,c);a.l=d.canvas}else a.l=a.b;return a.l};n.pa=function(){if(this.h)return this.h;var a=this.u;if("top-left"!=this.c){var b=this.Ka(),c=this.b.a;if(!b||!c)return null;a=a.slice();if("top-right"==this.c||"bottom-right"==this.c)a[0]=c[0]-b[0]-a[0];if("bottom-left"==this.c||"bottom-right"==this.c)a[1]=c[1]-b[1]-a[1]}return this.h=a}; + n.Ka=function(){return this.j?this.j:this.b.a};n.Vb=function(a,b){return R(this.b,"change",a,b)};n.load=function(){this.b.load()};n.bc=function(a,b){ya(this.b,"change",a,b)};function Mk(a,b,c){Yb.call(this);Nk(this,a,b?b:0,c)}B(Mk,Yb);Mk.prototype.clone=function(){var a=new Mk(null);$b(a,this.c,this.o.slice());a.w();return a};Mk.prototype.mb=function(a){var b=this.o,c=b[this.A]-b[0];return ib(b[0]-c,b[1]-c,b[0]+c,b[1]+c,a)};Mk.prototype.$=function(){return"Circle"};function Nk(a,b,c,d){if(b){ac(a,d,b,0);a.o||(a.o=[]);d=a.o;b=bc(d,b);d[b++]=d[0]+c;var e;c=1;for(e=a.A;c<e;++c)d[b++]=d[c];d.length=b}else $b(a,"XY",null);a.w()};function Ok(a,b,c,d,e){Sf.call(this,a,b);this.g=c;this.a=new Image;null!==d&&(this.a.crossOrigin=d);this.c={};this.f=null;this.h=e}B(Ok,Sf);n=Ok.prototype;n.R=function(){1==this.state&&Pk(this);this.b&&Da(this.b);this.state=5;Tf(this);Sf.prototype.R.call(this)};n.Z=function(a){if(void 0!==a){var b=J(a);if(b in this.c)return this.c[b];a=sa(this.c)?this.a:this.a.cloneNode(!1);return this.c[b]=a}return this.a};n.getKey=function(){return this.g};n.ce=function(){this.state=3;Pk(this);Tf(this)}; + n.de=function(){this.state=this.a.naturalWidth&&this.a.naturalHeight?2:4;Pk(this);Tf(this)};n.load=function(){if(0==this.state||3==this.state)this.state=1,Tf(this),this.f=[R(this.a,"error",this.ce,this,!0),R(this.a,"load",this.de,this,!0)],this.h(this,this.g)};function Pk(a){a.f.forEach(M);a.f=null};function Qk(){return[[-Infinity,-Infinity,Infinity,Infinity]]};var Rk; + (function(){var a={},b={Aa:a};(function(c){if("object"===typeof a&&"undefined"!==typeof b)b.Aa=c();else{var d;"undefined"!==typeof window?d=window:"undefined"!==typeof global?d=global:"undefined"!==typeof self?d=self:d=this;d.Re=c()}})(function(){return function d(a,b,g){function h(l,p){if(!b[l]){if(!a[l]){var q="function"==typeof require&&require;if(!p&&q)return require(l,!0);if(k)return k(l,!0);q=Error("Cannot find module '"+l+"'");throw q.code="MODULE_NOT_FOUND",q;}q=b[l]={Aa:{}};a[l][0].call(q.Aa,function(b){var d= + a[l][1][b];return h(d?d:b)},q,q.Aa,d,a,b,g)}return b[l].Aa}for(var k="function"==typeof require&&require,l=0;l<g.length;l++)h(g[l]);return h}({1:[function(a,b){function f(a,b){if(!(this instanceof f))return new f(a,b);this.Db=Math.max(4,a||9);this.gc=Math.max(2,Math.ceil(.4*this.Db));b&&this.ad(b);this.clear()}function g(a,b){h(a,0,a.children.length,b,a)}function h(a,b,d,e,g){g||(g=r(null));g.H=Infinity;g.J=Infinity;g.I=-Infinity;g.L=-Infinity;for(var f;b<d;b++)f=a.children[b],k(g,a.ga?e(f):f);return g} + function k(a,b){a.H=Math.min(a.H,b.H);a.J=Math.min(a.J,b.J);a.I=Math.max(a.I,b.I);a.L=Math.max(a.L,b.L)}function l(a,b){return a.H-b.H}function m(a,b){return a.J-b.J}function p(a){return(a.I-a.H)*(a.L-a.J)}function q(a){return a.I-a.H+(a.L-a.J)}function u(a,b){return a.H<=b.H&&a.J<=b.J&&b.I<=a.I&&b.L<=a.L}function w(a,b){return b.H<=a.I&&b.J<=a.L&&b.I>=a.H&&b.L>=a.J}function r(a){return{children:a,height:1,ga:!0,H:Infinity,J:Infinity,I:-Infinity,L:-Infinity}}function x(a,b,d,e,g){for(var f=[b,d], + h;f.length;)d=f.pop(),b=f.pop(),d-b<=e||(h=b+Math.ceil((d-b)/e/2)*e,D(a,h,b,d,g),f.push(b,h,h,d))}b.Aa=f;var D=a("quickselect");f.prototype={all:function(){return this.cc(this.data,[])},search:function(a){var b=this.data,d=[],e=this.la;if(!w(a,b))return d;for(var g=[],f,h,k,l;b;){f=0;for(h=b.children.length;f<h;f++)k=b.children[f],l=b.ga?e(k):k,w(a,l)&&(b.ga?d.push(k):u(a,l)?this.cc(k,d):g.push(k));b=g.pop()}return d},load:function(a){if(!a||!a.length)return this;if(a.length<this.gc){for(var b=0, + d=a.length;b<d;b++)this.Ha(a[b]);return this}a=this.ec(a.slice(),0,a.length-1,0);this.data.children.length?this.data.height===a.height?this.hc(this.data,a):(this.data.height<a.height&&(b=this.data,this.data=a,a=b),this.fc(a,this.data.height-a.height-1,!0)):this.data=a;return this},Ha:function(a){a&&this.fc(a,this.data.height-1);return this},clear:function(){this.data=r([]);return this},remove:function(a,b){if(!a)return this;for(var d=this.data,e=this.la(a),g=[],f=[],h,k,l,m;d||g.length;){d||(d=g.pop(), + k=g[g.length-1],h=f.pop(),m=!0);if(d.ga){a:{l=a;var p=d.children,q=b;if(q){for(var r=0;r<p.length;r++)if(q(l,p[r])){l=r;break a}l=-1}else l=p.indexOf(l)}if(-1!==l){d.children.splice(l,1);g.push(d);this.$c(g);break}}m||d.ga||!u(d,e)?k?(h++,d=k.children[h],m=!1):d=null:(g.push(d),f.push(h),h=0,k=d,d=d.children[0])}return this},la:function(a){return a},Kb:l,Lb:m,toJSON:function(){return this.data},cc:function(a,b){for(var d=[];a;)a.ga?b.push.apply(b,a.children):d.push.apply(d,a.children),a=d.pop();return b}, + ec:function(a,b,d,e){var f=d-b+1,h=this.Db,k;if(f<=h)return k=r(a.slice(b,d+1)),g(k,this.la),k;e||(e=Math.ceil(Math.log(f)/Math.log(h)),h=Math.ceil(f/Math.pow(h,e-1)));k=r([]);k.ga=!1;k.height=e;var f=Math.ceil(f/h),h=f*Math.ceil(Math.sqrt(h)),l,m,p;for(x(a,b,d,h,this.Kb);b<=d;b+=h)for(m=Math.min(b+h-1,d),x(a,b,m,f,this.Lb),l=b;l<=m;l+=f)p=Math.min(l+f-1,m),k.children.push(this.ec(a,l,p,e-1));g(k,this.la);return k},Zc:function(a,b,d,e){for(var f,g,h,k,l,m,q,r;;){e.push(b);if(b.ga||e.length-1===d)break; + q=r=Infinity;f=0;for(g=b.children.length;f<g;f++)h=b.children[f],l=p(h),m=(Math.max(h.I,a.I)-Math.min(h.H,a.H))*(Math.max(h.L,a.L)-Math.min(h.J,a.J))-l,m<r?(r=m,q=l<q?l:q,k=h):m===r&&l<q&&(q=l,k=h);b=k||b.children[0]}return b},fc:function(a,b,d){var e=this.la;d=d?a:e(a);var e=[],f=this.Zc(d,this.data,b,e);f.children.push(a);for(k(f,d);0<=b;)if(e[b].children.length>this.Db)this.bd(e,b),b--;else break;this.Wc(d,e,b)},bd:function(a,b){var d=a[b],e=d.children.length,f=this.gc;this.Xc(d,f,e);e=this.Yc(d, + f,e);e=r(d.children.splice(e,d.children.length-e));e.height=d.height;e.ga=d.ga;g(d,this.la);g(e,this.la);b?a[b-1].children.push(e):this.hc(d,e)},hc:function(a,b){this.data=r([a,b]);this.data.height=a.height+1;this.data.ga=!1;g(this.data,this.la)},Yc:function(a,b,d){var e,f,g,k,l,m,q;l=m=Infinity;for(e=b;e<=d-b;e++)f=h(a,0,e,this.la),g=h(a,e,d,this.la),k=Math.max(0,Math.min(f.I,g.I)-Math.max(f.H,g.H))*Math.max(0,Math.min(f.L,g.L)-Math.max(f.J,g.J)),f=p(f)+p(g),k<l?(l=k,q=e,m=f<m?f:m):k===l&&f<m&&(m= + f,q=e);return q},Xc:function(a,b,d){var e=a.ga?this.Kb:l,f=a.ga?this.Lb:m,g=this.dc(a,b,d,e);b=this.dc(a,b,d,f);g<b&&a.children.sort(e)},dc:function(a,b,d,e){a.children.sort(e);e=this.la;var f=h(a,0,b,e),g=h(a,d-b,d,e),l=q(f)+q(g),m,p;for(m=b;m<d-b;m++)p=a.children[m],k(f,a.ga?e(p):p),l+=q(f);for(m=d-b-1;m>=b;m--)p=a.children[m],k(g,a.ga?e(p):p),l+=q(g);return l},Wc:function(a,b,d){for(;0<=d;d--)k(b[d],a)},$c:function(a){for(var b=a.length-1,d;0<=b;b--)0===a[b].children.length?0<b?(d=a[b-1].children, + d.splice(d.indexOf(a[b]),1)):this.clear():g(a[b],this.la)},ad:function(a){var b=["return a"," - b",";"];this.Kb=new Function("a","b",b.join(a[0]));this.Lb=new Function("a","b",b.join(a[1]));this.la=new Function("a","return {minX: a"+a[0]+", minY: a"+a[1]+", maxX: a"+a[2]+", maxY: a"+a[3]+"};")}}},{quickselect:2}],2:[function(a,b){function f(a,b,d,e,q){d=d||0;e=e||a.length-1;for(q=q||h;e>d;){if(600<e-d){var u=e-d+1,w=b-d+1,r=Math.log(u),x=.5*Math.exp(2*r/3),r=.5*Math.sqrt(r*x*(u-x)/u)*(0>w-u/2?-1: + 1);f(a,b,Math.max(d,Math.floor(b-w*x/u+r)),Math.min(e,Math.floor(b+(u-w)*x/u+r)),q)}u=a[b];w=d;x=e;g(a,d,b);for(0<q(a[e],u)&&g(a,d,e);w<x;){g(a,w,x);w++;for(x--;0>q(a[w],u);)w++;for(;0<q(a[x],u);)x--}0===q(a[d],u)?g(a,d,x):(x++,g(a,x,e));x<=b&&(d=x+1);b<=x&&(e=x-1)}}function g(a,b,d){var e=a[b];a[b]=a[d];a[d]=e}function h(a,b){return a<b?-1:a>b?1:0}b.Aa=f},{}]},{},[1])(1)});Rk=b.Aa})();function Sk(a){this.b=Rk(a);this.a={}}n=Sk.prototype;n.Ha=function(a,b){var c={H:a[0],J:a[1],I:a[2],L:a[3],value:b};this.b.Ha(c);this.a[J(b)]=c};n.load=function(a,b){for(var c=Array(b.length),d=0,e=b.length;d<e;d++){var f=a[d],g=b[d],f={H:f[0],J:f[1],I:f[2],L:f[3],value:g};c[d]=f;this.a[J(g)]=f}this.b.load(c)};n.remove=function(a){a=J(a);var b=this.a[a];delete this.a[a];return null!==this.b.remove(b)};function Tk(a){return a.b.all().map(function(a){return a.value})} + function Uk(a,b){return a.b.search({H:b[0],J:b[1],I:b[2],L:b[3]}).map(function(a){return a.value})}function Vk(a,b,c,d){return Wk(Uk(a,b),c,d)}function Wk(a,b,c){for(var d,e=0,f=a.length;e<f&&!(d=b.call(c,a[e]));e++);return d}n.clear=function(){this.b.clear();this.a={}};n.G=function(){var a=this.b.data;return[a.H,a.J,a.I,a.L]};function Xk(a){a=a||{};vf.call(this,{attributions:a.attributions,logo:a.logo,projection:void 0,state:"ready",wrapX:void 0!==a.wrapX?a.wrapX:!0});this.j=I;this.s=a.format;this.u=void 0==a.overlaps?!0:a.overlaps;this.B=a.url;void 0!==a.loader?this.j=a.loader:void 0!==this.B&&(L(this.s,7),this.j=qk(this.B,this.s));this.W=void 0!==a.strategy?a.strategy:Qk;var b=void 0!==a.useSpatialIndex?a.useSpatialIndex:!0;this.X=b?new Sk:null;this.v=new Sk;this.ka={};this.c={};this.f={};this.g={};this.a=null;var c, + d;a.features instanceof cd?(c=a.features,d=c.a):Array.isArray(a.features)&&(d=a.features);b||void 0!==c||(c=new cd(d));void 0!==d&&Yk(this,d);void 0!==c&&Zk(this,c)}B(Xk,vf);n=Xk.prototype;n.Fb=function(a){var b=J(a).toString();if($k(this,b,a)){al(this,b,a);var c=a.S();c?(b=c.G(),this.X&&this.X.Ha(b,a)):this.ka[b]=a;U(this,new bl("addfeature",a))}this.w()};function al(a,b,c){a.g[b]=[R(c,"change",a.vc,a),R(c,"propertychange",a.vc,a)]} + function $k(a,b,c){var d=!0,e=c.Pa();void 0!==e?e.toString()in a.c?d=!1:a.c[e.toString()]=c:(L(!(b in a.f),30),a.f[b]=c);return d}n.Gb=function(a){Yk(this,a);this.w()};function Yk(a,b){var c,d,e,f,g=[],h=[],k=[];d=0;for(e=b.length;d<e;d++)f=b[d],c=J(f).toString(),$k(a,c,f)&&h.push(f);d=0;for(e=h.length;d<e;d++){f=h[d];c=J(f).toString();al(a,c,f);var l=f.S();l?(c=l.G(),g.push(c),k.push(f)):a.ka[c]=f}a.X&&a.X.load(g,k);d=0;for(e=h.length;d<e;d++)U(a,new bl("addfeature",h[d]))} + function Zk(a,b){var c=!1;R(a,"addfeature",function(a){c||(c=!0,b.push(a.feature),c=!1)});R(a,"removefeature",function(a){c||(c=!0,b.remove(a.feature),c=!1)});R(b,hd,function(a){c||(c=!0,this.Fb(a.element),c=!1)},a);R(b,id,function(a){if(!c){c=!0;a=a.element;var b=J(a).toString();b in this.ka?delete this.ka[b]:this.X&&this.X.remove(a);this.Zb(a);this.w();c=!1}},a);a.a=b} + n.clear=function(a){if(a){for(var b in this.g)this.g[b].forEach(M);this.a||(this.g={},this.c={},this.f={})}else if(this.X){a=this.Zb;Wk(Tk(this.X),a,this);for(var c in this.ka)this.Zb(this.ka[c])}this.a&&this.a.clear();this.X&&this.X.clear();this.v.clear();this.ka={};U(this,new bl("clear"));this.w()};n.nd=function(a,b){if(this.X)return Wk(Tk(this.X),a,b);if(this.a)return ed(this.a,a,b)};function Qi(a,b,c,d){a.X?Vk(a.X,b,c,d):a.a&&ed(a.a,c,d)} + n.pd=function(){var a;this.a?a=this.a.a:this.X&&(a=Tk(this.X),sa(this.ka)||Pa(a,ra(this.ka)));return a};n.G=function(){return this.X.G()}; + n.vc=function(a){a=a.target;var b=J(a).toString(),c=a.S();if(c)if(c=c.G(),b in this.ka)delete this.ka[b],this.X&&this.X.Ha(c,a);else{if(this.X){var d=this.X,e=d.a[J(a)];lb([e.H,e.J,e.I,e.L],c)||(d.remove(a),d.Ha(c,a))}}else b in this.ka||(this.X&&this.X.remove(a),this.ka[b]=a);c=a.Pa();void 0!==c?(c=c.toString(),b in this.f?(delete this.f[b],this.c[c]=a):this.c[c]!==a&&(cl(this,a),this.c[c]=a)):b in this.f||(cl(this,a),this.f[b]=a);this.w();U(this,new bl("changefeature",a))}; + function Pi(a,b,c,d){var e=a.v;b=a.W(b,c);var f,g;f=0;for(g=b.length;f<g;++f){var h=b[f];Vk(e,h,function(a){return hb(a.extent,h)})||(a.j.call(a,h,c,d),e.Ha(h,{extent:h.slice()}))}}n.Zb=function(a){var b=J(a).toString();this.g[b].forEach(M);delete this.g[b];var c=a.Pa();void 0!==c?delete this.c[c.toString()]:delete this.f[b];U(this,new bl("removefeature",a))};function cl(a,b){for(var c in a.c)if(a.c[c]===b){delete a.c[c];break}}function bl(a,b){T.call(this,a);this.feature=b}B(bl,T);function dl(a,b){T.call(this,a);this.feature=b}B(dl,T); + function el(a){ng.call(this,{handleDownEvent:fl,handleEvent:gl,handleUpEvent:hl});this.W=null;this.s=!1;this.Ga=a.source?a.source:null;this.ma=a.features?a.features:null;this.jd=a.snapTolerance?a.snapTolerance:12;this.P=a.type;this.c=il(this.P);this.wa=a.minPoints?a.minPoints:this.c===jl?3:2;this.va=a.maxPoints?a.maxPoints:Infinity;this.Ab=a.finishCondition?a.finishCondition:yb;var b=a.geometryFunction;if(!b)if("Circle"===this.P)b=function(a,b){var c=b?b:new Mk([NaN,NaN]),g=a[0],h=a[1],k=g[0]-h[0], + g=g[1]-h[1];Nk(c,a[0],Math.sqrt(k*k+g*g));return c};else{var c,b=this.c;b===kl?c=jc:b===ll?c=wk:b===jl&&(c=qc);b=function(a,b){var f=b;f?f.ea(a):f=new c(a);return f}}this.u=b;this.D=this.i=this.a=this.j=this.g=this.h=null;this.kd=a.clickTolerance?a.clickTolerance*a.clickTolerance:36;this.ba=new Y({source:new Xk({useSpatialIndex:!1,wrapX:a.wrapX?a.wrapX:!1}),style:a.style?a.style:ml()});this.Fa=a.geometryName;this.gd=a.condition?a.condition:jg;this.na=a.freehandCondition?a.freehandCondition:kg;R(this, + La("active"),this.kb,this)}B(el,ng);function ml(){var a=Eh();return function(b){return a[b.S().$()]}}el.prototype.setMap=function(a){ng.prototype.setMap.call(this,a);this.kb()};function gl(a){this.c!==ll&&this.c!==jl||!this.na(a)||(this.s=!0);var b=!this.s;this.s&&a.type===qf?(nl(this,a),b=!1):a.type===pf?b=pl(this,a):a.type===jf&&(b=!1);return og.call(this,a)&&b}function fl(a){return this.gd(a)?(this.W=a.pixel,!0):this.s?(this.W=a.pixel,this.h||ql(this,a),!0):!1} + function hl(a){this.s=!1;var b=this.W,c=a.pixel,d=b[0]-c[0],b=b[1]-c[1],c=!0;d*d+b*b<=this.kd&&(pl(this,a),this.h?this.c===rl?sl(this):tl(this,a)?this.Ab(a)&&sl(this):nl(this,a):(ql(this,a),this.c===kl&&sl(this)),c=!1);return c} + function pl(a,b){if(a.h){var c=b.coordinate,d=a.g.S(),e;a.c===kl?e=a.a:a.c===jl?(e=a.a[0],e=e[e.length-1],tl(a,b)&&(c=a.h.slice())):(e=a.a,e=e[e.length-1]);e[0]=c[0];e[1]=c[1];a.u(a.a,d);a.j&&a.j.S().ea(c);d instanceof qc&&a.c!==jl?(a.i||(a.i=new kk(new wk(null))),0>=d.ja.length?d=null:(c=new ic(null),$b(c,d.c,d.o.slice(0,d.ja[0])),c.w(),d=c),c=a.i.S(),$b(c,d.c,d.o),c.w()):a.D&&(c=a.i.S(),c.ea(a.D));ul(a)}else d=b.coordinate.slice(),a.j?a.j.S().ea(d):(a.j=new kk(new jc(d)),ul(a));return!0} + function tl(a,b){var c=!1;if(a.g){var d=!1,e=[a.h];a.c===ll?d=a.a.length>a.wa:a.c===jl&&(d=a.a[0].length>a.wa,e=[a.a[0][0],a.a[0][a.a[0].length-2]]);if(d)for(var d=b.map,f=0,g=e.length;f<g;f++){var h=e[f],k=ug(d,h),l=b.pixel,c=l[0]-k[0],k=l[1]-k[1],l=a.s&&a.na(b)?1:a.jd;if(c=Math.sqrt(c*c+k*k)<=l){a.h=h;break}}}return c} + function ql(a,b){var c=b.coordinate;a.h=c;a.c===kl?a.a=c.slice():a.c===jl?(a.a=[[c.slice(),c.slice()]],a.D=a.a[0]):(a.a=[c.slice(),c.slice()],a.c===rl&&(a.D=a.a));a.D&&(a.i=new kk(new wk(a.D)));c=a.u(a.a);a.g=new kk;a.Fa&&mk(a.g,a.Fa);lk(a.g,c);ul(a);U(a,new dl("drawstart",a.g))} + function nl(a,b){var c=b.coordinate,d=a.g.S(),e,f;if(a.c===ll)a.h=c.slice(),f=a.a,f.push(c.slice()),e=f.length>a.va,a.u(f,d);else if(a.c===jl){f=a.a[0];f.push(c.slice());if(e=f.length>a.va)a.h=f[0];a.u(a.a,d)}ul(a);e&&sl(a)} + function sl(a){var b=vl(a),c=a.a,d=b.S();a.c===ll?(c.pop(),a.u(c,d)):a.c===jl&&(c[0].pop(),c[0].push(c[0][0]),a.u(c,d));"MultiPoint"===a.P?lk(b,new yk([c])):"MultiLineString"===a.P?lk(b,new xk([c])):"MultiPolygon"===a.P&&lk(b,new zk([c]));U(a,new dl("drawend",b));a.ma&&a.ma.push(b);a.Ga&&a.Ga.Fb(b)}function vl(a){a.h=null;var b=a.g;b&&(a.g=null,a.j=null,a.i=null,a.ba.da().clear(!0));return b}el.prototype.B=zb; + function ul(a){var b=[];a.g&&b.push(a.g);a.i&&b.push(a.i);a.j&&b.push(a.j);a=a.ba.da();a.clear(!0);a.Gb(b)}el.prototype.kb=function(){var a=this.aa,b=this.get("active");a&&b||vl(this);this.ba.setMap(b?a:null)};function il(a){var b;"Point"===a||"MultiPoint"===a?b=kl:"LineString"===a||"MultiLineString"===a?b=ll:"Polygon"===a||"MultiPolygon"===a?b=jl:"Circle"===a&&(b=rl);return b}var kl="Point",ll="LineString",jl="Polygon",rl="Circle";function wl(a,b,c,d,e,f,g,h,k,l,m){Sf.call(this,e,0);this.u=void 0!==m?m:!1;this.v=g;this.s=h;this.f=null;this.c={};this.g=b;this.l=d;this.i=f?f:e;this.a=[];this.Va=null;this.h=0;f=Qc(d,this.i);h=this.l.G();e=this.g.G();f=h?vb(f,h):f;if(0===ob(f))this.state=4;else if((h=a.G())&&(e?e=vb(e,h):e=h),h=d.O(this.i[0]),m=tb(f),d=Ub(c,a)(m,void 0,m.length),h=c.getPointResolution(h,m),m=Lb(c),void 0!==m&&(h*=m),m=Lb(a),void 0!==m&&(h/=m),d=a.getPointResolution(h,d)/h,isFinite(d)&&0<d&&(h/=d),d=h,!isFinite(d)|| + 0>=d)this.state=4;else if(this.j=new Ji(a,c,f,e,d*(void 0!==l?l:.5)),0===this.j.f.length)this.state=4;else if(this.h=Xc(b,d),c=Li(this.j),e&&(a.b?(c[1]=ia(c[1],e[1],e[3]),c[3]=ia(c[3],e[1],e[3])):c=vb(c,e)),ob(c)){a=Rc(b,c,this.h);for(b=a.H;b<=a.I;b++)for(c=a.J;c<=a.L;c++)(l=k(this.h,b,c,g))&&this.a.push(l);0===this.a.length&&(this.state=4)}else this.state=4}B(wl,Sf);wl.prototype.R=function(){1==this.state&&(this.Va.forEach(M),this.Va=null);Sf.prototype.R.call(this)}; + wl.prototype.Z=function(a){if(void 0!==a){var b=J(a);if(b in this.c)return this.c[b];a=sa(this.c)?this.f:this.f.cloneNode(!1);return this.c[b]=a}return this.f}; + wl.prototype.Tc=function(){var a=[];this.a.forEach(function(b){b&&2==b.T()&&a.push({extent:Qc(this.g,b.V),image:b.Z()})},this);this.a.length=0;if(0===a.length)this.state=3;else{var b=this.i[0],c=Wc(this.l,b),d="number"===typeof c?c:c[0],c="number"===typeof c?c:c[1],b=this.l.O(b),e=this.g.O(this.h),f=Qc(this.l,this.i);this.f=Ii(d,c,this.v,e,this.g.G(),b,f,this.j,a,this.s,this.u);this.state=2}Tf(this)}; + wl.prototype.load=function(){if(0==this.state){this.state=1;Tf(this);var a=0;this.Va=[];this.a.forEach(function(b){var c=b.T();if(0==c||1==c){a++;var d;d=R(b,"change",function(){var c=b.T();if(2==c||3==c||4==c)M(d),a--,0===a&&(this.Va.forEach(M),this.Va=null,this.Tc())},this);this.Va.push(d)}},this);this.a.forEach(function(a){0==a.T()&&a.load()});0===a&&K.setTimeout(this.Tc.bind(this),0)}};function xl(a,b){var c=/\{z\}/g,d=/\{x\}/g,e=/\{y\}/g,f=/\{-y\}/g;return function(g){if(g)return a.replace(c,g[0].toString()).replace(d,g[1].toString()).replace(e,function(){return(-g[2]-1).toString()}).replace(f,function(){var a=b.a?b.a[g[0]]:null;L(a,55);return(a.L-a.J+1+g[2]).toString()})}}function yl(a,b){for(var c=a.length,d=Array(c),e=0;e<c;++e)d[e]=xl(a[e],b);return zl(d)}function zl(a){return 1===a.length?a[0]:function(b,c,d){if(b)return a[la((b[1]<<b[0])+b[2],a.length)](b,c,d)}} + function Al(){};function Bl(a){Xj.call(this);this.g=void 0!==a?a:2048}B(Bl,Xj);function Cl(a){return a.f>a.g}Bl.prototype.Oa=function(a){for(var b,c;Cl(this);){b=this.b.Na;c=b.V[0].toString();var d;if(d=c in a)b=b.V,d=Hc(a[c],b[1],b[2]);if(d)break;else Da(this.pop())}};function Dl(a){vf.call(this,{attributions:a.attributions,extent:a.extent,logo:a.logo,projection:a.projection,state:a.state,wrapX:a.wrapX});this.u=void 0!==a.opaque?a.opaque:!1;this.aa=void 0!==a.tilePixelRatio?a.tilePixelRatio:1;this.tileGrid=void 0!==a.tileGrid?a.tileGrid:null;this.a=new Bl(a.cacheSize);this.g=[0,0];this.Ia=""}B(Dl,vf);n=Dl.prototype;n.Mc=function(){return Cl(this.a)};n.Oa=function(a,b){var c=this.fb(a);c&&c.Oa(b)}; + function Sh(a,b,c,d,e){b=a.fb(b);if(!b)return!1;for(var f=!0,g,h,k=d.H;k<=d.I;++k)for(var l=d.J;l<=d.L;++l)g=a.ob(c,k,l),h=!1,Uj(b,g)&&(g=b.get(g),(h=2===g.T())&&(h=!1!==e(g))),h||(f=!1);return f}n.nb=function(){return 0};n.getKey=function(){return this.Ia};n.ob=function(a,b,c){return a+"/"+b+"/"+c};n.Qb=function(){return this.u};n.sa=function(a){return this.tileGrid?this.tileGrid:Zc(a)};n.fb=function(a){var b=this.ia();return b&&!Tb(b,a)?null:this.a};n.pb=function(){return this.aa}; + function Ni(a,b,c,d){d=a.sa(d);c=a.pb(c);b=Lc(Wc(d,b),a.g);return 1==c?b:Kc(b,c,a.g)}function El(a,b,c){var d=void 0!==c?c:a.ia();c=a.sa(d);if(a.i&&d.c){var e=b;b=e[0];a=Vc(c,e);var d=$c(d),f=a[0],g=a[1];d[0]<=f&&f<=d[2]&&d[1]<=g&&g<=d[3]?b=e:(e=qb(d),a[0]+=e*Math.ceil((d[0]-a[0])/e),b=Yc(c,a,b))}d=b[0];a=b[1];e=b[2];c=c.minZoom>d||d>c.maxZoom?!1:(c=(f=c.G())?Rc(c,f,d):c.a?c.a[d]:null)?Hc(c,a,e):!0;return c?b:null}n.Ja=function(){this.a.clear();this.w()};n.Vc=I; + function Fl(a,b){T.call(this,a);this.tile=b}B(Fl,T);function Gl(a){Dl.call(this,{attributions:a.attributions,cacheSize:a.cacheSize,extent:a.extent,logo:a.logo,opaque:a.opaque,projection:a.projection,state:a.state,tileGrid:a.tileGrid,tilePixelRatio:a.tilePixelRatio,wrapX:a.wrapX});this.tileLoadFunction=a.tileLoadFunction;this.tileUrlFunction=this.f?this.f.bind(this):Al;this.urls=null;if(a.urls){var b=a.urls;this.urls=b;var c=b.join("\n");Hl(this,this.f?this.f.bind(this):yl(b,this.tileGrid),c)}else a.url&&this.s(a.url);a.tileUrlFunction&&Hl(this,a.tileUrlFunction)} + B(Gl,Dl);Gl.prototype.v=function(a){a=a.target;switch(a.T()){case 1:U(this,new Fl("tileloadstart",a));break;case 2:U(this,new Fl("tileloadend",a));break;case 3:U(this,new Fl("tileloaderror",a))}};function Hl(a,b,c){a.tileUrlFunction=b;"undefined"!==typeof c?a.Ia!==c&&(a.Ia=c,a.w()):a.w()} + Gl.prototype.s=function(a){var b=[],c=/\{(\d)-(\d)\}/.exec(a)||/\{([a-z])-([a-z])\}/.exec(a);if(c){var d=c[2].charCodeAt(0),e;for(e=c[1].charCodeAt(0);e<=d;++e)b.push(a.replace(c[0],String.fromCharCode(e)))}else b.push(a);b=this.urls=b;Hl(this,this.f?this.f.bind(this):yl(b,this.tileGrid),a)};Gl.prototype.Vc=function(a,b,c){a=this.ob(a,b,c);Uj(this.a,a)&&this.a.get(a)};function Il(a){Gl.call(this,{attributions:a.attributions,cacheSize:a.cacheSize,extent:a.extent,logo:a.logo,opaque:a.opaque,projection:a.projection,state:a.state,tileGrid:a.tileGrid,tileLoadFunction:a.tileLoadFunction?a.tileLoadFunction:Jl,tilePixelRatio:a.tilePixelRatio,tileUrlFunction:a.tileUrlFunction,url:a.url,urls:a.urls,wrapX:a.wrapX});this.crossOrigin=void 0!==a.crossOrigin?a.crossOrigin:null;this.tileClass=void 0!==a.tileClass?a.tileClass:Ok;this.c={};this.j={};this.W=a.reprojectionErrorThreshold} + B(Il,Gl);n=Il.prototype;n.Mc=function(){if(Cl(this.a))return!0;for(var a in this.c)if(Cl(this.c[a]))return!0;return!1};n.Oa=function(a,b){var c=this.fb(a);this.a.Oa(this.a==c?b:{});for(var d in this.c){var e=this.c[d];e.Oa(e==c?b:{})}};n.nb=function(a){return this.ia()&&a&&Tb(this.ia(),a),0};n.Qb=function(a){return this.ia()&&a&&!Tb(this.ia(),a)?!1:Gl.prototype.Qb.call(this,a)}; + n.sa=function(a){var b=this.ia();return!this.tileGrid||b&&!Tb(b,a)?(b=J(a).toString(),b in this.j||(this.j[b]=Zc(a)),this.j[b]):this.tileGrid};n.fb=function(a){var b=this.ia();if(!b||Tb(b,a))return this.a;a=J(a).toString();a in this.c||(this.c[a]=new Bl);return this.c[a]};function Kl(a,b,c,d,e,f,g){b=[b,c,d];e=(c=El(a,b,f))?a.tileUrlFunction(c,e,f):void 0;e=new a.tileClass(b,void 0!==e?0:4,void 0!==e?e:"",a.crossOrigin,a.tileLoadFunction);e.key=g;R(e,"change",a.v,a);return e} + function $h(a,b,c,d,e,f){if(a.ia()&&f&&!Tb(a.ia(),f)){var g=a.fb(f);d=[b,c,d];var h;b=a.ob.apply(a,d);Uj(g,b)&&(h=g.get(b));c=a.getKey();if(h&&h.key==c)return h;var k=a.ia(),l=a.sa(k),m=a.sa(f),p=El(a,d,f);a=new wl(k,l,f,m,d,p,a.pb(e),0,function(a,b,c,d){return Ll(this,a,b,c,d,k)}.bind(a),a.W,!1);a.key=c;h?(a.b=h,Zj(g,b,a)):g.set(b,a);return a}return Ll(a,b,c,d,e,f)} + function Ll(a,b,c,d,e,f){var g,h=a.ob(b,c,d),k=a.getKey();if(Uj(a.a,h)){if(g=a.a.get(h),g.key!=k){var l=g;g.b&&g.b.key==k?(g=g.b,2==l.T()&&(g.b=l)):(g=Kl(a,b,c,d,e,f,k),2==l.T()?g.b=l:l.b&&2==l.b.T()&&(g.b=l.b,l.b=null));g.b&&(g.b.b=null);Zj(a.a,h,g)}}else g=Kl(a,b,c,d,e,f,k),a.a.set(h,g);return g}function Jl(a,b){a.Z().src=b};function Ml(a){a=a||{};var b=void 0!==a.projection?a.projection:"EPSG:3857",c;if(void 0!==a.tileGrid)c=a.tileGrid;else{c={extent:$c(b),maxZoom:a.maxZoom,minZoom:a.minZoom,tileSize:a.tileSize};var d={};pa(d,void 0!==c?c:{});void 0===d.extent&&(d.extent=Hb("EPSG:3857").G());d.resolutions=ad(d.extent,d.maxZoom,d.tileSize);delete d.maxZoom;c=new Mc(d)}Il.call(this,{attributions:a.attributions,cacheSize:a.cacheSize,crossOrigin:a.crossOrigin,logo:a.logo,opaque:a.opaque,projection:b,reprojectionErrorThreshold:a.reprojectionErrorThreshold, + tileGrid:c,tileLoadFunction:a.tileLoadFunction,tilePixelRatio:a.tilePixelRatio,tileUrlFunction:a.tileUrlFunction,url:a.url,urls:a.urls,wrapX:void 0!==a.wrapX?a.wrapX:!0})}B(Ml,Il);function Nl(a,b){var c=[];Object.keys(b).forEach(function(a){null!==b[a]&&void 0!==b[a]&&c.push(a+"="+encodeURIComponent(b[a]))});var d=c.join("&");a=a.replace(/[?&]$/,"");a=-1===a.indexOf("?")?a+"?":a+"&";return a+d};function Ol(a){a=a||{};var b;void 0!==a.attributions?b=a.attributions:b=[Pl];Ml.call(this,{attributions:b,cacheSize:a.cacheSize,crossOrigin:void 0!==a.crossOrigin?a.crossOrigin:"anonymous",opaque:void 0!==a.opaque?a.opaque:!0,maxZoom:void 0!==a.maxZoom?a.maxZoom:19,reprojectionErrorThreshold:a.reprojectionErrorThreshold,tileLoadFunction:a.tileLoadFunction,url:void 0!==a.url?a.url:"https://{a-c}.tile.openstreetmap.org/{z}/{x}/{y}.png",wrapX:a.wrapX})}B(Ol,Ml);var Pl=new bd({html:'© <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors.'});function Ql(a){a=a||{};Il.call(this,{attributions:a.attributions,cacheSize:a.cacheSize,crossOrigin:a.crossOrigin,logo:a.logo,projection:a.projection,reprojectionErrorThreshold:a.reprojectionErrorThreshold,tileGrid:a.tileGrid,tileLoadFunction:a.tileLoadFunction,url:a.url,urls:a.urls,wrapX:void 0!==a.wrapX?a.wrapX:!0});this.B=a.params||{};this.ba=db()}B(Ql,Il);Ql.prototype.pb=function(a){return a}; + Ql.prototype.f=function(a,b,c){var d=this.tileGrid;d||(d=this.sa(c));if(!(d.b.length<=a[0])){var e=Qc(d,a,this.ba),f=Lc(Wc(d,a[0]),this.g);1!=b&&(f=Kc(f,b,this.g));d={F:"image",FORMAT:"PNG32",TRANSPARENT:!0};pa(d,this.B);var g=this.urls;g?(c=c.ya.split(":").pop(),d.SIZE=f[0]+","+f[1],d.BBOX=e.join(","),d.BBOXSR=c,d.IMAGESR=c,d.DPI=Math.round(d.DPI?d.DPI*b:90*b),a=1==g.length?g[0]:g[la((a[1]<<a[0])+a[2],g.length)],b=a.replace(/MapServer\/?$/,"MapServer/export").replace(/ImageServer\/?$/,"ImageServer/exportImage"), + b==a&&L(!1,50),d=Nl(b,d)):d=void 0;return d}};function Rl(a){this.j=this.l=this.f=null;this.i=void 0!==a.fill?a.fill:null;this.M=[0,0];this.b=a.points;this.c=void 0!==a.radius?a.radius:a.radius1;this.g=void 0!==a.radius2?a.radius2:this.c;this.h=void 0!==a.angle?a.angle:0;this.a=void 0!==a.stroke?a.stroke:null;this.D=this.Y=this.u=null;var b=a.atlasManager,c="",d="",e=0,f=null,g,h=0;this.a&&(g=nd(this.a.a),h=this.a.c,void 0===h&&(h=1),f=this.a.b,pe||(f=null),d=this.a.g,void 0===d&&(d="round"),c=this.a.f,void 0===c&&(c="round"),e=this.a.h,void 0=== + e&&(e=10));var k=2*(this.c+h)+1,c={strokeStyle:g,jb:h,size:k,lineCap:c,lineDash:f,lineJoin:d,miterLimit:e};if(void 0===b){var l=Md(k,k);this.l=l.canvas;b=k=this.l.width;this.Qc(c,l,0,0);this.i?this.j=this.l:(l=Md(c.size,c.size),this.j=l.canvas,this.Pc(c,l,0,0))}else k=Math.round(k),(d=!this.i)&&(l=this.Pc.bind(this,c)),e=this.a?qh(this.a):"-",f=this.i?rh(this.i):"-",this.f&&e==this.f[1]&&f==this.f[2]&&this.c==this.f[3]&&this.g==this.f[4]&&this.h==this.f[5]&&this.b==this.f[6]||(this.f=["r"+e+f+(void 0!== + this.c?this.c.toString():"-")+(void 0!==this.g?this.g.toString():"-")+(void 0!==this.h?this.h.toString():"-")+(void 0!==this.b?this.b.toString():"-"),e,f,this.c,this.g,this.h,this.b]),l=b.add(this.f[0],k,k,this.Qc.bind(this,c),l),this.l=l.image,this.M=[l.offsetX,l.offsetY],b=l.image.width,d?this.j=l.Nd:this.j=this.l;this.u=[k/2,k/2];this.Y=[k,k];this.D=[b,b];oh.call(this,{opacity:1,rotateWithView:void 0!==a.rotateWithView?a.rotateWithView:!1,rotation:void 0!==a.rotation?a.rotation:0,scale:1,snapToPixel:void 0!== + a.snapToPixel?a.snapToPixel:!0})}B(Rl,oh);n=Rl.prototype;n.eb=function(){return this.u};n.ub=function(){return this.j};n.Z=function(){return this.l};n.Ob=function(){return this.D};n.ib=function(){return 2};n.pa=function(){return this.M};n.Ka=function(){return this.Y};n.Vb=I;n.load=I;n.bc=I; + n.Qc=function(a,b,c,d){var e;b.setTransform(1,0,0,1,0,0);b.translate(c,d);b.beginPath();this.g!==this.c&&(this.b*=2);for(c=0;c<=this.b;c++)d=2*c*Math.PI/this.b-Math.PI/2+this.h,e=0===c%2?this.c:this.g,b.lineTo(a.size/2+e*Math.cos(d),a.size/2+e*Math.sin(d));this.i&&(b.fillStyle=qd(this.i.b),b.fill());this.a&&(b.strokeStyle=a.strokeStyle,b.lineWidth=a.jb,a.lineDash&&b.setLineDash(a.lineDash),b.lineCap=a.lineCap,b.lineJoin=a.lineJoin,b.miterLimit=a.miterLimit,b.stroke());b.closePath()}; + n.Pc=function(a,b,c,d){b.setTransform(1,0,0,1,0,0);b.translate(c,d);b.beginPath();this.g!==this.c&&(this.b*=2);var e;for(c=0;c<=this.b;c++)e=2*c*Math.PI/this.b-Math.PI/2+this.h,d=0===c%2?this.c:this.g,b.lineTo(a.size/2+d*Math.cos(e),a.size/2+d*Math.sin(e));b.fillStyle=kh;b.fill();this.a&&(b.strokeStyle=a.strokeStyle,b.lineWidth=a.jb,a.lineDash&&b.setLineDash(a.lineDash),b.stroke());b.closePath()};y("ol.format.GeoJSON",Gk);Gk.prototype.readFeatures=Gk.prototype.a;Gk.prototype.readFeature=Gk.prototype.g;y("ol.format.EsriJSON",Ak);Ak.prototype.readFeatures=Ak.prototype.a;Ak.prototype.readFeature=Ak.prototype.g;y("ol.style.Style",yh);y("ol.style.Circle",ph);y("ol.style.RegularShape",Rl);y("ol.style.Fill",sh);y("ol.style.Stroke",xh);y("ol.style.Icon",Lk); + y("ol.style.Text",function(a){a=a||{};this.b=a.font;this.h=a.rotation;this.g=a.rotateWithView;this.l=a.scale;this.j=a.text;this.C=a.textAlign;this.K=a.textBaseline;this.f=void 0!==a.fill?a.fill:new sh({color:"#333"});this.i=void 0!==a.stroke?a.stroke:null;this.a=void 0!==a.offsetX?a.offsetX:0;this.c=void 0!==a.offsetY?a.offsetY:0});y("ol.View",uc);uc.prototype.on=uc.prototype.Y;uc.prototype.getZoom=uc.prototype.rd;uc.prototype.setZoom=uc.prototype.ye;uc.prototype.getCenter=uc.prototype.qa; + uc.prototype.setCenter=uc.prototype.xa;uc.prototype.calculateExtent=uc.prototype.lc;uc.prototype.getProjection=uc.prototype.ia;uc.prototype.fit=uc.prototype.md;y("ol.control.defaults",ee);y("ol.layer.Tile",W);W.prototype.getVisible=W.prototype.gb;W.prototype.setVisible=W.prototype.Cc;W.prototype.getZIndex=W.prototype.Yb;W.prototype.setZIndex=W.prototype.Dc;W.prototype.getOpacity=W.prototype.Xb;W.prototype.setOpacity=W.prototype.Bc;W.prototype.getSource=W.prototype.da;W.prototype.setSource=W.prototype.$b; + W.prototype.on=W.prototype.Y;y("ol.layer.Vector",Y);Y.prototype.getVisible=Y.prototype.gb;Y.prototype.setVisible=Y.prototype.Cc;Y.prototype.getSource=Y.prototype.da;Y.prototype.setStyle=Y.prototype.v;Y.prototype.getZIndex=Y.prototype.Yb;Y.prototype.setZIndex=Y.prototype.Dc;Y.prototype.getOpacity=Y.prototype.Xb;Y.prototype.setOpacity=Y.prototype.Bc;Y.prototype.getSource=Y.prototype.da;Y.prototype.setSource=Y.prototype.$b;Y.prototype.on=Y.prototype.Y;y("ol.source.OSM",Ol);Ol.prototype.refresh=Ol.prototype.Ja; + y("ol.source.XYZ",Ml);Ml.prototype.refresh=Ml.prototype.Ja;Ml.prototype.setUrl=Ml.prototype.s;Ml.prototype.refresh=Ml.prototype.Ja;y("ol.Map",Z);Z.prototype.on=Z.prototype.Y;Z.prototype.getTarget=Z.prototype.Wb;Z.prototype.getTargetElement=Z.prototype.Ra;Z.prototype.getView=Z.prototype.U;Z.prototype.addOverlay=Z.prototype.fd;Z.prototype.addLayer=Z.prototype.ed;Z.prototype.removeLayer=Z.prototype.te;Z.prototype.getEventPixel=Z.prototype.uc;Z.prototype.hasFeatureAtPixel=Z.prototype.Md; + Z.prototype.getSize=Z.prototype.Ta;Z.prototype.updateSize=Z.prototype.yb;Z.prototype.forEachFeatureAtPixel=Z.prototype.od;Z.prototype.addInteraction=Z.prototype.dd;Z.prototype.removeInteraction=Z.prototype.se;Z.prototype.beforeRender=Z.prototype.oa;Z.prototype.addControl=Z.prototype.cd;Z.prototype.once=Z.prototype.hd;Z.prototype.renderSync=Z.prototype.we;y("ol.source.Vector",Xk);Xk.prototype.getFeatures=Xk.prototype.pd;Xk.prototype.getExtent=Xk.prototype.G;Xk.prototype.refresh=Xk.prototype.Ja; + Xk.prototype.addFeatures=Xk.prototype.Gb;Xk.prototype.addFeature=Xk.prototype.Fb;Xk.prototype.clear=Xk.prototype.clear;Xk.prototype.forEachFeature=Xk.prototype.nd;Xk.prototype.refresh=Xk.prototype.Ja;y("ol.source.TileArcGISRest",Ql);Ql.prototype.refresh=Ql.prototype.Ja;y("ol.Overlay",gk);gk.prototype.setPosition=gk.prototype.Ac;y("ol.Feature",kk);kk.prototype.getProperties=kk.prototype.Ea;kk.prototype.setProperties=kk.prototype.l;kk.prototype.getGeometry=kk.prototype.S;y("ol.geom.Point",jc); + jc.prototype.transform=jc.prototype.transform;jc.prototype.getCoordinates=jc.prototype.za;jc.prototype.getExtent=jc.prototype.G;y("ol.geom.Polygon",qc);qc.prototype.getCoordinates=qc.prototype.za;qc.prototype.getExtent=qc.prototype.G;qc.prototype.transform=qc.prototype.transform;y("ol.geom.LineString",wk);wk.prototype.getCoordinates=wk.prototype.za;wk.prototype.getExtent=wk.prototype.G;wk.prototype.transform=wk.prototype.transform;y("ol.proj.Projection",Eb);Eb.prototype.getCode=Eb.prototype.l; + y("ol.interaction.Draw",el);el.prototype.on=el.prototype.Y;y("ol.animation.pan",Dc);y("ol.control.FullScreen",Xd); + return OPENLAYERS.ol; + })); + + + /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }()))) + +/***/ }, +/* 7 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Created by gavorhes on 11/3/2015. + */ + "use strict"; + var mapMoveCls_1 = __webpack_require__(8); + /** + * The single map move object catch is that it is common to multimap pages + * @type {MapMoveCls} + */ + exports.mapMove = new mapMoveCls_1.default(); + Object.defineProperty(exports, "__esModule", { value: true }); + exports.default = exports.mapMove; + + +/***/ }, +/* 8 */ +/***/ function(module, exports, __webpack_require__) { + + "use strict"; + var __extends = (this && this.__extends) || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + var mapInteractionBase_1 = __webpack_require__(9); + var checkDefined = __webpack_require__(10); + var provide_1 = __webpack_require__(4); + var makeGuid_1 = __webpack_require__(11); + var $ = __webpack_require__(3); + var nm = provide_1.default('olHelpers'); + /** + * assists with map move interactions, trigger callback functions + * @augments MapInteractionBase + */ + var MapMoveCls = (function (_super) { + __extends(MapMoveCls, _super); + /** + * constructor called implicitly + */ + function MapMoveCls() { + _super.call(this, 'map move'); + this._arrLyrRequest = []; + this._arrLyrTimeout = []; + this._arrLayer = []; + this._lookupLayer = {}; + this._mapMoveCallbacks = []; + this._mapMoveCallbacksLookup = {}; + this._mapMoveCallbackDelays = []; + this._mapMoveCallbackContext = []; + this._mapMoveCallbackTimeout = []; + this._mapExtent = undefined; + this._zoomLevel = undefined; + } + /** + * initialize the map move object + * @param theMap - the ol map + */ + MapMoveCls.prototype.init = function (theMap) { + var _this = this; + _super.prototype.init.call(this, theMap); + this.map.getView().on(['change:center', 'change:resolution'], function (e) { + _this._updateMapExtent(); + // trigger the layer updates + for (var i = 0; i < _this._arrLayer.length; i++) { + _this.triggerLyrLoad(_this._arrLayer[i], i, e.type); + } + // trigger the map callbacks + for (var i = 0; i < _this._mapMoveCallbacks.length; i++) { + _this.triggerMoveCallback(i, e.type); + } + }); + }; + MapMoveCls.prototype._updateMapExtent = function () { + var theView = this.map.getView(); + this._zoomLevel = theView.getZoom(); + var extentArray = theView.calculateExtent(this.map.getSize()); + this._mapExtent = { + minX: extentArray[0], + minY: extentArray[1], + maxX: extentArray[2], + maxY: extentArray[3] + }; + }; + Object.defineProperty(MapMoveCls.prototype, "mapExtent", { + /** + * return the map extent + */ + get: function () { + if (!this._mapExtent) { + this._updateMapExtent(); + } + return this._mapExtent; + }, + enumerable: true, + configurable: true + }); + /** + * Trigger the layer load + * @param lyr the layer being acted on + * @param index index of the layer + * @param eventType the event triggering the load, as 'change:center' or 'change:resolution' + */ + MapMoveCls.prototype.triggerLyrLoad = function (lyr, index, eventType) { + if (checkDefined.undefinedOrNull(lyr) && checkDefined.undefinedOrNull(index)) { + throw 'need to define lyr or index'; + } + else if (checkDefined.definedAndNotNull(lyr) && checkDefined.undefinedOrNull(index)) { + index = this._arrLayer.indexOf(lyr); + } + else if (checkDefined.undefinedOrNull(lyr) && checkDefined.definedAndNotNull(index)) { + lyr = this._arrLayer[index]; + } + // clear the timeout + if (this._arrLyrTimeout[index] != null) { + clearTimeout(this._arrLyrTimeout[index]); + this._arrLyrTimeout[index] = null; + } + // abort if necessary and clear the request + if (this._arrLyrRequest[index] != null && this._arrLyrRequest[index] != 4) { + this._arrLyrRequest[index].abort(); + this._arrLyrRequest[index] = null; + } + // dummy callback used if before load returns false + var callbackFunc = function () { }; + if (lyr.mapMoveBefore(this._zoomLevel, eventType)) { + lyr.mapMoveMakeGetParams(this._mapExtent, this._zoomLevel); + var _this_1 = this; + callbackFunc = function () { + function innerFunction(theLayer, theIndex) { + var _innerThis = this; + this._arrLyrRequest[theIndex] = $.get(theLayer.url, theLayer.mapMoveParams, function (d) { + /** + * @type {LayerBaseVector} + */ + theLayer.mapMoveCallback(d); + theLayer.loadCallback(); + }, 'json').fail(function (jqXHR) { + if (jqXHR.statusText != 'abort') { + console.log('failed'); + console.log(theLayer.url); + console.log(theLayer.mapMoveParams); + } + }).always(function () { + _innerThis._arrLyrTimeout[theIndex] = null; + _innerThis._arrLyrRequest[theIndex] = null; + }); + } + innerFunction.call(_this_1, lyr, index); + }; + } + else { + lyr.clear(); + } + this._arrLyrTimeout[index] = setTimeout(callbackFunc, lyr.onDemandDelay); + }; + /** + * trigger the map move call back at the given index + * @param ind - the index of the layer + * @param eventType=undefined the event triggering the load as 'change:center' or 'change:resolution' + * @param functionId=undefined the function id used to reference the added callback function + */ + MapMoveCls.prototype.triggerMoveCallback = function (ind, eventType, functionId) { + if (typeof ind == 'undefined' && typeof functionId == 'undefined') { + throw 'either the function index or the id must be defined'; + } + if (typeof ind !== 'number') { + ind = this._mapMoveCallbacks.indexOf(this._mapMoveCallbacksLookup[functionId]); + } + if (ind < 0) { + console.log('function not found'); + return; + } + // clear the timeout + if (this._mapMoveCallbackTimeout[ind] != null) { + clearTimeout(this._mapMoveCallbackTimeout[ind]); + this._mapMoveCallbackTimeout[ind] = null; + } + var ctx = this._mapMoveCallbackContext[ind]; + var theFunc = this._mapMoveCallbacks[ind]; + var _this = this; + var f = function () { + if (ctx !== null) { + theFunc.call(ctx, _this._mapExtent, _this._zoomLevel, eventType); + } + else { + theFunc(_this._mapExtent, _this._zoomLevel, eventType); + } + }; + this._mapMoveCallbackTimeout[ind] = setTimeout(f, this._mapMoveCallbackDelays[ind]); + }; + /** + * Add a layer to the interaction + * @param lyr - layer to add + * @param triggerOnAdd - if the layer should be loaded on add + */ + MapMoveCls.prototype.addVectorLayer = function (lyr, triggerOnAdd) { + if (triggerOnAdd === void 0) { triggerOnAdd = true; } + if (this._arrLayer.indexOf(lyr) > -1) { + console.log('already added ' + lyr.name + ' to map move'); + return; + } + this._checkInit(); + this._arrLyrRequest.push(null); + this._arrLyrTimeout.push(null); + this._arrLayer.push(lyr); + this._lookupLayer[lyr.id] = lyr; + triggerOnAdd = typeof triggerOnAdd == 'boolean' ? triggerOnAdd : true; + if (triggerOnAdd) { + if (this._mapExtent === undefined) { + this._updateMapExtent(); + } + this.triggerLyrLoad(lyr, this._arrLayer.length - 1); + } + }; + /** + * add a callback to the map move event + * @param func - callback function + * @param context - the context to use for this function + * @param delay=50 the delay before call load + * @param triggerOnAdd if the layer should be loaded on add to mapMove + * @param functionId optional id to reference the function later for outside triggering + */ + MapMoveCls.prototype.addCallback = function (func, context, delay, triggerOnAdd, functionId) { + if (this._mapMoveCallbacks.indexOf(func) > -1) { + console.log('this function already added to map move'); + return; + } + this._checkInit(); + if (!functionId) { + functionId = makeGuid_1.default(); + } + this._mapMoveCallbacks.push(func); + this._mapMoveCallbacksLookup[functionId] = functionId; + this._mapMoveCallbackDelays.push(typeof delay == 'number' ? delay : 50); + this._mapMoveCallbackContext.push(checkDefined.definedAndNotNull(context) ? context : null); + this._mapMoveCallbackTimeout.push(null); + triggerOnAdd = typeof triggerOnAdd == 'boolean' ? triggerOnAdd : true; + if (triggerOnAdd) { + if (this._mapExtent === undefined) { + this._updateMapExtent(); + } + this.triggerMoveCallback(this._mapMoveCallbacks.length - 1); + } + }; + return MapMoveCls; + }(mapInteractionBase_1.default)); + exports.MapMoveCls = MapMoveCls; + nm.MapMoveCls = MapMoveCls; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.default = MapMoveCls; + + +/***/ }, +/* 9 */ +/***/ function(module, exports, __webpack_require__) { + + "use strict"; + /** + * Created by gavorhes on 12/8/2015. + */ + var provide_1 = __webpack_require__(4); + var nm = provide_1.default('olHelpers'); + /** + * base interaction + */ + var MapInteractionBase = (function () { + /** + * map interaction base + * @param subtype - the interaction subtype + */ + function MapInteractionBase(subtype) { + this._map = null; + this._initialized = false; + this._subtype = subtype; + } + /** + * base initializer, returns true for already initialized + * @param theMap - the ol Map + * @returns true for already initialized + */ + MapInteractionBase.prototype.init = function (theMap) { + if (!this._initialized) { + this._map = theMap; + this._initialized = true; + } + }; + Object.defineProperty(MapInteractionBase.prototype, "map", { + /** + * get reference to the ol map object + * @returns {ol.Map} the map object + */ + get: function () { + return this._map; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MapInteractionBase.prototype, "initialized", { + /** + * get if is initialized + * @returns {boolean} is initialized + */ + get: function () { + return this._initialized; + }, + enumerable: true, + configurable: true + }); + /** + * Check the initialization status and throw exception if not valid yet + * @protected + */ + MapInteractionBase.prototype._checkInit = function () { + if (!this.initialized) { + var msg = this._subtype + " object not initialized"; + alert(msg); + console.log(msg); + throw msg; + } + }; + /** + * Check the initialization status and throw exception if not valid yet + */ + MapInteractionBase.prototype.checkInit = function () { + this._checkInit(); + }; + return MapInteractionBase; + }()); + exports.MapInteractionBase = MapInteractionBase; + nm.MapInteractionBase = MapInteractionBase; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.default = MapInteractionBase; + + +/***/ }, +/* 10 */ +/***/ function(module, exports, __webpack_require__) { + + "use strict"; + var provide_1 = __webpack_require__(4); + var nm = provide_1.default('util.checkDefined'); + /** + * check if the input is undefined or null + * @param input - input pointer + * @returns true undefined or null + */ + function undefinedOrNull(input) { + "use strict"; + return (typeof input === 'undefined' || input === null); + } + exports.undefinedOrNull = undefinedOrNull; + nm.undefinedOrNull = undefinedOrNull; + /** + * check if the input is defined and not null + * @param input - input pointer + * @returns true defined and not null + */ + function definedAndNotNull(input) { + "use strict"; + return !(undefinedOrNull(input)); + } + exports.definedAndNotNull = definedAndNotNull; + nm.definedAndNotNull = definedAndNotNull; + + +/***/ }, +/* 11 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Created by gavorhes on 11/3/2015. + */ + "use strict"; + var provide_1 = __webpack_require__(4); + var nm = provide_1.default('util'); + /** + * guids are used to uniquely identify groups and features + * @returns {string} a new guid + */ + function makeGuid() { + return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx' + .replace(/[xy]/g, function (c) { + var r = Math.random() * 16 | 0, v = c == 'x' ? r : r & 0x3 | 0x8; + return v.toString(16); + }); + } + nm.makeGuid = makeGuid; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.default = makeGuid; + + +/***/ }, +/* 12 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Created by gavorhes on 11/3/2015. + */ + "use strict"; + var mapPopupCls_1 = __webpack_require__(13); + /** + * The single popup object catch is that it is common to multimap pages + * @type {MapPopupCls} + */ + exports.mapPopup = new mapPopupCls_1.default(); + Object.defineProperty(exports, "__esModule", { value: true }); + exports.default = exports.mapPopup; + + +/***/ }, +/* 13 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Created by gavorhes on 11/3/2015. + */ + "use strict"; + var __extends = (this && this.__extends) || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + var mapInteractionBase_1 = __webpack_require__(9); + var provide_1 = __webpack_require__(4); + var custom_ol_1 = __webpack_require__(5); + var $ = __webpack_require__(3); + var nm = provide_1.default('olHelpers'); + var FeatureLayerProperties = (function () { + /** + * + * @param feature the feature + * @param layer - the layer in the popup + * @param layerIndex - index of the layer + * @param selectionLayer - the ol selection layer + * @param [esriLayerName=undefined] - esri layer name + */ + function FeatureLayerProperties(feature, layer, layerIndex, selectionLayer, esriLayerName) { + this.feature = feature; + this.layer = layer; + this.layerIndex = layerIndex; + this.selectionLayer = selectionLayer; + this.popupContent = ''; + this.esriLayerName = typeof esriLayerName == 'string' ? esriLayerName : undefined; + } + Object.defineProperty(FeatureLayerProperties.prototype, "layerName", { + get: function () { + if (typeof this.esriLayerName == 'string') { + return this.esriLayerName; + } + else { + return this.layer.name; + } + }, + enumerable: true, + configurable: true + }); + return FeatureLayerProperties; + }()); + exports.FeatureLayerProperties = FeatureLayerProperties; + /** + * map popup class + * @augments MapInteractionBase + */ + var MapPopupCls = (function (_super) { + __extends(MapPopupCls, _super); + /** + * Definition for openlayers style function + * @callback olStyleFunction + * ¶m feature the openlayers vector feature + * $param + */ + /** + * map popup constructor + */ + function MapPopupCls() { + _super.call(this, 'map popup'); + this._arrPopupLayerIds = []; + this._arrPopupLayerNames = []; + this._arrPopupLayers = []; + this._arrPopupOlLayers = []; + this._arrPopupContentFunction = []; + this._$popupContainer = undefined; + this._$popupContent = undefined; + this._$popupCloser = undefined; + this._popupOverlay = undefined; + this._selectionLayers = []; + this._selectionLayerLookup = {}; + this._mapClickFunctions = []; + //let a = function($jqueryContent){console.log($jqueryContent)}; + //this._popupChangedLookup = {'a': a}; + this._popupChangedFunctions = []; + this._esriMapServiceLayers = []; + this._popupOpen = false; + this._popupCoordinate = null; + this._passThroughLayerFeatureArray = []; + this._currentPopupIndex = -1; + this._popupContentLength = 0; + } + /** + * map popup initialization + * @param {ol.Map} theMap - the ol map + */ + MapPopupCls.prototype.init = function (theMap) { + var _this = this; + _super.prototype.init.call(this, theMap); + var $map; + var target = this.map.getTarget(); + if (typeof target == 'string') { + $map = $('#' + target); + } + else { + $map = $(target); + } + $map.append('<div class="ol-popup">' + + '<span class="ol-popup-closer">X</span>' + + '<div class="popup-content"></div>' + + '</div>'); + this._$popupContainer = $map.find('.ol-popup'); + this._$popupContent = $map.find('.popup-content'); + this._$popupCloser = $map.find('.ol-popup-closer'); + this._popupOverlay = new custom_ol_1.ol.Overlay({ element: this._$popupContainer[0], autoPan: true, + autoPanAnimation: { + duration: 250, + source: theMap.getView().getCenter() + } }); + this._map.addOverlay(this._popupOverlay); + this._$popupCloser.click(function (evt) { + _this.closePopup(); + }); + // display popup on click + this._map.on('singleclick', function (evt) { + _this.closePopup(); + _this._popupCoordinate = evt['coordinate']; + // esri map service layers + if (_this._esriMapServiceLayers.length > 0) { + var queryParams = { + geometry: evt['coordinate'].join(','), + geometryType: 'esriGeometryPoint', + layers: 'all', + sr: _this._map.getView().getProjection().getCode().split(':')[1], + mapExtent: _this._map.getView().calculateExtent(_this._map.getSize()).join(','), + imageDisplay: _this._map.getSize().join(',') + ',96', + returnGeometry: true, + tolerance: 15, + f: 'pjson' + }; + for (var _i = 0, _a = _this._esriMapServiceLayers; _i < _a.length; _i++) { + var l = _a[_i]; + l.getPopupInfo(queryParams); + } + } + var layerFeatureObjectArray = _this._featuresAtPixel(evt['pixel']); + _this._passThroughLayerFeatureArray = []; + _this._currentPopupIndex = -1; + for (var i = 0; i < layerFeatureObjectArray.length; i++) { + var featObj = layerFeatureObjectArray[i]; + var props = featObj.feature.getProperties(); + var popupContentResponse = _this._arrPopupContentFunction[featObj.layerIndex](props, _this._$popupContent); + //skip if return was false + if (popupContentResponse === false) { + } + else if (typeof popupContentResponse == 'string') { + featObj.popupContent = popupContentResponse; + _this._passThroughLayerFeatureArray.push(featObj); + } + else { + featObj.selectionLayer.getSource().addFeature(featObj.feature); + } + } + _this._popupContentLength = _this._passThroughLayerFeatureArray.length; + _this._currentPopupIndex = -1; + var popupHtml = '<div class="ol-popup-nav">'; + popupHtml += '<span class="previous-popup ol-popup-nav-arrow">◀</span>'; + popupHtml += '<span class="next-popup ol-popup-nav-arrow">▶</span>'; + popupHtml += "<span class=\"current-popup-item-number\" style=\"font-weight: bold;\"></span>"; + popupHtml += "<span> of </span>"; + popupHtml += "<span class=\"popup-content-length\" style=\"font-weight: bold;\">" + _this._popupContentLength + "</span>"; + popupHtml += "<span> - </span>"; + popupHtml += "<span class=\"current-popup-layer-name\"></span>"; + popupHtml += '</div>'; + popupHtml += '<div class="ol-popup-inner">'; + popupHtml += '</div>'; + _this._$popupContent.html(popupHtml); + _this._$popupContent.find('.previous-popup').click(function () { + if (_this._popupContentLength == 1) { + return; + } + if (_this._currentPopupIndex == 0) { + _this._currentPopupIndex = _this._popupContentLength - 1; + } + else { + _this._currentPopupIndex--; + } + _this._triggerFeatSelect(); + }); + var nextPopup = _this._$popupContent.find('.next-popup'); + nextPopup.click(function () { + if (_this._popupContentLength == 1 && _this._currentPopupIndex > -1) { + return; + } + if (_this._currentPopupIndex == _this._popupContentLength - 1) { + _this._currentPopupIndex = 0; + } + else { + _this._currentPopupIndex++; + } + _this._triggerFeatSelect(); + }); + if (_this._popupContentLength > 0) { + nextPopup.trigger('click'); + _this._popupOverlay.setPosition(_this._popupCoordinate); + _this._$popupContent.scrollTop(0); + _this._popupOpen = true; + } + }); + //change mouse cursor when over marker + this._map.on('pointermove', function (evt) { + if (evt['dragging']) { + return; + } + var pixel = _this.map.getEventPixel(evt['originalEvent']); + var hit = _this.map.hasFeatureAtPixel(pixel, function (lyrCandidate) { + for (var _i = 0, _a = _this._arrPopupOlLayers; _i < _a.length; _i++) { + var olLayer = _a[_i]; + if (lyrCandidate == olLayer) { + return true; + } + } + return false; + }); + var mapElement = _this.map.getTargetElement(); + mapElement.style.cursor = hit ? 'pointer' : ''; + }); + return true; + }; + /** + * helper to select features + * @private + */ + MapPopupCls.prototype._triggerFeatSelect = function () { + var $currentPopupItemNumber = this._$popupContent.find('.current-popup-item-number'); + var $innerPopup = this._$popupContent.find('.ol-popup-inner'); + var $layerNameSpan = this._$popupContent.find('.current-popup-layer-name'); + this.clearSelection(); + var lyrFeatObj = this._passThroughLayerFeatureArray[this._currentPopupIndex]; + $currentPopupItemNumber.html((this._currentPopupIndex + 1).toFixed()); + $layerNameSpan.html(lyrFeatObj.layerName); + $innerPopup.html(lyrFeatObj.popupContent); + lyrFeatObj.selectionLayer.getSource().addFeature(lyrFeatObj.feature); + for (var _i = 0, _a = this._popupChangedFunctions; _i < _a.length; _i++) { + var f = _a[_i]; + f(this._$popupContent); + } + }; + /** + * + * @param feature - the ol feature + * @param {LayerEsriMapServer} lyr - the map server layer + * @param {string} popupContent - popup content + * @param {string} esriName - esri layer name + */ + MapPopupCls.prototype.addMapServicePopupContent = function (feature, lyr, popupContent, esriName) { + var featLayerObject = new FeatureLayerProperties(feature, lyr, this._popupContentLength, this._selectionLayerLookup[lyr.id], esriName); + featLayerObject.popupContent = popupContent; + this._passThroughLayerFeatureArray.push(featLayerObject); + this._popupContentLength++; + $('.popup-content-length').html(this._popupContentLength.toFixed()); + if (!this._popupOpen) { + this._$popupContent.find('.next-popup').trigger('click'); + this._popupOverlay.setPosition(this._popupCoordinate); + this._$popupContent.scrollTop(0); + this._popupOpen = true; + } + }; + /** + * + * @param pixel - the ol pixel + * @returns feature layer properties + * @private + */ + MapPopupCls.prototype._featuresAtPixel = function (pixel) { + var _this = this; + var layerFeatureObjectArray = []; + this.map.forEachFeatureAtPixel(pixel, function (feature, layer) { + var lyrIndex = _this._arrPopupOlLayers.indexOf(layer); + if (lyrIndex > -1) { + layerFeatureObjectArray.push(new FeatureLayerProperties(feature, _this._arrPopupLayers[lyrIndex], lyrIndex, _this._selectionLayers[lyrIndex])); + } + }); + return layerFeatureObjectArray; + }; + MapPopupCls.prototype.closePopup = function () { + this._checkInit(); + this._popupOpen = false; + this._popupOverlay.setPosition(undefined); + this._$popupCloser[0].blur(); + this.clearSelection(); + this._$popupContent.html(''); + return false; + }; + ; + /** + * + * @param chgFunction - popup change function + */ + MapPopupCls.prototype.addPopupChangedFunction = function (chgFunction) { + this._popupChangedFunctions.push(chgFunction); + }; + /** + * + * @param {LayerBase|*} lyr - the layer being acted on + * @param {object} [selectionStyle={}] the selection style configuration + * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color + * @param {number} [selectionStyle.width=10] the selection width for linear features + * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function + * @returns the new selection layer + * @private + */ + MapPopupCls.prototype._addPopupLayer = function (lyr, selectionStyle) { + this._checkInit(); + selectionStyle = selectionStyle || {}; + selectionStyle.color = selectionStyle.color || 'rgba(255,170,0,0.5)'; + selectionStyle.width = selectionStyle.width || 10; + var theStyle; + if (selectionStyle.olStyle) { + theStyle = selectionStyle.olStyle; + } + else { + theStyle = new custom_ol_1.ol.style.Style({ + stroke: new custom_ol_1.ol.style.Stroke({ + color: selectionStyle.color, + width: selectionStyle.width + }), + image: new custom_ol_1.ol.style.Circle({ + radius: 7, + fill: new custom_ol_1.ol.style.Fill({ color: selectionStyle.color }), + stroke: new custom_ol_1.ol.style.Stroke({ color: selectionStyle.color, width: 1 }) + }), + fill: new custom_ol_1.ol.style.Fill({ + color: selectionStyle.color + }) + }); + } + var selectionLayer = new custom_ol_1.ol.layer.Vector({ + source: new custom_ol_1.ol.source.Vector(), + style: theStyle, + zIndex: 100 + }); + this._selectionLayers.push(selectionLayer); + this._selectionLayerLookup[lyr.id] = selectionLayer; + this.map.addLayer(selectionLayer); + return selectionLayer; + }; + /** + * Add popup to the map + * @param {LayerBase|*} lyr The layer that the popup with act on + * @param {popupCallback} popupContentFunction - popup content function that makes popup info + * @param {object} [selectionStyle={}] the selection style configuration + * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color + * @param {number} [selectionStyle.width=10] the selection width for linear features + * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function + * @returns {object} a reference to the ol selection layer + */ + MapPopupCls.prototype.addVectorPopup = function (lyr, popupContentFunction, selectionStyle) { + var selectionLayer = this._addPopupLayer(lyr, selectionStyle); + this._arrPopupLayerIds.push(lyr.id); + this._arrPopupLayerNames.push(lyr.name); + this._arrPopupLayers.push(lyr); + this._arrPopupOlLayers.push(lyr.olLayer); + this._arrPopupContentFunction.push(popupContentFunction); + return selectionLayer; + }; + ; + /** + * + * @param {LayerBase} lyr - layer + */ + MapPopupCls.prototype.removeVectorPopup = function (lyr) { + var idx = this._arrPopupLayerIds.indexOf(lyr.id); + if (idx > -1) { + this._arrPopupLayerIds.splice(idx, 1); + this._arrPopupLayerNames.splice(idx, 1); + this._arrPopupLayers.splice(idx, 1); + this._arrPopupOlLayers.splice(idx, 1); + this._arrPopupContentFunction.splice(idx, 1); + this._selectionLayers.splice(idx, 1); + delete this._selectionLayerLookup[lyr.id]; + } + }; + /** + * + * @param {LayerEsriMapServer} lyr - map server layer + * @param {object} [selectionStyle={}] the selection style configuration + * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color + * @param {number} [selectionStyle.width=10] the selection width for linear features + * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function + * @returns {object} a reference to the ol selection layer + */ + MapPopupCls.prototype.addMapServicePopup = function (lyr, selectionStyle) { + var selectionLayer = this._addPopupLayer(lyr, selectionStyle); + this._esriMapServiceLayers.push(lyr); + return selectionLayer; + }; + MapPopupCls.prototype.clearSelection = function () { + this._checkInit(); + for (var i = 0; i < this._selectionLayers.length; i++) { + this._selectionLayers[i].getSource().clear(); + } + for (var _i = 0, _a = this._mapClickFunctions; _i < _a.length; _i++) { + var f = _a[_i]; + f(); + } + }; + ; + /** + * Add a function to be called when the map is clicked but before any popups are implemented + * @param {function} func - the map click function + */ + MapPopupCls.prototype.addMapClickFunction = function (func) { + this._mapClickFunctions.push(func); + }; + return MapPopupCls; + }(mapInteractionBase_1.default)); + nm.MapPopupCls = MapPopupCls; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.default = MapPopupCls; + + +/***/ }, +/* 14 */, +/* 15 */, +/* 16 */ +/***/ function(module, exports, __webpack_require__) { + + "use strict"; + var zoomResolutionConvert = __webpack_require__(17); + var provide_1 = __webpack_require__(4); + var makeGuid_1 = __webpack_require__(11); + var nm = provide_1.default('layers'); + var $ = __webpack_require__(3); + /** + * The base layer class + * @abstract + */ + var LayerBase = (function () { + /** + * The base layer for all others + * @param {string} url - url for source + * @param {object} options - config + * @param {string} [options.id=makeGuid()] - layer id + * @param {string} [options.name=Unnamed Layer] - layer name + * @param {number} [options.opacity=1] - opacity + * @param {boolean} [options.visible=true] - default visible + * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28 + * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28 + * @param {object} [options.params={}] - the get parameters to include to retrieve the layer + * @param {number} [options.zIndex=0] - the z index for the layer + * @param {function} [options.loadCallback] - function to call on load, context this is the layer object + * @param {boolean} [options.legendCollapse=false] - if the legend item should be initially collapsed + * @param {boolean} [options.legendCheckbox=true] - if the legend item should have a checkbox for visibility + * @param {boolean} [options.legendContent=undefined] - additional content to add to the legend + */ + function LayerBase(url, options) { + if (options === void 0) { options = {}; } + options = options || {}; + if (typeof url !== 'string') { + throw 'Invalid URL'; + } + this._url = url; + this._params = typeof options.params == 'object' ? options.params : {}; + this._legendCollapse = typeof options.legendCollapse == 'boolean' ? options.legendCollapse : false; + this._legendCheckbox = typeof options.legendCheckbox == 'boolean' ? options.legendCheckbox : true; + this.id = options.id || makeGuid_1.default(); + this._name = options.name || 'Unnamed Layer'; + this.animate = false; + this._opacity = typeof options.opacity == 'number' ? options.opacity : 1; + if (this._opacity > 1) { + this._opacity = 1; + } + else if (this._opacity < 0) { + this._opacity = 0; + } + this._visible = typeof options.visible === 'boolean' ? options.visible : true; + this._source = undefined; + /** + * + * @protected + */ + this._olLayer = undefined; + this._loaded = false; + this._maxResolution = zoomResolutionConvert.zoomToResolution(options.minZoom); + if (typeof this._maxResolution !== 'undefined') { + this._maxResolution += 0.00001; + } + this._minResolution = zoomResolutionConvert.zoomToResolution(options.maxZoom); + this._minZoom = typeof options.minZoom == 'number' ? options.minZoom : undefined; + this._maxZoom = typeof options.maxZoom == 'number' ? options.maxZoom : undefined; + this._zIndex = typeof options.zIndex == 'number' ? options.zIndex : 0; + this.loadCallback = typeof options.loadCallback == 'function' ? options.loadCallback : function () { + }; + this._legendContent = ''; + if (this._legendCheckbox) { + this._legendContent += ("<input type=\"checkbox\" " + (this.visible ? 'checked' : '') + " ") + + ("class=\"legend-check\" id=\"" + this.id + "-legend-layer-check\"><span></span>"); + this._legendContent += "<label for=\"" + this.id + "-legend-layer-check\" class=\"legend-layer-name\">" + this.name + "</label>"; + } + else { + this._legendContent += "<label class=\"legend-layer-name\">" + this.name + "</label>"; + } + this._$legendDiv = null; + this._applyCollapseCalled = false; + this._addLegendContent(typeof options.legendContent === 'string' ? options.legendContent : undefined); + } + /** + * base load function, sets _loaded = true if it is not already + * @protected + * @returns {boolean} if already loaded + */ + LayerBase.prototype._load = function () { + if (this.loaded == true) { + return true; + } + else { + this._loaded = true; + return false; + } + }; + /** + * Get the legend html, be sure to only add to the DOM once + * @returns {string} html for layer wrapped in a div + */ + LayerBase.prototype.getLegendDiv = function () { + return "<div class=\"legend-layer-div\" id=\"" + this.id + "-legend-layer-div\">" + this._legendContent + "</div>"; + }; + /** + * + * @param {string|undefined} additionalContent - additional content to add to legend + * @private + */ + LayerBase.prototype._addLegendContent = function (additionalContent) { + additionalContent = typeof additionalContent == 'string' ? additionalContent : ''; + var addCollapse = additionalContent.indexOf('<ul>') > -1; + if (addCollapse) { + additionalContent = '<span class="legend-items-expander" title="Expand/Collapse">▼</span>' + additionalContent; + } + this._legendContent += additionalContent; + this._$legendDiv = $("#" + this.id + "-legend-layer-div"); + if (this._$legendDiv.length > 0) { + this._$legendDiv.append(additionalContent); + this.applyCollapse(); + } + }; + /** + * add additional content to the legend + * @param {string} [additionalContent=] - additonal content to add + */ + LayerBase.prototype.addLegendContent = function (additionalContent) { + this._addLegendContent(additionalContent); + }; + LayerBase.prototype.applyCollapse = function () { + if (this._applyCollapseCalled) { + console.log('collapse already applied'); + return undefined; + } + this._$legendDiv = $("#" + this.id + "-legend-layer-div"); + if (this._$legendDiv.length > 0) { + var $expander = this._$legendDiv.find('.legend-items-expander'); + if ($expander.length > 0) { + this._applyCollapseCalled = true; + $expander.click(function () { + var $this = $(this); + $this.siblings('ul').slideToggle(); + if ($this.hasClass('legend-layer-group-collapsed')) { + $this.removeClass('legend-layer-group-collapsed'); + $this.html('▼'); + } + else { + $this.addClass('legend-layer-group-collapsed'); + $this.html('▶'); + } + }); + if (this._legendCollapse) { + $expander.trigger('click'); + } + } + } + }; + /** + * trick to refresh the layer + */ + LayerBase.prototype.refresh = function () { + if (this.source) { + this.source.refresh(); + } + }; + Object.defineProperty(LayerBase.prototype, "legendContent", { + /** + * get the legend content + * @type {string} + */ + get: function () { + return this._legendContent; + }, + /** + * set the legend content directly + * @param {string} newVal - new content + * @protected + */ + set: function (newVal) { + this._legendContent = newVal; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(LayerBase.prototype, "params", { + /** + * get the map get params + * @type {object} + */ + get: function () { + return this._params; + }, + /** + * set the map get params + * @param {object} newParams - new get params + * @protected + */ + set: function (newParams) { + this._params = newParams; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(LayerBase.prototype, "minResolution", { + /** + * get the minimum resolution + * @type {number|*} + */ + get: function () { + return this._minResolution; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(LayerBase.prototype, "maxResolution", { + /** + * get the maximum resolution + * @type {number|*} + */ + get: function () { + return this._maxResolution; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(LayerBase.prototype, "minZoom", { + /** + * get min zoom + * @type {number|*} + */ + get: function () { + return this._minZoom; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(LayerBase.prototype, "maxZoom", { + /** + * get max zoom + * @type {number|*} + */ + get: function () { + return this._maxZoom; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(LayerBase.prototype, "url", { + /** + * get the url + * @type {string} + */ + get: function () { + return this._url; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(LayerBase.prototype, "visible", { + /** + * Get the layer visibility + * @type {boolean} + */ + get: function () { + return this._visible; + }, + /** + * set the visibility + * @param visibility + */ + set: function (visibility) { + this.setVisible(visibility); + }, + enumerable: true, + configurable: true + }); + LayerBase.prototype.setVisible = function (visibility) { + this._visible = visibility; + if (this.olLayer) { + this.olLayer.setVisible(this._visible); + if (visibility && !this._loaded) { + this._load(); + } + } + }; + Object.defineProperty(LayerBase.prototype, "opacity", { + /** + * Get the layer opacity + * @type {number} + */ + get: function () { + return this._opacity; + }, + /** + * Set the layer opacity + * @param {number} opacity - layer opacity + */ + set: function (opacity) { + this._opacity = opacity; + if (this.olLayer) { + this.olLayer.setOpacity(this._opacity); + } + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(LayerBase.prototype, "name", { + /** + * Get the layer name + * @type {string} + */ + get: function () { + return this._name; + }, + /** + * set the layer name + * @param {string} newName - the new name + */ + set: function (newName) { + this._name = newName; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(LayerBase.prototype, "loaded", { + /** + * Check if the layer is loaded + * @type {boolean} + */ + get: function () { + return this._loaded; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(LayerBase.prototype, "source", { + /** + * get the layer source + * @type {*} + */ + get: function () { + return this.getSource(); + }, + enumerable: true, + configurable: true + }); + LayerBase.prototype.getSource = function () { + return this._source; + }; + Object.defineProperty(LayerBase.prototype, "zIndex", { + /** + * get the z index + */ + get: function () { + return this._zIndex; + }, + /** + * set the z index + */ + set: function (newZ) { + this._zIndex = newZ; + }, + enumerable: true, + configurable: true + }); + LayerBase.prototype.setZIndex = function (newZ) { + }; + Object.defineProperty(LayerBase.prototype, "olLayer", { + /** + * the the ol layer + */ + get: function () { + return this.getOlLayer(); + }, + enumerable: true, + configurable: true + }); + LayerBase.prototype.getOlLayer = function () { + return this._olLayer; + }; + return LayerBase; + }()); + exports.LayerBase = LayerBase; + nm.LayerBase = LayerBase; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.default = LayerBase; + + +/***/ }, +/* 17 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Created by gavorhes on 12/14/2015. + */ + "use strict"; + var provide_1 = __webpack_require__(4); + var nm = provide_1.default('olHelpers.zoomResolutionConvert'); + var _zoomResLookup = [ + 156543.03392804097, + 78271.51696402048, + 39135.75848201024, + 19567.87924100512, + 9783.93962050256, + 4891.96981025128, + 2445.98490512564, + 1222.99245256282, + 611.49622628141, + 305.748113140705, + 152.8740565703525, + 76.43702828517625, + 38.21851414258813, + 19.109257071294063, + 9.554628535647032, + 4.777314267823516, + 2.388657133911758, + 1.194328566955879, + 0.5971642834779395, + 0.29858214173896974, + 0.14929107086948487, + 0.07464553543474244, + 0.03732276771737122, + 0.01866138385868561, + 0.009330691929342804, + 0.004665345964671402, + 0.002332672982335701, + 0.0011663364911678506, + 0.0005831682455839253 //28 + ]; + /** + * Get the resolution given the zoom level + * @param {number} zoomLevel - the zoom level + * @returns {number|*} the map resolution + */ + function zoomToResolution(zoomLevel) { + "use strict"; + if (typeof zoomLevel == 'number') { + if (zoomLevel % 1 === 0 && zoomLevel >= 0 && zoomLevel <= 28) { + return _zoomResLookup[zoomLevel]; + } + else { + console.log("invalid zoom level provided: " + zoomLevel); + return undefined; + } + } + else { + return undefined; + } + } + exports.zoomToResolution = zoomToResolution; + nm.zoomToResolution = zoomToResolution; + /** + * Get resolution from the zoom level + * @param {number} resolution - the resolution + * @returns {number|*} the zoom level + */ + function resolutionToZoom(resolution) { + for (var i = 0; i < _zoomResLookup.length; i++) { + if (resolution >= _zoomResLookup[i]) { + return i; + } + } + return 0; + } + exports.resolutionToZoom = resolutionToZoom; + nm.resolutionToZoom = resolutionToZoom; + + +/***/ }, +/* 18 */, +/* 19 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Created by gavorhes on 12/14/2015. + */ + "use strict"; + var colors = __webpack_require__(20); + var provide_1 = __webpack_require__(4); + var LayerItsInventory_1 = __webpack_require__(21); + var nm = provide_1.default('collections'); + var itsConfig = [ + { + name: 'Camera', + itsType: 'cctv', + minZoom: 11, + itsIconConfig: { + prop: 'owner', + defaultName: 'WisDOT', + defaultIcon: 'cctv.png', + iconArray: [ + ['City of Madison', 'Madison', 'cctv-mad.png'] + ] + } + }, + { + name: 'Message Signs', + itsType: 'DMS', + minZoom: 11, + itsIconConfig: { + prop: 'dmsType', + defaultName: 'DMS', + defaultIcon: 'dms.png', + iconArray: [ + ['pcms', 'PCMS', 'pcms.png'] + ] + } + }, + { name: 'ATR', itsType: 'atr', minZoom: 8, itsIcon: 'atr.png', visible: false }, + { name: 'Lighting', itsType: 'light', minZoom: 16, itsIcon: 'streetlight.png', visible: false, onDemand: true }, + { name: 'Bluetooth', itsType: 'blue', minZoom: 10, itsIcon: 'bluetooth.png', visible: false }, + { name: 'Cabinets', itsType: 'cabinet', minZoom: 10, itsIcon: 'cabinet.png', visible: false }, + { name: 'Hut', itsType: 'hut', minZoom: 10, itsIcon: 'hut.png', visible: false }, + { name: 'Vault', itsType: 'vault', minZoom: 13, itsIcon: 'vault.png', visible: false }, + { name: 'Advisory Radio', itsType: 'har', minZoom: 10, itsIcon: 'har.png', visible: false }, + { + name: 'Loop Detectors', + itsType: 'loop', + legendCollapse: true, + minZoom: 14, + visible: false, + itsIconConfig: { + prop: 'dtctrType', + defaultName: 'Other', + defaultIcon: 'loopdetectorother.png', + iconArray: [ + ['detector', 'Detector', 'loopdetector.png'], + ['long', 'Long', 'loopdetectorlong.png'], + ['zone', 'Zone', 'loopdetectorzone.png'] + ] + }, + onDemand: true + }, + { name: 'Microwave', itsType: 'microwave', minZoom: 14, itsIcon: 'microwave.png', visible: false }, + { name: 'Pull Box', itsType: 'pull', minZoom: 14, itsIcon: 'pullbox.png', visible: false, onDemand: true }, + { name: 'RWIS', itsType: 'rwis', minZoom: 7, itsIcon: 'rwis.png', visible: false }, + { name: 'Ramp Gates', itsType: 'gate', minZoom: 10, itsIcon: 'rampgate.png', visible: false }, + { name: 'Ramp Meter', itsType: 'meter', minZoom: 10, itsIcon: 'rampmeter.png', visible: false }, + { name: 'Signal', itsType: 'signal', minZoom: 13, itsIcon: 'signal.png', visible: false, onDemand: true }, + { name: 'Tower', itsType: 'tower', minZoom: 10, itsIcon: 'tower.png', visible: false }, + { + name: 'Trench', + itsType: 'trench', + onDemand: true, + visible: false, + onDemandDelay: 500, + minZoom: 15, + legendCollapse: true, + itsLineConfig: { + prop: 'owner', + //defaultName: 'Other', + //defaultWidth: 7, + defaultColor: colors.hexAlphaToRgbOrRgba('#747474', 0.8), + lineArray: [ + ['WisDOT', 'WisDOT', colors.hexAlphaToRgbOrRgba('#FF032F', 0.7)], + ['WIN', 'WIN', colors.hexAlphaToRgbOrRgba('#FFC632', 0.7)], + ['USXchange', 'USXchange', colors.hexAlphaToRgbOrRgba('#2DFF46', 0.7)], + ['AT&T', 'AT&T', colors.hexAlphaToRgbOrRgba('#ff2be5', 0.7)], + ['Touch America', 'Touch America', colors.hexAlphaToRgbOrRgba('#52f3ff', 0.7)], + ['Qwest', 'Qwest', colors.hexAlphaToRgbOrRgba('#9278ff', 0.7)], + ['McLeodUSA', 'McLeodUSA', colors.hexAlphaToRgbOrRgba('#2926FF', 0.7)], + ['CINC', 'CINC', colors.hexAlphaToRgbOrRgba('#CB00FF', 0.7)], + ['City of Madison', 'Madison', colors.hexAlphaToRgbOrRgba('#000380', 0.7)] + ] + } + } + ]; + var ItsLayerCollection = (function () { + /** + * Create a collection of all ITS layers + * @param {ol.Map} theMap the openlayers map + * @param {Array} [exclude=[]] array of Its layer identifiers to exclude + * + * BLUE Bluetooth Detector - Bluetooth Detector + * CABINET Cabinets - The cabinets + * CCTV Camera - Traffic Cameras + * HUT Communication Hut - Communication Hut + * VAULT Communication Vault - The communication vaults + * HAR Highway Advisory Radio - Advisory Radios + * LIGHT Lighting - Lighting + * LOOP Loop Detectors - Loop Detectors + * DMS Message Board - Message Boards and Signs + * MICROWAVE Microwave Detector - Microwave Detectors + * PULL Pull Box - A pull box + * RWIS RWIS - Road weather information system + * GATE Ramp Gate - The ramp Gates + * METER Ramp Meter - The ramp meters + * SIGNAL Signal - Traffic Signal + * TOWER Tower - The towers + * TRENCH + */ + function ItsLayerCollection(theMap, exclude) { + this._map = theMap; + this._layers = []; + exclude = typeof exclude == 'object' ? exclude : []; + for (var i = 0; i < itsConfig.length; i++) { + var lyrConfig = itsConfig[i]; + var addLayer = true; + for (var j = 0; j < exclude.length; j++) { + if (exclude[j] == lyrConfig.itsType) { + addLayer = false; + break; + } + } + if (addLayer) { + var inventLyr = new LayerItsInventory_1.default(lyrConfig); + this._map.addLayer(inventLyr.olLayer); + this._layers.push(inventLyr); + } + } + } + Object.defineProperty(ItsLayerCollection.prototype, "layers", { + /** + * Return the array of layers in this collection + * @returns {Array<LayerItsInventory>} an array of layers + */ + get: function () { + return this._layers; + }, + enumerable: true, + configurable: true + }); + return ItsLayerCollection; + }()); + exports.ItsLayerCollection = ItsLayerCollection; + nm.ItsLayerCollection = ItsLayerCollection; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.default = ItsLayerCollection; + + +/***/ }, +/* 20 */ +/***/ function(module, exports, __webpack_require__) { + + "use strict"; + /** + * Created by gavorhes on 11/3/2015. + */ + var provide_1 = __webpack_require__(4); + var chk = __webpack_require__(10); + var nm = provide_1.default('util.colors'); + /** + * helper function to convert to hex + * @param {number|string} x - the number to convert to hex + * @returns {string} number as hex + * @private + */ + function _hex(x) { + var hexDigits = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"]; + return isNaN(x) ? "00" : hexDigits[(x - x % 16) / 16] + hexDigits[x % 16]; + } + /** + * converts an RGB string to hex + * @param {string} rgb - rgb color + * @returns {string} rbg as hex + */ + function rgb2hex(rgb) { + var rgb1 = rgb.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/); + return ("#" + _hex(rgb1[1]) + _hex(rgb1[2]) + _hex(rgb1[3])).toUpperCase(); + } + exports.rgb2hex = rgb2hex; + nm.rgb2hex = rgb2hex; + /** + * Convert hex string to RGB or RGBA string + * @param {string} hexString - hex color string + * @param {number} [alphaVal=undefined] Alpha value + * @returns {string} - rgb or rgba color + */ + function hexAlphaToRgbOrRgba(hexString, alphaVal) { + hexString = ((hexString.charAt(0) == "#") ? hexString.substring(1, 7) : hexString); + var r = parseInt(hexString.substring(0, 2), 16).toString() || '0'; + var g = parseInt(hexString.substring(2, 4), 16).toString() || '0'; + var b = parseInt(hexString.substring(4, 6), 16).toString() || '0'; + if (alphaVal) { + return "rgba(" + r + "," + g + "," + b + "," + alphaVal + ")"; + } + else { + return "rgba(" + r + "," + g + "," + b + ")"; + } + } + exports.hexAlphaToRgbOrRgba = hexAlphaToRgbOrRgba; + nm.hexAlphaToRgbOrRgba = hexAlphaToRgbOrRgba; + /** + * adds alpha value to rgb string 'rgb(r, b, g)', returns 'rgba(r, g, b, a)' + * @param {string} rgb - rgb color + * @param {number} alpha - alpha value 0 to 1 + * @returns {string} rgba color + */ + function rgbToRgba(rgb, alpha) { + var pieces = rgb.split(','); + pieces[0] = pieces[0].replace('rgb', 'rgba'); + pieces[2] = pieces[2].replace(')', ''); + pieces.push(' ' + alpha.toFixed(1) + ')'); + return pieces.join(','); + } + exports.rgbToRgba = rgbToRgba; + nm.rgbToRgba = rgbToRgba; + /** + * @typedef {function} colorLookupByNumber + * @param {number} num - the number to use to retrieve the color + * @returns {string} rgb color + */ + /** + * Make a blue green red gradient + * @param {number} minVal - minimum value + * @param {number} maxVal - maximum value + * @param {boolean} flipColors - if the colors should be flipped + * @returns {colorLookupByNumber} color lookup function + */ + function makeBlueGreenRedGradient(minVal, maxVal, flipColors) { + if (typeof flipColors != "boolean") { + flipColors = false; + } + return function (theVal) { + var r, g, b; + var ratio; + if (chk.undefinedOrNull(theVal)) { + return 'rgb(100,100,100)'; + } + var percent = (theVal - minVal) / (maxVal - minVal); + if (flipColors == true) { + percent = 1 - percent; + } + if (percent >= 1) { + r = 255; + g = 0; + b = 0; + } + else if (percent <= 0) { + r = 0; + g = 0; + b = 255; + } + else if (percent < .25) { + // green up, blue constant + r = 0; + g = Math.floor(255 * percent / 0.25); + b = 255; + } + else if (percent < 0.50) { + //blue down, green constant + ratio = (percent - 0.25) / 0.25; + r = 0; + g = 255; + b = 255 - Math.floor(255 * ratio); + } + else if (percent < 0.75) { + // red up, green constant + ratio = (percent - 0.5) / 0.25; + r = Math.floor(255 * ratio); + g = 255; + b = 0; + } + else { + // green down, red constant + ratio = (percent - 0.75) / 0.25; + r = 255; + g = 255 - Math.floor(255 * ratio); + b = 0; + } + r = r.toFixed(); + g = g.toFixed(); + b = b.toFixed(); + return 'rgb(' + r + ',' + g + ',' + b + ')'; + }; + } + exports.makeBlueGreenRedGradient = makeBlueGreenRedGradient; + nm.makeBlueGreenRedGradient = makeBlueGreenRedGradient; + /** + * Create a function that will return colors based on a gradient + * @param {number} median - median value + * @param {number} stdDev - standard deviation + * @param {boolean} flipColors - if the colors should be flipped + * @returns {colorLookupByNumber} color lookup function + */ + function makeBlueGreenRedGradientZScore(median, stdDev, flipColors) { + var grd = makeBlueGreenRedGradient(-2.5, 2.5, flipColors); + return function (theVal) { + var zScore; + if (theVal == null) { + zScore = null; + } + else { + zScore = (theVal - median) / stdDev; + } + return grd(zScore); + }; + } + exports.makeBlueGreenRedGradientZScore = makeBlueGreenRedGradientZScore; + nm.makeBlueGreenRedGradientZScore = makeBlueGreenRedGradientZScore; + + +/***/ }, +/* 21 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Created by gavorhes on 12/8/2015. + */ + "use strict"; + var __extends = (this && this.__extends) || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + var LayerBaseVectorGeoJson_1 = __webpack_require__(22); + var mapPopup_1 = __webpack_require__(12); + var provide_1 = __webpack_require__(4); + var custom_ol_1 = __webpack_require__(5); + var nm = provide_1.default('layers'); + var $ = __webpack_require__(3); + function checkStyleNumber(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig) { + "use strict"; + //make sure one and only one configuration is defined; + var configCount = 0; + if (typeof itsIcon == 'string') { + configCount++; + } + if (typeof itsLineStyle == 'object') { + itsLineStyle.width = typeof itsLineStyle.width == 'number' ? itsLineStyle.width : 5; + itsLineStyle.color = typeof itsLineStyle.color == 'string' ? itsLineStyle.color : 'red'; + configCount++; + } + if (typeof itsIconConfig == 'object') { + itsIconConfig.defaultName = itsIconConfig.defaultName || 'Other'; + if (typeof itsIconConfig.iconArray == 'undefined') { + itsIconConfig.iconArray = []; + } + configCount++; + } + if (typeof itsLineConfig == 'object') { + itsLineConfig.defaultName = itsLineConfig.defaultName || 'Other'; + itsLineConfig.defaultWidth = itsLineConfig.defaultWidth || 5; + itsLineConfig.defaultColor = itsLineConfig.defaultColor || 'red'; + if (typeof itsLineConfig.lineArray == 'undefined') { + itsLineConfig.lineArray = []; + } + // set the width if not defined + for (var i = 0; i < itsLineConfig.lineArray.length; i++) { + if (itsLineConfig.lineArray[i].length == 3) { + itsLineConfig.lineArray[i].push(5); + } + } + configCount++; + } + if (configCount > 1) { + throw 'Only one style config can be defined'; + } + } + /** + * + * @param {string} [itsIcon=undefined] the ITS device type icon image see http://transportal.cee.wisc.edu/its/inventory/icons/ + * + * @param {object} [itsLineStyle=undefined] A single line style + * @param {string} itsLineStyle.color the line color as rgb or hex + * @param {number} [itsLineStyle.width=5] the line width + * + * @param {object} [itsIconConfig=undefined] The icon subtype configuration + * @param {string} itsIconConfig.prop The property used to define icon attribute symbolization + * @param {string} itsIconConfig.defaultName The default name to be used if no other match is found + * @param {string} itsIconConfig.defaultIcon The default icon to be used for no other matches + * @param {object} [itsIconConfig.iconArray=[]] an array, items with format [property, name, img] + * + * @param {object} [itsLineConfig=undefined] The property used to define icon attribute symbolization + * @param {string} itsLineConfig.prop The property used to define icon attribute symbolization + * @param {string} [itsLineConfig.defaultName=Other] The default name to be used if no other match is found + * @param {string} [itsLineConfig.defaultColor=red] The default line color to be used for no other matches + * @param {number} [itsLineConfig.defaultWidth=5] The default line width to be used for no other matches + * @param {object} [itsLineConfig.lineArray=[]] an array, items with format [property, name, color, optional width] + * @returns {*} undefined, style, or style function + */ + function defineStyle(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig) { + "use strict"; + checkStyleNumber(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig); + var _iconUrlRoot = 'http://transportal.cee.wisc.edu/its/inventory/icons/'; + if (itsIcon) { + return new custom_ol_1.ol.style.Style({ + image: new custom_ol_1.ol.style.Icon({ + src: _iconUrlRoot + itsIcon, + crossOrigin: 'anonymous' + }) + }); + } + else if (itsLineStyle) { + return new custom_ol_1.ol.style.Style({ + stroke: new custom_ol_1.ol.style.Stroke({ + color: itsLineStyle.color, + width: itsLineStyle.width + }) + }); + } + else if (itsIconConfig) { + return function (feature, resolution) { + var symbolProp = feature.getProperties()[itsIconConfig.prop]; + var iconUrl = _iconUrlRoot + itsIconConfig.defaultIcon; + for (var i = 0; i < itsIconConfig.iconArray.length; i++) { + var thisProp = itsIconConfig.iconArray[i]; + if (symbolProp.trim().toLocaleLowerCase() == thisProp[0].trim().toLocaleLowerCase()) { + iconUrl = _iconUrlRoot + thisProp[2]; + break; + } + } + return [new custom_ol_1.ol.style.Style({ + image: new custom_ol_1.ol.style.Icon({ + src: iconUrl, + crossOrigin: 'anonymous' + }) + })]; + }; + } + else if (itsLineConfig) { + return function (feature) { + var symbolProp = feature.getProperties()[itsLineConfig.prop]; + var colr = itsLineConfig.defaultColor || 'red'; + var width = itsLineConfig.defaultWidth || 5; + for (var i = 0; i < itsLineConfig.lineArray.length; i++) { + var thisProp = itsLineConfig.lineArray[i]; + if (symbolProp.trim().toLocaleLowerCase() == thisProp[0].trim().toLocaleLowerCase()) { + colr = thisProp[2]; + width = thisProp[3]; + break; + } + } + return [new custom_ol_1.ol.style.Style({ + stroke: new custom_ol_1.ol.style.Stroke({ + color: colr, + width: width + }) + })]; + }; + } + else { + return undefined; + } + } + /** + * + * @param {string} [itsIcon=undefined] the ITS device type icon image see http://transportal.cee.wisc.edu/its/inventory/icons/ + * + * @param {object} [itsLineStyle=undefined] A single line style + * @param {string} itsLineStyle.color the line color as rgb or hex + * @param {number} [itsLineStyle.width=5] the line width + * + * @param {object} [itsIconConfig=undefined] The icon subtype configuration + * @param {string} itsIconConfig.prop The property used to define icon attribute symbolization + * @param {string} itsIconConfig.defaultName The default name to be used if no other match is found + * @param {string} itsIconConfig.defaultIcon The default icon to be used for no other matches + * @param {object} [itsIconConfig.iconArray=[]] an array, items with format [property, name, img] + * + * @param {object} [itsLineConfig=undefined] The property used to define icon attribute symbolization + * @param {string} itsLineConfig.prop The property used to define icon attribute symbolization + * @param {string} [itsLineConfig.defaultName=Other] The default name to be used if no other match is found + * @param {string} [itsLineConfig.defaultColor=red] The default line color to be used for no other matches + * @param {number} [itsLineConfig.defaultWidth=5] The default line width to be used for no other matches + * @param {object} [itsLineConfig.lineArray=[]] an array, items with format [property, name, color, optional width] + * @returns {string} html to be added to the legend + */ + function defineLegend(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig) { + "use strict"; + var iconHeight = 17; + checkStyleNumber(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig); + var _iconUrlRoot = 'http://transportal.cee.wisc.edu/its/inventory/icons/'; + if (itsIcon) { + return "<img src=\"" + (_iconUrlRoot + itsIcon) + "\" class=\"legend-layer-icon\" height=\"" + iconHeight + "\">"; + } + else if (itsLineStyle) { + return "<hr style=\"height: " + itsLineStyle.width + "px; background-color: " + itsLineStyle.color + "\">"; + } + else if (itsIconConfig) { + var outHtml = ''; + outHtml += '<ul>'; + for (var _i = 0, _a = itsIconConfig.iconArray; _i < _a.length; _i++) { + var a = _a[_i]; + outHtml += "<li><span class=\"legend-layer-subitem\">" + a[1] + "</span><img src=\"" + (_iconUrlRoot + a[2]) + "\" class=\"legend-layer-icon\" height=\"" + iconHeight + "\">"; + } + outHtml += ("<li><span class=\"legend-layer-subitem\">" + itsIconConfig.defaultName + "</span>") + + ("<img src=\"" + (_iconUrlRoot + itsIconConfig.defaultIcon) + "\" class=\"legend-layer-icon\" height=\"" + iconHeight + "\"></li>"); + outHtml += '</ul>'; + return outHtml; + } + else if (itsLineConfig) { + var outHtml = ''; + outHtml += '<ul>'; + for (var _b = 0, _c = itsLineConfig.lineArray; _b < _c.length; _b++) { + var ls = _c[_b]; + outHtml += ("<li><span class=\"legend-layer-subitem\">" + ls[1] + "</span>") + + ("<hr style=\"height: " + ls[3] + "px; background-color: " + ls[2] + "\">"); + } + outHtml += ("<li><span class=\"legend-layer-subitem\">" + itsLineConfig.defaultName + "</span>") + + ("<hr style=\"height: " + itsLineConfig.defaultWidth + "px; background-color: " + itsLineConfig.defaultColor + "\"></li>"); + outHtml += '</ul>'; + return outHtml; + } + else { + return ''; + } + } + /** + * Its Layer class + * @augments LayerBaseVectorGeoJson + */ + var LayerItsInventory = (function (_super) { + __extends(LayerItsInventory, _super); + /** + * ITS device layer, types available at http://transportal.cee.wisc.edu/its/inventory/ + * @param {object} options - config + * @param {string} [options.id] - layer id + * @param {string} [options.name=Unnamed Layer] - layer name + * @param {number} [options.opacity=1] - opacity + * @param {boolean} [options.visible=true] - default visible + * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28 + * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28 + * @param {object} [options.params={}] the get parameters to include to retrieve the layer + * @param {number} [options.zIndex=0] the z index for the layer + * @param {function} [options.loadCallback] function to call on load, context this is the layer object + * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed + * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility + * @param {boolean} [options.legendContent] additional content to add to the legend + * + * @param {boolean} [options.autoLoad=false] if the layer should auto load if not visible + * @param {object|*} [options.style=undefined] the layer style, use openlayers default style if not defined + * @param {boolean} [options.onDemand=false] if the layer should be loaded by extent on map move + * @param {number} [options.onDemandDelay=300] delay before the map move callback should be called + * @param {MapMoveCls} [options.mapMoveObj=mapMove] alternate map move object for use with multi map pages + * + * @param {string} options.itsType the ITS device type, use the url flag at http://transportal.cee.wisc.edu/its/inventory/ + * @param {boolean} [options.addPopup=true] if the popup should be added automatically + * + * @param {string} [options.itsIcon=undefined] the ITS device type icon image see http://transportal.cee.wisc.edu/its/inventory/icons/ + * + * @param {object} [options.itsLineStyle=undefined] A single line style + * @param {string} options.itsLineStyle.color the line color as rgb or hex + * @param {number} [options.itsLineStyle.width=5] the line width + * + * @param {object} [options.itsIconConfig=undefined] The icon subtype configuration + * @param {string} options.itsIconConfig.prop The property used to define icon attribute symbolization + * @param {string} options.itsIconConfig.defaultName The default name to be used if no other match is found + * @param {string} options.itsIconConfig.defaultIcon The default icon to be used for no other matches + * @param {object} [options.itsIconConfig.iconArray=[]] an array, items with format [property, name, img] + * + * @param {object} [options.itsLineConfig=undefined] The property used to define icon attribute symbolization + * @param {string} options.itsLineConfig.prop The property used to define icon attribute symbolization + * @param {string} [options.itsLineConfig.defaultName=Other] The default name to be used if no other match is found + * @param {string} [options.itsLineConfig.defaultColor=red] The default line color to be used for no other matches + * @param {number} [options.itsLineConfig.defaultWidth] The default line width to be used for no other matches + * @param {object} [options.itsLineConfig.lineArray=[]] an array, items with format [property, name, color, optional width = 5] + */ + function LayerItsInventory(options) { + if (typeof options.itsType !== 'string') { + throw 'its type must be defined'; + } + var addToLegend = ''; + // define a style with the helper function if it is not explicitly defined + if (typeof options.style == 'undefined') { + options.style = defineStyle(options.itsIcon, options.itsLineStyle, options.itsIconConfig, options.itsLineConfig); + addToLegend = defineLegend(options.itsIcon, options.itsLineStyle, options.itsIconConfig, options.itsLineConfig); + } + options.params = typeof options.params == 'object' ? options.params : {}; + $.extend(options.params, { format: 'JSON', resource: options.itsType }); + _super.call(this, 'http://transportal.cee.wisc.edu/its/inventory/', options); + //add any additional content to the legend + this.addLegendContent(addToLegend); + options.addPopup = typeof options.addPopup == 'boolean' ? options.addPopup : true; + if (options.addPopup) { + mapPopup_1.default.addVectorPopup(this, function (props) { + return ("<iframe src=\"http://transportal.cee.wisc.edu/its/inventory/?feature=" + props['featureGuid'] + "\" ") + + "height=\"250\" width=\"350\"></iframe>"; + }); + } + } + /** + * callback to generate the parameters passed in the get request + * @callback makeGetParams + * @param {object} extent - extent object + * @param {number} extent.minX - minX + * @param {number} extent.minY - minY + * @param {number} extent.maxX - maxX + * @param {number} extent.maxY - maxY + * @param {number} zoomLevel - zoom level + */ + LayerItsInventory.prototype.mapMoveMakeGetParams = function (extent, zoomLevel) { + _super.prototype.mapMoveMakeGetParams.call(this, extent, zoomLevel); + var lowerLeft = new custom_ol_1.ol.geom.Point([extent.minX, extent.minY]); + lowerLeft.transform(this.mapProj, this._projection4326); + var lowerLeftCoordinates = lowerLeft.getCoordinates(); + var upperRight = new custom_ol_1.ol.geom.Point([extent.maxX, extent.maxY]); + upperRight.transform(this.mapProj, this._projection4326); + var upperRightCoordinates = upperRight.getCoordinates(); + $.extend(this.mapMoveParams, { + L: lowerLeftCoordinates[0], + R: upperRightCoordinates[0], + B: lowerLeftCoordinates[1], + T: upperRightCoordinates[1] + }); + }; + return LayerItsInventory; + }(LayerBaseVectorGeoJson_1.default)); + nm.LayerItsInventory = LayerItsInventory; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.default = LayerItsInventory; + + +/***/ }, +/* 22 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Created by gavorhes on 11/2/2015. + */ + "use strict"; + var __extends = (this && this.__extends) || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + var LayerBaseVector_1 = __webpack_require__(23); + var provide_1 = __webpack_require__(4); + var custom_ol_1 = __webpack_require__(5); + var nm = provide_1.default('layers'); + var $ = __webpack_require__(3); + /** + * The Vector GeoJson Layer + * @augments LayerBaseVector + */ + var LayerBaseVectorGeoJson = (function (_super) { + __extends(LayerBaseVectorGeoJson, _super); + /** + * @param {string|undefined|null} url - resource url, set to '' to make blank layer + * @param {object} options - config + * @param {string} [options.id] - layer id + * @param {string} [options.name=Unnamed Layer] - layer name + * @param {number} [options.opacity=1] - opacity + * @param {boolean} [options.visible=true] - default visible + * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28 + * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28 + * @param {object} [options.params={}] the get parameters to include to retrieve the layer + * @param {number} [options.zIndex=0] the z index for the layer + * @param {function} [options.loadCallback] function to call on load, context this is the layer object + * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed + * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility + * @param {boolean} [options.legendContent] additional content to add to the legend + * + * @param {boolean} [options.autoLoad=false] if the layer should auto load if not visible + * @param {object} [options.style=undefined] the layer style, use openlayers default style if not defined + * @param {boolean} [options.onDemand=false] if the layer should be loaded by extent on map move + * @param {number} [options.onDemandDelay=300] delay before the map move callback should be called + * + * @param {object} [options.transform={}] SR transform, set as false for no transform + * @param {string} options.transform.dataProjection=EPSG:4326 the data CRS + * @param {string} options.transform.featureProjection=EPSG:3857 the feature/map CRS + * @param {mapMoveMakeGetParams} [options.mapMoveMakeGetParams=function(lyr, extent, zoomLevel){}] function to create additional map move params + * @param {MapMoveCls} [options.mapMoveObj=mapMove] alternate map move object for use with multi map pages + */ + function LayerBaseVectorGeoJson(url, options) { + url = typeof url == 'string' ? url : ''; + _super.call(this, url, options); + this._geoJsonFormat = new custom_ol_1.ol.format.GeoJSON(); + this._transform = options.transform || { dataProjection: "EPSG:4326", featureProjection: "EPSG:3857" }; + if (this.autoLoad || this.visible) { + this._load(); + } + } + /** + * add feature collection + * @param {object} featureCollection - as geojson object + */ + LayerBaseVectorGeoJson.prototype.addFeatures = function (featureCollection) { + if (this._transform.dataProjection == 'EPSG:3857' && this._transform.featureProjection == 'EPSG:3857') { + this._source.addFeatures(this._geoJsonFormat.readFeatures(featureCollection)); + } + else { + this._source.addFeatures(this._geoJsonFormat.readFeatures(featureCollection, this._transform)); + } + }; + /** + * trigger load features + * @protected + * @returns {boolean} if already loaded + */ + LayerBaseVectorGeoJson.prototype._load = function () { + var _this = this; + if (_super.prototype._load.call(this)) { + return true; + } + $.get(this._url, this._params, function (d) { + _this.addFeatures(d); + _this.loadCallback(_this); + }, 'json').fail(function () { + this._loaded = false; + }); + return false; + }; + /** + * callback function on map move + * @param {object} d the json response + * @override + */ + LayerBaseVectorGeoJson.prototype.mapMoveCallback = function (d) { + _super.prototype.mapMoveCallback.call(this, d); + this._source.addFeatures(this._geoJsonFormat.readFeatures(d, this._transform)); + }; + return LayerBaseVectorGeoJson; + }(LayerBaseVector_1.LayerBaseVector)); + nm.LayerBaseVectorGeoJson = LayerBaseVectorGeoJson; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.default = LayerBaseVectorGeoJson; + + +/***/ }, +/* 23 */ +/***/ function(module, exports, __webpack_require__) { + + "use strict"; + var __extends = (this && this.__extends) || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + var LayerBase_1 = __webpack_require__(16); + var mapMove_1 = __webpack_require__(7); + var provide_1 = __webpack_require__(4); + var custom_ol_1 = __webpack_require__(5); + var $ = __webpack_require__(3); + var g = new custom_ol_1.ol.Map({}); + var nm = provide_1.default('layers'); + /** + * The Vector layer base + * @augments LayerBase + * @abstract + */ + var LayerBaseVector = (function (_super) { + __extends(LayerBaseVector, _super); + /** + * The base vector layer + * @param {string} url - pass an empty string to prevent default load and add from a json source + * @param {object} options - config + * @param {string} [options.id] - layer id + * @param {string} [options.name=Unnamed Layer] - layer name + * @param {number} [options.opacity=1] - opacity + * @param {boolean} [options.visible=true] - default visible + * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28 + * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28 + * @param {object} [options.params={}] the get parameters to include to retrieve the layer + * @param {number} [options.zIndex=0] the z index for the layer + * @param {function} [options.loadCallback] function to call on load, context this is the layer object + * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed + * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility + * @param {boolean} [options.legendContent] additional content to add to the legend + * + * @param {boolean} [options.autoLoad=false] if the layer should auto load if not visible + * @param {object} [options.style=undefined] the layer style, use openlayers default style if not defined + * @param {boolean} [options.onDemand=false] if the layer should be loaded by extent on map move + * @param {number} [options.onDemandDelay=300] delay before the map move callback should be called + * @param {mapMoveMakeGetParams} [options.mapMoveMakeGetParams=function(lyr, extent, zoomLevel){}] function to create additional map move params + * @param {MapMoveCls} [options.mapMoveObj=mapMove] alternate map move object for use with multi map pages + * + */ + function LayerBaseVector(url, options) { + if (options === void 0) { options = {}; } + _super.call(this, url, options); + options = options; + //prevent regular load if no url has been provided + if (this.url.trim() == '') { + this._loaded = true; + } + this._style = typeof options.style == 'undefined' ? undefined : options.style; + if (this.visible) { + this._autoLoad = true; + } + else { + this._autoLoad = (typeof options['autoLoad'] == 'boolean' ? options['autoLoad'] : false); + } + this._onDemand = typeof options.onDemand == 'boolean' ? options.onDemand : false; + this._onDemandDelay = typeof options.onDemandDelay == 'number' ? options.onDemandDelay : 300; + if (options.mapMoveObj) { + this._mapMove = options.mapMoveObj; + } + else { + this._mapMove = this._onDemand ? mapMove_1.default : undefined; + } + this._mapMoveMakeGetParams = typeof options.mapMoveMakeGetParams == 'function' ? options.mapMoveMakeGetParams : + function () { return {}; }; + if (this._onDemand) { + this._loaded = true; + this._mapMoveParams = {}; + this._mapMove.checkInit(); + this._mapMove.addVectorLayer(this); + } + this._source = new custom_ol_1.ol.source.Vector(); + this._olLayer = new custom_ol_1.ol.layer.Vector({ + source: this._source, + visible: this.visible, + style: this.style, + minResolution: this._minResolution, + maxResolution: this._maxResolution, + zIndex: this._zIndex + }); + this._projectionMap = null; + this._projection4326 = new custom_ol_1.ol.proj.Projection({ code: "EPSG:4326" }); + } + /** + * dummy to be overridden + * @param {object} featureCollection - geojson or esrijson object + */ + LayerBaseVector.prototype.addFeatures = function (featureCollection) { + console.log('Layer vector base addFeatures is a placeholder and does nothing'); + }; + /** + * Before call to map move callback, can prevent call by returning false + * @param {number} zoom - zoom level + * @param {string} [evtType=undefined] undefined for initial load, otherwise one of 'change:center', 'change:resolution' + * @returns {boolean} if the call should proceed + */ + LayerBaseVector.prototype.mapMoveBefore = function (zoom, evtType) { + if (this.minZoom !== undefined) { + if (zoom < this.minZoom) { + return false; + } + } + if (this.maxZoom !== undefined) { + if (zoom > this.maxZoom) { + return false; + } + } + return this.visible; + }; + /** + * callback to generate the parameters passed in the get request + * @param {object} extent - extent object + * @param {number} extent.minX - minX + * @param {number} extent.minY - minY + * @param {number} extent.maxX - maxX + * @param {number} extent.maxY - maxY + * @param {number} zoomLevel - zoom level + */ + LayerBaseVector.prototype.mapMoveMakeGetParams = function (extent, zoomLevel) { + this._mapMoveParams = {}; + $.extend(this._mapMoveParams, this.params); + $.extend(this._mapMoveParams, this._mapMoveMakeGetParams(this, extent, zoomLevel)); + }; + /** + * callback function on map move + * @param {object} d - the json response + */ + LayerBaseVector.prototype.mapMoveCallback = function (d) { + if (this.source) { + this._source.clear(); + } + }; + /** + * clear features in the layer + */ + LayerBaseVector.prototype.clear = function () { + if (this._source) { + this._source.clear(); + } + }; + Object.defineProperty(LayerBaseVector.prototype, "onDemandDelay", { + /** + * get on demand delay in miliseconds + */ + get: function () { + return this._onDemandDelay; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(LayerBaseVector.prototype, "autoLoad", { + /** + * get if the layer is autoloaded + */ + get: function () { + return this._autoLoad; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(LayerBaseVector.prototype, "style", { + /** + * get the style definition + */ + get: function () { + return this._style; + }, + /** + * set the style + * @param style - the style or function + */ + set: function (style) { + this._style = style; + this.olLayer.setStyle(this._style); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(LayerBaseVector.prototype, "mapCrs", { + /** + * get the map CRS if it is defined by the map move object + */ + get: function () { + return this.mapProj == null ? null : this.mapProj.getCode(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(LayerBaseVector.prototype, "mapProj", { + get: function () { + if (this._projectionMap != null) { + return this._projectionMap; + } + if (this._mapMove) { + this._projectionMap = this._mapMove.map.getView().getProjection(); + return this._projectionMap; + } + else { + return null; + } + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(LayerBaseVector.prototype, "mapMove", { + /** + * get the map move object + * @type {MapMoveCls|*} + */ + get: function () { + return this._mapMove; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(LayerBaseVector.prototype, "mapMoveParams", { + /** + * map move params + * @type {object} + */ + get: function () { + return this._mapMoveParams; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(LayerBaseVector.prototype, "visible", { + get: function () { + return this._visible; + }, + /** + * Set the layer visibility + * @type {boolean} + * @override + */ + set: function (visibility) { + _super.prototype.setVisible.call(this, visibility); + if (this._onDemand) { + this.mapMove.triggerLyrLoad(this); + } + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(LayerBaseVector.prototype, "source", { + /** + * get the layer vector source + * @override + */ + get: function () { + return this.getSource(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(LayerBaseVector.prototype, "features", { + /** + * array of ol features + */ + get: function () { + return this.source.getFeatures(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(LayerBaseVector.prototype, "olLayer", { + /** + * + */ + get: function () { + return _super.prototype.getOlLayer.call(this); + }, + enumerable: true, + configurable: true + }); + LayerBaseVector.prototype.setZIndex = function (newZ) { + this.olLayer.setZIndex(newZ); + }; + return LayerBaseVector; + }(LayerBase_1.LayerBase)); + exports.LayerBaseVector = LayerBaseVector; + nm.LayerBaseVector = LayerBaseVector; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.default = LayerBaseVector; + + +/***/ }, +/* 24 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Created by gavorhes on 12/16/2015. + */ + "use strict"; + var provide_1 = __webpack_require__(4); + var makeGuid_1 = __webpack_require__(11); + var mapMove_1 = __webpack_require__(7); + var nm = provide_1.default('collections'); + var $ = __webpack_require__(3); + var LayerGroup = (function () { + /** + * + * @param {object} [groupConfig={}] - group configuration object + * @param {string} groupConfig.groupName - the group name + * @param {boolean} [groupConfig.collapse=false] - if the group should be collapsed initially + * @param {boolean} [groupConfig.addCheck=true] - if the group should have a checkbox controlling visibility of all layers + * @param {LayerGroup} [parent=undefined] - the parent group + */ + function LayerGroup(groupConfig, parent) { + this.groupLayers = []; + this.groupLayersLookup = {}; + this.groupGroups = []; + this.groupGroupsLookup = {}; + this.itemIdArray = []; + if (typeof groupConfig == 'undefined') { + this.parent = null; + this.groupId = 'root'; + this.groupName = 'root'; + this.allGroupLookup = { root: this }; + this.allGroupArray = [this]; + this.allLayerArray = []; + this.allLayerLookup = {}; + this.layerParentLookup = {}; + this.collapse = false; + this.addCheck = false; + } + else { + this.groupId = makeGuid_1.default(); + this.parent = parent; + this.groupName = groupConfig.groupName; + this.collapse = typeof groupConfig.collapse == 'boolean' ? groupConfig.collapse : false; + this.addCheck = typeof groupConfig.addCheck == 'boolean' ? groupConfig.addCheck : true; + } + } + /** + * + * @param {object} groupConfig - configuration object + * @param {string} groupConfig.groupName - the group name + * @param {boolean} groupConfig.collapse if the group should be collapsed initially + * @param {boolean} groupConfig.addCheck if the group should have a checkbox controlling visibility of all layers + * @param {Array<LayerGroup>} parents parent groups + * @returns {LayerGroup} the layer group just added + */ + LayerGroup.prototype.addGroup = function (groupConfig, parents) { + var parent; + if (parents.length > 0) { + parent = parents[parents.length - 1]; + } + else { + parent = 'root'; + } + /** + * @type {LayerGroup} + */ + var parentGroup = this.allGroupLookup[parent]; + var newGroup = new LayerGroup(groupConfig, parentGroup); + this.allGroupLookup[newGroup.groupId] = newGroup; + this.allGroupArray.push(newGroup); + parentGroup.groupGroups.push(newGroup); + parentGroup.groupGroupsLookup[newGroup.groupId] = newGroup; + if (parentGroup.itemIdArray.indexOf(newGroup.groupId) > 0) { + console.log(newGroup.groupId); + throw 'layer and group ids must be unique'; + } + parentGroup.itemIdArray.push(newGroup.groupId); + return newGroup; + }; + /** + * + * @param {LayerBase} newLayer the layer to be added + * @param {Array} parents array + */ + LayerGroup.prototype.addLegendLayer = function (newLayer, parents) { + var parent; + if (parents.length > 0) { + parent = parents[parents.length - 1]; + } + else { + parent = 'root'; + } + this.allLayerLookup[newLayer.id] = newLayer; + this.allLayerArray.push(newLayer); + /** + * @type {LayerGroup} + */ + var parentGroup = this.allGroupLookup[parent]; + parentGroup.groupLayers.push(newLayer); + parentGroup.groupLayersLookup[newLayer.id] = newLayer; + if (parentGroup.itemIdArray.indexOf(newLayer.id) > 0) { + console.log(newLayer.id); + throw 'layer and group ids must be unique'; + } + parentGroup.itemIdArray.push(newLayer.id); + this.layerParentLookup[newLayer.id] = parentGroup; + }; + LayerGroup.prototype.getLegendHtml = function (legendId, options) { + var legendHtml = "<ul id=\"" + legendId + "\" class=\"legend-container\">"; + legendHtml += ("<li>" + options.legendTitle + "<input type=\"checkbox\" checked id=\"suppress-by-extent-" + legendId + "\" class=\"suppress-by-extent\">") + + ("<label title=\"Suppress layers not visible at this zoom level\" for=\"suppress-by-extent-" + legendId + "\">") + + "<span></span>" + + "</label></li>"; + legendHtml += this._buildLegend(this.itemIdArray, this, options.layerDivClasses) + '</ul>'; + return legendHtml; + }; + /** + * @param {Array} itemIds the items to process + * @param {LayerGroup} theGroup new group + * @param {Array} [layerDivClasses=[]] optional classes to apply to the layer divs + * @static + * @returns {string} html string + */ + LayerGroup.prototype._buildLegend = function (itemIds, theGroup, layerDivClasses) { + if (itemIds.length == 0) { + return ''; + } + var theHml = ''; + var itemId = itemIds[0]; + if (theGroup.groupLayersLookup[itemId]) { + /** + * @type {LayerBase} + */ + var lyr = theGroup.groupLayersLookup[itemId]; + theHml += ("<li id=\"" + lyr.id + "-layer-li\" class=\"legend-layer-li " + layerDivClasses.join(' ') + "\">") + lyr.getLegendDiv() + '</li>'; + } + else if (theGroup.groupGroupsLookup[itemId]) { + /** + * type {LayerGroup} + */ + var otherGroup = theGroup.groupGroupsLookup[itemId]; + theHml += "<li>"; + theHml += ("<div id=\"" + otherGroup.groupId + "-legend-layer-div\" ") + + ("class=\"legend-layer-group " + layerDivClasses.join(' ') + "\">"); + if (otherGroup.addCheck) { + theHml += ("<input type=\"checkbox\" checked id=\"" + otherGroup.groupId + "-group-chck\">") + + ("<label for=\"" + otherGroup.groupId + "-group-chck\" title=\"Click arrow to expand or collapse\">" + otherGroup.groupName + "</label>"); + } + else { + theHml += "<label title=\"Click arrow to expand or collapse\">" + otherGroup.groupName + "</label>"; + } + theHml += "<span title=\"Expand/Collapse\" class=\"layer-group-expander"; + theHml += (otherGroup.collapse ? ' legend-layer-group-initial-collapse' : '') + "\">"; + theHml += otherGroup.collapse ? '▶' : '▼'; + theHml += '</span>'; + //parents.push(groupId); + theHml += '<ul>' + this._buildLegend(otherGroup.itemIdArray, otherGroup, layerDivClasses) + '</ul>'; + theHml += '</div>'; + theHml += '</li>'; + } + return theHml + this._buildLegend(itemIds.slice(1), theGroup, layerDivClasses); + }; + return LayerGroup; + }()); + /** + * a wrapper to make a legend + */ + var LayerLegend = (function () { + /** + * + * @param {Array} legendItems array of layers or objects with {groupName: {string}, collapse: {boolean}, addCheck: {boolean}, items: {Array}} + * @param {string} divId the div where the legend should be added + * @param {object} options for legend + * @param {Array} [options.layerDivClasses=[]] optional array of classes to be applied to the layer legend divs for custom styling + * @param {string} [options.legendTitle=Legend] the legend title + * @param {boolean} [options.scaleDependent=true] if legend display is scale dependent + */ + function LayerLegend(legendItems, divId, options) { + for (var _i = 0, legendItems_1 = legendItems; _i < legendItems_1.length; _i++) { + var i = legendItems_1[_i]; + if (typeof i == 'undefined') { + throw 'undefined item passed in array to legend constructor'; + } + } + options = options || {}; + options.legendTitle = typeof options.legendTitle == 'string' ? options.legendTitle : 'Legend'; + options.scaleDependent = typeof options.scaleDependent == 'boolean' ? options.scaleDependent : true; + options.layerDivClasses = options.layerDivClasses || []; + // if legend display is scale dependent, make sure the mapMove object is initialized first + if (options.scaleDependent) { + mapMove_1.default.checkInit(); + } + this.$divElement = $('#' + divId); + this._legendItems = legendItems; + this.layerGroup = new LayerGroup(); + this._buildTree(legendItems); + this.legendId = makeGuid_1.default(); + this.$divElement.append(this.layerGroup.getLegendHtml(this.legendId, options)); + for (var _a = 0, _b = this.layerGroup.allLayerArray; _a < _b.length; _a++) { + var l = _b[_a]; + l.applyCollapse(); + } + var _this = this; + //// if legend display is scale dependent, make sure the mapMove object is initialized first + if (options.scaleDependent) { + mapMove_1.default.checkInit(); + mapMove_1.default.addCallback(function (ext, zoom, evt) { + if (typeof evt == 'undefined' || evt == 'change:resolution') { + for (var _i = 0, _a = this.layerGroup.allLayerArray; _i < _a.length; _i++) { + var lyr = _a[_i]; + var $lyrLi = $('#' + lyr.id + '-layer-li'); + if (zoom > lyr.maxZoom || zoom < lyr.minZoom) { + $lyrLi.addClass('layer-not-visible'); + } + else { + $lyrLi.removeClass('layer-not-visible'); + } + } + } + }, this, 100, true, 'legend1'); + } + // <editor-fold desc="add event listeners"> + this.$divElement.find(".suppress-by-extent").change(function () { + var legendLayerLis = $('.legend-layer-li'); + if (this.checked) { + legendLayerLis.removeClass('layer-force-show'); + } + else { + legendLayerLis.addClass('layer-force-show'); + } + }); + this.$divElement.find('.legend-check').change(function () { + var lyrId = this.id.replace('-legend-layer-check', ''); + _this.layerGroup.allLayerLookup[lyrId].visible = this.checked; + }); + this.$divElement.find('.legend-layer-group > input[type=checkbox]').change(function () { + $(this).siblings('ul').find('input[type=checkbox]').prop('checked', this.checked).trigger('change'); + }); + this.$divElement.find('.layer-group-expander').click(function () { + var $this = $(this); + $this.removeClass('legend-layer-group-initial-collapse'); + $this.siblings('ul').slideToggle(); + if ($this.hasClass('legend-layer-group-collapsed')) { + $this.removeClass('legend-layer-group-collapsed'); + $this.html('▼'); + } + else { + $this.addClass('legend-layer-group-collapsed'); + $this.html('▶'); + } + }); + this.$divElement.find('.legend-layer-group-initial-collapse').trigger('click'); + // </editor-fold> + } + /** + * @param {Array} [legendItems=this._layerConfig] the legend items + * @param {Array} [parents=[]] the ordered list of groups in which this item is a member + * @private + */ + LayerLegend.prototype._buildTree = function (legendItems, parents) { + if (legendItems.length == 0) { + return; + } + var oneItem = legendItems[0]; + //reset the parent if the item is in the base array + if (this._legendItems.indexOf(oneItem) > -1 || typeof parents == 'undefined') { + parents = []; + } + if (typeof oneItem['groupName'] !== 'undefined') { + var groupItem = legendItems[0]; + var newGroup = this.layerGroup.addGroup(groupItem, parents); + parents.push(newGroup.groupId); + this._buildTree(groupItem.items, parents); + } + else { + /** + * @type {LayerBase} + */ + var layerItem = legendItems[0]; + this.layerGroup.addLegendLayer(layerItem, parents); + } + this._buildTree(legendItems.slice(1), parents); + }; + return LayerLegend; + }()); + nm.LayerLegend = LayerLegend; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.default = LayerLegend; + + +/***/ } +/******/ ]); +//# sourceMappingURL=itsMap.js.map \ No newline at end of file diff --git a/test-html/js/itsMap.js.map b/test-html/js/itsMap.js.map new file mode 100644 index 0000000000000000000000000000000000000000..6206ca1ba06287cdd0e11fbb049e38484ec610ff --- /dev/null +++ b/test-html/js/itsMap.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///webpack/bootstrap ef760a4c28bc3d5b9fb4?77b8*","webpack:///./src-ts/_test/itsMap.ts","webpack:///./src-ts/olHelpers/quickMap.ts?6966","webpack:///./src-ts/olHelpers/quickMapBase.ts?cef3","webpack:///./~/jquery/dist/jquery.js?89fd","webpack:///./src-ts/util/provide.ts?c446","webpack:///./~/custom-ol/lib/index.js?e25d","webpack:///./~/custom-ol/ol/ol-build.js?ed33","webpack:///./src-ts/olHelpers/mapMove.ts?0e57","webpack:///./src-ts/olHelpers/mapMoveCls.ts?c02e","webpack:///./src-ts/olHelpers/mapInteractionBase.ts?686c","webpack:///./src-ts/util/checkDefined.ts?efb5","webpack:///./src-ts/util/makeGuid.ts?7a49","webpack:///./src-ts/olHelpers/mapPopup.ts?f7f4","webpack:///./src-ts/olHelpers/mapPopupCls.ts?19d5","webpack:///./src-ts/layers/LayerBase.ts?ca1c","webpack:///./src-ts/olHelpers/zoomResolutionConvert.ts?51f3","webpack:///./src-ts/collections/ItsLayerCollection.ts","webpack:///./src-ts/util/colors.ts","webpack:///./src-ts/layers/LayerItsInventory.ts","webpack:///./src-ts/layers/LayerBaseVectorGeoJson.ts","webpack:///./src-ts/layers/LayerBaseVector.ts","webpack:///./src-ts/collections/LayerLegend.ts"],"names":[],"mappings":";AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,uBAAe;AACf;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;;;;;;ACtCA;;IAEG;AACH,8CAA6C;AAC7C,gDAA+B,EAAmC,CAAC;AACnE,yCAAwB,EAA4B,CAAC;AACrD,sCAAqB,CAAuB,CAAC;AAE7C,KAAI,GAAG,GAAG,kBAAQ,EAAE,CAAC;AAErB,OAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;AAEpB,KAAI,kBAAkB,GAAG,IAAI,4BAAkB,CAAC,GAAG,CAAC,CAAC;AAErD,KAAI,UAAU,GAAG;KACb;SACI,SAAS,EAAE,sBAAsB;SACjC,QAAQ,EAAE,KAAK;SACf,QAAQ,EAAE,IAAI;SACd,KAAK,EAAE,kBAAkB,CAAC,MAAM;MACnC;EACJ,CAAC;AAEF,KAAI,MAAM,GAAG,IAAI,qBAAW,CAAC,UAAU,EAAE,kBAAkB,EAAE,EAAE,CAAC,CAAC;AAKjE,QAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;AACxB,QAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;AACxB,QAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;AACxB,QAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;;;;;;;AC/BxB;;IAEG;;AAEH,0CAA4C,CAAgB,CAAC;AAC7D,qCAAoB,CAAiB,CAAC;AACtC,qCAAoB,CAAW,CAAC;AAChC,sCAAqB,EAAY,CAAC;AAClC,KAAI,EAAE,GAAG,iBAAO,CAAC,WAAW,CAAC,CAAC;AAG9B;;;;;;;;;;;;;;;IAeG;AACH,mBAAyB,OAA0B;KAC/C,IAAI,CAAC,GAAG,2BAAY,CAAC,OAAO,CAAC,CAAC;KAC9B,iBAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KAChB,kBAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KAEjB,MAAM,CAAC,CAAC,CAAC;AACb,EAAC;AANe,iBAAQ,WAMvB;AAGD,GAAE,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACvB;mBAAe,QAAQ,CAAC;;;;;;;ACrCxB;;IAEG;;AAEH,KAAM,CAAC,GAAG,mBAAO,CAAC,CAAQ,CAAC,CAAC;AAC5B,qCAAoB,CAAiB,CAAC;AACtC,uCAAiB,CAAW,CAAC;AAC7B,KAAM,EAAE,GAAG,iBAAO,CAAC,WAAW,CAAC,CAAC;AAahC;;;;;;;;;;;;;;;IAeG;AACH,uBAA6B,OAAyB;KAClD,OAAO,GAAG,OAAO,IAAI,EAAqB,CAAC;KAC3C,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC;KACvC,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,EAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAC,CAAC;KAC9D,OAAO,CAAC,IAAI,GAAG,OAAO,OAAO,CAAC,IAAI,IAAI,QAAQ,GAAG,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC;KAClE,OAAO,CAAC,YAAY,GAAG,OAAO,OAAO,CAAC,YAAY,IAAI,SAAS,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;KAC9F,OAAO,CAAC,UAAU,GAAG,OAAO,OAAO,CAAC,UAAU,IAAI,SAAS,GAAG,OAAO,CAAC,UAAU,GAAG,KAAK,CAAC;KAGzF,IAAI,OAAO,GAAG,CAAC,CAAC,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;KACrC,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;KAEpC,IAAI,QAAQ,GAAG,IAAI,cAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAC,MAAM,EAAE,IAAI,cAAE,CAAC,MAAM,CAAC,GAAG,EAAE,EAAC,CAAC,CAAC;KAChE,sGAAsG;KAEtG,IAAI,MAAM,GAAG,m0GAAm0G,CAAC;KACj1G,IAAI,SAAS,GAAG,+uIAA+uI,CAAC;KAEhwI,EAAE,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;KAkB3B,CAAC;KAED,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,IAAI,OAAO,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC;SACxC,MAAM,mBAAmB,CAAC;KAC9B,CAAC;KAED,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;SAC3G,IAAI,CAAC,GAAG,IAAI,cAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;SAChE,IAAI,cAAE,CAAC,IAAI,CAAC,UAAU,CAAC,EAAC,IAAI,EAAE,WAAW,EAAC,CAAC,CAAC;SAE5C,CAAC,CAAC,SAAS,CAAC,IAAI,cAAE,CAAC,IAAI,CAAC,UAAU,CAAC,EAAC,IAAI,EAAE,WAAW,EAAC,CAAC,EAAE,IAAI,cAAE,CAAC,IAAI,CAAC,UAAU,CAAC,EAAC,IAAI,EAAE,WAAW,EAAC,CAAC,CAAC,CAAC;SACtG,IAAI,WAAW,GAAG,CAAC,CAAC,cAAc,EAAE,CAAC;SACrC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;SAClC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;KACtC,CAAC;KAED,IAAI,GAAG,GAAG,IAAI,cAAE,CAAC,GAAG,CAAC;SACjB,MAAM,EAAE,CAAC,QAAQ,CAAC;SAClB,MAAM,EAAE,OAAO,CAAC,KAAK;SACrB,QAAQ,EAAE,cAAE,CAAC,OAAO,CAAC,QAAQ,CAAC;aAC1B,kBAAkB,EAAE,EAAC,WAAW,EAAE,KAAK,EAAC;UAC3C,CAAC;SACF,IAAI,EAAE,IAAI,cAAE,CAAC,IAAI,CAAC;aACd,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;aAC5C,IAAI,EAAE,OAAO,CAAC,IAAI;aAClB,OAAO,EAAE,OAAO,CAAC,OAAO;aACxB,OAAO,EAAE,OAAO,CAAC,OAAO;UAC3B,CAAC;MACL,CAAC,CAAC;KAEH,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;SACrB,oCAAoC;SACpC,GAAG,CAAC,UAAU,CAAC,IAAI,cAAE,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;KAClD,CAAC;KAED,MAAM,CAAC,GAAG,CAAC;AACf,EAAC;AAxEe,qBAAY,eAwE3B;AAED,GAAE,CAAC,YAAY,GAAG,YAAY,CAAC;AAC/B;mBAAe,YAAY,CAAC;;;;;;;AC/G5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;;;AAIA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gCAA+B;AAC/B;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,SAAQ,YAAY;;AAEpB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,OAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF,qBAAoB;;AAEpB;AACA;AACA,GAAE;;AAEF;;AAEA;AACA;AACA,GAAE;;AAEF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kDAAiD;AACjD;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF,iCAAgC;AAChC;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA,WAAU,YAAY;AACtB;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA,UAAS,SAAS;AAClB;AACA;;AAEA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAS,YAAY;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAU,YAAY;AACtB;;AAEA;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,GAAE;;AAEF;;AAEA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAC;;AAED;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS,SAAS;AAClB;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,2BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA,iBAAgB,IAAI;;AAEpB;AACA;;AAEA;AACA;;AAEA;AACA,yCAAwC,IAAI;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD,UAAS;;AAET;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA,OAAM;;AAEN;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,MAAK;AACL;AACA;;AAEA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA,OAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAM;AACN,OAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,cAAa,yBAAyB;AACtC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;;AAEA;AACA;AACA,GAAE;AACF;AACA,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,QAAQ;AACnB,YAAW,QAAQ;AACnB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;AACF;;AAEA;AACA;AACA,YAAW,gBAAgB;AAC3B,cAAa,uBAAuB;AACpC;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,YAAW,eAAe;AAC1B,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,eAAe;AAC1B,cAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,YAAW,UAAU;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,YAAW,cAAc;AACzB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;AACA,IAAG;AACH;AACA,iCAAgC,MAAM;AACtC;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;;AAEA,gBAAe;;AAEf,UAAS;;AAET;AACA,SAAQ,iCAAiC;AACzC,SAAQ,oBAAoB;AAC5B,SAAQ,sCAAsC;AAC9C,SAAQ;AACR,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;;AAEA;AACA;AACA;AACA,iBAAgB,aAAa,EAAE;AAC/B;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,6DAA4D;;AAE5D;AACA;AACA;AACA,0CAAyC;;AAEzC;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,QAAO;AACP;AACA;AACA;AACA;AACA,8DAA6D;;AAE7D;AACA;AACA;AACA,2CAA0C;;AAE1C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,iEAAgE;;AAEhE;AACA;AACA;AACA,8CAA6C;;AAE7C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA,kEAAiE,UAAU;AAC3E,uCAAsC,2BAA2B;AACjE;AACA,iCAAgC,MAAM;AACtC;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA,WAAU,YAAY;AACtB;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,WAAU,YAAY;AACtB;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,WAAU,UAAU;AACpB;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,WAAU,cAAc;AACxB;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;;AAEA;AACA,aAAY,uEAAuE;AACnF;AACA;AACA,aAAY,4BAA4B;AACxC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAQ,SAAS;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA,4DAA2D;;AAE3D;AACA;AACA,qFAAoF;;AAEpF;AACA;;AAEA;AACA;AACA,QAAO;AACP;AACA;;AAEA,oCAAmC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA,SAAQ,SAAS;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAAQ,SAAS;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA,GAAE;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH,SAAQ,SAAS;AACjB;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAuC,iDAAiD;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kDAAiD;AACjD,WAAU,wCAAwC;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,gBAAgB;AAC3B;AACA,YAAW,QAAQ;AACnB,YAAW,MAAM;AACjB,YAAW,MAAM;AACjB;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;AACA,GAAE;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;AACA,GAAE;AACF;;AAEA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;;AAEA;;AAEA,EAAC;;;;AAID;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA,SAAQ,GAAG;AACX;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;;AAEA;;;;AAIA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAE;AACF;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA,KAAI;AACJ;;AAEA,eAAc,SAAS;AACvB;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;AAGD;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,KAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,SAAQ;AACR;AACA;AACA;AACA;;AAEA;;AAEA;AACA,MAAK;AACL;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;;AAEA;AACA;AACA,KAAI;AACJ;AACA;;AAEA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAU,OAAO;AACjB;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,UAAS,OAAO;AAChB,0BAAyB,wBAAwB;;AAEjD;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA,2CAA0C;AAC1C,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA;AACA,EAAC;AACD;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAC;AACD;;;;AAIA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAmB;;AAEnB;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAU,cAAc;AACxB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,MAAK;AACL;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAQ;;AAER;AACA;AACA;AACA,QAAO;AACP,OAAM;;AAEN;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAQ;AACR,QAAO;AACP;AACA,OAAM;AACN,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,+CAA8C;AAC9C,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAM;AACN;AACA;AACA;AACA,KAAI;;AAEJ;;AAEA,6CAA4C;AAC5C;AACA;AACA;AACA;AACA,WAAU,YAAY;AACtB;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAC;;;AAGD;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;AACF;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,WAAU,SAAS;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;AAKA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA,GAAE;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,OAAM;AACN;AACA;AACA;;AAEA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;;AAEA,wBAAuB,aAAa;AACpC,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,qBAAoB,SAAS;AAC7B;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA,IAAG;AACH;AACA,EAAC;;;AAGD;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ,IAAG;AACH;AACA,EAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ,GAAE;AACF;AACA;AACA;AACA,IAAG;AACH,GAAE;AACF;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;;AAEA;;;AAGA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA,gBAAe,oBAAoB,EAAE;AACrC,gBAAe,qCAAqC,EAAE;AACtD;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;;;AAIA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA,SAAQ,OAAO;AACf;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,uBAAsB;;AAEtB;AACA;AACA;AACA;AACA;AACA;;AAEA,SAAQ,OAAO;AACf;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;;AAEA;AACA,KAAI;AACJ;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAC;;;AAGD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAE,gBAAgB;AAClB;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAE;AACF;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;;AAEA;AACA;AACA;AACA;AACA;;AAEA,YAAW;;AAEX;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;AACA;;AAEA;AACA;AACA;;AAEA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,4CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;;AAEF;;AAEA;AACA;;AAEA;AACA;AACA;AACA,qDAAoD;AACpD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,0BAAyB;AACzB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,gEAA+D;AAC/D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,WAAU,cAAc;;AAExB;AACA;AACA;AACA;AACA,kBAAiB,mBAAmB;AACpC;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA0B,+BAA+B;AACzD;AACA;AACA;AACA;;AAEA;AACA;AACA,wBAAuB,wDAAwD;AAC/E;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA,cAAa;;AAEb;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,uCAAsC,cAAc;AACpD;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,sCAAqC;AACrC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,uCAAsC;AACtC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,sCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA,EAAC;;;AAGD;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,4CAA2C,OAAO;AAClD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,+BAA8B;;AAE9B;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAE;AACF;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAU,OAAO;AACjB;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,iBAAgB,gBAAgB;AAChC;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,SAAQ,+BAA+B;AACvC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,wCAAuC,OAAO;AAC9C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,yCAAwC,OAAO;AAC/C;AACA;AACA,KAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA,UAAS,qCAAqC;AAC9C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,SAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;;AAEA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;;AAEA,UAAS,8BAA8B;AACvC;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA,8BAA6B;AAC7B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,aAAY,OAAO;AACnB;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;;AAEA,UAAS,WAAW;AACpB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAC;;;AAGD;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,YAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;;;;AAIA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,sCAAqC,UAAU,SAAS,MAAM,aAAa;AAC3E,cAAa,eAAe;AAC5B;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,mCAAkC,2BAA2B,sBAAsB;AACnF,uBAAsB,cAAc;AACpC,iBAAgB,WAAW,YAAY;AACvC,YAAW;AACX;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAA4B,SAAS,QAAQ,QAAQ;AACrD;;AAEA;AACA;AACA,qCAAoC,uBAAuB;AAC3D,oBAAmB,SAAS,SAAS;AACrC;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,GAAE;AACF,EAAC;;;AAGD;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,mBAAkB;AAClB;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;;AAEA,aAAY,+DAA+D;AAC3E;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA,SAAQ,OAAO;;AAEf;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,SAAQ,gBAAgB;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAiB,gBAAgB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,IAAG;;AAEH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA,mBAAkB,gBAAgB;AAClC;AACA,OAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,wBAAuB,4BAA4B;AACnD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA,kBAAiB;;AAEjB;AACA;;AAEA,WAAU,OAAO;AACjB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA,aAAY;AACZ;;AAEA;AACA;AACA;;AAEA,YAAW,SAAS;AACpB;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA,IAAG;AACH;AACA,EAAC;;;AAGD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;;AAEA;;AAEA;AACA;;;;;AAKA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW;;AAEX;AACA;AACA;AACA,SAAQ,QAAQ;AAChB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAQ,gBAAgB;AACxB;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ,IAAG;AACH;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,kDAAiD;AACjD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,KAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,WAAU,iBAAiB;AAC3B;AACA;;AAEA;;AAEA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,4BAA2B;AAC3B;AACA,sBAAqB;AACrB;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,iBAAiB;AAC5B;AACA;;AAEA,8CAA6C;AAC7C;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;;AAEA,SAAQ,iBAAiB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA,UAAS,iBAAiB;AAC1B;AACA;AACA;AACA;AACA,GAAE;;AAEF;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,EAAC;;AAED;AACA,kEAAiE;AACjE;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,qBAAoB,cAAc;AAClC,GAAE;AACF;AACA;AACA;AACA;;AAEA;AACA,kDAAiD;;AAEjD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA;;AAEA,gCAA+B,SAAS;AACxC;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,gCAA+B,SAAS;AACxC;AACA;AACA;AACA;AACA;;AAEA;AACA,oBAAmB,gBAAgB;AACnC;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA,WAAU,kBAAkB;AAC5B,YAAW,kBAAkB;AAC7B,eAAc;AACd,EAAC;AACD;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;;AAEA,SAAQ,mBAAmB;AAC3B;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;;;AAGA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;AAGD;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA,IAAG;AACH;AACA,EAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;AAKD;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA,IAAG;AACH;AACA,EAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;AAKD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,OAAM;AACN;AACA;AACA;;AAEA;AACA,KAAI;AACJ;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAC;;;;;AAKD;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,KAAI;AACJ;AACA;;AAEA,kCAAiC;AACjC;AACA;;AAEA,KAAI;AACJ;;AAEA,KAAI;AACJ;AACA;AACA,MAAK;AACL;;AAEA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA,EAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,SAAS;AACpB;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;AAKD;;;AAGA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA,uCAAsC;AACtC;AACA;AACA;;AAEA;;AAEA,0BAAyB;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,+CAA8C;AAC9C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,4CAA2C;AAC3C;;AAEA;AACA;AACA;AACA;AACA,WAAU,KAAK;AACf;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kDAAiD;AACjD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,sCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA,EAAC;;AAED;;AAEA;AACA;AACA;AACA,IAAG;AACH,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;AAGD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA,EAAC;;;;;AAKD;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,qCAAqC;;AAEpD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;;AAEA,MAAK;AACL;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;;AAEA;;;;AAIA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;;AAEhB;AACA;AACA;AACA;AACA;AACA,iBAAgB;;AAEhB,iDAAgD;AAChD;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,oBAAmB;AACnB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,yDAAwD;AACxD;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAiB;;AAEjB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA,KAAI;;AAEJ;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,OAAM;AACN;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,UAAS;AACT;;AAEA;;AAEA;AACA;;AAEA;AACA,kBAAiB;AACjB,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAkD;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,4BAA2B;;AAE3B;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,mCAAkC;;AAElC;AACA,uBAAsB;AACtB,4BAA2B;;AAE3B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAO;;AAEP;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,uDAAsD;AACtD;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,eAAc,oCAAoC;AAClD;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;;AAEA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,MAAK;AACL;;AAEA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA,EAAC;;AAED;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA,EAAC;;;AAGD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,KAAI;AACJ;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;;AAEA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA,EAAC;;;AAGD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH,GAAE;;AAEF;AACA;AACA;AACA;;AAEA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAc;AACd,OAAM;AACN,OAAM;AACN,IAAG;AACH;AACA,EAAC;;;AAGD;AACA;AACA;AACA,GAAE;AACF;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAE;AACF;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAQ;;AAER;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;;AAEA,oDAAmD;AACnD;AACA;AACA;AACA;AACA,SAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,uBAAuB;AAClC,YAAW,yBAAyB;AACpC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;AAKD;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;AAKD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA,EAAC;;;;;AAKD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,KAAI;AACJ,IAAG;AACH;;AAEA;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;AAKD;AACA;AACA;AACA,GAAE;AACF;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,IAAG;AACH;AACA;AACA;;AAEA;;AAEA;AACA,sDAAqD;AACrD;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA,WAAU,kBAAkB;AAC5B;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAmB;;AAEnB,6DAA4D,eAAe;AAC3E;AACA;;AAEA;AACA;;AAEA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA,EAAC;;AAED;AACA,eAAc,sDAAsD;AACpE;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,KAAI;AACJ;AACA;AACA,IAAG;AACH;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;AAGD;AACA,eAAc,mCAAmC;AACjD,gBAAe,6DAA6D;AAC5E;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,KAAI;AACJ;AACA,GAAE;AACF,EAAC;;;AAGD;;AAEA;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE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","file":"itsMap.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap ef760a4c28bc3d5b9fb4\n **/","/**\r\n * Created by gavorhes on 12/18/2015.\r\n */\r\n// import 'babel-polyfill/dist/polyfill.min';\r\nimport ItsLayerCollection from '../collections/ItsLayerCollection';\r\nimport LayerLegend from '../collections/LayerLegend';\r\nimport quickMap from '../olHelpers/quickMap';\r\n\r\nlet map = quickMap();\r\n\r\nwindow['map'] = map;\r\n\r\nlet itsLayerCollection = new ItsLayerCollection(map);\r\n\r\nlet layerArray = [\r\n {\r\n groupName: 'ITS Inventory Layers',\r\n collapse: false,\r\n addCheck: true,\r\n items: itsLayerCollection.layers\r\n }\r\n];\r\n\r\nlet legend = new LayerLegend(layerArray, 'legend-container', {});\r\n\r\n\r\n\r\n\r\nconsole.log('it works');\r\nconsole.log('it works');\r\nconsole.log('it works');\r\nconsole.log('it works');\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/_test/itsMap.ts\n **/","/**\r\n * Created by gavorhes on 12/15/2015.\r\n */\r\n\r\nimport {quickMapOptions, quickMapBase} from './quickMapBase';\r\nimport provide from '../util/provide';\r\nimport mapMove from './mapMove';\r\nimport mapPopup from './mapPopup';\r\nlet nm = provide('olHelpers');\r\nimport {ol} from 'custom-ol'\r\n\r\n/**\r\n * Sets up a map with some default parameters and initializes\r\n * mapMove and mapPopup\r\n *\r\n * @param {object} [options={}] config options\r\n * @param {string} [options.divId=map] map div id\r\n * @param {object} [options.center={}] center config object\r\n * @param {number} [options.center.x=-10018378] center x, web mercator x or lon\r\n * @param {number} [options.center.y=5574910] center y, web mercator y or lat\r\n * @param {number} [options.zoom=7] zoom level\r\n * @param {number} [options.minZoom=undefined] min zoom\r\n * @param {number} [options.maxZoom=undefined] max zoom\r\n * @param {boolean} [options.baseSwitcher=true] if add base map switcher\r\n * @param {boolean} [options.fullScreen=false] if add base map switcher\r\n * @returns the ol map\r\n */\r\nexport function quickMap(options? : quickMapOptions): ol.Map {\r\n let m = quickMapBase(options);\r\n mapMove.init(m);\r\n mapPopup.init(m);\r\n\r\n return m;\r\n}\r\n\r\n\r\nnm.quickMap = quickMap;\r\nexport default quickMap;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/olHelpers/quickMap.ts\n **/","/**\r\n * Created by gavorhes on 12/15/2015.\r\n */\r\n\r\nconst $ = require('jquery');\r\nimport provide from '../util/provide';\r\nimport {ol} from 'custom-ol';\r\nconst nm = provide('olHelpers');\r\n\r\n\r\nexport interface quickMapOptions {\r\n divId?: string;\r\n center?: {x: number, y: number};\r\n zoom?: number;\r\n minZoom?: number;\r\n maxZoom?: number;\r\n baseSwitcher?: boolean;\r\n fullScreen?: boolean;\r\n}\r\n\r\n/**\r\n * Sets up a map with some default parameters and initializes\r\n * mapMove and mapPopup\r\n *\r\n * @param [options={}] config options\r\n * @param [options.divId=map] map div id\r\n * @param [options.center={}] center config object\r\n * @param [options.center.x=-10018378] center x, web mercator x or lon\r\n * @param [options.center.y=5574910] center y, web mercator y or lat\r\n * @param [options.zoom=7] zoom level\r\n * @param [options.minZoom=undefined] min zoom\r\n * @param [options.maxZoom=undefined] max zoom\r\n * @param [options.baseSwitcher=true] if add base map switcher\r\n * @param [options.fullScreen=false] if add base map switcher\r\n * @returns the ol map\r\n */\r\nexport function quickMapBase(options?: quickMapOptions): ol.Map {\r\n options = options || {} as quickMapOptions;\r\n options.divId = options.divId || 'map';\r\n options.center = options.center || {x: -10018378, y: 5574910};\r\n options.zoom = typeof options.zoom == 'number' ? options.zoom : 7;\r\n options.baseSwitcher = typeof options.baseSwitcher == 'boolean' ? options.baseSwitcher : true;\r\n options.fullScreen = typeof options.fullScreen == 'boolean' ? options.fullScreen : false;\r\n\r\n\r\n let $mapDiv = $('#' + options.divId);\r\n $mapDiv.css('position', 'relative');\r\n\r\n let osmLayer = new ol.layer.Tile({source: new ol.source.OSM()});\r\n // let satLayer = new ol.layer.Tile({visible: false, source: new ol.source.MapQuest({layer: 'sat'})});\r\n\r\n let osmCss = \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMAUExURQAAADQ1NDk5OURFREtLS1FHSFlZWGJRVGJiYWdmZWxsbHRmaXBpanN0c3V0dHp5eX5+fIVzd4F3eeV0jud5juZ8k4aHhomHhoyGh5eGj5OVlJiVlZiYl5qZmJydnKOTlaKZmqKdnaOioaqqqKuzsbOvrrSysLa3tbW4uLm6ub27ub+/vbGXwbCZwbCgxLKlxrOqyLStybO3yrSxyrWzzbW2y7a1zbK4y7W6zbW8y760yrTAzbTFzrPKzrLOzrTJzrTOzr7CwbXC0LXK0LTO0L3I0bPQz7TQz7PS0bXQ0LnR0brW1bzT0r7U077V1Lzc2dqNqteUsdyXscaquuOHneaGmueHnOeJnuiBleiKn+eNoOiOoOWUpOiRo+iSpeiUpeqYpumaqOmdrPSynemgruSqtOmisOmlsuuqtequuOW1vOuxu+uxvOq1ve+xvPK0pvW3o/W5pfO5qvS7qfCwvMOuwc2/wNenxNyyzNe/0Nq31Nq51dy72Oy3wOu4wOu+xey4wO+6xO2+xfTAr/TCsvfFtPHLvvTJuMPDwMfHxcXKyc3DxMvFyMvLyM3PzcDV08DV1MTX1cbY1s7X1sjZ1sra2Mnd3M7b2c7c2tfH1tnB1t7F2d7M29fX1tLY1tDd2tHe3NTf3NnS19rZ1tva2Nnf3t3d28rh3tXg3Nnh3tzj393k39ni4N7k4N7n5uXDyOfLz+zAxu3CyOzEyezKzeDJ3eLM3uvP0u3P0ePf2+7R0u7Q1u/U0+7U1ezc0+7a2e/d2+3f3vbFzvLOwfHN0PPQw/TUx/LWyvLYzPDQ1fPe0ubc4vve4uHh3+nh3+/h2u/h3vHj2vHl3uHm4eTn4uDp5ebo4+Xo5ODq6ebq6OTv6+nl4+/j4O7l4e7n5ujp4+np5Ozq5e7s5urt6O7t6Orw6u7x6u3x7vPj5PDl4fDo4vDq5fDt5vDu6PDv7PTv6fDx6vHx7fH17fXw6fXy7fb07/bz8fT18vn38vr39fr48/r59Pr6+P3++//+/gAAALNTSk0AAAEAdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wBT9wclAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGHRFWHRTb2Z0d2FyZQBwYWludC5uZXQgNC4wLjlsM35OAAAFNElEQVRIS1VVCZxVUxi/9l0UIUT2bMnY43bVI2c0Y01kSWIaS0j2JEtkN41piomZrPPKQ2aQ7JKImOZlnm2493TJzDufuU1Zi+v/fee+mZ//793vnPOd7zvfes5zDBEZkBBjAcIjb+Iiotqgdhat8AMK0vl7/R9N7GiWtshqIr+EZ5gYKibyUsXY1l/mfFpssvUlWQ0FkU3gy4+RB/+kwYcO8pRSnldcOU/r2lAHARSwk2ORgEmOdC1EsuRiYSqMPwwroMIraZk5V2fYJQjCKfZrRmh3gSAZi2i4b7wSylWu8EqZwS59JkFUaW96JbNSc+CEUmt4rorwuZmWdDaoc+uZETuQlTCU5xYzR7muUnVUVo+BcRhre/VwUpasgJwhH7JkYIYA0sNxhmCwUK+lw6vCKBZehw01dEiyw4Q4aE0Z4ahDhKaFQsGnJ2BgqKoTBsNjFy0SlW6whRAZTdm8DBJmkBZhDi1j4xJQBk6ywrWUTymaCxac8lROcdauRGzQSNtA7EHUYhXyEwhhgjFUqRuO+rauhF1awFpzCsmwUbjIFBR0u1bKtyGpulW/H/cVVzkyGaIWTIR9pFAV6GK2gPMXMX8gPk9zzxXgI1kimcAltEYr+cjio1imlKpEa9rOipLm+p+CZ6Bw//qd1/f/O+GwMxbSLpyoZEcwkyh2jIks+3hmdd2jWUw4scxNysnHxU7nSspTRcJjCZGL3IsjsYJMMg5mwgx7gaIOLBFCogAgBBoNa9w+DE6I+Bs7FTgwwrJbHjWDgpYo2KwtBTcYEDuloC9geQw+k2RGnPGpTaOlq7AS+YICUz4DZVaX2TiNDhuYfTtY4geLi0IoCm3XccwM9hx4kU28StQEljDs3ZEpFGA+8dKzLmV9ymIwF5FOGn2GdJM8KLHDJbXyiYVMG9MRTLiXGGg2QKaxM3khPSRrwM9zEIardxU2w/EiA0gOeYKHzDR0V7/QGV3lKIA9ktrDArxO3gdA+k6SKoBiVwcm7NjZb9+Hnztg282TuHVZ9LOISFNt9MgyCetZVczSxnyDbl17Penq6mqpg1IhRaEO2aVLUO4/r17H8tTv6f13h71dduvZI3Y+uMdWksNSauLovJw5hsqiPIUvt0ku7/iBeUR3sksmomYWtRbAjbiLfv2lX9/V7LVG4uYnUZXhQ7f2OPCZEx9wrYWTcePEQqPEML8pl4mMdr/jlXlvHiRiJ2+MSTFY4TTSYStuvz2R/JXh+PPeGXm055J+3/YDWuNu3R3DArPutyg0ZgykMVDU9Ndm22+wYalr2rse48CnsTIFcMn73vfhNrktx1EUcZnPv6ah3Yy5cDTRdBEoGoBeah71dqFyjZDJLkWk3N3v4uuktssjWpzciMPxQeHj8nMKzcGuB0tAyzFhdCKOYWv4HwOQVwIxLG99a6uvH3sJCyO3h+k4EZ+G7+xj5f4XXksoaGrdMRzSc8ARA8+cdOuk2x6fffNNt5x+Ro1omPlrT/CQDlcNlpx4NBIWXhkx7Y3Zp3ofNR7Uv89Om/beW0TLIynHv3vs1VsOFpSWSXvfuPUf9BrRFyxgXdHoKJnQFegPOovvzz59ntrzye240ig8UQ3lDI2VqwagrKIQcLXNFL3wglN2OHdBQ6/vI3kENDVBwRb3k1XtczFbjWn4EzMYi7CF3129+JTYuRSdrGuS92g5dpqn6qXoJQs5xmL8p+Wt4hLbt0mx2OLNZR2bbPy8zJNQGFM/f/CfXZekRYFjGCWjIJpM+WiCzGBPWHhoyaAsjRT/B2Gy5yzYJkwUAAAAAElFTkSuQmCC')\";\r\n let aerialCss = \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMAUExURQALBgIMDQgOBwQOEQcTBwUSCwoVDAwdBw8ZDgUREwYUGAYZFQYZGgkTFQoVGQsZFAwZHBMeDhIbFBEbHAwWIA4bIREcIQ4hCQwjFw4lHBgkDB8sDxUiExIiGhAoGxohFRshGRorHQcrKQsiIQwmKgooJA0pKQ81Jw8yLRMiIxImKxUrJREuKhslJB0rIhooKRUuMBMyLhkwJhozKh48LxUzMRM9MBwzMiUvFCMtGiMwEiwzFCgzHDI+GSIsISkvJSQxIiM2LiY5Jic+Lyk0JSo0Ky49JSs9KSU1NSM7NCs2NS8+NDM1JzU9Ljg7IDJCHS1DLSNAMitCMSxIOjREITZLIDZJKDlFIjpFKztKJT1LKzJBMzpHMD1JMjpKPD1RKjlQNC1DQj5QQEA8MEJGJkBKJUJNK0lLLEJMMkVMPEpONENSLUdZL0pTLkpaLkRUMkRSPEVZMktUM0pVOklZMklZNEpcNU1ZMk1ZNUxfMk5dNkxcOVFUM1RUOFJbNVFZOVNYPVFdOVJdPFVaOVVaPVVdOlVdPVpaNlpdO0phN01hOlBiN1NhPFNoP1piPWFbPmRjPENOQEtPSURTQkJVS0xVQk1VSkxbQkxcS0heUVFXRFRcQlJfTFxeQlpeS05lQk1kSFRjQVRjSlZpQ1tkQlxlSlxpRF1rSVVnUVtlU1llXF9tU1xoXlxwSl9ramRfQmJlQ2FhSWFlSWFlTmVlSWRmTGFoQWFpRWFsRmVpRWVtRmNsSmtlRGpqRmpsS2BmWGRsUmFrW2ptUmZyR2RxTGpxTWVyU2RyW2d5V2tzUmt0WW15VG15WXFuTHNtVnFxTXF4T3h0TnJzUnJ1XHJ4VXN6Wnp0VHx1W315VXp8XGR0YGx0YHVzZXJ0aHR9ZXV+aHl9YHOCXXqBXXeCYHyCY3iEaHyIYn+JaXqKcYB5WIN6Y4SCXoCDZIGEaYCIZoOLa4iCaImJbIOOdYuMco6OeIuVcpOKbZKPc5aQb5eXe5ufg6KjhAAAAAAAAAAAAAAAAOGCeQgAAAEAdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wBT9wclAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGHRFWHRTb2Z0d2FyZQBwYWludC5uZXQgNC4wLjlsM35OAAAH80lEQVRISy1WbXQUVxm+6wqnk3Zmpxl2FG2EGg92C8GDlWptVTwa+uF3xcKmDfFzCUzDsJNsunXipglJXJbrtJWmwZNSnHD3jojRgUIm2UumIZ0JZ7JByrALbMWW0IBW8aRa4+cf76TeX3Nm3uc+z/s+7/vugl4r/aMTrT4e1pPTqnnmJNn5AyUzRnrRle/qE33dsvrBtAQVoxtpZNK3zSzYjUjviWO2Ag+R77dl7W36n/1Ep9KBPG/S+Py0PkjU/gPKQGqwTHryiWYFAXSvMairsio7SjyNsnCzh0qKImV9/7mhfHQZx2yN1O+7rXUm33MUPaboOkAJHaoIdXfJj2xWeyD8jMFEXkvIu5qzpU988gWB5zl+GS+sFe55trEVPdWZB2miq8bBVkNFO2R0qnrfkiXhcJhtDNXE6tbW97/s9O9/7ZfVhx86/CwrROpfvvxboMqeLsuqPr1j44qEwDNMOBximUiYoU8sw7BC/a7T72uEnyJDlGxZ9KcglZRyuqqrv/tSZErgOI4NgRBTIw9EmHAoFGZZnp6aGaJ2GTxfxYs8kKVUQh7WB5hQeC3LsUxoxVKW14l3BX2WcoUYPiZyLLe8teZ+iuT4GGhvV5KpKWkpyzxEr2MZgQ1xdRjfRBoH+2k6lIHjKTHPPBo8CSJISqqq4wGGOcWylIGlgvgNX1Gd8vF5f+IUIwb30ng+Gg2QfBRIMvy0jG8SVkYo4N0zvUXVRztbJ/L6xL7lUZEXBEHkuZqlS6gEAUgKJurnhFtfpACOYd8b/hVbJPqwi44a6KA0sPVjIi/SIyxb3u8KlAJ0S8jRVgrlW+nVHPdrhiXCxu42d86ByksDc80P3MkJFBFQ8Ho1lQegpWJRWFGsDsRwwv7pIyvuQW0ZkrX6NDVFbqcvaQI8vbyqzt5AARrsbKx5yhQEGs+wPO56bOK+0rcwMrOKkpUbZWYxV04UeZZv/cBKFhRL6Qdv9y4LfEDA7/thg7tTmv1a5/GnO0wl0dQg80wglZaHUmxRvjwAHOfyN0mxrpqLUpcjsK3NHYMo4R1o6eho2ZyIb2FoeOC3ILK8kZ2HQMOuWywGXUkJBCeTbYFS0+ym1h2/6UgmvnrvKYZZtIEXGf75C2cIAp5LHNd71x7uPoTjakrWH9e3KFpaatjUvJUysFw0KrLMYMW2lTg4PeUQx6kJEALvxXEmCdVyPLHtCSjBhc01XCjIgafxou+PE6KC1dhxSCwoBCc+N4P3btM84pmdSSjJnjO/nvY4LQfVyz5/I+v6IwjUOMjy+MVCxIbKupTJaEktp7cTKU42Pvjh2m/8cSpC6aPsaX/MHSuUQLVVsIa4RUTs/r/BVAexNdjdnsNG7j/rV93xheLMzKnFrPeTEQchCyCcKb25aAIn7lrAertrZwyNXM8N6zfWrFo3d2SmOEcF83x/r+OOFgrAHYWF7cELjhV7UQo/6WAIUVl9JFl8a//HZ66VpbY3I9QKZqPru77lA+iOWAIr0hKxHCmmr0othSyeIl5y3qt4xT8gSNrKEZozs8Els67rgsLOZ+ygzwMfbtNhobfgzpEyGnz7htPtzUi6PuOoj7K0WF/MXiUFxwGajRD1hjYXHXI9p406qOyinp5/tiWcDHY0jIu4n64Qfq7kliB2gemag9QbOia0PbbDMbd43SHuvxFxrAocxins7MX5Kqbe1QixKBxoV4//PfAgGCu+Rlm4SvZizyDH+0reDHp92iO0BuX3bCfItl0PEwvYLqpwXG2MHlGsQ4S8pMJZv1JGmHiEoHQDdOjwmVlEP/nE9ADKjI8xLI0OOGITfy0SbeG/C2jKUDGSlDhM9I3IpK9iup6XnbRNC7yqueNsJCCIiXzdQhnaGN+46umnEdy5U5UbUJ48LFM9GkJo8BdDOiAZ7ZIQbKhYLMqvhU2wmNxjEAsS2AI7y4nWF64duePbk7YV3zvAVLEMD9AxJRNa3KDUibV7DjnkuprMEYjScFNcaR2ceP2u9R/5k1052Ryme5phAFRswlHjAudiP4dOy7CaxLgdJh9vUlU1702/+LPa1U9fvPi9qlA4XEUBJc3dFlpsR457IDl1iPqLp7o81NQgyV19iYU38uTiv975Pd3SiwQcsGjx+v4/6fl5T7EOOMTCtpbKxfemsQq/3olQZcminADAAI0cuGLHaHOFxbuGvRk/Z9u7CULqoVR6NE0yx1avj30oRhc/jWUoIALGxkz0dg1Dl9iaI7LqOOXKsXJFwjiuEAi70Jra2nW1PL08zLBhZsMABpW5csI7TPfew9ipFKcn5k1i+1KyCWKjC3W/8dF1d666+RaabBVTFTHacjoojBNDh0NDxk+IPTlwfqJkWpbnpFHXIbLbmpxEQ3ff/Z0g/mauXsoln9wDRjy/NHsQFw3P6vWuTJ43/+FZrk2cvAFRipCKdfD9y2+pjRj78s0KdCUDKJvdV91ChngV38T20TM+gghjpJaPlpFr2xbEz5g4A/NGt5rNwdwmYGeeeMXBSLHHUIc+6RsojRH9VTUm3/mLf/64b470XvoxoTKhlMBQ2jMEzo2PjxdGMppmn1RM24bWFJqaQv4BcuJa2Sam7Zokq1ldCsz06NCBHrhwqVQYpfFj42NZexz1EW9SR/kT58nEeQKJb2fPXjjp0u/YUkwHEgLeOnf2nOuf1TRTM02CLKLTPy60/x1CCztqn7Ev+BdsC3m+30decQvW/wBNTwU+CfUQAQAAAABJRU5ErkJggg==')\";\r\n\r\n if (options.baseSwitcher) {\r\n // let switcherContent = '<div class=\"base-map-switcher\" title=\"Toggle Base Layer\" style=\"';\r\n // switcherContent += 'position: absolute; top: 70px; left: 4px; border: solid black 1px; ';\r\n // switcherContent += `height: 50px; width: 50px; z-index: 10; border-radius: 4px; background: ${aerialCss};`;\r\n // switcherContent += '\"></div>';\r\n // $mapDiv.append(switcherContent);\r\n //\r\n // $mapDiv.find('.base-map-switcher').click(function() {\r\n // \"use strict\";\r\n // osmLayer.setVisible(!osmLayer.getVisible());\r\n // satLayer.setVisible(!satLayer.getVisible());\r\n //\r\n // if (osmLayer.getVisible()){\r\n // $(this).css('background', aerialCss);\r\n // } else {\r\n // $(this).css('background', osmCss);\r\n // }\r\n // });\r\n }\r\n\r\n if (options.zoom < 0 || options.zoom > 28) {\r\n throw 'zoom out of range';\r\n }\r\n\r\n if (options.center.x >= -180 && options.center.x <= 180 && options.center.y >= -90 && options.center.y <= 90) {\r\n let p = new ol.geom.Point([options.center.x, options.center.y]);\r\n new ol.proj.Projection({code: \"EPSG:4326\"});\r\n\r\n p.transform(new ol.proj.Projection({code: \"EPSG:4326\"}), new ol.proj.Projection({code: \"EPSG:3857\"}));\r\n let coordinates = p.getCoordinates();\r\n options.center.x = coordinates[0];\r\n options.center.y = coordinates[1];\r\n }\r\n\r\n let map = new ol.Map({\r\n layers: [osmLayer],\r\n target: options.divId,\r\n controls: ol.control.defaults({\r\n attributionOptions: {collapsible: false}\r\n }),\r\n view: new ol.View({\r\n center: [options.center.x, options.center.y],\r\n zoom: options.zoom,\r\n minZoom: options.minZoom,\r\n maxZoom: options.maxZoom\r\n })\r\n });\r\n\r\n if (options.fullScreen) {\r\n //TODO add full screen options to ts\r\n map.addControl(new ol.control.FullScreen({}));\r\n }\r\n\r\n return map;\r\n}\r\n\r\nnm.quickMapBase = quickMapBase;\r\nexport default quickMapBase;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/olHelpers/quickMapBase.ts\n **/","/*!\n * jQuery JavaScript Library v2.2.3\n * http://jquery.com/\n *\n * Includes Sizzle.js\n * http://sizzlejs.com/\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2016-04-05T19:26Z\n */\n\n(function( global, factory ) {\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket #14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n}(typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Support: Firefox 18+\n// Can't be in strict mode, several libs including ASP.NET trace\n// the stack via arguments.caller.callee and Firefox dies if\n// you try to trace through \"use strict\" call chains. (#13335)\n//\"use strict\";\nvar arr = [];\n\nvar document = window.document;\n\nvar slice = arr.slice;\n\nvar concat = arr.concat;\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar support = {};\n\n\n\nvar\n\tversion = \"2.2.3\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t},\n\n\t// Support: Android<4.1\n\t// Make sure we trim BOM and NBSP\n\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,\n\n\t// Matches dashed string for camelizing\n\trmsPrefix = /^-ms-/,\n\trdashAlpha = /-([\\da-z])/gi,\n\n\t// Used by jQuery.camelCase as callback to replace()\n\tfcamelCase = function( all, letter ) {\n\t\treturn letter.toUpperCase();\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// Start with an empty selector\n\tselector: \"\",\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\t\treturn num != null ?\n\n\t\t\t// Return just the one element from the set\n\t\t\t( num < 0 ? this[ num + this.length ] : this[ num ] ) :\n\n\t\t\t// Return all the elements in a clean array\n\t\t\tslice.call( this );\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\t\tret.context = this.context;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !jQuery.isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tsrc = target[ name ];\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = jQuery.isArray( copy ) ) ) ) {\n\n\t\t\t\t\tif ( copyIsArray ) {\n\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\tclone = src && jQuery.isArray( src ) ? src : [];\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src && jQuery.isPlainObject( src ) ? src : {};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisFunction: function( obj ) {\n\t\treturn jQuery.type( obj ) === \"function\";\n\t},\n\n\tisArray: Array.isArray,\n\n\tisWindow: function( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t},\n\n\tisNumeric: function( obj ) {\n\n\t\t// parseFloat NaNs numeric-cast false positives (null|true|false|\"\")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t// subtraction forces infinities to NaN\n\t\t// adding 1 corrects loss of precision from parseFloat (#15100)\n\t\tvar realStringObj = obj && obj.toString();\n\t\treturn !jQuery.isArray( obj ) && ( realStringObj - parseFloat( realStringObj ) + 1 ) >= 0;\n\t},\n\n\tisPlainObject: function( obj ) {\n\t\tvar key;\n\n\t\t// Not plain objects:\n\t\t// - Any object or value whose internal [[Class]] property is not \"[object Object]\"\n\t\t// - DOM nodes\n\t\t// - window\n\t\tif ( jQuery.type( obj ) !== \"object\" || obj.nodeType || jQuery.isWindow( obj ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Not own constructor property must be Object\n\t\tif ( obj.constructor &&\n\t\t\t\t!hasOwn.call( obj, \"constructor\" ) &&\n\t\t\t\t!hasOwn.call( obj.constructor.prototype || {}, \"isPrototypeOf\" ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Own properties are enumerated firstly, so to speed up,\n\t\t// if last one is own, then all properties are own\n\t\tfor ( key in obj ) {}\n\n\t\treturn key === undefined || hasOwn.call( obj, key );\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\ttype: function( obj ) {\n\t\tif ( obj == null ) {\n\t\t\treturn obj + \"\";\n\t\t}\n\n\t\t// Support: Android<4.0, iOS<6 (functionish RegExp)\n\t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\t\ttypeof obj;\n\t},\n\n\t// Evaluates a script in a global context\n\tglobalEval: function( code ) {\n\t\tvar script,\n\t\t\tindirect = eval;\n\n\t\tcode = jQuery.trim( code );\n\n\t\tif ( code ) {\n\n\t\t\t// If the code includes a valid, prologue position\n\t\t\t// strict mode pragma, execute code by injecting a\n\t\t\t// script tag into the document.\n\t\t\tif ( code.indexOf( \"use strict\" ) === 1 ) {\n\t\t\t\tscript = document.createElement( \"script\" );\n\t\t\t\tscript.text = code;\n\t\t\t\tdocument.head.appendChild( script ).parentNode.removeChild( script );\n\t\t\t} else {\n\n\t\t\t\t// Otherwise, avoid the DOM node creation, insertion\n\t\t\t\t// and removal by using an indirect global eval\n\n\t\t\t\tindirect( code );\n\t\t\t}\n\t\t}\n\t},\n\n\t// Convert dashed to camelCase; used by the css and data modules\n\t// Support: IE9-11+\n\t// Microsoft forgot to hump their vendor prefix (#9572)\n\tcamelCase: function( string ) {\n\t\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n\t},\n\n\tnodeName: function( elem, name ) {\n\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// Support: Android<4.1\n\ttrim: function( text ) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t( text + \"\" ).replace( rtrim, \"\" );\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn concat.apply( [], ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// Bind a function to a context, optionally partially applying any\n\t// arguments.\n\tproxy: function( fn, context ) {\n\t\tvar tmp, args, proxy;\n\n\t\tif ( typeof context === \"string\" ) {\n\t\t\ttmp = fn[ context ];\n\t\t\tcontext = fn;\n\t\t\tfn = tmp;\n\t\t}\n\n\t\t// Quick check to determine if target is callable, in the spec\n\t\t// this throws a TypeError, but we will just return undefined.\n\t\tif ( !jQuery.isFunction( fn ) ) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Simulated bind\n\t\targs = slice.call( arguments, 2 );\n\t\tproxy = function() {\n\t\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t\t};\n\n\t\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\t\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\t\treturn proxy;\n\t},\n\n\tnow: Date.now,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\n// JSHint would error on this code due to the Symbol not being defined in ES5.\n// Defining this global in .jshintrc would create a danger of using the global\n// unguarded in another place, it seems safer to just disable JSHint for these\n// three lines.\n/* jshint ignore: start */\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n/* jshint ignore: end */\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\nfunction( i, name ) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: iOS 8.2 (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = jQuery.type( obj );\n\n\tif ( type === \"function\" || jQuery.isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v2.2.1\n * http://sizzlejs.com/\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2015-10-17\n */\n(function( window ) {\n\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// General-purpose constants\n\tMAX_NEGATIVE = 1 << 31,\n\n\t// Instance methods\n\thasOwn = ({}).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpush_native = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\t// Use a stripped-down indexOf as it's faster than native\n\t// http://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[i] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\n\t// http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n\tidentifier = \"(?:\\\\\\\\.|[\\\\w-]|[^\\\\x00-\\\\xa0])+\",\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace +\n\t\t\"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\" ),\n\n\trattributeQuotes = new RegExp( \"=\" + whitespace + \"*([^\\\\]'\\\"]*?)\" + whitespace + \"*\\\\]\", \"g\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace +\n\t\t\t\"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace +\n\t\t\t\"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" +\n\t\t\twhitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\trescape = /'|\\\\/g,\n\n\t// CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\([\\\\da-f]{1,6}\" + whitespace + \"?|(\" + whitespace + \")|.)\", \"ig\" ),\n\tfunescape = function( _, escaped, escapedWhitespace ) {\n\t\tvar high = \"0x\" + escaped - 0x10000;\n\t\t// NaN means non-codepoint\n\t\t// Support: Firefox<24\n\t\t// Workaround erroneous numeric interpretation of +\"0x\"\n\t\treturn high !== high || escapedWhitespace ?\n\t\t\tescaped :\n\t\t\thigh < 0 ?\n\t\t\t\t// BMP codepoint\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\t// Supplemental Plane codepoint (surrogate pair)\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t};\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t(arr = slice.call( preferredDoc.childNodes )),\n\t\tpreferredDoc.childNodes\n\t);\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpush_native.apply( target, slice.call(els) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( (target[j++] = els[i++]) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar m, i, elem, nid, nidselect, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\n\t\tif ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {\n\t\t\tsetDocument( context );\n\t\t}\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( (m = match[1]) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( (elem = context.getElementById( m )) ) {\n\n\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && (elem = newContext.getElementById( m )) &&\n\t\t\t\t\t\t\tcontains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[2] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( (m = match[3]) && support.getElementsByClassName &&\n\t\t\t\t\tcontext.getElementsByClassName ) {\n\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( support.qsa &&\n\t\t\t\t!compilerCache[ selector + \" \" ] &&\n\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test( selector )) ) {\n\n\t\t\t\tif ( nodeType !== 1 ) {\n\t\t\t\t\tnewContext = context;\n\t\t\t\t\tnewSelector = selector;\n\n\t\t\t\t// qSA looks outside Element context, which is not what we want\n\t\t\t\t// Thanks to Andrew Dupont for this workaround technique\n\t\t\t\t// Support: IE <=8\n\t\t\t\t// Exclude object elements\n\t\t\t\t} else if ( context.nodeName.toLowerCase() !== \"object\" ) {\n\n\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\tif ( (nid = context.getAttribute( \"id\" )) ) {\n\t\t\t\t\t\tnid = nid.replace( rescape, \"\\\\$&\" );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontext.setAttribute( \"id\", (nid = expando) );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\tnidselect = ridentifier.test( nid ) ? \"#\" + nid : \"[id='\" + nid + \"']\";\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[i] = nidselect + \" \" + toSelector( groups[i] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\t\t\t\t}\n\n\t\t\t\tif ( newSelector ) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn (cache[ key + \" \" ] = value);\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created div and expects a boolean result\n */\nfunction assert( fn ) {\n\tvar div = document.createElement(\"div\");\n\n\ttry {\n\t\treturn !!fn( div );\n\t} catch (e) {\n\t\treturn false;\n\t} finally {\n\t\t// Remove from its parent by default\n\t\tif ( div.parentNode ) {\n\t\t\tdiv.parentNode.removeChild( div );\n\t\t}\n\t\t// release memory in IE\n\t\tdiv = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split(\"|\"),\n\t\ti = arr.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[i] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\t( ~b.sourceIndex || MAX_NEGATIVE ) -\n\t\t\t( ~a.sourceIndex || MAX_NEGATIVE );\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( (cur = cur.nextSibling) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn (name === \"input\" || name === \"button\") && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction(function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction(function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ (j = matchIndexes[i]) ] ) {\n\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\t// documentElement is verified for cases where it doesn't yet exist\n\t// (such as loading iframes in IE - #4833)\n\tvar documentElement = elem && (elem.ownerDocument || elem).documentElement;\n\treturn documentElement ? documentElement.nodeName !== \"HTML\" : false;\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, parent,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\tif ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocElem = document.documentElement;\n\tdocumentIsHTML = !isXML( document );\n\n\t// Support: IE 9-11, Edge\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\tif ( (parent = document.defaultView) && parent.top !== parent ) {\n\t\t// Support: IE 11\n\t\tif ( parent.addEventListener ) {\n\t\t\tparent.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( parent.attachEvent ) {\n\t\t\tparent.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert(function( div ) {\n\t\tdiv.className = \"i\";\n\t\treturn !div.getAttribute(\"className\");\n\t});\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert(function( div ) {\n\t\tdiv.appendChild( document.createComment(\"\") );\n\t\treturn !div.getElementsByTagName(\"*\").length;\n\t});\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert(function( div ) {\n\t\tdocElem.appendChild( div ).id = expando;\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\n\t});\n\n\t// ID find and filter\n\tif ( support.getById ) {\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar m = context.getElementById( id );\n\t\t\t\treturn m ? [ m ] : [];\n\t\t\t}\n\t\t};\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t};\n\t\t};\n\t} else {\n\t\t// Support: IE6/7\n\t\t// getElementById is not reliable as a find shortcut\n\t\tdelete Expr.find[\"ID\"];\n\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode(\"id\");\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[\"TAG\"] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( (elem = results[i++]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[\"CLASS\"] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See http://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( (support.qsa = rnative.test( document.querySelectorAll )) ) {\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert(function( div ) {\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// http://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( div ).innerHTML = \"<a id='\" + expando + \"'></a>\" +\n\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' msallowcapture=''>\" +\n\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( div.querySelectorAll(\"[msallowcapture^='']\").length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !div.querySelectorAll(\"[selected]\").length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\t\t\tif ( !div.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push(\"~=\");\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !div.querySelectorAll(\":checked\").length ) {\n\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibing-combinator selector` fails\n\t\t\tif ( !div.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\n\t\t\t}\n\t\t});\n\n\t\tassert(function( div ) {\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = document.createElement(\"input\");\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tdiv.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( div.querySelectorAll(\"[name=d]\").length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !div.querySelectorAll(\":enabled\").length ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tdiv.querySelectorAll(\"*,:x\");\n\t\t\trbuggyQSA.push(\",.*:\");\n\t\t});\n\t}\n\n\tif ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector) )) ) {\n\n\t\tassert(function( div ) {\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( div, \"div\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( div, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t});\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join(\"|\") );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join(\"|\") );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully self-exclusive\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t));\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( (b = b.parentNode) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\tcompare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\tif ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\n\t\t\treturn a === document ? -1 :\n\t\t\t\tb === document ? 1 :\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[i] === bp[i] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[i], bp[i] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\tap[i] === preferredDoc ? -1 :\n\t\t\tbp[i] === preferredDoc ? 1 :\n\t\t\t0;\n\t};\n\n\treturn document;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\t// Make sure that attribute selectors are quoted\n\texpr = expr.replace( rattributeQuotes, \"='$1']\" );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!compilerCache[ expr + \" \" ] &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch (e) {}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\t// Set document vars if needed\n\tif ( ( context.ownerDocument || context ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t(val = elem.getAttributeNode(name)) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( (elem = results[i++]) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( (node = elem[i++]) ) {\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[1] = match[1].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[3] = ( match[3] || match[4] || match[5] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[2] === \"~=\" ) {\n\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\tif ( match[1].slice( 0, 3 ) === \"nth\" ) {\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[3] ) {\n\t\t\t\t\tSizzle.error( match[0] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === \"even\" || match[3] === \"odd\" ) );\n\t\t\t\tmatch[5] = +( ( match[7] + match[8] ) || match[3] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[3] ) {\n\t\t\t\tSizzle.error( match[0] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\tif ( matchExpr[\"CHILD\"].test( match[0] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[3] ) {\n\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t(excess = tokenize( unquoted, true )) &&\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t(excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[0] = match[0].slice( 0, excess );\n\t\t\t\tmatch[2] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() { return true; } :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t(pattern = new RegExp( \"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\" )) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test( typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== \"undefined\" && elem.getAttribute(\"class\") || \"\" );\n\t\t\t\t});\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tvar cache, uniqueCache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( (node = node[ dir ]) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction(function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf( seed, matched[i] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[i] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction(function( selector ) {\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction(function( seed, matches, context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = unmatched[i]) ) {\n\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}) :\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\t\t\t\t\t// Don't keep the element (issue #299)\n\t\t\t\t\tinput[0] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t}),\n\n\t\t\"has\": markFunction(function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t}),\n\n\t\t\"contains\": markFunction(function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t}),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test(lang || \"\") ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( (elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( (elem = elem.parentNode) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": function( elem ) {\n\t\t\treturn elem.disabled === false;\n\t\t},\n\n\t\t\"disabled\": function( elem ) {\n\t\t\treturn elem.disabled === true;\n\t\t},\n\n\t\t\"checked\": function( elem ) {\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn (nodeName === \"input\" && !!elem.checked) || (nodeName === \"option\" && !!elem.selected);\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t// but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[\"empty\"]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo(function() {\n\t\t\treturn [ 0 ];\n\t\t}),\n\n\t\t\"last\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t}),\n\n\t\t\"eq\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t}),\n\n\t\t\"even\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"odd\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"lt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"gt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t})\n\t}\n};\n\nExpr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || (match = rcomma.exec( soFar )) ) {\n\t\t\tif ( match ) {\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[0].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( (tokens = []) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( (match = rcombinators.exec( soFar )) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push({\n\t\t\t\tvalue: matched,\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[0].replace( rtrim, \" \" )\n\t\t\t});\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\n\t\t\t\t(match = preFilters[ type ]( match ))) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push({\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t});\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[i].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tcheckNonElements = base && dir === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, uniqueCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || (elem[ expando ] = {});\n\n\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});\n\n\t\t\t\t\t\tif ( (oldCache = uniqueCache[ dir ]) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn (newCache[ 2 ] = oldCache[ 2 ]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\tuniqueCache[ dir ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[i]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[0];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[i], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (elem = unmatched[i]) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction(function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts( selector || \"*\", context.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( (elem = temp[i]) ) {\n\t\t\t\t\tmatcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = matcherOut[i]) ) {\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( (matcherIn[i] = elem) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, (matcherOut = []), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( (elem = matcherOut[i]) &&\n\t\t\t\t\t\t(temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {\n\n\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[0].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\t\t\t// Avoid hanging onto element (issue #299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (matcher = Expr.relative[ tokens[i].type ]) ) {\n\t\t\tmatchers = [ addCombinator(elementMatcher( matchers ), matcher) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[j].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( (tokens = tokens.slice( j )) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[\"TAG\"]( \"*\", outermost ),\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\t\t\t\toutermostContext = context === document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching elements by id\n\t\t\tfor ( ; i !== len && (elem = elems[i]) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\tif ( !context && elem.ownerDocument !== document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( (matcher = elementMatchers[j++]) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( (elem = !matcher && elem) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (matcher = setMatchers[j++]) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !(unmatched[i] || setMatched[i]) ) {\n\t\t\t\t\t\t\t\tsetMatched[i] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[i] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\n\n/**\n * A low-level selection function that works with Sizzle's compiled\n * selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n * selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( (selector = compiled.selector || selector) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[0] = match[0].slice( 0 );\n\t\tif ( tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\tsupport.getById && context.nodeType === 9 && documentIsHTML &&\n\t\t\t\tExpr.relative[ tokens[1].type ] ) {\n\n\t\t\tcontext = ( Expr.find[\"ID\"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[\"needsContext\"].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[i];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ (type = token.type) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( (find = Expr.find[ type ]) ) {\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( (seed = find(\n\t\t\t\t\ttoken.matches[0].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context\n\t\t\t\t)) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n};\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split(\"\").sort( sortOrder ).join(\"\") === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert(function( div1 ) {\n\t// Should return 1, but returns 4 (following)\n\treturn div1.compareDocumentPosition( document.createElement(\"div\") ) & 1;\n});\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert(function( div ) {\n\tdiv.innerHTML = \"<a href='#'></a>\";\n\treturn div.firstChild.getAttribute(\"href\") === \"#\" ;\n}) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert(function( div ) {\n\tdiv.innerHTML = \"<input/>\";\n\tdiv.firstChild.setAttribute( \"value\", \"\" );\n\treturn div.firstChild.getAttribute( \"value\" ) === \"\";\n}) ) {\n\taddHandle( \"value\", function( elem, name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert(function( div ) {\n\treturn div.getAttribute(\"disabled\") == null;\n}) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t\t(val = elem.getAttributeNode( name )) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\tnull;\n\t\t}\n\t});\n}\n\nreturn Sizzle;\n\n})( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\n\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\nvar rsingleTag = ( /^<([\\w-]+)\\s*\\/?>(?:<\\/\\1>|)$/ );\n\n\n\nvar risSimple = /^.[^:#\\[\\.,]*$/;\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( jQuery.isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\t/* jshint -W018 */\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\n\t}\n\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\n\t}\n\n\tif ( typeof qualifier === \"string\" ) {\n\t\tif ( risSimple.test( qualifier ) ) {\n\t\t\treturn jQuery.filter( qualifier, elements, not );\n\t\t}\n\n\t\tqualifier = jQuery.filter( qualifier, elements );\n\t}\n\n\treturn jQuery.grep( elements, function( elem ) {\n\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t} );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\treturn elems.length === 1 && elem.nodeType === 1 ?\n\t\tjQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :\n\t\tjQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\t\treturn elem.nodeType === 1;\n\t\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i,\n\t\t\tlen = this.length,\n\t\t\tret = [],\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\t// Needed because $( selector, context ) becomes $( context ).find( selector )\n\t\tret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );\n\t\tret.selector = this.selector ? this.selector + \" \" + selector : selector;\n\t\treturn ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]*))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( jQuery.isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\t// Support: Blackberry 4.6\n\t\t\t\t\t// gEBID returns nodes no longer in the document (#6963)\n\t\t\t\t\tif ( elem && elem.parentNode ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.context = document;\n\t\t\t\t\tthis.selector = selector;\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis.context = this[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( jQuery.isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\tif ( selector.selector !== undefined ) {\n\t\t\tthis.selector = selector.selector;\n\t\t\tthis.context = selector.context;\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\tpos = rneedsContext.test( selectors ) || typeof selectors !== \"string\" ?\n\t\t\t\tjQuery( selectors, context || this.context ) :\n\t\t\t\t0;\n\n\t\tfor ( ; i < l; i++ ) {\n\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t// Always skip document fragments\n\t\t\t\tif ( cur.nodeType < 11 && ( pos ?\n\t\t\t\t\tpos.index( cur ) > -1 :\n\n\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\treturn elem.contentDocument || jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnotwhite = ( /\\S+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnotwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( jQuery.isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && jQuery.type( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, listener list, final state\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ), \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ), \"rejected\" ],\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ) ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tthen: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\t\t\t\t\tvar fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];\n\n\t\t\t\t\t\t\t// deferred[ done | fail | progress ] for forwarding actions to newDefer\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && jQuery.isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis === promise ? newDefer.promise() : this,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Keep pipe for back-compat\n\t\tpromise.pipe = promise.then;\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 3 ];\n\n\t\t\t// promise[ done | fail | progress ] = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add( function() {\n\n\t\t\t\t\t// state = [ resolved | rejected ]\n\t\t\t\t\tstate = stateString;\n\n\t\t\t\t// [ reject_list | resolve_list ].disable; progress_list.lock\n\t\t\t\t}, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );\n\t\t\t}\n\n\t\t\t// deferred[ resolve | reject | notify ]\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? promise : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( subordinate /* , ..., subordinateN */ ) {\n\t\tvar i = 0,\n\t\t\tresolveValues = slice.call( arguments ),\n\t\t\tlength = resolveValues.length,\n\n\t\t\t// the count of uncompleted subordinates\n\t\t\tremaining = length !== 1 ||\n\t\t\t\t( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,\n\n\t\t\t// the master Deferred.\n\t\t\t// If resolveValues consist of only a single Deferred, just use that.\n\t\t\tdeferred = remaining === 1 ? subordinate : jQuery.Deferred(),\n\n\t\t\t// Update function for both resolve and progress values\n\t\t\tupdateFunc = function( i, contexts, values ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tcontexts[ i ] = this;\n\t\t\t\t\tvalues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( values === progressValues ) {\n\t\t\t\t\t\tdeferred.notifyWith( contexts, values );\n\t\t\t\t\t} else if ( !( --remaining ) ) {\n\t\t\t\t\t\tdeferred.resolveWith( contexts, values );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t},\n\n\t\t\tprogressValues, progressContexts, resolveContexts;\n\n\t\t// Add listeners to Deferred subordinates; treat others as resolved\n\t\tif ( length > 1 ) {\n\t\t\tprogressValues = new Array( length );\n\t\t\tprogressContexts = new Array( length );\n\t\t\tresolveContexts = new Array( length );\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {\n\t\t\t\t\tresolveValues[ i ].promise()\n\t\t\t\t\t\t.progress( updateFunc( i, progressContexts, progressValues ) )\n\t\t\t\t\t\t.done( updateFunc( i, resolveContexts, resolveValues ) )\n\t\t\t\t\t\t.fail( deferred.reject );\n\t\t\t\t} else {\n\t\t\t\t\t--remaining;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// If we're not waiting on anything, resolve the master\n\t\tif ( !remaining ) {\n\t\t\tdeferred.resolveWith( resolveContexts, resolveValues );\n\t\t}\n\n\t\treturn deferred.promise();\n\t}\n} );\n\n\n// The deferred used on DOM ready\nvar readyList;\n\njQuery.fn.ready = function( fn ) {\n\n\t// Add the callback\n\tjQuery.ready.promise().done( fn );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Hold (or release) the ready event\n\tholdReady: function( hold ) {\n\t\tif ( hold ) {\n\t\t\tjQuery.readyWait++;\n\t\t} else {\n\t\t\tjQuery.ready( true );\n\t\t}\n\t},\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\n\t\t// Trigger any bound ready events\n\t\tif ( jQuery.fn.triggerHandler ) {\n\t\t\tjQuery( document ).triggerHandler( \"ready\" );\n\t\t\tjQuery( document ).off( \"ready\" );\n\t\t}\n\t}\n} );\n\n/**\n * The ready event handler and self cleanup method\n */\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\njQuery.ready.promise = function( obj ) {\n\tif ( !readyList ) {\n\n\t\treadyList = jQuery.Deferred();\n\n\t\t// Catch cases where $(document).ready() is called\n\t\t// after the browser event has already occurred.\n\t\t// Support: IE9-10 only\n\t\t// Older IE sometimes signals \"interactive\" too soon\n\t\tif ( document.readyState === \"complete\" ||\n\t\t\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t\t\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\t\t\twindow.setTimeout( jQuery.ready );\n\n\t\t} else {\n\n\t\t\t// Use the handy event callback\n\t\t\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t\t\t// A fallback to window.onload, that will always work\n\t\t\twindow.addEventListener( \"load\", completed );\n\t\t}\n\t}\n\treturn readyList.promise( obj );\n};\n\n// Kick off the DOM ready check even if the user does not\njQuery.ready.promise();\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( jQuery.type( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !jQuery.isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\tvalue :\n\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn chainable ?\n\t\telems :\n\n\t\t// Gets\n\t\tbulk ?\n\t\t\tfn.call( elems ) :\n\t\t\tlen ? fn( elems[ 0 ], key ) : emptyGet;\n};\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t// - Node\n\t// - Node.ELEMENT_NODE\n\t// - Node.DOCUMENT_NODE\n\t// - Object\n\t// - Any\n\t/* jshint -W018 */\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tregister: function( owner, initial ) {\n\t\tvar value = initial || {};\n\n\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t// use plain assignment\n\t\tif ( owner.nodeType ) {\n\t\t\towner[ this.expando ] = value;\n\n\t\t// Otherwise secure it in a non-enumerable, non-writable property\n\t\t// configurability must be true to allow the property to be\n\t\t// deleted with the delete operator\n\t\t} else {\n\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\tvalue: value,\n\t\t\t\twritable: true,\n\t\t\t\tconfigurable: true\n\t\t\t} );\n\t\t}\n\t\treturn owner[ this.expando ];\n\t},\n\tcache: function( owner ) {\n\n\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t// but we should not, see #8335.\n\t\t// Always return an empty object.\n\t\tif ( !acceptData( owner ) ) {\n\t\t\treturn {};\n\t\t}\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see #8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ data ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ prop ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\t\t\towner[ this.expando ] && owner[ this.expando ][ key ];\n\t},\n\taccess: function( owner, key, value ) {\n\t\tvar stored;\n\n\t\t// In cases where either:\n\t\t//\n\t\t// 1. No key was specified\n\t\t// 2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t// 1. The entire cache object\n\t\t// 2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\tstored = this.get( owner, key );\n\n\t\t\treturn stored !== undefined ?\n\t\t\t\tstored : this.get( owner, jQuery.camelCase( key ) );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t// 1. An object of properties\n\t\t// 2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i, name, camel,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key === undefined ) {\n\t\t\tthis.register( owner );\n\n\t\t} else {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( jQuery.isArray( key ) ) {\n\n\t\t\t\t// If \"name\" is an array of keys...\n\t\t\t\t// When data is initially created, via (\"key\", \"val\") signature,\n\t\t\t\t// keys will be converted to camelCase.\n\t\t\t\t// Since there is no way to tell _how_ a key was added, remove\n\t\t\t\t// both plain key and camelCase key. #12786\n\t\t\t\t// This will only penalize the array argument path.\n\t\t\t\tname = key.concat( key.map( jQuery.camelCase ) );\n\t\t\t} else {\n\t\t\t\tcamel = jQuery.camelCase( key );\n\n\t\t\t\t// Try the string as a key before any manipulation\n\t\t\t\tif ( key in cache ) {\n\t\t\t\t\tname = [ key, camel ];\n\t\t\t\t} else {\n\n\t\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\t\tname = camel;\n\t\t\t\t\tname = name in cache ?\n\t\t\t\t\t\t[ name ] : ( name.match( rnotwhite ) || [] );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\ti = name.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ name[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <= 35-45+\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://code.google.com/p/chromium/issues/detail?id=378607\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = data === \"true\" ? true :\n\t\t\t\t\tdata === \"false\" ? false :\n\t\t\t\t\tdata === \"null\" ? null :\n\n\t\t\t\t\t// Only convert to a number if it doesn't change the string\n\t\t\t\t\t+data + \"\" === data ? +data :\n\t\t\t\t\trbrace.test( data ) ? jQuery.parseJSON( data ) :\n\t\t\t\t\tdata;\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE11+\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = jQuery.camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data, camelKey;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// with the key as-is\n\t\t\t\tdata = dataUser.get( elem, key ) ||\n\n\t\t\t\t\t// Try to find dashed key if it exists (gh-2779)\n\t\t\t\t\t// This is for 2.2.x only\n\t\t\t\t\tdataUser.get( elem, key.replace( rmultiDash, \"-$&\" ).toLowerCase() );\n\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\tcamelKey = jQuery.camelCase( key );\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// with the key camelized\n\t\t\t\tdata = dataUser.get( elem, camelKey );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, camelKey, undefined );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tcamelKey = jQuery.camelCase( key );\n\t\t\tthis.each( function() {\n\n\t\t\t\t// First, attempt to store a copy or reference of any\n\t\t\t\t// data that might've been store with a camelCased key.\n\t\t\t\tvar data = dataUser.get( this, camelKey );\n\n\t\t\t\t// For HTML5 data-* attribute interop, we have to\n\t\t\t\t// store property names with dashes in a camelCase form.\n\t\t\t\t// This might not apply to all properties...*\n\t\t\t\tdataUser.set( this, camelKey, value );\n\n\t\t\t\t// *... In the case of properties that might _actually_\n\t\t\t\t// have dashes, we need to also store a copy of that\n\t\t\t\t// unchanged property.\n\t\t\t\tif ( key.indexOf( \"-\" ) > -1 && data !== undefined ) {\n\t\t\t\t\tdataUser.set( this, key, value );\n\t\t\t\t}\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || jQuery.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar isHidden = function( elem, el ) {\n\n\t\t// isHidden might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\t\treturn jQuery.css( elem, \"display\" ) === \"none\" ||\n\t\t\t!jQuery.contains( elem.ownerDocument, elem );\n\t};\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted,\n\t\tscale = 1,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() { return tween.cur(); } :\n\t\t\tfunction() { return jQuery.css( elem, prop, \"\" ); },\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = ( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\tdo {\n\n\t\t\t// If previous iteration zeroed out, double until we get *something*.\n\t\t\t// Use string for doubling so we don't accidentally see scale as unchanged below\n\t\t\tscale = scale || \".5\";\n\n\t\t\t// Adjust and apply\n\t\t\tinitialInUnit = initialInUnit / scale;\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Update scale, tolerating zero or NaN from tween.cur()\n\t\t// Break the loop if scale is unchanged or perfect, or if we've just had enough.\n\t\t} while (\n\t\t\tscale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations\n\t\t);\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([\\w:-]+)/ );\n\nvar rscriptType = ( /^$|\\/(?:java|ecma)script/i );\n\n\n\n// We have to close these tags to support XHTML (#13200)\nvar wrapMap = {\n\n\t// Support: IE9\n\toption: [ 1, \"<select multiple='multiple'>\", \"</select>\" ],\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting <tbody> or other required elements.\n\tthead: [ 1, \"<table>\", \"</table>\" ],\n\tcol: [ 2, \"<table><colgroup>\", \"</colgroup></table>\" ],\n\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\n// Support: IE9\nwrapMap.optgroup = wrapMap.option;\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE9-11+\n\t// Use typeof to avoid zero-argument method invocation on host objects (#15151)\n\tvar ret = typeof context.getElementsByTagName !== \"undefined\" ?\n\t\t\tcontext.getElementsByTagName( tag || \"*\" ) :\n\t\t\ttypeof context.querySelectorAll !== \"undefined\" ?\n\t\t\t\tcontext.querySelectorAll( tag || \"*\" ) :\n\t\t\t[];\n\n\treturn tag === undefined || tag && jQuery.nodeName( context, tag ) ?\n\t\tjQuery.merge( [ context ], ret ) :\n\t\tret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, contains, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( jQuery.type( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android<4.1, PhantomJS<2\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android<4.1, PhantomJS<2\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (#12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tcontains = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( contains ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0-4.3, Safari<=5.1\n\t// Check state lost if the name is set (#11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (#14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Safari<=5.1, Android<4.2\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE<=11+\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n} )();\n\n\nvar\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\n// Support: IE9\n// See #13393 for more info\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Don't attach events to noData or text/comment nodes (but allow plain objects)\n\t\tif ( !elemData ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = {};\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnotwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnotwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( event ) {\n\n\t\t// Make a writable jQuery.Event from the native event object\n\t\tevent = jQuery.event.fix( event );\n\n\t\tvar i, j, ret, matched, handleObj,\n\t\t\thandlerQueue = [],\n\t\t\targs = slice.call( arguments ),\n\t\t\thandlers = ( dataPriv.get( this, \"events\" ) || {} )[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// Triggered event must either 1) have no namespace, or 2) have namespace(s)\n\t\t\t\t// a subset or equal to those in the bound event (both can have no namespace).\n\t\t\t\tif ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, matches, sel, handleObj,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Support (at least): Chrome, IE9\n\t\t// Find delegate handlers\n\t\t// Black-hole SVG <use> instance trees (#13180)\n\t\t//\n\t\t// Support: Firefox<=42+\n\t\t// Avoid non-left-click in FF but don't block IE radio events (#3861, gh-2343)\n\t\tif ( delegateCount && cur.nodeType &&\n\t\t\t( event.type !== \"click\" || isNaN( event.button ) || event.button < 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && ( cur.disabled !== true || event.type !== \"click\" ) ) {\n\t\t\t\t\tmatches = [];\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matches[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatches[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matches[ sel ] ) {\n\t\t\t\t\t\t\tmatches.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matches.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matches } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: this, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\t// Includes some event props shared by KeyEvent and MouseEvent\n\tprops: ( \"altKey bubbles cancelable ctrlKey currentTarget detail eventPhase \" +\n\t\t\"metaKey relatedTarget shiftKey target timeStamp view which\" ).split( \" \" ),\n\n\tfixHooks: {},\n\n\tkeyHooks: {\n\t\tprops: \"char charCode key keyCode\".split( \" \" ),\n\t\tfilter: function( event, original ) {\n\n\t\t\t// Add which for key events\n\t\t\tif ( event.which == null ) {\n\t\t\t\tevent.which = original.charCode != null ? original.charCode : original.keyCode;\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tmouseHooks: {\n\t\tprops: ( \"button buttons clientX clientY offsetX offsetY pageX pageY \" +\n\t\t\t\"screenX screenY toElement\" ).split( \" \" ),\n\t\tfilter: function( event, original ) {\n\t\t\tvar eventDoc, doc, body,\n\t\t\t\tbutton = original.button;\n\n\t\t\t// Calculate pageX/Y if missing and clientX/Y available\n\t\t\tif ( event.pageX == null && original.clientX != null ) {\n\t\t\t\teventDoc = event.target.ownerDocument || document;\n\t\t\t\tdoc = eventDoc.documentElement;\n\t\t\t\tbody = eventDoc.body;\n\n\t\t\t\tevent.pageX = original.clientX +\n\t\t\t\t\t( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) -\n\t\t\t\t\t( doc && doc.clientLeft || body && body.clientLeft || 0 );\n\t\t\t\tevent.pageY = original.clientY +\n\t\t\t\t\t( doc && doc.scrollTop || body && body.scrollTop || 0 ) -\n\t\t\t\t\t( doc && doc.clientTop || body && body.clientTop || 0 );\n\t\t\t}\n\n\t\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\t\t// Note: button is not normalized, so don't use it\n\t\t\tif ( !event.which && button !== undefined ) {\n\t\t\t\tevent.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tfix: function( event ) {\n\t\tif ( event[ jQuery.expando ] ) {\n\t\t\treturn event;\n\t\t}\n\n\t\t// Create a writable copy of the event object and normalize some properties\n\t\tvar i, prop, copy,\n\t\t\ttype = event.type,\n\t\t\toriginalEvent = event,\n\t\t\tfixHook = this.fixHooks[ type ];\n\n\t\tif ( !fixHook ) {\n\t\t\tthis.fixHooks[ type ] = fixHook =\n\t\t\t\trmouseEvent.test( type ) ? this.mouseHooks :\n\t\t\t\trkeyEvent.test( type ) ? this.keyHooks :\n\t\t\t\t{};\n\t\t}\n\t\tcopy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;\n\n\t\tevent = new jQuery.Event( originalEvent );\n\n\t\ti = copy.length;\n\t\twhile ( i-- ) {\n\t\t\tprop = copy[ i ];\n\t\t\tevent[ prop ] = originalEvent[ prop ];\n\t\t}\n\n\t\t// Support: Cordova 2.5 (WebKit) (#13255)\n\t\t// All events should have a target; Cordova deviceready doesn't\n\t\tif ( !event.target ) {\n\t\t\tevent.target = document;\n\t\t}\n\n\t\t// Support: Safari 6.0+, Chrome<28\n\t\t// Target should not be a text node (#504, #13143)\n\t\tif ( event.target.nodeType === 3 ) {\n\t\t\tevent.target = event.target.parentNode;\n\t\t}\n\n\t\treturn fixHook.filter ? fixHook.filter( event, originalEvent ) : event;\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tfocus: {\n\n\t\t\t// Fire native event if possible so blur/focus sequence is correct\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this !== safeActiveElement() && this.focus ) {\n\t\t\t\t\tthis.focus();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusin\"\n\t\t},\n\t\tblur: {\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this === safeActiveElement() && this.blur ) {\n\t\t\t\t\tthis.blur();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusout\"\n\t\t},\n\t\tclick: {\n\n\t\t\t// For checkbox, fire native event so checked state will be right\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this.type === \"checkbox\" && this.click && jQuery.nodeName( this, \"input\" ) ) {\n\t\t\t\t\tthis.click();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, don't fire native .click() on links\n\t\t\t_default: function( event ) {\n\t\t\t\treturn jQuery.nodeName( event.target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android<4.0\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || jQuery.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://code.google.com/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event ) dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:-]+)[^>]*)\\/>/gi,\n\n\t// Support: IE 10-11, Edge 10240+\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /<script|<style|<link/i,\n\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\trscriptTypeMasked = /^true\\/(.*)/,\n\trcleanScript = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;\n\n// Manipulating tables requires a tbody\nfunction manipulationTarget( elem, content ) {\n\treturn jQuery.nodeName( elem, \"table\" ) &&\n\t\tjQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ?\n\n\t\telem.getElementsByTagName( \"tbody\" )[ 0 ] ||\n\t\t\telem.appendChild( elem.ownerDocument.createElement( \"tbody\" ) ) :\n\t\telem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tvar match = rscriptTypeMasked.exec( elem.type );\n\n\tif ( match ) {\n\t\telem.type = match[ 1 ];\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.access( src );\n\t\tpdataCur = dataPriv.set( dest, pdataOld );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdelete pdataCur.handle;\n\t\t\tpdataCur.events = {};\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = concat.apply( [], args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tisFunction = jQuery.isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( isFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( isFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android<4.1, PhantomJS<2\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Reenable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tjQuery.globalEval( node.textContent.replace( rcleanScript, \"\" ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && jQuery.contains( node.ownerDocument, node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html.replace( rxhtmlTag, \"<$1></$2>\" );\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <= 35-45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <= 35-45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\n\t// Keep domManip exposed until 3.0 (gh-2225)\n\tdomManip: domManip,\n\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: QtWebKit\n\t\t\t// .get() because push.apply(_, arraylike) throws\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\n\n\nvar iframe,\n\telemdisplay = {\n\n\t\t// Support: Firefox\n\t\t// We have to pre-define these values for FF (#10227)\n\t\tHTML: \"block\",\n\t\tBODY: \"block\"\n\t};\n\n/**\n * Retrieve the actual display of a element\n * @param {String} name nodeName of the element\n * @param {Object} doc Document object\n */\n\n// Called only from within defaultDisplay\nfunction actualDisplay( name, doc ) {\n\tvar elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),\n\n\t\tdisplay = jQuery.css( elem[ 0 ], \"display\" );\n\n\t// We don't have any data stored on the element,\n\t// so use \"detach\" method as fast way to get rid of the element\n\telem.detach();\n\n\treturn display;\n}\n\n/**\n * Try to determine the default display value of an element\n * @param {String} nodeName\n */\nfunction defaultDisplay( nodeName ) {\n\tvar doc = document,\n\t\tdisplay = elemdisplay[ nodeName ];\n\n\tif ( !display ) {\n\t\tdisplay = actualDisplay( nodeName, doc );\n\n\t\t// If the simple way fails, read from inside an iframe\n\t\tif ( display === \"none\" || !display ) {\n\n\t\t\t// Use the already-created iframe if possible\n\t\t\tiframe = ( iframe || jQuery( \"<iframe frameborder='0' width='0' height='0'/>\" ) )\n\t\t\t\t.appendTo( doc.documentElement );\n\n\t\t\t// Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse\n\t\t\tdoc = iframe[ 0 ].contentDocument;\n\n\t\t\t// Support: IE\n\t\t\tdoc.write();\n\t\t\tdoc.close();\n\n\t\t\tdisplay = actualDisplay( nodeName, doc );\n\t\t\tiframe.detach();\n\t\t}\n\n\t\t// Store the correct default display\n\t\telemdisplay[ nodeName ] = display;\n\t}\n\n\treturn display;\n}\nvar rmargin = ( /^margin/ );\n\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE<=11+, Firefox<=30+ (#15098, #14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\nvar swap = function( elem, options, callback, args ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.apply( elem, args || [] );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\nvar documentElement = document.documentElement;\n\n\n\n( function() {\n\tvar pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, reliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE9-11+\n\t// Style of cloned element affects source element cloned (#8908)\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tcontainer.style.cssText = \"border:0;width:8px;height:0;top:0;left:-9999px;\" +\n\t\t\"padding:0;margin-top:1px;position:absolute\";\n\tcontainer.appendChild( div );\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computeStyleTests() {\n\t\tdiv.style.cssText =\n\n\t\t\t// Support: Firefox<29, Android 2.3\n\t\t\t// Vendor-prefix box-sizing\n\t\t\t\"-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;\" +\n\t\t\t\"position:relative;display:block;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"top:1%;width:50%\";\n\t\tdiv.innerHTML = \"\";\n\t\tdocumentElement.appendChild( container );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\t\treliableMarginLeftVal = divStyle.marginLeft === \"2px\";\n\t\tboxSizingReliableVal = divStyle.width === \"4px\";\n\n\t\t// Support: Android 4.0 - 4.3 only\n\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\tdiv.style.marginRight = \"50%\";\n\t\tpixelMarginRightVal = divStyle.marginRight === \"4px\";\n\n\t\tdocumentElement.removeChild( container );\n\t}\n\n\tjQuery.extend( support, {\n\t\tpixelPosition: function() {\n\n\t\t\t// This test is executed only once but we still do memoizing\n\t\t\t// since we can use the boxSizingReliable pre-computing.\n\t\t\t// No need to check if the test was already performed, though.\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\tboxSizingReliable: function() {\n\t\t\tif ( boxSizingReliableVal == null ) {\n\t\t\t\tcomputeStyleTests();\n\t\t\t}\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelMarginRight: function() {\n\n\t\t\t// Support: Android 4.0-4.3\n\t\t\t// We're checking for boxSizingReliableVal here instead of pixelMarginRightVal\n\t\t\t// since that compresses better and they're computed together anyway.\n\t\t\tif ( boxSizingReliableVal == null ) {\n\t\t\t\tcomputeStyleTests();\n\t\t\t}\n\t\t\treturn pixelMarginRightVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\n\t\t\t// Support: IE <=8 only, Android 4.0 - 4.3 only, Firefox <=3 - 37\n\t\t\tif ( boxSizingReliableVal == null ) {\n\t\t\t\tcomputeStyleTests();\n\t\t\t}\n\t\t\treturn reliableMarginLeftVal;\n\t\t},\n\t\treliableMarginRight: function() {\n\n\t\t\t// Support: Android 2.3\n\t\t\t// Check if div with explicit width and no margin-right incorrectly\n\t\t\t// gets computed margin-right based on width of container. (#3333)\n\t\t\t// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right\n\t\t\t// This support function is only executed once so no memoizing is needed.\n\t\t\tvar ret,\n\t\t\t\tmarginDiv = div.appendChild( document.createElement( \"div\" ) );\n\n\t\t\t// Reset CSS: box-sizing; display; margin; border; padding\n\t\t\tmarginDiv.style.cssText = div.style.cssText =\n\n\t\t\t\t// Support: Android 2.3\n\t\t\t\t// Vendor-prefix box-sizing\n\t\t\t\t\"-webkit-box-sizing:content-box;box-sizing:content-box;\" +\n\t\t\t\t\"display:block;margin:0;border:0;padding:0\";\n\t\t\tmarginDiv.style.marginRight = marginDiv.style.width = \"0\";\n\t\t\tdiv.style.width = \"1px\";\n\t\t\tdocumentElement.appendChild( container );\n\n\t\t\tret = !parseFloat( window.getComputedStyle( marginDiv ).marginRight );\n\n\t\t\tdocumentElement.removeChild( container );\n\t\t\tdiv.removeChild( marginDiv );\n\n\t\t\treturn ret;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\tret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined;\n\n\t// Support: Opera 12.1x only\n\t// Fall back to style even without computed\n\t// computed is undefined for elems on document fragments\n\tif ( ( ret === \"\" || ret === undefined ) && !jQuery.contains( elem.ownerDocument, elem ) ) {\n\t\tret = jQuery.style( elem, name );\n\t}\n\n\t// Support: IE9\n\t// getPropertyValue is only needed for .css('filter') (#12537)\n\tif ( computed ) {\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// http://dev.w3.org/csswg/cssom/#resolved-values\n\t\tif ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE9-11+\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t},\n\n\tcssPrefixes = [ \"Webkit\", \"O\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style;\n\n// Return a css property mapped to a potentially vendor prefixed property\nfunction vendorPropName( name ) {\n\n\t// Shortcut for names that are not vendor prefixed\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\nfunction setPositiveNumber( elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {\n\tvar i = extra === ( isBorderBox ? \"border\" : \"content\" ) ?\n\n\t\t// If we already have the right measurement, avoid augmentation\n\t\t4 :\n\n\t\t// Otherwise initialize for horizontal or vertical properties\n\t\tname === \"width\" ? 1 : 0,\n\n\t\tval = 0;\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin, so add it if we want it\n\t\tif ( extra === \"margin\" ) {\n\t\t\tval += jQuery.css( elem, extra + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\tif ( isBorderBox ) {\n\n\t\t\t// border-box includes padding, so remove it if we want content\n\t\t\tif ( extra === \"content\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// At this point, extra isn't border nor margin, so remove border\n\t\t\tif ( extra !== \"margin\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t} else {\n\n\t\t\t// At this point, extra isn't content, so add padding\n\t\t\tval += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// At this point, extra isn't content nor padding, so add border\n\t\t\tif ( extra !== \"padding\" ) {\n\t\t\t\tval += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn val;\n}\n\nfunction getWidthOrHeight( elem, name, extra ) {\n\n\t// Start with offset property, which is equivalent to the border-box value\n\tvar valueIsBorderBox = true,\n\t\tval = name === \"width\" ? elem.offsetWidth : elem.offsetHeight,\n\t\tstyles = getStyles( elem ),\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t// Support: IE11 only\n\t// In IE 11 fullscreen elements inside of an iframe have\n\t// 100x too small dimensions (gh-1764).\n\tif ( document.msFullscreenElement && window.top !== window ) {\n\n\t\t// Support: IE11 only\n\t\t// Running getBoundingClientRect on a disconnected node\n\t\t// in IE throws an error.\n\t\tif ( elem.getClientRects().length ) {\n\t\t\tval = Math.round( elem.getBoundingClientRect()[ name ] * 100 );\n\t\t}\n\t}\n\n\t// Some non-html elements return undefined for offsetWidth, so check for null/undefined\n\t// svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285\n\t// MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668\n\tif ( val <= 0 || val == null ) {\n\n\t\t// Fall back to computed then uncomputed css if necessary\n\t\tval = curCSS( elem, name, styles );\n\t\tif ( val < 0 || val == null ) {\n\t\t\tval = elem.style[ name ];\n\t\t}\n\n\t\t// Computed unit is not pixels. Stop here and return.\n\t\tif ( rnumnonpx.test( val ) ) {\n\t\t\treturn val;\n\t\t}\n\n\t\t// Check for style in case a browser which returns unreliable values\n\t\t// for getComputedStyle silently falls back to the reliable elem.style\n\t\tvalueIsBorderBox = isBorderBox &&\n\t\t\t( support.boxSizingReliable() || val === elem.style[ name ] );\n\n\t\t// Normalize \"\", auto, and prepare for extra\n\t\tval = parseFloat( val ) || 0;\n\t}\n\n\t// Use the active box-sizing model to add/subtract irrelevant styles\n\treturn ( val +\n\t\taugmentWidthOrHeight(\n\t\t\telem,\n\t\t\tname,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles\n\t\t)\n\t) + \"px\";\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem, hidden,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tvalues[ index ] = dataPriv.get( elem, \"olddisplay\" );\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Reset the inline display of this element to learn if it is\n\t\t\t// being hidden by cascaded rules or not\n\t\t\tif ( !values[ index ] && display === \"none\" ) {\n\t\t\t\telem.style.display = \"\";\n\t\t\t}\n\n\t\t\t// Set elements which have been overridden with display: none\n\t\t\t// in a stylesheet to whatever the default browser style is\n\t\t\t// for such an element\n\t\t\tif ( elem.style.display === \"\" && isHidden( elem ) ) {\n\t\t\t\tvalues[ index ] = dataPriv.access(\n\t\t\t\t\telem,\n\t\t\t\t\t\"olddisplay\",\n\t\t\t\t\tdefaultDisplay( elem.nodeName )\n\t\t\t\t);\n\t\t\t}\n\t\t} else {\n\t\t\thidden = isHidden( elem );\n\n\t\t\tif ( display !== \"none\" || !hidden ) {\n\t\t\t\tdataPriv.set(\n\t\t\t\t\telem,\n\t\t\t\t\t\"olddisplay\",\n\t\t\t\t\thidden ? display : jQuery.css( elem, \"display\" )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of most of the elements in a second loop\n\t// to avoid the constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\t\tif ( !show || elem.style.display === \"none\" || elem.style.display === \"\" ) {\n\t\t\telem.style.display = show ? values[ index ] || \"\" : \"none\";\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"animationIterationCount\": true,\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"flexGrow\": true,\n\t\t\"flexShrink\": true,\n\t\t\"fontWeight\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {\n\t\t\"float\": \"cssFloat\"\n\t},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = jQuery.camelCase( name ),\n\t\t\tstyle = elem.style;\n\n\t\tname = jQuery.cssProps[ origName ] ||\n\t\t\t( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName );\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (#7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (#7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\tif ( type === \"number\" ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// Support: IE9-11+\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tstyle[ name ] = value;\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = jQuery.camelCase( name );\n\n\t\t// Make sure that we're working with the right name\n\t\tname = jQuery.cssProps[ origName ] ||\n\t\t\t( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName );\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( i, name ) {\n\tjQuery.cssHooks[ name ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\t\t\t\t\telem.offsetWidth === 0 ?\n\t\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\t\treturn getWidthOrHeight( elem, name, extra );\n\t\t\t\t\t\t} ) :\n\t\t\t\t\t\tgetWidthOrHeight( elem, name, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = extra && getStyles( elem ),\n\t\t\t\tsubtract = extra && augmentWidthOrHeight(\n\t\t\t\t\telem,\n\t\t\t\t\tname,\n\t\t\t\t\textra,\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\t\tstyles\n\t\t\t\t);\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ name ] = value;\n\t\t\t\tvalue = jQuery.css( elem, name );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// Support: Android 2.3\njQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn swap( elem, { \"display\": \"inline-block\" },\n\t\t\t\tcurCSS, [ elem, \"marginRight\" ] );\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( !rmargin.test( prefix ) ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( jQuery.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t},\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHidden( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 &&\n\t\t\t\t( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null ||\n\t\t\t\t\tjQuery.cssHooks[ tween.prop ] ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE9\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back Compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, timerId,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = jQuery.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4 ; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\t/* jshint validthis: true */\n\tvar prop, value, toggle, tween, hooks, oldfire, display, checkDisplay,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHidden( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Handle queue: false promises\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Height/width overflow pass\n\tif ( elem.nodeType === 1 && ( \"height\" in props || \"width\" in props ) ) {\n\n\t\t// Make sure that nothing sneaks out\n\t\t// Record all 3 overflow attributes because IE9-10 do not\n\t\t// change the overflow attribute when overflowX and\n\t\t// overflowY are set to the same value\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Set display property to inline-block for height/width\n\t\t// animations on inline elements that are having width/height animated\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\n\t\t// Test default display if display is currently \"none\"\n\t\tcheckDisplay = display === \"none\" ?\n\t\t\tdataPriv.get( elem, \"olddisplay\" ) || defaultDisplay( elem.nodeName ) : display;\n\n\t\tif ( checkDisplay === \"inline\" && jQuery.css( elem, \"float\" ) === \"none\" ) {\n\t\t\tstyle.display = \"inline-block\";\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// show/hide pass\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.exec( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// If there is dataShow left over from a stopped hide or show\n\t\t\t\t// and we are going to proceed with show, we should pretend to be hidden\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\n\t\t// Any non-fx value stops us from restoring the original display value\n\t\t} else {\n\t\t\tdisplay = undefined;\n\t\t}\n\t}\n\n\tif ( !jQuery.isEmptyObject( orig ) ) {\n\t\tif ( dataShow ) {\n\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\thidden = dataShow.hidden;\n\t\t\t}\n\t\t} else {\n\t\t\tdataShow = dataPriv.access( elem, \"fxshow\", {} );\n\t\t}\n\n\t\t// Store state if its toggle - enables .stop().toggle() to \"reverse\"\n\t\tif ( toggle ) {\n\t\t\tdataShow.hidden = !hidden;\n\t\t}\n\t\tif ( hidden ) {\n\t\t\tjQuery( elem ).show();\n\t\t} else {\n\t\t\tanim.done( function() {\n\t\t\t\tjQuery( elem ).hide();\n\t\t\t} );\n\t\t}\n\t\tanim.done( function() {\n\t\t\tvar prop;\n\n\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\tfor ( prop in orig ) {\n\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t}\n\t\t} );\n\t\tfor ( prop in orig ) {\n\t\t\ttween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\n\t\t\tif ( !( prop in dataShow ) ) {\n\t\t\t\tdataShow[ prop ] = tween.start;\n\t\t\t\tif ( hidden ) {\n\t\t\t\t\ttween.end = tween.start;\n\t\t\t\t\ttween.start = prop === \"width\" || prop === \"height\" ? 1 : 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t// If this is a noop like .hide().hide(), restore an overwritten display value\n\t} else if ( ( display === \"none\" ? defaultDisplay( elem.nodeName ) : display ) === \"inline\" ) {\n\t\tstyle.display = display;\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = jQuery.camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( jQuery.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length ; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t} else {\n\t\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length ; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length ; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( jQuery.isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tjQuery.proxy( result.stop, result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( jQuery.isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\t// attach callbacks from options\n\treturn animation.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( jQuery.isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnotwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length ; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tjQuery.isFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !jQuery.isFunction( easing ) && easing\n\t};\n\n\topt.duration = jQuery.fx.off ? 0 : typeof opt.duration === \"number\" ?\n\t\topt.duration : opt.duration in jQuery.fx.speeds ?\n\t\t\tjQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( jQuery.isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHidden ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue && type !== false ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = jQuery.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Checks the timer has not already been removed\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tif ( timer() ) {\n\t\tjQuery.fx.start();\n\t} else {\n\t\tjQuery.timers.pop();\n\t}\n};\n\njQuery.fx.interval = 13;\njQuery.fx.start = function() {\n\tif ( !timerId ) {\n\t\ttimerId = window.setInterval( jQuery.fx.tick, jQuery.fx.interval );\n\t}\n};\n\njQuery.fx.stop = function() {\n\twindow.clearInterval( timerId );\n\n\ttimerId = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\n// http://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: iOS<=5.1, Android<=4.2+\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE<=11+\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: Android<=2.3\n\t// Options inside disabled selects are incorrectly marked as disabled\n\tselect.disabled = true;\n\tsupport.optDisabled = !opt.disabled;\n\n\t// Support: IE<=11+\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// All attributes are lowercase\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\tname = name.toLowerCase();\n\t\t\thooks = jQuery.attrHooks[ name ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tjQuery.nodeName( elem, \"input\" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name, propName,\n\t\t\ti = 0,\n\t\t\tattrNames = value && value.match( rnotwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\tpropName = jQuery.propFix[ name ] || name;\n\n\t\t\t\t// Boolean attributes get special treatment (#10870)\n\t\t\t\tif ( jQuery.expr.match.bool.test( name ) ) {\n\n\t\t\t\t\t// Set corresponding property to false\n\t\t\t\t\telem[ propName ] = false;\n\t\t\t\t}\n\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle;\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ name ];\n\t\t\tattrHandle[ name ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tname.toLowerCase() :\n\t\t\t\tnull;\n\t\t\tattrHandle[ name ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\t// Use proper attribute retrieval(#12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\treturn tabindex ?\n\t\t\t\t\tparseInt( tabindex, 10 ) :\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\t\trclickable.test( elem.nodeName ) && elem.href ?\n\t\t\t\t\t\t\t0 :\n\t\t\t\t\t\t\t-1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11 only\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n\n\n\nvar rclass = /[\\t\\r\\n\\f]/g;\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( typeof value === \"string\" && value ) {\n\t\t\tclasses = value.match( rnotwhite ) || [];\n\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\t\t\t\tcur = elem.nodeType === 1 &&\n\t\t\t\t\t( \" \" + curValue + \" \" ).replace( rclass, \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = jQuery.trim( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tif ( typeof value === \"string\" && value ) {\n\t\t\tclasses = value.match( rnotwhite ) || [];\n\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 &&\n\t\t\t\t\t( \" \" + curValue + \" \" ).replace( rclass, \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = jQuery.trim( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value;\n\n\t\tif ( typeof stateVal === \"boolean\" && type === \"string\" ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar className, i, self, classNames;\n\n\t\t\tif ( type === \"string\" ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\ti = 0;\n\t\t\t\tself = jQuery( this );\n\t\t\t\tclassNames = value.match( rnotwhite ) || [];\n\n\t\t\t\twhile ( ( className = classNames[ i++ ] ) ) {\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, \"__className__\", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( \"class\",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\tdataPriv.get( this, \"__className__\" ) || \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + getClass( elem ) + \" \" ).replace( rclass, \" \" )\n\t\t\t\t\t.indexOf( className ) > -1\n\t\t\t) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\nvar rreturn = /\\r/g,\n\trspaces = /[\\x20\\t\\r\\n\\f]+/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, isFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\treturn typeof ret === \"string\" ?\n\n\t\t\t\t\t// Handle most common string cases\n\t\t\t\t\tret.replace( rreturn, \"\" ) :\n\n\t\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\t\tret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tisFunction = jQuery.isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( isFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( jQuery.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE10-11+\n\t\t\t\t\t// option.text throws exceptions (#14686, #14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tjQuery.trim( jQuery.text( elem ) ).replace( rspaces, \" \" );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\" || index < 0,\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length,\n\t\t\t\t\ti = index < 0 ?\n\t\t\t\t\t\tmax :\n\t\t\t\t\t\tone ? index : 0;\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// IE8-9 doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t( support.optDisabled ?\n\t\t\t\t\t\t\t\t!option.disabled : option.getAttribute( \"disabled\" ) === null ) &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!jQuery.nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( jQuery.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/;\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || {} )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\t\t\t\t\telem[ type ]();\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\n\t\t\t\t// Previously, `originalEvent: {}` was set here, so stopPropagation call\n\t\t\t\t// would not be triggered on donor event, since in our own\n\t\t\t\t// jQuery.event.stopPropagation function we had a check for existence of\n\t\t\t\t// originalEvent.stopPropagation method, so, consequently it would be a noop.\n\t\t\t\t//\n\t\t\t\t// But now, this \"simulate\" function is used only for events\n\t\t\t\t// for which stopPropagation() is noop, so there is no need for that anymore.\n\t\t\t\t//\n\t\t\t\t// For the 1.x branch though, guard for \"click\" and \"submit\"\n\t\t\t\t// events is still used, but was moved to jQuery.event.stopPropagation function\n\t\t\t\t// because `originalEvent` should point to the original event for the constancy\n\t\t\t\t// with other events and for more focused logic\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\n\t\tif ( e.isDefaultPrevented() ) {\n\t\t\tevent.preventDefault();\n\t\t}\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\njQuery.each( ( \"blur focus focusin focusout load resize scroll unload click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup error contextmenu\" ).split( \" \" ),\n\tfunction( i, name ) {\n\n\t// Handle event binding\n\tjQuery.fn[ name ] = function( data, fn ) {\n\t\treturn arguments.length > 0 ?\n\t\t\tthis.on( name, null, data, fn ) :\n\t\t\tthis.trigger( name );\n\t};\n} );\n\njQuery.fn.extend( {\n\thover: function( fnOver, fnOut ) {\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t}\n} );\n\n\n\n\nsupport.focusin = \"onfocusin\" in window;\n\n\n// Support: Firefox\n// Firefox doesn't have focus(in | out) events\n// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n//\n// Support: Chrome, Safari\n// focus(in | out) events fire after focus & blur events,\n// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n// Related ticket - https://code.google.com/p/chromium/issues/detail?id=449857\nif ( !support.focusin ) {\n\tjQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );\n\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.access( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tdataPriv.remove( doc, fix );\n\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.access( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t} );\n}\nvar location = window.location;\n\nvar nonce = jQuery.now();\n\nvar rquery = ( /\\?/ );\n\n\n\n// Support: Android 2.3\n// Workaround failure to string-cast null input\njQuery.parseJSON = function( data ) {\n\treturn JSON.parse( data + \"\" );\n};\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE9\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {\n\t\txml = undefined;\n\t}\n\n\tif ( !xml || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\tjQuery.error( \"Invalid XML: \" + data );\n\t}\n\treturn xml;\n};\n\n\nvar\n\trhash = /#.*$/,\n\trts = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t * - BEFORE asking for a transport\n\t * - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document.createElement( \"a\" );\n\toriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || [];\n\n\t\tif ( jQuery.isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": jQuery.parseJSON,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// The jqXHR state\n\t\t\tstate = 0,\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( state === 2 ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match;\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn state === 2 ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tvar lname = name.toLowerCase();\n\t\t\t\t\tif ( !state ) {\n\t\t\t\t\t\tname = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( !state ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( state < 2 ) {\n\t\t\t\t\t\t\tfor ( code in map ) {\n\n\t\t\t\t\t\t\t\t// Lazy-add the new callback in a way that preserves old ones\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR ).complete = completeDeferred.add;\n\t\tjqXHR.success = jqXHR.done;\n\t\tjqXHR.error = jqXHR.fail;\n\n\t\t// Remove hash character (#7531: and string promotion)\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (#10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" ).replace( rhash, \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket #12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = jQuery.trim( s.dataType || \"*\" ).toLowerCase().match( rnotwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document.createElement( \"a\" );\n\n\t\t\t// Support: IE8-11+\n\t\t\t// IE throws exception if url is malformed, e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE8-11+\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( state === 2 ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\tcacheURL = s.url;\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// If data is available, append data to url\n\t\t\tif ( s.data ) {\n\t\t\t\tcacheURL = ( s.url += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data );\n\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add anti-cache in url if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\ts.url = rts.test( cacheURL ) ?\n\n\t\t\t\t\t// If there is already a '_' parameter, set its value\n\t\t\t\t\tcacheURL.replace( rts, \"$1_=\" + nonce++ ) :\n\n\t\t\t\t\t// Otherwise add one to the end\n\t\t\t\t\tcacheURL + ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + nonce++;\n\t\t\t}\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tfor ( i in { success: 1, error: 1, complete: 1 } ) {\n\t\t\tjqXHR[ i ]( s[ i ] );\n\t\t}\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( state === 2 ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tstate = 1;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Propagate exception as error if not done\n\t\t\t\tif ( state < 2 ) {\n\t\t\t\t\tdone( -1, e );\n\n\t\t\t\t// Simply rethrow otherwise\n\t\t\t\t} else {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Called once\n\t\t\tif ( state === 2 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// State is \"done\" now\n\t\t\tstate = 2;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( jQuery.isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\n\njQuery._evalUrl = function( url ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (#11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tasync: false,\n\t\tglobal: false,\n\t\t\"throws\": true\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapAll( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( this[ 0 ] ) {\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar isFunction = jQuery.isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function() {\n\t\treturn this.parent().each( function() {\n\t\t\tif ( !jQuery.nodeName( this, \"body\" ) ) {\n\t\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t\t}\n\t\t} ).end();\n\t}\n} );\n\n\njQuery.expr.filters.hidden = function( elem ) {\n\treturn !jQuery.expr.filters.visible( elem );\n};\njQuery.expr.filters.visible = function( elem ) {\n\n\t// Support: Opera <= 12.12\n\t// Opera reports offsetWidths and offsetHeights less than zero on some elements\n\t// Use OR instead of AND as the element is not visible if either is true\n\t// See tickets #10406 and #13132\n\treturn elem.offsetWidth > 0 || elem.offsetHeight > 0 || elem.getClientRects().length > 0;\n};\n\n\n\n\nvar r20 = /%20/g,\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( jQuery.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && jQuery.type( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, value ) {\n\n\t\t\t// If value is a function, invoke it and return its value\n\t\t\tvalue = jQuery.isFunction( value ) ? value() : ( value == null ? \"\" : value );\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" + encodeURIComponent( value );\n\t\t};\n\n\t// Set traditional to true for jQuery <= 1.3.2 behavior.\n\tif ( traditional === undefined ) {\n\t\ttraditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" ).replace( r20, \"+\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} )\n\t\t.filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} )\n\t\t.map( function( i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\treturn val == null ?\n\t\t\t\tnull :\n\t\t\t\tjQuery.isArray( val ) ?\n\t\t\t\t\tjQuery.map( val, function( val ) {\n\t\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t\t} ) :\n\t\t\t\t\t{ name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE9\n\t\t// #1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback, errorCallback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\txhr.open(\n\t\t\t\t\toptions.type,\n\t\t\t\t\toptions.url,\n\t\t\t\t\toptions.async,\n\t\t\t\t\toptions.username,\n\t\t\t\t\toptions.password\n\t\t\t\t);\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\n\t\t\t\t\t\t\t\t// Support: IE9\n\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\tif ( typeof xhr.status !== \"number\" ) {\n\t\t\t\t\t\t\t\t\tcomplete( 0, \"error\" );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see #8605, #14207\n\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t// Support: IE9 only\n\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) !== \"text\" ||\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\terrorCallback = xhr.onerror = callback( \"error\" );\n\n\t\t\t\t// Support: IE9\n\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t// to handle uncaught aborts\n\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t} else {\n\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = callback( \"abort\" );\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// #14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\n\t// This transport only deals with cross domain requests\n\tif ( s.crossDomain ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"<script>\" ).prop( {\n\t\t\t\t\tcharset: s.scriptCharset,\n\t\t\t\t\tsrc: s.url\n\t\t\t\t} ).on(\n\t\t\t\t\t\"load error\",\n\t\t\t\t\tcallback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === \"error\" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\tdocument.head.appendChild( script[ 0 ] );\n\t\t\t},\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup( {\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n} );\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t( s.contentType || \"\" )\n\t\t\t\t\t.indexOf( \"application/x-www-form-urlencoded\" ) === 0 &&\n\t\t\t\trjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[ \"script json\" ] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// Force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always( function() {\n\n\t\t\t// If previous value didn't exist - remove it\n\t\t\tif ( overwritten === undefined ) {\n\t\t\t\tjQuery( window ).removeProp( callbackName );\n\n\t\t\t// Otherwise restore preexisting value\n\t\t\t} else {\n\t\t\t\twindow[ callbackName ] = overwritten;\n\t\t\t}\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\n\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// Save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && jQuery.isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t} );\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n} );\n\n\n\n\n// Argument \"data\" should be string of html\n// context (optional): If specified, the fragment will be created in this context,\n// defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\tcontext = context || document;\n\n\tvar parsed = rsingleTag.exec( data ),\n\t\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[ 1 ] ) ];\n\t}\n\n\tparsed = buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\n// Keep a copy of the old load method\nvar _load = jQuery.fn.load;\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tif ( typeof url !== \"string\" && _load ) {\n\t\treturn _load.apply( this, arguments );\n\t}\n\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf( \" \" );\n\n\tif ( off > -1 ) {\n\t\tselector = jQuery.trim( url.slice( off ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( jQuery.isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax( {\n\t\t\turl: url,\n\n\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t// Make value of this field explicit since\n\t\t\t// user can override it through ajaxSetup method\n\t\t\ttype: type || \"GET\",\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t} ).done( function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery( \"<div>\" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t// but they are ignored because response was set above.\n\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t} ).always( callback && function( jqXHR, status ) {\n\t\t\tself.each( function() {\n\t\t\t\tcallback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t} );\n\t\t} );\n\t}\n\n\treturn this;\n};\n\n\n\n\n// Attach a bunch of functions for handling common AJAX events\njQuery.each( [\n\t\"ajaxStart\",\n\t\"ajaxStop\",\n\t\"ajaxComplete\",\n\t\"ajaxError\",\n\t\"ajaxSuccess\",\n\t\"ajaxSend\"\n], function( i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n} );\n\n\n\n\njQuery.expr.filters.animated = function( elem ) {\n\treturn jQuery.grep( jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t} ).length;\n};\n\n\n\n\n/**\n * Gets a window from an element\n */\nfunction getWindow( elem ) {\n\treturn jQuery.isWindow( elem ) ? elem : elem.nodeType === 9 && elem.defaultView;\n}\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// Set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf( \"auto\" ) > -1;\n\n\t\t// Need to be able to calculate position if either\n\t\t// top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( jQuery.isFunction( options ) ) {\n\n\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\toptions = options.call( elem, i, jQuery.extend( {}, curOffset ) );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend( {\n\toffset: function( options ) {\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each( function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t} );\n\t\t}\n\n\t\tvar docElem, win,\n\t\t\telem = this[ 0 ],\n\t\t\tbox = { top: 0, left: 0 },\n\t\t\tdoc = elem && elem.ownerDocument;\n\n\t\tif ( !doc ) {\n\t\t\treturn;\n\t\t}\n\n\t\tdocElem = doc.documentElement;\n\n\t\t// Make sure it's not a disconnected DOM node\n\t\tif ( !jQuery.contains( docElem, elem ) ) {\n\t\t\treturn box;\n\t\t}\n\n\t\tbox = elem.getBoundingClientRect();\n\t\twin = getWindow( doc );\n\t\treturn {\n\t\t\ttop: box.top + win.pageYOffset - docElem.clientTop,\n\t\t\tleft: box.left + win.pageXOffset - docElem.clientLeft\n\t\t};\n\t},\n\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// Fixed elements are offset from window (parentOffset = {top:0, left: 0},\n\t\t// because it is its only offset parent\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\n\t\t\t// Assume getBoundingClientRect is there when computed position is fixed\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\n\t\t\t// Get *real* offsetParent\n\t\t\toffsetParent = this.offsetParent();\n\n\t\t\t// Get correct offsets\n\t\t\toffset = this.offset();\n\t\t\tif ( !jQuery.nodeName( offsetParent[ 0 ], \"html\" ) ) {\n\t\t\t\tparentOffset = offsetParent.offset();\n\t\t\t}\n\n\t\t\t// Add offsetParent borders\n\t\t\tparentOffset.top += jQuery.css( offsetParent[ 0 ], \"borderTopWidth\", true );\n\t\t\tparentOffset.left += jQuery.css( offsetParent[ 0 ], \"borderLeftWidth\", true );\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\t// This method will return documentElement in the following cases:\n\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t// documentElement of the parent window\n\t// 2) For the hidden or detached element\n\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t//\n\t// but those exceptions were never presented as a real life use-cases\n\t// and might be considered as more preferable results.\n\t//\n\t// This logic, however, is not guaranteed and can change at any point in the future\n\toffsetParent: function() {\n\t\treturn this.map( function() {\n\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\twhile ( offsetParent && jQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || documentElement;\n\t\t} );\n\t}\n} );\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = \"pageYOffset\" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\t\t\tvar win = getWindow( elem );\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length );\n\t};\n} );\n\n// Support: Safari<7-8+, Chrome<37-44+\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// Blink bug: https://code.google.com/p/chromium/issues/detail?id=229280\n// getComputedStyle returns percent when specified for top/left/bottom/right;\n// rather than make the css module depend on the offset module, just check for it here\njQuery.each( [ \"top\", \"left\" ], function( i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\n\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n} );\n\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( { padding: \"inner\" + name, content: type, \"\": \"outer\" + name },\n\t\tfunction( defaultExtra, funcName ) {\n\n\t\t// Margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( jQuery.isWindow( elem ) ) {\n\n\t\t\t\t\t// As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there\n\t\t\t\t\t// isn't a whole lot we can do. See pull request at this URL for discussion:\n\t\t\t\t\t// https://github.com/jquery/jquery/pull/764\n\t\t\t\t\treturn elem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable, null );\n\t\t};\n\t} );\n} );\n\n\njQuery.fn.extend( {\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ?\n\t\t\tthis.off( selector, \"**\" ) :\n\t\t\tthis.off( types, selector || \"**\", fn );\n\t},\n\tsize: function() {\n\t\treturn this.length;\n\t}\n} );\n\njQuery.fn.andSelf = jQuery.fn.addBack;\n\n\n\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t} );\n}\n\n\n\nvar\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in AMD\n// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (#13566)\nif ( !noGlobal ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\nreturn jQuery;\n}));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/jquery/dist/jquery.js\n ** module id = 3\n ** module chunks = 1 2 3 5 6\n **/","/**\r\n * Created by gavorhes on 12/10/2015.\r\n */\r\n\r\n\r\n/**\r\n * create a namespace on the gv object\r\n * @param {string} namespace to create\r\n * @returns {object} object representing the namespace\r\n */\r\nfunction provide(namespace){\r\n \"use strict\";\r\n if (typeof window['gv'] == 'undefined'){\r\n window['gv'] = {};\r\n }\r\n\r\n let parts = namespace.split('.');\r\n let nameSpace = window['gv'];\r\n\r\n for (let i=0; i< parts.length; i++){\r\n let newObject = nameSpace[parts[i]];\r\n\r\n if (typeof newObject == 'undefined'){\r\n nameSpace[parts[i]] = {};\r\n }\r\n\r\n nameSpace = nameSpace[parts[i]];\r\n }\r\n\r\n return nameSpace;\r\n}\r\n\r\nprovide('util');\r\nwindow['gv'].util.provide = provide;\r\n\r\nexport default provide;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/util/provide.ts\n **/","\"use strict\";\r\nexports.ol = require('../ol/ol-build');\r\n// // export default require('../ol/ol-build');\r\n//\r\n// const fish = 10;\r\n// export = fish;\r\n//\r\n//\r\n// export function cat(bird: string){\r\n// console.log('eat the fish')\r\n// }\r\n//\r\n// export function nice(eat: number){\r\n// console.log('eat that fish');\r\n// }\r\n//\r\n// export class Big{\r\n// glenn: string;\r\n//\r\n// constructor(isGlenn){\r\n// this.glenn = isGlenn;\r\n// }\r\n//\r\n// set isGlenn(f: string){\r\n// console.log(this.glenn)\r\n// }\r\n//\r\n// run(){\r\n// console.log(this.glenn + \" can run\");\r\n// }\r\n// }\r\n//\r\n// export namespace HereIt{\r\n//\r\n// export class Big2 {\r\n// glenn: string;\r\n//\r\n// constructor(isGlenn) {\r\n// this.glenn = isGlenn;\r\n// }\r\n//\r\n// set isGlenn(f: string) {\r\n// console.log(this.glenn)\r\n// }\r\n//\r\n// run() {\r\n// console.log(this.glenn + \" can run\");\r\n// }\r\n// }\r\n//\r\n//\r\n// } \r\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/custom-ol/lib/index.js\n ** module id = 5\n ** module chunks = 1 2 5\n **/","// OpenLayers 3. See http://openlayers.org/\r\n// License: https://raw.githubusercontent.com/openlayers/ol3/master/LICENSE.md\r\n;(function (root, factory) {\r\n if (typeof exports === \"object\") {\r\n module.exports = factory();\r\n } else if (typeof define === \"function\" && define.amd) {\r\n define([], factory);\r\n } else {\r\n root.ol = factory();\r\n }\r\n}(this, function () {\r\n var OPENLAYERS = {};\r\n var n,aa=this;\r\nfunction ba(){var a=aa.setImmediate,b=typeof a;if(\"object\"==b)if(a){if(a instanceof Array)return\"array\";if(a instanceof Object)return b;var c=Object.prototype.toString.call(a);if(\"[object Window]\"==c)return\"object\";if(\"[object Array]\"==c||\"number\"==typeof a.length&&\"undefined\"!=typeof a.splice&&\"undefined\"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable(\"splice\"))return\"array\";if(\"[object Function]\"==c||\"undefined\"!=typeof a.call&&\"undefined\"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable(\"call\"))return\"function\"}else return\"null\";\r\nelse if(\"function\"==b&&\"undefined\"==typeof a.call)return\"object\";return b}function ca(a,b,c){return a.call.apply(a.bind,arguments)}function da(a,b,c){if(!a)throw Error();if(2<arguments.length){var d=Array.prototype.slice.call(arguments,2);return function(){var c=Array.prototype.slice.call(arguments);Array.prototype.unshift.apply(c,d);return a.apply(b,c)}}return function(){return a.apply(b,arguments)}}\r\nfunction ea(a,b,c){ea=Function.prototype.bind&&-1!=Function.prototype.bind.toString().indexOf(\"native code\")?ca:da;return ea.apply(null,arguments)}function y(a,b){var c=a.split(\".\"),d=OPENLAYERS||aa;c[0]in d||!d.execScript||d.execScript(\"var \"+c[0]);for(var e;c.length&&(e=c.shift());)c.length||void 0===b?d[e]?d=d[e]:d=d[e]={}:d[e]=b};var fa;function B(a,b){a.prototype=Object.create(b.prototype);a.prototype.constructor=a}function I(){}function J(a){return a.ie||(a.ie=++ga)}var ga=0;if(\"undefined\"!==typeof window)var K=window;else\"undefined\"!==typeof global?K=global:\"undefined\"!==typeof self&&(K=self);function ha(a){this.message=\"Assertion failed. See /doc/errors/#\"+a+\" for details.\";this.code=a;this.name=\"AssertionError\"}B(ha,Error);function L(a,b){if(!a)throw new ha(b);};function ia(a,b,c){return Math.min(Math.max(a,b),c)}var ja=function(){var a;\"cosh\"in Math?a=Math.cosh:a=function(a){a=Math.exp(a);return(a+1/a)/2};return a}();function ka(a){L(0<a,29);return Math.pow(2,Math.ceil(Math.log(a)/Math.LN2))}function la(a,b){var c=a%b;return 0>c*b?c+b:c};function ma(a){return function(b){if(b)return[ia(b[0],a[0],a[2]),ia(b[1],a[1],a[3])]}}function na(a){return a};function oa(a,b,c){this.center=a;this.resolution=b;this.rotation=c};var pa=\"function\"===typeof Object.assign?Object.assign:function(a,b){if(!a||!a)throw new TypeError(\"Cannot convert undefined or null to object\");for(var c=Object(a),d=1,e=arguments.length;d<e;++d){var f=arguments[d];if(void 0!==f&&null!==f)for(var g in f)f.hasOwnProperty(g)&&(c[g]=f[g])}return c};function qa(a){for(var b in a)delete a[b]}function ra(a){var b=[],c;for(c in a)b.push(a[c]);return b}function sa(a){for(var b in a)return!1;return!b};function ta(a){function b(b){var d=a.listener,e=a.jc||a.target;a.mc&&M(a);return d.call(e,b)}return a.kc=b}function ua(a,b,c,d){for(var e,f=0,g=a.length;f<g;++f)if(e=a[f],e.listener===b&&e.jc===c)return d&&(e.deleteIndex=f),e}function va(a,b){var c=a.ha;return c?c[b]:void 0}function wa(a){var b=a.ha;b||(b=a.ha={});return b}\r\nfunction xa(a,b){var c=va(a,b);if(c){for(var d=0,e=c.length;d<e;++d)a.removeEventListener(b,c[d].kc),qa(c[d]);c.length=0;if(c=a.ha)delete c[b],0===Object.keys(c).length&&delete a.ha}}function R(a,b,c,d,e){var f=wa(a),g=f[b];g||(g=f[b]=[]);(f=ua(g,c,d,!1))?e||(f.mc=!1):(f={jc:d,mc:!!e,listener:c,target:a,type:b},a.addEventListener(b,ta(f)),g.push(f));return f}function ya(a,b,c,d){(a=va(a,b))&&(c=ua(a,c,d,!0))&&M(c)}\r\nfunction M(a){if(a&&a.target){a.target.removeEventListener(a.type,a.kc);var b=va(a.target,a.type);if(b){var c=\"deleteIndex\"in a?a.deleteIndex:b.indexOf(a);-1!==c&&b.splice(c,1);0===b.length&&xa(a.target,a.type)}qa(a)}}function za(a){var b=wa(a),c;for(c in b)xa(a,c)};function Aa(){}Aa.prototype.ra=!1;function Da(a){a.ra||(a.ra=!0,a.R())}Aa.prototype.R=I;function T(a){this.type=a;this.target=null}T.prototype.preventDefault=T.prototype.stopPropagation=function(){this.qe=!0};function Ea(a){a.stopPropagation()}function Fa(a){a.preventDefault()};function Ga(){this.ca={};this.K={};this.C={}}B(Ga,Aa);Ga.prototype.addEventListener=function(a,b){var c=this.C[a];c||(c=this.C[a]=[]);-1===c.indexOf(b)&&c.push(b)};function U(a,b){var c=\"string\"===typeof b?new T(b):b,d=c.type;c.target=a;var e=a.C[d],f;if(e){d in a.K||(a.K[d]=0,a.ca[d]=0);++a.K[d];for(var g=0,h=e.length;g<h;++g)if(!1===e[g].call(a,c)||c.qe){f=!1;break}--a.K[d];if(0===a.K[d]){c=a.ca[d];for(delete a.ca[d];c--;)a.removeEventListener(d,I);delete a.K[d]}return f}}Ga.prototype.R=function(){za(this)};\r\nfunction Ha(a,b){return b?b in a.C:0<Object.keys(a.C).length}Ga.prototype.removeEventListener=function(a,b){var c=this.C[a];if(c){var d=c.indexOf(b);a in this.ca?(c[d]=I,++this.ca[a]):(c.splice(d,1),0===c.length&&delete this.C[a])}};function Ia(){Ga.call(this);this.b=0}B(Ia,Ga);Ia.prototype.w=function(){++this.b;U(this,\"change\")};Ia.prototype.Y=function(a,b,c){if(Array.isArray(a)){for(var d=a.length,e=Array(d),f=0;f<d;++f)e[f]=R(this,a[f],b,c);return e}return R(this,a,b,c)};Ia.prototype.hd=function(a,b,c){if(Array.isArray(a)){for(var d=a.length,e=Array(d),f=0;f<d;++f)e[f]=R(this,a[f],b,c,!0);return e}return R(this,a,b,c,!0)};function Ja(a,b,c){T.call(this,a);this.key=b;this.oldValue=c}B(Ja,T);function V(a){Ia.call(this);J(this);this.M={};void 0!==a&&this.l(a)}B(V,Ia);var Ka={};function La(a){return Ka.hasOwnProperty(a)?Ka[a]:Ka[a]=\"change:\"+a}V.prototype.get=function(a){var b;this.M.hasOwnProperty(a)&&(b=this.M[a]);return b};V.prototype.Ea=function(){return pa({},this.M)};V.prototype.set=function(a,b,c){c?this.M[a]=b:(c=this.M[a],this.M[a]=b,c!==b&&(b=La(a),U(this,new Ja(b,a,c)),U(this,new Ja(\"propertychange\",a,c))))};\r\nV.prototype.l=function(a,b){for(var c in a)this.set(c,a[c],b)};function Ma(a,b){return a>b?1:a<b?-1:0}function Na(a,b,c){var d=a.length;if(a[0]<=b)return 0;if(!(b<=a[d-1]))if(0<c)for(c=1;c<d;++c){if(a[c]<b)return c-1}else if(0>c)for(c=1;c<d;++c){if(a[c]<=b)return c}else for(c=1;c<d;++c){if(a[c]==b)return c;if(a[c]<b)return a[c-1]-b<b-a[c]?c-1:c}return d-1}function Oa(a){return a.reduce(function(a,c){return Array.isArray(c)?a.concat(Oa(c)):a.concat(c)},[])}function Pa(a,b){var c,d=Array.isArray(b)?b:[b],e=d.length;for(c=0;c<e;c++)a[a.length]=d[c]}\r\nfunction Qa(a,b){var c=a.indexOf(b),d=-1<c;d&&a.splice(c,1);return d}function Ra(a,b){var c=a.length;if(c!==b.length)return!1;for(var d=0;d<c;d++)if(a[d]!==b[d])return!1;return!0}function Sa(a){var b=Ta,c=a.length,d=Array(a.length),e;for(e=0;e<c;e++)d[e]={index:e,value:a[e]};d.sort(function(a,c){return b(a.value,c.value)||a.index-c.index});for(e=0;e<a.length;e++)a[e]=d[e].value}function Ua(a,b){var c=b||Ma;return a.every(function(b,e){if(0===e)return!0;var f=c(a[e-1],b);return!(0<f||0===f)})};function Va(a){return function(b,c,d){if(void 0!==b)return b=Na(a,b,d),b=ia(b+c,0,a.length-1),c=Math.floor(b),b!=c&&c<a.length-1?a[c]/Math.pow(a[c]/a[c+1],b-c):a[c]}}function Wa(a,b,c){return function(d,e,f){if(void 0!==d)return d=Math.max(Math.floor(Math.log(b/d)/Math.log(a)+(-f/2+.5))+e,0),void 0!==c&&(d=Math.min(d,c)),b/Math.pow(a,d)}};function Xa(a){if(void 0!==a)return 0}function Ya(a,b){if(void 0!==a)return a+b}function Za(a){var b=2*Math.PI/a;return function(a,d){if(void 0!==a)return a=Math.floor((a+d)/b+.5)*b}}function $a(){var a=5*Math.PI/180;return function(b,c){if(void 0!==b)return Math.abs(b+c)<=a?0:b+c}};function ab(a,b){a[0]+=b[0];a[1]+=b[1]}function bb(a,b){var c=Math.cos(b),d=Math.sin(b),e=a[1]*c+a[0]*d;a[0]=a[0]*c-a[1]*d;a[1]=e};function cb(a){for(var b=db(),c=0,d=a.length;c<d;++c)eb(b,a[c]);return b}function fb(a,b,c){return c?(c[0]=a[0]-b,c[1]=a[1]-b,c[2]=a[2]+b,c[3]=a[3]+b,c):[a[0]-b,a[1]-b,a[2]+b,a[3]+b]}function gb(a,b){return b?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3],b):a.slice()}function hb(a,b){return a[0]<=b[0]&&b[2]<=a[2]&&a[1]<=b[1]&&b[3]<=a[3]}function db(){return[Infinity,Infinity,-Infinity,-Infinity]}function ib(a,b,c,d,e){return e?(e[0]=a,e[1]=b,e[2]=c,e[3]=d,e):[a,b,c,d]}\r\nfunction jb(a){return ib(Infinity,Infinity,-Infinity,-Infinity,a)}function kb(a,b){var c=a[0],d=a[1];return ib(c,d,c,d,b)}function lb(a,b){return a[0]==b[0]&&a[2]==b[2]&&a[1]==b[1]&&a[3]==b[3]}function mb(a,b){b[0]<a[0]&&(a[0]=b[0]);b[2]>a[2]&&(a[2]=b[2]);b[1]<a[1]&&(a[1]=b[1]);b[3]>a[3]&&(a[3]=b[3])}function eb(a,b){b[0]<a[0]&&(a[0]=b[0]);b[0]>a[2]&&(a[2]=b[0]);b[1]<a[1]&&(a[1]=b[1]);b[1]>a[3]&&(a[3]=b[1])}\r\nfunction nb(a,b,c,d,e){for(;c<d;c+=e){var f=a,g=b[c],h=b[c+1];f[0]=Math.min(f[0],g);f[1]=Math.min(f[1],h);f[2]=Math.max(f[2],g);f[3]=Math.max(f[3],h)}return a}function ob(a){var b=0;pb(a)||(b=qb(a)*rb(a));return b}function sb(a){return[a[0],a[1]]}function tb(a){return[(a[0]+a[2])/2,(a[1]+a[3])/2]}\r\nfunction ub(a,b,c,d,e){var f=b*d[0]/2;d=b*d[1]/2;b=Math.cos(c);var g=Math.sin(c);c=f*b;f*=g;b*=d;var h=d*g,k=a[0],l=a[1];a=k-c+h;d=k-c-h;g=k+c-h;c=k+c+h;var h=l-f-b,k=l-f+b,m=l+f+b,f=l+f-b;return ib(Math.min(a,d,g,c),Math.min(h,k,m,f),Math.max(a,d,g,c),Math.max(h,k,m,f),e)}function rb(a){return a[3]-a[1]}function vb(a,b){var c=db();wb(a,b)&&(c[0]=a[0]>b[0]?a[0]:b[0],c[1]=a[1]>b[1]?a[1]:b[1],c[2]=a[2]<b[2]?a[2]:b[2],c[3]=a[3]<b[3]?a[3]:b[3]);return c}function xb(a){return[a[0],a[3]]}\r\nfunction qb(a){return a[2]-a[0]}function wb(a,b){return a[0]<=b[2]&&a[2]>=b[0]&&a[1]<=b[3]&&a[3]>=b[1]}function pb(a){return a[2]<a[0]||a[3]<a[1]};function yb(){return!0}function zb(){return!1};/*\r\n\r\n Latitude/longitude spherical geodesy formulae taken from\r\n http://www.movable-type.co.uk/scripts/latlong.html\r\n Licensed under CC-BY-3.0.\r\n*/\r\nfunction Ab(a){this.radius=a}function Bb(a,b){var c=a[1]*Math.PI/180,d=b[1]*Math.PI/180,e=(d-c)/2,f=(b[0]-a[0])*Math.PI/180/2,c=Math.sin(e)*Math.sin(e)+Math.sin(f)*Math.sin(f)*Math.cos(c)*Math.cos(d);return 2*Cb.radius*Math.atan2(Math.sqrt(c),Math.sqrt(1-c))}\r\nAb.prototype.offset=function(a,b,c){var d=a[1]*Math.PI/180;b/=this.radius;var e=Math.asin(Math.sin(d)*Math.cos(b)+Math.cos(d)*Math.sin(b)*Math.cos(c));return[180*(a[0]*Math.PI/180+Math.atan2(Math.sin(c)*Math.sin(b)*Math.cos(d),Math.cos(b)-Math.sin(d)*Math.sin(e)))/Math.PI,180*e/Math.PI]};var Cb=new Ab(6370997);var Db={};Db.degrees=2*Math.PI*Cb.radius/360;Db.ft=.3048;Db.m=1;Db[\"us-ft\"]=1200/3937;\r\nfunction Eb(a){this.ya=a.code;this.a=a.units;this.h=void 0!==a.extent?a.extent:null;this.c=void 0!==a.global?a.global:!1;this.b=!(!this.c||!this.h);this.i=void 0!==a.getPointResolution?a.getPointResolution:this.j;this.f=null;this.g=a.metersPerUnit;var b=Fb,c=a.code,d=Gb||K.proj4;if(\"function\"==typeof d&&void 0===b[c]){var e=d.defs(c);if(void 0!==e){void 0===a.metersPerUnit&&(this.g=e.to_meter);void 0===a.units&&(this.a=e.units);var f,g;for(f in b)if(a=d.defs(f),void 0!==a)if(b=Hb(f),a===e)Ib([b,this]);\r\nelse{g=d(f,c);a=g.forward;g=g.inverse;var b=Hb(b),h=Hb(this);Jb(b,h,Kb(a));Jb(h,b,Kb(g))}}}}Eb.prototype.l=function(){return this.ya};Eb.prototype.G=function(){return this.h};function Lb(a){return a.g||Db[a.a]}Eb.prototype.j=function(a,b){if(\"degrees\"==this.a)return a;var c=Mb(this,Hb(\"EPSG:4326\")),d=[b[0]-a/2,b[1],b[0]+a/2,b[1],b[0],b[1]-a/2,b[0],b[1]+a/2],d=c(d,d,2),c=(Bb(d.slice(0,2),d.slice(2,4))+Bb(d.slice(4,6),d.slice(6,8)))/2,d=Lb(this);void 0!==d&&(c/=d);return c};\r\nEb.prototype.getPointResolution=function(a,b){return this.i(a,b)};var Fb={},Ob={},Gb=null;function Ib(a){Pb(a);a.forEach(function(b){a.forEach(function(a){b!==a&&Jb(b,a,Qb)})})}function Rb(a){Fb[a.ya]=a;Jb(a,a,Qb)}function Pb(a){var b=[];a.forEach(function(a){b.push(Rb(a))})}function Sb(a){return a?\"string\"===typeof a?Hb(a):a:Hb(\"EPSG:3857\")}function Jb(a,b,c){a=a.ya;b=b.ya;a in Ob||(Ob[a]={});Ob[a][b]=c}\r\nfunction Kb(a){return function(b,c,d){var e=b.length;d=void 0!==d?d:2;c=void 0!==c?c:Array(e);var f,g;for(g=0;g<e;g+=d)for(f=a([b[g],b[g+1]]),c[g]=f[0],c[g+1]=f[1],f=d-1;2<=f;--f)c[g+f]=b[g+f];return c}}function Hb(a){var b;if(a instanceof Eb)b=a;else if(\"string\"===typeof a){b=Fb[a];var c=Gb||K.proj4;void 0===b&&\"function\"==typeof c&&void 0!==c.defs(a)&&(b=new Eb({code:a}),Rb(b))}return b||null}function Tb(a,b){if(a===b)return!0;var c=a.a===b.a;return a.ya===b.ya?c:Mb(a,b)===Qb&&c}\r\nfunction Ub(a,b){var c=Hb(a),d=Hb(b);return Mb(c,d)}function Mb(a,b){var c=a.ya,d=b.ya,e;c in Ob&&d in Ob[c]&&(e=Ob[c][d]);void 0===e&&(e=Vb);return e}function Vb(a,b){if(void 0!==b&&a!==b){for(var c=0,d=a.length;c<d;++c)b[c]=a[c];a=b}return a}function Qb(a,b){var c;if(void 0!==b){c=0;for(var d=a.length;c<d;++c)b[c]=a[c];c=b}else c=a.slice();return c};function Wb(){V.call(this);this.j=db();this.s=-1;this.f={};this.i=this.g=0}B(Wb,V);Wb.prototype.G=function(a){this.s!=this.b&&(this.j=this.mb(this.j),this.s=this.b);var b=this.j;a?(a[0]=b[0],a[1]=b[1],a[2]=b[2],a[3]=b[3]):a=b;return a};Wb.prototype.transform=function(a,b){this.Hb(Ub(a,b));return this};function Xb(a,b,c,d,e,f){for(var g=f?f:[],h=0;b<c;b+=d){var k=a[b],l=a[b+1];g[h++]=e[0]*k+e[2]*l+e[4];g[h++]=e[1]*k+e[3]*l+e[5]}f&&g.length!=h&&(g.length=h);return g};function Yb(){Wb.call(this);this.c=\"XY\";this.A=2;this.o=null}B(Yb,Wb);function Zb(a){var b;\"XY\"==a?b=2:\"XYZ\"==a||\"XYM\"==a?b=3:\"XYZM\"==a&&(b=4);return b}n=Yb.prototype;n.mb=function(a){var b=this.o,c=this.o.length,d=this.A;a=jb(a);return nb(a,b,0,c,d)};n.Rb=function(a){this.i!=this.b&&(qa(this.f),this.g=0,this.i=this.b);if(0>a||0!==this.g&&a<=this.g)return this;var b=a.toString();if(this.f.hasOwnProperty(b))return this.f[b];var c=this.Qa(a);if(c.o.length<this.o.length)return this.f[b]=c;this.g=a;return this};\r\nn.Qa=function(){return this};function $b(a,b,c){a.A=Zb(b);a.c=b;a.o=c}function ac(a,b,c,d){if(b)c=Zb(b);else{for(b=0;b<d;++b){if(0===c.length){a.c=\"XY\";a.A=2;return}c=c[0]}c=c.length;var e;2==c?e=\"XY\":3==c?e=\"XYZ\":4==c&&(e=\"XYZM\");b=e}a.c=b;a.A=c}n.Hb=function(a){this.o&&(a(this.o,this.o,this.A),this.w())};\r\nn.rotate=function(a,b){var c=this.o;if(c){for(var d=c.length,e=this.A,f=c?c:[],g=Math.cos(a),h=Math.sin(a),k=b[0],l=b[1],m=0,p=0;p<d;p+=e){var q=c[p]-k,u=c[p+1]-l;f[m++]=k+q*g-u*h;f[m++]=l+q*h+u*g;for(q=p+2;q<p+e;++q)f[m++]=c[q]}c&&f.length!=m&&(f.length=m);this.w()}};\r\nn.scale=function(a,b,c){var d=b;void 0===d&&(d=a);var e=c;e||(e=tb(this.G()));if(c=this.o){b=c.length;for(var f=this.A,g=c?c:[],h=e[0],e=e[1],k=0,l=0;l<b;l+=f){var m=c[l]-h,p=c[l+1]-e;g[k++]=h+a*m;g[k++]=e+d*p;for(m=l+2;m<l+f;++m)g[k++]=c[m]}c&&g.length!=k&&(g.length=k);this.w()}};n.translate=function(a,b){var c=this.o;if(c){var d=c.length,e=this.A,f=c?c:[],g=0,h,k;for(h=0;h<d;h+=e)for(f[g++]=c[h]+a,f[g++]=c[h+1]+b,k=h+2;k<h+e;++k)f[g++]=c[k];c&&f.length!=g&&(f.length=g);this.w()}};function bc(a,b){var c=0,d,e;d=0;for(e=b.length;d<e;++d)a[c++]=b[d];return c}function cc(a,b,c,d){var e,f;e=0;for(f=c.length;e<f;++e){var g=c[e],h;for(h=0;h<d;++h)a[b++]=g[h]}return b}function dc(a,b,c,d,e){e=e?e:[];var f=0,g,h;g=0;for(h=c.length;g<h;++g)b=cc(a,b,c[g],d),e[f++]=b;e.length=f;return e};function ec(a,b,c,d,e){e=void 0!==e?e:[];for(var f=0;b<c;b+=d)e[f++]=a.slice(b,b+d);e.length=f;return e}function fc(a,b,c,d,e){e=void 0!==e?e:[];var f=0,g,h;g=0;for(h=c.length;g<h;++g){var k=c[g];e[f++]=ec(a,b,k,d,e[f]);b=k}e.length=f;return e};function gc(a,b,c,d,e,f,g){var h=(c-b)/d;if(3>h){for(;b<c;b+=d)f[g++]=a[b],f[g++]=a[b+1];return g}var k=Array(h);k[0]=1;k[h-1]=1;c=[b,c-d];for(var l=0,m;0<c.length;){var p=c.pop(),q=c.pop(),u=0,w=a[q],r=a[q+1],x=a[p],D=a[p+1];for(m=q+d;m<p;m+=d){var t,z=a[m];t=a[m+1];var C=w,E=r,v=x-C,H=D-E;if(0!==v||0!==H){var G=((z-C)*v+(t-E)*H)/(v*v+H*H);1<G?(C=x,E=D):0<G&&(C+=v*G,E+=H*G)}z=C-z;t=E-t;t=z*z+t*t;t>u&&(l=m,u=t)}u>e&&(k[(l-b)/d]=1,q+d<l&&c.push(q,l),l+d<p&&c.push(l,p))}for(m=0;m<h;++m)k[m]&&(f[g++]=\r\na[b+m*d],f[g++]=a[b+m*d+1]);return g}\r\nfunction hc(a,b,c,d,e,f,g,h){var k,l;k=0;for(l=c.length;k<l;++k){var m=c[k];a:{var p=a,q=m,u=d,w=e,r=f;if(b!=q){var x=w*Math.round(p[b]/w),D=w*Math.round(p[b+1]/w);b+=u;r[g++]=x;r[g++]=D;var t,z;do if(t=w*Math.round(p[b]/w),z=w*Math.round(p[b+1]/w),b+=u,b==q){r[g++]=t;r[g++]=z;break a}while(t==x&&z==D);for(;b<q;){var C,E;C=w*Math.round(p[b]/w);E=w*Math.round(p[b+1]/w);b+=u;if(C!=t||E!=z){var v=t-x,H=z-D,G=C-x,A=E-D;v*A==H*G&&(0>v&&G<v||v==G||0<v&&G>v)&&(0>H&&A<H||H==A||0<H&&A>H)||(r[g++]=t,r[g++]=\r\nz,x=t,D=z);t=C;z=E}}r[g++]=t;r[g++]=z}}h.push(g);b=m}return g};function ic(a,b){Yb.call(this);this.ea(a,b)}B(ic,Yb);n=ic.prototype;n.clone=function(){var a=new ic(null);$b(a,this.c,this.o.slice());a.w();return a};n.za=function(){return ec(this.o,0,this.o.length,this.A)};n.Qa=function(a){var b=[];b.length=gc(this.o,0,this.o.length,this.A,a,b,0);a=new ic(null);$b(a,\"XY\",b);a.w();return a};n.$=function(){return\"LinearRing\"};n.ea=function(a,b){a?(ac(this,b,a,1),this.o||(this.o=[]),this.o.length=cc(this.o,0,a,this.A)):$b(this,\"XY\",null);this.w()};function jc(a,b){Yb.call(this);this.ea(a,b)}B(jc,Yb);n=jc.prototype;n.clone=function(){var a=new jc(null);$b(a,this.c,this.o.slice());a.w();return a};n.za=function(){return this.o?this.o.slice():[]};n.mb=function(a){return kb(this.o,a)};n.$=function(){return\"Point\"};n.ea=function(a,b){a?(ac(this,b,a,0),this.o||(this.o=[]),this.o.length=bc(this.o,a)):$b(this,\"XY\",null);this.w()};function kc(a,b,c,d,e,f){for(var g=!1,h=a[c-d],k=a[c-d+1];b<c;b+=d){var l=a[b],m=a[b+1];k>f!=m>f&&e<(l-h)*(f-k)/(m-k)+h&&(g=!g);h=l;k=m}return g};function lc(a,b,c,d,e,f,g){var h,k,l,m,p,q=e[f+1],u=[],w=c[0];l=a[w-d];p=a[w-d+1];for(h=b;h<w;h+=d){m=a[h];k=a[h+1];if(q<=p&&k<=q||p<=q&&q<=k)l=(q-p)/(k-p)*(m-l)+l,u.push(l);l=m;p=k}w=NaN;p=-Infinity;u.sort(Ma);l=u[0];h=1;for(k=u.length;h<k;++h){m=u[h];var r=Math.abs(m-l);if(r>p){l=(l+m)/2;var x;a:if(0!==c.length&&kc(a,b,c[0],d,l,q)){var D;x=1;for(D=c.length;x<D;++x)if(kc(a,c[x-1],c[x],d,l,q)){x=!1;break a}x=!0}else x=!1;x&&(w=l,p=r)}l=m}isNaN(w)&&(w=e[f]);return g?(g.push(w,q),g):[w,q]};function mc(a,b,c,d){for(var e=0,f=a[c-d],g=a[c-d+1];b<c;b+=d)var h=a[b],k=a[b+1],e=e+(h-f)*(k+g),f=h,g=k;return 0<e}function nc(a,b,c,d){var e=0;d=void 0!==d?d:!1;var f,g;f=0;for(g=b.length;f<g;++f){var h=b[f],e=mc(a,e,h,c);if(0===f){if(d&&e||!d&&!e)return!1}else if(d&&!e||!d&&e)return!1;e=h}return!0}\r\nfunction oc(a,b,c,d,e){e=void 0!==e?e:!1;var f,g;f=0;for(g=c.length;f<g;++f){var h=c[f],k=mc(a,b,h,d);if(0===f?e&&k||!e&&!k:e&&!k||!e&&k)for(var k=a,l=h,m=d;b<l-m;){var p;for(p=0;p<m;++p){var q=k[b+p];k[b+p]=k[l-m+p];k[l-m+p]=q}b+=m;l-=m}b=h}return b}function pc(a,b,c,d){var e=0,f,g;f=0;for(g=b.length;f<g;++f)e=oc(a,e,b[f],c,d);return e};function qc(a,b){Yb.call(this);this.ja=[];this.h=-1;this.v=null;this.u=-1;this.a=null;this.ea(a,b)}B(qc,Yb);n=qc.prototype;n.clone=function(){var a=new qc(null);rc(a,this.c,this.o.slice(),this.ja.slice());return a};n.za=function(a){var b;void 0!==a?(b=sc(this).slice(),oc(b,0,this.ja,this.A,a)):b=this.o;return fc(b,0,this.ja,this.A)};function tc(a){if(a.h!=a.b){var b=tb(a.G());a.v=lc(sc(a),0,a.ja,a.A,b,0);a.h=a.b}return a.v}\r\nfunction sc(a){if(a.u!=a.b){var b=a.o;nc(b,a.ja,a.A)?a.a=b:(a.a=b.slice(),a.a.length=oc(a.a,0,a.ja,a.A));a.u=a.b}return a.a}n.Qa=function(a){var b=[],c=[];b.length=hc(this.o,0,this.ja,this.A,Math.sqrt(a),b,0,c);a=new qc(null);rc(a,\"XY\",b,c);return a};n.$=function(){return\"Polygon\"};n.ea=function(a,b){if(a){ac(this,b,a,2);this.o||(this.o=[]);var c=dc(this.o,0,a,this.A,this.ja);this.o.length=0===c.length?0:c[c.length-1];this.w()}else rc(this,\"XY\",null,this.ja)};\r\nfunction rc(a,b,c,d){$b(a,b,c);a.ja=d;a.w()};function uc(a){V.call(this);a=a||{};this.c=[0,0];var b={};b[vc]=void 0!==a.center?a.center:null;this.j=Sb(a.projection);var c,d,e,f=void 0!==a.minZoom?a.minZoom:0;c=void 0!==a.maxZoom?a.maxZoom:28;var g=void 0!==a.zoomFactor?a.zoomFactor:2;if(void 0!==a.resolutions)c=a.resolutions,d=c[0],e=c[c.length-1],c=Va(c);else{d=Sb(a.projection);e=d.G();var h=(e?Math.max(qb(e),rb(e)):360*Db.degrees/Lb(d))/256/Math.pow(2,0),k=h/Math.pow(2,28);d=a.maxResolution;void 0!==d?f=0:d=h/Math.pow(g,f);e=a.minResolution;\r\nvoid 0===e&&(e=void 0!==a.maxZoom?void 0!==a.maxResolution?d/Math.pow(g,c):h/Math.pow(g,c):k);c=f+Math.floor(Math.log(d/e)/Math.log(g));e=d/Math.pow(g,c-f);c=Wa(g,d,c-f)}this.f=d;this.i=e;this.s=g;this.g=a.resolutions;this.h=f;f=void 0!==a.extent?ma(a.extent):na;(void 0!==a.enableRotation?a.enableRotation:1)?(g=a.constrainRotation,g=void 0===g||!0===g?$a():!1===g?Ya:\"number\"===typeof g?Za(g):Ya):g=Xa;this.a=new oa(f,c,g);void 0!==a.resolution?b[wc]=a.resolution:void 0!==a.zoom&&(b[wc]=this.constrainResolution(this.f,\r\na.zoom-this.h));b[xc]=void 0!==a.rotation?a.rotation:0;this.l(b)}B(uc,V);n=uc.prototype;n.constrainResolution=function(a,b,c){return this.a.resolution(a,b||0,c||0)};n.constrainRotation=function(a,b){return this.a.rotation(a,b||0)};n.qa=function(){return this.get(vc)};n.lc=function(a){var b=this.qa();L(b,1);var c=this.O();L(void 0!==c,2);var d=this.get(xc);L(void 0!==d,3);return ub(b,c,d,a)};n.ia=function(){return this.j};n.O=function(){return this.get(wc)};\r\nfunction yc(a,b){return Math.max(qb(a)/b[0],rb(a)/b[1])}n.T=function(){var a=this.qa(),b=this.ia(),c=this.O(),d=this.get(xc);return{center:a.slice(),projection:void 0!==b?b:null,resolution:c,rotation:d}};n.rd=function(){var a,b=this.O();if(void 0!==b&&b>=this.i&&b<=this.f){a=this.h||0;var c,d;if(this.g){d=Na(this.g,b,1);a+=d;if(d==this.g.length-1)return a;c=this.g[d];d=c/this.g[d+1]}else c=this.f,d=this.s;a+=Math.log(c/b)/Math.log(d)}return a};\r\nn.md=function(a,b,c){if(!(a instanceof Yb)){L(Array.isArray(a),24);L(!pb(a),25);var d=a[0],e=a[1],f=a[2],g=a[3],d=[d,e,d,g,f,g,f,e,d,e],e=new qc(null);rc(e,\"XY\",d,[d.length]);a=e}d=c||{};c=void 0!==d.padding?d.padding:[0,0,0,0];var g=void 0!==d.constrainResolution?d.constrainResolution:!0,e=void 0!==d.nearest?d.nearest:!1,h;void 0!==d.minResolution?h=d.minResolution:void 0!==d.maxZoom?h=this.constrainResolution(this.f,d.maxZoom-this.h,0):h=0;var k=a.o,f=this.get(xc),d=Math.cos(-f),f=Math.sin(-f),\r\nl=Infinity,m=Infinity,p=-Infinity,q=-Infinity;a=a.A;for(var u=0,w=k.length;u<w;u+=a)var r=k[u]*d-k[u+1]*f,x=k[u]*f+k[u+1]*d,l=Math.min(l,r),m=Math.min(m,x),p=Math.max(p,r),q=Math.max(q,x);b=yc([l,m,p,q],[b[0]-c[1]-c[3],b[1]-c[0]-c[2]]);b=isNaN(b)?h:Math.max(b,h);g&&(h=this.constrainResolution(b,0,0),!e&&h<b&&(h=this.constrainResolution(h,-1,0)),b=h);this.set(wc,b);f=-f;h=(l+p)/2+(c[1]-c[3])/2*b;b=(m+q)/2+(c[0]-c[2])/2*b;this.xa([h*d-b*f,b*d+h*f])};\r\nn.rotate=function(a,b){if(void 0!==b){var c,d=this.qa();void 0!==d&&(c=[d[0]-b[0],d[1]-b[1]],bb(c,a-this.get(xc)),ab(c,b));this.xa(c)}this.set(xc,a)};n.xa=function(a){this.set(vc,a)};function zc(a,b){a.c[1]+=b}n.ye=function(a){a=this.constrainResolution(this.f,a-this.h,0);this.set(wc,a)};var vc=\"center\",wc=\"resolution\",xc=\"rotation\";function Ac(a){return 1-Math.pow(1-a,3)}function Bc(a){return 3*a*a-2*a*a*a}function Cc(a){return a};function Dc(a){var b=a.source,c=a.start?a.start:Date.now(),d=b[0],e=b[1],f=void 0!==a.duration?a.duration:1E3,g=a.easing?a.easing:Bc;return function(a,b){if(b.time<c)return b.animate=!0,b.viewHints[0]+=1,!0;if(b.time<c+f){var l=1-g((b.time-c)/f),m=d-b.viewState.center[0],p=e-b.viewState.center[1];b.animate=!0;b.viewState.center[0]+=l*m;b.viewState.center[1]+=l*p;b.viewHints[0]+=1;return!0}return!1}}\r\nfunction Ec(a){var b=a.rotation?a.rotation:0,c=a.start?a.start:Date.now(),d=void 0!==a.duration?a.duration:1E3,e=a.easing?a.easing:Bc,f=a.anchor?a.anchor:null;return function(a,h){if(h.time<c)return h.animate=!0,h.viewHints[0]+=1,!0;if(h.time<c+d){var k=1-e((h.time-c)/d),k=(b-h.viewState.rotation)*k;h.animate=!0;h.viewState.rotation+=k;if(f){var l=h.viewState.center;l[0]-=f[0];l[1]-=f[1];bb(l,k);ab(l,f)}h.viewHints[0]+=1;return!0}return!1}}\r\nfunction Fc(a){var b=a.resolution,c=a.start?a.start:Date.now(),d=void 0!==a.duration?a.duration:1E3,e=a.easing?a.easing:Bc;return function(a,g){if(g.time<c)return g.animate=!0,g.viewHints[0]+=1,!0;if(g.time<c+d){var h=1-e((g.time-c)/d),k=b-g.viewState.resolution;g.animate=!0;g.viewState.resolution+=h*k;g.viewHints[0]+=1;return!0}return!1}};function Gc(a,b,c,d){this.H=a;this.I=b;this.J=c;this.L=d}function Hc(a,b,c){return a.H<=b&&b<=a.I&&a.J<=c&&c<=a.L}function Ic(a,b){return a.H==b.H&&a.J==b.J&&a.I==b.I&&a.L==b.L}function Jc(a,b){return a.H<=b.I&&a.I>=b.H&&a.J<=b.L&&a.L>=b.J};function Kc(a,b,c){void 0===c&&(c=[0,0]);c[0]=a[0]*b+.5|0;c[1]=a[1]*b+.5|0;return c}function Lc(a,b){if(Array.isArray(a))return a;void 0===b?b=[a,a]:b[0]=b[1]=a;return b};function Mc(a){this.minZoom=void 0!==a.minZoom?a.minZoom:0;this.b=a.resolutions;L(Ua(this.b,function(a,b){return b-a}),17);this.maxZoom=this.b.length-1;this.c=void 0!==a.origin?a.origin:null;this.f=null;void 0!==a.origins&&(this.f=a.origins,L(this.f.length==this.b.length,20));var b=a.extent;void 0===b||this.c||this.f||(this.c=xb(b));L(!this.c&&this.f||this.c&&!this.f,18);this.g=null;void 0!==a.tileSizes&&(this.g=a.tileSizes,L(this.g.length==this.b.length,19));this.h=void 0!==a.tileSize?a.tileSize:\r\nthis.g?null:256;L(!this.h&&this.g||this.h&&!this.g,22);this.i=void 0!==b?b:null;this.a=null;this.l=[0,0];void 0!==a.sizes?this.a=a.sizes.map(function(a){return new Gc(Math.min(0,a[0]),Math.max(a[0]-1,-1),Math.min(0,a[1]),Math.max(a[1]-1,-1))},this):b&&Nc(this,b)}var Oc=[0,0,0];function Pc(a,b,c,d,e){e=Qc(a,b,e);for(b=b[0]-1;b>=a.minZoom;){if(c.call(null,b,Rc(a,e,b,d)))return!0;--b}return!1}Mc.prototype.G=function(){return this.i};Mc.prototype.pa=function(a){return this.c?this.c:this.f[a]};\r\nMc.prototype.O=function(a){return this.b[a]};function Sc(a,b,c,d){return b[0]<a.maxZoom?(d=Qc(a,b,d),Rc(a,d,b[0]+1,c)):null}function Tc(a,b,c,d){Uc(a,b[0],b[1],c,!1,Oc);var e=Oc[1],f=Oc[2];Uc(a,b[2],b[3],c,!0,Oc);a=Oc[1];b=Oc[2];void 0!==d?(d.H=e,d.I=a,d.J=f,d.L=b):d=new Gc(e,a,f,b);return d}function Rc(a,b,c,d){c=a.O(c);return Tc(a,b,c,d)}function Vc(a,b){var c=a.pa(b[0]),d=a.O(b[0]),e=Lc(Wc(a,b[0]),a.l);return[c[0]+(b[1]+.5)*e[0]*d,c[1]+(b[2]+.5)*e[1]*d]}\r\nfunction Qc(a,b,c){var d=a.pa(b[0]),e=a.O(b[0]);a=Lc(Wc(a,b[0]),a.l);var f=d[0]+b[1]*a[0]*e;b=d[1]+b[2]*a[1]*e;return ib(f,b,f+a[0]*e,b+a[1]*e,c)}function Uc(a,b,c,d,e,f){var g=Xc(a,d),h=d/a.O(g),k=a.pa(g);a=Lc(Wc(a,g),a.l);b=h*Math.floor((b-k[0])/d+(e?.5:0))/a[0];c=h*Math.floor((c-k[1])/d+(e?0:.5))/a[1];e?(b=Math.ceil(b)-1,c=Math.ceil(c)-1):(b=Math.floor(b),c=Math.floor(c));e=b;void 0!==f?(f[0]=g,f[1]=e,f[2]=c):f=[g,e,c];return f}function Yc(a,b,c,d){c=a.O(c);return Uc(a,b[0],b[1],c,!1,d)}\r\nfunction Wc(a,b){return a.h?a.h:a.g[b]}function Xc(a,b,c){return ia(Na(a.b,b,c||0),a.minZoom,a.maxZoom)}function Nc(a,b){for(var c=a.b.length,d=Array(c),e=a.minZoom;e<c;++e)d[e]=Rc(a,b,e);a.a=d};function Zc(a){var b=a.f;if(!b){var b=$c(a),c=ad(b,void 0,void 0),b=new Mc({extent:b,origin:xb(b),resolutions:c,tileSize:void 0});a.f=b}return b}function ad(a,b,c){b=void 0!==b?b:42;var d=rb(a);a=qb(a);c=Lc(void 0!==c?c:256);c=Math.max(a/c[0],d/c[1]);b+=1;d=Array(b);for(a=0;a<b;++a)d[a]=c/Math.pow(2,a);return d}function $c(a){a=Hb(a);var b=a.G();b||(a=180*Db.degrees/Lb(a),b=ib(-a,-a,a,a));return b};function bd(a){this.a=a.html;this.b=a.tileRanges?a.tileRanges:null};function cd(a){V.call(this);this.a=a?a:[];dd(this)}B(cd,V);cd.prototype.clear=function(){for(;0<this.get(\"length\");)this.pop()};function ed(a,b,c){a.a.forEach(b,c)}cd.prototype.pop=function(){return fd(this,this.get(\"length\")-1)};cd.prototype.push=function(a){var b=this.a.length;this.a.splice(b,0,a);dd(this);U(this,new gd(hd,a));return b};cd.prototype.remove=function(a){var b=this.a,c,d;c=0;for(d=b.length;c<d;++c)if(b[c]===a)return fd(this,c)};\r\nfunction fd(a,b){var c=a.a[b];a.a.splice(b,1);dd(a);U(a,new gd(id,c));return c}function dd(a){a.set(\"length\",a.a.length)}var hd=\"add\",id=\"remove\";function gd(a,b){T.call(this,a);this.element=b}B(gd,T);var jd=/^#(?:[0-9a-f]{3}){1,2}$/i,kd=/^(?:rgb)?\\((0|[1-9]\\d{0,2}),\\s?(0|[1-9]\\d{0,2}),\\s?(0|[1-9]\\d{0,2})\\)$/i,ld=/^(?:rgba)?\\((0|[1-9]\\d{0,2}),\\s?(0|[1-9]\\d{0,2}),\\s?(0|[1-9]\\d{0,2}),\\s?(0|1|0\\.\\d{0,10})\\)$/i,md=/^([a-z]*)$/i;function nd(a){if(\"string\"!==typeof a){var b=a[0];b!=(b|0)&&(b=b+.5|0);var c=a[1];c!=(c|0)&&(c=c+.5|0);var d=a[2];d!=(d|0)&&(d=d+.5|0);a=\"rgba(\"+b+\",\"+c+\",\"+d+\",\"+(void 0===a[3]?1:a[3])+\")\"}return a}\r\nvar pd=function(){var a={},b=0;return function(c){var d;if(a.hasOwnProperty(c))d=a[c];else{if(1024<=b){d=0;for(var e in a)0===(d++&3)&&(delete a[e],--b)}d=c;var f,g;md.exec(d)&&(e=document.createElement(\"div\"),e.style.color=d,document.body.appendChild(e),d=window.getComputedStyle(e).color,document.body.removeChild(e));jd.exec(d)?(f=d.length-1,L(3==f||6==f,54),g=3==f?1:2,f=parseInt(d.substr(1+0*g,g),16),e=parseInt(d.substr(1+1*g,g),16),d=parseInt(d.substr(1+2*g,g),16),1==g&&(f=(f<<4)+f,e=(e<<4)+e,\r\nd=(d<<4)+d),f=[f,e,d,1]):(g=ld.exec(d))?(f=Number(g[1]),e=Number(g[2]),d=Number(g[3]),g=Number(g[4]),f=od([f,e,d,g])):(g=kd.exec(d))?(f=Number(g[1]),e=Number(g[2]),d=Number(g[3]),f=od([f,e,d,1])):L(!1,14);d=f;a[c]=d;++b}return d}}();function od(a){var b=[];b[0]=ia(a[0]+.5|0,0,255);b[1]=ia(a[1]+.5|0,0,255);b[2]=ia(a[2]+.5|0,0,255);b[3]=ia(a[3],0,1);return b};function qd(a){return\"string\"===typeof a||a instanceof CanvasPattern||a instanceof CanvasGradient?a:nd(a)};var rd=String.prototype.trim?function(a){return a.trim()}:function(a){return a.replace(/^[\\s\\xa0]+|[\\s\\xa0]+$/g,\"\")};function sd(a,b){return a<b?-1:a>b?1:0};function td(a,b,c){return 2>=arguments.length?Array.prototype.slice.call(a,b):Array.prototype.slice.call(a,b,c)};var ud;a:{var vd=aa.navigator;if(vd){var wd=vd.userAgent;if(wd){ud=wd;break a}}ud=\"\"}function xd(a){return-1!=ud.indexOf(a)};var yd=xd(\"Opera\"),zd=xd(\"Trident\")||xd(\"MSIE\"),Ad=xd(\"Edge\"),Bd=xd(\"Gecko\")&&!(-1!=ud.toLowerCase().indexOf(\"webkit\")&&!xd(\"Edge\"))&&!(xd(\"Trident\")||xd(\"MSIE\"))&&!xd(\"Edge\"),Cd=-1!=ud.toLowerCase().indexOf(\"webkit\")&&!xd(\"Edge\"),Dd;\r\na:{var Ed=\"\",Fd=function(){var a=ud;if(Bd)return/rv\\:([^\\);]+)(\\)|;)/.exec(a);if(Ad)return/Edge\\/([\\d\\.]+)/.exec(a);if(zd)return/\\b(?:MSIE|rv)[: ]([^\\);]+)(\\)|;)/.exec(a);if(Cd)return/WebKit\\/(\\S+)/.exec(a);if(yd)return/(?:Version)[ \\/]?(\\S+)/.exec(a)}();Fd&&(Ed=Fd?Fd[1]:\"\");if(zd){var Gd,Hd=aa.document;Gd=Hd?Hd.documentMode:void 0;if(null!=Gd&&Gd>parseFloat(Ed)){Dd=String(Gd);break a}}Dd=Ed}var Id={};function Jd(){return[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]}function Kd(a,b){a[0]=b[0];a[1]=b[1];a[4]=b[2];a[5]=b[3];a[12]=b[4];a[13]=b[5];return a};var Ld=Jd();function Md(a,b){var c=document.createElement(\"CANVAS\");a&&(c.width=a);b&&(c.height=b);return c.getContext(\"2d\")}\r\nvar Nd=function(){var a;return function(){if(void 0===a){var b=document.createElement(\"P\"),c,d={webkitTransform:\"-webkit-transform\",OTransform:\"-o-transform\",msTransform:\"-ms-transform\",MozTransform:\"-moz-transform\",transform:\"transform\"};document.body.appendChild(b);for(var e in d)e in b.style&&(b.style[e]=\"translate(1px,1px)\",c=K.getComputedStyle(b).getPropertyValue(d[e]));document.body.removeChild(b);a=c&&\"none\"!==c}return a}}(),Od=function(){var a;return function(){if(void 0===a){var b=document.createElement(\"P\"),\r\nc,d={webkitTransform:\"-webkit-transform\",OTransform:\"-o-transform\",msTransform:\"-ms-transform\",MozTransform:\"-moz-transform\",transform:\"transform\"};document.body.appendChild(b);for(var e in d)e in b.style&&(b.style[e]=\"translate3d(1px,1px,1px)\",c=K.getComputedStyle(b).getPropertyValue(d[e]));document.body.removeChild(b);a=c&&\"none\"!==c}return a}}();\r\nfunction Pd(a,b){var c=a.style;c.WebkitTransform=b;c.MozTransform=b;c.b=b;c.msTransform=b;c.transform=b;if((c=zd)&&!(c=Id[\"9.0\"])){for(var c=0,d=rd(String(Dd)).split(\".\"),e=rd(\"9.0\").split(\".\"),f=Math.max(d.length,e.length),g=0;0==c&&g<f;g++){var h=d[g]||\"\",k=e[g]||\"\",l=RegExp(\"(\\\\d*)(\\\\D*)\",\"g\"),m=RegExp(\"(\\\\d*)(\\\\D*)\",\"g\");do{var p=l.exec(h)||[\"\",\"\",\"\"],q=m.exec(k)||[\"\",\"\",\"\"];if(0==p[0].length&&0==q[0].length)break;c=sd(0==p[1].length?0:parseInt(p[1],10),0==q[1].length?0:parseInt(q[1],10))||sd(0==\r\np[2].length,0==q[2].length)||sd(p[2],q[2])}while(0==c)}c=Id[\"9.0\"]=0<=c}c&&(a.style.transformOrigin=\"0 0\")}function Qd(a,b){var c;if(Od()){var d=Kd(Ld,b),e=Array(16);for(c=0;16>c;++c)e[c]=d[c].toFixed(6);Pd(a,\"matrix3d(\"+e.join(\",\")+\")\")}else if(Nd()){d=Array(6);for(c=0;6>c;++c)d[c]=b[c].toFixed(6);Pd(a,\"matrix(\"+d.join(\",\")+\")\")}else a.style.left=Math.round(b[4])+\"px\",a.style.top=Math.round(b[5])+\"px\"}function Rd(a,b){var c=b.parentNode;c&&c.replaceChild(a,b)}\r\nfunction Sd(a){a&&a.parentNode&&a.parentNode.removeChild(a)};function Td(a,b,c){T.call(this,a);this.map=b;this.frameState=void 0!==c?c:null}B(Td,T);function Ud(a){V.call(this);this.element=a.element?a.element:null;this.f=this.D=null;this.i=[];this.render=a.render?a.render:I;a.target&&(a=a.target,this.D=\"string\"===typeof a?document.getElementById(a):a)}B(Ud,V);Ud.prototype.R=function(){Sd(this.element);V.prototype.R.call(this)};\r\nUd.prototype.setMap=function(a){this.f&&Sd(this.element);for(var b=0,c=this.i.length;b<c;++b)M(this.i[b]);this.i.length=0;if(this.f=a)(this.D?this.D:a.j).appendChild(this.element),this.render!==I&&this.i.push(R(a,\"postrender\",this.render,this)),a.render()};function Vd(a){a=a?a:{};this.B=document.createElement(\"UL\");this.j=document.createElement(\"LI\");this.B.appendChild(this.j);this.j.style.display=\"none\";this.g=void 0!==a.collapsed?a.collapsed:!0;this.v=void 0!==a.collapsible?a.collapsible:!0;this.v||(this.g=!1);var b=void 0!==a.className?a.className:\"ol-attribution\",c=void 0!==a.tipLabel?a.tipLabel:\"Attributions\",d=void 0!==a.collapseLabel?a.collapseLabel:\"\\u00bb\";\"string\"===typeof d?(this.h=document.createElement(\"span\"),this.h.textContent=d):this.h=\r\nd;d=void 0!==a.label?a.label:\"i\";\"string\"===typeof d?(this.s=document.createElement(\"span\"),this.s.textContent=d):this.s=d;var e=this.v&&!this.g?this.h:this.s,d=document.createElement(\"button\");d.setAttribute(\"type\",\"button\");d.title=c;d.appendChild(e);R(d,\"click\",this.P,this);c=document.createElement(\"div\");c.className=b+\" ol-unselectable ol-control\"+(this.g&&this.v?\" ol-collapsed\":\"\")+(this.v?\"\":\" ol-uncollapsible\");c.appendChild(this.B);c.appendChild(d);Ud.call(this,{element:c,render:a.render?\r\na.render:Wd,target:a.target});this.u=!0;this.c={};this.a={};this.N={}}B(Vd,Ud);\r\nfunction Wd(a){if(a=a.frameState){var b,c,d,e,f,g,h,k,l,m,p,q=a.layerStatesArray,u=pa({},a.attributions),w={},r=a.viewState.projection;c=0;for(b=q.length;c<b;c++)if(g=q[c].layer.da())if(m=J(g).toString(),l=g.h)for(d=0,e=l.length;d<e;d++)if(h=l[d],k=J(h).toString(),!(k in u)){if(f=a.usedTiles[m]){var x=g.sa(r);a:{p=h;var D=r;if(p.b){var t,z,C,E=void 0;for(E in f)if(E in p.b){C=f[E];var v;t=0;for(z=p.b[E].length;t<z;++t){v=p.b[E][t];if(Jc(v,C)){p=!0;break a}var H=Rc(x,$c(D),parseInt(E,10)),G=H.I-H.H+\r\n1;if(C.H<H.H||C.I>H.I)if(Jc(v,new Gc(la(C.H,G),la(C.I,G),C.J,C.L))||C.I-C.H+1>G&&Jc(v,H)){p=!0;break a}}}p=!1}else p=!0}}else p=!1;p?(k in w&&delete w[k],u[k]=h):w[k]=h}b=[u,w];c=b[0];b=b[1];for(var A in this.c)A in c?(this.a[A]||(this.c[A].style.display=\"\",this.a[A]=!0),delete c[A]):A in b?(this.a[A]&&(this.c[A].style.display=\"none\",delete this.a[A]),delete b[A]):(Sd(this.c[A]),delete this.c[A],delete this.a[A]);for(A in c)d=document.createElement(\"LI\"),d.innerHTML=c[A].a,this.B.appendChild(d),this.c[A]=\r\nd,this.a[A]=!0;for(A in b)d=document.createElement(\"LI\"),d.innerHTML=b[A].a,d.style.display=\"none\",this.B.appendChild(d),this.c[A]=d;A=!sa(this.a)||!sa(a.logos);this.u!=A&&(this.element.style.display=A?\"\":\"none\",this.u=A);A&&sa(this.a)?this.element.classList.add(\"ol-logo-only\"):this.element.classList.remove(\"ol-logo-only\");var F;a=a.logos;A=this.N;for(F in A)F in a||(Sd(A[F]),delete A[F]);for(var Q in a)b=a[Q],b instanceof HTMLElement&&(this.j.appendChild(b),A[Q]=b),Q in A||(F=new Image,F.src=Q,\"\"===\r\nb?c=F:(c=document.createElement(\"a\"),c.href=b,c.appendChild(F)),this.j.appendChild(c),A[Q]=c);this.j.style.display=sa(a)?\"none\":\"\"}else this.u&&(this.element.style.display=\"none\",this.u=!1)}Vd.prototype.P=function(a){a.preventDefault();this.element.classList.toggle(\"ol-collapsed\");this.g?Rd(this.h,this.s):Rd(this.s,this.h);this.g=!this.g};function Xd(a){a=a?a:{};this.a=void 0!==a.className?a.className:\"ol-full-screen\";var b=void 0!==a.label?a.label:\"\\u2922\";this.g=\"string\"===typeof b?document.createTextNode(b):b;b=void 0!==a.labelActive?a.labelActive:\"\\u00d7\";this.h=\"string\"===typeof b?document.createTextNode(b):b;var c=a.tipLabel?a.tipLabel:\"Toggle full-screen\",b=document.createElement(\"button\");b.className=this.a+\"-\"+Yd();b.setAttribute(\"type\",\"button\");b.title=c;b.appendChild(this.g);R(b,\"click\",this.v,this);c=document.createElement(\"div\");\r\nc.className=this.a+\" ol-unselectable ol-control \"+(Zd()?\"\":\"ol-unsupported\");c.appendChild(b);Ud.call(this,{element:c,target:a.target});this.s=void 0!==a.keys?a.keys:!1;this.c=a.source}B(Xd,Ud);\r\nXd.prototype.v=function(a){a.preventDefault();Zd()&&(a=this.f)&&(Yd()?document.exitFullscreen?document.exitFullscreen():document.msExitFullscreen?document.msExitFullscreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.webkitExitFullscreen&&document.webkitExitFullscreen():(a=this.c?\"string\"===typeof this.c?document.getElementById(this.c):this.c:a.Ra(),this.s?a.mozRequestFullScreenWithKeys?a.mozRequestFullScreenWithKeys():a.webkitRequestFullscreen?a.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT):\r\n$d(a):$d(a)))};Xd.prototype.j=function(){var a=this.element.firstElementChild,b=this.f;Yd()?(a.className=this.a+\"-true\",Rd(this.h,this.g)):(a.className=this.a+\"-false\",Rd(this.g,this.h));b&&b.yb()};Xd.prototype.setMap=function(a){Ud.prototype.setMap.call(this,a);a&&this.i.push(R(K.document,ae(),this.j,this))};\r\nfunction Zd(){var a=document.body;return!!(a.webkitRequestFullscreen||a.mozRequestFullScreen&&document.mozFullScreenEnabled||a.msRequestFullscreen&&document.msFullscreenEnabled||a.requestFullscreen&&document.fullscreenEnabled)}function Yd(){return!!(document.webkitIsFullScreen||document.mozFullScreen||document.msFullscreenElement||document.fullscreenElement)}\r\nfunction $d(a){a.requestFullscreen?a.requestFullscreen():a.msRequestFullscreen?a.msRequestFullscreen():a.mozRequestFullScreen?a.mozRequestFullScreen():a.webkitRequestFullscreen&&a.webkitRequestFullscreen()}var ae=function(){var a;return function(){if(!a){var b=document.body;b.webkitRequestFullscreen?a=\"webkitfullscreenchange\":b.mozRequestFullScreen?a=\"mozfullscreenchange\":b.msRequestFullscreen?a=\"MSFullscreenChange\":b.requestFullscreen&&(a=\"fullscreenchange\")}return a}}();function be(a){a=a?a:{};var b=void 0!==a.className?a.className:\"ol-rotate\",c=void 0!==a.label?a.label:\"\\u21e7\";this.a=null;\"string\"===typeof c?(this.a=document.createElement(\"span\"),this.a.className=\"ol-compass\",this.a.textContent=c):(this.a=c,this.a.classList.add(\"ol-compass\"));var d=a.tipLabel?a.tipLabel:\"Reset rotation\",c=document.createElement(\"button\");c.className=b+\"-reset\";c.setAttribute(\"type\",\"button\");c.title=d;c.appendChild(this.a);R(c,\"click\",be.prototype.s,this);d=document.createElement(\"div\");\r\nd.className=b+\" ol-unselectable ol-control\";d.appendChild(c);b=a.render?a.render:ce;this.g=a.resetNorth?a.resetNorth:void 0;Ud.call(this,{element:d,render:b,target:a.target});this.h=void 0!==a.duration?a.duration:250;this.c=void 0!==a.autoHide?a.autoHide:!0;this.j=void 0;this.c&&this.element.classList.add(\"ol-hidden\")}B(be,Ud);\r\nbe.prototype.s=function(a){a.preventDefault();if(void 0!==this.g)this.g();else{a=this.f;var b=a.U();if(b){var c=b.get(xc);void 0!==c&&(0<this.h&&(c%=2*Math.PI,c<-Math.PI&&(c+=2*Math.PI),c>Math.PI&&(c-=2*Math.PI),a.oa(Ec({rotation:c,duration:this.h,easing:Ac}))),b.set(xc,0))}}};\r\nfunction ce(a){if(a=a.frameState){a=a.viewState.rotation;if(a!=this.j){var b=\"rotate(\"+a+\"rad)\";if(this.c){var c=this.element.classList.contains(\"ol-hidden\");c||0!==a?c&&0!==a&&this.element.classList.remove(\"ol-hidden\"):this.element.classList.add(\"ol-hidden\")}this.a.style.msTransform=b;this.a.style.webkitTransform=b;this.a.style.transform=b}this.j=a}};function de(a){a=a?a:{};var b=void 0!==a.className?a.className:\"ol-zoom\",c=void 0!==a.delta?a.delta:1,d=void 0!==a.zoomInLabel?a.zoomInLabel:\"+\",e=void 0!==a.zoomOutLabel?a.zoomOutLabel:\"\\u2212\",f=void 0!==a.zoomInTipLabel?a.zoomInTipLabel:\"Zoom in\",g=void 0!==a.zoomOutTipLabel?a.zoomOutTipLabel:\"Zoom out\",h=document.createElement(\"button\");h.className=b+\"-in\";h.setAttribute(\"type\",\"button\");h.title=f;h.appendChild(\"string\"===typeof d?document.createTextNode(d):d);R(h,\"click\",de.prototype.c.bind(this,\r\nc));d=document.createElement(\"button\");d.className=b+\"-out\";d.setAttribute(\"type\",\"button\");d.title=g;d.appendChild(\"string\"===typeof e?document.createTextNode(e):e);R(d,\"click\",de.prototype.c.bind(this,-c));c=document.createElement(\"div\");c.className=b+\" ol-unselectable ol-control\";c.appendChild(h);c.appendChild(d);Ud.call(this,{element:c,target:a.target});this.a=void 0!==a.duration?a.duration:250}B(de,Ud);\r\nde.prototype.c=function(a,b){b.preventDefault();var c=this.f,d=c.U();if(d){var e=d.O();e&&(0<this.a&&c.oa(Fc({resolution:e,duration:this.a,easing:Ac})),c=d.constrainResolution(e,a),d.set(wc,c))}};function ee(a){a=a?a:{};var b=new cd;(void 0!==a.zoom?a.zoom:1)&&b.push(new de(a.zoomOptions));(void 0!==a.rotate?a.rotate:1)&&b.push(new be(a.rotateOptions));(void 0!==a.attribution?a.attribution:1)&&b.push(new Vd(a.attributionOptions));return b};var fe;\r\nfunction ge(){var a=aa.MessageChannel;\"undefined\"===typeof a&&\"undefined\"!==typeof window&&window.postMessage&&window.addEventListener&&!xd(\"Presto\")&&(a=function(){var a=document.createElement(\"IFRAME\");a.style.display=\"none\";a.src=\"\";document.documentElement.appendChild(a);var b=a.contentWindow,a=b.document;a.open();a.write(\"\");a.close();var c=\"callImmediate\"+Math.random(),d=\"file:\"==b.location.protocol?\"*\":b.location.protocol+\"//\"+b.location.host,a=ea(function(a){if((\"*\"==d||a.origin==d)&&a.data==\r\nc)this.port1.onmessage()},this);b.addEventListener(\"message\",a,!1);this.port1={};this.port2={postMessage:function(){b.postMessage(c,d)}}});if(\"undefined\"!==typeof a&&!xd(\"Trident\")&&!xd(\"MSIE\")){var b=new a,c={},d=c;b.port1.onmessage=function(){if(void 0!==c.next){c=c.next;var a=c.nc;c.nc=null;a()}};return function(a){d.next={nc:a};d=d.next;b.port2.postMessage(0)}}return\"undefined\"!==typeof document&&\"onreadystatechange\"in document.createElement(\"SCRIPT\")?function(a){var b=document.createElement(\"SCRIPT\");\r\nb.onreadystatechange=function(){b.onreadystatechange=null;b.parentNode.removeChild(b);b=null;a();a=null};document.documentElement.appendChild(b)}:function(a){aa.setTimeout(a,0)}};var he=[\"experimental-webgl\",\"webgl\",\"webkit-3d\",\"moz-webgl\"];function ie(a,b){var c,d,e=he.length;for(d=0;d<e;++d)try{if(c=a.getContext(he[d],b))return c}catch(f){}return null};var je,ke=\"undefined\"!==typeof navigator?navigator.userAgent.toLowerCase():\"\",le=-1!==ke.indexOf(\"firefox\"),me=-1!==ke.indexOf(\"safari\")&&-1===ke.indexOf(\"chrom\"),ne=-1!==ke.indexOf(\"macintosh\"),oe=K.devicePixelRatio||1,pe=!1,qe=function(){if(!(\"HTMLCanvasElement\"in K))return!1;try{var a=Md();return a?(a.setLineDash&&(pe=!0),!0):!1}catch(b){return!1}}(),re=\"ontouchstart\"in K,se=\"PointerEvent\"in K,te=!!K.navigator.msPointerEnabled,ue=!1,ve=[];\r\nif(\"WebGLRenderingContext\"in K)try{var we=ie(document.createElement(\"CANVAS\"),{failIfMajorPerformanceCaveat:!0});we&&(ue=!0,ve=we.getSupportedExtensions())}catch(a){}je=ue;fa=ve;function xe(a,b){this.b=a;this.g=b};function ye(a){xe.call(this,a,{mousedown:this.Pd,mousemove:this.Qd,mouseup:this.Td,mouseover:this.Sd,mouseout:this.Rd});this.a=a.a;this.c=[]}B(ye,xe);function ze(a,b){for(var c=a.c,d=b.clientX,e=b.clientY,f=0,g=c.length,h;f<g&&(h=c[f]);f++){var k=Math.abs(e-h[1]);if(25>=Math.abs(d-h[0])&&25>=k)return!0}return!1}function Ae(a){var b=Be(a,a),c=b.preventDefault;b.preventDefault=function(){a.preventDefault();c()};b.pointerId=1;b.isPrimary=!0;b.pointerType=\"mouse\";return b}n=ye.prototype;\r\nn.Pd=function(a){if(!ze(this,a)){if((1).toString()in this.a){var b=Ae(a);Ce(this.b,De,b,a);delete this.a[(1).toString()]}b=Ae(a);this.a[(1).toString()]=a;Ce(this.b,Ee,b,a)}};n.Qd=function(a){if(!ze(this,a)){var b=Ae(a);Ce(this.b,Fe,b,a)}};n.Td=function(a){if(!ze(this,a)){var b=this.a[(1).toString()];b&&b.button===a.button&&(b=Ae(a),Ce(this.b,Ge,b,a),delete this.a[(1).toString()])}};n.Sd=function(a){if(!ze(this,a)){var b=Ae(a);He(this.b,b,a)}};\r\nn.Rd=function(a){if(!ze(this,a)){var b=Ae(a);Ie(this.b,b,a)}};function Je(a){xe.call(this,a,{MSPointerDown:this.Yd,MSPointerMove:this.Zd,MSPointerUp:this.be,MSPointerOut:this.$d,MSPointerOver:this.ae,MSPointerCancel:this.Xd,MSGotPointerCapture:this.Vd,MSLostPointerCapture:this.Wd});this.a=a.a;this.c=[\"\",\"unavailable\",\"touch\",\"pen\",\"mouse\"]}B(Je,xe);function Ke(a,b){var c=b;\"number\"===typeof b.pointerType&&(c=Be(b,b),c.pointerType=a.c[b.pointerType]);return c}n=Je.prototype;n.Yd=function(a){this.a[a.pointerId.toString()]=a;var b=Ke(this,a);Ce(this.b,Ee,b,a)};\r\nn.Zd=function(a){var b=Ke(this,a);Ce(this.b,Fe,b,a)};n.be=function(a){var b=Ke(this,a);Ce(this.b,Ge,b,a);delete this.a[a.pointerId.toString()]};n.$d=function(a){var b=Ke(this,a);Ie(this.b,b,a)};n.ae=function(a){var b=Ke(this,a);He(this.b,b,a)};n.Xd=function(a){var b=Ke(this,a);Ce(this.b,De,b,a);delete this.a[a.pointerId.toString()]};n.Wd=function(a){U(this.b,new Le(\"lostpointercapture\",a,a))};n.Vd=function(a){U(this.b,new Le(\"gotpointercapture\",a,a))};function Me(a){xe.call(this,a,{pointerdown:this.le,pointermove:this.me,pointerup:this.pe,pointerout:this.ne,pointerover:this.oe,pointercancel:this.ke,gotpointercapture:this.sd,lostpointercapture:this.Od})}B(Me,xe);n=Me.prototype;n.le=function(a){Ne(this.b,a)};n.me=function(a){Ne(this.b,a)};n.pe=function(a){Ne(this.b,a)};n.ne=function(a){Ne(this.b,a)};n.oe=function(a){Ne(this.b,a)};n.ke=function(a){Ne(this.b,a)};n.Od=function(a){Ne(this.b,a)};n.sd=function(a){Ne(this.b,a)};function Le(a,b,c){T.call(this,a);this.b=b;a=c?c:{};this.buttons=Oe(a);this.pressure=Pe(a,this.buttons);this.bubbles=\"bubbles\"in a?a.bubbles:!1;this.cancelable=\"cancelable\"in a?a.cancelable:!1;this.view=\"view\"in a?a.view:null;this.detail=\"detail\"in a?a.detail:null;this.screenX=\"screenX\"in a?a.screenX:0;this.screenY=\"screenY\"in a?a.screenY:0;this.clientX=\"clientX\"in a?a.clientX:0;this.clientY=\"clientY\"in a?a.clientY:0;this.button=\"button\"in a?a.button:0;this.relatedTarget=\"relatedTarget\"in a?a.relatedTarget:\r\nnull;this.pointerId=\"pointerId\"in a?a.pointerId:0;this.width=\"width\"in a?a.width:0;this.height=\"height\"in a?a.height:0;this.pointerType=\"pointerType\"in a?a.pointerType:\"\";this.isPrimary=\"isPrimary\"in a?a.isPrimary:!1;b.preventDefault&&(this.preventDefault=function(){b.preventDefault()})}B(Le,T);function Oe(a){if(a.buttons||Qe)a=a.buttons;else switch(a.which){case 1:a=1;break;case 2:a=4;break;case 3:a=2;break;default:a=0}return a}function Pe(a,b){var c=0;a.pressure?c=a.pressure:c=b?.5:0;return c}\r\nvar Qe=!1;try{Qe=1===(new MouseEvent(\"click\",{buttons:1})).buttons}catch(a){};function Re(a,b){xe.call(this,a,{touchstart:this.Ce,touchmove:this.Be,touchend:this.Ae,touchcancel:this.ze});this.a=a.a;this.l=b;this.c=void 0;this.h=0;this.f=void 0}B(Re,xe);n=Re.prototype;n.Uc=function(){this.h=0;this.f=void 0};\r\nfunction Se(a,b,c){b=Be(b,c);b.pointerId=c.identifier+2;b.bubbles=!0;b.cancelable=!0;b.detail=a.h;b.button=0;b.buttons=1;b.width=c.webkitRadiusX||c.radiusX||0;b.height=c.webkitRadiusY||c.radiusY||0;b.pressure=c.webkitForce||c.force||.5;b.isPrimary=a.c===c.identifier;b.pointerType=\"touch\";b.clientX=c.clientX;b.clientY=c.clientY;b.screenX=c.screenX;b.screenY=c.screenY;return b}\r\nfunction Te(a,b,c){function d(){b.preventDefault()}var e=Array.prototype.slice.call(b.changedTouches),f=e.length,g,h;for(g=0;g<f;++g)h=Se(a,b,e[g]),h.preventDefault=d,c.call(a,b,h)}\r\nn.Ce=function(a){var b=a.touches,c=Object.keys(this.a),d=c.length;if(d>=b.length){var e=[],f,g,h;for(f=0;f<d;++f){g=c[f];h=this.a[g];var k;if(!(k=1==g))a:{k=b.length;for(var l,m=0;m<k;m++)if(l=b[m],l.identifier===g-2){k=!0;break a}k=!1}k||e.push(h.out)}for(f=0;f<e.length;++f)this.Ib(a,e[f])}b=a.changedTouches[0];c=Object.keys(this.a).length;if(0===c||1===c&&(1).toString()in this.a)this.c=b.identifier,b=K,void 0!==this.f&&b.clearTimeout(this.f);Ue(this,a);this.h++;Te(this,a,this.je)};\r\nn.je=function(a,b){this.a[b.pointerId]={target:b.target,out:b,Rc:b.target};var c=this.b;b.bubbles=!0;Ce(c,Ve,b,a);c=this.b;b.bubbles=!1;Ce(c,We,b,a);Ce(this.b,Ee,b,a)};n.Be=function(a){a.preventDefault();Te(this,a,this.Ud)};n.Ud=function(a,b){var c=this.a[b.pointerId];if(c){var d=c.out,e=c.Rc;Ce(this.b,Fe,b,a);d&&e!==b.target&&(d.relatedTarget=b.target,b.relatedTarget=e,d.target=e,b.target?(Ie(this.b,d,a),He(this.b,b,a)):(b.target=e,b.relatedTarget=null,this.Ib(a,b)));c.out=b;c.Rc=b.target}};\r\nn.Ae=function(a){Ue(this,a);Te(this,a,this.De)};n.De=function(a,b){Ce(this.b,Ge,b,a);this.b.out(b,a);var c=this.b;b.bubbles=!1;Ce(c,Xe,b,a);delete this.a[b.pointerId];b.isPrimary&&(this.c=void 0,this.f=K.setTimeout(this.Uc.bind(this),200))};n.ze=function(a){Te(this,a,this.Ib)};n.Ib=function(a,b){Ce(this.b,De,b,a);this.b.out(b,a);var c=this.b;b.bubbles=!1;Ce(c,Xe,b,a);delete this.a[b.pointerId];b.isPrimary&&(this.c=void 0,this.f=K.setTimeout(this.Uc.bind(this),200))};\r\nfunction Ue(a,b){var c=a.l.c,d=b.changedTouches[0];if(a.c===d.identifier){var e=[d.clientX,d.clientY];c.push(e);K.setTimeout(function(){Qa(c,e)},2500)}};function Ye(a){Ga.call(this);this.g=a;this.a={};this.f={};this.b=[];se?Ze(this,new Me(this)):te?Ze(this,new Je(this)):(a=new ye(this),Ze(this,a),re&&Ze(this,new Re(this,a)));a=this.b.length;for(var b,c=0;c<a;c++)b=this.b[c],$e(this,Object.keys(b.g))}B(Ye,Ga);function Ze(a,b){var c=Object.keys(b.g);c&&(c.forEach(function(a){var c=b.g[a];c&&(this.f[a]=c.bind(b))},a),a.b.push(b))}Ye.prototype.c=function(a){var b=this.f[a.type];b&&b(a)};\r\nfunction $e(a,b){b.forEach(function(a){R(this.g,a,this.c,this)},a)}function af(a,b){b.forEach(function(a){ya(this.g,a,this.c,this)},a)}function Be(a,b){for(var c={},d,e=0,f=bf.length;e<f;e++)d=bf[e][0],c[d]=a[d]||b[d]||bf[e][1];return c}Ye.prototype.out=function(a,b){a.bubbles=!0;Ce(this,cf,a,b)};function Ie(a,b,c){a.out(b,c);var d=b.target,e=b.relatedTarget;d&&e&&d.contains(e)||(b.bubbles=!1,Ce(a,Xe,b,c))}\r\nfunction He(a,b,c){b.bubbles=!0;Ce(a,Ve,b,c);var d=b.target,e=b.relatedTarget;d&&e&&d.contains(e)||(b.bubbles=!1,Ce(a,We,b,c))}function Ce(a,b,c,d){U(a,new Le(b,d,c))}function Ne(a,b){U(a,new Le(b.type,b,b))}Ye.prototype.R=function(){for(var a=this.b.length,b,c=0;c<a;c++)b=this.b[c],af(this,Object.keys(b.g));Ga.prototype.R.call(this)};\r\nvar Fe=\"pointermove\",Ee=\"pointerdown\",Ge=\"pointerup\",Ve=\"pointerover\",cf=\"pointerout\",We=\"pointerenter\",Xe=\"pointerleave\",De=\"pointercancel\",bf=[[\"bubbles\",!1],[\"cancelable\",!1],[\"view\",null],[\"detail\",null],[\"screenX\",0],[\"screenY\",0],[\"clientX\",0],[\"clientY\",0],[\"ctrlKey\",!1],[\"altKey\",!1],[\"shiftKey\",!1],[\"metaKey\",!1],[\"button\",0],[\"relatedTarget\",null],[\"buttons\",0],[\"pointerId\",0],[\"width\",0],[\"height\",0],[\"pressure\",0],[\"tiltX\",0],[\"tiltY\",0],[\"pointerType\",\"\"],[\"hwTimestamp\",0],[\"isPrimary\",\r\n!1],[\"type\",\"\"],[\"target\",null],[\"currentTarget\",null],[\"which\",0]];function df(a,b,c,d,e){Td.call(this,a,b,e);this.originalEvent=c;this.pixel=b.uc(c);this.coordinate=b.Ba(this.pixel);this.dragging=void 0!==d?d:!1}B(df,Td);df.prototype.preventDefault=function(){Td.prototype.preventDefault.call(this);this.originalEvent.preventDefault()};df.prototype.stopPropagation=function(){Td.prototype.stopPropagation.call(this);this.originalEvent.stopPropagation()};function ef(a,b,c,d,e){df.call(this,a,b,c.b,d,e);this.b=c}B(ef,df);\r\nfunction ff(a){Ga.call(this);this.c=a;this.h=0;this.l=!1;this.f=[];this.a=null;a=this.c.a;this.v=0;this.s={};this.g=new Ye(a);this.b=null;this.i=R(this.g,Ee,this.Cd,this);this.j=R(this.g,Fe,this.re,this)}B(ff,Ga);function gf(a,b){var c;c=new ef(hf,a.c,b);U(a,c);0!==a.h?(K.clearTimeout(a.h),a.h=0,c=new ef(jf,a.c,b),U(a,c)):a.h=K.setTimeout(function(){this.h=0;var a=new ef(kf,this.c,b);U(this,a)}.bind(a),250)}\r\nfunction lf(a,b){b.type==mf||b.type==nf?delete a.s[b.pointerId]:b.type==of&&(a.s[b.pointerId]=!0);a.v=Object.keys(a.s).length}n=ff.prototype;n.xc=function(a){lf(this,a);var b=new ef(mf,this.c,a);U(this,b);!this.l&&0===a.button&&gf(this,this.a);0===this.v&&(this.f.forEach(M),this.f.length=0,this.l=!1,this.a=null,Da(this.b),this.b=null)};\r\nn.Cd=function(a){lf(this,a);var b=new ef(of,this.c,a);U(this,b);this.a=a;0===this.f.length&&(this.b=new Ye(document),this.f.push(R(this.b,pf,this.ee,this),R(this.b,mf,this.xc,this),R(this.g,nf,this.xc,this)))};n.ee=function(a){if(a.clientX!=this.a.clientX||a.clientY!=this.a.clientY){this.l=!0;var b=new ef(qf,this.c,a,this.l);U(this,b)}a.preventDefault()};n.re=function(a){U(this,new ef(a.type,this.c,a,!(!this.a||a.clientX==this.a.clientX&&a.clientY==this.a.clientY)))};\r\nn.R=function(){this.j&&(M(this.j),this.j=null);this.i&&(M(this.i),this.i=null);this.f.forEach(M);this.f.length=0;this.b&&(Da(this.b),this.b=null);this.g&&(Da(this.g),this.g=null);Ga.prototype.R.call(this)};var kf=\"singleclick\",hf=\"click\",jf=\"dblclick\",qf=\"pointerdrag\",pf=\"pointermove\",of=\"pointerdown\",mf=\"pointerup\",nf=\"pointercancel\",rf={Pe:kf,Ee:hf,Fe:jf,Ie:qf,Le:pf,He:of,Oe:mf,Ne:\"pointerover\",Me:\"pointerout\",Je:\"pointerenter\",Ke:\"pointerleave\",Ge:nf};function sf(a){V.call(this);var b=pa({},a);b.opacity=void 0!==a.opacity?a.opacity:1;b.visible=void 0!==a.visible?a.visible:!0;b.zIndex=void 0!==a.zIndex?a.zIndex:0;b.maxResolution=void 0!==a.maxResolution?a.maxResolution:Infinity;b.minResolution=void 0!==a.minResolution?a.minResolution:0;this.l(b)}B(sf,V);\r\nfunction tf(a){var b=a.Xb(),c=a.Sb(),d=a.gb(),e=a.G(),f=a.Yb(),g=a.get(\"maxResolution\"),h=a.get(\"minResolution\");return{layer:a,opacity:ia(b,0,1),ac:c,visible:d,hb:!0,extent:e,zIndex:f,maxResolution:g,minResolution:Math.max(h,0)}}n=sf.prototype;n.G=function(){return this.get(\"extent\")};n.Xb=function(){return this.get(\"opacity\")};n.gb=function(){return this.get(\"visible\")};n.Yb=function(){return this.get(\"zIndex\")};n.Bc=function(a){this.set(\"opacity\",a)};n.Cc=function(a){this.set(\"visible\",a)};\r\nn.Dc=function(a){this.set(\"zIndex\",a)};function uf(a,b,c,d,e){T.call(this,a);this.vectorContext=b;this.frameState=c;this.context=d;this.glContext=e}B(uf,T);function vf(a){V.call(this);this.N=Hb(a.projection);this.h=wf(a.attributions);this.D=a.logo;this.P=void 0!==a.state?a.state:\"ready\";this.i=void 0!==a.wrapX?a.wrapX:!1}B(vf,V);function wf(a){if(\"string\"===typeof a)return[new bd({html:a})];if(a instanceof bd)return[a];if(Array.isArray(a)){for(var b=a.length,c=Array(b),d=0;d<b;d++){var e=a[d];c[d]=\"string\"===typeof e?new bd({html:e}):e}return c}return null}vf.prototype.fa=I;vf.prototype.ia=function(){return this.N};vf.prototype.T=function(){return this.P};\r\nvf.prototype.Ja=function(){this.w()};function xf(a){var b=pa({},a);delete b.source;sf.call(this,b);this.h=this.f=this.c=null;a.map&&this.setMap(a.map);R(this,La(\"source\"),this.Hd,this);this.$b(a.source?a.source:null)}B(xf,sf);function yf(a,b){return a.visible&&b>=a.minResolution&&b<a.maxResolution}n=xf.prototype;n.Pb=function(a){a=a?a:[];a.push(tf(this));return a};n.da=function(){return this.get(\"source\")||null};n.Sb=function(){var a=this.da();return a?a.T():\"undefined\"};n.fe=function(){this.w()};\r\nn.Hd=function(){this.h&&(M(this.h),this.h=null);var a=this.da();a&&(this.h=R(a,\"change\",this.fe,this));this.w()};n.setMap=function(a){this.c&&(M(this.c),this.c=null);a||this.w();this.f&&(M(this.f),this.f=null);a&&(this.c=R(a,\"precompose\",function(a){var c=tf(this);c.hb=!1;c.zIndex=Infinity;a.frameState.layerStatesArray.push(c);a.frameState.layerStates[J(this)]=c},this),this.f=R(this,\"change\",a.render,a),this.w())};n.$b=function(a){this.set(\"source\",a)};function zf(){this.b={};this.a=0}zf.prototype.clear=function(){this.b={};this.a=0};zf.prototype.get=function(a,b,c){a=b+\":\"+a+\":\"+(c?nd(c):\"null\");return a in this.b?this.b[a]:null};zf.prototype.set=function(a,b,c,d){this.b[b+\":\"+a+\":\"+(c?nd(c):\"null\")]=d;++this.a};var Af=new zf;var Bf=Array(6);function Cf(){return[1,0,0,1,0,0]}function Df(a){return Ef(a,1,0,0,1,0,0)}function Ff(a,b){var c=a[0],d=a[1],e=a[2],f=a[3],g=a[4],h=a[5],k=b[0],l=b[1],m=b[2],p=b[3],q=b[4],u=b[5];a[0]=c*k+e*l;a[1]=d*k+f*l;a[2]=c*m+e*p;a[3]=d*m+f*p;a[4]=c*q+e*u+g;a[5]=d*q+f*u+h}function Ef(a,b,c,d,e,f,g){a[0]=b;a[1]=c;a[2]=d;a[3]=e;a[4]=f;a[5]=g;return a}function Gf(a,b){a[0]=b[0];a[1]=b[1];a[2]=b[2];a[3]=b[3];a[4]=b[4];a[5]=b[5];return a}\r\nfunction Hf(a,b){var c=b[0],d=b[1];b[0]=a[0]*c+a[2]*d+a[4];b[1]=a[1]*c+a[3]*d+a[5];return b}function If(a,b){var c=Math.cos(b),d=Math.sin(b);Ff(a,Ef(Bf,c,d,-d,c,0,0))}function Jf(a,b,c){Ff(a,Ef(Bf,b,0,0,c,0,0))}function Kf(a,b,c){Ff(a,Ef(Bf,1,0,0,1,b,c))}function Lf(a,b,c,d,e,f,g,h){var k=Math.sin(f);f=Math.cos(f);a[0]=d*f;a[1]=e*k;a[2]=-d*k;a[3]=e*f;a[4]=g*d*f-h*d*k+b;a[5]=g*e*k+h*e*f+c;return a}\r\nfunction Mf(a){var b=a[0]*a[3]-a[1]*a[2];L(0!==b,32);var c=a[0],d=a[1],e=a[2],f=a[3],g=a[4],h=a[5];a[0]=f/b;a[1]=-d/b;a[2]=-e/b;a[3]=c/b;a[4]=(e*h-f*g)/b;a[5]=-(c*h-d*g)/b};function Nf(a,b){this.g=b;this.c={};this.j={}}B(Nf,Aa);function Of(a){var b=a.viewState,c=a.coordinateToPixelTransform,d=a.pixelToCoordinateTransform;Lf(c,a.size[0]/2,a.size[1]/2,1/b.resolution,-1/b.resolution,-b.rotation,-b.center[0],-b.center[1]);Mf(Gf(d,c))}n=Nf.prototype;n.R=function(){for(var a in this.c)Da(this.c[a])};function Pf(){if(32<Af.a){var a=0,b,c;for(b in Af.b)c=Af.b[b],0!==(a++&3)||Ha(c)||(delete Af.b[b],--Af.a)}}\r\nn.fa=function(a,b,c,d,e,f){function g(a,e){var f=J(a).toString(),g=b.layerStates[J(e)].hb;if(!(f in b.skippedFeatureUids)||g)return c.call(d,a,g?e:null)}var h,k=b.viewState,l=k.resolution,m=k.projection,k=a;if(m.b){var m=m.G(),p=qb(m),q=a[0];if(q<m[0]||q>m[2])k=[q+p*Math.ceil((m[0]-q)/p),a[1]]}m=b.layerStatesArray;for(p=m.length-1;0<=p;--p){var u=m[p],q=u.layer;if(yf(u,l)&&e.call(f,q)&&(u=Qf(this,q),q.da()&&(h=u.fa(q.da().i?k:a,b,g,d)),h))return h}};\r\nn.Fc=function(a,b,c,d){return void 0!==this.fa(a,b,yb,this,c,d)};function Qf(a,b){var c=J(b).toString();if(c in a.c)return a.c[c];var d=a.Mb(b);a.c[c]=d;a.j[c]=R(d,\"change\",a.wd,a);return d}n.wd=function(){this.g.render()};n.vb=I;n.ue=function(a,b){for(var c in this.c)if(!(b&&c in b.layerStates)){var d=c,e=this.c[d];delete this.c[d];M(this.j[d]);delete this.j[d];Da(e)}};function Rf(a,b){for(var c in a.c)if(!(c in b.layerStates)){b.postRenderFunctions.push(a.ue.bind(a));break}}\r\nfunction Ta(a,b){return a.zIndex-b.zIndex};function Sf(a,b){Ga.call(this);this.V=a;this.state=b;this.b=null;this.key=\"\"}B(Sf,Ga);function Tf(a){U(a,\"change\")}Sf.prototype.getKey=function(){return this.key+\"/\"+this.V};Sf.prototype.T=function(){return this.state};function Uf(a,b){this.j=a;this.f=b;this.b=[];this.c=[];this.a={}}Uf.prototype.clear=function(){this.b.length=0;this.c.length=0;qa(this.a)};function Vf(a){var b=a.b,c=a.c,d=b[0];1==b.length?(b.length=0,c.length=0):(b[0]=b.pop(),c[0]=c.pop(),Wf(a,0));b=a.f(d);delete a.a[b];return d}Uf.prototype.g=function(a){L(!(this.f(a)in this.a),31);var b=this.j(a);return Infinity!=b?(this.b.push(a),this.c.push(b),this.a[this.f(a)]=!0,Xf(this,0,this.b.length-1),!0):!1};\r\nfunction Wf(a,b){for(var c=a.b,d=a.c,e=c.length,f=c[b],g=d[b],h=b;b<e>>1;){var k=2*b+1,l=2*b+2,k=l<e&&d[l]<d[k]?l:k;c[b]=c[k];d[b]=d[k];b=k}c[b]=f;d[b]=g;Xf(a,h,b)}function Xf(a,b,c){var d=a.b;a=a.c;for(var e=d[c],f=a[c];c>b;){var g=c-1>>1;if(a[g]>f)d[c]=d[g],a[c]=a[g],c=g;else break}d[c]=e;a[c]=f}function Yf(a){var b=a.j,c=a.b,d=a.c,e=0,f=c.length,g,h,k;for(h=0;h<f;++h)g=c[h],k=b(g),Infinity==k?delete a.a[a.f(g)]:(d[e]=k,c[e++]=g);c.length=e;d.length=e;for(b=(a.b.length>>1)-1;0<=b;b--)Wf(a,b)};function Zf(a,b){Uf.call(this,function(b){return a.apply(null,b)},function(a){return a[0].getKey()});this.C=b;this.l=0;this.h={}}B(Zf,Uf);Zf.prototype.g=function(a){var b=Uf.prototype.g.call(this,a);b&&R(a[0],\"change\",this.i,this);return b};Zf.prototype.i=function(a){a=a.target;var b=a.T();if(2===b||3===b||4===b||5===b)ya(a,\"change\",this.i,this),a=a.getKey(),a in this.h&&(delete this.h[a],--this.l),this.C()};function $f(){this.b=[];this.a=this.c=0}function ag(a,b){var c=a.a,d=.05-c,e=Math.log(.05/a.a)/-.005;return Dc({source:b,duration:e,easing:function(a){return c*(Math.exp(-.005*a*e)-1)/d}})};function bg(a){V.call(this);this.aa=null;this.set(\"active\",!0);this.handleEvent=a.handleEvent}B(bg,V);bg.prototype.setMap=function(a){this.aa=a};function cg(a,b,c,d,e){if(void 0!==c){var f=b.get(xc),g=b.qa();void 0!==f&&g&&e&&0<e&&(a.oa(Ec({rotation:f,duration:e,easing:Ac})),d&&a.oa(Dc({source:g,duration:e,easing:Ac})));b.rotate(c,d)}}function dg(a,b,c,d,e){var f=b.O();c=b.constrainResolution(f,c,0);eg(a,b,c,d,e)}\r\nfunction eg(a,b,c,d,e){if(c){var f=b.O(),g=b.qa();void 0!==f&&g&&c!==f&&e&&0<e&&(a.oa(Fc({resolution:f,duration:e,easing:Ac})),d&&a.oa(Dc({source:g,duration:e,easing:Ac})));if(d){var h;a=b.qa();e=b.O();void 0!==a&&void 0!==e&&(h=[d[0]-c*(d[0]-a[0])/e,d[1]-c*(d[1]-a[1])/e]);b.xa(h)}b.set(wc,c)}};function fg(a){a=a?a:{};this.a=a.delta?a.delta:1;bg.call(this,{handleEvent:gg});this.c=void 0!==a.duration?a.duration:250}B(fg,bg);function gg(a){var b=!1,c=a.originalEvent;if(a.type==jf){var b=a.map,d=a.coordinate,c=c.shiftKey?-this.a:this.a,e=b.U();dg(b,e,c,d,this.c);a.preventDefault();b=!0}return!b};function hg(a){a=a.originalEvent;return a.altKey&&!(a.metaKey||a.ctrlKey)&&a.shiftKey}function ig(a){a=a.originalEvent;return 0==a.button&&!(Cd&&ne&&a.ctrlKey)}function jg(a){a=a.originalEvent;return!a.altKey&&!(a.metaKey||a.ctrlKey)&&!a.shiftKey}function kg(a){a=a.originalEvent;return!a.altKey&&!(a.metaKey||a.ctrlKey)&&a.shiftKey}function lg(a){a=a.originalEvent.target.tagName;return\"INPUT\"!==a&&\"SELECT\"!==a&&\"TEXTAREA\"!==a}function mg(a){L(a.b,56);return\"mouse\"==a.b.pointerType};function ng(a){a=a?a:{};bg.call(this,{handleEvent:a.handleEvent?a.handleEvent:og});this.Bb=a.handleDownEvent?a.handleDownEvent:zb;this.Cb=a.handleDragEvent?a.handleDragEvent:I;this.zb=a.handleMoveEvent?a.handleMoveEvent:I;this.Eb=a.handleUpEvent?a.handleUpEvent:zb;this.v=!1;this.N={};this.f=[]}B(ng,bg);function pg(a){for(var b=a.length,c=0,d=0,e=0;e<b;e++)c+=a[e].clientX,d+=a[e].clientY;return[c/b,d/b]}\r\nfunction og(a){if(!(a instanceof ef))return!0;var b=!1,c=a.type;if(c===of||c===qf||c===mf)c=a.b,a.type==mf?delete this.N[c.pointerId]:a.type==of?this.N[c.pointerId]=c:c.pointerId in this.N&&(this.N[c.pointerId]=c),this.f=ra(this.N);this.v&&(a.type==qf?this.Cb(a):a.type==mf&&(this.v=this.Eb(a)));a.type==of?(this.v=a=this.Bb(a),b=this.B(a)):a.type==pf&&this.zb(a);return!b}ng.prototype.B=function(a){return a};function qg(a){ng.call(this,{handleDownEvent:rg,handleDragEvent:sg,handleUpEvent:tg});a=a?a:{};this.a=a.kinetic;this.c=this.g=null;this.i=a.condition?a.condition:jg;this.h=!1}B(qg,ng);function sg(a){var b=pg(this.f);this.a&&this.a.b.push(b[0],b[1],Date.now());if(this.c){var c=this.c[0]-b[0],d=b[1]-this.c[1];a=a.map.U();var e=a.T(),d=c=[c,d],f=e.resolution;d[0]*=f;d[1]*=f;bb(c,e.rotation);ab(c,e.center);c=a.a.center(c);a.xa(c)}this.c=b}\r\nfunction tg(a){var b=a.map;a=b.U();if(0===this.f.length){var c;if(c=!this.h&&this.a)if(c=this.a,6>c.b.length)c=!1;else{var d=Date.now()-100,e=c.b.length-3;if(c.b[e+2]<d)c=!1;else{for(var f=e-3;0<f&&c.b[f+2]>d;)f-=3;var d=c.b[e+2]-c.b[f+2],g=c.b[e]-c.b[f],e=c.b[e+1]-c.b[f+1];c.c=Math.atan2(e,g);c.a=Math.sqrt(g*g+e*e)/d;c=.05<c.a}}c?(c=(.05-this.a.a)/-.005,e=this.a.c,f=a.qa(),this.g=ag(this.a,f),b.oa(this.g),f=ug(b,f),b=b.Ba([f[0]-c*Math.cos(e),f[1]-c*Math.sin(e)]),b=a.a.center(b),a.xa(b)):b.render();\r\nzc(a,-1);return!1}this.c=null;return!0}function rg(a){if(0<this.f.length&&this.i(a)){var b=a.map,c=b.U();this.c=null;this.v||zc(c,1);this.g&&Qa(b.D,this.g)&&(c.xa(a.frameState.viewState.center),this.g=null);this.a&&(a=this.a,a.b.length=0,a.c=0,a.a=0);this.h=1<this.f.length;return!0}return!1}qg.prototype.B=zb;function vg(a){a=a?a:{};ng.call(this,{handleDownEvent:wg,handleDragEvent:xg,handleUpEvent:yg});this.c=a.condition?a.condition:hg;this.a=void 0;this.g=void 0!==a.duration?a.duration:250}B(vg,ng);function xg(a){if(mg(a)){var b=a.map,c=b.Ta();a=a.pixel;c=Math.atan2(c[1]/2-a[1],a[0]-c[0]/2);if(void 0!==this.a){a=c-this.a;var d=b.U(),e=d.get(xc);cg(b,d,e-a)}this.a=c}}\r\nfunction yg(a){if(!mg(a))return!0;a=a.map;var b=a.U();zc(b,-1);var c=b.get(xc),d=this.g,c=b.constrainRotation(c,0);cg(a,b,c,void 0,d);return!1}function wg(a){return mg(a)&&ig(a)&&this.c(a)?(zc(a.map.U(),1),this.a=void 0,!0):!1}vg.prototype.B=zb;function zg(a){this.f=null;this.a=document.createElement(\"div\");this.a.style.position=\"absolute\";this.a.className=\"ol-box \"+a;this.c=this.g=this.b=null}B(zg,Aa);zg.prototype.R=function(){this.setMap(null)};function Ag(a){var b=a.g,c=a.c;a=a.a.style;a.left=Math.min(b[0],c[0])+\"px\";a.top=Math.min(b[1],c[1])+\"px\";a.width=Math.abs(c[0]-b[0])+\"px\";a.height=Math.abs(c[1]-b[1])+\"px\"}\r\nzg.prototype.setMap=function(a){if(this.b){this.b.s.removeChild(this.a);var b=this.a.style;b.left=b.top=b.width=b.height=\"inherit\"}(this.b=a)&&this.b.s.appendChild(this.a)};function Bg(a){var b=a.g,c=a.c,b=[b,[b[0],c[1]],c,[c[0],b[1]]].map(a.b.Ba,a.b);b[4]=b[0].slice();a.f?a.f.ea([b]):a.f=new qc([b])}zg.prototype.S=function(){return this.f};function Cg(a,b,c){T.call(this,a);this.coordinate=b;this.mapBrowserEvent=c}B(Cg,T);function Dg(a){ng.call(this,{handleDownEvent:Eg,handleDragEvent:Fg,handleUpEvent:Gg});a=a?a:{};this.a=new zg(a.className||\"ol-dragbox\");this.c=null;this.j=a.condition?a.condition:yb;this.i=a.boxEndCondition?a.boxEndCondition:Hg}B(Dg,ng);function Hg(a,b,c){a=c[0]-b[0];b=c[1]-b[1];return 64<=a*a+b*b}\r\nfunction Fg(a){if(mg(a)){var b=this.a,c=a.pixel;b.g=this.c;b.c=c;Bg(b);Ag(b);U(this,new Cg(\"boxdrag\",a.coordinate,a))}}Dg.prototype.S=function(){return this.a.S()};Dg.prototype.h=I;function Gg(a){if(!mg(a))return!0;this.a.setMap(null);this.i(a,this.c,a.pixel)&&(this.h(a),U(this,new Cg(\"boxend\",a.coordinate,a)));return!1}\r\nfunction Eg(a){if(mg(a)&&ig(a)&&this.j(a)){this.c=a.pixel;this.a.setMap(a.map);var b=this.a,c=this.c;b.g=this.c;b.c=c;Bg(b);Ag(b);U(this,new Cg(\"boxstart\",a.coordinate,a));return!0}return!1};function Ig(a){a=a?a:{};var b=a.condition?a.condition:kg;this.g=void 0!==a.duration?a.duration:200;this.s=void 0!==a.out?a.out:!1;Dg.call(this,{condition:b,className:a.className||\"ol-dragzoom\"})}B(Ig,Dg);\r\nIg.prototype.h=function(){var a=this.aa,b=a.U(),c=a.Ta(),d=this.S().G();if(this.s){var e=b.lc(c),d=[ug(a,sb(d)),ug(a,[d[2],d[3]])],f=jb(void 0),g,h;g=0;for(h=d.length;g<h;++g)eb(f,d[g]);f=1/yc(f,c);d=(e[2]-e[0])/2*(f-1);f=(e[3]-e[1])/2*(f-1);e[0]-=d;e[2]+=d;e[1]-=f;e[3]+=f;d=e}c=b.constrainResolution(yc(d,c));e=b.O();f=b.qa();a.oa(Fc({resolution:e,duration:this.g,easing:Ac}));a.oa(Dc({source:f,duration:this.g,easing:Ac}));b.xa(tb(d));b.set(wc,c)};function Jg(a){bg.call(this,{handleEvent:Kg});a=a||{};this.a=function(a){return jg(a)&&lg(a)};this.c=void 0!==a.condition?a.condition:this.a;this.f=void 0!==a.duration?a.duration:100;this.g=void 0!==a.pixelDelta?a.pixelDelta:128}B(Jg,bg);\r\nfunction Kg(a){var b=!1;if(\"keydown\"==a.type){var c=a.originalEvent.keyCode;if(this.c(a)&&(40==c||37==c||39==c||38==c)){var d=a.map,b=d.U(),e=b.O()*this.g,f=0,g=0;40==c?g=-e:37==c?f=-e:39==c?f=e:g=e;c=[f,g];bb(c,b.get(xc));e=this.f;if(f=b.qa())e&&0<e&&d.oa(Dc({source:f,duration:e,easing:Cc})),d=b.a.center([f[0]+c[0],f[1]+c[1]]),b.xa(d);a.preventDefault();b=!0}}return!b};function Lg(a){bg.call(this,{handleEvent:Mg});a=a?a:{};this.c=a.condition?a.condition:lg;this.a=a.delta?a.delta:1;this.f=void 0!==a.duration?a.duration:100}B(Lg,bg);function Mg(a){var b=!1;if(\"keydown\"==a.type||\"keypress\"==a.type){var c=a.originalEvent.charCode;if(this.c(a)&&(43==c||45==c)){var b=a.map,c=43==c?this.a:-this.a,d=b.U();dg(b,d,c,void 0,this.f);a.preventDefault();b=!0}}return!b};function Ng(a){bg.call(this,{handleEvent:Og});a=a||{};this.a=0;this.i=void 0!==a.duration?a.duration:250;this.j=void 0!==a.useAnchor?a.useAnchor:!0;this.f=null;this.g=this.c=void 0}B(Ng,bg);\r\nfunction Og(a){var b=!1;if(\"wheel\"==a.type||\"mousewheel\"==a.type){var b=a.map,c=a.originalEvent;this.j&&(this.f=a.coordinate);var d;\"wheel\"==a.type?(d=c.deltaY,le&&c.deltaMode===K.WheelEvent.DOM_DELTA_PIXEL&&(d/=oe),c.deltaMode===K.WheelEvent.DOM_DELTA_LINE&&(d*=40)):\"mousewheel\"==a.type&&(d=-c.wheelDeltaY,me&&(d/=3));this.a+=d;void 0===this.c&&(this.c=Date.now());d=Math.max(80-(Date.now()-this.c),0);K.clearTimeout(this.g);this.g=K.setTimeout(this.h.bind(this,b),d);a.preventDefault();b=!0}return!b}\r\nNg.prototype.h=function(a){var b=ia(this.a,-1,1),c=a.U();dg(a,c,-b,this.f,this.i);this.a=0;this.f=null;this.g=this.c=void 0};function Pg(a){ng.call(this,{handleDownEvent:Qg,handleDragEvent:Rg,handleUpEvent:Sg});a=a||{};this.c=null;this.g=void 0;this.a=!1;this.h=0;this.j=void 0!==a.threshold?a.threshold:.3;this.i=void 0!==a.duration?a.duration:250}B(Pg,ng);\r\nfunction Rg(a){var b=0,c=this.f[0],d=this.f[1],c=Math.atan2(d.clientY-c.clientY,d.clientX-c.clientX);void 0!==this.g&&(b=c-this.g,this.h+=b,!this.a&&Math.abs(this.h)>this.j&&(this.a=!0));this.g=c;a=a.map;c=a.a.getBoundingClientRect();d=pg(this.f);d[0]-=c.left;d[1]-=c.top;this.c=a.Ba(d);this.a&&(c=a.U(),d=c.get(xc),a.render(),cg(a,c,d+b,this.c))}\r\nfunction Sg(a){if(2>this.f.length){a=a.map;var b=a.U();zc(b,-1);if(this.a){var c=b.get(xc),d=this.c,e=this.i,c=b.constrainRotation(c,0);cg(a,b,c,d,e)}return!1}return!0}function Qg(a){return 2<=this.f.length?(a=a.map,this.c=null,this.g=void 0,this.a=!1,this.h=0,this.v||zc(a.U(),1),a.render(),!0):!1}Pg.prototype.B=zb;function Tg(a){ng.call(this,{handleDownEvent:Ug,handleDragEvent:Vg,handleUpEvent:Wg});a=a?a:{};this.c=null;this.h=void 0!==a.duration?a.duration:400;this.a=void 0;this.g=1}B(Tg,ng);function Vg(a){var b=1,c=this.f[0],d=this.f[1],e=c.clientX-d.clientX,c=c.clientY-d.clientY,e=Math.sqrt(e*e+c*c);void 0!==this.a&&(b=this.a/e);this.a=e;1!=b&&(this.g=b);a=a.map;var e=a.U(),c=e.O(),d=a.a.getBoundingClientRect(),f=pg(this.f);f[0]-=d.left;f[1]-=d.top;this.c=a.Ba(f);a.render();eg(a,e,c*b,this.c)}\r\nfunction Wg(a){if(2>this.f.length){a=a.map;var b=a.U();zc(b,-1);var c=b.O(),d=this.c,e=this.h,c=b.constrainResolution(c,0,this.g-1);eg(a,b,c,d,e);return!1}return!0}function Ug(a){return 2<=this.f.length?(a=a.map,this.c=null,this.a=void 0,this.g=1,this.v||zc(a.U(),1),a.render(),!0):!1}Tg.prototype.B=zb;function Xg(a){var b=a||{};a=pa({},b);delete a.layers;b=b.layers;sf.call(this,a);this.c=[];this.a={};R(this,La(\"layers\"),this.yd,this);b?Array.isArray(b)?b=new cd(b.slice()):L(b instanceof cd,43):b=new cd;this.set(\"layers\",b)}B(Xg,sf);n=Xg.prototype;n.rb=function(){this.gb()&&this.w()};\r\nn.yd=function(){this.c.forEach(M);this.c.length=0;var a=this.get(\"layers\");this.c.push(R(a,hd,this.xd,this),R(a,id,this.zd,this));for(var b in this.a)this.a[b].forEach(M);qa(this.a);var a=a.a,c,d;b=0;for(c=a.length;b<c;b++)d=a[b],this.a[J(d).toString()]=[R(d,\"propertychange\",this.rb,this),R(d,\"change\",this.rb,this)];this.w()};n.xd=function(a){a=a.element;var b=J(a).toString();this.a[b]=[R(a,\"propertychange\",this.rb,this),R(a,\"change\",this.rb,this)];this.w()};\r\nn.zd=function(a){a=J(a.element).toString();this.a[a].forEach(M);delete this.a[a];this.w()};n.Pb=function(a){var b=void 0!==a?a:[],c=b.length;ed(this.get(\"layers\"),function(a){a.Pb(b)});a=tf(this);var d,e;for(d=b.length;c<d;c++)e=b[c],e.opacity*=a.opacity,e.visible=e.visible&&a.visible,e.maxResolution=Math.min(e.maxResolution,a.maxResolution),e.minResolution=Math.max(e.minResolution,a.minResolution),void 0!==a.extent&&(e.extent=void 0!==e.extent?vb(e.extent,a.extent):a.extent);return b};n.Sb=function(){return\"ready\"};function Yg(a){Eb.call(this,{code:a,units:\"m\",extent:Zg,global:!0,worldExtent:$g})}B(Yg,Eb);Yg.prototype.getPointResolution=function(a,b){return a/ja(b[1]/6378137)};var ah=6378137*Math.PI,Zg=[-ah,-ah,ah,ah],$g=[-180,-85,180,85],bh=\"EPSG:3857 EPSG:102100 EPSG:102113 EPSG:900913 urn:ogc:def:crs:EPSG:6.18:3:3857 urn:ogc:def:crs:EPSG::3857 http://www.opengis.net/gml/srs/epsg.xml#3857\".split(\" \").map(function(a){return new Yg(a)});\r\nfunction ch(a,b,c){var d=a.length;c=1<c?c:2;void 0===b&&(2<c?b=a.slice():b=Array(d));for(var e=0;e<d;e+=c)b[e]=6378137*Math.PI*a[e]/180,b[e+1]=6378137*Math.log(Math.tan(Math.PI*(a[e+1]+90)/360));return b}function dh(a,b,c){var d=a.length;c=1<c?c:2;void 0===b&&(2<c?b=a.slice():b=Array(d));for(var e=0;e<d;e+=c)b[e]=180*a[e]/(6378137*Math.PI),b[e+1]=360*Math.atan(Math.exp(a[e+1]/6378137))/Math.PI-90;return b};var eh=new Ab(6378137);function fh(a,b){Eb.call(this,{code:a,units:\"degrees\",extent:gh,axisOrientation:b,global:!0,metersPerUnit:hh,worldExtent:gh})}B(fh,Eb);fh.prototype.getPointResolution=function(a){return a};\r\nvar gh=[-180,-90,180,90],hh=Math.PI*eh.radius/180,ih=[new fh(\"CRS:84\"),new fh(\"EPSG:4326\",\"neu\"),new fh(\"urn:ogc:def:crs:EPSG::4326\",\"neu\"),new fh(\"urn:ogc:def:crs:EPSG:6.6:4326\",\"neu\"),new fh(\"urn:ogc:def:crs:OGC:1.3:CRS84\"),new fh(\"urn:ogc:def:crs:OGC:2:84\"),new fh(\"http://www.opengis.net/gml/srs/epsg.xml#4326\",\"neu\"),new fh(\"urn:x-ogc:def:crs:EPSG:4326\",\"neu\")];function W(a){a=a?a:{};var b=pa({},a);delete b.preload;delete b.useInterimTilesOnError;xf.call(this,b);this.set(\"preload\",void 0!==a.preload?a.preload:0);this.set(\"useInterimTilesOnError\",void 0!==a.useInterimTilesOnError?a.useInterimTilesOnError:!0)}B(W,xf);function jh(a){return a.get(\"useInterimTilesOnError\")};var kh=[0,0,0,1],lh=[],mh=[0,0,0,1];function nh(a,b,c,d){0!==b&&(a.translate(c,d),a.rotate(b),a.translate(-c,-d))};function oh(a){this.C=a.opacity;this.K=a.rotateWithView;this.s=a.rotation;this.v=a.scale;this.B=a.snapToPixel};function ph(a){a=a||{};this.h=this.c=this.f=null;this.g=void 0!==a.fill?a.fill:null;this.b=void 0!==a.stroke?a.stroke:null;this.a=a.radius;this.j=[0,0];this.i=this.u=this.l=null;var b=a.atlasManager,c,d=null,e,f=0;this.b&&(e=nd(this.b.a),f=this.b.c,void 0===f&&(f=1),d=this.b.b,pe||(d=null));var g=2*(this.a+f)+1;e={strokeStyle:e,jb:f,size:g,lineDash:d};if(void 0===b)b=Md(g,g),this.c=b.canvas,c=g=this.c.width,this.Oc(e,b,0,0),this.g?this.h=this.c:(b=Md(e.size,e.size),this.h=b.canvas,this.Nc(e,b,0,0));\r\nelse{g=Math.round(g);(d=!this.g)&&(c=this.Nc.bind(this,e));var f=this.b?qh(this.b):\"-\",h=this.g?rh(this.g):\"-\";this.f&&f==this.f[1]&&h==this.f[2]&&this.a==this.f[3]||(this.f=[\"c\"+f+h+(void 0!==this.a?this.a.toString():\"-\"),f,h,this.a]);b=b.add(this.f[0],g,g,this.Oc.bind(this,e),c);this.c=b.image;this.j=[b.offsetX,b.offsetY];c=b.image.width;d?this.h=b.Nd:this.h=this.c}this.l=[g/2,g/2];this.u=[g,g];this.i=[c,c];oh.call(this,{opacity:1,rotateWithView:!1,rotation:0,scale:1,snapToPixel:void 0!==a.snapToPixel?\r\na.snapToPixel:!0})}B(ph,oh);n=ph.prototype;n.eb=function(){return this.l};n.ub=function(){return this.h};n.Z=function(){return this.c};n.ib=function(){return 2};n.Ob=function(){return this.i};n.pa=function(){return this.j};n.Ka=function(){return this.u};n.Vb=I;n.load=I;n.bc=I;\r\nn.Oc=function(a,b,c,d){b.setTransform(1,0,0,1,0,0);b.translate(c,d);b.beginPath();b.arc(a.size/2,a.size/2,this.a,0,2*Math.PI,!0);this.g&&(b.fillStyle=qd(this.g.b),b.fill());this.b&&(b.strokeStyle=a.strokeStyle,b.lineWidth=a.jb,a.lineDash&&b.setLineDash(a.lineDash),b.stroke());b.closePath()};\r\nn.Nc=function(a,b,c,d){b.setTransform(1,0,0,1,0,0);b.translate(c,d);b.beginPath();b.arc(a.size/2,a.size/2,this.a,0,2*Math.PI,!0);b.fillStyle=nd(kh);b.fill();this.b&&(b.strokeStyle=a.strokeStyle,b.lineWidth=a.jb,a.lineDash&&b.setLineDash(a.lineDash),b.stroke());b.closePath()};function sh(a){a=a||{};this.b=void 0!==a.color?a.color:null;this.a=void 0}function rh(a){void 0===a.a&&(a.a=a.b instanceof CanvasPattern||a.b instanceof CanvasGradient?J(a.b).toString():\"f\"+(a.b?nd(a.b):\"-\"));return a.a};function th(){this.a=-1};function uh(){this.a=64;this.b=Array(4);this.g=Array(this.a);this.b[0]=1732584193;this.b[1]=4023233417;this.b[2]=2562383102;this.b[3]=271733878;this.f=this.c=0}(function(){function a(){}a.prototype=th.prototype;uh.a=th.prototype;uh.prototype=new a;uh.prototype.constructor=uh;uh.b=function(a,c,d){for(var e=Array(arguments.length-2),f=2;f<arguments.length;f++)e[f-2]=arguments[f];return th.prototype[c].apply(a,e)}})();\r\nfunction vh(a,b,c){c||(c=0);var d=Array(16);if(\"string\"==typeof b)for(var e=0;16>e;++e)d[e]=b.charCodeAt(c++)|b.charCodeAt(c++)<<8|b.charCodeAt(c++)<<16|b.charCodeAt(c++)<<24;else for(e=0;16>e;++e)d[e]=b[c++]|b[c++]<<8|b[c++]<<16|b[c++]<<24;b=a.b[0];c=a.b[1];var e=a.b[2],f=a.b[3],g;g=b+(f^c&(e^f))+d[0]+3614090360&4294967295;b=c+(g<<7&4294967295|g>>>25);g=f+(e^b&(c^e))+d[1]+3905402710&4294967295;f=b+(g<<12&4294967295|g>>>20);g=e+(c^f&(b^c))+d[2]+606105819&4294967295;e=f+(g<<17&4294967295|g>>>15);g=\r\nc+(b^e&(f^b))+d[3]+3250441966&4294967295;c=e+(g<<22&4294967295|g>>>10);g=b+(f^c&(e^f))+d[4]+4118548399&4294967295;b=c+(g<<7&4294967295|g>>>25);g=f+(e^b&(c^e))+d[5]+1200080426&4294967295;f=b+(g<<12&4294967295|g>>>20);g=e+(c^f&(b^c))+d[6]+2821735955&4294967295;e=f+(g<<17&4294967295|g>>>15);g=c+(b^e&(f^b))+d[7]+4249261313&4294967295;c=e+(g<<22&4294967295|g>>>10);g=b+(f^c&(e^f))+d[8]+1770035416&4294967295;b=c+(g<<7&4294967295|g>>>25);g=f+(e^b&(c^e))+d[9]+2336552879&4294967295;f=b+(g<<12&4294967295|g>>>\r\n20);g=e+(c^f&(b^c))+d[10]+4294925233&4294967295;e=f+(g<<17&4294967295|g>>>15);g=c+(b^e&(f^b))+d[11]+2304563134&4294967295;c=e+(g<<22&4294967295|g>>>10);g=b+(f^c&(e^f))+d[12]+1804603682&4294967295;b=c+(g<<7&4294967295|g>>>25);g=f+(e^b&(c^e))+d[13]+4254626195&4294967295;f=b+(g<<12&4294967295|g>>>20);g=e+(c^f&(b^c))+d[14]+2792965006&4294967295;e=f+(g<<17&4294967295|g>>>15);g=c+(b^e&(f^b))+d[15]+1236535329&4294967295;c=e+(g<<22&4294967295|g>>>10);g=b+(e^f&(c^e))+d[1]+4129170786&4294967295;b=c+(g<<5&4294967295|\r\ng>>>27);g=f+(c^e&(b^c))+d[6]+3225465664&4294967295;f=b+(g<<9&4294967295|g>>>23);g=e+(b^c&(f^b))+d[11]+643717713&4294967295;e=f+(g<<14&4294967295|g>>>18);g=c+(f^b&(e^f))+d[0]+3921069994&4294967295;c=e+(g<<20&4294967295|g>>>12);g=b+(e^f&(c^e))+d[5]+3593408605&4294967295;b=c+(g<<5&4294967295|g>>>27);g=f+(c^e&(b^c))+d[10]+38016083&4294967295;f=b+(g<<9&4294967295|g>>>23);g=e+(b^c&(f^b))+d[15]+3634488961&4294967295;e=f+(g<<14&4294967295|g>>>18);g=c+(f^b&(e^f))+d[4]+3889429448&4294967295;c=e+(g<<20&4294967295|\r\ng>>>12);g=b+(e^f&(c^e))+d[9]+568446438&4294967295;b=c+(g<<5&4294967295|g>>>27);g=f+(c^e&(b^c))+d[14]+3275163606&4294967295;f=b+(g<<9&4294967295|g>>>23);g=e+(b^c&(f^b))+d[3]+4107603335&4294967295;e=f+(g<<14&4294967295|g>>>18);g=c+(f^b&(e^f))+d[8]+1163531501&4294967295;c=e+(g<<20&4294967295|g>>>12);g=b+(e^f&(c^e))+d[13]+2850285829&4294967295;b=c+(g<<5&4294967295|g>>>27);g=f+(c^e&(b^c))+d[2]+4243563512&4294967295;f=b+(g<<9&4294967295|g>>>23);g=e+(b^c&(f^b))+d[7]+1735328473&4294967295;e=f+(g<<14&4294967295|\r\ng>>>18);g=c+(f^b&(e^f))+d[12]+2368359562&4294967295;c=e+(g<<20&4294967295|g>>>12);g=b+(c^e^f)+d[5]+4294588738&4294967295;b=c+(g<<4&4294967295|g>>>28);g=f+(b^c^e)+d[8]+2272392833&4294967295;f=b+(g<<11&4294967295|g>>>21);g=e+(f^b^c)+d[11]+1839030562&4294967295;e=f+(g<<16&4294967295|g>>>16);g=c+(e^f^b)+d[14]+4259657740&4294967295;c=e+(g<<23&4294967295|g>>>9);g=b+(c^e^f)+d[1]+2763975236&4294967295;b=c+(g<<4&4294967295|g>>>28);g=f+(b^c^e)+d[4]+1272893353&4294967295;f=b+(g<<11&4294967295|g>>>21);g=e+(f^\r\nb^c)+d[7]+4139469664&4294967295;e=f+(g<<16&4294967295|g>>>16);g=c+(e^f^b)+d[10]+3200236656&4294967295;c=e+(g<<23&4294967295|g>>>9);g=b+(c^e^f)+d[13]+681279174&4294967295;b=c+(g<<4&4294967295|g>>>28);g=f+(b^c^e)+d[0]+3936430074&4294967295;f=b+(g<<11&4294967295|g>>>21);g=e+(f^b^c)+d[3]+3572445317&4294967295;e=f+(g<<16&4294967295|g>>>16);g=c+(e^f^b)+d[6]+76029189&4294967295;c=e+(g<<23&4294967295|g>>>9);g=b+(c^e^f)+d[9]+3654602809&4294967295;b=c+(g<<4&4294967295|g>>>28);g=f+(b^c^e)+d[12]+3873151461&4294967295;\r\nf=b+(g<<11&4294967295|g>>>21);g=e+(f^b^c)+d[15]+530742520&4294967295;e=f+(g<<16&4294967295|g>>>16);g=c+(e^f^b)+d[2]+3299628645&4294967295;c=e+(g<<23&4294967295|g>>>9);g=b+(e^(c|~f))+d[0]+4096336452&4294967295;b=c+(g<<6&4294967295|g>>>26);g=f+(c^(b|~e))+d[7]+1126891415&4294967295;f=b+(g<<10&4294967295|g>>>22);g=e+(b^(f|~c))+d[14]+2878612391&4294967295;e=f+(g<<15&4294967295|g>>>17);g=c+(f^(e|~b))+d[5]+4237533241&4294967295;c=e+(g<<21&4294967295|g>>>11);g=b+(e^(c|~f))+d[12]+1700485571&4294967295;b=c+\r\n(g<<6&4294967295|g>>>26);g=f+(c^(b|~e))+d[3]+2399980690&4294967295;f=b+(g<<10&4294967295|g>>>22);g=e+(b^(f|~c))+d[10]+4293915773&4294967295;e=f+(g<<15&4294967295|g>>>17);g=c+(f^(e|~b))+d[1]+2240044497&4294967295;c=e+(g<<21&4294967295|g>>>11);g=b+(e^(c|~f))+d[8]+1873313359&4294967295;b=c+(g<<6&4294967295|g>>>26);g=f+(c^(b|~e))+d[15]+4264355552&4294967295;f=b+(g<<10&4294967295|g>>>22);g=e+(b^(f|~c))+d[6]+2734768916&4294967295;e=f+(g<<15&4294967295|g>>>17);g=c+(f^(e|~b))+d[13]+1309151649&4294967295;\r\nc=e+(g<<21&4294967295|g>>>11);g=b+(e^(c|~f))+d[4]+4149444226&4294967295;b=c+(g<<6&4294967295|g>>>26);g=f+(c^(b|~e))+d[11]+3174756917&4294967295;f=b+(g<<10&4294967295|g>>>22);g=e+(b^(f|~c))+d[2]+718787259&4294967295;e=f+(g<<15&4294967295|g>>>17);g=c+(f^(e|~b))+d[9]+3951481745&4294967295;a.b[0]=a.b[0]+b&4294967295;a.b[1]=a.b[1]+(e+(g<<21&4294967295|g>>>11))&4294967295;a.b[2]=a.b[2]+e&4294967295;a.b[3]=a.b[3]+f&4294967295}\r\nfunction wh(a,b){var c;void 0===c&&(c=b.length);for(var d=c-a.a,e=a.g,f=a.c,g=0;g<c;){if(0==f)for(;g<=d;)vh(a,b,g),g+=a.a;if(\"string\"==typeof b)for(;g<c;){if(e[f++]=b.charCodeAt(g++),f==a.a){vh(a,e);f=0;break}}else for(;g<c;)if(e[f++]=b[g++],f==a.a){vh(a,e);f=0;break}}a.c=f;a.f+=c};function xh(a){a=a||{};this.a=void 0!==a.color?a.color:null;this.f=a.lineCap;this.b=void 0!==a.lineDash?a.lineDash:null;this.g=a.lineJoin;this.h=a.miterLimit;this.c=a.width;this.l=void 0}\r\nfunction qh(a){if(void 0===a.l){var b=\"s\"+(a.a?nd(a.a):\"-\")+\",\"+(void 0!==a.f?a.f.toString():\"-\")+\",\"+(a.b?a.b.toString():\"-\")+\",\"+(void 0!==a.g?a.g:\"-\")+\",\"+(void 0!==a.h?a.h.toString():\"-\")+\",\"+(void 0!==a.c?a.c.toString():\"-\"),c=new uh;wh(c,b);var d=Array((56>c.c?c.a:2*c.a)-c.c);d[0]=128;for(b=1;b<d.length-8;++b)d[b]=0;for(var e=8*c.f,b=d.length-8;b<d.length;++b)d[b]=e&255,e/=256;wh(c,d);d=Array(16);for(b=e=0;4>b;++b)for(var f=0;32>f;f+=8)d[e++]=c.b[b]>>>f&255;if(8192>=d.length)c=String.fromCharCode.apply(null,\r\nd);else for(c=\"\",b=0;b<d.length;b+=8192)c+=String.fromCharCode.apply(null,td(d,b,b+8192));a.l=c}return a.l};function yh(a){a=a||{};this.h=null;this.c=zh;void 0!==a.geometry&&Ah(this,a.geometry);this.g=void 0!==a.fill?a.fill:null;this.l=void 0!==a.image?a.image:null;this.f=void 0!==a.stroke?a.stroke:null;this.a=void 0!==a.text?a.text:null;this.b=a.zIndex}yh.prototype.S=function(){return this.h};yh.prototype.Z=function(){return this.l};function Ah(a,b){\"function\"===typeof b?a.c=b:\"string\"===typeof b?a.c=function(a){return a.get(b)}:b?b&&(a.c=function(){return b}):a.c=zh;a.h=b}\r\nfunction Bh(a){if(\"function\"!==typeof a){var b;Array.isArray(a)?b=a:(L(a instanceof yh,41),b=[a]);a=function(){return b}}return a}var Ch=null;function Dh(){if(!Ch){var a=new sh({color:\"rgba(255,255,255,0.4)\"}),b=new xh({color:\"#3399CC\",width:1.25});Ch=[new yh({image:new ph({fill:a,stroke:b,radius:5}),fill:a,stroke:b})]}return Ch}\r\nfunction Eh(){var a={},b=[255,255,255,1],c=[0,153,255,1];a.Polygon=[new yh({fill:new sh({color:[255,255,255,.5]})})];a.MultiPolygon=a.Polygon;a.LineString=[new yh({stroke:new xh({color:b,width:5})}),new yh({stroke:new xh({color:c,width:3})})];a.MultiLineString=a.LineString;a.Circle=a.Polygon.concat(a.LineString);a.Point=[new yh({image:new ph({radius:6,fill:new sh({color:c}),stroke:new xh({color:b,width:1.5})}),zIndex:Infinity})];a.MultiPoint=a.Point;a.GeometryCollection=a.Polygon.concat(a.LineString,\r\na.Point);return a}function zh(a){return a.S()};function Y(a){a=a?a:{};var b=pa({},a);delete b.style;delete b.renderBuffer;delete b.updateWhileAnimating;delete b.updateWhileInteracting;xf.call(this,b);this.a=void 0!==a.renderBuffer?a.renderBuffer:100;this.s=null;this.g=void 0;this.v(a.style);this.i=void 0!==a.updateWhileAnimating?a.updateWhileAnimating:!1;this.j=void 0!==a.updateWhileInteracting?a.updateWhileInteracting:!1}B(Y,xf);Y.prototype.v=function(a){this.s=void 0!==a?a:Dh;this.g=null===a?void 0:Bh(this.s);this.w()};function Fh(){};function Gh(a,b,c,d,e){this.f=a;this.v=b;this.l=c;this.u=d;this.Ga=e;this.g=this.b=this.a=this.ha=this.P=this.N=null;this.aa=this.W=this.K=this.M=this.D=this.B=0;this.ba=!1;this.h=this.ra=0;this.ma=!1;this.Y=0;this.c=\"\";this.Ea=this.na=0;this.va=!1;this.j=this.wa=0;this.ca=this.C=this.i=null;this.s=[];this.Fa=Cf()}B(Gh,Fh);\r\nfunction Hh(a,b,c){if(a.g){b=Xb(b,0,c,2,a.u,a.s);c=a.f;var d=a.Fa,e=c.globalAlpha;1!=a.K&&(c.globalAlpha=e*a.K);var f=a.ra;a.ba&&(f+=a.Ga);var g,h;g=0;for(h=b.length;g<h;g+=2){var k=b[g]-a.B,l=b[g+1]-a.D;a.ma&&(k=Math.round(k),l=Math.round(l));if(0!==f||1!=a.h){var m=k+a.B,p=l+a.D;Lf(d,m,p,a.h,a.h,f,-m,-p);c.setTransform.apply(c,d)}c.drawImage(a.g,a.W,a.aa,a.Y,a.M,k,l,a.Y,a.M)}0===f&&1==a.h||c.setTransform(1,0,0,1,0,0);1!=a.K&&(c.globalAlpha=e)}}\r\nfunction Ih(a,b,c,d){var e=0;if(a.ca&&\"\"!==a.c){a.i&&Jh(a,a.i);a.C&&Kh(a,a.C);var f=a.ca,g=a.f,h=a.ha;h?(h.font!=f.font&&(h.font=g.font=f.font),h.textAlign!=f.textAlign&&(h.textAlign=g.textAlign=f.textAlign),h.textBaseline!=f.textBaseline&&(h.textBaseline=g.textBaseline=f.textBaseline)):(g.font=f.font,g.textAlign=f.textAlign,g.textBaseline=f.textBaseline,a.ha={font:f.font,textAlign:f.textAlign,textBaseline:f.textBaseline});b=Xb(b,e,c,d,a.u,a.s);f=a.f;g=a.wa;for(a.va&&(g+=a.Ga);e<c;e+=d){var h=b[e]+\r\na.na,k=b[e+1]+a.Ea;if(0!==g||1!=a.j){var l=Lf(a.Fa,h,k,a.j,a.j,g,-h,-k);f.setTransform.apply(f,l)}a.C&&f.strokeText(a.c,h,k);a.i&&f.fillText(a.c,h,k)}0===g&&1==a.j||f.setTransform(1,0,0,1,0,0)}}function Lh(a,b,c,d,e,f){var g=a.f;a=Xb(b,c,d,e,a.u,a.s);g.moveTo(a[0],a[1]);b=a.length;f&&(b-=2);for(c=2;c<b;c+=2)g.lineTo(a[c],a[c+1]);f&&g.closePath();return d}function Mh(a,b,c,d,e){var f,g;f=0;for(g=d.length;f<g;++f)c=Lh(a,b,c,d[f],e,!0);return c}n=Gh.prototype;\r\nn.pc=function(a){if(wb(this.l,a.G())){if(this.a||this.b){this.a&&Jh(this,this.a);this.b&&Kh(this,this.b);var b;b=(b=a.o)?Xb(b,0,b.length,a.A,this.u,this.s):null;var c=b[2]-b[0],d=b[3]-b[1],c=Math.sqrt(c*c+d*d),d=this.f;d.beginPath();d.arc(b[0],b[1],c,0,2*Math.PI);this.a&&d.fill();this.b&&d.stroke()}\"\"!==this.c&&Ih(this,a.o.slice(0,a.A),2,2)}};n.cb=function(a){var b=a.o;a=a.A;this.g&&Hh(this,b,b.length);\"\"!==this.c&&Ih(this,b,b.length,a)};\r\nn.bb=function(a){var b=a.o;a=a.A;this.g&&Hh(this,b,b.length);\"\"!==this.c&&Ih(this,b,b.length,a)};n.qc=function(a){if(wb(this.l,a.G())){if(this.b){Kh(this,this.b);var b=this.f,c=a.o;b.beginPath();Lh(this,c,0,c.length,a.A,!1);b.stroke()}\"\"!==this.c&&(a=Nh(a),Ih(this,a,2,2))}};\r\nn.rc=function(a){var b=a.G();if(wb(this.l,b)){if(this.b){Kh(this,this.b);var b=this.f,c=a.o,d=0,e=a.ua,f=a.A;b.beginPath();var g,h;g=0;for(h=e.length;g<h;++g)d=Lh(this,c,d,e[g],f,!1);b.stroke()}\"\"!==this.c&&(a=Oh(a),Ih(this,a,a.length,2))}};n.tc=function(a){if(wb(this.l,a.G())){if(this.b||this.a){this.a&&Jh(this,this.a);this.b&&Kh(this,this.b);var b=this.f;b.beginPath();Mh(this,sc(a),0,a.ja,a.A);this.a&&b.fill();this.b&&b.stroke()}\"\"!==this.c&&(a=tc(a),Ih(this,a,2,2))}};\r\nn.sc=function(a){if(wb(this.l,a.G())){if(this.b||this.a){this.a&&Jh(this,this.a);this.b&&Kh(this,this.b);var b=this.f,c=Ph(a),d=0,e=a.a,f=a.A,g,h;g=0;for(h=e.length;g<h;++g){var k=e[g];b.beginPath();d=Mh(this,c,d,k,f);this.a&&b.fill();this.b&&b.stroke()}}\"\"!==this.c&&(a=Qh(a),Ih(this,a,a.length,2))}};function Jh(a,b){var c=a.f,d=a.N;d?d.fillStyle!=b.fillStyle&&(d.fillStyle=c.fillStyle=b.fillStyle):(c.fillStyle=b.fillStyle,a.N={fillStyle:b.fillStyle})}\r\nfunction Kh(a,b){var c=a.f,d=a.P;d?(d.lineCap!=b.lineCap&&(d.lineCap=c.lineCap=b.lineCap),pe&&!Ra(d.lineDash,b.lineDash)&&c.setLineDash(d.lineDash=b.lineDash),d.lineJoin!=b.lineJoin&&(d.lineJoin=c.lineJoin=b.lineJoin),d.lineWidth!=b.lineWidth&&(d.lineWidth=c.lineWidth=b.lineWidth),d.miterLimit!=b.miterLimit&&(d.miterLimit=c.miterLimit=b.miterLimit),d.strokeStyle!=b.strokeStyle&&(d.strokeStyle=c.strokeStyle=b.strokeStyle)):(c.lineCap=b.lineCap,pe&&c.setLineDash(b.lineDash),c.lineJoin=b.lineJoin,c.lineWidth=\r\nb.lineWidth,c.miterLimit=b.miterLimit,c.strokeStyle=b.strokeStyle,a.P={lineCap:b.lineCap,lineDash:b.lineDash,lineJoin:b.lineJoin,lineWidth:b.lineWidth,miterLimit:b.miterLimit,strokeStyle:b.strokeStyle})}\r\nn.La=function(a,b){if(a){var c=a.b;this.a={fillStyle:qd(c?c:kh)}}else this.a=null;if(b){var c=b.a,d=b.f,e=b.b,f=b.g,g=b.c,h=b.h;this.b={lineCap:void 0!==d?d:\"round\",lineDash:e?e:lh,lineJoin:void 0!==f?f:\"round\",lineWidth:this.v*(void 0!==g?g:1),miterLimit:void 0!==h?h:10,strokeStyle:nd(c?c:mh)}}else this.b=null};\r\nn.Ma=function(a){if(a){var b=a.eb(),c=a.Z(1),d=a.pa(),e=a.Ka();this.B=b[0];this.D=b[1];this.M=e[1];this.g=c;this.K=a.C;this.W=d[0];this.aa=d[1];this.ba=a.K;this.ra=a.s;this.h=a.v;this.ma=a.B;this.Y=e[0]}else this.g=null};\r\nn.Ca=function(a){if(a){var b=a.f;b?(b=b.b,this.i={fillStyle:qd(b?b:kh)}):this.i=null;var c=a.i;if(c){var b=c.a,d=c.f,e=c.b,f=c.g,g=c.c,c=c.h;this.C={lineCap:void 0!==d?d:\"round\",lineDash:e?e:lh,lineJoin:void 0!==f?f:\"round\",lineWidth:void 0!==g?g:1,miterLimit:void 0!==c?c:10,strokeStyle:nd(b?b:mh)}}else this.C=null;var b=a.b,d=a.a,e=a.c,f=a.g,g=a.h,c=a.l,h=a.j,k=a.C;a=a.K;this.ca={font:void 0!==b?b:\"10px sans-serif\",textAlign:void 0!==k?k:\"center\",textBaseline:void 0!==a?a:\"middle\"};this.c=void 0!==\r\nh?h:\"\";this.na=void 0!==d?this.v*d:0;this.Ea=void 0!==e?this.v*e:0;this.va=void 0!==f?f:!1;this.wa=void 0!==g?g:0;this.j=this.v*(void 0!==c?c:1)}else this.c=\"\"};function Rh(a){Ia.call(this);this.a=a}B(Rh,Ia);Rh.prototype.fa=I;Rh.prototype.Ec=zb;Rh.prototype.l=function(a,b,c){return function(d,e){return Sh(a,b,d,e,function(a){c[d]||(c[d]={});c[d][a.V.toString()]=a})}};function Th(a){var b=a.a;b.gb()&&\"ready\"==b.Sb()&&a.w()}function Uh(a,b){b.Mc()&&a.postRenderFunctions.push(function(a,b,e){b=J(a).toString();a.Oa(e.viewState.projection,e.usedTiles[b])}.bind(null,b))}function Vh(a,b){if(b){var c,d,e;d=0;for(e=b.length;d<e;++d)c=b[d],a[J(c).toString()]=c}}\r\nfunction Wh(a,b){var c=b.D;void 0!==c&&(\"string\"===typeof c?a.logos[c]=\"\":c&&(L(\"string\"==typeof c.href,44),L(\"string\"==typeof c.src,45),a.logos[c.src]=c.href))}function Xh(a,b,c,d){b=J(b).toString();c=c.toString();b in a?c in a[b]?(a=a[b][c],d.H<a.H&&(a.H=d.H),d.I>a.I&&(a.I=d.I),d.J<a.J&&(a.J=d.J),d.L>a.L&&(a.L=d.L)):a[b][c]=d:(a[b]={},a[b][c]=d)}function Yh(a,b,c){return[b*(Math.round(a[0]/b)+c[0]%2/2),b*(Math.round(a[1]/b)+c[1]%2/2)]}\r\nfunction Zh(a,b,c,d,e,f,g,h,k,l){var m=J(b).toString();m in a.wantedTiles||(a.wantedTiles[m]={});var p=a.wantedTiles[m];a=a.tileQueue;var q=c.minZoom,u,w,r,x,D,t;for(t=g;t>=q;--t)for(w=Rc(c,f,t,w),r=c.O(t),x=w.H;x<=w.I;++x)for(D=w.J;D<=w.L;++D)g-t<=h?(u=$h(b,t,x,D,d,e),0==u.T()&&(p[u.getKey()]=!0,u.getKey()in a.a||a.g([u,m,Vc(c,u.V),r])),void 0!==k&&k.call(l,u)):b.Vc(t,x,D,e)};function ai(a){Rh.call(this,a);this.M=Cf()}B(ai,Rh);function bi(a,b,c){var d=b.pixelRatio,e=b.size[0]*d,f=b.size[1]*d,g=b.viewState.rotation,h=xb(c),k=[c[2],c[3]],l=[c[2],c[1]];c=sb(c);Hf(b.coordinateToPixelTransform,h);Hf(b.coordinateToPixelTransform,k);Hf(b.coordinateToPixelTransform,l);Hf(b.coordinateToPixelTransform,c);a.save();nh(a,-g,e/2,f/2);a.beginPath();a.moveTo(h[0]*d,h[1]*d);a.lineTo(k[0]*d,k[1]*d);a.lineTo(l[0]*d,l[1]*d);a.lineTo(c[0]*d,c[1]*d);a.clip();nh(a,g,e/2,f/2)}\r\nai.prototype.g=function(a,b,c){ci(this,\"precompose\",c,a,void 0);var d=this.Z();if(d){var e=b.extent,f=void 0!==e;f&&bi(c,a,e);var e=this.N,g=c.globalAlpha;c.globalAlpha=b.opacity;c.drawImage(d,0,0,+d.width,+d.height,Math.round(e[4]),Math.round(e[5]),Math.round(d.width*e[0]),Math.round(d.height*e[3]));c.globalAlpha=g;f&&c.restore()}ci(this,\"postcompose\",c,a,void 0)};\r\nfunction ci(a,b,c,d,e){var f=a.a;if(Ha(f,b)){var g=d.size[0]*d.pixelRatio,h=d.size[1]*d.pixelRatio,k=d.viewState.rotation;nh(c,-k,g/2,h/2);a=void 0!==e?e:di(a,d,0);U(f,new uf(b,new Gh(c,d.pixelRatio,d.extent,a,d.viewState.rotation),d,c,null));nh(c,k,g/2,h/2)}}function di(a,b,c){var d=b.viewState,e=b.pixelRatio,f=e/d.resolution;return Lf(a.M,e*b.size[0]/2,e*b.size[1]/2,f,-f,-d.rotation,-d.center[0]+c,-d.center[1])};function ei(){};var fi=[\"Polygon\",\"LineString\",\"Image\",\"Text\"];function gi(a,b,c,d){this.ra=a;this.P=b;this.overlaps=d;this.g=null;this.h=0;this.resolution=c;this.ca=this.Y=null;this.a=[];this.coordinates=[];this.W=Cf();this.b=[];this.ha=[];this.aa=Cf();this.ba=Cf()}B(gi,Fh);\r\nfunction hi(a,b,c,d,e,f){var g=a.coordinates.length,h=a.Nb(),k=[b[c],b[c+1]],l=[NaN,NaN],m=!0,p,q,u;for(p=c+e;p<d;p+=e){l[0]=b[p];l[1]=b[p+1];u=h[1];var w=h[2],r=h[3],x=l[0],D=l[1],t=0;x<h[0]?t|=16:x>w&&(t|=4);D<u?t|=8:D>r&&(t|=2);0===t&&(t=1);u=t;u!==q?(m&&(a.coordinates[g++]=k[0],a.coordinates[g++]=k[1]),a.coordinates[g++]=l[0],a.coordinates[g++]=l[1],m=!1):1===u?(a.coordinates[g++]=l[0],a.coordinates[g++]=l[1],m=!1):m=!0;k[0]=l[0];k[1]=l[1];q=u}p===c+e&&(a.coordinates[g++]=k[0],a.coordinates[g++]=\r\nk[1]);f&&(a.coordinates[g++]=b[c],a.coordinates[g++]=b[c+1]);return g}function ii(a,b){a.Y=[0,b,0];a.a.push(a.Y);a.ca=[0,b,0];a.b.push(a.ca)}\r\nfunction ji(a,b,c,d,e,f,g,h,k){var l;Ra(d,a.W)?l=a.ha:(l=Xb(a.coordinates,0,a.coordinates.length,2,d,a.ha),Gf(a.W,d));d=!sa(f);var m=0,p=g.length,q,u,w=a.aa,r=a.ba,x,D,t,z,C=0,E=0;for(a=a.a!=g||a.overlaps?0:200;m<p;){var v=g[m],H,G,A,F;switch(v[0]){case 0:q=v[1];d&&f[J(q).toString()]||!q.S()?m=v[2]:void 0===k||wb(k,q.S().G())?++m:m=v[2]+1;break;case 1:C>a&&(b.fill(),C=0);E>a&&(b.stroke(),E=0);C||E||b.beginPath();++m;break;case 2:q=v[1];u=l[q];v=l[q+1];t=l[q+2]-u;q=l[q+3]-v;q=Math.sqrt(t*t+q*q);b.moveTo(u+\r\nq,v);b.arc(u,v,q,0,2*Math.PI,!0);++m;break;case 3:b.closePath();++m;break;case 4:q=v[1];u=v[2];H=v[3];G=v[4]*c;A=v[5]*c;var Q=v[6],N=v[7],O=v[8],S=v[9];F=v[10];t=v[11];z=v[12];var X=v[13],P=v[14];for(F&&(t+=e);q<u;q+=2){v=l[q]-G;F=l[q+1]-A;X&&(v=Math.round(v),F=Math.round(F));if(1!=z||0!==t){var Ba=v+G,Nb=F+A;Lf(w,Ba,Nb,z,z,t,-Ba,-Nb);b.transform.apply(b,w)}Ba=b.globalAlpha;1!=N&&(b.globalAlpha=Ba*N);var Nb=P+O>H.width?H.width-O:P,Ca=Q+S>H.height?H.height-S:Q;b.drawImage(H,O,S,Nb,Ca,v,F,Nb*c,Ca*c);\r\n1!=N&&(b.globalAlpha=Ba);if(1!=z||0!==t)Mf(Gf(r,w)),b.transform.apply(b,r)}++m;break;case 5:q=v[1];u=v[2];A=v[3];Q=v[4]*c;N=v[5]*c;t=v[6];z=v[7]*c;H=v[8];G=v[9];for((F=v[10])&&(t+=e);q<u;q+=2){v=l[q]+Q;F=l[q+1]+N;if(1!=z||0!==t)Lf(w,v,F,z,z,t,-v,-F),b.transform.apply(b,w);O=A.split(\"\\n\");S=O.length;1<S?(X=Math.round(1.5*b.measureText(\"M\").width),F-=(S-1)/2*X):X=0;for(P=0;P<S;P++)Ba=O[P],G&&b.strokeText(Ba,v,F),H&&b.fillText(Ba,v,F),F+=X;if(1!=z||0!==t)Mf(Gf(r,w)),b.transform.apply(b,r)}++m;break;\r\ncase 6:if(void 0!==h&&(q=v[1],q=h(q)))return q;++m;break;case 7:a?C++:b.fill();++m;break;case 8:q=v[1];u=v[2];v=l[q];F=l[q+1];t=v+.5|0;z=F+.5|0;if(t!==x||z!==D)b.moveTo(v,F),x=t,D=z;for(q+=2;q<u;q+=2)if(v=l[q],F=l[q+1],t=v+.5|0,z=F+.5|0,q==u-2||t!==x||z!==D)b.lineTo(v,F),x=t,D=z;++m;break;case 9:C&&(b.fill(),C=0);b.fillStyle=v[1];++m;break;case 10:x=void 0!==v[7]?v[7]:!0;D=v[2];E&&(b.stroke(),E=0);b.strokeStyle=v[1];b.lineWidth=x?D*c:D;b.lineCap=v[3];b.lineJoin=v[4];b.miterLimit=v[5];pe&&b.setLineDash(v[6]);\r\nD=x=NaN;++m;break;case 11:b.font=v[1];b.textAlign=v[2];b.textBaseline=v[3];++m;break;case 12:a?E++:b.stroke();++m;break;default:++m}}C&&b.fill();E&&b.stroke()}gi.prototype.f=function(a,b,c,d,e){ji(this,a,b,c,d,e,this.a,void 0,void 0)};function ki(a){var b=a.b;b.reverse();var c,d=b.length,e,f,g=-1;for(c=0;c<d;++c)if(e=b[c],f=e[0],6==f)g=c;else if(0==f){e[2]=c;e=a.b;for(f=c;g<f;){var h=e[g];e[g]=e[f];e[f]=h;++g;--f}g=-1}}\r\nfunction li(a,b){a.Y[2]=a.a.length;a.Y=null;a.ca[2]=a.b.length;a.ca=null;var c=[6,b];a.a.push(c);a.b.push(c)}gi.prototype.tb=I;gi.prototype.Nb=function(){return this.P};function mi(a,b,c,d){gi.call(this,a,b,c,d);this.j=this.N=null;this.M=this.D=this.B=this.u=this.v=this.s=this.K=this.C=this.i=this.l=this.c=void 0}B(mi,gi);\r\nmi.prototype.cb=function(a,b){if(this.j){ii(this,b);var c=a.o,d=this.coordinates.length,c=hi(this,c,0,c.length,a.A,!1);this.a.push([4,d,c,this.j,this.c,this.l,this.i,this.C,this.K,this.s,this.v,this.u,this.B,this.D,this.M]);this.b.push([4,d,c,this.N,this.c,this.l,this.i,this.C,this.K,this.s,this.v,this.u,this.B,this.D,this.M]);li(this,b)}};\r\nmi.prototype.bb=function(a,b){if(this.j){ii(this,b);var c=a.o,d=this.coordinates.length,c=hi(this,c,0,c.length,a.A,!1);this.a.push([4,d,c,this.j,this.c,this.l,this.i,this.C,this.K,this.s,this.v,this.u,this.B,this.D,this.M]);this.b.push([4,d,c,this.N,this.c,this.l,this.i,this.C,this.K,this.s,this.v,this.u,this.B,this.D,this.M]);li(this,b)}};mi.prototype.tb=function(){ki(this);this.l=this.c=void 0;this.j=this.N=null;this.M=this.D=this.u=this.v=this.s=this.K=this.C=this.B=this.i=void 0};\r\nmi.prototype.Ma=function(a){var b=a.eb(),c=a.Ka(),d=a.ub(1),e=a.Z(1),f=a.pa();this.c=b[0];this.l=b[1];this.N=d;this.j=e;this.i=c[1];this.C=a.C;this.K=f[0];this.s=f[1];this.v=a.K;this.u=a.s;this.B=a.v;this.D=a.B;this.M=c[0]};function ni(a,b,c,d){gi.call(this,a,b,c,d);this.c={ab:void 0,Wa:void 0,Xa:null,Ya:void 0,Za:void 0,$a:void 0,Ub:0,strokeStyle:void 0,lineCap:void 0,lineDash:null,lineJoin:void 0,lineWidth:void 0,miterLimit:void 0}}B(ni,gi);\r\nfunction oi(a,b,c,d,e){var f=a.coordinates.length;b=hi(a,b,c,d,e,!1);f=[8,f,b];a.a.push(f);a.b.push(f);return d}n=ni.prototype;n.Nb=function(){this.g||(this.g=gb(this.P),0<this.h&&fb(this.g,this.resolution*(this.h+1)/2,this.g));return this.g};\r\nfunction pi(a){var b=a.c,c=b.strokeStyle,d=b.lineCap,e=b.lineDash,f=b.lineJoin,g=b.lineWidth,h=b.miterLimit;b.ab==c&&b.Wa==d&&Ra(b.Xa,e)&&b.Ya==f&&b.Za==g&&b.$a==h||(b.Ub!=a.coordinates.length&&(a.a.push([12]),b.Ub=a.coordinates.length),a.a.push([10,c,g,d,f,h,e],[1]),b.ab=c,b.Wa=d,b.Xa=e,b.Ya=f,b.Za=g,b.$a=h)}\r\nn.qc=function(a,b){var c=this.c,d=c.lineWidth;void 0!==c.strokeStyle&&void 0!==d&&(pi(this),ii(this,b),this.b.push([10,c.strokeStyle,c.lineWidth,c.lineCap,c.lineJoin,c.miterLimit,c.lineDash],[1]),c=a.o,oi(this,c,0,c.length,a.A),this.b.push([12]),li(this,b))};\r\nn.rc=function(a,b){var c=this.c,d=c.lineWidth;if(void 0!==c.strokeStyle&&void 0!==d){pi(this);ii(this,b);this.b.push([10,c.strokeStyle,c.lineWidth,c.lineCap,c.lineJoin,c.miterLimit,c.lineDash],[1]);var c=a.ua,d=a.o,e=a.A,f=0,g,h;g=0;for(h=c.length;g<h;++g)f=oi(this,d,f,c[g],e);this.b.push([12]);li(this,b)}};n.tb=function(){this.c.Ub!=this.coordinates.length&&this.a.push([12]);ki(this);this.c=null};\r\nn.La=function(a,b){var c=b.a;this.c.strokeStyle=nd(c?c:mh);c=b.f;this.c.lineCap=void 0!==c?c:\"round\";c=b.b;this.c.lineDash=c?c:lh;c=b.g;this.c.lineJoin=void 0!==c?c:\"round\";c=b.c;this.c.lineWidth=void 0!==c?c:1;c=b.h;this.c.miterLimit=void 0!==c?c:10;this.c.lineWidth>this.h&&(this.h=this.c.lineWidth,this.g=null)};\r\nfunction qi(a,b,c,d){gi.call(this,a,b,c,d);this.c={oc:void 0,ab:void 0,Wa:void 0,Xa:null,Ya:void 0,Za:void 0,$a:void 0,fillStyle:void 0,strokeStyle:void 0,lineCap:void 0,lineDash:null,lineJoin:void 0,lineWidth:void 0,miterLimit:void 0}}B(qi,gi);\r\nfunction ri(a,b,c,d,e){var f=a.c,g=void 0!==f.fillStyle,f=void 0!=f.strokeStyle,h=d.length;if(!g&&!f)return d[h-1];var k=[1];a.a.push(k);a.b.push(k);for(k=0;k<h;++k){var l=d[k],m=a.coordinates.length;c=hi(a,b,c,l,e,!0);c=[8,m,c];a.a.push(c);a.b.push(c);f&&(c=[3],a.a.push(c),a.b.push(c));c=l}b=[7];a.b.push(b);g&&a.a.push(b);f&&(g=[12],a.a.push(g),a.b.push(g));return c}n=qi.prototype;\r\nn.pc=function(a,b){var c=this.c,d=c.strokeStyle;if(void 0!==c.fillStyle||void 0!==d){si(this);ii(this,b);this.b.push([9,nd(kh)]);void 0!==c.strokeStyle&&this.b.push([10,c.strokeStyle,c.lineWidth,c.lineCap,c.lineJoin,c.miterLimit,c.lineDash]);var e=a.o,d=this.coordinates.length;hi(this,e,0,e.length,a.A,!1);e=[1];d=[2,d];this.a.push(e,d);this.b.push(e,d);d=[7];this.b.push(d);void 0!==c.fillStyle&&this.a.push(d);void 0!==c.strokeStyle&&(c=[12],this.a.push(c),this.b.push(c));li(this,b)}};\r\nn.tc=function(a,b){var c=this.c,d=c.strokeStyle;if(void 0!==c.fillStyle||void 0!==d)si(this),ii(this,b),this.b.push([9,nd(kh)]),void 0!==c.strokeStyle&&this.b.push([10,c.strokeStyle,c.lineWidth,c.lineCap,c.lineJoin,c.miterLimit,c.lineDash]),c=a.ja,d=sc(a),ri(this,d,0,c,a.A),li(this,b)};\r\nn.sc=function(a,b){var c=this.c,d=c.strokeStyle;if(void 0!==c.fillStyle||void 0!==d){si(this);ii(this,b);this.b.push([9,nd(kh)]);void 0!==c.strokeStyle&&this.b.push([10,c.strokeStyle,c.lineWidth,c.lineCap,c.lineJoin,c.miterLimit,c.lineDash]);var c=a.a,d=Ph(a),e=a.A,f=0,g,h;g=0;for(h=c.length;g<h;++g)f=ri(this,d,f,c[g],e);li(this,b)}};n.tb=function(){ki(this);this.c=null;var a=this.ra;if(0!==a){var b=this.coordinates,c,d;c=0;for(d=b.length;c<d;++c)b[c]=a*Math.round(b[c]/a)}};\r\nn.Nb=function(){this.g||(this.g=gb(this.P),0<this.h&&fb(this.g,this.resolution*(this.h+1)/2,this.g));return this.g};\r\nn.La=function(a,b){var c=this.c;if(a){var d=a.b;c.fillStyle=qd(d?d:kh)}else c.fillStyle=void 0;b?(d=b.a,c.strokeStyle=nd(d?d:mh),d=b.f,c.lineCap=void 0!==d?d:\"round\",d=b.b,c.lineDash=d?d.slice():lh,d=b.g,c.lineJoin=void 0!==d?d:\"round\",d=b.c,c.lineWidth=void 0!==d?d:1,d=b.h,c.miterLimit=void 0!==d?d:10,c.lineWidth>this.h&&(this.h=c.lineWidth,this.g=null)):(c.strokeStyle=void 0,c.lineCap=void 0,c.lineDash=null,c.lineJoin=void 0,c.lineWidth=void 0,c.miterLimit=void 0)};\r\nfunction si(a){var b=a.c,c=b.fillStyle,d=b.strokeStyle,e=b.lineCap,f=b.lineDash,g=b.lineJoin,h=b.lineWidth,k=b.miterLimit;void 0!==c&&b.oc!=c&&(a.a.push([9,c]),b.oc=b.fillStyle);void 0===d||b.ab==d&&b.Wa==e&&b.Xa==f&&b.Ya==g&&b.Za==h&&b.$a==k||(a.a.push([10,d,h,e,g,k,f]),b.ab=d,b.Wa=e,b.Xa=f,b.Ya=g,b.Za=h,b.$a=k)}function ti(a,b,c,d){gi.call(this,a,b,c,d);this.M=this.D=this.B=null;this.j=\"\";this.K=this.C=0;this.s=void 0;this.u=this.v=0;this.i=this.l=this.c=null}B(ti,gi);\r\nfunction ui(a,b,c,d,e){if(\"\"!==a.j&&a.i&&(a.c||a.l)){if(a.c){var f=a.c,g=a.B;if(!g||g.fillStyle!=f.fillStyle){var h=[9,f.fillStyle];a.a.push(h);a.b.push(h);g?g.fillStyle=f.fillStyle:a.B={fillStyle:f.fillStyle}}}a.l&&(f=a.l,g=a.D,g&&g.lineCap==f.lineCap&&g.lineDash==f.lineDash&&g.lineJoin==f.lineJoin&&g.lineWidth==f.lineWidth&&g.miterLimit==f.miterLimit&&g.strokeStyle==f.strokeStyle||(h=[10,f.strokeStyle,f.lineWidth,f.lineCap,f.lineJoin,f.miterLimit,f.lineDash,!1],a.a.push(h),a.b.push(h),g?(g.lineCap=\r\nf.lineCap,g.lineDash=f.lineDash,g.lineJoin=f.lineJoin,g.lineWidth=f.lineWidth,g.miterLimit=f.miterLimit,g.strokeStyle=f.strokeStyle):a.D={lineCap:f.lineCap,lineDash:f.lineDash,lineJoin:f.lineJoin,lineWidth:f.lineWidth,miterLimit:f.miterLimit,strokeStyle:f.strokeStyle}));f=a.i;g=a.M;g&&g.font==f.font&&g.textAlign==f.textAlign&&g.textBaseline==f.textBaseline||(h=[11,f.font,f.textAlign,f.textBaseline],a.a.push(h),a.b.push(h),g?(g.font=f.font,g.textAlign=f.textAlign,g.textBaseline=f.textBaseline):a.M=\r\n{font:f.font,textAlign:f.textAlign,textBaseline:f.textBaseline});ii(a,e);f=a.coordinates.length;b=hi(a,b,0,c,d,!1);b=[5,f,b,a.j,a.C,a.K,a.v,a.u,!!a.c,!!a.l,a.s];a.a.push(b);a.b.push(b);li(a,e)}}\r\nti.prototype.Ca=function(a){if(a){var b=a.f;b?(b=b.b,b=qd(b?b:kh),this.c?this.c.fillStyle=b:this.c={fillStyle:b}):this.c=null;var c=a.i;if(c){var b=c.a,d=c.f,e=c.b,f=c.g,g=c.c,c=c.h,d=void 0!==d?d:\"round\",e=e?e.slice():lh,f=void 0!==f?f:\"round\",g=void 0!==g?g:1,c=void 0!==c?c:10,b=nd(b?b:mh);if(this.l){var h=this.l;h.lineCap=d;h.lineDash=e;h.lineJoin=f;h.lineWidth=g;h.miterLimit=c;h.strokeStyle=b}else this.l={lineCap:d,lineDash:e,lineJoin:f,lineWidth:g,miterLimit:c,strokeStyle:b}}else this.l=null;\r\nvar k=a.b,b=a.a,d=a.c,e=a.g,g=a.h,c=a.l,f=a.j,h=a.C,l=a.K;a=void 0!==k?k:\"10px sans-serif\";h=void 0!==h?h:\"center\";l=void 0!==l?l:\"middle\";this.i?(k=this.i,k.font=a,k.textAlign=h,k.textBaseline=l):this.i={font:a,textAlign:h,textBaseline:l};this.j=void 0!==f?f:\"\";this.C=void 0!==b?b:0;this.K=void 0!==d?d:0;this.s=void 0!==e?e:!1;this.v=void 0!==g?g:0;this.u=void 0!==c?c:1}else this.j=\"\"};function vi(a,b,c,d,e){this.K=a;this.g=b;this.j=d;this.C=c;this.h=e;this.a={};this.l=Md(1,1);this.i=Cf()}B(vi,ei);\r\nfunction wi(a){for(var b in a.a){var c=a.a[b],d;for(d in c)c[d].tb()}}vi.prototype.fa=function(a,b,c,d,e){var f=Lf(this.i,.5,.5,1/b,-1/b,-c,-a[0],-a[1]),g=this.l;g.clearRect(0,0,1,1);var h;void 0!==this.h&&(h=db(),eb(h,a),fb(h,b*this.h,h));return xi(this,g,f,c,d,function(a){if(0<g.getImageData(0,0,1,1).data[3]){if(a=e(a))return a;g.clearRect(0,0,1,1)}},h)};\r\nvi.prototype.b=function(a,b){var c=void 0!==a?a.toString():\"0\",d=this.a[c];void 0===d&&(d={},this.a[c]=d);c=d[b];void 0===c&&(c=new yi[b](this.K,this.g,this.C,this.j),d[b]=c);return c};vi.prototype.c=function(){return sa(this.a)};\r\nvi.prototype.f=function(a,b,c,d,e,f){var g=Object.keys(this.a).map(Number);g.sort(Ma);var h=this.g,k=h[0],l=h[1],m=h[2],h=h[3],k=[k,l,k,h,m,h,m,l];Xb(k,0,8,2,c,k);a.save();a.beginPath();a.moveTo(k[0],k[1]);a.lineTo(k[2],k[3]);a.lineTo(k[4],k[5]);a.lineTo(k[6],k[7]);a.clip();f=f?f:fi;for(var p,q,k=0,l=g.length;k<l;++k)for(p=this.a[g[k].toString()],m=0,h=f.length;m<h;++m)q=p[f[m]],void 0!==q&&q.f(a,b,c,d,e);a.restore()};\r\nfunction xi(a,b,c,d,e,f,g){var h=Object.keys(a.a).map(Number);h.sort(function(a,b){return b-a});var k,l,m,p,q;k=0;for(l=h.length;k<l;++k)for(p=a.a[h[k].toString()],m=fi.length-1;0<=m;--m)if(q=p[fi[m]],void 0!==q&&(q=ji(q,b,1,c,d,e,q.b,f,g)))return q}var yi={Image:mi,LineString:ni,Polygon:qi,Text:ti};function zi(a,b){return J(a)-J(b)}function Ai(a,b){var c=.5*a/b;return c*c}function Bi(a,b,c,d,e,f){var g=!1,h,k;if(h=c.Z())k=h.ib(),2==k||3==k?h.bc(e,f):(0==k&&h.load(),h.Vb(e,f),g=!0);if(e=(0,c.c)(b))d=e.Rb(d),(0,Ci[d.$()])(a,d,c,b);return g}\r\nvar Ci={Point:function(a,b,c,d){var e=c.Z();if(e){if(2!=e.ib())return;var f=a.b(c.b,\"Image\");f.Ma(e);f.cb(b,d)}if(e=c.a)a=a.b(c.b,\"Text\"),a.Ca(e),ui(a,b.o,2,2,d)},LineString:function(a,b,c,d){var e=c.f;if(e){var f=a.b(c.b,\"LineString\");f.La(null,e);f.qc(b,d)}if(e=c.a)a=a.b(c.b,\"Text\"),a.Ca(e),ui(a,Nh(b),2,2,d)},Polygon:function(a,b,c,d){var e=c.g,f=c.f;if(e||f){var g=a.b(c.b,\"Polygon\");g.La(e,f);g.tc(b,d)}if(e=c.a)a=a.b(c.b,\"Text\"),a.Ca(e),ui(a,tc(b),2,2,d)},MultiPoint:function(a,b,c,d){var e=c.Z();\r\nif(e){if(2!=e.ib())return;var f=a.b(c.b,\"Image\");f.Ma(e);f.bb(b,d)}if(e=c.a)a=a.b(c.b,\"Text\"),a.Ca(e),c=b.o,ui(a,c,c.length,b.A,d)},MultiLineString:function(a,b,c,d){var e=c.f;if(e){var f=a.b(c.b,\"LineString\");f.La(null,e);f.rc(b,d)}if(e=c.a)a=a.b(c.b,\"Text\"),a.Ca(e),b=Oh(b),ui(a,b,b.length,2,d)},MultiPolygon:function(a,b,c,d){var e=c.g,f=c.f;if(f||e){var g=a.b(c.b,\"Polygon\");g.La(e,f);g.sc(b,d)}if(e=c.a)a=a.b(c.b,\"Text\"),a.Ca(e),b=Qh(b),ui(a,b,b.length,2,d)},GeometryCollection:function(a,b,c,d){b=\r\nb.a;var e,f;e=0;for(f=b.length;e<f;++e)(0,Ci[b[e].$()])(a,b[e],c,d)},Circle:function(a,b,c,d){var e=c.g,f=c.f;if(e||f){var g=a.b(c.b,\"Polygon\");g.La(e,f);g.pc(b,d)}if(e=c.a)a=a.b(c.b,\"Text\"),a.Ca(e),ui(a,b.o.slice(0,b.A),2,2,d)}};var Di,Ei=K,Fi=-1<Ei.navigator.userAgent.indexOf(\"OPR\"),Gi=-1<Ei.navigator.userAgent.indexOf(\"Edge\");Di=!(!Ei.navigator.userAgent.match(\"CriOS\")&&null!==Ei.chrome&&void 0!==Ei.chrome&&\"Google Inc.\"===Ei.navigator.vendor&&0==Fi&&0==Gi);function Hi(a,b,c,d){a=c-a;b=d-b;var e=Math.sqrt(a*a+b*b);return[Math.round(c+a/e),Math.round(d+b/e)]}\r\nfunction Ii(a,b,c,d,e,f,g,h,k,l,m){var p=Md(Math.round(c*a),Math.round(c*b));if(0===k.length)return p.canvas;p.scale(c,c);var q=db();k.forEach(function(a){mb(q,a.extent)});var u=Md(Math.round(c*qb(q)/d),Math.round(c*rb(q)/d)),w=c/d;k.forEach(function(a){u.drawImage(a.image,l,l,a.image.width-2*l,a.image.height-2*l,(a.extent[0]-q[0])*w,-(a.extent[3]-q[3])*w,qb(a.extent)*w,rb(a.extent)*w)});var r=xb(g);h.f.forEach(function(a){var b=a.source,e=a.target,g=b[1][0],h=b[1][1],k=b[2][0],l=b[2][1];a=(e[0][0]-\r\nr[0])/f;var m=-(e[0][1]-r[1])/f,w=(e[1][0]-r[0])/f,A=-(e[1][1]-r[1])/f,F=(e[2][0]-r[0])/f,Q=-(e[2][1]-r[1])/f,e=b[0][0],b=b[0][1],g=g-e,h=h-b,k=k-e,l=l-b;a:{g=[[g,h,0,0,w-a],[k,l,0,0,F-a],[0,0,g,h,A-m],[0,0,k,l,Q-m]];h=g.length;for(k=0;k<h;k++){for(var l=k,N=Math.abs(g[k][k]),O=k+1;O<h;O++){var S=Math.abs(g[O][k]);S>N&&(N=S,l=O)}if(0===N){g=null;break a}N=g[l];g[l]=g[k];g[k]=N;for(l=k+1;l<h;l++)for(N=-g[l][k]/g[k][k],O=k;O<h+1;O++)g[l][O]=k==O?0:g[l][O]+N*g[k][O]}k=Array(h);for(l=h-1;0<=l;l--)for(k[l]=\r\ng[l][h]/g[l][l],N=l-1;0<=N;N--)g[N][h]-=g[N][l]*k[l];g=k}g&&(p.save(),p.beginPath(),Di?(k=(a+w+F)/3,l=(m+A+Q)/3,h=Hi(k,l,a,m),w=Hi(k,l,w,A),F=Hi(k,l,F,Q),p.moveTo(w[0],w[1]),p.lineTo(h[0],h[1]),p.lineTo(F[0],F[1])):(p.moveTo(w,A),p.lineTo(a,m),p.lineTo(F,Q)),p.clip(),p.transform(g[0],g[2],g[1],g[3],a,m),p.translate(q[0]-e,q[3]-b),p.scale(d/c,-d/c),p.drawImage(u.canvas,0,0),p.restore())});m&&(p.save(),p.strokeStyle=\"black\",p.lineWidth=1,h.f.forEach(function(a){var b=a.target;a=(b[0][0]-r[0])/f;var c=\r\n-(b[0][1]-r[1])/f,d=(b[1][0]-r[0])/f,e=-(b[1][1]-r[1])/f,g=(b[2][0]-r[0])/f,b=-(b[2][1]-r[1])/f;p.beginPath();p.moveTo(d,e);p.lineTo(a,c);p.lineTo(g,b);p.closePath();p.stroke()}),p.restore());return p.canvas};function Ji(a,b,c,d,e){this.c=a;this.g=b;var f={},g=Ub(this.g,this.c);this.a=function(a){var b=a[0]+\"/\"+a[1];f[b]||(f[b]=g(a));return f[b]};this.h=d;this.C=e*e;this.f=[];this.i=!1;this.j=this.c.b&&!!d&&!!this.c.G()&&qb(d)==qb(this.c.G());this.b=this.c.G()?qb(this.c.G()):null;this.l=this.g.G()?qb(this.g.G()):null;a=xb(c);b=[c[2],c[3]];d=[c[2],c[1]];c=sb(c);e=this.a(a);var h=this.a(b),k=this.a(d),l=this.a(c);Ki(this,a,b,d,c,e,h,k,l,10);if(this.i){var m=Infinity;this.f.forEach(function(a){m=Math.min(m,\r\na.source[0][0],a.source[1][0],a.source[2][0])});this.f.forEach(function(a){if(Math.max(a.source[0][0],a.source[1][0],a.source[2][0])-m>this.b/2){var b=[[a.source[0][0],a.source[0][1]],[a.source[1][0],a.source[1][1]],[a.source[2][0],a.source[2][1]]];b[0][0]-m>this.b/2&&(b[0][0]-=this.b);b[1][0]-m>this.b/2&&(b[1][0]-=this.b);b[2][0]-m>this.b/2&&(b[2][0]-=this.b);Math.max(b[0][0],b[1][0],b[2][0])-Math.min(b[0][0],b[1][0],b[2][0])<this.b/2&&(a.source=b)}},this)}f={}}\r\nfunction Ki(a,b,c,d,e,f,g,h,k,l){var m=cb([f,g,h,k]),p=a.b?qb(m)/a.b:null,q=a.b,u=a.c.b&&.5<p&&1>p,w=!1;if(0<l){if(a.g.c&&a.l)var r=cb([b,c,d,e]),w=w|.25<qb(r)/a.l;!u&&a.c.c&&p&&(w|=.25<p)}if(w||!a.h||wb(m,a.h)){if(!(w||isFinite(f[0])&&isFinite(f[1])&&isFinite(g[0])&&isFinite(g[1])&&isFinite(h[0])&&isFinite(h[1])&&isFinite(k[0])&&isFinite(k[1])))if(0<l)w=!0;else return;if(0<l&&(w||(m=a.a([(b[0]+d[0])/2,(b[1]+d[1])/2]),q=u?(la(f[0],q)+la(h[0],q))/2-la(m[0],q):(f[0]+h[0])/2-m[0],m=(f[1]+h[1])/2-m[1],\r\nw=q*q+m*m>a.C),w)){Math.abs(b[0]-d[0])<=Math.abs(b[1]-d[1])?(u=[(c[0]+d[0])/2,(c[1]+d[1])/2],q=a.a(u),m=[(e[0]+b[0])/2,(e[1]+b[1])/2],p=a.a(m),Ki(a,b,c,u,m,f,g,q,p,l-1),Ki(a,m,u,d,e,p,q,h,k,l-1)):(u=[(b[0]+c[0])/2,(b[1]+c[1])/2],q=a.a(u),m=[(d[0]+e[0])/2,(d[1]+e[1])/2],p=a.a(m),Ki(a,b,u,m,e,f,q,p,k,l-1),Ki(a,u,c,d,m,q,g,h,p,l-1));return}if(u){if(!a.j)return;a.i=!0}a.f.push({source:[f,h,k],target:[b,d,e]});a.f.push({source:[f,g,h],target:[b,c,d]})}}\r\nfunction Li(a){var b=db();a.f.forEach(function(a){a=a.source;eb(b,a[0]);eb(b,a[1]);eb(b,a[2])});return b};function Mi(a){ai.call(this,a);this.f=Md();this.c=null;this.j=db();this.s=[0,0,0];this.h=Cf()}B(Mi,ai);\r\nMi.prototype.g=function(a,b,c){var d=di(this,a,0);ci(this,\"precompose\",c,a,d);var e=a.pixelRatio,f=a.viewState,g=f.center,h=f.projection,k=f.rotation,l=a.size,m=Math.round(e*l[0]/2),l=Math.round(e*l[1]/2),f=e/f.resolution,p=this.a,q=p.da(),u=e*q.nb(h),w=q.sa(h),p=Ha(p,\"render\"),r=c,x=1,D,t,z;if(k||p){r=this.f;D=r.canvas;var x=q.pb(e)/e,C=c.canvas.width*x;t=c.canvas.height*x;z=Math.round(Math.sqrt(C*C+t*t));D.width!=z?D.width=D.height=z:r.clearRect(0,0,z,z);D=(z-C)/2/x;t=(z-t)/2/x;f*=x;m=Math.round(x*\r\n(m+D));l=Math.round(x*(l+t))}C=r.globalAlpha;r.globalAlpha=b.opacity;var E=this.c,v,H=q.Qb(h)&&1==b.opacity;H||(E.reverse(),v=[]);var G=b.extent;if(b=void 0!==G){var A=xb(G),F=[G[2],G[3]],Q=[G[2],G[1]],G=sb(G);Hf(a.coordinateToPixelTransform,A);Hf(a.coordinateToPixelTransform,F);Hf(a.coordinateToPixelTransform,Q);Hf(a.coordinateToPixelTransform,G);var N=D||0,O=t||0;r.save();var S=r.canvas.width/2,X=r.canvas.height/2;nh(r,-k,S,X);r.beginPath();r.moveTo(x*(A[0]*e+N),x*(A[1]*e+O));r.lineTo(x*(F[0]*e+\r\nN),x*(F[1]*e+O));r.lineTo(x*(Q[0]*e+N),x*(Q[1]*e+O));r.lineTo(x*(G[0]*e+N),x*(G[1]*e+O));r.clip();nh(r,k,S,X)}A=0;for(F=E.length;A<F;++A){var Q=E[A],G=Q.V,X=Qc(w,G,this.j),S=G[0],P=sb(Qc(w,Yc(w,g,S,this.s))),G=Math.round(qb(X)*f),N=Math.round(rb(X)*f),O=Math.round((X[0]-P[0])*f/G)*G+m+Math.round((P[0]-g[0])*f),X=Math.round((P[1]-X[3])*f/N)*N+l+Math.round((g[1]-P[1])*f);if(!H){P=[O,X,O+G,X+N];r.save();for(var Ba=0,Nb=v.length;Ba<Nb;++Ba){var Ca=v[Ba];wb(P,Ca)&&(r.beginPath(),r.moveTo(P[0],P[1]),r.lineTo(P[0],\r\nP[3]),r.lineTo(P[2],P[3]),r.lineTo(P[2],P[1]),r.moveTo(Ca[0],Ca[1]),r.lineTo(Ca[2],Ca[1]),r.lineTo(Ca[2],Ca[3]),r.lineTo(Ca[0],Ca[3]),r.closePath(),r.clip())}v.push(P)}S=Ni(q,S,e,h);r.drawImage(Q.Z(),u,u,S[0],S[1],O,X,G,N);H||r.restore()}b&&r.restore();p&&(e=D-m/x+m,h=t-l/x+l,g=Lf(this.h,z/2-e,z/2-h,f,-f,-k,-g[0]+e/f,-g[1]-h/f),ci(this,\"render\",r,a,g));(k||p)&&c.drawImage(r.canvas,-Math.round(D),-Math.round(t),z/x,z/x);r.globalAlpha=C;ci(this,\"postcompose\",c,a,d)};\r\nMi.prototype.i=function(a,b){function c(a){a=a.T();return 2==a||4==a||3==a&&!u}var d=a.pixelRatio,e=a.viewState,f=e.projection,g=this.a,h=g.da(),k=h.sa(f),l=Xc(k,e.resolution,0),m=k.O(l),p=e.center;m==e.resolution?(p=Yh(p,m,a.size),e=ub(p,m,e.rotation,a.size)):e=a.extent;void 0!==b.extent&&(e=vb(e,b.extent));if(pb(e))return!1;m=Tc(k,e,m);p={};p[l]={};var q=this.l(h,f,p),u=jh(g),w=db(),r=new Gc(0,0,0,0),x,D,t,z;for(t=m.H;t<=m.I;++t)for(z=m.J;z<=m.L;++z)x=$h(h,l,t,z,d,f),!c(x)&&x.b&&(x=x.b),c(x)?p[l][x.V.toString()]=\r\nx:(D=Pc(k,x.V,q,r,w),D||(x=Sc(k,x.V,r,w))&&q(l+1,x));q=Object.keys(p).map(Number);q.sort(Ma);var w=[],C,r=0;for(t=q.length;r<t;++r)for(C in x=q[r],z=p[x],z)x=z[C],2==x.T()&&w.push(x);this.c=w;Xh(a.usedTiles,h,l,m);Zh(a,h,k,d,f,e,l,g.get(\"preload\"));Uh(a,h);Wh(a,h);return!0};function Oi(a){ai.call(this,a);this.c=!1;this.B=-1;this.u=NaN;this.j=db();this.f=this.s=null;this.h=Md()}B(Oi,ai);\r\nOi.prototype.g=function(a,b,c){var d=a.extent,e=a.pixelRatio,f=b.hb?a.skippedFeatureUids:{},g=a.viewState,h=g.projection,g=g.rotation,k=h.G(),l=this.a.da(),m=di(this,a,0);ci(this,\"precompose\",c,a,m);var p=b.extent,q=void 0!==p;q&&bi(c,a,p);if((p=this.f)&&!p.c()){var u=0,w=0,r;if(Ha(this.a,\"render\")){r=c.canvas.width;var x=c.canvas.height;if(g){var D=Math.round(Math.sqrt(r*r+x*x)),u=(D-r)/2,w=(D-x)/2;r=x=D}this.h.canvas.width=r;this.h.canvas.height=x;r=this.h}else r=c;x=r.globalAlpha;r.globalAlpha=\r\nb.opacity;r!=c&&r.translate(u,w);b=a.size[0]*e;D=a.size[1]*e;nh(r,-g,b/2,D/2);p.f(r,e,m,g,f);if(l.i&&h.b&&!hb(k,d)){for(var h=d[0],l=qb(k),t=0;h<k[0];)--t,m=l*t,m=di(this,a,m),p.f(r,e,m,g,f),h+=l;t=0;for(h=d[2];h>k[2];)++t,m=l*t,m=di(this,a,m),p.f(r,e,m,g,f),h-=l;m=di(this,a,0)}nh(r,g,b/2,D/2);r!=c&&(ci(this,\"render\",r,a,m),c.drawImage(r.canvas,-u,-w),r.translate(-u,-w));r.globalAlpha=x}q&&c.restore();ci(this,\"postcompose\",c,a,m)};\r\nOi.prototype.fa=function(a,b,c,d){if(this.f){var e=this.a,f={};return this.f.fa(a,b.viewState.resolution,b.viewState.rotation,{},function(a){var b=J(a).toString();if(!(b in f))return f[b]=!0,c.call(d,a,e)})}};Oi.prototype.D=function(){Th(this)};\r\nOi.prototype.i=function(a){function b(a){var b,d=a.f;d?b=d.call(a,l):(d=c.g)&&(b=d(a,l));if(b){if(b){d=!1;if(Array.isArray(b))for(var e=0,f=b.length;e<f;++e)d=Bi(q,a,b[e],Ai(l,m),this.D,this)||d;else d=Bi(q,a,b,Ai(l,m),this.D,this)||d;a=d}else a=!1;this.c=this.c||a}}var c=this.a,d=c.da();Vh(a.attributions,d.h);Wh(a,d);var e=a.viewHints[0],f=a.viewHints[1],g=c.i,h=c.j;if(!this.c&&!g&&e||!h&&f)return!0;var k=a.extent,h=a.viewState,e=h.projection,l=h.resolution,m=a.pixelRatio,f=c.b,p=c.a,g=c.get(\"renderOrder\");\r\nvoid 0===g&&(g=zi);k=fb(k,p*l);p=h.projection.G();d.i&&h.projection.b&&!hb(p,a.extent)&&(a=Math.max(qb(k)/2,qb(p)),k[0]=p[0]-a,k[2]=p[2]+a);if(!this.c&&this.u==l&&this.B==f&&this.s==g&&hb(this.j,k))return!0;this.f=null;this.c=!1;var q=new vi(.5*l/m,k,l,d.u,c.a);Pi(d,k,l,e);if(g){var u=[];Qi(d,k,function(a){u.push(a)},this);u.sort(g);u.forEach(b,this)}else Qi(d,k,b,this);wi(q);this.u=l;this.B=f;this.s=g;this.j=k;this.f=q;return!0};function Ri(a,b){Nf.call(this,0,b);this.f=Md();this.b=this.f.canvas;this.b.style.width=\"100%\";this.b.style.height=\"100%\";this.b.className=\"ol-unselectable\";a.insertBefore(this.b,a.childNodes[0]||null);this.a=!0;this.h=Cf()}B(Ri,Nf);Ri.prototype.Mb=function(a){return a instanceof W?new Mi(a):a instanceof Y?new Oi(a):null};\r\nfunction Si(a,b,c){var d=a.g,e=a.f;if(Ha(d,b)){var f=c.extent,g=c.pixelRatio,h=c.viewState.rotation,k=c.viewState,l=c.pixelRatio/k.resolution;a=Lf(a.h,a.b.width/2,a.b.height/2,l,-l,-k.rotation,-k.center[0],-k.center[1]);U(d,new uf(b,new Gh(e,g,f,a,h),c,e,null))}}Ri.prototype.$=function(){return\"canvas\"};\r\nRi.prototype.vb=function(a){if(a){var b=this.f,c=a.pixelRatio,d=Math.round(a.size[0]*c),c=Math.round(a.size[1]*c);this.b.width!=d||this.b.height!=c?(this.b.width=d,this.b.height=c):b.clearRect(0,0,d,c);var e=a.viewState.rotation;Of(a);Si(this,\"precompose\",a);var f=a.layerStatesArray;Sa(f);nh(b,e,d/2,c/2);var g=a.viewState.resolution,h,k,l,m;h=0;for(k=f.length;h<k;++h)m=f[h],l=m.layer,l=Qf(this,l),yf(m,g)&&\"ready\"==m.ac&&l.i(a,m)&&l.g(a,m,b);nh(b,-e,d/2,c/2);Si(this,\"postcompose\",a);this.a||(this.b.style.display=\r\n\"\",this.a=!0);Rf(this,a);a.postRenderFunctions.push(Pf)}else this.a&&(this.b.style.display=\"none\",this.a=!1)};function Ti(a,b){Rh.call(this,a);this.target=b}B(Ti,Rh);Ti.prototype.Jb=I;Ti.prototype.Gc=I;function Ui(a){var b=document.createElement(\"DIV\");b.style.position=\"absolute\";Ti.call(this,a,b);this.f=!0;this.h=1;this.g=0;this.c={}}B(Ui,Ti);Ui.prototype.Jb=function(){for(var a=this.target;a.lastChild;)a.removeChild(a.lastChild);this.g=0};\r\nUi.prototype.Hc=function(a,b){if(!b.visible)return this.f&&(this.target.style.display=\"none\",this.f=!1),!0;var c=a.pixelRatio,d=a.viewState,e=d.projection,f=this.a,g=f.da(),h=g.sa(e),k=c*g.nb(e),l=Xc(h,d.resolution),m=h.O(l),p=d.center,q;m==d.resolution?(p=Yh(p,m,a.size),q=ub(p,m,d.rotation,a.size)):q=a.extent;void 0!==b.extent&&(q=vb(q,b.extent));var m=Tc(h,q,m),u={};u[l]={};var w=this.l(g,e,u),r=jh(f),x=db(),D=new Gc(0,0,0,0),t,z,C,E;for(C=m.H;C<=m.I;++C)for(E=m.J;E<=m.L;++E)t=$h(g,l,C,E,c,e),z=\r\nt.T(),z=2==z||4==z||3==z&&!r,!z&&t.b&&(t=t.b),z=t.T(),2==z?u[l][t.V.toString()]=t:4==z||3==z&&!r||(z=Pc(h,t.V,w,D,x),z||(t=Sc(h,t.V,D,x))&&w(l+1,t));var v;if(this.g!=g.b){for(v in this.c)r=this.c[+v],Sd(r.target);this.c={};this.g=g.b}x=Object.keys(u).map(Number);x.sort(Ma);var w={},H;C=0;for(E=x.length;C<E;++C){v=x[C];v in this.c?r=this.c[v]:(r=Yc(h,p,v),r=new Vi(h,r),w[v]=!0,this.c[v]=r);v=u[v];for(H in v){t=r;z=v[H];var G=k,A=z.V,F=A[0],Q=A[1],N=A[2],A=A.toString();if(!(A in t.a)){var F=Lc(Wc(t.g,\r\nF),t.i),O=z.Z(t),S=O.style;S.maxWidth=\"none\";var X,P;0<G?(X=document.createElement(\"DIV\"),P=X.style,P.overflow=\"hidden\",P.width=F[0]+\"px\",P.height=F[1]+\"px\",S.position=\"absolute\",S.left=-G+\"px\",S.top=-G+\"px\",S.width=F[0]+2*G+\"px\",S.height=F[1]+2*G+\"px\",X.appendChild(O)):(S.width=F[0]+\"px\",S.height=F[1]+\"px\",X=O,P=S);P.position=\"absolute\";P.left=(Q-t.c[1])*F[0]+\"px\";P.top=(t.c[2]-N)*F[1]+\"px\";t.b||(t.b=document.createDocumentFragment());t.b.appendChild(X);t.a[A]=z}}r.b&&(r.target.appendChild(r.b),\r\nr.b=null)}k=Object.keys(this.c).map(Number);k.sort(Ma);C=Cf();H=0;for(x=k.length;H<x;++H)if(v=k[H],r=this.c[v],v in u)if(t=r.O(),E=r.pa(),Lf(C,a.size[0]/2,a.size[1]/2,t/d.resolution,t/d.resolution,d.rotation,(E[0]-p[0])/t,(p[1]-E[1])/t),r.setTransform(C),v in w){for(--v;0<=v;--v)if(v in this.c){this.c[v].target.parentNode&&this.c[v].target.parentNode.insertBefore(r.target,this.c[v].target.nextSibling);break}0>v&&this.target.insertBefore(r.target,this.target.childNodes[0]||null)}else{if(!a.viewHints[0]&&\r\n!a.viewHints[1]){z=Rc(r.g,q,r.c[0],D);v=[];t=void 0;for(t in r.a)E=r.a[t],G=E.V,Hc(z,G[1],G[2])||v.push(E);z=0;for(G=v.length;z<G;++z)E=v[z],t=E.V.toString(),Sd(E.Z(r)),delete r.a[t]}}else Sd(r.target),delete this.c[v];b.opacity!=this.h&&(this.h=this.target.style.opacity=b.opacity);b.visible&&!this.f&&(this.target.style.display=\"\",this.f=!0);Xh(a.usedTiles,g,l,m);Zh(a,g,h,c,e,q,l,f.get(\"preload\"));Uh(a,g);Wh(a,g);return!0};\r\nfunction Vi(a,b){this.target=document.createElement(\"DIV\");this.target.style.position=\"absolute\";this.target.style.width=\"100%\";this.target.style.height=\"100%\";this.g=a;this.c=b;this.h=xb(Qc(a,b));this.l=a.O(b[0]);this.a={};this.b=null;this.f=Cf();this.i=[0,0]}Vi.prototype.pa=function(){return this.h};Vi.prototype.O=function(){return this.l};Vi.prototype.setTransform=function(a){Ra(a,this.f)||(Qd(this.target,a),Gf(this.f,a))};function Wi(a){this.g=Md();var b=this.g.canvas;b.style.maxWidth=\"none\";b.style.position=\"absolute\";Ti.call(this,a,b);this.c=!1;this.h=-1;this.s=NaN;this.i=db();this.f=this.j=null;this.B=Cf();this.u=Cf()}B(Wi,Ti);n=Wi.prototype;n.Jb=function(){var a=this.g.canvas;a.width=a.width;this.h=0};\r\nn.Gc=function(a,b){var c=a.viewState,d=c.center,e=c.rotation,f=c.resolution,c=a.pixelRatio,g=a.size[0],h=a.size[1],k=g*c,l=h*c,d=Lf(this.B,c*g/2,c*h/2,c/f,-c/f,-e,-d[0],-d[1]),f=this.g;f.canvas.width=k;f.canvas.height=l;var m=Df(this.u);Jf(m,1/c,1/c);Kf(m,-(k-g)/2*c,-(l-h)/2*c);Qd(f.canvas,m);Xi(this,\"precompose\",a,d);(g=this.f)&&!g.c()&&(f.globalAlpha=b.opacity,g.f(f,c,d,e,b.hb?a.skippedFeatureUids:{}),Xi(this,\"render\",a,d));Xi(this,\"postcompose\",a,d)};\r\nfunction Xi(a,b,c,d){var e=a.g;a=a.a;Ha(a,b)&&U(a,new uf(b,new Gh(e,c.pixelRatio,c.extent,d,c.viewState.rotation),c,e,null))}n.fa=function(a,b,c,d){if(this.f){var e=this.a,f={};return this.f.fa(a,b.viewState.resolution,b.viewState.rotation,{},function(a){var b=J(a).toString();if(!(b in f))return f[b]=!0,c.call(d,a,e)})}};n.Ic=function(){Th(this)};\r\nn.Hc=function(a){function b(a){var b,d=a.f;d?b=d.call(a,k):(d=c.g)&&(b=d(a,k));if(b){if(b){d=!1;if(Array.isArray(b))for(var e=0,f=b.length;e<f;++e)d=Bi(m,a,b[e],Ai(k,l),this.Ic,this)||d;else d=Bi(m,a,b,Ai(k,l),this.Ic,this)||d;a=d}else a=!1;this.c=this.c||a}}var c=this.a,d=c.da();Vh(a.attributions,d.h);Wh(a,d);var e=a.viewHints[0],f=a.viewHints[1],g=c.i,h=c.j;if(!this.c&&!g&&e||!h&&f)return!0;var f=a.extent,g=a.viewState,e=g.projection,k=g.resolution,l=a.pixelRatio;a=c.b;h=c.a;g=c.get(\"renderOrder\");\r\nvoid 0===g&&(g=zi);f=fb(f,h*k);if(!this.c&&this.s==k&&this.h==a&&this.j==g&&hb(this.i,f))return!0;this.f=null;this.c=!1;var m=new vi(.5*k/l,f,k,d.u,c.a);Pi(d,f,k,e);if(g){var p=[];Qi(d,f,function(a){p.push(a)},this);p.sort(g);p.forEach(b,this)}else Qi(d,f,b,this);wi(m);this.s=k;this.h=a;this.j=g;this.i=f;this.f=m;return!0};function Yi(a,b){Nf.call(this,0,b);this.f=Md();var c=this.f.canvas;c.style.position=\"absolute\";c.style.width=\"100%\";c.style.height=\"100%\";c.className=\"ol-unselectable\";a.insertBefore(c,a.childNodes[0]||null);this.h=Cf();this.b=document.createElement(\"DIV\");this.b.className=\"ol-unselectable\";c=this.b.style;c.position=\"absolute\";c.width=\"100%\";c.height=\"100%\";R(this.b,\"touchstart\",Fa);a.insertBefore(this.b,a.childNodes[0]||null);this.a=!0}B(Yi,Nf);Yi.prototype.R=function(){Sd(this.b);Nf.prototype.R.call(this)};\r\nYi.prototype.Mb=function(a){if(a instanceof W)a=new Ui(a);else if(a instanceof Y)a=new Wi(a);else return null;return a};function Zi(a,b,c){var d=a.g;if(Ha(d,b)){var e=c.extent,f=c.pixelRatio,g=c.viewState,h=g.rotation,k=a.f,l=k.canvas;a=Lf(a.h,l.width/2,l.height/2,f/g.resolution,-f/g.resolution,-h,-g.center[0],-g.center[1]);U(d,new uf(b,new Gh(k,f,e,a,h),c,k,null))}}Yi.prototype.$=function(){return\"dom\"};\r\nYi.prototype.vb=function(a){if(a){var b=this.g;if(Ha(b,\"precompose\")||Ha(b,\"postcompose\")){var b=this.f.canvas,c=a.pixelRatio;b.width=a.size[0]*c;b.height=a.size[1]*c}Zi(this,\"precompose\",a);b=a.layerStatesArray;Sa(b);var c=a.viewState.resolution,d,e,f,g;d=0;for(e=b.length;d<e;++d)g=b[d],f=g.layer,f=Qf(this,f),this.b.insertBefore(f.target,this.b.childNodes[d]||null),yf(g,c)&&\"ready\"==g.ac?f.Hc(a,g)&&f.Gc(a,g):f.Jb();var b=a.layerStates,h;for(h in this.c)h in b||(f=this.c[h],Sd(f.target));this.a||\r\n(this.b.style.display=\"\",this.a=!0);Of(a);Rf(this,a);a.postRenderFunctions.push(Pf);Zi(this,\"postcompose\",a)}else this.a&&(this.b.style.display=\"none\",this.a=!1)};function $i(a){this.b=a};function aj(a){this.b=a}B(aj,$i);aj.prototype.$=function(){return 35632};function bj(a){this.b=a}B(bj,$i);bj.prototype.$=function(){return 35633};function cj(){this.b=\"precision mediump float;varying vec2 a;varying float b;uniform float k;uniform sampler2D l;void main(void){vec4 texColor=texture2D(l,a);gl_FragColor.rgb=texColor.rgb;float alpha=texColor.a*b*k;if(alpha==0.0){discard;}gl_FragColor.a=alpha;}\"}B(cj,aj);var dj=new cj;\r\nfunction ej(){this.b=\"varying vec2 a;varying float b;attribute vec2 c;attribute vec2 d;attribute vec2 e;attribute float f;attribute float g;uniform mat4 h;uniform mat4 i;uniform mat4 j;void main(void){mat4 offsetMatrix=i;if(g==1.0){offsetMatrix=i*j;}vec4 offsets=offsetMatrix*vec4(e,0.,0.);gl_Position=h*vec4(c,0.,1.)+offsets;a=d;b=f;}\"}B(ej,bj);var fj=new ej;\r\nfunction gj(a,b){this.i=a.getUniformLocation(b,\"j\");this.j=a.getUniformLocation(b,\"i\");this.h=a.getUniformLocation(b,\"k\");this.l=a.getUniformLocation(b,\"h\");this.b=a.getAttribLocation(b,\"e\");this.a=a.getAttribLocation(b,\"f\");this.f=a.getAttribLocation(b,\"c\");this.c=a.getAttribLocation(b,\"g\");this.g=a.getAttribLocation(b,\"d\")};function hj(a){this.b=void 0!==a?a:[];this.a=ij}var ij=35044;function jj(a,b){this.C=a;this.b=b;this.a={};this.g={};this.f={};this.i=this.j=this.h=this.l=null;(this.c=0<=fa.indexOf(\"OES_element_index_uint\"))&&b.getExtension(\"OES_element_index_uint\");R(this.C,\"webglcontextlost\",this.K,this);R(this.C,\"webglcontextrestored\",this.s,this)}B(jj,Aa);\r\nfunction kj(a,b,c){var d=a.b,e=c.b,f=String(J(c));if(f in a.a)d.bindBuffer(b,a.a[f].buffer);else{var g=d.createBuffer();d.bindBuffer(b,g);var h;34962==b?h=new Float32Array(e):34963==b&&(h=a.c?new Uint32Array(e):new Uint16Array(e));d.bufferData(b,h,c.a);a.a[f]={Qe:c,buffer:g}}}function lj(a,b){var c=a.b,d=String(J(b)),e=a.a[d];c.isContextLost()||c.deleteBuffer(e.buffer);delete a.a[d]}\r\njj.prototype.R=function(){za(this.C);var a=this.b;if(!a.isContextLost()){for(var b in this.a)a.deleteBuffer(this.a[b].buffer);for(b in this.f)a.deleteProgram(this.f[b]);for(b in this.g)a.deleteShader(this.g[b]);a.deleteFramebuffer(this.h);a.deleteRenderbuffer(this.i);a.deleteTexture(this.j)}};\r\nfunction mj(a){if(!a.h){var b=a.b,c=b.createFramebuffer();b.bindFramebuffer(b.FRAMEBUFFER,c);var d=nj(b,1,1),e=b.createRenderbuffer();b.bindRenderbuffer(b.RENDERBUFFER,e);b.renderbufferStorage(b.RENDERBUFFER,b.DEPTH_COMPONENT16,1,1);b.framebufferTexture2D(b.FRAMEBUFFER,b.COLOR_ATTACHMENT0,b.TEXTURE_2D,d,0);b.framebufferRenderbuffer(b.FRAMEBUFFER,b.DEPTH_ATTACHMENT,b.RENDERBUFFER,e);b.bindTexture(b.TEXTURE_2D,null);b.bindRenderbuffer(b.RENDERBUFFER,null);b.bindFramebuffer(b.FRAMEBUFFER,null);a.h=c;\r\na.j=d;a.i=e}return a.h}function oj(a,b){var c=String(J(b));if(c in a.g)return a.g[c];var d=a.b,e=d.createShader(b.$());d.shaderSource(e,b.b);d.compileShader(e);return a.g[c]=e}function pj(a,b,c){var d=J(b)+\"/\"+J(c);if(d in a.f)return a.f[d];var e=a.b,f=e.createProgram();e.attachShader(f,oj(a,b));e.attachShader(f,oj(a,c));e.linkProgram(f);return a.f[d]=f}jj.prototype.K=function(){qa(this.a);qa(this.g);qa(this.f);this.i=this.j=this.h=this.l=null};jj.prototype.s=function(){};\r\nfunction qj(a,b){if(b==a.l)return!1;a.b.useProgram(b);a.l=b;return!0}function rj(a,b,c){var d=a.createTexture();a.bindTexture(a.TEXTURE_2D,d);a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MAG_FILTER,a.LINEAR);a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MIN_FILTER,a.LINEAR);void 0!==b&&a.texParameteri(3553,10242,b);void 0!==c&&a.texParameteri(3553,10243,c);return d}function nj(a,b,c){var d=rj(a,void 0,void 0);a.texImage2D(a.TEXTURE_2D,0,a.RGBA,b,c,0,a.RGBA,a.UNSIGNED_BYTE,null);return d};function sj(a,b){this.B=this.u=void 0;this.C=tb(b);this.v=[];this.l=[];this.M=void 0;this.h=[];this.g=[];this.ca=this.Y=void 0;this.a=[];this.D=this.j=null;this.N=void 0;this.Ea=Cf();this.va=Cf();this.ha=this.P=void 0;this.wa=Cf();this.ra=Jd();this.ba=this.aa=this.W=void 0;this.na=[];this.i=[];this.b=[];this.s=null;this.c=[];this.K=[];this.ma=void 0}B(sj,Fh);\r\nfunction tj(a,b){var c=a.s,d=a.j,e=a.na,f=a.i,g=b.b;return function(){if(!g.isContextLost()){var a,k;a=0;for(k=e.length;a<k;++a)g.deleteTexture(e[a]);a=0;for(k=f.length;a<k;++a)g.deleteTexture(f[a])}lj(b,c);lj(b,d)}}\r\nfunction uj(a,b,c,d){var e=a.u,f=a.B,g=a.M,h=a.Y,k=a.ca,l=a.N,m=a.P,p=a.ha,q=a.W?1:0,u=a.aa,w=a.ba,r=a.ma,x=Math.cos(u),u=Math.sin(u),D=a.a.length,t=a.b.length,z,C,E,v,H,G;for(z=0;z<c;z+=d)H=b[z]-a.C[0],G=b[z+1]-a.C[1],C=t/8,E=-w*e,v=-w*(g-f),a.b[t++]=H,a.b[t++]=G,a.b[t++]=E*x-v*u,a.b[t++]=E*u+v*x,a.b[t++]=m/k,a.b[t++]=(p+g)/h,a.b[t++]=l,a.b[t++]=q,E=w*(r-e),v=-w*(g-f),a.b[t++]=H,a.b[t++]=G,a.b[t++]=E*x-v*u,a.b[t++]=E*u+v*x,a.b[t++]=(m+r)/k,a.b[t++]=(p+g)/h,a.b[t++]=l,a.b[t++]=q,E=w*(r-e),v=w*f,a.b[t++]=\r\nH,a.b[t++]=G,a.b[t++]=E*x-v*u,a.b[t++]=E*u+v*x,a.b[t++]=(m+r)/k,a.b[t++]=p/h,a.b[t++]=l,a.b[t++]=q,E=-w*e,v=w*f,a.b[t++]=H,a.b[t++]=G,a.b[t++]=E*x-v*u,a.b[t++]=E*u+v*x,a.b[t++]=m/k,a.b[t++]=p/h,a.b[t++]=l,a.b[t++]=q,a.a[D++]=C,a.a[D++]=C+1,a.a[D++]=C+2,a.a[D++]=C,a.a[D++]=C+2,a.a[D++]=C+3}sj.prototype.bb=function(a,b){this.c.push(this.a.length);this.K.push(b);var c=a.o;uj(this,c,c.length,a.A)};sj.prototype.cb=function(a,b){this.c.push(this.a.length);this.K.push(b);var c=a.o;uj(this,c,c.length,a.A)};\r\nfunction vj(a,b){var c=b.b;a.v.push(a.a.length);a.l.push(a.a.length);a.s=new hj(a.b);kj(b,34962,a.s);a.j=new hj(a.a);kj(b,34963,a.j);var d={};wj(a.na,a.h,d,c);wj(a.i,a.g,d,c);a.u=void 0;a.B=void 0;a.M=void 0;a.h=null;a.g=null;a.Y=void 0;a.ca=void 0;a.a=null;a.N=void 0;a.P=void 0;a.ha=void 0;a.W=void 0;a.aa=void 0;a.ba=void 0;a.b=null;a.ma=void 0}\r\nfunction wj(a,b,c,d){var e,f,g,h,k=b.length;for(h=0;h<k;++h){f=b[h];g=J(f).toString();if(g in c)e=c[g];else{e=d;var l=rj(e,33071,33071);e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,f);e=l;c[g]=e}a[h]=e}}\r\nsj.prototype.f=function(a,b,c,d,e,f,g,h,k,l,m){f=a.b;kj(a,34962,this.s);kj(a,34963,this.j);var p=pj(a,dj,fj),q;this.D?q=this.D:this.D=q=new gj(f,p);qj(a,p);f.enableVertexAttribArray(q.f);f.vertexAttribPointer(q.f,2,5126,!1,32,0);f.enableVertexAttribArray(q.b);f.vertexAttribPointer(q.b,2,5126,!1,32,8);f.enableVertexAttribArray(q.g);f.vertexAttribPointer(q.g,2,5126,!1,32,16);f.enableVertexAttribArray(q.a);f.vertexAttribPointer(q.a,1,5126,!1,32,24);f.enableVertexAttribArray(q.c);f.vertexAttribPointer(q.c,\r\n1,5126,!1,32,28);p=Df(this.wa);Jf(p,2/(c*e[0]),2/(c*e[1]));If(p,-d);Kf(p,-(b[0]-this.C[0]),-(b[1]-this.C[1]));b=Df(this.va);Jf(b,2/e[0],2/e[1]);e=Df(this.Ea);0!==d&&If(e,-d);f.uniformMatrix4fv(q.l,!1,Kd(this.ra,p));f.uniformMatrix4fv(q.j,!1,Kd(this.ra,b));f.uniformMatrix4fv(q.i,!1,Kd(this.ra,e));f.uniform1f(q.h,g);var u;if(void 0===k)xj(this,f,a,h,this.na,this.v);else{if(l)a:{d=a.c?5125:5123;a=a.c?4:2;e=this.c.length-1;for(g=this.i.length-1;0<=g;--g)for(f.bindTexture(3553,this.i[g]),l=0<g?this.l[g-\r\n1]:0,b=this.l[g];0<=e&&this.c[e]>=l;){u=this.c[e];c=this.K[e];p=J(c).toString();if(void 0===h[p]&&c.S()&&(void 0===m||wb(m,c.S().G()))&&(f.clear(f.COLOR_BUFFER_BIT|f.DEPTH_BUFFER_BIT),f.drawElements(4,b-u,d,u*a),b=k(c))){h=b;break a}b=u;e--}h=void 0}else f.clear(f.COLOR_BUFFER_BIT|f.DEPTH_BUFFER_BIT),xj(this,f,a,h,this.i,this.l),h=(h=k(null))?h:void 0;u=h}f.disableVertexAttribArray(q.f);f.disableVertexAttribArray(q.b);f.disableVertexAttribArray(q.g);f.disableVertexAttribArray(q.a);f.disableVertexAttribArray(q.c);\r\nreturn u};function xj(a,b,c,d,e,f){var g=c.c?5125:5123;c=c.c?4:2;if(sa(d)){var h;a=0;d=e.length;for(h=0;a<d;++a){b.bindTexture(3553,e[a]);var k=f[a];b.drawElements(4,k-h,g,h*c);h=k}}else{h=0;var l,k=0;for(l=e.length;k<l;++k){b.bindTexture(3553,e[k]);for(var m=0<k?f[k-1]:0,p=f[k],q=m;h<a.c.length&&a.c[h]<=p;){var u=J(a.K[h]).toString();void 0!==d[u]?(q!==m&&b.drawElements(4,m-q,g,q*c),m=q=h===a.c.length-1?p:a.c[h+1]):m=h===a.c.length-1?p:a.c[h+1];h++}q!==m&&b.drawElements(4,m-q,g,q*c)}}}\r\nsj.prototype.Ma=function(a){var b=a.eb(),c=a.Z(1),d=a.Ob(),e=a.ub(1),f=a.C,g=a.pa(),h=a.K,k=a.s,l=a.Ka();a=a.v;var m;0===this.h.length?this.h.push(c):(m=this.h[this.h.length-1],J(m)!=J(c)&&(this.v.push(this.a.length),this.h.push(c)));0===this.g.length?this.g.push(e):(m=this.g[this.g.length-1],J(m)!=J(e)&&(this.l.push(this.a.length),this.g.push(e)));this.u=b[0];this.B=b[1];this.M=l[1];this.Y=d[1];this.ca=d[0];this.N=f;this.P=g[0];this.ha=g[1];this.aa=k;this.W=h;this.ba=a;this.ma=l[0]};\r\nfunction yj(a,b,c){this.h=b;this.l=a;this.g=c;this.a={}}B(yj,ei);function zj(a,b){var c=[],d;for(d in a.a)c.push(tj(a.a[d],b));return function(){for(var a=c.length,b,d=0;d<a;d++)b=c[d].apply(this,arguments);return b}}function Aj(a,b){for(var c in a.a)vj(a.a[c],b)}yj.prototype.b=function(a,b){var c=this.a[b];void 0===c&&(c=new Bj[b](this.l,this.h),this.a[b]=c);return c};yj.prototype.c=function(){return sa(this.a)};\r\nyj.prototype.f=function(a,b,c,d,e,f,g,h){var k,l,m;k=0;for(l=fi.length;k<l;++k)m=this.a[fi[k]],void 0!==m&&m.f(a,b,c,d,e,f,g,h,void 0,!1)};function Cj(a,b,c,d,e,f,g,h,k,l,m){var p=Dj,q,u;for(q=fi.length-1;0<=q;--q)if(u=a.a[fi[q]],void 0!==u&&(u=u.f(b,c,d,e,p,f,g,h,k,l,m)))return u}\r\nyj.prototype.fa=function(a,b,c,d,e,f,g,h,k,l){var m=b.b;m.bindFramebuffer(m.FRAMEBUFFER,mj(b));var p;void 0!==this.g&&(p=fb(kb(a),d*this.g));return Cj(this,b,a,d,e,g,h,k,function(a){var b=new Uint8Array(4);m.readPixels(0,0,1,1,m.RGBA,m.UNSIGNED_BYTE,b);if(0<b[3]&&(a=l(a)))return a},!0,p)};\r\nfunction Ej(a,b,c,d,e,f,g,h){var k=c.b;k.bindFramebuffer(k.FRAMEBUFFER,mj(c));return void 0!==Cj(a,c,b,d,e,f,g,h,function(){var a=new Uint8Array(4);k.readPixels(0,0,1,1,k.RGBA,k.UNSIGNED_BYTE,a);return 0<a[3]},!1)}var Bj={Image:sj},Dj=[1,1];function Fj(a,b,c,d,e,f,g){this.b=a;this.c=b;this.f=f;this.g=g;this.i=e;this.l=d;this.h=c;this.a=null}B(Fj,Fh);Fj.prototype.cb=function(a,b){var c=this.b,d=(new yj(1,this.f)).b(0,\"Image\");d.Ma(this.a);d.cb(a,b);vj(d,c);d.f(this.b,this.c,this.h,this.l,this.i,this.g,1,{},void 0,!1);tj(d,c)()};Fj.prototype.bb=function(a,b){var c=this.b,d=(new yj(1,this.f)).b(0,\"Image\");d.Ma(this.a);d.bb(a,b);vj(d,c);d.f(this.b,this.c,this.h,this.l,this.i,this.g,1,{},void 0,!1);tj(d,c)()};\r\nFj.prototype.Ma=function(a){this.a=a};function Gj(){this.b=\"precision mediump float;varying vec2 a;uniform float f;uniform sampler2D g;void main(void){vec4 texColor=texture2D(g,a);gl_FragColor.rgb=texColor.rgb;gl_FragColor.a=texColor.a*f;}\"}B(Gj,aj);var Hj=new Gj;function Ij(){this.b=\"varying vec2 a;attribute vec2 b;attribute vec2 c;uniform mat4 d;uniform mat4 e;void main(void){gl_Position=e*vec4(b,0.,1.);a=(d*vec4(c,0.,1.)).st;}\"}B(Ij,bj);var Jj=new Ij;\r\nfunction Kj(a,b){this.c=a.getUniformLocation(b,\"f\");this.f=a.getUniformLocation(b,\"e\");this.h=a.getUniformLocation(b,\"d\");this.g=a.getUniformLocation(b,\"g\");this.b=a.getAttribLocation(b,\"b\");this.a=a.getAttribLocation(b,\"c\")};function Lj(a,b){Rh.call(this,b);this.f=a;this.W=new hj([-1,-1,0,0,1,-1,1,0,-1,1,0,1,1,1,1,1]);this.i=this.Da=null;this.j=void 0;this.P=Cf();this.aa=Cf();this.B=Jd();this.s=null}B(Lj,Rh);\r\nfunction Mj(a,b,c){var d=a.f.f;if(void 0===a.j||a.j!=c){b.postRenderFunctions.push(function(a,b,c){a.isContextLost()||(a.deleteFramebuffer(b),a.deleteTexture(c))}.bind(null,d,a.i,a.Da));b=nj(d,c,c);var e=d.createFramebuffer();d.bindFramebuffer(36160,e);d.framebufferTexture2D(36160,36064,3553,b,0);a.Da=b;a.i=e;a.j=c}else d.bindFramebuffer(36160,a.i)}\r\nLj.prototype.Jc=function(a,b,c){Nj(this,\"precompose\",c,a);kj(c,34962,this.W);var d=c.b,e=pj(c,Hj,Jj),f;this.s?f=this.s:this.s=f=new Kj(d,e);qj(c,e)&&(d.enableVertexAttribArray(f.b),d.vertexAttribPointer(f.b,2,5126,!1,16,0),d.enableVertexAttribArray(f.a),d.vertexAttribPointer(f.a,2,5126,!1,16,8),d.uniform1i(f.g,0));d.uniformMatrix4fv(f.h,!1,Kd(this.B,this.P));d.uniformMatrix4fv(f.f,!1,Kd(this.B,this.aa));d.uniform1f(f.c,b.opacity);d.bindTexture(3553,this.Da);d.drawArrays(5,0,4);Nj(this,\"postcompose\",\r\nc,a)};function Nj(a,b,c,d){a=a.a;if(Ha(a,b)){var e=d.viewState;U(a,new uf(b,new Fj(c,e.center,e.resolution,e.rotation,d.size,d.extent,d.pixelRatio),d,null,c))}}Lj.prototype.v=function(){this.i=this.Da=null;this.j=void 0};function Oj(){this.b=\"precision mediump float;varying vec2 a;uniform sampler2D e;void main(void){gl_FragColor=texture2D(e,a);}\"}B(Oj,aj);var Pj=new Oj;function Qj(){this.b=\"varying vec2 a;attribute vec2 b;attribute vec2 c;uniform vec4 d;void main(void){gl_Position=vec4(b*d.xy+d.zw,0.,1.);a=c;}\"}B(Qj,bj);var Rj=new Qj;function Sj(a,b){this.c=a.getUniformLocation(b,\"e\");this.f=a.getUniformLocation(b,\"d\");this.b=a.getAttribLocation(b,\"b\");this.a=a.getAttribLocation(b,\"c\")};function Tj(a,b){Lj.call(this,a,b);this.M=Pj;this.ba=Rj;this.c=null;this.D=new hj([0,0,0,1,1,0,1,1,0,1,0,0,1,1,1,0]);this.u=this.g=null;this.h=-1;this.N=[0,0]}B(Tj,Lj);Tj.prototype.R=function(){lj(this.f.getContext(),this.D);Lj.prototype.R.call(this)};Tj.prototype.l=function(a,b,c){var d=this.f;return function(e,f){return Sh(a,b,e,f,function(a){var b=Uj(d.a,a.getKey());b&&(c[e]||(c[e]={}),c[e][a.V.toString()]=a);return b})}};Tj.prototype.v=function(){Lj.prototype.v.call(this);this.c=null};\r\nTj.prototype.Kc=function(a,b,c){var d=this.f,e=c.b,f=a.viewState,g=f.projection,h=this.a,k=h.da(),l=k.sa(g),m=Xc(l,f.resolution),p=l.O(m),q=Ni(k,m,a.pixelRatio,g),u=q[0]/Lc(Wc(l,m),this.N)[0],w=p/u,r=a.pixelRatio*k.nb(g),x=f.center,D;p==f.resolution?(x=Yh(x,p,a.size),D=ub(x,p,f.rotation,a.size)):D=a.extent;p=Tc(l,D,p);if(this.g&&Ic(this.g,p)&&this.h==k.b)w=this.u;else{var t=[p.I-p.H+1,p.L-p.J+1],z=ka(Math.max(t[0]*q[0],t[1]*q[1])),t=w*z,C=l.pa(m),E=C[0]+p.H*q[0]*w,w=C[1]+p.J*q[1]*w,w=[E,w,E+t,w+t];\r\nMj(this,a,z);e.viewport(0,0,z,z);e.clearColor(0,0,0,0);e.clear(16384);e.disable(3042);z=pj(c,this.M,this.ba);qj(c,z);this.c||(this.c=new Sj(e,z));kj(c,34962,this.D);e.enableVertexAttribArray(this.c.b);e.vertexAttribPointer(this.c.b,2,5126,!1,16,0);e.enableVertexAttribArray(this.c.a);e.vertexAttribPointer(this.c.a,2,5126,!1,16,8);e.uniform1i(this.c.c,0);c={};c[m]={};var v=this.l(k,g,c),H=jh(h),z=!0,E=db(),G=new Gc(0,0,0,0),A,F,Q;for(F=p.H;F<=p.I;++F)for(Q=p.J;Q<=p.L;++Q){C=$h(k,m,F,Q,u,g);if(void 0!==\r\nb.extent&&(A=Qc(l,C.V,E),!wb(A,b.extent)))continue;A=C.T();A=2==A||4==A||3==A&&!H;!A&&C.b&&(C=C.b);A=C.T();if(2==A){if(Uj(d.a,C.getKey())){c[m][C.V.toString()]=C;continue}}else if(4==A||3==A&&!H)continue;z=!1;A=Pc(l,C.V,v,G,E);A||(C=Sc(l,C.V,G,E))&&v(m+1,C)}b=Object.keys(c).map(Number);b.sort(Ma);for(var v=new Float32Array(4),N,H=0,G=b.length;H<G;++H)for(N in F=c[b[H]],F)C=F[N],A=Qc(l,C.V,E),v[0]=2*(A[2]-A[0])/t,v[1]=2*(A[3]-A[1])/t,v[2]=2*(A[0]-w[0])/t-1,v[3]=2*(A[1]-w[1])/t-1,e.uniform4fv(this.c.f,\r\nv),Vj(d,C,q,r*u),e.drawArrays(5,0,4);z?(this.g=p,this.u=w,this.h=k.b):(this.u=this.g=null,this.h=-1,a.animate=!0)}Xh(a.usedTiles,k,m,p);var O=d.l;Zh(a,k,l,u,g,D,m,h.get(\"preload\"),function(a){var b;(b=2!=a.T()||Uj(d.a,a.getKey()))||(b=a.getKey()in O.a);b||O.g([a,Vc(l,a.V),l.O(a.V[0]),q,r*u])},this);Uh(a,k);Wh(a,k);e=this.P;Df(e);Kf(e,(x[0]-w[0])/(w[2]-w[0]),(x[1]-w[1])/(w[3]-w[1]));0!==f.rotation&&If(e,f.rotation);Jf(e,a.size[0]*f.resolution/(w[2]-w[0]),a.size[1]*f.resolution/(w[3]-w[1]));Kf(e,-.5,\r\n-.5);return!0};function Wj(a,b){Lj.call(this,a,b);this.h=!1;this.N=-1;this.M=NaN;this.u=db();this.g=this.c=this.D=null}B(Wj,Lj);n=Wj.prototype;n.Jc=function(a,b,c){this.g=b;var d=a.viewState,e=this.c;e&&!e.c()&&e.f(c,d.center,d.resolution,d.rotation,a.size,a.pixelRatio,b.opacity,b.hb?a.skippedFeatureUids:{})};n.R=function(){var a=this.c;if(a){var b=this.f.getContext();zj(a,b)();this.c=null}Lj.prototype.R.call(this)};\r\nn.fa=function(a,b,c,d){if(this.c&&this.g){var e=this.f.getContext(),f=b.viewState,g=this.a,h={};return this.c.fa(a,e,f.center,f.resolution,f.rotation,b.size,b.pixelRatio,this.g.opacity,{},function(a){var b=J(a).toString();if(!(b in h))return h[b]=!0,c.call(d,a,g)})}};n.Ec=function(a,b){if(this.c&&this.g){var c=this.f.getContext(),d=b.viewState;return Ej(this.c,a,c,d.resolution,d.rotation,b.pixelRatio,this.g.opacity,b.skippedFeatureUids)}return!1};n.Lc=function(){Th(this)};\r\nn.Kc=function(a,b,c){function d(a){var b,c=a.f;c?b=c.call(a,l):(c=e.g)&&(b=c(a,l));if(b){if(b){c=!1;if(Array.isArray(b))for(var d=0,f=b.length;d<f;++d)c=Bi(q,a,b[d],Ai(l,m),this.Lc,this)||c;else c=Bi(q,a,b,Ai(l,m),this.Lc,this)||c;a=c}else a=!1;this.h=this.h||a}}var e=this.a;b=e.da();Vh(a.attributions,b.h);Wh(a,b);var f=a.viewHints[0],g=a.viewHints[1],h=e.i,k=e.j;if(!this.h&&!h&&f||!k&&g)return!0;var g=a.extent,h=a.viewState,f=h.projection,l=h.resolution,m=a.pixelRatio,h=e.b,p=e.a,k=e.get(\"renderOrder\");\r\nvoid 0===k&&(k=zi);g=fb(g,p*l);if(!this.h&&this.M==l&&this.N==h&&this.D==k&&hb(this.u,g))return!0;this.c&&a.postRenderFunctions.push(zj(this.c,c));this.h=!1;var q=new yj(.5*l/m,g,e.a);Pi(b,g,l,f);if(k){var u=[];Qi(b,g,function(a){u.push(a)},this);u.sort(k);u.forEach(d,this)}else Qi(b,g,d,this);Aj(q,c);this.M=l;this.N=h;this.D=k;this.u=g;this.c=q;return!0};function Xj(){this.f=0;this.c={};this.a=this.b=null}Xj.prototype.clear=function(){this.f=0;this.c={};this.a=this.b=null};function Uj(a,b){return a.c.hasOwnProperty(b)}function Yj(a,b){for(var c=a.b;c;)b.call(void 0,c.Na,c.Ia,a),c=c.ta}Xj.prototype.get=function(a){a=this.c[a];L(void 0!==a,15);if(a===this.a)return a.Na;a===this.b?(this.b=this.b.ta,this.b.Ua=null):(a.ta.Ua=a.Ua,a.Ua.ta=a.ta);a.ta=null;a.Ua=this.a;this.a=this.a.ta=a;return a.Na};\r\nXj.prototype.pop=function(){var a=this.b;delete this.c[a.Ia];a.ta&&(a.ta.Ua=null);this.b=a.ta;this.b||(this.a=null);--this.f;return a.Na};function Zj(a,b,c){a.get(b);a.c[b].Na=c}Xj.prototype.set=function(a,b){L(!(a in this.c),16);var c={Ia:a,ta:null,Ua:this.a,Na:b};this.a?this.a.ta=c:this.b=c;this.a=c;this.c[a]=c;++this.f};function ak(a,b){Nf.call(this,0,b);this.b=document.createElement(\"CANVAS\");this.b.style.width=\"100%\";this.b.style.height=\"100%\";this.b.className=\"ol-unselectable\";a.insertBefore(this.b,a.childNodes[0]||null);this.s=this.v=0;this.u=Md();this.i=!0;this.f=ie(this.b,{antialias:!0,depth:!1,failIfMajorPerformanceCaveat:!0,preserveDrawingBuffer:!1,stencil:!0});this.C=new jj(this.b,this.f);R(this.b,\"webglcontextlost\",this.ge,this);R(this.b,\"webglcontextrestored\",this.he,this);this.a=new Xj;this.K=null;this.l=\r\nnew Uf(function(a){var b=a[1];a=a[2];var e=b[0]-this.K[0],b=b[1]-this.K[1];return 65536*Math.log(a)+Math.sqrt(e*e+b*b)/a}.bind(this),function(a){return a[0].getKey()});this.B=function(){if(0!==this.l.b.length){Yf(this.l);var a=Vf(this.l);Vj(this,a[0],a[3],a[4])}return!1}.bind(this);this.h=0;bk(this)}B(ak,Nf);\r\nfunction Vj(a,b,c,d){var e=a.f,f=b.getKey();if(Uj(a.a,f))a=a.a.get(f),e.bindTexture(3553,a.Da),9729!=a.yc&&(e.texParameteri(3553,10240,9729),a.yc=9729),9729!=a.zc&&(e.texParameteri(3553,10241,9729),a.zc=9729);else{var g=e.createTexture();e.bindTexture(3553,g);if(0<d){var h=a.u.canvas,k=a.u;a.v!==c[0]||a.s!==c[1]?(h.width=c[0],h.height=c[1],a.v=c[0],a.s=c[1]):k.clearRect(0,0,c[0],c[1]);k.drawImage(b.Z(),d,d,c[0],c[1],0,0,c[0],c[1]);e.texImage2D(3553,0,6408,6408,5121,h)}else e.texImage2D(3553,0,6408,\r\n6408,5121,b.Z());e.texParameteri(3553,10240,9729);e.texParameteri(3553,10241,9729);e.texParameteri(3553,10242,33071);e.texParameteri(3553,10243,33071);a.a.set(f,{Da:g,yc:9729,zc:9729})}}n=ak.prototype;n.Mb=function(a){return a instanceof W?new Tj(this,a):a instanceof Y?new Wj(this,a):null};function ck(a,b,c){var d=a.g;if(Ha(d,b)){a=a.C;var e=c.viewState;U(d,new uf(b,new Fj(a,e.center,e.resolution,e.rotation,c.size,c.extent,c.pixelRatio),c,null,a))}}\r\nn.R=function(){var a=this.f;a.isContextLost()||Yj(this.a,function(b){b&&a.deleteTexture(b.Da)});Da(this.C);Nf.prototype.R.call(this)};n.ld=function(a,b){for(var c=this.f,d;1024<this.a.f-this.h;){if(d=this.a.b.Na)c.deleteTexture(d.Da);else if(+this.a.b.Ia==b.index)break;else--this.h;this.a.pop()}};n.getContext=function(){return this.C};n.$=function(){return\"webgl\"};n.ge=function(a){a.preventDefault();this.a.clear();this.h=0;a=this.c;for(var b in a)a[b].v()};n.he=function(){bk(this);this.g.render()};\r\nfunction bk(a){a=a.f;a.activeTexture(33984);a.blendFuncSeparate(770,771,1,771);a.disable(2884);a.disable(2929);a.disable(3089);a.disable(2960)}\r\nn.vb=function(a){var b=this.getContext(),c=this.f;if(c.isContextLost())return!1;if(!a)return this.i&&(this.b.style.display=\"none\",this.i=!1),!1;this.K=a.focus;this.a.set((-a.index).toString(),null);++this.h;ck(this,\"precompose\",a);var d=[],e=a.layerStatesArray;Sa(e);var f=a.viewState.resolution,g,h,k,l;g=0;for(h=e.length;g<h;++g)l=e[g],yf(l,f)&&\"ready\"==l.ac&&(k=Qf(this,l.layer),k.Kc(a,l,b)&&d.push(l));e=a.size[0]*a.pixelRatio;f=a.size[1]*a.pixelRatio;if(this.b.width!=e||this.b.height!=f)this.b.width=\r\ne,this.b.height=f;c.bindFramebuffer(36160,null);c.clearColor(0,0,0,0);c.clear(16384);c.enable(3042);c.viewport(0,0,this.b.width,this.b.height);g=0;for(h=d.length;g<h;++g)l=d[g],k=Qf(this,l.layer),k.Jc(a,l,b);this.i||(this.b.style.display=\"\",this.i=!0);Of(a);1024<this.a.f-this.h&&a.postRenderFunctions.push(this.ld.bind(this));0!==this.l.b.length&&(a.postRenderFunctions.push(this.B),a.animate=!0);ck(this,\"postcompose\",a);Rf(this,a);a.postRenderFunctions.push(Pf)};\r\nn.fa=function(a,b,c,d,e,f){var g;if(this.f.isContextLost())return!1;var h=b.viewState,k=b.layerStatesArray,l;for(l=k.length-1;0<=l;--l){g=k[l];var m=g.layer;if(yf(g,h.resolution)&&e.call(f,m)&&(g=Qf(this,m).fa(a,b,c,d)))return g}};n.Fc=function(a,b,c,d){var e=!1;if(this.f.isContextLost())return!1;var f=b.viewState,g=b.layerStatesArray,h;for(h=g.length-1;0<=h;--h){var k=g[h],l=k.layer;if(yf(k,f.resolution)&&c.call(d,l)&&(e=Qf(this,l).Ec(a,b)))return!0}return e};var dk=[\"canvas\",\"webgl\",\"dom\"];\r\nfunction Z(a){V.call(this);var b=ek(a);this.kb=void 0!==a.loadTilesWhileAnimating?a.loadTilesWhileAnimating:!1;this.Ab=void 0!==a.loadTilesWhileInteracting?a.loadTilesWhileInteracting:!1;this.Cb=void 0!==a.pixelRatio?a.pixelRatio:oe;this.Bb=b.logos;this.aa=function(){this.g=void 0;this.ve.call(this,Date.now())}.bind(this);this.Fa=Cf();this.zb=Cf();this.Ga=0;this.c=null;this.va=db();this.u=this.P=null;this.a=document.createElement(\"DIV\");this.a.className=\"ol-viewport\"+(re?\" ol-touch\":\"\");this.a.style.position=\r\n\"relative\";this.a.style.overflow=\"hidden\";this.a.style.width=\"100%\";this.a.style.height=\"100%\";this.a.style.msTouchAction=\"none\";this.a.style.touchAction=\"none\";this.s=document.createElement(\"DIV\");this.s.className=\"ol-overlaycontainer\";this.a.appendChild(this.s);this.j=document.createElement(\"DIV\");this.j.className=\"ol-overlaycontainer-stopevent\";a=[\"click\",\"dblclick\",\"mousedown\",\"touchstart\",\"mspointerdown\",of,\"mousewheel\",\"wheel\"];for(var c=0,d=a.length;c<d;++c)R(this.j,a[c],Ea);this.a.appendChild(this.j);\r\nthis.ma=new ff(this);for(var e in rf)R(this.ma,rf[e],this.wc,this);this.ba=b.keyboardEventTarget;this.i=null;R(this.a,\"wheel\",this.Sa,this);R(this.a,\"mousewheel\",this.Sa,this);this.v=b.controls;this.h=b.interactions;this.B=b.overlays;this.Sc={};this.N=new b.xe(this.a,this);this.W=null;this.D=[];this.na=[];this.wa=new Zf(this.qd.bind(this),this.Jd.bind(this));this.Eb={};R(this,La(\"layergroup\"),this.vd,this);R(this,La(\"view\"),this.Kd,this);R(this,La(\"size\"),this.Gd,this);R(this,La(\"target\"),this.Id,\r\nthis);this.l(b.values);ed(this.v,function(a){a.setMap(this)},this);R(this.v,hd,function(a){a.element.setMap(this)},this);R(this.v,id,function(a){a.element.setMap(null)},this);ed(this.h,function(a){a.setMap(this)},this);R(this.h,hd,function(a){a.element.setMap(this)},this);R(this.h,id,function(a){a.element.setMap(null)},this);ed(this.B,this.ic,this);R(this.B,hd,function(a){this.ic(a.element)},this);R(this.B,id,function(a){var b=a.element.Pa();void 0!==b&&delete this.Sc[b.toString()];a.element.setMap(null)},\r\nthis)}B(Z,V);n=Z.prototype;n.cd=function(a){this.v.push(a)};n.dd=function(a){this.h.push(a)};n.ed=function(a){fk(this).get(\"layers\").push(a)};n.fd=function(a){this.B.push(a)};n.ic=function(a){var b=a.Pa();void 0!==b&&(this.Sc[b.toString()]=a);a.setMap(this)};n.oa=function(a){this.render();Array.prototype.push.apply(this.D,arguments)};\r\nn.R=function(){Da(this.ma);Da(this.N);ya(this.a,\"wheel\",this.Sa,this);ya(this.a,\"mousewheel\",this.Sa,this);void 0!==this.f&&(K.removeEventListener(\"resize\",this.f,!1),this.f=void 0);this.g&&(K.cancelAnimationFrame(this.g),this.g=void 0);this.set(\"target\",null);V.prototype.R.call(this)};n.od=function(a,b,c,d,e){if(this.c)return a=this.Ba(a),this.N.fa(a,this.c,b,void 0!==c?c:null,void 0!==d?d:yb,void 0!==e?e:null)};\r\nn.Md=function(a,b,c){if(!this.c)return!1;a=this.Ba(a);return this.N.Fc(a,this.c,void 0!==b?b:yb,void 0!==c?c:null)};n.uc=function(a){var b=this.a.getBoundingClientRect();a=a.changedTouches?a.changedTouches[0]:a;return[a.clientX-b.left,a.clientY-b.top]};n.Wb=function(){return this.get(\"target\")};n.Ra=function(){var a=this.Wb();return void 0!==a?\"string\"===typeof a?document.getElementById(a):a:null};n.Ba=function(a){var b=this.c;return b?Hf(b.pixelToCoordinateTransform,a.slice()):null};\r\nfunction fk(a){return a.get(\"layergroup\")}function ug(a,b){var c=a.c;return c?Hf(c.coordinateToPixelTransform,b.slice(0,2)):null}n.Ta=function(){return this.get(\"size\")};n.U=function(){return this.get(\"view\")};n.qd=function(a,b,c,d){var e=this.c;if(!(e&&b in e.wantedTiles&&e.wantedTiles[b][a.getKey()]))return Infinity;a=c[0]-e.focus[0];c=c[1]-e.focus[1];return 65536*Math.log(d)+Math.sqrt(a*a+c*c)/d};n.Sa=function(a,b){var c=new df(b||a.type,this,a);this.wc(c)};\r\nn.wc=function(a){if(this.c){this.W=a.coordinate;a.frameState=this.c;var b=this.h.a,c;if(!1!==U(this,a))for(c=b.length-1;0<=c;c--){var d=b[c];if(d.get(\"active\")&&!d.handleEvent(a))break}}};\r\nn.Fd=function(){var a=this.c,b=this.wa;if(0!==b.b.length){var c=16,d=c;if(a){var e=a.viewHints;e[0]&&(c=this.kb?8:0,d=2);e[1]&&(c=this.Ab?8:0,d=2)}if(b.l<c){Yf(b);for(var e=0,f,g;b.l<c&&e<d&&0<b.b.length;)f=Vf(b)[0],g=f.getKey(),0!==f.T()||g in b.h||(b.h[g]=!0,++b.l,++e,f.load())}}b=this.na;c=0;for(d=b.length;c<d;++c)b[c](this,a);b.length=0};n.Gd=function(){this.render()};\r\nn.Id=function(){var a;this.Wb()&&(a=this.Ra());if(this.i){for(var b=0,c=this.i.length;b<c;++b)M(this.i[b]);this.i=null}a?(a.appendChild(this.a),a=this.ba?this.ba:a,this.i=[R(a,\"keydown\",this.Sa,this),R(a,\"keypress\",this.Sa,this)],this.f||(this.f=this.yb.bind(this),K.addEventListener(\"resize\",this.f,!1))):(Sd(this.a),void 0!==this.f&&(K.removeEventListener(\"resize\",this.f,!1),this.f=void 0));this.yb()};n.Jd=function(){this.render()};n.Ld=function(){this.render()};\r\nn.Kd=function(){this.P&&(M(this.P),this.P=null);var a=this.U();a&&(this.P=R(a,\"propertychange\",this.Ld,this));this.render()};n.vd=function(){this.u&&(this.u.forEach(M),this.u=null);var a=fk(this);a&&(this.u=[R(a,\"propertychange\",this.render,this),R(a,\"change\",this.render,this)]);this.render()};n.we=function(){this.g&&K.cancelAnimationFrame(this.g);this.aa()};n.render=function(){void 0===this.g&&(this.g=K.requestAnimationFrame(this.aa))};n.se=function(a){return this.h.remove(a)};n.te=function(a){return fk(this).get(\"layers\").remove(a)};\r\nn.ve=function(a){var b,c,d,e=this.Ta(),f=this.U(),g=db(),h=null;if(b=void 0!==e&&0<e[0]&&0<e[1]&&f)b=!!f.qa()&&void 0!==f.O();if(b){d=this.c?this.c.viewHints:void 0;void 0!==d?(d[0]=f.c[0],d[1]=f.c[1],h=d):h=f.c.slice();var k=fk(this).Pb(),l={};b=0;for(c=k.length;b<c;++b)l[J(k[b].layer)]=k[b];d=f.T();h={animate:!1,attributions:{},coordinateToPixelTransform:this.Fa,extent:g,focus:this.W?this.W:d.center,index:this.Ga++,layerStates:l,layerStatesArray:k,logos:pa({},this.Bb),pixelRatio:this.Cb,pixelToCoordinateTransform:this.zb,\r\npostRenderFunctions:[],size:e,skippedFeatureUids:this.Eb,tileQueue:this.wa,time:a,usedTiles:{},viewState:d,viewHints:h,wantedTiles:{}}}if(h){a=this.D;b=e=0;for(c=a.length;b<c;++b)f=a[b],f(this,h)&&(a[e++]=f);a.length=e;h.extent=ub(d.center,d.resolution,d.rotation,h.size,g)}this.c=h;this.N.vb(h);h&&(h.animate&&this.render(),Array.prototype.push.apply(this.na,h.postRenderFunctions),0!==this.D.length||h.viewHints[0]||h.viewHints[1]||lb(h.extent,this.va)||(U(this,new Td(\"moveend\",this,h)),gb(h.extent,\r\nthis.va)));U(this,new Td(\"postrender\",this,h));d=g=this.Fd;this&&(d=ea(g,this));\"function\"!=ba()||aa.Window&&aa.Window.prototype&&!xd(\"Edge\")&&aa.Window.prototype.setImmediate==aa.setImmediate?(fe||(fe=ge()),fe(d)):aa.setImmediate(d)};\r\nn.yb=function(){var a=this.Ra();if(a){var b=K.getComputedStyle(a);this.set(\"size\",[a.offsetWidth-parseFloat(b.borderLeftWidth)-parseFloat(b.paddingLeft)-parseFloat(b.paddingRight)-parseFloat(b.borderRightWidth),a.offsetHeight-parseFloat(b.borderTopWidth)-parseFloat(b.paddingTop)-parseFloat(b.paddingBottom)-parseFloat(b.borderBottomWidth)])}else this.set(\"size\",void 0)};\r\nfunction ek(a){var b=null;void 0!==a.keyboardEventTarget&&(b=\"string\"===typeof a.keyboardEventTarget?document.getElementById(a.keyboardEventTarget):a.keyboardEventTarget);var c={},d={};if(void 0===a.logo||\"boolean\"===typeof a.logo&&a.logo)d[\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAHGAAABxgEXwfpGAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAhNQTFRF////AP//AICAgP//AFVVQECA////K1VVSbbbYL/fJ05idsTYJFtbbcjbJllmZszWWMTOIFhoHlNiZszTa9DdUcHNHlNlV8XRIVdiasrUHlZjIVZjaMnVH1RlIFRkH1RkH1ZlasvYasvXVsPQH1VkacnVa8vWIVZjIFRjVMPQa8rXIVVkXsXRsNveIFVkIFZlIVVj3eDeh6GmbMvXH1ZkIFRka8rWbMvXIFVkIFVjIFVkbMvWH1VjbMvWIFVlbcvWIFVla8vVIFVkbMvWbMvVH1VkbMvWIFVlbcvWIFVkbcvVbMvWjNPbIFVkU8LPwMzNIFVkbczWIFVkbsvWbMvXIFVkRnB8bcvW2+TkW8XRIFVkIlZlJVloJlpoKlxrLl9tMmJwOWd0Omh1RXF8TneCT3iDUHiDU8LPVMLPVcLPVcPQVsPPVsPQV8PQWMTQWsTQW8TQXMXSXsXRX4SNX8bSYMfTYcfTYsfTY8jUZcfSZsnUaIqTacrVasrVa8jTa8rWbI2VbMvWbcvWdJObdcvUdszUd8vVeJaee87Yfc3WgJyjhqGnitDYjaarldPZnrK2oNbborW5o9bbo9fbpLa6q9ndrL3ArtndscDDutzfu8fJwN7gwt7gxc/QyuHhy+HizeHi0NfX0+Pj19zb1+Tj2uXk29/e3uLg3+Lh3+bl4uXj4ufl4+fl5Ofl5ufl5ujm5+jmySDnBAAAAFp0Uk5TAAECAgMEBAYHCA0NDg4UGRogIiMmKSssLzU7PkJJT1JTVFliY2hrdHZ3foSFhYeJjY2QkpugqbG1tre5w8zQ09XY3uXn6+zx8vT09vf4+Pj5+fr6/P39/f3+gz7SsAAAAVVJREFUOMtjYKA7EBDnwCPLrObS1BRiLoJLnte6CQy8FLHLCzs2QUG4FjZ5GbcmBDDjxJBXDWxCBrb8aM4zbkIDzpLYnAcE9VXlJSWlZRU13koIeW57mGx5XjoMZEUqwxWYQaQbSzLSkYGfKFSe0QMsX5WbjgY0YS4MBplemI4BdGBW+DQ11eZiymfqQuXZIjqwyadPNoSZ4L+0FVM6e+oGI6g8a9iKNT3o8kVzNkzRg5lgl7p4wyRUL9Yt2jAxVh6mQCogae6GmflI8p0r13VFWTHBQ0rWPW7ahgWVcPm+9cuLoyy4kCJDzCm6d8PSFoh0zvQNC5OjDJhQopPPJqph1doJBUD5tnkbZiUEqaCnB3bTqLTFG1bPn71kw4b+GFdpLElKIzRxxgYgWNYc5SCENVHKeUaltHdXx0dZ8uBI1hJ2UUDgq82CM2MwKeibqAvSO7MCABq0wXEPiqWEAAAAAElFTkSuQmCC\"]=\r\n\"http://openlayers.org/\";else{var e=a.logo;\"string\"===typeof e?d[e]=\"\":e instanceof HTMLElement?d[J(e).toString()]=e:e&&(L(\"string\"==typeof e.href,44),L(\"string\"==typeof e.src,45),d[e.src]=e.href)}e=a.layers instanceof Xg?a.layers:new Xg({layers:a.layers});c.layergroup=e;c.target=a.target;c.view=void 0!==a.view?a.view:new uc;var e=Nf,f;void 0!==a.renderer?Array.isArray(a.renderer)?f=a.renderer:\"string\"===typeof a.renderer?f=[a.renderer]:L(!1,46):f=dk;var g,h;g=0;for(h=f.length;g<h;++g){var k=f[g];\r\nif(\"canvas\"==k){if(qe){e=Ri;break}}else if(\"dom\"==k){e=Yi;break}else if(\"webgl\"==k&&je){e=ak;break}}void 0!==a.controls?Array.isArray(a.controls)?f=new cd(a.controls.slice()):(L(a.controls instanceof cd,47),f=a.controls):f=ee();if(void 0!==a.interactions)Array.isArray(a.interactions)?g=new cd(a.interactions.slice()):(L(a.interactions instanceof cd,48),g=a.interactions);else{g={};h=new cd;k=new $f;(void 0!==g.altShiftDragRotate?g.altShiftDragRotate:1)&&h.push(new vg);(void 0!==g.doubleClickZoom?g.doubleClickZoom:\r\n1)&&h.push(new fg({delta:g.zoomDelta,duration:g.zoomDuration}));(void 0!==g.dragPan?g.dragPan:1)&&h.push(new qg({kinetic:k}));(void 0!==g.pinchRotate?g.pinchRotate:1)&&h.push(new Pg);(void 0!==g.pinchZoom?g.pinchZoom:1)&&h.push(new Tg({duration:g.zoomDuration}));if(void 0!==g.keyboard?g.keyboard:1)h.push(new Jg),h.push(new Lg({delta:g.zoomDelta,duration:g.zoomDuration}));(void 0!==g.mouseWheelZoom?g.mouseWheelZoom:1)&&h.push(new Ng({duration:g.zoomDuration}));(void 0!==g.shiftDragZoom?g.shiftDragZoom:\r\n1)&&h.push(new Ig({duration:g.zoomDuration}));g=h}void 0!==a.overlays?Array.isArray(a.overlays)?a=new cd(a.overlays.slice()):(L(a.overlays instanceof cd,49),a=a.overlays):a=new cd;return{controls:f,interactions:g,keyboardEventTarget:b,logos:d,overlays:a,xe:e,values:c}}Ib(bh);Ib(ih);ih.forEach(function(a){bh.forEach(function(b){Jb(a,b,ch);Jb(b,a,dh)})});function gk(a){V.call(this);this.j=a.id;this.i=void 0!==a.insertFirst?a.insertFirst:!0;this.s=void 0!==a.stopEvent?a.stopEvent:!0;this.c=document.createElement(\"DIV\");this.c.className=\"ol-overlay-container\";this.c.style.position=\"absolute\";this.autoPan=void 0!==a.autoPan?a.autoPan:!1;this.g=void 0!==a.autoPanAnimation?a.autoPanAnimation:{};this.h=void 0!==a.autoPanMargin?a.autoPanMargin:20;this.a={lb:\"\",sb:\"\",wb:\"\",xb:\"\",visible:!0};this.f=null;R(this,La(\"element\"),this.td,this);R(this,La(\"map\"),\r\nthis.Ad,this);R(this,La(\"offset\"),this.Bd,this);R(this,La(\"position\"),this.Dd,this);R(this,La(\"positioning\"),this.Ed,this);void 0!==a.element&&this.set(\"element\",a.element);this.set(\"offset\",void 0!==a.offset?a.offset:[0,0]);this.set(\"positioning\",void 0!==a.positioning?a.positioning:\"top-left\");void 0!==a.position&&this.Ac(a.position)}B(gk,V);n=gk.prototype;n.Pa=function(){return this.j};n.td=function(){for(var a=this.c;a.lastChild;)a.removeChild(a.lastChild);(a=this.get(\"element\"))&&this.c.appendChild(a)};\r\nn.Ad=function(){this.f&&(Sd(this.c),M(this.f),this.f=null);var a=this.get(\"map\");a&&(this.f=R(a,\"postrender\",this.render,this),hk(this),a=this.s?a.j:a.s,this.i?a.insertBefore(this.c,a.childNodes[0]||null):a.appendChild(this.c))};n.render=function(){hk(this)};n.Bd=function(){hk(this)};\r\nn.Dd=function(){hk(this);if(void 0!==this.get(\"position\")&&this.autoPan){var a=this.get(\"map\");if(void 0!==a&&a.Ra()){var b=ik(a.Ra(),a.Ta()),c=this.get(\"element\"),d=c.offsetWidth,e=c.currentStyle||K.getComputedStyle(c),d=d+(parseInt(e.marginLeft,10)+parseInt(e.marginRight,10)),e=c.offsetHeight,f=c.currentStyle||K.getComputedStyle(c),e=e+(parseInt(f.marginTop,10)+parseInt(f.marginBottom,10)),g=ik(c,[d,e]),c=this.h;hb(b,g)||(d=g[0]-b[0],e=b[2]-g[2],f=g[1]-b[1],g=b[3]-g[3],b=[0,0],0>d?b[0]=d-c:0>e&&\r\n(b[0]=Math.abs(e)+c),0>f?b[1]=f-c:0>g&&(b[1]=Math.abs(g)+c),0===b[0]&&0===b[1])||(c=a.U().qa(),d=ug(a,c),b=[d[0]+b[0],d[1]+b[1]],this.g&&(this.g.source=c,a.oa(Dc(this.g))),a.U().xa(a.Ba(b)))}}};n.Ed=function(){hk(this)};n.setMap=function(a){this.set(\"map\",a)};n.Ac=function(a){this.set(\"position\",a)};function ik(a,b){var c=a.getBoundingClientRect(),d=c.left+K.pageXOffset,c=c.top+K.pageYOffset;return[d,c,d+b[0],c+b[1]]}\r\nfunction jk(a,b){a.a.visible!==b&&(a.c.style.display=b?\"\":\"none\",a.a.visible=b)}\r\nfunction hk(a){var b=a.get(\"map\"),c=a.get(\"position\");if(void 0!==b&&b.c&&void 0!==c){var c=ug(b,c),d=b.Ta(),b=a.c.style,e=a.get(\"offset\"),f=a.get(\"positioning\"),g=e[0],e=e[1];if(\"bottom-right\"==f||\"center-right\"==f||\"top-right\"==f)\"\"!==a.a.sb&&(a.a.sb=b.left=\"\"),g=Math.round(d[0]-c[0]-g)+\"px\",a.a.wb!=g&&(a.a.wb=b.right=g);else{\"\"!==a.a.wb&&(a.a.wb=b.right=\"\");if(\"bottom-center\"==f||\"center-center\"==f||\"top-center\"==f)g-=a.c.offsetWidth/2;g=Math.round(c[0]+g)+\"px\";a.a.sb!=g&&(a.a.sb=b.left=g)}if(\"bottom-left\"==\r\nf||\"bottom-center\"==f||\"bottom-right\"==f)\"\"!==a.a.xb&&(a.a.xb=b.top=\"\"),c=Math.round(d[1]-c[1]-e)+\"px\",a.a.lb!=c&&(a.a.lb=b.bottom=c);else{\"\"!==a.a.lb&&(a.a.lb=b.bottom=\"\");if(\"center-left\"==f||\"center-center\"==f||\"center-right\"==f)e-=a.c.offsetHeight/2;c=Math.round(c[1]+e)+\"px\";a.a.xb!=c&&(a.a.xb=b.top=c)}jk(a,!0)}else jk(a,!1)};function kk(a){V.call(this);this.g=void 0;this.a=\"geometry\";this.h=null;this.f=void 0;this.c=null;R(this,La(this.a),this.qb,this);void 0!==a&&(a instanceof Wb||!a?lk(this,a):this.l(a))}B(kk,V);n=kk.prototype;n.clone=function(){var a=new kk(this.Ea());mk(a,this.a);var b=this.S();b&&lk(a,b.clone());if(b=this.h)a.h=b,a.f=b?nk(b):void 0,a.w();return a};n.S=function(){return this.get(this.a)};n.Pa=function(){return this.g};n.ud=function(){this.w()};\r\nn.qb=function(){this.c&&(M(this.c),this.c=null);var a=this.S();a&&(this.c=R(a,\"change\",this.ud,this));this.w()};function lk(a,b){a.set(a.a,b)}function mk(a,b){ya(a,La(a.a),a.qb,a);a.a=b;R(a,La(a.a),a.qb,a);a.qb()}function nk(a){if(\"function\"!==typeof a){var b;Array.isArray(a)?b=a:(L(a instanceof yh,41),b=[a]);a=function(){return b}}return a};function ok(a,b,c){return function(d,e,f){var g=new XMLHttpRequest;g.open(\"GET\",\"function\"===typeof a?a(d,e,f):a,!0);\"arraybuffer\"==b.$()&&(g.responseType=\"arraybuffer\");g.onload=function(){if(!g.status||200<=g.status&&300>g.status){var a=b.$(),d;\"json\"==a||\"text\"==a?d=g.responseText:\"xml\"==a?(d=g.responseXML,d||(a=g.responseText,d=(new DOMParser).parseFromString(a,\"application/xml\"))):\"arraybuffer\"==a&&(d=g.response);d&&c.call(this,b.a(d,{featureProjection:f}),b.c(pk(d)))}}.bind(this);g.send()}}\r\nfunction qk(a,b){return ok(a,b,function(a){this.Gb(a)})};function rk(){this.defaultDataProjection=null}function sk(a,b,c){var d;c&&(d={dataProjection:c.dataProjection?c.dataProjection:a.c(pk(b)),featureProjection:c.featureProjection});var e;d&&(e={featureProjection:d.featureProjection,dataProjection:d.dataProjection?d.dataProjection:a.defaultDataProjection,rightHanded:d.rightHanded},d.decimals&&(e.decimals=d.decimals));return e}\r\nfunction tk(a,b){var c=b?Hb(b.featureProjection):null,d=b?Hb(b.dataProjection):null;if(c&&d&&!Tb(c,d))if(a instanceof Wb)c=a.transform(d,c);else{d=Ub(d,c);c=[a[0],a[1],a[0],a[3],a[2],a[1],a[2],a[3]];d(c,c,2);var e=[c[0],c[2],c[4],c[6]],f=[c[1],c[3],c[5],c[7]],c=Math.min.apply(null,e),d=Math.min.apply(null,f),e=Math.max.apply(null,e),f=Math.max.apply(null,f),c=ib(c,d,e,f,void 0)}else c=a;return c};function uk(){this.defaultDataProjection=null}B(uk,rk);function pk(a){return\"string\"===typeof a?(a=JSON.parse(a))?a:null:null!==a?a:null}uk.prototype.$=function(){return\"json\"};uk.prototype.g=function(a,b){return this.b(pk(a),sk(this,a,b))};uk.prototype.a=function(a,b){return this.h(pk(a),sk(this,a,b))};function vk(a,b,c,d,e){var f=NaN,g=NaN,h=(c-b)/d;if(0!==h)if(1==h)f=a[b],g=a[b+1];else if(2==h)f=.5*a[b]+.5*a[b+d],g=.5*a[b+1]+.5*a[b+d+1];else{var g=a[b],h=a[b+1],k=0,f=[0],l;for(l=b+d;l<c;l+=d){var m=a[l],p=a[l+1],k=k+Math.sqrt((m-g)*(m-g)+(p-h)*(p-h));f.push(k);g=m;h=p}c=.5*k;k=0;l=f.length;for(m=!1;k<l;)g=k+(l-k>>1),h=+Ma(f[g],c),0>h?k=g+1:(l=g,m=!h);g=m?k:~k;0>g?(c=(c-f[-g-2])/(f[-g-1]-f[-g-2]),b+=(-g-2)*d,f=a[b],f+=c*(a[b+d]-f),g=a[b+1],g+=c*(a[b+d+1]-g)):(f=a[b+g*d],g=a[b+g*d+1])}return e?\r\n(e[0]=f,e[1]=g,e):[f,g]};function wk(a,b){Yb.call(this);this.a=null;this.h=-1;this.ea(a,b)}B(wk,Yb);n=wk.prototype;n.clone=function(){var a=new wk(null);$b(a,this.c,this.o.slice());a.w();return a};n.za=function(){return ec(this.o,0,this.o.length,this.A)};function Nh(a){if(a.h!=a.b){var b;b=vk(a.o,0,a.o.length,a.A,a.a);a.a=b;a.h=a.b}return a.a}n.Qa=function(a){var b=[];b.length=gc(this.o,0,this.o.length,this.A,a,b,0);a=new wk(null);$b(a,\"XY\",b);a.w();return a};n.$=function(){return\"LineString\"};\r\nn.ea=function(a,b){a?(ac(this,b,a,1),this.o||(this.o=[]),this.o.length=cc(this.o,0,a,this.A)):$b(this,\"XY\",null);this.w()};function xk(a,b){Yb.call(this);this.ua=[];this.ea(a,b)}B(xk,Yb);n=xk.prototype;n.clone=function(){var a=new xk(null),b=this.ua.slice();$b(a,this.c,this.o.slice());a.ua=b;a.w();return a};n.za=function(){return fc(this.o,0,this.ua,this.A)};function Oh(a){var b=[],c=a.o,d=0,e=a.ua;a=a.A;var f,g;f=0;for(g=e.length;f<g;++f){var h=e[f],d=vk(c,d,h,a);Pa(b,d);d=h}return b}\r\nn.Qa=function(a){var b=[],c=[],d=this.o,e=this.ua,f=this.A,g=0,h=0,k,l;k=0;for(l=e.length;k<l;++k){var m=e[k],h=gc(d,g,m,f,a,b,h);c.push(h);g=m}b.length=h;a=new xk(null);$b(a,\"XY\",b);a.ua=c;a.w();return a};n.$=function(){return\"MultiLineString\"};n.ea=function(a,b){if(a){ac(this,b,a,2);this.o||(this.o=[]);var c=dc(this.o,0,a,this.A,this.ua);this.o.length=0===c.length?0:c[c.length-1]}else c=this.ua,$b(this,\"XY\",null),this.ua=c;this.w()};function yk(a,b){Yb.call(this);this.ea(a,b)}B(yk,Yb);yk.prototype.clone=function(){var a=new yk(null);$b(a,this.c,this.o.slice());a.w();return a};yk.prototype.za=function(){return ec(this.o,0,this.o.length,this.A)};yk.prototype.$=function(){return\"MultiPoint\"};yk.prototype.ea=function(a,b){a?(ac(this,b,a,1),this.o||(this.o=[]),this.o.length=cc(this.o,0,a,this.A)):$b(this,\"XY\",null);this.w()};function zk(a,b){Yb.call(this);this.a=[];this.v=-1;this.u=null;this.B=-1;this.h=null;this.ea(a,b)}B(zk,Yb);n=zk.prototype;n.clone=function(){for(var a=new zk(null),b=this.a.length,c=Array(b),d=0;d<b;++d)c[d]=this.a[d].slice();$b(a,this.c,this.o.slice());a.a=c;a.w();return a};n.za=function(a){var b;void 0!==a?(b=Ph(this).slice(),pc(b,this.a,this.A,a)):b=this.o;a=b;b=this.a;var c=this.A,d=0,e=[],f=0,g,h;g=0;for(h=b.length;g<h;++g){var k=b[g];e[f++]=fc(a,d,k,c,e[f]);d=k[k.length-1]}e.length=f;return e};\r\nfunction Qh(a){if(a.v!=a.b){var b=a.o,c=a.a,d=a.A,e=0,f=[],g,h,k;g=0;for(h=c.length;g<h;++g){var l=c[g];k=b;var m=l[0],p=d,q=jb(void 0);k=nb(q,k,e,m,p);f.push((k[0]+k[2])/2,(k[1]+k[3])/2);e=l[l.length-1]}b=Ph(a);c=a.a;d=a.A;g=0;h=[];l=0;for(k=c.length;l<k;++l)e=c[l],h=lc(b,g,e,d,f,2*l,h),g=e[e.length-1];a.u=h;a.v=a.b}return a.u}\r\nfunction Ph(a){if(a.B!=a.b){var b=a.o,c;a:{c=a.a;var d,e;d=0;for(e=c.length;d<e;++d)if(!nc(b,c[d],a.A,void 0)){c=!1;break a}c=!0}c?a.h=b:(a.h=b.slice(),a.h.length=pc(a.h,a.a,a.A));a.B=a.b}return a.h}n.Qa=function(a){var b=[],c=[],d=this.o,e=this.a,f=this.A;a=Math.sqrt(a);var g=0,h=0,k,l;k=0;for(l=e.length;k<l;++k){var m=e[k],p=[],h=hc(d,g,m,f,a,b,h,p);c.push(p);g=m[m.length-1]}b.length=h;d=new zk(null);$b(d,\"XY\",b);d.a=c;d.w();return d};n.$=function(){return\"MultiPolygon\"};\r\nn.ea=function(a,b){if(a){ac(this,b,a,3);this.o||(this.o=[]);var c=this.o,d=this.A,e=this.a,f=0,e=e?e:[],g=0,h,k;h=0;for(k=a.length;h<k;++h)f=dc(c,f,a[h],d,e[g]),e[g++]=f,f=f[f.length-1];e.length=g;0===e.length?this.o.length=0:(c=e[e.length-1],this.o.length=0===c.length?0:c[c.length-1])}else c=this.a,$b(this,\"XY\",null),this.a=c;this.w()};function Ak(a){a=a?a:{};this.defaultDataProjection=null;this.f=a.geometryName}B(Ak,uk);function Bk(a){var b=\"XY\";!0===a.hasZ&&!0===a.hasM?b=\"XYZM\":!0===a.hasZ?b=\"XYZ\":!0===a.hasM&&(b=\"XYM\");return b}\r\nvar Ck={Point:function(a){return void 0!==a.m&&void 0!==a.z?new jc([a.x,a.y,a.z,a.m],\"XYZM\"):void 0!==a.z?new jc([a.x,a.y,a.z],\"XYZ\"):void 0!==a.m?new jc([a.x,a.y,a.m],\"XYM\"):new jc([a.x,a.y])},LineString:function(a){return new wk(a.paths[0],Bk(a))},Polygon:function(a){return new qc(a.rings,Bk(a))},MultiPoint:function(a){return new yk(a.points,Bk(a))},MultiLineString:function(a){return new xk(a.paths,Bk(a))},MultiPolygon:function(a){return new zk(a.rings,Bk(a))}};\r\nAk.prototype.b=function(a,b){var c;if(c=a.geometry){var d;if(\"number\"===typeof c.x&&\"number\"===typeof c.y)d=\"Point\";else if(c.points)d=\"MultiPoint\";else if(c.paths)d=1===c.paths.length?\"LineString\":\"MultiLineString\";else if(c.rings){var e=c.rings,f=Bk(c),g=[];d=[];var h,k;h=0;for(k=e.length;h<k;++h){var l=Oa(e[h]);mc(l,0,l.length,f.length)?g.push([e[h]]):d.push(e[h])}for(;d.length;){e=d.shift();f=!1;for(h=g.length-1;0<=h;h--)if(hb((new ic(g[h][0])).G(),(new ic(e)).G())){g[h].push(e);f=!0;break}f||\r\ng.push([e.reverse()])}c=pa({},c);1===g.length?(d=\"Polygon\",c.rings=g[0]):(d=\"MultiPolygon\",c.rings=g)}c=tk((0,Ck[d])(c),b)}else c=null;g=new kk;this.f&&mk(g,this.f);lk(g,c);b&&b.Tb&&a.attributes[b.Tb]&&(g.g=a.attributes[b.Tb],g.w());a.attributes&&g.l(a.attributes);return g};Ak.prototype.h=function(a,b){var c=b?b:{};if(a.features){var d=[],e=a.features,f,g;c.Tb=a.objectIdFieldName;f=0;for(g=e.length;f<g;++f)d.push(this.b(e[f],c));return d}return[this.b(a,c)]};\r\nAk.prototype.c=function(a){return a.spatialReference&&a.spatialReference.wkid?Hb(\"EPSG:\"+a.spatialReference.wkid):null};function Dk(a){Wb.call(this);this.a=a?a:null;Ek(this)}B(Dk,Wb);function Fk(a){var b,c;if(a.a)for(b=0,c=a.a.length;b<c;++b)ya(a.a[b],\"change\",a.w,a)}function Ek(a){var b,c;if(a.a)for(b=0,c=a.a.length;b<c;++b)R(a.a[b],\"change\",a.w,a)}n=Dk.prototype;n.clone=function(){var a=new Dk(null),b=this.a,c=[],d,e;d=0;for(e=b.length;d<e;++d)c.push(b[d].clone());Fk(a);a.a=c;Ek(a);a.w();return a};n.mb=function(a){jb(a);for(var b=this.a,c=0,d=b.length;c<d;++c)mb(a,b[c].G());return a};\r\nn.Rb=function(a){this.i!=this.b&&(qa(this.f),this.g=0,this.i=this.b);if(0>a||0!==this.g&&a<this.g)return this;var b=a.toString();if(this.f.hasOwnProperty(b))return this.f[b];var c=[],d=this.a,e=!1,f,g;f=0;for(g=d.length;f<g;++f){var h=d[f],k=h.Rb(a);c.push(k);k!==h&&(e=!0)}if(e)return a=new Dk(null),Fk(a),a.a=c,Ek(a),a.w(),this.f[b]=a;this.g=a;return this};n.$=function(){return\"GeometryCollection\"};n.rotate=function(a,b){for(var c=this.a,d=0,e=c.length;d<e;++d)c[d].rotate(a,b);this.w()};\r\nn.scale=function(a,b,c){c||(c=tb(this.G()));for(var d=this.a,e=0,f=d.length;e<f;++e)d[e].scale(a,b,c);this.w()};n.Hb=function(a){var b=this.a,c,d;c=0;for(d=b.length;c<d;++c)b[c].Hb(a);this.w()};n.translate=function(a,b){var c=this.a,d,e;d=0;for(e=c.length;d<e;++d)c[d].translate(a,b);this.w()};n.R=function(){Fk(this);Wb.prototype.R.call(this)};function Gk(a){a=a?a:{};this.defaultDataProjection=null;this.defaultDataProjection=Hb(a.defaultDataProjection?a.defaultDataProjection:\"EPSG:4326\");this.f=a.geometryName}B(Gk,uk);function Hk(a,b){return a?tk((0,Ik[a.type])(a),b):null}\r\nvar Ik={Point:function(a){return new jc(a.coordinates)},LineString:function(a){return new wk(a.coordinates)},Polygon:function(a){return new qc(a.coordinates)},MultiPoint:function(a){return new yk(a.coordinates)},MultiLineString:function(a){return new xk(a.coordinates)},MultiPolygon:function(a){return new zk(a.coordinates)},GeometryCollection:function(a,b){var c=a.geometries.map(function(a){return Hk(a,b)});return new Dk(c)}};\r\nGk.prototype.b=function(a,b){var c=Hk(a.geometry,b),d=new kk;this.f&&mk(d,this.f);lk(d,c);void 0!==a.id&&(d.g=a.id,d.w());a.properties&&d.l(a.properties);return d};Gk.prototype.h=function(a,b){var c;if(\"Feature\"==a.type)c=[this.b(a,b)];else if(\"FeatureCollection\"==a.type){c=[];var d=a.features,e,f;e=0;for(f=d.length;e<f;++e)c.push(this.b(d[e],b))}else L(!1,35);return c};\r\nGk.prototype.c=function(a){a=a.crs;var b;a?\"name\"==a.type?b=Hb(a.properties.name):\"EPSG\"==a.type?b=Hb(\"EPSG:\"+a.properties.code):L(!1,36):b=this.defaultDataProjection;return b};function Jk(a,b,c,d,e,f){Ga.call(this);this.l=null;this.b=a?a:new Image;null!==d&&(this.b.crossOrigin=d);this.f=f?document.createElement(\"CANVAS\"):null;this.h=f;this.g=null;this.c=e;this.a=c;this.s=b;this.i=!1;2==this.c&&Kk(this)}B(Jk,Ga);function Kk(a){var b=Md(1,1);try{b.drawImage(a.b,0,0),b.getImageData(0,0,1,1)}catch(c){a.i=!0}}Jk.prototype.j=function(){this.c=3;this.g.forEach(M);this.g=null;U(this,\"change\")};\r\nJk.prototype.v=function(){this.c=2;this.a&&(this.b.width=this.a[0],this.b.height=this.a[1]);this.a=[this.b.width,this.b.height];this.g.forEach(M);this.g=null;Kk(this);if(!this.i&&null!==this.h){this.f.width=this.b.width;this.f.height=this.b.height;var a=this.f.getContext(\"2d\");a.drawImage(this.b,0,0);for(var b=a.getImageData(0,0,this.b.width,this.b.height),c=b.data,d=this.h[0]/255,e=this.h[1]/255,f=this.h[2]/255,g=0,h=c.length;g<h;g+=4)c[g]*=d,c[g+1]*=e,c[g+2]*=f;a.putImageData(b,0,0)}U(this,\"change\")};\r\nJk.prototype.Z=function(){return this.f?this.f:this.b};Jk.prototype.load=function(){if(0==this.c){this.c=1;this.g=[R(this.b,\"error\",this.j,this,!0),R(this.b,\"load\",this.v,this,!0)];try{this.b.src=this.s}catch(a){this.j()}}};function Lk(a){a=a||{};this.g=void 0!==a.anchor?a.anchor:[.5,.5];this.f=null;this.a=void 0!==a.anchorOrigin?a.anchorOrigin:\"top-left\";this.l=void 0!==a.anchorXUnits?a.anchorXUnits:\"fraction\";this.i=void 0!==a.anchorYUnits?a.anchorYUnits:\"fraction\";var b=void 0!==a.crossOrigin?a.crossOrigin:null,c=void 0!==a.img?a.img:null,d=void 0!==a.imgSize?a.imgSize:null,e=a.src;L(!(void 0!==e&&c),4);L(!c||c&&d,5);void 0!==e&&0!==e.length||!c||(e=c.src||J(c).toString());L(void 0!==e&&0<e.length,6);var f=void 0!==\r\na.src?0:2,g;void 0!==a.color?(g=a.color,g=Array.isArray(g)?g:pd(g)):g=null;var h=Af.get(e,b,g);h||(h=new Jk(c,e,d,b,f,g),Af.set(e,b,g,h));this.b=h;this.u=void 0!==a.offset?a.offset:[0,0];this.c=void 0!==a.offsetOrigin?a.offsetOrigin:\"top-left\";this.h=null;this.j=void 0!==a.size?a.size:null;oh.call(this,{opacity:void 0!==a.opacity?a.opacity:1,rotation:void 0!==a.rotation?a.rotation:0,scale:void 0!==a.scale?a.scale:1,snapToPixel:void 0!==a.snapToPixel?a.snapToPixel:!0,rotateWithView:void 0!==a.rotateWithView?\r\na.rotateWithView:!1})}B(Lk,oh);n=Lk.prototype;n.eb=function(){if(this.f)return this.f;var a=this.g,b=this.Ka();if(\"fraction\"==this.l||\"fraction\"==this.i){if(!b)return null;a=this.g.slice();\"fraction\"==this.l&&(a[0]*=b[0]);\"fraction\"==this.i&&(a[1]*=b[1])}if(\"top-left\"!=this.a){if(!b)return null;a===this.g&&(a=this.g.slice());if(\"top-right\"==this.a||\"bottom-right\"==this.a)a[0]=-a[0]+b[0];if(\"bottom-left\"==this.a||\"bottom-right\"==this.a)a[1]=-a[1]+b[1]}return this.f=a};n.Z=function(a){return this.b.Z(a)};\r\nn.Ob=function(){return this.b.a};n.ib=function(){return this.b.c};n.ub=function(){var a=this.b;if(!a.l)if(a.i){var b=a.a[0],c=a.a[1],d=Md(b,c);d.fillRect(0,0,b,c);a.l=d.canvas}else a.l=a.b;return a.l};n.pa=function(){if(this.h)return this.h;var a=this.u;if(\"top-left\"!=this.c){var b=this.Ka(),c=this.b.a;if(!b||!c)return null;a=a.slice();if(\"top-right\"==this.c||\"bottom-right\"==this.c)a[0]=c[0]-b[0]-a[0];if(\"bottom-left\"==this.c||\"bottom-right\"==this.c)a[1]=c[1]-b[1]-a[1]}return this.h=a};\r\nn.Ka=function(){return this.j?this.j:this.b.a};n.Vb=function(a,b){return R(this.b,\"change\",a,b)};n.load=function(){this.b.load()};n.bc=function(a,b){ya(this.b,\"change\",a,b)};function Mk(a,b,c){Yb.call(this);Nk(this,a,b?b:0,c)}B(Mk,Yb);Mk.prototype.clone=function(){var a=new Mk(null);$b(a,this.c,this.o.slice());a.w();return a};Mk.prototype.mb=function(a){var b=this.o,c=b[this.A]-b[0];return ib(b[0]-c,b[1]-c,b[0]+c,b[1]+c,a)};Mk.prototype.$=function(){return\"Circle\"};function Nk(a,b,c,d){if(b){ac(a,d,b,0);a.o||(a.o=[]);d=a.o;b=bc(d,b);d[b++]=d[0]+c;var e;c=1;for(e=a.A;c<e;++c)d[b++]=d[c];d.length=b}else $b(a,\"XY\",null);a.w()};function Ok(a,b,c,d,e){Sf.call(this,a,b);this.g=c;this.a=new Image;null!==d&&(this.a.crossOrigin=d);this.c={};this.f=null;this.h=e}B(Ok,Sf);n=Ok.prototype;n.R=function(){1==this.state&&Pk(this);this.b&&Da(this.b);this.state=5;Tf(this);Sf.prototype.R.call(this)};n.Z=function(a){if(void 0!==a){var b=J(a);if(b in this.c)return this.c[b];a=sa(this.c)?this.a:this.a.cloneNode(!1);return this.c[b]=a}return this.a};n.getKey=function(){return this.g};n.ce=function(){this.state=3;Pk(this);Tf(this)};\r\nn.de=function(){this.state=this.a.naturalWidth&&this.a.naturalHeight?2:4;Pk(this);Tf(this)};n.load=function(){if(0==this.state||3==this.state)this.state=1,Tf(this),this.f=[R(this.a,\"error\",this.ce,this,!0),R(this.a,\"load\",this.de,this,!0)],this.h(this,this.g)};function Pk(a){a.f.forEach(M);a.f=null};function Qk(){return[[-Infinity,-Infinity,Infinity,Infinity]]};var Rk;\r\n(function(){var a={},b={Aa:a};(function(c){if(\"object\"===typeof a&&\"undefined\"!==typeof b)b.Aa=c();else{var d;\"undefined\"!==typeof window?d=window:\"undefined\"!==typeof global?d=global:\"undefined\"!==typeof self?d=self:d=this;d.Re=c()}})(function(){return function d(a,b,g){function h(l,p){if(!b[l]){if(!a[l]){var q=\"function\"==typeof require&&require;if(!p&&q)return q(l,!0);if(k)return k(l,!0);q=Error(\"Cannot find module '\"+l+\"'\");throw q.code=\"MODULE_NOT_FOUND\",q;}q=b[l]={Aa:{}};a[l][0].call(q.Aa,function(b){var d=\r\na[l][1][b];return h(d?d:b)},q,q.Aa,d,a,b,g)}return b[l].Aa}for(var k=\"function\"==typeof require&&require,l=0;l<g.length;l++)h(g[l]);return h}({1:[function(a,b){function f(a,b){if(!(this instanceof f))return new f(a,b);this.Db=Math.max(4,a||9);this.gc=Math.max(2,Math.ceil(.4*this.Db));b&&this.ad(b);this.clear()}function g(a,b){h(a,0,a.children.length,b,a)}function h(a,b,d,e,g){g||(g=r(null));g.H=Infinity;g.J=Infinity;g.I=-Infinity;g.L=-Infinity;for(var f;b<d;b++)f=a.children[b],k(g,a.ga?e(f):f);return g}\r\nfunction k(a,b){a.H=Math.min(a.H,b.H);a.J=Math.min(a.J,b.J);a.I=Math.max(a.I,b.I);a.L=Math.max(a.L,b.L)}function l(a,b){return a.H-b.H}function m(a,b){return a.J-b.J}function p(a){return(a.I-a.H)*(a.L-a.J)}function q(a){return a.I-a.H+(a.L-a.J)}function u(a,b){return a.H<=b.H&&a.J<=b.J&&b.I<=a.I&&b.L<=a.L}function w(a,b){return b.H<=a.I&&b.J<=a.L&&b.I>=a.H&&b.L>=a.J}function r(a){return{children:a,height:1,ga:!0,H:Infinity,J:Infinity,I:-Infinity,L:-Infinity}}function x(a,b,d,e,g){for(var f=[b,d],\r\nh;f.length;)d=f.pop(),b=f.pop(),d-b<=e||(h=b+Math.ceil((d-b)/e/2)*e,D(a,h,b,d,g),f.push(b,h,h,d))}b.Aa=f;var D=a(\"quickselect\");f.prototype={all:function(){return this.cc(this.data,[])},search:function(a){var b=this.data,d=[],e=this.la;if(!w(a,b))return d;for(var g=[],f,h,k,l;b;){f=0;for(h=b.children.length;f<h;f++)k=b.children[f],l=b.ga?e(k):k,w(a,l)&&(b.ga?d.push(k):u(a,l)?this.cc(k,d):g.push(k));b=g.pop()}return d},load:function(a){if(!a||!a.length)return this;if(a.length<this.gc){for(var b=0,\r\nd=a.length;b<d;b++)this.Ha(a[b]);return this}a=this.ec(a.slice(),0,a.length-1,0);this.data.children.length?this.data.height===a.height?this.hc(this.data,a):(this.data.height<a.height&&(b=this.data,this.data=a,a=b),this.fc(a,this.data.height-a.height-1,!0)):this.data=a;return this},Ha:function(a){a&&this.fc(a,this.data.height-1);return this},clear:function(){this.data=r([]);return this},remove:function(a,b){if(!a)return this;for(var d=this.data,e=this.la(a),g=[],f=[],h,k,l,m;d||g.length;){d||(d=g.pop(),\r\nk=g[g.length-1],h=f.pop(),m=!0);if(d.ga){a:{l=a;var p=d.children,q=b;if(q){for(var r=0;r<p.length;r++)if(q(l,p[r])){l=r;break a}l=-1}else l=p.indexOf(l)}if(-1!==l){d.children.splice(l,1);g.push(d);this.$c(g);break}}m||d.ga||!u(d,e)?k?(h++,d=k.children[h],m=!1):d=null:(g.push(d),f.push(h),h=0,k=d,d=d.children[0])}return this},la:function(a){return a},Kb:l,Lb:m,toJSON:function(){return this.data},cc:function(a,b){for(var d=[];a;)a.ga?b.push.apply(b,a.children):d.push.apply(d,a.children),a=d.pop();return b},\r\nec:function(a,b,d,e){var f=d-b+1,h=this.Db,k;if(f<=h)return k=r(a.slice(b,d+1)),g(k,this.la),k;e||(e=Math.ceil(Math.log(f)/Math.log(h)),h=Math.ceil(f/Math.pow(h,e-1)));k=r([]);k.ga=!1;k.height=e;var f=Math.ceil(f/h),h=f*Math.ceil(Math.sqrt(h)),l,m,p;for(x(a,b,d,h,this.Kb);b<=d;b+=h)for(m=Math.min(b+h-1,d),x(a,b,m,f,this.Lb),l=b;l<=m;l+=f)p=Math.min(l+f-1,m),k.children.push(this.ec(a,l,p,e-1));g(k,this.la);return k},Zc:function(a,b,d,e){for(var f,g,h,k,l,m,q,r;;){e.push(b);if(b.ga||e.length-1===d)break;\r\nq=r=Infinity;f=0;for(g=b.children.length;f<g;f++)h=b.children[f],l=p(h),m=(Math.max(h.I,a.I)-Math.min(h.H,a.H))*(Math.max(h.L,a.L)-Math.min(h.J,a.J))-l,m<r?(r=m,q=l<q?l:q,k=h):m===r&&l<q&&(q=l,k=h);b=k||b.children[0]}return b},fc:function(a,b,d){var e=this.la;d=d?a:e(a);var e=[],f=this.Zc(d,this.data,b,e);f.children.push(a);for(k(f,d);0<=b;)if(e[b].children.length>this.Db)this.bd(e,b),b--;else break;this.Wc(d,e,b)},bd:function(a,b){var d=a[b],e=d.children.length,f=this.gc;this.Xc(d,f,e);e=this.Yc(d,\r\nf,e);e=r(d.children.splice(e,d.children.length-e));e.height=d.height;e.ga=d.ga;g(d,this.la);g(e,this.la);b?a[b-1].children.push(e):this.hc(d,e)},hc:function(a,b){this.data=r([a,b]);this.data.height=a.height+1;this.data.ga=!1;g(this.data,this.la)},Yc:function(a,b,d){var e,f,g,k,l,m,q;l=m=Infinity;for(e=b;e<=d-b;e++)f=h(a,0,e,this.la),g=h(a,e,d,this.la),k=Math.max(0,Math.min(f.I,g.I)-Math.max(f.H,g.H))*Math.max(0,Math.min(f.L,g.L)-Math.max(f.J,g.J)),f=p(f)+p(g),k<l?(l=k,q=e,m=f<m?f:m):k===l&&f<m&&(m=\r\nf,q=e);return q},Xc:function(a,b,d){var e=a.ga?this.Kb:l,f=a.ga?this.Lb:m,g=this.dc(a,b,d,e);b=this.dc(a,b,d,f);g<b&&a.children.sort(e)},dc:function(a,b,d,e){a.children.sort(e);e=this.la;var f=h(a,0,b,e),g=h(a,d-b,d,e),l=q(f)+q(g),m,p;for(m=b;m<d-b;m++)p=a.children[m],k(f,a.ga?e(p):p),l+=q(f);for(m=d-b-1;m>=b;m--)p=a.children[m],k(g,a.ga?e(p):p),l+=q(g);return l},Wc:function(a,b,d){for(;0<=d;d--)k(b[d],a)},$c:function(a){for(var b=a.length-1,d;0<=b;b--)0===a[b].children.length?0<b?(d=a[b-1].children,\r\nd.splice(d.indexOf(a[b]),1)):this.clear():g(a[b],this.la)},ad:function(a){var b=[\"return a\",\" - b\",\";\"];this.Kb=new Function(\"a\",\"b\",b.join(a[0]));this.Lb=new Function(\"a\",\"b\",b.join(a[1]));this.la=new Function(\"a\",\"return {minX: a\"+a[0]+\", minY: a\"+a[1]+\", maxX: a\"+a[2]+\", maxY: a\"+a[3]+\"};\")}}},{quickselect:2}],2:[function(a,b){function f(a,b,d,e,q){d=d||0;e=e||a.length-1;for(q=q||h;e>d;){if(600<e-d){var u=e-d+1,w=b-d+1,r=Math.log(u),x=.5*Math.exp(2*r/3),r=.5*Math.sqrt(r*x*(u-x)/u)*(0>w-u/2?-1:\r\n1);f(a,b,Math.max(d,Math.floor(b-w*x/u+r)),Math.min(e,Math.floor(b+(u-w)*x/u+r)),q)}u=a[b];w=d;x=e;g(a,d,b);for(0<q(a[e],u)&&g(a,d,e);w<x;){g(a,w,x);w++;for(x--;0>q(a[w],u);)w++;for(;0<q(a[x],u);)x--}0===q(a[d],u)?g(a,d,x):(x++,g(a,x,e));x<=b&&(d=x+1);b<=x&&(e=x-1)}}function g(a,b,d){var e=a[b];a[b]=a[d];a[d]=e}function h(a,b){return a<b?-1:a>b?1:0}b.Aa=f},{}]},{},[1])(1)});Rk=b.Aa})();function Sk(a){this.b=Rk(a);this.a={}}n=Sk.prototype;n.Ha=function(a,b){var c={H:a[0],J:a[1],I:a[2],L:a[3],value:b};this.b.Ha(c);this.a[J(b)]=c};n.load=function(a,b){for(var c=Array(b.length),d=0,e=b.length;d<e;d++){var f=a[d],g=b[d],f={H:f[0],J:f[1],I:f[2],L:f[3],value:g};c[d]=f;this.a[J(g)]=f}this.b.load(c)};n.remove=function(a){a=J(a);var b=this.a[a];delete this.a[a];return null!==this.b.remove(b)};function Tk(a){return a.b.all().map(function(a){return a.value})}\r\nfunction Uk(a,b){return a.b.search({H:b[0],J:b[1],I:b[2],L:b[3]}).map(function(a){return a.value})}function Vk(a,b,c,d){return Wk(Uk(a,b),c,d)}function Wk(a,b,c){for(var d,e=0,f=a.length;e<f&&!(d=b.call(c,a[e]));e++);return d}n.clear=function(){this.b.clear();this.a={}};n.G=function(){var a=this.b.data;return[a.H,a.J,a.I,a.L]};function Xk(a){a=a||{};vf.call(this,{attributions:a.attributions,logo:a.logo,projection:void 0,state:\"ready\",wrapX:void 0!==a.wrapX?a.wrapX:!0});this.j=I;this.s=a.format;this.u=void 0==a.overlaps?!0:a.overlaps;this.B=a.url;void 0!==a.loader?this.j=a.loader:void 0!==this.B&&(L(this.s,7),this.j=qk(this.B,this.s));this.W=void 0!==a.strategy?a.strategy:Qk;var b=void 0!==a.useSpatialIndex?a.useSpatialIndex:!0;this.X=b?new Sk:null;this.v=new Sk;this.ka={};this.c={};this.f={};this.g={};this.a=null;var c,\r\nd;a.features instanceof cd?(c=a.features,d=c.a):Array.isArray(a.features)&&(d=a.features);b||void 0!==c||(c=new cd(d));void 0!==d&&Yk(this,d);void 0!==c&&Zk(this,c)}B(Xk,vf);n=Xk.prototype;n.Fb=function(a){var b=J(a).toString();if($k(this,b,a)){al(this,b,a);var c=a.S();c?(b=c.G(),this.X&&this.X.Ha(b,a)):this.ka[b]=a;U(this,new bl(\"addfeature\",a))}this.w()};function al(a,b,c){a.g[b]=[R(c,\"change\",a.vc,a),R(c,\"propertychange\",a.vc,a)]}\r\nfunction $k(a,b,c){var d=!0,e=c.Pa();void 0!==e?e.toString()in a.c?d=!1:a.c[e.toString()]=c:(L(!(b in a.f),30),a.f[b]=c);return d}n.Gb=function(a){Yk(this,a);this.w()};function Yk(a,b){var c,d,e,f,g=[],h=[],k=[];d=0;for(e=b.length;d<e;d++)f=b[d],c=J(f).toString(),$k(a,c,f)&&h.push(f);d=0;for(e=h.length;d<e;d++){f=h[d];c=J(f).toString();al(a,c,f);var l=f.S();l?(c=l.G(),g.push(c),k.push(f)):a.ka[c]=f}a.X&&a.X.load(g,k);d=0;for(e=h.length;d<e;d++)U(a,new bl(\"addfeature\",h[d]))}\r\nfunction Zk(a,b){var c=!1;R(a,\"addfeature\",function(a){c||(c=!0,b.push(a.feature),c=!1)});R(a,\"removefeature\",function(a){c||(c=!0,b.remove(a.feature),c=!1)});R(b,hd,function(a){c||(c=!0,this.Fb(a.element),c=!1)},a);R(b,id,function(a){if(!c){c=!0;a=a.element;var b=J(a).toString();b in this.ka?delete this.ka[b]:this.X&&this.X.remove(a);this.Zb(a);this.w();c=!1}},a);a.a=b}\r\nn.clear=function(a){if(a){for(var b in this.g)this.g[b].forEach(M);this.a||(this.g={},this.c={},this.f={})}else if(this.X){a=this.Zb;Wk(Tk(this.X),a,this);for(var c in this.ka)this.Zb(this.ka[c])}this.a&&this.a.clear();this.X&&this.X.clear();this.v.clear();this.ka={};U(this,new bl(\"clear\"));this.w()};n.nd=function(a,b){if(this.X)return Wk(Tk(this.X),a,b);if(this.a)return ed(this.a,a,b)};function Qi(a,b,c,d){a.X?Vk(a.X,b,c,d):a.a&&ed(a.a,c,d)}\r\nn.pd=function(){var a;this.a?a=this.a.a:this.X&&(a=Tk(this.X),sa(this.ka)||Pa(a,ra(this.ka)));return a};n.G=function(){return this.X.G()};\r\nn.vc=function(a){a=a.target;var b=J(a).toString(),c=a.S();if(c)if(c=c.G(),b in this.ka)delete this.ka[b],this.X&&this.X.Ha(c,a);else{if(this.X){var d=this.X,e=d.a[J(a)];lb([e.H,e.J,e.I,e.L],c)||(d.remove(a),d.Ha(c,a))}}else b in this.ka||(this.X&&this.X.remove(a),this.ka[b]=a);c=a.Pa();void 0!==c?(c=c.toString(),b in this.f?(delete this.f[b],this.c[c]=a):this.c[c]!==a&&(cl(this,a),this.c[c]=a)):b in this.f||(cl(this,a),this.f[b]=a);this.w();U(this,new bl(\"changefeature\",a))};\r\nfunction Pi(a,b,c,d){var e=a.v;b=a.W(b,c);var f,g;f=0;for(g=b.length;f<g;++f){var h=b[f];Vk(e,h,function(a){return hb(a.extent,h)})||(a.j.call(a,h,c,d),e.Ha(h,{extent:h.slice()}))}}n.Zb=function(a){var b=J(a).toString();this.g[b].forEach(M);delete this.g[b];var c=a.Pa();void 0!==c?delete this.c[c.toString()]:delete this.f[b];U(this,new bl(\"removefeature\",a))};function cl(a,b){for(var c in a.c)if(a.c[c]===b){delete a.c[c];break}}function bl(a,b){T.call(this,a);this.feature=b}B(bl,T);function dl(a,b){T.call(this,a);this.feature=b}B(dl,T);\r\nfunction el(a){ng.call(this,{handleDownEvent:fl,handleEvent:gl,handleUpEvent:hl});this.W=null;this.s=!1;this.Ga=a.source?a.source:null;this.ma=a.features?a.features:null;this.jd=a.snapTolerance?a.snapTolerance:12;this.P=a.type;this.c=il(this.P);this.wa=a.minPoints?a.minPoints:this.c===jl?3:2;this.va=a.maxPoints?a.maxPoints:Infinity;this.Ab=a.finishCondition?a.finishCondition:yb;var b=a.geometryFunction;if(!b)if(\"Circle\"===this.P)b=function(a,b){var c=b?b:new Mk([NaN,NaN]),g=a[0],h=a[1],k=g[0]-h[0],\r\ng=g[1]-h[1];Nk(c,a[0],Math.sqrt(k*k+g*g));return c};else{var c,b=this.c;b===kl?c=jc:b===ll?c=wk:b===jl&&(c=qc);b=function(a,b){var f=b;f?f.ea(a):f=new c(a);return f}}this.u=b;this.D=this.i=this.a=this.j=this.g=this.h=null;this.kd=a.clickTolerance?a.clickTolerance*a.clickTolerance:36;this.ba=new Y({source:new Xk({useSpatialIndex:!1,wrapX:a.wrapX?a.wrapX:!1}),style:a.style?a.style:ml()});this.Fa=a.geometryName;this.gd=a.condition?a.condition:jg;this.na=a.freehandCondition?a.freehandCondition:kg;R(this,\r\nLa(\"active\"),this.kb,this)}B(el,ng);function ml(){var a=Eh();return function(b){return a[b.S().$()]}}el.prototype.setMap=function(a){ng.prototype.setMap.call(this,a);this.kb()};function gl(a){this.c!==ll&&this.c!==jl||!this.na(a)||(this.s=!0);var b=!this.s;this.s&&a.type===qf?(nl(this,a),b=!1):a.type===pf?b=pl(this,a):a.type===jf&&(b=!1);return og.call(this,a)&&b}function fl(a){return this.gd(a)?(this.W=a.pixel,!0):this.s?(this.W=a.pixel,this.h||ql(this,a),!0):!1}\r\nfunction hl(a){this.s=!1;var b=this.W,c=a.pixel,d=b[0]-c[0],b=b[1]-c[1],c=!0;d*d+b*b<=this.kd&&(pl(this,a),this.h?this.c===rl?sl(this):tl(this,a)?this.Ab(a)&&sl(this):nl(this,a):(ql(this,a),this.c===kl&&sl(this)),c=!1);return c}\r\nfunction pl(a,b){if(a.h){var c=b.coordinate,d=a.g.S(),e;a.c===kl?e=a.a:a.c===jl?(e=a.a[0],e=e[e.length-1],tl(a,b)&&(c=a.h.slice())):(e=a.a,e=e[e.length-1]);e[0]=c[0];e[1]=c[1];a.u(a.a,d);a.j&&a.j.S().ea(c);d instanceof qc&&a.c!==jl?(a.i||(a.i=new kk(new wk(null))),0>=d.ja.length?d=null:(c=new ic(null),$b(c,d.c,d.o.slice(0,d.ja[0])),c.w(),d=c),c=a.i.S(),$b(c,d.c,d.o),c.w()):a.D&&(c=a.i.S(),c.ea(a.D));ul(a)}else d=b.coordinate.slice(),a.j?a.j.S().ea(d):(a.j=new kk(new jc(d)),ul(a));return!0}\r\nfunction tl(a,b){var c=!1;if(a.g){var d=!1,e=[a.h];a.c===ll?d=a.a.length>a.wa:a.c===jl&&(d=a.a[0].length>a.wa,e=[a.a[0][0],a.a[0][a.a[0].length-2]]);if(d)for(var d=b.map,f=0,g=e.length;f<g;f++){var h=e[f],k=ug(d,h),l=b.pixel,c=l[0]-k[0],k=l[1]-k[1],l=a.s&&a.na(b)?1:a.jd;if(c=Math.sqrt(c*c+k*k)<=l){a.h=h;break}}}return c}\r\nfunction ql(a,b){var c=b.coordinate;a.h=c;a.c===kl?a.a=c.slice():a.c===jl?(a.a=[[c.slice(),c.slice()]],a.D=a.a[0]):(a.a=[c.slice(),c.slice()],a.c===rl&&(a.D=a.a));a.D&&(a.i=new kk(new wk(a.D)));c=a.u(a.a);a.g=new kk;a.Fa&&mk(a.g,a.Fa);lk(a.g,c);ul(a);U(a,new dl(\"drawstart\",a.g))}\r\nfunction nl(a,b){var c=b.coordinate,d=a.g.S(),e,f;if(a.c===ll)a.h=c.slice(),f=a.a,f.push(c.slice()),e=f.length>a.va,a.u(f,d);else if(a.c===jl){f=a.a[0];f.push(c.slice());if(e=f.length>a.va)a.h=f[0];a.u(a.a,d)}ul(a);e&&sl(a)}\r\nfunction sl(a){var b=vl(a),c=a.a,d=b.S();a.c===ll?(c.pop(),a.u(c,d)):a.c===jl&&(c[0].pop(),c[0].push(c[0][0]),a.u(c,d));\"MultiPoint\"===a.P?lk(b,new yk([c])):\"MultiLineString\"===a.P?lk(b,new xk([c])):\"MultiPolygon\"===a.P&&lk(b,new zk([c]));U(a,new dl(\"drawend\",b));a.ma&&a.ma.push(b);a.Ga&&a.Ga.Fb(b)}function vl(a){a.h=null;var b=a.g;b&&(a.g=null,a.j=null,a.i=null,a.ba.da().clear(!0));return b}el.prototype.B=zb;\r\nfunction ul(a){var b=[];a.g&&b.push(a.g);a.i&&b.push(a.i);a.j&&b.push(a.j);a=a.ba.da();a.clear(!0);a.Gb(b)}el.prototype.kb=function(){var a=this.aa,b=this.get(\"active\");a&&b||vl(this);this.ba.setMap(b?a:null)};function il(a){var b;\"Point\"===a||\"MultiPoint\"===a?b=kl:\"LineString\"===a||\"MultiLineString\"===a?b=ll:\"Polygon\"===a||\"MultiPolygon\"===a?b=jl:\"Circle\"===a&&(b=rl);return b}var kl=\"Point\",ll=\"LineString\",jl=\"Polygon\",rl=\"Circle\";function wl(a,b,c,d,e,f,g,h,k,l,m){Sf.call(this,e,0);this.u=void 0!==m?m:!1;this.v=g;this.s=h;this.f=null;this.c={};this.g=b;this.l=d;this.i=f?f:e;this.a=[];this.Va=null;this.h=0;f=Qc(d,this.i);h=this.l.G();e=this.g.G();f=h?vb(f,h):f;if(0===ob(f))this.state=4;else if((h=a.G())&&(e?e=vb(e,h):e=h),h=d.O(this.i[0]),m=tb(f),d=Ub(c,a)(m,void 0,m.length),h=c.getPointResolution(h,m),m=Lb(c),void 0!==m&&(h*=m),m=Lb(a),void 0!==m&&(h/=m),d=a.getPointResolution(h,d)/h,isFinite(d)&&0<d&&(h/=d),d=h,!isFinite(d)||\r\n0>=d)this.state=4;else if(this.j=new Ji(a,c,f,e,d*(void 0!==l?l:.5)),0===this.j.f.length)this.state=4;else if(this.h=Xc(b,d),c=Li(this.j),e&&(a.b?(c[1]=ia(c[1],e[1],e[3]),c[3]=ia(c[3],e[1],e[3])):c=vb(c,e)),ob(c)){a=Rc(b,c,this.h);for(b=a.H;b<=a.I;b++)for(c=a.J;c<=a.L;c++)(l=k(this.h,b,c,g))&&this.a.push(l);0===this.a.length&&(this.state=4)}else this.state=4}B(wl,Sf);wl.prototype.R=function(){1==this.state&&(this.Va.forEach(M),this.Va=null);Sf.prototype.R.call(this)};\r\nwl.prototype.Z=function(a){if(void 0!==a){var b=J(a);if(b in this.c)return this.c[b];a=sa(this.c)?this.f:this.f.cloneNode(!1);return this.c[b]=a}return this.f};\r\nwl.prototype.Tc=function(){var a=[];this.a.forEach(function(b){b&&2==b.T()&&a.push({extent:Qc(this.g,b.V),image:b.Z()})},this);this.a.length=0;if(0===a.length)this.state=3;else{var b=this.i[0],c=Wc(this.l,b),d=\"number\"===typeof c?c:c[0],c=\"number\"===typeof c?c:c[1],b=this.l.O(b),e=this.g.O(this.h),f=Qc(this.l,this.i);this.f=Ii(d,c,this.v,e,this.g.G(),b,f,this.j,a,this.s,this.u);this.state=2}Tf(this)};\r\nwl.prototype.load=function(){if(0==this.state){this.state=1;Tf(this);var a=0;this.Va=[];this.a.forEach(function(b){var c=b.T();if(0==c||1==c){a++;var d;d=R(b,\"change\",function(){var c=b.T();if(2==c||3==c||4==c)M(d),a--,0===a&&(this.Va.forEach(M),this.Va=null,this.Tc())},this);this.Va.push(d)}},this);this.a.forEach(function(a){0==a.T()&&a.load()});0===a&&K.setTimeout(this.Tc.bind(this),0)}};function xl(a,b){var c=/\\{z\\}/g,d=/\\{x\\}/g,e=/\\{y\\}/g,f=/\\{-y\\}/g;return function(g){if(g)return a.replace(c,g[0].toString()).replace(d,g[1].toString()).replace(e,function(){return(-g[2]-1).toString()}).replace(f,function(){var a=b.a?b.a[g[0]]:null;L(a,55);return(a.L-a.J+1+g[2]).toString()})}}function yl(a,b){for(var c=a.length,d=Array(c),e=0;e<c;++e)d[e]=xl(a[e],b);return zl(d)}function zl(a){return 1===a.length?a[0]:function(b,c,d){if(b)return a[la((b[1]<<b[0])+b[2],a.length)](b,c,d)}}\r\nfunction Al(){};function Bl(a){Xj.call(this);this.g=void 0!==a?a:2048}B(Bl,Xj);function Cl(a){return a.f>a.g}Bl.prototype.Oa=function(a){for(var b,c;Cl(this);){b=this.b.Na;c=b.V[0].toString();var d;if(d=c in a)b=b.V,d=Hc(a[c],b[1],b[2]);if(d)break;else Da(this.pop())}};function Dl(a){vf.call(this,{attributions:a.attributions,extent:a.extent,logo:a.logo,projection:a.projection,state:a.state,wrapX:a.wrapX});this.u=void 0!==a.opaque?a.opaque:!1;this.aa=void 0!==a.tilePixelRatio?a.tilePixelRatio:1;this.tileGrid=void 0!==a.tileGrid?a.tileGrid:null;this.a=new Bl(a.cacheSize);this.g=[0,0];this.Ia=\"\"}B(Dl,vf);n=Dl.prototype;n.Mc=function(){return Cl(this.a)};n.Oa=function(a,b){var c=this.fb(a);c&&c.Oa(b)};\r\nfunction Sh(a,b,c,d,e){b=a.fb(b);if(!b)return!1;for(var f=!0,g,h,k=d.H;k<=d.I;++k)for(var l=d.J;l<=d.L;++l)g=a.ob(c,k,l),h=!1,Uj(b,g)&&(g=b.get(g),(h=2===g.T())&&(h=!1!==e(g))),h||(f=!1);return f}n.nb=function(){return 0};n.getKey=function(){return this.Ia};n.ob=function(a,b,c){return a+\"/\"+b+\"/\"+c};n.Qb=function(){return this.u};n.sa=function(a){return this.tileGrid?this.tileGrid:Zc(a)};n.fb=function(a){var b=this.ia();return b&&!Tb(b,a)?null:this.a};n.pb=function(){return this.aa};\r\nfunction Ni(a,b,c,d){d=a.sa(d);c=a.pb(c);b=Lc(Wc(d,b),a.g);return 1==c?b:Kc(b,c,a.g)}function El(a,b,c){var d=void 0!==c?c:a.ia();c=a.sa(d);if(a.i&&d.c){var e=b;b=e[0];a=Vc(c,e);var d=$c(d),f=a[0],g=a[1];d[0]<=f&&f<=d[2]&&d[1]<=g&&g<=d[3]?b=e:(e=qb(d),a[0]+=e*Math.ceil((d[0]-a[0])/e),b=Yc(c,a,b))}d=b[0];a=b[1];e=b[2];c=c.minZoom>d||d>c.maxZoom?!1:(c=(f=c.G())?Rc(c,f,d):c.a?c.a[d]:null)?Hc(c,a,e):!0;return c?b:null}n.Ja=function(){this.a.clear();this.w()};n.Vc=I;\r\nfunction Fl(a,b){T.call(this,a);this.tile=b}B(Fl,T);function Gl(a){Dl.call(this,{attributions:a.attributions,cacheSize:a.cacheSize,extent:a.extent,logo:a.logo,opaque:a.opaque,projection:a.projection,state:a.state,tileGrid:a.tileGrid,tilePixelRatio:a.tilePixelRatio,wrapX:a.wrapX});this.tileLoadFunction=a.tileLoadFunction;this.tileUrlFunction=this.f?this.f.bind(this):Al;this.urls=null;if(a.urls){var b=a.urls;this.urls=b;var c=b.join(\"\\n\");Hl(this,this.f?this.f.bind(this):yl(b,this.tileGrid),c)}else a.url&&this.s(a.url);a.tileUrlFunction&&Hl(this,a.tileUrlFunction)}\r\nB(Gl,Dl);Gl.prototype.v=function(a){a=a.target;switch(a.T()){case 1:U(this,new Fl(\"tileloadstart\",a));break;case 2:U(this,new Fl(\"tileloadend\",a));break;case 3:U(this,new Fl(\"tileloaderror\",a))}};function Hl(a,b,c){a.tileUrlFunction=b;\"undefined\"!==typeof c?a.Ia!==c&&(a.Ia=c,a.w()):a.w()}\r\nGl.prototype.s=function(a){var b=[],c=/\\{(\\d)-(\\d)\\}/.exec(a)||/\\{([a-z])-([a-z])\\}/.exec(a);if(c){var d=c[2].charCodeAt(0),e;for(e=c[1].charCodeAt(0);e<=d;++e)b.push(a.replace(c[0],String.fromCharCode(e)))}else b.push(a);b=this.urls=b;Hl(this,this.f?this.f.bind(this):yl(b,this.tileGrid),a)};Gl.prototype.Vc=function(a,b,c){a=this.ob(a,b,c);Uj(this.a,a)&&this.a.get(a)};function Il(a){Gl.call(this,{attributions:a.attributions,cacheSize:a.cacheSize,extent:a.extent,logo:a.logo,opaque:a.opaque,projection:a.projection,state:a.state,tileGrid:a.tileGrid,tileLoadFunction:a.tileLoadFunction?a.tileLoadFunction:Jl,tilePixelRatio:a.tilePixelRatio,tileUrlFunction:a.tileUrlFunction,url:a.url,urls:a.urls,wrapX:a.wrapX});this.crossOrigin=void 0!==a.crossOrigin?a.crossOrigin:null;this.tileClass=void 0!==a.tileClass?a.tileClass:Ok;this.c={};this.j={};this.W=a.reprojectionErrorThreshold}\r\nB(Il,Gl);n=Il.prototype;n.Mc=function(){if(Cl(this.a))return!0;for(var a in this.c)if(Cl(this.c[a]))return!0;return!1};n.Oa=function(a,b){var c=this.fb(a);this.a.Oa(this.a==c?b:{});for(var d in this.c){var e=this.c[d];e.Oa(e==c?b:{})}};n.nb=function(a){return this.ia()&&a&&Tb(this.ia(),a),0};n.Qb=function(a){return this.ia()&&a&&!Tb(this.ia(),a)?!1:Gl.prototype.Qb.call(this,a)};\r\nn.sa=function(a){var b=this.ia();return!this.tileGrid||b&&!Tb(b,a)?(b=J(a).toString(),b in this.j||(this.j[b]=Zc(a)),this.j[b]):this.tileGrid};n.fb=function(a){var b=this.ia();if(!b||Tb(b,a))return this.a;a=J(a).toString();a in this.c||(this.c[a]=new Bl);return this.c[a]};function Kl(a,b,c,d,e,f,g){b=[b,c,d];e=(c=El(a,b,f))?a.tileUrlFunction(c,e,f):void 0;e=new a.tileClass(b,void 0!==e?0:4,void 0!==e?e:\"\",a.crossOrigin,a.tileLoadFunction);e.key=g;R(e,\"change\",a.v,a);return e}\r\nfunction $h(a,b,c,d,e,f){if(a.ia()&&f&&!Tb(a.ia(),f)){var g=a.fb(f);d=[b,c,d];var h;b=a.ob.apply(a,d);Uj(g,b)&&(h=g.get(b));c=a.getKey();if(h&&h.key==c)return h;var k=a.ia(),l=a.sa(k),m=a.sa(f),p=El(a,d,f);a=new wl(k,l,f,m,d,p,a.pb(e),0,function(a,b,c,d){return Ll(this,a,b,c,d,k)}.bind(a),a.W,!1);a.key=c;h?(a.b=h,Zj(g,b,a)):g.set(b,a);return a}return Ll(a,b,c,d,e,f)}\r\nfunction Ll(a,b,c,d,e,f){var g,h=a.ob(b,c,d),k=a.getKey();if(Uj(a.a,h)){if(g=a.a.get(h),g.key!=k){var l=g;g.b&&g.b.key==k?(g=g.b,2==l.T()&&(g.b=l)):(g=Kl(a,b,c,d,e,f,k),2==l.T()?g.b=l:l.b&&2==l.b.T()&&(g.b=l.b,l.b=null));g.b&&(g.b.b=null);Zj(a.a,h,g)}}else g=Kl(a,b,c,d,e,f,k),a.a.set(h,g);return g}function Jl(a,b){a.Z().src=b};function Ml(a){a=a||{};var b=void 0!==a.projection?a.projection:\"EPSG:3857\",c;if(void 0!==a.tileGrid)c=a.tileGrid;else{c={extent:$c(b),maxZoom:a.maxZoom,minZoom:a.minZoom,tileSize:a.tileSize};var d={};pa(d,void 0!==c?c:{});void 0===d.extent&&(d.extent=Hb(\"EPSG:3857\").G());d.resolutions=ad(d.extent,d.maxZoom,d.tileSize);delete d.maxZoom;c=new Mc(d)}Il.call(this,{attributions:a.attributions,cacheSize:a.cacheSize,crossOrigin:a.crossOrigin,logo:a.logo,opaque:a.opaque,projection:b,reprojectionErrorThreshold:a.reprojectionErrorThreshold,\r\ntileGrid:c,tileLoadFunction:a.tileLoadFunction,tilePixelRatio:a.tilePixelRatio,tileUrlFunction:a.tileUrlFunction,url:a.url,urls:a.urls,wrapX:void 0!==a.wrapX?a.wrapX:!0})}B(Ml,Il);function Nl(a,b){var c=[];Object.keys(b).forEach(function(a){null!==b[a]&&void 0!==b[a]&&c.push(a+\"=\"+encodeURIComponent(b[a]))});var d=c.join(\"&\");a=a.replace(/[?&]$/,\"\");a=-1===a.indexOf(\"?\")?a+\"?\":a+\"&\";return a+d};function Ol(a){a=a||{};var b;void 0!==a.attributions?b=a.attributions:b=[Pl];Ml.call(this,{attributions:b,cacheSize:a.cacheSize,crossOrigin:void 0!==a.crossOrigin?a.crossOrigin:\"anonymous\",opaque:void 0!==a.opaque?a.opaque:!0,maxZoom:void 0!==a.maxZoom?a.maxZoom:19,reprojectionErrorThreshold:a.reprojectionErrorThreshold,tileLoadFunction:a.tileLoadFunction,url:void 0!==a.url?a.url:\"https://{a-c}.tile.openstreetmap.org/{z}/{x}/{y}.png\",wrapX:a.wrapX})}B(Ol,Ml);var Pl=new bd({html:'© <a href=\"http://www.openstreetmap.org/copyright\">OpenStreetMap</a> contributors.'});function Ql(a){a=a||{};Il.call(this,{attributions:a.attributions,cacheSize:a.cacheSize,crossOrigin:a.crossOrigin,logo:a.logo,projection:a.projection,reprojectionErrorThreshold:a.reprojectionErrorThreshold,tileGrid:a.tileGrid,tileLoadFunction:a.tileLoadFunction,url:a.url,urls:a.urls,wrapX:void 0!==a.wrapX?a.wrapX:!0});this.B=a.params||{};this.ba=db()}B(Ql,Il);Ql.prototype.pb=function(a){return a};\r\nQl.prototype.f=function(a,b,c){var d=this.tileGrid;d||(d=this.sa(c));if(!(d.b.length<=a[0])){var e=Qc(d,a,this.ba),f=Lc(Wc(d,a[0]),this.g);1!=b&&(f=Kc(f,b,this.g));d={F:\"image\",FORMAT:\"PNG32\",TRANSPARENT:!0};pa(d,this.B);var g=this.urls;g?(c=c.ya.split(\":\").pop(),d.SIZE=f[0]+\",\"+f[1],d.BBOX=e.join(\",\"),d.BBOXSR=c,d.IMAGESR=c,d.DPI=Math.round(d.DPI?d.DPI*b:90*b),a=1==g.length?g[0]:g[la((a[1]<<a[0])+a[2],g.length)],b=a.replace(/MapServer\\/?$/,\"MapServer/export\").replace(/ImageServer\\/?$/,\"ImageServer/exportImage\"),\r\nb==a&&L(!1,50),d=Nl(b,d)):d=void 0;return d}};function Rl(a){this.j=this.l=this.f=null;this.i=void 0!==a.fill?a.fill:null;this.M=[0,0];this.b=a.points;this.c=void 0!==a.radius?a.radius:a.radius1;this.g=void 0!==a.radius2?a.radius2:this.c;this.h=void 0!==a.angle?a.angle:0;this.a=void 0!==a.stroke?a.stroke:null;this.D=this.Y=this.u=null;var b=a.atlasManager,c=\"\",d=\"\",e=0,f=null,g,h=0;this.a&&(g=nd(this.a.a),h=this.a.c,void 0===h&&(h=1),f=this.a.b,pe||(f=null),d=this.a.g,void 0===d&&(d=\"round\"),c=this.a.f,void 0===c&&(c=\"round\"),e=this.a.h,void 0===\r\ne&&(e=10));var k=2*(this.c+h)+1,c={strokeStyle:g,jb:h,size:k,lineCap:c,lineDash:f,lineJoin:d,miterLimit:e};if(void 0===b){var l=Md(k,k);this.l=l.canvas;b=k=this.l.width;this.Qc(c,l,0,0);this.i?this.j=this.l:(l=Md(c.size,c.size),this.j=l.canvas,this.Pc(c,l,0,0))}else k=Math.round(k),(d=!this.i)&&(l=this.Pc.bind(this,c)),e=this.a?qh(this.a):\"-\",f=this.i?rh(this.i):\"-\",this.f&&e==this.f[1]&&f==this.f[2]&&this.c==this.f[3]&&this.g==this.f[4]&&this.h==this.f[5]&&this.b==this.f[6]||(this.f=[\"r\"+e+f+(void 0!==\r\nthis.c?this.c.toString():\"-\")+(void 0!==this.g?this.g.toString():\"-\")+(void 0!==this.h?this.h.toString():\"-\")+(void 0!==this.b?this.b.toString():\"-\"),e,f,this.c,this.g,this.h,this.b]),l=b.add(this.f[0],k,k,this.Qc.bind(this,c),l),this.l=l.image,this.M=[l.offsetX,l.offsetY],b=l.image.width,d?this.j=l.Nd:this.j=this.l;this.u=[k/2,k/2];this.Y=[k,k];this.D=[b,b];oh.call(this,{opacity:1,rotateWithView:void 0!==a.rotateWithView?a.rotateWithView:!1,rotation:void 0!==a.rotation?a.rotation:0,scale:1,snapToPixel:void 0!==\r\na.snapToPixel?a.snapToPixel:!0})}B(Rl,oh);n=Rl.prototype;n.eb=function(){return this.u};n.ub=function(){return this.j};n.Z=function(){return this.l};n.Ob=function(){return this.D};n.ib=function(){return 2};n.pa=function(){return this.M};n.Ka=function(){return this.Y};n.Vb=I;n.load=I;n.bc=I;\r\nn.Qc=function(a,b,c,d){var e;b.setTransform(1,0,0,1,0,0);b.translate(c,d);b.beginPath();this.g!==this.c&&(this.b*=2);for(c=0;c<=this.b;c++)d=2*c*Math.PI/this.b-Math.PI/2+this.h,e=0===c%2?this.c:this.g,b.lineTo(a.size/2+e*Math.cos(d),a.size/2+e*Math.sin(d));this.i&&(b.fillStyle=qd(this.i.b),b.fill());this.a&&(b.strokeStyle=a.strokeStyle,b.lineWidth=a.jb,a.lineDash&&b.setLineDash(a.lineDash),b.lineCap=a.lineCap,b.lineJoin=a.lineJoin,b.miterLimit=a.miterLimit,b.stroke());b.closePath()};\r\nn.Pc=function(a,b,c,d){b.setTransform(1,0,0,1,0,0);b.translate(c,d);b.beginPath();this.g!==this.c&&(this.b*=2);var e;for(c=0;c<=this.b;c++)e=2*c*Math.PI/this.b-Math.PI/2+this.h,d=0===c%2?this.c:this.g,b.lineTo(a.size/2+d*Math.cos(e),a.size/2+d*Math.sin(e));b.fillStyle=kh;b.fill();this.a&&(b.strokeStyle=a.strokeStyle,b.lineWidth=a.jb,a.lineDash&&b.setLineDash(a.lineDash),b.stroke());b.closePath()};y(\"ol.format.GeoJSON\",Gk);Gk.prototype.readFeatures=Gk.prototype.a;Gk.prototype.readFeature=Gk.prototype.g;y(\"ol.format.EsriJSON\",Ak);Ak.prototype.readFeatures=Ak.prototype.a;Ak.prototype.readFeature=Ak.prototype.g;y(\"ol.style.Style\",yh);y(\"ol.style.Circle\",ph);y(\"ol.style.RegularShape\",Rl);y(\"ol.style.Fill\",sh);y(\"ol.style.Stroke\",xh);y(\"ol.style.Icon\",Lk);\r\ny(\"ol.style.Text\",function(a){a=a||{};this.b=a.font;this.h=a.rotation;this.g=a.rotateWithView;this.l=a.scale;this.j=a.text;this.C=a.textAlign;this.K=a.textBaseline;this.f=void 0!==a.fill?a.fill:new sh({color:\"#333\"});this.i=void 0!==a.stroke?a.stroke:null;this.a=void 0!==a.offsetX?a.offsetX:0;this.c=void 0!==a.offsetY?a.offsetY:0});y(\"ol.View\",uc);uc.prototype.on=uc.prototype.Y;uc.prototype.getZoom=uc.prototype.rd;uc.prototype.setZoom=uc.prototype.ye;uc.prototype.getCenter=uc.prototype.qa;\r\nuc.prototype.setCenter=uc.prototype.xa;uc.prototype.calculateExtent=uc.prototype.lc;uc.prototype.getProjection=uc.prototype.ia;uc.prototype.fit=uc.prototype.md;y(\"ol.control.defaults\",ee);y(\"ol.layer.Tile\",W);W.prototype.getVisible=W.prototype.gb;W.prototype.setVisible=W.prototype.Cc;W.prototype.getZIndex=W.prototype.Yb;W.prototype.setZIndex=W.prototype.Dc;W.prototype.getOpacity=W.prototype.Xb;W.prototype.setOpacity=W.prototype.Bc;W.prototype.getSource=W.prototype.da;W.prototype.setSource=W.prototype.$b;\r\nW.prototype.on=W.prototype.Y;y(\"ol.layer.Vector\",Y);Y.prototype.getVisible=Y.prototype.gb;Y.prototype.setVisible=Y.prototype.Cc;Y.prototype.getSource=Y.prototype.da;Y.prototype.setStyle=Y.prototype.v;Y.prototype.getZIndex=Y.prototype.Yb;Y.prototype.setZIndex=Y.prototype.Dc;Y.prototype.getOpacity=Y.prototype.Xb;Y.prototype.setOpacity=Y.prototype.Bc;Y.prototype.getSource=Y.prototype.da;Y.prototype.setSource=Y.prototype.$b;Y.prototype.on=Y.prototype.Y;y(\"ol.source.OSM\",Ol);Ol.prototype.refresh=Ol.prototype.Ja;\r\ny(\"ol.source.XYZ\",Ml);Ml.prototype.refresh=Ml.prototype.Ja;Ml.prototype.setUrl=Ml.prototype.s;Ml.prototype.refresh=Ml.prototype.Ja;y(\"ol.Map\",Z);Z.prototype.on=Z.prototype.Y;Z.prototype.getTarget=Z.prototype.Wb;Z.prototype.getTargetElement=Z.prototype.Ra;Z.prototype.getView=Z.prototype.U;Z.prototype.addOverlay=Z.prototype.fd;Z.prototype.addLayer=Z.prototype.ed;Z.prototype.removeLayer=Z.prototype.te;Z.prototype.getEventPixel=Z.prototype.uc;Z.prototype.hasFeatureAtPixel=Z.prototype.Md;\r\nZ.prototype.getSize=Z.prototype.Ta;Z.prototype.updateSize=Z.prototype.yb;Z.prototype.forEachFeatureAtPixel=Z.prototype.od;Z.prototype.addInteraction=Z.prototype.dd;Z.prototype.removeInteraction=Z.prototype.se;Z.prototype.beforeRender=Z.prototype.oa;Z.prototype.addControl=Z.prototype.cd;Z.prototype.once=Z.prototype.hd;Z.prototype.renderSync=Z.prototype.we;y(\"ol.source.Vector\",Xk);Xk.prototype.getFeatures=Xk.prototype.pd;Xk.prototype.getExtent=Xk.prototype.G;Xk.prototype.refresh=Xk.prototype.Ja;\r\nXk.prototype.addFeatures=Xk.prototype.Gb;Xk.prototype.addFeature=Xk.prototype.Fb;Xk.prototype.clear=Xk.prototype.clear;Xk.prototype.forEachFeature=Xk.prototype.nd;Xk.prototype.refresh=Xk.prototype.Ja;y(\"ol.source.TileArcGISRest\",Ql);Ql.prototype.refresh=Ql.prototype.Ja;y(\"ol.Overlay\",gk);gk.prototype.setPosition=gk.prototype.Ac;y(\"ol.Feature\",kk);kk.prototype.getProperties=kk.prototype.Ea;kk.prototype.setProperties=kk.prototype.l;kk.prototype.getGeometry=kk.prototype.S;y(\"ol.geom.Point\",jc);\r\njc.prototype.transform=jc.prototype.transform;jc.prototype.getCoordinates=jc.prototype.za;jc.prototype.getExtent=jc.prototype.G;y(\"ol.geom.Polygon\",qc);qc.prototype.getCoordinates=qc.prototype.za;qc.prototype.getExtent=qc.prototype.G;qc.prototype.transform=qc.prototype.transform;y(\"ol.geom.LineString\",wk);wk.prototype.getCoordinates=wk.prototype.za;wk.prototype.getExtent=wk.prototype.G;wk.prototype.transform=wk.prototype.transform;y(\"ol.proj.Projection\",Eb);Eb.prototype.getCode=Eb.prototype.l;\r\ny(\"ol.interaction.Draw\",el);el.prototype.on=el.prototype.Y;y(\"ol.animation.pan\",Dc);y(\"ol.control.FullScreen\",Xd);\r\n return OPENLAYERS.ol;\r\n}));\r\n\r\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/custom-ol/ol/ol-build.js\n ** module id = 6\n ** module chunks = 1 2 5\n **/","/**\r\n * Created by gavorhes on 11/3/2015.\r\n */\r\n\r\nimport MapMoveCls from './mapMoveCls';\r\n\r\n/**\r\n * The single map move object catch is that it is common to multimap pages\r\n * @type {MapMoveCls}\r\n */\r\n\r\nexport const mapMove = new MapMoveCls();\r\nexport default mapMove;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/olHelpers/mapMove.ts\n **/","import LayerBaseVector from \"../layers/LayerBaseVector\";\r\nimport MapInteractionBase from './mapInteractionBase';\r\nimport * as checkDefined from '../util/checkDefined';\r\nimport provide from '../util/provide';\r\nimport makeGuid from '../util/makeGuid';\r\nimport {ol} from 'custom-ol'\r\nimport Timer = NodeJS.Timer;\r\nconst $ = require('jquery');\r\nconst nm = provide('olHelpers');\r\n\r\n\r\nexport interface extentObject{\r\n minX: number;\r\n minY: number;\r\n maxX: number;\r\n maxY: number;\r\n}\r\n\r\nexport interface mapMoveCallbackFunction{\r\n /**\r\n *\r\n * @param extent extent as predefined object minX, minX, maxX, maxY\r\n * @param zoomLevel current zoom level\r\n * @param evtType the event type 'change:center', 'change:resolution'\r\n */\r\n (extent: extentObject, zoomLevel: number, evtType?: string): any\r\n}\r\n\r\n\r\n/**\r\n * assists with map move interactions, trigger callback functions\r\n * @augments MapInteractionBase\r\n */\r\nexport class MapMoveCls extends MapInteractionBase {\r\n _mapExtent: extentObject;\r\n _zoomLevel: number;\r\n _lookupLayer: Object;\r\n _arrLayer: Array<LayerBaseVector>;\r\n _arrLyrTimeout: Array<Timer>;\r\n _mapMoveCallbackTimeout: Array<Timer>;\r\n _mapMoveCallbackDelays: Array<number>;\r\n _mapMoveCallbacksLookup: Object;\r\n _mapMoveCallbackContext: Array<Object>;\r\n _mapMoveCallbacks: Array<mapMoveCallbackFunction>;\r\n _arrLyrRequest: Array<any>;\r\n\r\n /**\r\n * constructor called implicitly\r\n */\r\n constructor() {\r\n super('map move');\r\n this._arrLyrRequest = [];\r\n this._arrLyrTimeout = [];\r\n this._arrLayer = [];\r\n this._lookupLayer = {};\r\n\r\n this._mapMoveCallbacks = [];\r\n this._mapMoveCallbacksLookup = {};\r\n this._mapMoveCallbackDelays = [];\r\n this._mapMoveCallbackContext = [];\r\n this._mapMoveCallbackTimeout = [];\r\n\r\n this._mapExtent = undefined;\r\n this._zoomLevel = undefined;\r\n\r\n }\r\n\r\n /**\r\n * initialize the map move object\r\n * @param theMap - the ol map\r\n */\r\n init(theMap: ol.Map){\r\n super.init(theMap);\r\n\r\n this.map.getView().on(['change:center', 'change:resolution'], (e) =>{\r\n\r\n this._updateMapExtent();\r\n\r\n // trigger the layer updates\r\n for (let i = 0; i < this._arrLayer.length; i++) {\r\n this.triggerLyrLoad(this._arrLayer[i], i, e.type);\r\n }\r\n\r\n // trigger the map callbacks\r\n for (let i = 0; i < this._mapMoveCallbacks.length; i++) {\r\n this.triggerMoveCallback(i, e.type);\r\n }\r\n });\r\n }\r\n\r\n _updateMapExtent() {\r\n let theView = this.map.getView();\r\n this._zoomLevel = theView.getZoom();\r\n\r\n let extentArray = theView.calculateExtent(this.map.getSize());\r\n\r\n this._mapExtent = {\r\n minX: extentArray[0],\r\n minY: extentArray[1],\r\n maxX: extentArray[2],\r\n maxY: extentArray[3]\r\n };\r\n }\r\n\r\n /**\r\n * return the map extent\r\n */\r\n get mapExtent() {\r\n if (!this._mapExtent) {\r\n this._updateMapExtent();\r\n }\r\n\r\n return this._mapExtent;\r\n }\r\n\r\n /**\r\n * Trigger the layer load\r\n * @param lyr the layer being acted on\r\n * @param index index of the layer\r\n * @param eventType the event triggering the load, as 'change:center' or 'change:resolution'\r\n */\r\n triggerLyrLoad(lyr: LayerBaseVector, index?: number, eventType?: string) {\r\n\r\n if (checkDefined.undefinedOrNull(lyr) && checkDefined.undefinedOrNull(index)) {\r\n throw 'need to define lyr or index';\r\n } else if (checkDefined.definedAndNotNull(lyr) && checkDefined.undefinedOrNull(index)) {\r\n index = this._arrLayer.indexOf(lyr);\r\n } else if (checkDefined.undefinedOrNull(lyr) && checkDefined.definedAndNotNull(index)) {\r\n lyr = this._arrLayer[index];\r\n }\r\n\r\n // clear the timeout\r\n if (this._arrLyrTimeout[index] != null) {\r\n clearTimeout(this._arrLyrTimeout[index]);\r\n this._arrLyrTimeout[index] = null;\r\n }\r\n\r\n // abort if necessary and clear the request\r\n if (this._arrLyrRequest[index] != null && this._arrLyrRequest[index] != 4) {\r\n this._arrLyrRequest[index].abort();\r\n this._arrLyrRequest[index] = null;\r\n }\r\n\r\n // dummy callback used if before load returns false\r\n let callbackFunc = function () {};\r\n\r\n if (lyr.mapMoveBefore(this._zoomLevel, eventType)) {\r\n lyr.mapMoveMakeGetParams(this._mapExtent, this._zoomLevel);\r\n\r\n let _this = this;\r\n\r\n callbackFunc = function () {\r\n function innerFunction(theLayer, theIndex) {\r\n let _innerThis = this;\r\n this._arrLyrRequest[theIndex] = $.get(\r\n theLayer.url,\r\n theLayer.mapMoveParams,\r\n function (d) {\r\n /**\r\n * @type {LayerBaseVector}\r\n */\r\n theLayer.mapMoveCallback(d);\r\n theLayer.loadCallback();\r\n }, 'json').fail(\r\n function (jqXHR) {\r\n if (jqXHR.statusText != 'abort') {\r\n console.log('failed');\r\n console.log(theLayer.url);\r\n console.log(theLayer.mapMoveParams);\r\n }\r\n }).always(\r\n function () {\r\n _innerThis._arrLyrTimeout[theIndex] = null;\r\n _innerThis._arrLyrRequest[theIndex] = null;\r\n });\r\n }\r\n innerFunction.call(_this, lyr, index);\r\n };\r\n } else {\r\n lyr.clear();\r\n }\r\n this._arrLyrTimeout[index] = setTimeout(callbackFunc, lyr.onDemandDelay);\r\n }\r\n\r\n /**\r\n * trigger the map move call back at the given index\r\n * @param ind - the index of the layer\r\n * @param eventType=undefined the event triggering the load as 'change:center' or 'change:resolution'\r\n * @param functionId=undefined the function id used to reference the added callback function\r\n */\r\n triggerMoveCallback(ind: number, eventType?: string, functionId?: string) {\r\n\r\n if (typeof ind == 'undefined' && typeof functionId == 'undefined'){\r\n throw 'either the function index or the id must be defined';\r\n }\r\n\r\n if (typeof ind !== 'number'){\r\n ind = this._mapMoveCallbacks.indexOf(this._mapMoveCallbacksLookup[functionId]);\r\n }\r\n\r\n if (ind < 0){\r\n console.log('function not found');\r\n\r\n return;\r\n }\r\n\r\n // clear the timeout\r\n if (this._mapMoveCallbackTimeout[ind] != null) {\r\n clearTimeout(this._mapMoveCallbackTimeout[ind]);\r\n this._mapMoveCallbackTimeout[ind] = null;\r\n }\r\n\r\n let ctx = this._mapMoveCallbackContext[ind];\r\n let theFunc = this._mapMoveCallbacks[ind];\r\n\r\n let _this = this;\r\n\r\n let f = function () {\r\n if (ctx !== null) {\r\n theFunc.call(ctx, _this._mapExtent, _this._zoomLevel, eventType);\r\n } else {\r\n theFunc(_this._mapExtent, _this._zoomLevel, eventType);\r\n }\r\n };\r\n\r\n this._mapMoveCallbackTimeout[ind] = setTimeout(f, this._mapMoveCallbackDelays[ind]);\r\n }\r\n\r\n /**\r\n * Add a layer to the interaction\r\n * @param lyr - layer to add\r\n * @param triggerOnAdd - if the layer should be loaded on add\r\n */\r\n addVectorLayer(lyr: LayerBaseVector, triggerOnAdd: boolean = true) {\r\n if (this._arrLayer.indexOf(lyr) > -1) {\r\n console.log('already added ' + lyr.name + ' to map move');\r\n\r\n return;\r\n }\r\n this._checkInit();\r\n\r\n this._arrLyrRequest.push(null);\r\n this._arrLyrTimeout.push(null);\r\n this._arrLayer.push(lyr);\r\n this._lookupLayer[lyr.id] = lyr;\r\n\r\n triggerOnAdd = typeof triggerOnAdd == 'boolean' ? triggerOnAdd : true;\r\n\r\n if (triggerOnAdd) {\r\n if (this._mapExtent === undefined) {\r\n this._updateMapExtent();\r\n }\r\n this.triggerLyrLoad(lyr, this._arrLayer.length - 1);\r\n }\r\n }\r\n\r\n\r\n /**\r\n * add a callback to the map move event\r\n * @param func - callback function\r\n * @param context - the context to use for this function\r\n * @param delay=50 the delay before call load\r\n * @param triggerOnAdd if the layer should be loaded on add to mapMove\r\n * @param functionId optional id to reference the function later for outside triggering\r\n */\r\n addCallback(func: mapMoveCallbackFunction, context?: any, delay?: number, triggerOnAdd? : boolean, functionId?: string) {\r\n\r\n if (this._mapMoveCallbacks.indexOf(func) > -1) {\r\n console.log('this function already added to map move');\r\n return;\r\n }\r\n this._checkInit();\r\n if (!functionId){\r\n functionId = makeGuid();\r\n }\r\n\r\n this._mapMoveCallbacks.push(func);\r\n this._mapMoveCallbacksLookup[functionId] = functionId;\r\n this._mapMoveCallbackDelays.push(typeof delay == 'number' ? delay : 50);\r\n this._mapMoveCallbackContext.push(checkDefined.definedAndNotNull(context) ? context : null);\r\n this._mapMoveCallbackTimeout.push(null);\r\n\r\n triggerOnAdd = typeof triggerOnAdd == 'boolean' ? triggerOnAdd : true;\r\n\r\n if (triggerOnAdd) {\r\n if (this._mapExtent === undefined) {\r\n this._updateMapExtent();\r\n }\r\n this.triggerMoveCallback(this._mapMoveCallbacks.length - 1);\r\n }\r\n }\r\n}\r\n\r\nnm.MapMoveCls = MapMoveCls;\r\nexport default MapMoveCls;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/olHelpers/mapMoveCls.ts\n **/","/**\r\n * Created by gavorhes on 12/8/2015.\r\n */\r\nimport provide from '../util/provide';\r\nimport {ol} from 'custom-ol';\r\nconst nm = provide('olHelpers');\r\n\r\n\r\n\r\n/**\r\n * base interaction\r\n */\r\nexport class MapInteractionBase {\r\n _map: ol.Map;\r\n _initialized: boolean;\r\n _subtype: string;\r\n\r\n /**\r\n * map interaction base\r\n * @param subtype - the interaction subtype\r\n */\r\n constructor(subtype: string) {\r\n this._map = null;\r\n this._initialized = false;\r\n this._subtype = subtype;\r\n }\r\n\r\n /**\r\n * base initializer, returns true for already initialized\r\n * @param theMap - the ol Map\r\n * @returns true for already initialized\r\n */\r\n init(theMap: ol.Map){\r\n if (!this._initialized){\r\n this._map = theMap;\r\n this._initialized = true;\r\n }\r\n }\r\n\r\n /**\r\n * get reference to the ol map object\r\n * @returns {ol.Map} the map object\r\n */\r\n get map() {\r\n return this._map;\r\n }\r\n\r\n /**\r\n * get if is initialized\r\n * @returns {boolean} is initialized\r\n */\r\n get initialized() {\r\n return this._initialized;\r\n }\r\n\r\n /**\r\n * Check the initialization status and throw exception if not valid yet\r\n * @protected\r\n */\r\n _checkInit() {\r\n if (!this.initialized) {\r\n let msg = `${this._subtype} object not initialized`;\r\n alert(msg);\r\n console.log(msg);\r\n throw msg;\r\n }\r\n }\r\n\r\n /**\r\n * Check the initialization status and throw exception if not valid yet\r\n */\r\n checkInit(){\r\n this._checkInit();\r\n }\r\n}\r\n\r\nnm.MapInteractionBase = MapInteractionBase;\r\nexport default MapInteractionBase;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/olHelpers/mapInteractionBase.ts\n **/","import provide from './provide';\r\nlet nm = provide('util.checkDefined');\r\n\r\n/**\r\n * check if the input is undefined or null\r\n * @param input - input pointer\r\n * @returns true undefined or null\r\n */\r\nexport function undefinedOrNull (input): boolean{\r\n \"use strict\";\r\n\r\n return (typeof input === 'undefined' || input === null);\r\n}\r\n\r\nnm.undefinedOrNull = undefinedOrNull;\r\n\r\n\r\n/**\r\n * check if the input is defined and not null\r\n * @param input - input pointer\r\n * @returns true defined and not null\r\n */\r\nexport function definedAndNotNull (input: any): boolean{\r\n \"use strict\";\r\n\r\n return !(undefinedOrNull(input));\r\n}\r\n\r\nnm.definedAndNotNull = definedAndNotNull;\r\n\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/util/checkDefined.ts\n **/","/**\r\n * Created by gavorhes on 11/3/2015.\r\n */\r\n\r\nimport provide from './provide';\r\nlet nm = provide('util');\r\n\r\n\r\n/**\r\n * guids are used to uniquely identify groups and features\r\n * @returns {string} a new guid\r\n */\r\nfunction makeGuid() {\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'\r\n .replace(/[xy]/g, function (c) {\r\n let r = Math.random() * 16 | 0, v = c == 'x' ? r : r & 0x3 | 0x8;\r\n\r\n return v.toString(16);\r\n });\r\n\r\n}\r\nnm.makeGuid = makeGuid;\r\nexport default makeGuid;\r\n\r\n\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/util/makeGuid.ts\n **/","/**\r\n * Created by gavorhes on 11/3/2015.\r\n */\r\n\r\nimport MapPopupCls from './mapPopupCls';\r\n\r\n/**\r\n * The single popup object catch is that it is common to multimap pages\r\n * @type {MapPopupCls}\r\n */\r\n\r\nexport const mapPopup = new MapPopupCls() as MapPopupCls;\r\nexport default mapPopup;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/olHelpers/mapPopup.ts\n **/","/**\r\n * Created by gavorhes on 11/3/2015.\r\n */\r\n\r\nimport MapInteractionBase from './mapInteractionBase';\r\nimport propertiesZoomStyle from '../olHelpers/propertiesZoomStyle';\r\nimport provide from '../util/provide';\r\nimport {ol} from 'custom-ol';\r\nimport {LayerBaseVector} from \"../layers/LayerBaseVector\";\r\nimport LayerEsriMapServer from \"../layers/LayerEsriMapServer\";\r\nimport MapEvent = ol.MapEvent;\r\nconst $ = require('jquery');\r\n\r\nconst nm = provide('olHelpers');\r\n\r\nexport interface popupChangedFunction{\r\n ($popContent: JQuery): any;\r\n}\r\n\r\n/**\r\n *\r\n */\r\nexport interface popupCallback{\r\n /**\r\n * Callback function for the popup\r\n * @param featureProperties\r\n * @param jqRef\r\n */\r\n (featureProperties: Object, jqRef?: JQuery): string | boolean;\r\n}\r\n\r\ninterface mapEvent{\r\n coordinate: ol.Coordinate;\r\n pixel: ol.Pixel;\r\n dragging: boolean|any;\r\n originalEvent: Event;\r\n}\r\n\r\n\r\nexport class FeatureLayerProperties {\r\n\r\n feature: ol.Feature;\r\n layer: LayerBaseVector|LayerEsriMapServer;\r\n layerIndex: number;\r\n selectionLayer: ol.layer.Vector;\r\n popupContent: string;\r\n esriLayerName: string;\r\n\r\n /**\r\n *\r\n * @param feature the feature\r\n * @param layer - the layer in the popup\r\n * @param layerIndex - index of the layer\r\n * @param selectionLayer - the ol selection layer\r\n * @param [esriLayerName=undefined] - esri layer name\r\n */\r\n constructor(feature: ol.Feature, layer: LayerBaseVector|LayerEsriMapServer, layerIndex: number, selectionLayer: ol.layer.Vector, esriLayerName?: string) {\r\n this.feature = feature;\r\n this.layer = layer;\r\n this.layerIndex = layerIndex;\r\n this.selectionLayer = selectionLayer;\r\n this.popupContent = '';\r\n this.esriLayerName = typeof esriLayerName == 'string' ? esriLayerName : undefined;\r\n }\r\n\r\n get layerName() {\r\n if (typeof this.esriLayerName == 'string') {\r\n return this.esriLayerName;\r\n } else {\r\n return this.layer.name;\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * map popup class\r\n * @augments MapInteractionBase\r\n */\r\nclass MapPopupCls extends MapInteractionBase {\r\n _popupOpen: boolean;\r\n _passThroughLayerFeatureArray: Array<FeatureLayerProperties>;\r\n _currentPopupIndex: number;\r\n _popupContentLength: number;\r\n _esriMapServiceLayers: Array<LayerEsriMapServer>;\r\n _$popupCloser: JQuery;\r\n _$popupContent: JQuery;\r\n _$popupContainer: JQuery;\r\n _popupOverlay: ol.Overlay;\r\n _arrPopupLayers: Array<LayerBaseVector>;\r\n _popupCoordinate: ol.Coordinate;\r\n _popupChangedFunctions: Array<popupChangedFunction>;\r\n _mapClickFunctions: Array<Function>;\r\n _selectionLayerLookup: Object;\r\n _arrPopupLayerIds: Array<string>;\r\n _arrPopupLayerNames: Array<string>;\r\n _arrPopupOlLayers: Array<ol.layer.Vector>;\r\n _arrPopupContentFunction: Array<popupCallback>;\r\n _selectionLayers: Array<ol.layer.Vector>;\r\n\r\n /**\r\n * Definition for openlayers style function\r\n * @callback olStyleFunction\r\n * ¶m feature the openlayers vector feature\r\n * $param\r\n */\r\n\r\n\r\n\r\n /**\r\n * map popup constructor\r\n */\r\n constructor() {\r\n super('map popup');\r\n this._arrPopupLayerIds = [];\r\n this._arrPopupLayerNames = [];\r\n this._arrPopupLayers = [];\r\n this._arrPopupOlLayers = [];\r\n this._arrPopupContentFunction = [];\r\n this._$popupContainer = undefined;\r\n this._$popupContent = undefined;\r\n this._$popupCloser = undefined;\r\n this._popupOverlay = undefined;\r\n this._selectionLayers = [];\r\n this._selectionLayerLookup = {};\r\n this._mapClickFunctions = [];\r\n\r\n //let a = function($jqueryContent){console.log($jqueryContent)};\r\n //this._popupChangedLookup = {'a': a};\r\n this._popupChangedFunctions = [];\r\n this._esriMapServiceLayers = [];\r\n\r\n this._popupOpen = false;\r\n this._popupCoordinate = null;\r\n\r\n this._passThroughLayerFeatureArray = [];\r\n\r\n this._currentPopupIndex = -1;\r\n this._popupContentLength = 0;\r\n\r\n }\r\n\r\n /**\r\n * map popup initialization\r\n * @param {ol.Map} theMap - the ol map\r\n */\r\n init(theMap: ol.Map) {\r\n super.init(theMap);\r\n\r\n let $map;\r\n let target = this.map.getTarget();\r\n\r\n if(typeof target == 'string'){\r\n $map = $('#' + target);\r\n }\r\n else {\r\n $map = $(target);\r\n }\r\n\r\n $map.append(\r\n '<div class=\"ol-popup\">' +\r\n '<span class=\"ol-popup-closer\">X</span>' +\r\n '<div class=\"popup-content\"></div>' +\r\n '</div>'\r\n );\r\n\r\n this._$popupContainer = $map.find('.ol-popup');\r\n this._$popupContent = $map.find('.popup-content');\r\n this._$popupCloser = $map.find('.ol-popup-closer');\r\n\r\n\r\n this._popupOverlay = new ol.Overlay({element: this._$popupContainer[0], autoPan: true,\r\n autoPanAnimation: {\r\n duration: 250,\r\n source: theMap.getView().getCenter()\r\n }});\r\n\r\n this._map.addOverlay(this._popupOverlay);\r\n\r\n this._$popupCloser.click((evt) => {\r\n this.closePopup();\r\n });\r\n\r\n // display popup on click\r\n this._map.on('singleclick', (evt) => {\r\n\r\n this.closePopup();\r\n this._popupCoordinate = evt['coordinate'];\r\n\r\n // esri map service layers\r\n if (this._esriMapServiceLayers.length > 0) {\r\n let queryParams = {\r\n geometry: evt['coordinate'].join(','),\r\n geometryType: 'esriGeometryPoint',\r\n layers: 'all',\r\n sr: this._map.getView().getProjection().getCode().split(':')[1],\r\n mapExtent: this._map.getView().calculateExtent(this._map.getSize()).join(','),\r\n imageDisplay: this._map.getSize().join(',') + ',96',\r\n returnGeometry: true,\r\n tolerance: 15,\r\n f: 'pjson'\r\n };\r\n\r\n for (let l of this._esriMapServiceLayers) {\r\n l.getPopupInfo(queryParams);\r\n }\r\n }\r\n\r\n let layerFeatureObjectArray = this._featuresAtPixel(evt['pixel']);\r\n\r\n this._passThroughLayerFeatureArray = [];\r\n this._currentPopupIndex = -1;\r\n\r\n for (let i = 0; i < layerFeatureObjectArray.length; i++) {\r\n let featObj = layerFeatureObjectArray[i];\r\n\r\n let props = featObj.feature.getProperties();\r\n\r\n let popupContentResponse = this._arrPopupContentFunction[featObj.layerIndex](props, this._$popupContent);\r\n\r\n //skip if return was false\r\n if (popupContentResponse === false) {\r\n //continue;\r\n } else if (typeof popupContentResponse == 'string') {\r\n featObj.popupContent = popupContentResponse as string;\r\n this._passThroughLayerFeatureArray.push(featObj);\r\n } else {\r\n featObj.selectionLayer.getSource().addFeature(featObj.feature);\r\n }\r\n }\r\n\r\n this._popupContentLength = this._passThroughLayerFeatureArray.length;\r\n\r\n this._currentPopupIndex = -1;\r\n\r\n let popupHtml = '<div class=\"ol-popup-nav\">';\r\n popupHtml += '<span class=\"previous-popup ol-popup-nav-arrow\">◀</span>';\r\n popupHtml += '<span class=\"next-popup ol-popup-nav-arrow\">▶</span>';\r\n popupHtml += `<span class=\"current-popup-item-number\" style=\"font-weight: bold;\"></span>`;\r\n popupHtml += `<span> of </span>`;\r\n popupHtml += `<span class=\"popup-content-length\" style=\"font-weight: bold;\">${this._popupContentLength}</span>`;\r\n popupHtml += `<span> - </span>`;\r\n popupHtml += `<span class=\"current-popup-layer-name\"></span>`;\r\n popupHtml += '</div>';\r\n popupHtml += '<div class=\"ol-popup-inner\">';\r\n\r\n popupHtml += '</div>';\r\n\r\n this._$popupContent.html(popupHtml);\r\n\r\n this._$popupContent.find('.previous-popup').click(() => {\r\n if (this._popupContentLength == 1) {\r\n return;\r\n }\r\n\r\n if (this._currentPopupIndex == 0) {\r\n this._currentPopupIndex = this._popupContentLength - 1;\r\n } else {\r\n this._currentPopupIndex--;\r\n }\r\n this._triggerFeatSelect();\r\n });\r\n\r\n let nextPopup = this._$popupContent.find('.next-popup');\r\n\r\n nextPopup.click(() => {\r\n if (this._popupContentLength == 1 && this._currentPopupIndex > -1) {\r\n return;\r\n }\r\n\r\n if (this._currentPopupIndex == this._popupContentLength - 1) {\r\n this._currentPopupIndex = 0;\r\n } else {\r\n this._currentPopupIndex++;\r\n }\r\n this._triggerFeatSelect();\r\n });\r\n\r\n\r\n if (this._popupContentLength > 0) {\r\n nextPopup.trigger('click');\r\n this._popupOverlay.setPosition(this._popupCoordinate);\r\n this._$popupContent.scrollTop(0);\r\n this._popupOpen = true;\r\n }\r\n });\r\n\r\n //change mouse cursor when over marker\r\n this._map.on('pointermove', (evt) => {\r\n if (evt['dragging']) {\r\n return;\r\n }\r\n let pixel = this.map.getEventPixel(evt['originalEvent']);\r\n let hit = this.map.hasFeatureAtPixel(pixel, (lyrCandidate) => {\r\n for (let olLayer of this._arrPopupOlLayers) {\r\n if (lyrCandidate == olLayer) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n });\r\n let mapElement = this.map.getTargetElement() as HTMLElement;\r\n mapElement.style.cursor = hit ? 'pointer' : '';\r\n });\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * helper to select features\r\n * @private\r\n */\r\n _triggerFeatSelect() {\r\n let $currentPopupItemNumber = this._$popupContent.find('.current-popup-item-number');\r\n let $innerPopup = this._$popupContent.find('.ol-popup-inner');\r\n let $layerNameSpan = this._$popupContent.find('.current-popup-layer-name');\r\n this.clearSelection();\r\n let lyrFeatObj = this._passThroughLayerFeatureArray[this._currentPopupIndex];\r\n $currentPopupItemNumber.html((this._currentPopupIndex + 1).toFixed());\r\n $layerNameSpan.html(lyrFeatObj.layerName);\r\n $innerPopup.html(lyrFeatObj.popupContent);\r\n lyrFeatObj.selectionLayer.getSource().addFeature(lyrFeatObj.feature);\r\n for (let f of this._popupChangedFunctions) {\r\n f(this._$popupContent);\r\n }\r\n }\r\n\r\n\r\n /**\r\n *\r\n * @param feature - the ol feature\r\n * @param {LayerEsriMapServer} lyr - the map server layer\r\n * @param {string} popupContent - popup content\r\n * @param {string} esriName - esri layer name\r\n */\r\n addMapServicePopupContent(feature: ol.Feature, lyr: LayerEsriMapServer, popupContent: string, esriName: string) {\r\n\r\n let featLayerObject = new FeatureLayerProperties(\r\n feature, lyr, this._popupContentLength, this._selectionLayerLookup[lyr.id], esriName\r\n );\r\n featLayerObject.popupContent = popupContent;\r\n\r\n this._passThroughLayerFeatureArray.push(featLayerObject);\r\n this._popupContentLength++;\r\n\r\n $('.popup-content-length').html(this._popupContentLength.toFixed());\r\n\r\n if (!this._popupOpen) {\r\n this._$popupContent.find('.next-popup').trigger('click');\r\n\r\n this._popupOverlay.setPosition(this._popupCoordinate);\r\n this._$popupContent.scrollTop(0);\r\n this._popupOpen = true;\r\n }\r\n }\r\n\r\n /**\r\n *\r\n * @param pixel - the ol pixel\r\n * @returns feature layer properties\r\n * @private\r\n */\r\n _featuresAtPixel(pixel: ol.Pixel): Array<FeatureLayerProperties> {\r\n let layerFeatureObjectArray = [];\r\n\r\n this.map.forEachFeatureAtPixel(pixel, (feature: ol.Feature, layer: ol.layer.Vector) =>{\r\n let lyrIndex = this._arrPopupOlLayers.indexOf(layer);\r\n\r\n if (lyrIndex > -1) {\r\n layerFeatureObjectArray.push(\r\n new FeatureLayerProperties(\r\n feature, this._arrPopupLayers[lyrIndex], lyrIndex, this._selectionLayers[lyrIndex]));\r\n }\r\n });\r\n\r\n return layerFeatureObjectArray;\r\n }\r\n\r\n closePopup() {\r\n this._checkInit();\r\n this._popupOpen = false;\r\n this._popupOverlay.setPosition(undefined);\r\n this._$popupCloser[0].blur();\r\n this.clearSelection();\r\n this._$popupContent.html('');\r\n\r\n return false;\r\n };\r\n\r\n\r\n /**\r\n *\r\n * @param chgFunction - popup change function\r\n */\r\n addPopupChangedFunction(chgFunction: popupChangedFunction) {\r\n this._popupChangedFunctions.push(chgFunction);\r\n }\r\n\r\n /**\r\n *\r\n * @param {LayerBase|*} lyr - the layer being acted on\r\n * @param {object} [selectionStyle={}] the selection style configuration\r\n * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color\r\n * @param {number} [selectionStyle.width=10] the selection width for linear features\r\n * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function\r\n * @returns the new selection layer\r\n * @private\r\n */\r\n _addPopupLayer(lyr, selectionStyle): ol.layer.Vector {\r\n this._checkInit();\r\n\r\n selectionStyle = selectionStyle || {};\r\n selectionStyle.color = selectionStyle.color || 'rgba(255,170,0,0.5)';\r\n selectionStyle.width = selectionStyle.width || 10;\r\n\r\n let theStyle;\r\n\r\n if (selectionStyle.olStyle) {\r\n theStyle = selectionStyle.olStyle;\r\n } else {\r\n theStyle = new ol.style.Style({\r\n stroke: new ol.style.Stroke({\r\n color: selectionStyle.color,\r\n width: selectionStyle.width\r\n }),\r\n image: new ol.style.Circle({\r\n radius: 7,\r\n fill: new ol.style.Fill({color: selectionStyle.color}),\r\n stroke: new ol.style.Stroke({color: selectionStyle.color, width: 1})\r\n }),\r\n fill: new ol.style.Fill({\r\n color: selectionStyle.color\r\n })\r\n });\r\n }\r\n\r\n let selectionLayer = new ol.layer.Vector(\r\n {\r\n source: new ol.source.Vector(),\r\n style: theStyle,\r\n zIndex: 100\r\n }\r\n );\r\n\r\n this._selectionLayers.push(selectionLayer);\r\n this._selectionLayerLookup[lyr.id] = selectionLayer;\r\n this.map.addLayer(selectionLayer);\r\n\r\n return selectionLayer;\r\n }\r\n\r\n\r\n\r\n /**\r\n * Add popup to the map\r\n * @param {LayerBase|*} lyr The layer that the popup with act on\r\n * @param {popupCallback} popupContentFunction - popup content function that makes popup info\r\n * @param {object} [selectionStyle={}] the selection style configuration\r\n * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color\r\n * @param {number} [selectionStyle.width=10] the selection width for linear features\r\n * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function\r\n * @returns {object} a reference to the ol selection layer\r\n */\r\n addVectorPopup(lyr: LayerBaseVector, popupContentFunction: popupCallback,\r\n selectionStyle?: ol.style.Style|Array<ol.style.Style>|ol.style.StyleFunction) {\r\n let selectionLayer = this._addPopupLayer(lyr, selectionStyle);\r\n this._arrPopupLayerIds.push(lyr.id);\r\n this._arrPopupLayerNames.push(lyr.name);\r\n this._arrPopupLayers.push(lyr);\r\n this._arrPopupOlLayers.push(lyr.olLayer);\r\n this._arrPopupContentFunction.push(popupContentFunction);\r\n\r\n return selectionLayer;\r\n };\r\n\r\n\r\n /**\r\n *\r\n * @param {LayerBase} lyr - layer\r\n */\r\n removeVectorPopup(lyr) {\r\n let idx = this._arrPopupLayerIds.indexOf(lyr.id);\r\n\r\n if (idx > -1) {\r\n this._arrPopupLayerIds.splice(idx, 1);\r\n this._arrPopupLayerNames.splice(idx, 1);\r\n this._arrPopupLayers.splice(idx, 1);\r\n this._arrPopupOlLayers.splice(idx, 1);\r\n this._arrPopupContentFunction.splice(idx, 1);\r\n this._selectionLayers.splice(idx, 1);\r\n delete this._selectionLayerLookup[lyr.id];\r\n }\r\n }\r\n\r\n /**\r\n *\r\n * @param {LayerEsriMapServer} lyr - map server layer\r\n * @param {object} [selectionStyle={}] the selection style configuration\r\n * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color\r\n * @param {number} [selectionStyle.width=10] the selection width for linear features\r\n * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function\r\n * @returns {object} a reference to the ol selection layer\r\n */\r\n addMapServicePopup(lyr, selectionStyle?: ol.style.Style|Array<ol.style.Style>|ol.style.StyleFunction) {\r\n let selectionLayer = this._addPopupLayer(lyr, selectionStyle);\r\n this._esriMapServiceLayers.push(lyr);\r\n\r\n return selectionLayer;\r\n }\r\n\r\n clearSelection() {\r\n this._checkInit();\r\n for (let i = 0; i < this._selectionLayers.length; i++) {\r\n this._selectionLayers[i].getSource().clear();\r\n }\r\n for (let f of this._mapClickFunctions) {\r\n f();\r\n }\r\n };\r\n\r\n /**\r\n * Add a function to be called when the map is clicked but before any popups are implemented\r\n * @param {function} func - the map click function\r\n */\r\n addMapClickFunction(func: Function) {\r\n this._mapClickFunctions.push(func);\r\n }\r\n}\r\nnm.MapPopupCls = MapPopupCls;\r\nexport default MapPopupCls;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/olHelpers/mapPopupCls.ts\n **/","import * as zoomResolutionConvert from '../olHelpers/zoomResolutionConvert';\r\nimport provide from '../util/provide';\r\nimport {ol} from 'custom-ol';\r\nimport makeGuid from '../util/makeGuid';\r\nconst nm = provide('layers');\r\nconst $ = require('jquery');\r\n\r\n\r\nexport interface LayerBaseOptions{\r\n id?: string;\r\n name?: string;\r\n opacity?: number;\r\n visible?: boolean;\r\n minZoom?: number;\r\n maxZoom?: number;\r\n params?: any;\r\n zIndex?: number;\r\n loadCallback?: Function;\r\n legendCollapse?: boolean;\r\n legendCheckbox?: boolean;\r\n legendContent?: string;\r\n}\r\n\r\n\r\n/**\r\n * The base layer class\r\n * @abstract\r\n */\r\nexport abstract class LayerBase {\r\n\r\n _legendCheckbox: boolean;\r\n _url: string;\r\n _opacity: number;\r\n _minZoom: number;\r\n _maxZoom: number;\r\n _visible: boolean;\r\n _loaded: boolean;\r\n _zIndex: number;\r\n _legendContent: string;\r\n _params: any;\r\n id: string;\r\n _name: string;\r\n _source: ol.source.Source;\r\n animate: boolean;\r\n _legendCollapse: boolean;\r\n _maxResolution: number;\r\n _minResolution: number;\r\n _$legendDiv: JQuery;\r\n loadCallback: Function;\r\n _olLayer: ol.layer.Layer;\r\n _applyCollapseCalled: boolean;\r\n\r\n\r\n\r\n /**\r\n * The base layer for all others\r\n * @param {string} url - url for source\r\n * @param {object} options - config\r\n * @param {string} [options.id=makeGuid()] - layer id\r\n * @param {string} [options.name=Unnamed Layer] - layer name\r\n * @param {number} [options.opacity=1] - opacity\r\n * @param {boolean} [options.visible=true] - default visible\r\n * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28\r\n * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28\r\n * @param {object} [options.params={}] - the get parameters to include to retrieve the layer\r\n * @param {number} [options.zIndex=0] - the z index for the layer\r\n * @param {function} [options.loadCallback] - function to call on load, context this is the layer object\r\n * @param {boolean} [options.legendCollapse=false] - if the legend item should be initially collapsed\r\n * @param {boolean} [options.legendCheckbox=true] - if the legend item should have a checkbox for visibility\r\n * @param {boolean} [options.legendContent=undefined] - additional content to add to the legend\r\n */\r\n constructor(url: string, options: LayerBaseOptions = {}) {\r\n options = options || {} as LayerBaseOptions;\r\n\r\n if (typeof url !== 'string') {\r\n throw 'Invalid URL';\r\n }\r\n this._url = url;\r\n\r\n\r\n this._params = typeof options.params == 'object' ? options.params : {};\r\n this._legendCollapse = typeof options.legendCollapse == 'boolean' ? options.legendCollapse : false;\r\n this._legendCheckbox = typeof options.legendCheckbox == 'boolean' ? options.legendCheckbox : true;\r\n\r\n this.id = options.id || makeGuid();\r\n this._name = options.name || 'Unnamed Layer';\r\n this.animate = false;\r\n this._opacity = typeof options.opacity == 'number' ? options.opacity : 1;\r\n\r\n if (this._opacity > 1) {\r\n this._opacity = 1;\r\n } else if (this._opacity < 0) {\r\n this._opacity = 0;\r\n }\r\n\r\n this._visible = typeof options.visible === 'boolean' ? options.visible : true;\r\n\r\n this._source = undefined;\r\n\r\n /**\r\n *\r\n * @protected\r\n */\r\n this._olLayer = undefined;\r\n this._loaded = false;\r\n\r\n this._maxResolution = zoomResolutionConvert.zoomToResolution(options.minZoom);\r\n if (typeof this._maxResolution !== 'undefined') {\r\n this._maxResolution += 0.00001;\r\n }\r\n this._minResolution = zoomResolutionConvert.zoomToResolution(options.maxZoom);\r\n\r\n this._minZoom = typeof options.minZoom == 'number' ? options.minZoom : undefined;\r\n this._maxZoom = typeof options.maxZoom == 'number' ? options.maxZoom : undefined;\r\n this._zIndex = typeof options.zIndex == 'number' ? options.zIndex : 0;\r\n\r\n this.loadCallback = typeof options.loadCallback == 'function' ? options.loadCallback : function () {\r\n };\r\n\r\n\r\n this._legendContent = '';\r\n\r\n if (this._legendCheckbox) {\r\n this._legendContent += `<input type=\"checkbox\" ${this.visible ? 'checked' : ''} ` +\r\n `class=\"legend-check\" id=\"${this.id}-legend-layer-check\"><span></span>`;\r\n this._legendContent += `<label for=\"${this.id}-legend-layer-check\" class=\"legend-layer-name\">${this.name}</label>`;\r\n } else {\r\n this._legendContent += `<label class=\"legend-layer-name\">${this.name}</label>`;\r\n }\r\n\r\n this._$legendDiv = null;\r\n this._applyCollapseCalled = false;\r\n this._addLegendContent(typeof options.legendContent === 'string' ? options.legendContent : undefined);\r\n }\r\n\r\n /**\r\n * base load function, sets _loaded = true if it is not already\r\n * @protected\r\n * @returns {boolean} if already loaded\r\n */\r\n _load() {\r\n if (this.loaded == true) {\r\n return true;\r\n } else {\r\n this._loaded = true;\r\n\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Get the legend html, be sure to only add to the DOM once\r\n * @returns {string} html for layer wrapped in a div\r\n */\r\n getLegendDiv() {\r\n return `<div class=\"legend-layer-div\" id=\"${this.id}-legend-layer-div\">${this._legendContent}</div>`;\r\n }\r\n\r\n /**\r\n *\r\n * @param {string|undefined} additionalContent - additional content to add to legend\r\n * @private\r\n */\r\n _addLegendContent(additionalContent) {\r\n additionalContent = typeof additionalContent == 'string' ? additionalContent : '';\r\n\r\n let addCollapse = additionalContent.indexOf('<ul>') > -1;\r\n\r\n if (addCollapse) {\r\n additionalContent = '<span class=\"legend-items-expander\" title=\"Expand/Collapse\">▼</span>' + additionalContent;\r\n }\r\n\r\n this._legendContent += additionalContent;\r\n\r\n this._$legendDiv = $(`#${this.id}-legend-layer-div`);\r\n\r\n if (this._$legendDiv.length > 0) {\r\n this._$legendDiv.append(additionalContent);\r\n this.applyCollapse();\r\n }\r\n }\r\n\r\n /**\r\n * add additional content to the legend\r\n * @param {string} [additionalContent=] - additonal content to add\r\n */\r\n addLegendContent(additionalContent) {\r\n this._addLegendContent(additionalContent);\r\n }\r\n\r\n applyCollapse() {\r\n if (this._applyCollapseCalled) {\r\n console.log('collapse already applied');\r\n\r\n return undefined;\r\n }\r\n\r\n this._$legendDiv = $(`#${this.id}-legend-layer-div`);\r\n\r\n if (this._$legendDiv.length > 0) {\r\n\r\n let $expander = this._$legendDiv.find('.legend-items-expander');\r\n\r\n if ($expander.length > 0) {\r\n this._applyCollapseCalled = true;\r\n\r\n $expander.click(function () {\r\n let $this = $(this);\r\n\r\n $this.siblings('ul').slideToggle();\r\n\r\n if ($this.hasClass('legend-layer-group-collapsed')) {\r\n $this.removeClass('legend-layer-group-collapsed');\r\n $this.html('▼');\r\n } else {\r\n $this.addClass('legend-layer-group-collapsed');\r\n $this.html('▶');\r\n }\r\n });\r\n\r\n if (this._legendCollapse) {\r\n $expander.trigger('click');\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * trick to refresh the layer\r\n */\r\n refresh() {\r\n if (this.source) {\r\n this.source.refresh();\r\n }\r\n }\r\n\r\n\r\n /**\r\n * get the legend content\r\n * @type {string}\r\n */\r\n get legendContent() {\r\n return this._legendContent;\r\n }\r\n\r\n /**\r\n * set the legend content directly\r\n * @param {string} newVal - new content\r\n * @protected\r\n */\r\n set legendContent(newVal) {\r\n this._legendContent = newVal;\r\n }\r\n\r\n /**\r\n * get the map get params\r\n * @type {object}\r\n */\r\n get params() {\r\n return this._params;\r\n }\r\n\r\n /**\r\n * set the map get params\r\n * @param {object} newParams - new get params\r\n * @protected\r\n */\r\n set params(newParams) {\r\n this._params = newParams;\r\n }\r\n\r\n /**\r\n * get the minimum resolution\r\n * @type {number|*}\r\n */\r\n get minResolution() {\r\n return this._minResolution;\r\n }\r\n\r\n /**\r\n * get the maximum resolution\r\n * @type {number|*}\r\n */\r\n get maxResolution() {\r\n return this._maxResolution;\r\n }\r\n\r\n /**\r\n * get min zoom\r\n * @type {number|*}\r\n */\r\n get minZoom() {\r\n return this._minZoom;\r\n }\r\n\r\n /**\r\n * get max zoom\r\n * @type {number|*}\r\n */\r\n get maxZoom() {\r\n return this._maxZoom;\r\n }\r\n\r\n /**\r\n * get the url\r\n * @type {string}\r\n */\r\n get url() {\r\n return this._url;\r\n }\r\n\r\n /**\r\n * Get the layer visibility\r\n * @type {boolean}\r\n */\r\n get visible(): boolean {\r\n return this._visible;\r\n }\r\n\r\n /**\r\n * set the visibility\r\n * @param visibility\r\n */\r\n set visible(visibility: boolean) {\r\n this.setVisible(visibility);\r\n }\r\n\r\n protected setVisible(visibility: boolean) {\r\n this._visible = visibility;\r\n if (this.olLayer) {\r\n this.olLayer.setVisible(this._visible);\r\n if (visibility && !this._loaded) {\r\n this._load();\r\n }\r\n }\r\n }\r\n\r\n\r\n /**\r\n * Get the layer opacity\r\n * @type {number}\r\n */\r\n get opacity() {\r\n return this._opacity;\r\n }\r\n\r\n /**\r\n * Set the layer opacity\r\n * @param {number} opacity - layer opacity\r\n */\r\n set opacity(opacity) {\r\n this._opacity = opacity;\r\n if (this.olLayer) {\r\n this.olLayer.setOpacity(this._opacity);\r\n }\r\n }\r\n\r\n /**\r\n * Get the layer name\r\n * @type {string}\r\n */\r\n get name() {\r\n return this._name;\r\n }\r\n\r\n /**\r\n * set the layer name\r\n * @param {string} newName - the new name\r\n */\r\n set name(newName) {\r\n this._name = newName;\r\n }\r\n\r\n /**\r\n * Check if the layer is loaded\r\n * @type {boolean}\r\n */\r\n get loaded() {\r\n return this._loaded;\r\n }\r\n\r\n /**\r\n * get the layer source\r\n * @type {*}\r\n */\r\n get source(): ol.source.Source {\r\n return this.getSource();\r\n }\r\n\r\n\r\n protected getSource(): ol.source.Source{\r\n return this._source;\r\n }\r\n\r\n /**\r\n * get the z index\r\n */\r\n get zIndex(): number {\r\n return this._zIndex;\r\n }\r\n\r\n /**\r\n * set the z index\r\n */\r\n set zIndex(newZ: number) {\r\n this._zIndex = newZ;\r\n }\r\n\r\n protected setZIndex(newZ: number){\r\n\r\n }\r\n\r\n /**\r\n * the the ol layer\r\n */\r\n get olLayer(): ol.layer.Layer {\r\n return this.getOlLayer();\r\n }\r\n\r\n protected getOlLayer(): ol.layer.Layer{\r\n return this._olLayer;\r\n }\r\n}\r\n\r\nnm.LayerBase = LayerBase;\r\nexport default LayerBase;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/layers/LayerBase.ts\n **/","/**\r\n * Created by gavorhes on 12/14/2015.\r\n */\r\n\r\nimport provide from '../util/provide';\r\nconst nm = provide('olHelpers.zoomResolutionConvert');\r\n\r\nlet _zoomResLookup = [\r\n 156543.03392804097, //0\r\n 78271.51696402048, //1\r\n 39135.75848201024, //2\r\n 19567.87924100512, //3\r\n 9783.93962050256, //4\r\n 4891.96981025128, //5\r\n 2445.98490512564, //6\r\n 1222.99245256282, //7\r\n 611.49622628141, //8\r\n 305.748113140705, //9\r\n 152.8740565703525, //10\r\n 76.43702828517625, //11\r\n 38.21851414258813, //12\r\n 19.109257071294063, //13\r\n 9.554628535647032, //14\r\n 4.777314267823516, //15\r\n 2.388657133911758, //16\r\n 1.194328566955879, //17\r\n 0.5971642834779395, //18\r\n 0.29858214173896974, //19\r\n 0.14929107086948487, //20\r\n 0.07464553543474244, //21\r\n 0.03732276771737122, //22\r\n 0.01866138385868561, //23\r\n 0.009330691929342804, //24\r\n 0.004665345964671402, //25\r\n 0.002332672982335701, //26\r\n 0.0011663364911678506, //27\r\n 0.0005831682455839253 //28\r\n];\r\n\r\n/**\r\n * Get the resolution given the zoom level\r\n * @param {number} zoomLevel - the zoom level\r\n * @returns {number|*} the map resolution\r\n */\r\nexport function zoomToResolution(zoomLevel) {\r\n \"use strict\";\r\n\r\n if (typeof zoomLevel == 'number') {\r\n if (zoomLevel % 1 === 0 && zoomLevel >= 0 && zoomLevel <= 28) {\r\n return _zoomResLookup[zoomLevel];\r\n } else {\r\n console.log(`invalid zoom level provided: ${zoomLevel}`);\r\n\r\n return undefined;\r\n }\r\n } else {\r\n return undefined;\r\n }\r\n}\r\nnm.zoomToResolution = zoomToResolution;\r\n\r\n\r\n/**\r\n * Get resolution from the zoom level\r\n * @param {number} resolution - the resolution\r\n * @returns {number|*} the zoom level\r\n */\r\nexport function resolutionToZoom(resolution){\r\n for (let i = 0; i < _zoomResLookup.length; i++){\r\n if (resolution >= _zoomResLookup[i] ){\r\n return i;\r\n }\r\n }\r\n\r\n return 0;\r\n}\r\n\r\nnm.resolutionToZoom = resolutionToZoom;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/olHelpers/zoomResolutionConvert.ts\n **/","/**\r\n * Created by gavorhes on 12/14/2015.\r\n */\r\n\r\nimport * as colors from '../util/colors';\r\nimport provide from '../util/provide';\r\nimport {ol} from 'custom-ol';\r\nimport LayerItsInventory from \"../layers/LayerItsInventory\";\r\nlet nm = provide('collections');\r\n\r\n\r\nlet itsConfig = [\r\n {\r\n name: 'Camera',\r\n itsType: 'cctv',\r\n minZoom: 11,\r\n itsIconConfig: {\r\n prop: 'owner',\r\n defaultName: 'WisDOT',\r\n defaultIcon: 'cctv.png',\r\n iconArray: [\r\n ['City of Madison', 'Madison', 'cctv-mad.png']\r\n ]\r\n }\r\n },\r\n {\r\n name: 'Message Signs',\r\n itsType: 'DMS',\r\n minZoom: 11,\r\n itsIconConfig: {\r\n prop: 'dmsType',\r\n defaultName: 'DMS',\r\n defaultIcon: 'dms.png',\r\n iconArray: [\r\n ['pcms', 'PCMS', 'pcms.png']\r\n ]\r\n }\r\n },\r\n {name: 'ATR', itsType: 'atr', minZoom: 8, itsIcon: 'atr.png', visible: false},\r\n {name: 'Lighting', itsType: 'light', minZoom: 16, itsIcon: 'streetlight.png', visible: false, onDemand: true},\r\n {name: 'Bluetooth', itsType: 'blue', minZoom: 10, itsIcon: 'bluetooth.png', visible: false},\r\n {name: 'Cabinets', itsType: 'cabinet', minZoom: 10, itsIcon: 'cabinet.png', visible: false},\r\n {name: 'Hut', itsType: 'hut', minZoom: 10, itsIcon: 'hut.png', visible: false},\r\n {name: 'Vault', itsType: 'vault', minZoom: 13, itsIcon: 'vault.png', visible: false},\r\n {name: 'Advisory Radio', itsType: 'har', minZoom: 10, itsIcon: 'har.png', visible: false},\r\n {\r\n name: 'Loop Detectors',\r\n itsType: 'loop',\r\n legendCollapse: true,\r\n minZoom: 14,\r\n visible: false,\r\n itsIconConfig: {\r\n prop: 'dtctrType',\r\n defaultName: 'Other',\r\n defaultIcon: 'loopdetectorother.png',\r\n iconArray: [\r\n ['detector', 'Detector', 'loopdetector.png'],\r\n ['long', 'Long', 'loopdetectorlong.png'],\r\n ['zone', 'Zone', 'loopdetectorzone.png']\r\n ]\r\n },\r\n onDemand: true\r\n },\r\n {name: 'Microwave', itsType: 'microwave', minZoom: 14, itsIcon: 'microwave.png', visible: false},\r\n {name: 'Pull Box', itsType: 'pull', minZoom: 14, itsIcon: 'pullbox.png', visible: false, onDemand: true},\r\n {name: 'RWIS', itsType: 'rwis', minZoom: 7, itsIcon: 'rwis.png', visible: false},\r\n {name: 'Ramp Gates', itsType: 'gate', minZoom: 10, itsIcon: 'rampgate.png', visible: false},\r\n {name: 'Ramp Meter', itsType: 'meter', minZoom: 10, itsIcon: 'rampmeter.png', visible: false},\r\n {name: 'Signal', itsType: 'signal', minZoom: 13, itsIcon: 'signal.png', visible: false, onDemand: true},\r\n {name: 'Tower', itsType: 'tower', minZoom: 10, itsIcon: 'tower.png', visible: false},\r\n {\r\n name: 'Trench',\r\n itsType: 'trench',\r\n onDemand: true,\r\n visible: false,\r\n onDemandDelay: 500,\r\n minZoom: 15,\r\n legendCollapse: true,\r\n itsLineConfig: {\r\n prop: 'owner',\r\n //defaultName: 'Other',\r\n //defaultWidth: 7,\r\n defaultColor: colors.hexAlphaToRgbOrRgba('#747474', 0.8),\r\n lineArray: [\r\n ['WisDOT', 'WisDOT', colors.hexAlphaToRgbOrRgba('#FF032F', 0.7)],\r\n ['WIN', 'WIN', colors.hexAlphaToRgbOrRgba('#FFC632', 0.7)],\r\n ['USXchange', 'USXchange', colors.hexAlphaToRgbOrRgba('#2DFF46', 0.7)],\r\n ['AT&T', 'AT&T', colors.hexAlphaToRgbOrRgba('#ff2be5', 0.7)],\r\n ['Touch America', 'Touch America', colors.hexAlphaToRgbOrRgba('#52f3ff', 0.7)],\r\n ['Qwest', 'Qwest', colors.hexAlphaToRgbOrRgba('#9278ff', 0.7)],\r\n ['McLeodUSA', 'McLeodUSA', colors.hexAlphaToRgbOrRgba('#2926FF', 0.7)],\r\n ['CINC', 'CINC', colors.hexAlphaToRgbOrRgba('#CB00FF', 0.7)],\r\n ['City of Madison', 'Madison', colors.hexAlphaToRgbOrRgba('#000380', 0.7)]\r\n ]\r\n }\r\n }\r\n\r\n\r\n];\r\n\r\n\r\nexport class ItsLayerCollection {\r\n _map: ol.Map;\r\n _layers: Array<LayerItsInventory>;\r\n\r\n\r\n /**\r\n * Create a collection of all ITS layers\r\n * @param {ol.Map} theMap the openlayers map\r\n * @param {Array} [exclude=[]] array of Its layer identifiers to exclude\r\n *\r\n * BLUE Bluetooth Detector - Bluetooth Detector\r\n * CABINET Cabinets - The cabinets\r\n * CCTV Camera - Traffic Cameras\r\n * HUT Communication Hut - Communication Hut\r\n * VAULT Communication Vault - The communication vaults\r\n * HAR Highway Advisory Radio - Advisory Radios\r\n * LIGHT Lighting - Lighting\r\n * LOOP Loop Detectors - Loop Detectors\r\n * DMS Message Board - Message Boards and Signs\r\n * MICROWAVE Microwave Detector - Microwave Detectors\r\n * PULL Pull Box - A pull box\r\n * RWIS RWIS - Road weather information system\r\n * GATE Ramp Gate - The ramp Gates\r\n * METER Ramp Meter - The ramp meters\r\n * SIGNAL Signal - Traffic Signal\r\n * TOWER Tower - The towers\r\n * TRENCH\r\n */\r\n constructor(theMap: ol.Map, exclude?: Array<string>) {\r\n\r\n this._map = theMap;\r\n this._layers = [];\r\n\r\n exclude = typeof exclude == 'object' ? exclude : [];\r\n\r\n for (let i = 0; i < itsConfig.length; i++) {\r\n let lyrConfig = itsConfig[i];\r\n let addLayer = true;\r\n\r\n for (let j = 0; j < exclude.length; j++) {\r\n if (exclude[j] == lyrConfig.itsType) {\r\n addLayer = false;\r\n break;\r\n }\r\n }\r\n\r\n if (addLayer) {\r\n let inventLyr = new LayerItsInventory(lyrConfig);\r\n this._map.addLayer(inventLyr.olLayer);\r\n this._layers.push(inventLyr);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Return the array of layers in this collection\r\n * @returns {Array<LayerItsInventory>} an array of layers\r\n */\r\n get layers() {\r\n return this._layers;\r\n }\r\n}\r\n\r\nnm.ItsLayerCollection = ItsLayerCollection;\r\nexport default ItsLayerCollection;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/collections/ItsLayerCollection.ts\n **/","/**\r\n * Created by gavorhes on 11/3/2015.\r\n */\r\nimport provide from './provide';\r\nimport * as chk from './checkDefined';\r\nlet nm = provide('util.colors');\r\n\r\n\r\n/**\r\n * helper function to convert to hex\r\n * @param {number|string} x - the number to convert to hex\r\n * @returns {string} number as hex\r\n * @private\r\n */\r\nfunction _hex(x) {\r\n let hexDigits = [\"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"a\", \"b\", \"c\", \"d\", \"e\", \"f\"];\r\n\r\n return isNaN(x) ? \"00\" : hexDigits[(x - x % 16) / 16] + hexDigits[x % 16];\r\n}\r\n\r\n/**\r\n * converts an RGB string to hex\r\n * @param {string} rgb - rgb color\r\n * @returns {string} rbg as hex\r\n */\r\nexport function rgb2hex(rgb) {\r\n let rgb1 = rgb.match(/^rgb\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)$/);\r\n\r\n return (\"#\" + _hex(rgb1[1]) + _hex(rgb1[2]) + _hex(rgb1[3])).toUpperCase();\r\n}\r\n\r\nnm.rgb2hex = rgb2hex;\r\n\r\n\r\n/**\r\n * Convert hex string to RGB or RGBA string\r\n * @param {string} hexString - hex color string\r\n * @param {number} [alphaVal=undefined] Alpha value\r\n * @returns {string} - rgb or rgba color\r\n */\r\nexport function hexAlphaToRgbOrRgba(hexString, alphaVal) {\r\n hexString = ((hexString.charAt(0) == \"#\") ? hexString.substring(1, 7) : hexString);\r\n let r = parseInt(hexString.substring(0, 2), 16).toString() || '0';\r\n let g = parseInt(hexString.substring(2, 4), 16).toString() || '0';\r\n let b = parseInt(hexString.substring(4, 6), 16).toString() || '0';\r\n if (alphaVal) {\r\n return `rgba(${r},${g},${b},${alphaVal})`;\r\n } else {\r\n return `rgba(${r},${g},${b})`;\r\n }\r\n}\r\n\r\nnm.hexAlphaToRgbOrRgba = hexAlphaToRgbOrRgba;\r\n\r\n\r\n/**\r\n * adds alpha value to rgb string 'rgb(r, b, g)', returns 'rgba(r, g, b, a)'\r\n * @param {string} rgb - rgb color\r\n * @param {number} alpha - alpha value 0 to 1\r\n * @returns {string} rgba color\r\n */\r\nexport function rgbToRgba(rgb, alpha) {\r\n let pieces = rgb.split(',');\r\n pieces[0] = pieces[0].replace('rgb', 'rgba');\r\n pieces[2] = pieces[2].replace(')', '');\r\n pieces.push(' ' + alpha.toFixed(1) + ')');\r\n\r\n return pieces.join(',');\r\n}\r\n\r\nnm.rgbToRgba = rgbToRgba;\r\n\r\n\r\n/**\r\n * @typedef {function} colorLookupByNumber\r\n * @param {number} num - the number to use to retrieve the color\r\n * @returns {string} rgb color\r\n */\r\n\r\n\r\n/**\r\n * Make a blue green red gradient\r\n * @param {number} minVal - minimum value\r\n * @param {number} maxVal - maximum value\r\n * @param {boolean} flipColors - if the colors should be flipped\r\n * @returns {colorLookupByNumber} color lookup function\r\n */\r\nexport function makeBlueGreenRedGradient(minVal, maxVal, flipColors) {\r\n\r\n if (typeof flipColors != \"boolean\") {\r\n flipColors = false;\r\n }\r\n\r\n return function (theVal) {\r\n let r, g, b;\r\n let ratio;\r\n\r\n if (chk.undefinedOrNull(theVal)) {\r\n return 'rgb(100,100,100)';\r\n }\r\n\r\n let percent = (theVal - minVal) / (maxVal - minVal);\r\n\r\n if (flipColors == true) {\r\n percent = 1 - percent;\r\n }\r\n\r\n if (percent >= 1) {\r\n r = 255;\r\n g = 0;\r\n b = 0;\r\n } else if (percent <= 0) {\r\n r = 0;\r\n g = 0;\r\n b = 255;\r\n } else if (percent < .25) {\r\n // green up, blue constant\r\n r = 0;\r\n g = Math.floor(255 * percent / 0.25);\r\n b = 255;\r\n } else if (percent < 0.50) {\r\n //blue down, green constant\r\n ratio = (percent - 0.25) / 0.25;\r\n r = 0;\r\n g = 255;\r\n b = 255 - Math.floor(255 * ratio);\r\n } else if (percent < 0.75) {\r\n // red up, green constant\r\n ratio = (percent - 0.5) / 0.25;\r\n r = Math.floor(255 * ratio);\r\n g = 255;\r\n b = 0;\r\n } else {\r\n // green down, red constant\r\n ratio = (percent - 0.75) / 0.25;\r\n r = 255;\r\n g = 255 - Math.floor(255 * ratio);\r\n b = 0;\r\n }\r\n\r\n r = r.toFixed();\r\n g = g.toFixed();\r\n b = b.toFixed();\r\n\r\n return 'rgb(' + r + ',' + g + ',' + b + ')';\r\n };\r\n}\r\n\r\nnm.makeBlueGreenRedGradient = makeBlueGreenRedGradient;\r\n\r\n\r\n/**\r\n * Create a function that will return colors based on a gradient\r\n * @param {number} median - median value\r\n * @param {number} stdDev - standard deviation\r\n * @param {boolean} flipColors - if the colors should be flipped\r\n * @returns {colorLookupByNumber} color lookup function\r\n */\r\nexport function makeBlueGreenRedGradientZScore(median, stdDev, flipColors) {\r\n\r\n let grd = makeBlueGreenRedGradient(-2.5, 2.5, flipColors);\r\n\r\n return function (theVal) {\r\n\r\n let zScore;\r\n if (theVal == null) {\r\n zScore = null;\r\n } else {\r\n zScore = (theVal - median) / stdDev;\r\n }\r\n\r\n return grd(zScore);\r\n };\r\n}\r\n\r\nnm.makeBlueGreenRedGradientZScore = makeBlueGreenRedGradientZScore;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/util/colors.ts\n **/","/**\r\n * Created by gavorhes on 12/8/2015.\r\n */\r\n\r\nimport LayerBaseVectorGeoJson from './LayerBaseVectorGeoJson';\r\nimport mapPopup from '../olHelpers/mapPopup';\r\nimport provide from '../util/provide';\r\nimport {ol} from 'custom-ol';\r\nlet nm = provide('layers');\r\nconst $ = require('jquery');\r\n\r\n\r\nfunction checkStyleNumber(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig) {\r\n \"use strict\";\r\n\r\n //make sure one and only one configuration is defined;\r\n let configCount = 0;\r\n if (typeof itsIcon == 'string') {\r\n configCount++;\r\n }\r\n\r\n if (typeof itsLineStyle == 'object') {\r\n itsLineStyle.width = typeof itsLineStyle.width == 'number' ? itsLineStyle.width : 5;\r\n itsLineStyle.color = typeof itsLineStyle.color == 'string' ? itsLineStyle.color : 'red';\r\n configCount++;\r\n }\r\n\r\n if (typeof itsIconConfig == 'object') {\r\n itsIconConfig.defaultName = itsIconConfig.defaultName || 'Other';\r\n\r\n if (typeof itsIconConfig.iconArray == 'undefined') {\r\n itsIconConfig.iconArray = [];\r\n }\r\n\r\n configCount++;\r\n }\r\n\r\n if (typeof itsLineConfig == 'object') {\r\n itsLineConfig.defaultName = itsLineConfig.defaultName || 'Other';\r\n itsLineConfig.defaultWidth = itsLineConfig.defaultWidth || 5;\r\n itsLineConfig.defaultColor = itsLineConfig.defaultColor || 'red';\r\n\r\n\r\n if (typeof itsLineConfig.lineArray == 'undefined') {\r\n itsLineConfig.lineArray = [];\r\n }\r\n\r\n // set the width if not defined\r\n for (let i = 0; i < itsLineConfig.lineArray.length; i++) {\r\n if (itsLineConfig.lineArray[i].length == 3) {\r\n itsLineConfig.lineArray[i].push(5);\r\n }\r\n }\r\n\r\n configCount++;\r\n }\r\n\r\n if (configCount > 1) {\r\n throw 'Only one style config can be defined';\r\n }\r\n}\r\n\r\n/**\r\n *\r\n * @param {string} [itsIcon=undefined] the ITS device type icon image see http://transportal.cee.wisc.edu/its/inventory/icons/\r\n *\r\n * @param {object} [itsLineStyle=undefined] A single line style\r\n * @param {string} itsLineStyle.color the line color as rgb or hex\r\n * @param {number} [itsLineStyle.width=5] the line width\r\n *\r\n * @param {object} [itsIconConfig=undefined] The icon subtype configuration\r\n * @param {string} itsIconConfig.prop The property used to define icon attribute symbolization\r\n * @param {string} itsIconConfig.defaultName The default name to be used if no other match is found\r\n * @param {string} itsIconConfig.defaultIcon The default icon to be used for no other matches\r\n * @param {object} [itsIconConfig.iconArray=[]] an array, items with format [property, name, img]\r\n *\r\n * @param {object} [itsLineConfig=undefined] The property used to define icon attribute symbolization\r\n * @param {string} itsLineConfig.prop The property used to define icon attribute symbolization\r\n * @param {string} [itsLineConfig.defaultName=Other] The default name to be used if no other match is found\r\n * @param {string} [itsLineConfig.defaultColor=red] The default line color to be used for no other matches\r\n * @param {number} [itsLineConfig.defaultWidth=5] The default line width to be used for no other matches\r\n * @param {object} [itsLineConfig.lineArray=[]] an array, items with format [property, name, color, optional width]\r\n * @returns {*} undefined, style, or style function\r\n */\r\nfunction defineStyle(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig) : ol.style.Style|Array<ol.style.Style>|ol.style.StyleFunction|Function{\r\n \"use strict\";\r\n checkStyleNumber(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig);\r\n\r\n let _iconUrlRoot = 'http://transportal.cee.wisc.edu/its/inventory/icons/';\r\n\r\n if (itsIcon) {\r\n return new ol.style.Style({\r\n image: new ol.style.Icon(\r\n {\r\n src: _iconUrlRoot + itsIcon,\r\n crossOrigin: 'anonymous'\r\n }\r\n )\r\n });\r\n } else if (itsLineStyle) {\r\n return new ol.style.Style({\r\n stroke: new ol.style.Stroke({\r\n color: itsLineStyle.color,\r\n width: itsLineStyle.width\r\n })\r\n });\r\n } else if (itsIconConfig) {\r\n return function (feature, resolution) {\r\n let symbolProp = feature.getProperties()[itsIconConfig.prop];\r\n let iconUrl = _iconUrlRoot + itsIconConfig.defaultIcon;\r\n\r\n for (let i = 0; i < itsIconConfig.iconArray.length; i++) {\r\n let thisProp = itsIconConfig.iconArray[i];\r\n\r\n if (symbolProp.trim().toLocaleLowerCase() == thisProp[0].trim().toLocaleLowerCase()) {\r\n iconUrl = _iconUrlRoot + thisProp[2];\r\n break;\r\n }\r\n }\r\n\r\n return [new ol.style.Style({\r\n image: new ol.style.Icon(\r\n {\r\n src: iconUrl,\r\n crossOrigin: 'anonymous'\r\n }\r\n )\r\n })];\r\n };\r\n } else if (itsLineConfig) {\r\n return function (feature) {\r\n let symbolProp = feature.getProperties()[itsLineConfig.prop];\r\n let colr = itsLineConfig.defaultColor || 'red';\r\n let width = itsLineConfig.defaultWidth || 5;\r\n\r\n for (let i = 0; i < itsLineConfig.lineArray.length; i++) {\r\n let thisProp = itsLineConfig.lineArray[i];\r\n\r\n if (symbolProp.trim().toLocaleLowerCase() == thisProp[0].trim().toLocaleLowerCase()) {\r\n colr = thisProp[2];\r\n width = thisProp[3];\r\n break;\r\n }\r\n }\r\n\r\n return [new ol.style.Style({\r\n stroke: new ol.style.Stroke({\r\n color: colr,\r\n width: width\r\n })\r\n })];\r\n };\r\n } else {\r\n return undefined;\r\n }\r\n}\r\n\r\n/**\r\n *\r\n * @param {string} [itsIcon=undefined] the ITS device type icon image see http://transportal.cee.wisc.edu/its/inventory/icons/\r\n *\r\n * @param {object} [itsLineStyle=undefined] A single line style\r\n * @param {string} itsLineStyle.color the line color as rgb or hex\r\n * @param {number} [itsLineStyle.width=5] the line width\r\n *\r\n * @param {object} [itsIconConfig=undefined] The icon subtype configuration\r\n * @param {string} itsIconConfig.prop The property used to define icon attribute symbolization\r\n * @param {string} itsIconConfig.defaultName The default name to be used if no other match is found\r\n * @param {string} itsIconConfig.defaultIcon The default icon to be used for no other matches\r\n * @param {object} [itsIconConfig.iconArray=[]] an array, items with format [property, name, img]\r\n *\r\n * @param {object} [itsLineConfig=undefined] The property used to define icon attribute symbolization\r\n * @param {string} itsLineConfig.prop The property used to define icon attribute symbolization\r\n * @param {string} [itsLineConfig.defaultName=Other] The default name to be used if no other match is found\r\n * @param {string} [itsLineConfig.defaultColor=red] The default line color to be used for no other matches\r\n * @param {number} [itsLineConfig.defaultWidth=5] The default line width to be used for no other matches\r\n * @param {object} [itsLineConfig.lineArray=[]] an array, items with format [property, name, color, optional width]\r\n * @returns {string} html to be added to the legend\r\n */\r\nfunction defineLegend(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig) {\r\n \"use strict\";\r\n\r\n let iconHeight = 17;\r\n\r\n checkStyleNumber(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig);\r\n\r\n let _iconUrlRoot = 'http://transportal.cee.wisc.edu/its/inventory/icons/';\r\n\r\n if (itsIcon) {\r\n return `<img src=\"${_iconUrlRoot + itsIcon}\" class=\"legend-layer-icon\" height=\"${iconHeight}\">`;\r\n } else if (itsLineStyle) {\r\n return `<hr style=\"height: ${itsLineStyle.width}px; background-color: ${itsLineStyle.color}\">`;\r\n } else if (itsIconConfig) {\r\n let outHtml = '';\r\n outHtml += '<ul>';\r\n\r\n for (let a of itsIconConfig.iconArray) {\r\n outHtml += `<li><span class=\"legend-layer-subitem\">${a[1]}</span><img src=\"${_iconUrlRoot + a[2]}\" class=\"legend-layer-icon\" height=\"${iconHeight}\">`;\r\n }\r\n outHtml += `<li><span class=\"legend-layer-subitem\">${itsIconConfig.defaultName}</span>` +\r\n `<img src=\"${_iconUrlRoot + itsIconConfig.defaultIcon}\" class=\"legend-layer-icon\" height=\"${iconHeight}\"></li>`;\r\n outHtml += '</ul>';\r\n\r\n return outHtml;\r\n } else if (itsLineConfig) {\r\n let outHtml = '';\r\n outHtml += '<ul>';\r\n for (let ls of itsLineConfig.lineArray) {\r\n outHtml += `<li><span class=\"legend-layer-subitem\">${ls[1]}</span>` +\r\n `<hr style=\"height: ${ls[3]}px; background-color: ${ls[2]}\">`;\r\n }\r\n outHtml += `<li><span class=\"legend-layer-subitem\">${itsLineConfig.defaultName}</span>` +\r\n `<hr style=\"height: ${itsLineConfig.defaultWidth}px; background-color: ${itsLineConfig.defaultColor}\"></li>`;\r\n outHtml += '</ul>';\r\n\r\n return outHtml;\r\n } else {\r\n return '';\r\n }\r\n}\r\n\r\n/**\r\n * Its Layer class\r\n * @augments LayerBaseVectorGeoJson\r\n */\r\nclass LayerItsInventory extends LayerBaseVectorGeoJson {\r\n\r\n /**\r\n * ITS device layer, types available at http://transportal.cee.wisc.edu/its/inventory/\r\n * @param {object} options - config\r\n * @param {string} [options.id] - layer id\r\n * @param {string} [options.name=Unnamed Layer] - layer name\r\n * @param {number} [options.opacity=1] - opacity\r\n * @param {boolean} [options.visible=true] - default visible\r\n * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28\r\n * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28\r\n * @param {object} [options.params={}] the get parameters to include to retrieve the layer\r\n * @param {number} [options.zIndex=0] the z index for the layer\r\n * @param {function} [options.loadCallback] function to call on load, context this is the layer object\r\n * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed\r\n * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility\r\n * @param {boolean} [options.legendContent] additional content to add to the legend\r\n *\r\n * @param {boolean} [options.autoLoad=false] if the layer should auto load if not visible\r\n * @param {object|*} [options.style=undefined] the layer style, use openlayers default style if not defined\r\n * @param {boolean} [options.onDemand=false] if the layer should be loaded by extent on map move\r\n * @param {number} [options.onDemandDelay=300] delay before the map move callback should be called\r\n * @param {MapMoveCls} [options.mapMoveObj=mapMove] alternate map move object for use with multi map pages\r\n *\r\n * @param {string} options.itsType the ITS device type, use the url flag at http://transportal.cee.wisc.edu/its/inventory/\r\n * @param {boolean} [options.addPopup=true] if the popup should be added automatically\r\n *\r\n * @param {string} [options.itsIcon=undefined] the ITS device type icon image see http://transportal.cee.wisc.edu/its/inventory/icons/\r\n *\r\n * @param {object} [options.itsLineStyle=undefined] A single line style\r\n * @param {string} options.itsLineStyle.color the line color as rgb or hex\r\n * @param {number} [options.itsLineStyle.width=5] the line width\r\n *\r\n * @param {object} [options.itsIconConfig=undefined] The icon subtype configuration\r\n * @param {string} options.itsIconConfig.prop The property used to define icon attribute symbolization\r\n * @param {string} options.itsIconConfig.defaultName The default name to be used if no other match is found\r\n * @param {string} options.itsIconConfig.defaultIcon The default icon to be used for no other matches\r\n * @param {object} [options.itsIconConfig.iconArray=[]] an array, items with format [property, name, img]\r\n *\r\n * @param {object} [options.itsLineConfig=undefined] The property used to define icon attribute symbolization\r\n * @param {string} options.itsLineConfig.prop The property used to define icon attribute symbolization\r\n * @param {string} [options.itsLineConfig.defaultName=Other] The default name to be used if no other match is found\r\n * @param {string} [options.itsLineConfig.defaultColor=red] The default line color to be used for no other matches\r\n * @param {number} [options.itsLineConfig.defaultWidth] The default line width to be used for no other matches\r\n * @param {object} [options.itsLineConfig.lineArray=[]] an array, items with format [property, name, color, optional width = 5]\r\n */\r\n constructor(options) {\r\n if (typeof options.itsType !== 'string') {\r\n throw 'its type must be defined';\r\n }\r\n\r\n let addToLegend = '';\r\n\r\n // define a style with the helper function if it is not explicitly defined\r\n if (typeof options.style == 'undefined') {\r\n options.style = defineStyle(\r\n options.itsIcon, options.itsLineStyle, options.itsIconConfig, options.itsLineConfig\r\n );\r\n addToLegend = defineLegend(\r\n options.itsIcon, options.itsLineStyle, options.itsIconConfig, options.itsLineConfig\r\n );\r\n }\r\n\r\n options.params = typeof options.params == 'object' ? options.params : {};\r\n $.extend(options.params, {format: 'JSON', resource: options.itsType});\r\n\r\n super('http://transportal.cee.wisc.edu/its/inventory/', options);\r\n\r\n //add any additional content to the legend\r\n this.addLegendContent(addToLegend);\r\n\r\n options.addPopup = typeof options.addPopup == 'boolean' ? options.addPopup : true;\r\n\r\n if (options.addPopup) {\r\n mapPopup.addVectorPopup(this, function (props) {\r\n return `<iframe src=\"http://transportal.cee.wisc.edu/its/inventory/?feature=${props['featureGuid']}\" ` +\r\n `height=\"250\" width=\"350\"></iframe>`;\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * callback to generate the parameters passed in the get request\r\n * @callback makeGetParams\r\n * @param {object} extent - extent object\r\n * @param {number} extent.minX - minX\r\n * @param {number} extent.minY - minY\r\n * @param {number} extent.maxX - maxX\r\n * @param {number} extent.maxY - maxY\r\n * @param {number} zoomLevel - zoom level\r\n */\r\n mapMoveMakeGetParams(extent, zoomLevel) {\r\n super.mapMoveMakeGetParams(extent, zoomLevel);\r\n let lowerLeft = new ol.geom.Point([extent.minX, extent.minY]);\r\n lowerLeft.transform(this.mapProj, this._projection4326);\r\n let lowerLeftCoordinates = lowerLeft.getCoordinates();\r\n let upperRight = new ol.geom.Point([extent.maxX, extent.maxY]);\r\n upperRight.transform(this.mapProj, this._projection4326);\r\n let upperRightCoordinates = upperRight.getCoordinates();\r\n\r\n $.extend(this.mapMoveParams,\r\n {\r\n L: lowerLeftCoordinates[0],\r\n R: upperRightCoordinates[0],\r\n B: lowerLeftCoordinates[1],\r\n T: upperRightCoordinates[1]\r\n });\r\n }\r\n}\r\n\r\nnm.LayerItsInventory = LayerItsInventory;\r\nexport default LayerItsInventory;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/layers/LayerItsInventory.ts\n **/","/**\r\n * Created by gavorhes on 11/2/2015.\r\n */\r\n\r\nimport {LayerBaseVector, LayerBaseVectorOptions} from './LayerBaseVector';\r\nimport provide from '../util/provide';\r\nimport {ol} from 'custom-ol';\r\nimport {MapMoveCls} from \"../olHelpers/mapMoveCls\";\r\nlet nm = provide('layers');\r\nconst $ = require('jquery');\r\n\r\nexport interface LayerBaseVectorGeoJsonOptions extends LayerBaseVectorOptions{\r\n transform?: CrsTransform;\r\n mapMoveObj?: MapMoveCls;\r\n}\r\n\r\nexport interface CrsTransform{\r\n dataProjection: ol.proj.Projection|string;\r\n featureProjection: ol.proj.Projection|string;\r\n}\r\n\r\n/**\r\n * The Vector GeoJson Layer\r\n * @augments LayerBaseVector\r\n */\r\nclass LayerBaseVectorGeoJson extends LayerBaseVector {\r\n _geoJsonFormat: ol.format.GeoJSON;\r\n _transform: CrsTransform;\r\n\r\n /**\r\n * @param {string|undefined|null} url - resource url, set to '' to make blank layer\r\n * @param {object} options - config\r\n * @param {string} [options.id] - layer id\r\n * @param {string} [options.name=Unnamed Layer] - layer name\r\n * @param {number} [options.opacity=1] - opacity\r\n * @param {boolean} [options.visible=true] - default visible\r\n * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28\r\n * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28\r\n * @param {object} [options.params={}] the get parameters to include to retrieve the layer\r\n * @param {number} [options.zIndex=0] the z index for the layer\r\n * @param {function} [options.loadCallback] function to call on load, context this is the layer object\r\n * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed\r\n * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility\r\n * @param {boolean} [options.legendContent] additional content to add to the legend\r\n *\r\n * @param {boolean} [options.autoLoad=false] if the layer should auto load if not visible\r\n * @param {object} [options.style=undefined] the layer style, use openlayers default style if not defined\r\n * @param {boolean} [options.onDemand=false] if the layer should be loaded by extent on map move\r\n * @param {number} [options.onDemandDelay=300] delay before the map move callback should be called\r\n *\r\n * @param {object} [options.transform={}] SR transform, set as false for no transform\r\n * @param {string} options.transform.dataProjection=EPSG:4326 the data CRS\r\n * @param {string} options.transform.featureProjection=EPSG:3857 the feature/map CRS\r\n * @param {mapMoveMakeGetParams} [options.mapMoveMakeGetParams=function(lyr, extent, zoomLevel){}] function to create additional map move params\r\n * @param {MapMoveCls} [options.mapMoveObj=mapMove] alternate map move object for use with multi map pages\r\n */\r\n constructor(url, options?: LayerBaseVectorGeoJsonOptions) {\r\n url = typeof url == 'string' ? url : '';\r\n super(url, options);\r\n\r\n this._geoJsonFormat = new ol.format.GeoJSON();\r\n\r\n this._transform = options.transform || {dataProjection: \"EPSG:4326\", featureProjection: \"EPSG:3857\"};\r\n\r\n if (this.autoLoad || this.visible) {\r\n this._load();\r\n }\r\n }\r\n\r\n /**\r\n * add feature collection\r\n * @param {object} featureCollection - as geojson object\r\n */\r\n addFeatures(featureCollection: JSON) {\r\n if (this._transform.dataProjection == 'EPSG:3857' && this._transform.featureProjection == 'EPSG:3857') {\r\n this._source.addFeatures(this._geoJsonFormat.readFeatures(featureCollection));\r\n } else {\r\n this._source.addFeatures(this._geoJsonFormat.readFeatures(featureCollection, this._transform as Object));\r\n }\r\n }\r\n\r\n /**\r\n * trigger load features\r\n * @protected\r\n * @returns {boolean} if already loaded\r\n */\r\n _load() {\r\n\r\n if (super._load()) {\r\n return true;\r\n }\r\n\r\n $.get(this._url,\r\n this._params,\r\n (d) => {\r\n this.addFeatures(d);\r\n this.loadCallback(this);\r\n }, 'json').fail(\r\n function () {\r\n this._loaded = false;\r\n }\r\n );\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * callback function on map move\r\n * @param {object} d the json response\r\n * @override\r\n */\r\n mapMoveCallback(d) {\r\n super.mapMoveCallback(d);\r\n this._source.addFeatures(this._geoJsonFormat.readFeatures(d, this._transform as Object));\r\n }\r\n}\r\n\r\nnm.LayerBaseVectorGeoJson = LayerBaseVectorGeoJson;\r\nexport default LayerBaseVectorGeoJson;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/layers/LayerBaseVectorGeoJson.ts\n **/","import {LayerBase, LayerBaseOptions} from './LayerBase';\r\nimport mapMove from '../olHelpers/mapMove';\r\nimport MapMoveCls from '../olHelpers/mapMoveCls'\r\nimport provide from '../util/provide';\r\nimport {ol} from 'custom-ol';\r\nconst $ = require('jquery');\r\n\r\nlet g = new ol.Map({});\r\n\r\nconst nm = provide('layers');\r\n\r\nexport interface makeMapMoveParams {\r\n /**\r\n *\r\n * @param lyr\r\n * @param extent\r\n * @param zoomLevel\r\n */\r\n (lyr: LayerBaseVector, extent: Array<number>, zoomLevel?: number): any\r\n}\r\n\r\n\r\nexport interface LayerBaseVectorOptions extends LayerBaseOptions{\r\n autoLoad?: boolean;\r\n style?: ol.style.Style|Array<ol.style.Style>|ol.style.StyleFunction;\r\n onDemand?: boolean;\r\n onDemandDelay?: number;\r\n mapMoveMakeGetParams?: makeMapMoveParams;\r\n mapMoveObj?: MapMoveCls;\r\n}\r\n\r\nexport interface customStyleFunction{\r\n (feature: ol.Feature, resolution?: number): Array<ol.style.Style>\r\n}\r\n\r\n/**\r\n * The Vector layer base\r\n * @augments LayerBase\r\n * @abstract\r\n */\r\nexport class LayerBaseVector extends LayerBase {\r\n _olLayer: ol.layer.Vector;\r\n _source: ol.source.Vector;\r\n _style: ol.style.Style|Array<ol.style.Style>|ol.style.StyleFunction|customStyleFunction;\r\n _autoLoad: boolean;\r\n _onDemand: boolean;\r\n _onDemandDelay: number;\r\n _mapMoveMakeGetParams: makeMapMoveParams;\r\n _mapMoveParams: any;\r\n _mapMove: MapMoveCls;\r\n _projectionMap: ol.proj.Projection;\r\n _projection4326: ol.proj.Projection;\r\n\r\n\r\n\r\n /**\r\n * The base vector layer\r\n * @param {string} url - pass an empty string to prevent default load and add from a json source\r\n * @param {object} options - config\r\n * @param {string} [options.id] - layer id\r\n * @param {string} [options.name=Unnamed Layer] - layer name\r\n * @param {number} [options.opacity=1] - opacity\r\n * @param {boolean} [options.visible=true] - default visible\r\n * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28\r\n * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28\r\n * @param {object} [options.params={}] the get parameters to include to retrieve the layer\r\n * @param {number} [options.zIndex=0] the z index for the layer\r\n * @param {function} [options.loadCallback] function to call on load, context this is the layer object\r\n * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed\r\n * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility\r\n * @param {boolean} [options.legendContent] additional content to add to the legend\r\n *\r\n * @param {boolean} [options.autoLoad=false] if the layer should auto load if not visible\r\n * @param {object} [options.style=undefined] the layer style, use openlayers default style if not defined\r\n * @param {boolean} [options.onDemand=false] if the layer should be loaded by extent on map move\r\n * @param {number} [options.onDemandDelay=300] delay before the map move callback should be called\r\n * @param {mapMoveMakeGetParams} [options.mapMoveMakeGetParams=function(lyr, extent, zoomLevel){}] function to create additional map move params\r\n * @param {MapMoveCls} [options.mapMoveObj=mapMove] alternate map move object for use with multi map pages\r\n *\r\n */\r\n constructor(url: string, options: LayerBaseVectorOptions = {}) {\r\n super(url, options);\r\n\r\n options = options as LayerBaseVectorOptions;\r\n\r\n //prevent regular load if no url has been provided\r\n if (this.url.trim() == '') {\r\n this._loaded = true;\r\n }\r\n\r\n this._style = typeof options.style == 'undefined' ? undefined : options.style;\r\n\r\n if (this.visible) {\r\n this._autoLoad = true;\r\n } else {\r\n this._autoLoad = (typeof options['autoLoad'] == 'boolean' ? options['autoLoad'] : false);\r\n }\r\n\r\n this._onDemand = typeof options.onDemand == 'boolean' ? options.onDemand : false;\r\n this._onDemandDelay = typeof options.onDemandDelay == 'number' ? options.onDemandDelay : 300;\r\n\r\n if (options.mapMoveObj) {\r\n this._mapMove = options.mapMoveObj;\r\n } else {\r\n this._mapMove = this._onDemand ? mapMove : undefined;\r\n }\r\n\r\n\r\n this._mapMoveMakeGetParams = typeof options.mapMoveMakeGetParams == 'function' ? options.mapMoveMakeGetParams :\r\n function () {return {};};\r\n\r\n if (this._onDemand) {\r\n this._loaded = true;\r\n this._mapMoveParams = {};\r\n this._mapMove.checkInit();\r\n this._mapMove.addVectorLayer(this);\r\n }\r\n\r\n this._source = new ol.source.Vector();\r\n\r\n this._olLayer = new ol.layer.Vector(\r\n {\r\n source: this._source,\r\n visible: this.visible,\r\n style: this.style,\r\n minResolution: this._minResolution,\r\n maxResolution: this._maxResolution,\r\n zIndex: this._zIndex\r\n }\r\n );\r\n\r\n this._projectionMap = null;\r\n this._projection4326 = new ol.proj.Projection({code: \"EPSG:4326\"});\r\n }\r\n\r\n /**\r\n * dummy to be overridden\r\n * @param {object} featureCollection - geojson or esrijson object\r\n */\r\n addFeatures(featureCollection) {\r\n console.log('Layer vector base addFeatures is a placeholder and does nothing');\r\n }\r\n\r\n /**\r\n * Before call to map move callback, can prevent call by returning false\r\n * @param {number} zoom - zoom level\r\n * @param {string} [evtType=undefined] undefined for initial load, otherwise one of 'change:center', 'change:resolution'\r\n * @returns {boolean} if the call should proceed\r\n */\r\n mapMoveBefore(zoom, evtType) {\r\n if (this.minZoom !== undefined) {\r\n if (zoom < this.minZoom) {\r\n return false;\r\n }\r\n }\r\n\r\n if (this.maxZoom !== undefined) {\r\n if (zoom > this.maxZoom) {\r\n return false;\r\n }\r\n }\r\n\r\n return this.visible;\r\n }\r\n\r\n /**\r\n * callback to generate the parameters passed in the get request\r\n * @param {object} extent - extent object\r\n * @param {number} extent.minX - minX\r\n * @param {number} extent.minY - minY\r\n * @param {number} extent.maxX - maxX\r\n * @param {number} extent.maxY - maxY\r\n * @param {number} zoomLevel - zoom level\r\n */\r\n mapMoveMakeGetParams(extent, zoomLevel) {\r\n this._mapMoveParams = {};\r\n $.extend(this._mapMoveParams, this.params);\r\n $.extend(this._mapMoveParams, this._mapMoveMakeGetParams(this, extent, zoomLevel));\r\n }\r\n\r\n /**\r\n * callback function on map move\r\n * @param {object} d - the json response\r\n */\r\n mapMoveCallback(d) {\r\n if (this.source) {\r\n this._source.clear();\r\n }\r\n }\r\n\r\n /**\r\n * clear features in the layer\r\n */\r\n clear() {\r\n if (this._source) {\r\n this._source.clear();\r\n }\r\n }\r\n\r\n /**\r\n * get on demand delay in miliseconds\r\n */\r\n get onDemandDelay(): number {\r\n return this._onDemandDelay;\r\n }\r\n\r\n /**\r\n * get if the layer is autoloaded\r\n */\r\n get autoLoad(): boolean {\r\n return this._autoLoad;\r\n }\r\n\r\n /**\r\n * get the style definition\r\n */\r\n get style(): ol.style.StyleFunction|Array<ol.style.Style>|ol.style.Style|customStyleFunction {\r\n return this._style;\r\n }\r\n\r\n /**\r\n * set the style\r\n * @param style - the style or function\r\n */\r\n set style(style: ol.style.StyleFunction|Array<ol.style.Style>|ol.style.Style|customStyleFunction) {\r\n this._style = style;\r\n this.olLayer.setStyle(this._style as ol.style.Style);\r\n }\r\n\r\n /**\r\n * get the map CRS if it is defined by the map move object\r\n */\r\n get mapCrs(): string {\r\n return this.mapProj == null ? null : this.mapProj.getCode();\r\n }\r\n\r\n get mapProj(): ol.proj.Projection{\r\n if (this._projectionMap != null){\r\n return this._projectionMap;\r\n }\r\n\r\n if (this._mapMove) {\r\n this._projectionMap = this._mapMove.map.getView().getProjection();\r\n return this._projectionMap;\r\n } else {\r\n return null;\r\n }\r\n\r\n }\r\n\r\n /**\r\n * get the map move object\r\n * @type {MapMoveCls|*}\r\n */\r\n get mapMove(): MapMoveCls {\r\n return this._mapMove;\r\n }\r\n\r\n /**\r\n * map move params\r\n * @type {object}\r\n */\r\n get mapMoveParams() {\r\n return this._mapMoveParams;\r\n }\r\n\r\n get visible(): boolean{\r\n return this._visible;\r\n }\r\n\r\n /**\r\n * Set the layer visibility\r\n * @type {boolean}\r\n * @override\r\n */\r\n set visible(visibility) {\r\n super.setVisible(visibility);\r\n\r\n if (this._onDemand) {\r\n this.mapMove.triggerLyrLoad(this);\r\n }\r\n }\r\n\r\n /**\r\n * get the layer vector source\r\n * @override\r\n */\r\n get source(): ol.source.Vector {\r\n return this.getSource() as ol.source.Vector;\r\n }\r\n\r\n /**\r\n * array of ol features\r\n */\r\n get features(): Array<ol.Feature> {\r\n return this.source.getFeatures();\r\n }\r\n\r\n /**\r\n *\r\n */\r\n get olLayer(): ol.layer.Vector {\r\n return super.getOlLayer() as ol.layer.Vector;\r\n }\r\n\r\n protected setZIndex(newZ: number) {\r\n this.olLayer.setZIndex(newZ);\r\n }\r\n}\r\n\r\nnm.LayerBaseVector = LayerBaseVector;\r\nexport default LayerBaseVector;\r\n\r\n\r\n\r\n\r\n\r\n\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/layers/LayerBaseVector.ts\n **/","/**\r\n * Created by gavorhes on 12/16/2015.\r\n */\r\n\r\nimport provide from '../util/provide';\r\nimport makeGuid from '../util/makeGuid';\r\nimport mapMove from '../olHelpers/mapMove';\r\nlet nm = provide('collections');\r\nimport {ol} from 'custom-ol';\r\nconst $ = require('jquery');\r\n\r\nclass LayerGroup {\r\n groupLayers: any;\r\n groupLayersLookup: any;\r\n groupGroupsLookup: any;\r\n groupGroups: any;\r\n itemIdArray: any;\r\n groupId: any;\r\n groupName: any;\r\n allLayerArray: any;\r\n parent: any;\r\n allGroupArray: any;\r\n allGroupLookup: any;\r\n allLayerLookup: any;\r\n collapse: any;\r\n addCheck: any;\r\n layerParentLookup: any;\r\n\r\n /**\r\n *\r\n * @param {object} [groupConfig={}] - group configuration object\r\n * @param {string} groupConfig.groupName - the group name\r\n * @param {boolean} [groupConfig.collapse=false] - if the group should be collapsed initially\r\n * @param {boolean} [groupConfig.addCheck=true] - if the group should have a checkbox controlling visibility of all layers\r\n * @param {LayerGroup} [parent=undefined] - the parent group\r\n */\r\n constructor(groupConfig?, parent?) {\r\n this.groupLayers = [];\r\n this.groupLayersLookup = {};\r\n this.groupGroups = [];\r\n this.groupGroupsLookup = {};\r\n this.itemIdArray = [];\r\n\r\n if (typeof groupConfig == 'undefined') {\r\n this.parent = null;\r\n this.groupId = 'root';\r\n this.groupName = 'root';\r\n this.allGroupLookup = {root: this};\r\n this.allGroupArray = [this];\r\n this.allLayerArray = [];\r\n this.allLayerLookup = {};\r\n this.layerParentLookup = {};\r\n this.collapse = false;\r\n this.addCheck = false;\r\n } else {\r\n this.groupId = makeGuid();\r\n this.parent = parent;\r\n this.groupName = groupConfig.groupName;\r\n this.collapse = typeof groupConfig.collapse == 'boolean' ? groupConfig.collapse : false;\r\n this.addCheck = typeof groupConfig.addCheck == 'boolean' ? groupConfig.addCheck : true;\r\n }\r\n }\r\n\r\n /**\r\n *\r\n * @param {object} groupConfig - configuration object\r\n * @param {string} groupConfig.groupName - the group name\r\n * @param {boolean} groupConfig.collapse if the group should be collapsed initially\r\n * @param {boolean} groupConfig.addCheck if the group should have a checkbox controlling visibility of all layers\r\n * @param {Array<LayerGroup>} parents parent groups\r\n * @returns {LayerGroup} the layer group just added\r\n */\r\n addGroup(groupConfig, parents) {\r\n let parent;\r\n if (parents.length > 0) {\r\n parent = parents[parents.length - 1];\r\n } else {\r\n parent = 'root';\r\n }\r\n\r\n\r\n /**\r\n * @type {LayerGroup}\r\n */\r\n let parentGroup = this.allGroupLookup[parent];\r\n let newGroup = new LayerGroup(groupConfig, parentGroup);\r\n this.allGroupLookup[newGroup.groupId] = newGroup;\r\n this.allGroupArray.push(newGroup);\r\n\r\n parentGroup.groupGroups.push(newGroup);\r\n parentGroup.groupGroupsLookup[newGroup.groupId] = newGroup;\r\n\r\n if (parentGroup.itemIdArray.indexOf(newGroup.groupId) > 0) {\r\n console.log(newGroup.groupId);\r\n throw 'layer and group ids must be unique';\r\n }\r\n parentGroup.itemIdArray.push(newGroup.groupId);\r\n\r\n return newGroup;\r\n }\r\n\r\n /**\r\n *\r\n * @param {LayerBase} newLayer the layer to be added\r\n * @param {Array} parents array\r\n */\r\n addLegendLayer(newLayer, parents) {\r\n let parent;\r\n if (parents.length > 0) {\r\n parent = parents[parents.length - 1];\r\n } else {\r\n parent = 'root';\r\n }\r\n\r\n this.allLayerLookup[newLayer.id] = newLayer;\r\n this.allLayerArray.push(newLayer);\r\n\r\n /**\r\n * @type {LayerGroup}\r\n */\r\n let parentGroup = this.allGroupLookup[parent];\r\n\r\n parentGroup.groupLayers.push(newLayer);\r\n parentGroup.groupLayersLookup[newLayer.id] = newLayer;\r\n if (parentGroup.itemIdArray.indexOf(newLayer.id) > 0) {\r\n console.log(newLayer.id);\r\n throw 'layer and group ids must be unique';\r\n }\r\n parentGroup.itemIdArray.push(newLayer.id);\r\n\r\n this.layerParentLookup[newLayer.id] = parentGroup;\r\n\r\n }\r\n\r\n getLegendHtml(legendId, options) {\r\n\r\n\r\n let legendHtml = `<ul id=\"${legendId}\" class=\"legend-container\">`;\r\n\r\n legendHtml += `<li>${options.legendTitle}<input type=\"checkbox\" checked id=\"suppress-by-extent-${legendId}\" class=\"suppress-by-extent\">` +\r\n `<label title=\"Suppress layers not visible at this zoom level\" for=\"suppress-by-extent-${legendId}\">` +\r\n `<span></span>` +\r\n `</label></li>`;\r\n\r\n legendHtml += this._buildLegend(this.itemIdArray, this, options.layerDivClasses) + '</ul>';\r\n\r\n return legendHtml;\r\n }\r\n\r\n /**\r\n * @param {Array} itemIds the items to process\r\n * @param {LayerGroup} theGroup new group\r\n * @param {Array} [layerDivClasses=[]] optional classes to apply to the layer divs\r\n * @static\r\n * @returns {string} html string\r\n */\r\n _buildLegend(itemIds, theGroup, layerDivClasses) {\r\n\r\n if (itemIds.length == 0) {\r\n return '';\r\n }\r\n\r\n let theHml = '';\r\n\r\n let itemId = itemIds[0];\r\n\r\n if (theGroup.groupLayersLookup[itemId]) {\r\n\r\n /**\r\n * @type {LayerBase}\r\n */\r\n let lyr = theGroup.groupLayersLookup[itemId];\r\n theHml += `<li id=\"${lyr.id}-layer-li\" class=\"legend-layer-li ${layerDivClasses.join(' ')}\">` + lyr.getLegendDiv() + '</li>';\r\n\r\n\r\n } else if (theGroup.groupGroupsLookup[itemId]) {\r\n /**\r\n * type {LayerGroup}\r\n */\r\n let otherGroup = theGroup.groupGroupsLookup[itemId];\r\n\r\n theHml += `<li>`;\r\n theHml += `<div id=\"${otherGroup.groupId}-legend-layer-div\" ` +\r\n `class=\"legend-layer-group ${layerDivClasses.join(' ')}\">`;\r\n\r\n if (otherGroup.addCheck) {\r\n theHml += `<input type=\"checkbox\" checked id=\"${otherGroup.groupId}-group-chck\">` +\r\n `<label for=\"${otherGroup.groupId}-group-chck\" title=\"Click arrow to expand or collapse\">${otherGroup.groupName}</label>`;\r\n } else {\r\n theHml += `<label title=\"Click arrow to expand or collapse\">${otherGroup.groupName}</label>`;\r\n }\r\n\r\n theHml += `<span title=\"Expand/Collapse\" class=\"layer-group-expander`;\r\n theHml += `${otherGroup.collapse ? ' legend-layer-group-initial-collapse' : ''}\">`;\r\n theHml += otherGroup.collapse ? '▶' : '▼';\r\n theHml += '</span>';\r\n\r\n //parents.push(groupId);\r\n theHml += '<ul>' + this._buildLegend(otherGroup.itemIdArray, otherGroup, layerDivClasses) + '</ul>';\r\n theHml += '</div>';\r\n theHml += '</li>';\r\n }\r\n\r\n return theHml + this._buildLegend(itemIds.slice(1), theGroup, layerDivClasses);\r\n }\r\n}\r\n\r\n/**\r\n * a wrapper to make a legend\r\n */\r\nclass LayerLegend {\r\n\r\n $divElement: any;\r\n _legendItems: any;\r\n layerGroup: any;\r\n legendId: any;\r\n\r\n /**\r\n *\r\n * @param {Array} legendItems array of layers or objects with {groupName: {string}, collapse: {boolean}, addCheck: {boolean}, items: {Array}}\r\n * @param {string} divId the div where the legend should be added\r\n * @param {object} options for legend\r\n * @param {Array} [options.layerDivClasses=[]] optional array of classes to be applied to the layer legend divs for custom styling\r\n * @param {string} [options.legendTitle=Legend] the legend title\r\n * @param {boolean} [options.scaleDependent=true] if legend display is scale dependent\r\n */\r\n constructor(legendItems, divId, options) {\r\n for (let i of legendItems) {\r\n if (typeof i == 'undefined') {\r\n throw 'undefined item passed in array to legend constructor';\r\n }\r\n }\r\n\r\n options = options || {};\r\n\r\n options.legendTitle = typeof options.legendTitle == 'string' ? options.legendTitle : 'Legend';\r\n options.scaleDependent = typeof options.scaleDependent == 'boolean' ? options.scaleDependent : true;\r\n options.layerDivClasses = options.layerDivClasses || [];\r\n\r\n // if legend display is scale dependent, make sure the mapMove object is initialized first\r\n if (options.scaleDependent) {\r\n mapMove.checkInit();\r\n }\r\n\r\n this.$divElement = $('#' + divId);\r\n\r\n this._legendItems = legendItems;\r\n\r\n this.layerGroup = new LayerGroup();\r\n\r\n this._buildTree(legendItems);\r\n\r\n this.legendId = makeGuid();\r\n\r\n this.$divElement.append(this.layerGroup.getLegendHtml(this.legendId, options));\r\n\r\n for (let l of this.layerGroup.allLayerArray){\r\n l.applyCollapse();\r\n }\r\n\r\n let _this = this;\r\n //// if legend display is scale dependent, make sure the mapMove object is initialized first\r\n if (options.scaleDependent) {\r\n mapMove.checkInit();\r\n\r\n mapMove.addCallback(function (ext, zoom, evt) {\r\n\r\n if (typeof evt == 'undefined' || evt == 'change:resolution') {\r\n for (let lyr of this.layerGroup.allLayerArray) {\r\n let $lyrLi = $('#' + lyr.id + '-layer-li');\r\n if (zoom > lyr.maxZoom || zoom < lyr.minZoom) {\r\n $lyrLi.addClass('layer-not-visible');\r\n } else {\r\n $lyrLi.removeClass('layer-not-visible');\r\n }\r\n }\r\n }\r\n }, this, 100, true, 'legend1');\r\n }\r\n\r\n // <editor-fold desc=\"add event listeners\">\r\n\r\n this.$divElement.find(\".suppress-by-extent\").change(function () {\r\n let legendLayerLis = $('.legend-layer-li');\r\n if (this.checked) {\r\n legendLayerLis.removeClass('layer-force-show');\r\n } else {\r\n legendLayerLis.addClass('layer-force-show');\r\n }\r\n });\r\n\r\n\r\n this.$divElement.find('.legend-check').change(function () {\r\n let lyrId = this.id.replace('-legend-layer-check', '');\r\n _this.layerGroup.allLayerLookup[lyrId].visible = this.checked;\r\n });\r\n\r\n this.$divElement.find('.legend-layer-group > input[type=checkbox]').change(function () {\r\n $(this).siblings('ul').find('input[type=checkbox]').prop('checked', this.checked).trigger('change');\r\n });\r\n\r\n this.$divElement.find('.layer-group-expander').click(function () {\r\n let $this = $(this);\r\n $this.removeClass('legend-layer-group-initial-collapse');\r\n\r\n $this.siblings('ul').slideToggle();\r\n\r\n if ($this.hasClass('legend-layer-group-collapsed')){\r\n $this.removeClass('legend-layer-group-collapsed');\r\n $this.html('▼');\r\n } else {\r\n $this.addClass('legend-layer-group-collapsed');\r\n $this.html('▶');\r\n }\r\n });\r\n\r\n this.$divElement.find('.legend-layer-group-initial-collapse').trigger('click');\r\n // </editor-fold>\r\n }\r\n\r\n\r\n /**\r\n * @param {Array} [legendItems=this._layerConfig] the legend items\r\n * @param {Array} [parents=[]] the ordered list of groups in which this item is a member\r\n * @private\r\n */\r\n _buildTree(legendItems, parents?) {\r\n\r\n if (legendItems.length == 0) {\r\n return;\r\n }\r\n\r\n let oneItem = legendItems[0];\r\n\r\n //reset the parent if the item is in the base array\r\n if (this._legendItems.indexOf(oneItem) > -1 || typeof parents == 'undefined') {\r\n parents = [];\r\n }\r\n\r\n if (typeof oneItem['groupName'] !== 'undefined') {\r\n let groupItem = legendItems[0];\r\n let newGroup = this.layerGroup.addGroup(groupItem, parents);\r\n parents.push(newGroup.groupId);\r\n this._buildTree(groupItem.items, parents);\r\n } else {\r\n /**\r\n * @type {LayerBase}\r\n */\r\n let layerItem = legendItems[0];\r\n\r\n this.layerGroup.addLegendLayer(layerItem, parents);\r\n }\r\n\r\n this._buildTree(legendItems.slice(1), parents);\r\n }\r\n\r\n}\r\n\r\nnm.LayerLegend = LayerLegend;\r\nexport default LayerLegend;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/collections/LayerLegend.ts\n **/"],"sourceRoot":""} \ No newline at end of file diff --git a/test-html/js/my_little_test.js b/test-html/js/my_little_test.js new file mode 100644 index 0000000000000000000000000000000000000000..7f7fad39ec144f0c8dea18b5d589fc9194e964e3 --- /dev/null +++ b/test-html/js/my_little_test.js @@ -0,0 +1,10278 @@ +/******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) +/******/ return installedModules[moduleId].exports; +/******/ +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ exports: {}, +/******/ id: moduleId, +/******/ loaded: false +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.loaded = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(0); +/******/ }) +/************************************************************************/ +/******/ ({ + +/***/ 0: +/***/ function(module, exports, __webpack_require__) { + + "use strict"; + var animate_buttons_1 = __webpack_require__(25); + // + // + console.log('eat this fish'); + console.log('eat this fish'); + console.log('eat this bird'); + // + // let g = new ol3.source.Vector(); + // + // console.log(olx); + console.log('i am here5'); + function me(eat) { + if (eat === void 0) { eat = 1; } + console.log(eat, 'one'); + } + me(1); + var control = new animate_buttons_1.MediaControl('map'); + // + // + // console.log(ol3); + // + // + // console.log(definedAndNotNull("fish")); + // console.log(definedAndNotNull("fish")); + // console.log(definedAndNotNull("fish")); + // console.log(definedAndNotNull("fish")); + // console.log(definedAndNotNull("fish")); + // console.log('here'); + // + + +/***/ }, + +/***/ 3: +/***/ function(module, exports, __webpack_require__) { + + var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! + * jQuery JavaScript Library v2.2.3 + * http://jquery.com/ + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2016-04-05T19:26Z + */ + + (function( global, factory ) { + + if ( typeof module === "object" && typeof module.exports === "object" ) { + // For CommonJS and CommonJS-like environments where a proper `window` + // is present, execute the factory and get jQuery. + // For environments that do not have a `window` with a `document` + // (such as Node.js), expose a factory as module.exports. + // This accentuates the need for the creation of a real `window`. + // e.g. var jQuery = require("jquery")(window); + // See ticket #14549 for more info. + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + + // Pass this if window is not defined yet + }(typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + + // Support: Firefox 18+ + // Can't be in strict mode, several libs including ASP.NET trace + // the stack via arguments.caller.callee and Firefox dies if + // you try to trace through "use strict" call chains. (#13335) + //"use strict"; + var arr = []; + + var document = window.document; + + var slice = arr.slice; + + var concat = arr.concat; + + var push = arr.push; + + var indexOf = arr.indexOf; + + var class2type = {}; + + var toString = class2type.toString; + + var hasOwn = class2type.hasOwnProperty; + + var support = {}; + + + + var + version = "2.2.3", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }, + + // Support: Android<4.1 + // Make sure we trim BOM and NBSP + rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, + + // Matches dashed string for camelizing + rmsPrefix = /^-ms-/, + rdashAlpha = /-([\da-z])/gi, + + // Used by jQuery.camelCase as callback to replace() + fcamelCase = function( all, letter ) { + return letter.toUpperCase(); + }; + + jQuery.fn = jQuery.prototype = { + + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // Start with an empty selector + selector: "", + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + return num != null ? + + // Return just the one element from the set + ( num < 0 ? this[ num + this.length ] : this[ num ] ) : + + // Return all the elements in a clean array + slice.call( this ); + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + ret.context = this.context; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + each: function( callback ) { + return jQuery.each( this, callback ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map( this, function( elem, i ) { + return callback.call( elem, i, elem ); + } ) ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: arr.sort, + splice: arr.splice + }; + + jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[ 0 ] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // Skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !jQuery.isFunction( target ) ) { + target = {}; + } + + // Extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + + // Only deal with non-null/undefined values + if ( ( options = arguments[ i ] ) != null ) { + + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject( copy ) || + ( copyIsArray = jQuery.isArray( copy ) ) ) ) { + + if ( copyIsArray ) { + copyIsArray = false; + clone = src && jQuery.isArray( src ) ? src : []; + + } else { + clone = src && jQuery.isPlainObject( src ) ? src : {}; + } + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; + }; + + jQuery.extend( { + + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + isFunction: function( obj ) { + return jQuery.type( obj ) === "function"; + }, + + isArray: Array.isArray, + + isWindow: function( obj ) { + return obj != null && obj === obj.window; + }, + + isNumeric: function( obj ) { + + // parseFloat NaNs numeric-cast false positives (null|true|false|"") + // ...but misinterprets leading-number strings, particularly hex literals ("0x...") + // subtraction forces infinities to NaN + // adding 1 corrects loss of precision from parseFloat (#15100) + var realStringObj = obj && obj.toString(); + return !jQuery.isArray( obj ) && ( realStringObj - parseFloat( realStringObj ) + 1 ) >= 0; + }, + + isPlainObject: function( obj ) { + var key; + + // Not plain objects: + // - Any object or value whose internal [[Class]] property is not "[object Object]" + // - DOM nodes + // - window + if ( jQuery.type( obj ) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { + return false; + } + + // Not own constructor property must be Object + if ( obj.constructor && + !hasOwn.call( obj, "constructor" ) && + !hasOwn.call( obj.constructor.prototype || {}, "isPrototypeOf" ) ) { + return false; + } + + // Own properties are enumerated firstly, so to speed up, + // if last one is own, then all properties are own + for ( key in obj ) {} + + return key === undefined || hasOwn.call( obj, key ); + }, + + isEmptyObject: function( obj ) { + var name; + for ( name in obj ) { + return false; + } + return true; + }, + + type: function( obj ) { + if ( obj == null ) { + return obj + ""; + } + + // Support: Android<4.0, iOS<6 (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; + }, + + // Evaluates a script in a global context + globalEval: function( code ) { + var script, + indirect = eval; + + code = jQuery.trim( code ); + + if ( code ) { + + // If the code includes a valid, prologue position + // strict mode pragma, execute code by injecting a + // script tag into the document. + if ( code.indexOf( "use strict" ) === 1 ) { + script = document.createElement( "script" ); + script.text = code; + document.head.appendChild( script ).parentNode.removeChild( script ); + } else { + + // Otherwise, avoid the DOM node creation, insertion + // and removal by using an indirect global eval + + indirect( code ); + } + } + }, + + // Convert dashed to camelCase; used by the css and data modules + // Support: IE9-11+ + // Microsoft forgot to hump their vendor prefix (#9572) + camelCase: function( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); + }, + + nodeName: function( elem, name ) { + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + }, + + each: function( obj, callback ) { + var length, i = 0; + + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + // Support: Android<4.1 + trim: function( text ) { + return text == null ? + "" : + ( text + "" ).replace( rtrim, "" ); + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArrayLike( Object( arr ) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + return arr == null ? -1 : indexOf.call( arr, elem, i ); + }, + + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + for ( ; j < len; j++ ) { + first[ i++ ] = second[ j ]; + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var length, value, + i = 0, + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArrayLike( elems ) ) { + length = elems.length; + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // Bind a function to a context, optionally partially applying any + // arguments. + proxy: function( fn, context ) { + var tmp, args, proxy; + + if ( typeof context === "string" ) { + tmp = fn[ context ]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if ( !jQuery.isFunction( fn ) ) { + return undefined; + } + + // Simulated bind + args = slice.call( arguments, 2 ); + proxy = function() { + return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || jQuery.guid++; + + return proxy; + }, + + now: Date.now, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support + } ); + + // JSHint would error on this code due to the Symbol not being defined in ES5. + // Defining this global in .jshintrc would create a danger of using the global + // unguarded in another place, it seems safer to just disable JSHint for these + // three lines. + /* jshint ignore: start */ + if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; + } + /* jshint ignore: end */ + + // Populate the class2type map + jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), + function( i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); + } ); + + function isArrayLike( obj ) { + + // Support: iOS 8.2 (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, + type = jQuery.type( obj ); + + if ( type === "function" || jQuery.isWindow( obj ) ) { + return false; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; + } + var Sizzle = + /*! + * Sizzle CSS Selector Engine v2.2.1 + * http://sizzlejs.com/ + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2015-10-17 + */ + (function( window ) { + + var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + 1 * new Date(), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // General-purpose constants + MAX_NEGATIVE = 1 << 31, + + // Instance methods + hasOwn = ({}).hasOwnProperty, + arr = [], + pop = arr.pop, + push_native = arr.push, + push = arr.push, + slice = arr.slice, + // Use a stripped-down indexOf as it's faster than native + // http://jsperf.com/thor-indexof-vs-for/5 + indexOf = function( list, elem ) { + var i = 0, + len = list.length; + for ( ; i < len; i++ ) { + if ( list[i] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + + // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier + identifier = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + + "*\\]", + + pseudos = ":(" + identifier + ")(?:\\((" + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), + + rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + identifier + ")" ), + "CLASS": new RegExp( "^\\.(" + identifier + ")" ), + "TAG": new RegExp( "^(" + identifier + "|[*])" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + rescape = /'|\\/g, + + // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), + funescape = function( _, escaped, escapedWhitespace ) { + var high = "0x" + escaped - 0x10000; + // NaN means non-codepoint + // Support: Firefox<24 + // Workaround erroneous numeric interpretation of +"0x" + return high !== high || escapedWhitespace ? + escaped : + high < 0 ? + // BMP codepoint + String.fromCharCode( high + 0x10000 ) : + // Supplemental Plane codepoint (surrogate pair) + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }; + + // Optimize for push.apply( _, NodeList ) + try { + push.apply( + (arr = slice.call( preferredDoc.childNodes )), + preferredDoc.childNodes + ); + // Support: Android<4.0 + // Detect silently failing push.apply + arr[ preferredDoc.childNodes.length ].nodeType; + } catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + push_native.apply( target, slice.call(els) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + // Can't trust NodeList.length + while ( (target[j++] = els[i++]) ) {} + target.length = j - 1; + } + }; + } + + function Sizzle( selector, context, results, seed ) { + var m, i, elem, nid, nidselect, match, groups, newSelector, + newContext = context && context.ownerDocument, + + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; + + results = results || []; + + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { + + if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { + setDocument( context ); + } + context = context || document; + + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) { + + // ID selector + if ( (m = match[1]) ) { + + // Document context + if ( nodeType === 9 ) { + if ( (elem = context.getElementById( m )) ) { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + + // Element context + } else { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( newContext && (elem = newContext.getElementById( m )) && + contains( context, elem ) && + elem.id === m ) { + + results.push( elem ); + return results; + } + } + + // Type selector + } else if ( match[2] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Class selector + } else if ( (m = match[3]) && support.getElementsByClassName && + context.getElementsByClassName ) { + + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // Take advantage of querySelectorAll + if ( support.qsa && + !compilerCache[ selector + " " ] && + (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { + + if ( nodeType !== 1 ) { + newContext = context; + newSelector = selector; + + // qSA looks outside Element context, which is not what we want + // Thanks to Andrew Dupont for this workaround technique + // Support: IE <=8 + // Exclude object elements + } else if ( context.nodeName.toLowerCase() !== "object" ) { + + // Capture the context ID, setting it first if necessary + if ( (nid = context.getAttribute( "id" )) ) { + nid = nid.replace( rescape, "\\$&" ); + } else { + context.setAttribute( "id", (nid = expando) ); + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + nidselect = ridentifier.test( nid ) ? "#" + nid : "[id='" + nid + "']"; + while ( i-- ) { + groups[i] = nidselect + " " + toSelector( groups[i] ); + } + newSelector = groups.join( "," ); + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + } + + if ( newSelector ) { + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + } finally { + if ( nid === expando ) { + context.removeAttribute( "id" ); + } + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); + } + + /** + * Create key-value caches of limited size + * @returns {function(string, object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ + function createCache() { + var keys = []; + + function cache( key, value ) { + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return (cache[ key + " " ] = value); + } + return cache; + } + + /** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ + function markFunction( fn ) { + fn[ expando ] = true; + return fn; + } + + /** + * Support testing using an element + * @param {Function} fn Passed the created div and expects a boolean result + */ + function assert( fn ) { + var div = document.createElement("div"); + + try { + return !!fn( div ); + } catch (e) { + return false; + } finally { + // Remove from its parent by default + if ( div.parentNode ) { + div.parentNode.removeChild( div ); + } + // release memory in IE + div = null; + } + } + + /** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ + function addHandle( attrs, handler ) { + var arr = attrs.split("|"), + i = arr.length; + + while ( i-- ) { + Expr.attrHandle[ arr[i] ] = handler; + } + } + + /** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ + function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + ( ~b.sourceIndex || MAX_NEGATIVE ) - + ( ~a.sourceIndex || MAX_NEGATIVE ); + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( (cur = cur.nextSibling) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; + } + + /** + * Returns a function to use in pseudos for input types + * @param {String} type + */ + function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; + } + + /** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ + function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && elem.type === type; + }; + } + + /** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ + function createPositionalPseudo( fn ) { + return markFunction(function( argument ) { + argument = +argument; + return markFunction(function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ (j = matchIndexes[i]) ] ) { + seed[j] = !(matches[j] = seed[j]); + } + } + }); + }); + } + + /** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ + function testContext( context ) { + return context && typeof context.getElementsByTagName !== "undefined" && context; + } + + // Expose support vars for convenience + support = Sizzle.support = {}; + + /** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ + isXML = Sizzle.isXML = function( elem ) { + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = elem && (elem.ownerDocument || elem).documentElement; + return documentElement ? documentElement.nodeName !== "HTML" : false; + }; + + /** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ + setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, parent, + doc = node ? node.ownerDocument || node : preferredDoc; + + // Return early if doc is invalid or already selected + if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Update global variables + document = doc; + docElem = document.documentElement; + documentIsHTML = !isXML( document ); + + // Support: IE 9-11, Edge + // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) + if ( (parent = document.defaultView) && parent.top !== parent ) { + // Support: IE 11 + if ( parent.addEventListener ) { + parent.addEventListener( "unload", unloadHandler, false ); + + // Support: IE 9 - 10 only + } else if ( parent.attachEvent ) { + parent.attachEvent( "onunload", unloadHandler ); + } + } + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties + // (excepting IE8 booleans) + support.attributes = assert(function( div ) { + div.className = "i"; + return !div.getAttribute("className"); + }); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert(function( div ) { + div.appendChild( document.createComment("") ); + return !div.getElementsByTagName("*").length; + }); + + // Support: IE<9 + support.getElementsByClassName = rnative.test( document.getElementsByClassName ); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert(function( div ) { + docElem.appendChild( div ).id = expando; + return !document.getElementsByName || !document.getElementsByName( expando ).length; + }); + + // ID find and filter + if ( support.getById ) { + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var m = context.getElementById( id ); + return m ? [ m ] : []; + } + }; + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute("id") === attrId; + }; + }; + } else { + // Support: IE6/7 + // getElementById is not reliable as a find shortcut + delete Expr.find["ID"]; + + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== "undefined" && + elem.getAttributeNode("id"); + return node && node.value === attrId; + }; + }; + } + + // Tag + Expr.find["TAG"] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( tag ); + + // DocumentFragment nodes don't have gEBTN + } else if ( support.qsa ) { + return context.querySelectorAll( tag ); + } + } : + + function( tag, context ) { + var elem, + tmp = [], + i = 0, + // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( (elem = results[i++]) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See http://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( (support.qsa = rnative.test( document.querySelectorAll )) ) { + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert(function( div ) { + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // http://bugs.jquery.com/ticket/12359 + docElem.appendChild( div ).innerHTML = "<a id='" + expando + "'></a>" + + "<select id='" + expando + "-\r\\' msallowcapture=''>" + + "<option selected=''></option></select>"; + + // Support: IE8, Opera 11-12.16 + // Nothing should be selected when empty strings follow ^= or $= or *= + // The test attribute must be unknown in Opera but "safe" for WinRT + // http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( div.querySelectorAll("[msallowcapture^='']").length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !div.querySelectorAll("[selected]").length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ + if ( !div.querySelectorAll( "[id~=" + expando + "-]" ).length ) { + rbuggyQSA.push("~="); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !div.querySelectorAll(":checked").length ) { + rbuggyQSA.push(":checked"); + } + + // Support: Safari 8+, iOS 8+ + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibing-combinator selector` fails + if ( !div.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push(".#.+[+~]"); + } + }); + + assert(function( div ) { + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = document.createElement("input"); + input.setAttribute( "type", "hidden" ); + div.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( div.querySelectorAll("[name=d]").length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( !div.querySelectorAll(":enabled").length ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Opera 10-11 does not throw on post-comma invalid pseudos + div.querySelectorAll("*,:x"); + rbuggyQSA.push(",.*:"); + }); + } + + if ( (support.matchesSelector = rnative.test( (matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector) )) ) { + + assert(function( div ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( div, "div" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( div, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + }); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + // Element contains another + // Purposefully self-exclusive + // As in, an element does not contain itself + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + )); + } : + function( a, b ) { + if ( b ) { + while ( (b = b.parentNode) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = hasCompare ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + // Sort on method existence if only one input has compareDocumentPosition + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + // Calculate position if both inputs belong to the same document + compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + // Otherwise we know they are disconnected + 1; + + // Disconnected nodes + if ( compare & 1 || + (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { + + // Choose the first element that is related to our preferred document + if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { + return -1; + } + if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Parentless nodes are either documents or disconnected + if ( !aup || !bup ) { + return a === document ? -1 : + b === document ? 1 : + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( (cur = cur.parentNode) ) { + ap.unshift( cur ); + } + cur = b; + while ( (cur = cur.parentNode) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[i] === bp[i] ) { + i++; + } + + return i ? + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[i], bp[i] ) : + + // Otherwise nodes in our document sort first + ap[i] === preferredDoc ? -1 : + bp[i] === preferredDoc ? 1 : + 0; + }; + + return document; + }; + + Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); + }; + + Sizzle.matchesSelector = function( elem, expr ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + // Make sure that attribute selectors are quoted + expr = expr.replace( rattributeQuotes, "='$1']" ); + + if ( support.matchesSelector && documentIsHTML && + !compilerCache[ expr + " " ] && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch (e) {} + } + + return Sizzle( expr, document, null, [ elem ] ).length > 0; + }; + + Sizzle.contains = function( context, elem ) { + // Set document vars if needed + if ( ( context.ownerDocument || context ) !== document ) { + setDocument( context ); + } + return contains( context, elem ); + }; + + Sizzle.attr = function( elem, name ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + // Don't get fooled by Object.prototype properties (jQuery #13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + (val = elem.getAttributeNode(name)) && val.specified ? + val.value : + null; + }; + + Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); + }; + + /** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ + Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( (elem = results[i++]) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + // Clear input after sorting to release objects + // See https://github.com/jquery/sizzle/pull/225 + sortInput = null; + + return results; + }; + + /** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ + getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + // If no nodeType, this is expected to be an array + while ( (node = elem[i++]) ) { + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + // Use textContent for elements + // innerText usage removed for consistency of new lines (jQuery #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + // Do not include comment or processing instruction nodes + + return ret; + }; + + Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[1] = match[1].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape ); + + if ( match[2] === "~=" ) { + match[3] = " " + match[3] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[1] = match[1].toLowerCase(); + + if ( match[1].slice( 0, 3 ) === "nth" ) { + // nth-* requires argument + if ( !match[3] ) { + Sizzle.error( match[0] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); + match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); + + // other types prohibit arguments + } else if ( match[3] ) { + Sizzle.error( match[0] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[6] && match[2]; + + if ( matchExpr["CHILD"].test( match[0] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[3] ) { + match[2] = match[4] || match[5] || ""; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + // Get excess from tokenize (recursively) + (excess = tokenize( unquoted, true )) && + // advance to the next closing parenthesis + (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { + + // excess is a negative index + match[0] = match[0].slice( 0, excess ); + match[2] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { return true; } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && + classCache( className, function( elem ) { + return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" ); + }); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + }; + }, + + "CHILD": function( type, what, argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, context, xml ) { + var cache, uniqueCache, outerCache, node, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType, + diff = false; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( (node = node[ dir ]) ) { + if ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) { + + return false; + } + } + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + + // Seek `elem` from a previously-cached index + + // ...in a gzip-friendly way + node = parent; + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex && cache[ 2 ]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( (node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + (diff = nodeIndex = 0) || start.pop()) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else { + // Use previously-cached element index if available + if ( useCache ) { + // ...in a gzip-friendly way + node = elem; + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex; + } + + // xml :nth-child(...) + // or :nth-last-child(...) or :nth(-last)?-of-type(...) + if ( diff === false ) { + // Use the same loop as above to seek `elem` from the start + while ( (node = ++nodeIndex && node && node[ dir ] || + (diff = nodeIndex = 0) || start.pop()) ) { + + if ( ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) && + ++diff ) { + + // Cache the index of each encountered element + if ( useCache ) { + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + uniqueCache[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction(function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf( seed, matched[i] ); + seed[ idx ] = !( matches[ idx ] = matched[i] ); + } + }) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + // Potentially complex pseudos + "not": markFunction(function( selector ) { + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction(function( seed, matches, context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( (elem = unmatched[i]) ) { + seed[i] = !(matches[i] = elem); + } + } + }) : + function( elem, context, xml ) { + input[0] = elem; + matcher( input, null, xml, results ); + // Don't keep the element (issue #299) + input[0] = null; + return !results.pop(); + }; + }), + + "has": markFunction(function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + }), + + "contains": markFunction(function( text ) { + text = text.replace( runescape, funescape ); + return function( elem ) { + return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; + }; + }), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + // lang value must be a valid identifier + if ( !ridentifier.test(lang || "") ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( (elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); + return false; + }; + }), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); + }, + + // Boolean properties + "enabled": function( elem ) { + return elem.disabled === false; + }, + + "disabled": function( elem ) { + return elem.disabled === true; + }, + + "checked": function( elem ) { + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); + }, + + "selected": function( elem ) { + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), + // but not by others (comment: 8; processing instruction: 7; etc.) + // nodeType < 6 works because attributes (2) do not appear as children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos["empty"]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + // Support: IE<8 + // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" + ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); + }, + + // Position-in-collection + "first": createPositionalPseudo(function() { + return [ 0 ]; + }), + + "last": createPositionalPseudo(function( matchIndexes, length ) { + return [ length - 1 ]; + }), + + "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + }), + + "even": createPositionalPseudo(function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "odd": createPositionalPseudo(function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }) + } + }; + + Expr.pseudos["nth"] = Expr.pseudos["eq"]; + + // Add button/input type pseudos + for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); + } + for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); + } + + // Easy API for creating new setFilters + function setFilters() {} + setFilters.prototype = Expr.filters = Expr.pseudos; + Expr.setFilters = new setFilters(); + + tokenize = Sizzle.tokenize = function( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || (match = rcomma.exec( soFar )) ) { + if ( match ) { + // Don't consume trailing commas as valid + soFar = soFar.slice( match[0].length ) || soFar; + } + groups.push( (tokens = []) ); + } + + matched = false; + + // Combinators + if ( (match = rcombinators.exec( soFar )) ) { + matched = match.shift(); + tokens.push({ + value: matched, + // Cast descendant combinators to space + type: match[0].replace( rtrim, " " ) + }); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || + (match = preFilters[ type ]( match ))) ) { + matched = match.shift(); + tokens.push({ + value: matched, + type: type, + matches: match + }); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); + }; + + function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[i].value; + } + return selector; + } + + function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + checkNonElements = base && dir === "parentNode", + doneName = done++; + + return combinator.first ? + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, uniqueCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching + if ( xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || (elem[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {}); + + if ( (oldCache = uniqueCache[ dir ]) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + // Assign to newCache so results back-propagate to previous elements + return (newCache[ 2 ] = oldCache[ 2 ]); + } else { + // Reuse newcache so results back-propagate to previous elements + uniqueCache[ dir ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { + return true; + } + } + } + } + } + }; + } + + function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[i]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[0]; + } + + function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[i], results ); + } + return results; + } + + function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( (elem = unmatched[i]) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; + } + + function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction(function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( (elem = temp[i]) ) { + matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) ) { + // Restore matcherIn since elem is not yet a final match + temp.push( (matcherIn[i] = elem) ); + } + } + postFinder( null, (matcherOut = []), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) && + (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) { + + seed[temp] = !(results[temp] = elem); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + }); + } + + function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[0].type ], + implicitRelative = leadingRelative || Expr.relative[" "], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + (checkContext = context).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + // Avoid hanging onto element (issue #299) + checkContext = null; + return ret; + } ]; + + for ( ; i < len; i++ ) { + if ( (matcher = Expr.relative[ tokens[i].type ]) ) { + matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; + } else { + matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[j].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); + } + + function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + // We must always have either seed elements or outermost context + elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), + len = elems.length; + + if ( outermost ) { + outermostContext = context === document || context || outermost; + } + + // Add elements passing elementMatchers directly to results + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id + for ( ; i !== len && (elem = elems[i]) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + if ( !context && elem.ownerDocument !== document ) { + setDocument( elem ); + xml = !documentIsHTML; + } + while ( (matcher = elementMatchers[j++]) ) { + if ( matcher( elem, context || document, xml) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + // They will have gone through all possible matchers + if ( (elem = !matcher && elem) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // `i` is now the count of elements visited above, and adding it to `matchedCount` + // makes the latter nonnegative. + matchedCount += i; + + // Apply set filters to unmatched elements + // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` + // equals `i`), unless we didn't visit _any_ elements in the above loop because we have + // no element matchers and no seed. + // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that + // case, which will result in a "00" `matchedCount` that differs from `i` but is also + // numerically zero. + if ( bySet && i !== matchedCount ) { + j = 0; + while ( (matcher = setMatchers[j++]) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !(unmatched[i] || setMatched[i]) ) { + setMatched[i] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; + } + + compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + // Generate a function of recursive functions that can be used to check each element + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[i] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); + + // Save selector and tokenization + cached.selector = selector; + } + return cached; + }; + + /** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ + select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( (selector = compiled.selector || selector) ); + + results = results || []; + + // Try to minimize operations if there is only one selector in the list and no seed + // (the latter of which guarantees us context) + if ( match.length === 1 ) { + + // Reduce context if the leading compound selector is an ID + tokens = match[0] = match[0].slice( 0 ); + if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && + support.getById && context.nodeType === 9 && documentIsHTML && + Expr.relative[ tokens[1].type ] ) { + + context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; + if ( !context ) { + return results; + + // Precompiled matchers will still verify ancestry, so step up a level + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[i]; + + // Abort if we hit a combinator + if ( Expr.relative[ (type = token.type) ] ) { + break; + } + if ( (find = Expr.find[ type ]) ) { + // Search, expanding context for leading sibling combinators + if ( (seed = find( + token.matches[0].replace( runescape, funescape ), + rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context + )) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + // Compile and execute a filtering function if one is not provided + // Provide `match` to avoid retokenization if we modified the selector above + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + !context || rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; + }; + + // One-time assignments + + // Sort stability + support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; + + // Support: Chrome 14-35+ + // Always assume duplicates if they aren't passed to the comparison function + support.detectDuplicates = !!hasDuplicate; + + // Initialize against the default document + setDocument(); + + // Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) + // Detached nodes confoundingly follow *each other* + support.sortDetached = assert(function( div1 ) { + // Should return 1, but returns 4 (following) + return div1.compareDocumentPosition( document.createElement("div") ) & 1; + }); + + // Support: IE<8 + // Prevent attribute/property "interpolation" + // http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx + if ( !assert(function( div ) { + div.innerHTML = "<a href='#'></a>"; + return div.firstChild.getAttribute("href") === "#" ; + }) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + }); + } + + // Support: IE<9 + // Use defaultValue in place of getAttribute("value") + if ( !support.attributes || !assert(function( div ) { + div.innerHTML = "<input/>"; + div.firstChild.setAttribute( "value", "" ); + return div.firstChild.getAttribute( "value" ) === ""; + }) ) { + addHandle( "value", function( elem, name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + }); + } + + // Support: IE<9 + // Use getAttributeNode to fetch booleans when getAttribute lies + if ( !assert(function( div ) { + return div.getAttribute("disabled") == null; + }) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + (val = elem.getAttributeNode( name )) && val.specified ? + val.value : + null; + } + }); + } + + return Sizzle; + + })( window ); + + + + jQuery.find = Sizzle; + jQuery.expr = Sizzle.selectors; + jQuery.expr[ ":" ] = jQuery.expr.pseudos; + jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; + jQuery.text = Sizzle.getText; + jQuery.isXMLDoc = Sizzle.isXML; + jQuery.contains = Sizzle.contains; + + + + var dir = function( elem, dir, until ) { + var matched = [], + truncate = until !== undefined; + + while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { + if ( elem.nodeType === 1 ) { + if ( truncate && jQuery( elem ).is( until ) ) { + break; + } + matched.push( elem ); + } + } + return matched; + }; + + + var siblings = function( n, elem ) { + var matched = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + matched.push( n ); + } + } + + return matched; + }; + + + var rneedsContext = jQuery.expr.match.needsContext; + + var rsingleTag = ( /^<([\w-]+)\s*\/?>(?:<\/\1>|)$/ ); + + + + var risSimple = /^.[^:#\[\.,]*$/; + + // Implement the identical functionality for filter and not + function winnow( elements, qualifier, not ) { + if ( jQuery.isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + /* jshint -W018 */ + return !!qualifier.call( elem, i, elem ) !== not; + } ); + + } + + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + } ); + + } + + if ( typeof qualifier === "string" ) { + if ( risSimple.test( qualifier ) ) { + return jQuery.filter( qualifier, elements, not ); + } + + qualifier = jQuery.filter( qualifier, elements ); + } + + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not; + } ); + } + + jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + return elems.length === 1 && elem.nodeType === 1 ? + jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] : + jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + } ) ); + }; + + jQuery.fn.extend( { + find: function( selector ) { + var i, + len = this.length, + ret = [], + self = this; + + if ( typeof selector !== "string" ) { + return this.pushStack( jQuery( selector ).filter( function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + } ) ); + } + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + // Needed because $( selector, context ) becomes $( context ).find( selector ) + ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret ); + ret.selector = this.selector ? this.selector + " " + selector : selector; + return ret; + }, + filter: function( selector ) { + return this.pushStack( winnow( this, selector || [], false ) ); + }, + not: function( selector ) { + return this.pushStack( winnow( this, selector || [], true ) ); + }, + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + } + } ); + + + // Initialize a jQuery object + + + // A central reference to the root jQuery(document) + var rootjQuery, + + // A simple way to check for HTML strings + // Prioritize #id over <tag> to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/, + + init = jQuery.fn.init = function( selector, context, root ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Method init() accepts an alternate rootjQuery + // so migrate can support jQuery.sub (gh-2101) + root = root || rootjQuery; + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector[ 0 ] === "<" && + selector[ selector.length - 1 ] === ">" && + selector.length >= 3 ) { + + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && ( match[ 1 ] || !context ) ) { + + // HANDLE: $(html) -> $(array) + if ( match[ 1 ] ) { + context = context instanceof jQuery ? context[ 0 ] : context; + + // Option to run scripts is true for back-compat + // Intentionally let the error be thrown if parseHTML is not present + jQuery.merge( this, jQuery.parseHTML( + match[ 1 ], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + + // Properties of context are called as methods if possible + if ( jQuery.isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[ 2 ] ); + + // Support: Blackberry 4.6 + // gEBID returns nodes no longer in the document (#6963) + if ( elem && elem.parentNode ) { + + // Inject the element directly into the jQuery object + this.length = 1; + this[ 0 ] = elem; + } + + this.context = document; + this.selector = selector; + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || root ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this.context = this[ 0 ] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( jQuery.isFunction( selector ) ) { + return root.ready !== undefined ? + root.ready( selector ) : + + // Execute immediately if ready is not present + selector( jQuery ); + } + + if ( selector.selector !== undefined ) { + this.selector = selector.selector; + this.context = selector.context; + } + + return jQuery.makeArray( selector, this ); + }; + + // Give the init function the jQuery prototype for later instantiation + init.prototype = jQuery.fn; + + // Initialize central reference + rootjQuery = jQuery( document ); + + + var rparentsprev = /^(?:parents|prev(?:Until|All))/, + + // Methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + + jQuery.fn.extend( { + has: function( target ) { + var targets = jQuery( target, this ), + l = targets.length; + + return this.filter( function() { + var i = 0; + for ( ; i < l; i++ ) { + if ( jQuery.contains( this, targets[ i ] ) ) { + return true; + } + } + } ); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + matched = [], + pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ? + jQuery( selectors, context || this.context ) : + 0; + + for ( ; i < l; i++ ) { + for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { + + // Always skip document fragments + if ( cur.nodeType < 11 && ( pos ? + pos.index( cur ) > -1 : + + // Don't pass non-elements to Sizzle + cur.nodeType === 1 && + jQuery.find.matchesSelector( cur, selectors ) ) ) { + + matched.push( cur ); + break; + } + } + } + + return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); + }, + + // Determine the position of an element within the set + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; + } + + // Index in selector + if ( typeof elem === "string" ) { + return indexOf.call( jQuery( elem ), this[ 0 ] ); + } + + // Locate the position of the desired element + return indexOf.call( this, + + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[ 0 ] : elem + ); + }, + + add: function( selector, context ) { + return this.pushStack( + jQuery.uniqueSort( + jQuery.merge( this.get(), jQuery( selector, context ) ) + ) + ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter( selector ) + ); + } + } ); + + function sibling( cur, dir ) { + while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} + return cur; + } + + jQuery.each( { + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return siblings( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return siblings( elem.firstChild ); + }, + contents: function( elem ) { + return elem.contentDocument || jQuery.merge( [], elem.childNodes ); + } + }, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var matched = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + matched = jQuery.filter( selector, matched ); + } + + if ( this.length > 1 ) { + + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + jQuery.uniqueSort( matched ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + matched.reverse(); + } + } + + return this.pushStack( matched ); + }; + } ); + var rnotwhite = ( /\S+/g ); + + + + // Convert String-formatted options into Object-formatted ones + function createOptions( options ) { + var object = {}; + jQuery.each( options.match( rnotwhite ) || [], function( _, flag ) { + object[ flag ] = true; + } ); + return object; + } + + /* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ + jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + createOptions( options ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + + // Last fire value for non-forgettable lists + memory, + + // Flag to know if list was already fired + fired, + + // Flag to prevent firing + locked, + + // Actual callback list + list = [], + + // Queue of execution data for repeatable lists + queue = [], + + // Index of currently firing callback (modified by add/remove as needed) + firingIndex = -1, + + // Fire callbacks + fire = function() { + + // Enforce single-firing + locked = options.once; + + // Execute callbacks for all pending executions, + // respecting firingIndex overrides and runtime changes + fired = firing = true; + for ( ; queue.length; firingIndex = -1 ) { + memory = queue.shift(); + while ( ++firingIndex < list.length ) { + + // Run callback and check for early termination + if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && + options.stopOnFalse ) { + + // Jump to end and forget the data so .add doesn't re-fire + firingIndex = list.length; + memory = false; + } + } + } + + // Forget the data if we're done with it + if ( !options.memory ) { + memory = false; + } + + firing = false; + + // Clean up if we're done firing for good + if ( locked ) { + + // Keep an empty list if we have data for future add calls + if ( memory ) { + list = []; + + // Otherwise, this object is spent + } else { + list = ""; + } + } + }, + + // Actual Callbacks object + self = { + + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + + // If we have memory from a past run, we should fire after adding + if ( memory && !firing ) { + firingIndex = list.length - 1; + queue.push( memory ); + } + + ( function add( args ) { + jQuery.each( args, function( _, arg ) { + if ( jQuery.isFunction( arg ) ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && jQuery.type( arg ) !== "string" ) { + + // Inspect recursively + add( arg ); + } + } ); + } )( arguments ); + + if ( memory && !firing ) { + fire(); + } + } + return this; + }, + + // Remove a callback from the list + remove: function() { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + + // Handle firing indexes + if ( index <= firingIndex ) { + firingIndex--; + } + } + } ); + return this; + }, + + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? + jQuery.inArray( fn, list ) > -1 : + list.length > 0; + }, + + // Remove all callbacks from the list + empty: function() { + if ( list ) { + list = []; + } + return this; + }, + + // Disable .fire and .add + // Abort any current/pending executions + // Clear all callbacks and values + disable: function() { + locked = queue = []; + list = memory = ""; + return this; + }, + disabled: function() { + return !list; + }, + + // Disable .fire + // Also disable .add unless we have memory (since it would have no effect) + // Abort any pending executions + lock: function() { + locked = queue = []; + if ( !memory ) { + list = memory = ""; + } + return this; + }, + locked: function() { + return !!locked; + }, + + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( !locked ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + queue.push( args ); + if ( !firing ) { + fire(); + } + } + return this; + }, + + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; + }; + + + jQuery.extend( { + + Deferred: function( func ) { + var tuples = [ + + // action, add listener, listener list, final state + [ "resolve", "done", jQuery.Callbacks( "once memory" ), "resolved" ], + [ "reject", "fail", jQuery.Callbacks( "once memory" ), "rejected" ], + [ "notify", "progress", jQuery.Callbacks( "memory" ) ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + then: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + return jQuery.Deferred( function( newDefer ) { + jQuery.each( tuples, function( i, tuple ) { + var fn = jQuery.isFunction( fns[ i ] ) && fns[ i ]; + + // deferred[ done | fail | progress ] for forwarding actions to newDefer + deferred[ tuple[ 1 ] ]( function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && jQuery.isFunction( returned.promise ) ) { + returned.promise() + .progress( newDefer.notify ) + .done( newDefer.resolve ) + .fail( newDefer.reject ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( + this === promise ? newDefer.promise() : this, + fn ? [ returned ] : arguments + ); + } + } ); + } ); + fns = null; + } ).promise(); + }, + + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Keep pipe for back-compat + promise.pipe = promise.then; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 3 ]; + + // promise[ done | fail | progress ] = list.add + promise[ tuple[ 1 ] ] = list.add; + + // Handle state + if ( stateString ) { + list.add( function() { + + // state = [ resolved | rejected ] + state = stateString; + + // [ reject_list | resolve_list ].disable; progress_list.lock + }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock ); + } + + // deferred[ resolve | reject | notify ] + deferred[ tuple[ 0 ] ] = function() { + deferred[ tuple[ 0 ] + "With" ]( this === deferred ? promise : this, arguments ); + return this; + }; + deferred[ tuple[ 0 ] + "With" ] = list.fireWith; + } ); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( subordinate /* , ..., subordinateN */ ) { + var i = 0, + resolveValues = slice.call( arguments ), + length = resolveValues.length, + + // the count of uncompleted subordinates + remaining = length !== 1 || + ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0, + + // the master Deferred. + // If resolveValues consist of only a single Deferred, just use that. + deferred = remaining === 1 ? subordinate : jQuery.Deferred(), + + // Update function for both resolve and progress values + updateFunc = function( i, contexts, values ) { + return function( value ) { + contexts[ i ] = this; + values[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( values === progressValues ) { + deferred.notifyWith( contexts, values ); + } else if ( !( --remaining ) ) { + deferred.resolveWith( contexts, values ); + } + }; + }, + + progressValues, progressContexts, resolveContexts; + + // Add listeners to Deferred subordinates; treat others as resolved + if ( length > 1 ) { + progressValues = new Array( length ); + progressContexts = new Array( length ); + resolveContexts = new Array( length ); + for ( ; i < length; i++ ) { + if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) { + resolveValues[ i ].promise() + .progress( updateFunc( i, progressContexts, progressValues ) ) + .done( updateFunc( i, resolveContexts, resolveValues ) ) + .fail( deferred.reject ); + } else { + --remaining; + } + } + } + + // If we're not waiting on anything, resolve the master + if ( !remaining ) { + deferred.resolveWith( resolveContexts, resolveValues ); + } + + return deferred.promise(); + } + } ); + + + // The deferred used on DOM ready + var readyList; + + jQuery.fn.ready = function( fn ) { + + // Add the callback + jQuery.ready.promise().done( fn ); + + return this; + }; + + jQuery.extend( { + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Hold (or release) the ready event + holdReady: function( hold ) { + if ( hold ) { + jQuery.readyWait++; + } else { + jQuery.ready( true ); + } + }, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + + // Trigger any bound ready events + if ( jQuery.fn.triggerHandler ) { + jQuery( document ).triggerHandler( "ready" ); + jQuery( document ).off( "ready" ); + } + } + } ); + + /** + * The ready event handler and self cleanup method + */ + function completed() { + document.removeEventListener( "DOMContentLoaded", completed ); + window.removeEventListener( "load", completed ); + jQuery.ready(); + } + + jQuery.ready.promise = function( obj ) { + if ( !readyList ) { + + readyList = jQuery.Deferred(); + + // Catch cases where $(document).ready() is called + // after the browser event has already occurred. + // Support: IE9-10 only + // Older IE sometimes signals "interactive" too soon + if ( document.readyState === "complete" || + ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { + + // Handle it asynchronously to allow scripts the opportunity to delay ready + window.setTimeout( jQuery.ready ); + + } else { + + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed ); + } + } + return readyList.promise( obj ); + }; + + // Kick off the DOM ready check even if the user does not + jQuery.ready.promise(); + + + + + // Multifunctional method to get and set values of a collection + // The value/s can optionally be executed if it's a function + var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + len = elems.length, + bulk = key == null; + + // Sets many values + if ( jQuery.type( key ) === "object" ) { + chainable = true; + for ( i in key ) { + access( elems, fn, i, key[ i ], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !jQuery.isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < len; i++ ) { + fn( + elems[ i ], key, raw ? + value : + value.call( elems[ i ], i, fn( elems[ i ], key ) ) + ); + } + } + } + + return chainable ? + elems : + + // Gets + bulk ? + fn.call( elems ) : + len ? fn( elems[ 0 ], key ) : emptyGet; + }; + var acceptData = function( owner ) { + + // Accepts only: + // - Node + // - Node.ELEMENT_NODE + // - Node.DOCUMENT_NODE + // - Object + // - Any + /* jshint -W018 */ + return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); + }; + + + + + function Data() { + this.expando = jQuery.expando + Data.uid++; + } + + Data.uid = 1; + + Data.prototype = { + + register: function( owner, initial ) { + var value = initial || {}; + + // If it is a node unlikely to be stringify-ed or looped over + // use plain assignment + if ( owner.nodeType ) { + owner[ this.expando ] = value; + + // Otherwise secure it in a non-enumerable, non-writable property + // configurability must be true to allow the property to be + // deleted with the delete operator + } else { + Object.defineProperty( owner, this.expando, { + value: value, + writable: true, + configurable: true + } ); + } + return owner[ this.expando ]; + }, + cache: function( owner ) { + + // We can accept data for non-element nodes in modern browsers, + // but we should not, see #8335. + // Always return an empty object. + if ( !acceptData( owner ) ) { + return {}; + } + + // Check if the owner object already has a cache + var value = owner[ this.expando ]; + + // If not, create one + if ( !value ) { + value = {}; + + // We can accept data for non-element nodes in modern browsers, + // but we should not, see #8335. + // Always return an empty object. + if ( acceptData( owner ) ) { + + // If it is a node unlikely to be stringify-ed or looped over + // use plain assignment + if ( owner.nodeType ) { + owner[ this.expando ] = value; + + // Otherwise secure it in a non-enumerable property + // configurable must be true to allow the property to be + // deleted when data is removed + } else { + Object.defineProperty( owner, this.expando, { + value: value, + configurable: true + } ); + } + } + } + + return value; + }, + set: function( owner, data, value ) { + var prop, + cache = this.cache( owner ); + + // Handle: [ owner, key, value ] args + if ( typeof data === "string" ) { + cache[ data ] = value; + + // Handle: [ owner, { properties } ] args + } else { + + // Copy the properties one-by-one to the cache object + for ( prop in data ) { + cache[ prop ] = data[ prop ]; + } + } + return cache; + }, + get: function( owner, key ) { + return key === undefined ? + this.cache( owner ) : + owner[ this.expando ] && owner[ this.expando ][ key ]; + }, + access: function( owner, key, value ) { + var stored; + + // In cases where either: + // + // 1. No key was specified + // 2. A string key was specified, but no value provided + // + // Take the "read" path and allow the get method to determine + // which value to return, respectively either: + // + // 1. The entire cache object + // 2. The data stored at the key + // + if ( key === undefined || + ( ( key && typeof key === "string" ) && value === undefined ) ) { + + stored = this.get( owner, key ); + + return stored !== undefined ? + stored : this.get( owner, jQuery.camelCase( key ) ); + } + + // When the key is not a string, or both a key and value + // are specified, set or extend (existing objects) with either: + // + // 1. An object of properties + // 2. A key and value + // + this.set( owner, key, value ); + + // Since the "set" path can have two possible entry points + // return the expected data based on which path was taken[*] + return value !== undefined ? value : key; + }, + remove: function( owner, key ) { + var i, name, camel, + cache = owner[ this.expando ]; + + if ( cache === undefined ) { + return; + } + + if ( key === undefined ) { + this.register( owner ); + + } else { + + // Support array or space separated string of keys + if ( jQuery.isArray( key ) ) { + + // If "name" is an array of keys... + // When data is initially created, via ("key", "val") signature, + // keys will be converted to camelCase. + // Since there is no way to tell _how_ a key was added, remove + // both plain key and camelCase key. #12786 + // This will only penalize the array argument path. + name = key.concat( key.map( jQuery.camelCase ) ); + } else { + camel = jQuery.camelCase( key ); + + // Try the string as a key before any manipulation + if ( key in cache ) { + name = [ key, camel ]; + } else { + + // If a key with the spaces exists, use it. + // Otherwise, create an array by matching non-whitespace + name = camel; + name = name in cache ? + [ name ] : ( name.match( rnotwhite ) || [] ); + } + } + + i = name.length; + + while ( i-- ) { + delete cache[ name[ i ] ]; + } + } + + // Remove the expando if there's no more data + if ( key === undefined || jQuery.isEmptyObject( cache ) ) { + + // Support: Chrome <= 35-45+ + // Webkit & Blink performance suffers when deleting properties + // from DOM nodes, so set to undefined instead + // https://code.google.com/p/chromium/issues/detail?id=378607 + if ( owner.nodeType ) { + owner[ this.expando ] = undefined; + } else { + delete owner[ this.expando ]; + } + } + }, + hasData: function( owner ) { + var cache = owner[ this.expando ]; + return cache !== undefined && !jQuery.isEmptyObject( cache ); + } + }; + var dataPriv = new Data(); + + var dataUser = new Data(); + + + + // Implementation Summary + // + // 1. Enforce API surface and semantic compatibility with 1.9.x branch + // 2. Improve the module's maintainability by reducing the storage + // paths to a single mechanism. + // 3. Use the same single mechanism to support "private" and "user" data. + // 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) + // 5. Avoid exposing implementation details on user objects (eg. expando properties) + // 6. Provide a clear path for implementation upgrade to WeakMap in 2014 + + var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + rmultiDash = /[A-Z]/g; + + function dataAttr( elem, key, data ) { + var name; + + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = data === "true" ? true : + data === "false" ? false : + data === "null" ? null : + + // Only convert to a number if it doesn't change the string + +data + "" === data ? +data : + rbrace.test( data ) ? jQuery.parseJSON( data ) : + data; + } catch ( e ) {} + + // Make sure we set the data so it isn't changed later + dataUser.set( elem, key, data ); + } else { + data = undefined; + } + } + return data; + } + + jQuery.extend( { + hasData: function( elem ) { + return dataUser.hasData( elem ) || dataPriv.hasData( elem ); + }, + + data: function( elem, name, data ) { + return dataUser.access( elem, name, data ); + }, + + removeData: function( elem, name ) { + dataUser.remove( elem, name ); + }, + + // TODO: Now that all calls to _data and _removeData have been replaced + // with direct calls to dataPriv methods, these can be deprecated. + _data: function( elem, name, data ) { + return dataPriv.access( elem, name, data ); + }, + + _removeData: function( elem, name ) { + dataPriv.remove( elem, name ); + } + } ); + + jQuery.fn.extend( { + data: function( key, value ) { + var i, name, data, + elem = this[ 0 ], + attrs = elem && elem.attributes; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = dataUser.get( elem ); + + if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE11+ + // The attrs elements can be null (#14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = jQuery.camelCase( name.slice( 5 ) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + dataPriv.set( elem, "hasDataAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each( function() { + dataUser.set( this, key ); + } ); + } + + return access( this, function( value ) { + var data, camelKey; + + // The calling jQuery object (element matches) is not empty + // (and therefore has an element appears at this[ 0 ]) and the + // `value` parameter was not undefined. An empty jQuery object + // will result in `undefined` for elem = this[ 0 ] which will + // throw an exception if an attempt to read a data cache is made. + if ( elem && value === undefined ) { + + // Attempt to get data from the cache + // with the key as-is + data = dataUser.get( elem, key ) || + + // Try to find dashed key if it exists (gh-2779) + // This is for 2.2.x only + dataUser.get( elem, key.replace( rmultiDash, "-$&" ).toLowerCase() ); + + if ( data !== undefined ) { + return data; + } + + camelKey = jQuery.camelCase( key ); + + // Attempt to get data from the cache + // with the key camelized + data = dataUser.get( elem, camelKey ); + if ( data !== undefined ) { + return data; + } + + // Attempt to "discover" the data in + // HTML5 custom data-* attrs + data = dataAttr( elem, camelKey, undefined ); + if ( data !== undefined ) { + return data; + } + + // We tried really hard, but the data doesn't exist. + return; + } + + // Set the data... + camelKey = jQuery.camelCase( key ); + this.each( function() { + + // First, attempt to store a copy or reference of any + // data that might've been store with a camelCased key. + var data = dataUser.get( this, camelKey ); + + // For HTML5 data-* attribute interop, we have to + // store property names with dashes in a camelCase form. + // This might not apply to all properties...* + dataUser.set( this, camelKey, value ); + + // *... In the case of properties that might _actually_ + // have dashes, we need to also store a copy of that + // unchanged property. + if ( key.indexOf( "-" ) > -1 && data !== undefined ) { + dataUser.set( this, key, value ); + } + } ); + }, null, value, arguments.length > 1, null, true ); + }, + + removeData: function( key ) { + return this.each( function() { + dataUser.remove( this, key ); + } ); + } + } ); + + + jQuery.extend( { + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = dataPriv.get( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || jQuery.isArray( data ) ) { + queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // Clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // Not public - generate a queueHooks object, or return the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { + empty: jQuery.Callbacks( "once memory" ).add( function() { + dataPriv.remove( elem, [ type + "queue", key ] ); + } ) + } ); + } + } ); + + jQuery.fn.extend( { + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[ 0 ], type ); + } + + return data === undefined ? + this : + this.each( function() { + var queue = jQuery.queue( this, type, data ); + + // Ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + } ); + }, + dequeue: function( type ) { + return this.each( function() { + jQuery.dequeue( this, type ); + } ); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while ( i-- ) { + tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } + } ); + var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; + + var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); + + + var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + + var isHidden = function( elem, el ) { + + // isHidden might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + return jQuery.css( elem, "display" ) === "none" || + !jQuery.contains( elem.ownerDocument, elem ); + }; + + + + function adjustCSS( elem, prop, valueParts, tween ) { + var adjusted, + scale = 1, + maxIterations = 20, + currentValue = tween ? + function() { return tween.cur(); } : + function() { return jQuery.css( elem, prop, "" ); }, + initial = currentValue(), + unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), + + // Starting value computation is required for potential unit mismatches + initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && + rcssNum.exec( jQuery.css( elem, prop ) ); + + if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { + + // Trust units reported by jQuery.css + unit = unit || initialInUnit[ 3 ]; + + // Make sure we update the tween properties later on + valueParts = valueParts || []; + + // Iteratively approximate from a nonzero starting point + initialInUnit = +initial || 1; + + do { + + // If previous iteration zeroed out, double until we get *something*. + // Use string for doubling so we don't accidentally see scale as unchanged below + scale = scale || ".5"; + + // Adjust and apply + initialInUnit = initialInUnit / scale; + jQuery.style( elem, prop, initialInUnit + unit ); + + // Update scale, tolerating zero or NaN from tween.cur() + // Break the loop if scale is unchanged or perfect, or if we've just had enough. + } while ( + scale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations + ); + } + + if ( valueParts ) { + initialInUnit = +initialInUnit || +initial || 0; + + // Apply relative offset (+=/-=) if specified + adjusted = valueParts[ 1 ] ? + initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : + +valueParts[ 2 ]; + if ( tween ) { + tween.unit = unit; + tween.start = initialInUnit; + tween.end = adjusted; + } + } + return adjusted; + } + var rcheckableType = ( /^(?:checkbox|radio)$/i ); + + var rtagName = ( /<([\w:-]+)/ ); + + var rscriptType = ( /^$|\/(?:java|ecma)script/i ); + + + + // We have to close these tags to support XHTML (#13200) + var wrapMap = { + + // Support: IE9 + option: [ 1, "<select multiple='multiple'>", "</select>" ], + + // XHTML parsers do not magically insert elements in the + // same way that tag soup parsers do. So we cannot shorten + // this by omitting <tbody> or other required elements. + thead: [ 1, "<table>", "</table>" ], + col: [ 2, "<table><colgroup>", "</colgroup></table>" ], + tr: [ 2, "<table><tbody>", "</tbody></table>" ], + td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ], + + _default: [ 0, "", "" ] + }; + + // Support: IE9 + wrapMap.optgroup = wrapMap.option; + + wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; + wrapMap.th = wrapMap.td; + + + function getAll( context, tag ) { + + // Support: IE9-11+ + // Use typeof to avoid zero-argument method invocation on host objects (#15151) + var ret = typeof context.getElementsByTagName !== "undefined" ? + context.getElementsByTagName( tag || "*" ) : + typeof context.querySelectorAll !== "undefined" ? + context.querySelectorAll( tag || "*" ) : + []; + + return tag === undefined || tag && jQuery.nodeName( context, tag ) ? + jQuery.merge( [ context ], ret ) : + ret; + } + + + // Mark scripts as having already been evaluated + function setGlobalEval( elems, refElements ) { + var i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + dataPriv.set( + elems[ i ], + "globalEval", + !refElements || dataPriv.get( refElements[ i ], "globalEval" ) + ); + } + } + + + var rhtml = /<|&#?\w+;/; + + function buildFragment( elems, context, scripts, selection, ignored ) { + var elem, tmp, tag, wrap, contains, j, + fragment = context.createDocumentFragment(), + nodes = [], + i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( jQuery.type( elem ) === "object" ) { + + // Support: Android<4.1, PhantomJS<2 + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); + + // Deserialize a standard representation + tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; + + // Descend through wrappers to the right content + j = wrap[ 0 ]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Support: Android<4.1, PhantomJS<2 + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, tmp.childNodes ); + + // Remember the top-level container + tmp = fragment.firstChild; + + // Ensure the created nodes are orphaned (#12392) + tmp.textContent = ""; + } + } + } + + // Remove wrapper from fragment + fragment.textContent = ""; + + i = 0; + while ( ( elem = nodes[ i++ ] ) ) { + + // Skip elements already in the context collection (trac-4087) + if ( selection && jQuery.inArray( elem, selection ) > -1 ) { + if ( ignored ) { + ignored.push( elem ); + } + continue; + } + + contains = jQuery.contains( elem.ownerDocument, elem ); + + // Append to fragment + tmp = getAll( fragment.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( contains ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( ( elem = tmp[ j++ ] ) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + return fragment; + } + + + ( function() { + var fragment = document.createDocumentFragment(), + div = fragment.appendChild( document.createElement( "div" ) ), + input = document.createElement( "input" ); + + // Support: Android 4.0-4.3, Safari<=5.1 + // Check state lost if the name is set (#11217) + // Support: Windows Web Apps (WWA) + // `name` and `type` must use .setAttribute for WWA (#14901) + input.setAttribute( "type", "radio" ); + input.setAttribute( "checked", "checked" ); + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + + // Support: Safari<=5.1, Android<4.2 + // Older WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE<=11+ + // Make sure textarea (and checkbox) defaultValue is properly cloned + div.innerHTML = "<textarea>x</textarea>"; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; + } )(); + + + var + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, + rtypenamespace = /^([^.]*)(?:\.(.+)|)/; + + function returnTrue() { + return true; + } + + function returnFalse() { + return false; + } + + // Support: IE9 + // See #13393 for more info + function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } + } + + function on( elem, types, selector, data, fn, one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + on( elem, type, selector, data, types[ type ], one ); + } + return elem; + } + + if ( data == null && fn == null ) { + + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return elem; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return elem.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + } ); + } + + /* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ + jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + + var handleObjIn, eventHandle, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.get( elem ); + + // Don't attach events to noData or text/comment nodes (but allow plain objects) + if ( !elemData ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !( events = elemData.events ) ) { + events = elemData.events = {}; + } + if ( !( eventHandle = elemData.handle ) ) { + eventHandle = elemData.handle = function( e ) { + + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? + jQuery.event.dispatch.apply( elem, arguments ) : undefined; + }; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnotwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend( { + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join( "." ) + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !( handlers = events[ type ] ) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener if the special events handler returns false + if ( !special.setup || + special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var j, origCount, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); + + if ( !elemData || !( events = elemData.events ) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnotwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[ 2 ] && + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || + selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || + special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove data and the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + dataPriv.remove( elem, "handle events" ); + } + }, + + dispatch: function( event ) { + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( event ); + + var i, j, ret, matched, handleObj, + handlerQueue = [], + args = slice.call( arguments ), + handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[ 0 ] = event; + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( ( handleObj = matched.handlers[ j++ ] ) && + !event.isImmediatePropagationStopped() ) { + + // Triggered event must either 1) have no namespace, or 2) have namespace(s) + // a subset or equal to those in the bound event (both can have no namespace). + if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || + handleObj.handler ).apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( ( event.result = ret ) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var i, matches, sel, handleObj, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Support (at least): Chrome, IE9 + // Find delegate handlers + // Black-hole SVG <use> instance trees (#13180) + // + // Support: Firefox<=42+ + // Avoid non-left-click in FF but don't block IE radio events (#3861, gh-2343) + if ( delegateCount && cur.nodeType && + ( event.type !== "click" || isNaN( event.button ) || event.button < 1 ) ) { + + for ( ; cur !== this; cur = cur.parentNode || this ) { + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && ( cur.disabled !== true || event.type !== "click" ) ) { + matches = []; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matches[ sel ] === undefined ) { + matches[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) > -1 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matches[ sel ] ) { + matches.push( handleObj ); + } + } + if ( matches.length ) { + handlerQueue.push( { elem: cur, handlers: matches } ); + } + } + } + } + + // Add the remaining (directly-bound) handlers + if ( delegateCount < handlers.length ) { + handlerQueue.push( { elem: this, handlers: handlers.slice( delegateCount ) } ); + } + + return handlerQueue; + }, + + // Includes some event props shared by KeyEvent and MouseEvent + props: ( "altKey bubbles cancelable ctrlKey currentTarget detail eventPhase " + + "metaKey relatedTarget shiftKey target timeStamp view which" ).split( " " ), + + fixHooks: {}, + + keyHooks: { + props: "char charCode key keyCode".split( " " ), + filter: function( event, original ) { + + // Add which for key events + if ( event.which == null ) { + event.which = original.charCode != null ? original.charCode : original.keyCode; + } + + return event; + } + }, + + mouseHooks: { + props: ( "button buttons clientX clientY offsetX offsetY pageX pageY " + + "screenX screenY toElement" ).split( " " ), + filter: function( event, original ) { + var eventDoc, doc, body, + button = original.button; + + // Calculate pageX/Y if missing and clientX/Y available + if ( event.pageX == null && original.clientX != null ) { + eventDoc = event.target.ownerDocument || document; + doc = eventDoc.documentElement; + body = eventDoc.body; + + event.pageX = original.clientX + + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - + ( doc && doc.clientLeft || body && body.clientLeft || 0 ); + event.pageY = original.clientY + + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - + ( doc && doc.clientTop || body && body.clientTop || 0 ); + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + // Note: button is not normalized, so don't use it + if ( !event.which && button !== undefined ) { + event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); + } + + return event; + } + }, + + fix: function( event ) { + if ( event[ jQuery.expando ] ) { + return event; + } + + // Create a writable copy of the event object and normalize some properties + var i, prop, copy, + type = event.type, + originalEvent = event, + fixHook = this.fixHooks[ type ]; + + if ( !fixHook ) { + this.fixHooks[ type ] = fixHook = + rmouseEvent.test( type ) ? this.mouseHooks : + rkeyEvent.test( type ) ? this.keyHooks : + {}; + } + copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; + + event = new jQuery.Event( originalEvent ); + + i = copy.length; + while ( i-- ) { + prop = copy[ i ]; + event[ prop ] = originalEvent[ prop ]; + } + + // Support: Cordova 2.5 (WebKit) (#13255) + // All events should have a target; Cordova deviceready doesn't + if ( !event.target ) { + event.target = document; + } + + // Support: Safari 6.0+, Chrome<28 + // Target should not be a text node (#504, #13143) + if ( event.target.nodeType === 3 ) { + event.target = event.target.parentNode; + } + + return fixHook.filter ? fixHook.filter( event, originalEvent ) : event; + }, + + special: { + load: { + + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + focus: { + + // Fire native event if possible so blur/focus sequence is correct + trigger: function() { + if ( this !== safeActiveElement() && this.focus ) { + this.focus(); + return false; + } + }, + delegateType: "focusin" + }, + blur: { + trigger: function() { + if ( this === safeActiveElement() && this.blur ) { + this.blur(); + return false; + } + }, + delegateType: "focusout" + }, + click: { + + // For checkbox, fire native event so checked state will be right + trigger: function() { + if ( this.type === "checkbox" && this.click && jQuery.nodeName( this, "input" ) ) { + this.click(); + return false; + } + }, + + // For cross-browser consistency, don't fire native .click() on links + _default: function( event ) { + return jQuery.nodeName( event.target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Support: Firefox 20+ + // Firefox doesn't alert if the returnValue field is not set. + if ( event.result !== undefined && event.originalEvent ) { + event.originalEvent.returnValue = event.result; + } + } + } + } + }; + + jQuery.removeEvent = function( elem, type, handle ) { + + // This "if" is needed for plain objects + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle ); + } + }; + + jQuery.Event = function( src, props ) { + + // Allow instantiation without the 'new' keyword + if ( !( this instanceof jQuery.Event ) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = src.defaultPrevented || + src.defaultPrevented === undefined && + + // Support: Android<4.0 + src.returnValue === false ? + returnTrue : + returnFalse; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || jQuery.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; + }; + + // jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding + // http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html + jQuery.Event.prototype = { + constructor: jQuery.Event, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + + if ( e ) { + e.preventDefault(); + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + + if ( e ) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } + }; + + // Create mouseenter/leave events using mouseover/out and event-time checks + // so that event delegation works in jQuery. + // Do the same for pointerenter/pointerleave and pointerover/pointerout + // + // Support: Safari 7 only + // Safari sends mouseenter too often; see: + // https://code.google.com/p/chromium/issues/detail?id=470258 + // for the description of the bug (it existed in older Chrome versions as well). + jQuery.each( { + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" + }, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mouseenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; + } ); + + jQuery.fn.extend( { + on: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn ); + }, + one: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? + handleObj.origType + "." + handleObj.namespace : + handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each( function() { + jQuery.event.remove( this, types, fn, selector ); + } ); + } + } ); + + + var + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi, + + // Support: IE 10-11, Edge 10240+ + // In IE/Edge using regex groups here causes severe slowdowns. + // See https://connect.microsoft.com/IE/feedback/details/1736512/ + rnoInnerhtml = /<script|<style|<link/i, + + // checked="checked" or checked + rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, + rscriptTypeMasked = /^true\/(.*)/, + rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g; + + // Manipulating tables requires a tbody + function manipulationTarget( elem, content ) { + return jQuery.nodeName( elem, "table" ) && + jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ? + + elem.getElementsByTagName( "tbody" )[ 0 ] || + elem.appendChild( elem.ownerDocument.createElement( "tbody" ) ) : + elem; + } + + // Replace/restore the type attribute of script elements for safe DOM manipulation + function disableScript( elem ) { + elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; + return elem; + } + function restoreScript( elem ) { + var match = rscriptTypeMasked.exec( elem.type ); + + if ( match ) { + elem.type = match[ 1 ]; + } else { + elem.removeAttribute( "type" ); + } + + return elem; + } + + function cloneCopyEvent( src, dest ) { + var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events; + + if ( dest.nodeType !== 1 ) { + return; + } + + // 1. Copy private data: events, handlers, etc. + if ( dataPriv.hasData( src ) ) { + pdataOld = dataPriv.access( src ); + pdataCur = dataPriv.set( dest, pdataOld ); + events = pdataOld.events; + + if ( events ) { + delete pdataCur.handle; + pdataCur.events = {}; + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + } + + // 2. Copy user data + if ( dataUser.hasData( src ) ) { + udataOld = dataUser.access( src ); + udataCur = jQuery.extend( {}, udataOld ); + + dataUser.set( dest, udataCur ); + } + } + + // Fix IE bugs, see support tests + function fixInput( src, dest ) { + var nodeName = dest.nodeName.toLowerCase(); + + // Fails to persist the checked state of a cloned checkbox or radio button. + if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + dest.checked = src.checked; + + // Fails to return the selected option to the default selected state when cloning options + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } + } + + function domManip( collection, args, callback, ignored ) { + + // Flatten any nested arrays + args = concat.apply( [], args ); + + var fragment, first, scripts, hasScripts, node, doc, + i = 0, + l = collection.length, + iNoClone = l - 1, + value = args[ 0 ], + isFunction = jQuery.isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( isFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return collection.each( function( index ) { + var self = collection.eq( index ); + if ( isFunction ) { + args[ 0 ] = value.call( this, index, self.html() ); + } + domManip( self, args, callback, ignored ); + } ); + } + + if ( l ) { + fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + // Require either new content or an interest in ignored elements to invoke the callback + if ( first || ignored ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item + // instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + + // Support: Android<4.1, PhantomJS<2 + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( collection[ i ], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !dataPriv.access( node, "globalEval" ) && + jQuery.contains( doc, node ) ) { + + if ( node.src ) { + + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl ) { + jQuery._evalUrl( node.src ); + } + } else { + jQuery.globalEval( node.textContent.replace( rcleanScript, "" ) ); + } + } + } + } + } + } + + return collection; + } + + function remove( elem, selector, keepData ) { + var node, + nodes = selector ? jQuery.filter( selector, elem ) : elem, + i = 0; + + for ( ; ( node = nodes[ i ] ) != null; i++ ) { + if ( !keepData && node.nodeType === 1 ) { + jQuery.cleanData( getAll( node ) ); + } + + if ( node.parentNode ) { + if ( keepData && jQuery.contains( node.ownerDocument, node ) ) { + setGlobalEval( getAll( node, "script" ) ); + } + node.parentNode.removeChild( node ); + } + } + + return elem; + } + + jQuery.extend( { + htmlPrefilter: function( html ) { + return html.replace( rxhtmlTag, "<$1></$2>" ); + }, + + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var i, l, srcElements, destElements, + clone = elem.cloneNode( true ), + inPage = jQuery.contains( elem.ownerDocument, elem ); + + // Fix IE cloning issues + if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && + !jQuery.isXMLDoc( elem ) ) { + + // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + fixInput( srcElements[ i ], destElements[ i ] ); + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + cloneCopyEvent( srcElements[ i ], destElements[ i ] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + // Return the cloned set + return clone; + }, + + cleanData: function( elems ) { + var data, elem, type, + special = jQuery.event.special, + i = 0; + + for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { + if ( acceptData( elem ) ) { + if ( ( data = elem[ dataPriv.expando ] ) ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Support: Chrome <= 35-45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataPriv.expando ] = undefined; + } + if ( elem[ dataUser.expando ] ) { + + // Support: Chrome <= 35-45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataUser.expando ] = undefined; + } + } + } + } + } ); + + jQuery.fn.extend( { + + // Keep domManip exposed until 3.0 (gh-2225) + domManip: domManip, + + detach: function( selector ) { + return remove( this, selector, true ); + }, + + remove: function( selector ) { + return remove( this, selector ); + }, + + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().each( function() { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.textContent = value; + } + } ); + }, null, value, arguments.length ); + }, + + append: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + } ); + }, + + prepend: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + } ); + }, + + before: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + } ); + }, + + after: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + } ); + }, + + empty: function() { + var elem, + i = 0; + + for ( ; ( elem = this[ i ] ) != null; i++ ) { + if ( elem.nodeType === 1 ) { + + // Prevent memory leaks + jQuery.cleanData( getAll( elem, false ) ); + + // Remove any remaining nodes + elem.textContent = ""; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function() { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + } ); + }, + + html: function( value ) { + return access( this, function( value ) { + var elem = this[ 0 ] || {}, + i = 0, + l = this.length; + + if ( value === undefined && elem.nodeType === 1 ) { + return elem.innerHTML; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { + + value = jQuery.htmlPrefilter( value ); + + try { + for ( ; i < l; i++ ) { + elem = this[ i ] || {}; + + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch ( e ) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var ignored = []; + + // Make the changes, replacing each non-ignored context element with the new content + return domManip( this, arguments, function( elem ) { + var parent = this.parentNode; + + if ( jQuery.inArray( this, ignored ) < 0 ) { + jQuery.cleanData( getAll( this ) ); + if ( parent ) { + parent.replaceChild( elem, this ); + } + } + + // Force callback invocation + }, ignored ); + } + } ); + + jQuery.each( { + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" + }, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1, + i = 0; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone( true ); + jQuery( insert[ i ] )[ original ]( elems ); + + // Support: QtWebKit + // .get() because push.apply(_, arraylike) throws + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; + } ); + + + var iframe, + elemdisplay = { + + // Support: Firefox + // We have to pre-define these values for FF (#10227) + HTML: "block", + BODY: "block" + }; + + /** + * Retrieve the actual display of a element + * @param {String} name nodeName of the element + * @param {Object} doc Document object + */ + + // Called only from within defaultDisplay + function actualDisplay( name, doc ) { + var elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ), + + display = jQuery.css( elem[ 0 ], "display" ); + + // We don't have any data stored on the element, + // so use "detach" method as fast way to get rid of the element + elem.detach(); + + return display; + } + + /** + * Try to determine the default display value of an element + * @param {String} nodeName + */ + function defaultDisplay( nodeName ) { + var doc = document, + display = elemdisplay[ nodeName ]; + + if ( !display ) { + display = actualDisplay( nodeName, doc ); + + // If the simple way fails, read from inside an iframe + if ( display === "none" || !display ) { + + // Use the already-created iframe if possible + iframe = ( iframe || jQuery( "<iframe frameborder='0' width='0' height='0'/>" ) ) + .appendTo( doc.documentElement ); + + // Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse + doc = iframe[ 0 ].contentDocument; + + // Support: IE + doc.write(); + doc.close(); + + display = actualDisplay( nodeName, doc ); + iframe.detach(); + } + + // Store the correct default display + elemdisplay[ nodeName ] = display; + } + + return display; + } + var rmargin = ( /^margin/ ); + + var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); + + var getStyles = function( elem ) { + + // Support: IE<=11+, Firefox<=30+ (#15098, #14150) + // IE throws on elements created in popups + // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" + var view = elem.ownerDocument.defaultView; + + if ( !view || !view.opener ) { + view = window; + } + + return view.getComputedStyle( elem ); + }; + + var swap = function( elem, options, callback, args ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.apply( elem, args || [] ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; + }; + + + var documentElement = document.documentElement; + + + + ( function() { + var pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, reliableMarginLeftVal, + container = document.createElement( "div" ), + div = document.createElement( "div" ); + + // Finish early in limited (non-browser) environments + if ( !div.style ) { + return; + } + + // Support: IE9-11+ + // Style of cloned element affects source element cloned (#8908) + div.style.backgroundClip = "content-box"; + div.cloneNode( true ).style.backgroundClip = ""; + support.clearCloneStyle = div.style.backgroundClip === "content-box"; + + container.style.cssText = "border:0;width:8px;height:0;top:0;left:-9999px;" + + "padding:0;margin-top:1px;position:absolute"; + container.appendChild( div ); + + // Executing both pixelPosition & boxSizingReliable tests require only one layout + // so they're executed at the same time to save the second computation. + function computeStyleTests() { + div.style.cssText = + + // Support: Firefox<29, Android 2.3 + // Vendor-prefix box-sizing + "-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;" + + "position:relative;display:block;" + + "margin:auto;border:1px;padding:1px;" + + "top:1%;width:50%"; + div.innerHTML = ""; + documentElement.appendChild( container ); + + var divStyle = window.getComputedStyle( div ); + pixelPositionVal = divStyle.top !== "1%"; + reliableMarginLeftVal = divStyle.marginLeft === "2px"; + boxSizingReliableVal = divStyle.width === "4px"; + + // Support: Android 4.0 - 4.3 only + // Some styles come back with percentage values, even though they shouldn't + div.style.marginRight = "50%"; + pixelMarginRightVal = divStyle.marginRight === "4px"; + + documentElement.removeChild( container ); + } + + jQuery.extend( support, { + pixelPosition: function() { + + // This test is executed only once but we still do memoizing + // since we can use the boxSizingReliable pre-computing. + // No need to check if the test was already performed, though. + computeStyleTests(); + return pixelPositionVal; + }, + boxSizingReliable: function() { + if ( boxSizingReliableVal == null ) { + computeStyleTests(); + } + return boxSizingReliableVal; + }, + pixelMarginRight: function() { + + // Support: Android 4.0-4.3 + // We're checking for boxSizingReliableVal here instead of pixelMarginRightVal + // since that compresses better and they're computed together anyway. + if ( boxSizingReliableVal == null ) { + computeStyleTests(); + } + return pixelMarginRightVal; + }, + reliableMarginLeft: function() { + + // Support: IE <=8 only, Android 4.0 - 4.3 only, Firefox <=3 - 37 + if ( boxSizingReliableVal == null ) { + computeStyleTests(); + } + return reliableMarginLeftVal; + }, + reliableMarginRight: function() { + + // Support: Android 2.3 + // Check if div with explicit width and no margin-right incorrectly + // gets computed margin-right based on width of container. (#3333) + // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right + // This support function is only executed once so no memoizing is needed. + var ret, + marginDiv = div.appendChild( document.createElement( "div" ) ); + + // Reset CSS: box-sizing; display; margin; border; padding + marginDiv.style.cssText = div.style.cssText = + + // Support: Android 2.3 + // Vendor-prefix box-sizing + "-webkit-box-sizing:content-box;box-sizing:content-box;" + + "display:block;margin:0;border:0;padding:0"; + marginDiv.style.marginRight = marginDiv.style.width = "0"; + div.style.width = "1px"; + documentElement.appendChild( container ); + + ret = !parseFloat( window.getComputedStyle( marginDiv ).marginRight ); + + documentElement.removeChild( container ); + div.removeChild( marginDiv ); + + return ret; + } + } ); + } )(); + + + function curCSS( elem, name, computed ) { + var width, minWidth, maxWidth, ret, + style = elem.style; + + computed = computed || getStyles( elem ); + ret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined; + + // Support: Opera 12.1x only + // Fall back to style even without computed + // computed is undefined for elems on document fragments + if ( ( ret === "" || ret === undefined ) && !jQuery.contains( elem.ownerDocument, elem ) ) { + ret = jQuery.style( elem, name ); + } + + // Support: IE9 + // getPropertyValue is only needed for .css('filter') (#12537) + if ( computed ) { + + // A tribute to the "awesome hack by Dean Edwards" + // Android Browser returns percentage for some values, + // but width seems to be reliably pixels. + // This is against the CSSOM draft spec: + // http://dev.w3.org/csswg/cssom/#resolved-values + if ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) { + + // Remember the original values + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + // Put in the new values to get a computed value out + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + // Revert the changed values + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret !== undefined ? + + // Support: IE9-11+ + // IE returns zIndex value as an integer. + ret + "" : + ret; + } + + + function addGetHookIf( conditionFn, hookFn ) { + + // Define the hook, we'll check on the first run if it's really needed. + return { + get: function() { + if ( conditionFn() ) { + + // Hook not needed (or it's not possible to use it due + // to missing dependency), remove it. + delete this.get; + return; + } + + // Hook needed; redefine it so that the support test is not executed again. + return ( this.get = hookFn ).apply( this, arguments ); + } + }; + } + + + var + + // Swappable if display is none or starts with table + // except "table", "table-cell", or "table-caption" + // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: "0", + fontWeight: "400" + }, + + cssPrefixes = [ "Webkit", "O", "Moz", "ms" ], + emptyStyle = document.createElement( "div" ).style; + + // Return a css property mapped to a potentially vendor prefixed property + function vendorPropName( name ) { + + // Shortcut for names that are not vendor prefixed + if ( name in emptyStyle ) { + return name; + } + + // Check for vendor prefixed names + var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in emptyStyle ) { + return name; + } + } + } + + function setPositiveNumber( elem, value, subtract ) { + + // Any relative (+/-) values have already been + // normalized at this point + var matches = rcssNum.exec( value ); + return matches ? + + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : + value; + } + + function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) { + var i = extra === ( isBorderBox ? "border" : "content" ) ? + + // If we already have the right measurement, avoid augmentation + 4 : + + // Otherwise initialize for horizontal or vertical properties + name === "width" ? 1 : 0, + + val = 0; + + for ( ; i < 4; i += 2 ) { + + // Both box models exclude margin, so add it if we want it + if ( extra === "margin" ) { + val += jQuery.css( elem, extra + cssExpand[ i ], true, styles ); + } + + if ( isBorderBox ) { + + // border-box includes padding, so remove it if we want content + if ( extra === "content" ) { + val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // At this point, extra isn't border nor margin, so remove border + if ( extra !== "margin" ) { + val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } else { + + // At this point, extra isn't content, so add padding + val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // At this point, extra isn't content nor padding, so add border + if ( extra !== "padding" ) { + val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + return val; + } + + function getWidthOrHeight( elem, name, extra ) { + + // Start with offset property, which is equivalent to the border-box value + var valueIsBorderBox = true, + val = name === "width" ? elem.offsetWidth : elem.offsetHeight, + styles = getStyles( elem ), + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; + + // Support: IE11 only + // In IE 11 fullscreen elements inside of an iframe have + // 100x too small dimensions (gh-1764). + if ( document.msFullscreenElement && window.top !== window ) { + + // Support: IE11 only + // Running getBoundingClientRect on a disconnected node + // in IE throws an error. + if ( elem.getClientRects().length ) { + val = Math.round( elem.getBoundingClientRect()[ name ] * 100 ); + } + } + + // Some non-html elements return undefined for offsetWidth, so check for null/undefined + // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285 + // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668 + if ( val <= 0 || val == null ) { + + // Fall back to computed then uncomputed css if necessary + val = curCSS( elem, name, styles ); + if ( val < 0 || val == null ) { + val = elem.style[ name ]; + } + + // Computed unit is not pixels. Stop here and return. + if ( rnumnonpx.test( val ) ) { + return val; + } + + // Check for style in case a browser which returns unreliable values + // for getComputedStyle silently falls back to the reliable elem.style + valueIsBorderBox = isBorderBox && + ( support.boxSizingReliable() || val === elem.style[ name ] ); + + // Normalize "", auto, and prepare for extra + val = parseFloat( val ) || 0; + } + + // Use the active box-sizing model to add/subtract irrelevant styles + return ( val + + augmentWidthOrHeight( + elem, + name, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles + ) + ) + "px"; + } + + function showHide( elements, show ) { + var display, elem, hidden, + values = [], + index = 0, + length = elements.length; + + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + + values[ index ] = dataPriv.get( elem, "olddisplay" ); + display = elem.style.display; + if ( show ) { + + // Reset the inline display of this element to learn if it is + // being hidden by cascaded rules or not + if ( !values[ index ] && display === "none" ) { + elem.style.display = ""; + } + + // Set elements which have been overridden with display: none + // in a stylesheet to whatever the default browser style is + // for such an element + if ( elem.style.display === "" && isHidden( elem ) ) { + values[ index ] = dataPriv.access( + elem, + "olddisplay", + defaultDisplay( elem.nodeName ) + ); + } + } else { + hidden = isHidden( elem ); + + if ( display !== "none" || !hidden ) { + dataPriv.set( + elem, + "olddisplay", + hidden ? display : jQuery.css( elem, "display" ) + ); + } + } + } + + // Set the display of most of the elements in a second loop + // to avoid the constant reflow + for ( index = 0; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + if ( !show || elem.style.display === "none" || elem.style.display === "" ) { + elem.style.display = show ? values[ index ] || "" : "none"; + } + } + + return elements; + } + + jQuery.extend( { + + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + } + } + } + }, + + // Don't automatically add "px" to these possibly-unitless properties + cssNumber: { + "animationIterationCount": true, + "columnCount": true, + "fillOpacity": true, + "flexGrow": true, + "flexShrink": true, + "fontWeight": true, + "lineHeight": true, + "opacity": true, + "order": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: { + "float": "cssFloat" + }, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = jQuery.camelCase( name ), + style = elem.style; + + name = jQuery.cssProps[ origName ] || + ( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName ); + + // Gets hook for the prefixed version, then unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // Convert "+=" or "-=" to relative numbers (#7345) + if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { + value = adjustCSS( elem, name, ret ); + + // Fixes bug #9237 + type = "number"; + } + + // Make sure that null and NaN values aren't set (#7116) + if ( value == null || value !== value ) { + return; + } + + // If a number was passed in, add the unit (except for certain CSS properties) + if ( type === "number" ) { + value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); + } + + // Support: IE9-11+ + // background-* props affect original clone's values + if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { + style[ name ] = "inherit"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !( "set" in hooks ) || + ( value = hooks.set( elem, value, extra ) ) !== undefined ) { + + style[ name ] = value; + } + + } else { + + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && + ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { + + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, extra, styles ) { + var val, num, hooks, + origName = jQuery.camelCase( name ); + + // Make sure that we're working with the right name + name = jQuery.cssProps[ origName ] || + ( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName ); + + // Try prefixed name followed by the unprefixed name + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name, styles ); + } + + // Convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Make numeric if forced or a qualifier was provided and val looks numeric + if ( extra === "" || extra ) { + num = parseFloat( val ); + return extra === true || isFinite( num ) ? num || 0 : val; + } + return val; + } + } ); + + jQuery.each( [ "height", "width" ], function( i, name ) { + jQuery.cssHooks[ name ] = { + get: function( elem, computed, extra ) { + if ( computed ) { + + // Certain elements can have dimension info if we invisibly show them + // but it must have a current display style that would benefit + return rdisplayswap.test( jQuery.css( elem, "display" ) ) && + elem.offsetWidth === 0 ? + swap( elem, cssShow, function() { + return getWidthOrHeight( elem, name, extra ); + } ) : + getWidthOrHeight( elem, name, extra ); + } + }, + + set: function( elem, value, extra ) { + var matches, + styles = extra && getStyles( elem ), + subtract = extra && augmentWidthOrHeight( + elem, + name, + extra, + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + styles + ); + + // Convert to pixels if value adjustment is needed + if ( subtract && ( matches = rcssNum.exec( value ) ) && + ( matches[ 3 ] || "px" ) !== "px" ) { + + elem.style[ name ] = value; + value = jQuery.css( elem, name ); + } + + return setPositiveNumber( elem, value, subtract ); + } + }; + } ); + + jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, + function( elem, computed ) { + if ( computed ) { + return ( parseFloat( curCSS( elem, "marginLeft" ) ) || + elem.getBoundingClientRect().left - + swap( elem, { marginLeft: 0 }, function() { + return elem.getBoundingClientRect().left; + } ) + ) + "px"; + } + } + ); + + // Support: Android 2.3 + jQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight, + function( elem, computed ) { + if ( computed ) { + return swap( elem, { "display": "inline-block" }, + curCSS, [ elem, "marginRight" ] ); + } + } + ); + + // These hooks are used by animate to expand properties + jQuery.each( { + margin: "", + padding: "", + border: "Width" + }, function( prefix, suffix ) { + jQuery.cssHooks[ prefix + suffix ] = { + expand: function( value ) { + var i = 0, + expanded = {}, + + // Assumes a single number if not a string + parts = typeof value === "string" ? value.split( " " ) : [ value ]; + + for ( ; i < 4; i++ ) { + expanded[ prefix + cssExpand[ i ] + suffix ] = + parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; + } + + return expanded; + } + }; + + if ( !rmargin.test( prefix ) ) { + jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; + } + } ); + + jQuery.fn.extend( { + css: function( name, value ) { + return access( this, function( elem, name, value ) { + var styles, len, + map = {}, + i = 0; + + if ( jQuery.isArray( name ) ) { + styles = getStyles( elem ); + len = name.length; + + for ( ; i < len; i++ ) { + map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); + } + + return map; + } + + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + }, + show: function() { + return showHide( this, true ); + }, + hide: function() { + return showHide( this ); + }, + toggle: function( state ) { + if ( typeof state === "boolean" ) { + return state ? this.show() : this.hide(); + } + + return this.each( function() { + if ( isHidden( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + } ); + } + } ); + + + function Tween( elem, options, prop, end, easing ) { + return new Tween.prototype.init( elem, options, prop, end, easing ); + } + jQuery.Tween = Tween; + + Tween.prototype = { + constructor: Tween, + init: function( elem, options, prop, end, easing, unit ) { + this.elem = elem; + this.prop = prop; + this.easing = easing || jQuery.easing._default; + this.options = options; + this.start = this.now = this.cur(); + this.end = end; + this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + }, + cur: function() { + var hooks = Tween.propHooks[ this.prop ]; + + return hooks && hooks.get ? + hooks.get( this ) : + Tween.propHooks._default.get( this ); + }, + run: function( percent ) { + var eased, + hooks = Tween.propHooks[ this.prop ]; + + if ( this.options.duration ) { + this.pos = eased = jQuery.easing[ this.easing ]( + percent, this.options.duration * percent, 0, 1, this.options.duration + ); + } else { + this.pos = eased = percent; + } + this.now = ( this.end - this.start ) * eased + this.start; + + if ( this.options.step ) { + this.options.step.call( this.elem, this.now, this ); + } + + if ( hooks && hooks.set ) { + hooks.set( this ); + } else { + Tween.propHooks._default.set( this ); + } + return this; + } + }; + + Tween.prototype.init.prototype = Tween.prototype; + + Tween.propHooks = { + _default: { + get: function( tween ) { + var result; + + // Use a property on the element directly when it is not a DOM element, + // or when there is no matching style property that exists. + if ( tween.elem.nodeType !== 1 || + tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { + return tween.elem[ tween.prop ]; + } + + // Passing an empty string as a 3rd parameter to .css will automatically + // attempt a parseFloat and fallback to a string if the parse fails. + // Simple values such as "10px" are parsed to Float; + // complex values such as "rotate(1rad)" are returned as-is. + result = jQuery.css( tween.elem, tween.prop, "" ); + + // Empty strings, null, undefined and "auto" are converted to 0. + return !result || result === "auto" ? 0 : result; + }, + set: function( tween ) { + + // Use step hook for back compat. + // Use cssHook if its there. + // Use .style if available and use plain properties where available. + if ( jQuery.fx.step[ tween.prop ] ) { + jQuery.fx.step[ tween.prop ]( tween ); + } else if ( tween.elem.nodeType === 1 && + ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || + jQuery.cssHooks[ tween.prop ] ) ) { + jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); + } else { + tween.elem[ tween.prop ] = tween.now; + } + } + } + }; + + // Support: IE9 + // Panic based approach to setting things on disconnected nodes + Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { + set: function( tween ) { + if ( tween.elem.nodeType && tween.elem.parentNode ) { + tween.elem[ tween.prop ] = tween.now; + } + } + }; + + jQuery.easing = { + linear: function( p ) { + return p; + }, + swing: function( p ) { + return 0.5 - Math.cos( p * Math.PI ) / 2; + }, + _default: "swing" + }; + + jQuery.fx = Tween.prototype.init; + + // Back Compat <1.8 extension point + jQuery.fx.step = {}; + + + + + var + fxNow, timerId, + rfxtypes = /^(?:toggle|show|hide)$/, + rrun = /queueHooks$/; + + // Animations created synchronously will run synchronously + function createFxNow() { + window.setTimeout( function() { + fxNow = undefined; + } ); + return ( fxNow = jQuery.now() ); + } + + // Generate parameters to create a standard animation + function genFx( type, includeWidth ) { + var which, + i = 0, + attrs = { height: type }; + + // If we include width, step value is 1 to do all cssExpand values, + // otherwise step value is 2 to skip over Left and Right + includeWidth = includeWidth ? 1 : 0; + for ( ; i < 4 ; i += 2 - includeWidth ) { + which = cssExpand[ i ]; + attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; + } + + if ( includeWidth ) { + attrs.opacity = attrs.width = type; + } + + return attrs; + } + + function createTween( value, prop, animation ) { + var tween, + collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), + index = 0, + length = collection.length; + for ( ; index < length; index++ ) { + if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { + + // We're done with this property + return tween; + } + } + } + + function defaultPrefilter( elem, props, opts ) { + /* jshint validthis: true */ + var prop, value, toggle, tween, hooks, oldfire, display, checkDisplay, + anim = this, + orig = {}, + style = elem.style, + hidden = elem.nodeType && isHidden( elem ), + dataShow = dataPriv.get( elem, "fxshow" ); + + // Handle queue: false promises + if ( !opts.queue ) { + hooks = jQuery._queueHooks( elem, "fx" ); + if ( hooks.unqueued == null ) { + hooks.unqueued = 0; + oldfire = hooks.empty.fire; + hooks.empty.fire = function() { + if ( !hooks.unqueued ) { + oldfire(); + } + }; + } + hooks.unqueued++; + + anim.always( function() { + + // Ensure the complete handler is called before this completes + anim.always( function() { + hooks.unqueued--; + if ( !jQuery.queue( elem, "fx" ).length ) { + hooks.empty.fire(); + } + } ); + } ); + } + + // Height/width overflow pass + if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) { + + // Make sure that nothing sneaks out + // Record all 3 overflow attributes because IE9-10 do not + // change the overflow attribute when overflowX and + // overflowY are set to the same value + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + + // Set display property to inline-block for height/width + // animations on inline elements that are having width/height animated + display = jQuery.css( elem, "display" ); + + // Test default display if display is currently "none" + checkDisplay = display === "none" ? + dataPriv.get( elem, "olddisplay" ) || defaultDisplay( elem.nodeName ) : display; + + if ( checkDisplay === "inline" && jQuery.css( elem, "float" ) === "none" ) { + style.display = "inline-block"; + } + } + + if ( opts.overflow ) { + style.overflow = "hidden"; + anim.always( function() { + style.overflow = opts.overflow[ 0 ]; + style.overflowX = opts.overflow[ 1 ]; + style.overflowY = opts.overflow[ 2 ]; + } ); + } + + // show/hide pass + for ( prop in props ) { + value = props[ prop ]; + if ( rfxtypes.exec( value ) ) { + delete props[ prop ]; + toggle = toggle || value === "toggle"; + if ( value === ( hidden ? "hide" : "show" ) ) { + + // If there is dataShow left over from a stopped hide or show + // and we are going to proceed with show, we should pretend to be hidden + if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { + hidden = true; + } else { + continue; + } + } + orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); + + // Any non-fx value stops us from restoring the original display value + } else { + display = undefined; + } + } + + if ( !jQuery.isEmptyObject( orig ) ) { + if ( dataShow ) { + if ( "hidden" in dataShow ) { + hidden = dataShow.hidden; + } + } else { + dataShow = dataPriv.access( elem, "fxshow", {} ); + } + + // Store state if its toggle - enables .stop().toggle() to "reverse" + if ( toggle ) { + dataShow.hidden = !hidden; + } + if ( hidden ) { + jQuery( elem ).show(); + } else { + anim.done( function() { + jQuery( elem ).hide(); + } ); + } + anim.done( function() { + var prop; + + dataPriv.remove( elem, "fxshow" ); + for ( prop in orig ) { + jQuery.style( elem, prop, orig[ prop ] ); + } + } ); + for ( prop in orig ) { + tween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); + + if ( !( prop in dataShow ) ) { + dataShow[ prop ] = tween.start; + if ( hidden ) { + tween.end = tween.start; + tween.start = prop === "width" || prop === "height" ? 1 : 0; + } + } + } + + // If this is a noop like .hide().hide(), restore an overwritten display value + } else if ( ( display === "none" ? defaultDisplay( elem.nodeName ) : display ) === "inline" ) { + style.display = display; + } + } + + function propFilter( props, specialEasing ) { + var index, name, easing, value, hooks; + + // camelCase, specialEasing and expand cssHook pass + for ( index in props ) { + name = jQuery.camelCase( index ); + easing = specialEasing[ name ]; + value = props[ index ]; + if ( jQuery.isArray( value ) ) { + easing = value[ 1 ]; + value = props[ index ] = value[ 0 ]; + } + + if ( index !== name ) { + props[ name ] = value; + delete props[ index ]; + } + + hooks = jQuery.cssHooks[ name ]; + if ( hooks && "expand" in hooks ) { + value = hooks.expand( value ); + delete props[ name ]; + + // Not quite $.extend, this won't overwrite existing keys. + // Reusing 'index' because we have the correct "name" + for ( index in value ) { + if ( !( index in props ) ) { + props[ index ] = value[ index ]; + specialEasing[ index ] = easing; + } + } + } else { + specialEasing[ name ] = easing; + } + } + } + + function Animation( elem, properties, options ) { + var result, + stopped, + index = 0, + length = Animation.prefilters.length, + deferred = jQuery.Deferred().always( function() { + + // Don't match elem in the :animated selector + delete tick.elem; + } ), + tick = function() { + if ( stopped ) { + return false; + } + var currentTime = fxNow || createFxNow(), + remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), + + // Support: Android 2.3 + // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) + temp = remaining / animation.duration || 0, + percent = 1 - temp, + index = 0, + length = animation.tweens.length; + + for ( ; index < length ; index++ ) { + animation.tweens[ index ].run( percent ); + } + + deferred.notifyWith( elem, [ animation, percent, remaining ] ); + + if ( percent < 1 && length ) { + return remaining; + } else { + deferred.resolveWith( elem, [ animation ] ); + return false; + } + }, + animation = deferred.promise( { + elem: elem, + props: jQuery.extend( {}, properties ), + opts: jQuery.extend( true, { + specialEasing: {}, + easing: jQuery.easing._default + }, options ), + originalProperties: properties, + originalOptions: options, + startTime: fxNow || createFxNow(), + duration: options.duration, + tweens: [], + createTween: function( prop, end ) { + var tween = jQuery.Tween( elem, animation.opts, prop, end, + animation.opts.specialEasing[ prop ] || animation.opts.easing ); + animation.tweens.push( tween ); + return tween; + }, + stop: function( gotoEnd ) { + var index = 0, + + // If we are going to the end, we want to run all the tweens + // otherwise we skip this part + length = gotoEnd ? animation.tweens.length : 0; + if ( stopped ) { + return this; + } + stopped = true; + for ( ; index < length ; index++ ) { + animation.tweens[ index ].run( 1 ); + } + + // Resolve when we played the last frame; otherwise, reject + if ( gotoEnd ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + deferred.resolveWith( elem, [ animation, gotoEnd ] ); + } else { + deferred.rejectWith( elem, [ animation, gotoEnd ] ); + } + return this; + } + } ), + props = animation.props; + + propFilter( props, animation.opts.specialEasing ); + + for ( ; index < length ; index++ ) { + result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); + if ( result ) { + if ( jQuery.isFunction( result.stop ) ) { + jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = + jQuery.proxy( result.stop, result ); + } + return result; + } + } + + jQuery.map( props, createTween, animation ); + + if ( jQuery.isFunction( animation.opts.start ) ) { + animation.opts.start.call( elem, animation ); + } + + jQuery.fx.timer( + jQuery.extend( tick, { + elem: elem, + anim: animation, + queue: animation.opts.queue + } ) + ); + + // attach callbacks from options + return animation.progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); + } + + jQuery.Animation = jQuery.extend( Animation, { + tweeners: { + "*": [ function( prop, value ) { + var tween = this.createTween( prop, value ); + adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); + return tween; + } ] + }, + + tweener: function( props, callback ) { + if ( jQuery.isFunction( props ) ) { + callback = props; + props = [ "*" ]; + } else { + props = props.match( rnotwhite ); + } + + var prop, + index = 0, + length = props.length; + + for ( ; index < length ; index++ ) { + prop = props[ index ]; + Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; + Animation.tweeners[ prop ].unshift( callback ); + } + }, + + prefilters: [ defaultPrefilter ], + + prefilter: function( callback, prepend ) { + if ( prepend ) { + Animation.prefilters.unshift( callback ); + } else { + Animation.prefilters.push( callback ); + } + } + } ); + + jQuery.speed = function( speed, easing, fn ) { + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { + complete: fn || !fn && easing || + jQuery.isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing + }; + + opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? + opt.duration : opt.duration in jQuery.fx.speeds ? + jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default; + + // Normalize opt.queue - true/undefined/null -> "fx" + if ( opt.queue == null || opt.queue === true ) { + opt.queue = "fx"; + } + + // Queueing + opt.old = opt.complete; + + opt.complete = function() { + if ( jQuery.isFunction( opt.old ) ) { + opt.old.call( this ); + } + + if ( opt.queue ) { + jQuery.dequeue( this, opt.queue ); + } + }; + + return opt; + }; + + jQuery.fn.extend( { + fadeTo: function( speed, to, easing, callback ) { + + // Show any hidden elements after setting opacity to 0 + return this.filter( isHidden ).css( "opacity", 0 ).show() + + // Animate to the value specified + .end().animate( { opacity: to }, speed, easing, callback ); + }, + animate: function( prop, speed, easing, callback ) { + var empty = jQuery.isEmptyObject( prop ), + optall = jQuery.speed( speed, easing, callback ), + doAnimation = function() { + + // Operate on a copy of prop so per-property easing won't be lost + var anim = Animation( this, jQuery.extend( {}, prop ), optall ); + + // Empty animations, or finishing resolves immediately + if ( empty || dataPriv.get( this, "finish" ) ) { + anim.stop( true ); + } + }; + doAnimation.finish = doAnimation; + + return empty || optall.queue === false ? + this.each( doAnimation ) : + this.queue( optall.queue, doAnimation ); + }, + stop: function( type, clearQueue, gotoEnd ) { + var stopQueue = function( hooks ) { + var stop = hooks.stop; + delete hooks.stop; + stop( gotoEnd ); + }; + + if ( typeof type !== "string" ) { + gotoEnd = clearQueue; + clearQueue = type; + type = undefined; + } + if ( clearQueue && type !== false ) { + this.queue( type || "fx", [] ); + } + + return this.each( function() { + var dequeue = true, + index = type != null && type + "queueHooks", + timers = jQuery.timers, + data = dataPriv.get( this ); + + if ( index ) { + if ( data[ index ] && data[ index ].stop ) { + stopQueue( data[ index ] ); + } + } else { + for ( index in data ) { + if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { + stopQueue( data[ index ] ); + } + } + } + + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && + ( type == null || timers[ index ].queue === type ) ) { + + timers[ index ].anim.stop( gotoEnd ); + dequeue = false; + timers.splice( index, 1 ); + } + } + + // Start the next in the queue if the last step wasn't forced. + // Timers currently will call their complete callbacks, which + // will dequeue but only if they were gotoEnd. + if ( dequeue || !gotoEnd ) { + jQuery.dequeue( this, type ); + } + } ); + }, + finish: function( type ) { + if ( type !== false ) { + type = type || "fx"; + } + return this.each( function() { + var index, + data = dataPriv.get( this ), + queue = data[ type + "queue" ], + hooks = data[ type + "queueHooks" ], + timers = jQuery.timers, + length = queue ? queue.length : 0; + + // Enable finishing flag on private data + data.finish = true; + + // Empty the queue first + jQuery.queue( this, type, [] ); + + if ( hooks && hooks.stop ) { + hooks.stop.call( this, true ); + } + + // Look for any active animations, and finish them + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && timers[ index ].queue === type ) { + timers[ index ].anim.stop( true ); + timers.splice( index, 1 ); + } + } + + // Look for any animations in the old queue and finish them + for ( index = 0; index < length; index++ ) { + if ( queue[ index ] && queue[ index ].finish ) { + queue[ index ].finish.call( this ); + } + } + + // Turn off finishing flag + delete data.finish; + } ); + } + } ); + + jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) { + var cssFn = jQuery.fn[ name ]; + jQuery.fn[ name ] = function( speed, easing, callback ) { + return speed == null || typeof speed === "boolean" ? + cssFn.apply( this, arguments ) : + this.animate( genFx( name, true ), speed, easing, callback ); + }; + } ); + + // Generate shortcuts for custom animations + jQuery.each( { + slideDown: genFx( "show" ), + slideUp: genFx( "hide" ), + slideToggle: genFx( "toggle" ), + fadeIn: { opacity: "show" }, + fadeOut: { opacity: "hide" }, + fadeToggle: { opacity: "toggle" } + }, function( name, props ) { + jQuery.fn[ name ] = function( speed, easing, callback ) { + return this.animate( props, speed, easing, callback ); + }; + } ); + + jQuery.timers = []; + jQuery.fx.tick = function() { + var timer, + i = 0, + timers = jQuery.timers; + + fxNow = jQuery.now(); + + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + + // Checks the timer has not already been removed + if ( !timer() && timers[ i ] === timer ) { + timers.splice( i--, 1 ); + } + } + + if ( !timers.length ) { + jQuery.fx.stop(); + } + fxNow = undefined; + }; + + jQuery.fx.timer = function( timer ) { + jQuery.timers.push( timer ); + if ( timer() ) { + jQuery.fx.start(); + } else { + jQuery.timers.pop(); + } + }; + + jQuery.fx.interval = 13; + jQuery.fx.start = function() { + if ( !timerId ) { + timerId = window.setInterval( jQuery.fx.tick, jQuery.fx.interval ); + } + }; + + jQuery.fx.stop = function() { + window.clearInterval( timerId ); + + timerId = null; + }; + + jQuery.fx.speeds = { + slow: 600, + fast: 200, + + // Default speed + _default: 400 + }; + + + // Based off of the plugin by Clint Helfers, with permission. + // http://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ + jQuery.fn.delay = function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = window.setTimeout( next, time ); + hooks.stop = function() { + window.clearTimeout( timeout ); + }; + } ); + }; + + + ( function() { + var input = document.createElement( "input" ), + select = document.createElement( "select" ), + opt = select.appendChild( document.createElement( "option" ) ); + + input.type = "checkbox"; + + // Support: iOS<=5.1, Android<=4.2+ + // Default value for a checkbox should be "on" + support.checkOn = input.value !== ""; + + // Support: IE<=11+ + // Must access selectedIndex to make default options select + support.optSelected = opt.selected; + + // Support: Android<=2.3 + // Options inside disabled selects are incorrectly marked as disabled + select.disabled = true; + support.optDisabled = !opt.disabled; + + // Support: IE<=11+ + // An input loses its value after becoming a radio + input = document.createElement( "input" ); + input.value = "t"; + input.type = "radio"; + support.radioValue = input.value === "t"; + } )(); + + + var boolHook, + attrHandle = jQuery.expr.attrHandle; + + jQuery.fn.extend( { + attr: function( name, value ) { + return access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each( function() { + jQuery.removeAttr( this, name ); + } ); + } + } ); + + jQuery.extend( { + attr: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set attributes on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + // All attributes are lowercase + // Grab necessary hook if one is defined + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + name = name.toLowerCase(); + hooks = jQuery.attrHooks[ name ] || + ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); + } + + if ( value !== undefined ) { + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + } + + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + elem.setAttribute( name, value + "" ); + return value; + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + ret = jQuery.find.attr( elem, name ); + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? undefined : ret; + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !support.radioValue && value === "radio" && + jQuery.nodeName( elem, "input" ) ) { + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + }, + + removeAttr: function( elem, value ) { + var name, propName, + i = 0, + attrNames = value && value.match( rnotwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( ( name = attrNames[ i++ ] ) ) { + propName = jQuery.propFix[ name ] || name; + + // Boolean attributes get special treatment (#10870) + if ( jQuery.expr.match.bool.test( name ) ) { + + // Set corresponding property to false + elem[ propName ] = false; + } + + elem.removeAttribute( name ); + } + } + } + } ); + + // Hooks for boolean attributes + boolHook = { + set: function( elem, value, name ) { + if ( value === false ) { + + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + elem.setAttribute( name, name ); + } + return name; + } + }; + jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) { + var getter = attrHandle[ name ] || jQuery.find.attr; + + attrHandle[ name ] = function( elem, name, isXML ) { + var ret, handle; + if ( !isXML ) { + + // Avoid an infinite loop by temporarily removing this function from the getter + handle = attrHandle[ name ]; + attrHandle[ name ] = ret; + ret = getter( elem, name, isXML ) != null ? + name.toLowerCase() : + null; + attrHandle[ name ] = handle; + } + return ret; + }; + } ); + + + + + var rfocusable = /^(?:input|select|textarea|button)$/i, + rclickable = /^(?:a|area)$/i; + + jQuery.fn.extend( { + prop: function( name, value ) { + return access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + return this.each( function() { + delete this[ jQuery.propFix[ name ] || name ]; + } ); + } + } ); + + jQuery.extend( { + prop: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set properties on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + return ( elem[ name ] = value ); + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + return elem[ name ]; + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + + // elem.tabIndex doesn't always return the + // correct value when it hasn't been explicitly set + // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + // Use proper attribute retrieval(#12072) + var tabindex = jQuery.find.attr( elem, "tabindex" ); + + return tabindex ? + parseInt( tabindex, 10 ) : + rfocusable.test( elem.nodeName ) || + rclickable.test( elem.nodeName ) && elem.href ? + 0 : + -1; + } + } + }, + + propFix: { + "for": "htmlFor", + "class": "className" + } + } ); + + // Support: IE <=11 only + // Accessing the selectedIndex property + // forces the browser to respect setting selected + // on the option + // The getter ensures a default option is selected + // when in an optgroup + if ( !support.optSelected ) { + jQuery.propHooks.selected = { + get: function( elem ) { + var parent = elem.parentNode; + if ( parent && parent.parentNode ) { + parent.parentNode.selectedIndex; + } + return null; + }, + set: function( elem ) { + var parent = elem.parentNode; + if ( parent ) { + parent.selectedIndex; + + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + } + }; + } + + jQuery.each( [ + "tabIndex", + "readOnly", + "maxLength", + "cellSpacing", + "cellPadding", + "rowSpan", + "colSpan", + "useMap", + "frameBorder", + "contentEditable" + ], function() { + jQuery.propFix[ this.toLowerCase() ] = this; + } ); + + + + + var rclass = /[\t\r\n\f]/g; + + function getClass( elem ) { + return elem.getAttribute && elem.getAttribute( "class" ) || ""; + } + + jQuery.fn.extend( { + addClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( jQuery.isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( typeof value === "string" && value ) { + classes = value.match( rnotwhite ) || []; + + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + cur = elem.nodeType === 1 && + ( " " + curValue + " " ).replace( rclass, " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + if ( cur.indexOf( " " + clazz + " " ) < 0 ) { + cur += clazz + " "; + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = jQuery.trim( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( jQuery.isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( !arguments.length ) { + return this.attr( "class", "" ); + } + + if ( typeof value === "string" && value ) { + classes = value.match( rnotwhite ) || []; + + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + + // This expression is here for better compressibility (see addClass) + cur = elem.nodeType === 1 && + ( " " + curValue + " " ).replace( rclass, " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + + // Remove *all* instances + while ( cur.indexOf( " " + clazz + " " ) > -1 ) { + cur = cur.replace( " " + clazz + " ", " " ); + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = jQuery.trim( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value; + + if ( typeof stateVal === "boolean" && type === "string" ) { + return stateVal ? this.addClass( value ) : this.removeClass( value ); + } + + if ( jQuery.isFunction( value ) ) { + return this.each( function( i ) { + jQuery( this ).toggleClass( + value.call( this, i, getClass( this ), stateVal ), + stateVal + ); + } ); + } + + return this.each( function() { + var className, i, self, classNames; + + if ( type === "string" ) { + + // Toggle individual class names + i = 0; + self = jQuery( this ); + classNames = value.match( rnotwhite ) || []; + + while ( ( className = classNames[ i++ ] ) ) { + + // Check each className given, space separated list + if ( self.hasClass( className ) ) { + self.removeClass( className ); + } else { + self.addClass( className ); + } + } + + // Toggle whole class name + } else if ( value === undefined || type === "boolean" ) { + className = getClass( this ); + if ( className ) { + + // Store className if set + dataPriv.set( this, "__className__", className ); + } + + // If the element has a class name or if we're passed `false`, + // then remove the whole classname (if there was one, the above saved it). + // Otherwise bring back whatever was previously saved (if anything), + // falling back to the empty string if nothing was stored. + if ( this.setAttribute ) { + this.setAttribute( "class", + className || value === false ? + "" : + dataPriv.get( this, "__className__" ) || "" + ); + } + } + } ); + }, + + hasClass: function( selector ) { + var className, elem, + i = 0; + + className = " " + selector + " "; + while ( ( elem = this[ i++ ] ) ) { + if ( elem.nodeType === 1 && + ( " " + getClass( elem ) + " " ).replace( rclass, " " ) + .indexOf( className ) > -1 + ) { + return true; + } + } + + return false; + } + } ); + + + + + var rreturn = /\r/g, + rspaces = /[\x20\t\r\n\f]+/g; + + jQuery.fn.extend( { + val: function( value ) { + var hooks, ret, isFunction, + elem = this[ 0 ]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || + jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && + "get" in hooks && + ( ret = hooks.get( elem, "value" ) ) !== undefined + ) { + return ret; + } + + ret = elem.value; + + return typeof ret === "string" ? + + // Handle most common string cases + ret.replace( rreturn, "" ) : + + // Handle cases where value is null/undef or number + ret == null ? "" : ret; + } + + return; + } + + isFunction = jQuery.isFunction( value ); + + return this.each( function( i ) { + var val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( isFunction ) { + val = value.call( this, i, jQuery( this ).val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + + } else if ( typeof val === "number" ) { + val += ""; + + } else if ( jQuery.isArray( val ) ) { + val = jQuery.map( val, function( value ) { + return value == null ? "" : value + ""; + } ); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + } ); + } + } ); + + jQuery.extend( { + valHooks: { + option: { + get: function( elem ) { + + var val = jQuery.find.attr( elem, "value" ); + return val != null ? + val : + + // Support: IE10-11+ + // option.text throws exceptions (#14686, #14858) + // Strip and collapse whitespace + // https://html.spec.whatwg.org/#strip-and-collapse-whitespace + jQuery.trim( jQuery.text( elem ) ).replace( rspaces, " " ); + } + }, + select: { + get: function( elem ) { + var value, option, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one" || index < 0, + values = one ? null : [], + max = one ? index + 1 : options.length, + i = index < 0 ? + max : + one ? index : 0; + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // IE8-9 doesn't update selected after form reset (#2551) + if ( ( option.selected || i === index ) && + + // Don't return options that are disabled or in a disabled optgroup + ( support.optDisabled ? + !option.disabled : option.getAttribute( "disabled" ) === null ) && + ( !option.parentNode.disabled || + !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + }, + + set: function( elem, value ) { + var optionSet, option, + options = elem.options, + values = jQuery.makeArray( value ), + i = options.length; + + while ( i-- ) { + option = options[ i ]; + if ( option.selected = + jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 + ) { + optionSet = true; + } + } + + // Force browsers to behave consistently when non-matching value is set + if ( !optionSet ) { + elem.selectedIndex = -1; + } + return values; + } + } + } + } ); + + // Radios and checkboxes getter/setter + jQuery.each( [ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + set: function( elem, value ) { + if ( jQuery.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); + } + } + }; + if ( !support.checkOn ) { + jQuery.valHooks[ this ].get = function( elem ) { + return elem.getAttribute( "value" ) === null ? "on" : elem.value; + }; + } + } ); + + + + + // Return jQuery for attributes-only inclusion + + + var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/; + + jQuery.extend( jQuery.event, { + + trigger: function( event, data, elem, onlyHandlers ) { + + var i, cur, tmp, bubbleType, ontype, handle, special, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; + + cur = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "." ) > -1 ) { + + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split( "." ); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf( ":" ) < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join( "." ); + event.rnamespace = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === ( elem.ownerDocument || document ) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { + + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] && + dataPriv.get( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && acceptData( cur ) ) { + event.result = handle.apply( cur, data ); + if ( event.result === false ) { + event.preventDefault(); + } + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( ( !special._default || + special._default.apply( eventPath.pop(), data ) === false ) && + acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name name as the event. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + elem[ type ](); + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + // Piggyback on a donor event to simulate a different one + simulate: function( type, elem, event ) { + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true + + // Previously, `originalEvent: {}` was set here, so stopPropagation call + // would not be triggered on donor event, since in our own + // jQuery.event.stopPropagation function we had a check for existence of + // originalEvent.stopPropagation method, so, consequently it would be a noop. + // + // But now, this "simulate" function is used only for events + // for which stopPropagation() is noop, so there is no need for that anymore. + // + // For the 1.x branch though, guard for "click" and "submit" + // events is still used, but was moved to jQuery.event.stopPropagation function + // because `originalEvent` should point to the original event for the constancy + // with other events and for more focused logic + } + ); + + jQuery.event.trigger( e, null, elem ); + + if ( e.isDefaultPrevented() ) { + event.preventDefault(); + } + } + + } ); + + jQuery.fn.extend( { + + trigger: function( type, data ) { + return this.each( function() { + jQuery.event.trigger( type, data, this ); + } ); + }, + triggerHandler: function( type, data ) { + var elem = this[ 0 ]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } + } ); + + + jQuery.each( ( "blur focus focusin focusout load resize scroll unload click dblclick " + + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + + "change select submit keydown keypress keyup error contextmenu" ).split( " " ), + function( i, name ) { + + // Handle event binding + jQuery.fn[ name ] = function( data, fn ) { + return arguments.length > 0 ? + this.on( name, null, data, fn ) : + this.trigger( name ); + }; + } ); + + jQuery.fn.extend( { + hover: function( fnOver, fnOut ) { + return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); + } + } ); + + + + + support.focusin = "onfocusin" in window; + + + // Support: Firefox + // Firefox doesn't have focus(in | out) events + // Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 + // + // Support: Chrome, Safari + // focus(in | out) events fire after focus & blur events, + // which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order + // Related ticket - https://code.google.com/p/chromium/issues/detail?id=449857 + if ( !support.focusin ) { + jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler on the document while someone wants focusin/focusout + var handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + var doc = this.ownerDocument || this, + attaches = dataPriv.access( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this, + attaches = dataPriv.access( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + dataPriv.remove( doc, fix ); + + } else { + dataPriv.access( doc, fix, attaches ); + } + } + }; + } ); + } + var location = window.location; + + var nonce = jQuery.now(); + + var rquery = ( /\?/ ); + + + + // Support: Android 2.3 + // Workaround failure to string-cast null input + jQuery.parseJSON = function( data ) { + return JSON.parse( data + "" ); + }; + + + // Cross-browser xml parsing + jQuery.parseXML = function( data ) { + var xml; + if ( !data || typeof data !== "string" ) { + return null; + } + + // Support: IE9 + try { + xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); + } catch ( e ) { + xml = undefined; + } + + if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; + }; + + + var + rhash = /#.*$/, + rts = /([?&])_=[^&]*/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, + + // #7653, #8125, #8152: local protocol detection + rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + + /* Prefilters + * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) + * 2) These are called: + * - BEFORE asking for a transport + * - AFTER param serialization (s.data is a string if s.processData is true) + * 3) key is the dataType + * 4) the catchall symbol "*" can be used + * 5) execution will start with transport dataType and THEN continue down to "*" if needed + */ + prefilters = {}, + + /* Transports bindings + * 1) key is the dataType + * 2) the catchall symbol "*" can be used + * 3) selection will start with transport dataType and THEN go to "*" if needed + */ + transports = {}, + + // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression + allTypes = "*/".concat( "*" ), + + // Anchor tag for parsing the document origin + originAnchor = document.createElement( "a" ); + originAnchor.href = location.href; + + // Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport + function addToPrefiltersOrTransports( structure ) { + + // dataTypeExpression is optional and defaults to "*" + return function( dataTypeExpression, func ) { + + if ( typeof dataTypeExpression !== "string" ) { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + var dataType, + i = 0, + dataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || []; + + if ( jQuery.isFunction( func ) ) { + + // For each dataType in the dataTypeExpression + while ( ( dataType = dataTypes[ i++ ] ) ) { + + // Prepend if requested + if ( dataType[ 0 ] === "+" ) { + dataType = dataType.slice( 1 ) || "*"; + ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); + + // Otherwise append + } else { + ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); + } + } + } + }; + } + + // Base inspection function for prefilters and transports + function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { + + var inspected = {}, + seekingTransport = ( structure === transports ); + + function inspect( dataType ) { + var selected; + inspected[ dataType ] = true; + jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { + var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); + if ( typeof dataTypeOrTransport === "string" && + !seekingTransport && !inspected[ dataTypeOrTransport ] ) { + + options.dataTypes.unshift( dataTypeOrTransport ); + inspect( dataTypeOrTransport ); + return false; + } else if ( seekingTransport ) { + return !( selected = dataTypeOrTransport ); + } + } ); + return selected; + } + + return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); + } + + // A special extend for ajax options + // that takes "flat" options (not to be deep extended) + // Fixes #9887 + function ajaxExtend( target, src ) { + var key, deep, + flatOptions = jQuery.ajaxSettings.flatOptions || {}; + + for ( key in src ) { + if ( src[ key ] !== undefined ) { + ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; + } + } + if ( deep ) { + jQuery.extend( true, target, deep ); + } + + return target; + } + + /* Handles responses to an ajax request: + * - finds the right dataType (mediates between content-type and expected dataType) + * - returns the corresponding response + */ + function ajaxHandleResponses( s, jqXHR, responses ) { + + var ct, type, finalDataType, firstDataType, + contents = s.contents, + dataTypes = s.dataTypes; + + // Remove auto dataType and get content-type in the process + while ( dataTypes[ 0 ] === "*" ) { + dataTypes.shift(); + if ( ct === undefined ) { + ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); + } + } + + // Check if we're dealing with a known content-type + if ( ct ) { + for ( type in contents ) { + if ( contents[ type ] && contents[ type ].test( ct ) ) { + dataTypes.unshift( type ); + break; + } + } + } + + // Check to see if we have a response for the expected dataType + if ( dataTypes[ 0 ] in responses ) { + finalDataType = dataTypes[ 0 ]; + } else { + + // Try convertible dataTypes + for ( type in responses ) { + if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { + finalDataType = type; + break; + } + if ( !firstDataType ) { + firstDataType = type; + } + } + + // Or just use first one + finalDataType = finalDataType || firstDataType; + } + + // If we found a dataType + // We add the dataType to the list if needed + // and return the corresponding response + if ( finalDataType ) { + if ( finalDataType !== dataTypes[ 0 ] ) { + dataTypes.unshift( finalDataType ); + } + return responses[ finalDataType ]; + } + } + + /* Chain conversions given the request and the original response + * Also sets the responseXXX fields on the jqXHR instance + */ + function ajaxConvert( s, response, jqXHR, isSuccess ) { + var conv2, current, conv, tmp, prev, + converters = {}, + + // Work with a copy of dataTypes in case we need to modify it for conversion + dataTypes = s.dataTypes.slice(); + + // Create converters map with lowercased keys + if ( dataTypes[ 1 ] ) { + for ( conv in s.converters ) { + converters[ conv.toLowerCase() ] = s.converters[ conv ]; + } + } + + current = dataTypes.shift(); + + // Convert to each sequential dataType + while ( current ) { + + if ( s.responseFields[ current ] ) { + jqXHR[ s.responseFields[ current ] ] = response; + } + + // Apply the dataFilter if provided + if ( !prev && isSuccess && s.dataFilter ) { + response = s.dataFilter( response, s.dataType ); + } + + prev = current; + current = dataTypes.shift(); + + if ( current ) { + + // There's only work to do if current dataType is non-auto + if ( current === "*" ) { + + current = prev; + + // Convert response if prev dataType is non-auto and differs from current + } else if ( prev !== "*" && prev !== current ) { + + // Seek a direct converter + conv = converters[ prev + " " + current ] || converters[ "* " + current ]; + + // If none found, seek a pair + if ( !conv ) { + for ( conv2 in converters ) { + + // If conv2 outputs current + tmp = conv2.split( " " ); + if ( tmp[ 1 ] === current ) { + + // If prev can be converted to accepted input + conv = converters[ prev + " " + tmp[ 0 ] ] || + converters[ "* " + tmp[ 0 ] ]; + if ( conv ) { + + // Condense equivalence converters + if ( conv === true ) { + conv = converters[ conv2 ]; + + // Otherwise, insert the intermediate dataType + } else if ( converters[ conv2 ] !== true ) { + current = tmp[ 0 ]; + dataTypes.unshift( tmp[ 1 ] ); + } + break; + } + } + } + } + + // Apply converter (if not an equivalence) + if ( conv !== true ) { + + // Unless errors are allowed to bubble, catch and return them + if ( conv && s.throws ) { + response = conv( response ); + } else { + try { + response = conv( response ); + } catch ( e ) { + return { + state: "parsererror", + error: conv ? e : "No conversion from " + prev + " to " + current + }; + } + } + } + } + } + } + + return { state: "success", data: response }; + } + + jQuery.extend( { + + // Counter for holding the number of active queries + active: 0, + + // Last-Modified header cache for next request + lastModified: {}, + etag: {}, + + ajaxSettings: { + url: location.href, + type: "GET", + isLocal: rlocalProtocol.test( location.protocol ), + global: true, + processData: true, + async: true, + contentType: "application/x-www-form-urlencoded; charset=UTF-8", + /* + timeout: 0, + data: null, + dataType: null, + username: null, + password: null, + cache: null, + throws: false, + traditional: false, + headers: {}, + */ + + accepts: { + "*": allTypes, + text: "text/plain", + html: "text/html", + xml: "application/xml, text/xml", + json: "application/json, text/javascript" + }, + + contents: { + xml: /\bxml\b/, + html: /\bhtml/, + json: /\bjson\b/ + }, + + responseFields: { + xml: "responseXML", + text: "responseText", + json: "responseJSON" + }, + + // Data converters + // Keys separate source (or catchall "*") and destination types with a single space + converters: { + + // Convert anything to text + "* text": String, + + // Text to html (true = no transformation) + "text html": true, + + // Evaluate text as a json expression + "text json": jQuery.parseJSON, + + // Parse text as xml + "text xml": jQuery.parseXML + }, + + // For options that shouldn't be deep extended: + // you can add your own custom options here if + // and when you create one that shouldn't be + // deep extended (see ajaxExtend) + flatOptions: { + url: true, + context: true + } + }, + + // Creates a full fledged settings object into target + // with both ajaxSettings and settings fields. + // If target is omitted, writes into ajaxSettings. + ajaxSetup: function( target, settings ) { + return settings ? + + // Building a settings object + ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : + + // Extending ajaxSettings + ajaxExtend( jQuery.ajaxSettings, target ); + }, + + ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), + ajaxTransport: addToPrefiltersOrTransports( transports ), + + // Main method + ajax: function( url, options ) { + + // If url is an object, simulate pre-1.5 signature + if ( typeof url === "object" ) { + options = url; + url = undefined; + } + + // Force options to be an object + options = options || {}; + + var transport, + + // URL without anti-cache param + cacheURL, + + // Response headers + responseHeadersString, + responseHeaders, + + // timeout handle + timeoutTimer, + + // Url cleanup var + urlAnchor, + + // To know if global events are to be dispatched + fireGlobals, + + // Loop variable + i, + + // Create the final options object + s = jQuery.ajaxSetup( {}, options ), + + // Callbacks context + callbackContext = s.context || s, + + // Context for global events is callbackContext if it is a DOM node or jQuery collection + globalEventContext = s.context && + ( callbackContext.nodeType || callbackContext.jquery ) ? + jQuery( callbackContext ) : + jQuery.event, + + // Deferreds + deferred = jQuery.Deferred(), + completeDeferred = jQuery.Callbacks( "once memory" ), + + // Status-dependent callbacks + statusCode = s.statusCode || {}, + + // Headers (they are sent all at once) + requestHeaders = {}, + requestHeadersNames = {}, + + // The jqXHR state + state = 0, + + // Default abort message + strAbort = "canceled", + + // Fake xhr + jqXHR = { + readyState: 0, + + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( state === 2 ) { + if ( !responseHeaders ) { + responseHeaders = {}; + while ( ( match = rheaders.exec( responseHeadersString ) ) ) { + responseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ]; + } + } + match = responseHeaders[ key.toLowerCase() ]; + } + return match == null ? null : match; + }, + + // Raw string + getAllResponseHeaders: function() { + return state === 2 ? responseHeadersString : null; + }, + + // Caches the header + setRequestHeader: function( name, value ) { + var lname = name.toLowerCase(); + if ( !state ) { + name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( !state ) { + s.mimeType = type; + } + return this; + }, + + // Status-dependent callbacks + statusCode: function( map ) { + var code; + if ( map ) { + if ( state < 2 ) { + for ( code in map ) { + + // Lazy-add the new callback in a way that preserves old ones + statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; + } + } else { + + // Execute the appropriate callbacks + jqXHR.always( map[ jqXHR.status ] ); + } + } + return this; + }, + + // Cancel the request + abort: function( statusText ) { + var finalText = statusText || strAbort; + if ( transport ) { + transport.abort( finalText ); + } + done( 0, finalText ); + return this; + } + }; + + // Attach deferreds + deferred.promise( jqXHR ).complete = completeDeferred.add; + jqXHR.success = jqXHR.done; + jqXHR.error = jqXHR.fail; + + // Remove hash character (#7531: and string promotion) + // Add protocol if not provided (prefilters might expect it) + // Handle falsy url in the settings object (#10093: consistency with old signature) + // We also use the url parameter if available + s.url = ( ( url || s.url || location.href ) + "" ).replace( rhash, "" ) + .replace( rprotocol, location.protocol + "//" ); + + // Alias method option to type as per ticket #12004 + s.type = options.method || options.type || s.method || s.type; + + // Extract dataTypes list + s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().match( rnotwhite ) || [ "" ]; + + // A cross-domain request is in order when the origin doesn't match the current origin. + if ( s.crossDomain == null ) { + urlAnchor = document.createElement( "a" ); + + // Support: IE8-11+ + // IE throws exception if url is malformed, e.g. http://example.com:80x/ + try { + urlAnchor.href = s.url; + + // Support: IE8-11+ + // Anchor's host property isn't correctly set when s.url is relative + urlAnchor.href = urlAnchor.href; + s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== + urlAnchor.protocol + "//" + urlAnchor.host; + } catch ( e ) { + + // If there is an error parsing the URL, assume it is crossDomain, + // it can be rejected by the transport if it is invalid + s.crossDomain = true; + } + } + + // Convert data if not already a string + if ( s.data && s.processData && typeof s.data !== "string" ) { + s.data = jQuery.param( s.data, s.traditional ); + } + + // Apply prefilters + inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); + + // If request was aborted inside a prefilter, stop there + if ( state === 2 ) { + return jqXHR; + } + + // We can fire global events as of now if asked to + // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) + fireGlobals = jQuery.event && s.global; + + // Watch for a new set of requests + if ( fireGlobals && jQuery.active++ === 0 ) { + jQuery.event.trigger( "ajaxStart" ); + } + + // Uppercase the type + s.type = s.type.toUpperCase(); + + // Determine if request has content + s.hasContent = !rnoContent.test( s.type ); + + // Save the URL in case we're toying with the If-Modified-Since + // and/or If-None-Match header later on + cacheURL = s.url; + + // More options handling for requests with no content + if ( !s.hasContent ) { + + // If data is available, append data to url + if ( s.data ) { + cacheURL = ( s.url += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data ); + + // #9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Add anti-cache in url if needed + if ( s.cache === false ) { + s.url = rts.test( cacheURL ) ? + + // If there is already a '_' parameter, set its value + cacheURL.replace( rts, "$1_=" + nonce++ ) : + + // Otherwise add one to the end + cacheURL + ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + nonce++; + } + } + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + if ( jQuery.lastModified[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); + } + if ( jQuery.etag[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); + } + } + + // Set the correct header, if data is being sent + if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { + jqXHR.setRequestHeader( "Content-Type", s.contentType ); + } + + // Set the Accepts header for the server, depending on the dataType + jqXHR.setRequestHeader( + "Accept", + s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? + s.accepts[ s.dataTypes[ 0 ] ] + + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : + s.accepts[ "*" ] + ); + + // Check for headers option + for ( i in s.headers ) { + jqXHR.setRequestHeader( i, s.headers[ i ] ); + } + + // Allow custom headers/mimetypes and early abort + if ( s.beforeSend && + ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) { + + // Abort if not done already and return + return jqXHR.abort(); + } + + // Aborting is no longer a cancellation + strAbort = "abort"; + + // Install callbacks on deferreds + for ( i in { success: 1, error: 1, complete: 1 } ) { + jqXHR[ i ]( s[ i ] ); + } + + // Get transport + transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); + + // If no transport, we auto-abort + if ( !transport ) { + done( -1, "No Transport" ); + } else { + jqXHR.readyState = 1; + + // Send global event + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); + } + + // If request was aborted inside ajaxSend, stop there + if ( state === 2 ) { + return jqXHR; + } + + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = window.setTimeout( function() { + jqXHR.abort( "timeout" ); + }, s.timeout ); + } + + try { + state = 1; + transport.send( requestHeaders, done ); + } catch ( e ) { + + // Propagate exception as error if not done + if ( state < 2 ) { + done( -1, e ); + + // Simply rethrow otherwise + } else { + throw e; + } + } + } + + // Callback for when everything is done + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; + + // Called once + if ( state === 2 ) { + return; + } + + // State is "done" now + state = 2; + + // Clear timeout if it exists + if ( timeoutTimer ) { + window.clearTimeout( timeoutTimer ); + } + + // Dereference transport for early garbage collection + // (no matter how long the jqXHR object will be used) + transport = undefined; + + // Cache response headers + responseHeadersString = headers || ""; + + // Set readyState + jqXHR.readyState = status > 0 ? 4 : 0; + + // Determine if successful + isSuccess = status >= 200 && status < 300 || status === 304; + + // Get response data + if ( responses ) { + response = ajaxHandleResponses( s, jqXHR, responses ); + } + + // Convert no matter what (that way responseXXX fields are always set) + response = ajaxConvert( s, response, jqXHR, isSuccess ); + + // If successful, handle type chaining + if ( isSuccess ) { + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + modified = jqXHR.getResponseHeader( "Last-Modified" ); + if ( modified ) { + jQuery.lastModified[ cacheURL ] = modified; + } + modified = jqXHR.getResponseHeader( "etag" ); + if ( modified ) { + jQuery.etag[ cacheURL ] = modified; + } + } + + // if no content + if ( status === 204 || s.type === "HEAD" ) { + statusText = "nocontent"; + + // if not modified + } else if ( status === 304 ) { + statusText = "notmodified"; + + // If we have data, let's convert it + } else { + statusText = response.state; + success = response.data; + error = response.error; + isSuccess = !error; + } + } else { + + // Extract error from statusText and normalize for non-aborts + error = statusText; + if ( status || !statusText ) { + statusText = "error"; + if ( status < 0 ) { + status = 0; + } + } + } + + // Set data for the fake xhr object + jqXHR.status = status; + jqXHR.statusText = ( nativeStatusText || statusText ) + ""; + + // Success/Error + if ( isSuccess ) { + deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); + } else { + deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); + } + + // Status-dependent callbacks + jqXHR.statusCode( statusCode ); + statusCode = undefined; + + if ( fireGlobals ) { + globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", + [ jqXHR, s, isSuccess ? success : error ] ); + } + + // Complete + completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); + + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); + + // Handle the global AJAX counter + if ( !( --jQuery.active ) ) { + jQuery.event.trigger( "ajaxStop" ); + } + } + } + + return jqXHR; + }, + + getJSON: function( url, data, callback ) { + return jQuery.get( url, data, callback, "json" ); + }, + + getScript: function( url, callback ) { + return jQuery.get( url, undefined, callback, "script" ); + } + } ); + + jQuery.each( [ "get", "post" ], function( i, method ) { + jQuery[ method ] = function( url, data, callback, type ) { + + // Shift arguments if data argument was omitted + if ( jQuery.isFunction( data ) ) { + type = type || callback; + callback = data; + data = undefined; + } + + // The url can be an options object (which then must have .url) + return jQuery.ajax( jQuery.extend( { + url: url, + type: method, + dataType: type, + data: data, + success: callback + }, jQuery.isPlainObject( url ) && url ) ); + }; + } ); + + + jQuery._evalUrl = function( url ) { + return jQuery.ajax( { + url: url, + + // Make this explicit, since user can override this through ajaxSetup (#11264) + type: "GET", + dataType: "script", + async: false, + global: false, + "throws": true + } ); + }; + + + jQuery.fn.extend( { + wrapAll: function( html ) { + var wrap; + + if ( jQuery.isFunction( html ) ) { + return this.each( function( i ) { + jQuery( this ).wrapAll( html.call( this, i ) ); + } ); + } + + if ( this[ 0 ] ) { + + // The elements to wrap the target around + wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); + + if ( this[ 0 ].parentNode ) { + wrap.insertBefore( this[ 0 ] ); + } + + wrap.map( function() { + var elem = this; + + while ( elem.firstElementChild ) { + elem = elem.firstElementChild; + } + + return elem; + } ).append( this ); + } + + return this; + }, + + wrapInner: function( html ) { + if ( jQuery.isFunction( html ) ) { + return this.each( function( i ) { + jQuery( this ).wrapInner( html.call( this, i ) ); + } ); + } + + return this.each( function() { + var self = jQuery( this ), + contents = self.contents(); + + if ( contents.length ) { + contents.wrapAll( html ); + + } else { + self.append( html ); + } + } ); + }, + + wrap: function( html ) { + var isFunction = jQuery.isFunction( html ); + + return this.each( function( i ) { + jQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html ); + } ); + }, + + unwrap: function() { + return this.parent().each( function() { + if ( !jQuery.nodeName( this, "body" ) ) { + jQuery( this ).replaceWith( this.childNodes ); + } + } ).end(); + } + } ); + + + jQuery.expr.filters.hidden = function( elem ) { + return !jQuery.expr.filters.visible( elem ); + }; + jQuery.expr.filters.visible = function( elem ) { + + // Support: Opera <= 12.12 + // Opera reports offsetWidths and offsetHeights less than zero on some elements + // Use OR instead of AND as the element is not visible if either is true + // See tickets #10406 and #13132 + return elem.offsetWidth > 0 || elem.offsetHeight > 0 || elem.getClientRects().length > 0; + }; + + + + + var r20 = /%20/g, + rbracket = /\[\]$/, + rCRLF = /\r?\n/g, + rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, + rsubmittable = /^(?:input|select|textarea|keygen)/i; + + function buildParams( prefix, obj, traditional, add ) { + var name; + + if ( jQuery.isArray( obj ) ) { + + // Serialize array item. + jQuery.each( obj, function( i, v ) { + if ( traditional || rbracket.test( prefix ) ) { + + // Treat each array item as a scalar. + add( prefix, v ); + + } else { + + // Item is non-scalar (array or object), encode its numeric index. + buildParams( + prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", + v, + traditional, + add + ); + } + } ); + + } else if ( !traditional && jQuery.type( obj ) === "object" ) { + + // Serialize object item. + for ( name in obj ) { + buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); + } + + } else { + + // Serialize scalar item. + add( prefix, obj ); + } + } + + // Serialize an array of form elements or a set of + // key/values into a query string + jQuery.param = function( a, traditional ) { + var prefix, + s = [], + add = function( key, value ) { + + // If value is a function, invoke it and return its value + value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value ); + s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value ); + }; + + // Set traditional to true for jQuery <= 1.3.2 behavior. + if ( traditional === undefined ) { + traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional; + } + + // If an array was passed in, assume that it is an array of form elements. + if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { + + // Serialize the form elements + jQuery.each( a, function() { + add( this.name, this.value ); + } ); + + } else { + + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for ( prefix in a ) { + buildParams( prefix, a[ prefix ], traditional, add ); + } + } + + // Return the resulting serialization + return s.join( "&" ).replace( r20, "+" ); + }; + + jQuery.fn.extend( { + serialize: function() { + return jQuery.param( this.serializeArray() ); + }, + serializeArray: function() { + return this.map( function() { + + // Can add propHook for "elements" to filter or add form elements + var elements = jQuery.prop( this, "elements" ); + return elements ? jQuery.makeArray( elements ) : this; + } ) + .filter( function() { + var type = this.type; + + // Use .is( ":disabled" ) so that fieldset[disabled] works + return this.name && !jQuery( this ).is( ":disabled" ) && + rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && + ( this.checked || !rcheckableType.test( type ) ); + } ) + .map( function( i, elem ) { + var val = jQuery( this ).val(); + + return val == null ? + null : + jQuery.isArray( val ) ? + jQuery.map( val, function( val ) { + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ) : + { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ).get(); + } + } ); + + + jQuery.ajaxSettings.xhr = function() { + try { + return new window.XMLHttpRequest(); + } catch ( e ) {} + }; + + var xhrSuccessStatus = { + + // File protocol always yields status code 0, assume 200 + 0: 200, + + // Support: IE9 + // #1450: sometimes IE returns 1223 when it should be 204 + 1223: 204 + }, + xhrSupported = jQuery.ajaxSettings.xhr(); + + support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); + support.ajax = xhrSupported = !!xhrSupported; + + jQuery.ajaxTransport( function( options ) { + var callback, errorCallback; + + // Cross domain only allowed if supported through XMLHttpRequest + if ( support.cors || xhrSupported && !options.crossDomain ) { + return { + send: function( headers, complete ) { + var i, + xhr = options.xhr(); + + xhr.open( + options.type, + options.url, + options.async, + options.username, + options.password + ); + + // Apply custom fields if provided + if ( options.xhrFields ) { + for ( i in options.xhrFields ) { + xhr[ i ] = options.xhrFields[ i ]; + } + } + + // Override mime type if needed + if ( options.mimeType && xhr.overrideMimeType ) { + xhr.overrideMimeType( options.mimeType ); + } + + // X-Requested-With header + // For cross-domain requests, seeing as conditions for a preflight are + // akin to a jigsaw puzzle, we simply never set it to be sure. + // (it can always be set on a per-request basis or even using ajaxSetup) + // For same-domain requests, won't change header if already provided. + if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { + headers[ "X-Requested-With" ] = "XMLHttpRequest"; + } + + // Set headers + for ( i in headers ) { + xhr.setRequestHeader( i, headers[ i ] ); + } + + // Callback + callback = function( type ) { + return function() { + if ( callback ) { + callback = errorCallback = xhr.onload = + xhr.onerror = xhr.onabort = xhr.onreadystatechange = null; + + if ( type === "abort" ) { + xhr.abort(); + } else if ( type === "error" ) { + + // Support: IE9 + // On a manual native abort, IE9 throws + // errors on any property access that is not readyState + if ( typeof xhr.status !== "number" ) { + complete( 0, "error" ); + } else { + complete( + + // File: protocol always yields status 0; see #8605, #14207 + xhr.status, + xhr.statusText + ); + } + } else { + complete( + xhrSuccessStatus[ xhr.status ] || xhr.status, + xhr.statusText, + + // Support: IE9 only + // IE9 has no XHR2 but throws on binary (trac-11426) + // For XHR2 non-text, let the caller handle it (gh-2498) + ( xhr.responseType || "text" ) !== "text" || + typeof xhr.responseText !== "string" ? + { binary: xhr.response } : + { text: xhr.responseText }, + xhr.getAllResponseHeaders() + ); + } + } + }; + }; + + // Listen to events + xhr.onload = callback(); + errorCallback = xhr.onerror = callback( "error" ); + + // Support: IE9 + // Use onreadystatechange to replace onabort + // to handle uncaught aborts + if ( xhr.onabort !== undefined ) { + xhr.onabort = errorCallback; + } else { + xhr.onreadystatechange = function() { + + // Check readyState before timeout as it changes + if ( xhr.readyState === 4 ) { + + // Allow onerror to be called first, + // but that will not handle a native abort + // Also, save errorCallback to a variable + // as xhr.onerror cannot be accessed + window.setTimeout( function() { + if ( callback ) { + errorCallback(); + } + } ); + } + }; + } + + // Create the abort callback + callback = callback( "abort" ); + + try { + + // Do send the request (this may raise an exception) + xhr.send( options.hasContent && options.data || null ); + } catch ( e ) { + + // #14683: Only rethrow if this hasn't been notified as an error yet + if ( callback ) { + throw e; + } + } + }, + + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } + } ); + + + + + // Install script dataType + jQuery.ajaxSetup( { + accepts: { + script: "text/javascript, application/javascript, " + + "application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /\b(?:java|ecma)script\b/ + }, + converters: { + "text script": function( text ) { + jQuery.globalEval( text ); + return text; + } + } + } ); + + // Handle cache's special case and crossDomain + jQuery.ajaxPrefilter( "script", function( s ) { + if ( s.cache === undefined ) { + s.cache = false; + } + if ( s.crossDomain ) { + s.type = "GET"; + } + } ); + + // Bind script tag hack transport + jQuery.ajaxTransport( "script", function( s ) { + + // This transport only deals with cross domain requests + if ( s.crossDomain ) { + var script, callback; + return { + send: function( _, complete ) { + script = jQuery( "<script>" ).prop( { + charset: s.scriptCharset, + src: s.url + } ).on( + "load error", + callback = function( evt ) { + script.remove(); + callback = null; + if ( evt ) { + complete( evt.type === "error" ? 404 : 200, evt.type ); + } + } + ); + + // Use native DOM manipulation to avoid our domManip AJAX trickery + document.head.appendChild( script[ 0 ] ); + }, + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } + } ); + + + + + var oldCallbacks = [], + rjsonp = /(=)\?(?=&|$)|\?\?/; + + // Default jsonp settings + jQuery.ajaxSetup( { + jsonp: "callback", + jsonpCallback: function() { + var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) ); + this[ callback ] = true; + return callback; + } + } ); + + // Detect, normalize options and install callbacks for jsonp requests + jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) { + + var callbackName, overwritten, responseContainer, + jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ? + "url" : + typeof s.data === "string" && + ( s.contentType || "" ) + .indexOf( "application/x-www-form-urlencoded" ) === 0 && + rjsonp.test( s.data ) && "data" + ); + + // Handle iff the expected data type is "jsonp" or we have a parameter to set + if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) { + + // Get callback name, remembering preexisting value associated with it + callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ? + s.jsonpCallback() : + s.jsonpCallback; + + // Insert callback into url or form data + if ( jsonProp ) { + s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName ); + } else if ( s.jsonp !== false ) { + s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName; + } + + // Use data converter to retrieve json after script execution + s.converters[ "script json" ] = function() { + if ( !responseContainer ) { + jQuery.error( callbackName + " was not called" ); + } + return responseContainer[ 0 ]; + }; + + // Force json dataType + s.dataTypes[ 0 ] = "json"; + + // Install callback + overwritten = window[ callbackName ]; + window[ callbackName ] = function() { + responseContainer = arguments; + }; + + // Clean-up function (fires after converters) + jqXHR.always( function() { + + // If previous value didn't exist - remove it + if ( overwritten === undefined ) { + jQuery( window ).removeProp( callbackName ); + + // Otherwise restore preexisting value + } else { + window[ callbackName ] = overwritten; + } + + // Save back as free + if ( s[ callbackName ] ) { + + // Make sure that re-using the options doesn't screw things around + s.jsonpCallback = originalSettings.jsonpCallback; + + // Save the callback name for future use + oldCallbacks.push( callbackName ); + } + + // Call if it was a function and we have a response + if ( responseContainer && jQuery.isFunction( overwritten ) ) { + overwritten( responseContainer[ 0 ] ); + } + + responseContainer = overwritten = undefined; + } ); + + // Delegate to script + return "script"; + } + } ); + + + + + // Argument "data" should be string of html + // context (optional): If specified, the fragment will be created in this context, + // defaults to document + // keepScripts (optional): If true, will include scripts passed in the html string + jQuery.parseHTML = function( data, context, keepScripts ) { + if ( !data || typeof data !== "string" ) { + return null; + } + if ( typeof context === "boolean" ) { + keepScripts = context; + context = false; + } + context = context || document; + + var parsed = rsingleTag.exec( data ), + scripts = !keepScripts && []; + + // Single tag + if ( parsed ) { + return [ context.createElement( parsed[ 1 ] ) ]; + } + + parsed = buildFragment( [ data ], context, scripts ); + + if ( scripts && scripts.length ) { + jQuery( scripts ).remove(); + } + + return jQuery.merge( [], parsed.childNodes ); + }; + + + // Keep a copy of the old load method + var _load = jQuery.fn.load; + + /** + * Load a url into a page + */ + jQuery.fn.load = function( url, params, callback ) { + if ( typeof url !== "string" && _load ) { + return _load.apply( this, arguments ); + } + + var selector, type, response, + self = this, + off = url.indexOf( " " ); + + if ( off > -1 ) { + selector = jQuery.trim( url.slice( off ) ); + url = url.slice( 0, off ); + } + + // If it's a function + if ( jQuery.isFunction( params ) ) { + + // We assume that it's the callback + callback = params; + params = undefined; + + // Otherwise, build a param string + } else if ( params && typeof params === "object" ) { + type = "POST"; + } + + // If we have elements to modify, make the request + if ( self.length > 0 ) { + jQuery.ajax( { + url: url, + + // If "type" variable is undefined, then "GET" method will be used. + // Make value of this field explicit since + // user can override it through ajaxSetup method + type: type || "GET", + dataType: "html", + data: params + } ).done( function( responseText ) { + + // Save response for use in complete callback + response = arguments; + + self.html( selector ? + + // If a selector was specified, locate the right elements in a dummy div + // Exclude scripts to avoid IE 'Permission Denied' errors + jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) : + + // Otherwise use the full result + responseText ); + + // If the request succeeds, this function gets "data", "status", "jqXHR" + // but they are ignored because response was set above. + // If it fails, this function gets "jqXHR", "status", "error" + } ).always( callback && function( jqXHR, status ) { + self.each( function() { + callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] ); + } ); + } ); + } + + return this; + }; + + + + + // Attach a bunch of functions for handling common AJAX events + jQuery.each( [ + "ajaxStart", + "ajaxStop", + "ajaxComplete", + "ajaxError", + "ajaxSuccess", + "ajaxSend" + ], function( i, type ) { + jQuery.fn[ type ] = function( fn ) { + return this.on( type, fn ); + }; + } ); + + + + + jQuery.expr.filters.animated = function( elem ) { + return jQuery.grep( jQuery.timers, function( fn ) { + return elem === fn.elem; + } ).length; + }; + + + + + /** + * Gets a window from an element + */ + function getWindow( elem ) { + return jQuery.isWindow( elem ) ? elem : elem.nodeType === 9 && elem.defaultView; + } + + jQuery.offset = { + setOffset: function( elem, options, i ) { + var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition, + position = jQuery.css( elem, "position" ), + curElem = jQuery( elem ), + props = {}; + + // Set position first, in-case top/left are set even on static elem + if ( position === "static" ) { + elem.style.position = "relative"; + } + + curOffset = curElem.offset(); + curCSSTop = jQuery.css( elem, "top" ); + curCSSLeft = jQuery.css( elem, "left" ); + calculatePosition = ( position === "absolute" || position === "fixed" ) && + ( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1; + + // Need to be able to calculate position if either + // top or left is auto and position is either absolute or fixed + if ( calculatePosition ) { + curPosition = curElem.position(); + curTop = curPosition.top; + curLeft = curPosition.left; + + } else { + curTop = parseFloat( curCSSTop ) || 0; + curLeft = parseFloat( curCSSLeft ) || 0; + } + + if ( jQuery.isFunction( options ) ) { + + // Use jQuery.extend here to allow modification of coordinates argument (gh-1848) + options = options.call( elem, i, jQuery.extend( {}, curOffset ) ); + } + + if ( options.top != null ) { + props.top = ( options.top - curOffset.top ) + curTop; + } + if ( options.left != null ) { + props.left = ( options.left - curOffset.left ) + curLeft; + } + + if ( "using" in options ) { + options.using.call( elem, props ); + + } else { + curElem.css( props ); + } + } + }; + + jQuery.fn.extend( { + offset: function( options ) { + if ( arguments.length ) { + return options === undefined ? + this : + this.each( function( i ) { + jQuery.offset.setOffset( this, options, i ); + } ); + } + + var docElem, win, + elem = this[ 0 ], + box = { top: 0, left: 0 }, + doc = elem && elem.ownerDocument; + + if ( !doc ) { + return; + } + + docElem = doc.documentElement; + + // Make sure it's not a disconnected DOM node + if ( !jQuery.contains( docElem, elem ) ) { + return box; + } + + box = elem.getBoundingClientRect(); + win = getWindow( doc ); + return { + top: box.top + win.pageYOffset - docElem.clientTop, + left: box.left + win.pageXOffset - docElem.clientLeft + }; + }, + + position: function() { + if ( !this[ 0 ] ) { + return; + } + + var offsetParent, offset, + elem = this[ 0 ], + parentOffset = { top: 0, left: 0 }; + + // Fixed elements are offset from window (parentOffset = {top:0, left: 0}, + // because it is its only offset parent + if ( jQuery.css( elem, "position" ) === "fixed" ) { + + // Assume getBoundingClientRect is there when computed position is fixed + offset = elem.getBoundingClientRect(); + + } else { + + // Get *real* offsetParent + offsetParent = this.offsetParent(); + + // Get correct offsets + offset = this.offset(); + if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) { + parentOffset = offsetParent.offset(); + } + + // Add offsetParent borders + parentOffset.top += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true ); + parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true ); + } + + // Subtract parent offsets and element margins + return { + top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ), + left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true ) + }; + }, + + // This method will return documentElement in the following cases: + // 1) For the element inside the iframe without offsetParent, this method will return + // documentElement of the parent window + // 2) For the hidden or detached element + // 3) For body or html element, i.e. in case of the html node - it will return itself + // + // but those exceptions were never presented as a real life use-cases + // and might be considered as more preferable results. + // + // This logic, however, is not guaranteed and can change at any point in the future + offsetParent: function() { + return this.map( function() { + var offsetParent = this.offsetParent; + + while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) { + offsetParent = offsetParent.offsetParent; + } + + return offsetParent || documentElement; + } ); + } + } ); + + // Create scrollLeft and scrollTop methods + jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) { + var top = "pageYOffset" === prop; + + jQuery.fn[ method ] = function( val ) { + return access( this, function( elem, method, val ) { + var win = getWindow( elem ); + + if ( val === undefined ) { + return win ? win[ prop ] : elem[ method ]; + } + + if ( win ) { + win.scrollTo( + !top ? val : win.pageXOffset, + top ? val : win.pageYOffset + ); + + } else { + elem[ method ] = val; + } + }, method, val, arguments.length ); + }; + } ); + + // Support: Safari<7-8+, Chrome<37-44+ + // Add the top/left cssHooks using jQuery.fn.position + // Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084 + // Blink bug: https://code.google.com/p/chromium/issues/detail?id=229280 + // getComputedStyle returns percent when specified for top/left/bottom/right; + // rather than make the css module depend on the offset module, just check for it here + jQuery.each( [ "top", "left" ], function( i, prop ) { + jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition, + function( elem, computed ) { + if ( computed ) { + computed = curCSS( elem, prop ); + + // If curCSS returns percentage, fallback to offset + return rnumnonpx.test( computed ) ? + jQuery( elem ).position()[ prop ] + "px" : + computed; + } + } + ); + } ); + + + // Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods + jQuery.each( { Height: "height", Width: "width" }, function( name, type ) { + jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, + function( defaultExtra, funcName ) { + + // Margin is only for outerHeight, outerWidth + jQuery.fn[ funcName ] = function( margin, value ) { + var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ), + extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" ); + + return access( this, function( elem, type, value ) { + var doc; + + if ( jQuery.isWindow( elem ) ) { + + // As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there + // isn't a whole lot we can do. See pull request at this URL for discussion: + // https://github.com/jquery/jquery/pull/764 + return elem.document.documentElement[ "client" + name ]; + } + + // Get document width or height + if ( elem.nodeType === 9 ) { + doc = elem.documentElement; + + // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], + // whichever is greatest + return Math.max( + elem.body[ "scroll" + name ], doc[ "scroll" + name ], + elem.body[ "offset" + name ], doc[ "offset" + name ], + doc[ "client" + name ] + ); + } + + return value === undefined ? + + // Get width or height on the element, requesting but not forcing parseFloat + jQuery.css( elem, type, extra ) : + + // Set width or height on the element + jQuery.style( elem, type, value, extra ); + }, type, chainable ? margin : undefined, chainable, null ); + }; + } ); + } ); + + + jQuery.fn.extend( { + + bind: function( types, data, fn ) { + return this.on( types, null, data, fn ); + }, + unbind: function( types, fn ) { + return this.off( types, null, fn ); + }, + + delegate: function( selector, types, data, fn ) { + return this.on( types, selector, data, fn ); + }, + undelegate: function( selector, types, fn ) { + + // ( namespace ) or ( selector, types [, fn] ) + return arguments.length === 1 ? + this.off( selector, "**" ) : + this.off( types, selector || "**", fn ); + }, + size: function() { + return this.length; + } + } ); + + jQuery.fn.andSelf = jQuery.fn.addBack; + + + + + // Register as a named AMD module, since jQuery can be concatenated with other + // files that may use define, but not via a proper concatenation script that + // understands anonymous AMD modules. A named AMD is safest and most robust + // way to register. Lowercase jquery is used because AMD module names are + // derived from file names, and jQuery is normally delivered in a lowercase + // file name. Do this after creating the global so that if an AMD module wants + // to call noConflict to hide this version of jQuery, it will work. + + // Note that for maximum portability, libraries that are not jQuery should + // declare themselves as anonymous modules, and avoid setting a global if an + // AMD loader is present. jQuery is a special case. For more information, see + // https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon + + if ( true ) { + !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function() { + return jQuery; + }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); + } + + + + var + + // Map over jQuery in case of overwrite + _jQuery = window.jQuery, + + // Map over the $ in case of overwrite + _$ = window.$; + + jQuery.noConflict = function( deep ) { + if ( window.$ === jQuery ) { + window.$ = _$; + } + + if ( deep && window.jQuery === jQuery ) { + window.jQuery = _jQuery; + } + + return jQuery; + }; + + // Expose jQuery and $ identifiers, even in AMD + // (#7102#comment:10, https://github.com/jquery/jquery/pull/557) + // and CommonJS for browser emulators (#13566) + if ( !noGlobal ) { + window.jQuery = window.$ = jQuery; + } + + return jQuery; + })); + + +/***/ }, + +/***/ 4: +/***/ function(module, exports) { + + /** + * Created by gavorhes on 12/10/2015. + */ + "use strict"; + /** + * create a namespace on the gv object + * @param {string} namespace to create + * @returns {object} object representing the namespace + */ + function provide(namespace) { + "use strict"; + if (typeof window['gv'] == 'undefined') { + window['gv'] = {}; + } + var parts = namespace.split('.'); + var nameSpace = window['gv']; + for (var i = 0; i < parts.length; i++) { + var newObject = nameSpace[parts[i]]; + if (typeof newObject == 'undefined') { + nameSpace[parts[i]] = {}; + } + nameSpace = nameSpace[parts[i]]; + } + return nameSpace; + } + provide('util'); + window['gv'].util.provide = provide; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.default = provide; + + +/***/ }, + +/***/ 25: +/***/ function(module, exports, __webpack_require__) { + + "use strict"; + /** + * Created by gavorhes on 11/2/2015. + */ + var $ = __webpack_require__(3); + var provide_1 = __webpack_require__(4); + var range_change_1 = __webpack_require__(26); + var nm = provide_1.default('jQueryPlugin'); + /** + * @callback mediaCallback + * @param {number} tm + */ + function timeToLocalDateString(tm) { + "use strict"; + var d = new Date(tm); + var p1 = d.toLocaleTimeString().split(' '); + var p2 = p1[0].split(':'); + p2 = p2.slice(0, 2); + return d.toLocaleDateString() + '<br>' + p2.join(':') + ' ' + p1[1]; + } + var MediaControl = (function () { + function MediaControl(element, min, max, val, step, func, playInterval, showAsDate) { + var _this = this; + if (min === void 0) { min = 0; } + if (max === void 0) { max = 100; } + if (val === void 0) { val = 0; } + if (step === void 0) { step = 5; } + if (func === void 0) { func = function () { }; } + if (playInterval === void 0) { playInterval = 5; } + if (showAsDate === void 0) { showAsDate = false; } + if (typeof element == 'string') { + this._container = $('#' + element); + } + else if (typeof element['style'] !== 'undefined') { + this._container = $(element); + } + else { + this._container = element; + } + this._container.addClass('media-control-container'); + this._playInterval = playInterval; + this._interval = undefined; + this._func = func; + this._showAsDate = showAsDate; + this._currentValue = undefined; + this._min = undefined; + this._max = undefined; + this._step = undefined; + this._playing = false; + var htmlStr = '<span class="media-player-button media-back"></span>' + + '<span class="media-player-button media-play"></span>' + + '<span class="media-player-button media-pause media-disabled"></span>' + + '<span class="media-player-button media-stop media-disabled" ></span>' + + '<span class="media-player-button media-ahead"></span>' + + "<input type=\"range\">" + + "<div class=\"media-control-value-label-container\">" + + "<span class=\"media-control-value-label-min\"></span>" + + "<span class=\"media-control-value-label-val\"></span>" + + "<span class=\"media-control-value-label-max\"></span>" + + "</div>"; + this._container.append(htmlStr); + // let btnPause = this._container.find('.media-pause'); + var btnPlay = this._container.find('.media-play'); + this._$btnStop = this._container.find('.media-stop'); + var btnAhead = this._container.find('.media-ahead'); + var btnBack = this._container.find('.media-back'); + this._$slider = this._container.find('input[type=range]'); + this._$valLabelMin = this._container.find('.media-control-value-label-min'); + this._$valLabelVal = this._container.find('.media-control-value-label-val'); + this._$valLabelMax = this._container.find('.media-control-value-label-max'); + this.setMinMaxValueStep(min, max, val, step); + range_change_1.rangeChange(this._$slider, function (newVal) { _this.currentValue = newVal; }, 100); + var ___this = this; + btnPlay.click(function () { + var $this = $(this); + $this.addClass('media-disabled'); + ___this._$btnStop.removeClass('media-disabled'); + btnAhead.addClass('media-locked'); + btnBack.addClass('media-locked'); + ___this._$slider.prop('disabled', true); + ___this._playing = true; + ___this._interval = setInterval(function () { + ___this.currentValue += ___this._step; + }, ___this._playInterval); + }); + this._$btnStop.click(function () { + clearInterval(___this._interval); + var $this = $(this); + $this.addClass('media-disabled'); + btnPlay.removeClass('media-disabled'); + btnAhead.removeClass('media-locked'); + btnBack.removeClass('media-locked'); + ___this._$slider.prop('disabled', false); + ___this._playing = false; + }); + btnAhead.click(function () { + ___this.currentValue = ___this.currentValue + ___this._step; + }); + btnBack.click(function () { + ___this.currentValue = ___this.currentValue - ___this._step; + }); + } + MediaControl.prototype.stopPlaying = function () { + if (this._playing) { + this._$btnStop.trigger('click'); + } + }; + Object.defineProperty(MediaControl.prototype, "playing", { + get: function () { + return this._playing; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MediaControl.prototype, "min", { + get: function () { + return this._min; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MediaControl.prototype, "max", { + get: function () { + return this._max; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MediaControl.prototype, "step", { + get: function () { + return this._step; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MediaControl.prototype, "currentValue", { + get: function () { + return this._currentValue; + }, + set: function (newValue) { + if (newValue > this._max) { + newValue = this._min; + } + else if (newValue < this._min) { + newValue = this._max; + } + this._currentValue = newValue; + this._$slider.val(this._currentValue.toFixed(2)); + if (this._showAsDate) { + this._$valLabelVal.html(timeToLocalDateString(this.currentValue)); + } + else { + this._$valLabelVal.html(this.currentValue.toString()); + } + this._func(newValue); + }, + enumerable: true, + configurable: true + }); + /** + * set min and max value with step + * @param {number} newMin the new min + * @param {number} newMax the new mas + * @param {number} [newValue=newMin] the value to set + * @param {number} [newStep=(newMax-newMin)/20] step value + */ + MediaControl.prototype.setMinMaxValueStep = function (newMin, newMax, newValue, newStep) { + this._min = newMin; + this._max = newMax; + newValue = typeof newValue == 'number' ? newValue : newMin; + newStep = typeof newStep == 'number' ? newStep : (newMax - newMin) / 20; + this._currentValue = newValue; + this._step = newStep; + this._$slider.prop('min', this.min.toString()); + this._$slider.prop('max', this.max.toString()); + this._$slider.prop('step', this.step.toString()); + this._$slider.val(this.currentValue.toString()); + if (this._showAsDate) { + this._$valLabelMin.html(timeToLocalDateString(this._min)); + this._$valLabelVal.html(timeToLocalDateString(this.currentValue)); + this._$valLabelMax.html(timeToLocalDateString(this._max)); + } + else { + this._$valLabelMin.html(this._min.toString()); + this._$valLabelVal.html(this.currentValue.toString()); + this._$valLabelMax.html(this._max.toString()); + } + }; + Object.defineProperty(MediaControl.prototype, "changeFunction", { + /** + * + * @param {mediaCallback} newFunc the callback on change + */ + set: function (newFunc) { + this._func = newFunc; + }, + enumerable: true, + configurable: true + }); + return MediaControl; + }()); + exports.MediaControl = MediaControl; + nm.MediaControl = MediaControl; + + +/***/ }, + +/***/ 26: +/***/ function(module, exports, __webpack_require__) { + + "use strict"; + var mouseIn = false; + var mouseDown = false; + var timeout = null; + var dragged = false; + var lastVal; + var $ = __webpack_require__(3); + /** + * Created by gavorhes on 11/2/2015. + */ + function triggerCallback(callback, evt) { + "use strict"; + var val = parseFloat(this.value); + var min = parseFloat(this.min); + var max = parseFloat(this.max); + var step = parseFloat(this.step); + if (max - val < step) { + val = max; + } + var percent = (val - min) / (max - min); + if (typeof lastVal == 'number' && val == lastVal) { + return; + } + lastVal = val; + callback(val, percent, evt); + } + /** + * Add a variety of listeners for range inputs applied to a common callback + * @param $slider - jquery reference to the slider + * @param {rangeChangeCallback} callback - the callback + * @param {number} [changeTimeout=75] before the callback is called + * @this {jQuery} + * @returns {jQuery} the jQuery object + */ + function rangeChange($slider, callback, changeTimeout) { + changeTimeout = typeof changeTimeout == 'number' ? changeTimeout : 75; + $slider.mouseenter(function () { + mouseIn = true; + }); + $slider.mouseleave(function () { + mouseIn = false; + mouseDown = false; + }); + $slider.mousedown(function () { + mouseDown = true; + }); + $slider.mouseup(function () { + mouseDown = false; + }); + $slider.mousemove( + /** + * + * @param {object} evt - event properties + * @this {HTMLElement} + */ + function (evt) { + if (!(mouseIn && mouseDown)) { + return; + } + dragged = true; + if (lastVal == this['value']) { + return; + } + lastVal = this['value']; + if (timeout != null) { + clearTimeout(timeout); + } + var _this = this; + timeout = setTimeout(function () { + triggerCallback.call(_this, callback, evt); + timeout = null; + }, changeTimeout); + }); + $slider.keyup( + /** + * + * @param {object} evt - event properties + */ + function (evt) { + if (evt.keyCode == 37 || evt.keyCode == 39) { + triggerCallback.call(this, callback, evt); + } + }); + $slider.change(function (evt) { + if (dragged) { + dragged = false; + return; + } + triggerCallback.call(this, callback, evt); + }); + return this; + } + exports.rangeChange = rangeChange; + + +/***/ } + +/******/ }); +//# sourceMappingURL=my_little_test.js.map \ No newline at end of file diff --git a/test-html/js/my_little_test.js.map b/test-html/js/my_little_test.js.map new file mode 100644 index 0000000000000000000000000000000000000000..e19d2af46af42dc1768175807fb8d224d49e0a24 --- /dev/null +++ b/test-html/js/my_little_test.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///webpack/bootstrap ef760a4c28bc3d5b9fb4?77b8**","webpack:///./src-ts/_test/my_little_test.ts","webpack:///./~/jquery/dist/jquery.js?89fd*","webpack:///./src-ts/util/provide.ts?c446*","webpack:///./src-ts/domUtil/animate-buttons.ts","webpack:///./src-ts/domUtil/range-change.ts"],"names":[],"mappings":";AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,uBAAe;AACf;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;;;;;;;ACrCA,6CAA2B,EAK3B,CAAC,CALsD;AACvD,GAAE;AACF,GAAE;AAGF,QAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;AAC7B,QAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;AAC7B,QAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;AAE7B,GAAE;AACF,oCAAmC;AACnC,GAAE;AACF,qBAAoB;AAGpB,QAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;AAI1B,aAAa,GAAe;KAAf,mBAAe,GAAf,OAAe;KACxB,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AAC5B,EAAC;AAED,GAAE,CAAC,CAAC,CAAC,CAAC;AAEN,KAAI,OAAO,GAAG,IAAI,8BAAY,CAAC,KAAK,CAAC,CAAC;AAEtC,GAAE;AACF,GAAE;AACF,qBAAoB;AACpB,GAAE;AACF,GAAE;AACF,2CAA0C;AAC1C,2CAA0C;AAC1C,2CAA0C;AAC1C,2CAA0C;AAC1C,2CAA0C;AAC1C,wBAAuB;AACvB,GAAE;;;;;;;;ACvCF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;;;AAIA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gCAA+B;AAC/B;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,SAAQ,YAAY;;AAEpB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,OAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF,qBAAoB;;AAEpB;AACA;AACA,GAAE;;AAEF;;AAEA;AACA;AACA,GAAE;;AAEF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kDAAiD;AACjD;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF,iCAAgC;AAChC;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA,WAAU,YAAY;AACtB;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA,UAAS,SAAS;AAClB;AACA;;AAEA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAS,YAAY;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAU,YAAY;AACtB;;AAEA;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,GAAE;;AAEF;;AAEA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAC;;AAED;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS,SAAS;AAClB;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,2BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA,iBAAgB,IAAI;;AAEpB;AACA;;AAEA;AACA;;AAEA;AACA,yCAAwC,IAAI;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD,UAAS;;AAET;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA,OAAM;;AAEN;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,MAAK;AACL;AACA;;AAEA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA,OAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAM;AACN,OAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,cAAa,yBAAyB;AACtC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;;AAEA;AACA;AACA,GAAE;AACF;AACA,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,QAAQ;AACnB,YAAW,QAAQ;AACnB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;AACF;;AAEA;AACA;AACA,YAAW,gBAAgB;AAC3B,cAAa,uBAAuB;AACpC;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,YAAW,eAAe;AAC1B,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,eAAe;AAC1B,cAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,YAAW,UAAU;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,YAAW,cAAc;AACzB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;AACA,IAAG;AACH;AACA,iCAAgC,MAAM;AACtC;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;;AAEA,gBAAe;;AAEf,UAAS;;AAET;AACA,SAAQ,iCAAiC;AACzC,SAAQ,oBAAoB;AAC5B,SAAQ,sCAAsC;AAC9C,SAAQ;AACR,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;;AAEA;AACA;AACA;AACA,iBAAgB,aAAa,EAAE;AAC/B;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,6DAA4D;;AAE5D;AACA;AACA;AACA,0CAAyC;;AAEzC;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,QAAO;AACP;AACA;AACA;AACA;AACA,8DAA6D;;AAE7D;AACA;AACA;AACA,2CAA0C;;AAE1C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,iEAAgE;;AAEhE;AACA;AACA;AACA,8CAA6C;;AAE7C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA,kEAAiE,UAAU;AAC3E,uCAAsC,2BAA2B;AACjE;AACA,iCAAgC,MAAM;AACtC;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA,WAAU,YAAY;AACtB;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,WAAU,YAAY;AACtB;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,WAAU,UAAU;AACpB;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,WAAU,cAAc;AACxB;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;;AAEA;AACA,aAAY,uEAAuE;AACnF;AACA;AACA,aAAY,4BAA4B;AACxC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAQ,SAAS;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA,4DAA2D;;AAE3D;AACA;AACA,qFAAoF;;AAEpF;AACA;;AAEA;AACA;AACA,QAAO;AACP;AACA;;AAEA,oCAAmC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA,SAAQ,SAAS;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAAQ,SAAS;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA,GAAE;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH,SAAQ,SAAS;AACjB;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAuC,iDAAiD;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kDAAiD;AACjD,WAAU,wCAAwC;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,gBAAgB;AAC3B;AACA,YAAW,QAAQ;AACnB,YAAW,MAAM;AACjB,YAAW,MAAM;AACjB;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;AACA,GAAE;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;AACA,GAAE;AACF;;AAEA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;;AAEA;;AAEA,EAAC;;;;AAID;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA,SAAQ,GAAG;AACX;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;;AAEA;;;;AAIA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAE;AACF;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA,KAAI;AACJ;;AAEA,eAAc,SAAS;AACvB;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;AAGD;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,KAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,SAAQ;AACR;AACA;AACA;AACA;;AAEA;;AAEA;AACA,MAAK;AACL;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;;AAEA;AACA;AACA,KAAI;AACJ;AACA;;AAEA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAU,OAAO;AACjB;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,UAAS,OAAO;AAChB,0BAAyB,wBAAwB;;AAEjD;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA,2CAA0C;AAC1C,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA;AACA,EAAC;AACD;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAC;AACD;;;;AAIA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAmB;;AAEnB;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAU,cAAc;AACxB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,MAAK;AACL;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAQ;;AAER;AACA;AACA;AACA,QAAO;AACP,OAAM;;AAEN;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAQ;AACR,QAAO;AACP;AACA,OAAM;AACN,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,+CAA8C;AAC9C,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAM;AACN;AACA;AACA;AACA,KAAI;;AAEJ;;AAEA,6CAA4C;AAC5C;AACA;AACA;AACA;AACA,WAAU,YAAY;AACtB;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAC;;;AAGD;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;AACF;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,WAAU,SAAS;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;AAKA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA,GAAE;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,OAAM;AACN;AACA;AACA;;AAEA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;;AAEA,wBAAuB,aAAa;AACpC,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,qBAAoB,SAAS;AAC7B;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA,IAAG;AACH;AACA,EAAC;;;AAGD;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ,IAAG;AACH;AACA,EAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ,GAAE;AACF;AACA;AACA;AACA,IAAG;AACH,GAAE;AACF;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;;AAEA;;;AAGA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA,gBAAe,oBAAoB,EAAE;AACrC,gBAAe,qCAAqC,EAAE;AACtD;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;;;AAIA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA,SAAQ,OAAO;AACf;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,uBAAsB;;AAEtB;AACA;AACA;AACA;AACA;AACA;;AAEA,SAAQ,OAAO;AACf;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;;AAEA;AACA,KAAI;AACJ;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAC;;;AAGD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAE,gBAAgB;AAClB;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAE;AACF;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;;AAEA;AACA;AACA;AACA;AACA;;AAEA,YAAW;;AAEX;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;AACA;;AAEA;AACA;AACA;;AAEA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,4CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;;AAEF;;AAEA;AACA;;AAEA;AACA;AACA;AACA,qDAAoD;AACpD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,0BAAyB;AACzB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,gEAA+D;AAC/D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,WAAU,cAAc;;AAExB;AACA;AACA;AACA;AACA,kBAAiB,mBAAmB;AACpC;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA0B,+BAA+B;AACzD;AACA;AACA;AACA;;AAEA;AACA;AACA,wBAAuB,wDAAwD;AAC/E;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA,cAAa;;AAEb;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,uCAAsC,cAAc;AACpD;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,sCAAqC;AACrC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,uCAAsC;AACtC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,sCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA,EAAC;;;AAGD;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,4CAA2C,OAAO;AAClD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,+BAA8B;;AAE9B;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAE;AACF;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAU,OAAO;AACjB;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,iBAAgB,gBAAgB;AAChC;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,SAAQ,+BAA+B;AACvC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,wCAAuC,OAAO;AAC9C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,yCAAwC,OAAO;AAC/C;AACA;AACA,KAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA,UAAS,qCAAqC;AAC9C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,SAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;;AAEA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;;AAEA,UAAS,8BAA8B;AACvC;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA,8BAA6B;AAC7B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,aAAY,OAAO;AACnB;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;;AAEA,UAAS,WAAW;AACpB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAC;;;AAGD;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,YAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;;;;AAIA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,sCAAqC,UAAU,SAAS,MAAM,aAAa;AAC3E,cAAa,eAAe;AAC5B;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,mCAAkC,2BAA2B,sBAAsB;AACnF,uBAAsB,cAAc;AACpC,iBAAgB,WAAW,YAAY;AACvC,YAAW;AACX;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAA4B,SAAS,QAAQ,QAAQ;AACrD;;AAEA;AACA;AACA,qCAAoC,uBAAuB;AAC3D,oBAAmB,SAAS,SAAS;AACrC;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,GAAE;AACF,EAAC;;;AAGD;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,mBAAkB;AAClB;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;;AAEA,aAAY,+DAA+D;AAC3E;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA,SAAQ,OAAO;;AAEf;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,SAAQ,gBAAgB;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAiB,gBAAgB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,IAAG;;AAEH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA,mBAAkB,gBAAgB;AAClC;AACA,OAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,wBAAuB,4BAA4B;AACnD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA,kBAAiB;;AAEjB;AACA;;AAEA,WAAU,OAAO;AACjB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA,aAAY;AACZ;;AAEA;AACA;AACA;;AAEA,YAAW,SAAS;AACpB;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA,IAAG;AACH;AACA,EAAC;;;AAGD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;;AAEA;;AAEA;AACA;;;;;AAKA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW;;AAEX;AACA;AACA;AACA,SAAQ,QAAQ;AAChB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAQ,gBAAgB;AACxB;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ,IAAG;AACH;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,kDAAiD;AACjD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,KAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,WAAU,iBAAiB;AAC3B;AACA;;AAEA;;AAEA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,4BAA2B;AAC3B;AACA,sBAAqB;AACrB;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,iBAAiB;AAC5B;AACA;;AAEA,8CAA6C;AAC7C;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;;AAEA,SAAQ,iBAAiB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA,UAAS,iBAAiB;AAC1B;AACA;AACA;AACA;AACA,GAAE;;AAEF;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,EAAC;;AAED;AACA,kEAAiE;AACjE;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,qBAAoB,cAAc;AAClC,GAAE;AACF;AACA;AACA;AACA;;AAEA;AACA,kDAAiD;;AAEjD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA;;AAEA,gCAA+B,SAAS;AACxC;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,gCAA+B,SAAS;AACxC;AACA;AACA;AACA;AACA;;AAEA;AACA,oBAAmB,gBAAgB;AACnC;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA,WAAU,kBAAkB;AAC5B,YAAW,kBAAkB;AAC7B,eAAc;AACd,EAAC;AACD;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;;AAEA,SAAQ,mBAAmB;AAC3B;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;;;AAGA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;AAGD;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA,IAAG;AACH;AACA,EAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;AAKD;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA,IAAG;AACH;AACA,EAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;AAKD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,OAAM;AACN;AACA;AACA;;AAEA;AACA,KAAI;AACJ;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAC;;;;;AAKD;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,KAAI;AACJ;AACA;;AAEA,kCAAiC;AACjC;AACA;;AAEA,KAAI;AACJ;;AAEA,KAAI;AACJ;AACA;AACA,MAAK;AACL;;AAEA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA,EAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,SAAS;AACpB;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;AAKD;;;AAGA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA,uCAAsC;AACtC;AACA;AACA;;AAEA;;AAEA,0BAAyB;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,+CAA8C;AAC9C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,4CAA2C;AAC3C;;AAEA;AACA;AACA;AACA;AACA,WAAU,KAAK;AACf;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kDAAiD;AACjD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,sCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA,EAAC;;AAED;;AAEA;AACA;AACA;AACA,IAAG;AACH,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;AAGD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA,EAAC;;;;;AAKD;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,qCAAqC;;AAEpD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;;AAEA,MAAK;AACL;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;;AAEA;;;;AAIA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;;AAEhB;AACA;AACA;AACA;AACA;AACA,iBAAgB;;AAEhB,iDAAgD;AAChD;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,oBAAmB;AACnB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,yDAAwD;AACxD;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAiB;;AAEjB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA,KAAI;;AAEJ;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,OAAM;AACN;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,UAAS;AACT;;AAEA;;AAEA;AACA;;AAEA;AACA,kBAAiB;AACjB,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAkD;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,4BAA2B;;AAE3B;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,mCAAkC;;AAElC;AACA,uBAAsB;AACtB,4BAA2B;;AAE3B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAO;;AAEP;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,uDAAsD;AACtD;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,eAAc,oCAAoC;AAClD;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;;AAEA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,MAAK;AACL;;AAEA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA,EAAC;;AAED;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA,EAAC;;;AAGD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,KAAI;AACJ;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;;AAEA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA,EAAC;;;AAGD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH,GAAE;;AAEF;AACA;AACA;AACA;;AAEA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAc;AACd,OAAM;AACN,OAAM;AACN,IAAG;AACH;AACA,EAAC;;;AAGD;AACA;AACA;AACA,GAAE;AACF;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAE;AACF;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAQ;;AAER;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;;AAEA,oDAAmD;AACnD;AACA;AACA;AACA;AACA,SAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,uBAAuB;AAClC,YAAW,yBAAyB;AACpC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;AAKD;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;AAKD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA,EAAC;;;;;AAKD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,KAAI;AACJ,IAAG;AACH;;AAEA;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;AAKD;AACA;AACA;AACA,GAAE;AACF;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,IAAG;AACH;AACA;AACA;;AAEA;;AAEA;AACA,sDAAqD;AACrD;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA,WAAU,kBAAkB;AAC5B;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAmB;;AAEnB,6DAA4D,eAAe;AAC3E;AACA;;AAEA;AACA;;AAEA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA,EAAC;;AAED;AACA,eAAc,sDAAsD;AACpE;;AAEA;AACA;AACA;;AAE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","file":"my_little_test.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap ef760a4c28bc3d5b9fb4\n **/","\r\nimport {MediaControl} from '../domUtil/animate-buttons'\r\n//\r\n//\r\n\r\n\r\nconsole.log('eat this fish');\r\nconsole.log('eat this fish');\r\nconsole.log('eat this bird');\r\n\r\n//\r\n// let g = new ol3.source.Vector();\r\n//\r\n// console.log(olx);\r\n\r\n\r\nconsole.log('i am here5');\r\n\r\n\r\n\r\nfunction me (eat: number = 1){\r\n console.log(eat, 'one');\r\n}\r\n\r\nme(1);\r\n\r\nvar control = new MediaControl('map');\r\n\r\n//\r\n//\r\n// console.log(ol3);\r\n//\r\n//\r\n// console.log(definedAndNotNull(\"fish\"));\r\n// console.log(definedAndNotNull(\"fish\"));\r\n// console.log(definedAndNotNull(\"fish\"));\r\n// console.log(definedAndNotNull(\"fish\"));\r\n// console.log(definedAndNotNull(\"fish\"));\r\n// console.log('here');\r\n//\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/_test/my_little_test.ts\n **/","/*!\n * jQuery JavaScript Library v2.2.3\n * http://jquery.com/\n *\n * Includes Sizzle.js\n * http://sizzlejs.com/\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2016-04-05T19:26Z\n */\n\n(function( global, factory ) {\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket #14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n}(typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Support: Firefox 18+\n// Can't be in strict mode, several libs including ASP.NET trace\n// the stack via arguments.caller.callee and Firefox dies if\n// you try to trace through \"use strict\" call chains. (#13335)\n//\"use strict\";\nvar arr = [];\n\nvar document = window.document;\n\nvar slice = arr.slice;\n\nvar concat = arr.concat;\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar support = {};\n\n\n\nvar\n\tversion = \"2.2.3\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t},\n\n\t// Support: Android<4.1\n\t// Make sure we trim BOM and NBSP\n\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,\n\n\t// Matches dashed string for camelizing\n\trmsPrefix = /^-ms-/,\n\trdashAlpha = /-([\\da-z])/gi,\n\n\t// Used by jQuery.camelCase as callback to replace()\n\tfcamelCase = function( all, letter ) {\n\t\treturn letter.toUpperCase();\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// Start with an empty selector\n\tselector: \"\",\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\t\treturn num != null ?\n\n\t\t\t// Return just the one element from the set\n\t\t\t( num < 0 ? this[ num + this.length ] : this[ num ] ) :\n\n\t\t\t// Return all the elements in a clean array\n\t\t\tslice.call( this );\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\t\tret.context = this.context;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !jQuery.isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tsrc = target[ name ];\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = jQuery.isArray( copy ) ) ) ) {\n\n\t\t\t\t\tif ( copyIsArray ) {\n\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\tclone = src && jQuery.isArray( src ) ? src : [];\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src && jQuery.isPlainObject( src ) ? src : {};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisFunction: function( obj ) {\n\t\treturn jQuery.type( obj ) === \"function\";\n\t},\n\n\tisArray: Array.isArray,\n\n\tisWindow: function( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t},\n\n\tisNumeric: function( obj ) {\n\n\t\t// parseFloat NaNs numeric-cast false positives (null|true|false|\"\")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t// subtraction forces infinities to NaN\n\t\t// adding 1 corrects loss of precision from parseFloat (#15100)\n\t\tvar realStringObj = obj && obj.toString();\n\t\treturn !jQuery.isArray( obj ) && ( realStringObj - parseFloat( realStringObj ) + 1 ) >= 0;\n\t},\n\n\tisPlainObject: function( obj ) {\n\t\tvar key;\n\n\t\t// Not plain objects:\n\t\t// - Any object or value whose internal [[Class]] property is not \"[object Object]\"\n\t\t// - DOM nodes\n\t\t// - window\n\t\tif ( jQuery.type( obj ) !== \"object\" || obj.nodeType || jQuery.isWindow( obj ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Not own constructor property must be Object\n\t\tif ( obj.constructor &&\n\t\t\t\t!hasOwn.call( obj, \"constructor\" ) &&\n\t\t\t\t!hasOwn.call( obj.constructor.prototype || {}, \"isPrototypeOf\" ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Own properties are enumerated firstly, so to speed up,\n\t\t// if last one is own, then all properties are own\n\t\tfor ( key in obj ) {}\n\n\t\treturn key === undefined || hasOwn.call( obj, key );\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\ttype: function( obj ) {\n\t\tif ( obj == null ) {\n\t\t\treturn obj + \"\";\n\t\t}\n\n\t\t// Support: Android<4.0, iOS<6 (functionish RegExp)\n\t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\t\ttypeof obj;\n\t},\n\n\t// Evaluates a script in a global context\n\tglobalEval: function( code ) {\n\t\tvar script,\n\t\t\tindirect = eval;\n\n\t\tcode = jQuery.trim( code );\n\n\t\tif ( code ) {\n\n\t\t\t// If the code includes a valid, prologue position\n\t\t\t// strict mode pragma, execute code by injecting a\n\t\t\t// script tag into the document.\n\t\t\tif ( code.indexOf( \"use strict\" ) === 1 ) {\n\t\t\t\tscript = document.createElement( \"script\" );\n\t\t\t\tscript.text = code;\n\t\t\t\tdocument.head.appendChild( script ).parentNode.removeChild( script );\n\t\t\t} else {\n\n\t\t\t\t// Otherwise, avoid the DOM node creation, insertion\n\t\t\t\t// and removal by using an indirect global eval\n\n\t\t\t\tindirect( code );\n\t\t\t}\n\t\t}\n\t},\n\n\t// Convert dashed to camelCase; used by the css and data modules\n\t// Support: IE9-11+\n\t// Microsoft forgot to hump their vendor prefix (#9572)\n\tcamelCase: function( string ) {\n\t\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n\t},\n\n\tnodeName: function( elem, name ) {\n\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// Support: Android<4.1\n\ttrim: function( text ) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t( text + \"\" ).replace( rtrim, \"\" );\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn concat.apply( [], ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// Bind a function to a context, optionally partially applying any\n\t// arguments.\n\tproxy: function( fn, context ) {\n\t\tvar tmp, args, proxy;\n\n\t\tif ( typeof context === \"string\" ) {\n\t\t\ttmp = fn[ context ];\n\t\t\tcontext = fn;\n\t\t\tfn = tmp;\n\t\t}\n\n\t\t// Quick check to determine if target is callable, in the spec\n\t\t// this throws a TypeError, but we will just return undefined.\n\t\tif ( !jQuery.isFunction( fn ) ) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Simulated bind\n\t\targs = slice.call( arguments, 2 );\n\t\tproxy = function() {\n\t\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t\t};\n\n\t\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\t\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\t\treturn proxy;\n\t},\n\n\tnow: Date.now,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\n// JSHint would error on this code due to the Symbol not being defined in ES5.\n// Defining this global in .jshintrc would create a danger of using the global\n// unguarded in another place, it seems safer to just disable JSHint for these\n// three lines.\n/* jshint ignore: start */\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n/* jshint ignore: end */\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\nfunction( i, name ) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: iOS 8.2 (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = jQuery.type( obj );\n\n\tif ( type === \"function\" || jQuery.isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v2.2.1\n * http://sizzlejs.com/\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2015-10-17\n */\n(function( window ) {\n\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// General-purpose constants\n\tMAX_NEGATIVE = 1 << 31,\n\n\t// Instance methods\n\thasOwn = ({}).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpush_native = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\t// Use a stripped-down indexOf as it's faster than native\n\t// http://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[i] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\n\t// http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n\tidentifier = \"(?:\\\\\\\\.|[\\\\w-]|[^\\\\x00-\\\\xa0])+\",\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace +\n\t\t\"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\" ),\n\n\trattributeQuotes = new RegExp( \"=\" + whitespace + \"*([^\\\\]'\\\"]*?)\" + whitespace + \"*\\\\]\", \"g\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace +\n\t\t\t\"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace +\n\t\t\t\"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" +\n\t\t\twhitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\trescape = /'|\\\\/g,\n\n\t// CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\([\\\\da-f]{1,6}\" + whitespace + \"?|(\" + whitespace + \")|.)\", \"ig\" ),\n\tfunescape = function( _, escaped, escapedWhitespace ) {\n\t\tvar high = \"0x\" + escaped - 0x10000;\n\t\t// NaN means non-codepoint\n\t\t// Support: Firefox<24\n\t\t// Workaround erroneous numeric interpretation of +\"0x\"\n\t\treturn high !== high || escapedWhitespace ?\n\t\t\tescaped :\n\t\t\thigh < 0 ?\n\t\t\t\t// BMP codepoint\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\t// Supplemental Plane codepoint (surrogate pair)\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t};\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t(arr = slice.call( preferredDoc.childNodes )),\n\t\tpreferredDoc.childNodes\n\t);\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpush_native.apply( target, slice.call(els) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( (target[j++] = els[i++]) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar m, i, elem, nid, nidselect, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\n\t\tif ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {\n\t\t\tsetDocument( context );\n\t\t}\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( (m = match[1]) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( (elem = context.getElementById( m )) ) {\n\n\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && (elem = newContext.getElementById( m )) &&\n\t\t\t\t\t\t\tcontains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[2] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( (m = match[3]) && support.getElementsByClassName &&\n\t\t\t\t\tcontext.getElementsByClassName ) {\n\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( support.qsa &&\n\t\t\t\t!compilerCache[ selector + \" \" ] &&\n\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test( selector )) ) {\n\n\t\t\t\tif ( nodeType !== 1 ) {\n\t\t\t\t\tnewContext = context;\n\t\t\t\t\tnewSelector = selector;\n\n\t\t\t\t// qSA looks outside Element context, which is not what we want\n\t\t\t\t// Thanks to Andrew Dupont for this workaround technique\n\t\t\t\t// Support: IE <=8\n\t\t\t\t// Exclude object elements\n\t\t\t\t} else if ( context.nodeName.toLowerCase() !== \"object\" ) {\n\n\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\tif ( (nid = context.getAttribute( \"id\" )) ) {\n\t\t\t\t\t\tnid = nid.replace( rescape, \"\\\\$&\" );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontext.setAttribute( \"id\", (nid = expando) );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\tnidselect = ridentifier.test( nid ) ? \"#\" + nid : \"[id='\" + nid + \"']\";\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[i] = nidselect + \" \" + toSelector( groups[i] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\t\t\t\t}\n\n\t\t\t\tif ( newSelector ) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn (cache[ key + \" \" ] = value);\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created div and expects a boolean result\n */\nfunction assert( fn ) {\n\tvar div = document.createElement(\"div\");\n\n\ttry {\n\t\treturn !!fn( div );\n\t} catch (e) {\n\t\treturn false;\n\t} finally {\n\t\t// Remove from its parent by default\n\t\tif ( div.parentNode ) {\n\t\t\tdiv.parentNode.removeChild( div );\n\t\t}\n\t\t// release memory in IE\n\t\tdiv = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split(\"|\"),\n\t\ti = arr.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[i] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\t( ~b.sourceIndex || MAX_NEGATIVE ) -\n\t\t\t( ~a.sourceIndex || MAX_NEGATIVE );\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( (cur = cur.nextSibling) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn (name === \"input\" || name === \"button\") && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction(function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction(function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ (j = matchIndexes[i]) ] ) {\n\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\t// documentElement is verified for cases where it doesn't yet exist\n\t// (such as loading iframes in IE - #4833)\n\tvar documentElement = elem && (elem.ownerDocument || elem).documentElement;\n\treturn documentElement ? documentElement.nodeName !== \"HTML\" : false;\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, parent,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\tif ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocElem = document.documentElement;\n\tdocumentIsHTML = !isXML( document );\n\n\t// Support: IE 9-11, Edge\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\tif ( (parent = document.defaultView) && parent.top !== parent ) {\n\t\t// Support: IE 11\n\t\tif ( parent.addEventListener ) {\n\t\t\tparent.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( parent.attachEvent ) {\n\t\t\tparent.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert(function( div ) {\n\t\tdiv.className = \"i\";\n\t\treturn !div.getAttribute(\"className\");\n\t});\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert(function( div ) {\n\t\tdiv.appendChild( document.createComment(\"\") );\n\t\treturn !div.getElementsByTagName(\"*\").length;\n\t});\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert(function( div ) {\n\t\tdocElem.appendChild( div ).id = expando;\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\n\t});\n\n\t// ID find and filter\n\tif ( support.getById ) {\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar m = context.getElementById( id );\n\t\t\t\treturn m ? [ m ] : [];\n\t\t\t}\n\t\t};\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t};\n\t\t};\n\t} else {\n\t\t// Support: IE6/7\n\t\t// getElementById is not reliable as a find shortcut\n\t\tdelete Expr.find[\"ID\"];\n\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode(\"id\");\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[\"TAG\"] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( (elem = results[i++]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[\"CLASS\"] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See http://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( (support.qsa = rnative.test( document.querySelectorAll )) ) {\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert(function( div ) {\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// http://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( div ).innerHTML = \"<a id='\" + expando + \"'></a>\" +\n\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' msallowcapture=''>\" +\n\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( div.querySelectorAll(\"[msallowcapture^='']\").length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !div.querySelectorAll(\"[selected]\").length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\t\t\tif ( !div.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push(\"~=\");\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !div.querySelectorAll(\":checked\").length ) {\n\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibing-combinator selector` fails\n\t\t\tif ( !div.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\n\t\t\t}\n\t\t});\n\n\t\tassert(function( div ) {\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = document.createElement(\"input\");\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tdiv.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( div.querySelectorAll(\"[name=d]\").length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !div.querySelectorAll(\":enabled\").length ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tdiv.querySelectorAll(\"*,:x\");\n\t\t\trbuggyQSA.push(\",.*:\");\n\t\t});\n\t}\n\n\tif ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector) )) ) {\n\n\t\tassert(function( div ) {\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( div, \"div\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( div, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t});\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join(\"|\") );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join(\"|\") );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully self-exclusive\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t));\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( (b = b.parentNode) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\tcompare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\tif ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\n\t\t\treturn a === document ? -1 :\n\t\t\t\tb === document ? 1 :\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[i] === bp[i] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[i], bp[i] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\tap[i] === preferredDoc ? -1 :\n\t\t\tbp[i] === preferredDoc ? 1 :\n\t\t\t0;\n\t};\n\n\treturn document;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\t// Make sure that attribute selectors are quoted\n\texpr = expr.replace( rattributeQuotes, \"='$1']\" );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!compilerCache[ expr + \" \" ] &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch (e) {}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\t// Set document vars if needed\n\tif ( ( context.ownerDocument || context ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t(val = elem.getAttributeNode(name)) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( (elem = results[i++]) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( (node = elem[i++]) ) {\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[1] = match[1].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[3] = ( match[3] || match[4] || match[5] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[2] === \"~=\" ) {\n\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\tif ( match[1].slice( 0, 3 ) === \"nth\" ) {\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[3] ) {\n\t\t\t\t\tSizzle.error( match[0] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === \"even\" || match[3] === \"odd\" ) );\n\t\t\t\tmatch[5] = +( ( match[7] + match[8] ) || match[3] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[3] ) {\n\t\t\t\tSizzle.error( match[0] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\tif ( matchExpr[\"CHILD\"].test( match[0] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[3] ) {\n\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t(excess = tokenize( unquoted, true )) &&\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t(excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[0] = match[0].slice( 0, excess );\n\t\t\t\tmatch[2] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() { return true; } :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t(pattern = new RegExp( \"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\" )) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test( typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== \"undefined\" && elem.getAttribute(\"class\") || \"\" );\n\t\t\t\t});\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tvar cache, uniqueCache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( (node = node[ dir ]) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction(function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf( seed, matched[i] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[i] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction(function( selector ) {\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction(function( seed, matches, context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = unmatched[i]) ) {\n\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}) :\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\t\t\t\t\t// Don't keep the element (issue #299)\n\t\t\t\t\tinput[0] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t}),\n\n\t\t\"has\": markFunction(function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t}),\n\n\t\t\"contains\": markFunction(function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t}),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test(lang || \"\") ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( (elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( (elem = elem.parentNode) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": function( elem ) {\n\t\t\treturn elem.disabled === false;\n\t\t},\n\n\t\t\"disabled\": function( elem ) {\n\t\t\treturn elem.disabled === true;\n\t\t},\n\n\t\t\"checked\": function( elem ) {\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn (nodeName === \"input\" && !!elem.checked) || (nodeName === \"option\" && !!elem.selected);\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t// but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[\"empty\"]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo(function() {\n\t\t\treturn [ 0 ];\n\t\t}),\n\n\t\t\"last\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t}),\n\n\t\t\"eq\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t}),\n\n\t\t\"even\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"odd\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"lt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"gt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t})\n\t}\n};\n\nExpr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || (match = rcomma.exec( soFar )) ) {\n\t\t\tif ( match ) {\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[0].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( (tokens = []) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( (match = rcombinators.exec( soFar )) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push({\n\t\t\t\tvalue: matched,\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[0].replace( rtrim, \" \" )\n\t\t\t});\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\n\t\t\t\t(match = preFilters[ type ]( match ))) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push({\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t});\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[i].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tcheckNonElements = base && dir === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, uniqueCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || (elem[ expando ] = {});\n\n\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});\n\n\t\t\t\t\t\tif ( (oldCache = uniqueCache[ dir ]) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn (newCache[ 2 ] = oldCache[ 2 ]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\tuniqueCache[ dir ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[i]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[0];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[i], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (elem = unmatched[i]) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction(function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts( selector || \"*\", context.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( (elem = temp[i]) ) {\n\t\t\t\t\tmatcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = matcherOut[i]) ) {\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( (matcherIn[i] = elem) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, (matcherOut = []), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( (elem = matcherOut[i]) &&\n\t\t\t\t\t\t(temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {\n\n\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[0].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\t\t\t// Avoid hanging onto element (issue #299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (matcher = Expr.relative[ tokens[i].type ]) ) {\n\t\t\tmatchers = [ addCombinator(elementMatcher( matchers ), matcher) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[j].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( (tokens = tokens.slice( j )) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[\"TAG\"]( \"*\", outermost ),\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\t\t\t\toutermostContext = context === document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching elements by id\n\t\t\tfor ( ; i !== len && (elem = elems[i]) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\tif ( !context && elem.ownerDocument !== document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( (matcher = elementMatchers[j++]) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( (elem = !matcher && elem) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (matcher = setMatchers[j++]) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !(unmatched[i] || setMatched[i]) ) {\n\t\t\t\t\t\t\t\tsetMatched[i] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[i] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\n\n/**\n * A low-level selection function that works with Sizzle's compiled\n * selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n * selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( (selector = compiled.selector || selector) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[0] = match[0].slice( 0 );\n\t\tif ( tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\tsupport.getById && context.nodeType === 9 && documentIsHTML &&\n\t\t\t\tExpr.relative[ tokens[1].type ] ) {\n\n\t\t\tcontext = ( Expr.find[\"ID\"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[\"needsContext\"].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[i];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ (type = token.type) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( (find = Expr.find[ type ]) ) {\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( (seed = find(\n\t\t\t\t\ttoken.matches[0].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context\n\t\t\t\t)) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n};\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split(\"\").sort( sortOrder ).join(\"\") === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert(function( div1 ) {\n\t// Should return 1, but returns 4 (following)\n\treturn div1.compareDocumentPosition( document.createElement(\"div\") ) & 1;\n});\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert(function( div ) {\n\tdiv.innerHTML = \"<a href='#'></a>\";\n\treturn div.firstChild.getAttribute(\"href\") === \"#\" ;\n}) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert(function( div ) {\n\tdiv.innerHTML = \"<input/>\";\n\tdiv.firstChild.setAttribute( \"value\", \"\" );\n\treturn div.firstChild.getAttribute( \"value\" ) === \"\";\n}) ) {\n\taddHandle( \"value\", function( elem, name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert(function( div ) {\n\treturn div.getAttribute(\"disabled\") == null;\n}) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t\t(val = elem.getAttributeNode( name )) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\tnull;\n\t\t}\n\t});\n}\n\nreturn Sizzle;\n\n})( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\n\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\nvar rsingleTag = ( /^<([\\w-]+)\\s*\\/?>(?:<\\/\\1>|)$/ );\n\n\n\nvar risSimple = /^.[^:#\\[\\.,]*$/;\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( jQuery.isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\t/* jshint -W018 */\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\n\t}\n\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\n\t}\n\n\tif ( typeof qualifier === \"string\" ) {\n\t\tif ( risSimple.test( qualifier ) ) {\n\t\t\treturn jQuery.filter( qualifier, elements, not );\n\t\t}\n\n\t\tqualifier = jQuery.filter( qualifier, elements );\n\t}\n\n\treturn jQuery.grep( elements, function( elem ) {\n\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t} );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\treturn elems.length === 1 && elem.nodeType === 1 ?\n\t\tjQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :\n\t\tjQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\t\treturn elem.nodeType === 1;\n\t\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i,\n\t\t\tlen = this.length,\n\t\t\tret = [],\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\t// Needed because $( selector, context ) becomes $( context ).find( selector )\n\t\tret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );\n\t\tret.selector = this.selector ? this.selector + \" \" + selector : selector;\n\t\treturn ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]*))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( jQuery.isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\t// Support: Blackberry 4.6\n\t\t\t\t\t// gEBID returns nodes no longer in the document (#6963)\n\t\t\t\t\tif ( elem && elem.parentNode ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.context = document;\n\t\t\t\t\tthis.selector = selector;\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis.context = this[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( jQuery.isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\tif ( selector.selector !== undefined ) {\n\t\t\tthis.selector = selector.selector;\n\t\t\tthis.context = selector.context;\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\tpos = rneedsContext.test( selectors ) || typeof selectors !== \"string\" ?\n\t\t\t\tjQuery( selectors, context || this.context ) :\n\t\t\t\t0;\n\n\t\tfor ( ; i < l; i++ ) {\n\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t// Always skip document fragments\n\t\t\t\tif ( cur.nodeType < 11 && ( pos ?\n\t\t\t\t\tpos.index( cur ) > -1 :\n\n\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\treturn elem.contentDocument || jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnotwhite = ( /\\S+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnotwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( jQuery.isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && jQuery.type( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, listener list, final state\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ), \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ), \"rejected\" ],\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ) ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tthen: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\t\t\t\t\tvar fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];\n\n\t\t\t\t\t\t\t// deferred[ done | fail | progress ] for forwarding actions to newDefer\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && jQuery.isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis === promise ? newDefer.promise() : this,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Keep pipe for back-compat\n\t\tpromise.pipe = promise.then;\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 3 ];\n\n\t\t\t// promise[ done | fail | progress ] = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add( function() {\n\n\t\t\t\t\t// state = [ resolved | rejected ]\n\t\t\t\t\tstate = stateString;\n\n\t\t\t\t// [ reject_list | resolve_list ].disable; progress_list.lock\n\t\t\t\t}, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );\n\t\t\t}\n\n\t\t\t// deferred[ resolve | reject | notify ]\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? promise : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( subordinate /* , ..., subordinateN */ ) {\n\t\tvar i = 0,\n\t\t\tresolveValues = slice.call( arguments ),\n\t\t\tlength = resolveValues.length,\n\n\t\t\t// the count of uncompleted subordinates\n\t\t\tremaining = length !== 1 ||\n\t\t\t\t( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,\n\n\t\t\t// the master Deferred.\n\t\t\t// If resolveValues consist of only a single Deferred, just use that.\n\t\t\tdeferred = remaining === 1 ? subordinate : jQuery.Deferred(),\n\n\t\t\t// Update function for both resolve and progress values\n\t\t\tupdateFunc = function( i, contexts, values ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tcontexts[ i ] = this;\n\t\t\t\t\tvalues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( values === progressValues ) {\n\t\t\t\t\t\tdeferred.notifyWith( contexts, values );\n\t\t\t\t\t} else if ( !( --remaining ) ) {\n\t\t\t\t\t\tdeferred.resolveWith( contexts, values );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t},\n\n\t\t\tprogressValues, progressContexts, resolveContexts;\n\n\t\t// Add listeners to Deferred subordinates; treat others as resolved\n\t\tif ( length > 1 ) {\n\t\t\tprogressValues = new Array( length );\n\t\t\tprogressContexts = new Array( length );\n\t\t\tresolveContexts = new Array( length );\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {\n\t\t\t\t\tresolveValues[ i ].promise()\n\t\t\t\t\t\t.progress( updateFunc( i, progressContexts, progressValues ) )\n\t\t\t\t\t\t.done( updateFunc( i, resolveContexts, resolveValues ) )\n\t\t\t\t\t\t.fail( deferred.reject );\n\t\t\t\t} else {\n\t\t\t\t\t--remaining;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// If we're not waiting on anything, resolve the master\n\t\tif ( !remaining ) {\n\t\t\tdeferred.resolveWith( resolveContexts, resolveValues );\n\t\t}\n\n\t\treturn deferred.promise();\n\t}\n} );\n\n\n// The deferred used on DOM ready\nvar readyList;\n\njQuery.fn.ready = function( fn ) {\n\n\t// Add the callback\n\tjQuery.ready.promise().done( fn );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Hold (or release) the ready event\n\tholdReady: function( hold ) {\n\t\tif ( hold ) {\n\t\t\tjQuery.readyWait++;\n\t\t} else {\n\t\t\tjQuery.ready( true );\n\t\t}\n\t},\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\n\t\t// Trigger any bound ready events\n\t\tif ( jQuery.fn.triggerHandler ) {\n\t\t\tjQuery( document ).triggerHandler( \"ready\" );\n\t\t\tjQuery( document ).off( \"ready\" );\n\t\t}\n\t}\n} );\n\n/**\n * The ready event handler and self cleanup method\n */\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\njQuery.ready.promise = function( obj ) {\n\tif ( !readyList ) {\n\n\t\treadyList = jQuery.Deferred();\n\n\t\t// Catch cases where $(document).ready() is called\n\t\t// after the browser event has already occurred.\n\t\t// Support: IE9-10 only\n\t\t// Older IE sometimes signals \"interactive\" too soon\n\t\tif ( document.readyState === \"complete\" ||\n\t\t\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t\t\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\t\t\twindow.setTimeout( jQuery.ready );\n\n\t\t} else {\n\n\t\t\t// Use the handy event callback\n\t\t\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t\t\t// A fallback to window.onload, that will always work\n\t\t\twindow.addEventListener( \"load\", completed );\n\t\t}\n\t}\n\treturn readyList.promise( obj );\n};\n\n// Kick off the DOM ready check even if the user does not\njQuery.ready.promise();\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( jQuery.type( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !jQuery.isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\tvalue :\n\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn chainable ?\n\t\telems :\n\n\t\t// Gets\n\t\tbulk ?\n\t\t\tfn.call( elems ) :\n\t\t\tlen ? fn( elems[ 0 ], key ) : emptyGet;\n};\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t// - Node\n\t// - Node.ELEMENT_NODE\n\t// - Node.DOCUMENT_NODE\n\t// - Object\n\t// - Any\n\t/* jshint -W018 */\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tregister: function( owner, initial ) {\n\t\tvar value = initial || {};\n\n\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t// use plain assignment\n\t\tif ( owner.nodeType ) {\n\t\t\towner[ this.expando ] = value;\n\n\t\t// Otherwise secure it in a non-enumerable, non-writable property\n\t\t// configurability must be true to allow the property to be\n\t\t// deleted with the delete operator\n\t\t} else {\n\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\tvalue: value,\n\t\t\t\twritable: true,\n\t\t\t\tconfigurable: true\n\t\t\t} );\n\t\t}\n\t\treturn owner[ this.expando ];\n\t},\n\tcache: function( owner ) {\n\n\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t// but we should not, see #8335.\n\t\t// Always return an empty object.\n\t\tif ( !acceptData( owner ) ) {\n\t\t\treturn {};\n\t\t}\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see #8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ data ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ prop ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\t\t\towner[ this.expando ] && owner[ this.expando ][ key ];\n\t},\n\taccess: function( owner, key, value ) {\n\t\tvar stored;\n\n\t\t// In cases where either:\n\t\t//\n\t\t// 1. No key was specified\n\t\t// 2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t// 1. The entire cache object\n\t\t// 2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\tstored = this.get( owner, key );\n\n\t\t\treturn stored !== undefined ?\n\t\t\t\tstored : this.get( owner, jQuery.camelCase( key ) );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t// 1. An object of properties\n\t\t// 2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i, name, camel,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key === undefined ) {\n\t\t\tthis.register( owner );\n\n\t\t} else {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( jQuery.isArray( key ) ) {\n\n\t\t\t\t// If \"name\" is an array of keys...\n\t\t\t\t// When data is initially created, via (\"key\", \"val\") signature,\n\t\t\t\t// keys will be converted to camelCase.\n\t\t\t\t// Since there is no way to tell _how_ a key was added, remove\n\t\t\t\t// both plain key and camelCase key. #12786\n\t\t\t\t// This will only penalize the array argument path.\n\t\t\t\tname = key.concat( key.map( jQuery.camelCase ) );\n\t\t\t} else {\n\t\t\t\tcamel = jQuery.camelCase( key );\n\n\t\t\t\t// Try the string as a key before any manipulation\n\t\t\t\tif ( key in cache ) {\n\t\t\t\t\tname = [ key, camel ];\n\t\t\t\t} else {\n\n\t\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\t\tname = camel;\n\t\t\t\t\tname = name in cache ?\n\t\t\t\t\t\t[ name ] : ( name.match( rnotwhite ) || [] );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\ti = name.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ name[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <= 35-45+\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://code.google.com/p/chromium/issues/detail?id=378607\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = data === \"true\" ? true :\n\t\t\t\t\tdata === \"false\" ? false :\n\t\t\t\t\tdata === \"null\" ? null :\n\n\t\t\t\t\t// Only convert to a number if it doesn't change the string\n\t\t\t\t\t+data + \"\" === data ? +data :\n\t\t\t\t\trbrace.test( data ) ? jQuery.parseJSON( data ) :\n\t\t\t\t\tdata;\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE11+\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = jQuery.camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data, camelKey;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// with the key as-is\n\t\t\t\tdata = dataUser.get( elem, key ) ||\n\n\t\t\t\t\t// Try to find dashed key if it exists (gh-2779)\n\t\t\t\t\t// This is for 2.2.x only\n\t\t\t\t\tdataUser.get( elem, key.replace( rmultiDash, \"-$&\" ).toLowerCase() );\n\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\tcamelKey = jQuery.camelCase( key );\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// with the key camelized\n\t\t\t\tdata = dataUser.get( elem, camelKey );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, camelKey, undefined );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tcamelKey = jQuery.camelCase( key );\n\t\t\tthis.each( function() {\n\n\t\t\t\t// First, attempt to store a copy or reference of any\n\t\t\t\t// data that might've been store with a camelCased key.\n\t\t\t\tvar data = dataUser.get( this, camelKey );\n\n\t\t\t\t// For HTML5 data-* attribute interop, we have to\n\t\t\t\t// store property names with dashes in a camelCase form.\n\t\t\t\t// This might not apply to all properties...*\n\t\t\t\tdataUser.set( this, camelKey, value );\n\n\t\t\t\t// *... In the case of properties that might _actually_\n\t\t\t\t// have dashes, we need to also store a copy of that\n\t\t\t\t// unchanged property.\n\t\t\t\tif ( key.indexOf( \"-\" ) > -1 && data !== undefined ) {\n\t\t\t\t\tdataUser.set( this, key, value );\n\t\t\t\t}\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || jQuery.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar isHidden = function( elem, el ) {\n\n\t\t// isHidden might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\t\treturn jQuery.css( elem, \"display\" ) === \"none\" ||\n\t\t\t!jQuery.contains( elem.ownerDocument, elem );\n\t};\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted,\n\t\tscale = 1,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() { return tween.cur(); } :\n\t\t\tfunction() { return jQuery.css( elem, prop, \"\" ); },\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = ( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\tdo {\n\n\t\t\t// If previous iteration zeroed out, double until we get *something*.\n\t\t\t// Use string for doubling so we don't accidentally see scale as unchanged below\n\t\t\tscale = scale || \".5\";\n\n\t\t\t// Adjust and apply\n\t\t\tinitialInUnit = initialInUnit / scale;\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Update scale, tolerating zero or NaN from tween.cur()\n\t\t// Break the loop if scale is unchanged or perfect, or if we've just had enough.\n\t\t} while (\n\t\t\tscale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations\n\t\t);\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([\\w:-]+)/ );\n\nvar rscriptType = ( /^$|\\/(?:java|ecma)script/i );\n\n\n\n// We have to close these tags to support XHTML (#13200)\nvar wrapMap = {\n\n\t// Support: IE9\n\toption: [ 1, \"<select multiple='multiple'>\", \"</select>\" ],\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting <tbody> or other required elements.\n\tthead: [ 1, \"<table>\", \"</table>\" ],\n\tcol: [ 2, \"<table><colgroup>\", \"</colgroup></table>\" ],\n\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\n// Support: IE9\nwrapMap.optgroup = wrapMap.option;\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE9-11+\n\t// Use typeof to avoid zero-argument method invocation on host objects (#15151)\n\tvar ret = typeof context.getElementsByTagName !== \"undefined\" ?\n\t\t\tcontext.getElementsByTagName( tag || \"*\" ) :\n\t\t\ttypeof context.querySelectorAll !== \"undefined\" ?\n\t\t\t\tcontext.querySelectorAll( tag || \"*\" ) :\n\t\t\t[];\n\n\treturn tag === undefined || tag && jQuery.nodeName( context, tag ) ?\n\t\tjQuery.merge( [ context ], ret ) :\n\t\tret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, contains, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( jQuery.type( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android<4.1, PhantomJS<2\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android<4.1, PhantomJS<2\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (#12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tcontains = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( contains ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0-4.3, Safari<=5.1\n\t// Check state lost if the name is set (#11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (#14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Safari<=5.1, Android<4.2\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE<=11+\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n} )();\n\n\nvar\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\n// Support: IE9\n// See #13393 for more info\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Don't attach events to noData or text/comment nodes (but allow plain objects)\n\t\tif ( !elemData ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = {};\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnotwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnotwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( event ) {\n\n\t\t// Make a writable jQuery.Event from the native event object\n\t\tevent = jQuery.event.fix( event );\n\n\t\tvar i, j, ret, matched, handleObj,\n\t\t\thandlerQueue = [],\n\t\t\targs = slice.call( arguments ),\n\t\t\thandlers = ( dataPriv.get( this, \"events\" ) || {} )[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// Triggered event must either 1) have no namespace, or 2) have namespace(s)\n\t\t\t\t// a subset or equal to those in the bound event (both can have no namespace).\n\t\t\t\tif ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, matches, sel, handleObj,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Support (at least): Chrome, IE9\n\t\t// Find delegate handlers\n\t\t// Black-hole SVG <use> instance trees (#13180)\n\t\t//\n\t\t// Support: Firefox<=42+\n\t\t// Avoid non-left-click in FF but don't block IE radio events (#3861, gh-2343)\n\t\tif ( delegateCount && cur.nodeType &&\n\t\t\t( event.type !== \"click\" || isNaN( event.button ) || event.button < 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && ( cur.disabled !== true || event.type !== \"click\" ) ) {\n\t\t\t\t\tmatches = [];\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matches[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatches[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matches[ sel ] ) {\n\t\t\t\t\t\t\tmatches.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matches.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matches } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: this, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\t// Includes some event props shared by KeyEvent and MouseEvent\n\tprops: ( \"altKey bubbles cancelable ctrlKey currentTarget detail eventPhase \" +\n\t\t\"metaKey relatedTarget shiftKey target timeStamp view which\" ).split( \" \" ),\n\n\tfixHooks: {},\n\n\tkeyHooks: {\n\t\tprops: \"char charCode key keyCode\".split( \" \" ),\n\t\tfilter: function( event, original ) {\n\n\t\t\t// Add which for key events\n\t\t\tif ( event.which == null ) {\n\t\t\t\tevent.which = original.charCode != null ? original.charCode : original.keyCode;\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tmouseHooks: {\n\t\tprops: ( \"button buttons clientX clientY offsetX offsetY pageX pageY \" +\n\t\t\t\"screenX screenY toElement\" ).split( \" \" ),\n\t\tfilter: function( event, original ) {\n\t\t\tvar eventDoc, doc, body,\n\t\t\t\tbutton = original.button;\n\n\t\t\t// Calculate pageX/Y if missing and clientX/Y available\n\t\t\tif ( event.pageX == null && original.clientX != null ) {\n\t\t\t\teventDoc = event.target.ownerDocument || document;\n\t\t\t\tdoc = eventDoc.documentElement;\n\t\t\t\tbody = eventDoc.body;\n\n\t\t\t\tevent.pageX = original.clientX +\n\t\t\t\t\t( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) -\n\t\t\t\t\t( doc && doc.clientLeft || body && body.clientLeft || 0 );\n\t\t\t\tevent.pageY = original.clientY +\n\t\t\t\t\t( doc && doc.scrollTop || body && body.scrollTop || 0 ) -\n\t\t\t\t\t( doc && doc.clientTop || body && body.clientTop || 0 );\n\t\t\t}\n\n\t\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\t\t// Note: button is not normalized, so don't use it\n\t\t\tif ( !event.which && button !== undefined ) {\n\t\t\t\tevent.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tfix: function( event ) {\n\t\tif ( event[ jQuery.expando ] ) {\n\t\t\treturn event;\n\t\t}\n\n\t\t// Create a writable copy of the event object and normalize some properties\n\t\tvar i, prop, copy,\n\t\t\ttype = event.type,\n\t\t\toriginalEvent = event,\n\t\t\tfixHook = this.fixHooks[ type ];\n\n\t\tif ( !fixHook ) {\n\t\t\tthis.fixHooks[ type ] = fixHook =\n\t\t\t\trmouseEvent.test( type ) ? this.mouseHooks :\n\t\t\t\trkeyEvent.test( type ) ? this.keyHooks :\n\t\t\t\t{};\n\t\t}\n\t\tcopy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;\n\n\t\tevent = new jQuery.Event( originalEvent );\n\n\t\ti = copy.length;\n\t\twhile ( i-- ) {\n\t\t\tprop = copy[ i ];\n\t\t\tevent[ prop ] = originalEvent[ prop ];\n\t\t}\n\n\t\t// Support: Cordova 2.5 (WebKit) (#13255)\n\t\t// All events should have a target; Cordova deviceready doesn't\n\t\tif ( !event.target ) {\n\t\t\tevent.target = document;\n\t\t}\n\n\t\t// Support: Safari 6.0+, Chrome<28\n\t\t// Target should not be a text node (#504, #13143)\n\t\tif ( event.target.nodeType === 3 ) {\n\t\t\tevent.target = event.target.parentNode;\n\t\t}\n\n\t\treturn fixHook.filter ? fixHook.filter( event, originalEvent ) : event;\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tfocus: {\n\n\t\t\t// Fire native event if possible so blur/focus sequence is correct\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this !== safeActiveElement() && this.focus ) {\n\t\t\t\t\tthis.focus();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusin\"\n\t\t},\n\t\tblur: {\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this === safeActiveElement() && this.blur ) {\n\t\t\t\t\tthis.blur();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusout\"\n\t\t},\n\t\tclick: {\n\n\t\t\t// For checkbox, fire native event so checked state will be right\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this.type === \"checkbox\" && this.click && jQuery.nodeName( this, \"input\" ) ) {\n\t\t\t\t\tthis.click();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, don't fire native .click() on links\n\t\t\t_default: function( event ) {\n\t\t\t\treturn jQuery.nodeName( event.target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android<4.0\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || jQuery.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://code.google.com/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event ) dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:-]+)[^>]*)\\/>/gi,\n\n\t// Support: IE 10-11, Edge 10240+\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /<script|<style|<link/i,\n\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\trscriptTypeMasked = /^true\\/(.*)/,\n\trcleanScript = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;\n\n// Manipulating tables requires a tbody\nfunction manipulationTarget( elem, content ) {\n\treturn jQuery.nodeName( elem, \"table\" ) &&\n\t\tjQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ?\n\n\t\telem.getElementsByTagName( \"tbody\" )[ 0 ] ||\n\t\t\telem.appendChild( elem.ownerDocument.createElement( \"tbody\" ) ) :\n\t\telem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tvar match = rscriptTypeMasked.exec( elem.type );\n\n\tif ( match ) {\n\t\telem.type = match[ 1 ];\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.access( src );\n\t\tpdataCur = dataPriv.set( dest, pdataOld );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdelete pdataCur.handle;\n\t\t\tpdataCur.events = {};\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = concat.apply( [], args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tisFunction = jQuery.isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( isFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( isFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android<4.1, PhantomJS<2\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Reenable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tjQuery.globalEval( node.textContent.replace( rcleanScript, \"\" ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && jQuery.contains( node.ownerDocument, node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html.replace( rxhtmlTag, \"<$1></$2>\" );\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <= 35-45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <= 35-45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\n\t// Keep domManip exposed until 3.0 (gh-2225)\n\tdomManip: domManip,\n\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: QtWebKit\n\t\t\t// .get() because push.apply(_, arraylike) throws\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\n\n\nvar iframe,\n\telemdisplay = {\n\n\t\t// Support: Firefox\n\t\t// We have to pre-define these values for FF (#10227)\n\t\tHTML: \"block\",\n\t\tBODY: \"block\"\n\t};\n\n/**\n * Retrieve the actual display of a element\n * @param {String} name nodeName of the element\n * @param {Object} doc Document object\n */\n\n// Called only from within defaultDisplay\nfunction actualDisplay( name, doc ) {\n\tvar elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),\n\n\t\tdisplay = jQuery.css( elem[ 0 ], \"display\" );\n\n\t// We don't have any data stored on the element,\n\t// so use \"detach\" method as fast way to get rid of the element\n\telem.detach();\n\n\treturn display;\n}\n\n/**\n * Try to determine the default display value of an element\n * @param {String} nodeName\n */\nfunction defaultDisplay( nodeName ) {\n\tvar doc = document,\n\t\tdisplay = elemdisplay[ nodeName ];\n\n\tif ( !display ) {\n\t\tdisplay = actualDisplay( nodeName, doc );\n\n\t\t// If the simple way fails, read from inside an iframe\n\t\tif ( display === \"none\" || !display ) {\n\n\t\t\t// Use the already-created iframe if possible\n\t\t\tiframe = ( iframe || jQuery( \"<iframe frameborder='0' width='0' height='0'/>\" ) )\n\t\t\t\t.appendTo( doc.documentElement );\n\n\t\t\t// Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse\n\t\t\tdoc = iframe[ 0 ].contentDocument;\n\n\t\t\t// Support: IE\n\t\t\tdoc.write();\n\t\t\tdoc.close();\n\n\t\t\tdisplay = actualDisplay( nodeName, doc );\n\t\t\tiframe.detach();\n\t\t}\n\n\t\t// Store the correct default display\n\t\telemdisplay[ nodeName ] = display;\n\t}\n\n\treturn display;\n}\nvar rmargin = ( /^margin/ );\n\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE<=11+, Firefox<=30+ (#15098, #14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\nvar swap = function( elem, options, callback, args ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.apply( elem, args || [] );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\nvar documentElement = document.documentElement;\n\n\n\n( function() {\n\tvar pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, reliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE9-11+\n\t// Style of cloned element affects source element cloned (#8908)\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tcontainer.style.cssText = \"border:0;width:8px;height:0;top:0;left:-9999px;\" +\n\t\t\"padding:0;margin-top:1px;position:absolute\";\n\tcontainer.appendChild( div );\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computeStyleTests() {\n\t\tdiv.style.cssText =\n\n\t\t\t// Support: Firefox<29, Android 2.3\n\t\t\t// Vendor-prefix box-sizing\n\t\t\t\"-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;\" +\n\t\t\t\"position:relative;display:block;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"top:1%;width:50%\";\n\t\tdiv.innerHTML = \"\";\n\t\tdocumentElement.appendChild( container );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\t\treliableMarginLeftVal = divStyle.marginLeft === \"2px\";\n\t\tboxSizingReliableVal = divStyle.width === \"4px\";\n\n\t\t// Support: Android 4.0 - 4.3 only\n\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\tdiv.style.marginRight = \"50%\";\n\t\tpixelMarginRightVal = divStyle.marginRight === \"4px\";\n\n\t\tdocumentElement.removeChild( container );\n\t}\n\n\tjQuery.extend( support, {\n\t\tpixelPosition: function() {\n\n\t\t\t// This test is executed only once but we still do memoizing\n\t\t\t// since we can use the boxSizingReliable pre-computing.\n\t\t\t// No need to check if the test was already performed, though.\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\tboxSizingReliable: function() {\n\t\t\tif ( boxSizingReliableVal == null ) {\n\t\t\t\tcomputeStyleTests();\n\t\t\t}\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelMarginRight: function() {\n\n\t\t\t// Support: Android 4.0-4.3\n\t\t\t// We're checking for boxSizingReliableVal here instead of pixelMarginRightVal\n\t\t\t// since that compresses better and they're computed together anyway.\n\t\t\tif ( boxSizingReliableVal == null ) {\n\t\t\t\tcomputeStyleTests();\n\t\t\t}\n\t\t\treturn pixelMarginRightVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\n\t\t\t// Support: IE <=8 only, Android 4.0 - 4.3 only, Firefox <=3 - 37\n\t\t\tif ( boxSizingReliableVal == null ) {\n\t\t\t\tcomputeStyleTests();\n\t\t\t}\n\t\t\treturn reliableMarginLeftVal;\n\t\t},\n\t\treliableMarginRight: function() {\n\n\t\t\t// Support: Android 2.3\n\t\t\t// Check if div with explicit width and no margin-right incorrectly\n\t\t\t// gets computed margin-right based on width of container. (#3333)\n\t\t\t// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right\n\t\t\t// This support function is only executed once so no memoizing is needed.\n\t\t\tvar ret,\n\t\t\t\tmarginDiv = div.appendChild( document.createElement( \"div\" ) );\n\n\t\t\t// Reset CSS: box-sizing; display; margin; border; padding\n\t\t\tmarginDiv.style.cssText = div.style.cssText =\n\n\t\t\t\t// Support: Android 2.3\n\t\t\t\t// Vendor-prefix box-sizing\n\t\t\t\t\"-webkit-box-sizing:content-box;box-sizing:content-box;\" +\n\t\t\t\t\"display:block;margin:0;border:0;padding:0\";\n\t\t\tmarginDiv.style.marginRight = marginDiv.style.width = \"0\";\n\t\t\tdiv.style.width = \"1px\";\n\t\t\tdocumentElement.appendChild( container );\n\n\t\t\tret = !parseFloat( window.getComputedStyle( marginDiv ).marginRight );\n\n\t\t\tdocumentElement.removeChild( container );\n\t\t\tdiv.removeChild( marginDiv );\n\n\t\t\treturn ret;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\tret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined;\n\n\t// Support: Opera 12.1x only\n\t// Fall back to style even without computed\n\t// computed is undefined for elems on document fragments\n\tif ( ( ret === \"\" || ret === undefined ) && !jQuery.contains( elem.ownerDocument, elem ) ) {\n\t\tret = jQuery.style( elem, name );\n\t}\n\n\t// Support: IE9\n\t// getPropertyValue is only needed for .css('filter') (#12537)\n\tif ( computed ) {\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// http://dev.w3.org/csswg/cssom/#resolved-values\n\t\tif ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE9-11+\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t},\n\n\tcssPrefixes = [ \"Webkit\", \"O\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style;\n\n// Return a css property mapped to a potentially vendor prefixed property\nfunction vendorPropName( name ) {\n\n\t// Shortcut for names that are not vendor prefixed\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\nfunction setPositiveNumber( elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {\n\tvar i = extra === ( isBorderBox ? \"border\" : \"content\" ) ?\n\n\t\t// If we already have the right measurement, avoid augmentation\n\t\t4 :\n\n\t\t// Otherwise initialize for horizontal or vertical properties\n\t\tname === \"width\" ? 1 : 0,\n\n\t\tval = 0;\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin, so add it if we want it\n\t\tif ( extra === \"margin\" ) {\n\t\t\tval += jQuery.css( elem, extra + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\tif ( isBorderBox ) {\n\n\t\t\t// border-box includes padding, so remove it if we want content\n\t\t\tif ( extra === \"content\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// At this point, extra isn't border nor margin, so remove border\n\t\t\tif ( extra !== \"margin\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t} else {\n\n\t\t\t// At this point, extra isn't content, so add padding\n\t\t\tval += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// At this point, extra isn't content nor padding, so add border\n\t\t\tif ( extra !== \"padding\" ) {\n\t\t\t\tval += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn val;\n}\n\nfunction getWidthOrHeight( elem, name, extra ) {\n\n\t// Start with offset property, which is equivalent to the border-box value\n\tvar valueIsBorderBox = true,\n\t\tval = name === \"width\" ? elem.offsetWidth : elem.offsetHeight,\n\t\tstyles = getStyles( elem ),\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t// Support: IE11 only\n\t// In IE 11 fullscreen elements inside of an iframe have\n\t// 100x too small dimensions (gh-1764).\n\tif ( document.msFullscreenElement && window.top !== window ) {\n\n\t\t// Support: IE11 only\n\t\t// Running getBoundingClientRect on a disconnected node\n\t\t// in IE throws an error.\n\t\tif ( elem.getClientRects().length ) {\n\t\t\tval = Math.round( elem.getBoundingClientRect()[ name ] * 100 );\n\t\t}\n\t}\n\n\t// Some non-html elements return undefined for offsetWidth, so check for null/undefined\n\t// svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285\n\t// MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668\n\tif ( val <= 0 || val == null ) {\n\n\t\t// Fall back to computed then uncomputed css if necessary\n\t\tval = curCSS( elem, name, styles );\n\t\tif ( val < 0 || val == null ) {\n\t\t\tval = elem.style[ name ];\n\t\t}\n\n\t\t// Computed unit is not pixels. Stop here and return.\n\t\tif ( rnumnonpx.test( val ) ) {\n\t\t\treturn val;\n\t\t}\n\n\t\t// Check for style in case a browser which returns unreliable values\n\t\t// for getComputedStyle silently falls back to the reliable elem.style\n\t\tvalueIsBorderBox = isBorderBox &&\n\t\t\t( support.boxSizingReliable() || val === elem.style[ name ] );\n\n\t\t// Normalize \"\", auto, and prepare for extra\n\t\tval = parseFloat( val ) || 0;\n\t}\n\n\t// Use the active box-sizing model to add/subtract irrelevant styles\n\treturn ( val +\n\t\taugmentWidthOrHeight(\n\t\t\telem,\n\t\t\tname,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles\n\t\t)\n\t) + \"px\";\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem, hidden,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tvalues[ index ] = dataPriv.get( elem, \"olddisplay\" );\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Reset the inline display of this element to learn if it is\n\t\t\t// being hidden by cascaded rules or not\n\t\t\tif ( !values[ index ] && display === \"none\" ) {\n\t\t\t\telem.style.display = \"\";\n\t\t\t}\n\n\t\t\t// Set elements which have been overridden with display: none\n\t\t\t// in a stylesheet to whatever the default browser style is\n\t\t\t// for such an element\n\t\t\tif ( elem.style.display === \"\" && isHidden( elem ) ) {\n\t\t\t\tvalues[ index ] = dataPriv.access(\n\t\t\t\t\telem,\n\t\t\t\t\t\"olddisplay\",\n\t\t\t\t\tdefaultDisplay( elem.nodeName )\n\t\t\t\t);\n\t\t\t}\n\t\t} else {\n\t\t\thidden = isHidden( elem );\n\n\t\t\tif ( display !== \"none\" || !hidden ) {\n\t\t\t\tdataPriv.set(\n\t\t\t\t\telem,\n\t\t\t\t\t\"olddisplay\",\n\t\t\t\t\thidden ? display : jQuery.css( elem, \"display\" )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of most of the elements in a second loop\n\t// to avoid the constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\t\tif ( !show || elem.style.display === \"none\" || elem.style.display === \"\" ) {\n\t\t\telem.style.display = show ? values[ index ] || \"\" : \"none\";\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"animationIterationCount\": true,\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"flexGrow\": true,\n\t\t\"flexShrink\": true,\n\t\t\"fontWeight\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {\n\t\t\"float\": \"cssFloat\"\n\t},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = jQuery.camelCase( name ),\n\t\t\tstyle = elem.style;\n\n\t\tname = jQuery.cssProps[ origName ] ||\n\t\t\t( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName );\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (#7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (#7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\tif ( type === \"number\" ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// Support: IE9-11+\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tstyle[ name ] = value;\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = jQuery.camelCase( name );\n\n\t\t// Make sure that we're working with the right name\n\t\tname = jQuery.cssProps[ origName ] ||\n\t\t\t( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName );\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( i, name ) {\n\tjQuery.cssHooks[ name ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\t\t\t\t\telem.offsetWidth === 0 ?\n\t\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\t\treturn getWidthOrHeight( elem, name, extra );\n\t\t\t\t\t\t} ) :\n\t\t\t\t\t\tgetWidthOrHeight( elem, name, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = extra && getStyles( elem ),\n\t\t\t\tsubtract = extra && augmentWidthOrHeight(\n\t\t\t\t\telem,\n\t\t\t\t\tname,\n\t\t\t\t\textra,\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\t\tstyles\n\t\t\t\t);\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ name ] = value;\n\t\t\t\tvalue = jQuery.css( elem, name );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// Support: Android 2.3\njQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn swap( elem, { \"display\": \"inline-block\" },\n\t\t\t\tcurCSS, [ elem, \"marginRight\" ] );\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( !rmargin.test( prefix ) ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( jQuery.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t},\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHidden( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 &&\n\t\t\t\t( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null ||\n\t\t\t\t\tjQuery.cssHooks[ tween.prop ] ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE9\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back Compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, timerId,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = jQuery.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4 ; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\t/* jshint validthis: true */\n\tvar prop, value, toggle, tween, hooks, oldfire, display, checkDisplay,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHidden( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Handle queue: false promises\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Height/width overflow pass\n\tif ( elem.nodeType === 1 && ( \"height\" in props || \"width\" in props ) ) {\n\n\t\t// Make sure that nothing sneaks out\n\t\t// Record all 3 overflow attributes because IE9-10 do not\n\t\t// change the overflow attribute when overflowX and\n\t\t// overflowY are set to the same value\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Set display property to inline-block for height/width\n\t\t// animations on inline elements that are having width/height animated\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\n\t\t// Test default display if display is currently \"none\"\n\t\tcheckDisplay = display === \"none\" ?\n\t\t\tdataPriv.get( elem, \"olddisplay\" ) || defaultDisplay( elem.nodeName ) : display;\n\n\t\tif ( checkDisplay === \"inline\" && jQuery.css( elem, \"float\" ) === \"none\" ) {\n\t\t\tstyle.display = \"inline-block\";\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// show/hide pass\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.exec( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// If there is dataShow left over from a stopped hide or show\n\t\t\t\t// and we are going to proceed with show, we should pretend to be hidden\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\n\t\t// Any non-fx value stops us from restoring the original display value\n\t\t} else {\n\t\t\tdisplay = undefined;\n\t\t}\n\t}\n\n\tif ( !jQuery.isEmptyObject( orig ) ) {\n\t\tif ( dataShow ) {\n\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\thidden = dataShow.hidden;\n\t\t\t}\n\t\t} else {\n\t\t\tdataShow = dataPriv.access( elem, \"fxshow\", {} );\n\t\t}\n\n\t\t// Store state if its toggle - enables .stop().toggle() to \"reverse\"\n\t\tif ( toggle ) {\n\t\t\tdataShow.hidden = !hidden;\n\t\t}\n\t\tif ( hidden ) {\n\t\t\tjQuery( elem ).show();\n\t\t} else {\n\t\t\tanim.done( function() {\n\t\t\t\tjQuery( elem ).hide();\n\t\t\t} );\n\t\t}\n\t\tanim.done( function() {\n\t\t\tvar prop;\n\n\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\tfor ( prop in orig ) {\n\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t}\n\t\t} );\n\t\tfor ( prop in orig ) {\n\t\t\ttween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\n\t\t\tif ( !( prop in dataShow ) ) {\n\t\t\t\tdataShow[ prop ] = tween.start;\n\t\t\t\tif ( hidden ) {\n\t\t\t\t\ttween.end = tween.start;\n\t\t\t\t\ttween.start = prop === \"width\" || prop === \"height\" ? 1 : 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t// If this is a noop like .hide().hide(), restore an overwritten display value\n\t} else if ( ( display === \"none\" ? defaultDisplay( elem.nodeName ) : display ) === \"inline\" ) {\n\t\tstyle.display = display;\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = jQuery.camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( jQuery.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length ; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t} else {\n\t\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length ; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length ; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( jQuery.isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tjQuery.proxy( result.stop, result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( jQuery.isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\t// attach callbacks from options\n\treturn animation.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( jQuery.isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnotwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length ; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tjQuery.isFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !jQuery.isFunction( easing ) && easing\n\t};\n\n\topt.duration = jQuery.fx.off ? 0 : typeof opt.duration === \"number\" ?\n\t\topt.duration : opt.duration in jQuery.fx.speeds ?\n\t\t\tjQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( jQuery.isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHidden ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue && type !== false ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = jQuery.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Checks the timer has not already been removed\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tif ( timer() ) {\n\t\tjQuery.fx.start();\n\t} else {\n\t\tjQuery.timers.pop();\n\t}\n};\n\njQuery.fx.interval = 13;\njQuery.fx.start = function() {\n\tif ( !timerId ) {\n\t\ttimerId = window.setInterval( jQuery.fx.tick, jQuery.fx.interval );\n\t}\n};\n\njQuery.fx.stop = function() {\n\twindow.clearInterval( timerId );\n\n\ttimerId = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\n// http://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: iOS<=5.1, Android<=4.2+\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE<=11+\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: Android<=2.3\n\t// Options inside disabled selects are incorrectly marked as disabled\n\tselect.disabled = true;\n\tsupport.optDisabled = !opt.disabled;\n\n\t// Support: IE<=11+\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// All attributes are lowercase\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\tname = name.toLowerCase();\n\t\t\thooks = jQuery.attrHooks[ name ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tjQuery.nodeName( elem, \"input\" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name, propName,\n\t\t\ti = 0,\n\t\t\tattrNames = value && value.match( rnotwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\tpropName = jQuery.propFix[ name ] || name;\n\n\t\t\t\t// Boolean attributes get special treatment (#10870)\n\t\t\t\tif ( jQuery.expr.match.bool.test( name ) ) {\n\n\t\t\t\t\t// Set corresponding property to false\n\t\t\t\t\telem[ propName ] = false;\n\t\t\t\t}\n\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle;\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ name ];\n\t\t\tattrHandle[ name ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tname.toLowerCase() :\n\t\t\t\tnull;\n\t\t\tattrHandle[ name ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\t// Use proper attribute retrieval(#12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\treturn tabindex ?\n\t\t\t\t\tparseInt( tabindex, 10 ) :\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\t\trclickable.test( elem.nodeName ) && elem.href ?\n\t\t\t\t\t\t\t0 :\n\t\t\t\t\t\t\t-1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11 only\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n\n\n\nvar rclass = /[\\t\\r\\n\\f]/g;\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( typeof value === \"string\" && value ) {\n\t\t\tclasses = value.match( rnotwhite ) || [];\n\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\t\t\t\tcur = elem.nodeType === 1 &&\n\t\t\t\t\t( \" \" + curValue + \" \" ).replace( rclass, \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = jQuery.trim( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tif ( typeof value === \"string\" && value ) {\n\t\t\tclasses = value.match( rnotwhite ) || [];\n\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 &&\n\t\t\t\t\t( \" \" + curValue + \" \" ).replace( rclass, \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = jQuery.trim( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value;\n\n\t\tif ( typeof stateVal === \"boolean\" && type === \"string\" ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar className, i, self, classNames;\n\n\t\t\tif ( type === \"string\" ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\ti = 0;\n\t\t\t\tself = jQuery( this );\n\t\t\t\tclassNames = value.match( rnotwhite ) || [];\n\n\t\t\t\twhile ( ( className = classNames[ i++ ] ) ) {\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, \"__className__\", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( \"class\",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\tdataPriv.get( this, \"__className__\" ) || \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + getClass( elem ) + \" \" ).replace( rclass, \" \" )\n\t\t\t\t\t.indexOf( className ) > -1\n\t\t\t) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\nvar rreturn = /\\r/g,\n\trspaces = /[\\x20\\t\\r\\n\\f]+/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, isFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\treturn typeof ret === \"string\" ?\n\n\t\t\t\t\t// Handle most common string cases\n\t\t\t\t\tret.replace( rreturn, \"\" ) :\n\n\t\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\t\tret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tisFunction = jQuery.isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( isFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( jQuery.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE10-11+\n\t\t\t\t\t// option.text throws exceptions (#14686, #14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tjQuery.trim( jQuery.text( elem ) ).replace( rspaces, \" \" );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\" || index < 0,\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length,\n\t\t\t\t\ti = index < 0 ?\n\t\t\t\t\t\tmax :\n\t\t\t\t\t\tone ? index : 0;\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// IE8-9 doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t( support.optDisabled ?\n\t\t\t\t\t\t\t\t!option.disabled : option.getAttribute( \"disabled\" ) === null ) &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!jQuery.nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( jQuery.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/;\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || {} )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\t\t\t\t\telem[ type ]();\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\n\t\t\t\t// Previously, `originalEvent: {}` was set here, so stopPropagation call\n\t\t\t\t// would not be triggered on donor event, since in our own\n\t\t\t\t// jQuery.event.stopPropagation function we had a check for existence of\n\t\t\t\t// originalEvent.stopPropagation method, so, consequently it would be a noop.\n\t\t\t\t//\n\t\t\t\t// But now, this \"simulate\" function is used only for events\n\t\t\t\t// for which stopPropagation() is noop, so there is no need for that anymore.\n\t\t\t\t//\n\t\t\t\t// For the 1.x branch though, guard for \"click\" and \"submit\"\n\t\t\t\t// events is still used, but was moved to jQuery.event.stopPropagation function\n\t\t\t\t// because `originalEvent` should point to the original event for the constancy\n\t\t\t\t// with other events and for more focused logic\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\n\t\tif ( e.isDefaultPrevented() ) {\n\t\t\tevent.preventDefault();\n\t\t}\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\njQuery.each( ( \"blur focus focusin focusout load resize scroll unload click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup error contextmenu\" ).split( \" \" ),\n\tfunction( i, name ) {\n\n\t// Handle event binding\n\tjQuery.fn[ name ] = function( data, fn ) {\n\t\treturn arguments.length > 0 ?\n\t\t\tthis.on( name, null, data, fn ) :\n\t\t\tthis.trigger( name );\n\t};\n} );\n\njQuery.fn.extend( {\n\thover: function( fnOver, fnOut ) {\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t}\n} );\n\n\n\n\nsupport.focusin = \"onfocusin\" in window;\n\n\n// Support: Firefox\n// Firefox doesn't have focus(in | out) events\n// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n//\n// Support: Chrome, Safari\n// focus(in | out) events fire after focus & blur events,\n// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n// Related ticket - https://code.google.com/p/chromium/issues/detail?id=449857\nif ( !support.focusin ) {\n\tjQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );\n\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.access( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tdataPriv.remove( doc, fix );\n\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.access( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t} );\n}\nvar location = window.location;\n\nvar nonce = jQuery.now();\n\nvar rquery = ( /\\?/ );\n\n\n\n// Support: Android 2.3\n// Workaround failure to string-cast null input\njQuery.parseJSON = function( data ) {\n\treturn JSON.parse( data + \"\" );\n};\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE9\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {\n\t\txml = undefined;\n\t}\n\n\tif ( !xml || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\tjQuery.error( \"Invalid XML: \" + data );\n\t}\n\treturn xml;\n};\n\n\nvar\n\trhash = /#.*$/,\n\trts = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t * - BEFORE asking for a transport\n\t * - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document.createElement( \"a\" );\n\toriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || [];\n\n\t\tif ( jQuery.isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": jQuery.parseJSON,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// The jqXHR state\n\t\t\tstate = 0,\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( state === 2 ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match;\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn state === 2 ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tvar lname = name.toLowerCase();\n\t\t\t\t\tif ( !state ) {\n\t\t\t\t\t\tname = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( !state ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( state < 2 ) {\n\t\t\t\t\t\t\tfor ( code in map ) {\n\n\t\t\t\t\t\t\t\t// Lazy-add the new callback in a way that preserves old ones\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR ).complete = completeDeferred.add;\n\t\tjqXHR.success = jqXHR.done;\n\t\tjqXHR.error = jqXHR.fail;\n\n\t\t// Remove hash character (#7531: and string promotion)\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (#10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" ).replace( rhash, \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket #12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = jQuery.trim( s.dataType || \"*\" ).toLowerCase().match( rnotwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document.createElement( \"a\" );\n\n\t\t\t// Support: IE8-11+\n\t\t\t// IE throws exception if url is malformed, e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE8-11+\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( state === 2 ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\tcacheURL = s.url;\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// If data is available, append data to url\n\t\t\tif ( s.data ) {\n\t\t\t\tcacheURL = ( s.url += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data );\n\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add anti-cache in url if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\ts.url = rts.test( cacheURL ) ?\n\n\t\t\t\t\t// If there is already a '_' parameter, set its value\n\t\t\t\t\tcacheURL.replace( rts, \"$1_=\" + nonce++ ) :\n\n\t\t\t\t\t// Otherwise add one to the end\n\t\t\t\t\tcacheURL + ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + nonce++;\n\t\t\t}\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tfor ( i in { success: 1, error: 1, complete: 1 } ) {\n\t\t\tjqXHR[ i ]( s[ i ] );\n\t\t}\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( state === 2 ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tstate = 1;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Propagate exception as error if not done\n\t\t\t\tif ( state < 2 ) {\n\t\t\t\t\tdone( -1, e );\n\n\t\t\t\t// Simply rethrow otherwise\n\t\t\t\t} else {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Called once\n\t\t\tif ( state === 2 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// State is \"done\" now\n\t\t\tstate = 2;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( jQuery.isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\n\njQuery._evalUrl = function( url ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (#11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tasync: false,\n\t\tglobal: false,\n\t\t\"throws\": true\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapAll( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( this[ 0 ] ) {\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar isFunction = jQuery.isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function() {\n\t\treturn this.parent().each( function() {\n\t\t\tif ( !jQuery.nodeName( this, \"body\" ) ) {\n\t\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t\t}\n\t\t} ).end();\n\t}\n} );\n\n\njQuery.expr.filters.hidden = function( elem ) {\n\treturn !jQuery.expr.filters.visible( elem );\n};\njQuery.expr.filters.visible = function( elem ) {\n\n\t// Support: Opera <= 12.12\n\t// Opera reports offsetWidths and offsetHeights less than zero on some elements\n\t// Use OR instead of AND as the element is not visible if either is true\n\t// See tickets #10406 and #13132\n\treturn elem.offsetWidth > 0 || elem.offsetHeight > 0 || elem.getClientRects().length > 0;\n};\n\n\n\n\nvar r20 = /%20/g,\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( jQuery.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && jQuery.type( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, value ) {\n\n\t\t\t// If value is a function, invoke it and return its value\n\t\t\tvalue = jQuery.isFunction( value ) ? value() : ( value == null ? \"\" : value );\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" + encodeURIComponent( value );\n\t\t};\n\n\t// Set traditional to true for jQuery <= 1.3.2 behavior.\n\tif ( traditional === undefined ) {\n\t\ttraditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" ).replace( r20, \"+\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} )\n\t\t.filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} )\n\t\t.map( function( i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\treturn val == null ?\n\t\t\t\tnull :\n\t\t\t\tjQuery.isArray( val ) ?\n\t\t\t\t\tjQuery.map( val, function( val ) {\n\t\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t\t} ) :\n\t\t\t\t\t{ name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE9\n\t\t// #1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback, errorCallback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\txhr.open(\n\t\t\t\t\toptions.type,\n\t\t\t\t\toptions.url,\n\t\t\t\t\toptions.async,\n\t\t\t\t\toptions.username,\n\t\t\t\t\toptions.password\n\t\t\t\t);\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\n\t\t\t\t\t\t\t\t// Support: IE9\n\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\tif ( typeof xhr.status !== \"number\" ) {\n\t\t\t\t\t\t\t\t\tcomplete( 0, \"error\" );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see #8605, #14207\n\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t// Support: IE9 only\n\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) !== \"text\" ||\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\terrorCallback = xhr.onerror = callback( \"error\" );\n\n\t\t\t\t// Support: IE9\n\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t// to handle uncaught aborts\n\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t} else {\n\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = callback( \"abort\" );\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// #14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\n\t// This transport only deals with cross domain requests\n\tif ( s.crossDomain ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"<script>\" ).prop( {\n\t\t\t\t\tcharset: s.scriptCharset,\n\t\t\t\t\tsrc: s.url\n\t\t\t\t} ).on(\n\t\t\t\t\t\"load error\",\n\t\t\t\t\tcallback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === \"error\" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\tdocument.head.appendChild( script[ 0 ] );\n\t\t\t},\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup( {\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n} );\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t( s.contentType || \"\" )\n\t\t\t\t\t.indexOf( \"application/x-www-form-urlencoded\" ) === 0 &&\n\t\t\t\trjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[ \"script json\" ] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// Force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always( function() {\n\n\t\t\t// If previous value didn't exist - remove it\n\t\t\tif ( overwritten === undefined ) {\n\t\t\t\tjQuery( window ).removeProp( callbackName );\n\n\t\t\t// Otherwise restore preexisting value\n\t\t\t} else {\n\t\t\t\twindow[ callbackName ] = overwritten;\n\t\t\t}\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\n\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// Save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && jQuery.isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t} );\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n} );\n\n\n\n\n// Argument \"data\" should be string of html\n// context (optional): If specified, the fragment will be created in this context,\n// defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\tcontext = context || document;\n\n\tvar parsed = rsingleTag.exec( data ),\n\t\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[ 1 ] ) ];\n\t}\n\n\tparsed = buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\n// Keep a copy of the old load method\nvar _load = jQuery.fn.load;\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tif ( typeof url !== \"string\" && _load ) {\n\t\treturn _load.apply( this, arguments );\n\t}\n\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf( \" \" );\n\n\tif ( off > -1 ) {\n\t\tselector = jQuery.trim( url.slice( off ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( jQuery.isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax( {\n\t\t\turl: url,\n\n\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t// Make value of this field explicit since\n\t\t\t// user can override it through ajaxSetup method\n\t\t\ttype: type || \"GET\",\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t} ).done( function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery( \"<div>\" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t// but they are ignored because response was set above.\n\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t} ).always( callback && function( jqXHR, status ) {\n\t\t\tself.each( function() {\n\t\t\t\tcallback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t} );\n\t\t} );\n\t}\n\n\treturn this;\n};\n\n\n\n\n// Attach a bunch of functions for handling common AJAX events\njQuery.each( [\n\t\"ajaxStart\",\n\t\"ajaxStop\",\n\t\"ajaxComplete\",\n\t\"ajaxError\",\n\t\"ajaxSuccess\",\n\t\"ajaxSend\"\n], function( i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n} );\n\n\n\n\njQuery.expr.filters.animated = function( elem ) {\n\treturn jQuery.grep( jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t} ).length;\n};\n\n\n\n\n/**\n * Gets a window from an element\n */\nfunction getWindow( elem ) {\n\treturn jQuery.isWindow( elem ) ? elem : elem.nodeType === 9 && elem.defaultView;\n}\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// Set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf( \"auto\" ) > -1;\n\n\t\t// Need to be able to calculate position if either\n\t\t// top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( jQuery.isFunction( options ) ) {\n\n\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\toptions = options.call( elem, i, jQuery.extend( {}, curOffset ) );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend( {\n\toffset: function( options ) {\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each( function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t} );\n\t\t}\n\n\t\tvar docElem, win,\n\t\t\telem = this[ 0 ],\n\t\t\tbox = { top: 0, left: 0 },\n\t\t\tdoc = elem && elem.ownerDocument;\n\n\t\tif ( !doc ) {\n\t\t\treturn;\n\t\t}\n\n\t\tdocElem = doc.documentElement;\n\n\t\t// Make sure it's not a disconnected DOM node\n\t\tif ( !jQuery.contains( docElem, elem ) ) {\n\t\t\treturn box;\n\t\t}\n\n\t\tbox = elem.getBoundingClientRect();\n\t\twin = getWindow( doc );\n\t\treturn {\n\t\t\ttop: box.top + win.pageYOffset - docElem.clientTop,\n\t\t\tleft: box.left + win.pageXOffset - docElem.clientLeft\n\t\t};\n\t},\n\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// Fixed elements are offset from window (parentOffset = {top:0, left: 0},\n\t\t// because it is its only offset parent\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\n\t\t\t// Assume getBoundingClientRect is there when computed position is fixed\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\n\t\t\t// Get *real* offsetParent\n\t\t\toffsetParent = this.offsetParent();\n\n\t\t\t// Get correct offsets\n\t\t\toffset = this.offset();\n\t\t\tif ( !jQuery.nodeName( offsetParent[ 0 ], \"html\" ) ) {\n\t\t\t\tparentOffset = offsetParent.offset();\n\t\t\t}\n\n\t\t\t// Add offsetParent borders\n\t\t\tparentOffset.top += jQuery.css( offsetParent[ 0 ], \"borderTopWidth\", true );\n\t\t\tparentOffset.left += jQuery.css( offsetParent[ 0 ], \"borderLeftWidth\", true );\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\t// This method will return documentElement in the following cases:\n\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t// documentElement of the parent window\n\t// 2) For the hidden or detached element\n\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t//\n\t// but those exceptions were never presented as a real life use-cases\n\t// and might be considered as more preferable results.\n\t//\n\t// This logic, however, is not guaranteed and can change at any point in the future\n\toffsetParent: function() {\n\t\treturn this.map( function() {\n\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\twhile ( offsetParent && jQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || documentElement;\n\t\t} );\n\t}\n} );\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = \"pageYOffset\" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\t\t\tvar win = getWindow( elem );\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length );\n\t};\n} );\n\n// Support: Safari<7-8+, Chrome<37-44+\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// Blink bug: https://code.google.com/p/chromium/issues/detail?id=229280\n// getComputedStyle returns percent when specified for top/left/bottom/right;\n// rather than make the css module depend on the offset module, just check for it here\njQuery.each( [ \"top\", \"left\" ], function( i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\n\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n} );\n\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( { padding: \"inner\" + name, content: type, \"\": \"outer\" + name },\n\t\tfunction( defaultExtra, funcName ) {\n\n\t\t// Margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( jQuery.isWindow( elem ) ) {\n\n\t\t\t\t\t// As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there\n\t\t\t\t\t// isn't a whole lot we can do. See pull request at this URL for discussion:\n\t\t\t\t\t// https://github.com/jquery/jquery/pull/764\n\t\t\t\t\treturn elem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable, null );\n\t\t};\n\t} );\n} );\n\n\njQuery.fn.extend( {\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ?\n\t\t\tthis.off( selector, \"**\" ) :\n\t\t\tthis.off( types, selector || \"**\", fn );\n\t},\n\tsize: function() {\n\t\treturn this.length;\n\t}\n} );\n\njQuery.fn.andSelf = jQuery.fn.addBack;\n\n\n\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t} );\n}\n\n\n\nvar\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in AMD\n// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (#13566)\nif ( !noGlobal ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\nreturn jQuery;\n}));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/jquery/dist/jquery.js\n ** module id = 3\n ** module chunks = 1 2 3 5 6\n **/","/**\r\n * Created by gavorhes on 12/10/2015.\r\n */\r\n\r\n\r\n/**\r\n * create a namespace on the gv object\r\n * @param {string} namespace to create\r\n * @returns {object} object representing the namespace\r\n */\r\nfunction provide(namespace){\r\n \"use strict\";\r\n if (typeof window['gv'] == 'undefined'){\r\n window['gv'] = {};\r\n }\r\n\r\n let parts = namespace.split('.');\r\n let nameSpace = window['gv'];\r\n\r\n for (let i=0; i< parts.length; i++){\r\n let newObject = nameSpace[parts[i]];\r\n\r\n if (typeof newObject == 'undefined'){\r\n nameSpace[parts[i]] = {};\r\n }\r\n\r\n nameSpace = nameSpace[parts[i]];\r\n }\r\n\r\n return nameSpace;\r\n}\r\n\r\nprovide('util');\r\nwindow['gv'].util.provide = provide;\r\n\r\nexport default provide;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/util/provide.ts\n **/","\r\n\r\nimport Timer = NodeJS.Timer;\r\n/**\r\n * Created by gavorhes on 11/2/2015.\r\n */\r\n\r\nconst $ = require('jquery');\r\nimport provide from '../util/provide';\r\nimport {rangeChange} from './range-change';\r\n\r\n\r\nlet nm = provide('jQueryPlugin');\r\n\r\n/**\r\n * @callback mediaCallback\r\n * @param {number} tm\r\n */\r\n\r\nfunction timeToLocalDateString(tm) {\r\n \"use strict\";\r\n let d = new Date(tm);\r\n let p1 = d.toLocaleTimeString().split(' ');\r\n let p2 = p1[0].split(':');\r\n p2 = p2.slice(0, 2);\r\n\r\n return d.toLocaleDateString() + '<br>' + p2.join(':') + ' ' + p1[1];\r\n}\r\n\r\n\r\nexport class MediaControl {\r\n _container: JQuery;\r\n _min: number;\r\n _max: number;\r\n _playInterval: number;\r\n _step: number;\r\n _currentValue: number;\r\n\r\n _playing: boolean;\r\n\r\n _$btnStop: JQuery;\r\n _$slider: JQuery;\r\n _$valLabelVal: JQuery;\r\n _$valLabelMin: JQuery;\r\n _$valLabelMax: JQuery;\r\n _interval: Timer;\r\n _showAsDate: boolean;\r\n\r\n _func: Function;\r\n\r\n constructor(element: JQuery|HTMLElement|string, min = 0, max = 100, val= 0, step = 5, func: Function = ()=>{}, playInterval = 5, showAsDate= false) {\r\n\r\n if (typeof element == 'string'){\r\n this._container = $('#' + element);\r\n }\r\n else if (typeof element['style'] !== 'undefined'){\r\n this._container = $(element);\r\n } else {\r\n this._container = element as JQuery;\r\n }\r\n\r\n this._container.addClass('media-control-container');\r\n this._playInterval = playInterval;\r\n this._interval = undefined;\r\n this._func = func;\r\n\r\n this._showAsDate = showAsDate;\r\n\r\n this._currentValue = undefined;\r\n this._min = undefined;\r\n this._max = undefined;\r\n this._step = undefined;\r\n this._playing = false;\r\n\r\n let htmlStr =\r\n '<span class=\"media-player-button media-back\"></span>' +\r\n '<span class=\"media-player-button media-play\"></span>' +\r\n '<span class=\"media-player-button media-pause media-disabled\"></span>' +\r\n '<span class=\"media-player-button media-stop media-disabled\" ></span>' +\r\n '<span class=\"media-player-button media-ahead\"></span>' +\r\n `<input type=\"range\">` +\r\n `<div class=\"media-control-value-label-container\">` +\r\n `<span class=\"media-control-value-label-min\"></span>` +\r\n `<span class=\"media-control-value-label-val\"></span>` +\r\n `<span class=\"media-control-value-label-max\"></span>` +\r\n `</div>`;\r\n\r\n this._container.append(htmlStr);\r\n\r\n // let btnPause = this._container.find('.media-pause');\r\n let btnPlay = this._container.find('.media-play');\r\n this._$btnStop = this._container.find('.media-stop');\r\n let btnAhead = this._container.find('.media-ahead');\r\n let btnBack = this._container.find('.media-back');\r\n this._$slider = this._container.find('input[type=range]');\r\n\r\n this._$valLabelMin = this._container.find('.media-control-value-label-min');\r\n this._$valLabelVal = this._container.find('.media-control-value-label-val');\r\n this._$valLabelMax = this._container.find('.media-control-value-label-max');\r\n\r\n this.setMinMaxValueStep(min, max, val, step);\r\n\r\n rangeChange(this._$slider,(newVal) => { this.currentValue = newVal;}, 100);\r\n\r\n let ___this = this;\r\n\r\n btnPlay.click(function () {\r\n let $this = $(this);\r\n $this.addClass('media-disabled');\r\n ___this._$btnStop.removeClass('media-disabled');\r\n btnAhead.addClass('media-locked');\r\n btnBack.addClass('media-locked');\r\n ___this._$slider.prop('disabled', true);\r\n ___this._playing = true;\r\n\r\n ___this._interval = setInterval(function () {\r\n ___this.currentValue += ___this._step;\r\n }, ___this._playInterval);\r\n });\r\n\r\n this._$btnStop.click(function () {\r\n clearInterval(___this._interval);\r\n let $this = $(this);\r\n $this.addClass('media-disabled');\r\n btnPlay.removeClass('media-disabled');\r\n btnAhead.removeClass('media-locked');\r\n btnBack.removeClass('media-locked');\r\n ___this._$slider.prop('disabled', false);\r\n ___this._playing = false;\r\n });\r\n\r\n btnAhead.click(function () {\r\n ___this.currentValue = ___this.currentValue + ___this._step;\r\n });\r\n\r\n btnBack.click(function () {\r\n ___this.currentValue = ___this.currentValue - ___this._step;\r\n });\r\n }\r\n\r\n stopPlaying(){\r\n if (this._playing){\r\n this._$btnStop.trigger('click');\r\n }\r\n }\r\n\r\n get playing(){\r\n return this._playing;\r\n }\r\n\r\n get min() {\r\n return this._min;\r\n }\r\n\r\n get max() {\r\n return this._max;\r\n }\r\n\r\n get step() {\r\n return this._step;\r\n }\r\n\r\n get currentValue() {\r\n return this._currentValue;\r\n }\r\n\r\n set currentValue(newValue) {\r\n if (newValue > this._max) {\r\n newValue = this._min;\r\n } else if (newValue < this._min) {\r\n newValue = this._max;\r\n }\r\n this._currentValue = newValue;\r\n this._$slider.val(this._currentValue.toFixed(2));\r\n\r\n if (this._showAsDate) {\r\n this._$valLabelVal.html(timeToLocalDateString(this.currentValue));\r\n } else {\r\n this._$valLabelVal.html(this.currentValue.toString());\r\n }\r\n\r\n this._func(newValue);\r\n }\r\n\r\n /**\r\n * set min and max value with step\r\n * @param {number} newMin the new min\r\n * @param {number} newMax the new mas\r\n * @param {number} [newValue=newMin] the value to set\r\n * @param {number} [newStep=(newMax-newMin)/20] step value\r\n */\r\n setMinMaxValueStep(newMin, newMax, newValue, newStep) {\r\n this._min = newMin;\r\n this._max = newMax;\r\n\r\n newValue = typeof newValue == 'number' ? newValue : newMin;\r\n newStep = typeof newStep == 'number' ? newStep : (newMax-newMin)/20;\r\n\r\n this._currentValue = newValue;\r\n this._step = newStep;\r\n\r\n this._$slider.prop('min', this.min.toString());\r\n this._$slider.prop('max', this.max.toString());\r\n this._$slider.prop('step', this.step.toString());\r\n this._$slider.val(this.currentValue.toString());\r\n\r\n if (this._showAsDate) {\r\n this._$valLabelMin.html(timeToLocalDateString(this._min));\r\n this._$valLabelVal.html(timeToLocalDateString(this.currentValue));\r\n this._$valLabelMax.html(timeToLocalDateString(this._max));\r\n } else {\r\n this._$valLabelMin.html(this._min.toString());\r\n this._$valLabelVal.html(this.currentValue.toString());\r\n this._$valLabelMax.html(this._max.toString());\r\n }\r\n }\r\n\r\n /**\r\n *\r\n * @param {mediaCallback} newFunc the callback on change\r\n */\r\n set changeFunction(newFunc) {\r\n this._func = newFunc;\r\n }\r\n}\r\n\r\nnm.MediaControl = MediaControl;\r\n\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/domUtil/animate-buttons.ts\n **/","\r\n\r\nlet mouseIn = false;\r\nlet mouseDown = false;\r\nlet timeout = null;\r\nlet dragged = false;\r\nlet lastVal;\r\nconst $ = require('jquery');\r\n\r\n\r\n/**\r\n * callback on range change interaction, context of this is the firing dom element\r\n * @callback rangeChangeCallback\r\n * @param {number} newValue\r\n * @param {number} ratio value from 0 to 1 relative of the value to the min and max\r\n * @param {object} evt\r\n */\r\n\r\n/***\r\n * callback funcion after the slider has been moved\r\n */\r\nexport interface rangeChangedCallback{\r\n /**\r\n *\r\n * @param newValue new value of the slider\r\n * @param ratio ratio from low to high, 0 to 1\r\n * @param evt the original event\r\n */\r\n (newValue: number, ratio: number, evt: Event): any\r\n}\r\n\r\n\r\n/**\r\n * Created by gavorhes on 11/2/2015.\r\n */\r\n\r\nfunction triggerCallback(callback: rangeChangedCallback, evt) {\r\n \"use strict\";\r\n\r\n let val = parseFloat(this.value);\r\n let min = parseFloat(this.min);\r\n let max = parseFloat(this.max);\r\n let step = parseFloat(this.step);\r\n\r\n if (max - val < step){\r\n val = max;\r\n }\r\n\r\n let percent = (val - min) / (max - min);\r\n\r\n if (typeof lastVal == 'number' && val == lastVal){\r\n return;\r\n }\r\n lastVal = val;\r\n callback(val, percent, evt);\r\n}\r\n\r\n\r\n\r\n/**\r\n * Add a variety of listeners for range inputs applied to a common callback\r\n * @param $slider - jquery reference to the slider\r\n * @param {rangeChangeCallback} callback - the callback\r\n * @param {number} [changeTimeout=75] before the callback is called\r\n * @this {jQuery}\r\n * @returns {jQuery} the jQuery object\r\n */\r\nexport function rangeChange ($slider: JQuery, callback: rangeChangedCallback, changeTimeout: number) {\r\n\r\n changeTimeout = typeof changeTimeout == 'number' ? changeTimeout : 75;\r\n\r\n $slider.mouseenter(function () {\r\n mouseIn = true;\r\n });\r\n\r\n $slider.mouseleave(function () {\r\n mouseIn = false;\r\n mouseDown = false;\r\n });\r\n\r\n $slider.mousedown(function () {\r\n mouseDown = true;\r\n });\r\n\r\n $slider.mouseup(function () {\r\n mouseDown = false;\r\n });\r\n\r\n $slider.mousemove(\r\n /**\r\n *\r\n * @param {object} evt - event properties\r\n * @this {HTMLElement}\r\n */\r\n function (evt) {\r\n if (!(mouseIn && mouseDown)) {\r\n return;\r\n }\r\n\r\n dragged = true;\r\n\r\n if (lastVal == this['value']) {\r\n return;\r\n }\r\n lastVal = this['value'];\r\n\r\n if (timeout != null) {\r\n clearTimeout(timeout);\r\n }\r\n\r\n let _this = this;\r\n\r\n timeout = setTimeout(function () {\r\n triggerCallback.call(_this, callback, evt);\r\n timeout = null;\r\n\r\n }, changeTimeout);\r\n });\r\n\r\n $slider.keyup(\r\n /**\r\n *\r\n * @param {object} evt - event properties\r\n */\r\n function (evt) {\r\n if (evt.keyCode == 37 || evt.keyCode == 39) {\r\n triggerCallback.call(this, callback, evt);\r\n }\r\n });\r\n\r\n $slider.change(function (evt) {\r\n if (dragged) {\r\n dragged = false;\r\n\r\n return;\r\n }\r\n triggerCallback.call(this, callback, evt);\r\n });\r\n\r\n return this;\r\n}\r\n\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/domUtil/range-change.ts\n **/"],"sourceRoot":""} \ No newline at end of file diff --git a/test-html/js/reacttst.js b/test-html/js/reacttst.js new file mode 100644 index 0000000000000000000000000000000000000000..2870ce292a846ab3884439364f9b9f00cf20aa6c --- /dev/null +++ b/test-html/js/reacttst.js @@ -0,0 +1,66 @@ +/******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) +/******/ return installedModules[moduleId].exports; +/******/ +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ exports: {}, +/******/ id: moduleId, +/******/ loaded: false +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.loaded = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(0); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ function(module, exports) { + + /** + * Created by gavorhes on 9/22/2016. + */ + // import * as React from "react"; + // import * as ReactDOM from "react/lib/"; + // + // import { Hello } from "../_scratch/Hello"; + // + // console.log('I am in a tsx file for some reason'); + // + // ReactDOM.render( + // <Hello compiler="TypeScript" framework="React" />, + // document.getElementById("example") + // ); + // + + +/***/ } +/******/ ]); +//# sourceMappingURL=reacttst.js.map \ No newline at end of file diff --git a/test-html/js/reacttst.js.map b/test-html/js/reacttst.js.map new file mode 100644 index 0000000000000000000000000000000000000000..c7e19f3a4611140438a50d3e3a7c0bf4913aa778 --- /dev/null +++ b/test-html/js/reacttst.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///webpack/bootstrap ef760a4c28bc3d5b9fb4?77b8***","webpack:///./src-ts/_test/reacttst.tsx"],"names":[],"mappings":";AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,uBAAe;AACf;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;;;;;ACtCA;;IAEG;AAEH,mCAAkC;AAClC,2CAA0C;AAC1C,GAAE;AACF,8CAA6C;AAC7C,GAAE;AACF,sDAAqD;AACrD,GAAE;AACF,oBAAmB;AACnB,0DAAyD;AACzD,0CAAyC;AACzC,MAAK;AACL,GAAE","file":"reacttst.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap ef760a4c28bc3d5b9fb4\n **/","/**\r\n * Created by gavorhes on 9/22/2016.\r\n */\r\n\r\n// import * as React from \"react\";\r\n// import * as ReactDOM from \"react/lib/\";\r\n//\r\n// import { Hello } from \"../_scratch/Hello\";\r\n//\r\n// console.log('I am in a tsx file for some reason');\r\n//\r\n// ReactDOM.render(\r\n// <Hello compiler=\"TypeScript\" framework=\"React\" />,\r\n// document.getElementById(\"example\")\r\n// );\r\n//\r\n\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/_test/reacttst.tsx\n **/"],"sourceRoot":""} \ No newline at end of file diff --git a/test-html/js/simple_map.js b/test-html/js/simple_map.js new file mode 100644 index 0000000000000000000000000000000000000000..6186a1b68819b6a7f1fb6537bc24a1a0080d6a20 --- /dev/null +++ b/test-html/js/simple_map.js @@ -0,0 +1,12656 @@ +/******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) +/******/ return installedModules[moduleId].exports; +/******/ +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ exports: {}, +/******/ id: moduleId, +/******/ loaded: false +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.loaded = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(0); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ function(module, exports, __webpack_require__) { + + "use strict"; + /** + * Created by gavorhes on 9/23/2016. + */ + var quickMap_1 = __webpack_require__(1); + var LayerEsriMapServer_1 = __webpack_require__(15); + var LayerLegend_1 = __webpack_require__(24); + var map = quickMap_1.quickMap(); + var wisDotRegions = new LayerEsriMapServer_1.LayerEsriMapServer('http://transportal.cee.wisc.edu/applications/arcgis2/rest/services/MetaManager/Metamanager_regions/MapServer'); + var sixYearPlan = new LayerEsriMapServer_1.LayerEsriMapServer('http://transportal.cee.wisc.edu/applications/arcgis2/rest/services/MetaManager/SixYearPlan/MapServer', { name: 'Six Year Plan', legendCollapse: true }); + map.addLayer(wisDotRegions.olLayer); + map.addLayer(sixYearPlan.olLayer); + var layerArray = [ + wisDotRegions, + sixYearPlan + ]; + var legend = new LayerLegend_1.default(layerArray, 'legend-container', {}); + + +/***/ }, +/* 1 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Created by gavorhes on 12/15/2015. + */ + "use strict"; + var quickMapBase_1 = __webpack_require__(2); + var provide_1 = __webpack_require__(4); + var mapMove_1 = __webpack_require__(7); + var mapPopup_1 = __webpack_require__(12); + var nm = provide_1.default('olHelpers'); + /** + * Sets up a map with some default parameters and initializes + * mapMove and mapPopup + * + * @param {object} [options={}] config options + * @param {string} [options.divId=map] map div id + * @param {object} [options.center={}] center config object + * @param {number} [options.center.x=-10018378] center x, web mercator x or lon + * @param {number} [options.center.y=5574910] center y, web mercator y or lat + * @param {number} [options.zoom=7] zoom level + * @param {number} [options.minZoom=undefined] min zoom + * @param {number} [options.maxZoom=undefined] max zoom + * @param {boolean} [options.baseSwitcher=true] if add base map switcher + * @param {boolean} [options.fullScreen=false] if add base map switcher + * @returns the ol map + */ + function quickMap(options) { + var m = quickMapBase_1.quickMapBase(options); + mapMove_1.default.init(m); + mapPopup_1.default.init(m); + return m; + } + exports.quickMap = quickMap; + nm.quickMap = quickMap; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.default = quickMap; + + +/***/ }, +/* 2 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Created by gavorhes on 12/15/2015. + */ + "use strict"; + var $ = __webpack_require__(3); + var provide_1 = __webpack_require__(4); + var custom_ol_1 = __webpack_require__(5); + var nm = provide_1.default('olHelpers'); + /** + * Sets up a map with some default parameters and initializes + * mapMove and mapPopup + * + * @param [options={}] config options + * @param [options.divId=map] map div id + * @param [options.center={}] center config object + * @param [options.center.x=-10018378] center x, web mercator x or lon + * @param [options.center.y=5574910] center y, web mercator y or lat + * @param [options.zoom=7] zoom level + * @param [options.minZoom=undefined] min zoom + * @param [options.maxZoom=undefined] max zoom + * @param [options.baseSwitcher=true] if add base map switcher + * @param [options.fullScreen=false] if add base map switcher + * @returns the ol map + */ + function quickMapBase(options) { + options = options || {}; + options.divId = options.divId || 'map'; + options.center = options.center || { x: -10018378, y: 5574910 }; + options.zoom = typeof options.zoom == 'number' ? options.zoom : 7; + options.baseSwitcher = typeof options.baseSwitcher == 'boolean' ? options.baseSwitcher : true; + options.fullScreen = typeof options.fullScreen == 'boolean' ? options.fullScreen : false; + var $mapDiv = $('#' + options.divId); + $mapDiv.css('position', 'relative'); + var osmLayer = new custom_ol_1.ol.layer.Tile({ source: new custom_ol_1.ol.source.OSM() }); + // let satLayer = new ol.layer.Tile({visible: false, source: new ol.source.MapQuest({layer: 'sat'})}); + var osmCss = "url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMAUExURQAAADQ1NDk5OURFREtLS1FHSFlZWGJRVGJiYWdmZWxsbHRmaXBpanN0c3V0dHp5eX5+fIVzd4F3eeV0jud5juZ8k4aHhomHhoyGh5eGj5OVlJiVlZiYl5qZmJydnKOTlaKZmqKdnaOioaqqqKuzsbOvrrSysLa3tbW4uLm6ub27ub+/vbGXwbCZwbCgxLKlxrOqyLStybO3yrSxyrWzzbW2y7a1zbK4y7W6zbW8y760yrTAzbTFzrPKzrLOzrTJzrTOzr7CwbXC0LXK0LTO0L3I0bPQz7TQz7PS0bXQ0LnR0brW1bzT0r7U077V1Lzc2dqNqteUsdyXscaquuOHneaGmueHnOeJnuiBleiKn+eNoOiOoOWUpOiRo+iSpeiUpeqYpumaqOmdrPSynemgruSqtOmisOmlsuuqtequuOW1vOuxu+uxvOq1ve+xvPK0pvW3o/W5pfO5qvS7qfCwvMOuwc2/wNenxNyyzNe/0Nq31Nq51dy72Oy3wOu4wOu+xey4wO+6xO2+xfTAr/TCsvfFtPHLvvTJuMPDwMfHxcXKyc3DxMvFyMvLyM3PzcDV08DV1MTX1cbY1s7X1sjZ1sra2Mnd3M7b2c7c2tfH1tnB1t7F2d7M29fX1tLY1tDd2tHe3NTf3NnS19rZ1tva2Nnf3t3d28rh3tXg3Nnh3tzj393k39ni4N7k4N7n5uXDyOfLz+zAxu3CyOzEyezKzeDJ3eLM3uvP0u3P0ePf2+7R0u7Q1u/U0+7U1ezc0+7a2e/d2+3f3vbFzvLOwfHN0PPQw/TUx/LWyvLYzPDQ1fPe0ubc4vve4uHh3+nh3+/h2u/h3vHj2vHl3uHm4eTn4uDp5ebo4+Xo5ODq6ebq6OTv6+nl4+/j4O7l4e7n5ujp4+np5Ozq5e7s5urt6O7t6Orw6u7x6u3x7vPj5PDl4fDo4vDq5fDt5vDu6PDv7PTv6fDx6vHx7fH17fXw6fXy7fb07/bz8fT18vn38vr39fr48/r59Pr6+P3++//+/gAAALNTSk0AAAEAdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wBT9wclAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGHRFWHRTb2Z0d2FyZQBwYWludC5uZXQgNC4wLjlsM35OAAAFNElEQVRIS1VVCZxVUxi/9l0UIUT2bMnY43bVI2c0Y01kSWIaS0j2JEtkN41piomZrPPKQ2aQ7JKImOZlnm2493TJzDufuU1Zi+v/fee+mZ//793vnPOd7zvfes5zDBEZkBBjAcIjb+Iiotqgdhat8AMK0vl7/R9N7GiWtshqIr+EZ5gYKibyUsXY1l/mfFpssvUlWQ0FkU3gy4+RB/+kwYcO8pRSnldcOU/r2lAHARSwk2ORgEmOdC1EsuRiYSqMPwwroMIraZk5V2fYJQjCKfZrRmh3gSAZi2i4b7wSylWu8EqZwS59JkFUaW96JbNSc+CEUmt4rorwuZmWdDaoc+uZETuQlTCU5xYzR7muUnVUVo+BcRhre/VwUpasgJwhH7JkYIYA0sNxhmCwUK+lw6vCKBZehw01dEiyw4Q4aE0Z4ahDhKaFQsGnJ2BgqKoTBsNjFy0SlW6whRAZTdm8DBJmkBZhDi1j4xJQBk6ywrWUTymaCxac8lROcdauRGzQSNtA7EHUYhXyEwhhgjFUqRuO+rauhF1awFpzCsmwUbjIFBR0u1bKtyGpulW/H/cVVzkyGaIWTIR9pFAV6GK2gPMXMX8gPk9zzxXgI1kimcAltEYr+cjio1imlKpEa9rOipLm+p+CZ6Bw//qd1/f/O+GwMxbSLpyoZEcwkyh2jIks+3hmdd2jWUw4scxNysnHxU7nSspTRcJjCZGL3IsjsYJMMg5mwgx7gaIOLBFCogAgBBoNa9w+DE6I+Bs7FTgwwrJbHjWDgpYo2KwtBTcYEDuloC9geQw+k2RGnPGpTaOlq7AS+YICUz4DZVaX2TiNDhuYfTtY4geLi0IoCm3XccwM9hx4kU28StQEljDs3ZEpFGA+8dKzLmV9ymIwF5FOGn2GdJM8KLHDJbXyiYVMG9MRTLiXGGg2QKaxM3khPSRrwM9zEIardxU2w/EiA0gOeYKHzDR0V7/QGV3lKIA9ktrDArxO3gdA+k6SKoBiVwcm7NjZb9+Hnztg282TuHVZ9LOISFNt9MgyCetZVczSxnyDbl17Penq6mqpg1IhRaEO2aVLUO4/r17H8tTv6f13h71dduvZI3Y+uMdWksNSauLovJw5hsqiPIUvt0ku7/iBeUR3sksmomYWtRbAjbiLfv2lX9/V7LVG4uYnUZXhQ7f2OPCZEx9wrYWTcePEQqPEML8pl4mMdr/jlXlvHiRiJ2+MSTFY4TTSYStuvz2R/JXh+PPeGXm055J+3/YDWuNu3R3DArPutyg0ZgykMVDU9Ndm22+wYalr2rse48CnsTIFcMn73vfhNrktx1EUcZnPv6ah3Yy5cDTRdBEoGoBeah71dqFyjZDJLkWk3N3v4uuktssjWpzciMPxQeHj8nMKzcGuB0tAyzFhdCKOYWv4HwOQVwIxLG99a6uvH3sJCyO3h+k4EZ+G7+xj5f4XXksoaGrdMRzSc8ARA8+cdOuk2x6fffNNt5x+Ro1omPlrT/CQDlcNlpx4NBIWXhkx7Y3Zp3ofNR7Uv89Om/beW0TLIynHv3vs1VsOFpSWSXvfuPUf9BrRFyxgXdHoKJnQFegPOovvzz59ntrzye240ig8UQ3lDI2VqwagrKIQcLXNFL3wglN2OHdBQ6/vI3kENDVBwRb3k1XtczFbjWn4EzMYi7CF3129+JTYuRSdrGuS92g5dpqn6qXoJQs5xmL8p+Wt4hLbt0mx2OLNZR2bbPy8zJNQGFM/f/CfXZekRYFjGCWjIJpM+WiCzGBPWHhoyaAsjRT/B2Gy5yzYJkwUAAAAAElFTkSuQmCC')"; + var aerialCss = "url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMAUExURQALBgIMDQgOBwQOEQcTBwUSCwoVDAwdBw8ZDgUREwYUGAYZFQYZGgkTFQoVGQsZFAwZHBMeDhIbFBEbHAwWIA4bIREcIQ4hCQwjFw4lHBgkDB8sDxUiExIiGhAoGxohFRshGRorHQcrKQsiIQwmKgooJA0pKQ81Jw8yLRMiIxImKxUrJREuKhslJB0rIhooKRUuMBMyLhkwJhozKh48LxUzMRM9MBwzMiUvFCMtGiMwEiwzFCgzHDI+GSIsISkvJSQxIiM2LiY5Jic+Lyk0JSo0Ky49JSs9KSU1NSM7NCs2NS8+NDM1JzU9Ljg7IDJCHS1DLSNAMitCMSxIOjREITZLIDZJKDlFIjpFKztKJT1LKzJBMzpHMD1JMjpKPD1RKjlQNC1DQj5QQEA8MEJGJkBKJUJNK0lLLEJMMkVMPEpONENSLUdZL0pTLkpaLkRUMkRSPEVZMktUM0pVOklZMklZNEpcNU1ZMk1ZNUxfMk5dNkxcOVFUM1RUOFJbNVFZOVNYPVFdOVJdPFVaOVVaPVVdOlVdPVpaNlpdO0phN01hOlBiN1NhPFNoP1piPWFbPmRjPENOQEtPSURTQkJVS0xVQk1VSkxbQkxcS0heUVFXRFRcQlJfTFxeQlpeS05lQk1kSFRjQVRjSlZpQ1tkQlxlSlxpRF1rSVVnUVtlU1llXF9tU1xoXlxwSl9ramRfQmJlQ2FhSWFlSWFlTmVlSWRmTGFoQWFpRWFsRmVpRWVtRmNsSmtlRGpqRmpsS2BmWGRsUmFrW2ptUmZyR2RxTGpxTWVyU2RyW2d5V2tzUmt0WW15VG15WXFuTHNtVnFxTXF4T3h0TnJzUnJ1XHJ4VXN6Wnp0VHx1W315VXp8XGR0YGx0YHVzZXJ0aHR9ZXV+aHl9YHOCXXqBXXeCYHyCY3iEaHyIYn+JaXqKcYB5WIN6Y4SCXoCDZIGEaYCIZoOLa4iCaImJbIOOdYuMco6OeIuVcpOKbZKPc5aQb5eXe5ufg6KjhAAAAAAAAAAAAAAAAOGCeQgAAAEAdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wBT9wclAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGHRFWHRTb2Z0d2FyZQBwYWludC5uZXQgNC4wLjlsM35OAAAH80lEQVRISy1WbXQUVxm+6wqnk3Zmpxl2FG2EGg92C8GDlWptVTwa+uF3xcKmDfFzCUzDsJNsunXipglJXJbrtJWmwZNSnHD3jojRgUIm2UumIZ0JZ7JByrALbMWW0IBW8aRa4+cf76TeX3Nm3uc+z/s+7/vugl4r/aMTrT4e1pPTqnnmJNn5AyUzRnrRle/qE33dsvrBtAQVoxtpZNK3zSzYjUjviWO2Ag+R77dl7W36n/1Ep9KBPG/S+Py0PkjU/gPKQGqwTHryiWYFAXSvMairsio7SjyNsnCzh0qKImV9/7mhfHQZx2yN1O+7rXUm33MUPaboOkAJHaoIdXfJj2xWeyD8jMFEXkvIu5qzpU988gWB5zl+GS+sFe55trEVPdWZB2miq8bBVkNFO2R0qnrfkiXhcJhtDNXE6tbW97/s9O9/7ZfVhx86/CwrROpfvvxboMqeLsuqPr1j44qEwDNMOBximUiYoU8sw7BC/a7T72uEnyJDlGxZ9KcglZRyuqqrv/tSZErgOI4NgRBTIw9EmHAoFGZZnp6aGaJ2GTxfxYs8kKVUQh7WB5hQeC3LsUxoxVKW14l3BX2WcoUYPiZyLLe8teZ+iuT4GGhvV5KpKWkpyzxEr2MZgQ1xdRjfRBoH+2k6lIHjKTHPPBo8CSJISqqq4wGGOcWylIGlgvgNX1Gd8vF5f+IUIwb30ng+Gg2QfBRIMvy0jG8SVkYo4N0zvUXVRztbJ/L6xL7lUZEXBEHkuZqlS6gEAUgKJurnhFtfpACOYd8b/hVbJPqwi44a6KA0sPVjIi/SIyxb3u8KlAJ0S8jRVgrlW+nVHPdrhiXCxu42d86ByksDc80P3MkJFBFQ8Ho1lQegpWJRWFGsDsRwwv7pIyvuQW0ZkrX6NDVFbqcvaQI8vbyqzt5AARrsbKx5yhQEGs+wPO56bOK+0rcwMrOKkpUbZWYxV04UeZZv/cBKFhRL6Qdv9y4LfEDA7/thg7tTmv1a5/GnO0wl0dQg80wglZaHUmxRvjwAHOfyN0mxrpqLUpcjsK3NHYMo4R1o6eho2ZyIb2FoeOC3ILK8kZ2HQMOuWywGXUkJBCeTbYFS0+ym1h2/6UgmvnrvKYZZtIEXGf75C2cIAp5LHNd71x7uPoTjakrWH9e3KFpaatjUvJUysFw0KrLMYMW2lTg4PeUQx6kJEALvxXEmCdVyPLHtCSjBhc01XCjIgafxou+PE6KC1dhxSCwoBCc+N4P3btM84pmdSSjJnjO/nvY4LQfVyz5/I+v6IwjUOMjy+MVCxIbKupTJaEktp7cTKU42Pvjh2m/8cSpC6aPsaX/MHSuUQLVVsIa4RUTs/r/BVAexNdjdnsNG7j/rV93xheLMzKnFrPeTEQchCyCcKb25aAIn7lrAertrZwyNXM8N6zfWrFo3d2SmOEcF83x/r+OOFgrAHYWF7cELjhV7UQo/6WAIUVl9JFl8a//HZ66VpbY3I9QKZqPru77lA+iOWAIr0hKxHCmmr0othSyeIl5y3qt4xT8gSNrKEZozs8Els67rgsLOZ+ygzwMfbtNhobfgzpEyGnz7htPtzUi6PuOoj7K0WF/MXiUFxwGajRD1hjYXHXI9p406qOyinp5/tiWcDHY0jIu4n64Qfq7kliB2gemag9QbOia0PbbDMbd43SHuvxFxrAocxins7MX5Kqbe1QixKBxoV4//PfAgGCu+Rlm4SvZizyDH+0reDHp92iO0BuX3bCfItl0PEwvYLqpwXG2MHlGsQ4S8pMJZv1JGmHiEoHQDdOjwmVlEP/nE9ADKjI8xLI0OOGITfy0SbeG/C2jKUDGSlDhM9I3IpK9iup6XnbRNC7yqueNsJCCIiXzdQhnaGN+46umnEdy5U5UbUJ48LFM9GkJo8BdDOiAZ7ZIQbKhYLMqvhU2wmNxjEAsS2AI7y4nWF64duePbk7YV3zvAVLEMD9AxJRNa3KDUibV7DjnkuprMEYjScFNcaR2ceP2u9R/5k1052Ryme5phAFRswlHjAudiP4dOy7CaxLgdJh9vUlU1702/+LPa1U9fvPi9qlA4XEUBJc3dFlpsR457IDl1iPqLp7o81NQgyV19iYU38uTiv975Pd3SiwQcsGjx+v4/6fl5T7EOOMTCtpbKxfemsQq/3olQZcminADAAI0cuGLHaHOFxbuGvRk/Z9u7CULqoVR6NE0yx1avj30oRhc/jWUoIALGxkz0dg1Dl9iaI7LqOOXKsXJFwjiuEAi70Jra2nW1PL08zLBhZsMABpW5csI7TPfew9ipFKcn5k1i+1KyCWKjC3W/8dF1d666+RaabBVTFTHacjoojBNDh0NDxk+IPTlwfqJkWpbnpFHXIbLbmpxEQ3ff/Z0g/mauXsoln9wDRjy/NHsQFw3P6vWuTJ43/+FZrk2cvAFRipCKdfD9y2+pjRj78s0KdCUDKJvdV91ChngV38T20TM+gghjpJaPlpFr2xbEz5g4A/NGt5rNwdwmYGeeeMXBSLHHUIc+6RsojRH9VTUm3/mLf/64b470XvoxoTKhlMBQ2jMEzo2PjxdGMppmn1RM24bWFJqaQv4BcuJa2Sam7Zokq1ldCsz06NCBHrhwqVQYpfFj42NZexz1EW9SR/kT58nEeQKJb2fPXjjp0u/YUkwHEgLeOnf2nOuf1TRTM02CLKLTPy60/x1CCztqn7Ev+BdsC3m+30decQvW/wBNTwU+CfUQAQAAAABJRU5ErkJggg==')"; + if (options.baseSwitcher) { + } + if (options.zoom < 0 || options.zoom > 28) { + throw 'zoom out of range'; + } + if (options.center.x >= -180 && options.center.x <= 180 && options.center.y >= -90 && options.center.y <= 90) { + var p = new custom_ol_1.ol.geom.Point([options.center.x, options.center.y]); + new custom_ol_1.ol.proj.Projection({ code: "EPSG:4326" }); + p.transform(new custom_ol_1.ol.proj.Projection({ code: "EPSG:4326" }), new custom_ol_1.ol.proj.Projection({ code: "EPSG:3857" })); + var coordinates = p.getCoordinates(); + options.center.x = coordinates[0]; + options.center.y = coordinates[1]; + } + var map = new custom_ol_1.ol.Map({ + layers: [osmLayer], + target: options.divId, + controls: custom_ol_1.ol.control.defaults({ + attributionOptions: { collapsible: false } + }), + view: new custom_ol_1.ol.View({ + center: [options.center.x, options.center.y], + zoom: options.zoom, + minZoom: options.minZoom, + maxZoom: options.maxZoom + }) + }); + if (options.fullScreen) { + //TODO add full screen options to ts + map.addControl(new custom_ol_1.ol.control.FullScreen({})); + } + return map; + } + exports.quickMapBase = quickMapBase; + nm.quickMapBase = quickMapBase; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.default = quickMapBase; + + +/***/ }, +/* 3 */ +/***/ function(module, exports, __webpack_require__) { + + var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! + * jQuery JavaScript Library v2.2.3 + * http://jquery.com/ + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2016-04-05T19:26Z + */ + + (function( global, factory ) { + + if ( typeof module === "object" && typeof module.exports === "object" ) { + // For CommonJS and CommonJS-like environments where a proper `window` + // is present, execute the factory and get jQuery. + // For environments that do not have a `window` with a `document` + // (such as Node.js), expose a factory as module.exports. + // This accentuates the need for the creation of a real `window`. + // e.g. var jQuery = require("jquery")(window); + // See ticket #14549 for more info. + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + + // Pass this if window is not defined yet + }(typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + + // Support: Firefox 18+ + // Can't be in strict mode, several libs including ASP.NET trace + // the stack via arguments.caller.callee and Firefox dies if + // you try to trace through "use strict" call chains. (#13335) + //"use strict"; + var arr = []; + + var document = window.document; + + var slice = arr.slice; + + var concat = arr.concat; + + var push = arr.push; + + var indexOf = arr.indexOf; + + var class2type = {}; + + var toString = class2type.toString; + + var hasOwn = class2type.hasOwnProperty; + + var support = {}; + + + + var + version = "2.2.3", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }, + + // Support: Android<4.1 + // Make sure we trim BOM and NBSP + rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, + + // Matches dashed string for camelizing + rmsPrefix = /^-ms-/, + rdashAlpha = /-([\da-z])/gi, + + // Used by jQuery.camelCase as callback to replace() + fcamelCase = function( all, letter ) { + return letter.toUpperCase(); + }; + + jQuery.fn = jQuery.prototype = { + + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // Start with an empty selector + selector: "", + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + return num != null ? + + // Return just the one element from the set + ( num < 0 ? this[ num + this.length ] : this[ num ] ) : + + // Return all the elements in a clean array + slice.call( this ); + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + ret.context = this.context; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + each: function( callback ) { + return jQuery.each( this, callback ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map( this, function( elem, i ) { + return callback.call( elem, i, elem ); + } ) ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: arr.sort, + splice: arr.splice + }; + + jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[ 0 ] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // Skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !jQuery.isFunction( target ) ) { + target = {}; + } + + // Extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + + // Only deal with non-null/undefined values + if ( ( options = arguments[ i ] ) != null ) { + + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject( copy ) || + ( copyIsArray = jQuery.isArray( copy ) ) ) ) { + + if ( copyIsArray ) { + copyIsArray = false; + clone = src && jQuery.isArray( src ) ? src : []; + + } else { + clone = src && jQuery.isPlainObject( src ) ? src : {}; + } + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; + }; + + jQuery.extend( { + + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + isFunction: function( obj ) { + return jQuery.type( obj ) === "function"; + }, + + isArray: Array.isArray, + + isWindow: function( obj ) { + return obj != null && obj === obj.window; + }, + + isNumeric: function( obj ) { + + // parseFloat NaNs numeric-cast false positives (null|true|false|"") + // ...but misinterprets leading-number strings, particularly hex literals ("0x...") + // subtraction forces infinities to NaN + // adding 1 corrects loss of precision from parseFloat (#15100) + var realStringObj = obj && obj.toString(); + return !jQuery.isArray( obj ) && ( realStringObj - parseFloat( realStringObj ) + 1 ) >= 0; + }, + + isPlainObject: function( obj ) { + var key; + + // Not plain objects: + // - Any object or value whose internal [[Class]] property is not "[object Object]" + // - DOM nodes + // - window + if ( jQuery.type( obj ) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { + return false; + } + + // Not own constructor property must be Object + if ( obj.constructor && + !hasOwn.call( obj, "constructor" ) && + !hasOwn.call( obj.constructor.prototype || {}, "isPrototypeOf" ) ) { + return false; + } + + // Own properties are enumerated firstly, so to speed up, + // if last one is own, then all properties are own + for ( key in obj ) {} + + return key === undefined || hasOwn.call( obj, key ); + }, + + isEmptyObject: function( obj ) { + var name; + for ( name in obj ) { + return false; + } + return true; + }, + + type: function( obj ) { + if ( obj == null ) { + return obj + ""; + } + + // Support: Android<4.0, iOS<6 (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; + }, + + // Evaluates a script in a global context + globalEval: function( code ) { + var script, + indirect = eval; + + code = jQuery.trim( code ); + + if ( code ) { + + // If the code includes a valid, prologue position + // strict mode pragma, execute code by injecting a + // script tag into the document. + if ( code.indexOf( "use strict" ) === 1 ) { + script = document.createElement( "script" ); + script.text = code; + document.head.appendChild( script ).parentNode.removeChild( script ); + } else { + + // Otherwise, avoid the DOM node creation, insertion + // and removal by using an indirect global eval + + indirect( code ); + } + } + }, + + // Convert dashed to camelCase; used by the css and data modules + // Support: IE9-11+ + // Microsoft forgot to hump their vendor prefix (#9572) + camelCase: function( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); + }, + + nodeName: function( elem, name ) { + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + }, + + each: function( obj, callback ) { + var length, i = 0; + + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + // Support: Android<4.1 + trim: function( text ) { + return text == null ? + "" : + ( text + "" ).replace( rtrim, "" ); + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArrayLike( Object( arr ) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + return arr == null ? -1 : indexOf.call( arr, elem, i ); + }, + + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + for ( ; j < len; j++ ) { + first[ i++ ] = second[ j ]; + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var length, value, + i = 0, + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArrayLike( elems ) ) { + length = elems.length; + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // Bind a function to a context, optionally partially applying any + // arguments. + proxy: function( fn, context ) { + var tmp, args, proxy; + + if ( typeof context === "string" ) { + tmp = fn[ context ]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if ( !jQuery.isFunction( fn ) ) { + return undefined; + } + + // Simulated bind + args = slice.call( arguments, 2 ); + proxy = function() { + return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || jQuery.guid++; + + return proxy; + }, + + now: Date.now, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support + } ); + + // JSHint would error on this code due to the Symbol not being defined in ES5. + // Defining this global in .jshintrc would create a danger of using the global + // unguarded in another place, it seems safer to just disable JSHint for these + // three lines. + /* jshint ignore: start */ + if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; + } + /* jshint ignore: end */ + + // Populate the class2type map + jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), + function( i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); + } ); + + function isArrayLike( obj ) { + + // Support: iOS 8.2 (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, + type = jQuery.type( obj ); + + if ( type === "function" || jQuery.isWindow( obj ) ) { + return false; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; + } + var Sizzle = + /*! + * Sizzle CSS Selector Engine v2.2.1 + * http://sizzlejs.com/ + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2015-10-17 + */ + (function( window ) { + + var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + 1 * new Date(), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // General-purpose constants + MAX_NEGATIVE = 1 << 31, + + // Instance methods + hasOwn = ({}).hasOwnProperty, + arr = [], + pop = arr.pop, + push_native = arr.push, + push = arr.push, + slice = arr.slice, + // Use a stripped-down indexOf as it's faster than native + // http://jsperf.com/thor-indexof-vs-for/5 + indexOf = function( list, elem ) { + var i = 0, + len = list.length; + for ( ; i < len; i++ ) { + if ( list[i] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + + // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier + identifier = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + + "*\\]", + + pseudos = ":(" + identifier + ")(?:\\((" + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), + + rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + identifier + ")" ), + "CLASS": new RegExp( "^\\.(" + identifier + ")" ), + "TAG": new RegExp( "^(" + identifier + "|[*])" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + rescape = /'|\\/g, + + // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), + funescape = function( _, escaped, escapedWhitespace ) { + var high = "0x" + escaped - 0x10000; + // NaN means non-codepoint + // Support: Firefox<24 + // Workaround erroneous numeric interpretation of +"0x" + return high !== high || escapedWhitespace ? + escaped : + high < 0 ? + // BMP codepoint + String.fromCharCode( high + 0x10000 ) : + // Supplemental Plane codepoint (surrogate pair) + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }; + + // Optimize for push.apply( _, NodeList ) + try { + push.apply( + (arr = slice.call( preferredDoc.childNodes )), + preferredDoc.childNodes + ); + // Support: Android<4.0 + // Detect silently failing push.apply + arr[ preferredDoc.childNodes.length ].nodeType; + } catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + push_native.apply( target, slice.call(els) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + // Can't trust NodeList.length + while ( (target[j++] = els[i++]) ) {} + target.length = j - 1; + } + }; + } + + function Sizzle( selector, context, results, seed ) { + var m, i, elem, nid, nidselect, match, groups, newSelector, + newContext = context && context.ownerDocument, + + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; + + results = results || []; + + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { + + if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { + setDocument( context ); + } + context = context || document; + + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) { + + // ID selector + if ( (m = match[1]) ) { + + // Document context + if ( nodeType === 9 ) { + if ( (elem = context.getElementById( m )) ) { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + + // Element context + } else { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( newContext && (elem = newContext.getElementById( m )) && + contains( context, elem ) && + elem.id === m ) { + + results.push( elem ); + return results; + } + } + + // Type selector + } else if ( match[2] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Class selector + } else if ( (m = match[3]) && support.getElementsByClassName && + context.getElementsByClassName ) { + + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // Take advantage of querySelectorAll + if ( support.qsa && + !compilerCache[ selector + " " ] && + (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { + + if ( nodeType !== 1 ) { + newContext = context; + newSelector = selector; + + // qSA looks outside Element context, which is not what we want + // Thanks to Andrew Dupont for this workaround technique + // Support: IE <=8 + // Exclude object elements + } else if ( context.nodeName.toLowerCase() !== "object" ) { + + // Capture the context ID, setting it first if necessary + if ( (nid = context.getAttribute( "id" )) ) { + nid = nid.replace( rescape, "\\$&" ); + } else { + context.setAttribute( "id", (nid = expando) ); + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + nidselect = ridentifier.test( nid ) ? "#" + nid : "[id='" + nid + "']"; + while ( i-- ) { + groups[i] = nidselect + " " + toSelector( groups[i] ); + } + newSelector = groups.join( "," ); + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + } + + if ( newSelector ) { + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + } finally { + if ( nid === expando ) { + context.removeAttribute( "id" ); + } + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); + } + + /** + * Create key-value caches of limited size + * @returns {function(string, object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ + function createCache() { + var keys = []; + + function cache( key, value ) { + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return (cache[ key + " " ] = value); + } + return cache; + } + + /** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ + function markFunction( fn ) { + fn[ expando ] = true; + return fn; + } + + /** + * Support testing using an element + * @param {Function} fn Passed the created div and expects a boolean result + */ + function assert( fn ) { + var div = document.createElement("div"); + + try { + return !!fn( div ); + } catch (e) { + return false; + } finally { + // Remove from its parent by default + if ( div.parentNode ) { + div.parentNode.removeChild( div ); + } + // release memory in IE + div = null; + } + } + + /** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ + function addHandle( attrs, handler ) { + var arr = attrs.split("|"), + i = arr.length; + + while ( i-- ) { + Expr.attrHandle[ arr[i] ] = handler; + } + } + + /** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ + function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + ( ~b.sourceIndex || MAX_NEGATIVE ) - + ( ~a.sourceIndex || MAX_NEGATIVE ); + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( (cur = cur.nextSibling) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; + } + + /** + * Returns a function to use in pseudos for input types + * @param {String} type + */ + function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; + } + + /** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ + function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && elem.type === type; + }; + } + + /** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ + function createPositionalPseudo( fn ) { + return markFunction(function( argument ) { + argument = +argument; + return markFunction(function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ (j = matchIndexes[i]) ] ) { + seed[j] = !(matches[j] = seed[j]); + } + } + }); + }); + } + + /** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ + function testContext( context ) { + return context && typeof context.getElementsByTagName !== "undefined" && context; + } + + // Expose support vars for convenience + support = Sizzle.support = {}; + + /** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ + isXML = Sizzle.isXML = function( elem ) { + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = elem && (elem.ownerDocument || elem).documentElement; + return documentElement ? documentElement.nodeName !== "HTML" : false; + }; + + /** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ + setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, parent, + doc = node ? node.ownerDocument || node : preferredDoc; + + // Return early if doc is invalid or already selected + if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Update global variables + document = doc; + docElem = document.documentElement; + documentIsHTML = !isXML( document ); + + // Support: IE 9-11, Edge + // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) + if ( (parent = document.defaultView) && parent.top !== parent ) { + // Support: IE 11 + if ( parent.addEventListener ) { + parent.addEventListener( "unload", unloadHandler, false ); + + // Support: IE 9 - 10 only + } else if ( parent.attachEvent ) { + parent.attachEvent( "onunload", unloadHandler ); + } + } + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties + // (excepting IE8 booleans) + support.attributes = assert(function( div ) { + div.className = "i"; + return !div.getAttribute("className"); + }); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert(function( div ) { + div.appendChild( document.createComment("") ); + return !div.getElementsByTagName("*").length; + }); + + // Support: IE<9 + support.getElementsByClassName = rnative.test( document.getElementsByClassName ); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert(function( div ) { + docElem.appendChild( div ).id = expando; + return !document.getElementsByName || !document.getElementsByName( expando ).length; + }); + + // ID find and filter + if ( support.getById ) { + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var m = context.getElementById( id ); + return m ? [ m ] : []; + } + }; + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute("id") === attrId; + }; + }; + } else { + // Support: IE6/7 + // getElementById is not reliable as a find shortcut + delete Expr.find["ID"]; + + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== "undefined" && + elem.getAttributeNode("id"); + return node && node.value === attrId; + }; + }; + } + + // Tag + Expr.find["TAG"] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( tag ); + + // DocumentFragment nodes don't have gEBTN + } else if ( support.qsa ) { + return context.querySelectorAll( tag ); + } + } : + + function( tag, context ) { + var elem, + tmp = [], + i = 0, + // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( (elem = results[i++]) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See http://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( (support.qsa = rnative.test( document.querySelectorAll )) ) { + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert(function( div ) { + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // http://bugs.jquery.com/ticket/12359 + docElem.appendChild( div ).innerHTML = "<a id='" + expando + "'></a>" + + "<select id='" + expando + "-\r\\' msallowcapture=''>" + + "<option selected=''></option></select>"; + + // Support: IE8, Opera 11-12.16 + // Nothing should be selected when empty strings follow ^= or $= or *= + // The test attribute must be unknown in Opera but "safe" for WinRT + // http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( div.querySelectorAll("[msallowcapture^='']").length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !div.querySelectorAll("[selected]").length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ + if ( !div.querySelectorAll( "[id~=" + expando + "-]" ).length ) { + rbuggyQSA.push("~="); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !div.querySelectorAll(":checked").length ) { + rbuggyQSA.push(":checked"); + } + + // Support: Safari 8+, iOS 8+ + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibing-combinator selector` fails + if ( !div.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push(".#.+[+~]"); + } + }); + + assert(function( div ) { + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = document.createElement("input"); + input.setAttribute( "type", "hidden" ); + div.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( div.querySelectorAll("[name=d]").length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( !div.querySelectorAll(":enabled").length ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Opera 10-11 does not throw on post-comma invalid pseudos + div.querySelectorAll("*,:x"); + rbuggyQSA.push(",.*:"); + }); + } + + if ( (support.matchesSelector = rnative.test( (matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector) )) ) { + + assert(function( div ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( div, "div" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( div, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + }); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + // Element contains another + // Purposefully self-exclusive + // As in, an element does not contain itself + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + )); + } : + function( a, b ) { + if ( b ) { + while ( (b = b.parentNode) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = hasCompare ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + // Sort on method existence if only one input has compareDocumentPosition + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + // Calculate position if both inputs belong to the same document + compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + // Otherwise we know they are disconnected + 1; + + // Disconnected nodes + if ( compare & 1 || + (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { + + // Choose the first element that is related to our preferred document + if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { + return -1; + } + if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Parentless nodes are either documents or disconnected + if ( !aup || !bup ) { + return a === document ? -1 : + b === document ? 1 : + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( (cur = cur.parentNode) ) { + ap.unshift( cur ); + } + cur = b; + while ( (cur = cur.parentNode) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[i] === bp[i] ) { + i++; + } + + return i ? + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[i], bp[i] ) : + + // Otherwise nodes in our document sort first + ap[i] === preferredDoc ? -1 : + bp[i] === preferredDoc ? 1 : + 0; + }; + + return document; + }; + + Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); + }; + + Sizzle.matchesSelector = function( elem, expr ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + // Make sure that attribute selectors are quoted + expr = expr.replace( rattributeQuotes, "='$1']" ); + + if ( support.matchesSelector && documentIsHTML && + !compilerCache[ expr + " " ] && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch (e) {} + } + + return Sizzle( expr, document, null, [ elem ] ).length > 0; + }; + + Sizzle.contains = function( context, elem ) { + // Set document vars if needed + if ( ( context.ownerDocument || context ) !== document ) { + setDocument( context ); + } + return contains( context, elem ); + }; + + Sizzle.attr = function( elem, name ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + // Don't get fooled by Object.prototype properties (jQuery #13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + (val = elem.getAttributeNode(name)) && val.specified ? + val.value : + null; + }; + + Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); + }; + + /** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ + Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( (elem = results[i++]) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + // Clear input after sorting to release objects + // See https://github.com/jquery/sizzle/pull/225 + sortInput = null; + + return results; + }; + + /** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ + getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + // If no nodeType, this is expected to be an array + while ( (node = elem[i++]) ) { + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + // Use textContent for elements + // innerText usage removed for consistency of new lines (jQuery #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + // Do not include comment or processing instruction nodes + + return ret; + }; + + Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[1] = match[1].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape ); + + if ( match[2] === "~=" ) { + match[3] = " " + match[3] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[1] = match[1].toLowerCase(); + + if ( match[1].slice( 0, 3 ) === "nth" ) { + // nth-* requires argument + if ( !match[3] ) { + Sizzle.error( match[0] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); + match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); + + // other types prohibit arguments + } else if ( match[3] ) { + Sizzle.error( match[0] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[6] && match[2]; + + if ( matchExpr["CHILD"].test( match[0] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[3] ) { + match[2] = match[4] || match[5] || ""; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + // Get excess from tokenize (recursively) + (excess = tokenize( unquoted, true )) && + // advance to the next closing parenthesis + (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { + + // excess is a negative index + match[0] = match[0].slice( 0, excess ); + match[2] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { return true; } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && + classCache( className, function( elem ) { + return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" ); + }); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + }; + }, + + "CHILD": function( type, what, argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, context, xml ) { + var cache, uniqueCache, outerCache, node, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType, + diff = false; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( (node = node[ dir ]) ) { + if ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) { + + return false; + } + } + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + + // Seek `elem` from a previously-cached index + + // ...in a gzip-friendly way + node = parent; + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex && cache[ 2 ]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( (node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + (diff = nodeIndex = 0) || start.pop()) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else { + // Use previously-cached element index if available + if ( useCache ) { + // ...in a gzip-friendly way + node = elem; + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex; + } + + // xml :nth-child(...) + // or :nth-last-child(...) or :nth(-last)?-of-type(...) + if ( diff === false ) { + // Use the same loop as above to seek `elem` from the start + while ( (node = ++nodeIndex && node && node[ dir ] || + (diff = nodeIndex = 0) || start.pop()) ) { + + if ( ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) && + ++diff ) { + + // Cache the index of each encountered element + if ( useCache ) { + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + uniqueCache[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction(function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf( seed, matched[i] ); + seed[ idx ] = !( matches[ idx ] = matched[i] ); + } + }) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + // Potentially complex pseudos + "not": markFunction(function( selector ) { + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction(function( seed, matches, context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( (elem = unmatched[i]) ) { + seed[i] = !(matches[i] = elem); + } + } + }) : + function( elem, context, xml ) { + input[0] = elem; + matcher( input, null, xml, results ); + // Don't keep the element (issue #299) + input[0] = null; + return !results.pop(); + }; + }), + + "has": markFunction(function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + }), + + "contains": markFunction(function( text ) { + text = text.replace( runescape, funescape ); + return function( elem ) { + return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; + }; + }), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + // lang value must be a valid identifier + if ( !ridentifier.test(lang || "") ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( (elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); + return false; + }; + }), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); + }, + + // Boolean properties + "enabled": function( elem ) { + return elem.disabled === false; + }, + + "disabled": function( elem ) { + return elem.disabled === true; + }, + + "checked": function( elem ) { + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); + }, + + "selected": function( elem ) { + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), + // but not by others (comment: 8; processing instruction: 7; etc.) + // nodeType < 6 works because attributes (2) do not appear as children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos["empty"]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + // Support: IE<8 + // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" + ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); + }, + + // Position-in-collection + "first": createPositionalPseudo(function() { + return [ 0 ]; + }), + + "last": createPositionalPseudo(function( matchIndexes, length ) { + return [ length - 1 ]; + }), + + "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + }), + + "even": createPositionalPseudo(function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "odd": createPositionalPseudo(function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }) + } + }; + + Expr.pseudos["nth"] = Expr.pseudos["eq"]; + + // Add button/input type pseudos + for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); + } + for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); + } + + // Easy API for creating new setFilters + function setFilters() {} + setFilters.prototype = Expr.filters = Expr.pseudos; + Expr.setFilters = new setFilters(); + + tokenize = Sizzle.tokenize = function( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || (match = rcomma.exec( soFar )) ) { + if ( match ) { + // Don't consume trailing commas as valid + soFar = soFar.slice( match[0].length ) || soFar; + } + groups.push( (tokens = []) ); + } + + matched = false; + + // Combinators + if ( (match = rcombinators.exec( soFar )) ) { + matched = match.shift(); + tokens.push({ + value: matched, + // Cast descendant combinators to space + type: match[0].replace( rtrim, " " ) + }); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || + (match = preFilters[ type ]( match ))) ) { + matched = match.shift(); + tokens.push({ + value: matched, + type: type, + matches: match + }); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); + }; + + function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[i].value; + } + return selector; + } + + function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + checkNonElements = base && dir === "parentNode", + doneName = done++; + + return combinator.first ? + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, uniqueCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching + if ( xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || (elem[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {}); + + if ( (oldCache = uniqueCache[ dir ]) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + // Assign to newCache so results back-propagate to previous elements + return (newCache[ 2 ] = oldCache[ 2 ]); + } else { + // Reuse newcache so results back-propagate to previous elements + uniqueCache[ dir ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { + return true; + } + } + } + } + } + }; + } + + function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[i]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[0]; + } + + function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[i], results ); + } + return results; + } + + function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( (elem = unmatched[i]) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; + } + + function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction(function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( (elem = temp[i]) ) { + matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) ) { + // Restore matcherIn since elem is not yet a final match + temp.push( (matcherIn[i] = elem) ); + } + } + postFinder( null, (matcherOut = []), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) && + (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) { + + seed[temp] = !(results[temp] = elem); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + }); + } + + function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[0].type ], + implicitRelative = leadingRelative || Expr.relative[" "], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + (checkContext = context).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + // Avoid hanging onto element (issue #299) + checkContext = null; + return ret; + } ]; + + for ( ; i < len; i++ ) { + if ( (matcher = Expr.relative[ tokens[i].type ]) ) { + matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; + } else { + matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[j].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); + } + + function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + // We must always have either seed elements or outermost context + elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), + len = elems.length; + + if ( outermost ) { + outermostContext = context === document || context || outermost; + } + + // Add elements passing elementMatchers directly to results + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id + for ( ; i !== len && (elem = elems[i]) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + if ( !context && elem.ownerDocument !== document ) { + setDocument( elem ); + xml = !documentIsHTML; + } + while ( (matcher = elementMatchers[j++]) ) { + if ( matcher( elem, context || document, xml) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + // They will have gone through all possible matchers + if ( (elem = !matcher && elem) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // `i` is now the count of elements visited above, and adding it to `matchedCount` + // makes the latter nonnegative. + matchedCount += i; + + // Apply set filters to unmatched elements + // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` + // equals `i`), unless we didn't visit _any_ elements in the above loop because we have + // no element matchers and no seed. + // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that + // case, which will result in a "00" `matchedCount` that differs from `i` but is also + // numerically zero. + if ( bySet && i !== matchedCount ) { + j = 0; + while ( (matcher = setMatchers[j++]) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !(unmatched[i] || setMatched[i]) ) { + setMatched[i] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; + } + + compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + // Generate a function of recursive functions that can be used to check each element + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[i] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); + + // Save selector and tokenization + cached.selector = selector; + } + return cached; + }; + + /** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ + select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( (selector = compiled.selector || selector) ); + + results = results || []; + + // Try to minimize operations if there is only one selector in the list and no seed + // (the latter of which guarantees us context) + if ( match.length === 1 ) { + + // Reduce context if the leading compound selector is an ID + tokens = match[0] = match[0].slice( 0 ); + if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && + support.getById && context.nodeType === 9 && documentIsHTML && + Expr.relative[ tokens[1].type ] ) { + + context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; + if ( !context ) { + return results; + + // Precompiled matchers will still verify ancestry, so step up a level + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[i]; + + // Abort if we hit a combinator + if ( Expr.relative[ (type = token.type) ] ) { + break; + } + if ( (find = Expr.find[ type ]) ) { + // Search, expanding context for leading sibling combinators + if ( (seed = find( + token.matches[0].replace( runescape, funescape ), + rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context + )) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + // Compile and execute a filtering function if one is not provided + // Provide `match` to avoid retokenization if we modified the selector above + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + !context || rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; + }; + + // One-time assignments + + // Sort stability + support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; + + // Support: Chrome 14-35+ + // Always assume duplicates if they aren't passed to the comparison function + support.detectDuplicates = !!hasDuplicate; + + // Initialize against the default document + setDocument(); + + // Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) + // Detached nodes confoundingly follow *each other* + support.sortDetached = assert(function( div1 ) { + // Should return 1, but returns 4 (following) + return div1.compareDocumentPosition( document.createElement("div") ) & 1; + }); + + // Support: IE<8 + // Prevent attribute/property "interpolation" + // http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx + if ( !assert(function( div ) { + div.innerHTML = "<a href='#'></a>"; + return div.firstChild.getAttribute("href") === "#" ; + }) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + }); + } + + // Support: IE<9 + // Use defaultValue in place of getAttribute("value") + if ( !support.attributes || !assert(function( div ) { + div.innerHTML = "<input/>"; + div.firstChild.setAttribute( "value", "" ); + return div.firstChild.getAttribute( "value" ) === ""; + }) ) { + addHandle( "value", function( elem, name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + }); + } + + // Support: IE<9 + // Use getAttributeNode to fetch booleans when getAttribute lies + if ( !assert(function( div ) { + return div.getAttribute("disabled") == null; + }) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + (val = elem.getAttributeNode( name )) && val.specified ? + val.value : + null; + } + }); + } + + return Sizzle; + + })( window ); + + + + jQuery.find = Sizzle; + jQuery.expr = Sizzle.selectors; + jQuery.expr[ ":" ] = jQuery.expr.pseudos; + jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; + jQuery.text = Sizzle.getText; + jQuery.isXMLDoc = Sizzle.isXML; + jQuery.contains = Sizzle.contains; + + + + var dir = function( elem, dir, until ) { + var matched = [], + truncate = until !== undefined; + + while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { + if ( elem.nodeType === 1 ) { + if ( truncate && jQuery( elem ).is( until ) ) { + break; + } + matched.push( elem ); + } + } + return matched; + }; + + + var siblings = function( n, elem ) { + var matched = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + matched.push( n ); + } + } + + return matched; + }; + + + var rneedsContext = jQuery.expr.match.needsContext; + + var rsingleTag = ( /^<([\w-]+)\s*\/?>(?:<\/\1>|)$/ ); + + + + var risSimple = /^.[^:#\[\.,]*$/; + + // Implement the identical functionality for filter and not + function winnow( elements, qualifier, not ) { + if ( jQuery.isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + /* jshint -W018 */ + return !!qualifier.call( elem, i, elem ) !== not; + } ); + + } + + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + } ); + + } + + if ( typeof qualifier === "string" ) { + if ( risSimple.test( qualifier ) ) { + return jQuery.filter( qualifier, elements, not ); + } + + qualifier = jQuery.filter( qualifier, elements ); + } + + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not; + } ); + } + + jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + return elems.length === 1 && elem.nodeType === 1 ? + jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] : + jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + } ) ); + }; + + jQuery.fn.extend( { + find: function( selector ) { + var i, + len = this.length, + ret = [], + self = this; + + if ( typeof selector !== "string" ) { + return this.pushStack( jQuery( selector ).filter( function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + } ) ); + } + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + // Needed because $( selector, context ) becomes $( context ).find( selector ) + ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret ); + ret.selector = this.selector ? this.selector + " " + selector : selector; + return ret; + }, + filter: function( selector ) { + return this.pushStack( winnow( this, selector || [], false ) ); + }, + not: function( selector ) { + return this.pushStack( winnow( this, selector || [], true ) ); + }, + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + } + } ); + + + // Initialize a jQuery object + + + // A central reference to the root jQuery(document) + var rootjQuery, + + // A simple way to check for HTML strings + // Prioritize #id over <tag> to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/, + + init = jQuery.fn.init = function( selector, context, root ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Method init() accepts an alternate rootjQuery + // so migrate can support jQuery.sub (gh-2101) + root = root || rootjQuery; + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector[ 0 ] === "<" && + selector[ selector.length - 1 ] === ">" && + selector.length >= 3 ) { + + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && ( match[ 1 ] || !context ) ) { + + // HANDLE: $(html) -> $(array) + if ( match[ 1 ] ) { + context = context instanceof jQuery ? context[ 0 ] : context; + + // Option to run scripts is true for back-compat + // Intentionally let the error be thrown if parseHTML is not present + jQuery.merge( this, jQuery.parseHTML( + match[ 1 ], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + + // Properties of context are called as methods if possible + if ( jQuery.isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[ 2 ] ); + + // Support: Blackberry 4.6 + // gEBID returns nodes no longer in the document (#6963) + if ( elem && elem.parentNode ) { + + // Inject the element directly into the jQuery object + this.length = 1; + this[ 0 ] = elem; + } + + this.context = document; + this.selector = selector; + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || root ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this.context = this[ 0 ] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( jQuery.isFunction( selector ) ) { + return root.ready !== undefined ? + root.ready( selector ) : + + // Execute immediately if ready is not present + selector( jQuery ); + } + + if ( selector.selector !== undefined ) { + this.selector = selector.selector; + this.context = selector.context; + } + + return jQuery.makeArray( selector, this ); + }; + + // Give the init function the jQuery prototype for later instantiation + init.prototype = jQuery.fn; + + // Initialize central reference + rootjQuery = jQuery( document ); + + + var rparentsprev = /^(?:parents|prev(?:Until|All))/, + + // Methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + + jQuery.fn.extend( { + has: function( target ) { + var targets = jQuery( target, this ), + l = targets.length; + + return this.filter( function() { + var i = 0; + for ( ; i < l; i++ ) { + if ( jQuery.contains( this, targets[ i ] ) ) { + return true; + } + } + } ); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + matched = [], + pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ? + jQuery( selectors, context || this.context ) : + 0; + + for ( ; i < l; i++ ) { + for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { + + // Always skip document fragments + if ( cur.nodeType < 11 && ( pos ? + pos.index( cur ) > -1 : + + // Don't pass non-elements to Sizzle + cur.nodeType === 1 && + jQuery.find.matchesSelector( cur, selectors ) ) ) { + + matched.push( cur ); + break; + } + } + } + + return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); + }, + + // Determine the position of an element within the set + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; + } + + // Index in selector + if ( typeof elem === "string" ) { + return indexOf.call( jQuery( elem ), this[ 0 ] ); + } + + // Locate the position of the desired element + return indexOf.call( this, + + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[ 0 ] : elem + ); + }, + + add: function( selector, context ) { + return this.pushStack( + jQuery.uniqueSort( + jQuery.merge( this.get(), jQuery( selector, context ) ) + ) + ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter( selector ) + ); + } + } ); + + function sibling( cur, dir ) { + while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} + return cur; + } + + jQuery.each( { + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return siblings( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return siblings( elem.firstChild ); + }, + contents: function( elem ) { + return elem.contentDocument || jQuery.merge( [], elem.childNodes ); + } + }, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var matched = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + matched = jQuery.filter( selector, matched ); + } + + if ( this.length > 1 ) { + + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + jQuery.uniqueSort( matched ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + matched.reverse(); + } + } + + return this.pushStack( matched ); + }; + } ); + var rnotwhite = ( /\S+/g ); + + + + // Convert String-formatted options into Object-formatted ones + function createOptions( options ) { + var object = {}; + jQuery.each( options.match( rnotwhite ) || [], function( _, flag ) { + object[ flag ] = true; + } ); + return object; + } + + /* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ + jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + createOptions( options ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + + // Last fire value for non-forgettable lists + memory, + + // Flag to know if list was already fired + fired, + + // Flag to prevent firing + locked, + + // Actual callback list + list = [], + + // Queue of execution data for repeatable lists + queue = [], + + // Index of currently firing callback (modified by add/remove as needed) + firingIndex = -1, + + // Fire callbacks + fire = function() { + + // Enforce single-firing + locked = options.once; + + // Execute callbacks for all pending executions, + // respecting firingIndex overrides and runtime changes + fired = firing = true; + for ( ; queue.length; firingIndex = -1 ) { + memory = queue.shift(); + while ( ++firingIndex < list.length ) { + + // Run callback and check for early termination + if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && + options.stopOnFalse ) { + + // Jump to end and forget the data so .add doesn't re-fire + firingIndex = list.length; + memory = false; + } + } + } + + // Forget the data if we're done with it + if ( !options.memory ) { + memory = false; + } + + firing = false; + + // Clean up if we're done firing for good + if ( locked ) { + + // Keep an empty list if we have data for future add calls + if ( memory ) { + list = []; + + // Otherwise, this object is spent + } else { + list = ""; + } + } + }, + + // Actual Callbacks object + self = { + + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + + // If we have memory from a past run, we should fire after adding + if ( memory && !firing ) { + firingIndex = list.length - 1; + queue.push( memory ); + } + + ( function add( args ) { + jQuery.each( args, function( _, arg ) { + if ( jQuery.isFunction( arg ) ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && jQuery.type( arg ) !== "string" ) { + + // Inspect recursively + add( arg ); + } + } ); + } )( arguments ); + + if ( memory && !firing ) { + fire(); + } + } + return this; + }, + + // Remove a callback from the list + remove: function() { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + + // Handle firing indexes + if ( index <= firingIndex ) { + firingIndex--; + } + } + } ); + return this; + }, + + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? + jQuery.inArray( fn, list ) > -1 : + list.length > 0; + }, + + // Remove all callbacks from the list + empty: function() { + if ( list ) { + list = []; + } + return this; + }, + + // Disable .fire and .add + // Abort any current/pending executions + // Clear all callbacks and values + disable: function() { + locked = queue = []; + list = memory = ""; + return this; + }, + disabled: function() { + return !list; + }, + + // Disable .fire + // Also disable .add unless we have memory (since it would have no effect) + // Abort any pending executions + lock: function() { + locked = queue = []; + if ( !memory ) { + list = memory = ""; + } + return this; + }, + locked: function() { + return !!locked; + }, + + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( !locked ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + queue.push( args ); + if ( !firing ) { + fire(); + } + } + return this; + }, + + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; + }; + + + jQuery.extend( { + + Deferred: function( func ) { + var tuples = [ + + // action, add listener, listener list, final state + [ "resolve", "done", jQuery.Callbacks( "once memory" ), "resolved" ], + [ "reject", "fail", jQuery.Callbacks( "once memory" ), "rejected" ], + [ "notify", "progress", jQuery.Callbacks( "memory" ) ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + then: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + return jQuery.Deferred( function( newDefer ) { + jQuery.each( tuples, function( i, tuple ) { + var fn = jQuery.isFunction( fns[ i ] ) && fns[ i ]; + + // deferred[ done | fail | progress ] for forwarding actions to newDefer + deferred[ tuple[ 1 ] ]( function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && jQuery.isFunction( returned.promise ) ) { + returned.promise() + .progress( newDefer.notify ) + .done( newDefer.resolve ) + .fail( newDefer.reject ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( + this === promise ? newDefer.promise() : this, + fn ? [ returned ] : arguments + ); + } + } ); + } ); + fns = null; + } ).promise(); + }, + + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Keep pipe for back-compat + promise.pipe = promise.then; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 3 ]; + + // promise[ done | fail | progress ] = list.add + promise[ tuple[ 1 ] ] = list.add; + + // Handle state + if ( stateString ) { + list.add( function() { + + // state = [ resolved | rejected ] + state = stateString; + + // [ reject_list | resolve_list ].disable; progress_list.lock + }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock ); + } + + // deferred[ resolve | reject | notify ] + deferred[ tuple[ 0 ] ] = function() { + deferred[ tuple[ 0 ] + "With" ]( this === deferred ? promise : this, arguments ); + return this; + }; + deferred[ tuple[ 0 ] + "With" ] = list.fireWith; + } ); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( subordinate /* , ..., subordinateN */ ) { + var i = 0, + resolveValues = slice.call( arguments ), + length = resolveValues.length, + + // the count of uncompleted subordinates + remaining = length !== 1 || + ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0, + + // the master Deferred. + // If resolveValues consist of only a single Deferred, just use that. + deferred = remaining === 1 ? subordinate : jQuery.Deferred(), + + // Update function for both resolve and progress values + updateFunc = function( i, contexts, values ) { + return function( value ) { + contexts[ i ] = this; + values[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( values === progressValues ) { + deferred.notifyWith( contexts, values ); + } else if ( !( --remaining ) ) { + deferred.resolveWith( contexts, values ); + } + }; + }, + + progressValues, progressContexts, resolveContexts; + + // Add listeners to Deferred subordinates; treat others as resolved + if ( length > 1 ) { + progressValues = new Array( length ); + progressContexts = new Array( length ); + resolveContexts = new Array( length ); + for ( ; i < length; i++ ) { + if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) { + resolveValues[ i ].promise() + .progress( updateFunc( i, progressContexts, progressValues ) ) + .done( updateFunc( i, resolveContexts, resolveValues ) ) + .fail( deferred.reject ); + } else { + --remaining; + } + } + } + + // If we're not waiting on anything, resolve the master + if ( !remaining ) { + deferred.resolveWith( resolveContexts, resolveValues ); + } + + return deferred.promise(); + } + } ); + + + // The deferred used on DOM ready + var readyList; + + jQuery.fn.ready = function( fn ) { + + // Add the callback + jQuery.ready.promise().done( fn ); + + return this; + }; + + jQuery.extend( { + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Hold (or release) the ready event + holdReady: function( hold ) { + if ( hold ) { + jQuery.readyWait++; + } else { + jQuery.ready( true ); + } + }, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + + // Trigger any bound ready events + if ( jQuery.fn.triggerHandler ) { + jQuery( document ).triggerHandler( "ready" ); + jQuery( document ).off( "ready" ); + } + } + } ); + + /** + * The ready event handler and self cleanup method + */ + function completed() { + document.removeEventListener( "DOMContentLoaded", completed ); + window.removeEventListener( "load", completed ); + jQuery.ready(); + } + + jQuery.ready.promise = function( obj ) { + if ( !readyList ) { + + readyList = jQuery.Deferred(); + + // Catch cases where $(document).ready() is called + // after the browser event has already occurred. + // Support: IE9-10 only + // Older IE sometimes signals "interactive" too soon + if ( document.readyState === "complete" || + ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { + + // Handle it asynchronously to allow scripts the opportunity to delay ready + window.setTimeout( jQuery.ready ); + + } else { + + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed ); + } + } + return readyList.promise( obj ); + }; + + // Kick off the DOM ready check even if the user does not + jQuery.ready.promise(); + + + + + // Multifunctional method to get and set values of a collection + // The value/s can optionally be executed if it's a function + var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + len = elems.length, + bulk = key == null; + + // Sets many values + if ( jQuery.type( key ) === "object" ) { + chainable = true; + for ( i in key ) { + access( elems, fn, i, key[ i ], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !jQuery.isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < len; i++ ) { + fn( + elems[ i ], key, raw ? + value : + value.call( elems[ i ], i, fn( elems[ i ], key ) ) + ); + } + } + } + + return chainable ? + elems : + + // Gets + bulk ? + fn.call( elems ) : + len ? fn( elems[ 0 ], key ) : emptyGet; + }; + var acceptData = function( owner ) { + + // Accepts only: + // - Node + // - Node.ELEMENT_NODE + // - Node.DOCUMENT_NODE + // - Object + // - Any + /* jshint -W018 */ + return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); + }; + + + + + function Data() { + this.expando = jQuery.expando + Data.uid++; + } + + Data.uid = 1; + + Data.prototype = { + + register: function( owner, initial ) { + var value = initial || {}; + + // If it is a node unlikely to be stringify-ed or looped over + // use plain assignment + if ( owner.nodeType ) { + owner[ this.expando ] = value; + + // Otherwise secure it in a non-enumerable, non-writable property + // configurability must be true to allow the property to be + // deleted with the delete operator + } else { + Object.defineProperty( owner, this.expando, { + value: value, + writable: true, + configurable: true + } ); + } + return owner[ this.expando ]; + }, + cache: function( owner ) { + + // We can accept data for non-element nodes in modern browsers, + // but we should not, see #8335. + // Always return an empty object. + if ( !acceptData( owner ) ) { + return {}; + } + + // Check if the owner object already has a cache + var value = owner[ this.expando ]; + + // If not, create one + if ( !value ) { + value = {}; + + // We can accept data for non-element nodes in modern browsers, + // but we should not, see #8335. + // Always return an empty object. + if ( acceptData( owner ) ) { + + // If it is a node unlikely to be stringify-ed or looped over + // use plain assignment + if ( owner.nodeType ) { + owner[ this.expando ] = value; + + // Otherwise secure it in a non-enumerable property + // configurable must be true to allow the property to be + // deleted when data is removed + } else { + Object.defineProperty( owner, this.expando, { + value: value, + configurable: true + } ); + } + } + } + + return value; + }, + set: function( owner, data, value ) { + var prop, + cache = this.cache( owner ); + + // Handle: [ owner, key, value ] args + if ( typeof data === "string" ) { + cache[ data ] = value; + + // Handle: [ owner, { properties } ] args + } else { + + // Copy the properties one-by-one to the cache object + for ( prop in data ) { + cache[ prop ] = data[ prop ]; + } + } + return cache; + }, + get: function( owner, key ) { + return key === undefined ? + this.cache( owner ) : + owner[ this.expando ] && owner[ this.expando ][ key ]; + }, + access: function( owner, key, value ) { + var stored; + + // In cases where either: + // + // 1. No key was specified + // 2. A string key was specified, but no value provided + // + // Take the "read" path and allow the get method to determine + // which value to return, respectively either: + // + // 1. The entire cache object + // 2. The data stored at the key + // + if ( key === undefined || + ( ( key && typeof key === "string" ) && value === undefined ) ) { + + stored = this.get( owner, key ); + + return stored !== undefined ? + stored : this.get( owner, jQuery.camelCase( key ) ); + } + + // When the key is not a string, or both a key and value + // are specified, set or extend (existing objects) with either: + // + // 1. An object of properties + // 2. A key and value + // + this.set( owner, key, value ); + + // Since the "set" path can have two possible entry points + // return the expected data based on which path was taken[*] + return value !== undefined ? value : key; + }, + remove: function( owner, key ) { + var i, name, camel, + cache = owner[ this.expando ]; + + if ( cache === undefined ) { + return; + } + + if ( key === undefined ) { + this.register( owner ); + + } else { + + // Support array or space separated string of keys + if ( jQuery.isArray( key ) ) { + + // If "name" is an array of keys... + // When data is initially created, via ("key", "val") signature, + // keys will be converted to camelCase. + // Since there is no way to tell _how_ a key was added, remove + // both plain key and camelCase key. #12786 + // This will only penalize the array argument path. + name = key.concat( key.map( jQuery.camelCase ) ); + } else { + camel = jQuery.camelCase( key ); + + // Try the string as a key before any manipulation + if ( key in cache ) { + name = [ key, camel ]; + } else { + + // If a key with the spaces exists, use it. + // Otherwise, create an array by matching non-whitespace + name = camel; + name = name in cache ? + [ name ] : ( name.match( rnotwhite ) || [] ); + } + } + + i = name.length; + + while ( i-- ) { + delete cache[ name[ i ] ]; + } + } + + // Remove the expando if there's no more data + if ( key === undefined || jQuery.isEmptyObject( cache ) ) { + + // Support: Chrome <= 35-45+ + // Webkit & Blink performance suffers when deleting properties + // from DOM nodes, so set to undefined instead + // https://code.google.com/p/chromium/issues/detail?id=378607 + if ( owner.nodeType ) { + owner[ this.expando ] = undefined; + } else { + delete owner[ this.expando ]; + } + } + }, + hasData: function( owner ) { + var cache = owner[ this.expando ]; + return cache !== undefined && !jQuery.isEmptyObject( cache ); + } + }; + var dataPriv = new Data(); + + var dataUser = new Data(); + + + + // Implementation Summary + // + // 1. Enforce API surface and semantic compatibility with 1.9.x branch + // 2. Improve the module's maintainability by reducing the storage + // paths to a single mechanism. + // 3. Use the same single mechanism to support "private" and "user" data. + // 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) + // 5. Avoid exposing implementation details on user objects (eg. expando properties) + // 6. Provide a clear path for implementation upgrade to WeakMap in 2014 + + var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + rmultiDash = /[A-Z]/g; + + function dataAttr( elem, key, data ) { + var name; + + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = data === "true" ? true : + data === "false" ? false : + data === "null" ? null : + + // Only convert to a number if it doesn't change the string + +data + "" === data ? +data : + rbrace.test( data ) ? jQuery.parseJSON( data ) : + data; + } catch ( e ) {} + + // Make sure we set the data so it isn't changed later + dataUser.set( elem, key, data ); + } else { + data = undefined; + } + } + return data; + } + + jQuery.extend( { + hasData: function( elem ) { + return dataUser.hasData( elem ) || dataPriv.hasData( elem ); + }, + + data: function( elem, name, data ) { + return dataUser.access( elem, name, data ); + }, + + removeData: function( elem, name ) { + dataUser.remove( elem, name ); + }, + + // TODO: Now that all calls to _data and _removeData have been replaced + // with direct calls to dataPriv methods, these can be deprecated. + _data: function( elem, name, data ) { + return dataPriv.access( elem, name, data ); + }, + + _removeData: function( elem, name ) { + dataPriv.remove( elem, name ); + } + } ); + + jQuery.fn.extend( { + data: function( key, value ) { + var i, name, data, + elem = this[ 0 ], + attrs = elem && elem.attributes; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = dataUser.get( elem ); + + if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE11+ + // The attrs elements can be null (#14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = jQuery.camelCase( name.slice( 5 ) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + dataPriv.set( elem, "hasDataAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each( function() { + dataUser.set( this, key ); + } ); + } + + return access( this, function( value ) { + var data, camelKey; + + // The calling jQuery object (element matches) is not empty + // (and therefore has an element appears at this[ 0 ]) and the + // `value` parameter was not undefined. An empty jQuery object + // will result in `undefined` for elem = this[ 0 ] which will + // throw an exception if an attempt to read a data cache is made. + if ( elem && value === undefined ) { + + // Attempt to get data from the cache + // with the key as-is + data = dataUser.get( elem, key ) || + + // Try to find dashed key if it exists (gh-2779) + // This is for 2.2.x only + dataUser.get( elem, key.replace( rmultiDash, "-$&" ).toLowerCase() ); + + if ( data !== undefined ) { + return data; + } + + camelKey = jQuery.camelCase( key ); + + // Attempt to get data from the cache + // with the key camelized + data = dataUser.get( elem, camelKey ); + if ( data !== undefined ) { + return data; + } + + // Attempt to "discover" the data in + // HTML5 custom data-* attrs + data = dataAttr( elem, camelKey, undefined ); + if ( data !== undefined ) { + return data; + } + + // We tried really hard, but the data doesn't exist. + return; + } + + // Set the data... + camelKey = jQuery.camelCase( key ); + this.each( function() { + + // First, attempt to store a copy or reference of any + // data that might've been store with a camelCased key. + var data = dataUser.get( this, camelKey ); + + // For HTML5 data-* attribute interop, we have to + // store property names with dashes in a camelCase form. + // This might not apply to all properties...* + dataUser.set( this, camelKey, value ); + + // *... In the case of properties that might _actually_ + // have dashes, we need to also store a copy of that + // unchanged property. + if ( key.indexOf( "-" ) > -1 && data !== undefined ) { + dataUser.set( this, key, value ); + } + } ); + }, null, value, arguments.length > 1, null, true ); + }, + + removeData: function( key ) { + return this.each( function() { + dataUser.remove( this, key ); + } ); + } + } ); + + + jQuery.extend( { + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = dataPriv.get( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || jQuery.isArray( data ) ) { + queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // Clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // Not public - generate a queueHooks object, or return the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { + empty: jQuery.Callbacks( "once memory" ).add( function() { + dataPriv.remove( elem, [ type + "queue", key ] ); + } ) + } ); + } + } ); + + jQuery.fn.extend( { + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[ 0 ], type ); + } + + return data === undefined ? + this : + this.each( function() { + var queue = jQuery.queue( this, type, data ); + + // Ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + } ); + }, + dequeue: function( type ) { + return this.each( function() { + jQuery.dequeue( this, type ); + } ); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while ( i-- ) { + tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } + } ); + var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; + + var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); + + + var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + + var isHidden = function( elem, el ) { + + // isHidden might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + return jQuery.css( elem, "display" ) === "none" || + !jQuery.contains( elem.ownerDocument, elem ); + }; + + + + function adjustCSS( elem, prop, valueParts, tween ) { + var adjusted, + scale = 1, + maxIterations = 20, + currentValue = tween ? + function() { return tween.cur(); } : + function() { return jQuery.css( elem, prop, "" ); }, + initial = currentValue(), + unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), + + // Starting value computation is required for potential unit mismatches + initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && + rcssNum.exec( jQuery.css( elem, prop ) ); + + if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { + + // Trust units reported by jQuery.css + unit = unit || initialInUnit[ 3 ]; + + // Make sure we update the tween properties later on + valueParts = valueParts || []; + + // Iteratively approximate from a nonzero starting point + initialInUnit = +initial || 1; + + do { + + // If previous iteration zeroed out, double until we get *something*. + // Use string for doubling so we don't accidentally see scale as unchanged below + scale = scale || ".5"; + + // Adjust and apply + initialInUnit = initialInUnit / scale; + jQuery.style( elem, prop, initialInUnit + unit ); + + // Update scale, tolerating zero or NaN from tween.cur() + // Break the loop if scale is unchanged or perfect, or if we've just had enough. + } while ( + scale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations + ); + } + + if ( valueParts ) { + initialInUnit = +initialInUnit || +initial || 0; + + // Apply relative offset (+=/-=) if specified + adjusted = valueParts[ 1 ] ? + initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : + +valueParts[ 2 ]; + if ( tween ) { + tween.unit = unit; + tween.start = initialInUnit; + tween.end = adjusted; + } + } + return adjusted; + } + var rcheckableType = ( /^(?:checkbox|radio)$/i ); + + var rtagName = ( /<([\w:-]+)/ ); + + var rscriptType = ( /^$|\/(?:java|ecma)script/i ); + + + + // We have to close these tags to support XHTML (#13200) + var wrapMap = { + + // Support: IE9 + option: [ 1, "<select multiple='multiple'>", "</select>" ], + + // XHTML parsers do not magically insert elements in the + // same way that tag soup parsers do. So we cannot shorten + // this by omitting <tbody> or other required elements. + thead: [ 1, "<table>", "</table>" ], + col: [ 2, "<table><colgroup>", "</colgroup></table>" ], + tr: [ 2, "<table><tbody>", "</tbody></table>" ], + td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ], + + _default: [ 0, "", "" ] + }; + + // Support: IE9 + wrapMap.optgroup = wrapMap.option; + + wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; + wrapMap.th = wrapMap.td; + + + function getAll( context, tag ) { + + // Support: IE9-11+ + // Use typeof to avoid zero-argument method invocation on host objects (#15151) + var ret = typeof context.getElementsByTagName !== "undefined" ? + context.getElementsByTagName( tag || "*" ) : + typeof context.querySelectorAll !== "undefined" ? + context.querySelectorAll( tag || "*" ) : + []; + + return tag === undefined || tag && jQuery.nodeName( context, tag ) ? + jQuery.merge( [ context ], ret ) : + ret; + } + + + // Mark scripts as having already been evaluated + function setGlobalEval( elems, refElements ) { + var i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + dataPriv.set( + elems[ i ], + "globalEval", + !refElements || dataPriv.get( refElements[ i ], "globalEval" ) + ); + } + } + + + var rhtml = /<|&#?\w+;/; + + function buildFragment( elems, context, scripts, selection, ignored ) { + var elem, tmp, tag, wrap, contains, j, + fragment = context.createDocumentFragment(), + nodes = [], + i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( jQuery.type( elem ) === "object" ) { + + // Support: Android<4.1, PhantomJS<2 + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); + + // Deserialize a standard representation + tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; + + // Descend through wrappers to the right content + j = wrap[ 0 ]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Support: Android<4.1, PhantomJS<2 + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, tmp.childNodes ); + + // Remember the top-level container + tmp = fragment.firstChild; + + // Ensure the created nodes are orphaned (#12392) + tmp.textContent = ""; + } + } + } + + // Remove wrapper from fragment + fragment.textContent = ""; + + i = 0; + while ( ( elem = nodes[ i++ ] ) ) { + + // Skip elements already in the context collection (trac-4087) + if ( selection && jQuery.inArray( elem, selection ) > -1 ) { + if ( ignored ) { + ignored.push( elem ); + } + continue; + } + + contains = jQuery.contains( elem.ownerDocument, elem ); + + // Append to fragment + tmp = getAll( fragment.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( contains ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( ( elem = tmp[ j++ ] ) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + return fragment; + } + + + ( function() { + var fragment = document.createDocumentFragment(), + div = fragment.appendChild( document.createElement( "div" ) ), + input = document.createElement( "input" ); + + // Support: Android 4.0-4.3, Safari<=5.1 + // Check state lost if the name is set (#11217) + // Support: Windows Web Apps (WWA) + // `name` and `type` must use .setAttribute for WWA (#14901) + input.setAttribute( "type", "radio" ); + input.setAttribute( "checked", "checked" ); + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + + // Support: Safari<=5.1, Android<4.2 + // Older WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE<=11+ + // Make sure textarea (and checkbox) defaultValue is properly cloned + div.innerHTML = "<textarea>x</textarea>"; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; + } )(); + + + var + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, + rtypenamespace = /^([^.]*)(?:\.(.+)|)/; + + function returnTrue() { + return true; + } + + function returnFalse() { + return false; + } + + // Support: IE9 + // See #13393 for more info + function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } + } + + function on( elem, types, selector, data, fn, one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + on( elem, type, selector, data, types[ type ], one ); + } + return elem; + } + + if ( data == null && fn == null ) { + + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return elem; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return elem.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + } ); + } + + /* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ + jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + + var handleObjIn, eventHandle, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.get( elem ); + + // Don't attach events to noData or text/comment nodes (but allow plain objects) + if ( !elemData ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !( events = elemData.events ) ) { + events = elemData.events = {}; + } + if ( !( eventHandle = elemData.handle ) ) { + eventHandle = elemData.handle = function( e ) { + + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? + jQuery.event.dispatch.apply( elem, arguments ) : undefined; + }; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnotwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend( { + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join( "." ) + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !( handlers = events[ type ] ) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener if the special events handler returns false + if ( !special.setup || + special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var j, origCount, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); + + if ( !elemData || !( events = elemData.events ) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnotwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[ 2 ] && + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || + selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || + special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove data and the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + dataPriv.remove( elem, "handle events" ); + } + }, + + dispatch: function( event ) { + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( event ); + + var i, j, ret, matched, handleObj, + handlerQueue = [], + args = slice.call( arguments ), + handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[ 0 ] = event; + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( ( handleObj = matched.handlers[ j++ ] ) && + !event.isImmediatePropagationStopped() ) { + + // Triggered event must either 1) have no namespace, or 2) have namespace(s) + // a subset or equal to those in the bound event (both can have no namespace). + if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || + handleObj.handler ).apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( ( event.result = ret ) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var i, matches, sel, handleObj, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Support (at least): Chrome, IE9 + // Find delegate handlers + // Black-hole SVG <use> instance trees (#13180) + // + // Support: Firefox<=42+ + // Avoid non-left-click in FF but don't block IE radio events (#3861, gh-2343) + if ( delegateCount && cur.nodeType && + ( event.type !== "click" || isNaN( event.button ) || event.button < 1 ) ) { + + for ( ; cur !== this; cur = cur.parentNode || this ) { + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && ( cur.disabled !== true || event.type !== "click" ) ) { + matches = []; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matches[ sel ] === undefined ) { + matches[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) > -1 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matches[ sel ] ) { + matches.push( handleObj ); + } + } + if ( matches.length ) { + handlerQueue.push( { elem: cur, handlers: matches } ); + } + } + } + } + + // Add the remaining (directly-bound) handlers + if ( delegateCount < handlers.length ) { + handlerQueue.push( { elem: this, handlers: handlers.slice( delegateCount ) } ); + } + + return handlerQueue; + }, + + // Includes some event props shared by KeyEvent and MouseEvent + props: ( "altKey bubbles cancelable ctrlKey currentTarget detail eventPhase " + + "metaKey relatedTarget shiftKey target timeStamp view which" ).split( " " ), + + fixHooks: {}, + + keyHooks: { + props: "char charCode key keyCode".split( " " ), + filter: function( event, original ) { + + // Add which for key events + if ( event.which == null ) { + event.which = original.charCode != null ? original.charCode : original.keyCode; + } + + return event; + } + }, + + mouseHooks: { + props: ( "button buttons clientX clientY offsetX offsetY pageX pageY " + + "screenX screenY toElement" ).split( " " ), + filter: function( event, original ) { + var eventDoc, doc, body, + button = original.button; + + // Calculate pageX/Y if missing and clientX/Y available + if ( event.pageX == null && original.clientX != null ) { + eventDoc = event.target.ownerDocument || document; + doc = eventDoc.documentElement; + body = eventDoc.body; + + event.pageX = original.clientX + + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - + ( doc && doc.clientLeft || body && body.clientLeft || 0 ); + event.pageY = original.clientY + + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - + ( doc && doc.clientTop || body && body.clientTop || 0 ); + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + // Note: button is not normalized, so don't use it + if ( !event.which && button !== undefined ) { + event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); + } + + return event; + } + }, + + fix: function( event ) { + if ( event[ jQuery.expando ] ) { + return event; + } + + // Create a writable copy of the event object and normalize some properties + var i, prop, copy, + type = event.type, + originalEvent = event, + fixHook = this.fixHooks[ type ]; + + if ( !fixHook ) { + this.fixHooks[ type ] = fixHook = + rmouseEvent.test( type ) ? this.mouseHooks : + rkeyEvent.test( type ) ? this.keyHooks : + {}; + } + copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; + + event = new jQuery.Event( originalEvent ); + + i = copy.length; + while ( i-- ) { + prop = copy[ i ]; + event[ prop ] = originalEvent[ prop ]; + } + + // Support: Cordova 2.5 (WebKit) (#13255) + // All events should have a target; Cordova deviceready doesn't + if ( !event.target ) { + event.target = document; + } + + // Support: Safari 6.0+, Chrome<28 + // Target should not be a text node (#504, #13143) + if ( event.target.nodeType === 3 ) { + event.target = event.target.parentNode; + } + + return fixHook.filter ? fixHook.filter( event, originalEvent ) : event; + }, + + special: { + load: { + + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + focus: { + + // Fire native event if possible so blur/focus sequence is correct + trigger: function() { + if ( this !== safeActiveElement() && this.focus ) { + this.focus(); + return false; + } + }, + delegateType: "focusin" + }, + blur: { + trigger: function() { + if ( this === safeActiveElement() && this.blur ) { + this.blur(); + return false; + } + }, + delegateType: "focusout" + }, + click: { + + // For checkbox, fire native event so checked state will be right + trigger: function() { + if ( this.type === "checkbox" && this.click && jQuery.nodeName( this, "input" ) ) { + this.click(); + return false; + } + }, + + // For cross-browser consistency, don't fire native .click() on links + _default: function( event ) { + return jQuery.nodeName( event.target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Support: Firefox 20+ + // Firefox doesn't alert if the returnValue field is not set. + if ( event.result !== undefined && event.originalEvent ) { + event.originalEvent.returnValue = event.result; + } + } + } + } + }; + + jQuery.removeEvent = function( elem, type, handle ) { + + // This "if" is needed for plain objects + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle ); + } + }; + + jQuery.Event = function( src, props ) { + + // Allow instantiation without the 'new' keyword + if ( !( this instanceof jQuery.Event ) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = src.defaultPrevented || + src.defaultPrevented === undefined && + + // Support: Android<4.0 + src.returnValue === false ? + returnTrue : + returnFalse; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || jQuery.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; + }; + + // jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding + // http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html + jQuery.Event.prototype = { + constructor: jQuery.Event, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + + if ( e ) { + e.preventDefault(); + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + + if ( e ) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } + }; + + // Create mouseenter/leave events using mouseover/out and event-time checks + // so that event delegation works in jQuery. + // Do the same for pointerenter/pointerleave and pointerover/pointerout + // + // Support: Safari 7 only + // Safari sends mouseenter too often; see: + // https://code.google.com/p/chromium/issues/detail?id=470258 + // for the description of the bug (it existed in older Chrome versions as well). + jQuery.each( { + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" + }, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mouseenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; + } ); + + jQuery.fn.extend( { + on: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn ); + }, + one: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? + handleObj.origType + "." + handleObj.namespace : + handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each( function() { + jQuery.event.remove( this, types, fn, selector ); + } ); + } + } ); + + + var + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi, + + // Support: IE 10-11, Edge 10240+ + // In IE/Edge using regex groups here causes severe slowdowns. + // See https://connect.microsoft.com/IE/feedback/details/1736512/ + rnoInnerhtml = /<script|<style|<link/i, + + // checked="checked" or checked + rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, + rscriptTypeMasked = /^true\/(.*)/, + rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g; + + // Manipulating tables requires a tbody + function manipulationTarget( elem, content ) { + return jQuery.nodeName( elem, "table" ) && + jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ? + + elem.getElementsByTagName( "tbody" )[ 0 ] || + elem.appendChild( elem.ownerDocument.createElement( "tbody" ) ) : + elem; + } + + // Replace/restore the type attribute of script elements for safe DOM manipulation + function disableScript( elem ) { + elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; + return elem; + } + function restoreScript( elem ) { + var match = rscriptTypeMasked.exec( elem.type ); + + if ( match ) { + elem.type = match[ 1 ]; + } else { + elem.removeAttribute( "type" ); + } + + return elem; + } + + function cloneCopyEvent( src, dest ) { + var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events; + + if ( dest.nodeType !== 1 ) { + return; + } + + // 1. Copy private data: events, handlers, etc. + if ( dataPriv.hasData( src ) ) { + pdataOld = dataPriv.access( src ); + pdataCur = dataPriv.set( dest, pdataOld ); + events = pdataOld.events; + + if ( events ) { + delete pdataCur.handle; + pdataCur.events = {}; + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + } + + // 2. Copy user data + if ( dataUser.hasData( src ) ) { + udataOld = dataUser.access( src ); + udataCur = jQuery.extend( {}, udataOld ); + + dataUser.set( dest, udataCur ); + } + } + + // Fix IE bugs, see support tests + function fixInput( src, dest ) { + var nodeName = dest.nodeName.toLowerCase(); + + // Fails to persist the checked state of a cloned checkbox or radio button. + if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + dest.checked = src.checked; + + // Fails to return the selected option to the default selected state when cloning options + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } + } + + function domManip( collection, args, callback, ignored ) { + + // Flatten any nested arrays + args = concat.apply( [], args ); + + var fragment, first, scripts, hasScripts, node, doc, + i = 0, + l = collection.length, + iNoClone = l - 1, + value = args[ 0 ], + isFunction = jQuery.isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( isFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return collection.each( function( index ) { + var self = collection.eq( index ); + if ( isFunction ) { + args[ 0 ] = value.call( this, index, self.html() ); + } + domManip( self, args, callback, ignored ); + } ); + } + + if ( l ) { + fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + // Require either new content or an interest in ignored elements to invoke the callback + if ( first || ignored ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item + // instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + + // Support: Android<4.1, PhantomJS<2 + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( collection[ i ], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !dataPriv.access( node, "globalEval" ) && + jQuery.contains( doc, node ) ) { + + if ( node.src ) { + + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl ) { + jQuery._evalUrl( node.src ); + } + } else { + jQuery.globalEval( node.textContent.replace( rcleanScript, "" ) ); + } + } + } + } + } + } + + return collection; + } + + function remove( elem, selector, keepData ) { + var node, + nodes = selector ? jQuery.filter( selector, elem ) : elem, + i = 0; + + for ( ; ( node = nodes[ i ] ) != null; i++ ) { + if ( !keepData && node.nodeType === 1 ) { + jQuery.cleanData( getAll( node ) ); + } + + if ( node.parentNode ) { + if ( keepData && jQuery.contains( node.ownerDocument, node ) ) { + setGlobalEval( getAll( node, "script" ) ); + } + node.parentNode.removeChild( node ); + } + } + + return elem; + } + + jQuery.extend( { + htmlPrefilter: function( html ) { + return html.replace( rxhtmlTag, "<$1></$2>" ); + }, + + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var i, l, srcElements, destElements, + clone = elem.cloneNode( true ), + inPage = jQuery.contains( elem.ownerDocument, elem ); + + // Fix IE cloning issues + if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && + !jQuery.isXMLDoc( elem ) ) { + + // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + fixInput( srcElements[ i ], destElements[ i ] ); + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + cloneCopyEvent( srcElements[ i ], destElements[ i ] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + // Return the cloned set + return clone; + }, + + cleanData: function( elems ) { + var data, elem, type, + special = jQuery.event.special, + i = 0; + + for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { + if ( acceptData( elem ) ) { + if ( ( data = elem[ dataPriv.expando ] ) ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Support: Chrome <= 35-45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataPriv.expando ] = undefined; + } + if ( elem[ dataUser.expando ] ) { + + // Support: Chrome <= 35-45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataUser.expando ] = undefined; + } + } + } + } + } ); + + jQuery.fn.extend( { + + // Keep domManip exposed until 3.0 (gh-2225) + domManip: domManip, + + detach: function( selector ) { + return remove( this, selector, true ); + }, + + remove: function( selector ) { + return remove( this, selector ); + }, + + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().each( function() { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.textContent = value; + } + } ); + }, null, value, arguments.length ); + }, + + append: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + } ); + }, + + prepend: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + } ); + }, + + before: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + } ); + }, + + after: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + } ); + }, + + empty: function() { + var elem, + i = 0; + + for ( ; ( elem = this[ i ] ) != null; i++ ) { + if ( elem.nodeType === 1 ) { + + // Prevent memory leaks + jQuery.cleanData( getAll( elem, false ) ); + + // Remove any remaining nodes + elem.textContent = ""; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function() { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + } ); + }, + + html: function( value ) { + return access( this, function( value ) { + var elem = this[ 0 ] || {}, + i = 0, + l = this.length; + + if ( value === undefined && elem.nodeType === 1 ) { + return elem.innerHTML; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { + + value = jQuery.htmlPrefilter( value ); + + try { + for ( ; i < l; i++ ) { + elem = this[ i ] || {}; + + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch ( e ) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var ignored = []; + + // Make the changes, replacing each non-ignored context element with the new content + return domManip( this, arguments, function( elem ) { + var parent = this.parentNode; + + if ( jQuery.inArray( this, ignored ) < 0 ) { + jQuery.cleanData( getAll( this ) ); + if ( parent ) { + parent.replaceChild( elem, this ); + } + } + + // Force callback invocation + }, ignored ); + } + } ); + + jQuery.each( { + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" + }, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1, + i = 0; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone( true ); + jQuery( insert[ i ] )[ original ]( elems ); + + // Support: QtWebKit + // .get() because push.apply(_, arraylike) throws + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; + } ); + + + var iframe, + elemdisplay = { + + // Support: Firefox + // We have to pre-define these values for FF (#10227) + HTML: "block", + BODY: "block" + }; + + /** + * Retrieve the actual display of a element + * @param {String} name nodeName of the element + * @param {Object} doc Document object + */ + + // Called only from within defaultDisplay + function actualDisplay( name, doc ) { + var elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ), + + display = jQuery.css( elem[ 0 ], "display" ); + + // We don't have any data stored on the element, + // so use "detach" method as fast way to get rid of the element + elem.detach(); + + return display; + } + + /** + * Try to determine the default display value of an element + * @param {String} nodeName + */ + function defaultDisplay( nodeName ) { + var doc = document, + display = elemdisplay[ nodeName ]; + + if ( !display ) { + display = actualDisplay( nodeName, doc ); + + // If the simple way fails, read from inside an iframe + if ( display === "none" || !display ) { + + // Use the already-created iframe if possible + iframe = ( iframe || jQuery( "<iframe frameborder='0' width='0' height='0'/>" ) ) + .appendTo( doc.documentElement ); + + // Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse + doc = iframe[ 0 ].contentDocument; + + // Support: IE + doc.write(); + doc.close(); + + display = actualDisplay( nodeName, doc ); + iframe.detach(); + } + + // Store the correct default display + elemdisplay[ nodeName ] = display; + } + + return display; + } + var rmargin = ( /^margin/ ); + + var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); + + var getStyles = function( elem ) { + + // Support: IE<=11+, Firefox<=30+ (#15098, #14150) + // IE throws on elements created in popups + // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" + var view = elem.ownerDocument.defaultView; + + if ( !view || !view.opener ) { + view = window; + } + + return view.getComputedStyle( elem ); + }; + + var swap = function( elem, options, callback, args ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.apply( elem, args || [] ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; + }; + + + var documentElement = document.documentElement; + + + + ( function() { + var pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, reliableMarginLeftVal, + container = document.createElement( "div" ), + div = document.createElement( "div" ); + + // Finish early in limited (non-browser) environments + if ( !div.style ) { + return; + } + + // Support: IE9-11+ + // Style of cloned element affects source element cloned (#8908) + div.style.backgroundClip = "content-box"; + div.cloneNode( true ).style.backgroundClip = ""; + support.clearCloneStyle = div.style.backgroundClip === "content-box"; + + container.style.cssText = "border:0;width:8px;height:0;top:0;left:-9999px;" + + "padding:0;margin-top:1px;position:absolute"; + container.appendChild( div ); + + // Executing both pixelPosition & boxSizingReliable tests require only one layout + // so they're executed at the same time to save the second computation. + function computeStyleTests() { + div.style.cssText = + + // Support: Firefox<29, Android 2.3 + // Vendor-prefix box-sizing + "-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;" + + "position:relative;display:block;" + + "margin:auto;border:1px;padding:1px;" + + "top:1%;width:50%"; + div.innerHTML = ""; + documentElement.appendChild( container ); + + var divStyle = window.getComputedStyle( div ); + pixelPositionVal = divStyle.top !== "1%"; + reliableMarginLeftVal = divStyle.marginLeft === "2px"; + boxSizingReliableVal = divStyle.width === "4px"; + + // Support: Android 4.0 - 4.3 only + // Some styles come back with percentage values, even though they shouldn't + div.style.marginRight = "50%"; + pixelMarginRightVal = divStyle.marginRight === "4px"; + + documentElement.removeChild( container ); + } + + jQuery.extend( support, { + pixelPosition: function() { + + // This test is executed only once but we still do memoizing + // since we can use the boxSizingReliable pre-computing. + // No need to check if the test was already performed, though. + computeStyleTests(); + return pixelPositionVal; + }, + boxSizingReliable: function() { + if ( boxSizingReliableVal == null ) { + computeStyleTests(); + } + return boxSizingReliableVal; + }, + pixelMarginRight: function() { + + // Support: Android 4.0-4.3 + // We're checking for boxSizingReliableVal here instead of pixelMarginRightVal + // since that compresses better and they're computed together anyway. + if ( boxSizingReliableVal == null ) { + computeStyleTests(); + } + return pixelMarginRightVal; + }, + reliableMarginLeft: function() { + + // Support: IE <=8 only, Android 4.0 - 4.3 only, Firefox <=3 - 37 + if ( boxSizingReliableVal == null ) { + computeStyleTests(); + } + return reliableMarginLeftVal; + }, + reliableMarginRight: function() { + + // Support: Android 2.3 + // Check if div with explicit width and no margin-right incorrectly + // gets computed margin-right based on width of container. (#3333) + // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right + // This support function is only executed once so no memoizing is needed. + var ret, + marginDiv = div.appendChild( document.createElement( "div" ) ); + + // Reset CSS: box-sizing; display; margin; border; padding + marginDiv.style.cssText = div.style.cssText = + + // Support: Android 2.3 + // Vendor-prefix box-sizing + "-webkit-box-sizing:content-box;box-sizing:content-box;" + + "display:block;margin:0;border:0;padding:0"; + marginDiv.style.marginRight = marginDiv.style.width = "0"; + div.style.width = "1px"; + documentElement.appendChild( container ); + + ret = !parseFloat( window.getComputedStyle( marginDiv ).marginRight ); + + documentElement.removeChild( container ); + div.removeChild( marginDiv ); + + return ret; + } + } ); + } )(); + + + function curCSS( elem, name, computed ) { + var width, minWidth, maxWidth, ret, + style = elem.style; + + computed = computed || getStyles( elem ); + ret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined; + + // Support: Opera 12.1x only + // Fall back to style even without computed + // computed is undefined for elems on document fragments + if ( ( ret === "" || ret === undefined ) && !jQuery.contains( elem.ownerDocument, elem ) ) { + ret = jQuery.style( elem, name ); + } + + // Support: IE9 + // getPropertyValue is only needed for .css('filter') (#12537) + if ( computed ) { + + // A tribute to the "awesome hack by Dean Edwards" + // Android Browser returns percentage for some values, + // but width seems to be reliably pixels. + // This is against the CSSOM draft spec: + // http://dev.w3.org/csswg/cssom/#resolved-values + if ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) { + + // Remember the original values + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + // Put in the new values to get a computed value out + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + // Revert the changed values + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret !== undefined ? + + // Support: IE9-11+ + // IE returns zIndex value as an integer. + ret + "" : + ret; + } + + + function addGetHookIf( conditionFn, hookFn ) { + + // Define the hook, we'll check on the first run if it's really needed. + return { + get: function() { + if ( conditionFn() ) { + + // Hook not needed (or it's not possible to use it due + // to missing dependency), remove it. + delete this.get; + return; + } + + // Hook needed; redefine it so that the support test is not executed again. + return ( this.get = hookFn ).apply( this, arguments ); + } + }; + } + + + var + + // Swappable if display is none or starts with table + // except "table", "table-cell", or "table-caption" + // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: "0", + fontWeight: "400" + }, + + cssPrefixes = [ "Webkit", "O", "Moz", "ms" ], + emptyStyle = document.createElement( "div" ).style; + + // Return a css property mapped to a potentially vendor prefixed property + function vendorPropName( name ) { + + // Shortcut for names that are not vendor prefixed + if ( name in emptyStyle ) { + return name; + } + + // Check for vendor prefixed names + var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in emptyStyle ) { + return name; + } + } + } + + function setPositiveNumber( elem, value, subtract ) { + + // Any relative (+/-) values have already been + // normalized at this point + var matches = rcssNum.exec( value ); + return matches ? + + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : + value; + } + + function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) { + var i = extra === ( isBorderBox ? "border" : "content" ) ? + + // If we already have the right measurement, avoid augmentation + 4 : + + // Otherwise initialize for horizontal or vertical properties + name === "width" ? 1 : 0, + + val = 0; + + for ( ; i < 4; i += 2 ) { + + // Both box models exclude margin, so add it if we want it + if ( extra === "margin" ) { + val += jQuery.css( elem, extra + cssExpand[ i ], true, styles ); + } + + if ( isBorderBox ) { + + // border-box includes padding, so remove it if we want content + if ( extra === "content" ) { + val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // At this point, extra isn't border nor margin, so remove border + if ( extra !== "margin" ) { + val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } else { + + // At this point, extra isn't content, so add padding + val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // At this point, extra isn't content nor padding, so add border + if ( extra !== "padding" ) { + val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + return val; + } + + function getWidthOrHeight( elem, name, extra ) { + + // Start with offset property, which is equivalent to the border-box value + var valueIsBorderBox = true, + val = name === "width" ? elem.offsetWidth : elem.offsetHeight, + styles = getStyles( elem ), + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; + + // Support: IE11 only + // In IE 11 fullscreen elements inside of an iframe have + // 100x too small dimensions (gh-1764). + if ( document.msFullscreenElement && window.top !== window ) { + + // Support: IE11 only + // Running getBoundingClientRect on a disconnected node + // in IE throws an error. + if ( elem.getClientRects().length ) { + val = Math.round( elem.getBoundingClientRect()[ name ] * 100 ); + } + } + + // Some non-html elements return undefined for offsetWidth, so check for null/undefined + // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285 + // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668 + if ( val <= 0 || val == null ) { + + // Fall back to computed then uncomputed css if necessary + val = curCSS( elem, name, styles ); + if ( val < 0 || val == null ) { + val = elem.style[ name ]; + } + + // Computed unit is not pixels. Stop here and return. + if ( rnumnonpx.test( val ) ) { + return val; + } + + // Check for style in case a browser which returns unreliable values + // for getComputedStyle silently falls back to the reliable elem.style + valueIsBorderBox = isBorderBox && + ( support.boxSizingReliable() || val === elem.style[ name ] ); + + // Normalize "", auto, and prepare for extra + val = parseFloat( val ) || 0; + } + + // Use the active box-sizing model to add/subtract irrelevant styles + return ( val + + augmentWidthOrHeight( + elem, + name, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles + ) + ) + "px"; + } + + function showHide( elements, show ) { + var display, elem, hidden, + values = [], + index = 0, + length = elements.length; + + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + + values[ index ] = dataPriv.get( elem, "olddisplay" ); + display = elem.style.display; + if ( show ) { + + // Reset the inline display of this element to learn if it is + // being hidden by cascaded rules or not + if ( !values[ index ] && display === "none" ) { + elem.style.display = ""; + } + + // Set elements which have been overridden with display: none + // in a stylesheet to whatever the default browser style is + // for such an element + if ( elem.style.display === "" && isHidden( elem ) ) { + values[ index ] = dataPriv.access( + elem, + "olddisplay", + defaultDisplay( elem.nodeName ) + ); + } + } else { + hidden = isHidden( elem ); + + if ( display !== "none" || !hidden ) { + dataPriv.set( + elem, + "olddisplay", + hidden ? display : jQuery.css( elem, "display" ) + ); + } + } + } + + // Set the display of most of the elements in a second loop + // to avoid the constant reflow + for ( index = 0; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + if ( !show || elem.style.display === "none" || elem.style.display === "" ) { + elem.style.display = show ? values[ index ] || "" : "none"; + } + } + + return elements; + } + + jQuery.extend( { + + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + } + } + } + }, + + // Don't automatically add "px" to these possibly-unitless properties + cssNumber: { + "animationIterationCount": true, + "columnCount": true, + "fillOpacity": true, + "flexGrow": true, + "flexShrink": true, + "fontWeight": true, + "lineHeight": true, + "opacity": true, + "order": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: { + "float": "cssFloat" + }, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = jQuery.camelCase( name ), + style = elem.style; + + name = jQuery.cssProps[ origName ] || + ( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName ); + + // Gets hook for the prefixed version, then unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // Convert "+=" or "-=" to relative numbers (#7345) + if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { + value = adjustCSS( elem, name, ret ); + + // Fixes bug #9237 + type = "number"; + } + + // Make sure that null and NaN values aren't set (#7116) + if ( value == null || value !== value ) { + return; + } + + // If a number was passed in, add the unit (except for certain CSS properties) + if ( type === "number" ) { + value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); + } + + // Support: IE9-11+ + // background-* props affect original clone's values + if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { + style[ name ] = "inherit"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !( "set" in hooks ) || + ( value = hooks.set( elem, value, extra ) ) !== undefined ) { + + style[ name ] = value; + } + + } else { + + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && + ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { + + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, extra, styles ) { + var val, num, hooks, + origName = jQuery.camelCase( name ); + + // Make sure that we're working with the right name + name = jQuery.cssProps[ origName ] || + ( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName ); + + // Try prefixed name followed by the unprefixed name + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name, styles ); + } + + // Convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Make numeric if forced or a qualifier was provided and val looks numeric + if ( extra === "" || extra ) { + num = parseFloat( val ); + return extra === true || isFinite( num ) ? num || 0 : val; + } + return val; + } + } ); + + jQuery.each( [ "height", "width" ], function( i, name ) { + jQuery.cssHooks[ name ] = { + get: function( elem, computed, extra ) { + if ( computed ) { + + // Certain elements can have dimension info if we invisibly show them + // but it must have a current display style that would benefit + return rdisplayswap.test( jQuery.css( elem, "display" ) ) && + elem.offsetWidth === 0 ? + swap( elem, cssShow, function() { + return getWidthOrHeight( elem, name, extra ); + } ) : + getWidthOrHeight( elem, name, extra ); + } + }, + + set: function( elem, value, extra ) { + var matches, + styles = extra && getStyles( elem ), + subtract = extra && augmentWidthOrHeight( + elem, + name, + extra, + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + styles + ); + + // Convert to pixels if value adjustment is needed + if ( subtract && ( matches = rcssNum.exec( value ) ) && + ( matches[ 3 ] || "px" ) !== "px" ) { + + elem.style[ name ] = value; + value = jQuery.css( elem, name ); + } + + return setPositiveNumber( elem, value, subtract ); + } + }; + } ); + + jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, + function( elem, computed ) { + if ( computed ) { + return ( parseFloat( curCSS( elem, "marginLeft" ) ) || + elem.getBoundingClientRect().left - + swap( elem, { marginLeft: 0 }, function() { + return elem.getBoundingClientRect().left; + } ) + ) + "px"; + } + } + ); + + // Support: Android 2.3 + jQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight, + function( elem, computed ) { + if ( computed ) { + return swap( elem, { "display": "inline-block" }, + curCSS, [ elem, "marginRight" ] ); + } + } + ); + + // These hooks are used by animate to expand properties + jQuery.each( { + margin: "", + padding: "", + border: "Width" + }, function( prefix, suffix ) { + jQuery.cssHooks[ prefix + suffix ] = { + expand: function( value ) { + var i = 0, + expanded = {}, + + // Assumes a single number if not a string + parts = typeof value === "string" ? value.split( " " ) : [ value ]; + + for ( ; i < 4; i++ ) { + expanded[ prefix + cssExpand[ i ] + suffix ] = + parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; + } + + return expanded; + } + }; + + if ( !rmargin.test( prefix ) ) { + jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; + } + } ); + + jQuery.fn.extend( { + css: function( name, value ) { + return access( this, function( elem, name, value ) { + var styles, len, + map = {}, + i = 0; + + if ( jQuery.isArray( name ) ) { + styles = getStyles( elem ); + len = name.length; + + for ( ; i < len; i++ ) { + map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); + } + + return map; + } + + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + }, + show: function() { + return showHide( this, true ); + }, + hide: function() { + return showHide( this ); + }, + toggle: function( state ) { + if ( typeof state === "boolean" ) { + return state ? this.show() : this.hide(); + } + + return this.each( function() { + if ( isHidden( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + } ); + } + } ); + + + function Tween( elem, options, prop, end, easing ) { + return new Tween.prototype.init( elem, options, prop, end, easing ); + } + jQuery.Tween = Tween; + + Tween.prototype = { + constructor: Tween, + init: function( elem, options, prop, end, easing, unit ) { + this.elem = elem; + this.prop = prop; + this.easing = easing || jQuery.easing._default; + this.options = options; + this.start = this.now = this.cur(); + this.end = end; + this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + }, + cur: function() { + var hooks = Tween.propHooks[ this.prop ]; + + return hooks && hooks.get ? + hooks.get( this ) : + Tween.propHooks._default.get( this ); + }, + run: function( percent ) { + var eased, + hooks = Tween.propHooks[ this.prop ]; + + if ( this.options.duration ) { + this.pos = eased = jQuery.easing[ this.easing ]( + percent, this.options.duration * percent, 0, 1, this.options.duration + ); + } else { + this.pos = eased = percent; + } + this.now = ( this.end - this.start ) * eased + this.start; + + if ( this.options.step ) { + this.options.step.call( this.elem, this.now, this ); + } + + if ( hooks && hooks.set ) { + hooks.set( this ); + } else { + Tween.propHooks._default.set( this ); + } + return this; + } + }; + + Tween.prototype.init.prototype = Tween.prototype; + + Tween.propHooks = { + _default: { + get: function( tween ) { + var result; + + // Use a property on the element directly when it is not a DOM element, + // or when there is no matching style property that exists. + if ( tween.elem.nodeType !== 1 || + tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { + return tween.elem[ tween.prop ]; + } + + // Passing an empty string as a 3rd parameter to .css will automatically + // attempt a parseFloat and fallback to a string if the parse fails. + // Simple values such as "10px" are parsed to Float; + // complex values such as "rotate(1rad)" are returned as-is. + result = jQuery.css( tween.elem, tween.prop, "" ); + + // Empty strings, null, undefined and "auto" are converted to 0. + return !result || result === "auto" ? 0 : result; + }, + set: function( tween ) { + + // Use step hook for back compat. + // Use cssHook if its there. + // Use .style if available and use plain properties where available. + if ( jQuery.fx.step[ tween.prop ] ) { + jQuery.fx.step[ tween.prop ]( tween ); + } else if ( tween.elem.nodeType === 1 && + ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || + jQuery.cssHooks[ tween.prop ] ) ) { + jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); + } else { + tween.elem[ tween.prop ] = tween.now; + } + } + } + }; + + // Support: IE9 + // Panic based approach to setting things on disconnected nodes + Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { + set: function( tween ) { + if ( tween.elem.nodeType && tween.elem.parentNode ) { + tween.elem[ tween.prop ] = tween.now; + } + } + }; + + jQuery.easing = { + linear: function( p ) { + return p; + }, + swing: function( p ) { + return 0.5 - Math.cos( p * Math.PI ) / 2; + }, + _default: "swing" + }; + + jQuery.fx = Tween.prototype.init; + + // Back Compat <1.8 extension point + jQuery.fx.step = {}; + + + + + var + fxNow, timerId, + rfxtypes = /^(?:toggle|show|hide)$/, + rrun = /queueHooks$/; + + // Animations created synchronously will run synchronously + function createFxNow() { + window.setTimeout( function() { + fxNow = undefined; + } ); + return ( fxNow = jQuery.now() ); + } + + // Generate parameters to create a standard animation + function genFx( type, includeWidth ) { + var which, + i = 0, + attrs = { height: type }; + + // If we include width, step value is 1 to do all cssExpand values, + // otherwise step value is 2 to skip over Left and Right + includeWidth = includeWidth ? 1 : 0; + for ( ; i < 4 ; i += 2 - includeWidth ) { + which = cssExpand[ i ]; + attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; + } + + if ( includeWidth ) { + attrs.opacity = attrs.width = type; + } + + return attrs; + } + + function createTween( value, prop, animation ) { + var tween, + collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), + index = 0, + length = collection.length; + for ( ; index < length; index++ ) { + if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { + + // We're done with this property + return tween; + } + } + } + + function defaultPrefilter( elem, props, opts ) { + /* jshint validthis: true */ + var prop, value, toggle, tween, hooks, oldfire, display, checkDisplay, + anim = this, + orig = {}, + style = elem.style, + hidden = elem.nodeType && isHidden( elem ), + dataShow = dataPriv.get( elem, "fxshow" ); + + // Handle queue: false promises + if ( !opts.queue ) { + hooks = jQuery._queueHooks( elem, "fx" ); + if ( hooks.unqueued == null ) { + hooks.unqueued = 0; + oldfire = hooks.empty.fire; + hooks.empty.fire = function() { + if ( !hooks.unqueued ) { + oldfire(); + } + }; + } + hooks.unqueued++; + + anim.always( function() { + + // Ensure the complete handler is called before this completes + anim.always( function() { + hooks.unqueued--; + if ( !jQuery.queue( elem, "fx" ).length ) { + hooks.empty.fire(); + } + } ); + } ); + } + + // Height/width overflow pass + if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) { + + // Make sure that nothing sneaks out + // Record all 3 overflow attributes because IE9-10 do not + // change the overflow attribute when overflowX and + // overflowY are set to the same value + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + + // Set display property to inline-block for height/width + // animations on inline elements that are having width/height animated + display = jQuery.css( elem, "display" ); + + // Test default display if display is currently "none" + checkDisplay = display === "none" ? + dataPriv.get( elem, "olddisplay" ) || defaultDisplay( elem.nodeName ) : display; + + if ( checkDisplay === "inline" && jQuery.css( elem, "float" ) === "none" ) { + style.display = "inline-block"; + } + } + + if ( opts.overflow ) { + style.overflow = "hidden"; + anim.always( function() { + style.overflow = opts.overflow[ 0 ]; + style.overflowX = opts.overflow[ 1 ]; + style.overflowY = opts.overflow[ 2 ]; + } ); + } + + // show/hide pass + for ( prop in props ) { + value = props[ prop ]; + if ( rfxtypes.exec( value ) ) { + delete props[ prop ]; + toggle = toggle || value === "toggle"; + if ( value === ( hidden ? "hide" : "show" ) ) { + + // If there is dataShow left over from a stopped hide or show + // and we are going to proceed with show, we should pretend to be hidden + if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { + hidden = true; + } else { + continue; + } + } + orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); + + // Any non-fx value stops us from restoring the original display value + } else { + display = undefined; + } + } + + if ( !jQuery.isEmptyObject( orig ) ) { + if ( dataShow ) { + if ( "hidden" in dataShow ) { + hidden = dataShow.hidden; + } + } else { + dataShow = dataPriv.access( elem, "fxshow", {} ); + } + + // Store state if its toggle - enables .stop().toggle() to "reverse" + if ( toggle ) { + dataShow.hidden = !hidden; + } + if ( hidden ) { + jQuery( elem ).show(); + } else { + anim.done( function() { + jQuery( elem ).hide(); + } ); + } + anim.done( function() { + var prop; + + dataPriv.remove( elem, "fxshow" ); + for ( prop in orig ) { + jQuery.style( elem, prop, orig[ prop ] ); + } + } ); + for ( prop in orig ) { + tween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); + + if ( !( prop in dataShow ) ) { + dataShow[ prop ] = tween.start; + if ( hidden ) { + tween.end = tween.start; + tween.start = prop === "width" || prop === "height" ? 1 : 0; + } + } + } + + // If this is a noop like .hide().hide(), restore an overwritten display value + } else if ( ( display === "none" ? defaultDisplay( elem.nodeName ) : display ) === "inline" ) { + style.display = display; + } + } + + function propFilter( props, specialEasing ) { + var index, name, easing, value, hooks; + + // camelCase, specialEasing and expand cssHook pass + for ( index in props ) { + name = jQuery.camelCase( index ); + easing = specialEasing[ name ]; + value = props[ index ]; + if ( jQuery.isArray( value ) ) { + easing = value[ 1 ]; + value = props[ index ] = value[ 0 ]; + } + + if ( index !== name ) { + props[ name ] = value; + delete props[ index ]; + } + + hooks = jQuery.cssHooks[ name ]; + if ( hooks && "expand" in hooks ) { + value = hooks.expand( value ); + delete props[ name ]; + + // Not quite $.extend, this won't overwrite existing keys. + // Reusing 'index' because we have the correct "name" + for ( index in value ) { + if ( !( index in props ) ) { + props[ index ] = value[ index ]; + specialEasing[ index ] = easing; + } + } + } else { + specialEasing[ name ] = easing; + } + } + } + + function Animation( elem, properties, options ) { + var result, + stopped, + index = 0, + length = Animation.prefilters.length, + deferred = jQuery.Deferred().always( function() { + + // Don't match elem in the :animated selector + delete tick.elem; + } ), + tick = function() { + if ( stopped ) { + return false; + } + var currentTime = fxNow || createFxNow(), + remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), + + // Support: Android 2.3 + // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) + temp = remaining / animation.duration || 0, + percent = 1 - temp, + index = 0, + length = animation.tweens.length; + + for ( ; index < length ; index++ ) { + animation.tweens[ index ].run( percent ); + } + + deferred.notifyWith( elem, [ animation, percent, remaining ] ); + + if ( percent < 1 && length ) { + return remaining; + } else { + deferred.resolveWith( elem, [ animation ] ); + return false; + } + }, + animation = deferred.promise( { + elem: elem, + props: jQuery.extend( {}, properties ), + opts: jQuery.extend( true, { + specialEasing: {}, + easing: jQuery.easing._default + }, options ), + originalProperties: properties, + originalOptions: options, + startTime: fxNow || createFxNow(), + duration: options.duration, + tweens: [], + createTween: function( prop, end ) { + var tween = jQuery.Tween( elem, animation.opts, prop, end, + animation.opts.specialEasing[ prop ] || animation.opts.easing ); + animation.tweens.push( tween ); + return tween; + }, + stop: function( gotoEnd ) { + var index = 0, + + // If we are going to the end, we want to run all the tweens + // otherwise we skip this part + length = gotoEnd ? animation.tweens.length : 0; + if ( stopped ) { + return this; + } + stopped = true; + for ( ; index < length ; index++ ) { + animation.tweens[ index ].run( 1 ); + } + + // Resolve when we played the last frame; otherwise, reject + if ( gotoEnd ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + deferred.resolveWith( elem, [ animation, gotoEnd ] ); + } else { + deferred.rejectWith( elem, [ animation, gotoEnd ] ); + } + return this; + } + } ), + props = animation.props; + + propFilter( props, animation.opts.specialEasing ); + + for ( ; index < length ; index++ ) { + result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); + if ( result ) { + if ( jQuery.isFunction( result.stop ) ) { + jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = + jQuery.proxy( result.stop, result ); + } + return result; + } + } + + jQuery.map( props, createTween, animation ); + + if ( jQuery.isFunction( animation.opts.start ) ) { + animation.opts.start.call( elem, animation ); + } + + jQuery.fx.timer( + jQuery.extend( tick, { + elem: elem, + anim: animation, + queue: animation.opts.queue + } ) + ); + + // attach callbacks from options + return animation.progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); + } + + jQuery.Animation = jQuery.extend( Animation, { + tweeners: { + "*": [ function( prop, value ) { + var tween = this.createTween( prop, value ); + adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); + return tween; + } ] + }, + + tweener: function( props, callback ) { + if ( jQuery.isFunction( props ) ) { + callback = props; + props = [ "*" ]; + } else { + props = props.match( rnotwhite ); + } + + var prop, + index = 0, + length = props.length; + + for ( ; index < length ; index++ ) { + prop = props[ index ]; + Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; + Animation.tweeners[ prop ].unshift( callback ); + } + }, + + prefilters: [ defaultPrefilter ], + + prefilter: function( callback, prepend ) { + if ( prepend ) { + Animation.prefilters.unshift( callback ); + } else { + Animation.prefilters.push( callback ); + } + } + } ); + + jQuery.speed = function( speed, easing, fn ) { + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { + complete: fn || !fn && easing || + jQuery.isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing + }; + + opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? + opt.duration : opt.duration in jQuery.fx.speeds ? + jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default; + + // Normalize opt.queue - true/undefined/null -> "fx" + if ( opt.queue == null || opt.queue === true ) { + opt.queue = "fx"; + } + + // Queueing + opt.old = opt.complete; + + opt.complete = function() { + if ( jQuery.isFunction( opt.old ) ) { + opt.old.call( this ); + } + + if ( opt.queue ) { + jQuery.dequeue( this, opt.queue ); + } + }; + + return opt; + }; + + jQuery.fn.extend( { + fadeTo: function( speed, to, easing, callback ) { + + // Show any hidden elements after setting opacity to 0 + return this.filter( isHidden ).css( "opacity", 0 ).show() + + // Animate to the value specified + .end().animate( { opacity: to }, speed, easing, callback ); + }, + animate: function( prop, speed, easing, callback ) { + var empty = jQuery.isEmptyObject( prop ), + optall = jQuery.speed( speed, easing, callback ), + doAnimation = function() { + + // Operate on a copy of prop so per-property easing won't be lost + var anim = Animation( this, jQuery.extend( {}, prop ), optall ); + + // Empty animations, or finishing resolves immediately + if ( empty || dataPriv.get( this, "finish" ) ) { + anim.stop( true ); + } + }; + doAnimation.finish = doAnimation; + + return empty || optall.queue === false ? + this.each( doAnimation ) : + this.queue( optall.queue, doAnimation ); + }, + stop: function( type, clearQueue, gotoEnd ) { + var stopQueue = function( hooks ) { + var stop = hooks.stop; + delete hooks.stop; + stop( gotoEnd ); + }; + + if ( typeof type !== "string" ) { + gotoEnd = clearQueue; + clearQueue = type; + type = undefined; + } + if ( clearQueue && type !== false ) { + this.queue( type || "fx", [] ); + } + + return this.each( function() { + var dequeue = true, + index = type != null && type + "queueHooks", + timers = jQuery.timers, + data = dataPriv.get( this ); + + if ( index ) { + if ( data[ index ] && data[ index ].stop ) { + stopQueue( data[ index ] ); + } + } else { + for ( index in data ) { + if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { + stopQueue( data[ index ] ); + } + } + } + + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && + ( type == null || timers[ index ].queue === type ) ) { + + timers[ index ].anim.stop( gotoEnd ); + dequeue = false; + timers.splice( index, 1 ); + } + } + + // Start the next in the queue if the last step wasn't forced. + // Timers currently will call their complete callbacks, which + // will dequeue but only if they were gotoEnd. + if ( dequeue || !gotoEnd ) { + jQuery.dequeue( this, type ); + } + } ); + }, + finish: function( type ) { + if ( type !== false ) { + type = type || "fx"; + } + return this.each( function() { + var index, + data = dataPriv.get( this ), + queue = data[ type + "queue" ], + hooks = data[ type + "queueHooks" ], + timers = jQuery.timers, + length = queue ? queue.length : 0; + + // Enable finishing flag on private data + data.finish = true; + + // Empty the queue first + jQuery.queue( this, type, [] ); + + if ( hooks && hooks.stop ) { + hooks.stop.call( this, true ); + } + + // Look for any active animations, and finish them + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && timers[ index ].queue === type ) { + timers[ index ].anim.stop( true ); + timers.splice( index, 1 ); + } + } + + // Look for any animations in the old queue and finish them + for ( index = 0; index < length; index++ ) { + if ( queue[ index ] && queue[ index ].finish ) { + queue[ index ].finish.call( this ); + } + } + + // Turn off finishing flag + delete data.finish; + } ); + } + } ); + + jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) { + var cssFn = jQuery.fn[ name ]; + jQuery.fn[ name ] = function( speed, easing, callback ) { + return speed == null || typeof speed === "boolean" ? + cssFn.apply( this, arguments ) : + this.animate( genFx( name, true ), speed, easing, callback ); + }; + } ); + + // Generate shortcuts for custom animations + jQuery.each( { + slideDown: genFx( "show" ), + slideUp: genFx( "hide" ), + slideToggle: genFx( "toggle" ), + fadeIn: { opacity: "show" }, + fadeOut: { opacity: "hide" }, + fadeToggle: { opacity: "toggle" } + }, function( name, props ) { + jQuery.fn[ name ] = function( speed, easing, callback ) { + return this.animate( props, speed, easing, callback ); + }; + } ); + + jQuery.timers = []; + jQuery.fx.tick = function() { + var timer, + i = 0, + timers = jQuery.timers; + + fxNow = jQuery.now(); + + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + + // Checks the timer has not already been removed + if ( !timer() && timers[ i ] === timer ) { + timers.splice( i--, 1 ); + } + } + + if ( !timers.length ) { + jQuery.fx.stop(); + } + fxNow = undefined; + }; + + jQuery.fx.timer = function( timer ) { + jQuery.timers.push( timer ); + if ( timer() ) { + jQuery.fx.start(); + } else { + jQuery.timers.pop(); + } + }; + + jQuery.fx.interval = 13; + jQuery.fx.start = function() { + if ( !timerId ) { + timerId = window.setInterval( jQuery.fx.tick, jQuery.fx.interval ); + } + }; + + jQuery.fx.stop = function() { + window.clearInterval( timerId ); + + timerId = null; + }; + + jQuery.fx.speeds = { + slow: 600, + fast: 200, + + // Default speed + _default: 400 + }; + + + // Based off of the plugin by Clint Helfers, with permission. + // http://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ + jQuery.fn.delay = function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = window.setTimeout( next, time ); + hooks.stop = function() { + window.clearTimeout( timeout ); + }; + } ); + }; + + + ( function() { + var input = document.createElement( "input" ), + select = document.createElement( "select" ), + opt = select.appendChild( document.createElement( "option" ) ); + + input.type = "checkbox"; + + // Support: iOS<=5.1, Android<=4.2+ + // Default value for a checkbox should be "on" + support.checkOn = input.value !== ""; + + // Support: IE<=11+ + // Must access selectedIndex to make default options select + support.optSelected = opt.selected; + + // Support: Android<=2.3 + // Options inside disabled selects are incorrectly marked as disabled + select.disabled = true; + support.optDisabled = !opt.disabled; + + // Support: IE<=11+ + // An input loses its value after becoming a radio + input = document.createElement( "input" ); + input.value = "t"; + input.type = "radio"; + support.radioValue = input.value === "t"; + } )(); + + + var boolHook, + attrHandle = jQuery.expr.attrHandle; + + jQuery.fn.extend( { + attr: function( name, value ) { + return access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each( function() { + jQuery.removeAttr( this, name ); + } ); + } + } ); + + jQuery.extend( { + attr: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set attributes on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + // All attributes are lowercase + // Grab necessary hook if one is defined + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + name = name.toLowerCase(); + hooks = jQuery.attrHooks[ name ] || + ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); + } + + if ( value !== undefined ) { + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + } + + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + elem.setAttribute( name, value + "" ); + return value; + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + ret = jQuery.find.attr( elem, name ); + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? undefined : ret; + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !support.radioValue && value === "radio" && + jQuery.nodeName( elem, "input" ) ) { + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + }, + + removeAttr: function( elem, value ) { + var name, propName, + i = 0, + attrNames = value && value.match( rnotwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( ( name = attrNames[ i++ ] ) ) { + propName = jQuery.propFix[ name ] || name; + + // Boolean attributes get special treatment (#10870) + if ( jQuery.expr.match.bool.test( name ) ) { + + // Set corresponding property to false + elem[ propName ] = false; + } + + elem.removeAttribute( name ); + } + } + } + } ); + + // Hooks for boolean attributes + boolHook = { + set: function( elem, value, name ) { + if ( value === false ) { + + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + elem.setAttribute( name, name ); + } + return name; + } + }; + jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) { + var getter = attrHandle[ name ] || jQuery.find.attr; + + attrHandle[ name ] = function( elem, name, isXML ) { + var ret, handle; + if ( !isXML ) { + + // Avoid an infinite loop by temporarily removing this function from the getter + handle = attrHandle[ name ]; + attrHandle[ name ] = ret; + ret = getter( elem, name, isXML ) != null ? + name.toLowerCase() : + null; + attrHandle[ name ] = handle; + } + return ret; + }; + } ); + + + + + var rfocusable = /^(?:input|select|textarea|button)$/i, + rclickable = /^(?:a|area)$/i; + + jQuery.fn.extend( { + prop: function( name, value ) { + return access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + return this.each( function() { + delete this[ jQuery.propFix[ name ] || name ]; + } ); + } + } ); + + jQuery.extend( { + prop: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set properties on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + return ( elem[ name ] = value ); + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + return elem[ name ]; + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + + // elem.tabIndex doesn't always return the + // correct value when it hasn't been explicitly set + // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + // Use proper attribute retrieval(#12072) + var tabindex = jQuery.find.attr( elem, "tabindex" ); + + return tabindex ? + parseInt( tabindex, 10 ) : + rfocusable.test( elem.nodeName ) || + rclickable.test( elem.nodeName ) && elem.href ? + 0 : + -1; + } + } + }, + + propFix: { + "for": "htmlFor", + "class": "className" + } + } ); + + // Support: IE <=11 only + // Accessing the selectedIndex property + // forces the browser to respect setting selected + // on the option + // The getter ensures a default option is selected + // when in an optgroup + if ( !support.optSelected ) { + jQuery.propHooks.selected = { + get: function( elem ) { + var parent = elem.parentNode; + if ( parent && parent.parentNode ) { + parent.parentNode.selectedIndex; + } + return null; + }, + set: function( elem ) { + var parent = elem.parentNode; + if ( parent ) { + parent.selectedIndex; + + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + } + }; + } + + jQuery.each( [ + "tabIndex", + "readOnly", + "maxLength", + "cellSpacing", + "cellPadding", + "rowSpan", + "colSpan", + "useMap", + "frameBorder", + "contentEditable" + ], function() { + jQuery.propFix[ this.toLowerCase() ] = this; + } ); + + + + + var rclass = /[\t\r\n\f]/g; + + function getClass( elem ) { + return elem.getAttribute && elem.getAttribute( "class" ) || ""; + } + + jQuery.fn.extend( { + addClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( jQuery.isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( typeof value === "string" && value ) { + classes = value.match( rnotwhite ) || []; + + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + cur = elem.nodeType === 1 && + ( " " + curValue + " " ).replace( rclass, " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + if ( cur.indexOf( " " + clazz + " " ) < 0 ) { + cur += clazz + " "; + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = jQuery.trim( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( jQuery.isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( !arguments.length ) { + return this.attr( "class", "" ); + } + + if ( typeof value === "string" && value ) { + classes = value.match( rnotwhite ) || []; + + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + + // This expression is here for better compressibility (see addClass) + cur = elem.nodeType === 1 && + ( " " + curValue + " " ).replace( rclass, " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + + // Remove *all* instances + while ( cur.indexOf( " " + clazz + " " ) > -1 ) { + cur = cur.replace( " " + clazz + " ", " " ); + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = jQuery.trim( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value; + + if ( typeof stateVal === "boolean" && type === "string" ) { + return stateVal ? this.addClass( value ) : this.removeClass( value ); + } + + if ( jQuery.isFunction( value ) ) { + return this.each( function( i ) { + jQuery( this ).toggleClass( + value.call( this, i, getClass( this ), stateVal ), + stateVal + ); + } ); + } + + return this.each( function() { + var className, i, self, classNames; + + if ( type === "string" ) { + + // Toggle individual class names + i = 0; + self = jQuery( this ); + classNames = value.match( rnotwhite ) || []; + + while ( ( className = classNames[ i++ ] ) ) { + + // Check each className given, space separated list + if ( self.hasClass( className ) ) { + self.removeClass( className ); + } else { + self.addClass( className ); + } + } + + // Toggle whole class name + } else if ( value === undefined || type === "boolean" ) { + className = getClass( this ); + if ( className ) { + + // Store className if set + dataPriv.set( this, "__className__", className ); + } + + // If the element has a class name or if we're passed `false`, + // then remove the whole classname (if there was one, the above saved it). + // Otherwise bring back whatever was previously saved (if anything), + // falling back to the empty string if nothing was stored. + if ( this.setAttribute ) { + this.setAttribute( "class", + className || value === false ? + "" : + dataPriv.get( this, "__className__" ) || "" + ); + } + } + } ); + }, + + hasClass: function( selector ) { + var className, elem, + i = 0; + + className = " " + selector + " "; + while ( ( elem = this[ i++ ] ) ) { + if ( elem.nodeType === 1 && + ( " " + getClass( elem ) + " " ).replace( rclass, " " ) + .indexOf( className ) > -1 + ) { + return true; + } + } + + return false; + } + } ); + + + + + var rreturn = /\r/g, + rspaces = /[\x20\t\r\n\f]+/g; + + jQuery.fn.extend( { + val: function( value ) { + var hooks, ret, isFunction, + elem = this[ 0 ]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || + jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && + "get" in hooks && + ( ret = hooks.get( elem, "value" ) ) !== undefined + ) { + return ret; + } + + ret = elem.value; + + return typeof ret === "string" ? + + // Handle most common string cases + ret.replace( rreturn, "" ) : + + // Handle cases where value is null/undef or number + ret == null ? "" : ret; + } + + return; + } + + isFunction = jQuery.isFunction( value ); + + return this.each( function( i ) { + var val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( isFunction ) { + val = value.call( this, i, jQuery( this ).val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + + } else if ( typeof val === "number" ) { + val += ""; + + } else if ( jQuery.isArray( val ) ) { + val = jQuery.map( val, function( value ) { + return value == null ? "" : value + ""; + } ); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + } ); + } + } ); + + jQuery.extend( { + valHooks: { + option: { + get: function( elem ) { + + var val = jQuery.find.attr( elem, "value" ); + return val != null ? + val : + + // Support: IE10-11+ + // option.text throws exceptions (#14686, #14858) + // Strip and collapse whitespace + // https://html.spec.whatwg.org/#strip-and-collapse-whitespace + jQuery.trim( jQuery.text( elem ) ).replace( rspaces, " " ); + } + }, + select: { + get: function( elem ) { + var value, option, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one" || index < 0, + values = one ? null : [], + max = one ? index + 1 : options.length, + i = index < 0 ? + max : + one ? index : 0; + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // IE8-9 doesn't update selected after form reset (#2551) + if ( ( option.selected || i === index ) && + + // Don't return options that are disabled or in a disabled optgroup + ( support.optDisabled ? + !option.disabled : option.getAttribute( "disabled" ) === null ) && + ( !option.parentNode.disabled || + !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + }, + + set: function( elem, value ) { + var optionSet, option, + options = elem.options, + values = jQuery.makeArray( value ), + i = options.length; + + while ( i-- ) { + option = options[ i ]; + if ( option.selected = + jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 + ) { + optionSet = true; + } + } + + // Force browsers to behave consistently when non-matching value is set + if ( !optionSet ) { + elem.selectedIndex = -1; + } + return values; + } + } + } + } ); + + // Radios and checkboxes getter/setter + jQuery.each( [ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + set: function( elem, value ) { + if ( jQuery.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); + } + } + }; + if ( !support.checkOn ) { + jQuery.valHooks[ this ].get = function( elem ) { + return elem.getAttribute( "value" ) === null ? "on" : elem.value; + }; + } + } ); + + + + + // Return jQuery for attributes-only inclusion + + + var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/; + + jQuery.extend( jQuery.event, { + + trigger: function( event, data, elem, onlyHandlers ) { + + var i, cur, tmp, bubbleType, ontype, handle, special, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; + + cur = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "." ) > -1 ) { + + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split( "." ); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf( ":" ) < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join( "." ); + event.rnamespace = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === ( elem.ownerDocument || document ) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { + + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] && + dataPriv.get( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && acceptData( cur ) ) { + event.result = handle.apply( cur, data ); + if ( event.result === false ) { + event.preventDefault(); + } + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( ( !special._default || + special._default.apply( eventPath.pop(), data ) === false ) && + acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name name as the event. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + elem[ type ](); + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + // Piggyback on a donor event to simulate a different one + simulate: function( type, elem, event ) { + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true + + // Previously, `originalEvent: {}` was set here, so stopPropagation call + // would not be triggered on donor event, since in our own + // jQuery.event.stopPropagation function we had a check for existence of + // originalEvent.stopPropagation method, so, consequently it would be a noop. + // + // But now, this "simulate" function is used only for events + // for which stopPropagation() is noop, so there is no need for that anymore. + // + // For the 1.x branch though, guard for "click" and "submit" + // events is still used, but was moved to jQuery.event.stopPropagation function + // because `originalEvent` should point to the original event for the constancy + // with other events and for more focused logic + } + ); + + jQuery.event.trigger( e, null, elem ); + + if ( e.isDefaultPrevented() ) { + event.preventDefault(); + } + } + + } ); + + jQuery.fn.extend( { + + trigger: function( type, data ) { + return this.each( function() { + jQuery.event.trigger( type, data, this ); + } ); + }, + triggerHandler: function( type, data ) { + var elem = this[ 0 ]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } + } ); + + + jQuery.each( ( "blur focus focusin focusout load resize scroll unload click dblclick " + + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + + "change select submit keydown keypress keyup error contextmenu" ).split( " " ), + function( i, name ) { + + // Handle event binding + jQuery.fn[ name ] = function( data, fn ) { + return arguments.length > 0 ? + this.on( name, null, data, fn ) : + this.trigger( name ); + }; + } ); + + jQuery.fn.extend( { + hover: function( fnOver, fnOut ) { + return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); + } + } ); + + + + + support.focusin = "onfocusin" in window; + + + // Support: Firefox + // Firefox doesn't have focus(in | out) events + // Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 + // + // Support: Chrome, Safari + // focus(in | out) events fire after focus & blur events, + // which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order + // Related ticket - https://code.google.com/p/chromium/issues/detail?id=449857 + if ( !support.focusin ) { + jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler on the document while someone wants focusin/focusout + var handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + var doc = this.ownerDocument || this, + attaches = dataPriv.access( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this, + attaches = dataPriv.access( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + dataPriv.remove( doc, fix ); + + } else { + dataPriv.access( doc, fix, attaches ); + } + } + }; + } ); + } + var location = window.location; + + var nonce = jQuery.now(); + + var rquery = ( /\?/ ); + + + + // Support: Android 2.3 + // Workaround failure to string-cast null input + jQuery.parseJSON = function( data ) { + return JSON.parse( data + "" ); + }; + + + // Cross-browser xml parsing + jQuery.parseXML = function( data ) { + var xml; + if ( !data || typeof data !== "string" ) { + return null; + } + + // Support: IE9 + try { + xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); + } catch ( e ) { + xml = undefined; + } + + if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; + }; + + + var + rhash = /#.*$/, + rts = /([?&])_=[^&]*/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, + + // #7653, #8125, #8152: local protocol detection + rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + + /* Prefilters + * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) + * 2) These are called: + * - BEFORE asking for a transport + * - AFTER param serialization (s.data is a string if s.processData is true) + * 3) key is the dataType + * 4) the catchall symbol "*" can be used + * 5) execution will start with transport dataType and THEN continue down to "*" if needed + */ + prefilters = {}, + + /* Transports bindings + * 1) key is the dataType + * 2) the catchall symbol "*" can be used + * 3) selection will start with transport dataType and THEN go to "*" if needed + */ + transports = {}, + + // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression + allTypes = "*/".concat( "*" ), + + // Anchor tag for parsing the document origin + originAnchor = document.createElement( "a" ); + originAnchor.href = location.href; + + // Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport + function addToPrefiltersOrTransports( structure ) { + + // dataTypeExpression is optional and defaults to "*" + return function( dataTypeExpression, func ) { + + if ( typeof dataTypeExpression !== "string" ) { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + var dataType, + i = 0, + dataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || []; + + if ( jQuery.isFunction( func ) ) { + + // For each dataType in the dataTypeExpression + while ( ( dataType = dataTypes[ i++ ] ) ) { + + // Prepend if requested + if ( dataType[ 0 ] === "+" ) { + dataType = dataType.slice( 1 ) || "*"; + ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); + + // Otherwise append + } else { + ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); + } + } + } + }; + } + + // Base inspection function for prefilters and transports + function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { + + var inspected = {}, + seekingTransport = ( structure === transports ); + + function inspect( dataType ) { + var selected; + inspected[ dataType ] = true; + jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { + var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); + if ( typeof dataTypeOrTransport === "string" && + !seekingTransport && !inspected[ dataTypeOrTransport ] ) { + + options.dataTypes.unshift( dataTypeOrTransport ); + inspect( dataTypeOrTransport ); + return false; + } else if ( seekingTransport ) { + return !( selected = dataTypeOrTransport ); + } + } ); + return selected; + } + + return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); + } + + // A special extend for ajax options + // that takes "flat" options (not to be deep extended) + // Fixes #9887 + function ajaxExtend( target, src ) { + var key, deep, + flatOptions = jQuery.ajaxSettings.flatOptions || {}; + + for ( key in src ) { + if ( src[ key ] !== undefined ) { + ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; + } + } + if ( deep ) { + jQuery.extend( true, target, deep ); + } + + return target; + } + + /* Handles responses to an ajax request: + * - finds the right dataType (mediates between content-type and expected dataType) + * - returns the corresponding response + */ + function ajaxHandleResponses( s, jqXHR, responses ) { + + var ct, type, finalDataType, firstDataType, + contents = s.contents, + dataTypes = s.dataTypes; + + // Remove auto dataType and get content-type in the process + while ( dataTypes[ 0 ] === "*" ) { + dataTypes.shift(); + if ( ct === undefined ) { + ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); + } + } + + // Check if we're dealing with a known content-type + if ( ct ) { + for ( type in contents ) { + if ( contents[ type ] && contents[ type ].test( ct ) ) { + dataTypes.unshift( type ); + break; + } + } + } + + // Check to see if we have a response for the expected dataType + if ( dataTypes[ 0 ] in responses ) { + finalDataType = dataTypes[ 0 ]; + } else { + + // Try convertible dataTypes + for ( type in responses ) { + if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { + finalDataType = type; + break; + } + if ( !firstDataType ) { + firstDataType = type; + } + } + + // Or just use first one + finalDataType = finalDataType || firstDataType; + } + + // If we found a dataType + // We add the dataType to the list if needed + // and return the corresponding response + if ( finalDataType ) { + if ( finalDataType !== dataTypes[ 0 ] ) { + dataTypes.unshift( finalDataType ); + } + return responses[ finalDataType ]; + } + } + + /* Chain conversions given the request and the original response + * Also sets the responseXXX fields on the jqXHR instance + */ + function ajaxConvert( s, response, jqXHR, isSuccess ) { + var conv2, current, conv, tmp, prev, + converters = {}, + + // Work with a copy of dataTypes in case we need to modify it for conversion + dataTypes = s.dataTypes.slice(); + + // Create converters map with lowercased keys + if ( dataTypes[ 1 ] ) { + for ( conv in s.converters ) { + converters[ conv.toLowerCase() ] = s.converters[ conv ]; + } + } + + current = dataTypes.shift(); + + // Convert to each sequential dataType + while ( current ) { + + if ( s.responseFields[ current ] ) { + jqXHR[ s.responseFields[ current ] ] = response; + } + + // Apply the dataFilter if provided + if ( !prev && isSuccess && s.dataFilter ) { + response = s.dataFilter( response, s.dataType ); + } + + prev = current; + current = dataTypes.shift(); + + if ( current ) { + + // There's only work to do if current dataType is non-auto + if ( current === "*" ) { + + current = prev; + + // Convert response if prev dataType is non-auto and differs from current + } else if ( prev !== "*" && prev !== current ) { + + // Seek a direct converter + conv = converters[ prev + " " + current ] || converters[ "* " + current ]; + + // If none found, seek a pair + if ( !conv ) { + for ( conv2 in converters ) { + + // If conv2 outputs current + tmp = conv2.split( " " ); + if ( tmp[ 1 ] === current ) { + + // If prev can be converted to accepted input + conv = converters[ prev + " " + tmp[ 0 ] ] || + converters[ "* " + tmp[ 0 ] ]; + if ( conv ) { + + // Condense equivalence converters + if ( conv === true ) { + conv = converters[ conv2 ]; + + // Otherwise, insert the intermediate dataType + } else if ( converters[ conv2 ] !== true ) { + current = tmp[ 0 ]; + dataTypes.unshift( tmp[ 1 ] ); + } + break; + } + } + } + } + + // Apply converter (if not an equivalence) + if ( conv !== true ) { + + // Unless errors are allowed to bubble, catch and return them + if ( conv && s.throws ) { + response = conv( response ); + } else { + try { + response = conv( response ); + } catch ( e ) { + return { + state: "parsererror", + error: conv ? e : "No conversion from " + prev + " to " + current + }; + } + } + } + } + } + } + + return { state: "success", data: response }; + } + + jQuery.extend( { + + // Counter for holding the number of active queries + active: 0, + + // Last-Modified header cache for next request + lastModified: {}, + etag: {}, + + ajaxSettings: { + url: location.href, + type: "GET", + isLocal: rlocalProtocol.test( location.protocol ), + global: true, + processData: true, + async: true, + contentType: "application/x-www-form-urlencoded; charset=UTF-8", + /* + timeout: 0, + data: null, + dataType: null, + username: null, + password: null, + cache: null, + throws: false, + traditional: false, + headers: {}, + */ + + accepts: { + "*": allTypes, + text: "text/plain", + html: "text/html", + xml: "application/xml, text/xml", + json: "application/json, text/javascript" + }, + + contents: { + xml: /\bxml\b/, + html: /\bhtml/, + json: /\bjson\b/ + }, + + responseFields: { + xml: "responseXML", + text: "responseText", + json: "responseJSON" + }, + + // Data converters + // Keys separate source (or catchall "*") and destination types with a single space + converters: { + + // Convert anything to text + "* text": String, + + // Text to html (true = no transformation) + "text html": true, + + // Evaluate text as a json expression + "text json": jQuery.parseJSON, + + // Parse text as xml + "text xml": jQuery.parseXML + }, + + // For options that shouldn't be deep extended: + // you can add your own custom options here if + // and when you create one that shouldn't be + // deep extended (see ajaxExtend) + flatOptions: { + url: true, + context: true + } + }, + + // Creates a full fledged settings object into target + // with both ajaxSettings and settings fields. + // If target is omitted, writes into ajaxSettings. + ajaxSetup: function( target, settings ) { + return settings ? + + // Building a settings object + ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : + + // Extending ajaxSettings + ajaxExtend( jQuery.ajaxSettings, target ); + }, + + ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), + ajaxTransport: addToPrefiltersOrTransports( transports ), + + // Main method + ajax: function( url, options ) { + + // If url is an object, simulate pre-1.5 signature + if ( typeof url === "object" ) { + options = url; + url = undefined; + } + + // Force options to be an object + options = options || {}; + + var transport, + + // URL without anti-cache param + cacheURL, + + // Response headers + responseHeadersString, + responseHeaders, + + // timeout handle + timeoutTimer, + + // Url cleanup var + urlAnchor, + + // To know if global events are to be dispatched + fireGlobals, + + // Loop variable + i, + + // Create the final options object + s = jQuery.ajaxSetup( {}, options ), + + // Callbacks context + callbackContext = s.context || s, + + // Context for global events is callbackContext if it is a DOM node or jQuery collection + globalEventContext = s.context && + ( callbackContext.nodeType || callbackContext.jquery ) ? + jQuery( callbackContext ) : + jQuery.event, + + // Deferreds + deferred = jQuery.Deferred(), + completeDeferred = jQuery.Callbacks( "once memory" ), + + // Status-dependent callbacks + statusCode = s.statusCode || {}, + + // Headers (they are sent all at once) + requestHeaders = {}, + requestHeadersNames = {}, + + // The jqXHR state + state = 0, + + // Default abort message + strAbort = "canceled", + + // Fake xhr + jqXHR = { + readyState: 0, + + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( state === 2 ) { + if ( !responseHeaders ) { + responseHeaders = {}; + while ( ( match = rheaders.exec( responseHeadersString ) ) ) { + responseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ]; + } + } + match = responseHeaders[ key.toLowerCase() ]; + } + return match == null ? null : match; + }, + + // Raw string + getAllResponseHeaders: function() { + return state === 2 ? responseHeadersString : null; + }, + + // Caches the header + setRequestHeader: function( name, value ) { + var lname = name.toLowerCase(); + if ( !state ) { + name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( !state ) { + s.mimeType = type; + } + return this; + }, + + // Status-dependent callbacks + statusCode: function( map ) { + var code; + if ( map ) { + if ( state < 2 ) { + for ( code in map ) { + + // Lazy-add the new callback in a way that preserves old ones + statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; + } + } else { + + // Execute the appropriate callbacks + jqXHR.always( map[ jqXHR.status ] ); + } + } + return this; + }, + + // Cancel the request + abort: function( statusText ) { + var finalText = statusText || strAbort; + if ( transport ) { + transport.abort( finalText ); + } + done( 0, finalText ); + return this; + } + }; + + // Attach deferreds + deferred.promise( jqXHR ).complete = completeDeferred.add; + jqXHR.success = jqXHR.done; + jqXHR.error = jqXHR.fail; + + // Remove hash character (#7531: and string promotion) + // Add protocol if not provided (prefilters might expect it) + // Handle falsy url in the settings object (#10093: consistency with old signature) + // We also use the url parameter if available + s.url = ( ( url || s.url || location.href ) + "" ).replace( rhash, "" ) + .replace( rprotocol, location.protocol + "//" ); + + // Alias method option to type as per ticket #12004 + s.type = options.method || options.type || s.method || s.type; + + // Extract dataTypes list + s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().match( rnotwhite ) || [ "" ]; + + // A cross-domain request is in order when the origin doesn't match the current origin. + if ( s.crossDomain == null ) { + urlAnchor = document.createElement( "a" ); + + // Support: IE8-11+ + // IE throws exception if url is malformed, e.g. http://example.com:80x/ + try { + urlAnchor.href = s.url; + + // Support: IE8-11+ + // Anchor's host property isn't correctly set when s.url is relative + urlAnchor.href = urlAnchor.href; + s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== + urlAnchor.protocol + "//" + urlAnchor.host; + } catch ( e ) { + + // If there is an error parsing the URL, assume it is crossDomain, + // it can be rejected by the transport if it is invalid + s.crossDomain = true; + } + } + + // Convert data if not already a string + if ( s.data && s.processData && typeof s.data !== "string" ) { + s.data = jQuery.param( s.data, s.traditional ); + } + + // Apply prefilters + inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); + + // If request was aborted inside a prefilter, stop there + if ( state === 2 ) { + return jqXHR; + } + + // We can fire global events as of now if asked to + // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) + fireGlobals = jQuery.event && s.global; + + // Watch for a new set of requests + if ( fireGlobals && jQuery.active++ === 0 ) { + jQuery.event.trigger( "ajaxStart" ); + } + + // Uppercase the type + s.type = s.type.toUpperCase(); + + // Determine if request has content + s.hasContent = !rnoContent.test( s.type ); + + // Save the URL in case we're toying with the If-Modified-Since + // and/or If-None-Match header later on + cacheURL = s.url; + + // More options handling for requests with no content + if ( !s.hasContent ) { + + // If data is available, append data to url + if ( s.data ) { + cacheURL = ( s.url += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data ); + + // #9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Add anti-cache in url if needed + if ( s.cache === false ) { + s.url = rts.test( cacheURL ) ? + + // If there is already a '_' parameter, set its value + cacheURL.replace( rts, "$1_=" + nonce++ ) : + + // Otherwise add one to the end + cacheURL + ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + nonce++; + } + } + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + if ( jQuery.lastModified[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); + } + if ( jQuery.etag[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); + } + } + + // Set the correct header, if data is being sent + if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { + jqXHR.setRequestHeader( "Content-Type", s.contentType ); + } + + // Set the Accepts header for the server, depending on the dataType + jqXHR.setRequestHeader( + "Accept", + s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? + s.accepts[ s.dataTypes[ 0 ] ] + + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : + s.accepts[ "*" ] + ); + + // Check for headers option + for ( i in s.headers ) { + jqXHR.setRequestHeader( i, s.headers[ i ] ); + } + + // Allow custom headers/mimetypes and early abort + if ( s.beforeSend && + ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) { + + // Abort if not done already and return + return jqXHR.abort(); + } + + // Aborting is no longer a cancellation + strAbort = "abort"; + + // Install callbacks on deferreds + for ( i in { success: 1, error: 1, complete: 1 } ) { + jqXHR[ i ]( s[ i ] ); + } + + // Get transport + transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); + + // If no transport, we auto-abort + if ( !transport ) { + done( -1, "No Transport" ); + } else { + jqXHR.readyState = 1; + + // Send global event + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); + } + + // If request was aborted inside ajaxSend, stop there + if ( state === 2 ) { + return jqXHR; + } + + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = window.setTimeout( function() { + jqXHR.abort( "timeout" ); + }, s.timeout ); + } + + try { + state = 1; + transport.send( requestHeaders, done ); + } catch ( e ) { + + // Propagate exception as error if not done + if ( state < 2 ) { + done( -1, e ); + + // Simply rethrow otherwise + } else { + throw e; + } + } + } + + // Callback for when everything is done + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; + + // Called once + if ( state === 2 ) { + return; + } + + // State is "done" now + state = 2; + + // Clear timeout if it exists + if ( timeoutTimer ) { + window.clearTimeout( timeoutTimer ); + } + + // Dereference transport for early garbage collection + // (no matter how long the jqXHR object will be used) + transport = undefined; + + // Cache response headers + responseHeadersString = headers || ""; + + // Set readyState + jqXHR.readyState = status > 0 ? 4 : 0; + + // Determine if successful + isSuccess = status >= 200 && status < 300 || status === 304; + + // Get response data + if ( responses ) { + response = ajaxHandleResponses( s, jqXHR, responses ); + } + + // Convert no matter what (that way responseXXX fields are always set) + response = ajaxConvert( s, response, jqXHR, isSuccess ); + + // If successful, handle type chaining + if ( isSuccess ) { + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + modified = jqXHR.getResponseHeader( "Last-Modified" ); + if ( modified ) { + jQuery.lastModified[ cacheURL ] = modified; + } + modified = jqXHR.getResponseHeader( "etag" ); + if ( modified ) { + jQuery.etag[ cacheURL ] = modified; + } + } + + // if no content + if ( status === 204 || s.type === "HEAD" ) { + statusText = "nocontent"; + + // if not modified + } else if ( status === 304 ) { + statusText = "notmodified"; + + // If we have data, let's convert it + } else { + statusText = response.state; + success = response.data; + error = response.error; + isSuccess = !error; + } + } else { + + // Extract error from statusText and normalize for non-aborts + error = statusText; + if ( status || !statusText ) { + statusText = "error"; + if ( status < 0 ) { + status = 0; + } + } + } + + // Set data for the fake xhr object + jqXHR.status = status; + jqXHR.statusText = ( nativeStatusText || statusText ) + ""; + + // Success/Error + if ( isSuccess ) { + deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); + } else { + deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); + } + + // Status-dependent callbacks + jqXHR.statusCode( statusCode ); + statusCode = undefined; + + if ( fireGlobals ) { + globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", + [ jqXHR, s, isSuccess ? success : error ] ); + } + + // Complete + completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); + + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); + + // Handle the global AJAX counter + if ( !( --jQuery.active ) ) { + jQuery.event.trigger( "ajaxStop" ); + } + } + } + + return jqXHR; + }, + + getJSON: function( url, data, callback ) { + return jQuery.get( url, data, callback, "json" ); + }, + + getScript: function( url, callback ) { + return jQuery.get( url, undefined, callback, "script" ); + } + } ); + + jQuery.each( [ "get", "post" ], function( i, method ) { + jQuery[ method ] = function( url, data, callback, type ) { + + // Shift arguments if data argument was omitted + if ( jQuery.isFunction( data ) ) { + type = type || callback; + callback = data; + data = undefined; + } + + // The url can be an options object (which then must have .url) + return jQuery.ajax( jQuery.extend( { + url: url, + type: method, + dataType: type, + data: data, + success: callback + }, jQuery.isPlainObject( url ) && url ) ); + }; + } ); + + + jQuery._evalUrl = function( url ) { + return jQuery.ajax( { + url: url, + + // Make this explicit, since user can override this through ajaxSetup (#11264) + type: "GET", + dataType: "script", + async: false, + global: false, + "throws": true + } ); + }; + + + jQuery.fn.extend( { + wrapAll: function( html ) { + var wrap; + + if ( jQuery.isFunction( html ) ) { + return this.each( function( i ) { + jQuery( this ).wrapAll( html.call( this, i ) ); + } ); + } + + if ( this[ 0 ] ) { + + // The elements to wrap the target around + wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); + + if ( this[ 0 ].parentNode ) { + wrap.insertBefore( this[ 0 ] ); + } + + wrap.map( function() { + var elem = this; + + while ( elem.firstElementChild ) { + elem = elem.firstElementChild; + } + + return elem; + } ).append( this ); + } + + return this; + }, + + wrapInner: function( html ) { + if ( jQuery.isFunction( html ) ) { + return this.each( function( i ) { + jQuery( this ).wrapInner( html.call( this, i ) ); + } ); + } + + return this.each( function() { + var self = jQuery( this ), + contents = self.contents(); + + if ( contents.length ) { + contents.wrapAll( html ); + + } else { + self.append( html ); + } + } ); + }, + + wrap: function( html ) { + var isFunction = jQuery.isFunction( html ); + + return this.each( function( i ) { + jQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html ); + } ); + }, + + unwrap: function() { + return this.parent().each( function() { + if ( !jQuery.nodeName( this, "body" ) ) { + jQuery( this ).replaceWith( this.childNodes ); + } + } ).end(); + } + } ); + + + jQuery.expr.filters.hidden = function( elem ) { + return !jQuery.expr.filters.visible( elem ); + }; + jQuery.expr.filters.visible = function( elem ) { + + // Support: Opera <= 12.12 + // Opera reports offsetWidths and offsetHeights less than zero on some elements + // Use OR instead of AND as the element is not visible if either is true + // See tickets #10406 and #13132 + return elem.offsetWidth > 0 || elem.offsetHeight > 0 || elem.getClientRects().length > 0; + }; + + + + + var r20 = /%20/g, + rbracket = /\[\]$/, + rCRLF = /\r?\n/g, + rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, + rsubmittable = /^(?:input|select|textarea|keygen)/i; + + function buildParams( prefix, obj, traditional, add ) { + var name; + + if ( jQuery.isArray( obj ) ) { + + // Serialize array item. + jQuery.each( obj, function( i, v ) { + if ( traditional || rbracket.test( prefix ) ) { + + // Treat each array item as a scalar. + add( prefix, v ); + + } else { + + // Item is non-scalar (array or object), encode its numeric index. + buildParams( + prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", + v, + traditional, + add + ); + } + } ); + + } else if ( !traditional && jQuery.type( obj ) === "object" ) { + + // Serialize object item. + for ( name in obj ) { + buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); + } + + } else { + + // Serialize scalar item. + add( prefix, obj ); + } + } + + // Serialize an array of form elements or a set of + // key/values into a query string + jQuery.param = function( a, traditional ) { + var prefix, + s = [], + add = function( key, value ) { + + // If value is a function, invoke it and return its value + value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value ); + s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value ); + }; + + // Set traditional to true for jQuery <= 1.3.2 behavior. + if ( traditional === undefined ) { + traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional; + } + + // If an array was passed in, assume that it is an array of form elements. + if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { + + // Serialize the form elements + jQuery.each( a, function() { + add( this.name, this.value ); + } ); + + } else { + + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for ( prefix in a ) { + buildParams( prefix, a[ prefix ], traditional, add ); + } + } + + // Return the resulting serialization + return s.join( "&" ).replace( r20, "+" ); + }; + + jQuery.fn.extend( { + serialize: function() { + return jQuery.param( this.serializeArray() ); + }, + serializeArray: function() { + return this.map( function() { + + // Can add propHook for "elements" to filter or add form elements + var elements = jQuery.prop( this, "elements" ); + return elements ? jQuery.makeArray( elements ) : this; + } ) + .filter( function() { + var type = this.type; + + // Use .is( ":disabled" ) so that fieldset[disabled] works + return this.name && !jQuery( this ).is( ":disabled" ) && + rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && + ( this.checked || !rcheckableType.test( type ) ); + } ) + .map( function( i, elem ) { + var val = jQuery( this ).val(); + + return val == null ? + null : + jQuery.isArray( val ) ? + jQuery.map( val, function( val ) { + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ) : + { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ).get(); + } + } ); + + + jQuery.ajaxSettings.xhr = function() { + try { + return new window.XMLHttpRequest(); + } catch ( e ) {} + }; + + var xhrSuccessStatus = { + + // File protocol always yields status code 0, assume 200 + 0: 200, + + // Support: IE9 + // #1450: sometimes IE returns 1223 when it should be 204 + 1223: 204 + }, + xhrSupported = jQuery.ajaxSettings.xhr(); + + support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); + support.ajax = xhrSupported = !!xhrSupported; + + jQuery.ajaxTransport( function( options ) { + var callback, errorCallback; + + // Cross domain only allowed if supported through XMLHttpRequest + if ( support.cors || xhrSupported && !options.crossDomain ) { + return { + send: function( headers, complete ) { + var i, + xhr = options.xhr(); + + xhr.open( + options.type, + options.url, + options.async, + options.username, + options.password + ); + + // Apply custom fields if provided + if ( options.xhrFields ) { + for ( i in options.xhrFields ) { + xhr[ i ] = options.xhrFields[ i ]; + } + } + + // Override mime type if needed + if ( options.mimeType && xhr.overrideMimeType ) { + xhr.overrideMimeType( options.mimeType ); + } + + // X-Requested-With header + // For cross-domain requests, seeing as conditions for a preflight are + // akin to a jigsaw puzzle, we simply never set it to be sure. + // (it can always be set on a per-request basis or even using ajaxSetup) + // For same-domain requests, won't change header if already provided. + if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { + headers[ "X-Requested-With" ] = "XMLHttpRequest"; + } + + // Set headers + for ( i in headers ) { + xhr.setRequestHeader( i, headers[ i ] ); + } + + // Callback + callback = function( type ) { + return function() { + if ( callback ) { + callback = errorCallback = xhr.onload = + xhr.onerror = xhr.onabort = xhr.onreadystatechange = null; + + if ( type === "abort" ) { + xhr.abort(); + } else if ( type === "error" ) { + + // Support: IE9 + // On a manual native abort, IE9 throws + // errors on any property access that is not readyState + if ( typeof xhr.status !== "number" ) { + complete( 0, "error" ); + } else { + complete( + + // File: protocol always yields status 0; see #8605, #14207 + xhr.status, + xhr.statusText + ); + } + } else { + complete( + xhrSuccessStatus[ xhr.status ] || xhr.status, + xhr.statusText, + + // Support: IE9 only + // IE9 has no XHR2 but throws on binary (trac-11426) + // For XHR2 non-text, let the caller handle it (gh-2498) + ( xhr.responseType || "text" ) !== "text" || + typeof xhr.responseText !== "string" ? + { binary: xhr.response } : + { text: xhr.responseText }, + xhr.getAllResponseHeaders() + ); + } + } + }; + }; + + // Listen to events + xhr.onload = callback(); + errorCallback = xhr.onerror = callback( "error" ); + + // Support: IE9 + // Use onreadystatechange to replace onabort + // to handle uncaught aborts + if ( xhr.onabort !== undefined ) { + xhr.onabort = errorCallback; + } else { + xhr.onreadystatechange = function() { + + // Check readyState before timeout as it changes + if ( xhr.readyState === 4 ) { + + // Allow onerror to be called first, + // but that will not handle a native abort + // Also, save errorCallback to a variable + // as xhr.onerror cannot be accessed + window.setTimeout( function() { + if ( callback ) { + errorCallback(); + } + } ); + } + }; + } + + // Create the abort callback + callback = callback( "abort" ); + + try { + + // Do send the request (this may raise an exception) + xhr.send( options.hasContent && options.data || null ); + } catch ( e ) { + + // #14683: Only rethrow if this hasn't been notified as an error yet + if ( callback ) { + throw e; + } + } + }, + + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } + } ); + + + + + // Install script dataType + jQuery.ajaxSetup( { + accepts: { + script: "text/javascript, application/javascript, " + + "application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /\b(?:java|ecma)script\b/ + }, + converters: { + "text script": function( text ) { + jQuery.globalEval( text ); + return text; + } + } + } ); + + // Handle cache's special case and crossDomain + jQuery.ajaxPrefilter( "script", function( s ) { + if ( s.cache === undefined ) { + s.cache = false; + } + if ( s.crossDomain ) { + s.type = "GET"; + } + } ); + + // Bind script tag hack transport + jQuery.ajaxTransport( "script", function( s ) { + + // This transport only deals with cross domain requests + if ( s.crossDomain ) { + var script, callback; + return { + send: function( _, complete ) { + script = jQuery( "<script>" ).prop( { + charset: s.scriptCharset, + src: s.url + } ).on( + "load error", + callback = function( evt ) { + script.remove(); + callback = null; + if ( evt ) { + complete( evt.type === "error" ? 404 : 200, evt.type ); + } + } + ); + + // Use native DOM manipulation to avoid our domManip AJAX trickery + document.head.appendChild( script[ 0 ] ); + }, + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } + } ); + + + + + var oldCallbacks = [], + rjsonp = /(=)\?(?=&|$)|\?\?/; + + // Default jsonp settings + jQuery.ajaxSetup( { + jsonp: "callback", + jsonpCallback: function() { + var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) ); + this[ callback ] = true; + return callback; + } + } ); + + // Detect, normalize options and install callbacks for jsonp requests + jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) { + + var callbackName, overwritten, responseContainer, + jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ? + "url" : + typeof s.data === "string" && + ( s.contentType || "" ) + .indexOf( "application/x-www-form-urlencoded" ) === 0 && + rjsonp.test( s.data ) && "data" + ); + + // Handle iff the expected data type is "jsonp" or we have a parameter to set + if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) { + + // Get callback name, remembering preexisting value associated with it + callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ? + s.jsonpCallback() : + s.jsonpCallback; + + // Insert callback into url or form data + if ( jsonProp ) { + s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName ); + } else if ( s.jsonp !== false ) { + s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName; + } + + // Use data converter to retrieve json after script execution + s.converters[ "script json" ] = function() { + if ( !responseContainer ) { + jQuery.error( callbackName + " was not called" ); + } + return responseContainer[ 0 ]; + }; + + // Force json dataType + s.dataTypes[ 0 ] = "json"; + + // Install callback + overwritten = window[ callbackName ]; + window[ callbackName ] = function() { + responseContainer = arguments; + }; + + // Clean-up function (fires after converters) + jqXHR.always( function() { + + // If previous value didn't exist - remove it + if ( overwritten === undefined ) { + jQuery( window ).removeProp( callbackName ); + + // Otherwise restore preexisting value + } else { + window[ callbackName ] = overwritten; + } + + // Save back as free + if ( s[ callbackName ] ) { + + // Make sure that re-using the options doesn't screw things around + s.jsonpCallback = originalSettings.jsonpCallback; + + // Save the callback name for future use + oldCallbacks.push( callbackName ); + } + + // Call if it was a function and we have a response + if ( responseContainer && jQuery.isFunction( overwritten ) ) { + overwritten( responseContainer[ 0 ] ); + } + + responseContainer = overwritten = undefined; + } ); + + // Delegate to script + return "script"; + } + } ); + + + + + // Argument "data" should be string of html + // context (optional): If specified, the fragment will be created in this context, + // defaults to document + // keepScripts (optional): If true, will include scripts passed in the html string + jQuery.parseHTML = function( data, context, keepScripts ) { + if ( !data || typeof data !== "string" ) { + return null; + } + if ( typeof context === "boolean" ) { + keepScripts = context; + context = false; + } + context = context || document; + + var parsed = rsingleTag.exec( data ), + scripts = !keepScripts && []; + + // Single tag + if ( parsed ) { + return [ context.createElement( parsed[ 1 ] ) ]; + } + + parsed = buildFragment( [ data ], context, scripts ); + + if ( scripts && scripts.length ) { + jQuery( scripts ).remove(); + } + + return jQuery.merge( [], parsed.childNodes ); + }; + + + // Keep a copy of the old load method + var _load = jQuery.fn.load; + + /** + * Load a url into a page + */ + jQuery.fn.load = function( url, params, callback ) { + if ( typeof url !== "string" && _load ) { + return _load.apply( this, arguments ); + } + + var selector, type, response, + self = this, + off = url.indexOf( " " ); + + if ( off > -1 ) { + selector = jQuery.trim( url.slice( off ) ); + url = url.slice( 0, off ); + } + + // If it's a function + if ( jQuery.isFunction( params ) ) { + + // We assume that it's the callback + callback = params; + params = undefined; + + // Otherwise, build a param string + } else if ( params && typeof params === "object" ) { + type = "POST"; + } + + // If we have elements to modify, make the request + if ( self.length > 0 ) { + jQuery.ajax( { + url: url, + + // If "type" variable is undefined, then "GET" method will be used. + // Make value of this field explicit since + // user can override it through ajaxSetup method + type: type || "GET", + dataType: "html", + data: params + } ).done( function( responseText ) { + + // Save response for use in complete callback + response = arguments; + + self.html( selector ? + + // If a selector was specified, locate the right elements in a dummy div + // Exclude scripts to avoid IE 'Permission Denied' errors + jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) : + + // Otherwise use the full result + responseText ); + + // If the request succeeds, this function gets "data", "status", "jqXHR" + // but they are ignored because response was set above. + // If it fails, this function gets "jqXHR", "status", "error" + } ).always( callback && function( jqXHR, status ) { + self.each( function() { + callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] ); + } ); + } ); + } + + return this; + }; + + + + + // Attach a bunch of functions for handling common AJAX events + jQuery.each( [ + "ajaxStart", + "ajaxStop", + "ajaxComplete", + "ajaxError", + "ajaxSuccess", + "ajaxSend" + ], function( i, type ) { + jQuery.fn[ type ] = function( fn ) { + return this.on( type, fn ); + }; + } ); + + + + + jQuery.expr.filters.animated = function( elem ) { + return jQuery.grep( jQuery.timers, function( fn ) { + return elem === fn.elem; + } ).length; + }; + + + + + /** + * Gets a window from an element + */ + function getWindow( elem ) { + return jQuery.isWindow( elem ) ? elem : elem.nodeType === 9 && elem.defaultView; + } + + jQuery.offset = { + setOffset: function( elem, options, i ) { + var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition, + position = jQuery.css( elem, "position" ), + curElem = jQuery( elem ), + props = {}; + + // Set position first, in-case top/left are set even on static elem + if ( position === "static" ) { + elem.style.position = "relative"; + } + + curOffset = curElem.offset(); + curCSSTop = jQuery.css( elem, "top" ); + curCSSLeft = jQuery.css( elem, "left" ); + calculatePosition = ( position === "absolute" || position === "fixed" ) && + ( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1; + + // Need to be able to calculate position if either + // top or left is auto and position is either absolute or fixed + if ( calculatePosition ) { + curPosition = curElem.position(); + curTop = curPosition.top; + curLeft = curPosition.left; + + } else { + curTop = parseFloat( curCSSTop ) || 0; + curLeft = parseFloat( curCSSLeft ) || 0; + } + + if ( jQuery.isFunction( options ) ) { + + // Use jQuery.extend here to allow modification of coordinates argument (gh-1848) + options = options.call( elem, i, jQuery.extend( {}, curOffset ) ); + } + + if ( options.top != null ) { + props.top = ( options.top - curOffset.top ) + curTop; + } + if ( options.left != null ) { + props.left = ( options.left - curOffset.left ) + curLeft; + } + + if ( "using" in options ) { + options.using.call( elem, props ); + + } else { + curElem.css( props ); + } + } + }; + + jQuery.fn.extend( { + offset: function( options ) { + if ( arguments.length ) { + return options === undefined ? + this : + this.each( function( i ) { + jQuery.offset.setOffset( this, options, i ); + } ); + } + + var docElem, win, + elem = this[ 0 ], + box = { top: 0, left: 0 }, + doc = elem && elem.ownerDocument; + + if ( !doc ) { + return; + } + + docElem = doc.documentElement; + + // Make sure it's not a disconnected DOM node + if ( !jQuery.contains( docElem, elem ) ) { + return box; + } + + box = elem.getBoundingClientRect(); + win = getWindow( doc ); + return { + top: box.top + win.pageYOffset - docElem.clientTop, + left: box.left + win.pageXOffset - docElem.clientLeft + }; + }, + + position: function() { + if ( !this[ 0 ] ) { + return; + } + + var offsetParent, offset, + elem = this[ 0 ], + parentOffset = { top: 0, left: 0 }; + + // Fixed elements are offset from window (parentOffset = {top:0, left: 0}, + // because it is its only offset parent + if ( jQuery.css( elem, "position" ) === "fixed" ) { + + // Assume getBoundingClientRect is there when computed position is fixed + offset = elem.getBoundingClientRect(); + + } else { + + // Get *real* offsetParent + offsetParent = this.offsetParent(); + + // Get correct offsets + offset = this.offset(); + if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) { + parentOffset = offsetParent.offset(); + } + + // Add offsetParent borders + parentOffset.top += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true ); + parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true ); + } + + // Subtract parent offsets and element margins + return { + top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ), + left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true ) + }; + }, + + // This method will return documentElement in the following cases: + // 1) For the element inside the iframe without offsetParent, this method will return + // documentElement of the parent window + // 2) For the hidden or detached element + // 3) For body or html element, i.e. in case of the html node - it will return itself + // + // but those exceptions were never presented as a real life use-cases + // and might be considered as more preferable results. + // + // This logic, however, is not guaranteed and can change at any point in the future + offsetParent: function() { + return this.map( function() { + var offsetParent = this.offsetParent; + + while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) { + offsetParent = offsetParent.offsetParent; + } + + return offsetParent || documentElement; + } ); + } + } ); + + // Create scrollLeft and scrollTop methods + jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) { + var top = "pageYOffset" === prop; + + jQuery.fn[ method ] = function( val ) { + return access( this, function( elem, method, val ) { + var win = getWindow( elem ); + + if ( val === undefined ) { + return win ? win[ prop ] : elem[ method ]; + } + + if ( win ) { + win.scrollTo( + !top ? val : win.pageXOffset, + top ? val : win.pageYOffset + ); + + } else { + elem[ method ] = val; + } + }, method, val, arguments.length ); + }; + } ); + + // Support: Safari<7-8+, Chrome<37-44+ + // Add the top/left cssHooks using jQuery.fn.position + // Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084 + // Blink bug: https://code.google.com/p/chromium/issues/detail?id=229280 + // getComputedStyle returns percent when specified for top/left/bottom/right; + // rather than make the css module depend on the offset module, just check for it here + jQuery.each( [ "top", "left" ], function( i, prop ) { + jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition, + function( elem, computed ) { + if ( computed ) { + computed = curCSS( elem, prop ); + + // If curCSS returns percentage, fallback to offset + return rnumnonpx.test( computed ) ? + jQuery( elem ).position()[ prop ] + "px" : + computed; + } + } + ); + } ); + + + // Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods + jQuery.each( { Height: "height", Width: "width" }, function( name, type ) { + jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, + function( defaultExtra, funcName ) { + + // Margin is only for outerHeight, outerWidth + jQuery.fn[ funcName ] = function( margin, value ) { + var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ), + extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" ); + + return access( this, function( elem, type, value ) { + var doc; + + if ( jQuery.isWindow( elem ) ) { + + // As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there + // isn't a whole lot we can do. See pull request at this URL for discussion: + // https://github.com/jquery/jquery/pull/764 + return elem.document.documentElement[ "client" + name ]; + } + + // Get document width or height + if ( elem.nodeType === 9 ) { + doc = elem.documentElement; + + // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], + // whichever is greatest + return Math.max( + elem.body[ "scroll" + name ], doc[ "scroll" + name ], + elem.body[ "offset" + name ], doc[ "offset" + name ], + doc[ "client" + name ] + ); + } + + return value === undefined ? + + // Get width or height on the element, requesting but not forcing parseFloat + jQuery.css( elem, type, extra ) : + + // Set width or height on the element + jQuery.style( elem, type, value, extra ); + }, type, chainable ? margin : undefined, chainable, null ); + }; + } ); + } ); + + + jQuery.fn.extend( { + + bind: function( types, data, fn ) { + return this.on( types, null, data, fn ); + }, + unbind: function( types, fn ) { + return this.off( types, null, fn ); + }, + + delegate: function( selector, types, data, fn ) { + return this.on( types, selector, data, fn ); + }, + undelegate: function( selector, types, fn ) { + + // ( namespace ) or ( selector, types [, fn] ) + return arguments.length === 1 ? + this.off( selector, "**" ) : + this.off( types, selector || "**", fn ); + }, + size: function() { + return this.length; + } + } ); + + jQuery.fn.andSelf = jQuery.fn.addBack; + + + + + // Register as a named AMD module, since jQuery can be concatenated with other + // files that may use define, but not via a proper concatenation script that + // understands anonymous AMD modules. A named AMD is safest and most robust + // way to register. Lowercase jquery is used because AMD module names are + // derived from file names, and jQuery is normally delivered in a lowercase + // file name. Do this after creating the global so that if an AMD module wants + // to call noConflict to hide this version of jQuery, it will work. + + // Note that for maximum portability, libraries that are not jQuery should + // declare themselves as anonymous modules, and avoid setting a global if an + // AMD loader is present. jQuery is a special case. For more information, see + // https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon + + if ( true ) { + !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function() { + return jQuery; + }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); + } + + + + var + + // Map over jQuery in case of overwrite + _jQuery = window.jQuery, + + // Map over the $ in case of overwrite + _$ = window.$; + + jQuery.noConflict = function( deep ) { + if ( window.$ === jQuery ) { + window.$ = _$; + } + + if ( deep && window.jQuery === jQuery ) { + window.jQuery = _jQuery; + } + + return jQuery; + }; + + // Expose jQuery and $ identifiers, even in AMD + // (#7102#comment:10, https://github.com/jquery/jquery/pull/557) + // and CommonJS for browser emulators (#13566) + if ( !noGlobal ) { + window.jQuery = window.$ = jQuery; + } + + return jQuery; + })); + + +/***/ }, +/* 4 */ +/***/ function(module, exports) { + + /** + * Created by gavorhes on 12/10/2015. + */ + "use strict"; + /** + * create a namespace on the gv object + * @param {string} namespace to create + * @returns {object} object representing the namespace + */ + function provide(namespace) { + "use strict"; + if (typeof window['gv'] == 'undefined') { + window['gv'] = {}; + } + var parts = namespace.split('.'); + var nameSpace = window['gv']; + for (var i = 0; i < parts.length; i++) { + var newObject = nameSpace[parts[i]]; + if (typeof newObject == 'undefined') { + nameSpace[parts[i]] = {}; + } + nameSpace = nameSpace[parts[i]]; + } + return nameSpace; + } + provide('util'); + window['gv'].util.provide = provide; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.default = provide; + + +/***/ }, +/* 5 */ +/***/ function(module, exports, __webpack_require__) { + + "use strict"; + exports.ol = __webpack_require__(6); + // // export default require('../ol/ol-build'); + // + // const fish = 10; + // export = fish; + // + // + // export function cat(bird: string){ + // console.log('eat the fish') + // } + // + // export function nice(eat: number){ + // console.log('eat that fish'); + // } + // + // export class Big{ + // glenn: string; + // + // constructor(isGlenn){ + // this.glenn = isGlenn; + // } + // + // set isGlenn(f: string){ + // console.log(this.glenn) + // } + // + // run(){ + // console.log(this.glenn + " can run"); + // } + // } + // + // export namespace HereIt{ + // + // export class Big2 { + // glenn: string; + // + // constructor(isGlenn) { + // this.glenn = isGlenn; + // } + // + // set isGlenn(f: string) { + // console.log(this.glenn) + // } + // + // run() { + // console.log(this.glenn + " can run"); + // } + // } + // + // + // } + + +/***/ }, +/* 6 */ +/***/ function(module, exports, __webpack_require__) { + + var require;var require;/* WEBPACK VAR INJECTION */(function(global) {// OpenLayers 3. See http://openlayers.org/ + // License: https://raw.githubusercontent.com/openlayers/ol3/master/LICENSE.md + ;(function (root, factory) { + if (true) { + module.exports = factory(); + } else if (typeof define === "function" && define.amd) { + define([], factory); + } else { + root.ol = factory(); + } + }(this, function () { + var OPENLAYERS = {}; + var n,aa=this; + function ba(){var a=aa.setImmediate,b=typeof a;if("object"==b)if(a){if(a instanceof Array)return"array";if(a instanceof Object)return b;var c=Object.prototype.toString.call(a);if("[object Window]"==c)return"object";if("[object Array]"==c||"number"==typeof a.length&&"undefined"!=typeof a.splice&&"undefined"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable("splice"))return"array";if("[object Function]"==c||"undefined"!=typeof a.call&&"undefined"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable("call"))return"function"}else return"null"; + else if("function"==b&&"undefined"==typeof a.call)return"object";return b}function ca(a,b,c){return a.call.apply(a.bind,arguments)}function da(a,b,c){if(!a)throw Error();if(2<arguments.length){var d=Array.prototype.slice.call(arguments,2);return function(){var c=Array.prototype.slice.call(arguments);Array.prototype.unshift.apply(c,d);return a.apply(b,c)}}return function(){return a.apply(b,arguments)}} + function ea(a,b,c){ea=Function.prototype.bind&&-1!=Function.prototype.bind.toString().indexOf("native code")?ca:da;return ea.apply(null,arguments)}function y(a,b){var c=a.split("."),d=OPENLAYERS||aa;c[0]in d||!d.execScript||d.execScript("var "+c[0]);for(var e;c.length&&(e=c.shift());)c.length||void 0===b?d[e]?d=d[e]:d=d[e]={}:d[e]=b};var fa;function B(a,b){a.prototype=Object.create(b.prototype);a.prototype.constructor=a}function I(){}function J(a){return a.ie||(a.ie=++ga)}var ga=0;if("undefined"!==typeof window)var K=window;else"undefined"!==typeof global?K=global:"undefined"!==typeof self&&(K=self);function ha(a){this.message="Assertion failed. See /doc/errors/#"+a+" for details.";this.code=a;this.name="AssertionError"}B(ha,Error);function L(a,b){if(!a)throw new ha(b);};function ia(a,b,c){return Math.min(Math.max(a,b),c)}var ja=function(){var a;"cosh"in Math?a=Math.cosh:a=function(a){a=Math.exp(a);return(a+1/a)/2};return a}();function ka(a){L(0<a,29);return Math.pow(2,Math.ceil(Math.log(a)/Math.LN2))}function la(a,b){var c=a%b;return 0>c*b?c+b:c};function ma(a){return function(b){if(b)return[ia(b[0],a[0],a[2]),ia(b[1],a[1],a[3])]}}function na(a){return a};function oa(a,b,c){this.center=a;this.resolution=b;this.rotation=c};var pa="function"===typeof Object.assign?Object.assign:function(a,b){if(!a||!a)throw new TypeError("Cannot convert undefined or null to object");for(var c=Object(a),d=1,e=arguments.length;d<e;++d){var f=arguments[d];if(void 0!==f&&null!==f)for(var g in f)f.hasOwnProperty(g)&&(c[g]=f[g])}return c};function qa(a){for(var b in a)delete a[b]}function ra(a){var b=[],c;for(c in a)b.push(a[c]);return b}function sa(a){for(var b in a)return!1;return!b};function ta(a){function b(b){var d=a.listener,e=a.jc||a.target;a.mc&&M(a);return d.call(e,b)}return a.kc=b}function ua(a,b,c,d){for(var e,f=0,g=a.length;f<g;++f)if(e=a[f],e.listener===b&&e.jc===c)return d&&(e.deleteIndex=f),e}function va(a,b){var c=a.ha;return c?c[b]:void 0}function wa(a){var b=a.ha;b||(b=a.ha={});return b} + function xa(a,b){var c=va(a,b);if(c){for(var d=0,e=c.length;d<e;++d)a.removeEventListener(b,c[d].kc),qa(c[d]);c.length=0;if(c=a.ha)delete c[b],0===Object.keys(c).length&&delete a.ha}}function R(a,b,c,d,e){var f=wa(a),g=f[b];g||(g=f[b]=[]);(f=ua(g,c,d,!1))?e||(f.mc=!1):(f={jc:d,mc:!!e,listener:c,target:a,type:b},a.addEventListener(b,ta(f)),g.push(f));return f}function ya(a,b,c,d){(a=va(a,b))&&(c=ua(a,c,d,!0))&&M(c)} + function M(a){if(a&&a.target){a.target.removeEventListener(a.type,a.kc);var b=va(a.target,a.type);if(b){var c="deleteIndex"in a?a.deleteIndex:b.indexOf(a);-1!==c&&b.splice(c,1);0===b.length&&xa(a.target,a.type)}qa(a)}}function za(a){var b=wa(a),c;for(c in b)xa(a,c)};function Aa(){}Aa.prototype.ra=!1;function Da(a){a.ra||(a.ra=!0,a.R())}Aa.prototype.R=I;function T(a){this.type=a;this.target=null}T.prototype.preventDefault=T.prototype.stopPropagation=function(){this.qe=!0};function Ea(a){a.stopPropagation()}function Fa(a){a.preventDefault()};function Ga(){this.ca={};this.K={};this.C={}}B(Ga,Aa);Ga.prototype.addEventListener=function(a,b){var c=this.C[a];c||(c=this.C[a]=[]);-1===c.indexOf(b)&&c.push(b)};function U(a,b){var c="string"===typeof b?new T(b):b,d=c.type;c.target=a;var e=a.C[d],f;if(e){d in a.K||(a.K[d]=0,a.ca[d]=0);++a.K[d];for(var g=0,h=e.length;g<h;++g)if(!1===e[g].call(a,c)||c.qe){f=!1;break}--a.K[d];if(0===a.K[d]){c=a.ca[d];for(delete a.ca[d];c--;)a.removeEventListener(d,I);delete a.K[d]}return f}}Ga.prototype.R=function(){za(this)}; + function Ha(a,b){return b?b in a.C:0<Object.keys(a.C).length}Ga.prototype.removeEventListener=function(a,b){var c=this.C[a];if(c){var d=c.indexOf(b);a in this.ca?(c[d]=I,++this.ca[a]):(c.splice(d,1),0===c.length&&delete this.C[a])}};function Ia(){Ga.call(this);this.b=0}B(Ia,Ga);Ia.prototype.w=function(){++this.b;U(this,"change")};Ia.prototype.Y=function(a,b,c){if(Array.isArray(a)){for(var d=a.length,e=Array(d),f=0;f<d;++f)e[f]=R(this,a[f],b,c);return e}return R(this,a,b,c)};Ia.prototype.hd=function(a,b,c){if(Array.isArray(a)){for(var d=a.length,e=Array(d),f=0;f<d;++f)e[f]=R(this,a[f],b,c,!0);return e}return R(this,a,b,c,!0)};function Ja(a,b,c){T.call(this,a);this.key=b;this.oldValue=c}B(Ja,T);function V(a){Ia.call(this);J(this);this.M={};void 0!==a&&this.l(a)}B(V,Ia);var Ka={};function La(a){return Ka.hasOwnProperty(a)?Ka[a]:Ka[a]="change:"+a}V.prototype.get=function(a){var b;this.M.hasOwnProperty(a)&&(b=this.M[a]);return b};V.prototype.Ea=function(){return pa({},this.M)};V.prototype.set=function(a,b,c){c?this.M[a]=b:(c=this.M[a],this.M[a]=b,c!==b&&(b=La(a),U(this,new Ja(b,a,c)),U(this,new Ja("propertychange",a,c))))}; + V.prototype.l=function(a,b){for(var c in a)this.set(c,a[c],b)};function Ma(a,b){return a>b?1:a<b?-1:0}function Na(a,b,c){var d=a.length;if(a[0]<=b)return 0;if(!(b<=a[d-1]))if(0<c)for(c=1;c<d;++c){if(a[c]<b)return c-1}else if(0>c)for(c=1;c<d;++c){if(a[c]<=b)return c}else for(c=1;c<d;++c){if(a[c]==b)return c;if(a[c]<b)return a[c-1]-b<b-a[c]?c-1:c}return d-1}function Oa(a){return a.reduce(function(a,c){return Array.isArray(c)?a.concat(Oa(c)):a.concat(c)},[])}function Pa(a,b){var c,d=Array.isArray(b)?b:[b],e=d.length;for(c=0;c<e;c++)a[a.length]=d[c]} + function Qa(a,b){var c=a.indexOf(b),d=-1<c;d&&a.splice(c,1);return d}function Ra(a,b){var c=a.length;if(c!==b.length)return!1;for(var d=0;d<c;d++)if(a[d]!==b[d])return!1;return!0}function Sa(a){var b=Ta,c=a.length,d=Array(a.length),e;for(e=0;e<c;e++)d[e]={index:e,value:a[e]};d.sort(function(a,c){return b(a.value,c.value)||a.index-c.index});for(e=0;e<a.length;e++)a[e]=d[e].value}function Ua(a,b){var c=b||Ma;return a.every(function(b,e){if(0===e)return!0;var f=c(a[e-1],b);return!(0<f||0===f)})};function Va(a){return function(b,c,d){if(void 0!==b)return b=Na(a,b,d),b=ia(b+c,0,a.length-1),c=Math.floor(b),b!=c&&c<a.length-1?a[c]/Math.pow(a[c]/a[c+1],b-c):a[c]}}function Wa(a,b,c){return function(d,e,f){if(void 0!==d)return d=Math.max(Math.floor(Math.log(b/d)/Math.log(a)+(-f/2+.5))+e,0),void 0!==c&&(d=Math.min(d,c)),b/Math.pow(a,d)}};function Xa(a){if(void 0!==a)return 0}function Ya(a,b){if(void 0!==a)return a+b}function Za(a){var b=2*Math.PI/a;return function(a,d){if(void 0!==a)return a=Math.floor((a+d)/b+.5)*b}}function $a(){var a=5*Math.PI/180;return function(b,c){if(void 0!==b)return Math.abs(b+c)<=a?0:b+c}};function ab(a,b){a[0]+=b[0];a[1]+=b[1]}function bb(a,b){var c=Math.cos(b),d=Math.sin(b),e=a[1]*c+a[0]*d;a[0]=a[0]*c-a[1]*d;a[1]=e};function cb(a){for(var b=db(),c=0,d=a.length;c<d;++c)eb(b,a[c]);return b}function fb(a,b,c){return c?(c[0]=a[0]-b,c[1]=a[1]-b,c[2]=a[2]+b,c[3]=a[3]+b,c):[a[0]-b,a[1]-b,a[2]+b,a[3]+b]}function gb(a,b){return b?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3],b):a.slice()}function hb(a,b){return a[0]<=b[0]&&b[2]<=a[2]&&a[1]<=b[1]&&b[3]<=a[3]}function db(){return[Infinity,Infinity,-Infinity,-Infinity]}function ib(a,b,c,d,e){return e?(e[0]=a,e[1]=b,e[2]=c,e[3]=d,e):[a,b,c,d]} + function jb(a){return ib(Infinity,Infinity,-Infinity,-Infinity,a)}function kb(a,b){var c=a[0],d=a[1];return ib(c,d,c,d,b)}function lb(a,b){return a[0]==b[0]&&a[2]==b[2]&&a[1]==b[1]&&a[3]==b[3]}function mb(a,b){b[0]<a[0]&&(a[0]=b[0]);b[2]>a[2]&&(a[2]=b[2]);b[1]<a[1]&&(a[1]=b[1]);b[3]>a[3]&&(a[3]=b[3])}function eb(a,b){b[0]<a[0]&&(a[0]=b[0]);b[0]>a[2]&&(a[2]=b[0]);b[1]<a[1]&&(a[1]=b[1]);b[1]>a[3]&&(a[3]=b[1])} + function nb(a,b,c,d,e){for(;c<d;c+=e){var f=a,g=b[c],h=b[c+1];f[0]=Math.min(f[0],g);f[1]=Math.min(f[1],h);f[2]=Math.max(f[2],g);f[3]=Math.max(f[3],h)}return a}function ob(a){var b=0;pb(a)||(b=qb(a)*rb(a));return b}function sb(a){return[a[0],a[1]]}function tb(a){return[(a[0]+a[2])/2,(a[1]+a[3])/2]} + function ub(a,b,c,d,e){var f=b*d[0]/2;d=b*d[1]/2;b=Math.cos(c);var g=Math.sin(c);c=f*b;f*=g;b*=d;var h=d*g,k=a[0],l=a[1];a=k-c+h;d=k-c-h;g=k+c-h;c=k+c+h;var h=l-f-b,k=l-f+b,m=l+f+b,f=l+f-b;return ib(Math.min(a,d,g,c),Math.min(h,k,m,f),Math.max(a,d,g,c),Math.max(h,k,m,f),e)}function rb(a){return a[3]-a[1]}function vb(a,b){var c=db();wb(a,b)&&(c[0]=a[0]>b[0]?a[0]:b[0],c[1]=a[1]>b[1]?a[1]:b[1],c[2]=a[2]<b[2]?a[2]:b[2],c[3]=a[3]<b[3]?a[3]:b[3]);return c}function xb(a){return[a[0],a[3]]} + function qb(a){return a[2]-a[0]}function wb(a,b){return a[0]<=b[2]&&a[2]>=b[0]&&a[1]<=b[3]&&a[3]>=b[1]}function pb(a){return a[2]<a[0]||a[3]<a[1]};function yb(){return!0}function zb(){return!1};/* + + Latitude/longitude spherical geodesy formulae taken from + http://www.movable-type.co.uk/scripts/latlong.html + Licensed under CC-BY-3.0. + */ + function Ab(a){this.radius=a}function Bb(a,b){var c=a[1]*Math.PI/180,d=b[1]*Math.PI/180,e=(d-c)/2,f=(b[0]-a[0])*Math.PI/180/2,c=Math.sin(e)*Math.sin(e)+Math.sin(f)*Math.sin(f)*Math.cos(c)*Math.cos(d);return 2*Cb.radius*Math.atan2(Math.sqrt(c),Math.sqrt(1-c))} + Ab.prototype.offset=function(a,b,c){var d=a[1]*Math.PI/180;b/=this.radius;var e=Math.asin(Math.sin(d)*Math.cos(b)+Math.cos(d)*Math.sin(b)*Math.cos(c));return[180*(a[0]*Math.PI/180+Math.atan2(Math.sin(c)*Math.sin(b)*Math.cos(d),Math.cos(b)-Math.sin(d)*Math.sin(e)))/Math.PI,180*e/Math.PI]};var Cb=new Ab(6370997);var Db={};Db.degrees=2*Math.PI*Cb.radius/360;Db.ft=.3048;Db.m=1;Db["us-ft"]=1200/3937; + function Eb(a){this.ya=a.code;this.a=a.units;this.h=void 0!==a.extent?a.extent:null;this.c=void 0!==a.global?a.global:!1;this.b=!(!this.c||!this.h);this.i=void 0!==a.getPointResolution?a.getPointResolution:this.j;this.f=null;this.g=a.metersPerUnit;var b=Fb,c=a.code,d=Gb||K.proj4;if("function"==typeof d&&void 0===b[c]){var e=d.defs(c);if(void 0!==e){void 0===a.metersPerUnit&&(this.g=e.to_meter);void 0===a.units&&(this.a=e.units);var f,g;for(f in b)if(a=d.defs(f),void 0!==a)if(b=Hb(f),a===e)Ib([b,this]); + else{g=d(f,c);a=g.forward;g=g.inverse;var b=Hb(b),h=Hb(this);Jb(b,h,Kb(a));Jb(h,b,Kb(g))}}}}Eb.prototype.l=function(){return this.ya};Eb.prototype.G=function(){return this.h};function Lb(a){return a.g||Db[a.a]}Eb.prototype.j=function(a,b){if("degrees"==this.a)return a;var c=Mb(this,Hb("EPSG:4326")),d=[b[0]-a/2,b[1],b[0]+a/2,b[1],b[0],b[1]-a/2,b[0],b[1]+a/2],d=c(d,d,2),c=(Bb(d.slice(0,2),d.slice(2,4))+Bb(d.slice(4,6),d.slice(6,8)))/2,d=Lb(this);void 0!==d&&(c/=d);return c}; + Eb.prototype.getPointResolution=function(a,b){return this.i(a,b)};var Fb={},Ob={},Gb=null;function Ib(a){Pb(a);a.forEach(function(b){a.forEach(function(a){b!==a&&Jb(b,a,Qb)})})}function Rb(a){Fb[a.ya]=a;Jb(a,a,Qb)}function Pb(a){var b=[];a.forEach(function(a){b.push(Rb(a))})}function Sb(a){return a?"string"===typeof a?Hb(a):a:Hb("EPSG:3857")}function Jb(a,b,c){a=a.ya;b=b.ya;a in Ob||(Ob[a]={});Ob[a][b]=c} + function Kb(a){return function(b,c,d){var e=b.length;d=void 0!==d?d:2;c=void 0!==c?c:Array(e);var f,g;for(g=0;g<e;g+=d)for(f=a([b[g],b[g+1]]),c[g]=f[0],c[g+1]=f[1],f=d-1;2<=f;--f)c[g+f]=b[g+f];return c}}function Hb(a){var b;if(a instanceof Eb)b=a;else if("string"===typeof a){b=Fb[a];var c=Gb||K.proj4;void 0===b&&"function"==typeof c&&void 0!==c.defs(a)&&(b=new Eb({code:a}),Rb(b))}return b||null}function Tb(a,b){if(a===b)return!0;var c=a.a===b.a;return a.ya===b.ya?c:Mb(a,b)===Qb&&c} + function Ub(a,b){var c=Hb(a),d=Hb(b);return Mb(c,d)}function Mb(a,b){var c=a.ya,d=b.ya,e;c in Ob&&d in Ob[c]&&(e=Ob[c][d]);void 0===e&&(e=Vb);return e}function Vb(a,b){if(void 0!==b&&a!==b){for(var c=0,d=a.length;c<d;++c)b[c]=a[c];a=b}return a}function Qb(a,b){var c;if(void 0!==b){c=0;for(var d=a.length;c<d;++c)b[c]=a[c];c=b}else c=a.slice();return c};function Wb(){V.call(this);this.j=db();this.s=-1;this.f={};this.i=this.g=0}B(Wb,V);Wb.prototype.G=function(a){this.s!=this.b&&(this.j=this.mb(this.j),this.s=this.b);var b=this.j;a?(a[0]=b[0],a[1]=b[1],a[2]=b[2],a[3]=b[3]):a=b;return a};Wb.prototype.transform=function(a,b){this.Hb(Ub(a,b));return this};function Xb(a,b,c,d,e,f){for(var g=f?f:[],h=0;b<c;b+=d){var k=a[b],l=a[b+1];g[h++]=e[0]*k+e[2]*l+e[4];g[h++]=e[1]*k+e[3]*l+e[5]}f&&g.length!=h&&(g.length=h);return g};function Yb(){Wb.call(this);this.c="XY";this.A=2;this.o=null}B(Yb,Wb);function Zb(a){var b;"XY"==a?b=2:"XYZ"==a||"XYM"==a?b=3:"XYZM"==a&&(b=4);return b}n=Yb.prototype;n.mb=function(a){var b=this.o,c=this.o.length,d=this.A;a=jb(a);return nb(a,b,0,c,d)};n.Rb=function(a){this.i!=this.b&&(qa(this.f),this.g=0,this.i=this.b);if(0>a||0!==this.g&&a<=this.g)return this;var b=a.toString();if(this.f.hasOwnProperty(b))return this.f[b];var c=this.Qa(a);if(c.o.length<this.o.length)return this.f[b]=c;this.g=a;return this}; + n.Qa=function(){return this};function $b(a,b,c){a.A=Zb(b);a.c=b;a.o=c}function ac(a,b,c,d){if(b)c=Zb(b);else{for(b=0;b<d;++b){if(0===c.length){a.c="XY";a.A=2;return}c=c[0]}c=c.length;var e;2==c?e="XY":3==c?e="XYZ":4==c&&(e="XYZM");b=e}a.c=b;a.A=c}n.Hb=function(a){this.o&&(a(this.o,this.o,this.A),this.w())}; + n.rotate=function(a,b){var c=this.o;if(c){for(var d=c.length,e=this.A,f=c?c:[],g=Math.cos(a),h=Math.sin(a),k=b[0],l=b[1],m=0,p=0;p<d;p+=e){var q=c[p]-k,u=c[p+1]-l;f[m++]=k+q*g-u*h;f[m++]=l+q*h+u*g;for(q=p+2;q<p+e;++q)f[m++]=c[q]}c&&f.length!=m&&(f.length=m);this.w()}}; + n.scale=function(a,b,c){var d=b;void 0===d&&(d=a);var e=c;e||(e=tb(this.G()));if(c=this.o){b=c.length;for(var f=this.A,g=c?c:[],h=e[0],e=e[1],k=0,l=0;l<b;l+=f){var m=c[l]-h,p=c[l+1]-e;g[k++]=h+a*m;g[k++]=e+d*p;for(m=l+2;m<l+f;++m)g[k++]=c[m]}c&&g.length!=k&&(g.length=k);this.w()}};n.translate=function(a,b){var c=this.o;if(c){var d=c.length,e=this.A,f=c?c:[],g=0,h,k;for(h=0;h<d;h+=e)for(f[g++]=c[h]+a,f[g++]=c[h+1]+b,k=h+2;k<h+e;++k)f[g++]=c[k];c&&f.length!=g&&(f.length=g);this.w()}};function bc(a,b){var c=0,d,e;d=0;for(e=b.length;d<e;++d)a[c++]=b[d];return c}function cc(a,b,c,d){var e,f;e=0;for(f=c.length;e<f;++e){var g=c[e],h;for(h=0;h<d;++h)a[b++]=g[h]}return b}function dc(a,b,c,d,e){e=e?e:[];var f=0,g,h;g=0;for(h=c.length;g<h;++g)b=cc(a,b,c[g],d),e[f++]=b;e.length=f;return e};function ec(a,b,c,d,e){e=void 0!==e?e:[];for(var f=0;b<c;b+=d)e[f++]=a.slice(b,b+d);e.length=f;return e}function fc(a,b,c,d,e){e=void 0!==e?e:[];var f=0,g,h;g=0;for(h=c.length;g<h;++g){var k=c[g];e[f++]=ec(a,b,k,d,e[f]);b=k}e.length=f;return e};function gc(a,b,c,d,e,f,g){var h=(c-b)/d;if(3>h){for(;b<c;b+=d)f[g++]=a[b],f[g++]=a[b+1];return g}var k=Array(h);k[0]=1;k[h-1]=1;c=[b,c-d];for(var l=0,m;0<c.length;){var p=c.pop(),q=c.pop(),u=0,w=a[q],r=a[q+1],x=a[p],D=a[p+1];for(m=q+d;m<p;m+=d){var t,z=a[m];t=a[m+1];var C=w,E=r,v=x-C,H=D-E;if(0!==v||0!==H){var G=((z-C)*v+(t-E)*H)/(v*v+H*H);1<G?(C=x,E=D):0<G&&(C+=v*G,E+=H*G)}z=C-z;t=E-t;t=z*z+t*t;t>u&&(l=m,u=t)}u>e&&(k[(l-b)/d]=1,q+d<l&&c.push(q,l),l+d<p&&c.push(l,p))}for(m=0;m<h;++m)k[m]&&(f[g++]= + a[b+m*d],f[g++]=a[b+m*d+1]);return g} + function hc(a,b,c,d,e,f,g,h){var k,l;k=0;for(l=c.length;k<l;++k){var m=c[k];a:{var p=a,q=m,u=d,w=e,r=f;if(b!=q){var x=w*Math.round(p[b]/w),D=w*Math.round(p[b+1]/w);b+=u;r[g++]=x;r[g++]=D;var t,z;do if(t=w*Math.round(p[b]/w),z=w*Math.round(p[b+1]/w),b+=u,b==q){r[g++]=t;r[g++]=z;break a}while(t==x&&z==D);for(;b<q;){var C,E;C=w*Math.round(p[b]/w);E=w*Math.round(p[b+1]/w);b+=u;if(C!=t||E!=z){var v=t-x,H=z-D,G=C-x,A=E-D;v*A==H*G&&(0>v&&G<v||v==G||0<v&&G>v)&&(0>H&&A<H||H==A||0<H&&A>H)||(r[g++]=t,r[g++]= + z,x=t,D=z);t=C;z=E}}r[g++]=t;r[g++]=z}}h.push(g);b=m}return g};function ic(a,b){Yb.call(this);this.ea(a,b)}B(ic,Yb);n=ic.prototype;n.clone=function(){var a=new ic(null);$b(a,this.c,this.o.slice());a.w();return a};n.za=function(){return ec(this.o,0,this.o.length,this.A)};n.Qa=function(a){var b=[];b.length=gc(this.o,0,this.o.length,this.A,a,b,0);a=new ic(null);$b(a,"XY",b);a.w();return a};n.$=function(){return"LinearRing"};n.ea=function(a,b){a?(ac(this,b,a,1),this.o||(this.o=[]),this.o.length=cc(this.o,0,a,this.A)):$b(this,"XY",null);this.w()};function jc(a,b){Yb.call(this);this.ea(a,b)}B(jc,Yb);n=jc.prototype;n.clone=function(){var a=new jc(null);$b(a,this.c,this.o.slice());a.w();return a};n.za=function(){return this.o?this.o.slice():[]};n.mb=function(a){return kb(this.o,a)};n.$=function(){return"Point"};n.ea=function(a,b){a?(ac(this,b,a,0),this.o||(this.o=[]),this.o.length=bc(this.o,a)):$b(this,"XY",null);this.w()};function kc(a,b,c,d,e,f){for(var g=!1,h=a[c-d],k=a[c-d+1];b<c;b+=d){var l=a[b],m=a[b+1];k>f!=m>f&&e<(l-h)*(f-k)/(m-k)+h&&(g=!g);h=l;k=m}return g};function lc(a,b,c,d,e,f,g){var h,k,l,m,p,q=e[f+1],u=[],w=c[0];l=a[w-d];p=a[w-d+1];for(h=b;h<w;h+=d){m=a[h];k=a[h+1];if(q<=p&&k<=q||p<=q&&q<=k)l=(q-p)/(k-p)*(m-l)+l,u.push(l);l=m;p=k}w=NaN;p=-Infinity;u.sort(Ma);l=u[0];h=1;for(k=u.length;h<k;++h){m=u[h];var r=Math.abs(m-l);if(r>p){l=(l+m)/2;var x;a:if(0!==c.length&&kc(a,b,c[0],d,l,q)){var D;x=1;for(D=c.length;x<D;++x)if(kc(a,c[x-1],c[x],d,l,q)){x=!1;break a}x=!0}else x=!1;x&&(w=l,p=r)}l=m}isNaN(w)&&(w=e[f]);return g?(g.push(w,q),g):[w,q]};function mc(a,b,c,d){for(var e=0,f=a[c-d],g=a[c-d+1];b<c;b+=d)var h=a[b],k=a[b+1],e=e+(h-f)*(k+g),f=h,g=k;return 0<e}function nc(a,b,c,d){var e=0;d=void 0!==d?d:!1;var f,g;f=0;for(g=b.length;f<g;++f){var h=b[f],e=mc(a,e,h,c);if(0===f){if(d&&e||!d&&!e)return!1}else if(d&&!e||!d&&e)return!1;e=h}return!0} + function oc(a,b,c,d,e){e=void 0!==e?e:!1;var f,g;f=0;for(g=c.length;f<g;++f){var h=c[f],k=mc(a,b,h,d);if(0===f?e&&k||!e&&!k:e&&!k||!e&&k)for(var k=a,l=h,m=d;b<l-m;){var p;for(p=0;p<m;++p){var q=k[b+p];k[b+p]=k[l-m+p];k[l-m+p]=q}b+=m;l-=m}b=h}return b}function pc(a,b,c,d){var e=0,f,g;f=0;for(g=b.length;f<g;++f)e=oc(a,e,b[f],c,d);return e};function qc(a,b){Yb.call(this);this.ja=[];this.h=-1;this.v=null;this.u=-1;this.a=null;this.ea(a,b)}B(qc,Yb);n=qc.prototype;n.clone=function(){var a=new qc(null);rc(a,this.c,this.o.slice(),this.ja.slice());return a};n.za=function(a){var b;void 0!==a?(b=sc(this).slice(),oc(b,0,this.ja,this.A,a)):b=this.o;return fc(b,0,this.ja,this.A)};function tc(a){if(a.h!=a.b){var b=tb(a.G());a.v=lc(sc(a),0,a.ja,a.A,b,0);a.h=a.b}return a.v} + function sc(a){if(a.u!=a.b){var b=a.o;nc(b,a.ja,a.A)?a.a=b:(a.a=b.slice(),a.a.length=oc(a.a,0,a.ja,a.A));a.u=a.b}return a.a}n.Qa=function(a){var b=[],c=[];b.length=hc(this.o,0,this.ja,this.A,Math.sqrt(a),b,0,c);a=new qc(null);rc(a,"XY",b,c);return a};n.$=function(){return"Polygon"};n.ea=function(a,b){if(a){ac(this,b,a,2);this.o||(this.o=[]);var c=dc(this.o,0,a,this.A,this.ja);this.o.length=0===c.length?0:c[c.length-1];this.w()}else rc(this,"XY",null,this.ja)}; + function rc(a,b,c,d){$b(a,b,c);a.ja=d;a.w()};function uc(a){V.call(this);a=a||{};this.c=[0,0];var b={};b[vc]=void 0!==a.center?a.center:null;this.j=Sb(a.projection);var c,d,e,f=void 0!==a.minZoom?a.minZoom:0;c=void 0!==a.maxZoom?a.maxZoom:28;var g=void 0!==a.zoomFactor?a.zoomFactor:2;if(void 0!==a.resolutions)c=a.resolutions,d=c[0],e=c[c.length-1],c=Va(c);else{d=Sb(a.projection);e=d.G();var h=(e?Math.max(qb(e),rb(e)):360*Db.degrees/Lb(d))/256/Math.pow(2,0),k=h/Math.pow(2,28);d=a.maxResolution;void 0!==d?f=0:d=h/Math.pow(g,f);e=a.minResolution; + void 0===e&&(e=void 0!==a.maxZoom?void 0!==a.maxResolution?d/Math.pow(g,c):h/Math.pow(g,c):k);c=f+Math.floor(Math.log(d/e)/Math.log(g));e=d/Math.pow(g,c-f);c=Wa(g,d,c-f)}this.f=d;this.i=e;this.s=g;this.g=a.resolutions;this.h=f;f=void 0!==a.extent?ma(a.extent):na;(void 0!==a.enableRotation?a.enableRotation:1)?(g=a.constrainRotation,g=void 0===g||!0===g?$a():!1===g?Ya:"number"===typeof g?Za(g):Ya):g=Xa;this.a=new oa(f,c,g);void 0!==a.resolution?b[wc]=a.resolution:void 0!==a.zoom&&(b[wc]=this.constrainResolution(this.f, + a.zoom-this.h));b[xc]=void 0!==a.rotation?a.rotation:0;this.l(b)}B(uc,V);n=uc.prototype;n.constrainResolution=function(a,b,c){return this.a.resolution(a,b||0,c||0)};n.constrainRotation=function(a,b){return this.a.rotation(a,b||0)};n.qa=function(){return this.get(vc)};n.lc=function(a){var b=this.qa();L(b,1);var c=this.O();L(void 0!==c,2);var d=this.get(xc);L(void 0!==d,3);return ub(b,c,d,a)};n.ia=function(){return this.j};n.O=function(){return this.get(wc)}; + function yc(a,b){return Math.max(qb(a)/b[0],rb(a)/b[1])}n.T=function(){var a=this.qa(),b=this.ia(),c=this.O(),d=this.get(xc);return{center:a.slice(),projection:void 0!==b?b:null,resolution:c,rotation:d}};n.rd=function(){var a,b=this.O();if(void 0!==b&&b>=this.i&&b<=this.f){a=this.h||0;var c,d;if(this.g){d=Na(this.g,b,1);a+=d;if(d==this.g.length-1)return a;c=this.g[d];d=c/this.g[d+1]}else c=this.f,d=this.s;a+=Math.log(c/b)/Math.log(d)}return a}; + n.md=function(a,b,c){if(!(a instanceof Yb)){L(Array.isArray(a),24);L(!pb(a),25);var d=a[0],e=a[1],f=a[2],g=a[3],d=[d,e,d,g,f,g,f,e,d,e],e=new qc(null);rc(e,"XY",d,[d.length]);a=e}d=c||{};c=void 0!==d.padding?d.padding:[0,0,0,0];var g=void 0!==d.constrainResolution?d.constrainResolution:!0,e=void 0!==d.nearest?d.nearest:!1,h;void 0!==d.minResolution?h=d.minResolution:void 0!==d.maxZoom?h=this.constrainResolution(this.f,d.maxZoom-this.h,0):h=0;var k=a.o,f=this.get(xc),d=Math.cos(-f),f=Math.sin(-f), + l=Infinity,m=Infinity,p=-Infinity,q=-Infinity;a=a.A;for(var u=0,w=k.length;u<w;u+=a)var r=k[u]*d-k[u+1]*f,x=k[u]*f+k[u+1]*d,l=Math.min(l,r),m=Math.min(m,x),p=Math.max(p,r),q=Math.max(q,x);b=yc([l,m,p,q],[b[0]-c[1]-c[3],b[1]-c[0]-c[2]]);b=isNaN(b)?h:Math.max(b,h);g&&(h=this.constrainResolution(b,0,0),!e&&h<b&&(h=this.constrainResolution(h,-1,0)),b=h);this.set(wc,b);f=-f;h=(l+p)/2+(c[1]-c[3])/2*b;b=(m+q)/2+(c[0]-c[2])/2*b;this.xa([h*d-b*f,b*d+h*f])}; + n.rotate=function(a,b){if(void 0!==b){var c,d=this.qa();void 0!==d&&(c=[d[0]-b[0],d[1]-b[1]],bb(c,a-this.get(xc)),ab(c,b));this.xa(c)}this.set(xc,a)};n.xa=function(a){this.set(vc,a)};function zc(a,b){a.c[1]+=b}n.ye=function(a){a=this.constrainResolution(this.f,a-this.h,0);this.set(wc,a)};var vc="center",wc="resolution",xc="rotation";function Ac(a){return 1-Math.pow(1-a,3)}function Bc(a){return 3*a*a-2*a*a*a}function Cc(a){return a};function Dc(a){var b=a.source,c=a.start?a.start:Date.now(),d=b[0],e=b[1],f=void 0!==a.duration?a.duration:1E3,g=a.easing?a.easing:Bc;return function(a,b){if(b.time<c)return b.animate=!0,b.viewHints[0]+=1,!0;if(b.time<c+f){var l=1-g((b.time-c)/f),m=d-b.viewState.center[0],p=e-b.viewState.center[1];b.animate=!0;b.viewState.center[0]+=l*m;b.viewState.center[1]+=l*p;b.viewHints[0]+=1;return!0}return!1}} + function Ec(a){var b=a.rotation?a.rotation:0,c=a.start?a.start:Date.now(),d=void 0!==a.duration?a.duration:1E3,e=a.easing?a.easing:Bc,f=a.anchor?a.anchor:null;return function(a,h){if(h.time<c)return h.animate=!0,h.viewHints[0]+=1,!0;if(h.time<c+d){var k=1-e((h.time-c)/d),k=(b-h.viewState.rotation)*k;h.animate=!0;h.viewState.rotation+=k;if(f){var l=h.viewState.center;l[0]-=f[0];l[1]-=f[1];bb(l,k);ab(l,f)}h.viewHints[0]+=1;return!0}return!1}} + function Fc(a){var b=a.resolution,c=a.start?a.start:Date.now(),d=void 0!==a.duration?a.duration:1E3,e=a.easing?a.easing:Bc;return function(a,g){if(g.time<c)return g.animate=!0,g.viewHints[0]+=1,!0;if(g.time<c+d){var h=1-e((g.time-c)/d),k=b-g.viewState.resolution;g.animate=!0;g.viewState.resolution+=h*k;g.viewHints[0]+=1;return!0}return!1}};function Gc(a,b,c,d){this.H=a;this.I=b;this.J=c;this.L=d}function Hc(a,b,c){return a.H<=b&&b<=a.I&&a.J<=c&&c<=a.L}function Ic(a,b){return a.H==b.H&&a.J==b.J&&a.I==b.I&&a.L==b.L}function Jc(a,b){return a.H<=b.I&&a.I>=b.H&&a.J<=b.L&&a.L>=b.J};function Kc(a,b,c){void 0===c&&(c=[0,0]);c[0]=a[0]*b+.5|0;c[1]=a[1]*b+.5|0;return c}function Lc(a,b){if(Array.isArray(a))return a;void 0===b?b=[a,a]:b[0]=b[1]=a;return b};function Mc(a){this.minZoom=void 0!==a.minZoom?a.minZoom:0;this.b=a.resolutions;L(Ua(this.b,function(a,b){return b-a}),17);this.maxZoom=this.b.length-1;this.c=void 0!==a.origin?a.origin:null;this.f=null;void 0!==a.origins&&(this.f=a.origins,L(this.f.length==this.b.length,20));var b=a.extent;void 0===b||this.c||this.f||(this.c=xb(b));L(!this.c&&this.f||this.c&&!this.f,18);this.g=null;void 0!==a.tileSizes&&(this.g=a.tileSizes,L(this.g.length==this.b.length,19));this.h=void 0!==a.tileSize?a.tileSize: + this.g?null:256;L(!this.h&&this.g||this.h&&!this.g,22);this.i=void 0!==b?b:null;this.a=null;this.l=[0,0];void 0!==a.sizes?this.a=a.sizes.map(function(a){return new Gc(Math.min(0,a[0]),Math.max(a[0]-1,-1),Math.min(0,a[1]),Math.max(a[1]-1,-1))},this):b&&Nc(this,b)}var Oc=[0,0,0];function Pc(a,b,c,d,e){e=Qc(a,b,e);for(b=b[0]-1;b>=a.minZoom;){if(c.call(null,b,Rc(a,e,b,d)))return!0;--b}return!1}Mc.prototype.G=function(){return this.i};Mc.prototype.pa=function(a){return this.c?this.c:this.f[a]}; + Mc.prototype.O=function(a){return this.b[a]};function Sc(a,b,c,d){return b[0]<a.maxZoom?(d=Qc(a,b,d),Rc(a,d,b[0]+1,c)):null}function Tc(a,b,c,d){Uc(a,b[0],b[1],c,!1,Oc);var e=Oc[1],f=Oc[2];Uc(a,b[2],b[3],c,!0,Oc);a=Oc[1];b=Oc[2];void 0!==d?(d.H=e,d.I=a,d.J=f,d.L=b):d=new Gc(e,a,f,b);return d}function Rc(a,b,c,d){c=a.O(c);return Tc(a,b,c,d)}function Vc(a,b){var c=a.pa(b[0]),d=a.O(b[0]),e=Lc(Wc(a,b[0]),a.l);return[c[0]+(b[1]+.5)*e[0]*d,c[1]+(b[2]+.5)*e[1]*d]} + function Qc(a,b,c){var d=a.pa(b[0]),e=a.O(b[0]);a=Lc(Wc(a,b[0]),a.l);var f=d[0]+b[1]*a[0]*e;b=d[1]+b[2]*a[1]*e;return ib(f,b,f+a[0]*e,b+a[1]*e,c)}function Uc(a,b,c,d,e,f){var g=Xc(a,d),h=d/a.O(g),k=a.pa(g);a=Lc(Wc(a,g),a.l);b=h*Math.floor((b-k[0])/d+(e?.5:0))/a[0];c=h*Math.floor((c-k[1])/d+(e?0:.5))/a[1];e?(b=Math.ceil(b)-1,c=Math.ceil(c)-1):(b=Math.floor(b),c=Math.floor(c));e=b;void 0!==f?(f[0]=g,f[1]=e,f[2]=c):f=[g,e,c];return f}function Yc(a,b,c,d){c=a.O(c);return Uc(a,b[0],b[1],c,!1,d)} + function Wc(a,b){return a.h?a.h:a.g[b]}function Xc(a,b,c){return ia(Na(a.b,b,c||0),a.minZoom,a.maxZoom)}function Nc(a,b){for(var c=a.b.length,d=Array(c),e=a.minZoom;e<c;++e)d[e]=Rc(a,b,e);a.a=d};function Zc(a){var b=a.f;if(!b){var b=$c(a),c=ad(b,void 0,void 0),b=new Mc({extent:b,origin:xb(b),resolutions:c,tileSize:void 0});a.f=b}return b}function ad(a,b,c){b=void 0!==b?b:42;var d=rb(a);a=qb(a);c=Lc(void 0!==c?c:256);c=Math.max(a/c[0],d/c[1]);b+=1;d=Array(b);for(a=0;a<b;++a)d[a]=c/Math.pow(2,a);return d}function $c(a){a=Hb(a);var b=a.G();b||(a=180*Db.degrees/Lb(a),b=ib(-a,-a,a,a));return b};function bd(a){this.a=a.html;this.b=a.tileRanges?a.tileRanges:null};function cd(a){V.call(this);this.a=a?a:[];dd(this)}B(cd,V);cd.prototype.clear=function(){for(;0<this.get("length");)this.pop()};function ed(a,b,c){a.a.forEach(b,c)}cd.prototype.pop=function(){return fd(this,this.get("length")-1)};cd.prototype.push=function(a){var b=this.a.length;this.a.splice(b,0,a);dd(this);U(this,new gd(hd,a));return b};cd.prototype.remove=function(a){var b=this.a,c,d;c=0;for(d=b.length;c<d;++c)if(b[c]===a)return fd(this,c)}; + function fd(a,b){var c=a.a[b];a.a.splice(b,1);dd(a);U(a,new gd(id,c));return c}function dd(a){a.set("length",a.a.length)}var hd="add",id="remove";function gd(a,b){T.call(this,a);this.element=b}B(gd,T);var jd=/^#(?:[0-9a-f]{3}){1,2}$/i,kd=/^(?:rgb)?\((0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2})\)$/i,ld=/^(?:rgba)?\((0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2}),\s?(0|1|0\.\d{0,10})\)$/i,md=/^([a-z]*)$/i;function nd(a){if("string"!==typeof a){var b=a[0];b!=(b|0)&&(b=b+.5|0);var c=a[1];c!=(c|0)&&(c=c+.5|0);var d=a[2];d!=(d|0)&&(d=d+.5|0);a="rgba("+b+","+c+","+d+","+(void 0===a[3]?1:a[3])+")"}return a} + var pd=function(){var a={},b=0;return function(c){var d;if(a.hasOwnProperty(c))d=a[c];else{if(1024<=b){d=0;for(var e in a)0===(d++&3)&&(delete a[e],--b)}d=c;var f,g;md.exec(d)&&(e=document.createElement("div"),e.style.color=d,document.body.appendChild(e),d=window.getComputedStyle(e).color,document.body.removeChild(e));jd.exec(d)?(f=d.length-1,L(3==f||6==f,54),g=3==f?1:2,f=parseInt(d.substr(1+0*g,g),16),e=parseInt(d.substr(1+1*g,g),16),d=parseInt(d.substr(1+2*g,g),16),1==g&&(f=(f<<4)+f,e=(e<<4)+e, + d=(d<<4)+d),f=[f,e,d,1]):(g=ld.exec(d))?(f=Number(g[1]),e=Number(g[2]),d=Number(g[3]),g=Number(g[4]),f=od([f,e,d,g])):(g=kd.exec(d))?(f=Number(g[1]),e=Number(g[2]),d=Number(g[3]),f=od([f,e,d,1])):L(!1,14);d=f;a[c]=d;++b}return d}}();function od(a){var b=[];b[0]=ia(a[0]+.5|0,0,255);b[1]=ia(a[1]+.5|0,0,255);b[2]=ia(a[2]+.5|0,0,255);b[3]=ia(a[3],0,1);return b};function qd(a){return"string"===typeof a||a instanceof CanvasPattern||a instanceof CanvasGradient?a:nd(a)};var rd=String.prototype.trim?function(a){return a.trim()}:function(a){return a.replace(/^[\s\xa0]+|[\s\xa0]+$/g,"")};function sd(a,b){return a<b?-1:a>b?1:0};function td(a,b,c){return 2>=arguments.length?Array.prototype.slice.call(a,b):Array.prototype.slice.call(a,b,c)};var ud;a:{var vd=aa.navigator;if(vd){var wd=vd.userAgent;if(wd){ud=wd;break a}}ud=""}function xd(a){return-1!=ud.indexOf(a)};var yd=xd("Opera"),zd=xd("Trident")||xd("MSIE"),Ad=xd("Edge"),Bd=xd("Gecko")&&!(-1!=ud.toLowerCase().indexOf("webkit")&&!xd("Edge"))&&!(xd("Trident")||xd("MSIE"))&&!xd("Edge"),Cd=-1!=ud.toLowerCase().indexOf("webkit")&&!xd("Edge"),Dd; + a:{var Ed="",Fd=function(){var a=ud;if(Bd)return/rv\:([^\);]+)(\)|;)/.exec(a);if(Ad)return/Edge\/([\d\.]+)/.exec(a);if(zd)return/\b(?:MSIE|rv)[: ]([^\);]+)(\)|;)/.exec(a);if(Cd)return/WebKit\/(\S+)/.exec(a);if(yd)return/(?:Version)[ \/]?(\S+)/.exec(a)}();Fd&&(Ed=Fd?Fd[1]:"");if(zd){var Gd,Hd=aa.document;Gd=Hd?Hd.documentMode:void 0;if(null!=Gd&&Gd>parseFloat(Ed)){Dd=String(Gd);break a}}Dd=Ed}var Id={};function Jd(){return[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]}function Kd(a,b){a[0]=b[0];a[1]=b[1];a[4]=b[2];a[5]=b[3];a[12]=b[4];a[13]=b[5];return a};var Ld=Jd();function Md(a,b){var c=document.createElement("CANVAS");a&&(c.width=a);b&&(c.height=b);return c.getContext("2d")} + var Nd=function(){var a;return function(){if(void 0===a){var b=document.createElement("P"),c,d={webkitTransform:"-webkit-transform",OTransform:"-o-transform",msTransform:"-ms-transform",MozTransform:"-moz-transform",transform:"transform"};document.body.appendChild(b);for(var e in d)e in b.style&&(b.style[e]="translate(1px,1px)",c=K.getComputedStyle(b).getPropertyValue(d[e]));document.body.removeChild(b);a=c&&"none"!==c}return a}}(),Od=function(){var a;return function(){if(void 0===a){var b=document.createElement("P"), + c,d={webkitTransform:"-webkit-transform",OTransform:"-o-transform",msTransform:"-ms-transform",MozTransform:"-moz-transform",transform:"transform"};document.body.appendChild(b);for(var e in d)e in b.style&&(b.style[e]="translate3d(1px,1px,1px)",c=K.getComputedStyle(b).getPropertyValue(d[e]));document.body.removeChild(b);a=c&&"none"!==c}return a}}(); + function Pd(a,b){var c=a.style;c.WebkitTransform=b;c.MozTransform=b;c.b=b;c.msTransform=b;c.transform=b;if((c=zd)&&!(c=Id["9.0"])){for(var c=0,d=rd(String(Dd)).split("."),e=rd("9.0").split("."),f=Math.max(d.length,e.length),g=0;0==c&&g<f;g++){var h=d[g]||"",k=e[g]||"",l=RegExp("(\\d*)(\\D*)","g"),m=RegExp("(\\d*)(\\D*)","g");do{var p=l.exec(h)||["","",""],q=m.exec(k)||["","",""];if(0==p[0].length&&0==q[0].length)break;c=sd(0==p[1].length?0:parseInt(p[1],10),0==q[1].length?0:parseInt(q[1],10))||sd(0== + p[2].length,0==q[2].length)||sd(p[2],q[2])}while(0==c)}c=Id["9.0"]=0<=c}c&&(a.style.transformOrigin="0 0")}function Qd(a,b){var c;if(Od()){var d=Kd(Ld,b),e=Array(16);for(c=0;16>c;++c)e[c]=d[c].toFixed(6);Pd(a,"matrix3d("+e.join(",")+")")}else if(Nd()){d=Array(6);for(c=0;6>c;++c)d[c]=b[c].toFixed(6);Pd(a,"matrix("+d.join(",")+")")}else a.style.left=Math.round(b[4])+"px",a.style.top=Math.round(b[5])+"px"}function Rd(a,b){var c=b.parentNode;c&&c.replaceChild(a,b)} + function Sd(a){a&&a.parentNode&&a.parentNode.removeChild(a)};function Td(a,b,c){T.call(this,a);this.map=b;this.frameState=void 0!==c?c:null}B(Td,T);function Ud(a){V.call(this);this.element=a.element?a.element:null;this.f=this.D=null;this.i=[];this.render=a.render?a.render:I;a.target&&(a=a.target,this.D="string"===typeof a?document.getElementById(a):a)}B(Ud,V);Ud.prototype.R=function(){Sd(this.element);V.prototype.R.call(this)}; + Ud.prototype.setMap=function(a){this.f&&Sd(this.element);for(var b=0,c=this.i.length;b<c;++b)M(this.i[b]);this.i.length=0;if(this.f=a)(this.D?this.D:a.j).appendChild(this.element),this.render!==I&&this.i.push(R(a,"postrender",this.render,this)),a.render()};function Vd(a){a=a?a:{};this.B=document.createElement("UL");this.j=document.createElement("LI");this.B.appendChild(this.j);this.j.style.display="none";this.g=void 0!==a.collapsed?a.collapsed:!0;this.v=void 0!==a.collapsible?a.collapsible:!0;this.v||(this.g=!1);var b=void 0!==a.className?a.className:"ol-attribution",c=void 0!==a.tipLabel?a.tipLabel:"Attributions",d=void 0!==a.collapseLabel?a.collapseLabel:"\u00bb";"string"===typeof d?(this.h=document.createElement("span"),this.h.textContent=d):this.h= + d;d=void 0!==a.label?a.label:"i";"string"===typeof d?(this.s=document.createElement("span"),this.s.textContent=d):this.s=d;var e=this.v&&!this.g?this.h:this.s,d=document.createElement("button");d.setAttribute("type","button");d.title=c;d.appendChild(e);R(d,"click",this.P,this);c=document.createElement("div");c.className=b+" ol-unselectable ol-control"+(this.g&&this.v?" ol-collapsed":"")+(this.v?"":" ol-uncollapsible");c.appendChild(this.B);c.appendChild(d);Ud.call(this,{element:c,render:a.render? + a.render:Wd,target:a.target});this.u=!0;this.c={};this.a={};this.N={}}B(Vd,Ud); + function Wd(a){if(a=a.frameState){var b,c,d,e,f,g,h,k,l,m,p,q=a.layerStatesArray,u=pa({},a.attributions),w={},r=a.viewState.projection;c=0;for(b=q.length;c<b;c++)if(g=q[c].layer.da())if(m=J(g).toString(),l=g.h)for(d=0,e=l.length;d<e;d++)if(h=l[d],k=J(h).toString(),!(k in u)){if(f=a.usedTiles[m]){var x=g.sa(r);a:{p=h;var D=r;if(p.b){var t,z,C,E=void 0;for(E in f)if(E in p.b){C=f[E];var v;t=0;for(z=p.b[E].length;t<z;++t){v=p.b[E][t];if(Jc(v,C)){p=!0;break a}var H=Rc(x,$c(D),parseInt(E,10)),G=H.I-H.H+ + 1;if(C.H<H.H||C.I>H.I)if(Jc(v,new Gc(la(C.H,G),la(C.I,G),C.J,C.L))||C.I-C.H+1>G&&Jc(v,H)){p=!0;break a}}}p=!1}else p=!0}}else p=!1;p?(k in w&&delete w[k],u[k]=h):w[k]=h}b=[u,w];c=b[0];b=b[1];for(var A in this.c)A in c?(this.a[A]||(this.c[A].style.display="",this.a[A]=!0),delete c[A]):A in b?(this.a[A]&&(this.c[A].style.display="none",delete this.a[A]),delete b[A]):(Sd(this.c[A]),delete this.c[A],delete this.a[A]);for(A in c)d=document.createElement("LI"),d.innerHTML=c[A].a,this.B.appendChild(d),this.c[A]= + d,this.a[A]=!0;for(A in b)d=document.createElement("LI"),d.innerHTML=b[A].a,d.style.display="none",this.B.appendChild(d),this.c[A]=d;A=!sa(this.a)||!sa(a.logos);this.u!=A&&(this.element.style.display=A?"":"none",this.u=A);A&&sa(this.a)?this.element.classList.add("ol-logo-only"):this.element.classList.remove("ol-logo-only");var F;a=a.logos;A=this.N;for(F in A)F in a||(Sd(A[F]),delete A[F]);for(var Q in a)b=a[Q],b instanceof HTMLElement&&(this.j.appendChild(b),A[Q]=b),Q in A||(F=new Image,F.src=Q,""=== + b?c=F:(c=document.createElement("a"),c.href=b,c.appendChild(F)),this.j.appendChild(c),A[Q]=c);this.j.style.display=sa(a)?"none":""}else this.u&&(this.element.style.display="none",this.u=!1)}Vd.prototype.P=function(a){a.preventDefault();this.element.classList.toggle("ol-collapsed");this.g?Rd(this.h,this.s):Rd(this.s,this.h);this.g=!this.g};function Xd(a){a=a?a:{};this.a=void 0!==a.className?a.className:"ol-full-screen";var b=void 0!==a.label?a.label:"\u2922";this.g="string"===typeof b?document.createTextNode(b):b;b=void 0!==a.labelActive?a.labelActive:"\u00d7";this.h="string"===typeof b?document.createTextNode(b):b;var c=a.tipLabel?a.tipLabel:"Toggle full-screen",b=document.createElement("button");b.className=this.a+"-"+Yd();b.setAttribute("type","button");b.title=c;b.appendChild(this.g);R(b,"click",this.v,this);c=document.createElement("div"); + c.className=this.a+" ol-unselectable ol-control "+(Zd()?"":"ol-unsupported");c.appendChild(b);Ud.call(this,{element:c,target:a.target});this.s=void 0!==a.keys?a.keys:!1;this.c=a.source}B(Xd,Ud); + Xd.prototype.v=function(a){a.preventDefault();Zd()&&(a=this.f)&&(Yd()?document.exitFullscreen?document.exitFullscreen():document.msExitFullscreen?document.msExitFullscreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.webkitExitFullscreen&&document.webkitExitFullscreen():(a=this.c?"string"===typeof this.c?document.getElementById(this.c):this.c:a.Ra(),this.s?a.mozRequestFullScreenWithKeys?a.mozRequestFullScreenWithKeys():a.webkitRequestFullscreen?a.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT): + $d(a):$d(a)))};Xd.prototype.j=function(){var a=this.element.firstElementChild,b=this.f;Yd()?(a.className=this.a+"-true",Rd(this.h,this.g)):(a.className=this.a+"-false",Rd(this.g,this.h));b&&b.yb()};Xd.prototype.setMap=function(a){Ud.prototype.setMap.call(this,a);a&&this.i.push(R(K.document,ae(),this.j,this))}; + function Zd(){var a=document.body;return!!(a.webkitRequestFullscreen||a.mozRequestFullScreen&&document.mozFullScreenEnabled||a.msRequestFullscreen&&document.msFullscreenEnabled||a.requestFullscreen&&document.fullscreenEnabled)}function Yd(){return!!(document.webkitIsFullScreen||document.mozFullScreen||document.msFullscreenElement||document.fullscreenElement)} + function $d(a){a.requestFullscreen?a.requestFullscreen():a.msRequestFullscreen?a.msRequestFullscreen():a.mozRequestFullScreen?a.mozRequestFullScreen():a.webkitRequestFullscreen&&a.webkitRequestFullscreen()}var ae=function(){var a;return function(){if(!a){var b=document.body;b.webkitRequestFullscreen?a="webkitfullscreenchange":b.mozRequestFullScreen?a="mozfullscreenchange":b.msRequestFullscreen?a="MSFullscreenChange":b.requestFullscreen&&(a="fullscreenchange")}return a}}();function be(a){a=a?a:{};var b=void 0!==a.className?a.className:"ol-rotate",c=void 0!==a.label?a.label:"\u21e7";this.a=null;"string"===typeof c?(this.a=document.createElement("span"),this.a.className="ol-compass",this.a.textContent=c):(this.a=c,this.a.classList.add("ol-compass"));var d=a.tipLabel?a.tipLabel:"Reset rotation",c=document.createElement("button");c.className=b+"-reset";c.setAttribute("type","button");c.title=d;c.appendChild(this.a);R(c,"click",be.prototype.s,this);d=document.createElement("div"); + d.className=b+" ol-unselectable ol-control";d.appendChild(c);b=a.render?a.render:ce;this.g=a.resetNorth?a.resetNorth:void 0;Ud.call(this,{element:d,render:b,target:a.target});this.h=void 0!==a.duration?a.duration:250;this.c=void 0!==a.autoHide?a.autoHide:!0;this.j=void 0;this.c&&this.element.classList.add("ol-hidden")}B(be,Ud); + be.prototype.s=function(a){a.preventDefault();if(void 0!==this.g)this.g();else{a=this.f;var b=a.U();if(b){var c=b.get(xc);void 0!==c&&(0<this.h&&(c%=2*Math.PI,c<-Math.PI&&(c+=2*Math.PI),c>Math.PI&&(c-=2*Math.PI),a.oa(Ec({rotation:c,duration:this.h,easing:Ac}))),b.set(xc,0))}}}; + function ce(a){if(a=a.frameState){a=a.viewState.rotation;if(a!=this.j){var b="rotate("+a+"rad)";if(this.c){var c=this.element.classList.contains("ol-hidden");c||0!==a?c&&0!==a&&this.element.classList.remove("ol-hidden"):this.element.classList.add("ol-hidden")}this.a.style.msTransform=b;this.a.style.webkitTransform=b;this.a.style.transform=b}this.j=a}};function de(a){a=a?a:{};var b=void 0!==a.className?a.className:"ol-zoom",c=void 0!==a.delta?a.delta:1,d=void 0!==a.zoomInLabel?a.zoomInLabel:"+",e=void 0!==a.zoomOutLabel?a.zoomOutLabel:"\u2212",f=void 0!==a.zoomInTipLabel?a.zoomInTipLabel:"Zoom in",g=void 0!==a.zoomOutTipLabel?a.zoomOutTipLabel:"Zoom out",h=document.createElement("button");h.className=b+"-in";h.setAttribute("type","button");h.title=f;h.appendChild("string"===typeof d?document.createTextNode(d):d);R(h,"click",de.prototype.c.bind(this, + c));d=document.createElement("button");d.className=b+"-out";d.setAttribute("type","button");d.title=g;d.appendChild("string"===typeof e?document.createTextNode(e):e);R(d,"click",de.prototype.c.bind(this,-c));c=document.createElement("div");c.className=b+" ol-unselectable ol-control";c.appendChild(h);c.appendChild(d);Ud.call(this,{element:c,target:a.target});this.a=void 0!==a.duration?a.duration:250}B(de,Ud); + de.prototype.c=function(a,b){b.preventDefault();var c=this.f,d=c.U();if(d){var e=d.O();e&&(0<this.a&&c.oa(Fc({resolution:e,duration:this.a,easing:Ac})),c=d.constrainResolution(e,a),d.set(wc,c))}};function ee(a){a=a?a:{};var b=new cd;(void 0!==a.zoom?a.zoom:1)&&b.push(new de(a.zoomOptions));(void 0!==a.rotate?a.rotate:1)&&b.push(new be(a.rotateOptions));(void 0!==a.attribution?a.attribution:1)&&b.push(new Vd(a.attributionOptions));return b};var fe; + function ge(){var a=aa.MessageChannel;"undefined"===typeof a&&"undefined"!==typeof window&&window.postMessage&&window.addEventListener&&!xd("Presto")&&(a=function(){var a=document.createElement("IFRAME");a.style.display="none";a.src="";document.documentElement.appendChild(a);var b=a.contentWindow,a=b.document;a.open();a.write("");a.close();var c="callImmediate"+Math.random(),d="file:"==b.location.protocol?"*":b.location.protocol+"//"+b.location.host,a=ea(function(a){if(("*"==d||a.origin==d)&&a.data== + c)this.port1.onmessage()},this);b.addEventListener("message",a,!1);this.port1={};this.port2={postMessage:function(){b.postMessage(c,d)}}});if("undefined"!==typeof a&&!xd("Trident")&&!xd("MSIE")){var b=new a,c={},d=c;b.port1.onmessage=function(){if(void 0!==c.next){c=c.next;var a=c.nc;c.nc=null;a()}};return function(a){d.next={nc:a};d=d.next;b.port2.postMessage(0)}}return"undefined"!==typeof document&&"onreadystatechange"in document.createElement("SCRIPT")?function(a){var b=document.createElement("SCRIPT"); + b.onreadystatechange=function(){b.onreadystatechange=null;b.parentNode.removeChild(b);b=null;a();a=null};document.documentElement.appendChild(b)}:function(a){aa.setTimeout(a,0)}};var he=["experimental-webgl","webgl","webkit-3d","moz-webgl"];function ie(a,b){var c,d,e=he.length;for(d=0;d<e;++d)try{if(c=a.getContext(he[d],b))return c}catch(f){}return null};var je,ke="undefined"!==typeof navigator?navigator.userAgent.toLowerCase():"",le=-1!==ke.indexOf("firefox"),me=-1!==ke.indexOf("safari")&&-1===ke.indexOf("chrom"),ne=-1!==ke.indexOf("macintosh"),oe=K.devicePixelRatio||1,pe=!1,qe=function(){if(!("HTMLCanvasElement"in K))return!1;try{var a=Md();return a?(a.setLineDash&&(pe=!0),!0):!1}catch(b){return!1}}(),re="ontouchstart"in K,se="PointerEvent"in K,te=!!K.navigator.msPointerEnabled,ue=!1,ve=[]; + if("WebGLRenderingContext"in K)try{var we=ie(document.createElement("CANVAS"),{failIfMajorPerformanceCaveat:!0});we&&(ue=!0,ve=we.getSupportedExtensions())}catch(a){}je=ue;fa=ve;function xe(a,b){this.b=a;this.g=b};function ye(a){xe.call(this,a,{mousedown:this.Pd,mousemove:this.Qd,mouseup:this.Td,mouseover:this.Sd,mouseout:this.Rd});this.a=a.a;this.c=[]}B(ye,xe);function ze(a,b){for(var c=a.c,d=b.clientX,e=b.clientY,f=0,g=c.length,h;f<g&&(h=c[f]);f++){var k=Math.abs(e-h[1]);if(25>=Math.abs(d-h[0])&&25>=k)return!0}return!1}function Ae(a){var b=Be(a,a),c=b.preventDefault;b.preventDefault=function(){a.preventDefault();c()};b.pointerId=1;b.isPrimary=!0;b.pointerType="mouse";return b}n=ye.prototype; + n.Pd=function(a){if(!ze(this,a)){if((1).toString()in this.a){var b=Ae(a);Ce(this.b,De,b,a);delete this.a[(1).toString()]}b=Ae(a);this.a[(1).toString()]=a;Ce(this.b,Ee,b,a)}};n.Qd=function(a){if(!ze(this,a)){var b=Ae(a);Ce(this.b,Fe,b,a)}};n.Td=function(a){if(!ze(this,a)){var b=this.a[(1).toString()];b&&b.button===a.button&&(b=Ae(a),Ce(this.b,Ge,b,a),delete this.a[(1).toString()])}};n.Sd=function(a){if(!ze(this,a)){var b=Ae(a);He(this.b,b,a)}}; + n.Rd=function(a){if(!ze(this,a)){var b=Ae(a);Ie(this.b,b,a)}};function Je(a){xe.call(this,a,{MSPointerDown:this.Yd,MSPointerMove:this.Zd,MSPointerUp:this.be,MSPointerOut:this.$d,MSPointerOver:this.ae,MSPointerCancel:this.Xd,MSGotPointerCapture:this.Vd,MSLostPointerCapture:this.Wd});this.a=a.a;this.c=["","unavailable","touch","pen","mouse"]}B(Je,xe);function Ke(a,b){var c=b;"number"===typeof b.pointerType&&(c=Be(b,b),c.pointerType=a.c[b.pointerType]);return c}n=Je.prototype;n.Yd=function(a){this.a[a.pointerId.toString()]=a;var b=Ke(this,a);Ce(this.b,Ee,b,a)}; + n.Zd=function(a){var b=Ke(this,a);Ce(this.b,Fe,b,a)};n.be=function(a){var b=Ke(this,a);Ce(this.b,Ge,b,a);delete this.a[a.pointerId.toString()]};n.$d=function(a){var b=Ke(this,a);Ie(this.b,b,a)};n.ae=function(a){var b=Ke(this,a);He(this.b,b,a)};n.Xd=function(a){var b=Ke(this,a);Ce(this.b,De,b,a);delete this.a[a.pointerId.toString()]};n.Wd=function(a){U(this.b,new Le("lostpointercapture",a,a))};n.Vd=function(a){U(this.b,new Le("gotpointercapture",a,a))};function Me(a){xe.call(this,a,{pointerdown:this.le,pointermove:this.me,pointerup:this.pe,pointerout:this.ne,pointerover:this.oe,pointercancel:this.ke,gotpointercapture:this.sd,lostpointercapture:this.Od})}B(Me,xe);n=Me.prototype;n.le=function(a){Ne(this.b,a)};n.me=function(a){Ne(this.b,a)};n.pe=function(a){Ne(this.b,a)};n.ne=function(a){Ne(this.b,a)};n.oe=function(a){Ne(this.b,a)};n.ke=function(a){Ne(this.b,a)};n.Od=function(a){Ne(this.b,a)};n.sd=function(a){Ne(this.b,a)};function Le(a,b,c){T.call(this,a);this.b=b;a=c?c:{};this.buttons=Oe(a);this.pressure=Pe(a,this.buttons);this.bubbles="bubbles"in a?a.bubbles:!1;this.cancelable="cancelable"in a?a.cancelable:!1;this.view="view"in a?a.view:null;this.detail="detail"in a?a.detail:null;this.screenX="screenX"in a?a.screenX:0;this.screenY="screenY"in a?a.screenY:0;this.clientX="clientX"in a?a.clientX:0;this.clientY="clientY"in a?a.clientY:0;this.button="button"in a?a.button:0;this.relatedTarget="relatedTarget"in a?a.relatedTarget: + null;this.pointerId="pointerId"in a?a.pointerId:0;this.width="width"in a?a.width:0;this.height="height"in a?a.height:0;this.pointerType="pointerType"in a?a.pointerType:"";this.isPrimary="isPrimary"in a?a.isPrimary:!1;b.preventDefault&&(this.preventDefault=function(){b.preventDefault()})}B(Le,T);function Oe(a){if(a.buttons||Qe)a=a.buttons;else switch(a.which){case 1:a=1;break;case 2:a=4;break;case 3:a=2;break;default:a=0}return a}function Pe(a,b){var c=0;a.pressure?c=a.pressure:c=b?.5:0;return c} + var Qe=!1;try{Qe=1===(new MouseEvent("click",{buttons:1})).buttons}catch(a){};function Re(a,b){xe.call(this,a,{touchstart:this.Ce,touchmove:this.Be,touchend:this.Ae,touchcancel:this.ze});this.a=a.a;this.l=b;this.c=void 0;this.h=0;this.f=void 0}B(Re,xe);n=Re.prototype;n.Uc=function(){this.h=0;this.f=void 0}; + function Se(a,b,c){b=Be(b,c);b.pointerId=c.identifier+2;b.bubbles=!0;b.cancelable=!0;b.detail=a.h;b.button=0;b.buttons=1;b.width=c.webkitRadiusX||c.radiusX||0;b.height=c.webkitRadiusY||c.radiusY||0;b.pressure=c.webkitForce||c.force||.5;b.isPrimary=a.c===c.identifier;b.pointerType="touch";b.clientX=c.clientX;b.clientY=c.clientY;b.screenX=c.screenX;b.screenY=c.screenY;return b} + function Te(a,b,c){function d(){b.preventDefault()}var e=Array.prototype.slice.call(b.changedTouches),f=e.length,g,h;for(g=0;g<f;++g)h=Se(a,b,e[g]),h.preventDefault=d,c.call(a,b,h)} + n.Ce=function(a){var b=a.touches,c=Object.keys(this.a),d=c.length;if(d>=b.length){var e=[],f,g,h;for(f=0;f<d;++f){g=c[f];h=this.a[g];var k;if(!(k=1==g))a:{k=b.length;for(var l,m=0;m<k;m++)if(l=b[m],l.identifier===g-2){k=!0;break a}k=!1}k||e.push(h.out)}for(f=0;f<e.length;++f)this.Ib(a,e[f])}b=a.changedTouches[0];c=Object.keys(this.a).length;if(0===c||1===c&&(1).toString()in this.a)this.c=b.identifier,b=K,void 0!==this.f&&b.clearTimeout(this.f);Ue(this,a);this.h++;Te(this,a,this.je)}; + n.je=function(a,b){this.a[b.pointerId]={target:b.target,out:b,Rc:b.target};var c=this.b;b.bubbles=!0;Ce(c,Ve,b,a);c=this.b;b.bubbles=!1;Ce(c,We,b,a);Ce(this.b,Ee,b,a)};n.Be=function(a){a.preventDefault();Te(this,a,this.Ud)};n.Ud=function(a,b){var c=this.a[b.pointerId];if(c){var d=c.out,e=c.Rc;Ce(this.b,Fe,b,a);d&&e!==b.target&&(d.relatedTarget=b.target,b.relatedTarget=e,d.target=e,b.target?(Ie(this.b,d,a),He(this.b,b,a)):(b.target=e,b.relatedTarget=null,this.Ib(a,b)));c.out=b;c.Rc=b.target}}; + n.Ae=function(a){Ue(this,a);Te(this,a,this.De)};n.De=function(a,b){Ce(this.b,Ge,b,a);this.b.out(b,a);var c=this.b;b.bubbles=!1;Ce(c,Xe,b,a);delete this.a[b.pointerId];b.isPrimary&&(this.c=void 0,this.f=K.setTimeout(this.Uc.bind(this),200))};n.ze=function(a){Te(this,a,this.Ib)};n.Ib=function(a,b){Ce(this.b,De,b,a);this.b.out(b,a);var c=this.b;b.bubbles=!1;Ce(c,Xe,b,a);delete this.a[b.pointerId];b.isPrimary&&(this.c=void 0,this.f=K.setTimeout(this.Uc.bind(this),200))}; + function Ue(a,b){var c=a.l.c,d=b.changedTouches[0];if(a.c===d.identifier){var e=[d.clientX,d.clientY];c.push(e);K.setTimeout(function(){Qa(c,e)},2500)}};function Ye(a){Ga.call(this);this.g=a;this.a={};this.f={};this.b=[];se?Ze(this,new Me(this)):te?Ze(this,new Je(this)):(a=new ye(this),Ze(this,a),re&&Ze(this,new Re(this,a)));a=this.b.length;for(var b,c=0;c<a;c++)b=this.b[c],$e(this,Object.keys(b.g))}B(Ye,Ga);function Ze(a,b){var c=Object.keys(b.g);c&&(c.forEach(function(a){var c=b.g[a];c&&(this.f[a]=c.bind(b))},a),a.b.push(b))}Ye.prototype.c=function(a){var b=this.f[a.type];b&&b(a)}; + function $e(a,b){b.forEach(function(a){R(this.g,a,this.c,this)},a)}function af(a,b){b.forEach(function(a){ya(this.g,a,this.c,this)},a)}function Be(a,b){for(var c={},d,e=0,f=bf.length;e<f;e++)d=bf[e][0],c[d]=a[d]||b[d]||bf[e][1];return c}Ye.prototype.out=function(a,b){a.bubbles=!0;Ce(this,cf,a,b)};function Ie(a,b,c){a.out(b,c);var d=b.target,e=b.relatedTarget;d&&e&&d.contains(e)||(b.bubbles=!1,Ce(a,Xe,b,c))} + function He(a,b,c){b.bubbles=!0;Ce(a,Ve,b,c);var d=b.target,e=b.relatedTarget;d&&e&&d.contains(e)||(b.bubbles=!1,Ce(a,We,b,c))}function Ce(a,b,c,d){U(a,new Le(b,d,c))}function Ne(a,b){U(a,new Le(b.type,b,b))}Ye.prototype.R=function(){for(var a=this.b.length,b,c=0;c<a;c++)b=this.b[c],af(this,Object.keys(b.g));Ga.prototype.R.call(this)}; + var Fe="pointermove",Ee="pointerdown",Ge="pointerup",Ve="pointerover",cf="pointerout",We="pointerenter",Xe="pointerleave",De="pointercancel",bf=[["bubbles",!1],["cancelable",!1],["view",null],["detail",null],["screenX",0],["screenY",0],["clientX",0],["clientY",0],["ctrlKey",!1],["altKey",!1],["shiftKey",!1],["metaKey",!1],["button",0],["relatedTarget",null],["buttons",0],["pointerId",0],["width",0],["height",0],["pressure",0],["tiltX",0],["tiltY",0],["pointerType",""],["hwTimestamp",0],["isPrimary", + !1],["type",""],["target",null],["currentTarget",null],["which",0]];function df(a,b,c,d,e){Td.call(this,a,b,e);this.originalEvent=c;this.pixel=b.uc(c);this.coordinate=b.Ba(this.pixel);this.dragging=void 0!==d?d:!1}B(df,Td);df.prototype.preventDefault=function(){Td.prototype.preventDefault.call(this);this.originalEvent.preventDefault()};df.prototype.stopPropagation=function(){Td.prototype.stopPropagation.call(this);this.originalEvent.stopPropagation()};function ef(a,b,c,d,e){df.call(this,a,b,c.b,d,e);this.b=c}B(ef,df); + function ff(a){Ga.call(this);this.c=a;this.h=0;this.l=!1;this.f=[];this.a=null;a=this.c.a;this.v=0;this.s={};this.g=new Ye(a);this.b=null;this.i=R(this.g,Ee,this.Cd,this);this.j=R(this.g,Fe,this.re,this)}B(ff,Ga);function gf(a,b){var c;c=new ef(hf,a.c,b);U(a,c);0!==a.h?(K.clearTimeout(a.h),a.h=0,c=new ef(jf,a.c,b),U(a,c)):a.h=K.setTimeout(function(){this.h=0;var a=new ef(kf,this.c,b);U(this,a)}.bind(a),250)} + function lf(a,b){b.type==mf||b.type==nf?delete a.s[b.pointerId]:b.type==of&&(a.s[b.pointerId]=!0);a.v=Object.keys(a.s).length}n=ff.prototype;n.xc=function(a){lf(this,a);var b=new ef(mf,this.c,a);U(this,b);!this.l&&0===a.button&&gf(this,this.a);0===this.v&&(this.f.forEach(M),this.f.length=0,this.l=!1,this.a=null,Da(this.b),this.b=null)}; + n.Cd=function(a){lf(this,a);var b=new ef(of,this.c,a);U(this,b);this.a=a;0===this.f.length&&(this.b=new Ye(document),this.f.push(R(this.b,pf,this.ee,this),R(this.b,mf,this.xc,this),R(this.g,nf,this.xc,this)))};n.ee=function(a){if(a.clientX!=this.a.clientX||a.clientY!=this.a.clientY){this.l=!0;var b=new ef(qf,this.c,a,this.l);U(this,b)}a.preventDefault()};n.re=function(a){U(this,new ef(a.type,this.c,a,!(!this.a||a.clientX==this.a.clientX&&a.clientY==this.a.clientY)))}; + n.R=function(){this.j&&(M(this.j),this.j=null);this.i&&(M(this.i),this.i=null);this.f.forEach(M);this.f.length=0;this.b&&(Da(this.b),this.b=null);this.g&&(Da(this.g),this.g=null);Ga.prototype.R.call(this)};var kf="singleclick",hf="click",jf="dblclick",qf="pointerdrag",pf="pointermove",of="pointerdown",mf="pointerup",nf="pointercancel",rf={Pe:kf,Ee:hf,Fe:jf,Ie:qf,Le:pf,He:of,Oe:mf,Ne:"pointerover",Me:"pointerout",Je:"pointerenter",Ke:"pointerleave",Ge:nf};function sf(a){V.call(this);var b=pa({},a);b.opacity=void 0!==a.opacity?a.opacity:1;b.visible=void 0!==a.visible?a.visible:!0;b.zIndex=void 0!==a.zIndex?a.zIndex:0;b.maxResolution=void 0!==a.maxResolution?a.maxResolution:Infinity;b.minResolution=void 0!==a.minResolution?a.minResolution:0;this.l(b)}B(sf,V); + function tf(a){var b=a.Xb(),c=a.Sb(),d=a.gb(),e=a.G(),f=a.Yb(),g=a.get("maxResolution"),h=a.get("minResolution");return{layer:a,opacity:ia(b,0,1),ac:c,visible:d,hb:!0,extent:e,zIndex:f,maxResolution:g,minResolution:Math.max(h,0)}}n=sf.prototype;n.G=function(){return this.get("extent")};n.Xb=function(){return this.get("opacity")};n.gb=function(){return this.get("visible")};n.Yb=function(){return this.get("zIndex")};n.Bc=function(a){this.set("opacity",a)};n.Cc=function(a){this.set("visible",a)}; + n.Dc=function(a){this.set("zIndex",a)};function uf(a,b,c,d,e){T.call(this,a);this.vectorContext=b;this.frameState=c;this.context=d;this.glContext=e}B(uf,T);function vf(a){V.call(this);this.N=Hb(a.projection);this.h=wf(a.attributions);this.D=a.logo;this.P=void 0!==a.state?a.state:"ready";this.i=void 0!==a.wrapX?a.wrapX:!1}B(vf,V);function wf(a){if("string"===typeof a)return[new bd({html:a})];if(a instanceof bd)return[a];if(Array.isArray(a)){for(var b=a.length,c=Array(b),d=0;d<b;d++){var e=a[d];c[d]="string"===typeof e?new bd({html:e}):e}return c}return null}vf.prototype.fa=I;vf.prototype.ia=function(){return this.N};vf.prototype.T=function(){return this.P}; + vf.prototype.Ja=function(){this.w()};function xf(a){var b=pa({},a);delete b.source;sf.call(this,b);this.h=this.f=this.c=null;a.map&&this.setMap(a.map);R(this,La("source"),this.Hd,this);this.$b(a.source?a.source:null)}B(xf,sf);function yf(a,b){return a.visible&&b>=a.minResolution&&b<a.maxResolution}n=xf.prototype;n.Pb=function(a){a=a?a:[];a.push(tf(this));return a};n.da=function(){return this.get("source")||null};n.Sb=function(){var a=this.da();return a?a.T():"undefined"};n.fe=function(){this.w()}; + n.Hd=function(){this.h&&(M(this.h),this.h=null);var a=this.da();a&&(this.h=R(a,"change",this.fe,this));this.w()};n.setMap=function(a){this.c&&(M(this.c),this.c=null);a||this.w();this.f&&(M(this.f),this.f=null);a&&(this.c=R(a,"precompose",function(a){var c=tf(this);c.hb=!1;c.zIndex=Infinity;a.frameState.layerStatesArray.push(c);a.frameState.layerStates[J(this)]=c},this),this.f=R(this,"change",a.render,a),this.w())};n.$b=function(a){this.set("source",a)};function zf(){this.b={};this.a=0}zf.prototype.clear=function(){this.b={};this.a=0};zf.prototype.get=function(a,b,c){a=b+":"+a+":"+(c?nd(c):"null");return a in this.b?this.b[a]:null};zf.prototype.set=function(a,b,c,d){this.b[b+":"+a+":"+(c?nd(c):"null")]=d;++this.a};var Af=new zf;var Bf=Array(6);function Cf(){return[1,0,0,1,0,0]}function Df(a){return Ef(a,1,0,0,1,0,0)}function Ff(a,b){var c=a[0],d=a[1],e=a[2],f=a[3],g=a[4],h=a[5],k=b[0],l=b[1],m=b[2],p=b[3],q=b[4],u=b[5];a[0]=c*k+e*l;a[1]=d*k+f*l;a[2]=c*m+e*p;a[3]=d*m+f*p;a[4]=c*q+e*u+g;a[5]=d*q+f*u+h}function Ef(a,b,c,d,e,f,g){a[0]=b;a[1]=c;a[2]=d;a[3]=e;a[4]=f;a[5]=g;return a}function Gf(a,b){a[0]=b[0];a[1]=b[1];a[2]=b[2];a[3]=b[3];a[4]=b[4];a[5]=b[5];return a} + function Hf(a,b){var c=b[0],d=b[1];b[0]=a[0]*c+a[2]*d+a[4];b[1]=a[1]*c+a[3]*d+a[5];return b}function If(a,b){var c=Math.cos(b),d=Math.sin(b);Ff(a,Ef(Bf,c,d,-d,c,0,0))}function Jf(a,b,c){Ff(a,Ef(Bf,b,0,0,c,0,0))}function Kf(a,b,c){Ff(a,Ef(Bf,1,0,0,1,b,c))}function Lf(a,b,c,d,e,f,g,h){var k=Math.sin(f);f=Math.cos(f);a[0]=d*f;a[1]=e*k;a[2]=-d*k;a[3]=e*f;a[4]=g*d*f-h*d*k+b;a[5]=g*e*k+h*e*f+c;return a} + function Mf(a){var b=a[0]*a[3]-a[1]*a[2];L(0!==b,32);var c=a[0],d=a[1],e=a[2],f=a[3],g=a[4],h=a[5];a[0]=f/b;a[1]=-d/b;a[2]=-e/b;a[3]=c/b;a[4]=(e*h-f*g)/b;a[5]=-(c*h-d*g)/b};function Nf(a,b){this.g=b;this.c={};this.j={}}B(Nf,Aa);function Of(a){var b=a.viewState,c=a.coordinateToPixelTransform,d=a.pixelToCoordinateTransform;Lf(c,a.size[0]/2,a.size[1]/2,1/b.resolution,-1/b.resolution,-b.rotation,-b.center[0],-b.center[1]);Mf(Gf(d,c))}n=Nf.prototype;n.R=function(){for(var a in this.c)Da(this.c[a])};function Pf(){if(32<Af.a){var a=0,b,c;for(b in Af.b)c=Af.b[b],0!==(a++&3)||Ha(c)||(delete Af.b[b],--Af.a)}} + n.fa=function(a,b,c,d,e,f){function g(a,e){var f=J(a).toString(),g=b.layerStates[J(e)].hb;if(!(f in b.skippedFeatureUids)||g)return c.call(d,a,g?e:null)}var h,k=b.viewState,l=k.resolution,m=k.projection,k=a;if(m.b){var m=m.G(),p=qb(m),q=a[0];if(q<m[0]||q>m[2])k=[q+p*Math.ceil((m[0]-q)/p),a[1]]}m=b.layerStatesArray;for(p=m.length-1;0<=p;--p){var u=m[p],q=u.layer;if(yf(u,l)&&e.call(f,q)&&(u=Qf(this,q),q.da()&&(h=u.fa(q.da().i?k:a,b,g,d)),h))return h}}; + n.Fc=function(a,b,c,d){return void 0!==this.fa(a,b,yb,this,c,d)};function Qf(a,b){var c=J(b).toString();if(c in a.c)return a.c[c];var d=a.Mb(b);a.c[c]=d;a.j[c]=R(d,"change",a.wd,a);return d}n.wd=function(){this.g.render()};n.vb=I;n.ue=function(a,b){for(var c in this.c)if(!(b&&c in b.layerStates)){var d=c,e=this.c[d];delete this.c[d];M(this.j[d]);delete this.j[d];Da(e)}};function Rf(a,b){for(var c in a.c)if(!(c in b.layerStates)){b.postRenderFunctions.push(a.ue.bind(a));break}} + function Ta(a,b){return a.zIndex-b.zIndex};function Sf(a,b){Ga.call(this);this.V=a;this.state=b;this.b=null;this.key=""}B(Sf,Ga);function Tf(a){U(a,"change")}Sf.prototype.getKey=function(){return this.key+"/"+this.V};Sf.prototype.T=function(){return this.state};function Uf(a,b){this.j=a;this.f=b;this.b=[];this.c=[];this.a={}}Uf.prototype.clear=function(){this.b.length=0;this.c.length=0;qa(this.a)};function Vf(a){var b=a.b,c=a.c,d=b[0];1==b.length?(b.length=0,c.length=0):(b[0]=b.pop(),c[0]=c.pop(),Wf(a,0));b=a.f(d);delete a.a[b];return d}Uf.prototype.g=function(a){L(!(this.f(a)in this.a),31);var b=this.j(a);return Infinity!=b?(this.b.push(a),this.c.push(b),this.a[this.f(a)]=!0,Xf(this,0,this.b.length-1),!0):!1}; + function Wf(a,b){for(var c=a.b,d=a.c,e=c.length,f=c[b],g=d[b],h=b;b<e>>1;){var k=2*b+1,l=2*b+2,k=l<e&&d[l]<d[k]?l:k;c[b]=c[k];d[b]=d[k];b=k}c[b]=f;d[b]=g;Xf(a,h,b)}function Xf(a,b,c){var d=a.b;a=a.c;for(var e=d[c],f=a[c];c>b;){var g=c-1>>1;if(a[g]>f)d[c]=d[g],a[c]=a[g],c=g;else break}d[c]=e;a[c]=f}function Yf(a){var b=a.j,c=a.b,d=a.c,e=0,f=c.length,g,h,k;for(h=0;h<f;++h)g=c[h],k=b(g),Infinity==k?delete a.a[a.f(g)]:(d[e]=k,c[e++]=g);c.length=e;d.length=e;for(b=(a.b.length>>1)-1;0<=b;b--)Wf(a,b)};function Zf(a,b){Uf.call(this,function(b){return a.apply(null,b)},function(a){return a[0].getKey()});this.C=b;this.l=0;this.h={}}B(Zf,Uf);Zf.prototype.g=function(a){var b=Uf.prototype.g.call(this,a);b&&R(a[0],"change",this.i,this);return b};Zf.prototype.i=function(a){a=a.target;var b=a.T();if(2===b||3===b||4===b||5===b)ya(a,"change",this.i,this),a=a.getKey(),a in this.h&&(delete this.h[a],--this.l),this.C()};function $f(){this.b=[];this.a=this.c=0}function ag(a,b){var c=a.a,d=.05-c,e=Math.log(.05/a.a)/-.005;return Dc({source:b,duration:e,easing:function(a){return c*(Math.exp(-.005*a*e)-1)/d}})};function bg(a){V.call(this);this.aa=null;this.set("active",!0);this.handleEvent=a.handleEvent}B(bg,V);bg.prototype.setMap=function(a){this.aa=a};function cg(a,b,c,d,e){if(void 0!==c){var f=b.get(xc),g=b.qa();void 0!==f&&g&&e&&0<e&&(a.oa(Ec({rotation:f,duration:e,easing:Ac})),d&&a.oa(Dc({source:g,duration:e,easing:Ac})));b.rotate(c,d)}}function dg(a,b,c,d,e){var f=b.O();c=b.constrainResolution(f,c,0);eg(a,b,c,d,e)} + function eg(a,b,c,d,e){if(c){var f=b.O(),g=b.qa();void 0!==f&&g&&c!==f&&e&&0<e&&(a.oa(Fc({resolution:f,duration:e,easing:Ac})),d&&a.oa(Dc({source:g,duration:e,easing:Ac})));if(d){var h;a=b.qa();e=b.O();void 0!==a&&void 0!==e&&(h=[d[0]-c*(d[0]-a[0])/e,d[1]-c*(d[1]-a[1])/e]);b.xa(h)}b.set(wc,c)}};function fg(a){a=a?a:{};this.a=a.delta?a.delta:1;bg.call(this,{handleEvent:gg});this.c=void 0!==a.duration?a.duration:250}B(fg,bg);function gg(a){var b=!1,c=a.originalEvent;if(a.type==jf){var b=a.map,d=a.coordinate,c=c.shiftKey?-this.a:this.a,e=b.U();dg(b,e,c,d,this.c);a.preventDefault();b=!0}return!b};function hg(a){a=a.originalEvent;return a.altKey&&!(a.metaKey||a.ctrlKey)&&a.shiftKey}function ig(a){a=a.originalEvent;return 0==a.button&&!(Cd&&ne&&a.ctrlKey)}function jg(a){a=a.originalEvent;return!a.altKey&&!(a.metaKey||a.ctrlKey)&&!a.shiftKey}function kg(a){a=a.originalEvent;return!a.altKey&&!(a.metaKey||a.ctrlKey)&&a.shiftKey}function lg(a){a=a.originalEvent.target.tagName;return"INPUT"!==a&&"SELECT"!==a&&"TEXTAREA"!==a}function mg(a){L(a.b,56);return"mouse"==a.b.pointerType};function ng(a){a=a?a:{};bg.call(this,{handleEvent:a.handleEvent?a.handleEvent:og});this.Bb=a.handleDownEvent?a.handleDownEvent:zb;this.Cb=a.handleDragEvent?a.handleDragEvent:I;this.zb=a.handleMoveEvent?a.handleMoveEvent:I;this.Eb=a.handleUpEvent?a.handleUpEvent:zb;this.v=!1;this.N={};this.f=[]}B(ng,bg);function pg(a){for(var b=a.length,c=0,d=0,e=0;e<b;e++)c+=a[e].clientX,d+=a[e].clientY;return[c/b,d/b]} + function og(a){if(!(a instanceof ef))return!0;var b=!1,c=a.type;if(c===of||c===qf||c===mf)c=a.b,a.type==mf?delete this.N[c.pointerId]:a.type==of?this.N[c.pointerId]=c:c.pointerId in this.N&&(this.N[c.pointerId]=c),this.f=ra(this.N);this.v&&(a.type==qf?this.Cb(a):a.type==mf&&(this.v=this.Eb(a)));a.type==of?(this.v=a=this.Bb(a),b=this.B(a)):a.type==pf&&this.zb(a);return!b}ng.prototype.B=function(a){return a};function qg(a){ng.call(this,{handleDownEvent:rg,handleDragEvent:sg,handleUpEvent:tg});a=a?a:{};this.a=a.kinetic;this.c=this.g=null;this.i=a.condition?a.condition:jg;this.h=!1}B(qg,ng);function sg(a){var b=pg(this.f);this.a&&this.a.b.push(b[0],b[1],Date.now());if(this.c){var c=this.c[0]-b[0],d=b[1]-this.c[1];a=a.map.U();var e=a.T(),d=c=[c,d],f=e.resolution;d[0]*=f;d[1]*=f;bb(c,e.rotation);ab(c,e.center);c=a.a.center(c);a.xa(c)}this.c=b} + function tg(a){var b=a.map;a=b.U();if(0===this.f.length){var c;if(c=!this.h&&this.a)if(c=this.a,6>c.b.length)c=!1;else{var d=Date.now()-100,e=c.b.length-3;if(c.b[e+2]<d)c=!1;else{for(var f=e-3;0<f&&c.b[f+2]>d;)f-=3;var d=c.b[e+2]-c.b[f+2],g=c.b[e]-c.b[f],e=c.b[e+1]-c.b[f+1];c.c=Math.atan2(e,g);c.a=Math.sqrt(g*g+e*e)/d;c=.05<c.a}}c?(c=(.05-this.a.a)/-.005,e=this.a.c,f=a.qa(),this.g=ag(this.a,f),b.oa(this.g),f=ug(b,f),b=b.Ba([f[0]-c*Math.cos(e),f[1]-c*Math.sin(e)]),b=a.a.center(b),a.xa(b)):b.render(); + zc(a,-1);return!1}this.c=null;return!0}function rg(a){if(0<this.f.length&&this.i(a)){var b=a.map,c=b.U();this.c=null;this.v||zc(c,1);this.g&&Qa(b.D,this.g)&&(c.xa(a.frameState.viewState.center),this.g=null);this.a&&(a=this.a,a.b.length=0,a.c=0,a.a=0);this.h=1<this.f.length;return!0}return!1}qg.prototype.B=zb;function vg(a){a=a?a:{};ng.call(this,{handleDownEvent:wg,handleDragEvent:xg,handleUpEvent:yg});this.c=a.condition?a.condition:hg;this.a=void 0;this.g=void 0!==a.duration?a.duration:250}B(vg,ng);function xg(a){if(mg(a)){var b=a.map,c=b.Ta();a=a.pixel;c=Math.atan2(c[1]/2-a[1],a[0]-c[0]/2);if(void 0!==this.a){a=c-this.a;var d=b.U(),e=d.get(xc);cg(b,d,e-a)}this.a=c}} + function yg(a){if(!mg(a))return!0;a=a.map;var b=a.U();zc(b,-1);var c=b.get(xc),d=this.g,c=b.constrainRotation(c,0);cg(a,b,c,void 0,d);return!1}function wg(a){return mg(a)&&ig(a)&&this.c(a)?(zc(a.map.U(),1),this.a=void 0,!0):!1}vg.prototype.B=zb;function zg(a){this.f=null;this.a=document.createElement("div");this.a.style.position="absolute";this.a.className="ol-box "+a;this.c=this.g=this.b=null}B(zg,Aa);zg.prototype.R=function(){this.setMap(null)};function Ag(a){var b=a.g,c=a.c;a=a.a.style;a.left=Math.min(b[0],c[0])+"px";a.top=Math.min(b[1],c[1])+"px";a.width=Math.abs(c[0]-b[0])+"px";a.height=Math.abs(c[1]-b[1])+"px"} + zg.prototype.setMap=function(a){if(this.b){this.b.s.removeChild(this.a);var b=this.a.style;b.left=b.top=b.width=b.height="inherit"}(this.b=a)&&this.b.s.appendChild(this.a)};function Bg(a){var b=a.g,c=a.c,b=[b,[b[0],c[1]],c,[c[0],b[1]]].map(a.b.Ba,a.b);b[4]=b[0].slice();a.f?a.f.ea([b]):a.f=new qc([b])}zg.prototype.S=function(){return this.f};function Cg(a,b,c){T.call(this,a);this.coordinate=b;this.mapBrowserEvent=c}B(Cg,T);function Dg(a){ng.call(this,{handleDownEvent:Eg,handleDragEvent:Fg,handleUpEvent:Gg});a=a?a:{};this.a=new zg(a.className||"ol-dragbox");this.c=null;this.j=a.condition?a.condition:yb;this.i=a.boxEndCondition?a.boxEndCondition:Hg}B(Dg,ng);function Hg(a,b,c){a=c[0]-b[0];b=c[1]-b[1];return 64<=a*a+b*b} + function Fg(a){if(mg(a)){var b=this.a,c=a.pixel;b.g=this.c;b.c=c;Bg(b);Ag(b);U(this,new Cg("boxdrag",a.coordinate,a))}}Dg.prototype.S=function(){return this.a.S()};Dg.prototype.h=I;function Gg(a){if(!mg(a))return!0;this.a.setMap(null);this.i(a,this.c,a.pixel)&&(this.h(a),U(this,new Cg("boxend",a.coordinate,a)));return!1} + function Eg(a){if(mg(a)&&ig(a)&&this.j(a)){this.c=a.pixel;this.a.setMap(a.map);var b=this.a,c=this.c;b.g=this.c;b.c=c;Bg(b);Ag(b);U(this,new Cg("boxstart",a.coordinate,a));return!0}return!1};function Ig(a){a=a?a:{};var b=a.condition?a.condition:kg;this.g=void 0!==a.duration?a.duration:200;this.s=void 0!==a.out?a.out:!1;Dg.call(this,{condition:b,className:a.className||"ol-dragzoom"})}B(Ig,Dg); + Ig.prototype.h=function(){var a=this.aa,b=a.U(),c=a.Ta(),d=this.S().G();if(this.s){var e=b.lc(c),d=[ug(a,sb(d)),ug(a,[d[2],d[3]])],f=jb(void 0),g,h;g=0;for(h=d.length;g<h;++g)eb(f,d[g]);f=1/yc(f,c);d=(e[2]-e[0])/2*(f-1);f=(e[3]-e[1])/2*(f-1);e[0]-=d;e[2]+=d;e[1]-=f;e[3]+=f;d=e}c=b.constrainResolution(yc(d,c));e=b.O();f=b.qa();a.oa(Fc({resolution:e,duration:this.g,easing:Ac}));a.oa(Dc({source:f,duration:this.g,easing:Ac}));b.xa(tb(d));b.set(wc,c)};function Jg(a){bg.call(this,{handleEvent:Kg});a=a||{};this.a=function(a){return jg(a)&&lg(a)};this.c=void 0!==a.condition?a.condition:this.a;this.f=void 0!==a.duration?a.duration:100;this.g=void 0!==a.pixelDelta?a.pixelDelta:128}B(Jg,bg); + function Kg(a){var b=!1;if("keydown"==a.type){var c=a.originalEvent.keyCode;if(this.c(a)&&(40==c||37==c||39==c||38==c)){var d=a.map,b=d.U(),e=b.O()*this.g,f=0,g=0;40==c?g=-e:37==c?f=-e:39==c?f=e:g=e;c=[f,g];bb(c,b.get(xc));e=this.f;if(f=b.qa())e&&0<e&&d.oa(Dc({source:f,duration:e,easing:Cc})),d=b.a.center([f[0]+c[0],f[1]+c[1]]),b.xa(d);a.preventDefault();b=!0}}return!b};function Lg(a){bg.call(this,{handleEvent:Mg});a=a?a:{};this.c=a.condition?a.condition:lg;this.a=a.delta?a.delta:1;this.f=void 0!==a.duration?a.duration:100}B(Lg,bg);function Mg(a){var b=!1;if("keydown"==a.type||"keypress"==a.type){var c=a.originalEvent.charCode;if(this.c(a)&&(43==c||45==c)){var b=a.map,c=43==c?this.a:-this.a,d=b.U();dg(b,d,c,void 0,this.f);a.preventDefault();b=!0}}return!b};function Ng(a){bg.call(this,{handleEvent:Og});a=a||{};this.a=0;this.i=void 0!==a.duration?a.duration:250;this.j=void 0!==a.useAnchor?a.useAnchor:!0;this.f=null;this.g=this.c=void 0}B(Ng,bg); + function Og(a){var b=!1;if("wheel"==a.type||"mousewheel"==a.type){var b=a.map,c=a.originalEvent;this.j&&(this.f=a.coordinate);var d;"wheel"==a.type?(d=c.deltaY,le&&c.deltaMode===K.WheelEvent.DOM_DELTA_PIXEL&&(d/=oe),c.deltaMode===K.WheelEvent.DOM_DELTA_LINE&&(d*=40)):"mousewheel"==a.type&&(d=-c.wheelDeltaY,me&&(d/=3));this.a+=d;void 0===this.c&&(this.c=Date.now());d=Math.max(80-(Date.now()-this.c),0);K.clearTimeout(this.g);this.g=K.setTimeout(this.h.bind(this,b),d);a.preventDefault();b=!0}return!b} + Ng.prototype.h=function(a){var b=ia(this.a,-1,1),c=a.U();dg(a,c,-b,this.f,this.i);this.a=0;this.f=null;this.g=this.c=void 0};function Pg(a){ng.call(this,{handleDownEvent:Qg,handleDragEvent:Rg,handleUpEvent:Sg});a=a||{};this.c=null;this.g=void 0;this.a=!1;this.h=0;this.j=void 0!==a.threshold?a.threshold:.3;this.i=void 0!==a.duration?a.duration:250}B(Pg,ng); + function Rg(a){var b=0,c=this.f[0],d=this.f[1],c=Math.atan2(d.clientY-c.clientY,d.clientX-c.clientX);void 0!==this.g&&(b=c-this.g,this.h+=b,!this.a&&Math.abs(this.h)>this.j&&(this.a=!0));this.g=c;a=a.map;c=a.a.getBoundingClientRect();d=pg(this.f);d[0]-=c.left;d[1]-=c.top;this.c=a.Ba(d);this.a&&(c=a.U(),d=c.get(xc),a.render(),cg(a,c,d+b,this.c))} + function Sg(a){if(2>this.f.length){a=a.map;var b=a.U();zc(b,-1);if(this.a){var c=b.get(xc),d=this.c,e=this.i,c=b.constrainRotation(c,0);cg(a,b,c,d,e)}return!1}return!0}function Qg(a){return 2<=this.f.length?(a=a.map,this.c=null,this.g=void 0,this.a=!1,this.h=0,this.v||zc(a.U(),1),a.render(),!0):!1}Pg.prototype.B=zb;function Tg(a){ng.call(this,{handleDownEvent:Ug,handleDragEvent:Vg,handleUpEvent:Wg});a=a?a:{};this.c=null;this.h=void 0!==a.duration?a.duration:400;this.a=void 0;this.g=1}B(Tg,ng);function Vg(a){var b=1,c=this.f[0],d=this.f[1],e=c.clientX-d.clientX,c=c.clientY-d.clientY,e=Math.sqrt(e*e+c*c);void 0!==this.a&&(b=this.a/e);this.a=e;1!=b&&(this.g=b);a=a.map;var e=a.U(),c=e.O(),d=a.a.getBoundingClientRect(),f=pg(this.f);f[0]-=d.left;f[1]-=d.top;this.c=a.Ba(f);a.render();eg(a,e,c*b,this.c)} + function Wg(a){if(2>this.f.length){a=a.map;var b=a.U();zc(b,-1);var c=b.O(),d=this.c,e=this.h,c=b.constrainResolution(c,0,this.g-1);eg(a,b,c,d,e);return!1}return!0}function Ug(a){return 2<=this.f.length?(a=a.map,this.c=null,this.a=void 0,this.g=1,this.v||zc(a.U(),1),a.render(),!0):!1}Tg.prototype.B=zb;function Xg(a){var b=a||{};a=pa({},b);delete a.layers;b=b.layers;sf.call(this,a);this.c=[];this.a={};R(this,La("layers"),this.yd,this);b?Array.isArray(b)?b=new cd(b.slice()):L(b instanceof cd,43):b=new cd;this.set("layers",b)}B(Xg,sf);n=Xg.prototype;n.rb=function(){this.gb()&&this.w()}; + n.yd=function(){this.c.forEach(M);this.c.length=0;var a=this.get("layers");this.c.push(R(a,hd,this.xd,this),R(a,id,this.zd,this));for(var b in this.a)this.a[b].forEach(M);qa(this.a);var a=a.a,c,d;b=0;for(c=a.length;b<c;b++)d=a[b],this.a[J(d).toString()]=[R(d,"propertychange",this.rb,this),R(d,"change",this.rb,this)];this.w()};n.xd=function(a){a=a.element;var b=J(a).toString();this.a[b]=[R(a,"propertychange",this.rb,this),R(a,"change",this.rb,this)];this.w()}; + n.zd=function(a){a=J(a.element).toString();this.a[a].forEach(M);delete this.a[a];this.w()};n.Pb=function(a){var b=void 0!==a?a:[],c=b.length;ed(this.get("layers"),function(a){a.Pb(b)});a=tf(this);var d,e;for(d=b.length;c<d;c++)e=b[c],e.opacity*=a.opacity,e.visible=e.visible&&a.visible,e.maxResolution=Math.min(e.maxResolution,a.maxResolution),e.minResolution=Math.max(e.minResolution,a.minResolution),void 0!==a.extent&&(e.extent=void 0!==e.extent?vb(e.extent,a.extent):a.extent);return b};n.Sb=function(){return"ready"};function Yg(a){Eb.call(this,{code:a,units:"m",extent:Zg,global:!0,worldExtent:$g})}B(Yg,Eb);Yg.prototype.getPointResolution=function(a,b){return a/ja(b[1]/6378137)};var ah=6378137*Math.PI,Zg=[-ah,-ah,ah,ah],$g=[-180,-85,180,85],bh="EPSG:3857 EPSG:102100 EPSG:102113 EPSG:900913 urn:ogc:def:crs:EPSG:6.18:3:3857 urn:ogc:def:crs:EPSG::3857 http://www.opengis.net/gml/srs/epsg.xml#3857".split(" ").map(function(a){return new Yg(a)}); + function ch(a,b,c){var d=a.length;c=1<c?c:2;void 0===b&&(2<c?b=a.slice():b=Array(d));for(var e=0;e<d;e+=c)b[e]=6378137*Math.PI*a[e]/180,b[e+1]=6378137*Math.log(Math.tan(Math.PI*(a[e+1]+90)/360));return b}function dh(a,b,c){var d=a.length;c=1<c?c:2;void 0===b&&(2<c?b=a.slice():b=Array(d));for(var e=0;e<d;e+=c)b[e]=180*a[e]/(6378137*Math.PI),b[e+1]=360*Math.atan(Math.exp(a[e+1]/6378137))/Math.PI-90;return b};var eh=new Ab(6378137);function fh(a,b){Eb.call(this,{code:a,units:"degrees",extent:gh,axisOrientation:b,global:!0,metersPerUnit:hh,worldExtent:gh})}B(fh,Eb);fh.prototype.getPointResolution=function(a){return a}; + var gh=[-180,-90,180,90],hh=Math.PI*eh.radius/180,ih=[new fh("CRS:84"),new fh("EPSG:4326","neu"),new fh("urn:ogc:def:crs:EPSG::4326","neu"),new fh("urn:ogc:def:crs:EPSG:6.6:4326","neu"),new fh("urn:ogc:def:crs:OGC:1.3:CRS84"),new fh("urn:ogc:def:crs:OGC:2:84"),new fh("http://www.opengis.net/gml/srs/epsg.xml#4326","neu"),new fh("urn:x-ogc:def:crs:EPSG:4326","neu")];function W(a){a=a?a:{};var b=pa({},a);delete b.preload;delete b.useInterimTilesOnError;xf.call(this,b);this.set("preload",void 0!==a.preload?a.preload:0);this.set("useInterimTilesOnError",void 0!==a.useInterimTilesOnError?a.useInterimTilesOnError:!0)}B(W,xf);function jh(a){return a.get("useInterimTilesOnError")};var kh=[0,0,0,1],lh=[],mh=[0,0,0,1];function nh(a,b,c,d){0!==b&&(a.translate(c,d),a.rotate(b),a.translate(-c,-d))};function oh(a){this.C=a.opacity;this.K=a.rotateWithView;this.s=a.rotation;this.v=a.scale;this.B=a.snapToPixel};function ph(a){a=a||{};this.h=this.c=this.f=null;this.g=void 0!==a.fill?a.fill:null;this.b=void 0!==a.stroke?a.stroke:null;this.a=a.radius;this.j=[0,0];this.i=this.u=this.l=null;var b=a.atlasManager,c,d=null,e,f=0;this.b&&(e=nd(this.b.a),f=this.b.c,void 0===f&&(f=1),d=this.b.b,pe||(d=null));var g=2*(this.a+f)+1;e={strokeStyle:e,jb:f,size:g,lineDash:d};if(void 0===b)b=Md(g,g),this.c=b.canvas,c=g=this.c.width,this.Oc(e,b,0,0),this.g?this.h=this.c:(b=Md(e.size,e.size),this.h=b.canvas,this.Nc(e,b,0,0)); + else{g=Math.round(g);(d=!this.g)&&(c=this.Nc.bind(this,e));var f=this.b?qh(this.b):"-",h=this.g?rh(this.g):"-";this.f&&f==this.f[1]&&h==this.f[2]&&this.a==this.f[3]||(this.f=["c"+f+h+(void 0!==this.a?this.a.toString():"-"),f,h,this.a]);b=b.add(this.f[0],g,g,this.Oc.bind(this,e),c);this.c=b.image;this.j=[b.offsetX,b.offsetY];c=b.image.width;d?this.h=b.Nd:this.h=this.c}this.l=[g/2,g/2];this.u=[g,g];this.i=[c,c];oh.call(this,{opacity:1,rotateWithView:!1,rotation:0,scale:1,snapToPixel:void 0!==a.snapToPixel? + a.snapToPixel:!0})}B(ph,oh);n=ph.prototype;n.eb=function(){return this.l};n.ub=function(){return this.h};n.Z=function(){return this.c};n.ib=function(){return 2};n.Ob=function(){return this.i};n.pa=function(){return this.j};n.Ka=function(){return this.u};n.Vb=I;n.load=I;n.bc=I; + n.Oc=function(a,b,c,d){b.setTransform(1,0,0,1,0,0);b.translate(c,d);b.beginPath();b.arc(a.size/2,a.size/2,this.a,0,2*Math.PI,!0);this.g&&(b.fillStyle=qd(this.g.b),b.fill());this.b&&(b.strokeStyle=a.strokeStyle,b.lineWidth=a.jb,a.lineDash&&b.setLineDash(a.lineDash),b.stroke());b.closePath()}; + n.Nc=function(a,b,c,d){b.setTransform(1,0,0,1,0,0);b.translate(c,d);b.beginPath();b.arc(a.size/2,a.size/2,this.a,0,2*Math.PI,!0);b.fillStyle=nd(kh);b.fill();this.b&&(b.strokeStyle=a.strokeStyle,b.lineWidth=a.jb,a.lineDash&&b.setLineDash(a.lineDash),b.stroke());b.closePath()};function sh(a){a=a||{};this.b=void 0!==a.color?a.color:null;this.a=void 0}function rh(a){void 0===a.a&&(a.a=a.b instanceof CanvasPattern||a.b instanceof CanvasGradient?J(a.b).toString():"f"+(a.b?nd(a.b):"-"));return a.a};function th(){this.a=-1};function uh(){this.a=64;this.b=Array(4);this.g=Array(this.a);this.b[0]=1732584193;this.b[1]=4023233417;this.b[2]=2562383102;this.b[3]=271733878;this.f=this.c=0}(function(){function a(){}a.prototype=th.prototype;uh.a=th.prototype;uh.prototype=new a;uh.prototype.constructor=uh;uh.b=function(a,c,d){for(var e=Array(arguments.length-2),f=2;f<arguments.length;f++)e[f-2]=arguments[f];return th.prototype[c].apply(a,e)}})(); + function vh(a,b,c){c||(c=0);var d=Array(16);if("string"==typeof b)for(var e=0;16>e;++e)d[e]=b.charCodeAt(c++)|b.charCodeAt(c++)<<8|b.charCodeAt(c++)<<16|b.charCodeAt(c++)<<24;else for(e=0;16>e;++e)d[e]=b[c++]|b[c++]<<8|b[c++]<<16|b[c++]<<24;b=a.b[0];c=a.b[1];var e=a.b[2],f=a.b[3],g;g=b+(f^c&(e^f))+d[0]+3614090360&4294967295;b=c+(g<<7&4294967295|g>>>25);g=f+(e^b&(c^e))+d[1]+3905402710&4294967295;f=b+(g<<12&4294967295|g>>>20);g=e+(c^f&(b^c))+d[2]+606105819&4294967295;e=f+(g<<17&4294967295|g>>>15);g= + c+(b^e&(f^b))+d[3]+3250441966&4294967295;c=e+(g<<22&4294967295|g>>>10);g=b+(f^c&(e^f))+d[4]+4118548399&4294967295;b=c+(g<<7&4294967295|g>>>25);g=f+(e^b&(c^e))+d[5]+1200080426&4294967295;f=b+(g<<12&4294967295|g>>>20);g=e+(c^f&(b^c))+d[6]+2821735955&4294967295;e=f+(g<<17&4294967295|g>>>15);g=c+(b^e&(f^b))+d[7]+4249261313&4294967295;c=e+(g<<22&4294967295|g>>>10);g=b+(f^c&(e^f))+d[8]+1770035416&4294967295;b=c+(g<<7&4294967295|g>>>25);g=f+(e^b&(c^e))+d[9]+2336552879&4294967295;f=b+(g<<12&4294967295|g>>> + 20);g=e+(c^f&(b^c))+d[10]+4294925233&4294967295;e=f+(g<<17&4294967295|g>>>15);g=c+(b^e&(f^b))+d[11]+2304563134&4294967295;c=e+(g<<22&4294967295|g>>>10);g=b+(f^c&(e^f))+d[12]+1804603682&4294967295;b=c+(g<<7&4294967295|g>>>25);g=f+(e^b&(c^e))+d[13]+4254626195&4294967295;f=b+(g<<12&4294967295|g>>>20);g=e+(c^f&(b^c))+d[14]+2792965006&4294967295;e=f+(g<<17&4294967295|g>>>15);g=c+(b^e&(f^b))+d[15]+1236535329&4294967295;c=e+(g<<22&4294967295|g>>>10);g=b+(e^f&(c^e))+d[1]+4129170786&4294967295;b=c+(g<<5&4294967295| + g>>>27);g=f+(c^e&(b^c))+d[6]+3225465664&4294967295;f=b+(g<<9&4294967295|g>>>23);g=e+(b^c&(f^b))+d[11]+643717713&4294967295;e=f+(g<<14&4294967295|g>>>18);g=c+(f^b&(e^f))+d[0]+3921069994&4294967295;c=e+(g<<20&4294967295|g>>>12);g=b+(e^f&(c^e))+d[5]+3593408605&4294967295;b=c+(g<<5&4294967295|g>>>27);g=f+(c^e&(b^c))+d[10]+38016083&4294967295;f=b+(g<<9&4294967295|g>>>23);g=e+(b^c&(f^b))+d[15]+3634488961&4294967295;e=f+(g<<14&4294967295|g>>>18);g=c+(f^b&(e^f))+d[4]+3889429448&4294967295;c=e+(g<<20&4294967295| + g>>>12);g=b+(e^f&(c^e))+d[9]+568446438&4294967295;b=c+(g<<5&4294967295|g>>>27);g=f+(c^e&(b^c))+d[14]+3275163606&4294967295;f=b+(g<<9&4294967295|g>>>23);g=e+(b^c&(f^b))+d[3]+4107603335&4294967295;e=f+(g<<14&4294967295|g>>>18);g=c+(f^b&(e^f))+d[8]+1163531501&4294967295;c=e+(g<<20&4294967295|g>>>12);g=b+(e^f&(c^e))+d[13]+2850285829&4294967295;b=c+(g<<5&4294967295|g>>>27);g=f+(c^e&(b^c))+d[2]+4243563512&4294967295;f=b+(g<<9&4294967295|g>>>23);g=e+(b^c&(f^b))+d[7]+1735328473&4294967295;e=f+(g<<14&4294967295| + g>>>18);g=c+(f^b&(e^f))+d[12]+2368359562&4294967295;c=e+(g<<20&4294967295|g>>>12);g=b+(c^e^f)+d[5]+4294588738&4294967295;b=c+(g<<4&4294967295|g>>>28);g=f+(b^c^e)+d[8]+2272392833&4294967295;f=b+(g<<11&4294967295|g>>>21);g=e+(f^b^c)+d[11]+1839030562&4294967295;e=f+(g<<16&4294967295|g>>>16);g=c+(e^f^b)+d[14]+4259657740&4294967295;c=e+(g<<23&4294967295|g>>>9);g=b+(c^e^f)+d[1]+2763975236&4294967295;b=c+(g<<4&4294967295|g>>>28);g=f+(b^c^e)+d[4]+1272893353&4294967295;f=b+(g<<11&4294967295|g>>>21);g=e+(f^ + b^c)+d[7]+4139469664&4294967295;e=f+(g<<16&4294967295|g>>>16);g=c+(e^f^b)+d[10]+3200236656&4294967295;c=e+(g<<23&4294967295|g>>>9);g=b+(c^e^f)+d[13]+681279174&4294967295;b=c+(g<<4&4294967295|g>>>28);g=f+(b^c^e)+d[0]+3936430074&4294967295;f=b+(g<<11&4294967295|g>>>21);g=e+(f^b^c)+d[3]+3572445317&4294967295;e=f+(g<<16&4294967295|g>>>16);g=c+(e^f^b)+d[6]+76029189&4294967295;c=e+(g<<23&4294967295|g>>>9);g=b+(c^e^f)+d[9]+3654602809&4294967295;b=c+(g<<4&4294967295|g>>>28);g=f+(b^c^e)+d[12]+3873151461&4294967295; + f=b+(g<<11&4294967295|g>>>21);g=e+(f^b^c)+d[15]+530742520&4294967295;e=f+(g<<16&4294967295|g>>>16);g=c+(e^f^b)+d[2]+3299628645&4294967295;c=e+(g<<23&4294967295|g>>>9);g=b+(e^(c|~f))+d[0]+4096336452&4294967295;b=c+(g<<6&4294967295|g>>>26);g=f+(c^(b|~e))+d[7]+1126891415&4294967295;f=b+(g<<10&4294967295|g>>>22);g=e+(b^(f|~c))+d[14]+2878612391&4294967295;e=f+(g<<15&4294967295|g>>>17);g=c+(f^(e|~b))+d[5]+4237533241&4294967295;c=e+(g<<21&4294967295|g>>>11);g=b+(e^(c|~f))+d[12]+1700485571&4294967295;b=c+ + (g<<6&4294967295|g>>>26);g=f+(c^(b|~e))+d[3]+2399980690&4294967295;f=b+(g<<10&4294967295|g>>>22);g=e+(b^(f|~c))+d[10]+4293915773&4294967295;e=f+(g<<15&4294967295|g>>>17);g=c+(f^(e|~b))+d[1]+2240044497&4294967295;c=e+(g<<21&4294967295|g>>>11);g=b+(e^(c|~f))+d[8]+1873313359&4294967295;b=c+(g<<6&4294967295|g>>>26);g=f+(c^(b|~e))+d[15]+4264355552&4294967295;f=b+(g<<10&4294967295|g>>>22);g=e+(b^(f|~c))+d[6]+2734768916&4294967295;e=f+(g<<15&4294967295|g>>>17);g=c+(f^(e|~b))+d[13]+1309151649&4294967295; + c=e+(g<<21&4294967295|g>>>11);g=b+(e^(c|~f))+d[4]+4149444226&4294967295;b=c+(g<<6&4294967295|g>>>26);g=f+(c^(b|~e))+d[11]+3174756917&4294967295;f=b+(g<<10&4294967295|g>>>22);g=e+(b^(f|~c))+d[2]+718787259&4294967295;e=f+(g<<15&4294967295|g>>>17);g=c+(f^(e|~b))+d[9]+3951481745&4294967295;a.b[0]=a.b[0]+b&4294967295;a.b[1]=a.b[1]+(e+(g<<21&4294967295|g>>>11))&4294967295;a.b[2]=a.b[2]+e&4294967295;a.b[3]=a.b[3]+f&4294967295} + function wh(a,b){var c;void 0===c&&(c=b.length);for(var d=c-a.a,e=a.g,f=a.c,g=0;g<c;){if(0==f)for(;g<=d;)vh(a,b,g),g+=a.a;if("string"==typeof b)for(;g<c;){if(e[f++]=b.charCodeAt(g++),f==a.a){vh(a,e);f=0;break}}else for(;g<c;)if(e[f++]=b[g++],f==a.a){vh(a,e);f=0;break}}a.c=f;a.f+=c};function xh(a){a=a||{};this.a=void 0!==a.color?a.color:null;this.f=a.lineCap;this.b=void 0!==a.lineDash?a.lineDash:null;this.g=a.lineJoin;this.h=a.miterLimit;this.c=a.width;this.l=void 0} + function qh(a){if(void 0===a.l){var b="s"+(a.a?nd(a.a):"-")+","+(void 0!==a.f?a.f.toString():"-")+","+(a.b?a.b.toString():"-")+","+(void 0!==a.g?a.g:"-")+","+(void 0!==a.h?a.h.toString():"-")+","+(void 0!==a.c?a.c.toString():"-"),c=new uh;wh(c,b);var d=Array((56>c.c?c.a:2*c.a)-c.c);d[0]=128;for(b=1;b<d.length-8;++b)d[b]=0;for(var e=8*c.f,b=d.length-8;b<d.length;++b)d[b]=e&255,e/=256;wh(c,d);d=Array(16);for(b=e=0;4>b;++b)for(var f=0;32>f;f+=8)d[e++]=c.b[b]>>>f&255;if(8192>=d.length)c=String.fromCharCode.apply(null, + d);else for(c="",b=0;b<d.length;b+=8192)c+=String.fromCharCode.apply(null,td(d,b,b+8192));a.l=c}return a.l};function yh(a){a=a||{};this.h=null;this.c=zh;void 0!==a.geometry&&Ah(this,a.geometry);this.g=void 0!==a.fill?a.fill:null;this.l=void 0!==a.image?a.image:null;this.f=void 0!==a.stroke?a.stroke:null;this.a=void 0!==a.text?a.text:null;this.b=a.zIndex}yh.prototype.S=function(){return this.h};yh.prototype.Z=function(){return this.l};function Ah(a,b){"function"===typeof b?a.c=b:"string"===typeof b?a.c=function(a){return a.get(b)}:b?b&&(a.c=function(){return b}):a.c=zh;a.h=b} + function Bh(a){if("function"!==typeof a){var b;Array.isArray(a)?b=a:(L(a instanceof yh,41),b=[a]);a=function(){return b}}return a}var Ch=null;function Dh(){if(!Ch){var a=new sh({color:"rgba(255,255,255,0.4)"}),b=new xh({color:"#3399CC",width:1.25});Ch=[new yh({image:new ph({fill:a,stroke:b,radius:5}),fill:a,stroke:b})]}return Ch} + function Eh(){var a={},b=[255,255,255,1],c=[0,153,255,1];a.Polygon=[new yh({fill:new sh({color:[255,255,255,.5]})})];a.MultiPolygon=a.Polygon;a.LineString=[new yh({stroke:new xh({color:b,width:5})}),new yh({stroke:new xh({color:c,width:3})})];a.MultiLineString=a.LineString;a.Circle=a.Polygon.concat(a.LineString);a.Point=[new yh({image:new ph({radius:6,fill:new sh({color:c}),stroke:new xh({color:b,width:1.5})}),zIndex:Infinity})];a.MultiPoint=a.Point;a.GeometryCollection=a.Polygon.concat(a.LineString, + a.Point);return a}function zh(a){return a.S()};function Y(a){a=a?a:{};var b=pa({},a);delete b.style;delete b.renderBuffer;delete b.updateWhileAnimating;delete b.updateWhileInteracting;xf.call(this,b);this.a=void 0!==a.renderBuffer?a.renderBuffer:100;this.s=null;this.g=void 0;this.v(a.style);this.i=void 0!==a.updateWhileAnimating?a.updateWhileAnimating:!1;this.j=void 0!==a.updateWhileInteracting?a.updateWhileInteracting:!1}B(Y,xf);Y.prototype.v=function(a){this.s=void 0!==a?a:Dh;this.g=null===a?void 0:Bh(this.s);this.w()};function Fh(){};function Gh(a,b,c,d,e){this.f=a;this.v=b;this.l=c;this.u=d;this.Ga=e;this.g=this.b=this.a=this.ha=this.P=this.N=null;this.aa=this.W=this.K=this.M=this.D=this.B=0;this.ba=!1;this.h=this.ra=0;this.ma=!1;this.Y=0;this.c="";this.Ea=this.na=0;this.va=!1;this.j=this.wa=0;this.ca=this.C=this.i=null;this.s=[];this.Fa=Cf()}B(Gh,Fh); + function Hh(a,b,c){if(a.g){b=Xb(b,0,c,2,a.u,a.s);c=a.f;var d=a.Fa,e=c.globalAlpha;1!=a.K&&(c.globalAlpha=e*a.K);var f=a.ra;a.ba&&(f+=a.Ga);var g,h;g=0;for(h=b.length;g<h;g+=2){var k=b[g]-a.B,l=b[g+1]-a.D;a.ma&&(k=Math.round(k),l=Math.round(l));if(0!==f||1!=a.h){var m=k+a.B,p=l+a.D;Lf(d,m,p,a.h,a.h,f,-m,-p);c.setTransform.apply(c,d)}c.drawImage(a.g,a.W,a.aa,a.Y,a.M,k,l,a.Y,a.M)}0===f&&1==a.h||c.setTransform(1,0,0,1,0,0);1!=a.K&&(c.globalAlpha=e)}} + function Ih(a,b,c,d){var e=0;if(a.ca&&""!==a.c){a.i&&Jh(a,a.i);a.C&&Kh(a,a.C);var f=a.ca,g=a.f,h=a.ha;h?(h.font!=f.font&&(h.font=g.font=f.font),h.textAlign!=f.textAlign&&(h.textAlign=g.textAlign=f.textAlign),h.textBaseline!=f.textBaseline&&(h.textBaseline=g.textBaseline=f.textBaseline)):(g.font=f.font,g.textAlign=f.textAlign,g.textBaseline=f.textBaseline,a.ha={font:f.font,textAlign:f.textAlign,textBaseline:f.textBaseline});b=Xb(b,e,c,d,a.u,a.s);f=a.f;g=a.wa;for(a.va&&(g+=a.Ga);e<c;e+=d){var h=b[e]+ + a.na,k=b[e+1]+a.Ea;if(0!==g||1!=a.j){var l=Lf(a.Fa,h,k,a.j,a.j,g,-h,-k);f.setTransform.apply(f,l)}a.C&&f.strokeText(a.c,h,k);a.i&&f.fillText(a.c,h,k)}0===g&&1==a.j||f.setTransform(1,0,0,1,0,0)}}function Lh(a,b,c,d,e,f){var g=a.f;a=Xb(b,c,d,e,a.u,a.s);g.moveTo(a[0],a[1]);b=a.length;f&&(b-=2);for(c=2;c<b;c+=2)g.lineTo(a[c],a[c+1]);f&&g.closePath();return d}function Mh(a,b,c,d,e){var f,g;f=0;for(g=d.length;f<g;++f)c=Lh(a,b,c,d[f],e,!0);return c}n=Gh.prototype; + n.pc=function(a){if(wb(this.l,a.G())){if(this.a||this.b){this.a&&Jh(this,this.a);this.b&&Kh(this,this.b);var b;b=(b=a.o)?Xb(b,0,b.length,a.A,this.u,this.s):null;var c=b[2]-b[0],d=b[3]-b[1],c=Math.sqrt(c*c+d*d),d=this.f;d.beginPath();d.arc(b[0],b[1],c,0,2*Math.PI);this.a&&d.fill();this.b&&d.stroke()}""!==this.c&&Ih(this,a.o.slice(0,a.A),2,2)}};n.cb=function(a){var b=a.o;a=a.A;this.g&&Hh(this,b,b.length);""!==this.c&&Ih(this,b,b.length,a)}; + n.bb=function(a){var b=a.o;a=a.A;this.g&&Hh(this,b,b.length);""!==this.c&&Ih(this,b,b.length,a)};n.qc=function(a){if(wb(this.l,a.G())){if(this.b){Kh(this,this.b);var b=this.f,c=a.o;b.beginPath();Lh(this,c,0,c.length,a.A,!1);b.stroke()}""!==this.c&&(a=Nh(a),Ih(this,a,2,2))}}; + n.rc=function(a){var b=a.G();if(wb(this.l,b)){if(this.b){Kh(this,this.b);var b=this.f,c=a.o,d=0,e=a.ua,f=a.A;b.beginPath();var g,h;g=0;for(h=e.length;g<h;++g)d=Lh(this,c,d,e[g],f,!1);b.stroke()}""!==this.c&&(a=Oh(a),Ih(this,a,a.length,2))}};n.tc=function(a){if(wb(this.l,a.G())){if(this.b||this.a){this.a&&Jh(this,this.a);this.b&&Kh(this,this.b);var b=this.f;b.beginPath();Mh(this,sc(a),0,a.ja,a.A);this.a&&b.fill();this.b&&b.stroke()}""!==this.c&&(a=tc(a),Ih(this,a,2,2))}}; + n.sc=function(a){if(wb(this.l,a.G())){if(this.b||this.a){this.a&&Jh(this,this.a);this.b&&Kh(this,this.b);var b=this.f,c=Ph(a),d=0,e=a.a,f=a.A,g,h;g=0;for(h=e.length;g<h;++g){var k=e[g];b.beginPath();d=Mh(this,c,d,k,f);this.a&&b.fill();this.b&&b.stroke()}}""!==this.c&&(a=Qh(a),Ih(this,a,a.length,2))}};function Jh(a,b){var c=a.f,d=a.N;d?d.fillStyle!=b.fillStyle&&(d.fillStyle=c.fillStyle=b.fillStyle):(c.fillStyle=b.fillStyle,a.N={fillStyle:b.fillStyle})} + function Kh(a,b){var c=a.f,d=a.P;d?(d.lineCap!=b.lineCap&&(d.lineCap=c.lineCap=b.lineCap),pe&&!Ra(d.lineDash,b.lineDash)&&c.setLineDash(d.lineDash=b.lineDash),d.lineJoin!=b.lineJoin&&(d.lineJoin=c.lineJoin=b.lineJoin),d.lineWidth!=b.lineWidth&&(d.lineWidth=c.lineWidth=b.lineWidth),d.miterLimit!=b.miterLimit&&(d.miterLimit=c.miterLimit=b.miterLimit),d.strokeStyle!=b.strokeStyle&&(d.strokeStyle=c.strokeStyle=b.strokeStyle)):(c.lineCap=b.lineCap,pe&&c.setLineDash(b.lineDash),c.lineJoin=b.lineJoin,c.lineWidth= + b.lineWidth,c.miterLimit=b.miterLimit,c.strokeStyle=b.strokeStyle,a.P={lineCap:b.lineCap,lineDash:b.lineDash,lineJoin:b.lineJoin,lineWidth:b.lineWidth,miterLimit:b.miterLimit,strokeStyle:b.strokeStyle})} + n.La=function(a,b){if(a){var c=a.b;this.a={fillStyle:qd(c?c:kh)}}else this.a=null;if(b){var c=b.a,d=b.f,e=b.b,f=b.g,g=b.c,h=b.h;this.b={lineCap:void 0!==d?d:"round",lineDash:e?e:lh,lineJoin:void 0!==f?f:"round",lineWidth:this.v*(void 0!==g?g:1),miterLimit:void 0!==h?h:10,strokeStyle:nd(c?c:mh)}}else this.b=null}; + n.Ma=function(a){if(a){var b=a.eb(),c=a.Z(1),d=a.pa(),e=a.Ka();this.B=b[0];this.D=b[1];this.M=e[1];this.g=c;this.K=a.C;this.W=d[0];this.aa=d[1];this.ba=a.K;this.ra=a.s;this.h=a.v;this.ma=a.B;this.Y=e[0]}else this.g=null}; + n.Ca=function(a){if(a){var b=a.f;b?(b=b.b,this.i={fillStyle:qd(b?b:kh)}):this.i=null;var c=a.i;if(c){var b=c.a,d=c.f,e=c.b,f=c.g,g=c.c,c=c.h;this.C={lineCap:void 0!==d?d:"round",lineDash:e?e:lh,lineJoin:void 0!==f?f:"round",lineWidth:void 0!==g?g:1,miterLimit:void 0!==c?c:10,strokeStyle:nd(b?b:mh)}}else this.C=null;var b=a.b,d=a.a,e=a.c,f=a.g,g=a.h,c=a.l,h=a.j,k=a.C;a=a.K;this.ca={font:void 0!==b?b:"10px sans-serif",textAlign:void 0!==k?k:"center",textBaseline:void 0!==a?a:"middle"};this.c=void 0!== + h?h:"";this.na=void 0!==d?this.v*d:0;this.Ea=void 0!==e?this.v*e:0;this.va=void 0!==f?f:!1;this.wa=void 0!==g?g:0;this.j=this.v*(void 0!==c?c:1)}else this.c=""};function Rh(a){Ia.call(this);this.a=a}B(Rh,Ia);Rh.prototype.fa=I;Rh.prototype.Ec=zb;Rh.prototype.l=function(a,b,c){return function(d,e){return Sh(a,b,d,e,function(a){c[d]||(c[d]={});c[d][a.V.toString()]=a})}};function Th(a){var b=a.a;b.gb()&&"ready"==b.Sb()&&a.w()}function Uh(a,b){b.Mc()&&a.postRenderFunctions.push(function(a,b,e){b=J(a).toString();a.Oa(e.viewState.projection,e.usedTiles[b])}.bind(null,b))}function Vh(a,b){if(b){var c,d,e;d=0;for(e=b.length;d<e;++d)c=b[d],a[J(c).toString()]=c}} + function Wh(a,b){var c=b.D;void 0!==c&&("string"===typeof c?a.logos[c]="":c&&(L("string"==typeof c.href,44),L("string"==typeof c.src,45),a.logos[c.src]=c.href))}function Xh(a,b,c,d){b=J(b).toString();c=c.toString();b in a?c in a[b]?(a=a[b][c],d.H<a.H&&(a.H=d.H),d.I>a.I&&(a.I=d.I),d.J<a.J&&(a.J=d.J),d.L>a.L&&(a.L=d.L)):a[b][c]=d:(a[b]={},a[b][c]=d)}function Yh(a,b,c){return[b*(Math.round(a[0]/b)+c[0]%2/2),b*(Math.round(a[1]/b)+c[1]%2/2)]} + function Zh(a,b,c,d,e,f,g,h,k,l){var m=J(b).toString();m in a.wantedTiles||(a.wantedTiles[m]={});var p=a.wantedTiles[m];a=a.tileQueue;var q=c.minZoom,u,w,r,x,D,t;for(t=g;t>=q;--t)for(w=Rc(c,f,t,w),r=c.O(t),x=w.H;x<=w.I;++x)for(D=w.J;D<=w.L;++D)g-t<=h?(u=$h(b,t,x,D,d,e),0==u.T()&&(p[u.getKey()]=!0,u.getKey()in a.a||a.g([u,m,Vc(c,u.V),r])),void 0!==k&&k.call(l,u)):b.Vc(t,x,D,e)};function ai(a){Rh.call(this,a);this.M=Cf()}B(ai,Rh);function bi(a,b,c){var d=b.pixelRatio,e=b.size[0]*d,f=b.size[1]*d,g=b.viewState.rotation,h=xb(c),k=[c[2],c[3]],l=[c[2],c[1]];c=sb(c);Hf(b.coordinateToPixelTransform,h);Hf(b.coordinateToPixelTransform,k);Hf(b.coordinateToPixelTransform,l);Hf(b.coordinateToPixelTransform,c);a.save();nh(a,-g,e/2,f/2);a.beginPath();a.moveTo(h[0]*d,h[1]*d);a.lineTo(k[0]*d,k[1]*d);a.lineTo(l[0]*d,l[1]*d);a.lineTo(c[0]*d,c[1]*d);a.clip();nh(a,g,e/2,f/2)} + ai.prototype.g=function(a,b,c){ci(this,"precompose",c,a,void 0);var d=this.Z();if(d){var e=b.extent,f=void 0!==e;f&&bi(c,a,e);var e=this.N,g=c.globalAlpha;c.globalAlpha=b.opacity;c.drawImage(d,0,0,+d.width,+d.height,Math.round(e[4]),Math.round(e[5]),Math.round(d.width*e[0]),Math.round(d.height*e[3]));c.globalAlpha=g;f&&c.restore()}ci(this,"postcompose",c,a,void 0)}; + function ci(a,b,c,d,e){var f=a.a;if(Ha(f,b)){var g=d.size[0]*d.pixelRatio,h=d.size[1]*d.pixelRatio,k=d.viewState.rotation;nh(c,-k,g/2,h/2);a=void 0!==e?e:di(a,d,0);U(f,new uf(b,new Gh(c,d.pixelRatio,d.extent,a,d.viewState.rotation),d,c,null));nh(c,k,g/2,h/2)}}function di(a,b,c){var d=b.viewState,e=b.pixelRatio,f=e/d.resolution;return Lf(a.M,e*b.size[0]/2,e*b.size[1]/2,f,-f,-d.rotation,-d.center[0]+c,-d.center[1])};function ei(){};var fi=["Polygon","LineString","Image","Text"];function gi(a,b,c,d){this.ra=a;this.P=b;this.overlaps=d;this.g=null;this.h=0;this.resolution=c;this.ca=this.Y=null;this.a=[];this.coordinates=[];this.W=Cf();this.b=[];this.ha=[];this.aa=Cf();this.ba=Cf()}B(gi,Fh); + function hi(a,b,c,d,e,f){var g=a.coordinates.length,h=a.Nb(),k=[b[c],b[c+1]],l=[NaN,NaN],m=!0,p,q,u;for(p=c+e;p<d;p+=e){l[0]=b[p];l[1]=b[p+1];u=h[1];var w=h[2],r=h[3],x=l[0],D=l[1],t=0;x<h[0]?t|=16:x>w&&(t|=4);D<u?t|=8:D>r&&(t|=2);0===t&&(t=1);u=t;u!==q?(m&&(a.coordinates[g++]=k[0],a.coordinates[g++]=k[1]),a.coordinates[g++]=l[0],a.coordinates[g++]=l[1],m=!1):1===u?(a.coordinates[g++]=l[0],a.coordinates[g++]=l[1],m=!1):m=!0;k[0]=l[0];k[1]=l[1];q=u}p===c+e&&(a.coordinates[g++]=k[0],a.coordinates[g++]= + k[1]);f&&(a.coordinates[g++]=b[c],a.coordinates[g++]=b[c+1]);return g}function ii(a,b){a.Y=[0,b,0];a.a.push(a.Y);a.ca=[0,b,0];a.b.push(a.ca)} + function ji(a,b,c,d,e,f,g,h,k){var l;Ra(d,a.W)?l=a.ha:(l=Xb(a.coordinates,0,a.coordinates.length,2,d,a.ha),Gf(a.W,d));d=!sa(f);var m=0,p=g.length,q,u,w=a.aa,r=a.ba,x,D,t,z,C=0,E=0;for(a=a.a!=g||a.overlaps?0:200;m<p;){var v=g[m],H,G,A,F;switch(v[0]){case 0:q=v[1];d&&f[J(q).toString()]||!q.S()?m=v[2]:void 0===k||wb(k,q.S().G())?++m:m=v[2]+1;break;case 1:C>a&&(b.fill(),C=0);E>a&&(b.stroke(),E=0);C||E||b.beginPath();++m;break;case 2:q=v[1];u=l[q];v=l[q+1];t=l[q+2]-u;q=l[q+3]-v;q=Math.sqrt(t*t+q*q);b.moveTo(u+ + q,v);b.arc(u,v,q,0,2*Math.PI,!0);++m;break;case 3:b.closePath();++m;break;case 4:q=v[1];u=v[2];H=v[3];G=v[4]*c;A=v[5]*c;var Q=v[6],N=v[7],O=v[8],S=v[9];F=v[10];t=v[11];z=v[12];var X=v[13],P=v[14];for(F&&(t+=e);q<u;q+=2){v=l[q]-G;F=l[q+1]-A;X&&(v=Math.round(v),F=Math.round(F));if(1!=z||0!==t){var Ba=v+G,Nb=F+A;Lf(w,Ba,Nb,z,z,t,-Ba,-Nb);b.transform.apply(b,w)}Ba=b.globalAlpha;1!=N&&(b.globalAlpha=Ba*N);var Nb=P+O>H.width?H.width-O:P,Ca=Q+S>H.height?H.height-S:Q;b.drawImage(H,O,S,Nb,Ca,v,F,Nb*c,Ca*c); + 1!=N&&(b.globalAlpha=Ba);if(1!=z||0!==t)Mf(Gf(r,w)),b.transform.apply(b,r)}++m;break;case 5:q=v[1];u=v[2];A=v[3];Q=v[4]*c;N=v[5]*c;t=v[6];z=v[7]*c;H=v[8];G=v[9];for((F=v[10])&&(t+=e);q<u;q+=2){v=l[q]+Q;F=l[q+1]+N;if(1!=z||0!==t)Lf(w,v,F,z,z,t,-v,-F),b.transform.apply(b,w);O=A.split("\n");S=O.length;1<S?(X=Math.round(1.5*b.measureText("M").width),F-=(S-1)/2*X):X=0;for(P=0;P<S;P++)Ba=O[P],G&&b.strokeText(Ba,v,F),H&&b.fillText(Ba,v,F),F+=X;if(1!=z||0!==t)Mf(Gf(r,w)),b.transform.apply(b,r)}++m;break; + case 6:if(void 0!==h&&(q=v[1],q=h(q)))return q;++m;break;case 7:a?C++:b.fill();++m;break;case 8:q=v[1];u=v[2];v=l[q];F=l[q+1];t=v+.5|0;z=F+.5|0;if(t!==x||z!==D)b.moveTo(v,F),x=t,D=z;for(q+=2;q<u;q+=2)if(v=l[q],F=l[q+1],t=v+.5|0,z=F+.5|0,q==u-2||t!==x||z!==D)b.lineTo(v,F),x=t,D=z;++m;break;case 9:C&&(b.fill(),C=0);b.fillStyle=v[1];++m;break;case 10:x=void 0!==v[7]?v[7]:!0;D=v[2];E&&(b.stroke(),E=0);b.strokeStyle=v[1];b.lineWidth=x?D*c:D;b.lineCap=v[3];b.lineJoin=v[4];b.miterLimit=v[5];pe&&b.setLineDash(v[6]); + D=x=NaN;++m;break;case 11:b.font=v[1];b.textAlign=v[2];b.textBaseline=v[3];++m;break;case 12:a?E++:b.stroke();++m;break;default:++m}}C&&b.fill();E&&b.stroke()}gi.prototype.f=function(a,b,c,d,e){ji(this,a,b,c,d,e,this.a,void 0,void 0)};function ki(a){var b=a.b;b.reverse();var c,d=b.length,e,f,g=-1;for(c=0;c<d;++c)if(e=b[c],f=e[0],6==f)g=c;else if(0==f){e[2]=c;e=a.b;for(f=c;g<f;){var h=e[g];e[g]=e[f];e[f]=h;++g;--f}g=-1}} + function li(a,b){a.Y[2]=a.a.length;a.Y=null;a.ca[2]=a.b.length;a.ca=null;var c=[6,b];a.a.push(c);a.b.push(c)}gi.prototype.tb=I;gi.prototype.Nb=function(){return this.P};function mi(a,b,c,d){gi.call(this,a,b,c,d);this.j=this.N=null;this.M=this.D=this.B=this.u=this.v=this.s=this.K=this.C=this.i=this.l=this.c=void 0}B(mi,gi); + mi.prototype.cb=function(a,b){if(this.j){ii(this,b);var c=a.o,d=this.coordinates.length,c=hi(this,c,0,c.length,a.A,!1);this.a.push([4,d,c,this.j,this.c,this.l,this.i,this.C,this.K,this.s,this.v,this.u,this.B,this.D,this.M]);this.b.push([4,d,c,this.N,this.c,this.l,this.i,this.C,this.K,this.s,this.v,this.u,this.B,this.D,this.M]);li(this,b)}}; + mi.prototype.bb=function(a,b){if(this.j){ii(this,b);var c=a.o,d=this.coordinates.length,c=hi(this,c,0,c.length,a.A,!1);this.a.push([4,d,c,this.j,this.c,this.l,this.i,this.C,this.K,this.s,this.v,this.u,this.B,this.D,this.M]);this.b.push([4,d,c,this.N,this.c,this.l,this.i,this.C,this.K,this.s,this.v,this.u,this.B,this.D,this.M]);li(this,b)}};mi.prototype.tb=function(){ki(this);this.l=this.c=void 0;this.j=this.N=null;this.M=this.D=this.u=this.v=this.s=this.K=this.C=this.B=this.i=void 0}; + mi.prototype.Ma=function(a){var b=a.eb(),c=a.Ka(),d=a.ub(1),e=a.Z(1),f=a.pa();this.c=b[0];this.l=b[1];this.N=d;this.j=e;this.i=c[1];this.C=a.C;this.K=f[0];this.s=f[1];this.v=a.K;this.u=a.s;this.B=a.v;this.D=a.B;this.M=c[0]};function ni(a,b,c,d){gi.call(this,a,b,c,d);this.c={ab:void 0,Wa:void 0,Xa:null,Ya:void 0,Za:void 0,$a:void 0,Ub:0,strokeStyle:void 0,lineCap:void 0,lineDash:null,lineJoin:void 0,lineWidth:void 0,miterLimit:void 0}}B(ni,gi); + function oi(a,b,c,d,e){var f=a.coordinates.length;b=hi(a,b,c,d,e,!1);f=[8,f,b];a.a.push(f);a.b.push(f);return d}n=ni.prototype;n.Nb=function(){this.g||(this.g=gb(this.P),0<this.h&&fb(this.g,this.resolution*(this.h+1)/2,this.g));return this.g}; + function pi(a){var b=a.c,c=b.strokeStyle,d=b.lineCap,e=b.lineDash,f=b.lineJoin,g=b.lineWidth,h=b.miterLimit;b.ab==c&&b.Wa==d&&Ra(b.Xa,e)&&b.Ya==f&&b.Za==g&&b.$a==h||(b.Ub!=a.coordinates.length&&(a.a.push([12]),b.Ub=a.coordinates.length),a.a.push([10,c,g,d,f,h,e],[1]),b.ab=c,b.Wa=d,b.Xa=e,b.Ya=f,b.Za=g,b.$a=h)} + n.qc=function(a,b){var c=this.c,d=c.lineWidth;void 0!==c.strokeStyle&&void 0!==d&&(pi(this),ii(this,b),this.b.push([10,c.strokeStyle,c.lineWidth,c.lineCap,c.lineJoin,c.miterLimit,c.lineDash],[1]),c=a.o,oi(this,c,0,c.length,a.A),this.b.push([12]),li(this,b))}; + n.rc=function(a,b){var c=this.c,d=c.lineWidth;if(void 0!==c.strokeStyle&&void 0!==d){pi(this);ii(this,b);this.b.push([10,c.strokeStyle,c.lineWidth,c.lineCap,c.lineJoin,c.miterLimit,c.lineDash],[1]);var c=a.ua,d=a.o,e=a.A,f=0,g,h;g=0;for(h=c.length;g<h;++g)f=oi(this,d,f,c[g],e);this.b.push([12]);li(this,b)}};n.tb=function(){this.c.Ub!=this.coordinates.length&&this.a.push([12]);ki(this);this.c=null}; + n.La=function(a,b){var c=b.a;this.c.strokeStyle=nd(c?c:mh);c=b.f;this.c.lineCap=void 0!==c?c:"round";c=b.b;this.c.lineDash=c?c:lh;c=b.g;this.c.lineJoin=void 0!==c?c:"round";c=b.c;this.c.lineWidth=void 0!==c?c:1;c=b.h;this.c.miterLimit=void 0!==c?c:10;this.c.lineWidth>this.h&&(this.h=this.c.lineWidth,this.g=null)}; + function qi(a,b,c,d){gi.call(this,a,b,c,d);this.c={oc:void 0,ab:void 0,Wa:void 0,Xa:null,Ya:void 0,Za:void 0,$a:void 0,fillStyle:void 0,strokeStyle:void 0,lineCap:void 0,lineDash:null,lineJoin:void 0,lineWidth:void 0,miterLimit:void 0}}B(qi,gi); + function ri(a,b,c,d,e){var f=a.c,g=void 0!==f.fillStyle,f=void 0!=f.strokeStyle,h=d.length;if(!g&&!f)return d[h-1];var k=[1];a.a.push(k);a.b.push(k);for(k=0;k<h;++k){var l=d[k],m=a.coordinates.length;c=hi(a,b,c,l,e,!0);c=[8,m,c];a.a.push(c);a.b.push(c);f&&(c=[3],a.a.push(c),a.b.push(c));c=l}b=[7];a.b.push(b);g&&a.a.push(b);f&&(g=[12],a.a.push(g),a.b.push(g));return c}n=qi.prototype; + n.pc=function(a,b){var c=this.c,d=c.strokeStyle;if(void 0!==c.fillStyle||void 0!==d){si(this);ii(this,b);this.b.push([9,nd(kh)]);void 0!==c.strokeStyle&&this.b.push([10,c.strokeStyle,c.lineWidth,c.lineCap,c.lineJoin,c.miterLimit,c.lineDash]);var e=a.o,d=this.coordinates.length;hi(this,e,0,e.length,a.A,!1);e=[1];d=[2,d];this.a.push(e,d);this.b.push(e,d);d=[7];this.b.push(d);void 0!==c.fillStyle&&this.a.push(d);void 0!==c.strokeStyle&&(c=[12],this.a.push(c),this.b.push(c));li(this,b)}}; + n.tc=function(a,b){var c=this.c,d=c.strokeStyle;if(void 0!==c.fillStyle||void 0!==d)si(this),ii(this,b),this.b.push([9,nd(kh)]),void 0!==c.strokeStyle&&this.b.push([10,c.strokeStyle,c.lineWidth,c.lineCap,c.lineJoin,c.miterLimit,c.lineDash]),c=a.ja,d=sc(a),ri(this,d,0,c,a.A),li(this,b)}; + n.sc=function(a,b){var c=this.c,d=c.strokeStyle;if(void 0!==c.fillStyle||void 0!==d){si(this);ii(this,b);this.b.push([9,nd(kh)]);void 0!==c.strokeStyle&&this.b.push([10,c.strokeStyle,c.lineWidth,c.lineCap,c.lineJoin,c.miterLimit,c.lineDash]);var c=a.a,d=Ph(a),e=a.A,f=0,g,h;g=0;for(h=c.length;g<h;++g)f=ri(this,d,f,c[g],e);li(this,b)}};n.tb=function(){ki(this);this.c=null;var a=this.ra;if(0!==a){var b=this.coordinates,c,d;c=0;for(d=b.length;c<d;++c)b[c]=a*Math.round(b[c]/a)}}; + n.Nb=function(){this.g||(this.g=gb(this.P),0<this.h&&fb(this.g,this.resolution*(this.h+1)/2,this.g));return this.g}; + n.La=function(a,b){var c=this.c;if(a){var d=a.b;c.fillStyle=qd(d?d:kh)}else c.fillStyle=void 0;b?(d=b.a,c.strokeStyle=nd(d?d:mh),d=b.f,c.lineCap=void 0!==d?d:"round",d=b.b,c.lineDash=d?d.slice():lh,d=b.g,c.lineJoin=void 0!==d?d:"round",d=b.c,c.lineWidth=void 0!==d?d:1,d=b.h,c.miterLimit=void 0!==d?d:10,c.lineWidth>this.h&&(this.h=c.lineWidth,this.g=null)):(c.strokeStyle=void 0,c.lineCap=void 0,c.lineDash=null,c.lineJoin=void 0,c.lineWidth=void 0,c.miterLimit=void 0)}; + function si(a){var b=a.c,c=b.fillStyle,d=b.strokeStyle,e=b.lineCap,f=b.lineDash,g=b.lineJoin,h=b.lineWidth,k=b.miterLimit;void 0!==c&&b.oc!=c&&(a.a.push([9,c]),b.oc=b.fillStyle);void 0===d||b.ab==d&&b.Wa==e&&b.Xa==f&&b.Ya==g&&b.Za==h&&b.$a==k||(a.a.push([10,d,h,e,g,k,f]),b.ab=d,b.Wa=e,b.Xa=f,b.Ya=g,b.Za=h,b.$a=k)}function ti(a,b,c,d){gi.call(this,a,b,c,d);this.M=this.D=this.B=null;this.j="";this.K=this.C=0;this.s=void 0;this.u=this.v=0;this.i=this.l=this.c=null}B(ti,gi); + function ui(a,b,c,d,e){if(""!==a.j&&a.i&&(a.c||a.l)){if(a.c){var f=a.c,g=a.B;if(!g||g.fillStyle!=f.fillStyle){var h=[9,f.fillStyle];a.a.push(h);a.b.push(h);g?g.fillStyle=f.fillStyle:a.B={fillStyle:f.fillStyle}}}a.l&&(f=a.l,g=a.D,g&&g.lineCap==f.lineCap&&g.lineDash==f.lineDash&&g.lineJoin==f.lineJoin&&g.lineWidth==f.lineWidth&&g.miterLimit==f.miterLimit&&g.strokeStyle==f.strokeStyle||(h=[10,f.strokeStyle,f.lineWidth,f.lineCap,f.lineJoin,f.miterLimit,f.lineDash,!1],a.a.push(h),a.b.push(h),g?(g.lineCap= + f.lineCap,g.lineDash=f.lineDash,g.lineJoin=f.lineJoin,g.lineWidth=f.lineWidth,g.miterLimit=f.miterLimit,g.strokeStyle=f.strokeStyle):a.D={lineCap:f.lineCap,lineDash:f.lineDash,lineJoin:f.lineJoin,lineWidth:f.lineWidth,miterLimit:f.miterLimit,strokeStyle:f.strokeStyle}));f=a.i;g=a.M;g&&g.font==f.font&&g.textAlign==f.textAlign&&g.textBaseline==f.textBaseline||(h=[11,f.font,f.textAlign,f.textBaseline],a.a.push(h),a.b.push(h),g?(g.font=f.font,g.textAlign=f.textAlign,g.textBaseline=f.textBaseline):a.M= + {font:f.font,textAlign:f.textAlign,textBaseline:f.textBaseline});ii(a,e);f=a.coordinates.length;b=hi(a,b,0,c,d,!1);b=[5,f,b,a.j,a.C,a.K,a.v,a.u,!!a.c,!!a.l,a.s];a.a.push(b);a.b.push(b);li(a,e)}} + ti.prototype.Ca=function(a){if(a){var b=a.f;b?(b=b.b,b=qd(b?b:kh),this.c?this.c.fillStyle=b:this.c={fillStyle:b}):this.c=null;var c=a.i;if(c){var b=c.a,d=c.f,e=c.b,f=c.g,g=c.c,c=c.h,d=void 0!==d?d:"round",e=e?e.slice():lh,f=void 0!==f?f:"round",g=void 0!==g?g:1,c=void 0!==c?c:10,b=nd(b?b:mh);if(this.l){var h=this.l;h.lineCap=d;h.lineDash=e;h.lineJoin=f;h.lineWidth=g;h.miterLimit=c;h.strokeStyle=b}else this.l={lineCap:d,lineDash:e,lineJoin:f,lineWidth:g,miterLimit:c,strokeStyle:b}}else this.l=null; + var k=a.b,b=a.a,d=a.c,e=a.g,g=a.h,c=a.l,f=a.j,h=a.C,l=a.K;a=void 0!==k?k:"10px sans-serif";h=void 0!==h?h:"center";l=void 0!==l?l:"middle";this.i?(k=this.i,k.font=a,k.textAlign=h,k.textBaseline=l):this.i={font:a,textAlign:h,textBaseline:l};this.j=void 0!==f?f:"";this.C=void 0!==b?b:0;this.K=void 0!==d?d:0;this.s=void 0!==e?e:!1;this.v=void 0!==g?g:0;this.u=void 0!==c?c:1}else this.j=""};function vi(a,b,c,d,e){this.K=a;this.g=b;this.j=d;this.C=c;this.h=e;this.a={};this.l=Md(1,1);this.i=Cf()}B(vi,ei); + function wi(a){for(var b in a.a){var c=a.a[b],d;for(d in c)c[d].tb()}}vi.prototype.fa=function(a,b,c,d,e){var f=Lf(this.i,.5,.5,1/b,-1/b,-c,-a[0],-a[1]),g=this.l;g.clearRect(0,0,1,1);var h;void 0!==this.h&&(h=db(),eb(h,a),fb(h,b*this.h,h));return xi(this,g,f,c,d,function(a){if(0<g.getImageData(0,0,1,1).data[3]){if(a=e(a))return a;g.clearRect(0,0,1,1)}},h)}; + vi.prototype.b=function(a,b){var c=void 0!==a?a.toString():"0",d=this.a[c];void 0===d&&(d={},this.a[c]=d);c=d[b];void 0===c&&(c=new yi[b](this.K,this.g,this.C,this.j),d[b]=c);return c};vi.prototype.c=function(){return sa(this.a)}; + vi.prototype.f=function(a,b,c,d,e,f){var g=Object.keys(this.a).map(Number);g.sort(Ma);var h=this.g,k=h[0],l=h[1],m=h[2],h=h[3],k=[k,l,k,h,m,h,m,l];Xb(k,0,8,2,c,k);a.save();a.beginPath();a.moveTo(k[0],k[1]);a.lineTo(k[2],k[3]);a.lineTo(k[4],k[5]);a.lineTo(k[6],k[7]);a.clip();f=f?f:fi;for(var p,q,k=0,l=g.length;k<l;++k)for(p=this.a[g[k].toString()],m=0,h=f.length;m<h;++m)q=p[f[m]],void 0!==q&&q.f(a,b,c,d,e);a.restore()}; + function xi(a,b,c,d,e,f,g){var h=Object.keys(a.a).map(Number);h.sort(function(a,b){return b-a});var k,l,m,p,q;k=0;for(l=h.length;k<l;++k)for(p=a.a[h[k].toString()],m=fi.length-1;0<=m;--m)if(q=p[fi[m]],void 0!==q&&(q=ji(q,b,1,c,d,e,q.b,f,g)))return q}var yi={Image:mi,LineString:ni,Polygon:qi,Text:ti};function zi(a,b){return J(a)-J(b)}function Ai(a,b){var c=.5*a/b;return c*c}function Bi(a,b,c,d,e,f){var g=!1,h,k;if(h=c.Z())k=h.ib(),2==k||3==k?h.bc(e,f):(0==k&&h.load(),h.Vb(e,f),g=!0);if(e=(0,c.c)(b))d=e.Rb(d),(0,Ci[d.$()])(a,d,c,b);return g} + var Ci={Point:function(a,b,c,d){var e=c.Z();if(e){if(2!=e.ib())return;var f=a.b(c.b,"Image");f.Ma(e);f.cb(b,d)}if(e=c.a)a=a.b(c.b,"Text"),a.Ca(e),ui(a,b.o,2,2,d)},LineString:function(a,b,c,d){var e=c.f;if(e){var f=a.b(c.b,"LineString");f.La(null,e);f.qc(b,d)}if(e=c.a)a=a.b(c.b,"Text"),a.Ca(e),ui(a,Nh(b),2,2,d)},Polygon:function(a,b,c,d){var e=c.g,f=c.f;if(e||f){var g=a.b(c.b,"Polygon");g.La(e,f);g.tc(b,d)}if(e=c.a)a=a.b(c.b,"Text"),a.Ca(e),ui(a,tc(b),2,2,d)},MultiPoint:function(a,b,c,d){var e=c.Z(); + if(e){if(2!=e.ib())return;var f=a.b(c.b,"Image");f.Ma(e);f.bb(b,d)}if(e=c.a)a=a.b(c.b,"Text"),a.Ca(e),c=b.o,ui(a,c,c.length,b.A,d)},MultiLineString:function(a,b,c,d){var e=c.f;if(e){var f=a.b(c.b,"LineString");f.La(null,e);f.rc(b,d)}if(e=c.a)a=a.b(c.b,"Text"),a.Ca(e),b=Oh(b),ui(a,b,b.length,2,d)},MultiPolygon:function(a,b,c,d){var e=c.g,f=c.f;if(f||e){var g=a.b(c.b,"Polygon");g.La(e,f);g.sc(b,d)}if(e=c.a)a=a.b(c.b,"Text"),a.Ca(e),b=Qh(b),ui(a,b,b.length,2,d)},GeometryCollection:function(a,b,c,d){b= + b.a;var e,f;e=0;for(f=b.length;e<f;++e)(0,Ci[b[e].$()])(a,b[e],c,d)},Circle:function(a,b,c,d){var e=c.g,f=c.f;if(e||f){var g=a.b(c.b,"Polygon");g.La(e,f);g.pc(b,d)}if(e=c.a)a=a.b(c.b,"Text"),a.Ca(e),ui(a,b.o.slice(0,b.A),2,2,d)}};var Di,Ei=K,Fi=-1<Ei.navigator.userAgent.indexOf("OPR"),Gi=-1<Ei.navigator.userAgent.indexOf("Edge");Di=!(!Ei.navigator.userAgent.match("CriOS")&&null!==Ei.chrome&&void 0!==Ei.chrome&&"Google Inc."===Ei.navigator.vendor&&0==Fi&&0==Gi);function Hi(a,b,c,d){a=c-a;b=d-b;var e=Math.sqrt(a*a+b*b);return[Math.round(c+a/e),Math.round(d+b/e)]} + function Ii(a,b,c,d,e,f,g,h,k,l,m){var p=Md(Math.round(c*a),Math.round(c*b));if(0===k.length)return p.canvas;p.scale(c,c);var q=db();k.forEach(function(a){mb(q,a.extent)});var u=Md(Math.round(c*qb(q)/d),Math.round(c*rb(q)/d)),w=c/d;k.forEach(function(a){u.drawImage(a.image,l,l,a.image.width-2*l,a.image.height-2*l,(a.extent[0]-q[0])*w,-(a.extent[3]-q[3])*w,qb(a.extent)*w,rb(a.extent)*w)});var r=xb(g);h.f.forEach(function(a){var b=a.source,e=a.target,g=b[1][0],h=b[1][1],k=b[2][0],l=b[2][1];a=(e[0][0]- + r[0])/f;var m=-(e[0][1]-r[1])/f,w=(e[1][0]-r[0])/f,A=-(e[1][1]-r[1])/f,F=(e[2][0]-r[0])/f,Q=-(e[2][1]-r[1])/f,e=b[0][0],b=b[0][1],g=g-e,h=h-b,k=k-e,l=l-b;a:{g=[[g,h,0,0,w-a],[k,l,0,0,F-a],[0,0,g,h,A-m],[0,0,k,l,Q-m]];h=g.length;for(k=0;k<h;k++){for(var l=k,N=Math.abs(g[k][k]),O=k+1;O<h;O++){var S=Math.abs(g[O][k]);S>N&&(N=S,l=O)}if(0===N){g=null;break a}N=g[l];g[l]=g[k];g[k]=N;for(l=k+1;l<h;l++)for(N=-g[l][k]/g[k][k],O=k;O<h+1;O++)g[l][O]=k==O?0:g[l][O]+N*g[k][O]}k=Array(h);for(l=h-1;0<=l;l--)for(k[l]= + g[l][h]/g[l][l],N=l-1;0<=N;N--)g[N][h]-=g[N][l]*k[l];g=k}g&&(p.save(),p.beginPath(),Di?(k=(a+w+F)/3,l=(m+A+Q)/3,h=Hi(k,l,a,m),w=Hi(k,l,w,A),F=Hi(k,l,F,Q),p.moveTo(w[0],w[1]),p.lineTo(h[0],h[1]),p.lineTo(F[0],F[1])):(p.moveTo(w,A),p.lineTo(a,m),p.lineTo(F,Q)),p.clip(),p.transform(g[0],g[2],g[1],g[3],a,m),p.translate(q[0]-e,q[3]-b),p.scale(d/c,-d/c),p.drawImage(u.canvas,0,0),p.restore())});m&&(p.save(),p.strokeStyle="black",p.lineWidth=1,h.f.forEach(function(a){var b=a.target;a=(b[0][0]-r[0])/f;var c= + -(b[0][1]-r[1])/f,d=(b[1][0]-r[0])/f,e=-(b[1][1]-r[1])/f,g=(b[2][0]-r[0])/f,b=-(b[2][1]-r[1])/f;p.beginPath();p.moveTo(d,e);p.lineTo(a,c);p.lineTo(g,b);p.closePath();p.stroke()}),p.restore());return p.canvas};function Ji(a,b,c,d,e){this.c=a;this.g=b;var f={},g=Ub(this.g,this.c);this.a=function(a){var b=a[0]+"/"+a[1];f[b]||(f[b]=g(a));return f[b]};this.h=d;this.C=e*e;this.f=[];this.i=!1;this.j=this.c.b&&!!d&&!!this.c.G()&&qb(d)==qb(this.c.G());this.b=this.c.G()?qb(this.c.G()):null;this.l=this.g.G()?qb(this.g.G()):null;a=xb(c);b=[c[2],c[3]];d=[c[2],c[1]];c=sb(c);e=this.a(a);var h=this.a(b),k=this.a(d),l=this.a(c);Ki(this,a,b,d,c,e,h,k,l,10);if(this.i){var m=Infinity;this.f.forEach(function(a){m=Math.min(m, + a.source[0][0],a.source[1][0],a.source[2][0])});this.f.forEach(function(a){if(Math.max(a.source[0][0],a.source[1][0],a.source[2][0])-m>this.b/2){var b=[[a.source[0][0],a.source[0][1]],[a.source[1][0],a.source[1][1]],[a.source[2][0],a.source[2][1]]];b[0][0]-m>this.b/2&&(b[0][0]-=this.b);b[1][0]-m>this.b/2&&(b[1][0]-=this.b);b[2][0]-m>this.b/2&&(b[2][0]-=this.b);Math.max(b[0][0],b[1][0],b[2][0])-Math.min(b[0][0],b[1][0],b[2][0])<this.b/2&&(a.source=b)}},this)}f={}} + function Ki(a,b,c,d,e,f,g,h,k,l){var m=cb([f,g,h,k]),p=a.b?qb(m)/a.b:null,q=a.b,u=a.c.b&&.5<p&&1>p,w=!1;if(0<l){if(a.g.c&&a.l)var r=cb([b,c,d,e]),w=w|.25<qb(r)/a.l;!u&&a.c.c&&p&&(w|=.25<p)}if(w||!a.h||wb(m,a.h)){if(!(w||isFinite(f[0])&&isFinite(f[1])&&isFinite(g[0])&&isFinite(g[1])&&isFinite(h[0])&&isFinite(h[1])&&isFinite(k[0])&&isFinite(k[1])))if(0<l)w=!0;else return;if(0<l&&(w||(m=a.a([(b[0]+d[0])/2,(b[1]+d[1])/2]),q=u?(la(f[0],q)+la(h[0],q))/2-la(m[0],q):(f[0]+h[0])/2-m[0],m=(f[1]+h[1])/2-m[1], + w=q*q+m*m>a.C),w)){Math.abs(b[0]-d[0])<=Math.abs(b[1]-d[1])?(u=[(c[0]+d[0])/2,(c[1]+d[1])/2],q=a.a(u),m=[(e[0]+b[0])/2,(e[1]+b[1])/2],p=a.a(m),Ki(a,b,c,u,m,f,g,q,p,l-1),Ki(a,m,u,d,e,p,q,h,k,l-1)):(u=[(b[0]+c[0])/2,(b[1]+c[1])/2],q=a.a(u),m=[(d[0]+e[0])/2,(d[1]+e[1])/2],p=a.a(m),Ki(a,b,u,m,e,f,q,p,k,l-1),Ki(a,u,c,d,m,q,g,h,p,l-1));return}if(u){if(!a.j)return;a.i=!0}a.f.push({source:[f,h,k],target:[b,d,e]});a.f.push({source:[f,g,h],target:[b,c,d]})}} + function Li(a){var b=db();a.f.forEach(function(a){a=a.source;eb(b,a[0]);eb(b,a[1]);eb(b,a[2])});return b};function Mi(a){ai.call(this,a);this.f=Md();this.c=null;this.j=db();this.s=[0,0,0];this.h=Cf()}B(Mi,ai); + Mi.prototype.g=function(a,b,c){var d=di(this,a,0);ci(this,"precompose",c,a,d);var e=a.pixelRatio,f=a.viewState,g=f.center,h=f.projection,k=f.rotation,l=a.size,m=Math.round(e*l[0]/2),l=Math.round(e*l[1]/2),f=e/f.resolution,p=this.a,q=p.da(),u=e*q.nb(h),w=q.sa(h),p=Ha(p,"render"),r=c,x=1,D,t,z;if(k||p){r=this.f;D=r.canvas;var x=q.pb(e)/e,C=c.canvas.width*x;t=c.canvas.height*x;z=Math.round(Math.sqrt(C*C+t*t));D.width!=z?D.width=D.height=z:r.clearRect(0,0,z,z);D=(z-C)/2/x;t=(z-t)/2/x;f*=x;m=Math.round(x* + (m+D));l=Math.round(x*(l+t))}C=r.globalAlpha;r.globalAlpha=b.opacity;var E=this.c,v,H=q.Qb(h)&&1==b.opacity;H||(E.reverse(),v=[]);var G=b.extent;if(b=void 0!==G){var A=xb(G),F=[G[2],G[3]],Q=[G[2],G[1]],G=sb(G);Hf(a.coordinateToPixelTransform,A);Hf(a.coordinateToPixelTransform,F);Hf(a.coordinateToPixelTransform,Q);Hf(a.coordinateToPixelTransform,G);var N=D||0,O=t||0;r.save();var S=r.canvas.width/2,X=r.canvas.height/2;nh(r,-k,S,X);r.beginPath();r.moveTo(x*(A[0]*e+N),x*(A[1]*e+O));r.lineTo(x*(F[0]*e+ + N),x*(F[1]*e+O));r.lineTo(x*(Q[0]*e+N),x*(Q[1]*e+O));r.lineTo(x*(G[0]*e+N),x*(G[1]*e+O));r.clip();nh(r,k,S,X)}A=0;for(F=E.length;A<F;++A){var Q=E[A],G=Q.V,X=Qc(w,G,this.j),S=G[0],P=sb(Qc(w,Yc(w,g,S,this.s))),G=Math.round(qb(X)*f),N=Math.round(rb(X)*f),O=Math.round((X[0]-P[0])*f/G)*G+m+Math.round((P[0]-g[0])*f),X=Math.round((P[1]-X[3])*f/N)*N+l+Math.round((g[1]-P[1])*f);if(!H){P=[O,X,O+G,X+N];r.save();for(var Ba=0,Nb=v.length;Ba<Nb;++Ba){var Ca=v[Ba];wb(P,Ca)&&(r.beginPath(),r.moveTo(P[0],P[1]),r.lineTo(P[0], + P[3]),r.lineTo(P[2],P[3]),r.lineTo(P[2],P[1]),r.moveTo(Ca[0],Ca[1]),r.lineTo(Ca[2],Ca[1]),r.lineTo(Ca[2],Ca[3]),r.lineTo(Ca[0],Ca[3]),r.closePath(),r.clip())}v.push(P)}S=Ni(q,S,e,h);r.drawImage(Q.Z(),u,u,S[0],S[1],O,X,G,N);H||r.restore()}b&&r.restore();p&&(e=D-m/x+m,h=t-l/x+l,g=Lf(this.h,z/2-e,z/2-h,f,-f,-k,-g[0]+e/f,-g[1]-h/f),ci(this,"render",r,a,g));(k||p)&&c.drawImage(r.canvas,-Math.round(D),-Math.round(t),z/x,z/x);r.globalAlpha=C;ci(this,"postcompose",c,a,d)}; + Mi.prototype.i=function(a,b){function c(a){a=a.T();return 2==a||4==a||3==a&&!u}var d=a.pixelRatio,e=a.viewState,f=e.projection,g=this.a,h=g.da(),k=h.sa(f),l=Xc(k,e.resolution,0),m=k.O(l),p=e.center;m==e.resolution?(p=Yh(p,m,a.size),e=ub(p,m,e.rotation,a.size)):e=a.extent;void 0!==b.extent&&(e=vb(e,b.extent));if(pb(e))return!1;m=Tc(k,e,m);p={};p[l]={};var q=this.l(h,f,p),u=jh(g),w=db(),r=new Gc(0,0,0,0),x,D,t,z;for(t=m.H;t<=m.I;++t)for(z=m.J;z<=m.L;++z)x=$h(h,l,t,z,d,f),!c(x)&&x.b&&(x=x.b),c(x)?p[l][x.V.toString()]= + x:(D=Pc(k,x.V,q,r,w),D||(x=Sc(k,x.V,r,w))&&q(l+1,x));q=Object.keys(p).map(Number);q.sort(Ma);var w=[],C,r=0;for(t=q.length;r<t;++r)for(C in x=q[r],z=p[x],z)x=z[C],2==x.T()&&w.push(x);this.c=w;Xh(a.usedTiles,h,l,m);Zh(a,h,k,d,f,e,l,g.get("preload"));Uh(a,h);Wh(a,h);return!0};function Oi(a){ai.call(this,a);this.c=!1;this.B=-1;this.u=NaN;this.j=db();this.f=this.s=null;this.h=Md()}B(Oi,ai); + Oi.prototype.g=function(a,b,c){var d=a.extent,e=a.pixelRatio,f=b.hb?a.skippedFeatureUids:{},g=a.viewState,h=g.projection,g=g.rotation,k=h.G(),l=this.a.da(),m=di(this,a,0);ci(this,"precompose",c,a,m);var p=b.extent,q=void 0!==p;q&&bi(c,a,p);if((p=this.f)&&!p.c()){var u=0,w=0,r;if(Ha(this.a,"render")){r=c.canvas.width;var x=c.canvas.height;if(g){var D=Math.round(Math.sqrt(r*r+x*x)),u=(D-r)/2,w=(D-x)/2;r=x=D}this.h.canvas.width=r;this.h.canvas.height=x;r=this.h}else r=c;x=r.globalAlpha;r.globalAlpha= + b.opacity;r!=c&&r.translate(u,w);b=a.size[0]*e;D=a.size[1]*e;nh(r,-g,b/2,D/2);p.f(r,e,m,g,f);if(l.i&&h.b&&!hb(k,d)){for(var h=d[0],l=qb(k),t=0;h<k[0];)--t,m=l*t,m=di(this,a,m),p.f(r,e,m,g,f),h+=l;t=0;for(h=d[2];h>k[2];)++t,m=l*t,m=di(this,a,m),p.f(r,e,m,g,f),h-=l;m=di(this,a,0)}nh(r,g,b/2,D/2);r!=c&&(ci(this,"render",r,a,m),c.drawImage(r.canvas,-u,-w),r.translate(-u,-w));r.globalAlpha=x}q&&c.restore();ci(this,"postcompose",c,a,m)}; + Oi.prototype.fa=function(a,b,c,d){if(this.f){var e=this.a,f={};return this.f.fa(a,b.viewState.resolution,b.viewState.rotation,{},function(a){var b=J(a).toString();if(!(b in f))return f[b]=!0,c.call(d,a,e)})}};Oi.prototype.D=function(){Th(this)}; + Oi.prototype.i=function(a){function b(a){var b,d=a.f;d?b=d.call(a,l):(d=c.g)&&(b=d(a,l));if(b){if(b){d=!1;if(Array.isArray(b))for(var e=0,f=b.length;e<f;++e)d=Bi(q,a,b[e],Ai(l,m),this.D,this)||d;else d=Bi(q,a,b,Ai(l,m),this.D,this)||d;a=d}else a=!1;this.c=this.c||a}}var c=this.a,d=c.da();Vh(a.attributions,d.h);Wh(a,d);var e=a.viewHints[0],f=a.viewHints[1],g=c.i,h=c.j;if(!this.c&&!g&&e||!h&&f)return!0;var k=a.extent,h=a.viewState,e=h.projection,l=h.resolution,m=a.pixelRatio,f=c.b,p=c.a,g=c.get("renderOrder"); + void 0===g&&(g=zi);k=fb(k,p*l);p=h.projection.G();d.i&&h.projection.b&&!hb(p,a.extent)&&(a=Math.max(qb(k)/2,qb(p)),k[0]=p[0]-a,k[2]=p[2]+a);if(!this.c&&this.u==l&&this.B==f&&this.s==g&&hb(this.j,k))return!0;this.f=null;this.c=!1;var q=new vi(.5*l/m,k,l,d.u,c.a);Pi(d,k,l,e);if(g){var u=[];Qi(d,k,function(a){u.push(a)},this);u.sort(g);u.forEach(b,this)}else Qi(d,k,b,this);wi(q);this.u=l;this.B=f;this.s=g;this.j=k;this.f=q;return!0};function Ri(a,b){Nf.call(this,0,b);this.f=Md();this.b=this.f.canvas;this.b.style.width="100%";this.b.style.height="100%";this.b.className="ol-unselectable";a.insertBefore(this.b,a.childNodes[0]||null);this.a=!0;this.h=Cf()}B(Ri,Nf);Ri.prototype.Mb=function(a){return a instanceof W?new Mi(a):a instanceof Y?new Oi(a):null}; + function Si(a,b,c){var d=a.g,e=a.f;if(Ha(d,b)){var f=c.extent,g=c.pixelRatio,h=c.viewState.rotation,k=c.viewState,l=c.pixelRatio/k.resolution;a=Lf(a.h,a.b.width/2,a.b.height/2,l,-l,-k.rotation,-k.center[0],-k.center[1]);U(d,new uf(b,new Gh(e,g,f,a,h),c,e,null))}}Ri.prototype.$=function(){return"canvas"}; + Ri.prototype.vb=function(a){if(a){var b=this.f,c=a.pixelRatio,d=Math.round(a.size[0]*c),c=Math.round(a.size[1]*c);this.b.width!=d||this.b.height!=c?(this.b.width=d,this.b.height=c):b.clearRect(0,0,d,c);var e=a.viewState.rotation;Of(a);Si(this,"precompose",a);var f=a.layerStatesArray;Sa(f);nh(b,e,d/2,c/2);var g=a.viewState.resolution,h,k,l,m;h=0;for(k=f.length;h<k;++h)m=f[h],l=m.layer,l=Qf(this,l),yf(m,g)&&"ready"==m.ac&&l.i(a,m)&&l.g(a,m,b);nh(b,-e,d/2,c/2);Si(this,"postcompose",a);this.a||(this.b.style.display= + "",this.a=!0);Rf(this,a);a.postRenderFunctions.push(Pf)}else this.a&&(this.b.style.display="none",this.a=!1)};function Ti(a,b){Rh.call(this,a);this.target=b}B(Ti,Rh);Ti.prototype.Jb=I;Ti.prototype.Gc=I;function Ui(a){var b=document.createElement("DIV");b.style.position="absolute";Ti.call(this,a,b);this.f=!0;this.h=1;this.g=0;this.c={}}B(Ui,Ti);Ui.prototype.Jb=function(){for(var a=this.target;a.lastChild;)a.removeChild(a.lastChild);this.g=0}; + Ui.prototype.Hc=function(a,b){if(!b.visible)return this.f&&(this.target.style.display="none",this.f=!1),!0;var c=a.pixelRatio,d=a.viewState,e=d.projection,f=this.a,g=f.da(),h=g.sa(e),k=c*g.nb(e),l=Xc(h,d.resolution),m=h.O(l),p=d.center,q;m==d.resolution?(p=Yh(p,m,a.size),q=ub(p,m,d.rotation,a.size)):q=a.extent;void 0!==b.extent&&(q=vb(q,b.extent));var m=Tc(h,q,m),u={};u[l]={};var w=this.l(g,e,u),r=jh(f),x=db(),D=new Gc(0,0,0,0),t,z,C,E;for(C=m.H;C<=m.I;++C)for(E=m.J;E<=m.L;++E)t=$h(g,l,C,E,c,e),z= + t.T(),z=2==z||4==z||3==z&&!r,!z&&t.b&&(t=t.b),z=t.T(),2==z?u[l][t.V.toString()]=t:4==z||3==z&&!r||(z=Pc(h,t.V,w,D,x),z||(t=Sc(h,t.V,D,x))&&w(l+1,t));var v;if(this.g!=g.b){for(v in this.c)r=this.c[+v],Sd(r.target);this.c={};this.g=g.b}x=Object.keys(u).map(Number);x.sort(Ma);var w={},H;C=0;for(E=x.length;C<E;++C){v=x[C];v in this.c?r=this.c[v]:(r=Yc(h,p,v),r=new Vi(h,r),w[v]=!0,this.c[v]=r);v=u[v];for(H in v){t=r;z=v[H];var G=k,A=z.V,F=A[0],Q=A[1],N=A[2],A=A.toString();if(!(A in t.a)){var F=Lc(Wc(t.g, + F),t.i),O=z.Z(t),S=O.style;S.maxWidth="none";var X,P;0<G?(X=document.createElement("DIV"),P=X.style,P.overflow="hidden",P.width=F[0]+"px",P.height=F[1]+"px",S.position="absolute",S.left=-G+"px",S.top=-G+"px",S.width=F[0]+2*G+"px",S.height=F[1]+2*G+"px",X.appendChild(O)):(S.width=F[0]+"px",S.height=F[1]+"px",X=O,P=S);P.position="absolute";P.left=(Q-t.c[1])*F[0]+"px";P.top=(t.c[2]-N)*F[1]+"px";t.b||(t.b=document.createDocumentFragment());t.b.appendChild(X);t.a[A]=z}}r.b&&(r.target.appendChild(r.b), + r.b=null)}k=Object.keys(this.c).map(Number);k.sort(Ma);C=Cf();H=0;for(x=k.length;H<x;++H)if(v=k[H],r=this.c[v],v in u)if(t=r.O(),E=r.pa(),Lf(C,a.size[0]/2,a.size[1]/2,t/d.resolution,t/d.resolution,d.rotation,(E[0]-p[0])/t,(p[1]-E[1])/t),r.setTransform(C),v in w){for(--v;0<=v;--v)if(v in this.c){this.c[v].target.parentNode&&this.c[v].target.parentNode.insertBefore(r.target,this.c[v].target.nextSibling);break}0>v&&this.target.insertBefore(r.target,this.target.childNodes[0]||null)}else{if(!a.viewHints[0]&& + !a.viewHints[1]){z=Rc(r.g,q,r.c[0],D);v=[];t=void 0;for(t in r.a)E=r.a[t],G=E.V,Hc(z,G[1],G[2])||v.push(E);z=0;for(G=v.length;z<G;++z)E=v[z],t=E.V.toString(),Sd(E.Z(r)),delete r.a[t]}}else Sd(r.target),delete this.c[v];b.opacity!=this.h&&(this.h=this.target.style.opacity=b.opacity);b.visible&&!this.f&&(this.target.style.display="",this.f=!0);Xh(a.usedTiles,g,l,m);Zh(a,g,h,c,e,q,l,f.get("preload"));Uh(a,g);Wh(a,g);return!0}; + function Vi(a,b){this.target=document.createElement("DIV");this.target.style.position="absolute";this.target.style.width="100%";this.target.style.height="100%";this.g=a;this.c=b;this.h=xb(Qc(a,b));this.l=a.O(b[0]);this.a={};this.b=null;this.f=Cf();this.i=[0,0]}Vi.prototype.pa=function(){return this.h};Vi.prototype.O=function(){return this.l};Vi.prototype.setTransform=function(a){Ra(a,this.f)||(Qd(this.target,a),Gf(this.f,a))};function Wi(a){this.g=Md();var b=this.g.canvas;b.style.maxWidth="none";b.style.position="absolute";Ti.call(this,a,b);this.c=!1;this.h=-1;this.s=NaN;this.i=db();this.f=this.j=null;this.B=Cf();this.u=Cf()}B(Wi,Ti);n=Wi.prototype;n.Jb=function(){var a=this.g.canvas;a.width=a.width;this.h=0}; + n.Gc=function(a,b){var c=a.viewState,d=c.center,e=c.rotation,f=c.resolution,c=a.pixelRatio,g=a.size[0],h=a.size[1],k=g*c,l=h*c,d=Lf(this.B,c*g/2,c*h/2,c/f,-c/f,-e,-d[0],-d[1]),f=this.g;f.canvas.width=k;f.canvas.height=l;var m=Df(this.u);Jf(m,1/c,1/c);Kf(m,-(k-g)/2*c,-(l-h)/2*c);Qd(f.canvas,m);Xi(this,"precompose",a,d);(g=this.f)&&!g.c()&&(f.globalAlpha=b.opacity,g.f(f,c,d,e,b.hb?a.skippedFeatureUids:{}),Xi(this,"render",a,d));Xi(this,"postcompose",a,d)}; + function Xi(a,b,c,d){var e=a.g;a=a.a;Ha(a,b)&&U(a,new uf(b,new Gh(e,c.pixelRatio,c.extent,d,c.viewState.rotation),c,e,null))}n.fa=function(a,b,c,d){if(this.f){var e=this.a,f={};return this.f.fa(a,b.viewState.resolution,b.viewState.rotation,{},function(a){var b=J(a).toString();if(!(b in f))return f[b]=!0,c.call(d,a,e)})}};n.Ic=function(){Th(this)}; + n.Hc=function(a){function b(a){var b,d=a.f;d?b=d.call(a,k):(d=c.g)&&(b=d(a,k));if(b){if(b){d=!1;if(Array.isArray(b))for(var e=0,f=b.length;e<f;++e)d=Bi(m,a,b[e],Ai(k,l),this.Ic,this)||d;else d=Bi(m,a,b,Ai(k,l),this.Ic,this)||d;a=d}else a=!1;this.c=this.c||a}}var c=this.a,d=c.da();Vh(a.attributions,d.h);Wh(a,d);var e=a.viewHints[0],f=a.viewHints[1],g=c.i,h=c.j;if(!this.c&&!g&&e||!h&&f)return!0;var f=a.extent,g=a.viewState,e=g.projection,k=g.resolution,l=a.pixelRatio;a=c.b;h=c.a;g=c.get("renderOrder"); + void 0===g&&(g=zi);f=fb(f,h*k);if(!this.c&&this.s==k&&this.h==a&&this.j==g&&hb(this.i,f))return!0;this.f=null;this.c=!1;var m=new vi(.5*k/l,f,k,d.u,c.a);Pi(d,f,k,e);if(g){var p=[];Qi(d,f,function(a){p.push(a)},this);p.sort(g);p.forEach(b,this)}else Qi(d,f,b,this);wi(m);this.s=k;this.h=a;this.j=g;this.i=f;this.f=m;return!0};function Yi(a,b){Nf.call(this,0,b);this.f=Md();var c=this.f.canvas;c.style.position="absolute";c.style.width="100%";c.style.height="100%";c.className="ol-unselectable";a.insertBefore(c,a.childNodes[0]||null);this.h=Cf();this.b=document.createElement("DIV");this.b.className="ol-unselectable";c=this.b.style;c.position="absolute";c.width="100%";c.height="100%";R(this.b,"touchstart",Fa);a.insertBefore(this.b,a.childNodes[0]||null);this.a=!0}B(Yi,Nf);Yi.prototype.R=function(){Sd(this.b);Nf.prototype.R.call(this)}; + Yi.prototype.Mb=function(a){if(a instanceof W)a=new Ui(a);else if(a instanceof Y)a=new Wi(a);else return null;return a};function Zi(a,b,c){var d=a.g;if(Ha(d,b)){var e=c.extent,f=c.pixelRatio,g=c.viewState,h=g.rotation,k=a.f,l=k.canvas;a=Lf(a.h,l.width/2,l.height/2,f/g.resolution,-f/g.resolution,-h,-g.center[0],-g.center[1]);U(d,new uf(b,new Gh(k,f,e,a,h),c,k,null))}}Yi.prototype.$=function(){return"dom"}; + Yi.prototype.vb=function(a){if(a){var b=this.g;if(Ha(b,"precompose")||Ha(b,"postcompose")){var b=this.f.canvas,c=a.pixelRatio;b.width=a.size[0]*c;b.height=a.size[1]*c}Zi(this,"precompose",a);b=a.layerStatesArray;Sa(b);var c=a.viewState.resolution,d,e,f,g;d=0;for(e=b.length;d<e;++d)g=b[d],f=g.layer,f=Qf(this,f),this.b.insertBefore(f.target,this.b.childNodes[d]||null),yf(g,c)&&"ready"==g.ac?f.Hc(a,g)&&f.Gc(a,g):f.Jb();var b=a.layerStates,h;for(h in this.c)h in b||(f=this.c[h],Sd(f.target));this.a|| + (this.b.style.display="",this.a=!0);Of(a);Rf(this,a);a.postRenderFunctions.push(Pf);Zi(this,"postcompose",a)}else this.a&&(this.b.style.display="none",this.a=!1)};function $i(a){this.b=a};function aj(a){this.b=a}B(aj,$i);aj.prototype.$=function(){return 35632};function bj(a){this.b=a}B(bj,$i);bj.prototype.$=function(){return 35633};function cj(){this.b="precision mediump float;varying vec2 a;varying float b;uniform float k;uniform sampler2D l;void main(void){vec4 texColor=texture2D(l,a);gl_FragColor.rgb=texColor.rgb;float alpha=texColor.a*b*k;if(alpha==0.0){discard;}gl_FragColor.a=alpha;}"}B(cj,aj);var dj=new cj; + function ej(){this.b="varying vec2 a;varying float b;attribute vec2 c;attribute vec2 d;attribute vec2 e;attribute float f;attribute float g;uniform mat4 h;uniform mat4 i;uniform mat4 j;void main(void){mat4 offsetMatrix=i;if(g==1.0){offsetMatrix=i*j;}vec4 offsets=offsetMatrix*vec4(e,0.,0.);gl_Position=h*vec4(c,0.,1.)+offsets;a=d;b=f;}"}B(ej,bj);var fj=new ej; + function gj(a,b){this.i=a.getUniformLocation(b,"j");this.j=a.getUniformLocation(b,"i");this.h=a.getUniformLocation(b,"k");this.l=a.getUniformLocation(b,"h");this.b=a.getAttribLocation(b,"e");this.a=a.getAttribLocation(b,"f");this.f=a.getAttribLocation(b,"c");this.c=a.getAttribLocation(b,"g");this.g=a.getAttribLocation(b,"d")};function hj(a){this.b=void 0!==a?a:[];this.a=ij}var ij=35044;function jj(a,b){this.C=a;this.b=b;this.a={};this.g={};this.f={};this.i=this.j=this.h=this.l=null;(this.c=0<=fa.indexOf("OES_element_index_uint"))&&b.getExtension("OES_element_index_uint");R(this.C,"webglcontextlost",this.K,this);R(this.C,"webglcontextrestored",this.s,this)}B(jj,Aa); + function kj(a,b,c){var d=a.b,e=c.b,f=String(J(c));if(f in a.a)d.bindBuffer(b,a.a[f].buffer);else{var g=d.createBuffer();d.bindBuffer(b,g);var h;34962==b?h=new Float32Array(e):34963==b&&(h=a.c?new Uint32Array(e):new Uint16Array(e));d.bufferData(b,h,c.a);a.a[f]={Qe:c,buffer:g}}}function lj(a,b){var c=a.b,d=String(J(b)),e=a.a[d];c.isContextLost()||c.deleteBuffer(e.buffer);delete a.a[d]} + jj.prototype.R=function(){za(this.C);var a=this.b;if(!a.isContextLost()){for(var b in this.a)a.deleteBuffer(this.a[b].buffer);for(b in this.f)a.deleteProgram(this.f[b]);for(b in this.g)a.deleteShader(this.g[b]);a.deleteFramebuffer(this.h);a.deleteRenderbuffer(this.i);a.deleteTexture(this.j)}}; + function mj(a){if(!a.h){var b=a.b,c=b.createFramebuffer();b.bindFramebuffer(b.FRAMEBUFFER,c);var d=nj(b,1,1),e=b.createRenderbuffer();b.bindRenderbuffer(b.RENDERBUFFER,e);b.renderbufferStorage(b.RENDERBUFFER,b.DEPTH_COMPONENT16,1,1);b.framebufferTexture2D(b.FRAMEBUFFER,b.COLOR_ATTACHMENT0,b.TEXTURE_2D,d,0);b.framebufferRenderbuffer(b.FRAMEBUFFER,b.DEPTH_ATTACHMENT,b.RENDERBUFFER,e);b.bindTexture(b.TEXTURE_2D,null);b.bindRenderbuffer(b.RENDERBUFFER,null);b.bindFramebuffer(b.FRAMEBUFFER,null);a.h=c; + a.j=d;a.i=e}return a.h}function oj(a,b){var c=String(J(b));if(c in a.g)return a.g[c];var d=a.b,e=d.createShader(b.$());d.shaderSource(e,b.b);d.compileShader(e);return a.g[c]=e}function pj(a,b,c){var d=J(b)+"/"+J(c);if(d in a.f)return a.f[d];var e=a.b,f=e.createProgram();e.attachShader(f,oj(a,b));e.attachShader(f,oj(a,c));e.linkProgram(f);return a.f[d]=f}jj.prototype.K=function(){qa(this.a);qa(this.g);qa(this.f);this.i=this.j=this.h=this.l=null};jj.prototype.s=function(){}; + function qj(a,b){if(b==a.l)return!1;a.b.useProgram(b);a.l=b;return!0}function rj(a,b,c){var d=a.createTexture();a.bindTexture(a.TEXTURE_2D,d);a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MAG_FILTER,a.LINEAR);a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MIN_FILTER,a.LINEAR);void 0!==b&&a.texParameteri(3553,10242,b);void 0!==c&&a.texParameteri(3553,10243,c);return d}function nj(a,b,c){var d=rj(a,void 0,void 0);a.texImage2D(a.TEXTURE_2D,0,a.RGBA,b,c,0,a.RGBA,a.UNSIGNED_BYTE,null);return d};function sj(a,b){this.B=this.u=void 0;this.C=tb(b);this.v=[];this.l=[];this.M=void 0;this.h=[];this.g=[];this.ca=this.Y=void 0;this.a=[];this.D=this.j=null;this.N=void 0;this.Ea=Cf();this.va=Cf();this.ha=this.P=void 0;this.wa=Cf();this.ra=Jd();this.ba=this.aa=this.W=void 0;this.na=[];this.i=[];this.b=[];this.s=null;this.c=[];this.K=[];this.ma=void 0}B(sj,Fh); + function tj(a,b){var c=a.s,d=a.j,e=a.na,f=a.i,g=b.b;return function(){if(!g.isContextLost()){var a,k;a=0;for(k=e.length;a<k;++a)g.deleteTexture(e[a]);a=0;for(k=f.length;a<k;++a)g.deleteTexture(f[a])}lj(b,c);lj(b,d)}} + function uj(a,b,c,d){var e=a.u,f=a.B,g=a.M,h=a.Y,k=a.ca,l=a.N,m=a.P,p=a.ha,q=a.W?1:0,u=a.aa,w=a.ba,r=a.ma,x=Math.cos(u),u=Math.sin(u),D=a.a.length,t=a.b.length,z,C,E,v,H,G;for(z=0;z<c;z+=d)H=b[z]-a.C[0],G=b[z+1]-a.C[1],C=t/8,E=-w*e,v=-w*(g-f),a.b[t++]=H,a.b[t++]=G,a.b[t++]=E*x-v*u,a.b[t++]=E*u+v*x,a.b[t++]=m/k,a.b[t++]=(p+g)/h,a.b[t++]=l,a.b[t++]=q,E=w*(r-e),v=-w*(g-f),a.b[t++]=H,a.b[t++]=G,a.b[t++]=E*x-v*u,a.b[t++]=E*u+v*x,a.b[t++]=(m+r)/k,a.b[t++]=(p+g)/h,a.b[t++]=l,a.b[t++]=q,E=w*(r-e),v=w*f,a.b[t++]= + H,a.b[t++]=G,a.b[t++]=E*x-v*u,a.b[t++]=E*u+v*x,a.b[t++]=(m+r)/k,a.b[t++]=p/h,a.b[t++]=l,a.b[t++]=q,E=-w*e,v=w*f,a.b[t++]=H,a.b[t++]=G,a.b[t++]=E*x-v*u,a.b[t++]=E*u+v*x,a.b[t++]=m/k,a.b[t++]=p/h,a.b[t++]=l,a.b[t++]=q,a.a[D++]=C,a.a[D++]=C+1,a.a[D++]=C+2,a.a[D++]=C,a.a[D++]=C+2,a.a[D++]=C+3}sj.prototype.bb=function(a,b){this.c.push(this.a.length);this.K.push(b);var c=a.o;uj(this,c,c.length,a.A)};sj.prototype.cb=function(a,b){this.c.push(this.a.length);this.K.push(b);var c=a.o;uj(this,c,c.length,a.A)}; + function vj(a,b){var c=b.b;a.v.push(a.a.length);a.l.push(a.a.length);a.s=new hj(a.b);kj(b,34962,a.s);a.j=new hj(a.a);kj(b,34963,a.j);var d={};wj(a.na,a.h,d,c);wj(a.i,a.g,d,c);a.u=void 0;a.B=void 0;a.M=void 0;a.h=null;a.g=null;a.Y=void 0;a.ca=void 0;a.a=null;a.N=void 0;a.P=void 0;a.ha=void 0;a.W=void 0;a.aa=void 0;a.ba=void 0;a.b=null;a.ma=void 0} + function wj(a,b,c,d){var e,f,g,h,k=b.length;for(h=0;h<k;++h){f=b[h];g=J(f).toString();if(g in c)e=c[g];else{e=d;var l=rj(e,33071,33071);e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,f);e=l;c[g]=e}a[h]=e}} + sj.prototype.f=function(a,b,c,d,e,f,g,h,k,l,m){f=a.b;kj(a,34962,this.s);kj(a,34963,this.j);var p=pj(a,dj,fj),q;this.D?q=this.D:this.D=q=new gj(f,p);qj(a,p);f.enableVertexAttribArray(q.f);f.vertexAttribPointer(q.f,2,5126,!1,32,0);f.enableVertexAttribArray(q.b);f.vertexAttribPointer(q.b,2,5126,!1,32,8);f.enableVertexAttribArray(q.g);f.vertexAttribPointer(q.g,2,5126,!1,32,16);f.enableVertexAttribArray(q.a);f.vertexAttribPointer(q.a,1,5126,!1,32,24);f.enableVertexAttribArray(q.c);f.vertexAttribPointer(q.c, + 1,5126,!1,32,28);p=Df(this.wa);Jf(p,2/(c*e[0]),2/(c*e[1]));If(p,-d);Kf(p,-(b[0]-this.C[0]),-(b[1]-this.C[1]));b=Df(this.va);Jf(b,2/e[0],2/e[1]);e=Df(this.Ea);0!==d&&If(e,-d);f.uniformMatrix4fv(q.l,!1,Kd(this.ra,p));f.uniformMatrix4fv(q.j,!1,Kd(this.ra,b));f.uniformMatrix4fv(q.i,!1,Kd(this.ra,e));f.uniform1f(q.h,g);var u;if(void 0===k)xj(this,f,a,h,this.na,this.v);else{if(l)a:{d=a.c?5125:5123;a=a.c?4:2;e=this.c.length-1;for(g=this.i.length-1;0<=g;--g)for(f.bindTexture(3553,this.i[g]),l=0<g?this.l[g- + 1]:0,b=this.l[g];0<=e&&this.c[e]>=l;){u=this.c[e];c=this.K[e];p=J(c).toString();if(void 0===h[p]&&c.S()&&(void 0===m||wb(m,c.S().G()))&&(f.clear(f.COLOR_BUFFER_BIT|f.DEPTH_BUFFER_BIT),f.drawElements(4,b-u,d,u*a),b=k(c))){h=b;break a}b=u;e--}h=void 0}else f.clear(f.COLOR_BUFFER_BIT|f.DEPTH_BUFFER_BIT),xj(this,f,a,h,this.i,this.l),h=(h=k(null))?h:void 0;u=h}f.disableVertexAttribArray(q.f);f.disableVertexAttribArray(q.b);f.disableVertexAttribArray(q.g);f.disableVertexAttribArray(q.a);f.disableVertexAttribArray(q.c); + return u};function xj(a,b,c,d,e,f){var g=c.c?5125:5123;c=c.c?4:2;if(sa(d)){var h;a=0;d=e.length;for(h=0;a<d;++a){b.bindTexture(3553,e[a]);var k=f[a];b.drawElements(4,k-h,g,h*c);h=k}}else{h=0;var l,k=0;for(l=e.length;k<l;++k){b.bindTexture(3553,e[k]);for(var m=0<k?f[k-1]:0,p=f[k],q=m;h<a.c.length&&a.c[h]<=p;){var u=J(a.K[h]).toString();void 0!==d[u]?(q!==m&&b.drawElements(4,m-q,g,q*c),m=q=h===a.c.length-1?p:a.c[h+1]):m=h===a.c.length-1?p:a.c[h+1];h++}q!==m&&b.drawElements(4,m-q,g,q*c)}}} + sj.prototype.Ma=function(a){var b=a.eb(),c=a.Z(1),d=a.Ob(),e=a.ub(1),f=a.C,g=a.pa(),h=a.K,k=a.s,l=a.Ka();a=a.v;var m;0===this.h.length?this.h.push(c):(m=this.h[this.h.length-1],J(m)!=J(c)&&(this.v.push(this.a.length),this.h.push(c)));0===this.g.length?this.g.push(e):(m=this.g[this.g.length-1],J(m)!=J(e)&&(this.l.push(this.a.length),this.g.push(e)));this.u=b[0];this.B=b[1];this.M=l[1];this.Y=d[1];this.ca=d[0];this.N=f;this.P=g[0];this.ha=g[1];this.aa=k;this.W=h;this.ba=a;this.ma=l[0]}; + function yj(a,b,c){this.h=b;this.l=a;this.g=c;this.a={}}B(yj,ei);function zj(a,b){var c=[],d;for(d in a.a)c.push(tj(a.a[d],b));return function(){for(var a=c.length,b,d=0;d<a;d++)b=c[d].apply(this,arguments);return b}}function Aj(a,b){for(var c in a.a)vj(a.a[c],b)}yj.prototype.b=function(a,b){var c=this.a[b];void 0===c&&(c=new Bj[b](this.l,this.h),this.a[b]=c);return c};yj.prototype.c=function(){return sa(this.a)}; + yj.prototype.f=function(a,b,c,d,e,f,g,h){var k,l,m;k=0;for(l=fi.length;k<l;++k)m=this.a[fi[k]],void 0!==m&&m.f(a,b,c,d,e,f,g,h,void 0,!1)};function Cj(a,b,c,d,e,f,g,h,k,l,m){var p=Dj,q,u;for(q=fi.length-1;0<=q;--q)if(u=a.a[fi[q]],void 0!==u&&(u=u.f(b,c,d,e,p,f,g,h,k,l,m)))return u} + yj.prototype.fa=function(a,b,c,d,e,f,g,h,k,l){var m=b.b;m.bindFramebuffer(m.FRAMEBUFFER,mj(b));var p;void 0!==this.g&&(p=fb(kb(a),d*this.g));return Cj(this,b,a,d,e,g,h,k,function(a){var b=new Uint8Array(4);m.readPixels(0,0,1,1,m.RGBA,m.UNSIGNED_BYTE,b);if(0<b[3]&&(a=l(a)))return a},!0,p)}; + function Ej(a,b,c,d,e,f,g,h){var k=c.b;k.bindFramebuffer(k.FRAMEBUFFER,mj(c));return void 0!==Cj(a,c,b,d,e,f,g,h,function(){var a=new Uint8Array(4);k.readPixels(0,0,1,1,k.RGBA,k.UNSIGNED_BYTE,a);return 0<a[3]},!1)}var Bj={Image:sj},Dj=[1,1];function Fj(a,b,c,d,e,f,g){this.b=a;this.c=b;this.f=f;this.g=g;this.i=e;this.l=d;this.h=c;this.a=null}B(Fj,Fh);Fj.prototype.cb=function(a,b){var c=this.b,d=(new yj(1,this.f)).b(0,"Image");d.Ma(this.a);d.cb(a,b);vj(d,c);d.f(this.b,this.c,this.h,this.l,this.i,this.g,1,{},void 0,!1);tj(d,c)()};Fj.prototype.bb=function(a,b){var c=this.b,d=(new yj(1,this.f)).b(0,"Image");d.Ma(this.a);d.bb(a,b);vj(d,c);d.f(this.b,this.c,this.h,this.l,this.i,this.g,1,{},void 0,!1);tj(d,c)()}; + Fj.prototype.Ma=function(a){this.a=a};function Gj(){this.b="precision mediump float;varying vec2 a;uniform float f;uniform sampler2D g;void main(void){vec4 texColor=texture2D(g,a);gl_FragColor.rgb=texColor.rgb;gl_FragColor.a=texColor.a*f;}"}B(Gj,aj);var Hj=new Gj;function Ij(){this.b="varying vec2 a;attribute vec2 b;attribute vec2 c;uniform mat4 d;uniform mat4 e;void main(void){gl_Position=e*vec4(b,0.,1.);a=(d*vec4(c,0.,1.)).st;}"}B(Ij,bj);var Jj=new Ij; + function Kj(a,b){this.c=a.getUniformLocation(b,"f");this.f=a.getUniformLocation(b,"e");this.h=a.getUniformLocation(b,"d");this.g=a.getUniformLocation(b,"g");this.b=a.getAttribLocation(b,"b");this.a=a.getAttribLocation(b,"c")};function Lj(a,b){Rh.call(this,b);this.f=a;this.W=new hj([-1,-1,0,0,1,-1,1,0,-1,1,0,1,1,1,1,1]);this.i=this.Da=null;this.j=void 0;this.P=Cf();this.aa=Cf();this.B=Jd();this.s=null}B(Lj,Rh); + function Mj(a,b,c){var d=a.f.f;if(void 0===a.j||a.j!=c){b.postRenderFunctions.push(function(a,b,c){a.isContextLost()||(a.deleteFramebuffer(b),a.deleteTexture(c))}.bind(null,d,a.i,a.Da));b=nj(d,c,c);var e=d.createFramebuffer();d.bindFramebuffer(36160,e);d.framebufferTexture2D(36160,36064,3553,b,0);a.Da=b;a.i=e;a.j=c}else d.bindFramebuffer(36160,a.i)} + Lj.prototype.Jc=function(a,b,c){Nj(this,"precompose",c,a);kj(c,34962,this.W);var d=c.b,e=pj(c,Hj,Jj),f;this.s?f=this.s:this.s=f=new Kj(d,e);qj(c,e)&&(d.enableVertexAttribArray(f.b),d.vertexAttribPointer(f.b,2,5126,!1,16,0),d.enableVertexAttribArray(f.a),d.vertexAttribPointer(f.a,2,5126,!1,16,8),d.uniform1i(f.g,0));d.uniformMatrix4fv(f.h,!1,Kd(this.B,this.P));d.uniformMatrix4fv(f.f,!1,Kd(this.B,this.aa));d.uniform1f(f.c,b.opacity);d.bindTexture(3553,this.Da);d.drawArrays(5,0,4);Nj(this,"postcompose", + c,a)};function Nj(a,b,c,d){a=a.a;if(Ha(a,b)){var e=d.viewState;U(a,new uf(b,new Fj(c,e.center,e.resolution,e.rotation,d.size,d.extent,d.pixelRatio),d,null,c))}}Lj.prototype.v=function(){this.i=this.Da=null;this.j=void 0};function Oj(){this.b="precision mediump float;varying vec2 a;uniform sampler2D e;void main(void){gl_FragColor=texture2D(e,a);}"}B(Oj,aj);var Pj=new Oj;function Qj(){this.b="varying vec2 a;attribute vec2 b;attribute vec2 c;uniform vec4 d;void main(void){gl_Position=vec4(b*d.xy+d.zw,0.,1.);a=c;}"}B(Qj,bj);var Rj=new Qj;function Sj(a,b){this.c=a.getUniformLocation(b,"e");this.f=a.getUniformLocation(b,"d");this.b=a.getAttribLocation(b,"b");this.a=a.getAttribLocation(b,"c")};function Tj(a,b){Lj.call(this,a,b);this.M=Pj;this.ba=Rj;this.c=null;this.D=new hj([0,0,0,1,1,0,1,1,0,1,0,0,1,1,1,0]);this.u=this.g=null;this.h=-1;this.N=[0,0]}B(Tj,Lj);Tj.prototype.R=function(){lj(this.f.getContext(),this.D);Lj.prototype.R.call(this)};Tj.prototype.l=function(a,b,c){var d=this.f;return function(e,f){return Sh(a,b,e,f,function(a){var b=Uj(d.a,a.getKey());b&&(c[e]||(c[e]={}),c[e][a.V.toString()]=a);return b})}};Tj.prototype.v=function(){Lj.prototype.v.call(this);this.c=null}; + Tj.prototype.Kc=function(a,b,c){var d=this.f,e=c.b,f=a.viewState,g=f.projection,h=this.a,k=h.da(),l=k.sa(g),m=Xc(l,f.resolution),p=l.O(m),q=Ni(k,m,a.pixelRatio,g),u=q[0]/Lc(Wc(l,m),this.N)[0],w=p/u,r=a.pixelRatio*k.nb(g),x=f.center,D;p==f.resolution?(x=Yh(x,p,a.size),D=ub(x,p,f.rotation,a.size)):D=a.extent;p=Tc(l,D,p);if(this.g&&Ic(this.g,p)&&this.h==k.b)w=this.u;else{var t=[p.I-p.H+1,p.L-p.J+1],z=ka(Math.max(t[0]*q[0],t[1]*q[1])),t=w*z,C=l.pa(m),E=C[0]+p.H*q[0]*w,w=C[1]+p.J*q[1]*w,w=[E,w,E+t,w+t]; + Mj(this,a,z);e.viewport(0,0,z,z);e.clearColor(0,0,0,0);e.clear(16384);e.disable(3042);z=pj(c,this.M,this.ba);qj(c,z);this.c||(this.c=new Sj(e,z));kj(c,34962,this.D);e.enableVertexAttribArray(this.c.b);e.vertexAttribPointer(this.c.b,2,5126,!1,16,0);e.enableVertexAttribArray(this.c.a);e.vertexAttribPointer(this.c.a,2,5126,!1,16,8);e.uniform1i(this.c.c,0);c={};c[m]={};var v=this.l(k,g,c),H=jh(h),z=!0,E=db(),G=new Gc(0,0,0,0),A,F,Q;for(F=p.H;F<=p.I;++F)for(Q=p.J;Q<=p.L;++Q){C=$h(k,m,F,Q,u,g);if(void 0!== + b.extent&&(A=Qc(l,C.V,E),!wb(A,b.extent)))continue;A=C.T();A=2==A||4==A||3==A&&!H;!A&&C.b&&(C=C.b);A=C.T();if(2==A){if(Uj(d.a,C.getKey())){c[m][C.V.toString()]=C;continue}}else if(4==A||3==A&&!H)continue;z=!1;A=Pc(l,C.V,v,G,E);A||(C=Sc(l,C.V,G,E))&&v(m+1,C)}b=Object.keys(c).map(Number);b.sort(Ma);for(var v=new Float32Array(4),N,H=0,G=b.length;H<G;++H)for(N in F=c[b[H]],F)C=F[N],A=Qc(l,C.V,E),v[0]=2*(A[2]-A[0])/t,v[1]=2*(A[3]-A[1])/t,v[2]=2*(A[0]-w[0])/t-1,v[3]=2*(A[1]-w[1])/t-1,e.uniform4fv(this.c.f, + v),Vj(d,C,q,r*u),e.drawArrays(5,0,4);z?(this.g=p,this.u=w,this.h=k.b):(this.u=this.g=null,this.h=-1,a.animate=!0)}Xh(a.usedTiles,k,m,p);var O=d.l;Zh(a,k,l,u,g,D,m,h.get("preload"),function(a){var b;(b=2!=a.T()||Uj(d.a,a.getKey()))||(b=a.getKey()in O.a);b||O.g([a,Vc(l,a.V),l.O(a.V[0]),q,r*u])},this);Uh(a,k);Wh(a,k);e=this.P;Df(e);Kf(e,(x[0]-w[0])/(w[2]-w[0]),(x[1]-w[1])/(w[3]-w[1]));0!==f.rotation&&If(e,f.rotation);Jf(e,a.size[0]*f.resolution/(w[2]-w[0]),a.size[1]*f.resolution/(w[3]-w[1]));Kf(e,-.5, + -.5);return!0};function Wj(a,b){Lj.call(this,a,b);this.h=!1;this.N=-1;this.M=NaN;this.u=db();this.g=this.c=this.D=null}B(Wj,Lj);n=Wj.prototype;n.Jc=function(a,b,c){this.g=b;var d=a.viewState,e=this.c;e&&!e.c()&&e.f(c,d.center,d.resolution,d.rotation,a.size,a.pixelRatio,b.opacity,b.hb?a.skippedFeatureUids:{})};n.R=function(){var a=this.c;if(a){var b=this.f.getContext();zj(a,b)();this.c=null}Lj.prototype.R.call(this)}; + n.fa=function(a,b,c,d){if(this.c&&this.g){var e=this.f.getContext(),f=b.viewState,g=this.a,h={};return this.c.fa(a,e,f.center,f.resolution,f.rotation,b.size,b.pixelRatio,this.g.opacity,{},function(a){var b=J(a).toString();if(!(b in h))return h[b]=!0,c.call(d,a,g)})}};n.Ec=function(a,b){if(this.c&&this.g){var c=this.f.getContext(),d=b.viewState;return Ej(this.c,a,c,d.resolution,d.rotation,b.pixelRatio,this.g.opacity,b.skippedFeatureUids)}return!1};n.Lc=function(){Th(this)}; + n.Kc=function(a,b,c){function d(a){var b,c=a.f;c?b=c.call(a,l):(c=e.g)&&(b=c(a,l));if(b){if(b){c=!1;if(Array.isArray(b))for(var d=0,f=b.length;d<f;++d)c=Bi(q,a,b[d],Ai(l,m),this.Lc,this)||c;else c=Bi(q,a,b,Ai(l,m),this.Lc,this)||c;a=c}else a=!1;this.h=this.h||a}}var e=this.a;b=e.da();Vh(a.attributions,b.h);Wh(a,b);var f=a.viewHints[0],g=a.viewHints[1],h=e.i,k=e.j;if(!this.h&&!h&&f||!k&&g)return!0;var g=a.extent,h=a.viewState,f=h.projection,l=h.resolution,m=a.pixelRatio,h=e.b,p=e.a,k=e.get("renderOrder"); + void 0===k&&(k=zi);g=fb(g,p*l);if(!this.h&&this.M==l&&this.N==h&&this.D==k&&hb(this.u,g))return!0;this.c&&a.postRenderFunctions.push(zj(this.c,c));this.h=!1;var q=new yj(.5*l/m,g,e.a);Pi(b,g,l,f);if(k){var u=[];Qi(b,g,function(a){u.push(a)},this);u.sort(k);u.forEach(d,this)}else Qi(b,g,d,this);Aj(q,c);this.M=l;this.N=h;this.D=k;this.u=g;this.c=q;return!0};function Xj(){this.f=0;this.c={};this.a=this.b=null}Xj.prototype.clear=function(){this.f=0;this.c={};this.a=this.b=null};function Uj(a,b){return a.c.hasOwnProperty(b)}function Yj(a,b){for(var c=a.b;c;)b.call(void 0,c.Na,c.Ia,a),c=c.ta}Xj.prototype.get=function(a){a=this.c[a];L(void 0!==a,15);if(a===this.a)return a.Na;a===this.b?(this.b=this.b.ta,this.b.Ua=null):(a.ta.Ua=a.Ua,a.Ua.ta=a.ta);a.ta=null;a.Ua=this.a;this.a=this.a.ta=a;return a.Na}; + Xj.prototype.pop=function(){var a=this.b;delete this.c[a.Ia];a.ta&&(a.ta.Ua=null);this.b=a.ta;this.b||(this.a=null);--this.f;return a.Na};function Zj(a,b,c){a.get(b);a.c[b].Na=c}Xj.prototype.set=function(a,b){L(!(a in this.c),16);var c={Ia:a,ta:null,Ua:this.a,Na:b};this.a?this.a.ta=c:this.b=c;this.a=c;this.c[a]=c;++this.f};function ak(a,b){Nf.call(this,0,b);this.b=document.createElement("CANVAS");this.b.style.width="100%";this.b.style.height="100%";this.b.className="ol-unselectable";a.insertBefore(this.b,a.childNodes[0]||null);this.s=this.v=0;this.u=Md();this.i=!0;this.f=ie(this.b,{antialias:!0,depth:!1,failIfMajorPerformanceCaveat:!0,preserveDrawingBuffer:!1,stencil:!0});this.C=new jj(this.b,this.f);R(this.b,"webglcontextlost",this.ge,this);R(this.b,"webglcontextrestored",this.he,this);this.a=new Xj;this.K=null;this.l= + new Uf(function(a){var b=a[1];a=a[2];var e=b[0]-this.K[0],b=b[1]-this.K[1];return 65536*Math.log(a)+Math.sqrt(e*e+b*b)/a}.bind(this),function(a){return a[0].getKey()});this.B=function(){if(0!==this.l.b.length){Yf(this.l);var a=Vf(this.l);Vj(this,a[0],a[3],a[4])}return!1}.bind(this);this.h=0;bk(this)}B(ak,Nf); + function Vj(a,b,c,d){var e=a.f,f=b.getKey();if(Uj(a.a,f))a=a.a.get(f),e.bindTexture(3553,a.Da),9729!=a.yc&&(e.texParameteri(3553,10240,9729),a.yc=9729),9729!=a.zc&&(e.texParameteri(3553,10241,9729),a.zc=9729);else{var g=e.createTexture();e.bindTexture(3553,g);if(0<d){var h=a.u.canvas,k=a.u;a.v!==c[0]||a.s!==c[1]?(h.width=c[0],h.height=c[1],a.v=c[0],a.s=c[1]):k.clearRect(0,0,c[0],c[1]);k.drawImage(b.Z(),d,d,c[0],c[1],0,0,c[0],c[1]);e.texImage2D(3553,0,6408,6408,5121,h)}else e.texImage2D(3553,0,6408, + 6408,5121,b.Z());e.texParameteri(3553,10240,9729);e.texParameteri(3553,10241,9729);e.texParameteri(3553,10242,33071);e.texParameteri(3553,10243,33071);a.a.set(f,{Da:g,yc:9729,zc:9729})}}n=ak.prototype;n.Mb=function(a){return a instanceof W?new Tj(this,a):a instanceof Y?new Wj(this,a):null};function ck(a,b,c){var d=a.g;if(Ha(d,b)){a=a.C;var e=c.viewState;U(d,new uf(b,new Fj(a,e.center,e.resolution,e.rotation,c.size,c.extent,c.pixelRatio),c,null,a))}} + n.R=function(){var a=this.f;a.isContextLost()||Yj(this.a,function(b){b&&a.deleteTexture(b.Da)});Da(this.C);Nf.prototype.R.call(this)};n.ld=function(a,b){for(var c=this.f,d;1024<this.a.f-this.h;){if(d=this.a.b.Na)c.deleteTexture(d.Da);else if(+this.a.b.Ia==b.index)break;else--this.h;this.a.pop()}};n.getContext=function(){return this.C};n.$=function(){return"webgl"};n.ge=function(a){a.preventDefault();this.a.clear();this.h=0;a=this.c;for(var b in a)a[b].v()};n.he=function(){bk(this);this.g.render()}; + function bk(a){a=a.f;a.activeTexture(33984);a.blendFuncSeparate(770,771,1,771);a.disable(2884);a.disable(2929);a.disable(3089);a.disable(2960)} + n.vb=function(a){var b=this.getContext(),c=this.f;if(c.isContextLost())return!1;if(!a)return this.i&&(this.b.style.display="none",this.i=!1),!1;this.K=a.focus;this.a.set((-a.index).toString(),null);++this.h;ck(this,"precompose",a);var d=[],e=a.layerStatesArray;Sa(e);var f=a.viewState.resolution,g,h,k,l;g=0;for(h=e.length;g<h;++g)l=e[g],yf(l,f)&&"ready"==l.ac&&(k=Qf(this,l.layer),k.Kc(a,l,b)&&d.push(l));e=a.size[0]*a.pixelRatio;f=a.size[1]*a.pixelRatio;if(this.b.width!=e||this.b.height!=f)this.b.width= + e,this.b.height=f;c.bindFramebuffer(36160,null);c.clearColor(0,0,0,0);c.clear(16384);c.enable(3042);c.viewport(0,0,this.b.width,this.b.height);g=0;for(h=d.length;g<h;++g)l=d[g],k=Qf(this,l.layer),k.Jc(a,l,b);this.i||(this.b.style.display="",this.i=!0);Of(a);1024<this.a.f-this.h&&a.postRenderFunctions.push(this.ld.bind(this));0!==this.l.b.length&&(a.postRenderFunctions.push(this.B),a.animate=!0);ck(this,"postcompose",a);Rf(this,a);a.postRenderFunctions.push(Pf)}; + n.fa=function(a,b,c,d,e,f){var g;if(this.f.isContextLost())return!1;var h=b.viewState,k=b.layerStatesArray,l;for(l=k.length-1;0<=l;--l){g=k[l];var m=g.layer;if(yf(g,h.resolution)&&e.call(f,m)&&(g=Qf(this,m).fa(a,b,c,d)))return g}};n.Fc=function(a,b,c,d){var e=!1;if(this.f.isContextLost())return!1;var f=b.viewState,g=b.layerStatesArray,h;for(h=g.length-1;0<=h;--h){var k=g[h],l=k.layer;if(yf(k,f.resolution)&&c.call(d,l)&&(e=Qf(this,l).Ec(a,b)))return!0}return e};var dk=["canvas","webgl","dom"]; + function Z(a){V.call(this);var b=ek(a);this.kb=void 0!==a.loadTilesWhileAnimating?a.loadTilesWhileAnimating:!1;this.Ab=void 0!==a.loadTilesWhileInteracting?a.loadTilesWhileInteracting:!1;this.Cb=void 0!==a.pixelRatio?a.pixelRatio:oe;this.Bb=b.logos;this.aa=function(){this.g=void 0;this.ve.call(this,Date.now())}.bind(this);this.Fa=Cf();this.zb=Cf();this.Ga=0;this.c=null;this.va=db();this.u=this.P=null;this.a=document.createElement("DIV");this.a.className="ol-viewport"+(re?" ol-touch":"");this.a.style.position= + "relative";this.a.style.overflow="hidden";this.a.style.width="100%";this.a.style.height="100%";this.a.style.msTouchAction="none";this.a.style.touchAction="none";this.s=document.createElement("DIV");this.s.className="ol-overlaycontainer";this.a.appendChild(this.s);this.j=document.createElement("DIV");this.j.className="ol-overlaycontainer-stopevent";a=["click","dblclick","mousedown","touchstart","mspointerdown",of,"mousewheel","wheel"];for(var c=0,d=a.length;c<d;++c)R(this.j,a[c],Ea);this.a.appendChild(this.j); + this.ma=new ff(this);for(var e in rf)R(this.ma,rf[e],this.wc,this);this.ba=b.keyboardEventTarget;this.i=null;R(this.a,"wheel",this.Sa,this);R(this.a,"mousewheel",this.Sa,this);this.v=b.controls;this.h=b.interactions;this.B=b.overlays;this.Sc={};this.N=new b.xe(this.a,this);this.W=null;this.D=[];this.na=[];this.wa=new Zf(this.qd.bind(this),this.Jd.bind(this));this.Eb={};R(this,La("layergroup"),this.vd,this);R(this,La("view"),this.Kd,this);R(this,La("size"),this.Gd,this);R(this,La("target"),this.Id, + this);this.l(b.values);ed(this.v,function(a){a.setMap(this)},this);R(this.v,hd,function(a){a.element.setMap(this)},this);R(this.v,id,function(a){a.element.setMap(null)},this);ed(this.h,function(a){a.setMap(this)},this);R(this.h,hd,function(a){a.element.setMap(this)},this);R(this.h,id,function(a){a.element.setMap(null)},this);ed(this.B,this.ic,this);R(this.B,hd,function(a){this.ic(a.element)},this);R(this.B,id,function(a){var b=a.element.Pa();void 0!==b&&delete this.Sc[b.toString()];a.element.setMap(null)}, + this)}B(Z,V);n=Z.prototype;n.cd=function(a){this.v.push(a)};n.dd=function(a){this.h.push(a)};n.ed=function(a){fk(this).get("layers").push(a)};n.fd=function(a){this.B.push(a)};n.ic=function(a){var b=a.Pa();void 0!==b&&(this.Sc[b.toString()]=a);a.setMap(this)};n.oa=function(a){this.render();Array.prototype.push.apply(this.D,arguments)}; + n.R=function(){Da(this.ma);Da(this.N);ya(this.a,"wheel",this.Sa,this);ya(this.a,"mousewheel",this.Sa,this);void 0!==this.f&&(K.removeEventListener("resize",this.f,!1),this.f=void 0);this.g&&(K.cancelAnimationFrame(this.g),this.g=void 0);this.set("target",null);V.prototype.R.call(this)};n.od=function(a,b,c,d,e){if(this.c)return a=this.Ba(a),this.N.fa(a,this.c,b,void 0!==c?c:null,void 0!==d?d:yb,void 0!==e?e:null)}; + n.Md=function(a,b,c){if(!this.c)return!1;a=this.Ba(a);return this.N.Fc(a,this.c,void 0!==b?b:yb,void 0!==c?c:null)};n.uc=function(a){var b=this.a.getBoundingClientRect();a=a.changedTouches?a.changedTouches[0]:a;return[a.clientX-b.left,a.clientY-b.top]};n.Wb=function(){return this.get("target")};n.Ra=function(){var a=this.Wb();return void 0!==a?"string"===typeof a?document.getElementById(a):a:null};n.Ba=function(a){var b=this.c;return b?Hf(b.pixelToCoordinateTransform,a.slice()):null}; + function fk(a){return a.get("layergroup")}function ug(a,b){var c=a.c;return c?Hf(c.coordinateToPixelTransform,b.slice(0,2)):null}n.Ta=function(){return this.get("size")};n.U=function(){return this.get("view")};n.qd=function(a,b,c,d){var e=this.c;if(!(e&&b in e.wantedTiles&&e.wantedTiles[b][a.getKey()]))return Infinity;a=c[0]-e.focus[0];c=c[1]-e.focus[1];return 65536*Math.log(d)+Math.sqrt(a*a+c*c)/d};n.Sa=function(a,b){var c=new df(b||a.type,this,a);this.wc(c)}; + n.wc=function(a){if(this.c){this.W=a.coordinate;a.frameState=this.c;var b=this.h.a,c;if(!1!==U(this,a))for(c=b.length-1;0<=c;c--){var d=b[c];if(d.get("active")&&!d.handleEvent(a))break}}}; + n.Fd=function(){var a=this.c,b=this.wa;if(0!==b.b.length){var c=16,d=c;if(a){var e=a.viewHints;e[0]&&(c=this.kb?8:0,d=2);e[1]&&(c=this.Ab?8:0,d=2)}if(b.l<c){Yf(b);for(var e=0,f,g;b.l<c&&e<d&&0<b.b.length;)f=Vf(b)[0],g=f.getKey(),0!==f.T()||g in b.h||(b.h[g]=!0,++b.l,++e,f.load())}}b=this.na;c=0;for(d=b.length;c<d;++c)b[c](this,a);b.length=0};n.Gd=function(){this.render()}; + n.Id=function(){var a;this.Wb()&&(a=this.Ra());if(this.i){for(var b=0,c=this.i.length;b<c;++b)M(this.i[b]);this.i=null}a?(a.appendChild(this.a),a=this.ba?this.ba:a,this.i=[R(a,"keydown",this.Sa,this),R(a,"keypress",this.Sa,this)],this.f||(this.f=this.yb.bind(this),K.addEventListener("resize",this.f,!1))):(Sd(this.a),void 0!==this.f&&(K.removeEventListener("resize",this.f,!1),this.f=void 0));this.yb()};n.Jd=function(){this.render()};n.Ld=function(){this.render()}; + n.Kd=function(){this.P&&(M(this.P),this.P=null);var a=this.U();a&&(this.P=R(a,"propertychange",this.Ld,this));this.render()};n.vd=function(){this.u&&(this.u.forEach(M),this.u=null);var a=fk(this);a&&(this.u=[R(a,"propertychange",this.render,this),R(a,"change",this.render,this)]);this.render()};n.we=function(){this.g&&K.cancelAnimationFrame(this.g);this.aa()};n.render=function(){void 0===this.g&&(this.g=K.requestAnimationFrame(this.aa))};n.se=function(a){return this.h.remove(a)};n.te=function(a){return fk(this).get("layers").remove(a)}; + n.ve=function(a){var b,c,d,e=this.Ta(),f=this.U(),g=db(),h=null;if(b=void 0!==e&&0<e[0]&&0<e[1]&&f)b=!!f.qa()&&void 0!==f.O();if(b){d=this.c?this.c.viewHints:void 0;void 0!==d?(d[0]=f.c[0],d[1]=f.c[1],h=d):h=f.c.slice();var k=fk(this).Pb(),l={};b=0;for(c=k.length;b<c;++b)l[J(k[b].layer)]=k[b];d=f.T();h={animate:!1,attributions:{},coordinateToPixelTransform:this.Fa,extent:g,focus:this.W?this.W:d.center,index:this.Ga++,layerStates:l,layerStatesArray:k,logos:pa({},this.Bb),pixelRatio:this.Cb,pixelToCoordinateTransform:this.zb, + postRenderFunctions:[],size:e,skippedFeatureUids:this.Eb,tileQueue:this.wa,time:a,usedTiles:{},viewState:d,viewHints:h,wantedTiles:{}}}if(h){a=this.D;b=e=0;for(c=a.length;b<c;++b)f=a[b],f(this,h)&&(a[e++]=f);a.length=e;h.extent=ub(d.center,d.resolution,d.rotation,h.size,g)}this.c=h;this.N.vb(h);h&&(h.animate&&this.render(),Array.prototype.push.apply(this.na,h.postRenderFunctions),0!==this.D.length||h.viewHints[0]||h.viewHints[1]||lb(h.extent,this.va)||(U(this,new Td("moveend",this,h)),gb(h.extent, + this.va)));U(this,new Td("postrender",this,h));d=g=this.Fd;this&&(d=ea(g,this));"function"!=ba()||aa.Window&&aa.Window.prototype&&!xd("Edge")&&aa.Window.prototype.setImmediate==aa.setImmediate?(fe||(fe=ge()),fe(d)):aa.setImmediate(d)}; + n.yb=function(){var a=this.Ra();if(a){var b=K.getComputedStyle(a);this.set("size",[a.offsetWidth-parseFloat(b.borderLeftWidth)-parseFloat(b.paddingLeft)-parseFloat(b.paddingRight)-parseFloat(b.borderRightWidth),a.offsetHeight-parseFloat(b.borderTopWidth)-parseFloat(b.paddingTop)-parseFloat(b.paddingBottom)-parseFloat(b.borderBottomWidth)])}else this.set("size",void 0)}; + function ek(a){var b=null;void 0!==a.keyboardEventTarget&&(b="string"===typeof a.keyboardEventTarget?document.getElementById(a.keyboardEventTarget):a.keyboardEventTarget);var c={},d={};if(void 0===a.logo||"boolean"===typeof a.logo&&a.logo)d["data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAHGAAABxgEXwfpGAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAhNQTFRF////AP//AICAgP//AFVVQECA////K1VVSbbbYL/fJ05idsTYJFtbbcjbJllmZszWWMTOIFhoHlNiZszTa9DdUcHNHlNlV8XRIVdiasrUHlZjIVZjaMnVH1RlIFRkH1RkH1ZlasvYasvXVsPQH1VkacnVa8vWIVZjIFRjVMPQa8rXIVVkXsXRsNveIFVkIFZlIVVj3eDeh6GmbMvXH1ZkIFRka8rWbMvXIFVkIFVjIFVkbMvWH1VjbMvWIFVlbcvWIFVla8vVIFVkbMvWbMvVH1VkbMvWIFVlbcvWIFVkbcvVbMvWjNPbIFVkU8LPwMzNIFVkbczWIFVkbsvWbMvXIFVkRnB8bcvW2+TkW8XRIFVkIlZlJVloJlpoKlxrLl9tMmJwOWd0Omh1RXF8TneCT3iDUHiDU8LPVMLPVcLPVcPQVsPPVsPQV8PQWMTQWsTQW8TQXMXSXsXRX4SNX8bSYMfTYcfTYsfTY8jUZcfSZsnUaIqTacrVasrVa8jTa8rWbI2VbMvWbcvWdJObdcvUdszUd8vVeJaee87Yfc3WgJyjhqGnitDYjaarldPZnrK2oNbborW5o9bbo9fbpLa6q9ndrL3ArtndscDDutzfu8fJwN7gwt7gxc/QyuHhy+HizeHi0NfX0+Pj19zb1+Tj2uXk29/e3uLg3+Lh3+bl4uXj4ufl4+fl5Ofl5ufl5ujm5+jmySDnBAAAAFp0Uk5TAAECAgMEBAYHCA0NDg4UGRogIiMmKSssLzU7PkJJT1JTVFliY2hrdHZ3foSFhYeJjY2QkpugqbG1tre5w8zQ09XY3uXn6+zx8vT09vf4+Pj5+fr6/P39/f3+gz7SsAAAAVVJREFUOMtjYKA7EBDnwCPLrObS1BRiLoJLnte6CQy8FLHLCzs2QUG4FjZ5GbcmBDDjxJBXDWxCBrb8aM4zbkIDzpLYnAcE9VXlJSWlZRU13koIeW57mGx5XjoMZEUqwxWYQaQbSzLSkYGfKFSe0QMsX5WbjgY0YS4MBplemI4BdGBW+DQ11eZiymfqQuXZIjqwyadPNoSZ4L+0FVM6e+oGI6g8a9iKNT3o8kVzNkzRg5lgl7p4wyRUL9Yt2jAxVh6mQCogae6GmflI8p0r13VFWTHBQ0rWPW7ahgWVcPm+9cuLoyy4kCJDzCm6d8PSFoh0zvQNC5OjDJhQopPPJqph1doJBUD5tnkbZiUEqaCnB3bTqLTFG1bPn71kw4b+GFdpLElKIzRxxgYgWNYc5SCENVHKeUaltHdXx0dZ8uBI1hJ2UUDgq82CM2MwKeibqAvSO7MCABq0wXEPiqWEAAAAAElFTkSuQmCC"]= + "http://openlayers.org/";else{var e=a.logo;"string"===typeof e?d[e]="":e instanceof HTMLElement?d[J(e).toString()]=e:e&&(L("string"==typeof e.href,44),L("string"==typeof e.src,45),d[e.src]=e.href)}e=a.layers instanceof Xg?a.layers:new Xg({layers:a.layers});c.layergroup=e;c.target=a.target;c.view=void 0!==a.view?a.view:new uc;var e=Nf,f;void 0!==a.renderer?Array.isArray(a.renderer)?f=a.renderer:"string"===typeof a.renderer?f=[a.renderer]:L(!1,46):f=dk;var g,h;g=0;for(h=f.length;g<h;++g){var k=f[g]; + if("canvas"==k){if(qe){e=Ri;break}}else if("dom"==k){e=Yi;break}else if("webgl"==k&&je){e=ak;break}}void 0!==a.controls?Array.isArray(a.controls)?f=new cd(a.controls.slice()):(L(a.controls instanceof cd,47),f=a.controls):f=ee();if(void 0!==a.interactions)Array.isArray(a.interactions)?g=new cd(a.interactions.slice()):(L(a.interactions instanceof cd,48),g=a.interactions);else{g={};h=new cd;k=new $f;(void 0!==g.altShiftDragRotate?g.altShiftDragRotate:1)&&h.push(new vg);(void 0!==g.doubleClickZoom?g.doubleClickZoom: + 1)&&h.push(new fg({delta:g.zoomDelta,duration:g.zoomDuration}));(void 0!==g.dragPan?g.dragPan:1)&&h.push(new qg({kinetic:k}));(void 0!==g.pinchRotate?g.pinchRotate:1)&&h.push(new Pg);(void 0!==g.pinchZoom?g.pinchZoom:1)&&h.push(new Tg({duration:g.zoomDuration}));if(void 0!==g.keyboard?g.keyboard:1)h.push(new Jg),h.push(new Lg({delta:g.zoomDelta,duration:g.zoomDuration}));(void 0!==g.mouseWheelZoom?g.mouseWheelZoom:1)&&h.push(new Ng({duration:g.zoomDuration}));(void 0!==g.shiftDragZoom?g.shiftDragZoom: + 1)&&h.push(new Ig({duration:g.zoomDuration}));g=h}void 0!==a.overlays?Array.isArray(a.overlays)?a=new cd(a.overlays.slice()):(L(a.overlays instanceof cd,49),a=a.overlays):a=new cd;return{controls:f,interactions:g,keyboardEventTarget:b,logos:d,overlays:a,xe:e,values:c}}Ib(bh);Ib(ih);ih.forEach(function(a){bh.forEach(function(b){Jb(a,b,ch);Jb(b,a,dh)})});function gk(a){V.call(this);this.j=a.id;this.i=void 0!==a.insertFirst?a.insertFirst:!0;this.s=void 0!==a.stopEvent?a.stopEvent:!0;this.c=document.createElement("DIV");this.c.className="ol-overlay-container";this.c.style.position="absolute";this.autoPan=void 0!==a.autoPan?a.autoPan:!1;this.g=void 0!==a.autoPanAnimation?a.autoPanAnimation:{};this.h=void 0!==a.autoPanMargin?a.autoPanMargin:20;this.a={lb:"",sb:"",wb:"",xb:"",visible:!0};this.f=null;R(this,La("element"),this.td,this);R(this,La("map"), + this.Ad,this);R(this,La("offset"),this.Bd,this);R(this,La("position"),this.Dd,this);R(this,La("positioning"),this.Ed,this);void 0!==a.element&&this.set("element",a.element);this.set("offset",void 0!==a.offset?a.offset:[0,0]);this.set("positioning",void 0!==a.positioning?a.positioning:"top-left");void 0!==a.position&&this.Ac(a.position)}B(gk,V);n=gk.prototype;n.Pa=function(){return this.j};n.td=function(){for(var a=this.c;a.lastChild;)a.removeChild(a.lastChild);(a=this.get("element"))&&this.c.appendChild(a)}; + n.Ad=function(){this.f&&(Sd(this.c),M(this.f),this.f=null);var a=this.get("map");a&&(this.f=R(a,"postrender",this.render,this),hk(this),a=this.s?a.j:a.s,this.i?a.insertBefore(this.c,a.childNodes[0]||null):a.appendChild(this.c))};n.render=function(){hk(this)};n.Bd=function(){hk(this)}; + n.Dd=function(){hk(this);if(void 0!==this.get("position")&&this.autoPan){var a=this.get("map");if(void 0!==a&&a.Ra()){var b=ik(a.Ra(),a.Ta()),c=this.get("element"),d=c.offsetWidth,e=c.currentStyle||K.getComputedStyle(c),d=d+(parseInt(e.marginLeft,10)+parseInt(e.marginRight,10)),e=c.offsetHeight,f=c.currentStyle||K.getComputedStyle(c),e=e+(parseInt(f.marginTop,10)+parseInt(f.marginBottom,10)),g=ik(c,[d,e]),c=this.h;hb(b,g)||(d=g[0]-b[0],e=b[2]-g[2],f=g[1]-b[1],g=b[3]-g[3],b=[0,0],0>d?b[0]=d-c:0>e&& + (b[0]=Math.abs(e)+c),0>f?b[1]=f-c:0>g&&(b[1]=Math.abs(g)+c),0===b[0]&&0===b[1])||(c=a.U().qa(),d=ug(a,c),b=[d[0]+b[0],d[1]+b[1]],this.g&&(this.g.source=c,a.oa(Dc(this.g))),a.U().xa(a.Ba(b)))}}};n.Ed=function(){hk(this)};n.setMap=function(a){this.set("map",a)};n.Ac=function(a){this.set("position",a)};function ik(a,b){var c=a.getBoundingClientRect(),d=c.left+K.pageXOffset,c=c.top+K.pageYOffset;return[d,c,d+b[0],c+b[1]]} + function jk(a,b){a.a.visible!==b&&(a.c.style.display=b?"":"none",a.a.visible=b)} + function hk(a){var b=a.get("map"),c=a.get("position");if(void 0!==b&&b.c&&void 0!==c){var c=ug(b,c),d=b.Ta(),b=a.c.style,e=a.get("offset"),f=a.get("positioning"),g=e[0],e=e[1];if("bottom-right"==f||"center-right"==f||"top-right"==f)""!==a.a.sb&&(a.a.sb=b.left=""),g=Math.round(d[0]-c[0]-g)+"px",a.a.wb!=g&&(a.a.wb=b.right=g);else{""!==a.a.wb&&(a.a.wb=b.right="");if("bottom-center"==f||"center-center"==f||"top-center"==f)g-=a.c.offsetWidth/2;g=Math.round(c[0]+g)+"px";a.a.sb!=g&&(a.a.sb=b.left=g)}if("bottom-left"== + f||"bottom-center"==f||"bottom-right"==f)""!==a.a.xb&&(a.a.xb=b.top=""),c=Math.round(d[1]-c[1]-e)+"px",a.a.lb!=c&&(a.a.lb=b.bottom=c);else{""!==a.a.lb&&(a.a.lb=b.bottom="");if("center-left"==f||"center-center"==f||"center-right"==f)e-=a.c.offsetHeight/2;c=Math.round(c[1]+e)+"px";a.a.xb!=c&&(a.a.xb=b.top=c)}jk(a,!0)}else jk(a,!1)};function kk(a){V.call(this);this.g=void 0;this.a="geometry";this.h=null;this.f=void 0;this.c=null;R(this,La(this.a),this.qb,this);void 0!==a&&(a instanceof Wb||!a?lk(this,a):this.l(a))}B(kk,V);n=kk.prototype;n.clone=function(){var a=new kk(this.Ea());mk(a,this.a);var b=this.S();b&&lk(a,b.clone());if(b=this.h)a.h=b,a.f=b?nk(b):void 0,a.w();return a};n.S=function(){return this.get(this.a)};n.Pa=function(){return this.g};n.ud=function(){this.w()}; + n.qb=function(){this.c&&(M(this.c),this.c=null);var a=this.S();a&&(this.c=R(a,"change",this.ud,this));this.w()};function lk(a,b){a.set(a.a,b)}function mk(a,b){ya(a,La(a.a),a.qb,a);a.a=b;R(a,La(a.a),a.qb,a);a.qb()}function nk(a){if("function"!==typeof a){var b;Array.isArray(a)?b=a:(L(a instanceof yh,41),b=[a]);a=function(){return b}}return a};function ok(a,b,c){return function(d,e,f){var g=new XMLHttpRequest;g.open("GET","function"===typeof a?a(d,e,f):a,!0);"arraybuffer"==b.$()&&(g.responseType="arraybuffer");g.onload=function(){if(!g.status||200<=g.status&&300>g.status){var a=b.$(),d;"json"==a||"text"==a?d=g.responseText:"xml"==a?(d=g.responseXML,d||(a=g.responseText,d=(new DOMParser).parseFromString(a,"application/xml"))):"arraybuffer"==a&&(d=g.response);d&&c.call(this,b.a(d,{featureProjection:f}),b.c(pk(d)))}}.bind(this);g.send()}} + function qk(a,b){return ok(a,b,function(a){this.Gb(a)})};function rk(){this.defaultDataProjection=null}function sk(a,b,c){var d;c&&(d={dataProjection:c.dataProjection?c.dataProjection:a.c(pk(b)),featureProjection:c.featureProjection});var e;d&&(e={featureProjection:d.featureProjection,dataProjection:d.dataProjection?d.dataProjection:a.defaultDataProjection,rightHanded:d.rightHanded},d.decimals&&(e.decimals=d.decimals));return e} + function tk(a,b){var c=b?Hb(b.featureProjection):null,d=b?Hb(b.dataProjection):null;if(c&&d&&!Tb(c,d))if(a instanceof Wb)c=a.transform(d,c);else{d=Ub(d,c);c=[a[0],a[1],a[0],a[3],a[2],a[1],a[2],a[3]];d(c,c,2);var e=[c[0],c[2],c[4],c[6]],f=[c[1],c[3],c[5],c[7]],c=Math.min.apply(null,e),d=Math.min.apply(null,f),e=Math.max.apply(null,e),f=Math.max.apply(null,f),c=ib(c,d,e,f,void 0)}else c=a;return c};function uk(){this.defaultDataProjection=null}B(uk,rk);function pk(a){return"string"===typeof a?(a=JSON.parse(a))?a:null:null!==a?a:null}uk.prototype.$=function(){return"json"};uk.prototype.g=function(a,b){return this.b(pk(a),sk(this,a,b))};uk.prototype.a=function(a,b){return this.h(pk(a),sk(this,a,b))};function vk(a,b,c,d,e){var f=NaN,g=NaN,h=(c-b)/d;if(0!==h)if(1==h)f=a[b],g=a[b+1];else if(2==h)f=.5*a[b]+.5*a[b+d],g=.5*a[b+1]+.5*a[b+d+1];else{var g=a[b],h=a[b+1],k=0,f=[0],l;for(l=b+d;l<c;l+=d){var m=a[l],p=a[l+1],k=k+Math.sqrt((m-g)*(m-g)+(p-h)*(p-h));f.push(k);g=m;h=p}c=.5*k;k=0;l=f.length;for(m=!1;k<l;)g=k+(l-k>>1),h=+Ma(f[g],c),0>h?k=g+1:(l=g,m=!h);g=m?k:~k;0>g?(c=(c-f[-g-2])/(f[-g-1]-f[-g-2]),b+=(-g-2)*d,f=a[b],f+=c*(a[b+d]-f),g=a[b+1],g+=c*(a[b+d+1]-g)):(f=a[b+g*d],g=a[b+g*d+1])}return e? + (e[0]=f,e[1]=g,e):[f,g]};function wk(a,b){Yb.call(this);this.a=null;this.h=-1;this.ea(a,b)}B(wk,Yb);n=wk.prototype;n.clone=function(){var a=new wk(null);$b(a,this.c,this.o.slice());a.w();return a};n.za=function(){return ec(this.o,0,this.o.length,this.A)};function Nh(a){if(a.h!=a.b){var b;b=vk(a.o,0,a.o.length,a.A,a.a);a.a=b;a.h=a.b}return a.a}n.Qa=function(a){var b=[];b.length=gc(this.o,0,this.o.length,this.A,a,b,0);a=new wk(null);$b(a,"XY",b);a.w();return a};n.$=function(){return"LineString"}; + n.ea=function(a,b){a?(ac(this,b,a,1),this.o||(this.o=[]),this.o.length=cc(this.o,0,a,this.A)):$b(this,"XY",null);this.w()};function xk(a,b){Yb.call(this);this.ua=[];this.ea(a,b)}B(xk,Yb);n=xk.prototype;n.clone=function(){var a=new xk(null),b=this.ua.slice();$b(a,this.c,this.o.slice());a.ua=b;a.w();return a};n.za=function(){return fc(this.o,0,this.ua,this.A)};function Oh(a){var b=[],c=a.o,d=0,e=a.ua;a=a.A;var f,g;f=0;for(g=e.length;f<g;++f){var h=e[f],d=vk(c,d,h,a);Pa(b,d);d=h}return b} + n.Qa=function(a){var b=[],c=[],d=this.o,e=this.ua,f=this.A,g=0,h=0,k,l;k=0;for(l=e.length;k<l;++k){var m=e[k],h=gc(d,g,m,f,a,b,h);c.push(h);g=m}b.length=h;a=new xk(null);$b(a,"XY",b);a.ua=c;a.w();return a};n.$=function(){return"MultiLineString"};n.ea=function(a,b){if(a){ac(this,b,a,2);this.o||(this.o=[]);var c=dc(this.o,0,a,this.A,this.ua);this.o.length=0===c.length?0:c[c.length-1]}else c=this.ua,$b(this,"XY",null),this.ua=c;this.w()};function yk(a,b){Yb.call(this);this.ea(a,b)}B(yk,Yb);yk.prototype.clone=function(){var a=new yk(null);$b(a,this.c,this.o.slice());a.w();return a};yk.prototype.za=function(){return ec(this.o,0,this.o.length,this.A)};yk.prototype.$=function(){return"MultiPoint"};yk.prototype.ea=function(a,b){a?(ac(this,b,a,1),this.o||(this.o=[]),this.o.length=cc(this.o,0,a,this.A)):$b(this,"XY",null);this.w()};function zk(a,b){Yb.call(this);this.a=[];this.v=-1;this.u=null;this.B=-1;this.h=null;this.ea(a,b)}B(zk,Yb);n=zk.prototype;n.clone=function(){for(var a=new zk(null),b=this.a.length,c=Array(b),d=0;d<b;++d)c[d]=this.a[d].slice();$b(a,this.c,this.o.slice());a.a=c;a.w();return a};n.za=function(a){var b;void 0!==a?(b=Ph(this).slice(),pc(b,this.a,this.A,a)):b=this.o;a=b;b=this.a;var c=this.A,d=0,e=[],f=0,g,h;g=0;for(h=b.length;g<h;++g){var k=b[g];e[f++]=fc(a,d,k,c,e[f]);d=k[k.length-1]}e.length=f;return e}; + function Qh(a){if(a.v!=a.b){var b=a.o,c=a.a,d=a.A,e=0,f=[],g,h,k;g=0;for(h=c.length;g<h;++g){var l=c[g];k=b;var m=l[0],p=d,q=jb(void 0);k=nb(q,k,e,m,p);f.push((k[0]+k[2])/2,(k[1]+k[3])/2);e=l[l.length-1]}b=Ph(a);c=a.a;d=a.A;g=0;h=[];l=0;for(k=c.length;l<k;++l)e=c[l],h=lc(b,g,e,d,f,2*l,h),g=e[e.length-1];a.u=h;a.v=a.b}return a.u} + function Ph(a){if(a.B!=a.b){var b=a.o,c;a:{c=a.a;var d,e;d=0;for(e=c.length;d<e;++d)if(!nc(b,c[d],a.A,void 0)){c=!1;break a}c=!0}c?a.h=b:(a.h=b.slice(),a.h.length=pc(a.h,a.a,a.A));a.B=a.b}return a.h}n.Qa=function(a){var b=[],c=[],d=this.o,e=this.a,f=this.A;a=Math.sqrt(a);var g=0,h=0,k,l;k=0;for(l=e.length;k<l;++k){var m=e[k],p=[],h=hc(d,g,m,f,a,b,h,p);c.push(p);g=m[m.length-1]}b.length=h;d=new zk(null);$b(d,"XY",b);d.a=c;d.w();return d};n.$=function(){return"MultiPolygon"}; + n.ea=function(a,b){if(a){ac(this,b,a,3);this.o||(this.o=[]);var c=this.o,d=this.A,e=this.a,f=0,e=e?e:[],g=0,h,k;h=0;for(k=a.length;h<k;++h)f=dc(c,f,a[h],d,e[g]),e[g++]=f,f=f[f.length-1];e.length=g;0===e.length?this.o.length=0:(c=e[e.length-1],this.o.length=0===c.length?0:c[c.length-1])}else c=this.a,$b(this,"XY",null),this.a=c;this.w()};function Ak(a){a=a?a:{};this.defaultDataProjection=null;this.f=a.geometryName}B(Ak,uk);function Bk(a){var b="XY";!0===a.hasZ&&!0===a.hasM?b="XYZM":!0===a.hasZ?b="XYZ":!0===a.hasM&&(b="XYM");return b} + var Ck={Point:function(a){return void 0!==a.m&&void 0!==a.z?new jc([a.x,a.y,a.z,a.m],"XYZM"):void 0!==a.z?new jc([a.x,a.y,a.z],"XYZ"):void 0!==a.m?new jc([a.x,a.y,a.m],"XYM"):new jc([a.x,a.y])},LineString:function(a){return new wk(a.paths[0],Bk(a))},Polygon:function(a){return new qc(a.rings,Bk(a))},MultiPoint:function(a){return new yk(a.points,Bk(a))},MultiLineString:function(a){return new xk(a.paths,Bk(a))},MultiPolygon:function(a){return new zk(a.rings,Bk(a))}}; + Ak.prototype.b=function(a,b){var c;if(c=a.geometry){var d;if("number"===typeof c.x&&"number"===typeof c.y)d="Point";else if(c.points)d="MultiPoint";else if(c.paths)d=1===c.paths.length?"LineString":"MultiLineString";else if(c.rings){var e=c.rings,f=Bk(c),g=[];d=[];var h,k;h=0;for(k=e.length;h<k;++h){var l=Oa(e[h]);mc(l,0,l.length,f.length)?g.push([e[h]]):d.push(e[h])}for(;d.length;){e=d.shift();f=!1;for(h=g.length-1;0<=h;h--)if(hb((new ic(g[h][0])).G(),(new ic(e)).G())){g[h].push(e);f=!0;break}f|| + g.push([e.reverse()])}c=pa({},c);1===g.length?(d="Polygon",c.rings=g[0]):(d="MultiPolygon",c.rings=g)}c=tk((0,Ck[d])(c),b)}else c=null;g=new kk;this.f&&mk(g,this.f);lk(g,c);b&&b.Tb&&a.attributes[b.Tb]&&(g.g=a.attributes[b.Tb],g.w());a.attributes&&g.l(a.attributes);return g};Ak.prototype.h=function(a,b){var c=b?b:{};if(a.features){var d=[],e=a.features,f,g;c.Tb=a.objectIdFieldName;f=0;for(g=e.length;f<g;++f)d.push(this.b(e[f],c));return d}return[this.b(a,c)]}; + Ak.prototype.c=function(a){return a.spatialReference&&a.spatialReference.wkid?Hb("EPSG:"+a.spatialReference.wkid):null};function Dk(a){Wb.call(this);this.a=a?a:null;Ek(this)}B(Dk,Wb);function Fk(a){var b,c;if(a.a)for(b=0,c=a.a.length;b<c;++b)ya(a.a[b],"change",a.w,a)}function Ek(a){var b,c;if(a.a)for(b=0,c=a.a.length;b<c;++b)R(a.a[b],"change",a.w,a)}n=Dk.prototype;n.clone=function(){var a=new Dk(null),b=this.a,c=[],d,e;d=0;for(e=b.length;d<e;++d)c.push(b[d].clone());Fk(a);a.a=c;Ek(a);a.w();return a};n.mb=function(a){jb(a);for(var b=this.a,c=0,d=b.length;c<d;++c)mb(a,b[c].G());return a}; + n.Rb=function(a){this.i!=this.b&&(qa(this.f),this.g=0,this.i=this.b);if(0>a||0!==this.g&&a<this.g)return this;var b=a.toString();if(this.f.hasOwnProperty(b))return this.f[b];var c=[],d=this.a,e=!1,f,g;f=0;for(g=d.length;f<g;++f){var h=d[f],k=h.Rb(a);c.push(k);k!==h&&(e=!0)}if(e)return a=new Dk(null),Fk(a),a.a=c,Ek(a),a.w(),this.f[b]=a;this.g=a;return this};n.$=function(){return"GeometryCollection"};n.rotate=function(a,b){for(var c=this.a,d=0,e=c.length;d<e;++d)c[d].rotate(a,b);this.w()}; + n.scale=function(a,b,c){c||(c=tb(this.G()));for(var d=this.a,e=0,f=d.length;e<f;++e)d[e].scale(a,b,c);this.w()};n.Hb=function(a){var b=this.a,c,d;c=0;for(d=b.length;c<d;++c)b[c].Hb(a);this.w()};n.translate=function(a,b){var c=this.a,d,e;d=0;for(e=c.length;d<e;++d)c[d].translate(a,b);this.w()};n.R=function(){Fk(this);Wb.prototype.R.call(this)};function Gk(a){a=a?a:{};this.defaultDataProjection=null;this.defaultDataProjection=Hb(a.defaultDataProjection?a.defaultDataProjection:"EPSG:4326");this.f=a.geometryName}B(Gk,uk);function Hk(a,b){return a?tk((0,Ik[a.type])(a),b):null} + var Ik={Point:function(a){return new jc(a.coordinates)},LineString:function(a){return new wk(a.coordinates)},Polygon:function(a){return new qc(a.coordinates)},MultiPoint:function(a){return new yk(a.coordinates)},MultiLineString:function(a){return new xk(a.coordinates)},MultiPolygon:function(a){return new zk(a.coordinates)},GeometryCollection:function(a,b){var c=a.geometries.map(function(a){return Hk(a,b)});return new Dk(c)}}; + Gk.prototype.b=function(a,b){var c=Hk(a.geometry,b),d=new kk;this.f&&mk(d,this.f);lk(d,c);void 0!==a.id&&(d.g=a.id,d.w());a.properties&&d.l(a.properties);return d};Gk.prototype.h=function(a,b){var c;if("Feature"==a.type)c=[this.b(a,b)];else if("FeatureCollection"==a.type){c=[];var d=a.features,e,f;e=0;for(f=d.length;e<f;++e)c.push(this.b(d[e],b))}else L(!1,35);return c}; + Gk.prototype.c=function(a){a=a.crs;var b;a?"name"==a.type?b=Hb(a.properties.name):"EPSG"==a.type?b=Hb("EPSG:"+a.properties.code):L(!1,36):b=this.defaultDataProjection;return b};function Jk(a,b,c,d,e,f){Ga.call(this);this.l=null;this.b=a?a:new Image;null!==d&&(this.b.crossOrigin=d);this.f=f?document.createElement("CANVAS"):null;this.h=f;this.g=null;this.c=e;this.a=c;this.s=b;this.i=!1;2==this.c&&Kk(this)}B(Jk,Ga);function Kk(a){var b=Md(1,1);try{b.drawImage(a.b,0,0),b.getImageData(0,0,1,1)}catch(c){a.i=!0}}Jk.prototype.j=function(){this.c=3;this.g.forEach(M);this.g=null;U(this,"change")}; + Jk.prototype.v=function(){this.c=2;this.a&&(this.b.width=this.a[0],this.b.height=this.a[1]);this.a=[this.b.width,this.b.height];this.g.forEach(M);this.g=null;Kk(this);if(!this.i&&null!==this.h){this.f.width=this.b.width;this.f.height=this.b.height;var a=this.f.getContext("2d");a.drawImage(this.b,0,0);for(var b=a.getImageData(0,0,this.b.width,this.b.height),c=b.data,d=this.h[0]/255,e=this.h[1]/255,f=this.h[2]/255,g=0,h=c.length;g<h;g+=4)c[g]*=d,c[g+1]*=e,c[g+2]*=f;a.putImageData(b,0,0)}U(this,"change")}; + Jk.prototype.Z=function(){return this.f?this.f:this.b};Jk.prototype.load=function(){if(0==this.c){this.c=1;this.g=[R(this.b,"error",this.j,this,!0),R(this.b,"load",this.v,this,!0)];try{this.b.src=this.s}catch(a){this.j()}}};function Lk(a){a=a||{};this.g=void 0!==a.anchor?a.anchor:[.5,.5];this.f=null;this.a=void 0!==a.anchorOrigin?a.anchorOrigin:"top-left";this.l=void 0!==a.anchorXUnits?a.anchorXUnits:"fraction";this.i=void 0!==a.anchorYUnits?a.anchorYUnits:"fraction";var b=void 0!==a.crossOrigin?a.crossOrigin:null,c=void 0!==a.img?a.img:null,d=void 0!==a.imgSize?a.imgSize:null,e=a.src;L(!(void 0!==e&&c),4);L(!c||c&&d,5);void 0!==e&&0!==e.length||!c||(e=c.src||J(c).toString());L(void 0!==e&&0<e.length,6);var f=void 0!== + a.src?0:2,g;void 0!==a.color?(g=a.color,g=Array.isArray(g)?g:pd(g)):g=null;var h=Af.get(e,b,g);h||(h=new Jk(c,e,d,b,f,g),Af.set(e,b,g,h));this.b=h;this.u=void 0!==a.offset?a.offset:[0,0];this.c=void 0!==a.offsetOrigin?a.offsetOrigin:"top-left";this.h=null;this.j=void 0!==a.size?a.size:null;oh.call(this,{opacity:void 0!==a.opacity?a.opacity:1,rotation:void 0!==a.rotation?a.rotation:0,scale:void 0!==a.scale?a.scale:1,snapToPixel:void 0!==a.snapToPixel?a.snapToPixel:!0,rotateWithView:void 0!==a.rotateWithView? + a.rotateWithView:!1})}B(Lk,oh);n=Lk.prototype;n.eb=function(){if(this.f)return this.f;var a=this.g,b=this.Ka();if("fraction"==this.l||"fraction"==this.i){if(!b)return null;a=this.g.slice();"fraction"==this.l&&(a[0]*=b[0]);"fraction"==this.i&&(a[1]*=b[1])}if("top-left"!=this.a){if(!b)return null;a===this.g&&(a=this.g.slice());if("top-right"==this.a||"bottom-right"==this.a)a[0]=-a[0]+b[0];if("bottom-left"==this.a||"bottom-right"==this.a)a[1]=-a[1]+b[1]}return this.f=a};n.Z=function(a){return this.b.Z(a)}; + n.Ob=function(){return this.b.a};n.ib=function(){return this.b.c};n.ub=function(){var a=this.b;if(!a.l)if(a.i){var b=a.a[0],c=a.a[1],d=Md(b,c);d.fillRect(0,0,b,c);a.l=d.canvas}else a.l=a.b;return a.l};n.pa=function(){if(this.h)return this.h;var a=this.u;if("top-left"!=this.c){var b=this.Ka(),c=this.b.a;if(!b||!c)return null;a=a.slice();if("top-right"==this.c||"bottom-right"==this.c)a[0]=c[0]-b[0]-a[0];if("bottom-left"==this.c||"bottom-right"==this.c)a[1]=c[1]-b[1]-a[1]}return this.h=a}; + n.Ka=function(){return this.j?this.j:this.b.a};n.Vb=function(a,b){return R(this.b,"change",a,b)};n.load=function(){this.b.load()};n.bc=function(a,b){ya(this.b,"change",a,b)};function Mk(a,b,c){Yb.call(this);Nk(this,a,b?b:0,c)}B(Mk,Yb);Mk.prototype.clone=function(){var a=new Mk(null);$b(a,this.c,this.o.slice());a.w();return a};Mk.prototype.mb=function(a){var b=this.o,c=b[this.A]-b[0];return ib(b[0]-c,b[1]-c,b[0]+c,b[1]+c,a)};Mk.prototype.$=function(){return"Circle"};function Nk(a,b,c,d){if(b){ac(a,d,b,0);a.o||(a.o=[]);d=a.o;b=bc(d,b);d[b++]=d[0]+c;var e;c=1;for(e=a.A;c<e;++c)d[b++]=d[c];d.length=b}else $b(a,"XY",null);a.w()};function Ok(a,b,c,d,e){Sf.call(this,a,b);this.g=c;this.a=new Image;null!==d&&(this.a.crossOrigin=d);this.c={};this.f=null;this.h=e}B(Ok,Sf);n=Ok.prototype;n.R=function(){1==this.state&&Pk(this);this.b&&Da(this.b);this.state=5;Tf(this);Sf.prototype.R.call(this)};n.Z=function(a){if(void 0!==a){var b=J(a);if(b in this.c)return this.c[b];a=sa(this.c)?this.a:this.a.cloneNode(!1);return this.c[b]=a}return this.a};n.getKey=function(){return this.g};n.ce=function(){this.state=3;Pk(this);Tf(this)}; + n.de=function(){this.state=this.a.naturalWidth&&this.a.naturalHeight?2:4;Pk(this);Tf(this)};n.load=function(){if(0==this.state||3==this.state)this.state=1,Tf(this),this.f=[R(this.a,"error",this.ce,this,!0),R(this.a,"load",this.de,this,!0)],this.h(this,this.g)};function Pk(a){a.f.forEach(M);a.f=null};function Qk(){return[[-Infinity,-Infinity,Infinity,Infinity]]};var Rk; + (function(){var a={},b={Aa:a};(function(c){if("object"===typeof a&&"undefined"!==typeof b)b.Aa=c();else{var d;"undefined"!==typeof window?d=window:"undefined"!==typeof global?d=global:"undefined"!==typeof self?d=self:d=this;d.Re=c()}})(function(){return function d(a,b,g){function h(l,p){if(!b[l]){if(!a[l]){var q="function"==typeof require&&require;if(!p&&q)return require(l,!0);if(k)return k(l,!0);q=Error("Cannot find module '"+l+"'");throw q.code="MODULE_NOT_FOUND",q;}q=b[l]={Aa:{}};a[l][0].call(q.Aa,function(b){var d= + a[l][1][b];return h(d?d:b)},q,q.Aa,d,a,b,g)}return b[l].Aa}for(var k="function"==typeof require&&require,l=0;l<g.length;l++)h(g[l]);return h}({1:[function(a,b){function f(a,b){if(!(this instanceof f))return new f(a,b);this.Db=Math.max(4,a||9);this.gc=Math.max(2,Math.ceil(.4*this.Db));b&&this.ad(b);this.clear()}function g(a,b){h(a,0,a.children.length,b,a)}function h(a,b,d,e,g){g||(g=r(null));g.H=Infinity;g.J=Infinity;g.I=-Infinity;g.L=-Infinity;for(var f;b<d;b++)f=a.children[b],k(g,a.ga?e(f):f);return g} + function k(a,b){a.H=Math.min(a.H,b.H);a.J=Math.min(a.J,b.J);a.I=Math.max(a.I,b.I);a.L=Math.max(a.L,b.L)}function l(a,b){return a.H-b.H}function m(a,b){return a.J-b.J}function p(a){return(a.I-a.H)*(a.L-a.J)}function q(a){return a.I-a.H+(a.L-a.J)}function u(a,b){return a.H<=b.H&&a.J<=b.J&&b.I<=a.I&&b.L<=a.L}function w(a,b){return b.H<=a.I&&b.J<=a.L&&b.I>=a.H&&b.L>=a.J}function r(a){return{children:a,height:1,ga:!0,H:Infinity,J:Infinity,I:-Infinity,L:-Infinity}}function x(a,b,d,e,g){for(var f=[b,d], + h;f.length;)d=f.pop(),b=f.pop(),d-b<=e||(h=b+Math.ceil((d-b)/e/2)*e,D(a,h,b,d,g),f.push(b,h,h,d))}b.Aa=f;var D=a("quickselect");f.prototype={all:function(){return this.cc(this.data,[])},search:function(a){var b=this.data,d=[],e=this.la;if(!w(a,b))return d;for(var g=[],f,h,k,l;b;){f=0;for(h=b.children.length;f<h;f++)k=b.children[f],l=b.ga?e(k):k,w(a,l)&&(b.ga?d.push(k):u(a,l)?this.cc(k,d):g.push(k));b=g.pop()}return d},load:function(a){if(!a||!a.length)return this;if(a.length<this.gc){for(var b=0, + d=a.length;b<d;b++)this.Ha(a[b]);return this}a=this.ec(a.slice(),0,a.length-1,0);this.data.children.length?this.data.height===a.height?this.hc(this.data,a):(this.data.height<a.height&&(b=this.data,this.data=a,a=b),this.fc(a,this.data.height-a.height-1,!0)):this.data=a;return this},Ha:function(a){a&&this.fc(a,this.data.height-1);return this},clear:function(){this.data=r([]);return this},remove:function(a,b){if(!a)return this;for(var d=this.data,e=this.la(a),g=[],f=[],h,k,l,m;d||g.length;){d||(d=g.pop(), + k=g[g.length-1],h=f.pop(),m=!0);if(d.ga){a:{l=a;var p=d.children,q=b;if(q){for(var r=0;r<p.length;r++)if(q(l,p[r])){l=r;break a}l=-1}else l=p.indexOf(l)}if(-1!==l){d.children.splice(l,1);g.push(d);this.$c(g);break}}m||d.ga||!u(d,e)?k?(h++,d=k.children[h],m=!1):d=null:(g.push(d),f.push(h),h=0,k=d,d=d.children[0])}return this},la:function(a){return a},Kb:l,Lb:m,toJSON:function(){return this.data},cc:function(a,b){for(var d=[];a;)a.ga?b.push.apply(b,a.children):d.push.apply(d,a.children),a=d.pop();return b}, + ec:function(a,b,d,e){var f=d-b+1,h=this.Db,k;if(f<=h)return k=r(a.slice(b,d+1)),g(k,this.la),k;e||(e=Math.ceil(Math.log(f)/Math.log(h)),h=Math.ceil(f/Math.pow(h,e-1)));k=r([]);k.ga=!1;k.height=e;var f=Math.ceil(f/h),h=f*Math.ceil(Math.sqrt(h)),l,m,p;for(x(a,b,d,h,this.Kb);b<=d;b+=h)for(m=Math.min(b+h-1,d),x(a,b,m,f,this.Lb),l=b;l<=m;l+=f)p=Math.min(l+f-1,m),k.children.push(this.ec(a,l,p,e-1));g(k,this.la);return k},Zc:function(a,b,d,e){for(var f,g,h,k,l,m,q,r;;){e.push(b);if(b.ga||e.length-1===d)break; + q=r=Infinity;f=0;for(g=b.children.length;f<g;f++)h=b.children[f],l=p(h),m=(Math.max(h.I,a.I)-Math.min(h.H,a.H))*(Math.max(h.L,a.L)-Math.min(h.J,a.J))-l,m<r?(r=m,q=l<q?l:q,k=h):m===r&&l<q&&(q=l,k=h);b=k||b.children[0]}return b},fc:function(a,b,d){var e=this.la;d=d?a:e(a);var e=[],f=this.Zc(d,this.data,b,e);f.children.push(a);for(k(f,d);0<=b;)if(e[b].children.length>this.Db)this.bd(e,b),b--;else break;this.Wc(d,e,b)},bd:function(a,b){var d=a[b],e=d.children.length,f=this.gc;this.Xc(d,f,e);e=this.Yc(d, + f,e);e=r(d.children.splice(e,d.children.length-e));e.height=d.height;e.ga=d.ga;g(d,this.la);g(e,this.la);b?a[b-1].children.push(e):this.hc(d,e)},hc:function(a,b){this.data=r([a,b]);this.data.height=a.height+1;this.data.ga=!1;g(this.data,this.la)},Yc:function(a,b,d){var e,f,g,k,l,m,q;l=m=Infinity;for(e=b;e<=d-b;e++)f=h(a,0,e,this.la),g=h(a,e,d,this.la),k=Math.max(0,Math.min(f.I,g.I)-Math.max(f.H,g.H))*Math.max(0,Math.min(f.L,g.L)-Math.max(f.J,g.J)),f=p(f)+p(g),k<l?(l=k,q=e,m=f<m?f:m):k===l&&f<m&&(m= + f,q=e);return q},Xc:function(a,b,d){var e=a.ga?this.Kb:l,f=a.ga?this.Lb:m,g=this.dc(a,b,d,e);b=this.dc(a,b,d,f);g<b&&a.children.sort(e)},dc:function(a,b,d,e){a.children.sort(e);e=this.la;var f=h(a,0,b,e),g=h(a,d-b,d,e),l=q(f)+q(g),m,p;for(m=b;m<d-b;m++)p=a.children[m],k(f,a.ga?e(p):p),l+=q(f);for(m=d-b-1;m>=b;m--)p=a.children[m],k(g,a.ga?e(p):p),l+=q(g);return l},Wc:function(a,b,d){for(;0<=d;d--)k(b[d],a)},$c:function(a){for(var b=a.length-1,d;0<=b;b--)0===a[b].children.length?0<b?(d=a[b-1].children, + d.splice(d.indexOf(a[b]),1)):this.clear():g(a[b],this.la)},ad:function(a){var b=["return a"," - b",";"];this.Kb=new Function("a","b",b.join(a[0]));this.Lb=new Function("a","b",b.join(a[1]));this.la=new Function("a","return {minX: a"+a[0]+", minY: a"+a[1]+", maxX: a"+a[2]+", maxY: a"+a[3]+"};")}}},{quickselect:2}],2:[function(a,b){function f(a,b,d,e,q){d=d||0;e=e||a.length-1;for(q=q||h;e>d;){if(600<e-d){var u=e-d+1,w=b-d+1,r=Math.log(u),x=.5*Math.exp(2*r/3),r=.5*Math.sqrt(r*x*(u-x)/u)*(0>w-u/2?-1: + 1);f(a,b,Math.max(d,Math.floor(b-w*x/u+r)),Math.min(e,Math.floor(b+(u-w)*x/u+r)),q)}u=a[b];w=d;x=e;g(a,d,b);for(0<q(a[e],u)&&g(a,d,e);w<x;){g(a,w,x);w++;for(x--;0>q(a[w],u);)w++;for(;0<q(a[x],u);)x--}0===q(a[d],u)?g(a,d,x):(x++,g(a,x,e));x<=b&&(d=x+1);b<=x&&(e=x-1)}}function g(a,b,d){var e=a[b];a[b]=a[d];a[d]=e}function h(a,b){return a<b?-1:a>b?1:0}b.Aa=f},{}]},{},[1])(1)});Rk=b.Aa})();function Sk(a){this.b=Rk(a);this.a={}}n=Sk.prototype;n.Ha=function(a,b){var c={H:a[0],J:a[1],I:a[2],L:a[3],value:b};this.b.Ha(c);this.a[J(b)]=c};n.load=function(a,b){for(var c=Array(b.length),d=0,e=b.length;d<e;d++){var f=a[d],g=b[d],f={H:f[0],J:f[1],I:f[2],L:f[3],value:g};c[d]=f;this.a[J(g)]=f}this.b.load(c)};n.remove=function(a){a=J(a);var b=this.a[a];delete this.a[a];return null!==this.b.remove(b)};function Tk(a){return a.b.all().map(function(a){return a.value})} + function Uk(a,b){return a.b.search({H:b[0],J:b[1],I:b[2],L:b[3]}).map(function(a){return a.value})}function Vk(a,b,c,d){return Wk(Uk(a,b),c,d)}function Wk(a,b,c){for(var d,e=0,f=a.length;e<f&&!(d=b.call(c,a[e]));e++);return d}n.clear=function(){this.b.clear();this.a={}};n.G=function(){var a=this.b.data;return[a.H,a.J,a.I,a.L]};function Xk(a){a=a||{};vf.call(this,{attributions:a.attributions,logo:a.logo,projection:void 0,state:"ready",wrapX:void 0!==a.wrapX?a.wrapX:!0});this.j=I;this.s=a.format;this.u=void 0==a.overlaps?!0:a.overlaps;this.B=a.url;void 0!==a.loader?this.j=a.loader:void 0!==this.B&&(L(this.s,7),this.j=qk(this.B,this.s));this.W=void 0!==a.strategy?a.strategy:Qk;var b=void 0!==a.useSpatialIndex?a.useSpatialIndex:!0;this.X=b?new Sk:null;this.v=new Sk;this.ka={};this.c={};this.f={};this.g={};this.a=null;var c, + d;a.features instanceof cd?(c=a.features,d=c.a):Array.isArray(a.features)&&(d=a.features);b||void 0!==c||(c=new cd(d));void 0!==d&&Yk(this,d);void 0!==c&&Zk(this,c)}B(Xk,vf);n=Xk.prototype;n.Fb=function(a){var b=J(a).toString();if($k(this,b,a)){al(this,b,a);var c=a.S();c?(b=c.G(),this.X&&this.X.Ha(b,a)):this.ka[b]=a;U(this,new bl("addfeature",a))}this.w()};function al(a,b,c){a.g[b]=[R(c,"change",a.vc,a),R(c,"propertychange",a.vc,a)]} + function $k(a,b,c){var d=!0,e=c.Pa();void 0!==e?e.toString()in a.c?d=!1:a.c[e.toString()]=c:(L(!(b in a.f),30),a.f[b]=c);return d}n.Gb=function(a){Yk(this,a);this.w()};function Yk(a,b){var c,d,e,f,g=[],h=[],k=[];d=0;for(e=b.length;d<e;d++)f=b[d],c=J(f).toString(),$k(a,c,f)&&h.push(f);d=0;for(e=h.length;d<e;d++){f=h[d];c=J(f).toString();al(a,c,f);var l=f.S();l?(c=l.G(),g.push(c),k.push(f)):a.ka[c]=f}a.X&&a.X.load(g,k);d=0;for(e=h.length;d<e;d++)U(a,new bl("addfeature",h[d]))} + function Zk(a,b){var c=!1;R(a,"addfeature",function(a){c||(c=!0,b.push(a.feature),c=!1)});R(a,"removefeature",function(a){c||(c=!0,b.remove(a.feature),c=!1)});R(b,hd,function(a){c||(c=!0,this.Fb(a.element),c=!1)},a);R(b,id,function(a){if(!c){c=!0;a=a.element;var b=J(a).toString();b in this.ka?delete this.ka[b]:this.X&&this.X.remove(a);this.Zb(a);this.w();c=!1}},a);a.a=b} + n.clear=function(a){if(a){for(var b in this.g)this.g[b].forEach(M);this.a||(this.g={},this.c={},this.f={})}else if(this.X){a=this.Zb;Wk(Tk(this.X),a,this);for(var c in this.ka)this.Zb(this.ka[c])}this.a&&this.a.clear();this.X&&this.X.clear();this.v.clear();this.ka={};U(this,new bl("clear"));this.w()};n.nd=function(a,b){if(this.X)return Wk(Tk(this.X),a,b);if(this.a)return ed(this.a,a,b)};function Qi(a,b,c,d){a.X?Vk(a.X,b,c,d):a.a&&ed(a.a,c,d)} + n.pd=function(){var a;this.a?a=this.a.a:this.X&&(a=Tk(this.X),sa(this.ka)||Pa(a,ra(this.ka)));return a};n.G=function(){return this.X.G()}; + n.vc=function(a){a=a.target;var b=J(a).toString(),c=a.S();if(c)if(c=c.G(),b in this.ka)delete this.ka[b],this.X&&this.X.Ha(c,a);else{if(this.X){var d=this.X,e=d.a[J(a)];lb([e.H,e.J,e.I,e.L],c)||(d.remove(a),d.Ha(c,a))}}else b in this.ka||(this.X&&this.X.remove(a),this.ka[b]=a);c=a.Pa();void 0!==c?(c=c.toString(),b in this.f?(delete this.f[b],this.c[c]=a):this.c[c]!==a&&(cl(this,a),this.c[c]=a)):b in this.f||(cl(this,a),this.f[b]=a);this.w();U(this,new bl("changefeature",a))}; + function Pi(a,b,c,d){var e=a.v;b=a.W(b,c);var f,g;f=0;for(g=b.length;f<g;++f){var h=b[f];Vk(e,h,function(a){return hb(a.extent,h)})||(a.j.call(a,h,c,d),e.Ha(h,{extent:h.slice()}))}}n.Zb=function(a){var b=J(a).toString();this.g[b].forEach(M);delete this.g[b];var c=a.Pa();void 0!==c?delete this.c[c.toString()]:delete this.f[b];U(this,new bl("removefeature",a))};function cl(a,b){for(var c in a.c)if(a.c[c]===b){delete a.c[c];break}}function bl(a,b){T.call(this,a);this.feature=b}B(bl,T);function dl(a,b){T.call(this,a);this.feature=b}B(dl,T); + function el(a){ng.call(this,{handleDownEvent:fl,handleEvent:gl,handleUpEvent:hl});this.W=null;this.s=!1;this.Ga=a.source?a.source:null;this.ma=a.features?a.features:null;this.jd=a.snapTolerance?a.snapTolerance:12;this.P=a.type;this.c=il(this.P);this.wa=a.minPoints?a.minPoints:this.c===jl?3:2;this.va=a.maxPoints?a.maxPoints:Infinity;this.Ab=a.finishCondition?a.finishCondition:yb;var b=a.geometryFunction;if(!b)if("Circle"===this.P)b=function(a,b){var c=b?b:new Mk([NaN,NaN]),g=a[0],h=a[1],k=g[0]-h[0], + g=g[1]-h[1];Nk(c,a[0],Math.sqrt(k*k+g*g));return c};else{var c,b=this.c;b===kl?c=jc:b===ll?c=wk:b===jl&&(c=qc);b=function(a,b){var f=b;f?f.ea(a):f=new c(a);return f}}this.u=b;this.D=this.i=this.a=this.j=this.g=this.h=null;this.kd=a.clickTolerance?a.clickTolerance*a.clickTolerance:36;this.ba=new Y({source:new Xk({useSpatialIndex:!1,wrapX:a.wrapX?a.wrapX:!1}),style:a.style?a.style:ml()});this.Fa=a.geometryName;this.gd=a.condition?a.condition:jg;this.na=a.freehandCondition?a.freehandCondition:kg;R(this, + La("active"),this.kb,this)}B(el,ng);function ml(){var a=Eh();return function(b){return a[b.S().$()]}}el.prototype.setMap=function(a){ng.prototype.setMap.call(this,a);this.kb()};function gl(a){this.c!==ll&&this.c!==jl||!this.na(a)||(this.s=!0);var b=!this.s;this.s&&a.type===qf?(nl(this,a),b=!1):a.type===pf?b=pl(this,a):a.type===jf&&(b=!1);return og.call(this,a)&&b}function fl(a){return this.gd(a)?(this.W=a.pixel,!0):this.s?(this.W=a.pixel,this.h||ql(this,a),!0):!1} + function hl(a){this.s=!1;var b=this.W,c=a.pixel,d=b[0]-c[0],b=b[1]-c[1],c=!0;d*d+b*b<=this.kd&&(pl(this,a),this.h?this.c===rl?sl(this):tl(this,a)?this.Ab(a)&&sl(this):nl(this,a):(ql(this,a),this.c===kl&&sl(this)),c=!1);return c} + function pl(a,b){if(a.h){var c=b.coordinate,d=a.g.S(),e;a.c===kl?e=a.a:a.c===jl?(e=a.a[0],e=e[e.length-1],tl(a,b)&&(c=a.h.slice())):(e=a.a,e=e[e.length-1]);e[0]=c[0];e[1]=c[1];a.u(a.a,d);a.j&&a.j.S().ea(c);d instanceof qc&&a.c!==jl?(a.i||(a.i=new kk(new wk(null))),0>=d.ja.length?d=null:(c=new ic(null),$b(c,d.c,d.o.slice(0,d.ja[0])),c.w(),d=c),c=a.i.S(),$b(c,d.c,d.o),c.w()):a.D&&(c=a.i.S(),c.ea(a.D));ul(a)}else d=b.coordinate.slice(),a.j?a.j.S().ea(d):(a.j=new kk(new jc(d)),ul(a));return!0} + function tl(a,b){var c=!1;if(a.g){var d=!1,e=[a.h];a.c===ll?d=a.a.length>a.wa:a.c===jl&&(d=a.a[0].length>a.wa,e=[a.a[0][0],a.a[0][a.a[0].length-2]]);if(d)for(var d=b.map,f=0,g=e.length;f<g;f++){var h=e[f],k=ug(d,h),l=b.pixel,c=l[0]-k[0],k=l[1]-k[1],l=a.s&&a.na(b)?1:a.jd;if(c=Math.sqrt(c*c+k*k)<=l){a.h=h;break}}}return c} + function ql(a,b){var c=b.coordinate;a.h=c;a.c===kl?a.a=c.slice():a.c===jl?(a.a=[[c.slice(),c.slice()]],a.D=a.a[0]):(a.a=[c.slice(),c.slice()],a.c===rl&&(a.D=a.a));a.D&&(a.i=new kk(new wk(a.D)));c=a.u(a.a);a.g=new kk;a.Fa&&mk(a.g,a.Fa);lk(a.g,c);ul(a);U(a,new dl("drawstart",a.g))} + function nl(a,b){var c=b.coordinate,d=a.g.S(),e,f;if(a.c===ll)a.h=c.slice(),f=a.a,f.push(c.slice()),e=f.length>a.va,a.u(f,d);else if(a.c===jl){f=a.a[0];f.push(c.slice());if(e=f.length>a.va)a.h=f[0];a.u(a.a,d)}ul(a);e&&sl(a)} + function sl(a){var b=vl(a),c=a.a,d=b.S();a.c===ll?(c.pop(),a.u(c,d)):a.c===jl&&(c[0].pop(),c[0].push(c[0][0]),a.u(c,d));"MultiPoint"===a.P?lk(b,new yk([c])):"MultiLineString"===a.P?lk(b,new xk([c])):"MultiPolygon"===a.P&&lk(b,new zk([c]));U(a,new dl("drawend",b));a.ma&&a.ma.push(b);a.Ga&&a.Ga.Fb(b)}function vl(a){a.h=null;var b=a.g;b&&(a.g=null,a.j=null,a.i=null,a.ba.da().clear(!0));return b}el.prototype.B=zb; + function ul(a){var b=[];a.g&&b.push(a.g);a.i&&b.push(a.i);a.j&&b.push(a.j);a=a.ba.da();a.clear(!0);a.Gb(b)}el.prototype.kb=function(){var a=this.aa,b=this.get("active");a&&b||vl(this);this.ba.setMap(b?a:null)};function il(a){var b;"Point"===a||"MultiPoint"===a?b=kl:"LineString"===a||"MultiLineString"===a?b=ll:"Polygon"===a||"MultiPolygon"===a?b=jl:"Circle"===a&&(b=rl);return b}var kl="Point",ll="LineString",jl="Polygon",rl="Circle";function wl(a,b,c,d,e,f,g,h,k,l,m){Sf.call(this,e,0);this.u=void 0!==m?m:!1;this.v=g;this.s=h;this.f=null;this.c={};this.g=b;this.l=d;this.i=f?f:e;this.a=[];this.Va=null;this.h=0;f=Qc(d,this.i);h=this.l.G();e=this.g.G();f=h?vb(f,h):f;if(0===ob(f))this.state=4;else if((h=a.G())&&(e?e=vb(e,h):e=h),h=d.O(this.i[0]),m=tb(f),d=Ub(c,a)(m,void 0,m.length),h=c.getPointResolution(h,m),m=Lb(c),void 0!==m&&(h*=m),m=Lb(a),void 0!==m&&(h/=m),d=a.getPointResolution(h,d)/h,isFinite(d)&&0<d&&(h/=d),d=h,!isFinite(d)|| + 0>=d)this.state=4;else if(this.j=new Ji(a,c,f,e,d*(void 0!==l?l:.5)),0===this.j.f.length)this.state=4;else if(this.h=Xc(b,d),c=Li(this.j),e&&(a.b?(c[1]=ia(c[1],e[1],e[3]),c[3]=ia(c[3],e[1],e[3])):c=vb(c,e)),ob(c)){a=Rc(b,c,this.h);for(b=a.H;b<=a.I;b++)for(c=a.J;c<=a.L;c++)(l=k(this.h,b,c,g))&&this.a.push(l);0===this.a.length&&(this.state=4)}else this.state=4}B(wl,Sf);wl.prototype.R=function(){1==this.state&&(this.Va.forEach(M),this.Va=null);Sf.prototype.R.call(this)}; + wl.prototype.Z=function(a){if(void 0!==a){var b=J(a);if(b in this.c)return this.c[b];a=sa(this.c)?this.f:this.f.cloneNode(!1);return this.c[b]=a}return this.f}; + wl.prototype.Tc=function(){var a=[];this.a.forEach(function(b){b&&2==b.T()&&a.push({extent:Qc(this.g,b.V),image:b.Z()})},this);this.a.length=0;if(0===a.length)this.state=3;else{var b=this.i[0],c=Wc(this.l,b),d="number"===typeof c?c:c[0],c="number"===typeof c?c:c[1],b=this.l.O(b),e=this.g.O(this.h),f=Qc(this.l,this.i);this.f=Ii(d,c,this.v,e,this.g.G(),b,f,this.j,a,this.s,this.u);this.state=2}Tf(this)}; + wl.prototype.load=function(){if(0==this.state){this.state=1;Tf(this);var a=0;this.Va=[];this.a.forEach(function(b){var c=b.T();if(0==c||1==c){a++;var d;d=R(b,"change",function(){var c=b.T();if(2==c||3==c||4==c)M(d),a--,0===a&&(this.Va.forEach(M),this.Va=null,this.Tc())},this);this.Va.push(d)}},this);this.a.forEach(function(a){0==a.T()&&a.load()});0===a&&K.setTimeout(this.Tc.bind(this),0)}};function xl(a,b){var c=/\{z\}/g,d=/\{x\}/g,e=/\{y\}/g,f=/\{-y\}/g;return function(g){if(g)return a.replace(c,g[0].toString()).replace(d,g[1].toString()).replace(e,function(){return(-g[2]-1).toString()}).replace(f,function(){var a=b.a?b.a[g[0]]:null;L(a,55);return(a.L-a.J+1+g[2]).toString()})}}function yl(a,b){for(var c=a.length,d=Array(c),e=0;e<c;++e)d[e]=xl(a[e],b);return zl(d)}function zl(a){return 1===a.length?a[0]:function(b,c,d){if(b)return a[la((b[1]<<b[0])+b[2],a.length)](b,c,d)}} + function Al(){};function Bl(a){Xj.call(this);this.g=void 0!==a?a:2048}B(Bl,Xj);function Cl(a){return a.f>a.g}Bl.prototype.Oa=function(a){for(var b,c;Cl(this);){b=this.b.Na;c=b.V[0].toString();var d;if(d=c in a)b=b.V,d=Hc(a[c],b[1],b[2]);if(d)break;else Da(this.pop())}};function Dl(a){vf.call(this,{attributions:a.attributions,extent:a.extent,logo:a.logo,projection:a.projection,state:a.state,wrapX:a.wrapX});this.u=void 0!==a.opaque?a.opaque:!1;this.aa=void 0!==a.tilePixelRatio?a.tilePixelRatio:1;this.tileGrid=void 0!==a.tileGrid?a.tileGrid:null;this.a=new Bl(a.cacheSize);this.g=[0,0];this.Ia=""}B(Dl,vf);n=Dl.prototype;n.Mc=function(){return Cl(this.a)};n.Oa=function(a,b){var c=this.fb(a);c&&c.Oa(b)}; + function Sh(a,b,c,d,e){b=a.fb(b);if(!b)return!1;for(var f=!0,g,h,k=d.H;k<=d.I;++k)for(var l=d.J;l<=d.L;++l)g=a.ob(c,k,l),h=!1,Uj(b,g)&&(g=b.get(g),(h=2===g.T())&&(h=!1!==e(g))),h||(f=!1);return f}n.nb=function(){return 0};n.getKey=function(){return this.Ia};n.ob=function(a,b,c){return a+"/"+b+"/"+c};n.Qb=function(){return this.u};n.sa=function(a){return this.tileGrid?this.tileGrid:Zc(a)};n.fb=function(a){var b=this.ia();return b&&!Tb(b,a)?null:this.a};n.pb=function(){return this.aa}; + function Ni(a,b,c,d){d=a.sa(d);c=a.pb(c);b=Lc(Wc(d,b),a.g);return 1==c?b:Kc(b,c,a.g)}function El(a,b,c){var d=void 0!==c?c:a.ia();c=a.sa(d);if(a.i&&d.c){var e=b;b=e[0];a=Vc(c,e);var d=$c(d),f=a[0],g=a[1];d[0]<=f&&f<=d[2]&&d[1]<=g&&g<=d[3]?b=e:(e=qb(d),a[0]+=e*Math.ceil((d[0]-a[0])/e),b=Yc(c,a,b))}d=b[0];a=b[1];e=b[2];c=c.minZoom>d||d>c.maxZoom?!1:(c=(f=c.G())?Rc(c,f,d):c.a?c.a[d]:null)?Hc(c,a,e):!0;return c?b:null}n.Ja=function(){this.a.clear();this.w()};n.Vc=I; + function Fl(a,b){T.call(this,a);this.tile=b}B(Fl,T);function Gl(a){Dl.call(this,{attributions:a.attributions,cacheSize:a.cacheSize,extent:a.extent,logo:a.logo,opaque:a.opaque,projection:a.projection,state:a.state,tileGrid:a.tileGrid,tilePixelRatio:a.tilePixelRatio,wrapX:a.wrapX});this.tileLoadFunction=a.tileLoadFunction;this.tileUrlFunction=this.f?this.f.bind(this):Al;this.urls=null;if(a.urls){var b=a.urls;this.urls=b;var c=b.join("\n");Hl(this,this.f?this.f.bind(this):yl(b,this.tileGrid),c)}else a.url&&this.s(a.url);a.tileUrlFunction&&Hl(this,a.tileUrlFunction)} + B(Gl,Dl);Gl.prototype.v=function(a){a=a.target;switch(a.T()){case 1:U(this,new Fl("tileloadstart",a));break;case 2:U(this,new Fl("tileloadend",a));break;case 3:U(this,new Fl("tileloaderror",a))}};function Hl(a,b,c){a.tileUrlFunction=b;"undefined"!==typeof c?a.Ia!==c&&(a.Ia=c,a.w()):a.w()} + Gl.prototype.s=function(a){var b=[],c=/\{(\d)-(\d)\}/.exec(a)||/\{([a-z])-([a-z])\}/.exec(a);if(c){var d=c[2].charCodeAt(0),e;for(e=c[1].charCodeAt(0);e<=d;++e)b.push(a.replace(c[0],String.fromCharCode(e)))}else b.push(a);b=this.urls=b;Hl(this,this.f?this.f.bind(this):yl(b,this.tileGrid),a)};Gl.prototype.Vc=function(a,b,c){a=this.ob(a,b,c);Uj(this.a,a)&&this.a.get(a)};function Il(a){Gl.call(this,{attributions:a.attributions,cacheSize:a.cacheSize,extent:a.extent,logo:a.logo,opaque:a.opaque,projection:a.projection,state:a.state,tileGrid:a.tileGrid,tileLoadFunction:a.tileLoadFunction?a.tileLoadFunction:Jl,tilePixelRatio:a.tilePixelRatio,tileUrlFunction:a.tileUrlFunction,url:a.url,urls:a.urls,wrapX:a.wrapX});this.crossOrigin=void 0!==a.crossOrigin?a.crossOrigin:null;this.tileClass=void 0!==a.tileClass?a.tileClass:Ok;this.c={};this.j={};this.W=a.reprojectionErrorThreshold} + B(Il,Gl);n=Il.prototype;n.Mc=function(){if(Cl(this.a))return!0;for(var a in this.c)if(Cl(this.c[a]))return!0;return!1};n.Oa=function(a,b){var c=this.fb(a);this.a.Oa(this.a==c?b:{});for(var d in this.c){var e=this.c[d];e.Oa(e==c?b:{})}};n.nb=function(a){return this.ia()&&a&&Tb(this.ia(),a),0};n.Qb=function(a){return this.ia()&&a&&!Tb(this.ia(),a)?!1:Gl.prototype.Qb.call(this,a)}; + n.sa=function(a){var b=this.ia();return!this.tileGrid||b&&!Tb(b,a)?(b=J(a).toString(),b in this.j||(this.j[b]=Zc(a)),this.j[b]):this.tileGrid};n.fb=function(a){var b=this.ia();if(!b||Tb(b,a))return this.a;a=J(a).toString();a in this.c||(this.c[a]=new Bl);return this.c[a]};function Kl(a,b,c,d,e,f,g){b=[b,c,d];e=(c=El(a,b,f))?a.tileUrlFunction(c,e,f):void 0;e=new a.tileClass(b,void 0!==e?0:4,void 0!==e?e:"",a.crossOrigin,a.tileLoadFunction);e.key=g;R(e,"change",a.v,a);return e} + function $h(a,b,c,d,e,f){if(a.ia()&&f&&!Tb(a.ia(),f)){var g=a.fb(f);d=[b,c,d];var h;b=a.ob.apply(a,d);Uj(g,b)&&(h=g.get(b));c=a.getKey();if(h&&h.key==c)return h;var k=a.ia(),l=a.sa(k),m=a.sa(f),p=El(a,d,f);a=new wl(k,l,f,m,d,p,a.pb(e),0,function(a,b,c,d){return Ll(this,a,b,c,d,k)}.bind(a),a.W,!1);a.key=c;h?(a.b=h,Zj(g,b,a)):g.set(b,a);return a}return Ll(a,b,c,d,e,f)} + function Ll(a,b,c,d,e,f){var g,h=a.ob(b,c,d),k=a.getKey();if(Uj(a.a,h)){if(g=a.a.get(h),g.key!=k){var l=g;g.b&&g.b.key==k?(g=g.b,2==l.T()&&(g.b=l)):(g=Kl(a,b,c,d,e,f,k),2==l.T()?g.b=l:l.b&&2==l.b.T()&&(g.b=l.b,l.b=null));g.b&&(g.b.b=null);Zj(a.a,h,g)}}else g=Kl(a,b,c,d,e,f,k),a.a.set(h,g);return g}function Jl(a,b){a.Z().src=b};function Ml(a){a=a||{};var b=void 0!==a.projection?a.projection:"EPSG:3857",c;if(void 0!==a.tileGrid)c=a.tileGrid;else{c={extent:$c(b),maxZoom:a.maxZoom,minZoom:a.minZoom,tileSize:a.tileSize};var d={};pa(d,void 0!==c?c:{});void 0===d.extent&&(d.extent=Hb("EPSG:3857").G());d.resolutions=ad(d.extent,d.maxZoom,d.tileSize);delete d.maxZoom;c=new Mc(d)}Il.call(this,{attributions:a.attributions,cacheSize:a.cacheSize,crossOrigin:a.crossOrigin,logo:a.logo,opaque:a.opaque,projection:b,reprojectionErrorThreshold:a.reprojectionErrorThreshold, + tileGrid:c,tileLoadFunction:a.tileLoadFunction,tilePixelRatio:a.tilePixelRatio,tileUrlFunction:a.tileUrlFunction,url:a.url,urls:a.urls,wrapX:void 0!==a.wrapX?a.wrapX:!0})}B(Ml,Il);function Nl(a,b){var c=[];Object.keys(b).forEach(function(a){null!==b[a]&&void 0!==b[a]&&c.push(a+"="+encodeURIComponent(b[a]))});var d=c.join("&");a=a.replace(/[?&]$/,"");a=-1===a.indexOf("?")?a+"?":a+"&";return a+d};function Ol(a){a=a||{};var b;void 0!==a.attributions?b=a.attributions:b=[Pl];Ml.call(this,{attributions:b,cacheSize:a.cacheSize,crossOrigin:void 0!==a.crossOrigin?a.crossOrigin:"anonymous",opaque:void 0!==a.opaque?a.opaque:!0,maxZoom:void 0!==a.maxZoom?a.maxZoom:19,reprojectionErrorThreshold:a.reprojectionErrorThreshold,tileLoadFunction:a.tileLoadFunction,url:void 0!==a.url?a.url:"https://{a-c}.tile.openstreetmap.org/{z}/{x}/{y}.png",wrapX:a.wrapX})}B(Ol,Ml);var Pl=new bd({html:'© <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors.'});function Ql(a){a=a||{};Il.call(this,{attributions:a.attributions,cacheSize:a.cacheSize,crossOrigin:a.crossOrigin,logo:a.logo,projection:a.projection,reprojectionErrorThreshold:a.reprojectionErrorThreshold,tileGrid:a.tileGrid,tileLoadFunction:a.tileLoadFunction,url:a.url,urls:a.urls,wrapX:void 0!==a.wrapX?a.wrapX:!0});this.B=a.params||{};this.ba=db()}B(Ql,Il);Ql.prototype.pb=function(a){return a}; + Ql.prototype.f=function(a,b,c){var d=this.tileGrid;d||(d=this.sa(c));if(!(d.b.length<=a[0])){var e=Qc(d,a,this.ba),f=Lc(Wc(d,a[0]),this.g);1!=b&&(f=Kc(f,b,this.g));d={F:"image",FORMAT:"PNG32",TRANSPARENT:!0};pa(d,this.B);var g=this.urls;g?(c=c.ya.split(":").pop(),d.SIZE=f[0]+","+f[1],d.BBOX=e.join(","),d.BBOXSR=c,d.IMAGESR=c,d.DPI=Math.round(d.DPI?d.DPI*b:90*b),a=1==g.length?g[0]:g[la((a[1]<<a[0])+a[2],g.length)],b=a.replace(/MapServer\/?$/,"MapServer/export").replace(/ImageServer\/?$/,"ImageServer/exportImage"), + b==a&&L(!1,50),d=Nl(b,d)):d=void 0;return d}};function Rl(a){this.j=this.l=this.f=null;this.i=void 0!==a.fill?a.fill:null;this.M=[0,0];this.b=a.points;this.c=void 0!==a.radius?a.radius:a.radius1;this.g=void 0!==a.radius2?a.radius2:this.c;this.h=void 0!==a.angle?a.angle:0;this.a=void 0!==a.stroke?a.stroke:null;this.D=this.Y=this.u=null;var b=a.atlasManager,c="",d="",e=0,f=null,g,h=0;this.a&&(g=nd(this.a.a),h=this.a.c,void 0===h&&(h=1),f=this.a.b,pe||(f=null),d=this.a.g,void 0===d&&(d="round"),c=this.a.f,void 0===c&&(c="round"),e=this.a.h,void 0=== + e&&(e=10));var k=2*(this.c+h)+1,c={strokeStyle:g,jb:h,size:k,lineCap:c,lineDash:f,lineJoin:d,miterLimit:e};if(void 0===b){var l=Md(k,k);this.l=l.canvas;b=k=this.l.width;this.Qc(c,l,0,0);this.i?this.j=this.l:(l=Md(c.size,c.size),this.j=l.canvas,this.Pc(c,l,0,0))}else k=Math.round(k),(d=!this.i)&&(l=this.Pc.bind(this,c)),e=this.a?qh(this.a):"-",f=this.i?rh(this.i):"-",this.f&&e==this.f[1]&&f==this.f[2]&&this.c==this.f[3]&&this.g==this.f[4]&&this.h==this.f[5]&&this.b==this.f[6]||(this.f=["r"+e+f+(void 0!== + this.c?this.c.toString():"-")+(void 0!==this.g?this.g.toString():"-")+(void 0!==this.h?this.h.toString():"-")+(void 0!==this.b?this.b.toString():"-"),e,f,this.c,this.g,this.h,this.b]),l=b.add(this.f[0],k,k,this.Qc.bind(this,c),l),this.l=l.image,this.M=[l.offsetX,l.offsetY],b=l.image.width,d?this.j=l.Nd:this.j=this.l;this.u=[k/2,k/2];this.Y=[k,k];this.D=[b,b];oh.call(this,{opacity:1,rotateWithView:void 0!==a.rotateWithView?a.rotateWithView:!1,rotation:void 0!==a.rotation?a.rotation:0,scale:1,snapToPixel:void 0!== + a.snapToPixel?a.snapToPixel:!0})}B(Rl,oh);n=Rl.prototype;n.eb=function(){return this.u};n.ub=function(){return this.j};n.Z=function(){return this.l};n.Ob=function(){return this.D};n.ib=function(){return 2};n.pa=function(){return this.M};n.Ka=function(){return this.Y};n.Vb=I;n.load=I;n.bc=I; + n.Qc=function(a,b,c,d){var e;b.setTransform(1,0,0,1,0,0);b.translate(c,d);b.beginPath();this.g!==this.c&&(this.b*=2);for(c=0;c<=this.b;c++)d=2*c*Math.PI/this.b-Math.PI/2+this.h,e=0===c%2?this.c:this.g,b.lineTo(a.size/2+e*Math.cos(d),a.size/2+e*Math.sin(d));this.i&&(b.fillStyle=qd(this.i.b),b.fill());this.a&&(b.strokeStyle=a.strokeStyle,b.lineWidth=a.jb,a.lineDash&&b.setLineDash(a.lineDash),b.lineCap=a.lineCap,b.lineJoin=a.lineJoin,b.miterLimit=a.miterLimit,b.stroke());b.closePath()}; + n.Pc=function(a,b,c,d){b.setTransform(1,0,0,1,0,0);b.translate(c,d);b.beginPath();this.g!==this.c&&(this.b*=2);var e;for(c=0;c<=this.b;c++)e=2*c*Math.PI/this.b-Math.PI/2+this.h,d=0===c%2?this.c:this.g,b.lineTo(a.size/2+d*Math.cos(e),a.size/2+d*Math.sin(e));b.fillStyle=kh;b.fill();this.a&&(b.strokeStyle=a.strokeStyle,b.lineWidth=a.jb,a.lineDash&&b.setLineDash(a.lineDash),b.stroke());b.closePath()};y("ol.format.GeoJSON",Gk);Gk.prototype.readFeatures=Gk.prototype.a;Gk.prototype.readFeature=Gk.prototype.g;y("ol.format.EsriJSON",Ak);Ak.prototype.readFeatures=Ak.prototype.a;Ak.prototype.readFeature=Ak.prototype.g;y("ol.style.Style",yh);y("ol.style.Circle",ph);y("ol.style.RegularShape",Rl);y("ol.style.Fill",sh);y("ol.style.Stroke",xh);y("ol.style.Icon",Lk); + y("ol.style.Text",function(a){a=a||{};this.b=a.font;this.h=a.rotation;this.g=a.rotateWithView;this.l=a.scale;this.j=a.text;this.C=a.textAlign;this.K=a.textBaseline;this.f=void 0!==a.fill?a.fill:new sh({color:"#333"});this.i=void 0!==a.stroke?a.stroke:null;this.a=void 0!==a.offsetX?a.offsetX:0;this.c=void 0!==a.offsetY?a.offsetY:0});y("ol.View",uc);uc.prototype.on=uc.prototype.Y;uc.prototype.getZoom=uc.prototype.rd;uc.prototype.setZoom=uc.prototype.ye;uc.prototype.getCenter=uc.prototype.qa; + uc.prototype.setCenter=uc.prototype.xa;uc.prototype.calculateExtent=uc.prototype.lc;uc.prototype.getProjection=uc.prototype.ia;uc.prototype.fit=uc.prototype.md;y("ol.control.defaults",ee);y("ol.layer.Tile",W);W.prototype.getVisible=W.prototype.gb;W.prototype.setVisible=W.prototype.Cc;W.prototype.getZIndex=W.prototype.Yb;W.prototype.setZIndex=W.prototype.Dc;W.prototype.getOpacity=W.prototype.Xb;W.prototype.setOpacity=W.prototype.Bc;W.prototype.getSource=W.prototype.da;W.prototype.setSource=W.prototype.$b; + W.prototype.on=W.prototype.Y;y("ol.layer.Vector",Y);Y.prototype.getVisible=Y.prototype.gb;Y.prototype.setVisible=Y.prototype.Cc;Y.prototype.getSource=Y.prototype.da;Y.prototype.setStyle=Y.prototype.v;Y.prototype.getZIndex=Y.prototype.Yb;Y.prototype.setZIndex=Y.prototype.Dc;Y.prototype.getOpacity=Y.prototype.Xb;Y.prototype.setOpacity=Y.prototype.Bc;Y.prototype.getSource=Y.prototype.da;Y.prototype.setSource=Y.prototype.$b;Y.prototype.on=Y.prototype.Y;y("ol.source.OSM",Ol);Ol.prototype.refresh=Ol.prototype.Ja; + y("ol.source.XYZ",Ml);Ml.prototype.refresh=Ml.prototype.Ja;Ml.prototype.setUrl=Ml.prototype.s;Ml.prototype.refresh=Ml.prototype.Ja;y("ol.Map",Z);Z.prototype.on=Z.prototype.Y;Z.prototype.getTarget=Z.prototype.Wb;Z.prototype.getTargetElement=Z.prototype.Ra;Z.prototype.getView=Z.prototype.U;Z.prototype.addOverlay=Z.prototype.fd;Z.prototype.addLayer=Z.prototype.ed;Z.prototype.removeLayer=Z.prototype.te;Z.prototype.getEventPixel=Z.prototype.uc;Z.prototype.hasFeatureAtPixel=Z.prototype.Md; + Z.prototype.getSize=Z.prototype.Ta;Z.prototype.updateSize=Z.prototype.yb;Z.prototype.forEachFeatureAtPixel=Z.prototype.od;Z.prototype.addInteraction=Z.prototype.dd;Z.prototype.removeInteraction=Z.prototype.se;Z.prototype.beforeRender=Z.prototype.oa;Z.prototype.addControl=Z.prototype.cd;Z.prototype.once=Z.prototype.hd;Z.prototype.renderSync=Z.prototype.we;y("ol.source.Vector",Xk);Xk.prototype.getFeatures=Xk.prototype.pd;Xk.prototype.getExtent=Xk.prototype.G;Xk.prototype.refresh=Xk.prototype.Ja; + Xk.prototype.addFeatures=Xk.prototype.Gb;Xk.prototype.addFeature=Xk.prototype.Fb;Xk.prototype.clear=Xk.prototype.clear;Xk.prototype.forEachFeature=Xk.prototype.nd;Xk.prototype.refresh=Xk.prototype.Ja;y("ol.source.TileArcGISRest",Ql);Ql.prototype.refresh=Ql.prototype.Ja;y("ol.Overlay",gk);gk.prototype.setPosition=gk.prototype.Ac;y("ol.Feature",kk);kk.prototype.getProperties=kk.prototype.Ea;kk.prototype.setProperties=kk.prototype.l;kk.prototype.getGeometry=kk.prototype.S;y("ol.geom.Point",jc); + jc.prototype.transform=jc.prototype.transform;jc.prototype.getCoordinates=jc.prototype.za;jc.prototype.getExtent=jc.prototype.G;y("ol.geom.Polygon",qc);qc.prototype.getCoordinates=qc.prototype.za;qc.prototype.getExtent=qc.prototype.G;qc.prototype.transform=qc.prototype.transform;y("ol.geom.LineString",wk);wk.prototype.getCoordinates=wk.prototype.za;wk.prototype.getExtent=wk.prototype.G;wk.prototype.transform=wk.prototype.transform;y("ol.proj.Projection",Eb);Eb.prototype.getCode=Eb.prototype.l; + y("ol.interaction.Draw",el);el.prototype.on=el.prototype.Y;y("ol.animation.pan",Dc);y("ol.control.FullScreen",Xd); + return OPENLAYERS.ol; + })); + + + /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }()))) + +/***/ }, +/* 7 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Created by gavorhes on 11/3/2015. + */ + "use strict"; + var mapMoveCls_1 = __webpack_require__(8); + /** + * The single map move object catch is that it is common to multimap pages + * @type {MapMoveCls} + */ + exports.mapMove = new mapMoveCls_1.default(); + Object.defineProperty(exports, "__esModule", { value: true }); + exports.default = exports.mapMove; + + +/***/ }, +/* 8 */ +/***/ function(module, exports, __webpack_require__) { + + "use strict"; + var __extends = (this && this.__extends) || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + var mapInteractionBase_1 = __webpack_require__(9); + var checkDefined = __webpack_require__(10); + var provide_1 = __webpack_require__(4); + var makeGuid_1 = __webpack_require__(11); + var $ = __webpack_require__(3); + var nm = provide_1.default('olHelpers'); + /** + * assists with map move interactions, trigger callback functions + * @augments MapInteractionBase + */ + var MapMoveCls = (function (_super) { + __extends(MapMoveCls, _super); + /** + * constructor called implicitly + */ + function MapMoveCls() { + _super.call(this, 'map move'); + this._arrLyrRequest = []; + this._arrLyrTimeout = []; + this._arrLayer = []; + this._lookupLayer = {}; + this._mapMoveCallbacks = []; + this._mapMoveCallbacksLookup = {}; + this._mapMoveCallbackDelays = []; + this._mapMoveCallbackContext = []; + this._mapMoveCallbackTimeout = []; + this._mapExtent = undefined; + this._zoomLevel = undefined; + } + /** + * initialize the map move object + * @param theMap - the ol map + */ + MapMoveCls.prototype.init = function (theMap) { + var _this = this; + _super.prototype.init.call(this, theMap); + this.map.getView().on(['change:center', 'change:resolution'], function (e) { + _this._updateMapExtent(); + // trigger the layer updates + for (var i = 0; i < _this._arrLayer.length; i++) { + _this.triggerLyrLoad(_this._arrLayer[i], i, e.type); + } + // trigger the map callbacks + for (var i = 0; i < _this._mapMoveCallbacks.length; i++) { + _this.triggerMoveCallback(i, e.type); + } + }); + }; + MapMoveCls.prototype._updateMapExtent = function () { + var theView = this.map.getView(); + this._zoomLevel = theView.getZoom(); + var extentArray = theView.calculateExtent(this.map.getSize()); + this._mapExtent = { + minX: extentArray[0], + minY: extentArray[1], + maxX: extentArray[2], + maxY: extentArray[3] + }; + }; + Object.defineProperty(MapMoveCls.prototype, "mapExtent", { + /** + * return the map extent + */ + get: function () { + if (!this._mapExtent) { + this._updateMapExtent(); + } + return this._mapExtent; + }, + enumerable: true, + configurable: true + }); + /** + * Trigger the layer load + * @param lyr the layer being acted on + * @param index index of the layer + * @param eventType the event triggering the load, as 'change:center' or 'change:resolution' + */ + MapMoveCls.prototype.triggerLyrLoad = function (lyr, index, eventType) { + if (checkDefined.undefinedOrNull(lyr) && checkDefined.undefinedOrNull(index)) { + throw 'need to define lyr or index'; + } + else if (checkDefined.definedAndNotNull(lyr) && checkDefined.undefinedOrNull(index)) { + index = this._arrLayer.indexOf(lyr); + } + else if (checkDefined.undefinedOrNull(lyr) && checkDefined.definedAndNotNull(index)) { + lyr = this._arrLayer[index]; + } + // clear the timeout + if (this._arrLyrTimeout[index] != null) { + clearTimeout(this._arrLyrTimeout[index]); + this._arrLyrTimeout[index] = null; + } + // abort if necessary and clear the request + if (this._arrLyrRequest[index] != null && this._arrLyrRequest[index] != 4) { + this._arrLyrRequest[index].abort(); + this._arrLyrRequest[index] = null; + } + // dummy callback used if before load returns false + var callbackFunc = function () { }; + if (lyr.mapMoveBefore(this._zoomLevel, eventType)) { + lyr.mapMoveMakeGetParams(this._mapExtent, this._zoomLevel); + var _this_1 = this; + callbackFunc = function () { + function innerFunction(theLayer, theIndex) { + var _innerThis = this; + this._arrLyrRequest[theIndex] = $.get(theLayer.url, theLayer.mapMoveParams, function (d) { + /** + * @type {LayerBaseVector} + */ + theLayer.mapMoveCallback(d); + theLayer.loadCallback(); + }, 'json').fail(function (jqXHR) { + if (jqXHR.statusText != 'abort') { + console.log('failed'); + console.log(theLayer.url); + console.log(theLayer.mapMoveParams); + } + }).always(function () { + _innerThis._arrLyrTimeout[theIndex] = null; + _innerThis._arrLyrRequest[theIndex] = null; + }); + } + innerFunction.call(_this_1, lyr, index); + }; + } + else { + lyr.clear(); + } + this._arrLyrTimeout[index] = setTimeout(callbackFunc, lyr.onDemandDelay); + }; + /** + * trigger the map move call back at the given index + * @param ind - the index of the layer + * @param eventType=undefined the event triggering the load as 'change:center' or 'change:resolution' + * @param functionId=undefined the function id used to reference the added callback function + */ + MapMoveCls.prototype.triggerMoveCallback = function (ind, eventType, functionId) { + if (typeof ind == 'undefined' && typeof functionId == 'undefined') { + throw 'either the function index or the id must be defined'; + } + if (typeof ind !== 'number') { + ind = this._mapMoveCallbacks.indexOf(this._mapMoveCallbacksLookup[functionId]); + } + if (ind < 0) { + console.log('function not found'); + return; + } + // clear the timeout + if (this._mapMoveCallbackTimeout[ind] != null) { + clearTimeout(this._mapMoveCallbackTimeout[ind]); + this._mapMoveCallbackTimeout[ind] = null; + } + var ctx = this._mapMoveCallbackContext[ind]; + var theFunc = this._mapMoveCallbacks[ind]; + var _this = this; + var f = function () { + if (ctx !== null) { + theFunc.call(ctx, _this._mapExtent, _this._zoomLevel, eventType); + } + else { + theFunc(_this._mapExtent, _this._zoomLevel, eventType); + } + }; + this._mapMoveCallbackTimeout[ind] = setTimeout(f, this._mapMoveCallbackDelays[ind]); + }; + /** + * Add a layer to the interaction + * @param lyr - layer to add + * @param triggerOnAdd - if the layer should be loaded on add + */ + MapMoveCls.prototype.addVectorLayer = function (lyr, triggerOnAdd) { + if (triggerOnAdd === void 0) { triggerOnAdd = true; } + if (this._arrLayer.indexOf(lyr) > -1) { + console.log('already added ' + lyr.name + ' to map move'); + return; + } + this._checkInit(); + this._arrLyrRequest.push(null); + this._arrLyrTimeout.push(null); + this._arrLayer.push(lyr); + this._lookupLayer[lyr.id] = lyr; + triggerOnAdd = typeof triggerOnAdd == 'boolean' ? triggerOnAdd : true; + if (triggerOnAdd) { + if (this._mapExtent === undefined) { + this._updateMapExtent(); + } + this.triggerLyrLoad(lyr, this._arrLayer.length - 1); + } + }; + /** + * add a callback to the map move event + * @param func - callback function + * @param context - the context to use for this function + * @param delay=50 the delay before call load + * @param triggerOnAdd if the layer should be loaded on add to mapMove + * @param functionId optional id to reference the function later for outside triggering + */ + MapMoveCls.prototype.addCallback = function (func, context, delay, triggerOnAdd, functionId) { + if (this._mapMoveCallbacks.indexOf(func) > -1) { + console.log('this function already added to map move'); + return; + } + this._checkInit(); + if (!functionId) { + functionId = makeGuid_1.default(); + } + this._mapMoveCallbacks.push(func); + this._mapMoveCallbacksLookup[functionId] = functionId; + this._mapMoveCallbackDelays.push(typeof delay == 'number' ? delay : 50); + this._mapMoveCallbackContext.push(checkDefined.definedAndNotNull(context) ? context : null); + this._mapMoveCallbackTimeout.push(null); + triggerOnAdd = typeof triggerOnAdd == 'boolean' ? triggerOnAdd : true; + if (triggerOnAdd) { + if (this._mapExtent === undefined) { + this._updateMapExtent(); + } + this.triggerMoveCallback(this._mapMoveCallbacks.length - 1); + } + }; + return MapMoveCls; + }(mapInteractionBase_1.default)); + exports.MapMoveCls = MapMoveCls; + nm.MapMoveCls = MapMoveCls; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.default = MapMoveCls; + + +/***/ }, +/* 9 */ +/***/ function(module, exports, __webpack_require__) { + + "use strict"; + /** + * Created by gavorhes on 12/8/2015. + */ + var provide_1 = __webpack_require__(4); + var nm = provide_1.default('olHelpers'); + /** + * base interaction + */ + var MapInteractionBase = (function () { + /** + * map interaction base + * @param subtype - the interaction subtype + */ + function MapInteractionBase(subtype) { + this._map = null; + this._initialized = false; + this._subtype = subtype; + } + /** + * base initializer, returns true for already initialized + * @param theMap - the ol Map + * @returns true for already initialized + */ + MapInteractionBase.prototype.init = function (theMap) { + if (!this._initialized) { + this._map = theMap; + this._initialized = true; + } + }; + Object.defineProperty(MapInteractionBase.prototype, "map", { + /** + * get reference to the ol map object + * @returns {ol.Map} the map object + */ + get: function () { + return this._map; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MapInteractionBase.prototype, "initialized", { + /** + * get if is initialized + * @returns {boolean} is initialized + */ + get: function () { + return this._initialized; + }, + enumerable: true, + configurable: true + }); + /** + * Check the initialization status and throw exception if not valid yet + * @protected + */ + MapInteractionBase.prototype._checkInit = function () { + if (!this.initialized) { + var msg = this._subtype + " object not initialized"; + alert(msg); + console.log(msg); + throw msg; + } + }; + /** + * Check the initialization status and throw exception if not valid yet + */ + MapInteractionBase.prototype.checkInit = function () { + this._checkInit(); + }; + return MapInteractionBase; + }()); + exports.MapInteractionBase = MapInteractionBase; + nm.MapInteractionBase = MapInteractionBase; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.default = MapInteractionBase; + + +/***/ }, +/* 10 */ +/***/ function(module, exports, __webpack_require__) { + + "use strict"; + var provide_1 = __webpack_require__(4); + var nm = provide_1.default('util.checkDefined'); + /** + * check if the input is undefined or null + * @param input - input pointer + * @returns true undefined or null + */ + function undefinedOrNull(input) { + "use strict"; + return (typeof input === 'undefined' || input === null); + } + exports.undefinedOrNull = undefinedOrNull; + nm.undefinedOrNull = undefinedOrNull; + /** + * check if the input is defined and not null + * @param input - input pointer + * @returns true defined and not null + */ + function definedAndNotNull(input) { + "use strict"; + return !(undefinedOrNull(input)); + } + exports.definedAndNotNull = definedAndNotNull; + nm.definedAndNotNull = definedAndNotNull; + + +/***/ }, +/* 11 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Created by gavorhes on 11/3/2015. + */ + "use strict"; + var provide_1 = __webpack_require__(4); + var nm = provide_1.default('util'); + /** + * guids are used to uniquely identify groups and features + * @returns {string} a new guid + */ + function makeGuid() { + return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx' + .replace(/[xy]/g, function (c) { + var r = Math.random() * 16 | 0, v = c == 'x' ? r : r & 0x3 | 0x8; + return v.toString(16); + }); + } + nm.makeGuid = makeGuid; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.default = makeGuid; + + +/***/ }, +/* 12 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Created by gavorhes on 11/3/2015. + */ + "use strict"; + var mapPopupCls_1 = __webpack_require__(13); + /** + * The single popup object catch is that it is common to multimap pages + * @type {MapPopupCls} + */ + exports.mapPopup = new mapPopupCls_1.default(); + Object.defineProperty(exports, "__esModule", { value: true }); + exports.default = exports.mapPopup; + + +/***/ }, +/* 13 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Created by gavorhes on 11/3/2015. + */ + "use strict"; + var __extends = (this && this.__extends) || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + var mapInteractionBase_1 = __webpack_require__(9); + var provide_1 = __webpack_require__(4); + var custom_ol_1 = __webpack_require__(5); + var $ = __webpack_require__(3); + var nm = provide_1.default('olHelpers'); + var FeatureLayerProperties = (function () { + /** + * + * @param feature the feature + * @param layer - the layer in the popup + * @param layerIndex - index of the layer + * @param selectionLayer - the ol selection layer + * @param [esriLayerName=undefined] - esri layer name + */ + function FeatureLayerProperties(feature, layer, layerIndex, selectionLayer, esriLayerName) { + this.feature = feature; + this.layer = layer; + this.layerIndex = layerIndex; + this.selectionLayer = selectionLayer; + this.popupContent = ''; + this.esriLayerName = typeof esriLayerName == 'string' ? esriLayerName : undefined; + } + Object.defineProperty(FeatureLayerProperties.prototype, "layerName", { + get: function () { + if (typeof this.esriLayerName == 'string') { + return this.esriLayerName; + } + else { + return this.layer.name; + } + }, + enumerable: true, + configurable: true + }); + return FeatureLayerProperties; + }()); + exports.FeatureLayerProperties = FeatureLayerProperties; + /** + * map popup class + * @augments MapInteractionBase + */ + var MapPopupCls = (function (_super) { + __extends(MapPopupCls, _super); + /** + * Definition for openlayers style function + * @callback olStyleFunction + * ¶m feature the openlayers vector feature + * $param + */ + /** + * map popup constructor + */ + function MapPopupCls() { + _super.call(this, 'map popup'); + this._arrPopupLayerIds = []; + this._arrPopupLayerNames = []; + this._arrPopupLayers = []; + this._arrPopupOlLayers = []; + this._arrPopupContentFunction = []; + this._$popupContainer = undefined; + this._$popupContent = undefined; + this._$popupCloser = undefined; + this._popupOverlay = undefined; + this._selectionLayers = []; + this._selectionLayerLookup = {}; + this._mapClickFunctions = []; + //let a = function($jqueryContent){console.log($jqueryContent)}; + //this._popupChangedLookup = {'a': a}; + this._popupChangedFunctions = []; + this._esriMapServiceLayers = []; + this._popupOpen = false; + this._popupCoordinate = null; + this._passThroughLayerFeatureArray = []; + this._currentPopupIndex = -1; + this._popupContentLength = 0; + } + /** + * map popup initialization + * @param {ol.Map} theMap - the ol map + */ + MapPopupCls.prototype.init = function (theMap) { + var _this = this; + _super.prototype.init.call(this, theMap); + var $map; + var target = this.map.getTarget(); + if (typeof target == 'string') { + $map = $('#' + target); + } + else { + $map = $(target); + } + $map.append('<div class="ol-popup">' + + '<span class="ol-popup-closer">X</span>' + + '<div class="popup-content"></div>' + + '</div>'); + this._$popupContainer = $map.find('.ol-popup'); + this._$popupContent = $map.find('.popup-content'); + this._$popupCloser = $map.find('.ol-popup-closer'); + this._popupOverlay = new custom_ol_1.ol.Overlay({ element: this._$popupContainer[0], autoPan: true, + autoPanAnimation: { + duration: 250, + source: theMap.getView().getCenter() + } }); + this._map.addOverlay(this._popupOverlay); + this._$popupCloser.click(function (evt) { + _this.closePopup(); + }); + // display popup on click + this._map.on('singleclick', function (evt) { + _this.closePopup(); + _this._popupCoordinate = evt['coordinate']; + // esri map service layers + if (_this._esriMapServiceLayers.length > 0) { + var queryParams = { + geometry: evt['coordinate'].join(','), + geometryType: 'esriGeometryPoint', + layers: 'all', + sr: _this._map.getView().getProjection().getCode().split(':')[1], + mapExtent: _this._map.getView().calculateExtent(_this._map.getSize()).join(','), + imageDisplay: _this._map.getSize().join(',') + ',96', + returnGeometry: true, + tolerance: 15, + f: 'pjson' + }; + for (var _i = 0, _a = _this._esriMapServiceLayers; _i < _a.length; _i++) { + var l = _a[_i]; + l.getPopupInfo(queryParams); + } + } + var layerFeatureObjectArray = _this._featuresAtPixel(evt['pixel']); + _this._passThroughLayerFeatureArray = []; + _this._currentPopupIndex = -1; + for (var i = 0; i < layerFeatureObjectArray.length; i++) { + var featObj = layerFeatureObjectArray[i]; + var props = featObj.feature.getProperties(); + var popupContentResponse = _this._arrPopupContentFunction[featObj.layerIndex](props, _this._$popupContent); + //skip if return was false + if (popupContentResponse === false) { + } + else if (typeof popupContentResponse == 'string') { + featObj.popupContent = popupContentResponse; + _this._passThroughLayerFeatureArray.push(featObj); + } + else { + featObj.selectionLayer.getSource().addFeature(featObj.feature); + } + } + _this._popupContentLength = _this._passThroughLayerFeatureArray.length; + _this._currentPopupIndex = -1; + var popupHtml = '<div class="ol-popup-nav">'; + popupHtml += '<span class="previous-popup ol-popup-nav-arrow">◀</span>'; + popupHtml += '<span class="next-popup ol-popup-nav-arrow">▶</span>'; + popupHtml += "<span class=\"current-popup-item-number\" style=\"font-weight: bold;\"></span>"; + popupHtml += "<span> of </span>"; + popupHtml += "<span class=\"popup-content-length\" style=\"font-weight: bold;\">" + _this._popupContentLength + "</span>"; + popupHtml += "<span> - </span>"; + popupHtml += "<span class=\"current-popup-layer-name\"></span>"; + popupHtml += '</div>'; + popupHtml += '<div class="ol-popup-inner">'; + popupHtml += '</div>'; + _this._$popupContent.html(popupHtml); + _this._$popupContent.find('.previous-popup').click(function () { + if (_this._popupContentLength == 1) { + return; + } + if (_this._currentPopupIndex == 0) { + _this._currentPopupIndex = _this._popupContentLength - 1; + } + else { + _this._currentPopupIndex--; + } + _this._triggerFeatSelect(); + }); + var nextPopup = _this._$popupContent.find('.next-popup'); + nextPopup.click(function () { + if (_this._popupContentLength == 1 && _this._currentPopupIndex > -1) { + return; + } + if (_this._currentPopupIndex == _this._popupContentLength - 1) { + _this._currentPopupIndex = 0; + } + else { + _this._currentPopupIndex++; + } + _this._triggerFeatSelect(); + }); + if (_this._popupContentLength > 0) { + nextPopup.trigger('click'); + _this._popupOverlay.setPosition(_this._popupCoordinate); + _this._$popupContent.scrollTop(0); + _this._popupOpen = true; + } + }); + //change mouse cursor when over marker + this._map.on('pointermove', function (evt) { + if (evt['dragging']) { + return; + } + var pixel = _this.map.getEventPixel(evt['originalEvent']); + var hit = _this.map.hasFeatureAtPixel(pixel, function (lyrCandidate) { + for (var _i = 0, _a = _this._arrPopupOlLayers; _i < _a.length; _i++) { + var olLayer = _a[_i]; + if (lyrCandidate == olLayer) { + return true; + } + } + return false; + }); + var mapElement = _this.map.getTargetElement(); + mapElement.style.cursor = hit ? 'pointer' : ''; + }); + return true; + }; + /** + * helper to select features + * @private + */ + MapPopupCls.prototype._triggerFeatSelect = function () { + var $currentPopupItemNumber = this._$popupContent.find('.current-popup-item-number'); + var $innerPopup = this._$popupContent.find('.ol-popup-inner'); + var $layerNameSpan = this._$popupContent.find('.current-popup-layer-name'); + this.clearSelection(); + var lyrFeatObj = this._passThroughLayerFeatureArray[this._currentPopupIndex]; + $currentPopupItemNumber.html((this._currentPopupIndex + 1).toFixed()); + $layerNameSpan.html(lyrFeatObj.layerName); + $innerPopup.html(lyrFeatObj.popupContent); + lyrFeatObj.selectionLayer.getSource().addFeature(lyrFeatObj.feature); + for (var _i = 0, _a = this._popupChangedFunctions; _i < _a.length; _i++) { + var f = _a[_i]; + f(this._$popupContent); + } + }; + /** + * + * @param feature - the ol feature + * @param {LayerEsriMapServer} lyr - the map server layer + * @param {string} popupContent - popup content + * @param {string} esriName - esri layer name + */ + MapPopupCls.prototype.addMapServicePopupContent = function (feature, lyr, popupContent, esriName) { + var featLayerObject = new FeatureLayerProperties(feature, lyr, this._popupContentLength, this._selectionLayerLookup[lyr.id], esriName); + featLayerObject.popupContent = popupContent; + this._passThroughLayerFeatureArray.push(featLayerObject); + this._popupContentLength++; + $('.popup-content-length').html(this._popupContentLength.toFixed()); + if (!this._popupOpen) { + this._$popupContent.find('.next-popup').trigger('click'); + this._popupOverlay.setPosition(this._popupCoordinate); + this._$popupContent.scrollTop(0); + this._popupOpen = true; + } + }; + /** + * + * @param pixel - the ol pixel + * @returns feature layer properties + * @private + */ + MapPopupCls.prototype._featuresAtPixel = function (pixel) { + var _this = this; + var layerFeatureObjectArray = []; + this.map.forEachFeatureAtPixel(pixel, function (feature, layer) { + var lyrIndex = _this._arrPopupOlLayers.indexOf(layer); + if (lyrIndex > -1) { + layerFeatureObjectArray.push(new FeatureLayerProperties(feature, _this._arrPopupLayers[lyrIndex], lyrIndex, _this._selectionLayers[lyrIndex])); + } + }); + return layerFeatureObjectArray; + }; + MapPopupCls.prototype.closePopup = function () { + this._checkInit(); + this._popupOpen = false; + this._popupOverlay.setPosition(undefined); + this._$popupCloser[0].blur(); + this.clearSelection(); + this._$popupContent.html(''); + return false; + }; + ; + /** + * + * @param chgFunction - popup change function + */ + MapPopupCls.prototype.addPopupChangedFunction = function (chgFunction) { + this._popupChangedFunctions.push(chgFunction); + }; + /** + * + * @param {LayerBase|*} lyr - the layer being acted on + * @param {object} [selectionStyle={}] the selection style configuration + * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color + * @param {number} [selectionStyle.width=10] the selection width for linear features + * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function + * @returns the new selection layer + * @private + */ + MapPopupCls.prototype._addPopupLayer = function (lyr, selectionStyle) { + this._checkInit(); + selectionStyle = selectionStyle || {}; + selectionStyle.color = selectionStyle.color || 'rgba(255,170,0,0.5)'; + selectionStyle.width = selectionStyle.width || 10; + var theStyle; + if (selectionStyle.olStyle) { + theStyle = selectionStyle.olStyle; + } + else { + theStyle = new custom_ol_1.ol.style.Style({ + stroke: new custom_ol_1.ol.style.Stroke({ + color: selectionStyle.color, + width: selectionStyle.width + }), + image: new custom_ol_1.ol.style.Circle({ + radius: 7, + fill: new custom_ol_1.ol.style.Fill({ color: selectionStyle.color }), + stroke: new custom_ol_1.ol.style.Stroke({ color: selectionStyle.color, width: 1 }) + }), + fill: new custom_ol_1.ol.style.Fill({ + color: selectionStyle.color + }) + }); + } + var selectionLayer = new custom_ol_1.ol.layer.Vector({ + source: new custom_ol_1.ol.source.Vector(), + style: theStyle, + zIndex: 100 + }); + this._selectionLayers.push(selectionLayer); + this._selectionLayerLookup[lyr.id] = selectionLayer; + this.map.addLayer(selectionLayer); + return selectionLayer; + }; + /** + * Add popup to the map + * @param {LayerBase|*} lyr The layer that the popup with act on + * @param {popupCallback} popupContentFunction - popup content function that makes popup info + * @param {object} [selectionStyle={}] the selection style configuration + * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color + * @param {number} [selectionStyle.width=10] the selection width for linear features + * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function + * @returns {object} a reference to the ol selection layer + */ + MapPopupCls.prototype.addVectorPopup = function (lyr, popupContentFunction, selectionStyle) { + var selectionLayer = this._addPopupLayer(lyr, selectionStyle); + this._arrPopupLayerIds.push(lyr.id); + this._arrPopupLayerNames.push(lyr.name); + this._arrPopupLayers.push(lyr); + this._arrPopupOlLayers.push(lyr.olLayer); + this._arrPopupContentFunction.push(popupContentFunction); + return selectionLayer; + }; + ; + /** + * + * @param {LayerBase} lyr - layer + */ + MapPopupCls.prototype.removeVectorPopup = function (lyr) { + var idx = this._arrPopupLayerIds.indexOf(lyr.id); + if (idx > -1) { + this._arrPopupLayerIds.splice(idx, 1); + this._arrPopupLayerNames.splice(idx, 1); + this._arrPopupLayers.splice(idx, 1); + this._arrPopupOlLayers.splice(idx, 1); + this._arrPopupContentFunction.splice(idx, 1); + this._selectionLayers.splice(idx, 1); + delete this._selectionLayerLookup[lyr.id]; + } + }; + /** + * + * @param {LayerEsriMapServer} lyr - map server layer + * @param {object} [selectionStyle={}] the selection style configuration + * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color + * @param {number} [selectionStyle.width=10] the selection width for linear features + * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function + * @returns {object} a reference to the ol selection layer + */ + MapPopupCls.prototype.addMapServicePopup = function (lyr, selectionStyle) { + var selectionLayer = this._addPopupLayer(lyr, selectionStyle); + this._esriMapServiceLayers.push(lyr); + return selectionLayer; + }; + MapPopupCls.prototype.clearSelection = function () { + this._checkInit(); + for (var i = 0; i < this._selectionLayers.length; i++) { + this._selectionLayers[i].getSource().clear(); + } + for (var _i = 0, _a = this._mapClickFunctions; _i < _a.length; _i++) { + var f = _a[_i]; + f(); + } + }; + ; + /** + * Add a function to be called when the map is clicked but before any popups are implemented + * @param {function} func - the map click function + */ + MapPopupCls.prototype.addMapClickFunction = function (func) { + this._mapClickFunctions.push(func); + }; + return MapPopupCls; + }(mapInteractionBase_1.default)); + nm.MapPopupCls = MapPopupCls; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.default = MapPopupCls; + + +/***/ }, +/* 14 */, +/* 15 */ +/***/ function(module, exports, __webpack_require__) { + + "use strict"; + var __extends = (this && this.__extends) || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + /** + * Created by gavorhes on 12/7/2015. + */ + var LayerBase_1 = __webpack_require__(16); + var esriToOl = __webpack_require__(18); + var mapPopup_1 = __webpack_require__(12); + var provide_1 = __webpack_require__(4); + var custom_ol_1 = __webpack_require__(5); + var nm = provide_1.default('layers'); + var $ = __webpack_require__(3); + /** + * esri mapserver layer + * @augments LayerBase + */ + var LayerEsriMapServer = (function (_super) { + __extends(LayerEsriMapServer, _super); + /** + * The base layer for all others + * @param {string} url - resource url + * @param {object} [options] - config + * @param {string} [options.id] - layer id + * @param {string} [options.name=Unnamed Layer] - layer name + * @param {number} [options.opacity=1] - opacity + * @param {boolean} [options.visible=true] - default visible + * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28 + * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28 + * @param {object} [options.params={}] the get parameters to include to retrieve the layer + * @param {number} [options.zIndex=0] the z index for the layer + * @param {function} [options.loadCallback] function to call on load, context this is the layer object + * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed + * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility + * @param {boolean} [options.legendContent] additional content to add to the legend + * @param {boolean} [options.addPopup=false] if a popup should be added + * @param {undefined|Array<number>} [options.showLayers=undefined] if a popup should be added + */ + function LayerEsriMapServer(url, options) { + if (options === void 0) { options = {}; } + _super.call(this, url, options); + this._source = new custom_ol_1.ol.source.TileArcGISRest({ + url: this.url == '' ? undefined : this.url, + params: typeof options.showLayers == 'undefined' ? undefined : { layers: 'show:' + options.showLayers.join(',') } + }); + this._olLayer = new custom_ol_1.ol.layer.Tile({ + source: this._source, + visible: this.visible, + opacity: this.opacity, + minResolution: this._minResolution, + maxResolution: this._maxResolution, + zIndex: this._zIndex + }); + options.addPopup = typeof options.addPopup == 'boolean' ? options.addPopup : false; + this._esriFormat = new custom_ol_1.ol.format.EsriJSON(); + this._popupRequest = null; + this.addLegendContent(); + if (options.addPopup) { + mapPopup_1.default.addMapServicePopup(this); + } + } + /** + * add additional content to the legend + * @param {string} [additionalContent=''] additional content for legend + */ + LayerEsriMapServer.prototype.addLegendContent = function (additionalContent) { + var _this = this; + var urlCopy = this.url; + if (urlCopy[urlCopy.length - 1] !== '/') { + urlCopy += '/'; + } + urlCopy += 'legend?f=pjson&callback=?'; + $.get(urlCopy, {}, function (d) { + var newHtml = esriToOl.makeMapServiceLegend(d); + _super.prototype.addLegendContent.call(_this, newHtml); + }, 'json'); + }; + LayerEsriMapServer.prototype.getPopupInfo = function (queryParams) { + if (!this.visible) { + return; + } + var urlCopy = this.url; + if (urlCopy[urlCopy.length - 1] != '/') { + urlCopy += '/'; + } + urlCopy += 'identify?callback=?'; + var _this = this; + if (this._popupRequest != null) { + this._popupRequest.abort(); + } + this._popupRequest = $.get(urlCopy, queryParams, function (d) { + for (var _i = 0, _a = d['results']; _i < _a.length; _i++) { + var r = _a[_i]; + var popupHtml = '<table class="esri-popup-table">'; + for (var a in r['attributes']) { + if (r['attributes'].hasOwnProperty(a)) { + var attrVal = r['attributes'][a]; + if (attrVal == null || attrVal.toString().toLowerCase() == 'null') { + continue; + } + var attr = a; + if (attr.length > 14) { + attr = attr.slice(0, 11) + '...'; + } + popupHtml += "<tr><td>" + attr + "</td><td>" + attrVal + "</td></tr>"; + } + } + popupHtml += '</table>'; + mapPopup_1.default.addMapServicePopupContent(_this._esriFormat.readFeature(r), _this, popupHtml, r['layerName']); + } + }, 'json').always(function () { + _this._popupRequest = null; + }); + }; + Object.defineProperty(LayerEsriMapServer.prototype, "source", { + /** + * + * @returns {ol.source.TileArcGISRest} the vector source + */ + get: function () { + return _super.prototype.getSource.call(this); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(LayerEsriMapServer.prototype, "olLayer", { + /** + * + * @returns the ol layer + */ + get: function () { + return _super.prototype.getOlLayer.call(this); + }, + enumerable: true, + configurable: true + }); + return LayerEsriMapServer; + }(LayerBase_1.LayerBase)); + exports.LayerEsriMapServer = LayerEsriMapServer; + nm.LayerEsriMapServer = LayerEsriMapServer; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.default = LayerEsriMapServer; + + +/***/ }, +/* 16 */ +/***/ function(module, exports, __webpack_require__) { + + "use strict"; + var zoomResolutionConvert = __webpack_require__(17); + var provide_1 = __webpack_require__(4); + var makeGuid_1 = __webpack_require__(11); + var nm = provide_1.default('layers'); + var $ = __webpack_require__(3); + /** + * The base layer class + * @abstract + */ + var LayerBase = (function () { + /** + * The base layer for all others + * @param {string} url - url for source + * @param {object} options - config + * @param {string} [options.id=makeGuid()] - layer id + * @param {string} [options.name=Unnamed Layer] - layer name + * @param {number} [options.opacity=1] - opacity + * @param {boolean} [options.visible=true] - default visible + * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28 + * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28 + * @param {object} [options.params={}] - the get parameters to include to retrieve the layer + * @param {number} [options.zIndex=0] - the z index for the layer + * @param {function} [options.loadCallback] - function to call on load, context this is the layer object + * @param {boolean} [options.legendCollapse=false] - if the legend item should be initially collapsed + * @param {boolean} [options.legendCheckbox=true] - if the legend item should have a checkbox for visibility + * @param {boolean} [options.legendContent=undefined] - additional content to add to the legend + */ + function LayerBase(url, options) { + if (options === void 0) { options = {}; } + options = options || {}; + if (typeof url !== 'string') { + throw 'Invalid URL'; + } + this._url = url; + this._params = typeof options.params == 'object' ? options.params : {}; + this._legendCollapse = typeof options.legendCollapse == 'boolean' ? options.legendCollapse : false; + this._legendCheckbox = typeof options.legendCheckbox == 'boolean' ? options.legendCheckbox : true; + this.id = options.id || makeGuid_1.default(); + this._name = options.name || 'Unnamed Layer'; + this.animate = false; + this._opacity = typeof options.opacity == 'number' ? options.opacity : 1; + if (this._opacity > 1) { + this._opacity = 1; + } + else if (this._opacity < 0) { + this._opacity = 0; + } + this._visible = typeof options.visible === 'boolean' ? options.visible : true; + this._source = undefined; + /** + * + * @protected + */ + this._olLayer = undefined; + this._loaded = false; + this._maxResolution = zoomResolutionConvert.zoomToResolution(options.minZoom); + if (typeof this._maxResolution !== 'undefined') { + this._maxResolution += 0.00001; + } + this._minResolution = zoomResolutionConvert.zoomToResolution(options.maxZoom); + this._minZoom = typeof options.minZoom == 'number' ? options.minZoom : undefined; + this._maxZoom = typeof options.maxZoom == 'number' ? options.maxZoom : undefined; + this._zIndex = typeof options.zIndex == 'number' ? options.zIndex : 0; + this.loadCallback = typeof options.loadCallback == 'function' ? options.loadCallback : function () { + }; + this._legendContent = ''; + if (this._legendCheckbox) { + this._legendContent += ("<input type=\"checkbox\" " + (this.visible ? 'checked' : '') + " ") + + ("class=\"legend-check\" id=\"" + this.id + "-legend-layer-check\"><span></span>"); + this._legendContent += "<label for=\"" + this.id + "-legend-layer-check\" class=\"legend-layer-name\">" + this.name + "</label>"; + } + else { + this._legendContent += "<label class=\"legend-layer-name\">" + this.name + "</label>"; + } + this._$legendDiv = null; + this._applyCollapseCalled = false; + this._addLegendContent(typeof options.legendContent === 'string' ? options.legendContent : undefined); + } + /** + * base load function, sets _loaded = true if it is not already + * @protected + * @returns {boolean} if already loaded + */ + LayerBase.prototype._load = function () { + if (this.loaded == true) { + return true; + } + else { + this._loaded = true; + return false; + } + }; + /** + * Get the legend html, be sure to only add to the DOM once + * @returns {string} html for layer wrapped in a div + */ + LayerBase.prototype.getLegendDiv = function () { + return "<div class=\"legend-layer-div\" id=\"" + this.id + "-legend-layer-div\">" + this._legendContent + "</div>"; + }; + /** + * + * @param {string|undefined} additionalContent - additional content to add to legend + * @private + */ + LayerBase.prototype._addLegendContent = function (additionalContent) { + additionalContent = typeof additionalContent == 'string' ? additionalContent : ''; + var addCollapse = additionalContent.indexOf('<ul>') > -1; + if (addCollapse) { + additionalContent = '<span class="legend-items-expander" title="Expand/Collapse">▼</span>' + additionalContent; + } + this._legendContent += additionalContent; + this._$legendDiv = $("#" + this.id + "-legend-layer-div"); + if (this._$legendDiv.length > 0) { + this._$legendDiv.append(additionalContent); + this.applyCollapse(); + } + }; + /** + * add additional content to the legend + * @param {string} [additionalContent=] - additonal content to add + */ + LayerBase.prototype.addLegendContent = function (additionalContent) { + this._addLegendContent(additionalContent); + }; + LayerBase.prototype.applyCollapse = function () { + if (this._applyCollapseCalled) { + console.log('collapse already applied'); + return undefined; + } + this._$legendDiv = $("#" + this.id + "-legend-layer-div"); + if (this._$legendDiv.length > 0) { + var $expander = this._$legendDiv.find('.legend-items-expander'); + if ($expander.length > 0) { + this._applyCollapseCalled = true; + $expander.click(function () { + var $this = $(this); + $this.siblings('ul').slideToggle(); + if ($this.hasClass('legend-layer-group-collapsed')) { + $this.removeClass('legend-layer-group-collapsed'); + $this.html('▼'); + } + else { + $this.addClass('legend-layer-group-collapsed'); + $this.html('▶'); + } + }); + if (this._legendCollapse) { + $expander.trigger('click'); + } + } + } + }; + /** + * trick to refresh the layer + */ + LayerBase.prototype.refresh = function () { + if (this.source) { + this.source.refresh(); + } + }; + Object.defineProperty(LayerBase.prototype, "legendContent", { + /** + * get the legend content + * @type {string} + */ + get: function () { + return this._legendContent; + }, + /** + * set the legend content directly + * @param {string} newVal - new content + * @protected + */ + set: function (newVal) { + this._legendContent = newVal; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(LayerBase.prototype, "params", { + /** + * get the map get params + * @type {object} + */ + get: function () { + return this._params; + }, + /** + * set the map get params + * @param {object} newParams - new get params + * @protected + */ + set: function (newParams) { + this._params = newParams; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(LayerBase.prototype, "minResolution", { + /** + * get the minimum resolution + * @type {number|*} + */ + get: function () { + return this._minResolution; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(LayerBase.prototype, "maxResolution", { + /** + * get the maximum resolution + * @type {number|*} + */ + get: function () { + return this._maxResolution; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(LayerBase.prototype, "minZoom", { + /** + * get min zoom + * @type {number|*} + */ + get: function () { + return this._minZoom; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(LayerBase.prototype, "maxZoom", { + /** + * get max zoom + * @type {number|*} + */ + get: function () { + return this._maxZoom; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(LayerBase.prototype, "url", { + /** + * get the url + * @type {string} + */ + get: function () { + return this._url; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(LayerBase.prototype, "visible", { + /** + * Get the layer visibility + * @type {boolean} + */ + get: function () { + return this._visible; + }, + /** + * set the visibility + * @param visibility + */ + set: function (visibility) { + this.setVisible(visibility); + }, + enumerable: true, + configurable: true + }); + LayerBase.prototype.setVisible = function (visibility) { + this._visible = visibility; + if (this.olLayer) { + this.olLayer.setVisible(this._visible); + if (visibility && !this._loaded) { + this._load(); + } + } + }; + Object.defineProperty(LayerBase.prototype, "opacity", { + /** + * Get the layer opacity + * @type {number} + */ + get: function () { + return this._opacity; + }, + /** + * Set the layer opacity + * @param {number} opacity - layer opacity + */ + set: function (opacity) { + this._opacity = opacity; + if (this.olLayer) { + this.olLayer.setOpacity(this._opacity); + } + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(LayerBase.prototype, "name", { + /** + * Get the layer name + * @type {string} + */ + get: function () { + return this._name; + }, + /** + * set the layer name + * @param {string} newName - the new name + */ + set: function (newName) { + this._name = newName; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(LayerBase.prototype, "loaded", { + /** + * Check if the layer is loaded + * @type {boolean} + */ + get: function () { + return this._loaded; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(LayerBase.prototype, "source", { + /** + * get the layer source + * @type {*} + */ + get: function () { + return this.getSource(); + }, + enumerable: true, + configurable: true + }); + LayerBase.prototype.getSource = function () { + return this._source; + }; + Object.defineProperty(LayerBase.prototype, "zIndex", { + /** + * get the z index + */ + get: function () { + return this._zIndex; + }, + /** + * set the z index + */ + set: function (newZ) { + this._zIndex = newZ; + }, + enumerable: true, + configurable: true + }); + LayerBase.prototype.setZIndex = function (newZ) { + }; + Object.defineProperty(LayerBase.prototype, "olLayer", { + /** + * the the ol layer + */ + get: function () { + return this.getOlLayer(); + }, + enumerable: true, + configurable: true + }); + LayerBase.prototype.getOlLayer = function () { + return this._olLayer; + }; + return LayerBase; + }()); + exports.LayerBase = LayerBase; + nm.LayerBase = LayerBase; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.default = LayerBase; + + +/***/ }, +/* 17 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Created by gavorhes on 12/14/2015. + */ + "use strict"; + var provide_1 = __webpack_require__(4); + var nm = provide_1.default('olHelpers.zoomResolutionConvert'); + var _zoomResLookup = [ + 156543.03392804097, + 78271.51696402048, + 39135.75848201024, + 19567.87924100512, + 9783.93962050256, + 4891.96981025128, + 2445.98490512564, + 1222.99245256282, + 611.49622628141, + 305.748113140705, + 152.8740565703525, + 76.43702828517625, + 38.21851414258813, + 19.109257071294063, + 9.554628535647032, + 4.777314267823516, + 2.388657133911758, + 1.194328566955879, + 0.5971642834779395, + 0.29858214173896974, + 0.14929107086948487, + 0.07464553543474244, + 0.03732276771737122, + 0.01866138385868561, + 0.009330691929342804, + 0.004665345964671402, + 0.002332672982335701, + 0.0011663364911678506, + 0.0005831682455839253 //28 + ]; + /** + * Get the resolution given the zoom level + * @param {number} zoomLevel - the zoom level + * @returns {number|*} the map resolution + */ + function zoomToResolution(zoomLevel) { + "use strict"; + if (typeof zoomLevel == 'number') { + if (zoomLevel % 1 === 0 && zoomLevel >= 0 && zoomLevel <= 28) { + return _zoomResLookup[zoomLevel]; + } + else { + console.log("invalid zoom level provided: " + zoomLevel); + return undefined; + } + } + else { + return undefined; + } + } + exports.zoomToResolution = zoomToResolution; + nm.zoomToResolution = zoomToResolution; + /** + * Get resolution from the zoom level + * @param {number} resolution - the resolution + * @returns {number|*} the zoom level + */ + function resolutionToZoom(resolution) { + for (var i = 0; i < _zoomResLookup.length; i++) { + if (resolution >= _zoomResLookup[i]) { + return i; + } + } + return 0; + } + exports.resolutionToZoom = resolutionToZoom; + nm.resolutionToZoom = resolutionToZoom; + + +/***/ }, +/* 18 */ +/***/ function(module, exports, __webpack_require__) { + + "use strict"; + var __extends = (this && this.__extends) || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + /** + * Created by gavorhes on 1/4/2016. + */ + var provide_1 = __webpack_require__(4); + var custom_ol_1 = __webpack_require__(5); + var nm = provide_1.default('olHelpers.esriToOlStyle'); + /** + * This callback is displayed as part of the Requester class. + * @callback styleFunc + * @param {ol.Feature} feat - openlayers feature + * @param {number} resolution - map resolution + */ + /** + * + * @param {Array<number>} colorArray - input color array + * @param {number} opacity - the opacity 0 to 1 + * @returns {string} rgba string + * @private + */ + function _colorArrayToRgba(colorArray, opacity) { + "use strict"; + return "rgba(" + colorArray[0] + "," + colorArray[1] + "," + colorArray[2] + "," + opacity + ")"; + } + /** + * escape html charcters + * @param {string} str - input string + * @returns {string} escaped string + */ + function htmlEscape(str) { + return String(str) + .replace(/&/g, '&') + .replace(/"/g, '"') + .replace(/'/g, ''') + .replace(/</g, '<') + .replace(/>/g, '>'); + } + nm.htmlEscape = htmlEscape; + var CommonSymbol = (function () { + /** + * + * @param symbolObj + * @param {number} opacity + */ + function CommonSymbol(symbolObj, opacity) { + this.symbolObj = symbolObj; + this.opacity = opacity; + this.olStyle = undefined; + this.legendHtml = ''; + } + return CommonSymbol; + }()); + var PointSymbol = (function (_super) { + __extends(PointSymbol, _super); + function PointSymbol(symbolObj, opacity) { + _super.call(this, symbolObj, opacity); + switch (this.symbolObj.type) { + case 'esriSMS': + var innerColor = _colorArrayToRgba(this.symbolObj.color, this.opacity); + var outerColor = _colorArrayToRgba(this.symbolObj.outline.color, this.opacity); + var outlineWidth = this.symbolObj.outline.width; + var radius = this.symbolObj.size; + this.olStyle = new custom_ol_1.ol.style.Style({ + image: new custom_ol_1.ol.style.Circle({ + radius: radius, + fill: new custom_ol_1.ol.style.Fill({ + color: innerColor + }), + stroke: new custom_ol_1.ol.style.Stroke({ color: outerColor, width: outlineWidth }) + }) + }); + this.legendHtml = "<span class=\"legend-layer-icon\" style=\"color: " + innerColor + "\">●</span>"; + break; + case 'esriPMS': + this.olStyle = new custom_ol_1.ol.style.Style({ + image: new custom_ol_1.ol.style.Icon({ src: "data:image/png;base64," + this.symbolObj['imageData'] }) + }); + this.legendHtml = "<img class=\"legend-layer-icon\" height=\"17\" src=\"data:image/png;base64," + this.symbolObj['imageData'] + "\">"; + break; + default: + console.log(this.symbolObj); + alert('Point symbol does not handle symbol type: ' + this.symbolObj['type']); + } + } + return PointSymbol; + }(CommonSymbol)); + var LineSymbol = (function (_super) { + __extends(LineSymbol, _super); + function LineSymbol(symbolObj, opacity) { + _super.call(this, symbolObj, opacity); + switch (this.symbolObj.type) { + case 'esriSLS': + var innerColor = _colorArrayToRgba(this.symbolObj.color, this.opacity); + var lineWidth = this.symbolObj.width; + this.olStyle = new custom_ol_1.ol.style.Style({ + stroke: new custom_ol_1.ol.style.Stroke({ + color: innerColor, + //lineDash: [4], + width: lineWidth + }) + }); + this.legendHtml = "<span class=\"legend-layer-icon\" "; + this.legendHtml += "style=\""; + this.legendHtml += "background-color: " + innerColor + ";"; + this.legendHtml += "width: 40px;"; + this.legendHtml += "height: 4px;"; + this.legendHtml += "position: relative;"; + this.legendHtml += "display: inline-block;"; + this.legendHtml += "top: -1px;"; + this.legendHtml += "\"></span>"; + break; + default: + console.log(this.symbolObj); + alert('Line symbol does not handle symbol type: ' + this.symbolObj['type']); + } + } + return LineSymbol; + }(CommonSymbol)); + var PolygonSymbol = (function (_super) { + __extends(PolygonSymbol, _super); + function PolygonSymbol(symbolObj, opacity) { + _super.call(this, symbolObj, opacity); + switch (this.symbolObj['type']) { + case 'esriSFS': + var innerColor = _colorArrayToRgba(this.symbolObj.color, this.opacity); + var outerColor = _colorArrayToRgba(this.symbolObj.outline.color, this.opacity); + var outlineWidth = this.symbolObj.outline.width; + this.olStyle = new custom_ol_1.ol.style.Style({ + stroke: new custom_ol_1.ol.style.Stroke({ + color: outerColor, + //lineDash: [4], + width: outlineWidth + }), + fill: new custom_ol_1.ol.style.Fill({ + color: innerColor + }) + }); + this.legendHtml = "<span class=\"legend-layer-icon\" "; + this.legendHtml += "style=\""; + this.legendHtml += "background-color: " + innerColor + ";"; + this.legendHtml += "border: solid " + outerColor + " 1px;"; + this.legendHtml += "width: 40px;"; + this.legendHtml += "height: 9px;"; + this.legendHtml += "position: relative;"; + this.legendHtml += "display: inline-block;"; + this.legendHtml += "top: 2px;"; + this.legendHtml += "\"></span>"; + break; + default: + console.log(this.symbolObj); + alert('Polygon symbol does handle symbol type: ' + this.symbolObj['type']); + } + } + return PolygonSymbol; + }(CommonSymbol)); + var SymbolGenerator = (function () { + function SymbolGenerator(esriResponse) { + this.opacity = (100 - (esriResponse['drawingInfo']['transparency'] || 0)) / 100; + this.renderer = esriResponse.drawingInfo.renderer; + this.olStyle = undefined; + this.legendHtml = ''; + } + return SymbolGenerator; + }()); + var SingleSymbol = (function (_super) { + __extends(SingleSymbol, _super); + /** + * + * @param {object} esriResponse - layer info + * @param {Constructor|*} SymbolClass - the symbol class to use + */ + function SingleSymbol(esriResponse, SymbolClass) { + _super.call(this, esriResponse); + this.symbol = this.renderer.symbol; + var symbolObj = new SymbolClass(this.symbol, this.opacity); + this.olStyle = symbolObj.olStyle; + this.legendHtml = symbolObj.legendHtml; + } + return SingleSymbol; + }(SymbolGenerator)); + var UniqueValueSymbol = (function (_super) { + __extends(UniqueValueSymbol, _super); + /** + * + * @param {object} esriResponse - layer info + * @param {Constructor|*} SymbolClass - the Symbol class definition + */ + function UniqueValueSymbol(esriResponse, SymbolClass) { + var _this = this; + _super.call(this, esriResponse); + this.uniqueValueInfos = this.renderer['uniqueValueInfos']; + this.propertyName = this.renderer['field1']; + this.defaultSymbol = this.renderer['defaultSymbol']; + if (this.defaultSymbol) { + var symbolObj = new SymbolClass(this.defaultSymbol, this.opacity); + this.defaultStyle = symbolObj.olStyle; + this.defaultLabelHtml = ("<span class=\"legend-layer-subitem\">" + htmlEscape(this.renderer['defaultLabel']) + "</span>") + symbolObj.legendHtml; + } + else { + this.defaultStyle = undefined; + this.defaultLabelHtml = 'other'; + } + this.valueArray = []; + this.labelArray = []; + this.legendArray = []; + this.propertyStyleLookup = {}; + for (var _i = 0, _a = this.uniqueValueInfos; _i < _a.length; _i++) { + var uniqueVal = _a[_i]; + this.labelArray.push(uniqueVal['label']); + this.valueArray.push(uniqueVal['value']); + var uniqueSym = new SymbolClass(uniqueVal.symbol, this.opacity); + this.legendArray.push(("<span class=\"legend-layer-subitem\">" + htmlEscape(uniqueVal['label']) + "</span>") + uniqueSym.legendHtml); + this.propertyStyleLookup[uniqueVal['value']] = uniqueSym.olStyle; + } + this.olStyle = function (feature) { + var checkProperties = feature.getProperties(); + var checkProperty = checkProperties[_this.propertyName]; + var returnValue; + if (_this.propertyStyleLookup[checkProperty] !== undefined) { + returnValue = [_this.propertyStyleLookup[checkProperty]]; + } + else { + returnValue = [_this.defaultStyle]; + } + return returnValue; + }; + if (this.defaultLabelHtml !== null) { + this.legendArray.push(this.defaultLabelHtml); + } + this.legendHtml = '<ul>'; + for (var _b = 0, _c = this.legendArray; _b < _c.length; _b++) { + var h = _c[_b]; + this.legendHtml += "<li>" + h + "</li>"; + } + this.legendHtml += '</ul>'; + } + return UniqueValueSymbol; + }(SymbolGenerator)); + /** + * style and legend object + * @typedef {object} styleAndLegend + * @property {styleFunc} style - style function + * @property {string} legend - legend content + */ + /** + * + * @param {object} esriResponse - layer info + * @returns {styleAndLegend} style and legend object + */ + function makeFeatureServiceLegendAndSymbol(esriResponse) { + "use strict"; + var renderer = esriResponse.drawingInfo.renderer; + var symbolLegendOut = null; + switch (renderer.type) { + case 'simple': + switch (esriResponse.geometryType) { + case 'esriGeometryPoint': + symbolLegendOut = new SingleSymbol(esriResponse, PointSymbol); + break; + case 'esriGeometryPolyline': + symbolLegendOut = new SingleSymbol(esriResponse, LineSymbol); + break; + case 'esriGeometryPolygon': + symbolLegendOut = new SingleSymbol(esriResponse, PolygonSymbol); + break; + default: + console.log(esriResponse); + alert(esriResponse.geometryType + ' not handled'); + } + break; + case 'uniqueValue': + switch (esriResponse.geometryType) { + case 'esriGeometryPoint': + symbolLegendOut = new UniqueValueSymbol(esriResponse, PointSymbol); + break; + case 'esriGeometryPolyline': + symbolLegendOut = new UniqueValueSymbol(esriResponse, LineSymbol); + break; + case 'esriGeometryPolygon': + symbolLegendOut = new UniqueValueSymbol(esriResponse, PolygonSymbol); + break; + default: + console.log(esriResponse); + alert(esriResponse['geometryType'] + ' not handled'); + } + break; + default: + alert('not handled renderer type: ' + renderer['type']); + } + if (symbolLegendOut == null) { + return { style: undefined, legend: '' }; + } + else { + return { style: symbolLegendOut.olStyle, legend: symbolLegendOut.legendHtml }; + } + } + exports.makeFeatureServiceLegendAndSymbol = makeFeatureServiceLegendAndSymbol; + nm.makeFeatureServiceLegendAndSymbol = makeFeatureServiceLegendAndSymbol; + /** + * + * @param {object} lyrObject - the layer as defined in the response + * @param {boolean} [skipLayerNameAndExpander=false] use only icons + * @returns {string} legend html + */ + function mapServiceLegendItem(lyrObject, skipLayerNameAndExpander) { + if (skipLayerNameAndExpander === void 0) { skipLayerNameAndExpander = false; } + skipLayerNameAndExpander = typeof skipLayerNameAndExpander == 'boolean' ? skipLayerNameAndExpander : false; + var layerName = lyrObject['layerName']; + var legendItems = lyrObject['legend']; + var legendHtml = ''; + if (!skipLayerNameAndExpander) { + legendHtml += "<span class=\"legend-layer-subitem\">" + layerName + "</span>"; + } + if (legendItems.length == 1) { + legendHtml = "<img class=\"legend-layer-icon\" height=\"17\" src=\"data:image/png;base64," + legendItems[0]['imageData'] + "\">"; + } + else { + if (!skipLayerNameAndExpander) { + legendHtml += '<span class="legend-items-expander" title="Expand/Collapse">▼</span>'; + } + legendHtml += '<ul>'; + for (var i = 0; i < legendItems.length; i++) { + legendHtml += "<li>"; + legendHtml += "<span class=\"legend-layer-subitem\">" + htmlEscape(legendItems[i]['label']) + "</span>"; + legendHtml += "<img class=\"legend-layer-icon\" height=\"17\" src=\"data:image/png;base64," + legendItems[i]['imageData'] + "\">"; + legendHtml += "</li>"; + } + legendHtml += '</ul>'; + } + if (!skipLayerNameAndExpander) { + legendHtml = ("<span class=\"legend-layer-subitem\">" + layerName + "</span>") + legendHtml; + } + return legendHtml; + } + /** + * make map service legent + * @param {object} esriResponse - layer info + * @returns {string} legend content + */ + function makeMapServiceLegend(esriResponse) { + "use strict"; + var newLegendHtml = ''; + var layers = esriResponse['layers']; + if (layers.length == 1) { + newLegendHtml += mapServiceLegendItem(layers[0], true); + } + else { + newLegendHtml += '<ul>'; + for (var i = 0; i < layers.length; i++) { + newLegendHtml += '<li>' + mapServiceLegendItem(layers[i]) + '</li>'; + } + newLegendHtml += '</ul>'; + } + return newLegendHtml; + } + exports.makeMapServiceLegend = makeMapServiceLegend; + nm.makeMapServiceLegend = makeMapServiceLegend; + + +/***/ }, +/* 19 */, +/* 20 */, +/* 21 */, +/* 22 */, +/* 23 */, +/* 24 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Created by gavorhes on 12/16/2015. + */ + "use strict"; + var provide_1 = __webpack_require__(4); + var makeGuid_1 = __webpack_require__(11); + var mapMove_1 = __webpack_require__(7); + var nm = provide_1.default('collections'); + var $ = __webpack_require__(3); + var LayerGroup = (function () { + /** + * + * @param {object} [groupConfig={}] - group configuration object + * @param {string} groupConfig.groupName - the group name + * @param {boolean} [groupConfig.collapse=false] - if the group should be collapsed initially + * @param {boolean} [groupConfig.addCheck=true] - if the group should have a checkbox controlling visibility of all layers + * @param {LayerGroup} [parent=undefined] - the parent group + */ + function LayerGroup(groupConfig, parent) { + this.groupLayers = []; + this.groupLayersLookup = {}; + this.groupGroups = []; + this.groupGroupsLookup = {}; + this.itemIdArray = []; + if (typeof groupConfig == 'undefined') { + this.parent = null; + this.groupId = 'root'; + this.groupName = 'root'; + this.allGroupLookup = { root: this }; + this.allGroupArray = [this]; + this.allLayerArray = []; + this.allLayerLookup = {}; + this.layerParentLookup = {}; + this.collapse = false; + this.addCheck = false; + } + else { + this.groupId = makeGuid_1.default(); + this.parent = parent; + this.groupName = groupConfig.groupName; + this.collapse = typeof groupConfig.collapse == 'boolean' ? groupConfig.collapse : false; + this.addCheck = typeof groupConfig.addCheck == 'boolean' ? groupConfig.addCheck : true; + } + } + /** + * + * @param {object} groupConfig - configuration object + * @param {string} groupConfig.groupName - the group name + * @param {boolean} groupConfig.collapse if the group should be collapsed initially + * @param {boolean} groupConfig.addCheck if the group should have a checkbox controlling visibility of all layers + * @param {Array<LayerGroup>} parents parent groups + * @returns {LayerGroup} the layer group just added + */ + LayerGroup.prototype.addGroup = function (groupConfig, parents) { + var parent; + if (parents.length > 0) { + parent = parents[parents.length - 1]; + } + else { + parent = 'root'; + } + /** + * @type {LayerGroup} + */ + var parentGroup = this.allGroupLookup[parent]; + var newGroup = new LayerGroup(groupConfig, parentGroup); + this.allGroupLookup[newGroup.groupId] = newGroup; + this.allGroupArray.push(newGroup); + parentGroup.groupGroups.push(newGroup); + parentGroup.groupGroupsLookup[newGroup.groupId] = newGroup; + if (parentGroup.itemIdArray.indexOf(newGroup.groupId) > 0) { + console.log(newGroup.groupId); + throw 'layer and group ids must be unique'; + } + parentGroup.itemIdArray.push(newGroup.groupId); + return newGroup; + }; + /** + * + * @param {LayerBase} newLayer the layer to be added + * @param {Array} parents array + */ + LayerGroup.prototype.addLegendLayer = function (newLayer, parents) { + var parent; + if (parents.length > 0) { + parent = parents[parents.length - 1]; + } + else { + parent = 'root'; + } + this.allLayerLookup[newLayer.id] = newLayer; + this.allLayerArray.push(newLayer); + /** + * @type {LayerGroup} + */ + var parentGroup = this.allGroupLookup[parent]; + parentGroup.groupLayers.push(newLayer); + parentGroup.groupLayersLookup[newLayer.id] = newLayer; + if (parentGroup.itemIdArray.indexOf(newLayer.id) > 0) { + console.log(newLayer.id); + throw 'layer and group ids must be unique'; + } + parentGroup.itemIdArray.push(newLayer.id); + this.layerParentLookup[newLayer.id] = parentGroup; + }; + LayerGroup.prototype.getLegendHtml = function (legendId, options) { + var legendHtml = "<ul id=\"" + legendId + "\" class=\"legend-container\">"; + legendHtml += ("<li>" + options.legendTitle + "<input type=\"checkbox\" checked id=\"suppress-by-extent-" + legendId + "\" class=\"suppress-by-extent\">") + + ("<label title=\"Suppress layers not visible at this zoom level\" for=\"suppress-by-extent-" + legendId + "\">") + + "<span></span>" + + "</label></li>"; + legendHtml += this._buildLegend(this.itemIdArray, this, options.layerDivClasses) + '</ul>'; + return legendHtml; + }; + /** + * @param {Array} itemIds the items to process + * @param {LayerGroup} theGroup new group + * @param {Array} [layerDivClasses=[]] optional classes to apply to the layer divs + * @static + * @returns {string} html string + */ + LayerGroup.prototype._buildLegend = function (itemIds, theGroup, layerDivClasses) { + if (itemIds.length == 0) { + return ''; + } + var theHml = ''; + var itemId = itemIds[0]; + if (theGroup.groupLayersLookup[itemId]) { + /** + * @type {LayerBase} + */ + var lyr = theGroup.groupLayersLookup[itemId]; + theHml += ("<li id=\"" + lyr.id + "-layer-li\" class=\"legend-layer-li " + layerDivClasses.join(' ') + "\">") + lyr.getLegendDiv() + '</li>'; + } + else if (theGroup.groupGroupsLookup[itemId]) { + /** + * type {LayerGroup} + */ + var otherGroup = theGroup.groupGroupsLookup[itemId]; + theHml += "<li>"; + theHml += ("<div id=\"" + otherGroup.groupId + "-legend-layer-div\" ") + + ("class=\"legend-layer-group " + layerDivClasses.join(' ') + "\">"); + if (otherGroup.addCheck) { + theHml += ("<input type=\"checkbox\" checked id=\"" + otherGroup.groupId + "-group-chck\">") + + ("<label for=\"" + otherGroup.groupId + "-group-chck\" title=\"Click arrow to expand or collapse\">" + otherGroup.groupName + "</label>"); + } + else { + theHml += "<label title=\"Click arrow to expand or collapse\">" + otherGroup.groupName + "</label>"; + } + theHml += "<span title=\"Expand/Collapse\" class=\"layer-group-expander"; + theHml += (otherGroup.collapse ? ' legend-layer-group-initial-collapse' : '') + "\">"; + theHml += otherGroup.collapse ? '▶' : '▼'; + theHml += '</span>'; + //parents.push(groupId); + theHml += '<ul>' + this._buildLegend(otherGroup.itemIdArray, otherGroup, layerDivClasses) + '</ul>'; + theHml += '</div>'; + theHml += '</li>'; + } + return theHml + this._buildLegend(itemIds.slice(1), theGroup, layerDivClasses); + }; + return LayerGroup; + }()); + /** + * a wrapper to make a legend + */ + var LayerLegend = (function () { + /** + * + * @param {Array} legendItems array of layers or objects with {groupName: {string}, collapse: {boolean}, addCheck: {boolean}, items: {Array}} + * @param {string} divId the div where the legend should be added + * @param {object} options for legend + * @param {Array} [options.layerDivClasses=[]] optional array of classes to be applied to the layer legend divs for custom styling + * @param {string} [options.legendTitle=Legend] the legend title + * @param {boolean} [options.scaleDependent=true] if legend display is scale dependent + */ + function LayerLegend(legendItems, divId, options) { + for (var _i = 0, legendItems_1 = legendItems; _i < legendItems_1.length; _i++) { + var i = legendItems_1[_i]; + if (typeof i == 'undefined') { + throw 'undefined item passed in array to legend constructor'; + } + } + options = options || {}; + options.legendTitle = typeof options.legendTitle == 'string' ? options.legendTitle : 'Legend'; + options.scaleDependent = typeof options.scaleDependent == 'boolean' ? options.scaleDependent : true; + options.layerDivClasses = options.layerDivClasses || []; + // if legend display is scale dependent, make sure the mapMove object is initialized first + if (options.scaleDependent) { + mapMove_1.default.checkInit(); + } + this.$divElement = $('#' + divId); + this._legendItems = legendItems; + this.layerGroup = new LayerGroup(); + this._buildTree(legendItems); + this.legendId = makeGuid_1.default(); + this.$divElement.append(this.layerGroup.getLegendHtml(this.legendId, options)); + for (var _a = 0, _b = this.layerGroup.allLayerArray; _a < _b.length; _a++) { + var l = _b[_a]; + l.applyCollapse(); + } + var _this = this; + //// if legend display is scale dependent, make sure the mapMove object is initialized first + if (options.scaleDependent) { + mapMove_1.default.checkInit(); + mapMove_1.default.addCallback(function (ext, zoom, evt) { + if (typeof evt == 'undefined' || evt == 'change:resolution') { + for (var _i = 0, _a = this.layerGroup.allLayerArray; _i < _a.length; _i++) { + var lyr = _a[_i]; + var $lyrLi = $('#' + lyr.id + '-layer-li'); + if (zoom > lyr.maxZoom || zoom < lyr.minZoom) { + $lyrLi.addClass('layer-not-visible'); + } + else { + $lyrLi.removeClass('layer-not-visible'); + } + } + } + }, this, 100, true, 'legend1'); + } + // <editor-fold desc="add event listeners"> + this.$divElement.find(".suppress-by-extent").change(function () { + var legendLayerLis = $('.legend-layer-li'); + if (this.checked) { + legendLayerLis.removeClass('layer-force-show'); + } + else { + legendLayerLis.addClass('layer-force-show'); + } + }); + this.$divElement.find('.legend-check').change(function () { + var lyrId = this.id.replace('-legend-layer-check', ''); + _this.layerGroup.allLayerLookup[lyrId].visible = this.checked; + }); + this.$divElement.find('.legend-layer-group > input[type=checkbox]').change(function () { + $(this).siblings('ul').find('input[type=checkbox]').prop('checked', this.checked).trigger('change'); + }); + this.$divElement.find('.layer-group-expander').click(function () { + var $this = $(this); + $this.removeClass('legend-layer-group-initial-collapse'); + $this.siblings('ul').slideToggle(); + if ($this.hasClass('legend-layer-group-collapsed')) { + $this.removeClass('legend-layer-group-collapsed'); + $this.html('▼'); + } + else { + $this.addClass('legend-layer-group-collapsed'); + $this.html('▶'); + } + }); + this.$divElement.find('.legend-layer-group-initial-collapse').trigger('click'); + // </editor-fold> + } + /** + * @param {Array} [legendItems=this._layerConfig] the legend items + * @param {Array} [parents=[]] the ordered list of groups in which this item is a member + * @private + */ + LayerLegend.prototype._buildTree = function (legendItems, parents) { + if (legendItems.length == 0) { + return; + } + var oneItem = legendItems[0]; + //reset the parent if the item is in the base array + if (this._legendItems.indexOf(oneItem) > -1 || typeof parents == 'undefined') { + parents = []; + } + if (typeof oneItem['groupName'] !== 'undefined') { + var groupItem = legendItems[0]; + var newGroup = this.layerGroup.addGroup(groupItem, parents); + parents.push(newGroup.groupId); + this._buildTree(groupItem.items, parents); + } + else { + /** + * @type {LayerBase} + */ + var layerItem = legendItems[0]; + this.layerGroup.addLegendLayer(layerItem, parents); + } + this._buildTree(legendItems.slice(1), parents); + }; + return LayerLegend; + }()); + nm.LayerLegend = LayerLegend; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.default = LayerLegend; + + +/***/ } +/******/ ]); +//# sourceMappingURL=simple_map.js.map \ No newline at end of file diff --git a/test-html/js/simple_map.js.map b/test-html/js/simple_map.js.map new file mode 100644 index 0000000000000000000000000000000000000000..204d2700cfb290ccf1c76fd49f6322bee62f6ed5 --- /dev/null +++ b/test-html/js/simple_map.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///webpack/bootstrap ef760a4c28bc3d5b9fb4?77b8****","webpack:///./src-ts/_test/simple_map.ts","webpack:///./src-ts/olHelpers/quickMap.ts?6966*","webpack:///./src-ts/olHelpers/quickMapBase.ts?cef3*","webpack:///./~/jquery/dist/jquery.js?89fd**","webpack:///./src-ts/util/provide.ts?c446**","webpack:///./~/custom-ol/lib/index.js?e25d*","webpack:///./~/custom-ol/ol/ol-build.js?ed33*","webpack:///./src-ts/olHelpers/mapMove.ts?0e57*","webpack:///./src-ts/olHelpers/mapMoveCls.ts?c02e*","webpack:///./src-ts/olHelpers/mapInteractionBase.ts?686c*","webpack:///./src-ts/util/checkDefined.ts?efb5*","webpack:///./src-ts/util/makeGuid.ts?7a49*","webpack:///./src-ts/olHelpers/mapPopup.ts?f7f4*","webpack:///./src-ts/olHelpers/mapPopupCls.ts?19d5*","webpack:///./src-ts/layers/LayerEsriMapServer.ts?5e8f","webpack:///./src-ts/layers/LayerBase.ts?ca1c*","webpack:///./src-ts/olHelpers/zoomResolutionConvert.ts?51f3*","webpack:///./src-ts/olHelpers/esriToOlStyle.ts?67d2","webpack:///./src-ts/collections/LayerLegend.ts?9875"],"names":[],"mappings":"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AAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;KAClD,CAAC;KAED,MAAM,CAAC,GAAG,CAAC;AACf,EAAC;AAxEe,qBAAY,eAwE3B;AAED,GAAE,CAAC,YAAY,GAAG,YAAY,CAAC;AAC/B;mBAAe,YAAY,CAAC;;;;;;;AC/G5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;;;AAIA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gCAA+B;AAC/B;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,SAAQ,YAAY;;AAEpB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,OAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF,qBAAoB;;AAEpB;AACA;AACA,GAAE;;AAEF;;AAEA;AACA;AACA,GAAE;;AAEF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kDAAiD;AACjD;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF,iCAAgC;AAChC;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA,WAAU,YAAY;AACtB;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA,UAAS,SAAS;AAClB;AACA;;AAEA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAS,YAAY;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAU,YAAY;AACtB;;AAEA;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,GAAE;;AAEF;;AAEA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAC;;AAED;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS,SAAS;AAClB;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,2BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA,iBAAgB,IAAI;;AAEpB;AACA;;AAEA;AACA;;AAEA;AACA,yCAAwC,IAAI;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD,UAAS;;AAET;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA,OAAM;;AAEN;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,MAAK;AACL;AACA;;AAEA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA,OAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAM;AACN,OAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,cAAa,yBAAyB;AACtC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;;AAEA;AACA;AACA,GAAE;AACF;AACA,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,QAAQ;AACnB,YAAW,QAAQ;AACnB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;AACF;;AAEA;AACA;AACA,YAAW,gBAAgB;AAC3B,cAAa,uBAAuB;AACpC;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,YAAW,eAAe;AAC1B,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,eAAe;AAC1B,cAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,YAAW,UAAU;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,YAAW,cAAc;AACzB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;AACA,IAAG;AACH;AACA,iCAAgC,MAAM;AACtC;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;;AAEA,gBAAe;;AAEf,UAAS;;AAET;AACA,SAAQ,iCAAiC;AACzC,SAAQ,oBAAoB;AAC5B,SAAQ,sCAAsC;AAC9C,SAAQ;AACR,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;;AAEA;AACA;AACA;AACA,iBAAgB,aAAa,EAAE;AAC/B;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,6DAA4D;;AAE5D;AACA;AACA;AACA,0CAAyC;;AAEzC;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,QAAO;AACP;AACA;AACA;AACA;AACA,8DAA6D;;AAE7D;AACA;AACA;AACA,2CAA0C;;AAE1C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,iEAAgE;;AAEhE;AACA;AACA;AACA,8CAA6C;;AAE7C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA,kEAAiE,UAAU;AAC3E,uCAAsC,2BAA2B;AACjE;AACA,iCAAgC,MAAM;AACtC;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA,WAAU,YAAY;AACtB;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,WAAU,YAAY;AACtB;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,WAAU,UAAU;AACpB;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,WAAU,cAAc;AACxB;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;;AAEA;AACA,aAAY,uEAAuE;AACnF;AACA;AACA,aAAY,4BAA4B;AACxC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAQ,SAAS;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA,4DAA2D;;AAE3D;AACA;AACA,qFAAoF;;AAEpF;AACA;;AAEA;AACA;AACA,QAAO;AACP;AACA;;AAEA,oCAAmC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA,SAAQ,SAAS;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAAQ,SAAS;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA,GAAE;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH,SAAQ,SAAS;AACjB;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAuC,iDAAiD;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kDAAiD;AACjD,WAAU,wCAAwC;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,gBAAgB;AAC3B;AACA,YAAW,QAAQ;AACnB,YAAW,MAAM;AACjB,YAAW,MAAM;AACjB;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;AACA,GAAE;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;AACA,GAAE;AACF;;AAEA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;;AAEA;;AAEA,EAAC;;;;AAID;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA,SAAQ,GAAG;AACX;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;;AAEA;;;;AAIA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAE;AACF;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA,KAAI;AACJ;;AAEA,eAAc,SAAS;AACvB;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;AAGD;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,KAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,SAAQ;AACR;AACA;AACA;AACA;;AAEA;;AAEA;AACA,MAAK;AACL;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;;AAEA;AACA;AACA,KAAI;AACJ;AACA;;AAEA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAU,OAAO;AACjB;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,UAAS,OAAO;AAChB,0BAAyB,wBAAwB;;AAEjD;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA,2CAA0C;AAC1C,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA;AACA,EAAC;AACD;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAC;AACD;;;;AAIA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAmB;;AAEnB;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAU,cAAc;AACxB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,MAAK;AACL;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAQ;;AAER;AACA;AACA;AACA,QAAO;AACP,OAAM;;AAEN;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAQ;AACR,QAAO;AACP;AACA,OAAM;AACN,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,+CAA8C;AAC9C,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAM;AACN;AACA;AACA;AACA,KAAI;;AAEJ;;AAEA,6CAA4C;AAC5C;AACA;AACA;AACA;AACA,WAAU,YAAY;AACtB;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAC;;;AAGD;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;AACF;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,WAAU,SAAS;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;AAKA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA,GAAE;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,OAAM;AACN;AACA;AACA;;AAEA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;;AAEA,wBAAuB,aAAa;AACpC,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,qBAAoB,SAAS;AAC7B;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA,IAAG;AACH;AACA,EAAC;;;AAGD;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ,IAAG;AACH;AACA,EAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ,GAAE;AACF;AACA;AACA;AACA,IAAG;AACH,GAAE;AACF;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;;AAEA;;;AAGA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA,gBAAe,oBAAoB,EAAE;AACrC,gBAAe,qCAAqC,EAAE;AACtD;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;;;AAIA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA,SAAQ,OAAO;AACf;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,uBAAsB;;AAEtB;AACA;AACA;AACA;AACA;AACA;;AAEA,SAAQ,OAAO;AACf;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;;AAEA;AACA,KAAI;AACJ;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAC;;;AAGD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAE,gBAAgB;AAClB;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAE;AACF;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;;AAEA;AACA;AACA;AACA;AACA;;AAEA,YAAW;;AAEX;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;AACA;;AAEA;AACA;AACA;;AAEA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,4CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;;AAEF;;AAEA;AACA;;AAEA;AACA;AACA;AACA,qDAAoD;AACpD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,0BAAyB;AACzB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,gEAA+D;AAC/D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,WAAU,cAAc;;AAExB;AACA;AACA;AACA;AACA,kBAAiB,mBAAmB;AACpC;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA0B,+BAA+B;AACzD;AACA;AACA;AACA;;AAEA;AACA;AACA,wBAAuB,wDAAwD;AAC/E;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA,cAAa;;AAEb;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,uCAAsC,cAAc;AACpD;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,sCAAqC;AACrC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,uCAAsC;AACtC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,sCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA,EAAC;;;AAGD;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,4CAA2C,OAAO;AAClD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,+BAA8B;;AAE9B;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAE;AACF;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAU,OAAO;AACjB;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,iBAAgB,gBAAgB;AAChC;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,SAAQ,+BAA+B;AACvC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,wCAAuC,OAAO;AAC9C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,yCAAwC,OAAO;AAC/C;AACA;AACA,KAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA,UAAS,qCAAqC;AAC9C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,SAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;;AAEA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;;AAEA,UAAS,8BAA8B;AACvC;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA,8BAA6B;AAC7B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,aAAY,OAAO;AACnB;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;;AAEA,UAAS,WAAW;AACpB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAC;;;AAGD;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,YAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;;;;AAIA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,sCAAqC,UAAU,SAAS,MAAM,aAAa;AAC3E,cAAa,eAAe;AAC5B;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,mCAAkC,2BAA2B,sBAAsB;AACnF,uBAAsB,cAAc;AACpC,iBAAgB,WAAW,YAAY;AACvC,YAAW;AACX;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAA4B,SAAS,QAAQ,QAAQ;AACrD;;AAEA;AACA;AACA,qCAAoC,uBAAuB;AAC3D,oBAAmB,SAAS,SAAS;AACrC;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,GAAE;AACF,EAAC;;;AAGD;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,mBAAkB;AAClB;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;;AAEA,aAAY,+DAA+D;AAC3E;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA,SAAQ,OAAO;;AAEf;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,SAAQ,gBAAgB;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAiB,gBAAgB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,IAAG;;AAEH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA,mBAAkB,gBAAgB;AAClC;AACA,OAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,wBAAuB,4BAA4B;AACnD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA,kBAAiB;;AAEjB;AACA;;AAEA,WAAU,OAAO;AACjB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA,aAAY;AACZ;;AAEA;AACA;AACA;;AAEA,YAAW,SAAS;AACpB;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA,IAAG;AACH;AACA,EAAC;;;AAGD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;;AAEA;;AAEA;AACA;;;;;AAKA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW;;AAEX;AACA;AACA;AACA,SAAQ,QAAQ;AAChB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAQ,gBAAgB;AACxB;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ,IAAG;AACH;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,kDAAiD;AACjD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,KAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,WAAU,iBAAiB;AAC3B;AACA;;AAEA;;AAEA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,4BAA2B;AAC3B;AACA,sBAAqB;AACrB;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,iBAAiB;AAC5B;AACA;;AAEA,8CAA6C;AAC7C;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;;AAEA,SAAQ,iBAAiB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA,UAAS,iBAAiB;AAC1B;AACA;AACA;AACA;AACA,GAAE;;AAEF;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,EAAC;;AAED;AACA,kEAAiE;AACjE;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,qBAAoB,cAAc;AAClC,GAAE;AACF;AACA;AACA;AACA;;AAEA;AACA,kDAAiD;;AAEjD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA;;AAEA,gCAA+B,SAAS;AACxC;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,gCAA+B,SAAS;AACxC;AACA;AACA;AACA;AACA;;AAEA;AACA,oBAAmB,gBAAgB;AACnC;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA,WAAU,kBAAkB;AAC5B,YAAW,kBAAkB;AAC7B,eAAc;AACd,EAAC;AACD;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;;AAEA,SAAQ,mBAAmB;AAC3B;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;;;AAGA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;AAGD;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA,IAAG;AACH;AACA,EAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;AAKD;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA,IAAG;AACH;AACA,EAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;AAKD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,OAAM;AACN;AACA;AACA;;AAEA;AACA,KAAI;AACJ;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAC;;;;;AAKD;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,KAAI;AACJ;AACA;;AAEA,kCAAiC;AACjC;AACA;;AAEA,KAAI;AACJ;;AAEA,KAAI;AACJ;AACA;AACA,MAAK;AACL;;AAEA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA,EAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,SAAS;AACpB;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;AAKD;;;AAGA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA,uCAAsC;AACtC;AACA;AACA;;AAEA;;AAEA,0BAAyB;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,+CAA8C;AAC9C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,4CAA2C;AAC3C;;AAEA;AACA;AACA;AACA;AACA,WAAU,KAAK;AACf;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kDAAiD;AACjD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,sCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA,EAAC;;AAED;;AAEA;AACA;AACA;AACA,IAAG;AACH,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;AAGD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA,EAAC;;;;;AAKD;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,qCAAqC;;AAEpD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;;AAEA,MAAK;AACL;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;;AAEA;;;;AAIA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;;AAEhB;AACA;AACA;AACA;AACA;AACA,iBAAgB;;AAEhB,iDAAgD;AAChD;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,oBAAmB;AACnB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,yDAAwD;AACxD;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAiB;;AAEjB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA,KAAI;;AAEJ;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,OAAM;AACN;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,UAAS;AACT;;AAEA;;AAEA;AACA;;AAEA;AACA,kBAAiB;AACjB,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAkD;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,4BAA2B;;AAE3B;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,mCAAkC;;AAElC;AACA,uBAAsB;AACtB,4BAA2B;;AAE3B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAO;;AAEP;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,uDAAsD;AACtD;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,eAAc,oCAAoC;AAClD;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;;AAEA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,MAAK;AACL;;AAEA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA,EAAC;;AAED;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA,EAAC;;;AAGD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,KAAI;AACJ;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;;AAEA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA,EAAC;;;AAGD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH,GAAE;;AAEF;AACA;AACA;AACA;;AAEA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAc;AACd,OAAM;AACN,OAAM;AACN,IAAG;AACH;AACA,EAAC;;;AAGD;AACA;AACA;AACA,GAAE;AACF;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAE;AACF;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAQ;;AAER;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;;AAEA,oDAAmD;AACnD;AACA;AACA;AACA;AACA,SAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,uBAAuB;AAClC,YAAW,yBAAyB;AACpC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;AAKD;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;AAKD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA,EAAC;;;;;AAKD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,KAAI;AACJ,IAAG;AACH;;AAEA;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;AAKD;AACA;AACA;AACA,GAAE;AACF;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,IAAG;AACH;AACA;AACA;;AAEA;;AAEA;AACA,sDAAqD;AACrD;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA,WAAU,kBAAkB;AAC5B;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAmB;;AAEnB,6DAA4D,eAAe;AAC3E;AACA;;AAEA;AACA;;AAEA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA,EAAC;;AAED;AACA,eAAc,sDAAsD;AACpE;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,KAAI;AACJ;AACA;AACA,IAAG;AACH;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;AAGD;AACA,eAAc,mCAAmC;AACjD,gBAAe,6DAA6D;AAC5E;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,KAAI;AACJ;AACA,GAAE;AACF,EAAC;;;AAGD;;AAEA;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;AACF;;AAEA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;AACA,EAAC;;AAED;;;;;AAKA;AACA;AACA;AACA;AAC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","file":"simple_map.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap ef760a4c28bc3d5b9fb4\n **/","/**\r\n * Created by gavorhes on 9/23/2016.\r\n */\r\nimport {quickMap} from '../olHelpers/quickMap';\r\nimport {LayerEsriMapServer} from \"../layers/LayerEsriMapServer\";\r\nimport LayerLegend from '../collections/LayerLegend';\r\n\r\n\r\nlet map = quickMap();\r\n\r\nlet wisDotRegions = new LayerEsriMapServer(\r\n 'http://transportal.cee.wisc.edu/applications/arcgis2/rest/services/MetaManager/Metamanager_regions/MapServer');\r\n\r\nlet sixYearPlan = new LayerEsriMapServer(\r\n 'http://transportal.cee.wisc.edu/applications/arcgis2/rest/services/MetaManager/SixYearPlan/MapServer', {name: 'Six Year Plan', legendCollapse: true});\r\n\r\nmap.addLayer(wisDotRegions.olLayer);\r\nmap.addLayer(sixYearPlan.olLayer);\r\n\r\nlet layerArray = [\r\n wisDotRegions,\r\n sixYearPlan\r\n // tipConfig.tipSegmentLayer,\r\n // tipConfig.metamanagerSegments,\r\n // {\r\n // groupName: 'ITS Inventory Layers',\r\n // collapse: true,\r\n // addCheck: false,\r\n // items: tipConfig.itsLayerCollection.layers\r\n // }\r\n];\r\n\r\nlet legend = new LayerLegend(layerArray, 'legend-container', {});\r\n\r\n\r\n\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/_test/simple_map.ts\n **/","/**\r\n * Created by gavorhes on 12/15/2015.\r\n */\r\n\r\nimport {quickMapOptions, quickMapBase} from './quickMapBase';\r\nimport provide from '../util/provide';\r\nimport mapMove from './mapMove';\r\nimport mapPopup from './mapPopup';\r\nlet nm = provide('olHelpers');\r\nimport {ol} from 'custom-ol'\r\n\r\n/**\r\n * Sets up a map with some default parameters and initializes\r\n * mapMove and mapPopup\r\n *\r\n * @param {object} [options={}] config options\r\n * @param {string} [options.divId=map] map div id\r\n * @param {object} [options.center={}] center config object\r\n * @param {number} [options.center.x=-10018378] center x, web mercator x or lon\r\n * @param {number} [options.center.y=5574910] center y, web mercator y or lat\r\n * @param {number} [options.zoom=7] zoom level\r\n * @param {number} [options.minZoom=undefined] min zoom\r\n * @param {number} [options.maxZoom=undefined] max zoom\r\n * @param {boolean} [options.baseSwitcher=true] if add base map switcher\r\n * @param {boolean} [options.fullScreen=false] if add base map switcher\r\n * @returns the ol map\r\n */\r\nexport function quickMap(options? : quickMapOptions): ol.Map {\r\n let m = quickMapBase(options);\r\n mapMove.init(m);\r\n mapPopup.init(m);\r\n\r\n return m;\r\n}\r\n\r\n\r\nnm.quickMap = quickMap;\r\nexport default quickMap;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/olHelpers/quickMap.ts\n **/","/**\r\n * Created by gavorhes on 12/15/2015.\r\n */\r\n\r\nconst $ = require('jquery');\r\nimport provide from '../util/provide';\r\nimport {ol} from 'custom-ol';\r\nconst nm = provide('olHelpers');\r\n\r\n\r\nexport interface quickMapOptions {\r\n divId?: string;\r\n center?: {x: number, y: number};\r\n zoom?: number;\r\n minZoom?: number;\r\n maxZoom?: number;\r\n baseSwitcher?: boolean;\r\n fullScreen?: boolean;\r\n}\r\n\r\n/**\r\n * Sets up a map with some default parameters and initializes\r\n * mapMove and mapPopup\r\n *\r\n * @param [options={}] config options\r\n * @param [options.divId=map] map div id\r\n * @param [options.center={}] center config object\r\n * @param [options.center.x=-10018378] center x, web mercator x or lon\r\n * @param [options.center.y=5574910] center y, web mercator y or lat\r\n * @param [options.zoom=7] zoom level\r\n * @param [options.minZoom=undefined] min zoom\r\n * @param [options.maxZoom=undefined] max zoom\r\n * @param [options.baseSwitcher=true] if add base map switcher\r\n * @param [options.fullScreen=false] if add base map switcher\r\n * @returns the ol map\r\n */\r\nexport function quickMapBase(options?: quickMapOptions): ol.Map {\r\n options = options || {} as quickMapOptions;\r\n options.divId = options.divId || 'map';\r\n options.center = options.center || {x: -10018378, y: 5574910};\r\n options.zoom = typeof options.zoom == 'number' ? options.zoom : 7;\r\n options.baseSwitcher = typeof options.baseSwitcher == 'boolean' ? options.baseSwitcher : true;\r\n options.fullScreen = typeof options.fullScreen == 'boolean' ? options.fullScreen : false;\r\n\r\n\r\n let $mapDiv = $('#' + options.divId);\r\n $mapDiv.css('position', 'relative');\r\n\r\n let osmLayer = new ol.layer.Tile({source: new ol.source.OSM()});\r\n // let satLayer = new ol.layer.Tile({visible: false, source: new ol.source.MapQuest({layer: 'sat'})});\r\n\r\n let osmCss = \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMAUExURQAAADQ1NDk5OURFREtLS1FHSFlZWGJRVGJiYWdmZWxsbHRmaXBpanN0c3V0dHp5eX5+fIVzd4F3eeV0jud5juZ8k4aHhomHhoyGh5eGj5OVlJiVlZiYl5qZmJydnKOTlaKZmqKdnaOioaqqqKuzsbOvrrSysLa3tbW4uLm6ub27ub+/vbGXwbCZwbCgxLKlxrOqyLStybO3yrSxyrWzzbW2y7a1zbK4y7W6zbW8y760yrTAzbTFzrPKzrLOzrTJzrTOzr7CwbXC0LXK0LTO0L3I0bPQz7TQz7PS0bXQ0LnR0brW1bzT0r7U077V1Lzc2dqNqteUsdyXscaquuOHneaGmueHnOeJnuiBleiKn+eNoOiOoOWUpOiRo+iSpeiUpeqYpumaqOmdrPSynemgruSqtOmisOmlsuuqtequuOW1vOuxu+uxvOq1ve+xvPK0pvW3o/W5pfO5qvS7qfCwvMOuwc2/wNenxNyyzNe/0Nq31Nq51dy72Oy3wOu4wOu+xey4wO+6xO2+xfTAr/TCsvfFtPHLvvTJuMPDwMfHxcXKyc3DxMvFyMvLyM3PzcDV08DV1MTX1cbY1s7X1sjZ1sra2Mnd3M7b2c7c2tfH1tnB1t7F2d7M29fX1tLY1tDd2tHe3NTf3NnS19rZ1tva2Nnf3t3d28rh3tXg3Nnh3tzj393k39ni4N7k4N7n5uXDyOfLz+zAxu3CyOzEyezKzeDJ3eLM3uvP0u3P0ePf2+7R0u7Q1u/U0+7U1ezc0+7a2e/d2+3f3vbFzvLOwfHN0PPQw/TUx/LWyvLYzPDQ1fPe0ubc4vve4uHh3+nh3+/h2u/h3vHj2vHl3uHm4eTn4uDp5ebo4+Xo5ODq6ebq6OTv6+nl4+/j4O7l4e7n5ujp4+np5Ozq5e7s5urt6O7t6Orw6u7x6u3x7vPj5PDl4fDo4vDq5fDt5vDu6PDv7PTv6fDx6vHx7fH17fXw6fXy7fb07/bz8fT18vn38vr39fr48/r59Pr6+P3++//+/gAAALNTSk0AAAEAdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wBT9wclAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGHRFWHRTb2Z0d2FyZQBwYWludC5uZXQgNC4wLjlsM35OAAAFNElEQVRIS1VVCZxVUxi/9l0UIUT2bMnY43bVI2c0Y01kSWIaS0j2JEtkN41piomZrPPKQ2aQ7JKImOZlnm2493TJzDufuU1Zi+v/fee+mZ//793vnPOd7zvfes5zDBEZkBBjAcIjb+Iiotqgdhat8AMK0vl7/R9N7GiWtshqIr+EZ5gYKibyUsXY1l/mfFpssvUlWQ0FkU3gy4+RB/+kwYcO8pRSnldcOU/r2lAHARSwk2ORgEmOdC1EsuRiYSqMPwwroMIraZk5V2fYJQjCKfZrRmh3gSAZi2i4b7wSylWu8EqZwS59JkFUaW96JbNSc+CEUmt4rorwuZmWdDaoc+uZETuQlTCU5xYzR7muUnVUVo+BcRhre/VwUpasgJwhH7JkYIYA0sNxhmCwUK+lw6vCKBZehw01dEiyw4Q4aE0Z4ahDhKaFQsGnJ2BgqKoTBsNjFy0SlW6whRAZTdm8DBJmkBZhDi1j4xJQBk6ywrWUTymaCxac8lROcdauRGzQSNtA7EHUYhXyEwhhgjFUqRuO+rauhF1awFpzCsmwUbjIFBR0u1bKtyGpulW/H/cVVzkyGaIWTIR9pFAV6GK2gPMXMX8gPk9zzxXgI1kimcAltEYr+cjio1imlKpEa9rOipLm+p+CZ6Bw//qd1/f/O+GwMxbSLpyoZEcwkyh2jIks+3hmdd2jWUw4scxNysnHxU7nSspTRcJjCZGL3IsjsYJMMg5mwgx7gaIOLBFCogAgBBoNa9w+DE6I+Bs7FTgwwrJbHjWDgpYo2KwtBTcYEDuloC9geQw+k2RGnPGpTaOlq7AS+YICUz4DZVaX2TiNDhuYfTtY4geLi0IoCm3XccwM9hx4kU28StQEljDs3ZEpFGA+8dKzLmV9ymIwF5FOGn2GdJM8KLHDJbXyiYVMG9MRTLiXGGg2QKaxM3khPSRrwM9zEIardxU2w/EiA0gOeYKHzDR0V7/QGV3lKIA9ktrDArxO3gdA+k6SKoBiVwcm7NjZb9+Hnztg282TuHVZ9LOISFNt9MgyCetZVczSxnyDbl17Penq6mqpg1IhRaEO2aVLUO4/r17H8tTv6f13h71dduvZI3Y+uMdWksNSauLovJw5hsqiPIUvt0ku7/iBeUR3sksmomYWtRbAjbiLfv2lX9/V7LVG4uYnUZXhQ7f2OPCZEx9wrYWTcePEQqPEML8pl4mMdr/jlXlvHiRiJ2+MSTFY4TTSYStuvz2R/JXh+PPeGXm055J+3/YDWuNu3R3DArPutyg0ZgykMVDU9Ndm22+wYalr2rse48CnsTIFcMn73vfhNrktx1EUcZnPv6ah3Yy5cDTRdBEoGoBeah71dqFyjZDJLkWk3N3v4uuktssjWpzciMPxQeHj8nMKzcGuB0tAyzFhdCKOYWv4HwOQVwIxLG99a6uvH3sJCyO3h+k4EZ+G7+xj5f4XXksoaGrdMRzSc8ARA8+cdOuk2x6fffNNt5x+Ro1omPlrT/CQDlcNlpx4NBIWXhkx7Y3Zp3ofNR7Uv89Om/beW0TLIynHv3vs1VsOFpSWSXvfuPUf9BrRFyxgXdHoKJnQFegPOovvzz59ntrzye240ig8UQ3lDI2VqwagrKIQcLXNFL3wglN2OHdBQ6/vI3kENDVBwRb3k1XtczFbjWn4EzMYi7CF3129+JTYuRSdrGuS92g5dpqn6qXoJQs5xmL8p+Wt4hLbt0mx2OLNZR2bbPy8zJNQGFM/f/CfXZekRYFjGCWjIJpM+WiCzGBPWHhoyaAsjRT/B2Gy5yzYJkwUAAAAAElFTkSuQmCC')\";\r\n let aerialCss = \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMAUExURQALBgIMDQgOBwQOEQcTBwUSCwoVDAwdBw8ZDgUREwYUGAYZFQYZGgkTFQoVGQsZFAwZHBMeDhIbFBEbHAwWIA4bIREcIQ4hCQwjFw4lHBgkDB8sDxUiExIiGhAoGxohFRshGRorHQcrKQsiIQwmKgooJA0pKQ81Jw8yLRMiIxImKxUrJREuKhslJB0rIhooKRUuMBMyLhkwJhozKh48LxUzMRM9MBwzMiUvFCMtGiMwEiwzFCgzHDI+GSIsISkvJSQxIiM2LiY5Jic+Lyk0JSo0Ky49JSs9KSU1NSM7NCs2NS8+NDM1JzU9Ljg7IDJCHS1DLSNAMitCMSxIOjREITZLIDZJKDlFIjpFKztKJT1LKzJBMzpHMD1JMjpKPD1RKjlQNC1DQj5QQEA8MEJGJkBKJUJNK0lLLEJMMkVMPEpONENSLUdZL0pTLkpaLkRUMkRSPEVZMktUM0pVOklZMklZNEpcNU1ZMk1ZNUxfMk5dNkxcOVFUM1RUOFJbNVFZOVNYPVFdOVJdPFVaOVVaPVVdOlVdPVpaNlpdO0phN01hOlBiN1NhPFNoP1piPWFbPmRjPENOQEtPSURTQkJVS0xVQk1VSkxbQkxcS0heUVFXRFRcQlJfTFxeQlpeS05lQk1kSFRjQVRjSlZpQ1tkQlxlSlxpRF1rSVVnUVtlU1llXF9tU1xoXlxwSl9ramRfQmJlQ2FhSWFlSWFlTmVlSWRmTGFoQWFpRWFsRmVpRWVtRmNsSmtlRGpqRmpsS2BmWGRsUmFrW2ptUmZyR2RxTGpxTWVyU2RyW2d5V2tzUmt0WW15VG15WXFuTHNtVnFxTXF4T3h0TnJzUnJ1XHJ4VXN6Wnp0VHx1W315VXp8XGR0YGx0YHVzZXJ0aHR9ZXV+aHl9YHOCXXqBXXeCYHyCY3iEaHyIYn+JaXqKcYB5WIN6Y4SCXoCDZIGEaYCIZoOLa4iCaImJbIOOdYuMco6OeIuVcpOKbZKPc5aQb5eXe5ufg6KjhAAAAAAAAAAAAAAAAOGCeQgAAAEAdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wBT9wclAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGHRFWHRTb2Z0d2FyZQBwYWludC5uZXQgNC4wLjlsM35OAAAH80lEQVRISy1WbXQUVxm+6wqnk3Zmpxl2FG2EGg92C8GDlWptVTwa+uF3xcKmDfFzCUzDsJNsunXipglJXJbrtJWmwZNSnHD3jojRgUIm2UumIZ0JZ7JByrALbMWW0IBW8aRa4+cf76TeX3Nm3uc+z/s+7/vugl4r/aMTrT4e1pPTqnnmJNn5AyUzRnrRle/qE33dsvrBtAQVoxtpZNK3zSzYjUjviWO2Ag+R77dl7W36n/1Ep9KBPG/S+Py0PkjU/gPKQGqwTHryiWYFAXSvMairsio7SjyNsnCzh0qKImV9/7mhfHQZx2yN1O+7rXUm33MUPaboOkAJHaoIdXfJj2xWeyD8jMFEXkvIu5qzpU988gWB5zl+GS+sFe55trEVPdWZB2miq8bBVkNFO2R0qnrfkiXhcJhtDNXE6tbW97/s9O9/7ZfVhx86/CwrROpfvvxboMqeLsuqPr1j44qEwDNMOBximUiYoU8sw7BC/a7T72uEnyJDlGxZ9KcglZRyuqqrv/tSZErgOI4NgRBTIw9EmHAoFGZZnp6aGaJ2GTxfxYs8kKVUQh7WB5hQeC3LsUxoxVKW14l3BX2WcoUYPiZyLLe8teZ+iuT4GGhvV5KpKWkpyzxEr2MZgQ1xdRjfRBoH+2k6lIHjKTHPPBo8CSJISqqq4wGGOcWylIGlgvgNX1Gd8vF5f+IUIwb30ng+Gg2QfBRIMvy0jG8SVkYo4N0zvUXVRztbJ/L6xL7lUZEXBEHkuZqlS6gEAUgKJurnhFtfpACOYd8b/hVbJPqwi44a6KA0sPVjIi/SIyxb3u8KlAJ0S8jRVgrlW+nVHPdrhiXCxu42d86ByksDc80P3MkJFBFQ8Ho1lQegpWJRWFGsDsRwwv7pIyvuQW0ZkrX6NDVFbqcvaQI8vbyqzt5AARrsbKx5yhQEGs+wPO56bOK+0rcwMrOKkpUbZWYxV04UeZZv/cBKFhRL6Qdv9y4LfEDA7/thg7tTmv1a5/GnO0wl0dQg80wglZaHUmxRvjwAHOfyN0mxrpqLUpcjsK3NHYMo4R1o6eho2ZyIb2FoeOC3ILK8kZ2HQMOuWywGXUkJBCeTbYFS0+ym1h2/6UgmvnrvKYZZtIEXGf75C2cIAp5LHNd71x7uPoTjakrWH9e3KFpaatjUvJUysFw0KrLMYMW2lTg4PeUQx6kJEALvxXEmCdVyPLHtCSjBhc01XCjIgafxou+PE6KC1dhxSCwoBCc+N4P3btM84pmdSSjJnjO/nvY4LQfVyz5/I+v6IwjUOMjy+MVCxIbKupTJaEktp7cTKU42Pvjh2m/8cSpC6aPsaX/MHSuUQLVVsIa4RUTs/r/BVAexNdjdnsNG7j/rV93xheLMzKnFrPeTEQchCyCcKb25aAIn7lrAertrZwyNXM8N6zfWrFo3d2SmOEcF83x/r+OOFgrAHYWF7cELjhV7UQo/6WAIUVl9JFl8a//HZ66VpbY3I9QKZqPru77lA+iOWAIr0hKxHCmmr0othSyeIl5y3qt4xT8gSNrKEZozs8Els67rgsLOZ+ygzwMfbtNhobfgzpEyGnz7htPtzUi6PuOoj7K0WF/MXiUFxwGajRD1hjYXHXI9p406qOyinp5/tiWcDHY0jIu4n64Qfq7kliB2gemag9QbOia0PbbDMbd43SHuvxFxrAocxins7MX5Kqbe1QixKBxoV4//PfAgGCu+Rlm4SvZizyDH+0reDHp92iO0BuX3bCfItl0PEwvYLqpwXG2MHlGsQ4S8pMJZv1JGmHiEoHQDdOjwmVlEP/nE9ADKjI8xLI0OOGITfy0SbeG/C2jKUDGSlDhM9I3IpK9iup6XnbRNC7yqueNsJCCIiXzdQhnaGN+46umnEdy5U5UbUJ48LFM9GkJo8BdDOiAZ7ZIQbKhYLMqvhU2wmNxjEAsS2AI7y4nWF64duePbk7YV3zvAVLEMD9AxJRNa3KDUibV7DjnkuprMEYjScFNcaR2ceP2u9R/5k1052Ryme5phAFRswlHjAudiP4dOy7CaxLgdJh9vUlU1702/+LPa1U9fvPi9qlA4XEUBJc3dFlpsR457IDl1iPqLp7o81NQgyV19iYU38uTiv975Pd3SiwQcsGjx+v4/6fl5T7EOOMTCtpbKxfemsQq/3olQZcminADAAI0cuGLHaHOFxbuGvRk/Z9u7CULqoVR6NE0yx1avj30oRhc/jWUoIALGxkz0dg1Dl9iaI7LqOOXKsXJFwjiuEAi70Jra2nW1PL08zLBhZsMABpW5csI7TPfew9ipFKcn5k1i+1KyCWKjC3W/8dF1d666+RaabBVTFTHacjoojBNDh0NDxk+IPTlwfqJkWpbnpFHXIbLbmpxEQ3ff/Z0g/mauXsoln9wDRjy/NHsQFw3P6vWuTJ43/+FZrk2cvAFRipCKdfD9y2+pjRj78s0KdCUDKJvdV91ChngV38T20TM+gghjpJaPlpFr2xbEz5g4A/NGt5rNwdwmYGeeeMXBSLHHUIc+6RsojRH9VTUm3/mLf/64b470XvoxoTKhlMBQ2jMEzo2PjxdGMppmn1RM24bWFJqaQv4BcuJa2Sam7Zokq1ldCsz06NCBHrhwqVQYpfFj42NZexz1EW9SR/kT58nEeQKJb2fPXjjp0u/YUkwHEgLeOnf2nOuf1TRTM02CLKLTPy60/x1CCztqn7Ev+BdsC3m+30decQvW/wBNTwU+CfUQAQAAAABJRU5ErkJggg==')\";\r\n\r\n if (options.baseSwitcher) {\r\n // let switcherContent = '<div class=\"base-map-switcher\" title=\"Toggle Base Layer\" style=\"';\r\n // switcherContent += 'position: absolute; top: 70px; left: 4px; border: solid black 1px; ';\r\n // switcherContent += `height: 50px; width: 50px; z-index: 10; border-radius: 4px; background: ${aerialCss};`;\r\n // switcherContent += '\"></div>';\r\n // $mapDiv.append(switcherContent);\r\n //\r\n // $mapDiv.find('.base-map-switcher').click(function() {\r\n // \"use strict\";\r\n // osmLayer.setVisible(!osmLayer.getVisible());\r\n // satLayer.setVisible(!satLayer.getVisible());\r\n //\r\n // if (osmLayer.getVisible()){\r\n // $(this).css('background', aerialCss);\r\n // } else {\r\n // $(this).css('background', osmCss);\r\n // }\r\n // });\r\n }\r\n\r\n if (options.zoom < 0 || options.zoom > 28) {\r\n throw 'zoom out of range';\r\n }\r\n\r\n if (options.center.x >= -180 && options.center.x <= 180 && options.center.y >= -90 && options.center.y <= 90) {\r\n let p = new ol.geom.Point([options.center.x, options.center.y]);\r\n new ol.proj.Projection({code: \"EPSG:4326\"});\r\n\r\n p.transform(new ol.proj.Projection({code: \"EPSG:4326\"}), new ol.proj.Projection({code: \"EPSG:3857\"}));\r\n let coordinates = p.getCoordinates();\r\n options.center.x = coordinates[0];\r\n options.center.y = coordinates[1];\r\n }\r\n\r\n let map = new ol.Map({\r\n layers: [osmLayer],\r\n target: options.divId,\r\n controls: ol.control.defaults({\r\n attributionOptions: {collapsible: false}\r\n }),\r\n view: new ol.View({\r\n center: [options.center.x, options.center.y],\r\n zoom: options.zoom,\r\n minZoom: options.minZoom,\r\n maxZoom: options.maxZoom\r\n })\r\n });\r\n\r\n if (options.fullScreen) {\r\n //TODO add full screen options to ts\r\n map.addControl(new ol.control.FullScreen({}));\r\n }\r\n\r\n return map;\r\n}\r\n\r\nnm.quickMapBase = quickMapBase;\r\nexport default quickMapBase;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/olHelpers/quickMapBase.ts\n **/","/*!\n * jQuery JavaScript Library v2.2.3\n * http://jquery.com/\n *\n * Includes Sizzle.js\n * http://sizzlejs.com/\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2016-04-05T19:26Z\n */\n\n(function( global, factory ) {\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket #14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n}(typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Support: Firefox 18+\n// Can't be in strict mode, several libs including ASP.NET trace\n// the stack via arguments.caller.callee and Firefox dies if\n// you try to trace through \"use strict\" call chains. (#13335)\n//\"use strict\";\nvar arr = [];\n\nvar document = window.document;\n\nvar slice = arr.slice;\n\nvar concat = arr.concat;\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar support = {};\n\n\n\nvar\n\tversion = \"2.2.3\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t},\n\n\t// Support: Android<4.1\n\t// Make sure we trim BOM and NBSP\n\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,\n\n\t// Matches dashed string for camelizing\n\trmsPrefix = /^-ms-/,\n\trdashAlpha = /-([\\da-z])/gi,\n\n\t// Used by jQuery.camelCase as callback to replace()\n\tfcamelCase = function( all, letter ) {\n\t\treturn letter.toUpperCase();\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// Start with an empty selector\n\tselector: \"\",\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\t\treturn num != null ?\n\n\t\t\t// Return just the one element from the set\n\t\t\t( num < 0 ? this[ num + this.length ] : this[ num ] ) :\n\n\t\t\t// Return all the elements in a clean array\n\t\t\tslice.call( this );\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\t\tret.context = this.context;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !jQuery.isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tsrc = target[ name ];\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = jQuery.isArray( copy ) ) ) ) {\n\n\t\t\t\t\tif ( copyIsArray ) {\n\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\tclone = src && jQuery.isArray( src ) ? src : [];\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src && jQuery.isPlainObject( src ) ? src : {};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisFunction: function( obj ) {\n\t\treturn jQuery.type( obj ) === \"function\";\n\t},\n\n\tisArray: Array.isArray,\n\n\tisWindow: function( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t},\n\n\tisNumeric: function( obj ) {\n\n\t\t// parseFloat NaNs numeric-cast false positives (null|true|false|\"\")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t// subtraction forces infinities to NaN\n\t\t// adding 1 corrects loss of precision from parseFloat (#15100)\n\t\tvar realStringObj = obj && obj.toString();\n\t\treturn !jQuery.isArray( obj ) && ( realStringObj - parseFloat( realStringObj ) + 1 ) >= 0;\n\t},\n\n\tisPlainObject: function( obj ) {\n\t\tvar key;\n\n\t\t// Not plain objects:\n\t\t// - Any object or value whose internal [[Class]] property is not \"[object Object]\"\n\t\t// - DOM nodes\n\t\t// - window\n\t\tif ( jQuery.type( obj ) !== \"object\" || obj.nodeType || jQuery.isWindow( obj ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Not own constructor property must be Object\n\t\tif ( obj.constructor &&\n\t\t\t\t!hasOwn.call( obj, \"constructor\" ) &&\n\t\t\t\t!hasOwn.call( obj.constructor.prototype || {}, \"isPrototypeOf\" ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Own properties are enumerated firstly, so to speed up,\n\t\t// if last one is own, then all properties are own\n\t\tfor ( key in obj ) {}\n\n\t\treturn key === undefined || hasOwn.call( obj, key );\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\ttype: function( obj ) {\n\t\tif ( obj == null ) {\n\t\t\treturn obj + \"\";\n\t\t}\n\n\t\t// Support: Android<4.0, iOS<6 (functionish RegExp)\n\t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\t\ttypeof obj;\n\t},\n\n\t// Evaluates a script in a global context\n\tglobalEval: function( code ) {\n\t\tvar script,\n\t\t\tindirect = eval;\n\n\t\tcode = jQuery.trim( code );\n\n\t\tif ( code ) {\n\n\t\t\t// If the code includes a valid, prologue position\n\t\t\t// strict mode pragma, execute code by injecting a\n\t\t\t// script tag into the document.\n\t\t\tif ( code.indexOf( \"use strict\" ) === 1 ) {\n\t\t\t\tscript = document.createElement( \"script\" );\n\t\t\t\tscript.text = code;\n\t\t\t\tdocument.head.appendChild( script ).parentNode.removeChild( script );\n\t\t\t} else {\n\n\t\t\t\t// Otherwise, avoid the DOM node creation, insertion\n\t\t\t\t// and removal by using an indirect global eval\n\n\t\t\t\tindirect( code );\n\t\t\t}\n\t\t}\n\t},\n\n\t// Convert dashed to camelCase; used by the css and data modules\n\t// Support: IE9-11+\n\t// Microsoft forgot to hump their vendor prefix (#9572)\n\tcamelCase: function( string ) {\n\t\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n\t},\n\n\tnodeName: function( elem, name ) {\n\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// Support: Android<4.1\n\ttrim: function( text ) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t( text + \"\" ).replace( rtrim, \"\" );\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn concat.apply( [], ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// Bind a function to a context, optionally partially applying any\n\t// arguments.\n\tproxy: function( fn, context ) {\n\t\tvar tmp, args, proxy;\n\n\t\tif ( typeof context === \"string\" ) {\n\t\t\ttmp = fn[ context ];\n\t\t\tcontext = fn;\n\t\t\tfn = tmp;\n\t\t}\n\n\t\t// Quick check to determine if target is callable, in the spec\n\t\t// this throws a TypeError, but we will just return undefined.\n\t\tif ( !jQuery.isFunction( fn ) ) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Simulated bind\n\t\targs = slice.call( arguments, 2 );\n\t\tproxy = function() {\n\t\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t\t};\n\n\t\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\t\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\t\treturn proxy;\n\t},\n\n\tnow: Date.now,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\n// JSHint would error on this code due to the Symbol not being defined in ES5.\n// Defining this global in .jshintrc would create a danger of using the global\n// unguarded in another place, it seems safer to just disable JSHint for these\n// three lines.\n/* jshint ignore: start */\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n/* jshint ignore: end */\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\nfunction( i, name ) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: iOS 8.2 (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = jQuery.type( obj );\n\n\tif ( type === \"function\" || jQuery.isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v2.2.1\n * http://sizzlejs.com/\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2015-10-17\n */\n(function( window ) {\n\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// General-purpose constants\n\tMAX_NEGATIVE = 1 << 31,\n\n\t// Instance methods\n\thasOwn = ({}).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpush_native = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\t// Use a stripped-down indexOf as it's faster than native\n\t// http://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[i] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\n\t// http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n\tidentifier = \"(?:\\\\\\\\.|[\\\\w-]|[^\\\\x00-\\\\xa0])+\",\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace +\n\t\t\"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\" ),\n\n\trattributeQuotes = new RegExp( \"=\" + whitespace + \"*([^\\\\]'\\\"]*?)\" + whitespace + \"*\\\\]\", \"g\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace +\n\t\t\t\"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace +\n\t\t\t\"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" +\n\t\t\twhitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\trescape = /'|\\\\/g,\n\n\t// CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\([\\\\da-f]{1,6}\" + whitespace + \"?|(\" + whitespace + \")|.)\", \"ig\" ),\n\tfunescape = function( _, escaped, escapedWhitespace ) {\n\t\tvar high = \"0x\" + escaped - 0x10000;\n\t\t// NaN means non-codepoint\n\t\t// Support: Firefox<24\n\t\t// Workaround erroneous numeric interpretation of +\"0x\"\n\t\treturn high !== high || escapedWhitespace ?\n\t\t\tescaped :\n\t\t\thigh < 0 ?\n\t\t\t\t// BMP codepoint\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\t// Supplemental Plane codepoint (surrogate pair)\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t};\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t(arr = slice.call( preferredDoc.childNodes )),\n\t\tpreferredDoc.childNodes\n\t);\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpush_native.apply( target, slice.call(els) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( (target[j++] = els[i++]) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar m, i, elem, nid, nidselect, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\n\t\tif ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {\n\t\t\tsetDocument( context );\n\t\t}\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( (m = match[1]) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( (elem = context.getElementById( m )) ) {\n\n\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && (elem = newContext.getElementById( m )) &&\n\t\t\t\t\t\t\tcontains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[2] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( (m = match[3]) && support.getElementsByClassName &&\n\t\t\t\t\tcontext.getElementsByClassName ) {\n\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( support.qsa &&\n\t\t\t\t!compilerCache[ selector + \" \" ] &&\n\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test( selector )) ) {\n\n\t\t\t\tif ( nodeType !== 1 ) {\n\t\t\t\t\tnewContext = context;\n\t\t\t\t\tnewSelector = selector;\n\n\t\t\t\t// qSA looks outside Element context, which is not what we want\n\t\t\t\t// Thanks to Andrew Dupont for this workaround technique\n\t\t\t\t// Support: IE <=8\n\t\t\t\t// Exclude object elements\n\t\t\t\t} else if ( context.nodeName.toLowerCase() !== \"object\" ) {\n\n\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\tif ( (nid = context.getAttribute( \"id\" )) ) {\n\t\t\t\t\t\tnid = nid.replace( rescape, \"\\\\$&\" );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontext.setAttribute( \"id\", (nid = expando) );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\tnidselect = ridentifier.test( nid ) ? \"#\" + nid : \"[id='\" + nid + \"']\";\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[i] = nidselect + \" \" + toSelector( groups[i] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\t\t\t\t}\n\n\t\t\t\tif ( newSelector ) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn (cache[ key + \" \" ] = value);\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created div and expects a boolean result\n */\nfunction assert( fn ) {\n\tvar div = document.createElement(\"div\");\n\n\ttry {\n\t\treturn !!fn( div );\n\t} catch (e) {\n\t\treturn false;\n\t} finally {\n\t\t// Remove from its parent by default\n\t\tif ( div.parentNode ) {\n\t\t\tdiv.parentNode.removeChild( div );\n\t\t}\n\t\t// release memory in IE\n\t\tdiv = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split(\"|\"),\n\t\ti = arr.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[i] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\t( ~b.sourceIndex || MAX_NEGATIVE ) -\n\t\t\t( ~a.sourceIndex || MAX_NEGATIVE );\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( (cur = cur.nextSibling) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn (name === \"input\" || name === \"button\") && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction(function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction(function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ (j = matchIndexes[i]) ] ) {\n\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\t// documentElement is verified for cases where it doesn't yet exist\n\t// (such as loading iframes in IE - #4833)\n\tvar documentElement = elem && (elem.ownerDocument || elem).documentElement;\n\treturn documentElement ? documentElement.nodeName !== \"HTML\" : false;\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, parent,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\tif ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocElem = document.documentElement;\n\tdocumentIsHTML = !isXML( document );\n\n\t// Support: IE 9-11, Edge\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\tif ( (parent = document.defaultView) && parent.top !== parent ) {\n\t\t// Support: IE 11\n\t\tif ( parent.addEventListener ) {\n\t\t\tparent.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( parent.attachEvent ) {\n\t\t\tparent.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert(function( div ) {\n\t\tdiv.className = \"i\";\n\t\treturn !div.getAttribute(\"className\");\n\t});\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert(function( div ) {\n\t\tdiv.appendChild( document.createComment(\"\") );\n\t\treturn !div.getElementsByTagName(\"*\").length;\n\t});\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert(function( div ) {\n\t\tdocElem.appendChild( div ).id = expando;\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\n\t});\n\n\t// ID find and filter\n\tif ( support.getById ) {\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar m = context.getElementById( id );\n\t\t\t\treturn m ? [ m ] : [];\n\t\t\t}\n\t\t};\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t};\n\t\t};\n\t} else {\n\t\t// Support: IE6/7\n\t\t// getElementById is not reliable as a find shortcut\n\t\tdelete Expr.find[\"ID\"];\n\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode(\"id\");\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[\"TAG\"] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( (elem = results[i++]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[\"CLASS\"] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See http://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( (support.qsa = rnative.test( document.querySelectorAll )) ) {\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert(function( div ) {\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// http://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( div ).innerHTML = \"<a id='\" + expando + \"'></a>\" +\n\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' msallowcapture=''>\" +\n\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( div.querySelectorAll(\"[msallowcapture^='']\").length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !div.querySelectorAll(\"[selected]\").length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\t\t\tif ( !div.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push(\"~=\");\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !div.querySelectorAll(\":checked\").length ) {\n\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibing-combinator selector` fails\n\t\t\tif ( !div.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\n\t\t\t}\n\t\t});\n\n\t\tassert(function( div ) {\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = document.createElement(\"input\");\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tdiv.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( div.querySelectorAll(\"[name=d]\").length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !div.querySelectorAll(\":enabled\").length ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tdiv.querySelectorAll(\"*,:x\");\n\t\t\trbuggyQSA.push(\",.*:\");\n\t\t});\n\t}\n\n\tif ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector) )) ) {\n\n\t\tassert(function( div ) {\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( div, \"div\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( div, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t});\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join(\"|\") );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join(\"|\") );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully self-exclusive\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t));\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( (b = b.parentNode) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\tcompare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\tif ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\n\t\t\treturn a === document ? -1 :\n\t\t\t\tb === document ? 1 :\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[i] === bp[i] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[i], bp[i] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\tap[i] === preferredDoc ? -1 :\n\t\t\tbp[i] === preferredDoc ? 1 :\n\t\t\t0;\n\t};\n\n\treturn document;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\t// Make sure that attribute selectors are quoted\n\texpr = expr.replace( rattributeQuotes, \"='$1']\" );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!compilerCache[ expr + \" \" ] &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch (e) {}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\t// Set document vars if needed\n\tif ( ( context.ownerDocument || context ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t(val = elem.getAttributeNode(name)) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( (elem = results[i++]) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( (node = elem[i++]) ) {\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[1] = match[1].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[3] = ( match[3] || match[4] || match[5] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[2] === \"~=\" ) {\n\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\tif ( match[1].slice( 0, 3 ) === \"nth\" ) {\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[3] ) {\n\t\t\t\t\tSizzle.error( match[0] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === \"even\" || match[3] === \"odd\" ) );\n\t\t\t\tmatch[5] = +( ( match[7] + match[8] ) || match[3] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[3] ) {\n\t\t\t\tSizzle.error( match[0] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\tif ( matchExpr[\"CHILD\"].test( match[0] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[3] ) {\n\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t(excess = tokenize( unquoted, true )) &&\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t(excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[0] = match[0].slice( 0, excess );\n\t\t\t\tmatch[2] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() { return true; } :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t(pattern = new RegExp( \"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\" )) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test( typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== \"undefined\" && elem.getAttribute(\"class\") || \"\" );\n\t\t\t\t});\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tvar cache, uniqueCache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( (node = node[ dir ]) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction(function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf( seed, matched[i] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[i] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction(function( selector ) {\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction(function( seed, matches, context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = unmatched[i]) ) {\n\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}) :\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\t\t\t\t\t// Don't keep the element (issue #299)\n\t\t\t\t\tinput[0] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t}),\n\n\t\t\"has\": markFunction(function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t}),\n\n\t\t\"contains\": markFunction(function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t}),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test(lang || \"\") ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( (elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( (elem = elem.parentNode) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": function( elem ) {\n\t\t\treturn elem.disabled === false;\n\t\t},\n\n\t\t\"disabled\": function( elem ) {\n\t\t\treturn elem.disabled === true;\n\t\t},\n\n\t\t\"checked\": function( elem ) {\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn (nodeName === \"input\" && !!elem.checked) || (nodeName === \"option\" && !!elem.selected);\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t// but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[\"empty\"]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo(function() {\n\t\t\treturn [ 0 ];\n\t\t}),\n\n\t\t\"last\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t}),\n\n\t\t\"eq\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t}),\n\n\t\t\"even\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"odd\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"lt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"gt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t})\n\t}\n};\n\nExpr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || (match = rcomma.exec( soFar )) ) {\n\t\t\tif ( match ) {\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[0].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( (tokens = []) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( (match = rcombinators.exec( soFar )) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push({\n\t\t\t\tvalue: matched,\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[0].replace( rtrim, \" \" )\n\t\t\t});\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\n\t\t\t\t(match = preFilters[ type ]( match ))) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push({\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t});\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[i].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tcheckNonElements = base && dir === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, uniqueCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || (elem[ expando ] = {});\n\n\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});\n\n\t\t\t\t\t\tif ( (oldCache = uniqueCache[ dir ]) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn (newCache[ 2 ] = oldCache[ 2 ]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\tuniqueCache[ dir ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[i]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[0];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[i], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (elem = unmatched[i]) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction(function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts( selector || \"*\", context.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( (elem = temp[i]) ) {\n\t\t\t\t\tmatcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = matcherOut[i]) ) {\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( (matcherIn[i] = elem) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, (matcherOut = []), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( (elem = matcherOut[i]) &&\n\t\t\t\t\t\t(temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {\n\n\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[0].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\t\t\t// Avoid hanging onto element (issue #299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (matcher = Expr.relative[ tokens[i].type ]) ) {\n\t\t\tmatchers = [ addCombinator(elementMatcher( matchers ), matcher) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[j].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( (tokens = tokens.slice( j )) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[\"TAG\"]( \"*\", outermost ),\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\t\t\t\toutermostContext = context === document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching elements by id\n\t\t\tfor ( ; i !== len && (elem = elems[i]) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\tif ( !context && elem.ownerDocument !== document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( (matcher = elementMatchers[j++]) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( (elem = !matcher && elem) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (matcher = setMatchers[j++]) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !(unmatched[i] || setMatched[i]) ) {\n\t\t\t\t\t\t\t\tsetMatched[i] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[i] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\n\n/**\n * A low-level selection function that works with Sizzle's compiled\n * selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n * selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( (selector = compiled.selector || selector) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[0] = match[0].slice( 0 );\n\t\tif ( tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\tsupport.getById && context.nodeType === 9 && documentIsHTML &&\n\t\t\t\tExpr.relative[ tokens[1].type ] ) {\n\n\t\t\tcontext = ( Expr.find[\"ID\"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[\"needsContext\"].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[i];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ (type = token.type) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( (find = Expr.find[ type ]) ) {\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( (seed = find(\n\t\t\t\t\ttoken.matches[0].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context\n\t\t\t\t)) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n};\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split(\"\").sort( sortOrder ).join(\"\") === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert(function( div1 ) {\n\t// Should return 1, but returns 4 (following)\n\treturn div1.compareDocumentPosition( document.createElement(\"div\") ) & 1;\n});\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert(function( div ) {\n\tdiv.innerHTML = \"<a href='#'></a>\";\n\treturn div.firstChild.getAttribute(\"href\") === \"#\" ;\n}) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert(function( div ) {\n\tdiv.innerHTML = \"<input/>\";\n\tdiv.firstChild.setAttribute( \"value\", \"\" );\n\treturn div.firstChild.getAttribute( \"value\" ) === \"\";\n}) ) {\n\taddHandle( \"value\", function( elem, name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert(function( div ) {\n\treturn div.getAttribute(\"disabled\") == null;\n}) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t\t(val = elem.getAttributeNode( name )) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\tnull;\n\t\t}\n\t});\n}\n\nreturn Sizzle;\n\n})( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\n\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\nvar rsingleTag = ( /^<([\\w-]+)\\s*\\/?>(?:<\\/\\1>|)$/ );\n\n\n\nvar risSimple = /^.[^:#\\[\\.,]*$/;\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( jQuery.isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\t/* jshint -W018 */\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\n\t}\n\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\n\t}\n\n\tif ( typeof qualifier === \"string\" ) {\n\t\tif ( risSimple.test( qualifier ) ) {\n\t\t\treturn jQuery.filter( qualifier, elements, not );\n\t\t}\n\n\t\tqualifier = jQuery.filter( qualifier, elements );\n\t}\n\n\treturn jQuery.grep( elements, function( elem ) {\n\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t} );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\treturn elems.length === 1 && elem.nodeType === 1 ?\n\t\tjQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :\n\t\tjQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\t\treturn elem.nodeType === 1;\n\t\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i,\n\t\t\tlen = this.length,\n\t\t\tret = [],\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\t// Needed because $( selector, context ) becomes $( context ).find( selector )\n\t\tret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );\n\t\tret.selector = this.selector ? this.selector + \" \" + selector : selector;\n\t\treturn ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]*))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( jQuery.isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\t// Support: Blackberry 4.6\n\t\t\t\t\t// gEBID returns nodes no longer in the document (#6963)\n\t\t\t\t\tif ( elem && elem.parentNode ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.context = document;\n\t\t\t\t\tthis.selector = selector;\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis.context = this[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( jQuery.isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\tif ( selector.selector !== undefined ) {\n\t\t\tthis.selector = selector.selector;\n\t\t\tthis.context = selector.context;\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\tpos = rneedsContext.test( selectors ) || typeof selectors !== \"string\" ?\n\t\t\t\tjQuery( selectors, context || this.context ) :\n\t\t\t\t0;\n\n\t\tfor ( ; i < l; i++ ) {\n\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t// Always skip document fragments\n\t\t\t\tif ( cur.nodeType < 11 && ( pos ?\n\t\t\t\t\tpos.index( cur ) > -1 :\n\n\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\treturn elem.contentDocument || jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnotwhite = ( /\\S+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnotwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( jQuery.isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && jQuery.type( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, listener list, final state\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ), \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ), \"rejected\" ],\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ) ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tthen: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\t\t\t\t\tvar fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];\n\n\t\t\t\t\t\t\t// deferred[ done | fail | progress ] for forwarding actions to newDefer\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && jQuery.isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis === promise ? newDefer.promise() : this,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Keep pipe for back-compat\n\t\tpromise.pipe = promise.then;\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 3 ];\n\n\t\t\t// promise[ done | fail | progress ] = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add( function() {\n\n\t\t\t\t\t// state = [ resolved | rejected ]\n\t\t\t\t\tstate = stateString;\n\n\t\t\t\t// [ reject_list | resolve_list ].disable; progress_list.lock\n\t\t\t\t}, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );\n\t\t\t}\n\n\t\t\t// deferred[ resolve | reject | notify ]\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? promise : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( subordinate /* , ..., subordinateN */ ) {\n\t\tvar i = 0,\n\t\t\tresolveValues = slice.call( arguments ),\n\t\t\tlength = resolveValues.length,\n\n\t\t\t// the count of uncompleted subordinates\n\t\t\tremaining = length !== 1 ||\n\t\t\t\t( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,\n\n\t\t\t// the master Deferred.\n\t\t\t// If resolveValues consist of only a single Deferred, just use that.\n\t\t\tdeferred = remaining === 1 ? subordinate : jQuery.Deferred(),\n\n\t\t\t// Update function for both resolve and progress values\n\t\t\tupdateFunc = function( i, contexts, values ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tcontexts[ i ] = this;\n\t\t\t\t\tvalues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( values === progressValues ) {\n\t\t\t\t\t\tdeferred.notifyWith( contexts, values );\n\t\t\t\t\t} else if ( !( --remaining ) ) {\n\t\t\t\t\t\tdeferred.resolveWith( contexts, values );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t},\n\n\t\t\tprogressValues, progressContexts, resolveContexts;\n\n\t\t// Add listeners to Deferred subordinates; treat others as resolved\n\t\tif ( length > 1 ) {\n\t\t\tprogressValues = new Array( length );\n\t\t\tprogressContexts = new Array( length );\n\t\t\tresolveContexts = new Array( length );\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {\n\t\t\t\t\tresolveValues[ i ].promise()\n\t\t\t\t\t\t.progress( updateFunc( i, progressContexts, progressValues ) )\n\t\t\t\t\t\t.done( updateFunc( i, resolveContexts, resolveValues ) )\n\t\t\t\t\t\t.fail( deferred.reject );\n\t\t\t\t} else {\n\t\t\t\t\t--remaining;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// If we're not waiting on anything, resolve the master\n\t\tif ( !remaining ) {\n\t\t\tdeferred.resolveWith( resolveContexts, resolveValues );\n\t\t}\n\n\t\treturn deferred.promise();\n\t}\n} );\n\n\n// The deferred used on DOM ready\nvar readyList;\n\njQuery.fn.ready = function( fn ) {\n\n\t// Add the callback\n\tjQuery.ready.promise().done( fn );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Hold (or release) the ready event\n\tholdReady: function( hold ) {\n\t\tif ( hold ) {\n\t\t\tjQuery.readyWait++;\n\t\t} else {\n\t\t\tjQuery.ready( true );\n\t\t}\n\t},\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\n\t\t// Trigger any bound ready events\n\t\tif ( jQuery.fn.triggerHandler ) {\n\t\t\tjQuery( document ).triggerHandler( \"ready\" );\n\t\t\tjQuery( document ).off( \"ready\" );\n\t\t}\n\t}\n} );\n\n/**\n * The ready event handler and self cleanup method\n */\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\njQuery.ready.promise = function( obj ) {\n\tif ( !readyList ) {\n\n\t\treadyList = jQuery.Deferred();\n\n\t\t// Catch cases where $(document).ready() is called\n\t\t// after the browser event has already occurred.\n\t\t// Support: IE9-10 only\n\t\t// Older IE sometimes signals \"interactive\" too soon\n\t\tif ( document.readyState === \"complete\" ||\n\t\t\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t\t\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\t\t\twindow.setTimeout( jQuery.ready );\n\n\t\t} else {\n\n\t\t\t// Use the handy event callback\n\t\t\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t\t\t// A fallback to window.onload, that will always work\n\t\t\twindow.addEventListener( \"load\", completed );\n\t\t}\n\t}\n\treturn readyList.promise( obj );\n};\n\n// Kick off the DOM ready check even if the user does not\njQuery.ready.promise();\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( jQuery.type( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !jQuery.isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\tvalue :\n\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn chainable ?\n\t\telems :\n\n\t\t// Gets\n\t\tbulk ?\n\t\t\tfn.call( elems ) :\n\t\t\tlen ? fn( elems[ 0 ], key ) : emptyGet;\n};\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t// - Node\n\t// - Node.ELEMENT_NODE\n\t// - Node.DOCUMENT_NODE\n\t// - Object\n\t// - Any\n\t/* jshint -W018 */\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tregister: function( owner, initial ) {\n\t\tvar value = initial || {};\n\n\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t// use plain assignment\n\t\tif ( owner.nodeType ) {\n\t\t\towner[ this.expando ] = value;\n\n\t\t// Otherwise secure it in a non-enumerable, non-writable property\n\t\t// configurability must be true to allow the property to be\n\t\t// deleted with the delete operator\n\t\t} else {\n\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\tvalue: value,\n\t\t\t\twritable: true,\n\t\t\t\tconfigurable: true\n\t\t\t} );\n\t\t}\n\t\treturn owner[ this.expando ];\n\t},\n\tcache: function( owner ) {\n\n\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t// but we should not, see #8335.\n\t\t// Always return an empty object.\n\t\tif ( !acceptData( owner ) ) {\n\t\t\treturn {};\n\t\t}\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see #8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ data ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ prop ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\t\t\towner[ this.expando ] && owner[ this.expando ][ key ];\n\t},\n\taccess: function( owner, key, value ) {\n\t\tvar stored;\n\n\t\t// In cases where either:\n\t\t//\n\t\t// 1. No key was specified\n\t\t// 2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t// 1. The entire cache object\n\t\t// 2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\tstored = this.get( owner, key );\n\n\t\t\treturn stored !== undefined ?\n\t\t\t\tstored : this.get( owner, jQuery.camelCase( key ) );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t// 1. An object of properties\n\t\t// 2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i, name, camel,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key === undefined ) {\n\t\t\tthis.register( owner );\n\n\t\t} else {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( jQuery.isArray( key ) ) {\n\n\t\t\t\t// If \"name\" is an array of keys...\n\t\t\t\t// When data is initially created, via (\"key\", \"val\") signature,\n\t\t\t\t// keys will be converted to camelCase.\n\t\t\t\t// Since there is no way to tell _how_ a key was added, remove\n\t\t\t\t// both plain key and camelCase key. #12786\n\t\t\t\t// This will only penalize the array argument path.\n\t\t\t\tname = key.concat( key.map( jQuery.camelCase ) );\n\t\t\t} else {\n\t\t\t\tcamel = jQuery.camelCase( key );\n\n\t\t\t\t// Try the string as a key before any manipulation\n\t\t\t\tif ( key in cache ) {\n\t\t\t\t\tname = [ key, camel ];\n\t\t\t\t} else {\n\n\t\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\t\tname = camel;\n\t\t\t\t\tname = name in cache ?\n\t\t\t\t\t\t[ name ] : ( name.match( rnotwhite ) || [] );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\ti = name.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ name[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <= 35-45+\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://code.google.com/p/chromium/issues/detail?id=378607\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = data === \"true\" ? true :\n\t\t\t\t\tdata === \"false\" ? false :\n\t\t\t\t\tdata === \"null\" ? null :\n\n\t\t\t\t\t// Only convert to a number if it doesn't change the string\n\t\t\t\t\t+data + \"\" === data ? +data :\n\t\t\t\t\trbrace.test( data ) ? jQuery.parseJSON( data ) :\n\t\t\t\t\tdata;\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE11+\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = jQuery.camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data, camelKey;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// with the key as-is\n\t\t\t\tdata = dataUser.get( elem, key ) ||\n\n\t\t\t\t\t// Try to find dashed key if it exists (gh-2779)\n\t\t\t\t\t// This is for 2.2.x only\n\t\t\t\t\tdataUser.get( elem, key.replace( rmultiDash, \"-$&\" ).toLowerCase() );\n\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\tcamelKey = jQuery.camelCase( key );\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// with the key camelized\n\t\t\t\tdata = dataUser.get( elem, camelKey );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, camelKey, undefined );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tcamelKey = jQuery.camelCase( key );\n\t\t\tthis.each( function() {\n\n\t\t\t\t// First, attempt to store a copy or reference of any\n\t\t\t\t// data that might've been store with a camelCased key.\n\t\t\t\tvar data = dataUser.get( this, camelKey );\n\n\t\t\t\t// For HTML5 data-* attribute interop, we have to\n\t\t\t\t// store property names with dashes in a camelCase form.\n\t\t\t\t// This might not apply to all properties...*\n\t\t\t\tdataUser.set( this, camelKey, value );\n\n\t\t\t\t// *... In the case of properties that might _actually_\n\t\t\t\t// have dashes, we need to also store a copy of that\n\t\t\t\t// unchanged property.\n\t\t\t\tif ( key.indexOf( \"-\" ) > -1 && data !== undefined ) {\n\t\t\t\t\tdataUser.set( this, key, value );\n\t\t\t\t}\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || jQuery.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar isHidden = function( elem, el ) {\n\n\t\t// isHidden might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\t\treturn jQuery.css( elem, \"display\" ) === \"none\" ||\n\t\t\t!jQuery.contains( elem.ownerDocument, elem );\n\t};\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted,\n\t\tscale = 1,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() { return tween.cur(); } :\n\t\t\tfunction() { return jQuery.css( elem, prop, \"\" ); },\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = ( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\tdo {\n\n\t\t\t// If previous iteration zeroed out, double until we get *something*.\n\t\t\t// Use string for doubling so we don't accidentally see scale as unchanged below\n\t\t\tscale = scale || \".5\";\n\n\t\t\t// Adjust and apply\n\t\t\tinitialInUnit = initialInUnit / scale;\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Update scale, tolerating zero or NaN from tween.cur()\n\t\t// Break the loop if scale is unchanged or perfect, or if we've just had enough.\n\t\t} while (\n\t\t\tscale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations\n\t\t);\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([\\w:-]+)/ );\n\nvar rscriptType = ( /^$|\\/(?:java|ecma)script/i );\n\n\n\n// We have to close these tags to support XHTML (#13200)\nvar wrapMap = {\n\n\t// Support: IE9\n\toption: [ 1, \"<select multiple='multiple'>\", \"</select>\" ],\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting <tbody> or other required elements.\n\tthead: [ 1, \"<table>\", \"</table>\" ],\n\tcol: [ 2, \"<table><colgroup>\", \"</colgroup></table>\" ],\n\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\n// Support: IE9\nwrapMap.optgroup = wrapMap.option;\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE9-11+\n\t// Use typeof to avoid zero-argument method invocation on host objects (#15151)\n\tvar ret = typeof context.getElementsByTagName !== \"undefined\" ?\n\t\t\tcontext.getElementsByTagName( tag || \"*\" ) :\n\t\t\ttypeof context.querySelectorAll !== \"undefined\" ?\n\t\t\t\tcontext.querySelectorAll( tag || \"*\" ) :\n\t\t\t[];\n\n\treturn tag === undefined || tag && jQuery.nodeName( context, tag ) ?\n\t\tjQuery.merge( [ context ], ret ) :\n\t\tret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, contains, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( jQuery.type( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android<4.1, PhantomJS<2\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android<4.1, PhantomJS<2\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (#12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tcontains = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( contains ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0-4.3, Safari<=5.1\n\t// Check state lost if the name is set (#11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (#14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Safari<=5.1, Android<4.2\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE<=11+\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n} )();\n\n\nvar\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\n// Support: IE9\n// See #13393 for more info\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Don't attach events to noData or text/comment nodes (but allow plain objects)\n\t\tif ( !elemData ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = {};\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnotwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnotwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( event ) {\n\n\t\t// Make a writable jQuery.Event from the native event object\n\t\tevent = jQuery.event.fix( event );\n\n\t\tvar i, j, ret, matched, handleObj,\n\t\t\thandlerQueue = [],\n\t\t\targs = slice.call( arguments ),\n\t\t\thandlers = ( dataPriv.get( this, \"events\" ) || {} )[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// Triggered event must either 1) have no namespace, or 2) have namespace(s)\n\t\t\t\t// a subset or equal to those in the bound event (both can have no namespace).\n\t\t\t\tif ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, matches, sel, handleObj,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Support (at least): Chrome, IE9\n\t\t// Find delegate handlers\n\t\t// Black-hole SVG <use> instance trees (#13180)\n\t\t//\n\t\t// Support: Firefox<=42+\n\t\t// Avoid non-left-click in FF but don't block IE radio events (#3861, gh-2343)\n\t\tif ( delegateCount && cur.nodeType &&\n\t\t\t( event.type !== \"click\" || isNaN( event.button ) || event.button < 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && ( cur.disabled !== true || event.type !== \"click\" ) ) {\n\t\t\t\t\tmatches = [];\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matches[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatches[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matches[ sel ] ) {\n\t\t\t\t\t\t\tmatches.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matches.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matches } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: this, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\t// Includes some event props shared by KeyEvent and MouseEvent\n\tprops: ( \"altKey bubbles cancelable ctrlKey currentTarget detail eventPhase \" +\n\t\t\"metaKey relatedTarget shiftKey target timeStamp view which\" ).split( \" \" ),\n\n\tfixHooks: {},\n\n\tkeyHooks: {\n\t\tprops: \"char charCode key keyCode\".split( \" \" ),\n\t\tfilter: function( event, original ) {\n\n\t\t\t// Add which for key events\n\t\t\tif ( event.which == null ) {\n\t\t\t\tevent.which = original.charCode != null ? original.charCode : original.keyCode;\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tmouseHooks: {\n\t\tprops: ( \"button buttons clientX clientY offsetX offsetY pageX pageY \" +\n\t\t\t\"screenX screenY toElement\" ).split( \" \" ),\n\t\tfilter: function( event, original ) {\n\t\t\tvar eventDoc, doc, body,\n\t\t\t\tbutton = original.button;\n\n\t\t\t// Calculate pageX/Y if missing and clientX/Y available\n\t\t\tif ( event.pageX == null && original.clientX != null ) {\n\t\t\t\teventDoc = event.target.ownerDocument || document;\n\t\t\t\tdoc = eventDoc.documentElement;\n\t\t\t\tbody = eventDoc.body;\n\n\t\t\t\tevent.pageX = original.clientX +\n\t\t\t\t\t( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) -\n\t\t\t\t\t( doc && doc.clientLeft || body && body.clientLeft || 0 );\n\t\t\t\tevent.pageY = original.clientY +\n\t\t\t\t\t( doc && doc.scrollTop || body && body.scrollTop || 0 ) -\n\t\t\t\t\t( doc && doc.clientTop || body && body.clientTop || 0 );\n\t\t\t}\n\n\t\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\t\t// Note: button is not normalized, so don't use it\n\t\t\tif ( !event.which && button !== undefined ) {\n\t\t\t\tevent.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tfix: function( event ) {\n\t\tif ( event[ jQuery.expando ] ) {\n\t\t\treturn event;\n\t\t}\n\n\t\t// Create a writable copy of the event object and normalize some properties\n\t\tvar i, prop, copy,\n\t\t\ttype = event.type,\n\t\t\toriginalEvent = event,\n\t\t\tfixHook = this.fixHooks[ type ];\n\n\t\tif ( !fixHook ) {\n\t\t\tthis.fixHooks[ type ] = fixHook =\n\t\t\t\trmouseEvent.test( type ) ? this.mouseHooks :\n\t\t\t\trkeyEvent.test( type ) ? this.keyHooks :\n\t\t\t\t{};\n\t\t}\n\t\tcopy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;\n\n\t\tevent = new jQuery.Event( originalEvent );\n\n\t\ti = copy.length;\n\t\twhile ( i-- ) {\n\t\t\tprop = copy[ i ];\n\t\t\tevent[ prop ] = originalEvent[ prop ];\n\t\t}\n\n\t\t// Support: Cordova 2.5 (WebKit) (#13255)\n\t\t// All events should have a target; Cordova deviceready doesn't\n\t\tif ( !event.target ) {\n\t\t\tevent.target = document;\n\t\t}\n\n\t\t// Support: Safari 6.0+, Chrome<28\n\t\t// Target should not be a text node (#504, #13143)\n\t\tif ( event.target.nodeType === 3 ) {\n\t\t\tevent.target = event.target.parentNode;\n\t\t}\n\n\t\treturn fixHook.filter ? fixHook.filter( event, originalEvent ) : event;\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tfocus: {\n\n\t\t\t// Fire native event if possible so blur/focus sequence is correct\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this !== safeActiveElement() && this.focus ) {\n\t\t\t\t\tthis.focus();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusin\"\n\t\t},\n\t\tblur: {\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this === safeActiveElement() && this.blur ) {\n\t\t\t\t\tthis.blur();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusout\"\n\t\t},\n\t\tclick: {\n\n\t\t\t// For checkbox, fire native event so checked state will be right\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this.type === \"checkbox\" && this.click && jQuery.nodeName( this, \"input\" ) ) {\n\t\t\t\t\tthis.click();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, don't fire native .click() on links\n\t\t\t_default: function( event ) {\n\t\t\t\treturn jQuery.nodeName( event.target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android<4.0\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || jQuery.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://code.google.com/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event ) dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:-]+)[^>]*)\\/>/gi,\n\n\t// Support: IE 10-11, Edge 10240+\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /<script|<style|<link/i,\n\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\trscriptTypeMasked = /^true\\/(.*)/,\n\trcleanScript = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;\n\n// Manipulating tables requires a tbody\nfunction manipulationTarget( elem, content ) {\n\treturn jQuery.nodeName( elem, \"table\" ) &&\n\t\tjQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ?\n\n\t\telem.getElementsByTagName( \"tbody\" )[ 0 ] ||\n\t\t\telem.appendChild( elem.ownerDocument.createElement( \"tbody\" ) ) :\n\t\telem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tvar match = rscriptTypeMasked.exec( elem.type );\n\n\tif ( match ) {\n\t\telem.type = match[ 1 ];\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.access( src );\n\t\tpdataCur = dataPriv.set( dest, pdataOld );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdelete pdataCur.handle;\n\t\t\tpdataCur.events = {};\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = concat.apply( [], args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tisFunction = jQuery.isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( isFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( isFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android<4.1, PhantomJS<2\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Reenable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tjQuery.globalEval( node.textContent.replace( rcleanScript, \"\" ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && jQuery.contains( node.ownerDocument, node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html.replace( rxhtmlTag, \"<$1></$2>\" );\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <= 35-45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <= 35-45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\n\t// Keep domManip exposed until 3.0 (gh-2225)\n\tdomManip: domManip,\n\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: QtWebKit\n\t\t\t// .get() because push.apply(_, arraylike) throws\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\n\n\nvar iframe,\n\telemdisplay = {\n\n\t\t// Support: Firefox\n\t\t// We have to pre-define these values for FF (#10227)\n\t\tHTML: \"block\",\n\t\tBODY: \"block\"\n\t};\n\n/**\n * Retrieve the actual display of a element\n * @param {String} name nodeName of the element\n * @param {Object} doc Document object\n */\n\n// Called only from within defaultDisplay\nfunction actualDisplay( name, doc ) {\n\tvar elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),\n\n\t\tdisplay = jQuery.css( elem[ 0 ], \"display\" );\n\n\t// We don't have any data stored on the element,\n\t// so use \"detach\" method as fast way to get rid of the element\n\telem.detach();\n\n\treturn display;\n}\n\n/**\n * Try to determine the default display value of an element\n * @param {String} nodeName\n */\nfunction defaultDisplay( nodeName ) {\n\tvar doc = document,\n\t\tdisplay = elemdisplay[ nodeName ];\n\n\tif ( !display ) {\n\t\tdisplay = actualDisplay( nodeName, doc );\n\n\t\t// If the simple way fails, read from inside an iframe\n\t\tif ( display === \"none\" || !display ) {\n\n\t\t\t// Use the already-created iframe if possible\n\t\t\tiframe = ( iframe || jQuery( \"<iframe frameborder='0' width='0' height='0'/>\" ) )\n\t\t\t\t.appendTo( doc.documentElement );\n\n\t\t\t// Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse\n\t\t\tdoc = iframe[ 0 ].contentDocument;\n\n\t\t\t// Support: IE\n\t\t\tdoc.write();\n\t\t\tdoc.close();\n\n\t\t\tdisplay = actualDisplay( nodeName, doc );\n\t\t\tiframe.detach();\n\t\t}\n\n\t\t// Store the correct default display\n\t\telemdisplay[ nodeName ] = display;\n\t}\n\n\treturn display;\n}\nvar rmargin = ( /^margin/ );\n\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE<=11+, Firefox<=30+ (#15098, #14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\nvar swap = function( elem, options, callback, args ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.apply( elem, args || [] );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\nvar documentElement = document.documentElement;\n\n\n\n( function() {\n\tvar pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, reliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE9-11+\n\t// Style of cloned element affects source element cloned (#8908)\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tcontainer.style.cssText = \"border:0;width:8px;height:0;top:0;left:-9999px;\" +\n\t\t\"padding:0;margin-top:1px;position:absolute\";\n\tcontainer.appendChild( div );\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computeStyleTests() {\n\t\tdiv.style.cssText =\n\n\t\t\t// Support: Firefox<29, Android 2.3\n\t\t\t// Vendor-prefix box-sizing\n\t\t\t\"-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;\" +\n\t\t\t\"position:relative;display:block;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"top:1%;width:50%\";\n\t\tdiv.innerHTML = \"\";\n\t\tdocumentElement.appendChild( container );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\t\treliableMarginLeftVal = divStyle.marginLeft === \"2px\";\n\t\tboxSizingReliableVal = divStyle.width === \"4px\";\n\n\t\t// Support: Android 4.0 - 4.3 only\n\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\tdiv.style.marginRight = \"50%\";\n\t\tpixelMarginRightVal = divStyle.marginRight === \"4px\";\n\n\t\tdocumentElement.removeChild( container );\n\t}\n\n\tjQuery.extend( support, {\n\t\tpixelPosition: function() {\n\n\t\t\t// This test is executed only once but we still do memoizing\n\t\t\t// since we can use the boxSizingReliable pre-computing.\n\t\t\t// No need to check if the test was already performed, though.\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\tboxSizingReliable: function() {\n\t\t\tif ( boxSizingReliableVal == null ) {\n\t\t\t\tcomputeStyleTests();\n\t\t\t}\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelMarginRight: function() {\n\n\t\t\t// Support: Android 4.0-4.3\n\t\t\t// We're checking for boxSizingReliableVal here instead of pixelMarginRightVal\n\t\t\t// since that compresses better and they're computed together anyway.\n\t\t\tif ( boxSizingReliableVal == null ) {\n\t\t\t\tcomputeStyleTests();\n\t\t\t}\n\t\t\treturn pixelMarginRightVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\n\t\t\t// Support: IE <=8 only, Android 4.0 - 4.3 only, Firefox <=3 - 37\n\t\t\tif ( boxSizingReliableVal == null ) {\n\t\t\t\tcomputeStyleTests();\n\t\t\t}\n\t\t\treturn reliableMarginLeftVal;\n\t\t},\n\t\treliableMarginRight: function() {\n\n\t\t\t// Support: Android 2.3\n\t\t\t// Check if div with explicit width and no margin-right incorrectly\n\t\t\t// gets computed margin-right based on width of container. (#3333)\n\t\t\t// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right\n\t\t\t// This support function is only executed once so no memoizing is needed.\n\t\t\tvar ret,\n\t\t\t\tmarginDiv = div.appendChild( document.createElement( \"div\" ) );\n\n\t\t\t// Reset CSS: box-sizing; display; margin; border; padding\n\t\t\tmarginDiv.style.cssText = div.style.cssText =\n\n\t\t\t\t// Support: Android 2.3\n\t\t\t\t// Vendor-prefix box-sizing\n\t\t\t\t\"-webkit-box-sizing:content-box;box-sizing:content-box;\" +\n\t\t\t\t\"display:block;margin:0;border:0;padding:0\";\n\t\t\tmarginDiv.style.marginRight = marginDiv.style.width = \"0\";\n\t\t\tdiv.style.width = \"1px\";\n\t\t\tdocumentElement.appendChild( container );\n\n\t\t\tret = !parseFloat( window.getComputedStyle( marginDiv ).marginRight );\n\n\t\t\tdocumentElement.removeChild( container );\n\t\t\tdiv.removeChild( marginDiv );\n\n\t\t\treturn ret;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\tret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined;\n\n\t// Support: Opera 12.1x only\n\t// Fall back to style even without computed\n\t// computed is undefined for elems on document fragments\n\tif ( ( ret === \"\" || ret === undefined ) && !jQuery.contains( elem.ownerDocument, elem ) ) {\n\t\tret = jQuery.style( elem, name );\n\t}\n\n\t// Support: IE9\n\t// getPropertyValue is only needed for .css('filter') (#12537)\n\tif ( computed ) {\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// http://dev.w3.org/csswg/cssom/#resolved-values\n\t\tif ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE9-11+\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t},\n\n\tcssPrefixes = [ \"Webkit\", \"O\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style;\n\n// Return a css property mapped to a potentially vendor prefixed property\nfunction vendorPropName( name ) {\n\n\t// Shortcut for names that are not vendor prefixed\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\nfunction setPositiveNumber( elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {\n\tvar i = extra === ( isBorderBox ? \"border\" : \"content\" ) ?\n\n\t\t// If we already have the right measurement, avoid augmentation\n\t\t4 :\n\n\t\t// Otherwise initialize for horizontal or vertical properties\n\t\tname === \"width\" ? 1 : 0,\n\n\t\tval = 0;\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin, so add it if we want it\n\t\tif ( extra === \"margin\" ) {\n\t\t\tval += jQuery.css( elem, extra + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\tif ( isBorderBox ) {\n\n\t\t\t// border-box includes padding, so remove it if we want content\n\t\t\tif ( extra === \"content\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// At this point, extra isn't border nor margin, so remove border\n\t\t\tif ( extra !== \"margin\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t} else {\n\n\t\t\t// At this point, extra isn't content, so add padding\n\t\t\tval += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// At this point, extra isn't content nor padding, so add border\n\t\t\tif ( extra !== \"padding\" ) {\n\t\t\t\tval += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn val;\n}\n\nfunction getWidthOrHeight( elem, name, extra ) {\n\n\t// Start with offset property, which is equivalent to the border-box value\n\tvar valueIsBorderBox = true,\n\t\tval = name === \"width\" ? elem.offsetWidth : elem.offsetHeight,\n\t\tstyles = getStyles( elem ),\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t// Support: IE11 only\n\t// In IE 11 fullscreen elements inside of an iframe have\n\t// 100x too small dimensions (gh-1764).\n\tif ( document.msFullscreenElement && window.top !== window ) {\n\n\t\t// Support: IE11 only\n\t\t// Running getBoundingClientRect on a disconnected node\n\t\t// in IE throws an error.\n\t\tif ( elem.getClientRects().length ) {\n\t\t\tval = Math.round( elem.getBoundingClientRect()[ name ] * 100 );\n\t\t}\n\t}\n\n\t// Some non-html elements return undefined for offsetWidth, so check for null/undefined\n\t// svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285\n\t// MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668\n\tif ( val <= 0 || val == null ) {\n\n\t\t// Fall back to computed then uncomputed css if necessary\n\t\tval = curCSS( elem, name, styles );\n\t\tif ( val < 0 || val == null ) {\n\t\t\tval = elem.style[ name ];\n\t\t}\n\n\t\t// Computed unit is not pixels. Stop here and return.\n\t\tif ( rnumnonpx.test( val ) ) {\n\t\t\treturn val;\n\t\t}\n\n\t\t// Check for style in case a browser which returns unreliable values\n\t\t// for getComputedStyle silently falls back to the reliable elem.style\n\t\tvalueIsBorderBox = isBorderBox &&\n\t\t\t( support.boxSizingReliable() || val === elem.style[ name ] );\n\n\t\t// Normalize \"\", auto, and prepare for extra\n\t\tval = parseFloat( val ) || 0;\n\t}\n\n\t// Use the active box-sizing model to add/subtract irrelevant styles\n\treturn ( val +\n\t\taugmentWidthOrHeight(\n\t\t\telem,\n\t\t\tname,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles\n\t\t)\n\t) + \"px\";\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem, hidden,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tvalues[ index ] = dataPriv.get( elem, \"olddisplay\" );\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Reset the inline display of this element to learn if it is\n\t\t\t// being hidden by cascaded rules or not\n\t\t\tif ( !values[ index ] && display === \"none\" ) {\n\t\t\t\telem.style.display = \"\";\n\t\t\t}\n\n\t\t\t// Set elements which have been overridden with display: none\n\t\t\t// in a stylesheet to whatever the default browser style is\n\t\t\t// for such an element\n\t\t\tif ( elem.style.display === \"\" && isHidden( elem ) ) {\n\t\t\t\tvalues[ index ] = dataPriv.access(\n\t\t\t\t\telem,\n\t\t\t\t\t\"olddisplay\",\n\t\t\t\t\tdefaultDisplay( elem.nodeName )\n\t\t\t\t);\n\t\t\t}\n\t\t} else {\n\t\t\thidden = isHidden( elem );\n\n\t\t\tif ( display !== \"none\" || !hidden ) {\n\t\t\t\tdataPriv.set(\n\t\t\t\t\telem,\n\t\t\t\t\t\"olddisplay\",\n\t\t\t\t\thidden ? display : jQuery.css( elem, \"display\" )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of most of the elements in a second loop\n\t// to avoid the constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\t\tif ( !show || elem.style.display === \"none\" || elem.style.display === \"\" ) {\n\t\t\telem.style.display = show ? values[ index ] || \"\" : \"none\";\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"animationIterationCount\": true,\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"flexGrow\": true,\n\t\t\"flexShrink\": true,\n\t\t\"fontWeight\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {\n\t\t\"float\": \"cssFloat\"\n\t},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = jQuery.camelCase( name ),\n\t\t\tstyle = elem.style;\n\n\t\tname = jQuery.cssProps[ origName ] ||\n\t\t\t( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName );\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (#7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (#7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\tif ( type === \"number\" ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// Support: IE9-11+\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tstyle[ name ] = value;\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = jQuery.camelCase( name );\n\n\t\t// Make sure that we're working with the right name\n\t\tname = jQuery.cssProps[ origName ] ||\n\t\t\t( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName );\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( i, name ) {\n\tjQuery.cssHooks[ name ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\t\t\t\t\telem.offsetWidth === 0 ?\n\t\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\t\treturn getWidthOrHeight( elem, name, extra );\n\t\t\t\t\t\t} ) :\n\t\t\t\t\t\tgetWidthOrHeight( elem, name, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = extra && getStyles( elem ),\n\t\t\t\tsubtract = extra && augmentWidthOrHeight(\n\t\t\t\t\telem,\n\t\t\t\t\tname,\n\t\t\t\t\textra,\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\t\tstyles\n\t\t\t\t);\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ name ] = value;\n\t\t\t\tvalue = jQuery.css( elem, name );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// Support: Android 2.3\njQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn swap( elem, { \"display\": \"inline-block\" },\n\t\t\t\tcurCSS, [ elem, \"marginRight\" ] );\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( !rmargin.test( prefix ) ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( jQuery.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t},\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHidden( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 &&\n\t\t\t\t( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null ||\n\t\t\t\t\tjQuery.cssHooks[ tween.prop ] ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE9\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back Compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, timerId,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = jQuery.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4 ; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\t/* jshint validthis: true */\n\tvar prop, value, toggle, tween, hooks, oldfire, display, checkDisplay,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHidden( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Handle queue: false promises\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Height/width overflow pass\n\tif ( elem.nodeType === 1 && ( \"height\" in props || \"width\" in props ) ) {\n\n\t\t// Make sure that nothing sneaks out\n\t\t// Record all 3 overflow attributes because IE9-10 do not\n\t\t// change the overflow attribute when overflowX and\n\t\t// overflowY are set to the same value\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Set display property to inline-block for height/width\n\t\t// animations on inline elements that are having width/height animated\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\n\t\t// Test default display if display is currently \"none\"\n\t\tcheckDisplay = display === \"none\" ?\n\t\t\tdataPriv.get( elem, \"olddisplay\" ) || defaultDisplay( elem.nodeName ) : display;\n\n\t\tif ( checkDisplay === \"inline\" && jQuery.css( elem, \"float\" ) === \"none\" ) {\n\t\t\tstyle.display = \"inline-block\";\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// show/hide pass\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.exec( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// If there is dataShow left over from a stopped hide or show\n\t\t\t\t// and we are going to proceed with show, we should pretend to be hidden\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\n\t\t// Any non-fx value stops us from restoring the original display value\n\t\t} else {\n\t\t\tdisplay = undefined;\n\t\t}\n\t}\n\n\tif ( !jQuery.isEmptyObject( orig ) ) {\n\t\tif ( dataShow ) {\n\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\thidden = dataShow.hidden;\n\t\t\t}\n\t\t} else {\n\t\t\tdataShow = dataPriv.access( elem, \"fxshow\", {} );\n\t\t}\n\n\t\t// Store state if its toggle - enables .stop().toggle() to \"reverse\"\n\t\tif ( toggle ) {\n\t\t\tdataShow.hidden = !hidden;\n\t\t}\n\t\tif ( hidden ) {\n\t\t\tjQuery( elem ).show();\n\t\t} else {\n\t\t\tanim.done( function() {\n\t\t\t\tjQuery( elem ).hide();\n\t\t\t} );\n\t\t}\n\t\tanim.done( function() {\n\t\t\tvar prop;\n\n\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\tfor ( prop in orig ) {\n\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t}\n\t\t} );\n\t\tfor ( prop in orig ) {\n\t\t\ttween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\n\t\t\tif ( !( prop in dataShow ) ) {\n\t\t\t\tdataShow[ prop ] = tween.start;\n\t\t\t\tif ( hidden ) {\n\t\t\t\t\ttween.end = tween.start;\n\t\t\t\t\ttween.start = prop === \"width\" || prop === \"height\" ? 1 : 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t// If this is a noop like .hide().hide(), restore an overwritten display value\n\t} else if ( ( display === \"none\" ? defaultDisplay( elem.nodeName ) : display ) === \"inline\" ) {\n\t\tstyle.display = display;\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = jQuery.camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( jQuery.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length ; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t} else {\n\t\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length ; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length ; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( jQuery.isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tjQuery.proxy( result.stop, result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( jQuery.isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\t// attach callbacks from options\n\treturn animation.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( jQuery.isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnotwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length ; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tjQuery.isFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !jQuery.isFunction( easing ) && easing\n\t};\n\n\topt.duration = jQuery.fx.off ? 0 : typeof opt.duration === \"number\" ?\n\t\topt.duration : opt.duration in jQuery.fx.speeds ?\n\t\t\tjQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( jQuery.isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHidden ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue && type !== false ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = jQuery.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Checks the timer has not already been removed\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tif ( timer() ) {\n\t\tjQuery.fx.start();\n\t} else {\n\t\tjQuery.timers.pop();\n\t}\n};\n\njQuery.fx.interval = 13;\njQuery.fx.start = function() {\n\tif ( !timerId ) {\n\t\ttimerId = window.setInterval( jQuery.fx.tick, jQuery.fx.interval );\n\t}\n};\n\njQuery.fx.stop = function() {\n\twindow.clearInterval( timerId );\n\n\ttimerId = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\n// http://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: iOS<=5.1, Android<=4.2+\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE<=11+\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: Android<=2.3\n\t// Options inside disabled selects are incorrectly marked as disabled\n\tselect.disabled = true;\n\tsupport.optDisabled = !opt.disabled;\n\n\t// Support: IE<=11+\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// All attributes are lowercase\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\tname = name.toLowerCase();\n\t\t\thooks = jQuery.attrHooks[ name ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tjQuery.nodeName( elem, \"input\" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name, propName,\n\t\t\ti = 0,\n\t\t\tattrNames = value && value.match( rnotwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\tpropName = jQuery.propFix[ name ] || name;\n\n\t\t\t\t// Boolean attributes get special treatment (#10870)\n\t\t\t\tif ( jQuery.expr.match.bool.test( name ) ) {\n\n\t\t\t\t\t// Set corresponding property to false\n\t\t\t\t\telem[ propName ] = false;\n\t\t\t\t}\n\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle;\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ name ];\n\t\t\tattrHandle[ name ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tname.toLowerCase() :\n\t\t\t\tnull;\n\t\t\tattrHandle[ name ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\t// Use proper attribute retrieval(#12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\treturn tabindex ?\n\t\t\t\t\tparseInt( tabindex, 10 ) :\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\t\trclickable.test( elem.nodeName ) && elem.href ?\n\t\t\t\t\t\t\t0 :\n\t\t\t\t\t\t\t-1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11 only\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n\n\n\nvar rclass = /[\\t\\r\\n\\f]/g;\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( typeof value === \"string\" && value ) {\n\t\t\tclasses = value.match( rnotwhite ) || [];\n\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\t\t\t\tcur = elem.nodeType === 1 &&\n\t\t\t\t\t( \" \" + curValue + \" \" ).replace( rclass, \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = jQuery.trim( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tif ( typeof value === \"string\" && value ) {\n\t\t\tclasses = value.match( rnotwhite ) || [];\n\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 &&\n\t\t\t\t\t( \" \" + curValue + \" \" ).replace( rclass, \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = jQuery.trim( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value;\n\n\t\tif ( typeof stateVal === \"boolean\" && type === \"string\" ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar className, i, self, classNames;\n\n\t\t\tif ( type === \"string\" ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\ti = 0;\n\t\t\t\tself = jQuery( this );\n\t\t\t\tclassNames = value.match( rnotwhite ) || [];\n\n\t\t\t\twhile ( ( className = classNames[ i++ ] ) ) {\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, \"__className__\", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( \"class\",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\tdataPriv.get( this, \"__className__\" ) || \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + getClass( elem ) + \" \" ).replace( rclass, \" \" )\n\t\t\t\t\t.indexOf( className ) > -1\n\t\t\t) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\nvar rreturn = /\\r/g,\n\trspaces = /[\\x20\\t\\r\\n\\f]+/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, isFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\treturn typeof ret === \"string\" ?\n\n\t\t\t\t\t// Handle most common string cases\n\t\t\t\t\tret.replace( rreturn, \"\" ) :\n\n\t\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\t\tret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tisFunction = jQuery.isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( isFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( jQuery.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE10-11+\n\t\t\t\t\t// option.text throws exceptions (#14686, #14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tjQuery.trim( jQuery.text( elem ) ).replace( rspaces, \" \" );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\" || index < 0,\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length,\n\t\t\t\t\ti = index < 0 ?\n\t\t\t\t\t\tmax :\n\t\t\t\t\t\tone ? index : 0;\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// IE8-9 doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t( support.optDisabled ?\n\t\t\t\t\t\t\t\t!option.disabled : option.getAttribute( \"disabled\" ) === null ) &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!jQuery.nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( jQuery.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/;\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || {} )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\t\t\t\t\telem[ type ]();\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\n\t\t\t\t// Previously, `originalEvent: {}` was set here, so stopPropagation call\n\t\t\t\t// would not be triggered on donor event, since in our own\n\t\t\t\t// jQuery.event.stopPropagation function we had a check for existence of\n\t\t\t\t// originalEvent.stopPropagation method, so, consequently it would be a noop.\n\t\t\t\t//\n\t\t\t\t// But now, this \"simulate\" function is used only for events\n\t\t\t\t// for which stopPropagation() is noop, so there is no need for that anymore.\n\t\t\t\t//\n\t\t\t\t// For the 1.x branch though, guard for \"click\" and \"submit\"\n\t\t\t\t// events is still used, but was moved to jQuery.event.stopPropagation function\n\t\t\t\t// because `originalEvent` should point to the original event for the constancy\n\t\t\t\t// with other events and for more focused logic\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\n\t\tif ( e.isDefaultPrevented() ) {\n\t\t\tevent.preventDefault();\n\t\t}\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\njQuery.each( ( \"blur focus focusin focusout load resize scroll unload click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup error contextmenu\" ).split( \" \" ),\n\tfunction( i, name ) {\n\n\t// Handle event binding\n\tjQuery.fn[ name ] = function( data, fn ) {\n\t\treturn arguments.length > 0 ?\n\t\t\tthis.on( name, null, data, fn ) :\n\t\t\tthis.trigger( name );\n\t};\n} );\n\njQuery.fn.extend( {\n\thover: function( fnOver, fnOut ) {\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t}\n} );\n\n\n\n\nsupport.focusin = \"onfocusin\" in window;\n\n\n// Support: Firefox\n// Firefox doesn't have focus(in | out) events\n// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n//\n// Support: Chrome, Safari\n// focus(in | out) events fire after focus & blur events,\n// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n// Related ticket - https://code.google.com/p/chromium/issues/detail?id=449857\nif ( !support.focusin ) {\n\tjQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );\n\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.access( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tdataPriv.remove( doc, fix );\n\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.access( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t} );\n}\nvar location = window.location;\n\nvar nonce = jQuery.now();\n\nvar rquery = ( /\\?/ );\n\n\n\n// Support: Android 2.3\n// Workaround failure to string-cast null input\njQuery.parseJSON = function( data ) {\n\treturn JSON.parse( data + \"\" );\n};\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE9\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {\n\t\txml = undefined;\n\t}\n\n\tif ( !xml || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\tjQuery.error( \"Invalid XML: \" + data );\n\t}\n\treturn xml;\n};\n\n\nvar\n\trhash = /#.*$/,\n\trts = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t * - BEFORE asking for a transport\n\t * - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document.createElement( \"a\" );\n\toriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || [];\n\n\t\tif ( jQuery.isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": jQuery.parseJSON,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// The jqXHR state\n\t\t\tstate = 0,\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( state === 2 ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match;\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn state === 2 ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tvar lname = name.toLowerCase();\n\t\t\t\t\tif ( !state ) {\n\t\t\t\t\t\tname = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( !state ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( state < 2 ) {\n\t\t\t\t\t\t\tfor ( code in map ) {\n\n\t\t\t\t\t\t\t\t// Lazy-add the new callback in a way that preserves old ones\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR ).complete = completeDeferred.add;\n\t\tjqXHR.success = jqXHR.done;\n\t\tjqXHR.error = jqXHR.fail;\n\n\t\t// Remove hash character (#7531: and string promotion)\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (#10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" ).replace( rhash, \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket #12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = jQuery.trim( s.dataType || \"*\" ).toLowerCase().match( rnotwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document.createElement( \"a\" );\n\n\t\t\t// Support: IE8-11+\n\t\t\t// IE throws exception if url is malformed, e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE8-11+\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( state === 2 ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\tcacheURL = s.url;\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// If data is available, append data to url\n\t\t\tif ( s.data ) {\n\t\t\t\tcacheURL = ( s.url += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data );\n\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add anti-cache in url if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\ts.url = rts.test( cacheURL ) ?\n\n\t\t\t\t\t// If there is already a '_' parameter, set its value\n\t\t\t\t\tcacheURL.replace( rts, \"$1_=\" + nonce++ ) :\n\n\t\t\t\t\t// Otherwise add one to the end\n\t\t\t\t\tcacheURL + ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + nonce++;\n\t\t\t}\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tfor ( i in { success: 1, error: 1, complete: 1 } ) {\n\t\t\tjqXHR[ i ]( s[ i ] );\n\t\t}\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( state === 2 ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tstate = 1;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Propagate exception as error if not done\n\t\t\t\tif ( state < 2 ) {\n\t\t\t\t\tdone( -1, e );\n\n\t\t\t\t// Simply rethrow otherwise\n\t\t\t\t} else {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Called once\n\t\t\tif ( state === 2 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// State is \"done\" now\n\t\t\tstate = 2;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( jQuery.isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\n\njQuery._evalUrl = function( url ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (#11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tasync: false,\n\t\tglobal: false,\n\t\t\"throws\": true\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapAll( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( this[ 0 ] ) {\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar isFunction = jQuery.isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function() {\n\t\treturn this.parent().each( function() {\n\t\t\tif ( !jQuery.nodeName( this, \"body\" ) ) {\n\t\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t\t}\n\t\t} ).end();\n\t}\n} );\n\n\njQuery.expr.filters.hidden = function( elem ) {\n\treturn !jQuery.expr.filters.visible( elem );\n};\njQuery.expr.filters.visible = function( elem ) {\n\n\t// Support: Opera <= 12.12\n\t// Opera reports offsetWidths and offsetHeights less than zero on some elements\n\t// Use OR instead of AND as the element is not visible if either is true\n\t// See tickets #10406 and #13132\n\treturn elem.offsetWidth > 0 || elem.offsetHeight > 0 || elem.getClientRects().length > 0;\n};\n\n\n\n\nvar r20 = /%20/g,\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( jQuery.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && jQuery.type( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, value ) {\n\n\t\t\t// If value is a function, invoke it and return its value\n\t\t\tvalue = jQuery.isFunction( value ) ? value() : ( value == null ? \"\" : value );\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" + encodeURIComponent( value );\n\t\t};\n\n\t// Set traditional to true for jQuery <= 1.3.2 behavior.\n\tif ( traditional === undefined ) {\n\t\ttraditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" ).replace( r20, \"+\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} )\n\t\t.filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} )\n\t\t.map( function( i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\treturn val == null ?\n\t\t\t\tnull :\n\t\t\t\tjQuery.isArray( val ) ?\n\t\t\t\t\tjQuery.map( val, function( val ) {\n\t\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t\t} ) :\n\t\t\t\t\t{ name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE9\n\t\t// #1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback, errorCallback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\txhr.open(\n\t\t\t\t\toptions.type,\n\t\t\t\t\toptions.url,\n\t\t\t\t\toptions.async,\n\t\t\t\t\toptions.username,\n\t\t\t\t\toptions.password\n\t\t\t\t);\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\n\t\t\t\t\t\t\t\t// Support: IE9\n\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\tif ( typeof xhr.status !== \"number\" ) {\n\t\t\t\t\t\t\t\t\tcomplete( 0, \"error\" );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see #8605, #14207\n\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t// Support: IE9 only\n\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) !== \"text\" ||\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\terrorCallback = xhr.onerror = callback( \"error\" );\n\n\t\t\t\t// Support: IE9\n\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t// to handle uncaught aborts\n\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t} else {\n\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = callback( \"abort\" );\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// #14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\n\t// This transport only deals with cross domain requests\n\tif ( s.crossDomain ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"<script>\" ).prop( {\n\t\t\t\t\tcharset: s.scriptCharset,\n\t\t\t\t\tsrc: s.url\n\t\t\t\t} ).on(\n\t\t\t\t\t\"load error\",\n\t\t\t\t\tcallback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === \"error\" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\tdocument.head.appendChild( script[ 0 ] );\n\t\t\t},\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup( {\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n} );\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t( s.contentType || \"\" )\n\t\t\t\t\t.indexOf( \"application/x-www-form-urlencoded\" ) === 0 &&\n\t\t\t\trjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[ \"script json\" ] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// Force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always( function() {\n\n\t\t\t// If previous value didn't exist - remove it\n\t\t\tif ( overwritten === undefined ) {\n\t\t\t\tjQuery( window ).removeProp( callbackName );\n\n\t\t\t// Otherwise restore preexisting value\n\t\t\t} else {\n\t\t\t\twindow[ callbackName ] = overwritten;\n\t\t\t}\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\n\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// Save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && jQuery.isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t} );\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n} );\n\n\n\n\n// Argument \"data\" should be string of html\n// context (optional): If specified, the fragment will be created in this context,\n// defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\tcontext = context || document;\n\n\tvar parsed = rsingleTag.exec( data ),\n\t\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[ 1 ] ) ];\n\t}\n\n\tparsed = buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\n// Keep a copy of the old load method\nvar _load = jQuery.fn.load;\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tif ( typeof url !== \"string\" && _load ) {\n\t\treturn _load.apply( this, arguments );\n\t}\n\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf( \" \" );\n\n\tif ( off > -1 ) {\n\t\tselector = jQuery.trim( url.slice( off ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( jQuery.isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax( {\n\t\t\turl: url,\n\n\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t// Make value of this field explicit since\n\t\t\t// user can override it through ajaxSetup method\n\t\t\ttype: type || \"GET\",\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t} ).done( function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery( \"<div>\" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t// but they are ignored because response was set above.\n\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t} ).always( callback && function( jqXHR, status ) {\n\t\t\tself.each( function() {\n\t\t\t\tcallback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t} );\n\t\t} );\n\t}\n\n\treturn this;\n};\n\n\n\n\n// Attach a bunch of functions for handling common AJAX events\njQuery.each( [\n\t\"ajaxStart\",\n\t\"ajaxStop\",\n\t\"ajaxComplete\",\n\t\"ajaxError\",\n\t\"ajaxSuccess\",\n\t\"ajaxSend\"\n], function( i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n} );\n\n\n\n\njQuery.expr.filters.animated = function( elem ) {\n\treturn jQuery.grep( jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t} ).length;\n};\n\n\n\n\n/**\n * Gets a window from an element\n */\nfunction getWindow( elem ) {\n\treturn jQuery.isWindow( elem ) ? elem : elem.nodeType === 9 && elem.defaultView;\n}\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// Set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf( \"auto\" ) > -1;\n\n\t\t// Need to be able to calculate position if either\n\t\t// top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( jQuery.isFunction( options ) ) {\n\n\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\toptions = options.call( elem, i, jQuery.extend( {}, curOffset ) );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend( {\n\toffset: function( options ) {\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each( function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t} );\n\t\t}\n\n\t\tvar docElem, win,\n\t\t\telem = this[ 0 ],\n\t\t\tbox = { top: 0, left: 0 },\n\t\t\tdoc = elem && elem.ownerDocument;\n\n\t\tif ( !doc ) {\n\t\t\treturn;\n\t\t}\n\n\t\tdocElem = doc.documentElement;\n\n\t\t// Make sure it's not a disconnected DOM node\n\t\tif ( !jQuery.contains( docElem, elem ) ) {\n\t\t\treturn box;\n\t\t}\n\n\t\tbox = elem.getBoundingClientRect();\n\t\twin = getWindow( doc );\n\t\treturn {\n\t\t\ttop: box.top + win.pageYOffset - docElem.clientTop,\n\t\t\tleft: box.left + win.pageXOffset - docElem.clientLeft\n\t\t};\n\t},\n\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// Fixed elements are offset from window (parentOffset = {top:0, left: 0},\n\t\t// because it is its only offset parent\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\n\t\t\t// Assume getBoundingClientRect is there when computed position is fixed\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\n\t\t\t// Get *real* offsetParent\n\t\t\toffsetParent = this.offsetParent();\n\n\t\t\t// Get correct offsets\n\t\t\toffset = this.offset();\n\t\t\tif ( !jQuery.nodeName( offsetParent[ 0 ], \"html\" ) ) {\n\t\t\t\tparentOffset = offsetParent.offset();\n\t\t\t}\n\n\t\t\t// Add offsetParent borders\n\t\t\tparentOffset.top += jQuery.css( offsetParent[ 0 ], \"borderTopWidth\", true );\n\t\t\tparentOffset.left += jQuery.css( offsetParent[ 0 ], \"borderLeftWidth\", true );\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\t// This method will return documentElement in the following cases:\n\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t// documentElement of the parent window\n\t// 2) For the hidden or detached element\n\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t//\n\t// but those exceptions were never presented as a real life use-cases\n\t// and might be considered as more preferable results.\n\t//\n\t// This logic, however, is not guaranteed and can change at any point in the future\n\toffsetParent: function() {\n\t\treturn this.map( function() {\n\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\twhile ( offsetParent && jQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || documentElement;\n\t\t} );\n\t}\n} );\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = \"pageYOffset\" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\t\t\tvar win = getWindow( elem );\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length );\n\t};\n} );\n\n// Support: Safari<7-8+, Chrome<37-44+\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// Blink bug: https://code.google.com/p/chromium/issues/detail?id=229280\n// getComputedStyle returns percent when specified for top/left/bottom/right;\n// rather than make the css module depend on the offset module, just check for it here\njQuery.each( [ \"top\", \"left\" ], function( i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\n\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n} );\n\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( { padding: \"inner\" + name, content: type, \"\": \"outer\" + name },\n\t\tfunction( defaultExtra, funcName ) {\n\n\t\t// Margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( jQuery.isWindow( elem ) ) {\n\n\t\t\t\t\t// As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there\n\t\t\t\t\t// isn't a whole lot we can do. See pull request at this URL for discussion:\n\t\t\t\t\t// https://github.com/jquery/jquery/pull/764\n\t\t\t\t\treturn elem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable, null );\n\t\t};\n\t} );\n} );\n\n\njQuery.fn.extend( {\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ?\n\t\t\tthis.off( selector, \"**\" ) :\n\t\t\tthis.off( types, selector || \"**\", fn );\n\t},\n\tsize: function() {\n\t\treturn this.length;\n\t}\n} );\n\njQuery.fn.andSelf = jQuery.fn.addBack;\n\n\n\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t} );\n}\n\n\n\nvar\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in AMD\n// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (#13566)\nif ( !noGlobal ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\nreturn jQuery;\n}));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/jquery/dist/jquery.js\n ** module id = 3\n ** module chunks = 1 2 3 5 6\n **/","/**\r\n * Created by gavorhes on 12/10/2015.\r\n */\r\n\r\n\r\n/**\r\n * create a namespace on the gv object\r\n * @param {string} namespace to create\r\n * @returns {object} object representing the namespace\r\n */\r\nfunction provide(namespace){\r\n \"use strict\";\r\n if (typeof window['gv'] == 'undefined'){\r\n window['gv'] = {};\r\n }\r\n\r\n let parts = namespace.split('.');\r\n let nameSpace = window['gv'];\r\n\r\n for (let i=0; i< parts.length; i++){\r\n let newObject = nameSpace[parts[i]];\r\n\r\n if (typeof newObject == 'undefined'){\r\n nameSpace[parts[i]] = {};\r\n }\r\n\r\n nameSpace = nameSpace[parts[i]];\r\n }\r\n\r\n return nameSpace;\r\n}\r\n\r\nprovide('util');\r\nwindow['gv'].util.provide = provide;\r\n\r\nexport default provide;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/util/provide.ts\n **/","\"use strict\";\r\nexports.ol = require('../ol/ol-build');\r\n// // export default require('../ol/ol-build');\r\n//\r\n// const fish = 10;\r\n// export = fish;\r\n//\r\n//\r\n// export function cat(bird: string){\r\n// console.log('eat the fish')\r\n// }\r\n//\r\n// export function nice(eat: number){\r\n// console.log('eat that fish');\r\n// }\r\n//\r\n// export class Big{\r\n// glenn: string;\r\n//\r\n// constructor(isGlenn){\r\n// this.glenn = isGlenn;\r\n// }\r\n//\r\n// set isGlenn(f: string){\r\n// console.log(this.glenn)\r\n// }\r\n//\r\n// run(){\r\n// console.log(this.glenn + \" can run\");\r\n// }\r\n// }\r\n//\r\n// export namespace HereIt{\r\n//\r\n// export class Big2 {\r\n// glenn: string;\r\n//\r\n// constructor(isGlenn) {\r\n// this.glenn = isGlenn;\r\n// }\r\n//\r\n// set isGlenn(f: string) {\r\n// console.log(this.glenn)\r\n// }\r\n//\r\n// run() {\r\n// console.log(this.glenn + \" can run\");\r\n// }\r\n// }\r\n//\r\n//\r\n// } \r\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/custom-ol/lib/index.js\n ** module id = 5\n ** module chunks = 1 2 5\n **/","// OpenLayers 3. See http://openlayers.org/\r\n// License: https://raw.githubusercontent.com/openlayers/ol3/master/LICENSE.md\r\n;(function (root, factory) {\r\n if (typeof exports === \"object\") {\r\n module.exports = factory();\r\n } else if (typeof define === \"function\" && define.amd) {\r\n define([], factory);\r\n } else {\r\n root.ol = factory();\r\n }\r\n}(this, function () {\r\n var OPENLAYERS = {};\r\n var n,aa=this;\r\nfunction ba(){var a=aa.setImmediate,b=typeof a;if(\"object\"==b)if(a){if(a instanceof Array)return\"array\";if(a instanceof Object)return b;var c=Object.prototype.toString.call(a);if(\"[object Window]\"==c)return\"object\";if(\"[object Array]\"==c||\"number\"==typeof a.length&&\"undefined\"!=typeof a.splice&&\"undefined\"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable(\"splice\"))return\"array\";if(\"[object Function]\"==c||\"undefined\"!=typeof a.call&&\"undefined\"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable(\"call\"))return\"function\"}else return\"null\";\r\nelse if(\"function\"==b&&\"undefined\"==typeof a.call)return\"object\";return b}function ca(a,b,c){return a.call.apply(a.bind,arguments)}function da(a,b,c){if(!a)throw Error();if(2<arguments.length){var d=Array.prototype.slice.call(arguments,2);return function(){var c=Array.prototype.slice.call(arguments);Array.prototype.unshift.apply(c,d);return a.apply(b,c)}}return function(){return a.apply(b,arguments)}}\r\nfunction ea(a,b,c){ea=Function.prototype.bind&&-1!=Function.prototype.bind.toString().indexOf(\"native code\")?ca:da;return ea.apply(null,arguments)}function y(a,b){var c=a.split(\".\"),d=OPENLAYERS||aa;c[0]in d||!d.execScript||d.execScript(\"var \"+c[0]);for(var e;c.length&&(e=c.shift());)c.length||void 0===b?d[e]?d=d[e]:d=d[e]={}:d[e]=b};var fa;function B(a,b){a.prototype=Object.create(b.prototype);a.prototype.constructor=a}function I(){}function J(a){return a.ie||(a.ie=++ga)}var ga=0;if(\"undefined\"!==typeof window)var K=window;else\"undefined\"!==typeof global?K=global:\"undefined\"!==typeof self&&(K=self);function ha(a){this.message=\"Assertion failed. See /doc/errors/#\"+a+\" for details.\";this.code=a;this.name=\"AssertionError\"}B(ha,Error);function L(a,b){if(!a)throw new ha(b);};function ia(a,b,c){return Math.min(Math.max(a,b),c)}var ja=function(){var a;\"cosh\"in Math?a=Math.cosh:a=function(a){a=Math.exp(a);return(a+1/a)/2};return a}();function ka(a){L(0<a,29);return Math.pow(2,Math.ceil(Math.log(a)/Math.LN2))}function la(a,b){var c=a%b;return 0>c*b?c+b:c};function ma(a){return function(b){if(b)return[ia(b[0],a[0],a[2]),ia(b[1],a[1],a[3])]}}function na(a){return a};function oa(a,b,c){this.center=a;this.resolution=b;this.rotation=c};var pa=\"function\"===typeof Object.assign?Object.assign:function(a,b){if(!a||!a)throw new TypeError(\"Cannot convert undefined or null to object\");for(var c=Object(a),d=1,e=arguments.length;d<e;++d){var f=arguments[d];if(void 0!==f&&null!==f)for(var g in f)f.hasOwnProperty(g)&&(c[g]=f[g])}return c};function qa(a){for(var b in a)delete a[b]}function ra(a){var b=[],c;for(c in a)b.push(a[c]);return b}function sa(a){for(var b in a)return!1;return!b};function ta(a){function b(b){var d=a.listener,e=a.jc||a.target;a.mc&&M(a);return d.call(e,b)}return a.kc=b}function ua(a,b,c,d){for(var e,f=0,g=a.length;f<g;++f)if(e=a[f],e.listener===b&&e.jc===c)return d&&(e.deleteIndex=f),e}function va(a,b){var c=a.ha;return c?c[b]:void 0}function wa(a){var b=a.ha;b||(b=a.ha={});return b}\r\nfunction xa(a,b){var c=va(a,b);if(c){for(var d=0,e=c.length;d<e;++d)a.removeEventListener(b,c[d].kc),qa(c[d]);c.length=0;if(c=a.ha)delete c[b],0===Object.keys(c).length&&delete a.ha}}function R(a,b,c,d,e){var f=wa(a),g=f[b];g||(g=f[b]=[]);(f=ua(g,c,d,!1))?e||(f.mc=!1):(f={jc:d,mc:!!e,listener:c,target:a,type:b},a.addEventListener(b,ta(f)),g.push(f));return f}function ya(a,b,c,d){(a=va(a,b))&&(c=ua(a,c,d,!0))&&M(c)}\r\nfunction M(a){if(a&&a.target){a.target.removeEventListener(a.type,a.kc);var b=va(a.target,a.type);if(b){var c=\"deleteIndex\"in a?a.deleteIndex:b.indexOf(a);-1!==c&&b.splice(c,1);0===b.length&&xa(a.target,a.type)}qa(a)}}function za(a){var b=wa(a),c;for(c in b)xa(a,c)};function Aa(){}Aa.prototype.ra=!1;function Da(a){a.ra||(a.ra=!0,a.R())}Aa.prototype.R=I;function T(a){this.type=a;this.target=null}T.prototype.preventDefault=T.prototype.stopPropagation=function(){this.qe=!0};function Ea(a){a.stopPropagation()}function Fa(a){a.preventDefault()};function Ga(){this.ca={};this.K={};this.C={}}B(Ga,Aa);Ga.prototype.addEventListener=function(a,b){var c=this.C[a];c||(c=this.C[a]=[]);-1===c.indexOf(b)&&c.push(b)};function U(a,b){var c=\"string\"===typeof b?new T(b):b,d=c.type;c.target=a;var e=a.C[d],f;if(e){d in a.K||(a.K[d]=0,a.ca[d]=0);++a.K[d];for(var g=0,h=e.length;g<h;++g)if(!1===e[g].call(a,c)||c.qe){f=!1;break}--a.K[d];if(0===a.K[d]){c=a.ca[d];for(delete a.ca[d];c--;)a.removeEventListener(d,I);delete a.K[d]}return f}}Ga.prototype.R=function(){za(this)};\r\nfunction Ha(a,b){return b?b in a.C:0<Object.keys(a.C).length}Ga.prototype.removeEventListener=function(a,b){var c=this.C[a];if(c){var d=c.indexOf(b);a in this.ca?(c[d]=I,++this.ca[a]):(c.splice(d,1),0===c.length&&delete this.C[a])}};function Ia(){Ga.call(this);this.b=0}B(Ia,Ga);Ia.prototype.w=function(){++this.b;U(this,\"change\")};Ia.prototype.Y=function(a,b,c){if(Array.isArray(a)){for(var d=a.length,e=Array(d),f=0;f<d;++f)e[f]=R(this,a[f],b,c);return e}return R(this,a,b,c)};Ia.prototype.hd=function(a,b,c){if(Array.isArray(a)){for(var d=a.length,e=Array(d),f=0;f<d;++f)e[f]=R(this,a[f],b,c,!0);return e}return R(this,a,b,c,!0)};function Ja(a,b,c){T.call(this,a);this.key=b;this.oldValue=c}B(Ja,T);function V(a){Ia.call(this);J(this);this.M={};void 0!==a&&this.l(a)}B(V,Ia);var Ka={};function La(a){return Ka.hasOwnProperty(a)?Ka[a]:Ka[a]=\"change:\"+a}V.prototype.get=function(a){var b;this.M.hasOwnProperty(a)&&(b=this.M[a]);return b};V.prototype.Ea=function(){return pa({},this.M)};V.prototype.set=function(a,b,c){c?this.M[a]=b:(c=this.M[a],this.M[a]=b,c!==b&&(b=La(a),U(this,new Ja(b,a,c)),U(this,new Ja(\"propertychange\",a,c))))};\r\nV.prototype.l=function(a,b){for(var c in a)this.set(c,a[c],b)};function Ma(a,b){return a>b?1:a<b?-1:0}function Na(a,b,c){var d=a.length;if(a[0]<=b)return 0;if(!(b<=a[d-1]))if(0<c)for(c=1;c<d;++c){if(a[c]<b)return c-1}else if(0>c)for(c=1;c<d;++c){if(a[c]<=b)return c}else for(c=1;c<d;++c){if(a[c]==b)return c;if(a[c]<b)return a[c-1]-b<b-a[c]?c-1:c}return d-1}function Oa(a){return a.reduce(function(a,c){return Array.isArray(c)?a.concat(Oa(c)):a.concat(c)},[])}function Pa(a,b){var c,d=Array.isArray(b)?b:[b],e=d.length;for(c=0;c<e;c++)a[a.length]=d[c]}\r\nfunction Qa(a,b){var c=a.indexOf(b),d=-1<c;d&&a.splice(c,1);return d}function Ra(a,b){var c=a.length;if(c!==b.length)return!1;for(var d=0;d<c;d++)if(a[d]!==b[d])return!1;return!0}function Sa(a){var b=Ta,c=a.length,d=Array(a.length),e;for(e=0;e<c;e++)d[e]={index:e,value:a[e]};d.sort(function(a,c){return b(a.value,c.value)||a.index-c.index});for(e=0;e<a.length;e++)a[e]=d[e].value}function Ua(a,b){var c=b||Ma;return a.every(function(b,e){if(0===e)return!0;var f=c(a[e-1],b);return!(0<f||0===f)})};function Va(a){return function(b,c,d){if(void 0!==b)return b=Na(a,b,d),b=ia(b+c,0,a.length-1),c=Math.floor(b),b!=c&&c<a.length-1?a[c]/Math.pow(a[c]/a[c+1],b-c):a[c]}}function Wa(a,b,c){return function(d,e,f){if(void 0!==d)return d=Math.max(Math.floor(Math.log(b/d)/Math.log(a)+(-f/2+.5))+e,0),void 0!==c&&(d=Math.min(d,c)),b/Math.pow(a,d)}};function Xa(a){if(void 0!==a)return 0}function Ya(a,b){if(void 0!==a)return a+b}function Za(a){var b=2*Math.PI/a;return function(a,d){if(void 0!==a)return a=Math.floor((a+d)/b+.5)*b}}function $a(){var a=5*Math.PI/180;return function(b,c){if(void 0!==b)return Math.abs(b+c)<=a?0:b+c}};function ab(a,b){a[0]+=b[0];a[1]+=b[1]}function bb(a,b){var c=Math.cos(b),d=Math.sin(b),e=a[1]*c+a[0]*d;a[0]=a[0]*c-a[1]*d;a[1]=e};function cb(a){for(var b=db(),c=0,d=a.length;c<d;++c)eb(b,a[c]);return b}function fb(a,b,c){return c?(c[0]=a[0]-b,c[1]=a[1]-b,c[2]=a[2]+b,c[3]=a[3]+b,c):[a[0]-b,a[1]-b,a[2]+b,a[3]+b]}function gb(a,b){return b?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3],b):a.slice()}function hb(a,b){return a[0]<=b[0]&&b[2]<=a[2]&&a[1]<=b[1]&&b[3]<=a[3]}function db(){return[Infinity,Infinity,-Infinity,-Infinity]}function ib(a,b,c,d,e){return e?(e[0]=a,e[1]=b,e[2]=c,e[3]=d,e):[a,b,c,d]}\r\nfunction jb(a){return ib(Infinity,Infinity,-Infinity,-Infinity,a)}function kb(a,b){var c=a[0],d=a[1];return ib(c,d,c,d,b)}function lb(a,b){return a[0]==b[0]&&a[2]==b[2]&&a[1]==b[1]&&a[3]==b[3]}function mb(a,b){b[0]<a[0]&&(a[0]=b[0]);b[2]>a[2]&&(a[2]=b[2]);b[1]<a[1]&&(a[1]=b[1]);b[3]>a[3]&&(a[3]=b[3])}function eb(a,b){b[0]<a[0]&&(a[0]=b[0]);b[0]>a[2]&&(a[2]=b[0]);b[1]<a[1]&&(a[1]=b[1]);b[1]>a[3]&&(a[3]=b[1])}\r\nfunction nb(a,b,c,d,e){for(;c<d;c+=e){var f=a,g=b[c],h=b[c+1];f[0]=Math.min(f[0],g);f[1]=Math.min(f[1],h);f[2]=Math.max(f[2],g);f[3]=Math.max(f[3],h)}return a}function ob(a){var b=0;pb(a)||(b=qb(a)*rb(a));return b}function sb(a){return[a[0],a[1]]}function tb(a){return[(a[0]+a[2])/2,(a[1]+a[3])/2]}\r\nfunction ub(a,b,c,d,e){var f=b*d[0]/2;d=b*d[1]/2;b=Math.cos(c);var g=Math.sin(c);c=f*b;f*=g;b*=d;var h=d*g,k=a[0],l=a[1];a=k-c+h;d=k-c-h;g=k+c-h;c=k+c+h;var h=l-f-b,k=l-f+b,m=l+f+b,f=l+f-b;return ib(Math.min(a,d,g,c),Math.min(h,k,m,f),Math.max(a,d,g,c),Math.max(h,k,m,f),e)}function rb(a){return a[3]-a[1]}function vb(a,b){var c=db();wb(a,b)&&(c[0]=a[0]>b[0]?a[0]:b[0],c[1]=a[1]>b[1]?a[1]:b[1],c[2]=a[2]<b[2]?a[2]:b[2],c[3]=a[3]<b[3]?a[3]:b[3]);return c}function xb(a){return[a[0],a[3]]}\r\nfunction qb(a){return a[2]-a[0]}function wb(a,b){return a[0]<=b[2]&&a[2]>=b[0]&&a[1]<=b[3]&&a[3]>=b[1]}function pb(a){return a[2]<a[0]||a[3]<a[1]};function yb(){return!0}function zb(){return!1};/*\r\n\r\n Latitude/longitude spherical geodesy formulae taken from\r\n http://www.movable-type.co.uk/scripts/latlong.html\r\n Licensed under CC-BY-3.0.\r\n*/\r\nfunction Ab(a){this.radius=a}function Bb(a,b){var c=a[1]*Math.PI/180,d=b[1]*Math.PI/180,e=(d-c)/2,f=(b[0]-a[0])*Math.PI/180/2,c=Math.sin(e)*Math.sin(e)+Math.sin(f)*Math.sin(f)*Math.cos(c)*Math.cos(d);return 2*Cb.radius*Math.atan2(Math.sqrt(c),Math.sqrt(1-c))}\r\nAb.prototype.offset=function(a,b,c){var d=a[1]*Math.PI/180;b/=this.radius;var e=Math.asin(Math.sin(d)*Math.cos(b)+Math.cos(d)*Math.sin(b)*Math.cos(c));return[180*(a[0]*Math.PI/180+Math.atan2(Math.sin(c)*Math.sin(b)*Math.cos(d),Math.cos(b)-Math.sin(d)*Math.sin(e)))/Math.PI,180*e/Math.PI]};var Cb=new Ab(6370997);var Db={};Db.degrees=2*Math.PI*Cb.radius/360;Db.ft=.3048;Db.m=1;Db[\"us-ft\"]=1200/3937;\r\nfunction Eb(a){this.ya=a.code;this.a=a.units;this.h=void 0!==a.extent?a.extent:null;this.c=void 0!==a.global?a.global:!1;this.b=!(!this.c||!this.h);this.i=void 0!==a.getPointResolution?a.getPointResolution:this.j;this.f=null;this.g=a.metersPerUnit;var b=Fb,c=a.code,d=Gb||K.proj4;if(\"function\"==typeof d&&void 0===b[c]){var e=d.defs(c);if(void 0!==e){void 0===a.metersPerUnit&&(this.g=e.to_meter);void 0===a.units&&(this.a=e.units);var f,g;for(f in b)if(a=d.defs(f),void 0!==a)if(b=Hb(f),a===e)Ib([b,this]);\r\nelse{g=d(f,c);a=g.forward;g=g.inverse;var b=Hb(b),h=Hb(this);Jb(b,h,Kb(a));Jb(h,b,Kb(g))}}}}Eb.prototype.l=function(){return this.ya};Eb.prototype.G=function(){return this.h};function Lb(a){return a.g||Db[a.a]}Eb.prototype.j=function(a,b){if(\"degrees\"==this.a)return a;var c=Mb(this,Hb(\"EPSG:4326\")),d=[b[0]-a/2,b[1],b[0]+a/2,b[1],b[0],b[1]-a/2,b[0],b[1]+a/2],d=c(d,d,2),c=(Bb(d.slice(0,2),d.slice(2,4))+Bb(d.slice(4,6),d.slice(6,8)))/2,d=Lb(this);void 0!==d&&(c/=d);return c};\r\nEb.prototype.getPointResolution=function(a,b){return this.i(a,b)};var Fb={},Ob={},Gb=null;function Ib(a){Pb(a);a.forEach(function(b){a.forEach(function(a){b!==a&&Jb(b,a,Qb)})})}function Rb(a){Fb[a.ya]=a;Jb(a,a,Qb)}function Pb(a){var b=[];a.forEach(function(a){b.push(Rb(a))})}function Sb(a){return a?\"string\"===typeof a?Hb(a):a:Hb(\"EPSG:3857\")}function Jb(a,b,c){a=a.ya;b=b.ya;a in Ob||(Ob[a]={});Ob[a][b]=c}\r\nfunction Kb(a){return function(b,c,d){var e=b.length;d=void 0!==d?d:2;c=void 0!==c?c:Array(e);var f,g;for(g=0;g<e;g+=d)for(f=a([b[g],b[g+1]]),c[g]=f[0],c[g+1]=f[1],f=d-1;2<=f;--f)c[g+f]=b[g+f];return c}}function Hb(a){var b;if(a instanceof Eb)b=a;else if(\"string\"===typeof a){b=Fb[a];var c=Gb||K.proj4;void 0===b&&\"function\"==typeof c&&void 0!==c.defs(a)&&(b=new Eb({code:a}),Rb(b))}return b||null}function Tb(a,b){if(a===b)return!0;var c=a.a===b.a;return a.ya===b.ya?c:Mb(a,b)===Qb&&c}\r\nfunction Ub(a,b){var c=Hb(a),d=Hb(b);return Mb(c,d)}function Mb(a,b){var c=a.ya,d=b.ya,e;c in Ob&&d in Ob[c]&&(e=Ob[c][d]);void 0===e&&(e=Vb);return e}function Vb(a,b){if(void 0!==b&&a!==b){for(var c=0,d=a.length;c<d;++c)b[c]=a[c];a=b}return a}function Qb(a,b){var c;if(void 0!==b){c=0;for(var d=a.length;c<d;++c)b[c]=a[c];c=b}else c=a.slice();return c};function Wb(){V.call(this);this.j=db();this.s=-1;this.f={};this.i=this.g=0}B(Wb,V);Wb.prototype.G=function(a){this.s!=this.b&&(this.j=this.mb(this.j),this.s=this.b);var b=this.j;a?(a[0]=b[0],a[1]=b[1],a[2]=b[2],a[3]=b[3]):a=b;return a};Wb.prototype.transform=function(a,b){this.Hb(Ub(a,b));return this};function Xb(a,b,c,d,e,f){for(var g=f?f:[],h=0;b<c;b+=d){var k=a[b],l=a[b+1];g[h++]=e[0]*k+e[2]*l+e[4];g[h++]=e[1]*k+e[3]*l+e[5]}f&&g.length!=h&&(g.length=h);return g};function Yb(){Wb.call(this);this.c=\"XY\";this.A=2;this.o=null}B(Yb,Wb);function Zb(a){var b;\"XY\"==a?b=2:\"XYZ\"==a||\"XYM\"==a?b=3:\"XYZM\"==a&&(b=4);return b}n=Yb.prototype;n.mb=function(a){var b=this.o,c=this.o.length,d=this.A;a=jb(a);return nb(a,b,0,c,d)};n.Rb=function(a){this.i!=this.b&&(qa(this.f),this.g=0,this.i=this.b);if(0>a||0!==this.g&&a<=this.g)return this;var b=a.toString();if(this.f.hasOwnProperty(b))return this.f[b];var c=this.Qa(a);if(c.o.length<this.o.length)return this.f[b]=c;this.g=a;return this};\r\nn.Qa=function(){return this};function $b(a,b,c){a.A=Zb(b);a.c=b;a.o=c}function ac(a,b,c,d){if(b)c=Zb(b);else{for(b=0;b<d;++b){if(0===c.length){a.c=\"XY\";a.A=2;return}c=c[0]}c=c.length;var e;2==c?e=\"XY\":3==c?e=\"XYZ\":4==c&&(e=\"XYZM\");b=e}a.c=b;a.A=c}n.Hb=function(a){this.o&&(a(this.o,this.o,this.A),this.w())};\r\nn.rotate=function(a,b){var c=this.o;if(c){for(var d=c.length,e=this.A,f=c?c:[],g=Math.cos(a),h=Math.sin(a),k=b[0],l=b[1],m=0,p=0;p<d;p+=e){var q=c[p]-k,u=c[p+1]-l;f[m++]=k+q*g-u*h;f[m++]=l+q*h+u*g;for(q=p+2;q<p+e;++q)f[m++]=c[q]}c&&f.length!=m&&(f.length=m);this.w()}};\r\nn.scale=function(a,b,c){var d=b;void 0===d&&(d=a);var e=c;e||(e=tb(this.G()));if(c=this.o){b=c.length;for(var f=this.A,g=c?c:[],h=e[0],e=e[1],k=0,l=0;l<b;l+=f){var m=c[l]-h,p=c[l+1]-e;g[k++]=h+a*m;g[k++]=e+d*p;for(m=l+2;m<l+f;++m)g[k++]=c[m]}c&&g.length!=k&&(g.length=k);this.w()}};n.translate=function(a,b){var c=this.o;if(c){var d=c.length,e=this.A,f=c?c:[],g=0,h,k;for(h=0;h<d;h+=e)for(f[g++]=c[h]+a,f[g++]=c[h+1]+b,k=h+2;k<h+e;++k)f[g++]=c[k];c&&f.length!=g&&(f.length=g);this.w()}};function bc(a,b){var c=0,d,e;d=0;for(e=b.length;d<e;++d)a[c++]=b[d];return c}function cc(a,b,c,d){var e,f;e=0;for(f=c.length;e<f;++e){var g=c[e],h;for(h=0;h<d;++h)a[b++]=g[h]}return b}function dc(a,b,c,d,e){e=e?e:[];var f=0,g,h;g=0;for(h=c.length;g<h;++g)b=cc(a,b,c[g],d),e[f++]=b;e.length=f;return e};function ec(a,b,c,d,e){e=void 0!==e?e:[];for(var f=0;b<c;b+=d)e[f++]=a.slice(b,b+d);e.length=f;return e}function fc(a,b,c,d,e){e=void 0!==e?e:[];var f=0,g,h;g=0;for(h=c.length;g<h;++g){var k=c[g];e[f++]=ec(a,b,k,d,e[f]);b=k}e.length=f;return e};function gc(a,b,c,d,e,f,g){var h=(c-b)/d;if(3>h){for(;b<c;b+=d)f[g++]=a[b],f[g++]=a[b+1];return g}var k=Array(h);k[0]=1;k[h-1]=1;c=[b,c-d];for(var l=0,m;0<c.length;){var p=c.pop(),q=c.pop(),u=0,w=a[q],r=a[q+1],x=a[p],D=a[p+1];for(m=q+d;m<p;m+=d){var t,z=a[m];t=a[m+1];var C=w,E=r,v=x-C,H=D-E;if(0!==v||0!==H){var G=((z-C)*v+(t-E)*H)/(v*v+H*H);1<G?(C=x,E=D):0<G&&(C+=v*G,E+=H*G)}z=C-z;t=E-t;t=z*z+t*t;t>u&&(l=m,u=t)}u>e&&(k[(l-b)/d]=1,q+d<l&&c.push(q,l),l+d<p&&c.push(l,p))}for(m=0;m<h;++m)k[m]&&(f[g++]=\r\na[b+m*d],f[g++]=a[b+m*d+1]);return g}\r\nfunction hc(a,b,c,d,e,f,g,h){var k,l;k=0;for(l=c.length;k<l;++k){var m=c[k];a:{var p=a,q=m,u=d,w=e,r=f;if(b!=q){var x=w*Math.round(p[b]/w),D=w*Math.round(p[b+1]/w);b+=u;r[g++]=x;r[g++]=D;var t,z;do if(t=w*Math.round(p[b]/w),z=w*Math.round(p[b+1]/w),b+=u,b==q){r[g++]=t;r[g++]=z;break a}while(t==x&&z==D);for(;b<q;){var C,E;C=w*Math.round(p[b]/w);E=w*Math.round(p[b+1]/w);b+=u;if(C!=t||E!=z){var v=t-x,H=z-D,G=C-x,A=E-D;v*A==H*G&&(0>v&&G<v||v==G||0<v&&G>v)&&(0>H&&A<H||H==A||0<H&&A>H)||(r[g++]=t,r[g++]=\r\nz,x=t,D=z);t=C;z=E}}r[g++]=t;r[g++]=z}}h.push(g);b=m}return g};function ic(a,b){Yb.call(this);this.ea(a,b)}B(ic,Yb);n=ic.prototype;n.clone=function(){var a=new ic(null);$b(a,this.c,this.o.slice());a.w();return a};n.za=function(){return ec(this.o,0,this.o.length,this.A)};n.Qa=function(a){var b=[];b.length=gc(this.o,0,this.o.length,this.A,a,b,0);a=new ic(null);$b(a,\"XY\",b);a.w();return a};n.$=function(){return\"LinearRing\"};n.ea=function(a,b){a?(ac(this,b,a,1),this.o||(this.o=[]),this.o.length=cc(this.o,0,a,this.A)):$b(this,\"XY\",null);this.w()};function jc(a,b){Yb.call(this);this.ea(a,b)}B(jc,Yb);n=jc.prototype;n.clone=function(){var a=new jc(null);$b(a,this.c,this.o.slice());a.w();return a};n.za=function(){return this.o?this.o.slice():[]};n.mb=function(a){return kb(this.o,a)};n.$=function(){return\"Point\"};n.ea=function(a,b){a?(ac(this,b,a,0),this.o||(this.o=[]),this.o.length=bc(this.o,a)):$b(this,\"XY\",null);this.w()};function kc(a,b,c,d,e,f){for(var g=!1,h=a[c-d],k=a[c-d+1];b<c;b+=d){var l=a[b],m=a[b+1];k>f!=m>f&&e<(l-h)*(f-k)/(m-k)+h&&(g=!g);h=l;k=m}return g};function lc(a,b,c,d,e,f,g){var h,k,l,m,p,q=e[f+1],u=[],w=c[0];l=a[w-d];p=a[w-d+1];for(h=b;h<w;h+=d){m=a[h];k=a[h+1];if(q<=p&&k<=q||p<=q&&q<=k)l=(q-p)/(k-p)*(m-l)+l,u.push(l);l=m;p=k}w=NaN;p=-Infinity;u.sort(Ma);l=u[0];h=1;for(k=u.length;h<k;++h){m=u[h];var r=Math.abs(m-l);if(r>p){l=(l+m)/2;var x;a:if(0!==c.length&&kc(a,b,c[0],d,l,q)){var D;x=1;for(D=c.length;x<D;++x)if(kc(a,c[x-1],c[x],d,l,q)){x=!1;break a}x=!0}else x=!1;x&&(w=l,p=r)}l=m}isNaN(w)&&(w=e[f]);return g?(g.push(w,q),g):[w,q]};function mc(a,b,c,d){for(var e=0,f=a[c-d],g=a[c-d+1];b<c;b+=d)var h=a[b],k=a[b+1],e=e+(h-f)*(k+g),f=h,g=k;return 0<e}function nc(a,b,c,d){var e=0;d=void 0!==d?d:!1;var f,g;f=0;for(g=b.length;f<g;++f){var h=b[f],e=mc(a,e,h,c);if(0===f){if(d&&e||!d&&!e)return!1}else if(d&&!e||!d&&e)return!1;e=h}return!0}\r\nfunction oc(a,b,c,d,e){e=void 0!==e?e:!1;var f,g;f=0;for(g=c.length;f<g;++f){var h=c[f],k=mc(a,b,h,d);if(0===f?e&&k||!e&&!k:e&&!k||!e&&k)for(var k=a,l=h,m=d;b<l-m;){var p;for(p=0;p<m;++p){var q=k[b+p];k[b+p]=k[l-m+p];k[l-m+p]=q}b+=m;l-=m}b=h}return b}function pc(a,b,c,d){var e=0,f,g;f=0;for(g=b.length;f<g;++f)e=oc(a,e,b[f],c,d);return e};function qc(a,b){Yb.call(this);this.ja=[];this.h=-1;this.v=null;this.u=-1;this.a=null;this.ea(a,b)}B(qc,Yb);n=qc.prototype;n.clone=function(){var a=new qc(null);rc(a,this.c,this.o.slice(),this.ja.slice());return a};n.za=function(a){var b;void 0!==a?(b=sc(this).slice(),oc(b,0,this.ja,this.A,a)):b=this.o;return fc(b,0,this.ja,this.A)};function tc(a){if(a.h!=a.b){var b=tb(a.G());a.v=lc(sc(a),0,a.ja,a.A,b,0);a.h=a.b}return a.v}\r\nfunction sc(a){if(a.u!=a.b){var b=a.o;nc(b,a.ja,a.A)?a.a=b:(a.a=b.slice(),a.a.length=oc(a.a,0,a.ja,a.A));a.u=a.b}return a.a}n.Qa=function(a){var b=[],c=[];b.length=hc(this.o,0,this.ja,this.A,Math.sqrt(a),b,0,c);a=new qc(null);rc(a,\"XY\",b,c);return a};n.$=function(){return\"Polygon\"};n.ea=function(a,b){if(a){ac(this,b,a,2);this.o||(this.o=[]);var c=dc(this.o,0,a,this.A,this.ja);this.o.length=0===c.length?0:c[c.length-1];this.w()}else rc(this,\"XY\",null,this.ja)};\r\nfunction rc(a,b,c,d){$b(a,b,c);a.ja=d;a.w()};function uc(a){V.call(this);a=a||{};this.c=[0,0];var b={};b[vc]=void 0!==a.center?a.center:null;this.j=Sb(a.projection);var c,d,e,f=void 0!==a.minZoom?a.minZoom:0;c=void 0!==a.maxZoom?a.maxZoom:28;var g=void 0!==a.zoomFactor?a.zoomFactor:2;if(void 0!==a.resolutions)c=a.resolutions,d=c[0],e=c[c.length-1],c=Va(c);else{d=Sb(a.projection);e=d.G();var h=(e?Math.max(qb(e),rb(e)):360*Db.degrees/Lb(d))/256/Math.pow(2,0),k=h/Math.pow(2,28);d=a.maxResolution;void 0!==d?f=0:d=h/Math.pow(g,f);e=a.minResolution;\r\nvoid 0===e&&(e=void 0!==a.maxZoom?void 0!==a.maxResolution?d/Math.pow(g,c):h/Math.pow(g,c):k);c=f+Math.floor(Math.log(d/e)/Math.log(g));e=d/Math.pow(g,c-f);c=Wa(g,d,c-f)}this.f=d;this.i=e;this.s=g;this.g=a.resolutions;this.h=f;f=void 0!==a.extent?ma(a.extent):na;(void 0!==a.enableRotation?a.enableRotation:1)?(g=a.constrainRotation,g=void 0===g||!0===g?$a():!1===g?Ya:\"number\"===typeof g?Za(g):Ya):g=Xa;this.a=new oa(f,c,g);void 0!==a.resolution?b[wc]=a.resolution:void 0!==a.zoom&&(b[wc]=this.constrainResolution(this.f,\r\na.zoom-this.h));b[xc]=void 0!==a.rotation?a.rotation:0;this.l(b)}B(uc,V);n=uc.prototype;n.constrainResolution=function(a,b,c){return this.a.resolution(a,b||0,c||0)};n.constrainRotation=function(a,b){return this.a.rotation(a,b||0)};n.qa=function(){return this.get(vc)};n.lc=function(a){var b=this.qa();L(b,1);var c=this.O();L(void 0!==c,2);var d=this.get(xc);L(void 0!==d,3);return ub(b,c,d,a)};n.ia=function(){return this.j};n.O=function(){return this.get(wc)};\r\nfunction yc(a,b){return Math.max(qb(a)/b[0],rb(a)/b[1])}n.T=function(){var a=this.qa(),b=this.ia(),c=this.O(),d=this.get(xc);return{center:a.slice(),projection:void 0!==b?b:null,resolution:c,rotation:d}};n.rd=function(){var a,b=this.O();if(void 0!==b&&b>=this.i&&b<=this.f){a=this.h||0;var c,d;if(this.g){d=Na(this.g,b,1);a+=d;if(d==this.g.length-1)return a;c=this.g[d];d=c/this.g[d+1]}else c=this.f,d=this.s;a+=Math.log(c/b)/Math.log(d)}return a};\r\nn.md=function(a,b,c){if(!(a instanceof Yb)){L(Array.isArray(a),24);L(!pb(a),25);var d=a[0],e=a[1],f=a[2],g=a[3],d=[d,e,d,g,f,g,f,e,d,e],e=new qc(null);rc(e,\"XY\",d,[d.length]);a=e}d=c||{};c=void 0!==d.padding?d.padding:[0,0,0,0];var g=void 0!==d.constrainResolution?d.constrainResolution:!0,e=void 0!==d.nearest?d.nearest:!1,h;void 0!==d.minResolution?h=d.minResolution:void 0!==d.maxZoom?h=this.constrainResolution(this.f,d.maxZoom-this.h,0):h=0;var k=a.o,f=this.get(xc),d=Math.cos(-f),f=Math.sin(-f),\r\nl=Infinity,m=Infinity,p=-Infinity,q=-Infinity;a=a.A;for(var u=0,w=k.length;u<w;u+=a)var r=k[u]*d-k[u+1]*f,x=k[u]*f+k[u+1]*d,l=Math.min(l,r),m=Math.min(m,x),p=Math.max(p,r),q=Math.max(q,x);b=yc([l,m,p,q],[b[0]-c[1]-c[3],b[1]-c[0]-c[2]]);b=isNaN(b)?h:Math.max(b,h);g&&(h=this.constrainResolution(b,0,0),!e&&h<b&&(h=this.constrainResolution(h,-1,0)),b=h);this.set(wc,b);f=-f;h=(l+p)/2+(c[1]-c[3])/2*b;b=(m+q)/2+(c[0]-c[2])/2*b;this.xa([h*d-b*f,b*d+h*f])};\r\nn.rotate=function(a,b){if(void 0!==b){var c,d=this.qa();void 0!==d&&(c=[d[0]-b[0],d[1]-b[1]],bb(c,a-this.get(xc)),ab(c,b));this.xa(c)}this.set(xc,a)};n.xa=function(a){this.set(vc,a)};function zc(a,b){a.c[1]+=b}n.ye=function(a){a=this.constrainResolution(this.f,a-this.h,0);this.set(wc,a)};var vc=\"center\",wc=\"resolution\",xc=\"rotation\";function Ac(a){return 1-Math.pow(1-a,3)}function Bc(a){return 3*a*a-2*a*a*a}function Cc(a){return a};function Dc(a){var b=a.source,c=a.start?a.start:Date.now(),d=b[0],e=b[1],f=void 0!==a.duration?a.duration:1E3,g=a.easing?a.easing:Bc;return function(a,b){if(b.time<c)return b.animate=!0,b.viewHints[0]+=1,!0;if(b.time<c+f){var l=1-g((b.time-c)/f),m=d-b.viewState.center[0],p=e-b.viewState.center[1];b.animate=!0;b.viewState.center[0]+=l*m;b.viewState.center[1]+=l*p;b.viewHints[0]+=1;return!0}return!1}}\r\nfunction Ec(a){var b=a.rotation?a.rotation:0,c=a.start?a.start:Date.now(),d=void 0!==a.duration?a.duration:1E3,e=a.easing?a.easing:Bc,f=a.anchor?a.anchor:null;return function(a,h){if(h.time<c)return h.animate=!0,h.viewHints[0]+=1,!0;if(h.time<c+d){var k=1-e((h.time-c)/d),k=(b-h.viewState.rotation)*k;h.animate=!0;h.viewState.rotation+=k;if(f){var l=h.viewState.center;l[0]-=f[0];l[1]-=f[1];bb(l,k);ab(l,f)}h.viewHints[0]+=1;return!0}return!1}}\r\nfunction Fc(a){var b=a.resolution,c=a.start?a.start:Date.now(),d=void 0!==a.duration?a.duration:1E3,e=a.easing?a.easing:Bc;return function(a,g){if(g.time<c)return g.animate=!0,g.viewHints[0]+=1,!0;if(g.time<c+d){var h=1-e((g.time-c)/d),k=b-g.viewState.resolution;g.animate=!0;g.viewState.resolution+=h*k;g.viewHints[0]+=1;return!0}return!1}};function Gc(a,b,c,d){this.H=a;this.I=b;this.J=c;this.L=d}function Hc(a,b,c){return a.H<=b&&b<=a.I&&a.J<=c&&c<=a.L}function Ic(a,b){return a.H==b.H&&a.J==b.J&&a.I==b.I&&a.L==b.L}function Jc(a,b){return a.H<=b.I&&a.I>=b.H&&a.J<=b.L&&a.L>=b.J};function Kc(a,b,c){void 0===c&&(c=[0,0]);c[0]=a[0]*b+.5|0;c[1]=a[1]*b+.5|0;return c}function Lc(a,b){if(Array.isArray(a))return a;void 0===b?b=[a,a]:b[0]=b[1]=a;return b};function Mc(a){this.minZoom=void 0!==a.minZoom?a.minZoom:0;this.b=a.resolutions;L(Ua(this.b,function(a,b){return b-a}),17);this.maxZoom=this.b.length-1;this.c=void 0!==a.origin?a.origin:null;this.f=null;void 0!==a.origins&&(this.f=a.origins,L(this.f.length==this.b.length,20));var b=a.extent;void 0===b||this.c||this.f||(this.c=xb(b));L(!this.c&&this.f||this.c&&!this.f,18);this.g=null;void 0!==a.tileSizes&&(this.g=a.tileSizes,L(this.g.length==this.b.length,19));this.h=void 0!==a.tileSize?a.tileSize:\r\nthis.g?null:256;L(!this.h&&this.g||this.h&&!this.g,22);this.i=void 0!==b?b:null;this.a=null;this.l=[0,0];void 0!==a.sizes?this.a=a.sizes.map(function(a){return new Gc(Math.min(0,a[0]),Math.max(a[0]-1,-1),Math.min(0,a[1]),Math.max(a[1]-1,-1))},this):b&&Nc(this,b)}var Oc=[0,0,0];function Pc(a,b,c,d,e){e=Qc(a,b,e);for(b=b[0]-1;b>=a.minZoom;){if(c.call(null,b,Rc(a,e,b,d)))return!0;--b}return!1}Mc.prototype.G=function(){return this.i};Mc.prototype.pa=function(a){return this.c?this.c:this.f[a]};\r\nMc.prototype.O=function(a){return this.b[a]};function Sc(a,b,c,d){return b[0]<a.maxZoom?(d=Qc(a,b,d),Rc(a,d,b[0]+1,c)):null}function Tc(a,b,c,d){Uc(a,b[0],b[1],c,!1,Oc);var e=Oc[1],f=Oc[2];Uc(a,b[2],b[3],c,!0,Oc);a=Oc[1];b=Oc[2];void 0!==d?(d.H=e,d.I=a,d.J=f,d.L=b):d=new Gc(e,a,f,b);return d}function Rc(a,b,c,d){c=a.O(c);return Tc(a,b,c,d)}function Vc(a,b){var c=a.pa(b[0]),d=a.O(b[0]),e=Lc(Wc(a,b[0]),a.l);return[c[0]+(b[1]+.5)*e[0]*d,c[1]+(b[2]+.5)*e[1]*d]}\r\nfunction Qc(a,b,c){var d=a.pa(b[0]),e=a.O(b[0]);a=Lc(Wc(a,b[0]),a.l);var f=d[0]+b[1]*a[0]*e;b=d[1]+b[2]*a[1]*e;return ib(f,b,f+a[0]*e,b+a[1]*e,c)}function Uc(a,b,c,d,e,f){var g=Xc(a,d),h=d/a.O(g),k=a.pa(g);a=Lc(Wc(a,g),a.l);b=h*Math.floor((b-k[0])/d+(e?.5:0))/a[0];c=h*Math.floor((c-k[1])/d+(e?0:.5))/a[1];e?(b=Math.ceil(b)-1,c=Math.ceil(c)-1):(b=Math.floor(b),c=Math.floor(c));e=b;void 0!==f?(f[0]=g,f[1]=e,f[2]=c):f=[g,e,c];return f}function Yc(a,b,c,d){c=a.O(c);return Uc(a,b[0],b[1],c,!1,d)}\r\nfunction Wc(a,b){return a.h?a.h:a.g[b]}function Xc(a,b,c){return ia(Na(a.b,b,c||0),a.minZoom,a.maxZoom)}function Nc(a,b){for(var c=a.b.length,d=Array(c),e=a.minZoom;e<c;++e)d[e]=Rc(a,b,e);a.a=d};function Zc(a){var b=a.f;if(!b){var b=$c(a),c=ad(b,void 0,void 0),b=new Mc({extent:b,origin:xb(b),resolutions:c,tileSize:void 0});a.f=b}return b}function ad(a,b,c){b=void 0!==b?b:42;var d=rb(a);a=qb(a);c=Lc(void 0!==c?c:256);c=Math.max(a/c[0],d/c[1]);b+=1;d=Array(b);for(a=0;a<b;++a)d[a]=c/Math.pow(2,a);return d}function $c(a){a=Hb(a);var b=a.G();b||(a=180*Db.degrees/Lb(a),b=ib(-a,-a,a,a));return b};function bd(a){this.a=a.html;this.b=a.tileRanges?a.tileRanges:null};function cd(a){V.call(this);this.a=a?a:[];dd(this)}B(cd,V);cd.prototype.clear=function(){for(;0<this.get(\"length\");)this.pop()};function ed(a,b,c){a.a.forEach(b,c)}cd.prototype.pop=function(){return fd(this,this.get(\"length\")-1)};cd.prototype.push=function(a){var b=this.a.length;this.a.splice(b,0,a);dd(this);U(this,new gd(hd,a));return b};cd.prototype.remove=function(a){var b=this.a,c,d;c=0;for(d=b.length;c<d;++c)if(b[c]===a)return fd(this,c)};\r\nfunction fd(a,b){var c=a.a[b];a.a.splice(b,1);dd(a);U(a,new gd(id,c));return c}function dd(a){a.set(\"length\",a.a.length)}var hd=\"add\",id=\"remove\";function gd(a,b){T.call(this,a);this.element=b}B(gd,T);var jd=/^#(?:[0-9a-f]{3}){1,2}$/i,kd=/^(?:rgb)?\\((0|[1-9]\\d{0,2}),\\s?(0|[1-9]\\d{0,2}),\\s?(0|[1-9]\\d{0,2})\\)$/i,ld=/^(?:rgba)?\\((0|[1-9]\\d{0,2}),\\s?(0|[1-9]\\d{0,2}),\\s?(0|[1-9]\\d{0,2}),\\s?(0|1|0\\.\\d{0,10})\\)$/i,md=/^([a-z]*)$/i;function nd(a){if(\"string\"!==typeof a){var b=a[0];b!=(b|0)&&(b=b+.5|0);var c=a[1];c!=(c|0)&&(c=c+.5|0);var d=a[2];d!=(d|0)&&(d=d+.5|0);a=\"rgba(\"+b+\",\"+c+\",\"+d+\",\"+(void 0===a[3]?1:a[3])+\")\"}return a}\r\nvar pd=function(){var a={},b=0;return function(c){var d;if(a.hasOwnProperty(c))d=a[c];else{if(1024<=b){d=0;for(var e in a)0===(d++&3)&&(delete a[e],--b)}d=c;var f,g;md.exec(d)&&(e=document.createElement(\"div\"),e.style.color=d,document.body.appendChild(e),d=window.getComputedStyle(e).color,document.body.removeChild(e));jd.exec(d)?(f=d.length-1,L(3==f||6==f,54),g=3==f?1:2,f=parseInt(d.substr(1+0*g,g),16),e=parseInt(d.substr(1+1*g,g),16),d=parseInt(d.substr(1+2*g,g),16),1==g&&(f=(f<<4)+f,e=(e<<4)+e,\r\nd=(d<<4)+d),f=[f,e,d,1]):(g=ld.exec(d))?(f=Number(g[1]),e=Number(g[2]),d=Number(g[3]),g=Number(g[4]),f=od([f,e,d,g])):(g=kd.exec(d))?(f=Number(g[1]),e=Number(g[2]),d=Number(g[3]),f=od([f,e,d,1])):L(!1,14);d=f;a[c]=d;++b}return d}}();function od(a){var b=[];b[0]=ia(a[0]+.5|0,0,255);b[1]=ia(a[1]+.5|0,0,255);b[2]=ia(a[2]+.5|0,0,255);b[3]=ia(a[3],0,1);return b};function qd(a){return\"string\"===typeof a||a instanceof CanvasPattern||a instanceof CanvasGradient?a:nd(a)};var rd=String.prototype.trim?function(a){return a.trim()}:function(a){return a.replace(/^[\\s\\xa0]+|[\\s\\xa0]+$/g,\"\")};function sd(a,b){return a<b?-1:a>b?1:0};function td(a,b,c){return 2>=arguments.length?Array.prototype.slice.call(a,b):Array.prototype.slice.call(a,b,c)};var ud;a:{var vd=aa.navigator;if(vd){var wd=vd.userAgent;if(wd){ud=wd;break a}}ud=\"\"}function xd(a){return-1!=ud.indexOf(a)};var yd=xd(\"Opera\"),zd=xd(\"Trident\")||xd(\"MSIE\"),Ad=xd(\"Edge\"),Bd=xd(\"Gecko\")&&!(-1!=ud.toLowerCase().indexOf(\"webkit\")&&!xd(\"Edge\"))&&!(xd(\"Trident\")||xd(\"MSIE\"))&&!xd(\"Edge\"),Cd=-1!=ud.toLowerCase().indexOf(\"webkit\")&&!xd(\"Edge\"),Dd;\r\na:{var Ed=\"\",Fd=function(){var a=ud;if(Bd)return/rv\\:([^\\);]+)(\\)|;)/.exec(a);if(Ad)return/Edge\\/([\\d\\.]+)/.exec(a);if(zd)return/\\b(?:MSIE|rv)[: ]([^\\);]+)(\\)|;)/.exec(a);if(Cd)return/WebKit\\/(\\S+)/.exec(a);if(yd)return/(?:Version)[ \\/]?(\\S+)/.exec(a)}();Fd&&(Ed=Fd?Fd[1]:\"\");if(zd){var Gd,Hd=aa.document;Gd=Hd?Hd.documentMode:void 0;if(null!=Gd&&Gd>parseFloat(Ed)){Dd=String(Gd);break a}}Dd=Ed}var Id={};function Jd(){return[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]}function Kd(a,b){a[0]=b[0];a[1]=b[1];a[4]=b[2];a[5]=b[3];a[12]=b[4];a[13]=b[5];return a};var Ld=Jd();function Md(a,b){var c=document.createElement(\"CANVAS\");a&&(c.width=a);b&&(c.height=b);return c.getContext(\"2d\")}\r\nvar Nd=function(){var a;return function(){if(void 0===a){var b=document.createElement(\"P\"),c,d={webkitTransform:\"-webkit-transform\",OTransform:\"-o-transform\",msTransform:\"-ms-transform\",MozTransform:\"-moz-transform\",transform:\"transform\"};document.body.appendChild(b);for(var e in d)e in b.style&&(b.style[e]=\"translate(1px,1px)\",c=K.getComputedStyle(b).getPropertyValue(d[e]));document.body.removeChild(b);a=c&&\"none\"!==c}return a}}(),Od=function(){var a;return function(){if(void 0===a){var b=document.createElement(\"P\"),\r\nc,d={webkitTransform:\"-webkit-transform\",OTransform:\"-o-transform\",msTransform:\"-ms-transform\",MozTransform:\"-moz-transform\",transform:\"transform\"};document.body.appendChild(b);for(var e in d)e in b.style&&(b.style[e]=\"translate3d(1px,1px,1px)\",c=K.getComputedStyle(b).getPropertyValue(d[e]));document.body.removeChild(b);a=c&&\"none\"!==c}return a}}();\r\nfunction Pd(a,b){var c=a.style;c.WebkitTransform=b;c.MozTransform=b;c.b=b;c.msTransform=b;c.transform=b;if((c=zd)&&!(c=Id[\"9.0\"])){for(var c=0,d=rd(String(Dd)).split(\".\"),e=rd(\"9.0\").split(\".\"),f=Math.max(d.length,e.length),g=0;0==c&&g<f;g++){var h=d[g]||\"\",k=e[g]||\"\",l=RegExp(\"(\\\\d*)(\\\\D*)\",\"g\"),m=RegExp(\"(\\\\d*)(\\\\D*)\",\"g\");do{var p=l.exec(h)||[\"\",\"\",\"\"],q=m.exec(k)||[\"\",\"\",\"\"];if(0==p[0].length&&0==q[0].length)break;c=sd(0==p[1].length?0:parseInt(p[1],10),0==q[1].length?0:parseInt(q[1],10))||sd(0==\r\np[2].length,0==q[2].length)||sd(p[2],q[2])}while(0==c)}c=Id[\"9.0\"]=0<=c}c&&(a.style.transformOrigin=\"0 0\")}function Qd(a,b){var c;if(Od()){var d=Kd(Ld,b),e=Array(16);for(c=0;16>c;++c)e[c]=d[c].toFixed(6);Pd(a,\"matrix3d(\"+e.join(\",\")+\")\")}else if(Nd()){d=Array(6);for(c=0;6>c;++c)d[c]=b[c].toFixed(6);Pd(a,\"matrix(\"+d.join(\",\")+\")\")}else a.style.left=Math.round(b[4])+\"px\",a.style.top=Math.round(b[5])+\"px\"}function Rd(a,b){var c=b.parentNode;c&&c.replaceChild(a,b)}\r\nfunction Sd(a){a&&a.parentNode&&a.parentNode.removeChild(a)};function Td(a,b,c){T.call(this,a);this.map=b;this.frameState=void 0!==c?c:null}B(Td,T);function Ud(a){V.call(this);this.element=a.element?a.element:null;this.f=this.D=null;this.i=[];this.render=a.render?a.render:I;a.target&&(a=a.target,this.D=\"string\"===typeof a?document.getElementById(a):a)}B(Ud,V);Ud.prototype.R=function(){Sd(this.element);V.prototype.R.call(this)};\r\nUd.prototype.setMap=function(a){this.f&&Sd(this.element);for(var b=0,c=this.i.length;b<c;++b)M(this.i[b]);this.i.length=0;if(this.f=a)(this.D?this.D:a.j).appendChild(this.element),this.render!==I&&this.i.push(R(a,\"postrender\",this.render,this)),a.render()};function Vd(a){a=a?a:{};this.B=document.createElement(\"UL\");this.j=document.createElement(\"LI\");this.B.appendChild(this.j);this.j.style.display=\"none\";this.g=void 0!==a.collapsed?a.collapsed:!0;this.v=void 0!==a.collapsible?a.collapsible:!0;this.v||(this.g=!1);var b=void 0!==a.className?a.className:\"ol-attribution\",c=void 0!==a.tipLabel?a.tipLabel:\"Attributions\",d=void 0!==a.collapseLabel?a.collapseLabel:\"\\u00bb\";\"string\"===typeof d?(this.h=document.createElement(\"span\"),this.h.textContent=d):this.h=\r\nd;d=void 0!==a.label?a.label:\"i\";\"string\"===typeof d?(this.s=document.createElement(\"span\"),this.s.textContent=d):this.s=d;var e=this.v&&!this.g?this.h:this.s,d=document.createElement(\"button\");d.setAttribute(\"type\",\"button\");d.title=c;d.appendChild(e);R(d,\"click\",this.P,this);c=document.createElement(\"div\");c.className=b+\" ol-unselectable ol-control\"+(this.g&&this.v?\" ol-collapsed\":\"\")+(this.v?\"\":\" ol-uncollapsible\");c.appendChild(this.B);c.appendChild(d);Ud.call(this,{element:c,render:a.render?\r\na.render:Wd,target:a.target});this.u=!0;this.c={};this.a={};this.N={}}B(Vd,Ud);\r\nfunction Wd(a){if(a=a.frameState){var b,c,d,e,f,g,h,k,l,m,p,q=a.layerStatesArray,u=pa({},a.attributions),w={},r=a.viewState.projection;c=0;for(b=q.length;c<b;c++)if(g=q[c].layer.da())if(m=J(g).toString(),l=g.h)for(d=0,e=l.length;d<e;d++)if(h=l[d],k=J(h).toString(),!(k in u)){if(f=a.usedTiles[m]){var x=g.sa(r);a:{p=h;var D=r;if(p.b){var t,z,C,E=void 0;for(E in f)if(E in p.b){C=f[E];var v;t=0;for(z=p.b[E].length;t<z;++t){v=p.b[E][t];if(Jc(v,C)){p=!0;break a}var H=Rc(x,$c(D),parseInt(E,10)),G=H.I-H.H+\r\n1;if(C.H<H.H||C.I>H.I)if(Jc(v,new Gc(la(C.H,G),la(C.I,G),C.J,C.L))||C.I-C.H+1>G&&Jc(v,H)){p=!0;break a}}}p=!1}else p=!0}}else p=!1;p?(k in w&&delete w[k],u[k]=h):w[k]=h}b=[u,w];c=b[0];b=b[1];for(var A in this.c)A in c?(this.a[A]||(this.c[A].style.display=\"\",this.a[A]=!0),delete c[A]):A in b?(this.a[A]&&(this.c[A].style.display=\"none\",delete this.a[A]),delete b[A]):(Sd(this.c[A]),delete this.c[A],delete this.a[A]);for(A in c)d=document.createElement(\"LI\"),d.innerHTML=c[A].a,this.B.appendChild(d),this.c[A]=\r\nd,this.a[A]=!0;for(A in b)d=document.createElement(\"LI\"),d.innerHTML=b[A].a,d.style.display=\"none\",this.B.appendChild(d),this.c[A]=d;A=!sa(this.a)||!sa(a.logos);this.u!=A&&(this.element.style.display=A?\"\":\"none\",this.u=A);A&&sa(this.a)?this.element.classList.add(\"ol-logo-only\"):this.element.classList.remove(\"ol-logo-only\");var F;a=a.logos;A=this.N;for(F in A)F in a||(Sd(A[F]),delete A[F]);for(var Q in a)b=a[Q],b instanceof HTMLElement&&(this.j.appendChild(b),A[Q]=b),Q in A||(F=new Image,F.src=Q,\"\"===\r\nb?c=F:(c=document.createElement(\"a\"),c.href=b,c.appendChild(F)),this.j.appendChild(c),A[Q]=c);this.j.style.display=sa(a)?\"none\":\"\"}else this.u&&(this.element.style.display=\"none\",this.u=!1)}Vd.prototype.P=function(a){a.preventDefault();this.element.classList.toggle(\"ol-collapsed\");this.g?Rd(this.h,this.s):Rd(this.s,this.h);this.g=!this.g};function Xd(a){a=a?a:{};this.a=void 0!==a.className?a.className:\"ol-full-screen\";var b=void 0!==a.label?a.label:\"\\u2922\";this.g=\"string\"===typeof b?document.createTextNode(b):b;b=void 0!==a.labelActive?a.labelActive:\"\\u00d7\";this.h=\"string\"===typeof b?document.createTextNode(b):b;var c=a.tipLabel?a.tipLabel:\"Toggle full-screen\",b=document.createElement(\"button\");b.className=this.a+\"-\"+Yd();b.setAttribute(\"type\",\"button\");b.title=c;b.appendChild(this.g);R(b,\"click\",this.v,this);c=document.createElement(\"div\");\r\nc.className=this.a+\" ol-unselectable ol-control \"+(Zd()?\"\":\"ol-unsupported\");c.appendChild(b);Ud.call(this,{element:c,target:a.target});this.s=void 0!==a.keys?a.keys:!1;this.c=a.source}B(Xd,Ud);\r\nXd.prototype.v=function(a){a.preventDefault();Zd()&&(a=this.f)&&(Yd()?document.exitFullscreen?document.exitFullscreen():document.msExitFullscreen?document.msExitFullscreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.webkitExitFullscreen&&document.webkitExitFullscreen():(a=this.c?\"string\"===typeof this.c?document.getElementById(this.c):this.c:a.Ra(),this.s?a.mozRequestFullScreenWithKeys?a.mozRequestFullScreenWithKeys():a.webkitRequestFullscreen?a.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT):\r\n$d(a):$d(a)))};Xd.prototype.j=function(){var a=this.element.firstElementChild,b=this.f;Yd()?(a.className=this.a+\"-true\",Rd(this.h,this.g)):(a.className=this.a+\"-false\",Rd(this.g,this.h));b&&b.yb()};Xd.prototype.setMap=function(a){Ud.prototype.setMap.call(this,a);a&&this.i.push(R(K.document,ae(),this.j,this))};\r\nfunction Zd(){var a=document.body;return!!(a.webkitRequestFullscreen||a.mozRequestFullScreen&&document.mozFullScreenEnabled||a.msRequestFullscreen&&document.msFullscreenEnabled||a.requestFullscreen&&document.fullscreenEnabled)}function Yd(){return!!(document.webkitIsFullScreen||document.mozFullScreen||document.msFullscreenElement||document.fullscreenElement)}\r\nfunction $d(a){a.requestFullscreen?a.requestFullscreen():a.msRequestFullscreen?a.msRequestFullscreen():a.mozRequestFullScreen?a.mozRequestFullScreen():a.webkitRequestFullscreen&&a.webkitRequestFullscreen()}var ae=function(){var a;return function(){if(!a){var b=document.body;b.webkitRequestFullscreen?a=\"webkitfullscreenchange\":b.mozRequestFullScreen?a=\"mozfullscreenchange\":b.msRequestFullscreen?a=\"MSFullscreenChange\":b.requestFullscreen&&(a=\"fullscreenchange\")}return a}}();function be(a){a=a?a:{};var b=void 0!==a.className?a.className:\"ol-rotate\",c=void 0!==a.label?a.label:\"\\u21e7\";this.a=null;\"string\"===typeof c?(this.a=document.createElement(\"span\"),this.a.className=\"ol-compass\",this.a.textContent=c):(this.a=c,this.a.classList.add(\"ol-compass\"));var d=a.tipLabel?a.tipLabel:\"Reset rotation\",c=document.createElement(\"button\");c.className=b+\"-reset\";c.setAttribute(\"type\",\"button\");c.title=d;c.appendChild(this.a);R(c,\"click\",be.prototype.s,this);d=document.createElement(\"div\");\r\nd.className=b+\" ol-unselectable ol-control\";d.appendChild(c);b=a.render?a.render:ce;this.g=a.resetNorth?a.resetNorth:void 0;Ud.call(this,{element:d,render:b,target:a.target});this.h=void 0!==a.duration?a.duration:250;this.c=void 0!==a.autoHide?a.autoHide:!0;this.j=void 0;this.c&&this.element.classList.add(\"ol-hidden\")}B(be,Ud);\r\nbe.prototype.s=function(a){a.preventDefault();if(void 0!==this.g)this.g();else{a=this.f;var b=a.U();if(b){var c=b.get(xc);void 0!==c&&(0<this.h&&(c%=2*Math.PI,c<-Math.PI&&(c+=2*Math.PI),c>Math.PI&&(c-=2*Math.PI),a.oa(Ec({rotation:c,duration:this.h,easing:Ac}))),b.set(xc,0))}}};\r\nfunction ce(a){if(a=a.frameState){a=a.viewState.rotation;if(a!=this.j){var b=\"rotate(\"+a+\"rad)\";if(this.c){var c=this.element.classList.contains(\"ol-hidden\");c||0!==a?c&&0!==a&&this.element.classList.remove(\"ol-hidden\"):this.element.classList.add(\"ol-hidden\")}this.a.style.msTransform=b;this.a.style.webkitTransform=b;this.a.style.transform=b}this.j=a}};function de(a){a=a?a:{};var b=void 0!==a.className?a.className:\"ol-zoom\",c=void 0!==a.delta?a.delta:1,d=void 0!==a.zoomInLabel?a.zoomInLabel:\"+\",e=void 0!==a.zoomOutLabel?a.zoomOutLabel:\"\\u2212\",f=void 0!==a.zoomInTipLabel?a.zoomInTipLabel:\"Zoom in\",g=void 0!==a.zoomOutTipLabel?a.zoomOutTipLabel:\"Zoom out\",h=document.createElement(\"button\");h.className=b+\"-in\";h.setAttribute(\"type\",\"button\");h.title=f;h.appendChild(\"string\"===typeof d?document.createTextNode(d):d);R(h,\"click\",de.prototype.c.bind(this,\r\nc));d=document.createElement(\"button\");d.className=b+\"-out\";d.setAttribute(\"type\",\"button\");d.title=g;d.appendChild(\"string\"===typeof e?document.createTextNode(e):e);R(d,\"click\",de.prototype.c.bind(this,-c));c=document.createElement(\"div\");c.className=b+\" ol-unselectable ol-control\";c.appendChild(h);c.appendChild(d);Ud.call(this,{element:c,target:a.target});this.a=void 0!==a.duration?a.duration:250}B(de,Ud);\r\nde.prototype.c=function(a,b){b.preventDefault();var c=this.f,d=c.U();if(d){var e=d.O();e&&(0<this.a&&c.oa(Fc({resolution:e,duration:this.a,easing:Ac})),c=d.constrainResolution(e,a),d.set(wc,c))}};function ee(a){a=a?a:{};var b=new cd;(void 0!==a.zoom?a.zoom:1)&&b.push(new de(a.zoomOptions));(void 0!==a.rotate?a.rotate:1)&&b.push(new be(a.rotateOptions));(void 0!==a.attribution?a.attribution:1)&&b.push(new Vd(a.attributionOptions));return b};var fe;\r\nfunction ge(){var a=aa.MessageChannel;\"undefined\"===typeof a&&\"undefined\"!==typeof window&&window.postMessage&&window.addEventListener&&!xd(\"Presto\")&&(a=function(){var a=document.createElement(\"IFRAME\");a.style.display=\"none\";a.src=\"\";document.documentElement.appendChild(a);var b=a.contentWindow,a=b.document;a.open();a.write(\"\");a.close();var c=\"callImmediate\"+Math.random(),d=\"file:\"==b.location.protocol?\"*\":b.location.protocol+\"//\"+b.location.host,a=ea(function(a){if((\"*\"==d||a.origin==d)&&a.data==\r\nc)this.port1.onmessage()},this);b.addEventListener(\"message\",a,!1);this.port1={};this.port2={postMessage:function(){b.postMessage(c,d)}}});if(\"undefined\"!==typeof a&&!xd(\"Trident\")&&!xd(\"MSIE\")){var b=new a,c={},d=c;b.port1.onmessage=function(){if(void 0!==c.next){c=c.next;var a=c.nc;c.nc=null;a()}};return function(a){d.next={nc:a};d=d.next;b.port2.postMessage(0)}}return\"undefined\"!==typeof document&&\"onreadystatechange\"in document.createElement(\"SCRIPT\")?function(a){var b=document.createElement(\"SCRIPT\");\r\nb.onreadystatechange=function(){b.onreadystatechange=null;b.parentNode.removeChild(b);b=null;a();a=null};document.documentElement.appendChild(b)}:function(a){aa.setTimeout(a,0)}};var he=[\"experimental-webgl\",\"webgl\",\"webkit-3d\",\"moz-webgl\"];function ie(a,b){var c,d,e=he.length;for(d=0;d<e;++d)try{if(c=a.getContext(he[d],b))return c}catch(f){}return null};var je,ke=\"undefined\"!==typeof navigator?navigator.userAgent.toLowerCase():\"\",le=-1!==ke.indexOf(\"firefox\"),me=-1!==ke.indexOf(\"safari\")&&-1===ke.indexOf(\"chrom\"),ne=-1!==ke.indexOf(\"macintosh\"),oe=K.devicePixelRatio||1,pe=!1,qe=function(){if(!(\"HTMLCanvasElement\"in K))return!1;try{var a=Md();return a?(a.setLineDash&&(pe=!0),!0):!1}catch(b){return!1}}(),re=\"ontouchstart\"in K,se=\"PointerEvent\"in K,te=!!K.navigator.msPointerEnabled,ue=!1,ve=[];\r\nif(\"WebGLRenderingContext\"in K)try{var we=ie(document.createElement(\"CANVAS\"),{failIfMajorPerformanceCaveat:!0});we&&(ue=!0,ve=we.getSupportedExtensions())}catch(a){}je=ue;fa=ve;function xe(a,b){this.b=a;this.g=b};function ye(a){xe.call(this,a,{mousedown:this.Pd,mousemove:this.Qd,mouseup:this.Td,mouseover:this.Sd,mouseout:this.Rd});this.a=a.a;this.c=[]}B(ye,xe);function ze(a,b){for(var c=a.c,d=b.clientX,e=b.clientY,f=0,g=c.length,h;f<g&&(h=c[f]);f++){var k=Math.abs(e-h[1]);if(25>=Math.abs(d-h[0])&&25>=k)return!0}return!1}function Ae(a){var b=Be(a,a),c=b.preventDefault;b.preventDefault=function(){a.preventDefault();c()};b.pointerId=1;b.isPrimary=!0;b.pointerType=\"mouse\";return b}n=ye.prototype;\r\nn.Pd=function(a){if(!ze(this,a)){if((1).toString()in this.a){var b=Ae(a);Ce(this.b,De,b,a);delete this.a[(1).toString()]}b=Ae(a);this.a[(1).toString()]=a;Ce(this.b,Ee,b,a)}};n.Qd=function(a){if(!ze(this,a)){var b=Ae(a);Ce(this.b,Fe,b,a)}};n.Td=function(a){if(!ze(this,a)){var b=this.a[(1).toString()];b&&b.button===a.button&&(b=Ae(a),Ce(this.b,Ge,b,a),delete this.a[(1).toString()])}};n.Sd=function(a){if(!ze(this,a)){var b=Ae(a);He(this.b,b,a)}};\r\nn.Rd=function(a){if(!ze(this,a)){var b=Ae(a);Ie(this.b,b,a)}};function Je(a){xe.call(this,a,{MSPointerDown:this.Yd,MSPointerMove:this.Zd,MSPointerUp:this.be,MSPointerOut:this.$d,MSPointerOver:this.ae,MSPointerCancel:this.Xd,MSGotPointerCapture:this.Vd,MSLostPointerCapture:this.Wd});this.a=a.a;this.c=[\"\",\"unavailable\",\"touch\",\"pen\",\"mouse\"]}B(Je,xe);function Ke(a,b){var c=b;\"number\"===typeof b.pointerType&&(c=Be(b,b),c.pointerType=a.c[b.pointerType]);return c}n=Je.prototype;n.Yd=function(a){this.a[a.pointerId.toString()]=a;var b=Ke(this,a);Ce(this.b,Ee,b,a)};\r\nn.Zd=function(a){var b=Ke(this,a);Ce(this.b,Fe,b,a)};n.be=function(a){var b=Ke(this,a);Ce(this.b,Ge,b,a);delete this.a[a.pointerId.toString()]};n.$d=function(a){var b=Ke(this,a);Ie(this.b,b,a)};n.ae=function(a){var b=Ke(this,a);He(this.b,b,a)};n.Xd=function(a){var b=Ke(this,a);Ce(this.b,De,b,a);delete this.a[a.pointerId.toString()]};n.Wd=function(a){U(this.b,new Le(\"lostpointercapture\",a,a))};n.Vd=function(a){U(this.b,new Le(\"gotpointercapture\",a,a))};function Me(a){xe.call(this,a,{pointerdown:this.le,pointermove:this.me,pointerup:this.pe,pointerout:this.ne,pointerover:this.oe,pointercancel:this.ke,gotpointercapture:this.sd,lostpointercapture:this.Od})}B(Me,xe);n=Me.prototype;n.le=function(a){Ne(this.b,a)};n.me=function(a){Ne(this.b,a)};n.pe=function(a){Ne(this.b,a)};n.ne=function(a){Ne(this.b,a)};n.oe=function(a){Ne(this.b,a)};n.ke=function(a){Ne(this.b,a)};n.Od=function(a){Ne(this.b,a)};n.sd=function(a){Ne(this.b,a)};function Le(a,b,c){T.call(this,a);this.b=b;a=c?c:{};this.buttons=Oe(a);this.pressure=Pe(a,this.buttons);this.bubbles=\"bubbles\"in a?a.bubbles:!1;this.cancelable=\"cancelable\"in a?a.cancelable:!1;this.view=\"view\"in a?a.view:null;this.detail=\"detail\"in a?a.detail:null;this.screenX=\"screenX\"in a?a.screenX:0;this.screenY=\"screenY\"in a?a.screenY:0;this.clientX=\"clientX\"in a?a.clientX:0;this.clientY=\"clientY\"in a?a.clientY:0;this.button=\"button\"in a?a.button:0;this.relatedTarget=\"relatedTarget\"in a?a.relatedTarget:\r\nnull;this.pointerId=\"pointerId\"in a?a.pointerId:0;this.width=\"width\"in a?a.width:0;this.height=\"height\"in a?a.height:0;this.pointerType=\"pointerType\"in a?a.pointerType:\"\";this.isPrimary=\"isPrimary\"in a?a.isPrimary:!1;b.preventDefault&&(this.preventDefault=function(){b.preventDefault()})}B(Le,T);function Oe(a){if(a.buttons||Qe)a=a.buttons;else switch(a.which){case 1:a=1;break;case 2:a=4;break;case 3:a=2;break;default:a=0}return a}function Pe(a,b){var c=0;a.pressure?c=a.pressure:c=b?.5:0;return c}\r\nvar Qe=!1;try{Qe=1===(new MouseEvent(\"click\",{buttons:1})).buttons}catch(a){};function Re(a,b){xe.call(this,a,{touchstart:this.Ce,touchmove:this.Be,touchend:this.Ae,touchcancel:this.ze});this.a=a.a;this.l=b;this.c=void 0;this.h=0;this.f=void 0}B(Re,xe);n=Re.prototype;n.Uc=function(){this.h=0;this.f=void 0};\r\nfunction Se(a,b,c){b=Be(b,c);b.pointerId=c.identifier+2;b.bubbles=!0;b.cancelable=!0;b.detail=a.h;b.button=0;b.buttons=1;b.width=c.webkitRadiusX||c.radiusX||0;b.height=c.webkitRadiusY||c.radiusY||0;b.pressure=c.webkitForce||c.force||.5;b.isPrimary=a.c===c.identifier;b.pointerType=\"touch\";b.clientX=c.clientX;b.clientY=c.clientY;b.screenX=c.screenX;b.screenY=c.screenY;return b}\r\nfunction Te(a,b,c){function d(){b.preventDefault()}var e=Array.prototype.slice.call(b.changedTouches),f=e.length,g,h;for(g=0;g<f;++g)h=Se(a,b,e[g]),h.preventDefault=d,c.call(a,b,h)}\r\nn.Ce=function(a){var b=a.touches,c=Object.keys(this.a),d=c.length;if(d>=b.length){var e=[],f,g,h;for(f=0;f<d;++f){g=c[f];h=this.a[g];var k;if(!(k=1==g))a:{k=b.length;for(var l,m=0;m<k;m++)if(l=b[m],l.identifier===g-2){k=!0;break a}k=!1}k||e.push(h.out)}for(f=0;f<e.length;++f)this.Ib(a,e[f])}b=a.changedTouches[0];c=Object.keys(this.a).length;if(0===c||1===c&&(1).toString()in this.a)this.c=b.identifier,b=K,void 0!==this.f&&b.clearTimeout(this.f);Ue(this,a);this.h++;Te(this,a,this.je)};\r\nn.je=function(a,b){this.a[b.pointerId]={target:b.target,out:b,Rc:b.target};var c=this.b;b.bubbles=!0;Ce(c,Ve,b,a);c=this.b;b.bubbles=!1;Ce(c,We,b,a);Ce(this.b,Ee,b,a)};n.Be=function(a){a.preventDefault();Te(this,a,this.Ud)};n.Ud=function(a,b){var c=this.a[b.pointerId];if(c){var d=c.out,e=c.Rc;Ce(this.b,Fe,b,a);d&&e!==b.target&&(d.relatedTarget=b.target,b.relatedTarget=e,d.target=e,b.target?(Ie(this.b,d,a),He(this.b,b,a)):(b.target=e,b.relatedTarget=null,this.Ib(a,b)));c.out=b;c.Rc=b.target}};\r\nn.Ae=function(a){Ue(this,a);Te(this,a,this.De)};n.De=function(a,b){Ce(this.b,Ge,b,a);this.b.out(b,a);var c=this.b;b.bubbles=!1;Ce(c,Xe,b,a);delete this.a[b.pointerId];b.isPrimary&&(this.c=void 0,this.f=K.setTimeout(this.Uc.bind(this),200))};n.ze=function(a){Te(this,a,this.Ib)};n.Ib=function(a,b){Ce(this.b,De,b,a);this.b.out(b,a);var c=this.b;b.bubbles=!1;Ce(c,Xe,b,a);delete this.a[b.pointerId];b.isPrimary&&(this.c=void 0,this.f=K.setTimeout(this.Uc.bind(this),200))};\r\nfunction Ue(a,b){var c=a.l.c,d=b.changedTouches[0];if(a.c===d.identifier){var e=[d.clientX,d.clientY];c.push(e);K.setTimeout(function(){Qa(c,e)},2500)}};function Ye(a){Ga.call(this);this.g=a;this.a={};this.f={};this.b=[];se?Ze(this,new Me(this)):te?Ze(this,new Je(this)):(a=new ye(this),Ze(this,a),re&&Ze(this,new Re(this,a)));a=this.b.length;for(var b,c=0;c<a;c++)b=this.b[c],$e(this,Object.keys(b.g))}B(Ye,Ga);function Ze(a,b){var c=Object.keys(b.g);c&&(c.forEach(function(a){var c=b.g[a];c&&(this.f[a]=c.bind(b))},a),a.b.push(b))}Ye.prototype.c=function(a){var b=this.f[a.type];b&&b(a)};\r\nfunction $e(a,b){b.forEach(function(a){R(this.g,a,this.c,this)},a)}function af(a,b){b.forEach(function(a){ya(this.g,a,this.c,this)},a)}function Be(a,b){for(var c={},d,e=0,f=bf.length;e<f;e++)d=bf[e][0],c[d]=a[d]||b[d]||bf[e][1];return c}Ye.prototype.out=function(a,b){a.bubbles=!0;Ce(this,cf,a,b)};function Ie(a,b,c){a.out(b,c);var d=b.target,e=b.relatedTarget;d&&e&&d.contains(e)||(b.bubbles=!1,Ce(a,Xe,b,c))}\r\nfunction He(a,b,c){b.bubbles=!0;Ce(a,Ve,b,c);var d=b.target,e=b.relatedTarget;d&&e&&d.contains(e)||(b.bubbles=!1,Ce(a,We,b,c))}function Ce(a,b,c,d){U(a,new Le(b,d,c))}function Ne(a,b){U(a,new Le(b.type,b,b))}Ye.prototype.R=function(){for(var a=this.b.length,b,c=0;c<a;c++)b=this.b[c],af(this,Object.keys(b.g));Ga.prototype.R.call(this)};\r\nvar Fe=\"pointermove\",Ee=\"pointerdown\",Ge=\"pointerup\",Ve=\"pointerover\",cf=\"pointerout\",We=\"pointerenter\",Xe=\"pointerleave\",De=\"pointercancel\",bf=[[\"bubbles\",!1],[\"cancelable\",!1],[\"view\",null],[\"detail\",null],[\"screenX\",0],[\"screenY\",0],[\"clientX\",0],[\"clientY\",0],[\"ctrlKey\",!1],[\"altKey\",!1],[\"shiftKey\",!1],[\"metaKey\",!1],[\"button\",0],[\"relatedTarget\",null],[\"buttons\",0],[\"pointerId\",0],[\"width\",0],[\"height\",0],[\"pressure\",0],[\"tiltX\",0],[\"tiltY\",0],[\"pointerType\",\"\"],[\"hwTimestamp\",0],[\"isPrimary\",\r\n!1],[\"type\",\"\"],[\"target\",null],[\"currentTarget\",null],[\"which\",0]];function df(a,b,c,d,e){Td.call(this,a,b,e);this.originalEvent=c;this.pixel=b.uc(c);this.coordinate=b.Ba(this.pixel);this.dragging=void 0!==d?d:!1}B(df,Td);df.prototype.preventDefault=function(){Td.prototype.preventDefault.call(this);this.originalEvent.preventDefault()};df.prototype.stopPropagation=function(){Td.prototype.stopPropagation.call(this);this.originalEvent.stopPropagation()};function ef(a,b,c,d,e){df.call(this,a,b,c.b,d,e);this.b=c}B(ef,df);\r\nfunction ff(a){Ga.call(this);this.c=a;this.h=0;this.l=!1;this.f=[];this.a=null;a=this.c.a;this.v=0;this.s={};this.g=new Ye(a);this.b=null;this.i=R(this.g,Ee,this.Cd,this);this.j=R(this.g,Fe,this.re,this)}B(ff,Ga);function gf(a,b){var c;c=new ef(hf,a.c,b);U(a,c);0!==a.h?(K.clearTimeout(a.h),a.h=0,c=new ef(jf,a.c,b),U(a,c)):a.h=K.setTimeout(function(){this.h=0;var a=new ef(kf,this.c,b);U(this,a)}.bind(a),250)}\r\nfunction lf(a,b){b.type==mf||b.type==nf?delete a.s[b.pointerId]:b.type==of&&(a.s[b.pointerId]=!0);a.v=Object.keys(a.s).length}n=ff.prototype;n.xc=function(a){lf(this,a);var b=new ef(mf,this.c,a);U(this,b);!this.l&&0===a.button&&gf(this,this.a);0===this.v&&(this.f.forEach(M),this.f.length=0,this.l=!1,this.a=null,Da(this.b),this.b=null)};\r\nn.Cd=function(a){lf(this,a);var b=new ef(of,this.c,a);U(this,b);this.a=a;0===this.f.length&&(this.b=new Ye(document),this.f.push(R(this.b,pf,this.ee,this),R(this.b,mf,this.xc,this),R(this.g,nf,this.xc,this)))};n.ee=function(a){if(a.clientX!=this.a.clientX||a.clientY!=this.a.clientY){this.l=!0;var b=new ef(qf,this.c,a,this.l);U(this,b)}a.preventDefault()};n.re=function(a){U(this,new ef(a.type,this.c,a,!(!this.a||a.clientX==this.a.clientX&&a.clientY==this.a.clientY)))};\r\nn.R=function(){this.j&&(M(this.j),this.j=null);this.i&&(M(this.i),this.i=null);this.f.forEach(M);this.f.length=0;this.b&&(Da(this.b),this.b=null);this.g&&(Da(this.g),this.g=null);Ga.prototype.R.call(this)};var kf=\"singleclick\",hf=\"click\",jf=\"dblclick\",qf=\"pointerdrag\",pf=\"pointermove\",of=\"pointerdown\",mf=\"pointerup\",nf=\"pointercancel\",rf={Pe:kf,Ee:hf,Fe:jf,Ie:qf,Le:pf,He:of,Oe:mf,Ne:\"pointerover\",Me:\"pointerout\",Je:\"pointerenter\",Ke:\"pointerleave\",Ge:nf};function sf(a){V.call(this);var b=pa({},a);b.opacity=void 0!==a.opacity?a.opacity:1;b.visible=void 0!==a.visible?a.visible:!0;b.zIndex=void 0!==a.zIndex?a.zIndex:0;b.maxResolution=void 0!==a.maxResolution?a.maxResolution:Infinity;b.minResolution=void 0!==a.minResolution?a.minResolution:0;this.l(b)}B(sf,V);\r\nfunction tf(a){var b=a.Xb(),c=a.Sb(),d=a.gb(),e=a.G(),f=a.Yb(),g=a.get(\"maxResolution\"),h=a.get(\"minResolution\");return{layer:a,opacity:ia(b,0,1),ac:c,visible:d,hb:!0,extent:e,zIndex:f,maxResolution:g,minResolution:Math.max(h,0)}}n=sf.prototype;n.G=function(){return this.get(\"extent\")};n.Xb=function(){return this.get(\"opacity\")};n.gb=function(){return this.get(\"visible\")};n.Yb=function(){return this.get(\"zIndex\")};n.Bc=function(a){this.set(\"opacity\",a)};n.Cc=function(a){this.set(\"visible\",a)};\r\nn.Dc=function(a){this.set(\"zIndex\",a)};function uf(a,b,c,d,e){T.call(this,a);this.vectorContext=b;this.frameState=c;this.context=d;this.glContext=e}B(uf,T);function vf(a){V.call(this);this.N=Hb(a.projection);this.h=wf(a.attributions);this.D=a.logo;this.P=void 0!==a.state?a.state:\"ready\";this.i=void 0!==a.wrapX?a.wrapX:!1}B(vf,V);function wf(a){if(\"string\"===typeof a)return[new bd({html:a})];if(a instanceof bd)return[a];if(Array.isArray(a)){for(var b=a.length,c=Array(b),d=0;d<b;d++){var e=a[d];c[d]=\"string\"===typeof e?new bd({html:e}):e}return c}return null}vf.prototype.fa=I;vf.prototype.ia=function(){return this.N};vf.prototype.T=function(){return this.P};\r\nvf.prototype.Ja=function(){this.w()};function xf(a){var b=pa({},a);delete b.source;sf.call(this,b);this.h=this.f=this.c=null;a.map&&this.setMap(a.map);R(this,La(\"source\"),this.Hd,this);this.$b(a.source?a.source:null)}B(xf,sf);function yf(a,b){return a.visible&&b>=a.minResolution&&b<a.maxResolution}n=xf.prototype;n.Pb=function(a){a=a?a:[];a.push(tf(this));return a};n.da=function(){return this.get(\"source\")||null};n.Sb=function(){var a=this.da();return a?a.T():\"undefined\"};n.fe=function(){this.w()};\r\nn.Hd=function(){this.h&&(M(this.h),this.h=null);var a=this.da();a&&(this.h=R(a,\"change\",this.fe,this));this.w()};n.setMap=function(a){this.c&&(M(this.c),this.c=null);a||this.w();this.f&&(M(this.f),this.f=null);a&&(this.c=R(a,\"precompose\",function(a){var c=tf(this);c.hb=!1;c.zIndex=Infinity;a.frameState.layerStatesArray.push(c);a.frameState.layerStates[J(this)]=c},this),this.f=R(this,\"change\",a.render,a),this.w())};n.$b=function(a){this.set(\"source\",a)};function zf(){this.b={};this.a=0}zf.prototype.clear=function(){this.b={};this.a=0};zf.prototype.get=function(a,b,c){a=b+\":\"+a+\":\"+(c?nd(c):\"null\");return a in this.b?this.b[a]:null};zf.prototype.set=function(a,b,c,d){this.b[b+\":\"+a+\":\"+(c?nd(c):\"null\")]=d;++this.a};var Af=new zf;var Bf=Array(6);function Cf(){return[1,0,0,1,0,0]}function Df(a){return Ef(a,1,0,0,1,0,0)}function Ff(a,b){var c=a[0],d=a[1],e=a[2],f=a[3],g=a[4],h=a[5],k=b[0],l=b[1],m=b[2],p=b[3],q=b[4],u=b[5];a[0]=c*k+e*l;a[1]=d*k+f*l;a[2]=c*m+e*p;a[3]=d*m+f*p;a[4]=c*q+e*u+g;a[5]=d*q+f*u+h}function Ef(a,b,c,d,e,f,g){a[0]=b;a[1]=c;a[2]=d;a[3]=e;a[4]=f;a[5]=g;return a}function Gf(a,b){a[0]=b[0];a[1]=b[1];a[2]=b[2];a[3]=b[3];a[4]=b[4];a[5]=b[5];return a}\r\nfunction Hf(a,b){var c=b[0],d=b[1];b[0]=a[0]*c+a[2]*d+a[4];b[1]=a[1]*c+a[3]*d+a[5];return b}function If(a,b){var c=Math.cos(b),d=Math.sin(b);Ff(a,Ef(Bf,c,d,-d,c,0,0))}function Jf(a,b,c){Ff(a,Ef(Bf,b,0,0,c,0,0))}function Kf(a,b,c){Ff(a,Ef(Bf,1,0,0,1,b,c))}function Lf(a,b,c,d,e,f,g,h){var k=Math.sin(f);f=Math.cos(f);a[0]=d*f;a[1]=e*k;a[2]=-d*k;a[3]=e*f;a[4]=g*d*f-h*d*k+b;a[5]=g*e*k+h*e*f+c;return a}\r\nfunction Mf(a){var b=a[0]*a[3]-a[1]*a[2];L(0!==b,32);var c=a[0],d=a[1],e=a[2],f=a[3],g=a[4],h=a[5];a[0]=f/b;a[1]=-d/b;a[2]=-e/b;a[3]=c/b;a[4]=(e*h-f*g)/b;a[5]=-(c*h-d*g)/b};function Nf(a,b){this.g=b;this.c={};this.j={}}B(Nf,Aa);function Of(a){var b=a.viewState,c=a.coordinateToPixelTransform,d=a.pixelToCoordinateTransform;Lf(c,a.size[0]/2,a.size[1]/2,1/b.resolution,-1/b.resolution,-b.rotation,-b.center[0],-b.center[1]);Mf(Gf(d,c))}n=Nf.prototype;n.R=function(){for(var a in this.c)Da(this.c[a])};function Pf(){if(32<Af.a){var a=0,b,c;for(b in Af.b)c=Af.b[b],0!==(a++&3)||Ha(c)||(delete Af.b[b],--Af.a)}}\r\nn.fa=function(a,b,c,d,e,f){function g(a,e){var f=J(a).toString(),g=b.layerStates[J(e)].hb;if(!(f in b.skippedFeatureUids)||g)return c.call(d,a,g?e:null)}var h,k=b.viewState,l=k.resolution,m=k.projection,k=a;if(m.b){var m=m.G(),p=qb(m),q=a[0];if(q<m[0]||q>m[2])k=[q+p*Math.ceil((m[0]-q)/p),a[1]]}m=b.layerStatesArray;for(p=m.length-1;0<=p;--p){var u=m[p],q=u.layer;if(yf(u,l)&&e.call(f,q)&&(u=Qf(this,q),q.da()&&(h=u.fa(q.da().i?k:a,b,g,d)),h))return h}};\r\nn.Fc=function(a,b,c,d){return void 0!==this.fa(a,b,yb,this,c,d)};function Qf(a,b){var c=J(b).toString();if(c in a.c)return a.c[c];var d=a.Mb(b);a.c[c]=d;a.j[c]=R(d,\"change\",a.wd,a);return d}n.wd=function(){this.g.render()};n.vb=I;n.ue=function(a,b){for(var c in this.c)if(!(b&&c in b.layerStates)){var d=c,e=this.c[d];delete this.c[d];M(this.j[d]);delete this.j[d];Da(e)}};function Rf(a,b){for(var c in a.c)if(!(c in b.layerStates)){b.postRenderFunctions.push(a.ue.bind(a));break}}\r\nfunction Ta(a,b){return a.zIndex-b.zIndex};function Sf(a,b){Ga.call(this);this.V=a;this.state=b;this.b=null;this.key=\"\"}B(Sf,Ga);function Tf(a){U(a,\"change\")}Sf.prototype.getKey=function(){return this.key+\"/\"+this.V};Sf.prototype.T=function(){return this.state};function Uf(a,b){this.j=a;this.f=b;this.b=[];this.c=[];this.a={}}Uf.prototype.clear=function(){this.b.length=0;this.c.length=0;qa(this.a)};function Vf(a){var b=a.b,c=a.c,d=b[0];1==b.length?(b.length=0,c.length=0):(b[0]=b.pop(),c[0]=c.pop(),Wf(a,0));b=a.f(d);delete a.a[b];return d}Uf.prototype.g=function(a){L(!(this.f(a)in this.a),31);var b=this.j(a);return Infinity!=b?(this.b.push(a),this.c.push(b),this.a[this.f(a)]=!0,Xf(this,0,this.b.length-1),!0):!1};\r\nfunction Wf(a,b){for(var c=a.b,d=a.c,e=c.length,f=c[b],g=d[b],h=b;b<e>>1;){var k=2*b+1,l=2*b+2,k=l<e&&d[l]<d[k]?l:k;c[b]=c[k];d[b]=d[k];b=k}c[b]=f;d[b]=g;Xf(a,h,b)}function Xf(a,b,c){var d=a.b;a=a.c;for(var e=d[c],f=a[c];c>b;){var g=c-1>>1;if(a[g]>f)d[c]=d[g],a[c]=a[g],c=g;else break}d[c]=e;a[c]=f}function Yf(a){var b=a.j,c=a.b,d=a.c,e=0,f=c.length,g,h,k;for(h=0;h<f;++h)g=c[h],k=b(g),Infinity==k?delete a.a[a.f(g)]:(d[e]=k,c[e++]=g);c.length=e;d.length=e;for(b=(a.b.length>>1)-1;0<=b;b--)Wf(a,b)};function Zf(a,b){Uf.call(this,function(b){return a.apply(null,b)},function(a){return a[0].getKey()});this.C=b;this.l=0;this.h={}}B(Zf,Uf);Zf.prototype.g=function(a){var b=Uf.prototype.g.call(this,a);b&&R(a[0],\"change\",this.i,this);return b};Zf.prototype.i=function(a){a=a.target;var b=a.T();if(2===b||3===b||4===b||5===b)ya(a,\"change\",this.i,this),a=a.getKey(),a in this.h&&(delete this.h[a],--this.l),this.C()};function $f(){this.b=[];this.a=this.c=0}function ag(a,b){var c=a.a,d=.05-c,e=Math.log(.05/a.a)/-.005;return Dc({source:b,duration:e,easing:function(a){return c*(Math.exp(-.005*a*e)-1)/d}})};function bg(a){V.call(this);this.aa=null;this.set(\"active\",!0);this.handleEvent=a.handleEvent}B(bg,V);bg.prototype.setMap=function(a){this.aa=a};function cg(a,b,c,d,e){if(void 0!==c){var f=b.get(xc),g=b.qa();void 0!==f&&g&&e&&0<e&&(a.oa(Ec({rotation:f,duration:e,easing:Ac})),d&&a.oa(Dc({source:g,duration:e,easing:Ac})));b.rotate(c,d)}}function dg(a,b,c,d,e){var f=b.O();c=b.constrainResolution(f,c,0);eg(a,b,c,d,e)}\r\nfunction eg(a,b,c,d,e){if(c){var f=b.O(),g=b.qa();void 0!==f&&g&&c!==f&&e&&0<e&&(a.oa(Fc({resolution:f,duration:e,easing:Ac})),d&&a.oa(Dc({source:g,duration:e,easing:Ac})));if(d){var h;a=b.qa();e=b.O();void 0!==a&&void 0!==e&&(h=[d[0]-c*(d[0]-a[0])/e,d[1]-c*(d[1]-a[1])/e]);b.xa(h)}b.set(wc,c)}};function fg(a){a=a?a:{};this.a=a.delta?a.delta:1;bg.call(this,{handleEvent:gg});this.c=void 0!==a.duration?a.duration:250}B(fg,bg);function gg(a){var b=!1,c=a.originalEvent;if(a.type==jf){var b=a.map,d=a.coordinate,c=c.shiftKey?-this.a:this.a,e=b.U();dg(b,e,c,d,this.c);a.preventDefault();b=!0}return!b};function hg(a){a=a.originalEvent;return a.altKey&&!(a.metaKey||a.ctrlKey)&&a.shiftKey}function ig(a){a=a.originalEvent;return 0==a.button&&!(Cd&&ne&&a.ctrlKey)}function jg(a){a=a.originalEvent;return!a.altKey&&!(a.metaKey||a.ctrlKey)&&!a.shiftKey}function kg(a){a=a.originalEvent;return!a.altKey&&!(a.metaKey||a.ctrlKey)&&a.shiftKey}function lg(a){a=a.originalEvent.target.tagName;return\"INPUT\"!==a&&\"SELECT\"!==a&&\"TEXTAREA\"!==a}function mg(a){L(a.b,56);return\"mouse\"==a.b.pointerType};function ng(a){a=a?a:{};bg.call(this,{handleEvent:a.handleEvent?a.handleEvent:og});this.Bb=a.handleDownEvent?a.handleDownEvent:zb;this.Cb=a.handleDragEvent?a.handleDragEvent:I;this.zb=a.handleMoveEvent?a.handleMoveEvent:I;this.Eb=a.handleUpEvent?a.handleUpEvent:zb;this.v=!1;this.N={};this.f=[]}B(ng,bg);function pg(a){for(var b=a.length,c=0,d=0,e=0;e<b;e++)c+=a[e].clientX,d+=a[e].clientY;return[c/b,d/b]}\r\nfunction og(a){if(!(a instanceof ef))return!0;var b=!1,c=a.type;if(c===of||c===qf||c===mf)c=a.b,a.type==mf?delete this.N[c.pointerId]:a.type==of?this.N[c.pointerId]=c:c.pointerId in this.N&&(this.N[c.pointerId]=c),this.f=ra(this.N);this.v&&(a.type==qf?this.Cb(a):a.type==mf&&(this.v=this.Eb(a)));a.type==of?(this.v=a=this.Bb(a),b=this.B(a)):a.type==pf&&this.zb(a);return!b}ng.prototype.B=function(a){return a};function qg(a){ng.call(this,{handleDownEvent:rg,handleDragEvent:sg,handleUpEvent:tg});a=a?a:{};this.a=a.kinetic;this.c=this.g=null;this.i=a.condition?a.condition:jg;this.h=!1}B(qg,ng);function sg(a){var b=pg(this.f);this.a&&this.a.b.push(b[0],b[1],Date.now());if(this.c){var c=this.c[0]-b[0],d=b[1]-this.c[1];a=a.map.U();var e=a.T(),d=c=[c,d],f=e.resolution;d[0]*=f;d[1]*=f;bb(c,e.rotation);ab(c,e.center);c=a.a.center(c);a.xa(c)}this.c=b}\r\nfunction tg(a){var b=a.map;a=b.U();if(0===this.f.length){var c;if(c=!this.h&&this.a)if(c=this.a,6>c.b.length)c=!1;else{var d=Date.now()-100,e=c.b.length-3;if(c.b[e+2]<d)c=!1;else{for(var f=e-3;0<f&&c.b[f+2]>d;)f-=3;var d=c.b[e+2]-c.b[f+2],g=c.b[e]-c.b[f],e=c.b[e+1]-c.b[f+1];c.c=Math.atan2(e,g);c.a=Math.sqrt(g*g+e*e)/d;c=.05<c.a}}c?(c=(.05-this.a.a)/-.005,e=this.a.c,f=a.qa(),this.g=ag(this.a,f),b.oa(this.g),f=ug(b,f),b=b.Ba([f[0]-c*Math.cos(e),f[1]-c*Math.sin(e)]),b=a.a.center(b),a.xa(b)):b.render();\r\nzc(a,-1);return!1}this.c=null;return!0}function rg(a){if(0<this.f.length&&this.i(a)){var b=a.map,c=b.U();this.c=null;this.v||zc(c,1);this.g&&Qa(b.D,this.g)&&(c.xa(a.frameState.viewState.center),this.g=null);this.a&&(a=this.a,a.b.length=0,a.c=0,a.a=0);this.h=1<this.f.length;return!0}return!1}qg.prototype.B=zb;function vg(a){a=a?a:{};ng.call(this,{handleDownEvent:wg,handleDragEvent:xg,handleUpEvent:yg});this.c=a.condition?a.condition:hg;this.a=void 0;this.g=void 0!==a.duration?a.duration:250}B(vg,ng);function xg(a){if(mg(a)){var b=a.map,c=b.Ta();a=a.pixel;c=Math.atan2(c[1]/2-a[1],a[0]-c[0]/2);if(void 0!==this.a){a=c-this.a;var d=b.U(),e=d.get(xc);cg(b,d,e-a)}this.a=c}}\r\nfunction yg(a){if(!mg(a))return!0;a=a.map;var b=a.U();zc(b,-1);var c=b.get(xc),d=this.g,c=b.constrainRotation(c,0);cg(a,b,c,void 0,d);return!1}function wg(a){return mg(a)&&ig(a)&&this.c(a)?(zc(a.map.U(),1),this.a=void 0,!0):!1}vg.prototype.B=zb;function zg(a){this.f=null;this.a=document.createElement(\"div\");this.a.style.position=\"absolute\";this.a.className=\"ol-box \"+a;this.c=this.g=this.b=null}B(zg,Aa);zg.prototype.R=function(){this.setMap(null)};function Ag(a){var b=a.g,c=a.c;a=a.a.style;a.left=Math.min(b[0],c[0])+\"px\";a.top=Math.min(b[1],c[1])+\"px\";a.width=Math.abs(c[0]-b[0])+\"px\";a.height=Math.abs(c[1]-b[1])+\"px\"}\r\nzg.prototype.setMap=function(a){if(this.b){this.b.s.removeChild(this.a);var b=this.a.style;b.left=b.top=b.width=b.height=\"inherit\"}(this.b=a)&&this.b.s.appendChild(this.a)};function Bg(a){var b=a.g,c=a.c,b=[b,[b[0],c[1]],c,[c[0],b[1]]].map(a.b.Ba,a.b);b[4]=b[0].slice();a.f?a.f.ea([b]):a.f=new qc([b])}zg.prototype.S=function(){return this.f};function Cg(a,b,c){T.call(this,a);this.coordinate=b;this.mapBrowserEvent=c}B(Cg,T);function Dg(a){ng.call(this,{handleDownEvent:Eg,handleDragEvent:Fg,handleUpEvent:Gg});a=a?a:{};this.a=new zg(a.className||\"ol-dragbox\");this.c=null;this.j=a.condition?a.condition:yb;this.i=a.boxEndCondition?a.boxEndCondition:Hg}B(Dg,ng);function Hg(a,b,c){a=c[0]-b[0];b=c[1]-b[1];return 64<=a*a+b*b}\r\nfunction Fg(a){if(mg(a)){var b=this.a,c=a.pixel;b.g=this.c;b.c=c;Bg(b);Ag(b);U(this,new Cg(\"boxdrag\",a.coordinate,a))}}Dg.prototype.S=function(){return this.a.S()};Dg.prototype.h=I;function Gg(a){if(!mg(a))return!0;this.a.setMap(null);this.i(a,this.c,a.pixel)&&(this.h(a),U(this,new Cg(\"boxend\",a.coordinate,a)));return!1}\r\nfunction Eg(a){if(mg(a)&&ig(a)&&this.j(a)){this.c=a.pixel;this.a.setMap(a.map);var b=this.a,c=this.c;b.g=this.c;b.c=c;Bg(b);Ag(b);U(this,new Cg(\"boxstart\",a.coordinate,a));return!0}return!1};function Ig(a){a=a?a:{};var b=a.condition?a.condition:kg;this.g=void 0!==a.duration?a.duration:200;this.s=void 0!==a.out?a.out:!1;Dg.call(this,{condition:b,className:a.className||\"ol-dragzoom\"})}B(Ig,Dg);\r\nIg.prototype.h=function(){var a=this.aa,b=a.U(),c=a.Ta(),d=this.S().G();if(this.s){var e=b.lc(c),d=[ug(a,sb(d)),ug(a,[d[2],d[3]])],f=jb(void 0),g,h;g=0;for(h=d.length;g<h;++g)eb(f,d[g]);f=1/yc(f,c);d=(e[2]-e[0])/2*(f-1);f=(e[3]-e[1])/2*(f-1);e[0]-=d;e[2]+=d;e[1]-=f;e[3]+=f;d=e}c=b.constrainResolution(yc(d,c));e=b.O();f=b.qa();a.oa(Fc({resolution:e,duration:this.g,easing:Ac}));a.oa(Dc({source:f,duration:this.g,easing:Ac}));b.xa(tb(d));b.set(wc,c)};function Jg(a){bg.call(this,{handleEvent:Kg});a=a||{};this.a=function(a){return jg(a)&&lg(a)};this.c=void 0!==a.condition?a.condition:this.a;this.f=void 0!==a.duration?a.duration:100;this.g=void 0!==a.pixelDelta?a.pixelDelta:128}B(Jg,bg);\r\nfunction Kg(a){var b=!1;if(\"keydown\"==a.type){var c=a.originalEvent.keyCode;if(this.c(a)&&(40==c||37==c||39==c||38==c)){var d=a.map,b=d.U(),e=b.O()*this.g,f=0,g=0;40==c?g=-e:37==c?f=-e:39==c?f=e:g=e;c=[f,g];bb(c,b.get(xc));e=this.f;if(f=b.qa())e&&0<e&&d.oa(Dc({source:f,duration:e,easing:Cc})),d=b.a.center([f[0]+c[0],f[1]+c[1]]),b.xa(d);a.preventDefault();b=!0}}return!b};function Lg(a){bg.call(this,{handleEvent:Mg});a=a?a:{};this.c=a.condition?a.condition:lg;this.a=a.delta?a.delta:1;this.f=void 0!==a.duration?a.duration:100}B(Lg,bg);function Mg(a){var b=!1;if(\"keydown\"==a.type||\"keypress\"==a.type){var c=a.originalEvent.charCode;if(this.c(a)&&(43==c||45==c)){var b=a.map,c=43==c?this.a:-this.a,d=b.U();dg(b,d,c,void 0,this.f);a.preventDefault();b=!0}}return!b};function Ng(a){bg.call(this,{handleEvent:Og});a=a||{};this.a=0;this.i=void 0!==a.duration?a.duration:250;this.j=void 0!==a.useAnchor?a.useAnchor:!0;this.f=null;this.g=this.c=void 0}B(Ng,bg);\r\nfunction Og(a){var b=!1;if(\"wheel\"==a.type||\"mousewheel\"==a.type){var b=a.map,c=a.originalEvent;this.j&&(this.f=a.coordinate);var d;\"wheel\"==a.type?(d=c.deltaY,le&&c.deltaMode===K.WheelEvent.DOM_DELTA_PIXEL&&(d/=oe),c.deltaMode===K.WheelEvent.DOM_DELTA_LINE&&(d*=40)):\"mousewheel\"==a.type&&(d=-c.wheelDeltaY,me&&(d/=3));this.a+=d;void 0===this.c&&(this.c=Date.now());d=Math.max(80-(Date.now()-this.c),0);K.clearTimeout(this.g);this.g=K.setTimeout(this.h.bind(this,b),d);a.preventDefault();b=!0}return!b}\r\nNg.prototype.h=function(a){var b=ia(this.a,-1,1),c=a.U();dg(a,c,-b,this.f,this.i);this.a=0;this.f=null;this.g=this.c=void 0};function Pg(a){ng.call(this,{handleDownEvent:Qg,handleDragEvent:Rg,handleUpEvent:Sg});a=a||{};this.c=null;this.g=void 0;this.a=!1;this.h=0;this.j=void 0!==a.threshold?a.threshold:.3;this.i=void 0!==a.duration?a.duration:250}B(Pg,ng);\r\nfunction Rg(a){var b=0,c=this.f[0],d=this.f[1],c=Math.atan2(d.clientY-c.clientY,d.clientX-c.clientX);void 0!==this.g&&(b=c-this.g,this.h+=b,!this.a&&Math.abs(this.h)>this.j&&(this.a=!0));this.g=c;a=a.map;c=a.a.getBoundingClientRect();d=pg(this.f);d[0]-=c.left;d[1]-=c.top;this.c=a.Ba(d);this.a&&(c=a.U(),d=c.get(xc),a.render(),cg(a,c,d+b,this.c))}\r\nfunction Sg(a){if(2>this.f.length){a=a.map;var b=a.U();zc(b,-1);if(this.a){var c=b.get(xc),d=this.c,e=this.i,c=b.constrainRotation(c,0);cg(a,b,c,d,e)}return!1}return!0}function Qg(a){return 2<=this.f.length?(a=a.map,this.c=null,this.g=void 0,this.a=!1,this.h=0,this.v||zc(a.U(),1),a.render(),!0):!1}Pg.prototype.B=zb;function Tg(a){ng.call(this,{handleDownEvent:Ug,handleDragEvent:Vg,handleUpEvent:Wg});a=a?a:{};this.c=null;this.h=void 0!==a.duration?a.duration:400;this.a=void 0;this.g=1}B(Tg,ng);function Vg(a){var b=1,c=this.f[0],d=this.f[1],e=c.clientX-d.clientX,c=c.clientY-d.clientY,e=Math.sqrt(e*e+c*c);void 0!==this.a&&(b=this.a/e);this.a=e;1!=b&&(this.g=b);a=a.map;var e=a.U(),c=e.O(),d=a.a.getBoundingClientRect(),f=pg(this.f);f[0]-=d.left;f[1]-=d.top;this.c=a.Ba(f);a.render();eg(a,e,c*b,this.c)}\r\nfunction Wg(a){if(2>this.f.length){a=a.map;var b=a.U();zc(b,-1);var c=b.O(),d=this.c,e=this.h,c=b.constrainResolution(c,0,this.g-1);eg(a,b,c,d,e);return!1}return!0}function Ug(a){return 2<=this.f.length?(a=a.map,this.c=null,this.a=void 0,this.g=1,this.v||zc(a.U(),1),a.render(),!0):!1}Tg.prototype.B=zb;function Xg(a){var b=a||{};a=pa({},b);delete a.layers;b=b.layers;sf.call(this,a);this.c=[];this.a={};R(this,La(\"layers\"),this.yd,this);b?Array.isArray(b)?b=new cd(b.slice()):L(b instanceof cd,43):b=new cd;this.set(\"layers\",b)}B(Xg,sf);n=Xg.prototype;n.rb=function(){this.gb()&&this.w()};\r\nn.yd=function(){this.c.forEach(M);this.c.length=0;var a=this.get(\"layers\");this.c.push(R(a,hd,this.xd,this),R(a,id,this.zd,this));for(var b in this.a)this.a[b].forEach(M);qa(this.a);var a=a.a,c,d;b=0;for(c=a.length;b<c;b++)d=a[b],this.a[J(d).toString()]=[R(d,\"propertychange\",this.rb,this),R(d,\"change\",this.rb,this)];this.w()};n.xd=function(a){a=a.element;var b=J(a).toString();this.a[b]=[R(a,\"propertychange\",this.rb,this),R(a,\"change\",this.rb,this)];this.w()};\r\nn.zd=function(a){a=J(a.element).toString();this.a[a].forEach(M);delete this.a[a];this.w()};n.Pb=function(a){var b=void 0!==a?a:[],c=b.length;ed(this.get(\"layers\"),function(a){a.Pb(b)});a=tf(this);var d,e;for(d=b.length;c<d;c++)e=b[c],e.opacity*=a.opacity,e.visible=e.visible&&a.visible,e.maxResolution=Math.min(e.maxResolution,a.maxResolution),e.minResolution=Math.max(e.minResolution,a.minResolution),void 0!==a.extent&&(e.extent=void 0!==e.extent?vb(e.extent,a.extent):a.extent);return b};n.Sb=function(){return\"ready\"};function Yg(a){Eb.call(this,{code:a,units:\"m\",extent:Zg,global:!0,worldExtent:$g})}B(Yg,Eb);Yg.prototype.getPointResolution=function(a,b){return a/ja(b[1]/6378137)};var ah=6378137*Math.PI,Zg=[-ah,-ah,ah,ah],$g=[-180,-85,180,85],bh=\"EPSG:3857 EPSG:102100 EPSG:102113 EPSG:900913 urn:ogc:def:crs:EPSG:6.18:3:3857 urn:ogc:def:crs:EPSG::3857 http://www.opengis.net/gml/srs/epsg.xml#3857\".split(\" \").map(function(a){return new Yg(a)});\r\nfunction ch(a,b,c){var d=a.length;c=1<c?c:2;void 0===b&&(2<c?b=a.slice():b=Array(d));for(var e=0;e<d;e+=c)b[e]=6378137*Math.PI*a[e]/180,b[e+1]=6378137*Math.log(Math.tan(Math.PI*(a[e+1]+90)/360));return b}function dh(a,b,c){var d=a.length;c=1<c?c:2;void 0===b&&(2<c?b=a.slice():b=Array(d));for(var e=0;e<d;e+=c)b[e]=180*a[e]/(6378137*Math.PI),b[e+1]=360*Math.atan(Math.exp(a[e+1]/6378137))/Math.PI-90;return b};var eh=new Ab(6378137);function fh(a,b){Eb.call(this,{code:a,units:\"degrees\",extent:gh,axisOrientation:b,global:!0,metersPerUnit:hh,worldExtent:gh})}B(fh,Eb);fh.prototype.getPointResolution=function(a){return a};\r\nvar gh=[-180,-90,180,90],hh=Math.PI*eh.radius/180,ih=[new fh(\"CRS:84\"),new fh(\"EPSG:4326\",\"neu\"),new fh(\"urn:ogc:def:crs:EPSG::4326\",\"neu\"),new fh(\"urn:ogc:def:crs:EPSG:6.6:4326\",\"neu\"),new fh(\"urn:ogc:def:crs:OGC:1.3:CRS84\"),new fh(\"urn:ogc:def:crs:OGC:2:84\"),new fh(\"http://www.opengis.net/gml/srs/epsg.xml#4326\",\"neu\"),new fh(\"urn:x-ogc:def:crs:EPSG:4326\",\"neu\")];function W(a){a=a?a:{};var b=pa({},a);delete b.preload;delete b.useInterimTilesOnError;xf.call(this,b);this.set(\"preload\",void 0!==a.preload?a.preload:0);this.set(\"useInterimTilesOnError\",void 0!==a.useInterimTilesOnError?a.useInterimTilesOnError:!0)}B(W,xf);function jh(a){return a.get(\"useInterimTilesOnError\")};var kh=[0,0,0,1],lh=[],mh=[0,0,0,1];function nh(a,b,c,d){0!==b&&(a.translate(c,d),a.rotate(b),a.translate(-c,-d))};function oh(a){this.C=a.opacity;this.K=a.rotateWithView;this.s=a.rotation;this.v=a.scale;this.B=a.snapToPixel};function ph(a){a=a||{};this.h=this.c=this.f=null;this.g=void 0!==a.fill?a.fill:null;this.b=void 0!==a.stroke?a.stroke:null;this.a=a.radius;this.j=[0,0];this.i=this.u=this.l=null;var b=a.atlasManager,c,d=null,e,f=0;this.b&&(e=nd(this.b.a),f=this.b.c,void 0===f&&(f=1),d=this.b.b,pe||(d=null));var g=2*(this.a+f)+1;e={strokeStyle:e,jb:f,size:g,lineDash:d};if(void 0===b)b=Md(g,g),this.c=b.canvas,c=g=this.c.width,this.Oc(e,b,0,0),this.g?this.h=this.c:(b=Md(e.size,e.size),this.h=b.canvas,this.Nc(e,b,0,0));\r\nelse{g=Math.round(g);(d=!this.g)&&(c=this.Nc.bind(this,e));var f=this.b?qh(this.b):\"-\",h=this.g?rh(this.g):\"-\";this.f&&f==this.f[1]&&h==this.f[2]&&this.a==this.f[3]||(this.f=[\"c\"+f+h+(void 0!==this.a?this.a.toString():\"-\"),f,h,this.a]);b=b.add(this.f[0],g,g,this.Oc.bind(this,e),c);this.c=b.image;this.j=[b.offsetX,b.offsetY];c=b.image.width;d?this.h=b.Nd:this.h=this.c}this.l=[g/2,g/2];this.u=[g,g];this.i=[c,c];oh.call(this,{opacity:1,rotateWithView:!1,rotation:0,scale:1,snapToPixel:void 0!==a.snapToPixel?\r\na.snapToPixel:!0})}B(ph,oh);n=ph.prototype;n.eb=function(){return this.l};n.ub=function(){return this.h};n.Z=function(){return this.c};n.ib=function(){return 2};n.Ob=function(){return this.i};n.pa=function(){return this.j};n.Ka=function(){return this.u};n.Vb=I;n.load=I;n.bc=I;\r\nn.Oc=function(a,b,c,d){b.setTransform(1,0,0,1,0,0);b.translate(c,d);b.beginPath();b.arc(a.size/2,a.size/2,this.a,0,2*Math.PI,!0);this.g&&(b.fillStyle=qd(this.g.b),b.fill());this.b&&(b.strokeStyle=a.strokeStyle,b.lineWidth=a.jb,a.lineDash&&b.setLineDash(a.lineDash),b.stroke());b.closePath()};\r\nn.Nc=function(a,b,c,d){b.setTransform(1,0,0,1,0,0);b.translate(c,d);b.beginPath();b.arc(a.size/2,a.size/2,this.a,0,2*Math.PI,!0);b.fillStyle=nd(kh);b.fill();this.b&&(b.strokeStyle=a.strokeStyle,b.lineWidth=a.jb,a.lineDash&&b.setLineDash(a.lineDash),b.stroke());b.closePath()};function sh(a){a=a||{};this.b=void 0!==a.color?a.color:null;this.a=void 0}function rh(a){void 0===a.a&&(a.a=a.b instanceof CanvasPattern||a.b instanceof CanvasGradient?J(a.b).toString():\"f\"+(a.b?nd(a.b):\"-\"));return a.a};function th(){this.a=-1};function uh(){this.a=64;this.b=Array(4);this.g=Array(this.a);this.b[0]=1732584193;this.b[1]=4023233417;this.b[2]=2562383102;this.b[3]=271733878;this.f=this.c=0}(function(){function a(){}a.prototype=th.prototype;uh.a=th.prototype;uh.prototype=new a;uh.prototype.constructor=uh;uh.b=function(a,c,d){for(var e=Array(arguments.length-2),f=2;f<arguments.length;f++)e[f-2]=arguments[f];return th.prototype[c].apply(a,e)}})();\r\nfunction vh(a,b,c){c||(c=0);var d=Array(16);if(\"string\"==typeof b)for(var e=0;16>e;++e)d[e]=b.charCodeAt(c++)|b.charCodeAt(c++)<<8|b.charCodeAt(c++)<<16|b.charCodeAt(c++)<<24;else for(e=0;16>e;++e)d[e]=b[c++]|b[c++]<<8|b[c++]<<16|b[c++]<<24;b=a.b[0];c=a.b[1];var e=a.b[2],f=a.b[3],g;g=b+(f^c&(e^f))+d[0]+3614090360&4294967295;b=c+(g<<7&4294967295|g>>>25);g=f+(e^b&(c^e))+d[1]+3905402710&4294967295;f=b+(g<<12&4294967295|g>>>20);g=e+(c^f&(b^c))+d[2]+606105819&4294967295;e=f+(g<<17&4294967295|g>>>15);g=\r\nc+(b^e&(f^b))+d[3]+3250441966&4294967295;c=e+(g<<22&4294967295|g>>>10);g=b+(f^c&(e^f))+d[4]+4118548399&4294967295;b=c+(g<<7&4294967295|g>>>25);g=f+(e^b&(c^e))+d[5]+1200080426&4294967295;f=b+(g<<12&4294967295|g>>>20);g=e+(c^f&(b^c))+d[6]+2821735955&4294967295;e=f+(g<<17&4294967295|g>>>15);g=c+(b^e&(f^b))+d[7]+4249261313&4294967295;c=e+(g<<22&4294967295|g>>>10);g=b+(f^c&(e^f))+d[8]+1770035416&4294967295;b=c+(g<<7&4294967295|g>>>25);g=f+(e^b&(c^e))+d[9]+2336552879&4294967295;f=b+(g<<12&4294967295|g>>>\r\n20);g=e+(c^f&(b^c))+d[10]+4294925233&4294967295;e=f+(g<<17&4294967295|g>>>15);g=c+(b^e&(f^b))+d[11]+2304563134&4294967295;c=e+(g<<22&4294967295|g>>>10);g=b+(f^c&(e^f))+d[12]+1804603682&4294967295;b=c+(g<<7&4294967295|g>>>25);g=f+(e^b&(c^e))+d[13]+4254626195&4294967295;f=b+(g<<12&4294967295|g>>>20);g=e+(c^f&(b^c))+d[14]+2792965006&4294967295;e=f+(g<<17&4294967295|g>>>15);g=c+(b^e&(f^b))+d[15]+1236535329&4294967295;c=e+(g<<22&4294967295|g>>>10);g=b+(e^f&(c^e))+d[1]+4129170786&4294967295;b=c+(g<<5&4294967295|\r\ng>>>27);g=f+(c^e&(b^c))+d[6]+3225465664&4294967295;f=b+(g<<9&4294967295|g>>>23);g=e+(b^c&(f^b))+d[11]+643717713&4294967295;e=f+(g<<14&4294967295|g>>>18);g=c+(f^b&(e^f))+d[0]+3921069994&4294967295;c=e+(g<<20&4294967295|g>>>12);g=b+(e^f&(c^e))+d[5]+3593408605&4294967295;b=c+(g<<5&4294967295|g>>>27);g=f+(c^e&(b^c))+d[10]+38016083&4294967295;f=b+(g<<9&4294967295|g>>>23);g=e+(b^c&(f^b))+d[15]+3634488961&4294967295;e=f+(g<<14&4294967295|g>>>18);g=c+(f^b&(e^f))+d[4]+3889429448&4294967295;c=e+(g<<20&4294967295|\r\ng>>>12);g=b+(e^f&(c^e))+d[9]+568446438&4294967295;b=c+(g<<5&4294967295|g>>>27);g=f+(c^e&(b^c))+d[14]+3275163606&4294967295;f=b+(g<<9&4294967295|g>>>23);g=e+(b^c&(f^b))+d[3]+4107603335&4294967295;e=f+(g<<14&4294967295|g>>>18);g=c+(f^b&(e^f))+d[8]+1163531501&4294967295;c=e+(g<<20&4294967295|g>>>12);g=b+(e^f&(c^e))+d[13]+2850285829&4294967295;b=c+(g<<5&4294967295|g>>>27);g=f+(c^e&(b^c))+d[2]+4243563512&4294967295;f=b+(g<<9&4294967295|g>>>23);g=e+(b^c&(f^b))+d[7]+1735328473&4294967295;e=f+(g<<14&4294967295|\r\ng>>>18);g=c+(f^b&(e^f))+d[12]+2368359562&4294967295;c=e+(g<<20&4294967295|g>>>12);g=b+(c^e^f)+d[5]+4294588738&4294967295;b=c+(g<<4&4294967295|g>>>28);g=f+(b^c^e)+d[8]+2272392833&4294967295;f=b+(g<<11&4294967295|g>>>21);g=e+(f^b^c)+d[11]+1839030562&4294967295;e=f+(g<<16&4294967295|g>>>16);g=c+(e^f^b)+d[14]+4259657740&4294967295;c=e+(g<<23&4294967295|g>>>9);g=b+(c^e^f)+d[1]+2763975236&4294967295;b=c+(g<<4&4294967295|g>>>28);g=f+(b^c^e)+d[4]+1272893353&4294967295;f=b+(g<<11&4294967295|g>>>21);g=e+(f^\r\nb^c)+d[7]+4139469664&4294967295;e=f+(g<<16&4294967295|g>>>16);g=c+(e^f^b)+d[10]+3200236656&4294967295;c=e+(g<<23&4294967295|g>>>9);g=b+(c^e^f)+d[13]+681279174&4294967295;b=c+(g<<4&4294967295|g>>>28);g=f+(b^c^e)+d[0]+3936430074&4294967295;f=b+(g<<11&4294967295|g>>>21);g=e+(f^b^c)+d[3]+3572445317&4294967295;e=f+(g<<16&4294967295|g>>>16);g=c+(e^f^b)+d[6]+76029189&4294967295;c=e+(g<<23&4294967295|g>>>9);g=b+(c^e^f)+d[9]+3654602809&4294967295;b=c+(g<<4&4294967295|g>>>28);g=f+(b^c^e)+d[12]+3873151461&4294967295;\r\nf=b+(g<<11&4294967295|g>>>21);g=e+(f^b^c)+d[15]+530742520&4294967295;e=f+(g<<16&4294967295|g>>>16);g=c+(e^f^b)+d[2]+3299628645&4294967295;c=e+(g<<23&4294967295|g>>>9);g=b+(e^(c|~f))+d[0]+4096336452&4294967295;b=c+(g<<6&4294967295|g>>>26);g=f+(c^(b|~e))+d[7]+1126891415&4294967295;f=b+(g<<10&4294967295|g>>>22);g=e+(b^(f|~c))+d[14]+2878612391&4294967295;e=f+(g<<15&4294967295|g>>>17);g=c+(f^(e|~b))+d[5]+4237533241&4294967295;c=e+(g<<21&4294967295|g>>>11);g=b+(e^(c|~f))+d[12]+1700485571&4294967295;b=c+\r\n(g<<6&4294967295|g>>>26);g=f+(c^(b|~e))+d[3]+2399980690&4294967295;f=b+(g<<10&4294967295|g>>>22);g=e+(b^(f|~c))+d[10]+4293915773&4294967295;e=f+(g<<15&4294967295|g>>>17);g=c+(f^(e|~b))+d[1]+2240044497&4294967295;c=e+(g<<21&4294967295|g>>>11);g=b+(e^(c|~f))+d[8]+1873313359&4294967295;b=c+(g<<6&4294967295|g>>>26);g=f+(c^(b|~e))+d[15]+4264355552&4294967295;f=b+(g<<10&4294967295|g>>>22);g=e+(b^(f|~c))+d[6]+2734768916&4294967295;e=f+(g<<15&4294967295|g>>>17);g=c+(f^(e|~b))+d[13]+1309151649&4294967295;\r\nc=e+(g<<21&4294967295|g>>>11);g=b+(e^(c|~f))+d[4]+4149444226&4294967295;b=c+(g<<6&4294967295|g>>>26);g=f+(c^(b|~e))+d[11]+3174756917&4294967295;f=b+(g<<10&4294967295|g>>>22);g=e+(b^(f|~c))+d[2]+718787259&4294967295;e=f+(g<<15&4294967295|g>>>17);g=c+(f^(e|~b))+d[9]+3951481745&4294967295;a.b[0]=a.b[0]+b&4294967295;a.b[1]=a.b[1]+(e+(g<<21&4294967295|g>>>11))&4294967295;a.b[2]=a.b[2]+e&4294967295;a.b[3]=a.b[3]+f&4294967295}\r\nfunction wh(a,b){var c;void 0===c&&(c=b.length);for(var d=c-a.a,e=a.g,f=a.c,g=0;g<c;){if(0==f)for(;g<=d;)vh(a,b,g),g+=a.a;if(\"string\"==typeof b)for(;g<c;){if(e[f++]=b.charCodeAt(g++),f==a.a){vh(a,e);f=0;break}}else for(;g<c;)if(e[f++]=b[g++],f==a.a){vh(a,e);f=0;break}}a.c=f;a.f+=c};function xh(a){a=a||{};this.a=void 0!==a.color?a.color:null;this.f=a.lineCap;this.b=void 0!==a.lineDash?a.lineDash:null;this.g=a.lineJoin;this.h=a.miterLimit;this.c=a.width;this.l=void 0}\r\nfunction qh(a){if(void 0===a.l){var b=\"s\"+(a.a?nd(a.a):\"-\")+\",\"+(void 0!==a.f?a.f.toString():\"-\")+\",\"+(a.b?a.b.toString():\"-\")+\",\"+(void 0!==a.g?a.g:\"-\")+\",\"+(void 0!==a.h?a.h.toString():\"-\")+\",\"+(void 0!==a.c?a.c.toString():\"-\"),c=new uh;wh(c,b);var d=Array((56>c.c?c.a:2*c.a)-c.c);d[0]=128;for(b=1;b<d.length-8;++b)d[b]=0;for(var e=8*c.f,b=d.length-8;b<d.length;++b)d[b]=e&255,e/=256;wh(c,d);d=Array(16);for(b=e=0;4>b;++b)for(var f=0;32>f;f+=8)d[e++]=c.b[b]>>>f&255;if(8192>=d.length)c=String.fromCharCode.apply(null,\r\nd);else for(c=\"\",b=0;b<d.length;b+=8192)c+=String.fromCharCode.apply(null,td(d,b,b+8192));a.l=c}return a.l};function yh(a){a=a||{};this.h=null;this.c=zh;void 0!==a.geometry&&Ah(this,a.geometry);this.g=void 0!==a.fill?a.fill:null;this.l=void 0!==a.image?a.image:null;this.f=void 0!==a.stroke?a.stroke:null;this.a=void 0!==a.text?a.text:null;this.b=a.zIndex}yh.prototype.S=function(){return this.h};yh.prototype.Z=function(){return this.l};function Ah(a,b){\"function\"===typeof b?a.c=b:\"string\"===typeof b?a.c=function(a){return a.get(b)}:b?b&&(a.c=function(){return b}):a.c=zh;a.h=b}\r\nfunction Bh(a){if(\"function\"!==typeof a){var b;Array.isArray(a)?b=a:(L(a instanceof yh,41),b=[a]);a=function(){return b}}return a}var Ch=null;function Dh(){if(!Ch){var a=new sh({color:\"rgba(255,255,255,0.4)\"}),b=new xh({color:\"#3399CC\",width:1.25});Ch=[new yh({image:new ph({fill:a,stroke:b,radius:5}),fill:a,stroke:b})]}return Ch}\r\nfunction Eh(){var a={},b=[255,255,255,1],c=[0,153,255,1];a.Polygon=[new yh({fill:new sh({color:[255,255,255,.5]})})];a.MultiPolygon=a.Polygon;a.LineString=[new yh({stroke:new xh({color:b,width:5})}),new yh({stroke:new xh({color:c,width:3})})];a.MultiLineString=a.LineString;a.Circle=a.Polygon.concat(a.LineString);a.Point=[new yh({image:new ph({radius:6,fill:new sh({color:c}),stroke:new xh({color:b,width:1.5})}),zIndex:Infinity})];a.MultiPoint=a.Point;a.GeometryCollection=a.Polygon.concat(a.LineString,\r\na.Point);return a}function zh(a){return a.S()};function Y(a){a=a?a:{};var b=pa({},a);delete b.style;delete b.renderBuffer;delete b.updateWhileAnimating;delete b.updateWhileInteracting;xf.call(this,b);this.a=void 0!==a.renderBuffer?a.renderBuffer:100;this.s=null;this.g=void 0;this.v(a.style);this.i=void 0!==a.updateWhileAnimating?a.updateWhileAnimating:!1;this.j=void 0!==a.updateWhileInteracting?a.updateWhileInteracting:!1}B(Y,xf);Y.prototype.v=function(a){this.s=void 0!==a?a:Dh;this.g=null===a?void 0:Bh(this.s);this.w()};function Fh(){};function Gh(a,b,c,d,e){this.f=a;this.v=b;this.l=c;this.u=d;this.Ga=e;this.g=this.b=this.a=this.ha=this.P=this.N=null;this.aa=this.W=this.K=this.M=this.D=this.B=0;this.ba=!1;this.h=this.ra=0;this.ma=!1;this.Y=0;this.c=\"\";this.Ea=this.na=0;this.va=!1;this.j=this.wa=0;this.ca=this.C=this.i=null;this.s=[];this.Fa=Cf()}B(Gh,Fh);\r\nfunction Hh(a,b,c){if(a.g){b=Xb(b,0,c,2,a.u,a.s);c=a.f;var d=a.Fa,e=c.globalAlpha;1!=a.K&&(c.globalAlpha=e*a.K);var f=a.ra;a.ba&&(f+=a.Ga);var g,h;g=0;for(h=b.length;g<h;g+=2){var k=b[g]-a.B,l=b[g+1]-a.D;a.ma&&(k=Math.round(k),l=Math.round(l));if(0!==f||1!=a.h){var m=k+a.B,p=l+a.D;Lf(d,m,p,a.h,a.h,f,-m,-p);c.setTransform.apply(c,d)}c.drawImage(a.g,a.W,a.aa,a.Y,a.M,k,l,a.Y,a.M)}0===f&&1==a.h||c.setTransform(1,0,0,1,0,0);1!=a.K&&(c.globalAlpha=e)}}\r\nfunction Ih(a,b,c,d){var e=0;if(a.ca&&\"\"!==a.c){a.i&&Jh(a,a.i);a.C&&Kh(a,a.C);var f=a.ca,g=a.f,h=a.ha;h?(h.font!=f.font&&(h.font=g.font=f.font),h.textAlign!=f.textAlign&&(h.textAlign=g.textAlign=f.textAlign),h.textBaseline!=f.textBaseline&&(h.textBaseline=g.textBaseline=f.textBaseline)):(g.font=f.font,g.textAlign=f.textAlign,g.textBaseline=f.textBaseline,a.ha={font:f.font,textAlign:f.textAlign,textBaseline:f.textBaseline});b=Xb(b,e,c,d,a.u,a.s);f=a.f;g=a.wa;for(a.va&&(g+=a.Ga);e<c;e+=d){var h=b[e]+\r\na.na,k=b[e+1]+a.Ea;if(0!==g||1!=a.j){var l=Lf(a.Fa,h,k,a.j,a.j,g,-h,-k);f.setTransform.apply(f,l)}a.C&&f.strokeText(a.c,h,k);a.i&&f.fillText(a.c,h,k)}0===g&&1==a.j||f.setTransform(1,0,0,1,0,0)}}function Lh(a,b,c,d,e,f){var g=a.f;a=Xb(b,c,d,e,a.u,a.s);g.moveTo(a[0],a[1]);b=a.length;f&&(b-=2);for(c=2;c<b;c+=2)g.lineTo(a[c],a[c+1]);f&&g.closePath();return d}function Mh(a,b,c,d,e){var f,g;f=0;for(g=d.length;f<g;++f)c=Lh(a,b,c,d[f],e,!0);return c}n=Gh.prototype;\r\nn.pc=function(a){if(wb(this.l,a.G())){if(this.a||this.b){this.a&&Jh(this,this.a);this.b&&Kh(this,this.b);var b;b=(b=a.o)?Xb(b,0,b.length,a.A,this.u,this.s):null;var c=b[2]-b[0],d=b[3]-b[1],c=Math.sqrt(c*c+d*d),d=this.f;d.beginPath();d.arc(b[0],b[1],c,0,2*Math.PI);this.a&&d.fill();this.b&&d.stroke()}\"\"!==this.c&&Ih(this,a.o.slice(0,a.A),2,2)}};n.cb=function(a){var b=a.o;a=a.A;this.g&&Hh(this,b,b.length);\"\"!==this.c&&Ih(this,b,b.length,a)};\r\nn.bb=function(a){var b=a.o;a=a.A;this.g&&Hh(this,b,b.length);\"\"!==this.c&&Ih(this,b,b.length,a)};n.qc=function(a){if(wb(this.l,a.G())){if(this.b){Kh(this,this.b);var b=this.f,c=a.o;b.beginPath();Lh(this,c,0,c.length,a.A,!1);b.stroke()}\"\"!==this.c&&(a=Nh(a),Ih(this,a,2,2))}};\r\nn.rc=function(a){var b=a.G();if(wb(this.l,b)){if(this.b){Kh(this,this.b);var b=this.f,c=a.o,d=0,e=a.ua,f=a.A;b.beginPath();var g,h;g=0;for(h=e.length;g<h;++g)d=Lh(this,c,d,e[g],f,!1);b.stroke()}\"\"!==this.c&&(a=Oh(a),Ih(this,a,a.length,2))}};n.tc=function(a){if(wb(this.l,a.G())){if(this.b||this.a){this.a&&Jh(this,this.a);this.b&&Kh(this,this.b);var b=this.f;b.beginPath();Mh(this,sc(a),0,a.ja,a.A);this.a&&b.fill();this.b&&b.stroke()}\"\"!==this.c&&(a=tc(a),Ih(this,a,2,2))}};\r\nn.sc=function(a){if(wb(this.l,a.G())){if(this.b||this.a){this.a&&Jh(this,this.a);this.b&&Kh(this,this.b);var b=this.f,c=Ph(a),d=0,e=a.a,f=a.A,g,h;g=0;for(h=e.length;g<h;++g){var k=e[g];b.beginPath();d=Mh(this,c,d,k,f);this.a&&b.fill();this.b&&b.stroke()}}\"\"!==this.c&&(a=Qh(a),Ih(this,a,a.length,2))}};function Jh(a,b){var c=a.f,d=a.N;d?d.fillStyle!=b.fillStyle&&(d.fillStyle=c.fillStyle=b.fillStyle):(c.fillStyle=b.fillStyle,a.N={fillStyle:b.fillStyle})}\r\nfunction Kh(a,b){var c=a.f,d=a.P;d?(d.lineCap!=b.lineCap&&(d.lineCap=c.lineCap=b.lineCap),pe&&!Ra(d.lineDash,b.lineDash)&&c.setLineDash(d.lineDash=b.lineDash),d.lineJoin!=b.lineJoin&&(d.lineJoin=c.lineJoin=b.lineJoin),d.lineWidth!=b.lineWidth&&(d.lineWidth=c.lineWidth=b.lineWidth),d.miterLimit!=b.miterLimit&&(d.miterLimit=c.miterLimit=b.miterLimit),d.strokeStyle!=b.strokeStyle&&(d.strokeStyle=c.strokeStyle=b.strokeStyle)):(c.lineCap=b.lineCap,pe&&c.setLineDash(b.lineDash),c.lineJoin=b.lineJoin,c.lineWidth=\r\nb.lineWidth,c.miterLimit=b.miterLimit,c.strokeStyle=b.strokeStyle,a.P={lineCap:b.lineCap,lineDash:b.lineDash,lineJoin:b.lineJoin,lineWidth:b.lineWidth,miterLimit:b.miterLimit,strokeStyle:b.strokeStyle})}\r\nn.La=function(a,b){if(a){var c=a.b;this.a={fillStyle:qd(c?c:kh)}}else this.a=null;if(b){var c=b.a,d=b.f,e=b.b,f=b.g,g=b.c,h=b.h;this.b={lineCap:void 0!==d?d:\"round\",lineDash:e?e:lh,lineJoin:void 0!==f?f:\"round\",lineWidth:this.v*(void 0!==g?g:1),miterLimit:void 0!==h?h:10,strokeStyle:nd(c?c:mh)}}else this.b=null};\r\nn.Ma=function(a){if(a){var b=a.eb(),c=a.Z(1),d=a.pa(),e=a.Ka();this.B=b[0];this.D=b[1];this.M=e[1];this.g=c;this.K=a.C;this.W=d[0];this.aa=d[1];this.ba=a.K;this.ra=a.s;this.h=a.v;this.ma=a.B;this.Y=e[0]}else this.g=null};\r\nn.Ca=function(a){if(a){var b=a.f;b?(b=b.b,this.i={fillStyle:qd(b?b:kh)}):this.i=null;var c=a.i;if(c){var b=c.a,d=c.f,e=c.b,f=c.g,g=c.c,c=c.h;this.C={lineCap:void 0!==d?d:\"round\",lineDash:e?e:lh,lineJoin:void 0!==f?f:\"round\",lineWidth:void 0!==g?g:1,miterLimit:void 0!==c?c:10,strokeStyle:nd(b?b:mh)}}else this.C=null;var b=a.b,d=a.a,e=a.c,f=a.g,g=a.h,c=a.l,h=a.j,k=a.C;a=a.K;this.ca={font:void 0!==b?b:\"10px sans-serif\",textAlign:void 0!==k?k:\"center\",textBaseline:void 0!==a?a:\"middle\"};this.c=void 0!==\r\nh?h:\"\";this.na=void 0!==d?this.v*d:0;this.Ea=void 0!==e?this.v*e:0;this.va=void 0!==f?f:!1;this.wa=void 0!==g?g:0;this.j=this.v*(void 0!==c?c:1)}else this.c=\"\"};function Rh(a){Ia.call(this);this.a=a}B(Rh,Ia);Rh.prototype.fa=I;Rh.prototype.Ec=zb;Rh.prototype.l=function(a,b,c){return function(d,e){return Sh(a,b,d,e,function(a){c[d]||(c[d]={});c[d][a.V.toString()]=a})}};function Th(a){var b=a.a;b.gb()&&\"ready\"==b.Sb()&&a.w()}function Uh(a,b){b.Mc()&&a.postRenderFunctions.push(function(a,b,e){b=J(a).toString();a.Oa(e.viewState.projection,e.usedTiles[b])}.bind(null,b))}function Vh(a,b){if(b){var c,d,e;d=0;for(e=b.length;d<e;++d)c=b[d],a[J(c).toString()]=c}}\r\nfunction Wh(a,b){var c=b.D;void 0!==c&&(\"string\"===typeof c?a.logos[c]=\"\":c&&(L(\"string\"==typeof c.href,44),L(\"string\"==typeof c.src,45),a.logos[c.src]=c.href))}function Xh(a,b,c,d){b=J(b).toString();c=c.toString();b in a?c in a[b]?(a=a[b][c],d.H<a.H&&(a.H=d.H),d.I>a.I&&(a.I=d.I),d.J<a.J&&(a.J=d.J),d.L>a.L&&(a.L=d.L)):a[b][c]=d:(a[b]={},a[b][c]=d)}function Yh(a,b,c){return[b*(Math.round(a[0]/b)+c[0]%2/2),b*(Math.round(a[1]/b)+c[1]%2/2)]}\r\nfunction Zh(a,b,c,d,e,f,g,h,k,l){var m=J(b).toString();m in a.wantedTiles||(a.wantedTiles[m]={});var p=a.wantedTiles[m];a=a.tileQueue;var q=c.minZoom,u,w,r,x,D,t;for(t=g;t>=q;--t)for(w=Rc(c,f,t,w),r=c.O(t),x=w.H;x<=w.I;++x)for(D=w.J;D<=w.L;++D)g-t<=h?(u=$h(b,t,x,D,d,e),0==u.T()&&(p[u.getKey()]=!0,u.getKey()in a.a||a.g([u,m,Vc(c,u.V),r])),void 0!==k&&k.call(l,u)):b.Vc(t,x,D,e)};function ai(a){Rh.call(this,a);this.M=Cf()}B(ai,Rh);function bi(a,b,c){var d=b.pixelRatio,e=b.size[0]*d,f=b.size[1]*d,g=b.viewState.rotation,h=xb(c),k=[c[2],c[3]],l=[c[2],c[1]];c=sb(c);Hf(b.coordinateToPixelTransform,h);Hf(b.coordinateToPixelTransform,k);Hf(b.coordinateToPixelTransform,l);Hf(b.coordinateToPixelTransform,c);a.save();nh(a,-g,e/2,f/2);a.beginPath();a.moveTo(h[0]*d,h[1]*d);a.lineTo(k[0]*d,k[1]*d);a.lineTo(l[0]*d,l[1]*d);a.lineTo(c[0]*d,c[1]*d);a.clip();nh(a,g,e/2,f/2)}\r\nai.prototype.g=function(a,b,c){ci(this,\"precompose\",c,a,void 0);var d=this.Z();if(d){var e=b.extent,f=void 0!==e;f&&bi(c,a,e);var e=this.N,g=c.globalAlpha;c.globalAlpha=b.opacity;c.drawImage(d,0,0,+d.width,+d.height,Math.round(e[4]),Math.round(e[5]),Math.round(d.width*e[0]),Math.round(d.height*e[3]));c.globalAlpha=g;f&&c.restore()}ci(this,\"postcompose\",c,a,void 0)};\r\nfunction ci(a,b,c,d,e){var f=a.a;if(Ha(f,b)){var g=d.size[0]*d.pixelRatio,h=d.size[1]*d.pixelRatio,k=d.viewState.rotation;nh(c,-k,g/2,h/2);a=void 0!==e?e:di(a,d,0);U(f,new uf(b,new Gh(c,d.pixelRatio,d.extent,a,d.viewState.rotation),d,c,null));nh(c,k,g/2,h/2)}}function di(a,b,c){var d=b.viewState,e=b.pixelRatio,f=e/d.resolution;return Lf(a.M,e*b.size[0]/2,e*b.size[1]/2,f,-f,-d.rotation,-d.center[0]+c,-d.center[1])};function ei(){};var fi=[\"Polygon\",\"LineString\",\"Image\",\"Text\"];function gi(a,b,c,d){this.ra=a;this.P=b;this.overlaps=d;this.g=null;this.h=0;this.resolution=c;this.ca=this.Y=null;this.a=[];this.coordinates=[];this.W=Cf();this.b=[];this.ha=[];this.aa=Cf();this.ba=Cf()}B(gi,Fh);\r\nfunction hi(a,b,c,d,e,f){var g=a.coordinates.length,h=a.Nb(),k=[b[c],b[c+1]],l=[NaN,NaN],m=!0,p,q,u;for(p=c+e;p<d;p+=e){l[0]=b[p];l[1]=b[p+1];u=h[1];var w=h[2],r=h[3],x=l[0],D=l[1],t=0;x<h[0]?t|=16:x>w&&(t|=4);D<u?t|=8:D>r&&(t|=2);0===t&&(t=1);u=t;u!==q?(m&&(a.coordinates[g++]=k[0],a.coordinates[g++]=k[1]),a.coordinates[g++]=l[0],a.coordinates[g++]=l[1],m=!1):1===u?(a.coordinates[g++]=l[0],a.coordinates[g++]=l[1],m=!1):m=!0;k[0]=l[0];k[1]=l[1];q=u}p===c+e&&(a.coordinates[g++]=k[0],a.coordinates[g++]=\r\nk[1]);f&&(a.coordinates[g++]=b[c],a.coordinates[g++]=b[c+1]);return g}function ii(a,b){a.Y=[0,b,0];a.a.push(a.Y);a.ca=[0,b,0];a.b.push(a.ca)}\r\nfunction ji(a,b,c,d,e,f,g,h,k){var l;Ra(d,a.W)?l=a.ha:(l=Xb(a.coordinates,0,a.coordinates.length,2,d,a.ha),Gf(a.W,d));d=!sa(f);var m=0,p=g.length,q,u,w=a.aa,r=a.ba,x,D,t,z,C=0,E=0;for(a=a.a!=g||a.overlaps?0:200;m<p;){var v=g[m],H,G,A,F;switch(v[0]){case 0:q=v[1];d&&f[J(q).toString()]||!q.S()?m=v[2]:void 0===k||wb(k,q.S().G())?++m:m=v[2]+1;break;case 1:C>a&&(b.fill(),C=0);E>a&&(b.stroke(),E=0);C||E||b.beginPath();++m;break;case 2:q=v[1];u=l[q];v=l[q+1];t=l[q+2]-u;q=l[q+3]-v;q=Math.sqrt(t*t+q*q);b.moveTo(u+\r\nq,v);b.arc(u,v,q,0,2*Math.PI,!0);++m;break;case 3:b.closePath();++m;break;case 4:q=v[1];u=v[2];H=v[3];G=v[4]*c;A=v[5]*c;var Q=v[6],N=v[7],O=v[8],S=v[9];F=v[10];t=v[11];z=v[12];var X=v[13],P=v[14];for(F&&(t+=e);q<u;q+=2){v=l[q]-G;F=l[q+1]-A;X&&(v=Math.round(v),F=Math.round(F));if(1!=z||0!==t){var Ba=v+G,Nb=F+A;Lf(w,Ba,Nb,z,z,t,-Ba,-Nb);b.transform.apply(b,w)}Ba=b.globalAlpha;1!=N&&(b.globalAlpha=Ba*N);var Nb=P+O>H.width?H.width-O:P,Ca=Q+S>H.height?H.height-S:Q;b.drawImage(H,O,S,Nb,Ca,v,F,Nb*c,Ca*c);\r\n1!=N&&(b.globalAlpha=Ba);if(1!=z||0!==t)Mf(Gf(r,w)),b.transform.apply(b,r)}++m;break;case 5:q=v[1];u=v[2];A=v[3];Q=v[4]*c;N=v[5]*c;t=v[6];z=v[7]*c;H=v[8];G=v[9];for((F=v[10])&&(t+=e);q<u;q+=2){v=l[q]+Q;F=l[q+1]+N;if(1!=z||0!==t)Lf(w,v,F,z,z,t,-v,-F),b.transform.apply(b,w);O=A.split(\"\\n\");S=O.length;1<S?(X=Math.round(1.5*b.measureText(\"M\").width),F-=(S-1)/2*X):X=0;for(P=0;P<S;P++)Ba=O[P],G&&b.strokeText(Ba,v,F),H&&b.fillText(Ba,v,F),F+=X;if(1!=z||0!==t)Mf(Gf(r,w)),b.transform.apply(b,r)}++m;break;\r\ncase 6:if(void 0!==h&&(q=v[1],q=h(q)))return q;++m;break;case 7:a?C++:b.fill();++m;break;case 8:q=v[1];u=v[2];v=l[q];F=l[q+1];t=v+.5|0;z=F+.5|0;if(t!==x||z!==D)b.moveTo(v,F),x=t,D=z;for(q+=2;q<u;q+=2)if(v=l[q],F=l[q+1],t=v+.5|0,z=F+.5|0,q==u-2||t!==x||z!==D)b.lineTo(v,F),x=t,D=z;++m;break;case 9:C&&(b.fill(),C=0);b.fillStyle=v[1];++m;break;case 10:x=void 0!==v[7]?v[7]:!0;D=v[2];E&&(b.stroke(),E=0);b.strokeStyle=v[1];b.lineWidth=x?D*c:D;b.lineCap=v[3];b.lineJoin=v[4];b.miterLimit=v[5];pe&&b.setLineDash(v[6]);\r\nD=x=NaN;++m;break;case 11:b.font=v[1];b.textAlign=v[2];b.textBaseline=v[3];++m;break;case 12:a?E++:b.stroke();++m;break;default:++m}}C&&b.fill();E&&b.stroke()}gi.prototype.f=function(a,b,c,d,e){ji(this,a,b,c,d,e,this.a,void 0,void 0)};function ki(a){var b=a.b;b.reverse();var c,d=b.length,e,f,g=-1;for(c=0;c<d;++c)if(e=b[c],f=e[0],6==f)g=c;else if(0==f){e[2]=c;e=a.b;for(f=c;g<f;){var h=e[g];e[g]=e[f];e[f]=h;++g;--f}g=-1}}\r\nfunction li(a,b){a.Y[2]=a.a.length;a.Y=null;a.ca[2]=a.b.length;a.ca=null;var c=[6,b];a.a.push(c);a.b.push(c)}gi.prototype.tb=I;gi.prototype.Nb=function(){return this.P};function mi(a,b,c,d){gi.call(this,a,b,c,d);this.j=this.N=null;this.M=this.D=this.B=this.u=this.v=this.s=this.K=this.C=this.i=this.l=this.c=void 0}B(mi,gi);\r\nmi.prototype.cb=function(a,b){if(this.j){ii(this,b);var c=a.o,d=this.coordinates.length,c=hi(this,c,0,c.length,a.A,!1);this.a.push([4,d,c,this.j,this.c,this.l,this.i,this.C,this.K,this.s,this.v,this.u,this.B,this.D,this.M]);this.b.push([4,d,c,this.N,this.c,this.l,this.i,this.C,this.K,this.s,this.v,this.u,this.B,this.D,this.M]);li(this,b)}};\r\nmi.prototype.bb=function(a,b){if(this.j){ii(this,b);var c=a.o,d=this.coordinates.length,c=hi(this,c,0,c.length,a.A,!1);this.a.push([4,d,c,this.j,this.c,this.l,this.i,this.C,this.K,this.s,this.v,this.u,this.B,this.D,this.M]);this.b.push([4,d,c,this.N,this.c,this.l,this.i,this.C,this.K,this.s,this.v,this.u,this.B,this.D,this.M]);li(this,b)}};mi.prototype.tb=function(){ki(this);this.l=this.c=void 0;this.j=this.N=null;this.M=this.D=this.u=this.v=this.s=this.K=this.C=this.B=this.i=void 0};\r\nmi.prototype.Ma=function(a){var b=a.eb(),c=a.Ka(),d=a.ub(1),e=a.Z(1),f=a.pa();this.c=b[0];this.l=b[1];this.N=d;this.j=e;this.i=c[1];this.C=a.C;this.K=f[0];this.s=f[1];this.v=a.K;this.u=a.s;this.B=a.v;this.D=a.B;this.M=c[0]};function ni(a,b,c,d){gi.call(this,a,b,c,d);this.c={ab:void 0,Wa:void 0,Xa:null,Ya:void 0,Za:void 0,$a:void 0,Ub:0,strokeStyle:void 0,lineCap:void 0,lineDash:null,lineJoin:void 0,lineWidth:void 0,miterLimit:void 0}}B(ni,gi);\r\nfunction oi(a,b,c,d,e){var f=a.coordinates.length;b=hi(a,b,c,d,e,!1);f=[8,f,b];a.a.push(f);a.b.push(f);return d}n=ni.prototype;n.Nb=function(){this.g||(this.g=gb(this.P),0<this.h&&fb(this.g,this.resolution*(this.h+1)/2,this.g));return this.g};\r\nfunction pi(a){var b=a.c,c=b.strokeStyle,d=b.lineCap,e=b.lineDash,f=b.lineJoin,g=b.lineWidth,h=b.miterLimit;b.ab==c&&b.Wa==d&&Ra(b.Xa,e)&&b.Ya==f&&b.Za==g&&b.$a==h||(b.Ub!=a.coordinates.length&&(a.a.push([12]),b.Ub=a.coordinates.length),a.a.push([10,c,g,d,f,h,e],[1]),b.ab=c,b.Wa=d,b.Xa=e,b.Ya=f,b.Za=g,b.$a=h)}\r\nn.qc=function(a,b){var c=this.c,d=c.lineWidth;void 0!==c.strokeStyle&&void 0!==d&&(pi(this),ii(this,b),this.b.push([10,c.strokeStyle,c.lineWidth,c.lineCap,c.lineJoin,c.miterLimit,c.lineDash],[1]),c=a.o,oi(this,c,0,c.length,a.A),this.b.push([12]),li(this,b))};\r\nn.rc=function(a,b){var c=this.c,d=c.lineWidth;if(void 0!==c.strokeStyle&&void 0!==d){pi(this);ii(this,b);this.b.push([10,c.strokeStyle,c.lineWidth,c.lineCap,c.lineJoin,c.miterLimit,c.lineDash],[1]);var c=a.ua,d=a.o,e=a.A,f=0,g,h;g=0;for(h=c.length;g<h;++g)f=oi(this,d,f,c[g],e);this.b.push([12]);li(this,b)}};n.tb=function(){this.c.Ub!=this.coordinates.length&&this.a.push([12]);ki(this);this.c=null};\r\nn.La=function(a,b){var c=b.a;this.c.strokeStyle=nd(c?c:mh);c=b.f;this.c.lineCap=void 0!==c?c:\"round\";c=b.b;this.c.lineDash=c?c:lh;c=b.g;this.c.lineJoin=void 0!==c?c:\"round\";c=b.c;this.c.lineWidth=void 0!==c?c:1;c=b.h;this.c.miterLimit=void 0!==c?c:10;this.c.lineWidth>this.h&&(this.h=this.c.lineWidth,this.g=null)};\r\nfunction qi(a,b,c,d){gi.call(this,a,b,c,d);this.c={oc:void 0,ab:void 0,Wa:void 0,Xa:null,Ya:void 0,Za:void 0,$a:void 0,fillStyle:void 0,strokeStyle:void 0,lineCap:void 0,lineDash:null,lineJoin:void 0,lineWidth:void 0,miterLimit:void 0}}B(qi,gi);\r\nfunction ri(a,b,c,d,e){var f=a.c,g=void 0!==f.fillStyle,f=void 0!=f.strokeStyle,h=d.length;if(!g&&!f)return d[h-1];var k=[1];a.a.push(k);a.b.push(k);for(k=0;k<h;++k){var l=d[k],m=a.coordinates.length;c=hi(a,b,c,l,e,!0);c=[8,m,c];a.a.push(c);a.b.push(c);f&&(c=[3],a.a.push(c),a.b.push(c));c=l}b=[7];a.b.push(b);g&&a.a.push(b);f&&(g=[12],a.a.push(g),a.b.push(g));return c}n=qi.prototype;\r\nn.pc=function(a,b){var c=this.c,d=c.strokeStyle;if(void 0!==c.fillStyle||void 0!==d){si(this);ii(this,b);this.b.push([9,nd(kh)]);void 0!==c.strokeStyle&&this.b.push([10,c.strokeStyle,c.lineWidth,c.lineCap,c.lineJoin,c.miterLimit,c.lineDash]);var e=a.o,d=this.coordinates.length;hi(this,e,0,e.length,a.A,!1);e=[1];d=[2,d];this.a.push(e,d);this.b.push(e,d);d=[7];this.b.push(d);void 0!==c.fillStyle&&this.a.push(d);void 0!==c.strokeStyle&&(c=[12],this.a.push(c),this.b.push(c));li(this,b)}};\r\nn.tc=function(a,b){var c=this.c,d=c.strokeStyle;if(void 0!==c.fillStyle||void 0!==d)si(this),ii(this,b),this.b.push([9,nd(kh)]),void 0!==c.strokeStyle&&this.b.push([10,c.strokeStyle,c.lineWidth,c.lineCap,c.lineJoin,c.miterLimit,c.lineDash]),c=a.ja,d=sc(a),ri(this,d,0,c,a.A),li(this,b)};\r\nn.sc=function(a,b){var c=this.c,d=c.strokeStyle;if(void 0!==c.fillStyle||void 0!==d){si(this);ii(this,b);this.b.push([9,nd(kh)]);void 0!==c.strokeStyle&&this.b.push([10,c.strokeStyle,c.lineWidth,c.lineCap,c.lineJoin,c.miterLimit,c.lineDash]);var c=a.a,d=Ph(a),e=a.A,f=0,g,h;g=0;for(h=c.length;g<h;++g)f=ri(this,d,f,c[g],e);li(this,b)}};n.tb=function(){ki(this);this.c=null;var a=this.ra;if(0!==a){var b=this.coordinates,c,d;c=0;for(d=b.length;c<d;++c)b[c]=a*Math.round(b[c]/a)}};\r\nn.Nb=function(){this.g||(this.g=gb(this.P),0<this.h&&fb(this.g,this.resolution*(this.h+1)/2,this.g));return this.g};\r\nn.La=function(a,b){var c=this.c;if(a){var d=a.b;c.fillStyle=qd(d?d:kh)}else c.fillStyle=void 0;b?(d=b.a,c.strokeStyle=nd(d?d:mh),d=b.f,c.lineCap=void 0!==d?d:\"round\",d=b.b,c.lineDash=d?d.slice():lh,d=b.g,c.lineJoin=void 0!==d?d:\"round\",d=b.c,c.lineWidth=void 0!==d?d:1,d=b.h,c.miterLimit=void 0!==d?d:10,c.lineWidth>this.h&&(this.h=c.lineWidth,this.g=null)):(c.strokeStyle=void 0,c.lineCap=void 0,c.lineDash=null,c.lineJoin=void 0,c.lineWidth=void 0,c.miterLimit=void 0)};\r\nfunction si(a){var b=a.c,c=b.fillStyle,d=b.strokeStyle,e=b.lineCap,f=b.lineDash,g=b.lineJoin,h=b.lineWidth,k=b.miterLimit;void 0!==c&&b.oc!=c&&(a.a.push([9,c]),b.oc=b.fillStyle);void 0===d||b.ab==d&&b.Wa==e&&b.Xa==f&&b.Ya==g&&b.Za==h&&b.$a==k||(a.a.push([10,d,h,e,g,k,f]),b.ab=d,b.Wa=e,b.Xa=f,b.Ya=g,b.Za=h,b.$a=k)}function ti(a,b,c,d){gi.call(this,a,b,c,d);this.M=this.D=this.B=null;this.j=\"\";this.K=this.C=0;this.s=void 0;this.u=this.v=0;this.i=this.l=this.c=null}B(ti,gi);\r\nfunction ui(a,b,c,d,e){if(\"\"!==a.j&&a.i&&(a.c||a.l)){if(a.c){var f=a.c,g=a.B;if(!g||g.fillStyle!=f.fillStyle){var h=[9,f.fillStyle];a.a.push(h);a.b.push(h);g?g.fillStyle=f.fillStyle:a.B={fillStyle:f.fillStyle}}}a.l&&(f=a.l,g=a.D,g&&g.lineCap==f.lineCap&&g.lineDash==f.lineDash&&g.lineJoin==f.lineJoin&&g.lineWidth==f.lineWidth&&g.miterLimit==f.miterLimit&&g.strokeStyle==f.strokeStyle||(h=[10,f.strokeStyle,f.lineWidth,f.lineCap,f.lineJoin,f.miterLimit,f.lineDash,!1],a.a.push(h),a.b.push(h),g?(g.lineCap=\r\nf.lineCap,g.lineDash=f.lineDash,g.lineJoin=f.lineJoin,g.lineWidth=f.lineWidth,g.miterLimit=f.miterLimit,g.strokeStyle=f.strokeStyle):a.D={lineCap:f.lineCap,lineDash:f.lineDash,lineJoin:f.lineJoin,lineWidth:f.lineWidth,miterLimit:f.miterLimit,strokeStyle:f.strokeStyle}));f=a.i;g=a.M;g&&g.font==f.font&&g.textAlign==f.textAlign&&g.textBaseline==f.textBaseline||(h=[11,f.font,f.textAlign,f.textBaseline],a.a.push(h),a.b.push(h),g?(g.font=f.font,g.textAlign=f.textAlign,g.textBaseline=f.textBaseline):a.M=\r\n{font:f.font,textAlign:f.textAlign,textBaseline:f.textBaseline});ii(a,e);f=a.coordinates.length;b=hi(a,b,0,c,d,!1);b=[5,f,b,a.j,a.C,a.K,a.v,a.u,!!a.c,!!a.l,a.s];a.a.push(b);a.b.push(b);li(a,e)}}\r\nti.prototype.Ca=function(a){if(a){var b=a.f;b?(b=b.b,b=qd(b?b:kh),this.c?this.c.fillStyle=b:this.c={fillStyle:b}):this.c=null;var c=a.i;if(c){var b=c.a,d=c.f,e=c.b,f=c.g,g=c.c,c=c.h,d=void 0!==d?d:\"round\",e=e?e.slice():lh,f=void 0!==f?f:\"round\",g=void 0!==g?g:1,c=void 0!==c?c:10,b=nd(b?b:mh);if(this.l){var h=this.l;h.lineCap=d;h.lineDash=e;h.lineJoin=f;h.lineWidth=g;h.miterLimit=c;h.strokeStyle=b}else this.l={lineCap:d,lineDash:e,lineJoin:f,lineWidth:g,miterLimit:c,strokeStyle:b}}else this.l=null;\r\nvar k=a.b,b=a.a,d=a.c,e=a.g,g=a.h,c=a.l,f=a.j,h=a.C,l=a.K;a=void 0!==k?k:\"10px sans-serif\";h=void 0!==h?h:\"center\";l=void 0!==l?l:\"middle\";this.i?(k=this.i,k.font=a,k.textAlign=h,k.textBaseline=l):this.i={font:a,textAlign:h,textBaseline:l};this.j=void 0!==f?f:\"\";this.C=void 0!==b?b:0;this.K=void 0!==d?d:0;this.s=void 0!==e?e:!1;this.v=void 0!==g?g:0;this.u=void 0!==c?c:1}else this.j=\"\"};function vi(a,b,c,d,e){this.K=a;this.g=b;this.j=d;this.C=c;this.h=e;this.a={};this.l=Md(1,1);this.i=Cf()}B(vi,ei);\r\nfunction wi(a){for(var b in a.a){var c=a.a[b],d;for(d in c)c[d].tb()}}vi.prototype.fa=function(a,b,c,d,e){var f=Lf(this.i,.5,.5,1/b,-1/b,-c,-a[0],-a[1]),g=this.l;g.clearRect(0,0,1,1);var h;void 0!==this.h&&(h=db(),eb(h,a),fb(h,b*this.h,h));return xi(this,g,f,c,d,function(a){if(0<g.getImageData(0,0,1,1).data[3]){if(a=e(a))return a;g.clearRect(0,0,1,1)}},h)};\r\nvi.prototype.b=function(a,b){var c=void 0!==a?a.toString():\"0\",d=this.a[c];void 0===d&&(d={},this.a[c]=d);c=d[b];void 0===c&&(c=new yi[b](this.K,this.g,this.C,this.j),d[b]=c);return c};vi.prototype.c=function(){return sa(this.a)};\r\nvi.prototype.f=function(a,b,c,d,e,f){var g=Object.keys(this.a).map(Number);g.sort(Ma);var h=this.g,k=h[0],l=h[1],m=h[2],h=h[3],k=[k,l,k,h,m,h,m,l];Xb(k,0,8,2,c,k);a.save();a.beginPath();a.moveTo(k[0],k[1]);a.lineTo(k[2],k[3]);a.lineTo(k[4],k[5]);a.lineTo(k[6],k[7]);a.clip();f=f?f:fi;for(var p,q,k=0,l=g.length;k<l;++k)for(p=this.a[g[k].toString()],m=0,h=f.length;m<h;++m)q=p[f[m]],void 0!==q&&q.f(a,b,c,d,e);a.restore()};\r\nfunction xi(a,b,c,d,e,f,g){var h=Object.keys(a.a).map(Number);h.sort(function(a,b){return b-a});var k,l,m,p,q;k=0;for(l=h.length;k<l;++k)for(p=a.a[h[k].toString()],m=fi.length-1;0<=m;--m)if(q=p[fi[m]],void 0!==q&&(q=ji(q,b,1,c,d,e,q.b,f,g)))return q}var yi={Image:mi,LineString:ni,Polygon:qi,Text:ti};function zi(a,b){return J(a)-J(b)}function Ai(a,b){var c=.5*a/b;return c*c}function Bi(a,b,c,d,e,f){var g=!1,h,k;if(h=c.Z())k=h.ib(),2==k||3==k?h.bc(e,f):(0==k&&h.load(),h.Vb(e,f),g=!0);if(e=(0,c.c)(b))d=e.Rb(d),(0,Ci[d.$()])(a,d,c,b);return g}\r\nvar Ci={Point:function(a,b,c,d){var e=c.Z();if(e){if(2!=e.ib())return;var f=a.b(c.b,\"Image\");f.Ma(e);f.cb(b,d)}if(e=c.a)a=a.b(c.b,\"Text\"),a.Ca(e),ui(a,b.o,2,2,d)},LineString:function(a,b,c,d){var e=c.f;if(e){var f=a.b(c.b,\"LineString\");f.La(null,e);f.qc(b,d)}if(e=c.a)a=a.b(c.b,\"Text\"),a.Ca(e),ui(a,Nh(b),2,2,d)},Polygon:function(a,b,c,d){var e=c.g,f=c.f;if(e||f){var g=a.b(c.b,\"Polygon\");g.La(e,f);g.tc(b,d)}if(e=c.a)a=a.b(c.b,\"Text\"),a.Ca(e),ui(a,tc(b),2,2,d)},MultiPoint:function(a,b,c,d){var e=c.Z();\r\nif(e){if(2!=e.ib())return;var f=a.b(c.b,\"Image\");f.Ma(e);f.bb(b,d)}if(e=c.a)a=a.b(c.b,\"Text\"),a.Ca(e),c=b.o,ui(a,c,c.length,b.A,d)},MultiLineString:function(a,b,c,d){var e=c.f;if(e){var f=a.b(c.b,\"LineString\");f.La(null,e);f.rc(b,d)}if(e=c.a)a=a.b(c.b,\"Text\"),a.Ca(e),b=Oh(b),ui(a,b,b.length,2,d)},MultiPolygon:function(a,b,c,d){var e=c.g,f=c.f;if(f||e){var g=a.b(c.b,\"Polygon\");g.La(e,f);g.sc(b,d)}if(e=c.a)a=a.b(c.b,\"Text\"),a.Ca(e),b=Qh(b),ui(a,b,b.length,2,d)},GeometryCollection:function(a,b,c,d){b=\r\nb.a;var e,f;e=0;for(f=b.length;e<f;++e)(0,Ci[b[e].$()])(a,b[e],c,d)},Circle:function(a,b,c,d){var e=c.g,f=c.f;if(e||f){var g=a.b(c.b,\"Polygon\");g.La(e,f);g.pc(b,d)}if(e=c.a)a=a.b(c.b,\"Text\"),a.Ca(e),ui(a,b.o.slice(0,b.A),2,2,d)}};var Di,Ei=K,Fi=-1<Ei.navigator.userAgent.indexOf(\"OPR\"),Gi=-1<Ei.navigator.userAgent.indexOf(\"Edge\");Di=!(!Ei.navigator.userAgent.match(\"CriOS\")&&null!==Ei.chrome&&void 0!==Ei.chrome&&\"Google Inc.\"===Ei.navigator.vendor&&0==Fi&&0==Gi);function Hi(a,b,c,d){a=c-a;b=d-b;var e=Math.sqrt(a*a+b*b);return[Math.round(c+a/e),Math.round(d+b/e)]}\r\nfunction Ii(a,b,c,d,e,f,g,h,k,l,m){var p=Md(Math.round(c*a),Math.round(c*b));if(0===k.length)return p.canvas;p.scale(c,c);var q=db();k.forEach(function(a){mb(q,a.extent)});var u=Md(Math.round(c*qb(q)/d),Math.round(c*rb(q)/d)),w=c/d;k.forEach(function(a){u.drawImage(a.image,l,l,a.image.width-2*l,a.image.height-2*l,(a.extent[0]-q[0])*w,-(a.extent[3]-q[3])*w,qb(a.extent)*w,rb(a.extent)*w)});var r=xb(g);h.f.forEach(function(a){var b=a.source,e=a.target,g=b[1][0],h=b[1][1],k=b[2][0],l=b[2][1];a=(e[0][0]-\r\nr[0])/f;var m=-(e[0][1]-r[1])/f,w=(e[1][0]-r[0])/f,A=-(e[1][1]-r[1])/f,F=(e[2][0]-r[0])/f,Q=-(e[2][1]-r[1])/f,e=b[0][0],b=b[0][1],g=g-e,h=h-b,k=k-e,l=l-b;a:{g=[[g,h,0,0,w-a],[k,l,0,0,F-a],[0,0,g,h,A-m],[0,0,k,l,Q-m]];h=g.length;for(k=0;k<h;k++){for(var l=k,N=Math.abs(g[k][k]),O=k+1;O<h;O++){var S=Math.abs(g[O][k]);S>N&&(N=S,l=O)}if(0===N){g=null;break a}N=g[l];g[l]=g[k];g[k]=N;for(l=k+1;l<h;l++)for(N=-g[l][k]/g[k][k],O=k;O<h+1;O++)g[l][O]=k==O?0:g[l][O]+N*g[k][O]}k=Array(h);for(l=h-1;0<=l;l--)for(k[l]=\r\ng[l][h]/g[l][l],N=l-1;0<=N;N--)g[N][h]-=g[N][l]*k[l];g=k}g&&(p.save(),p.beginPath(),Di?(k=(a+w+F)/3,l=(m+A+Q)/3,h=Hi(k,l,a,m),w=Hi(k,l,w,A),F=Hi(k,l,F,Q),p.moveTo(w[0],w[1]),p.lineTo(h[0],h[1]),p.lineTo(F[0],F[1])):(p.moveTo(w,A),p.lineTo(a,m),p.lineTo(F,Q)),p.clip(),p.transform(g[0],g[2],g[1],g[3],a,m),p.translate(q[0]-e,q[3]-b),p.scale(d/c,-d/c),p.drawImage(u.canvas,0,0),p.restore())});m&&(p.save(),p.strokeStyle=\"black\",p.lineWidth=1,h.f.forEach(function(a){var b=a.target;a=(b[0][0]-r[0])/f;var c=\r\n-(b[0][1]-r[1])/f,d=(b[1][0]-r[0])/f,e=-(b[1][1]-r[1])/f,g=(b[2][0]-r[0])/f,b=-(b[2][1]-r[1])/f;p.beginPath();p.moveTo(d,e);p.lineTo(a,c);p.lineTo(g,b);p.closePath();p.stroke()}),p.restore());return p.canvas};function Ji(a,b,c,d,e){this.c=a;this.g=b;var f={},g=Ub(this.g,this.c);this.a=function(a){var b=a[0]+\"/\"+a[1];f[b]||(f[b]=g(a));return f[b]};this.h=d;this.C=e*e;this.f=[];this.i=!1;this.j=this.c.b&&!!d&&!!this.c.G()&&qb(d)==qb(this.c.G());this.b=this.c.G()?qb(this.c.G()):null;this.l=this.g.G()?qb(this.g.G()):null;a=xb(c);b=[c[2],c[3]];d=[c[2],c[1]];c=sb(c);e=this.a(a);var h=this.a(b),k=this.a(d),l=this.a(c);Ki(this,a,b,d,c,e,h,k,l,10);if(this.i){var m=Infinity;this.f.forEach(function(a){m=Math.min(m,\r\na.source[0][0],a.source[1][0],a.source[2][0])});this.f.forEach(function(a){if(Math.max(a.source[0][0],a.source[1][0],a.source[2][0])-m>this.b/2){var b=[[a.source[0][0],a.source[0][1]],[a.source[1][0],a.source[1][1]],[a.source[2][0],a.source[2][1]]];b[0][0]-m>this.b/2&&(b[0][0]-=this.b);b[1][0]-m>this.b/2&&(b[1][0]-=this.b);b[2][0]-m>this.b/2&&(b[2][0]-=this.b);Math.max(b[0][0],b[1][0],b[2][0])-Math.min(b[0][0],b[1][0],b[2][0])<this.b/2&&(a.source=b)}},this)}f={}}\r\nfunction Ki(a,b,c,d,e,f,g,h,k,l){var m=cb([f,g,h,k]),p=a.b?qb(m)/a.b:null,q=a.b,u=a.c.b&&.5<p&&1>p,w=!1;if(0<l){if(a.g.c&&a.l)var r=cb([b,c,d,e]),w=w|.25<qb(r)/a.l;!u&&a.c.c&&p&&(w|=.25<p)}if(w||!a.h||wb(m,a.h)){if(!(w||isFinite(f[0])&&isFinite(f[1])&&isFinite(g[0])&&isFinite(g[1])&&isFinite(h[0])&&isFinite(h[1])&&isFinite(k[0])&&isFinite(k[1])))if(0<l)w=!0;else return;if(0<l&&(w||(m=a.a([(b[0]+d[0])/2,(b[1]+d[1])/2]),q=u?(la(f[0],q)+la(h[0],q))/2-la(m[0],q):(f[0]+h[0])/2-m[0],m=(f[1]+h[1])/2-m[1],\r\nw=q*q+m*m>a.C),w)){Math.abs(b[0]-d[0])<=Math.abs(b[1]-d[1])?(u=[(c[0]+d[0])/2,(c[1]+d[1])/2],q=a.a(u),m=[(e[0]+b[0])/2,(e[1]+b[1])/2],p=a.a(m),Ki(a,b,c,u,m,f,g,q,p,l-1),Ki(a,m,u,d,e,p,q,h,k,l-1)):(u=[(b[0]+c[0])/2,(b[1]+c[1])/2],q=a.a(u),m=[(d[0]+e[0])/2,(d[1]+e[1])/2],p=a.a(m),Ki(a,b,u,m,e,f,q,p,k,l-1),Ki(a,u,c,d,m,q,g,h,p,l-1));return}if(u){if(!a.j)return;a.i=!0}a.f.push({source:[f,h,k],target:[b,d,e]});a.f.push({source:[f,g,h],target:[b,c,d]})}}\r\nfunction Li(a){var b=db();a.f.forEach(function(a){a=a.source;eb(b,a[0]);eb(b,a[1]);eb(b,a[2])});return b};function Mi(a){ai.call(this,a);this.f=Md();this.c=null;this.j=db();this.s=[0,0,0];this.h=Cf()}B(Mi,ai);\r\nMi.prototype.g=function(a,b,c){var d=di(this,a,0);ci(this,\"precompose\",c,a,d);var e=a.pixelRatio,f=a.viewState,g=f.center,h=f.projection,k=f.rotation,l=a.size,m=Math.round(e*l[0]/2),l=Math.round(e*l[1]/2),f=e/f.resolution,p=this.a,q=p.da(),u=e*q.nb(h),w=q.sa(h),p=Ha(p,\"render\"),r=c,x=1,D,t,z;if(k||p){r=this.f;D=r.canvas;var x=q.pb(e)/e,C=c.canvas.width*x;t=c.canvas.height*x;z=Math.round(Math.sqrt(C*C+t*t));D.width!=z?D.width=D.height=z:r.clearRect(0,0,z,z);D=(z-C)/2/x;t=(z-t)/2/x;f*=x;m=Math.round(x*\r\n(m+D));l=Math.round(x*(l+t))}C=r.globalAlpha;r.globalAlpha=b.opacity;var E=this.c,v,H=q.Qb(h)&&1==b.opacity;H||(E.reverse(),v=[]);var G=b.extent;if(b=void 0!==G){var A=xb(G),F=[G[2],G[3]],Q=[G[2],G[1]],G=sb(G);Hf(a.coordinateToPixelTransform,A);Hf(a.coordinateToPixelTransform,F);Hf(a.coordinateToPixelTransform,Q);Hf(a.coordinateToPixelTransform,G);var N=D||0,O=t||0;r.save();var S=r.canvas.width/2,X=r.canvas.height/2;nh(r,-k,S,X);r.beginPath();r.moveTo(x*(A[0]*e+N),x*(A[1]*e+O));r.lineTo(x*(F[0]*e+\r\nN),x*(F[1]*e+O));r.lineTo(x*(Q[0]*e+N),x*(Q[1]*e+O));r.lineTo(x*(G[0]*e+N),x*(G[1]*e+O));r.clip();nh(r,k,S,X)}A=0;for(F=E.length;A<F;++A){var Q=E[A],G=Q.V,X=Qc(w,G,this.j),S=G[0],P=sb(Qc(w,Yc(w,g,S,this.s))),G=Math.round(qb(X)*f),N=Math.round(rb(X)*f),O=Math.round((X[0]-P[0])*f/G)*G+m+Math.round((P[0]-g[0])*f),X=Math.round((P[1]-X[3])*f/N)*N+l+Math.round((g[1]-P[1])*f);if(!H){P=[O,X,O+G,X+N];r.save();for(var Ba=0,Nb=v.length;Ba<Nb;++Ba){var Ca=v[Ba];wb(P,Ca)&&(r.beginPath(),r.moveTo(P[0],P[1]),r.lineTo(P[0],\r\nP[3]),r.lineTo(P[2],P[3]),r.lineTo(P[2],P[1]),r.moveTo(Ca[0],Ca[1]),r.lineTo(Ca[2],Ca[1]),r.lineTo(Ca[2],Ca[3]),r.lineTo(Ca[0],Ca[3]),r.closePath(),r.clip())}v.push(P)}S=Ni(q,S,e,h);r.drawImage(Q.Z(),u,u,S[0],S[1],O,X,G,N);H||r.restore()}b&&r.restore();p&&(e=D-m/x+m,h=t-l/x+l,g=Lf(this.h,z/2-e,z/2-h,f,-f,-k,-g[0]+e/f,-g[1]-h/f),ci(this,\"render\",r,a,g));(k||p)&&c.drawImage(r.canvas,-Math.round(D),-Math.round(t),z/x,z/x);r.globalAlpha=C;ci(this,\"postcompose\",c,a,d)};\r\nMi.prototype.i=function(a,b){function c(a){a=a.T();return 2==a||4==a||3==a&&!u}var d=a.pixelRatio,e=a.viewState,f=e.projection,g=this.a,h=g.da(),k=h.sa(f),l=Xc(k,e.resolution,0),m=k.O(l),p=e.center;m==e.resolution?(p=Yh(p,m,a.size),e=ub(p,m,e.rotation,a.size)):e=a.extent;void 0!==b.extent&&(e=vb(e,b.extent));if(pb(e))return!1;m=Tc(k,e,m);p={};p[l]={};var q=this.l(h,f,p),u=jh(g),w=db(),r=new Gc(0,0,0,0),x,D,t,z;for(t=m.H;t<=m.I;++t)for(z=m.J;z<=m.L;++z)x=$h(h,l,t,z,d,f),!c(x)&&x.b&&(x=x.b),c(x)?p[l][x.V.toString()]=\r\nx:(D=Pc(k,x.V,q,r,w),D||(x=Sc(k,x.V,r,w))&&q(l+1,x));q=Object.keys(p).map(Number);q.sort(Ma);var w=[],C,r=0;for(t=q.length;r<t;++r)for(C in x=q[r],z=p[x],z)x=z[C],2==x.T()&&w.push(x);this.c=w;Xh(a.usedTiles,h,l,m);Zh(a,h,k,d,f,e,l,g.get(\"preload\"));Uh(a,h);Wh(a,h);return!0};function Oi(a){ai.call(this,a);this.c=!1;this.B=-1;this.u=NaN;this.j=db();this.f=this.s=null;this.h=Md()}B(Oi,ai);\r\nOi.prototype.g=function(a,b,c){var d=a.extent,e=a.pixelRatio,f=b.hb?a.skippedFeatureUids:{},g=a.viewState,h=g.projection,g=g.rotation,k=h.G(),l=this.a.da(),m=di(this,a,0);ci(this,\"precompose\",c,a,m);var p=b.extent,q=void 0!==p;q&&bi(c,a,p);if((p=this.f)&&!p.c()){var u=0,w=0,r;if(Ha(this.a,\"render\")){r=c.canvas.width;var x=c.canvas.height;if(g){var D=Math.round(Math.sqrt(r*r+x*x)),u=(D-r)/2,w=(D-x)/2;r=x=D}this.h.canvas.width=r;this.h.canvas.height=x;r=this.h}else r=c;x=r.globalAlpha;r.globalAlpha=\r\nb.opacity;r!=c&&r.translate(u,w);b=a.size[0]*e;D=a.size[1]*e;nh(r,-g,b/2,D/2);p.f(r,e,m,g,f);if(l.i&&h.b&&!hb(k,d)){for(var h=d[0],l=qb(k),t=0;h<k[0];)--t,m=l*t,m=di(this,a,m),p.f(r,e,m,g,f),h+=l;t=0;for(h=d[2];h>k[2];)++t,m=l*t,m=di(this,a,m),p.f(r,e,m,g,f),h-=l;m=di(this,a,0)}nh(r,g,b/2,D/2);r!=c&&(ci(this,\"render\",r,a,m),c.drawImage(r.canvas,-u,-w),r.translate(-u,-w));r.globalAlpha=x}q&&c.restore();ci(this,\"postcompose\",c,a,m)};\r\nOi.prototype.fa=function(a,b,c,d){if(this.f){var e=this.a,f={};return this.f.fa(a,b.viewState.resolution,b.viewState.rotation,{},function(a){var b=J(a).toString();if(!(b in f))return f[b]=!0,c.call(d,a,e)})}};Oi.prototype.D=function(){Th(this)};\r\nOi.prototype.i=function(a){function b(a){var b,d=a.f;d?b=d.call(a,l):(d=c.g)&&(b=d(a,l));if(b){if(b){d=!1;if(Array.isArray(b))for(var e=0,f=b.length;e<f;++e)d=Bi(q,a,b[e],Ai(l,m),this.D,this)||d;else d=Bi(q,a,b,Ai(l,m),this.D,this)||d;a=d}else a=!1;this.c=this.c||a}}var c=this.a,d=c.da();Vh(a.attributions,d.h);Wh(a,d);var e=a.viewHints[0],f=a.viewHints[1],g=c.i,h=c.j;if(!this.c&&!g&&e||!h&&f)return!0;var k=a.extent,h=a.viewState,e=h.projection,l=h.resolution,m=a.pixelRatio,f=c.b,p=c.a,g=c.get(\"renderOrder\");\r\nvoid 0===g&&(g=zi);k=fb(k,p*l);p=h.projection.G();d.i&&h.projection.b&&!hb(p,a.extent)&&(a=Math.max(qb(k)/2,qb(p)),k[0]=p[0]-a,k[2]=p[2]+a);if(!this.c&&this.u==l&&this.B==f&&this.s==g&&hb(this.j,k))return!0;this.f=null;this.c=!1;var q=new vi(.5*l/m,k,l,d.u,c.a);Pi(d,k,l,e);if(g){var u=[];Qi(d,k,function(a){u.push(a)},this);u.sort(g);u.forEach(b,this)}else Qi(d,k,b,this);wi(q);this.u=l;this.B=f;this.s=g;this.j=k;this.f=q;return!0};function Ri(a,b){Nf.call(this,0,b);this.f=Md();this.b=this.f.canvas;this.b.style.width=\"100%\";this.b.style.height=\"100%\";this.b.className=\"ol-unselectable\";a.insertBefore(this.b,a.childNodes[0]||null);this.a=!0;this.h=Cf()}B(Ri,Nf);Ri.prototype.Mb=function(a){return a instanceof W?new Mi(a):a instanceof Y?new Oi(a):null};\r\nfunction Si(a,b,c){var d=a.g,e=a.f;if(Ha(d,b)){var f=c.extent,g=c.pixelRatio,h=c.viewState.rotation,k=c.viewState,l=c.pixelRatio/k.resolution;a=Lf(a.h,a.b.width/2,a.b.height/2,l,-l,-k.rotation,-k.center[0],-k.center[1]);U(d,new uf(b,new Gh(e,g,f,a,h),c,e,null))}}Ri.prototype.$=function(){return\"canvas\"};\r\nRi.prototype.vb=function(a){if(a){var b=this.f,c=a.pixelRatio,d=Math.round(a.size[0]*c),c=Math.round(a.size[1]*c);this.b.width!=d||this.b.height!=c?(this.b.width=d,this.b.height=c):b.clearRect(0,0,d,c);var e=a.viewState.rotation;Of(a);Si(this,\"precompose\",a);var f=a.layerStatesArray;Sa(f);nh(b,e,d/2,c/2);var g=a.viewState.resolution,h,k,l,m;h=0;for(k=f.length;h<k;++h)m=f[h],l=m.layer,l=Qf(this,l),yf(m,g)&&\"ready\"==m.ac&&l.i(a,m)&&l.g(a,m,b);nh(b,-e,d/2,c/2);Si(this,\"postcompose\",a);this.a||(this.b.style.display=\r\n\"\",this.a=!0);Rf(this,a);a.postRenderFunctions.push(Pf)}else this.a&&(this.b.style.display=\"none\",this.a=!1)};function Ti(a,b){Rh.call(this,a);this.target=b}B(Ti,Rh);Ti.prototype.Jb=I;Ti.prototype.Gc=I;function Ui(a){var b=document.createElement(\"DIV\");b.style.position=\"absolute\";Ti.call(this,a,b);this.f=!0;this.h=1;this.g=0;this.c={}}B(Ui,Ti);Ui.prototype.Jb=function(){for(var a=this.target;a.lastChild;)a.removeChild(a.lastChild);this.g=0};\r\nUi.prototype.Hc=function(a,b){if(!b.visible)return this.f&&(this.target.style.display=\"none\",this.f=!1),!0;var c=a.pixelRatio,d=a.viewState,e=d.projection,f=this.a,g=f.da(),h=g.sa(e),k=c*g.nb(e),l=Xc(h,d.resolution),m=h.O(l),p=d.center,q;m==d.resolution?(p=Yh(p,m,a.size),q=ub(p,m,d.rotation,a.size)):q=a.extent;void 0!==b.extent&&(q=vb(q,b.extent));var m=Tc(h,q,m),u={};u[l]={};var w=this.l(g,e,u),r=jh(f),x=db(),D=new Gc(0,0,0,0),t,z,C,E;for(C=m.H;C<=m.I;++C)for(E=m.J;E<=m.L;++E)t=$h(g,l,C,E,c,e),z=\r\nt.T(),z=2==z||4==z||3==z&&!r,!z&&t.b&&(t=t.b),z=t.T(),2==z?u[l][t.V.toString()]=t:4==z||3==z&&!r||(z=Pc(h,t.V,w,D,x),z||(t=Sc(h,t.V,D,x))&&w(l+1,t));var v;if(this.g!=g.b){for(v in this.c)r=this.c[+v],Sd(r.target);this.c={};this.g=g.b}x=Object.keys(u).map(Number);x.sort(Ma);var w={},H;C=0;for(E=x.length;C<E;++C){v=x[C];v in this.c?r=this.c[v]:(r=Yc(h,p,v),r=new Vi(h,r),w[v]=!0,this.c[v]=r);v=u[v];for(H in v){t=r;z=v[H];var G=k,A=z.V,F=A[0],Q=A[1],N=A[2],A=A.toString();if(!(A in t.a)){var F=Lc(Wc(t.g,\r\nF),t.i),O=z.Z(t),S=O.style;S.maxWidth=\"none\";var X,P;0<G?(X=document.createElement(\"DIV\"),P=X.style,P.overflow=\"hidden\",P.width=F[0]+\"px\",P.height=F[1]+\"px\",S.position=\"absolute\",S.left=-G+\"px\",S.top=-G+\"px\",S.width=F[0]+2*G+\"px\",S.height=F[1]+2*G+\"px\",X.appendChild(O)):(S.width=F[0]+\"px\",S.height=F[1]+\"px\",X=O,P=S);P.position=\"absolute\";P.left=(Q-t.c[1])*F[0]+\"px\";P.top=(t.c[2]-N)*F[1]+\"px\";t.b||(t.b=document.createDocumentFragment());t.b.appendChild(X);t.a[A]=z}}r.b&&(r.target.appendChild(r.b),\r\nr.b=null)}k=Object.keys(this.c).map(Number);k.sort(Ma);C=Cf();H=0;for(x=k.length;H<x;++H)if(v=k[H],r=this.c[v],v in u)if(t=r.O(),E=r.pa(),Lf(C,a.size[0]/2,a.size[1]/2,t/d.resolution,t/d.resolution,d.rotation,(E[0]-p[0])/t,(p[1]-E[1])/t),r.setTransform(C),v in w){for(--v;0<=v;--v)if(v in this.c){this.c[v].target.parentNode&&this.c[v].target.parentNode.insertBefore(r.target,this.c[v].target.nextSibling);break}0>v&&this.target.insertBefore(r.target,this.target.childNodes[0]||null)}else{if(!a.viewHints[0]&&\r\n!a.viewHints[1]){z=Rc(r.g,q,r.c[0],D);v=[];t=void 0;for(t in r.a)E=r.a[t],G=E.V,Hc(z,G[1],G[2])||v.push(E);z=0;for(G=v.length;z<G;++z)E=v[z],t=E.V.toString(),Sd(E.Z(r)),delete r.a[t]}}else Sd(r.target),delete this.c[v];b.opacity!=this.h&&(this.h=this.target.style.opacity=b.opacity);b.visible&&!this.f&&(this.target.style.display=\"\",this.f=!0);Xh(a.usedTiles,g,l,m);Zh(a,g,h,c,e,q,l,f.get(\"preload\"));Uh(a,g);Wh(a,g);return!0};\r\nfunction Vi(a,b){this.target=document.createElement(\"DIV\");this.target.style.position=\"absolute\";this.target.style.width=\"100%\";this.target.style.height=\"100%\";this.g=a;this.c=b;this.h=xb(Qc(a,b));this.l=a.O(b[0]);this.a={};this.b=null;this.f=Cf();this.i=[0,0]}Vi.prototype.pa=function(){return this.h};Vi.prototype.O=function(){return this.l};Vi.prototype.setTransform=function(a){Ra(a,this.f)||(Qd(this.target,a),Gf(this.f,a))};function Wi(a){this.g=Md();var b=this.g.canvas;b.style.maxWidth=\"none\";b.style.position=\"absolute\";Ti.call(this,a,b);this.c=!1;this.h=-1;this.s=NaN;this.i=db();this.f=this.j=null;this.B=Cf();this.u=Cf()}B(Wi,Ti);n=Wi.prototype;n.Jb=function(){var a=this.g.canvas;a.width=a.width;this.h=0};\r\nn.Gc=function(a,b){var c=a.viewState,d=c.center,e=c.rotation,f=c.resolution,c=a.pixelRatio,g=a.size[0],h=a.size[1],k=g*c,l=h*c,d=Lf(this.B,c*g/2,c*h/2,c/f,-c/f,-e,-d[0],-d[1]),f=this.g;f.canvas.width=k;f.canvas.height=l;var m=Df(this.u);Jf(m,1/c,1/c);Kf(m,-(k-g)/2*c,-(l-h)/2*c);Qd(f.canvas,m);Xi(this,\"precompose\",a,d);(g=this.f)&&!g.c()&&(f.globalAlpha=b.opacity,g.f(f,c,d,e,b.hb?a.skippedFeatureUids:{}),Xi(this,\"render\",a,d));Xi(this,\"postcompose\",a,d)};\r\nfunction Xi(a,b,c,d){var e=a.g;a=a.a;Ha(a,b)&&U(a,new uf(b,new Gh(e,c.pixelRatio,c.extent,d,c.viewState.rotation),c,e,null))}n.fa=function(a,b,c,d){if(this.f){var e=this.a,f={};return this.f.fa(a,b.viewState.resolution,b.viewState.rotation,{},function(a){var b=J(a).toString();if(!(b in f))return f[b]=!0,c.call(d,a,e)})}};n.Ic=function(){Th(this)};\r\nn.Hc=function(a){function b(a){var b,d=a.f;d?b=d.call(a,k):(d=c.g)&&(b=d(a,k));if(b){if(b){d=!1;if(Array.isArray(b))for(var e=0,f=b.length;e<f;++e)d=Bi(m,a,b[e],Ai(k,l),this.Ic,this)||d;else d=Bi(m,a,b,Ai(k,l),this.Ic,this)||d;a=d}else a=!1;this.c=this.c||a}}var c=this.a,d=c.da();Vh(a.attributions,d.h);Wh(a,d);var e=a.viewHints[0],f=a.viewHints[1],g=c.i,h=c.j;if(!this.c&&!g&&e||!h&&f)return!0;var f=a.extent,g=a.viewState,e=g.projection,k=g.resolution,l=a.pixelRatio;a=c.b;h=c.a;g=c.get(\"renderOrder\");\r\nvoid 0===g&&(g=zi);f=fb(f,h*k);if(!this.c&&this.s==k&&this.h==a&&this.j==g&&hb(this.i,f))return!0;this.f=null;this.c=!1;var m=new vi(.5*k/l,f,k,d.u,c.a);Pi(d,f,k,e);if(g){var p=[];Qi(d,f,function(a){p.push(a)},this);p.sort(g);p.forEach(b,this)}else Qi(d,f,b,this);wi(m);this.s=k;this.h=a;this.j=g;this.i=f;this.f=m;return!0};function Yi(a,b){Nf.call(this,0,b);this.f=Md();var c=this.f.canvas;c.style.position=\"absolute\";c.style.width=\"100%\";c.style.height=\"100%\";c.className=\"ol-unselectable\";a.insertBefore(c,a.childNodes[0]||null);this.h=Cf();this.b=document.createElement(\"DIV\");this.b.className=\"ol-unselectable\";c=this.b.style;c.position=\"absolute\";c.width=\"100%\";c.height=\"100%\";R(this.b,\"touchstart\",Fa);a.insertBefore(this.b,a.childNodes[0]||null);this.a=!0}B(Yi,Nf);Yi.prototype.R=function(){Sd(this.b);Nf.prototype.R.call(this)};\r\nYi.prototype.Mb=function(a){if(a instanceof W)a=new Ui(a);else if(a instanceof Y)a=new Wi(a);else return null;return a};function Zi(a,b,c){var d=a.g;if(Ha(d,b)){var e=c.extent,f=c.pixelRatio,g=c.viewState,h=g.rotation,k=a.f,l=k.canvas;a=Lf(a.h,l.width/2,l.height/2,f/g.resolution,-f/g.resolution,-h,-g.center[0],-g.center[1]);U(d,new uf(b,new Gh(k,f,e,a,h),c,k,null))}}Yi.prototype.$=function(){return\"dom\"};\r\nYi.prototype.vb=function(a){if(a){var b=this.g;if(Ha(b,\"precompose\")||Ha(b,\"postcompose\")){var b=this.f.canvas,c=a.pixelRatio;b.width=a.size[0]*c;b.height=a.size[1]*c}Zi(this,\"precompose\",a);b=a.layerStatesArray;Sa(b);var c=a.viewState.resolution,d,e,f,g;d=0;for(e=b.length;d<e;++d)g=b[d],f=g.layer,f=Qf(this,f),this.b.insertBefore(f.target,this.b.childNodes[d]||null),yf(g,c)&&\"ready\"==g.ac?f.Hc(a,g)&&f.Gc(a,g):f.Jb();var b=a.layerStates,h;for(h in this.c)h in b||(f=this.c[h],Sd(f.target));this.a||\r\n(this.b.style.display=\"\",this.a=!0);Of(a);Rf(this,a);a.postRenderFunctions.push(Pf);Zi(this,\"postcompose\",a)}else this.a&&(this.b.style.display=\"none\",this.a=!1)};function $i(a){this.b=a};function aj(a){this.b=a}B(aj,$i);aj.prototype.$=function(){return 35632};function bj(a){this.b=a}B(bj,$i);bj.prototype.$=function(){return 35633};function cj(){this.b=\"precision mediump float;varying vec2 a;varying float b;uniform float k;uniform sampler2D l;void main(void){vec4 texColor=texture2D(l,a);gl_FragColor.rgb=texColor.rgb;float alpha=texColor.a*b*k;if(alpha==0.0){discard;}gl_FragColor.a=alpha;}\"}B(cj,aj);var dj=new cj;\r\nfunction ej(){this.b=\"varying vec2 a;varying float b;attribute vec2 c;attribute vec2 d;attribute vec2 e;attribute float f;attribute float g;uniform mat4 h;uniform mat4 i;uniform mat4 j;void main(void){mat4 offsetMatrix=i;if(g==1.0){offsetMatrix=i*j;}vec4 offsets=offsetMatrix*vec4(e,0.,0.);gl_Position=h*vec4(c,0.,1.)+offsets;a=d;b=f;}\"}B(ej,bj);var fj=new ej;\r\nfunction gj(a,b){this.i=a.getUniformLocation(b,\"j\");this.j=a.getUniformLocation(b,\"i\");this.h=a.getUniformLocation(b,\"k\");this.l=a.getUniformLocation(b,\"h\");this.b=a.getAttribLocation(b,\"e\");this.a=a.getAttribLocation(b,\"f\");this.f=a.getAttribLocation(b,\"c\");this.c=a.getAttribLocation(b,\"g\");this.g=a.getAttribLocation(b,\"d\")};function hj(a){this.b=void 0!==a?a:[];this.a=ij}var ij=35044;function jj(a,b){this.C=a;this.b=b;this.a={};this.g={};this.f={};this.i=this.j=this.h=this.l=null;(this.c=0<=fa.indexOf(\"OES_element_index_uint\"))&&b.getExtension(\"OES_element_index_uint\");R(this.C,\"webglcontextlost\",this.K,this);R(this.C,\"webglcontextrestored\",this.s,this)}B(jj,Aa);\r\nfunction kj(a,b,c){var d=a.b,e=c.b,f=String(J(c));if(f in a.a)d.bindBuffer(b,a.a[f].buffer);else{var g=d.createBuffer();d.bindBuffer(b,g);var h;34962==b?h=new Float32Array(e):34963==b&&(h=a.c?new Uint32Array(e):new Uint16Array(e));d.bufferData(b,h,c.a);a.a[f]={Qe:c,buffer:g}}}function lj(a,b){var c=a.b,d=String(J(b)),e=a.a[d];c.isContextLost()||c.deleteBuffer(e.buffer);delete a.a[d]}\r\njj.prototype.R=function(){za(this.C);var a=this.b;if(!a.isContextLost()){for(var b in this.a)a.deleteBuffer(this.a[b].buffer);for(b in this.f)a.deleteProgram(this.f[b]);for(b in this.g)a.deleteShader(this.g[b]);a.deleteFramebuffer(this.h);a.deleteRenderbuffer(this.i);a.deleteTexture(this.j)}};\r\nfunction mj(a){if(!a.h){var b=a.b,c=b.createFramebuffer();b.bindFramebuffer(b.FRAMEBUFFER,c);var d=nj(b,1,1),e=b.createRenderbuffer();b.bindRenderbuffer(b.RENDERBUFFER,e);b.renderbufferStorage(b.RENDERBUFFER,b.DEPTH_COMPONENT16,1,1);b.framebufferTexture2D(b.FRAMEBUFFER,b.COLOR_ATTACHMENT0,b.TEXTURE_2D,d,0);b.framebufferRenderbuffer(b.FRAMEBUFFER,b.DEPTH_ATTACHMENT,b.RENDERBUFFER,e);b.bindTexture(b.TEXTURE_2D,null);b.bindRenderbuffer(b.RENDERBUFFER,null);b.bindFramebuffer(b.FRAMEBUFFER,null);a.h=c;\r\na.j=d;a.i=e}return a.h}function oj(a,b){var c=String(J(b));if(c in a.g)return a.g[c];var d=a.b,e=d.createShader(b.$());d.shaderSource(e,b.b);d.compileShader(e);return a.g[c]=e}function pj(a,b,c){var d=J(b)+\"/\"+J(c);if(d in a.f)return a.f[d];var e=a.b,f=e.createProgram();e.attachShader(f,oj(a,b));e.attachShader(f,oj(a,c));e.linkProgram(f);return a.f[d]=f}jj.prototype.K=function(){qa(this.a);qa(this.g);qa(this.f);this.i=this.j=this.h=this.l=null};jj.prototype.s=function(){};\r\nfunction qj(a,b){if(b==a.l)return!1;a.b.useProgram(b);a.l=b;return!0}function rj(a,b,c){var d=a.createTexture();a.bindTexture(a.TEXTURE_2D,d);a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MAG_FILTER,a.LINEAR);a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MIN_FILTER,a.LINEAR);void 0!==b&&a.texParameteri(3553,10242,b);void 0!==c&&a.texParameteri(3553,10243,c);return d}function nj(a,b,c){var d=rj(a,void 0,void 0);a.texImage2D(a.TEXTURE_2D,0,a.RGBA,b,c,0,a.RGBA,a.UNSIGNED_BYTE,null);return d};function sj(a,b){this.B=this.u=void 0;this.C=tb(b);this.v=[];this.l=[];this.M=void 0;this.h=[];this.g=[];this.ca=this.Y=void 0;this.a=[];this.D=this.j=null;this.N=void 0;this.Ea=Cf();this.va=Cf();this.ha=this.P=void 0;this.wa=Cf();this.ra=Jd();this.ba=this.aa=this.W=void 0;this.na=[];this.i=[];this.b=[];this.s=null;this.c=[];this.K=[];this.ma=void 0}B(sj,Fh);\r\nfunction tj(a,b){var c=a.s,d=a.j,e=a.na,f=a.i,g=b.b;return function(){if(!g.isContextLost()){var a,k;a=0;for(k=e.length;a<k;++a)g.deleteTexture(e[a]);a=0;for(k=f.length;a<k;++a)g.deleteTexture(f[a])}lj(b,c);lj(b,d)}}\r\nfunction uj(a,b,c,d){var e=a.u,f=a.B,g=a.M,h=a.Y,k=a.ca,l=a.N,m=a.P,p=a.ha,q=a.W?1:0,u=a.aa,w=a.ba,r=a.ma,x=Math.cos(u),u=Math.sin(u),D=a.a.length,t=a.b.length,z,C,E,v,H,G;for(z=0;z<c;z+=d)H=b[z]-a.C[0],G=b[z+1]-a.C[1],C=t/8,E=-w*e,v=-w*(g-f),a.b[t++]=H,a.b[t++]=G,a.b[t++]=E*x-v*u,a.b[t++]=E*u+v*x,a.b[t++]=m/k,a.b[t++]=(p+g)/h,a.b[t++]=l,a.b[t++]=q,E=w*(r-e),v=-w*(g-f),a.b[t++]=H,a.b[t++]=G,a.b[t++]=E*x-v*u,a.b[t++]=E*u+v*x,a.b[t++]=(m+r)/k,a.b[t++]=(p+g)/h,a.b[t++]=l,a.b[t++]=q,E=w*(r-e),v=w*f,a.b[t++]=\r\nH,a.b[t++]=G,a.b[t++]=E*x-v*u,a.b[t++]=E*u+v*x,a.b[t++]=(m+r)/k,a.b[t++]=p/h,a.b[t++]=l,a.b[t++]=q,E=-w*e,v=w*f,a.b[t++]=H,a.b[t++]=G,a.b[t++]=E*x-v*u,a.b[t++]=E*u+v*x,a.b[t++]=m/k,a.b[t++]=p/h,a.b[t++]=l,a.b[t++]=q,a.a[D++]=C,a.a[D++]=C+1,a.a[D++]=C+2,a.a[D++]=C,a.a[D++]=C+2,a.a[D++]=C+3}sj.prototype.bb=function(a,b){this.c.push(this.a.length);this.K.push(b);var c=a.o;uj(this,c,c.length,a.A)};sj.prototype.cb=function(a,b){this.c.push(this.a.length);this.K.push(b);var c=a.o;uj(this,c,c.length,a.A)};\r\nfunction vj(a,b){var c=b.b;a.v.push(a.a.length);a.l.push(a.a.length);a.s=new hj(a.b);kj(b,34962,a.s);a.j=new hj(a.a);kj(b,34963,a.j);var d={};wj(a.na,a.h,d,c);wj(a.i,a.g,d,c);a.u=void 0;a.B=void 0;a.M=void 0;a.h=null;a.g=null;a.Y=void 0;a.ca=void 0;a.a=null;a.N=void 0;a.P=void 0;a.ha=void 0;a.W=void 0;a.aa=void 0;a.ba=void 0;a.b=null;a.ma=void 0}\r\nfunction wj(a,b,c,d){var e,f,g,h,k=b.length;for(h=0;h<k;++h){f=b[h];g=J(f).toString();if(g in c)e=c[g];else{e=d;var l=rj(e,33071,33071);e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,f);e=l;c[g]=e}a[h]=e}}\r\nsj.prototype.f=function(a,b,c,d,e,f,g,h,k,l,m){f=a.b;kj(a,34962,this.s);kj(a,34963,this.j);var p=pj(a,dj,fj),q;this.D?q=this.D:this.D=q=new gj(f,p);qj(a,p);f.enableVertexAttribArray(q.f);f.vertexAttribPointer(q.f,2,5126,!1,32,0);f.enableVertexAttribArray(q.b);f.vertexAttribPointer(q.b,2,5126,!1,32,8);f.enableVertexAttribArray(q.g);f.vertexAttribPointer(q.g,2,5126,!1,32,16);f.enableVertexAttribArray(q.a);f.vertexAttribPointer(q.a,1,5126,!1,32,24);f.enableVertexAttribArray(q.c);f.vertexAttribPointer(q.c,\r\n1,5126,!1,32,28);p=Df(this.wa);Jf(p,2/(c*e[0]),2/(c*e[1]));If(p,-d);Kf(p,-(b[0]-this.C[0]),-(b[1]-this.C[1]));b=Df(this.va);Jf(b,2/e[0],2/e[1]);e=Df(this.Ea);0!==d&&If(e,-d);f.uniformMatrix4fv(q.l,!1,Kd(this.ra,p));f.uniformMatrix4fv(q.j,!1,Kd(this.ra,b));f.uniformMatrix4fv(q.i,!1,Kd(this.ra,e));f.uniform1f(q.h,g);var u;if(void 0===k)xj(this,f,a,h,this.na,this.v);else{if(l)a:{d=a.c?5125:5123;a=a.c?4:2;e=this.c.length-1;for(g=this.i.length-1;0<=g;--g)for(f.bindTexture(3553,this.i[g]),l=0<g?this.l[g-\r\n1]:0,b=this.l[g];0<=e&&this.c[e]>=l;){u=this.c[e];c=this.K[e];p=J(c).toString();if(void 0===h[p]&&c.S()&&(void 0===m||wb(m,c.S().G()))&&(f.clear(f.COLOR_BUFFER_BIT|f.DEPTH_BUFFER_BIT),f.drawElements(4,b-u,d,u*a),b=k(c))){h=b;break a}b=u;e--}h=void 0}else f.clear(f.COLOR_BUFFER_BIT|f.DEPTH_BUFFER_BIT),xj(this,f,a,h,this.i,this.l),h=(h=k(null))?h:void 0;u=h}f.disableVertexAttribArray(q.f);f.disableVertexAttribArray(q.b);f.disableVertexAttribArray(q.g);f.disableVertexAttribArray(q.a);f.disableVertexAttribArray(q.c);\r\nreturn u};function xj(a,b,c,d,e,f){var g=c.c?5125:5123;c=c.c?4:2;if(sa(d)){var h;a=0;d=e.length;for(h=0;a<d;++a){b.bindTexture(3553,e[a]);var k=f[a];b.drawElements(4,k-h,g,h*c);h=k}}else{h=0;var l,k=0;for(l=e.length;k<l;++k){b.bindTexture(3553,e[k]);for(var m=0<k?f[k-1]:0,p=f[k],q=m;h<a.c.length&&a.c[h]<=p;){var u=J(a.K[h]).toString();void 0!==d[u]?(q!==m&&b.drawElements(4,m-q,g,q*c),m=q=h===a.c.length-1?p:a.c[h+1]):m=h===a.c.length-1?p:a.c[h+1];h++}q!==m&&b.drawElements(4,m-q,g,q*c)}}}\r\nsj.prototype.Ma=function(a){var b=a.eb(),c=a.Z(1),d=a.Ob(),e=a.ub(1),f=a.C,g=a.pa(),h=a.K,k=a.s,l=a.Ka();a=a.v;var m;0===this.h.length?this.h.push(c):(m=this.h[this.h.length-1],J(m)!=J(c)&&(this.v.push(this.a.length),this.h.push(c)));0===this.g.length?this.g.push(e):(m=this.g[this.g.length-1],J(m)!=J(e)&&(this.l.push(this.a.length),this.g.push(e)));this.u=b[0];this.B=b[1];this.M=l[1];this.Y=d[1];this.ca=d[0];this.N=f;this.P=g[0];this.ha=g[1];this.aa=k;this.W=h;this.ba=a;this.ma=l[0]};\r\nfunction yj(a,b,c){this.h=b;this.l=a;this.g=c;this.a={}}B(yj,ei);function zj(a,b){var c=[],d;for(d in a.a)c.push(tj(a.a[d],b));return function(){for(var a=c.length,b,d=0;d<a;d++)b=c[d].apply(this,arguments);return b}}function Aj(a,b){for(var c in a.a)vj(a.a[c],b)}yj.prototype.b=function(a,b){var c=this.a[b];void 0===c&&(c=new Bj[b](this.l,this.h),this.a[b]=c);return c};yj.prototype.c=function(){return sa(this.a)};\r\nyj.prototype.f=function(a,b,c,d,e,f,g,h){var k,l,m;k=0;for(l=fi.length;k<l;++k)m=this.a[fi[k]],void 0!==m&&m.f(a,b,c,d,e,f,g,h,void 0,!1)};function Cj(a,b,c,d,e,f,g,h,k,l,m){var p=Dj,q,u;for(q=fi.length-1;0<=q;--q)if(u=a.a[fi[q]],void 0!==u&&(u=u.f(b,c,d,e,p,f,g,h,k,l,m)))return u}\r\nyj.prototype.fa=function(a,b,c,d,e,f,g,h,k,l){var m=b.b;m.bindFramebuffer(m.FRAMEBUFFER,mj(b));var p;void 0!==this.g&&(p=fb(kb(a),d*this.g));return Cj(this,b,a,d,e,g,h,k,function(a){var b=new Uint8Array(4);m.readPixels(0,0,1,1,m.RGBA,m.UNSIGNED_BYTE,b);if(0<b[3]&&(a=l(a)))return a},!0,p)};\r\nfunction Ej(a,b,c,d,e,f,g,h){var k=c.b;k.bindFramebuffer(k.FRAMEBUFFER,mj(c));return void 0!==Cj(a,c,b,d,e,f,g,h,function(){var a=new Uint8Array(4);k.readPixels(0,0,1,1,k.RGBA,k.UNSIGNED_BYTE,a);return 0<a[3]},!1)}var Bj={Image:sj},Dj=[1,1];function Fj(a,b,c,d,e,f,g){this.b=a;this.c=b;this.f=f;this.g=g;this.i=e;this.l=d;this.h=c;this.a=null}B(Fj,Fh);Fj.prototype.cb=function(a,b){var c=this.b,d=(new yj(1,this.f)).b(0,\"Image\");d.Ma(this.a);d.cb(a,b);vj(d,c);d.f(this.b,this.c,this.h,this.l,this.i,this.g,1,{},void 0,!1);tj(d,c)()};Fj.prototype.bb=function(a,b){var c=this.b,d=(new yj(1,this.f)).b(0,\"Image\");d.Ma(this.a);d.bb(a,b);vj(d,c);d.f(this.b,this.c,this.h,this.l,this.i,this.g,1,{},void 0,!1);tj(d,c)()};\r\nFj.prototype.Ma=function(a){this.a=a};function Gj(){this.b=\"precision mediump float;varying vec2 a;uniform float f;uniform sampler2D g;void main(void){vec4 texColor=texture2D(g,a);gl_FragColor.rgb=texColor.rgb;gl_FragColor.a=texColor.a*f;}\"}B(Gj,aj);var Hj=new Gj;function Ij(){this.b=\"varying vec2 a;attribute vec2 b;attribute vec2 c;uniform mat4 d;uniform mat4 e;void main(void){gl_Position=e*vec4(b,0.,1.);a=(d*vec4(c,0.,1.)).st;}\"}B(Ij,bj);var Jj=new Ij;\r\nfunction Kj(a,b){this.c=a.getUniformLocation(b,\"f\");this.f=a.getUniformLocation(b,\"e\");this.h=a.getUniformLocation(b,\"d\");this.g=a.getUniformLocation(b,\"g\");this.b=a.getAttribLocation(b,\"b\");this.a=a.getAttribLocation(b,\"c\")};function Lj(a,b){Rh.call(this,b);this.f=a;this.W=new hj([-1,-1,0,0,1,-1,1,0,-1,1,0,1,1,1,1,1]);this.i=this.Da=null;this.j=void 0;this.P=Cf();this.aa=Cf();this.B=Jd();this.s=null}B(Lj,Rh);\r\nfunction Mj(a,b,c){var d=a.f.f;if(void 0===a.j||a.j!=c){b.postRenderFunctions.push(function(a,b,c){a.isContextLost()||(a.deleteFramebuffer(b),a.deleteTexture(c))}.bind(null,d,a.i,a.Da));b=nj(d,c,c);var e=d.createFramebuffer();d.bindFramebuffer(36160,e);d.framebufferTexture2D(36160,36064,3553,b,0);a.Da=b;a.i=e;a.j=c}else d.bindFramebuffer(36160,a.i)}\r\nLj.prototype.Jc=function(a,b,c){Nj(this,\"precompose\",c,a);kj(c,34962,this.W);var d=c.b,e=pj(c,Hj,Jj),f;this.s?f=this.s:this.s=f=new Kj(d,e);qj(c,e)&&(d.enableVertexAttribArray(f.b),d.vertexAttribPointer(f.b,2,5126,!1,16,0),d.enableVertexAttribArray(f.a),d.vertexAttribPointer(f.a,2,5126,!1,16,8),d.uniform1i(f.g,0));d.uniformMatrix4fv(f.h,!1,Kd(this.B,this.P));d.uniformMatrix4fv(f.f,!1,Kd(this.B,this.aa));d.uniform1f(f.c,b.opacity);d.bindTexture(3553,this.Da);d.drawArrays(5,0,4);Nj(this,\"postcompose\",\r\nc,a)};function Nj(a,b,c,d){a=a.a;if(Ha(a,b)){var e=d.viewState;U(a,new uf(b,new Fj(c,e.center,e.resolution,e.rotation,d.size,d.extent,d.pixelRatio),d,null,c))}}Lj.prototype.v=function(){this.i=this.Da=null;this.j=void 0};function Oj(){this.b=\"precision mediump float;varying vec2 a;uniform sampler2D e;void main(void){gl_FragColor=texture2D(e,a);}\"}B(Oj,aj);var Pj=new Oj;function Qj(){this.b=\"varying vec2 a;attribute vec2 b;attribute vec2 c;uniform vec4 d;void main(void){gl_Position=vec4(b*d.xy+d.zw,0.,1.);a=c;}\"}B(Qj,bj);var Rj=new Qj;function Sj(a,b){this.c=a.getUniformLocation(b,\"e\");this.f=a.getUniformLocation(b,\"d\");this.b=a.getAttribLocation(b,\"b\");this.a=a.getAttribLocation(b,\"c\")};function Tj(a,b){Lj.call(this,a,b);this.M=Pj;this.ba=Rj;this.c=null;this.D=new hj([0,0,0,1,1,0,1,1,0,1,0,0,1,1,1,0]);this.u=this.g=null;this.h=-1;this.N=[0,0]}B(Tj,Lj);Tj.prototype.R=function(){lj(this.f.getContext(),this.D);Lj.prototype.R.call(this)};Tj.prototype.l=function(a,b,c){var d=this.f;return function(e,f){return Sh(a,b,e,f,function(a){var b=Uj(d.a,a.getKey());b&&(c[e]||(c[e]={}),c[e][a.V.toString()]=a);return b})}};Tj.prototype.v=function(){Lj.prototype.v.call(this);this.c=null};\r\nTj.prototype.Kc=function(a,b,c){var d=this.f,e=c.b,f=a.viewState,g=f.projection,h=this.a,k=h.da(),l=k.sa(g),m=Xc(l,f.resolution),p=l.O(m),q=Ni(k,m,a.pixelRatio,g),u=q[0]/Lc(Wc(l,m),this.N)[0],w=p/u,r=a.pixelRatio*k.nb(g),x=f.center,D;p==f.resolution?(x=Yh(x,p,a.size),D=ub(x,p,f.rotation,a.size)):D=a.extent;p=Tc(l,D,p);if(this.g&&Ic(this.g,p)&&this.h==k.b)w=this.u;else{var t=[p.I-p.H+1,p.L-p.J+1],z=ka(Math.max(t[0]*q[0],t[1]*q[1])),t=w*z,C=l.pa(m),E=C[0]+p.H*q[0]*w,w=C[1]+p.J*q[1]*w,w=[E,w,E+t,w+t];\r\nMj(this,a,z);e.viewport(0,0,z,z);e.clearColor(0,0,0,0);e.clear(16384);e.disable(3042);z=pj(c,this.M,this.ba);qj(c,z);this.c||(this.c=new Sj(e,z));kj(c,34962,this.D);e.enableVertexAttribArray(this.c.b);e.vertexAttribPointer(this.c.b,2,5126,!1,16,0);e.enableVertexAttribArray(this.c.a);e.vertexAttribPointer(this.c.a,2,5126,!1,16,8);e.uniform1i(this.c.c,0);c={};c[m]={};var v=this.l(k,g,c),H=jh(h),z=!0,E=db(),G=new Gc(0,0,0,0),A,F,Q;for(F=p.H;F<=p.I;++F)for(Q=p.J;Q<=p.L;++Q){C=$h(k,m,F,Q,u,g);if(void 0!==\r\nb.extent&&(A=Qc(l,C.V,E),!wb(A,b.extent)))continue;A=C.T();A=2==A||4==A||3==A&&!H;!A&&C.b&&(C=C.b);A=C.T();if(2==A){if(Uj(d.a,C.getKey())){c[m][C.V.toString()]=C;continue}}else if(4==A||3==A&&!H)continue;z=!1;A=Pc(l,C.V,v,G,E);A||(C=Sc(l,C.V,G,E))&&v(m+1,C)}b=Object.keys(c).map(Number);b.sort(Ma);for(var v=new Float32Array(4),N,H=0,G=b.length;H<G;++H)for(N in F=c[b[H]],F)C=F[N],A=Qc(l,C.V,E),v[0]=2*(A[2]-A[0])/t,v[1]=2*(A[3]-A[1])/t,v[2]=2*(A[0]-w[0])/t-1,v[3]=2*(A[1]-w[1])/t-1,e.uniform4fv(this.c.f,\r\nv),Vj(d,C,q,r*u),e.drawArrays(5,0,4);z?(this.g=p,this.u=w,this.h=k.b):(this.u=this.g=null,this.h=-1,a.animate=!0)}Xh(a.usedTiles,k,m,p);var O=d.l;Zh(a,k,l,u,g,D,m,h.get(\"preload\"),function(a){var b;(b=2!=a.T()||Uj(d.a,a.getKey()))||(b=a.getKey()in O.a);b||O.g([a,Vc(l,a.V),l.O(a.V[0]),q,r*u])},this);Uh(a,k);Wh(a,k);e=this.P;Df(e);Kf(e,(x[0]-w[0])/(w[2]-w[0]),(x[1]-w[1])/(w[3]-w[1]));0!==f.rotation&&If(e,f.rotation);Jf(e,a.size[0]*f.resolution/(w[2]-w[0]),a.size[1]*f.resolution/(w[3]-w[1]));Kf(e,-.5,\r\n-.5);return!0};function Wj(a,b){Lj.call(this,a,b);this.h=!1;this.N=-1;this.M=NaN;this.u=db();this.g=this.c=this.D=null}B(Wj,Lj);n=Wj.prototype;n.Jc=function(a,b,c){this.g=b;var d=a.viewState,e=this.c;e&&!e.c()&&e.f(c,d.center,d.resolution,d.rotation,a.size,a.pixelRatio,b.opacity,b.hb?a.skippedFeatureUids:{})};n.R=function(){var a=this.c;if(a){var b=this.f.getContext();zj(a,b)();this.c=null}Lj.prototype.R.call(this)};\r\nn.fa=function(a,b,c,d){if(this.c&&this.g){var e=this.f.getContext(),f=b.viewState,g=this.a,h={};return this.c.fa(a,e,f.center,f.resolution,f.rotation,b.size,b.pixelRatio,this.g.opacity,{},function(a){var b=J(a).toString();if(!(b in h))return h[b]=!0,c.call(d,a,g)})}};n.Ec=function(a,b){if(this.c&&this.g){var c=this.f.getContext(),d=b.viewState;return Ej(this.c,a,c,d.resolution,d.rotation,b.pixelRatio,this.g.opacity,b.skippedFeatureUids)}return!1};n.Lc=function(){Th(this)};\r\nn.Kc=function(a,b,c){function d(a){var b,c=a.f;c?b=c.call(a,l):(c=e.g)&&(b=c(a,l));if(b){if(b){c=!1;if(Array.isArray(b))for(var d=0,f=b.length;d<f;++d)c=Bi(q,a,b[d],Ai(l,m),this.Lc,this)||c;else c=Bi(q,a,b,Ai(l,m),this.Lc,this)||c;a=c}else a=!1;this.h=this.h||a}}var e=this.a;b=e.da();Vh(a.attributions,b.h);Wh(a,b);var f=a.viewHints[0],g=a.viewHints[1],h=e.i,k=e.j;if(!this.h&&!h&&f||!k&&g)return!0;var g=a.extent,h=a.viewState,f=h.projection,l=h.resolution,m=a.pixelRatio,h=e.b,p=e.a,k=e.get(\"renderOrder\");\r\nvoid 0===k&&(k=zi);g=fb(g,p*l);if(!this.h&&this.M==l&&this.N==h&&this.D==k&&hb(this.u,g))return!0;this.c&&a.postRenderFunctions.push(zj(this.c,c));this.h=!1;var q=new yj(.5*l/m,g,e.a);Pi(b,g,l,f);if(k){var u=[];Qi(b,g,function(a){u.push(a)},this);u.sort(k);u.forEach(d,this)}else Qi(b,g,d,this);Aj(q,c);this.M=l;this.N=h;this.D=k;this.u=g;this.c=q;return!0};function Xj(){this.f=0;this.c={};this.a=this.b=null}Xj.prototype.clear=function(){this.f=0;this.c={};this.a=this.b=null};function Uj(a,b){return a.c.hasOwnProperty(b)}function Yj(a,b){for(var c=a.b;c;)b.call(void 0,c.Na,c.Ia,a),c=c.ta}Xj.prototype.get=function(a){a=this.c[a];L(void 0!==a,15);if(a===this.a)return a.Na;a===this.b?(this.b=this.b.ta,this.b.Ua=null):(a.ta.Ua=a.Ua,a.Ua.ta=a.ta);a.ta=null;a.Ua=this.a;this.a=this.a.ta=a;return a.Na};\r\nXj.prototype.pop=function(){var a=this.b;delete this.c[a.Ia];a.ta&&(a.ta.Ua=null);this.b=a.ta;this.b||(this.a=null);--this.f;return a.Na};function Zj(a,b,c){a.get(b);a.c[b].Na=c}Xj.prototype.set=function(a,b){L(!(a in this.c),16);var c={Ia:a,ta:null,Ua:this.a,Na:b};this.a?this.a.ta=c:this.b=c;this.a=c;this.c[a]=c;++this.f};function ak(a,b){Nf.call(this,0,b);this.b=document.createElement(\"CANVAS\");this.b.style.width=\"100%\";this.b.style.height=\"100%\";this.b.className=\"ol-unselectable\";a.insertBefore(this.b,a.childNodes[0]||null);this.s=this.v=0;this.u=Md();this.i=!0;this.f=ie(this.b,{antialias:!0,depth:!1,failIfMajorPerformanceCaveat:!0,preserveDrawingBuffer:!1,stencil:!0});this.C=new jj(this.b,this.f);R(this.b,\"webglcontextlost\",this.ge,this);R(this.b,\"webglcontextrestored\",this.he,this);this.a=new Xj;this.K=null;this.l=\r\nnew Uf(function(a){var b=a[1];a=a[2];var e=b[0]-this.K[0],b=b[1]-this.K[1];return 65536*Math.log(a)+Math.sqrt(e*e+b*b)/a}.bind(this),function(a){return a[0].getKey()});this.B=function(){if(0!==this.l.b.length){Yf(this.l);var a=Vf(this.l);Vj(this,a[0],a[3],a[4])}return!1}.bind(this);this.h=0;bk(this)}B(ak,Nf);\r\nfunction Vj(a,b,c,d){var e=a.f,f=b.getKey();if(Uj(a.a,f))a=a.a.get(f),e.bindTexture(3553,a.Da),9729!=a.yc&&(e.texParameteri(3553,10240,9729),a.yc=9729),9729!=a.zc&&(e.texParameteri(3553,10241,9729),a.zc=9729);else{var g=e.createTexture();e.bindTexture(3553,g);if(0<d){var h=a.u.canvas,k=a.u;a.v!==c[0]||a.s!==c[1]?(h.width=c[0],h.height=c[1],a.v=c[0],a.s=c[1]):k.clearRect(0,0,c[0],c[1]);k.drawImage(b.Z(),d,d,c[0],c[1],0,0,c[0],c[1]);e.texImage2D(3553,0,6408,6408,5121,h)}else e.texImage2D(3553,0,6408,\r\n6408,5121,b.Z());e.texParameteri(3553,10240,9729);e.texParameteri(3553,10241,9729);e.texParameteri(3553,10242,33071);e.texParameteri(3553,10243,33071);a.a.set(f,{Da:g,yc:9729,zc:9729})}}n=ak.prototype;n.Mb=function(a){return a instanceof W?new Tj(this,a):a instanceof Y?new Wj(this,a):null};function ck(a,b,c){var d=a.g;if(Ha(d,b)){a=a.C;var e=c.viewState;U(d,new uf(b,new Fj(a,e.center,e.resolution,e.rotation,c.size,c.extent,c.pixelRatio),c,null,a))}}\r\nn.R=function(){var a=this.f;a.isContextLost()||Yj(this.a,function(b){b&&a.deleteTexture(b.Da)});Da(this.C);Nf.prototype.R.call(this)};n.ld=function(a,b){for(var c=this.f,d;1024<this.a.f-this.h;){if(d=this.a.b.Na)c.deleteTexture(d.Da);else if(+this.a.b.Ia==b.index)break;else--this.h;this.a.pop()}};n.getContext=function(){return this.C};n.$=function(){return\"webgl\"};n.ge=function(a){a.preventDefault();this.a.clear();this.h=0;a=this.c;for(var b in a)a[b].v()};n.he=function(){bk(this);this.g.render()};\r\nfunction bk(a){a=a.f;a.activeTexture(33984);a.blendFuncSeparate(770,771,1,771);a.disable(2884);a.disable(2929);a.disable(3089);a.disable(2960)}\r\nn.vb=function(a){var b=this.getContext(),c=this.f;if(c.isContextLost())return!1;if(!a)return this.i&&(this.b.style.display=\"none\",this.i=!1),!1;this.K=a.focus;this.a.set((-a.index).toString(),null);++this.h;ck(this,\"precompose\",a);var d=[],e=a.layerStatesArray;Sa(e);var f=a.viewState.resolution,g,h,k,l;g=0;for(h=e.length;g<h;++g)l=e[g],yf(l,f)&&\"ready\"==l.ac&&(k=Qf(this,l.layer),k.Kc(a,l,b)&&d.push(l));e=a.size[0]*a.pixelRatio;f=a.size[1]*a.pixelRatio;if(this.b.width!=e||this.b.height!=f)this.b.width=\r\ne,this.b.height=f;c.bindFramebuffer(36160,null);c.clearColor(0,0,0,0);c.clear(16384);c.enable(3042);c.viewport(0,0,this.b.width,this.b.height);g=0;for(h=d.length;g<h;++g)l=d[g],k=Qf(this,l.layer),k.Jc(a,l,b);this.i||(this.b.style.display=\"\",this.i=!0);Of(a);1024<this.a.f-this.h&&a.postRenderFunctions.push(this.ld.bind(this));0!==this.l.b.length&&(a.postRenderFunctions.push(this.B),a.animate=!0);ck(this,\"postcompose\",a);Rf(this,a);a.postRenderFunctions.push(Pf)};\r\nn.fa=function(a,b,c,d,e,f){var g;if(this.f.isContextLost())return!1;var h=b.viewState,k=b.layerStatesArray,l;for(l=k.length-1;0<=l;--l){g=k[l];var m=g.layer;if(yf(g,h.resolution)&&e.call(f,m)&&(g=Qf(this,m).fa(a,b,c,d)))return g}};n.Fc=function(a,b,c,d){var e=!1;if(this.f.isContextLost())return!1;var f=b.viewState,g=b.layerStatesArray,h;for(h=g.length-1;0<=h;--h){var k=g[h],l=k.layer;if(yf(k,f.resolution)&&c.call(d,l)&&(e=Qf(this,l).Ec(a,b)))return!0}return e};var dk=[\"canvas\",\"webgl\",\"dom\"];\r\nfunction Z(a){V.call(this);var b=ek(a);this.kb=void 0!==a.loadTilesWhileAnimating?a.loadTilesWhileAnimating:!1;this.Ab=void 0!==a.loadTilesWhileInteracting?a.loadTilesWhileInteracting:!1;this.Cb=void 0!==a.pixelRatio?a.pixelRatio:oe;this.Bb=b.logos;this.aa=function(){this.g=void 0;this.ve.call(this,Date.now())}.bind(this);this.Fa=Cf();this.zb=Cf();this.Ga=0;this.c=null;this.va=db();this.u=this.P=null;this.a=document.createElement(\"DIV\");this.a.className=\"ol-viewport\"+(re?\" ol-touch\":\"\");this.a.style.position=\r\n\"relative\";this.a.style.overflow=\"hidden\";this.a.style.width=\"100%\";this.a.style.height=\"100%\";this.a.style.msTouchAction=\"none\";this.a.style.touchAction=\"none\";this.s=document.createElement(\"DIV\");this.s.className=\"ol-overlaycontainer\";this.a.appendChild(this.s);this.j=document.createElement(\"DIV\");this.j.className=\"ol-overlaycontainer-stopevent\";a=[\"click\",\"dblclick\",\"mousedown\",\"touchstart\",\"mspointerdown\",of,\"mousewheel\",\"wheel\"];for(var c=0,d=a.length;c<d;++c)R(this.j,a[c],Ea);this.a.appendChild(this.j);\r\nthis.ma=new ff(this);for(var e in rf)R(this.ma,rf[e],this.wc,this);this.ba=b.keyboardEventTarget;this.i=null;R(this.a,\"wheel\",this.Sa,this);R(this.a,\"mousewheel\",this.Sa,this);this.v=b.controls;this.h=b.interactions;this.B=b.overlays;this.Sc={};this.N=new b.xe(this.a,this);this.W=null;this.D=[];this.na=[];this.wa=new Zf(this.qd.bind(this),this.Jd.bind(this));this.Eb={};R(this,La(\"layergroup\"),this.vd,this);R(this,La(\"view\"),this.Kd,this);R(this,La(\"size\"),this.Gd,this);R(this,La(\"target\"),this.Id,\r\nthis);this.l(b.values);ed(this.v,function(a){a.setMap(this)},this);R(this.v,hd,function(a){a.element.setMap(this)},this);R(this.v,id,function(a){a.element.setMap(null)},this);ed(this.h,function(a){a.setMap(this)},this);R(this.h,hd,function(a){a.element.setMap(this)},this);R(this.h,id,function(a){a.element.setMap(null)},this);ed(this.B,this.ic,this);R(this.B,hd,function(a){this.ic(a.element)},this);R(this.B,id,function(a){var b=a.element.Pa();void 0!==b&&delete this.Sc[b.toString()];a.element.setMap(null)},\r\nthis)}B(Z,V);n=Z.prototype;n.cd=function(a){this.v.push(a)};n.dd=function(a){this.h.push(a)};n.ed=function(a){fk(this).get(\"layers\").push(a)};n.fd=function(a){this.B.push(a)};n.ic=function(a){var b=a.Pa();void 0!==b&&(this.Sc[b.toString()]=a);a.setMap(this)};n.oa=function(a){this.render();Array.prototype.push.apply(this.D,arguments)};\r\nn.R=function(){Da(this.ma);Da(this.N);ya(this.a,\"wheel\",this.Sa,this);ya(this.a,\"mousewheel\",this.Sa,this);void 0!==this.f&&(K.removeEventListener(\"resize\",this.f,!1),this.f=void 0);this.g&&(K.cancelAnimationFrame(this.g),this.g=void 0);this.set(\"target\",null);V.prototype.R.call(this)};n.od=function(a,b,c,d,e){if(this.c)return a=this.Ba(a),this.N.fa(a,this.c,b,void 0!==c?c:null,void 0!==d?d:yb,void 0!==e?e:null)};\r\nn.Md=function(a,b,c){if(!this.c)return!1;a=this.Ba(a);return this.N.Fc(a,this.c,void 0!==b?b:yb,void 0!==c?c:null)};n.uc=function(a){var b=this.a.getBoundingClientRect();a=a.changedTouches?a.changedTouches[0]:a;return[a.clientX-b.left,a.clientY-b.top]};n.Wb=function(){return this.get(\"target\")};n.Ra=function(){var a=this.Wb();return void 0!==a?\"string\"===typeof a?document.getElementById(a):a:null};n.Ba=function(a){var b=this.c;return b?Hf(b.pixelToCoordinateTransform,a.slice()):null};\r\nfunction fk(a){return a.get(\"layergroup\")}function ug(a,b){var c=a.c;return c?Hf(c.coordinateToPixelTransform,b.slice(0,2)):null}n.Ta=function(){return this.get(\"size\")};n.U=function(){return this.get(\"view\")};n.qd=function(a,b,c,d){var e=this.c;if(!(e&&b in e.wantedTiles&&e.wantedTiles[b][a.getKey()]))return Infinity;a=c[0]-e.focus[0];c=c[1]-e.focus[1];return 65536*Math.log(d)+Math.sqrt(a*a+c*c)/d};n.Sa=function(a,b){var c=new df(b||a.type,this,a);this.wc(c)};\r\nn.wc=function(a){if(this.c){this.W=a.coordinate;a.frameState=this.c;var b=this.h.a,c;if(!1!==U(this,a))for(c=b.length-1;0<=c;c--){var d=b[c];if(d.get(\"active\")&&!d.handleEvent(a))break}}};\r\nn.Fd=function(){var a=this.c,b=this.wa;if(0!==b.b.length){var c=16,d=c;if(a){var e=a.viewHints;e[0]&&(c=this.kb?8:0,d=2);e[1]&&(c=this.Ab?8:0,d=2)}if(b.l<c){Yf(b);for(var e=0,f,g;b.l<c&&e<d&&0<b.b.length;)f=Vf(b)[0],g=f.getKey(),0!==f.T()||g in b.h||(b.h[g]=!0,++b.l,++e,f.load())}}b=this.na;c=0;for(d=b.length;c<d;++c)b[c](this,a);b.length=0};n.Gd=function(){this.render()};\r\nn.Id=function(){var a;this.Wb()&&(a=this.Ra());if(this.i){for(var b=0,c=this.i.length;b<c;++b)M(this.i[b]);this.i=null}a?(a.appendChild(this.a),a=this.ba?this.ba:a,this.i=[R(a,\"keydown\",this.Sa,this),R(a,\"keypress\",this.Sa,this)],this.f||(this.f=this.yb.bind(this),K.addEventListener(\"resize\",this.f,!1))):(Sd(this.a),void 0!==this.f&&(K.removeEventListener(\"resize\",this.f,!1),this.f=void 0));this.yb()};n.Jd=function(){this.render()};n.Ld=function(){this.render()};\r\nn.Kd=function(){this.P&&(M(this.P),this.P=null);var a=this.U();a&&(this.P=R(a,\"propertychange\",this.Ld,this));this.render()};n.vd=function(){this.u&&(this.u.forEach(M),this.u=null);var a=fk(this);a&&(this.u=[R(a,\"propertychange\",this.render,this),R(a,\"change\",this.render,this)]);this.render()};n.we=function(){this.g&&K.cancelAnimationFrame(this.g);this.aa()};n.render=function(){void 0===this.g&&(this.g=K.requestAnimationFrame(this.aa))};n.se=function(a){return this.h.remove(a)};n.te=function(a){return fk(this).get(\"layers\").remove(a)};\r\nn.ve=function(a){var b,c,d,e=this.Ta(),f=this.U(),g=db(),h=null;if(b=void 0!==e&&0<e[0]&&0<e[1]&&f)b=!!f.qa()&&void 0!==f.O();if(b){d=this.c?this.c.viewHints:void 0;void 0!==d?(d[0]=f.c[0],d[1]=f.c[1],h=d):h=f.c.slice();var k=fk(this).Pb(),l={};b=0;for(c=k.length;b<c;++b)l[J(k[b].layer)]=k[b];d=f.T();h={animate:!1,attributions:{},coordinateToPixelTransform:this.Fa,extent:g,focus:this.W?this.W:d.center,index:this.Ga++,layerStates:l,layerStatesArray:k,logos:pa({},this.Bb),pixelRatio:this.Cb,pixelToCoordinateTransform:this.zb,\r\npostRenderFunctions:[],size:e,skippedFeatureUids:this.Eb,tileQueue:this.wa,time:a,usedTiles:{},viewState:d,viewHints:h,wantedTiles:{}}}if(h){a=this.D;b=e=0;for(c=a.length;b<c;++b)f=a[b],f(this,h)&&(a[e++]=f);a.length=e;h.extent=ub(d.center,d.resolution,d.rotation,h.size,g)}this.c=h;this.N.vb(h);h&&(h.animate&&this.render(),Array.prototype.push.apply(this.na,h.postRenderFunctions),0!==this.D.length||h.viewHints[0]||h.viewHints[1]||lb(h.extent,this.va)||(U(this,new Td(\"moveend\",this,h)),gb(h.extent,\r\nthis.va)));U(this,new Td(\"postrender\",this,h));d=g=this.Fd;this&&(d=ea(g,this));\"function\"!=ba()||aa.Window&&aa.Window.prototype&&!xd(\"Edge\")&&aa.Window.prototype.setImmediate==aa.setImmediate?(fe||(fe=ge()),fe(d)):aa.setImmediate(d)};\r\nn.yb=function(){var a=this.Ra();if(a){var b=K.getComputedStyle(a);this.set(\"size\",[a.offsetWidth-parseFloat(b.borderLeftWidth)-parseFloat(b.paddingLeft)-parseFloat(b.paddingRight)-parseFloat(b.borderRightWidth),a.offsetHeight-parseFloat(b.borderTopWidth)-parseFloat(b.paddingTop)-parseFloat(b.paddingBottom)-parseFloat(b.borderBottomWidth)])}else this.set(\"size\",void 0)};\r\nfunction ek(a){var b=null;void 0!==a.keyboardEventTarget&&(b=\"string\"===typeof a.keyboardEventTarget?document.getElementById(a.keyboardEventTarget):a.keyboardEventTarget);var c={},d={};if(void 0===a.logo||\"boolean\"===typeof a.logo&&a.logo)d[\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAHGAAABxgEXwfpGAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAhNQTFRF////AP//AICAgP//AFVVQECA////K1VVSbbbYL/fJ05idsTYJFtbbcjbJllmZszWWMTOIFhoHlNiZszTa9DdUcHNHlNlV8XRIVdiasrUHlZjIVZjaMnVH1RlIFRkH1RkH1ZlasvYasvXVsPQH1VkacnVa8vWIVZjIFRjVMPQa8rXIVVkXsXRsNveIFVkIFZlIVVj3eDeh6GmbMvXH1ZkIFRka8rWbMvXIFVkIFVjIFVkbMvWH1VjbMvWIFVlbcvWIFVla8vVIFVkbMvWbMvVH1VkbMvWIFVlbcvWIFVkbcvVbMvWjNPbIFVkU8LPwMzNIFVkbczWIFVkbsvWbMvXIFVkRnB8bcvW2+TkW8XRIFVkIlZlJVloJlpoKlxrLl9tMmJwOWd0Omh1RXF8TneCT3iDUHiDU8LPVMLPVcLPVcPQVsPPVsPQV8PQWMTQWsTQW8TQXMXSXsXRX4SNX8bSYMfTYcfTYsfTY8jUZcfSZsnUaIqTacrVasrVa8jTa8rWbI2VbMvWbcvWdJObdcvUdszUd8vVeJaee87Yfc3WgJyjhqGnitDYjaarldPZnrK2oNbborW5o9bbo9fbpLa6q9ndrL3ArtndscDDutzfu8fJwN7gwt7gxc/QyuHhy+HizeHi0NfX0+Pj19zb1+Tj2uXk29/e3uLg3+Lh3+bl4uXj4ufl4+fl5Ofl5ufl5ujm5+jmySDnBAAAAFp0Uk5TAAECAgMEBAYHCA0NDg4UGRogIiMmKSssLzU7PkJJT1JTVFliY2hrdHZ3foSFhYeJjY2QkpugqbG1tre5w8zQ09XY3uXn6+zx8vT09vf4+Pj5+fr6/P39/f3+gz7SsAAAAVVJREFUOMtjYKA7EBDnwCPLrObS1BRiLoJLnte6CQy8FLHLCzs2QUG4FjZ5GbcmBDDjxJBXDWxCBrb8aM4zbkIDzpLYnAcE9VXlJSWlZRU13koIeW57mGx5XjoMZEUqwxWYQaQbSzLSkYGfKFSe0QMsX5WbjgY0YS4MBplemI4BdGBW+DQ11eZiymfqQuXZIjqwyadPNoSZ4L+0FVM6e+oGI6g8a9iKNT3o8kVzNkzRg5lgl7p4wyRUL9Yt2jAxVh6mQCogae6GmflI8p0r13VFWTHBQ0rWPW7ahgWVcPm+9cuLoyy4kCJDzCm6d8PSFoh0zvQNC5OjDJhQopPPJqph1doJBUD5tnkbZiUEqaCnB3bTqLTFG1bPn71kw4b+GFdpLElKIzRxxgYgWNYc5SCENVHKeUaltHdXx0dZ8uBI1hJ2UUDgq82CM2MwKeibqAvSO7MCABq0wXEPiqWEAAAAAElFTkSuQmCC\"]=\r\n\"http://openlayers.org/\";else{var e=a.logo;\"string\"===typeof e?d[e]=\"\":e instanceof HTMLElement?d[J(e).toString()]=e:e&&(L(\"string\"==typeof e.href,44),L(\"string\"==typeof e.src,45),d[e.src]=e.href)}e=a.layers instanceof Xg?a.layers:new Xg({layers:a.layers});c.layergroup=e;c.target=a.target;c.view=void 0!==a.view?a.view:new uc;var e=Nf,f;void 0!==a.renderer?Array.isArray(a.renderer)?f=a.renderer:\"string\"===typeof a.renderer?f=[a.renderer]:L(!1,46):f=dk;var g,h;g=0;for(h=f.length;g<h;++g){var k=f[g];\r\nif(\"canvas\"==k){if(qe){e=Ri;break}}else if(\"dom\"==k){e=Yi;break}else if(\"webgl\"==k&&je){e=ak;break}}void 0!==a.controls?Array.isArray(a.controls)?f=new cd(a.controls.slice()):(L(a.controls instanceof cd,47),f=a.controls):f=ee();if(void 0!==a.interactions)Array.isArray(a.interactions)?g=new cd(a.interactions.slice()):(L(a.interactions instanceof cd,48),g=a.interactions);else{g={};h=new cd;k=new $f;(void 0!==g.altShiftDragRotate?g.altShiftDragRotate:1)&&h.push(new vg);(void 0!==g.doubleClickZoom?g.doubleClickZoom:\r\n1)&&h.push(new fg({delta:g.zoomDelta,duration:g.zoomDuration}));(void 0!==g.dragPan?g.dragPan:1)&&h.push(new qg({kinetic:k}));(void 0!==g.pinchRotate?g.pinchRotate:1)&&h.push(new Pg);(void 0!==g.pinchZoom?g.pinchZoom:1)&&h.push(new Tg({duration:g.zoomDuration}));if(void 0!==g.keyboard?g.keyboard:1)h.push(new Jg),h.push(new Lg({delta:g.zoomDelta,duration:g.zoomDuration}));(void 0!==g.mouseWheelZoom?g.mouseWheelZoom:1)&&h.push(new Ng({duration:g.zoomDuration}));(void 0!==g.shiftDragZoom?g.shiftDragZoom:\r\n1)&&h.push(new Ig({duration:g.zoomDuration}));g=h}void 0!==a.overlays?Array.isArray(a.overlays)?a=new cd(a.overlays.slice()):(L(a.overlays instanceof cd,49),a=a.overlays):a=new cd;return{controls:f,interactions:g,keyboardEventTarget:b,logos:d,overlays:a,xe:e,values:c}}Ib(bh);Ib(ih);ih.forEach(function(a){bh.forEach(function(b){Jb(a,b,ch);Jb(b,a,dh)})});function gk(a){V.call(this);this.j=a.id;this.i=void 0!==a.insertFirst?a.insertFirst:!0;this.s=void 0!==a.stopEvent?a.stopEvent:!0;this.c=document.createElement(\"DIV\");this.c.className=\"ol-overlay-container\";this.c.style.position=\"absolute\";this.autoPan=void 0!==a.autoPan?a.autoPan:!1;this.g=void 0!==a.autoPanAnimation?a.autoPanAnimation:{};this.h=void 0!==a.autoPanMargin?a.autoPanMargin:20;this.a={lb:\"\",sb:\"\",wb:\"\",xb:\"\",visible:!0};this.f=null;R(this,La(\"element\"),this.td,this);R(this,La(\"map\"),\r\nthis.Ad,this);R(this,La(\"offset\"),this.Bd,this);R(this,La(\"position\"),this.Dd,this);R(this,La(\"positioning\"),this.Ed,this);void 0!==a.element&&this.set(\"element\",a.element);this.set(\"offset\",void 0!==a.offset?a.offset:[0,0]);this.set(\"positioning\",void 0!==a.positioning?a.positioning:\"top-left\");void 0!==a.position&&this.Ac(a.position)}B(gk,V);n=gk.prototype;n.Pa=function(){return this.j};n.td=function(){for(var a=this.c;a.lastChild;)a.removeChild(a.lastChild);(a=this.get(\"element\"))&&this.c.appendChild(a)};\r\nn.Ad=function(){this.f&&(Sd(this.c),M(this.f),this.f=null);var a=this.get(\"map\");a&&(this.f=R(a,\"postrender\",this.render,this),hk(this),a=this.s?a.j:a.s,this.i?a.insertBefore(this.c,a.childNodes[0]||null):a.appendChild(this.c))};n.render=function(){hk(this)};n.Bd=function(){hk(this)};\r\nn.Dd=function(){hk(this);if(void 0!==this.get(\"position\")&&this.autoPan){var a=this.get(\"map\");if(void 0!==a&&a.Ra()){var b=ik(a.Ra(),a.Ta()),c=this.get(\"element\"),d=c.offsetWidth,e=c.currentStyle||K.getComputedStyle(c),d=d+(parseInt(e.marginLeft,10)+parseInt(e.marginRight,10)),e=c.offsetHeight,f=c.currentStyle||K.getComputedStyle(c),e=e+(parseInt(f.marginTop,10)+parseInt(f.marginBottom,10)),g=ik(c,[d,e]),c=this.h;hb(b,g)||(d=g[0]-b[0],e=b[2]-g[2],f=g[1]-b[1],g=b[3]-g[3],b=[0,0],0>d?b[0]=d-c:0>e&&\r\n(b[0]=Math.abs(e)+c),0>f?b[1]=f-c:0>g&&(b[1]=Math.abs(g)+c),0===b[0]&&0===b[1])||(c=a.U().qa(),d=ug(a,c),b=[d[0]+b[0],d[1]+b[1]],this.g&&(this.g.source=c,a.oa(Dc(this.g))),a.U().xa(a.Ba(b)))}}};n.Ed=function(){hk(this)};n.setMap=function(a){this.set(\"map\",a)};n.Ac=function(a){this.set(\"position\",a)};function ik(a,b){var c=a.getBoundingClientRect(),d=c.left+K.pageXOffset,c=c.top+K.pageYOffset;return[d,c,d+b[0],c+b[1]]}\r\nfunction jk(a,b){a.a.visible!==b&&(a.c.style.display=b?\"\":\"none\",a.a.visible=b)}\r\nfunction hk(a){var b=a.get(\"map\"),c=a.get(\"position\");if(void 0!==b&&b.c&&void 0!==c){var c=ug(b,c),d=b.Ta(),b=a.c.style,e=a.get(\"offset\"),f=a.get(\"positioning\"),g=e[0],e=e[1];if(\"bottom-right\"==f||\"center-right\"==f||\"top-right\"==f)\"\"!==a.a.sb&&(a.a.sb=b.left=\"\"),g=Math.round(d[0]-c[0]-g)+\"px\",a.a.wb!=g&&(a.a.wb=b.right=g);else{\"\"!==a.a.wb&&(a.a.wb=b.right=\"\");if(\"bottom-center\"==f||\"center-center\"==f||\"top-center\"==f)g-=a.c.offsetWidth/2;g=Math.round(c[0]+g)+\"px\";a.a.sb!=g&&(a.a.sb=b.left=g)}if(\"bottom-left\"==\r\nf||\"bottom-center\"==f||\"bottom-right\"==f)\"\"!==a.a.xb&&(a.a.xb=b.top=\"\"),c=Math.round(d[1]-c[1]-e)+\"px\",a.a.lb!=c&&(a.a.lb=b.bottom=c);else{\"\"!==a.a.lb&&(a.a.lb=b.bottom=\"\");if(\"center-left\"==f||\"center-center\"==f||\"center-right\"==f)e-=a.c.offsetHeight/2;c=Math.round(c[1]+e)+\"px\";a.a.xb!=c&&(a.a.xb=b.top=c)}jk(a,!0)}else jk(a,!1)};function kk(a){V.call(this);this.g=void 0;this.a=\"geometry\";this.h=null;this.f=void 0;this.c=null;R(this,La(this.a),this.qb,this);void 0!==a&&(a instanceof Wb||!a?lk(this,a):this.l(a))}B(kk,V);n=kk.prototype;n.clone=function(){var a=new kk(this.Ea());mk(a,this.a);var b=this.S();b&&lk(a,b.clone());if(b=this.h)a.h=b,a.f=b?nk(b):void 0,a.w();return a};n.S=function(){return this.get(this.a)};n.Pa=function(){return this.g};n.ud=function(){this.w()};\r\nn.qb=function(){this.c&&(M(this.c),this.c=null);var a=this.S();a&&(this.c=R(a,\"change\",this.ud,this));this.w()};function lk(a,b){a.set(a.a,b)}function mk(a,b){ya(a,La(a.a),a.qb,a);a.a=b;R(a,La(a.a),a.qb,a);a.qb()}function nk(a){if(\"function\"!==typeof a){var b;Array.isArray(a)?b=a:(L(a instanceof yh,41),b=[a]);a=function(){return b}}return a};function ok(a,b,c){return function(d,e,f){var g=new XMLHttpRequest;g.open(\"GET\",\"function\"===typeof a?a(d,e,f):a,!0);\"arraybuffer\"==b.$()&&(g.responseType=\"arraybuffer\");g.onload=function(){if(!g.status||200<=g.status&&300>g.status){var a=b.$(),d;\"json\"==a||\"text\"==a?d=g.responseText:\"xml\"==a?(d=g.responseXML,d||(a=g.responseText,d=(new DOMParser).parseFromString(a,\"application/xml\"))):\"arraybuffer\"==a&&(d=g.response);d&&c.call(this,b.a(d,{featureProjection:f}),b.c(pk(d)))}}.bind(this);g.send()}}\r\nfunction qk(a,b){return ok(a,b,function(a){this.Gb(a)})};function rk(){this.defaultDataProjection=null}function sk(a,b,c){var d;c&&(d={dataProjection:c.dataProjection?c.dataProjection:a.c(pk(b)),featureProjection:c.featureProjection});var e;d&&(e={featureProjection:d.featureProjection,dataProjection:d.dataProjection?d.dataProjection:a.defaultDataProjection,rightHanded:d.rightHanded},d.decimals&&(e.decimals=d.decimals));return e}\r\nfunction tk(a,b){var c=b?Hb(b.featureProjection):null,d=b?Hb(b.dataProjection):null;if(c&&d&&!Tb(c,d))if(a instanceof Wb)c=a.transform(d,c);else{d=Ub(d,c);c=[a[0],a[1],a[0],a[3],a[2],a[1],a[2],a[3]];d(c,c,2);var e=[c[0],c[2],c[4],c[6]],f=[c[1],c[3],c[5],c[7]],c=Math.min.apply(null,e),d=Math.min.apply(null,f),e=Math.max.apply(null,e),f=Math.max.apply(null,f),c=ib(c,d,e,f,void 0)}else c=a;return c};function uk(){this.defaultDataProjection=null}B(uk,rk);function pk(a){return\"string\"===typeof a?(a=JSON.parse(a))?a:null:null!==a?a:null}uk.prototype.$=function(){return\"json\"};uk.prototype.g=function(a,b){return this.b(pk(a),sk(this,a,b))};uk.prototype.a=function(a,b){return this.h(pk(a),sk(this,a,b))};function vk(a,b,c,d,e){var f=NaN,g=NaN,h=(c-b)/d;if(0!==h)if(1==h)f=a[b],g=a[b+1];else if(2==h)f=.5*a[b]+.5*a[b+d],g=.5*a[b+1]+.5*a[b+d+1];else{var g=a[b],h=a[b+1],k=0,f=[0],l;for(l=b+d;l<c;l+=d){var m=a[l],p=a[l+1],k=k+Math.sqrt((m-g)*(m-g)+(p-h)*(p-h));f.push(k);g=m;h=p}c=.5*k;k=0;l=f.length;for(m=!1;k<l;)g=k+(l-k>>1),h=+Ma(f[g],c),0>h?k=g+1:(l=g,m=!h);g=m?k:~k;0>g?(c=(c-f[-g-2])/(f[-g-1]-f[-g-2]),b+=(-g-2)*d,f=a[b],f+=c*(a[b+d]-f),g=a[b+1],g+=c*(a[b+d+1]-g)):(f=a[b+g*d],g=a[b+g*d+1])}return e?\r\n(e[0]=f,e[1]=g,e):[f,g]};function wk(a,b){Yb.call(this);this.a=null;this.h=-1;this.ea(a,b)}B(wk,Yb);n=wk.prototype;n.clone=function(){var a=new wk(null);$b(a,this.c,this.o.slice());a.w();return a};n.za=function(){return ec(this.o,0,this.o.length,this.A)};function Nh(a){if(a.h!=a.b){var b;b=vk(a.o,0,a.o.length,a.A,a.a);a.a=b;a.h=a.b}return a.a}n.Qa=function(a){var b=[];b.length=gc(this.o,0,this.o.length,this.A,a,b,0);a=new wk(null);$b(a,\"XY\",b);a.w();return a};n.$=function(){return\"LineString\"};\r\nn.ea=function(a,b){a?(ac(this,b,a,1),this.o||(this.o=[]),this.o.length=cc(this.o,0,a,this.A)):$b(this,\"XY\",null);this.w()};function xk(a,b){Yb.call(this);this.ua=[];this.ea(a,b)}B(xk,Yb);n=xk.prototype;n.clone=function(){var a=new xk(null),b=this.ua.slice();$b(a,this.c,this.o.slice());a.ua=b;a.w();return a};n.za=function(){return fc(this.o,0,this.ua,this.A)};function Oh(a){var b=[],c=a.o,d=0,e=a.ua;a=a.A;var f,g;f=0;for(g=e.length;f<g;++f){var h=e[f],d=vk(c,d,h,a);Pa(b,d);d=h}return b}\r\nn.Qa=function(a){var b=[],c=[],d=this.o,e=this.ua,f=this.A,g=0,h=0,k,l;k=0;for(l=e.length;k<l;++k){var m=e[k],h=gc(d,g,m,f,a,b,h);c.push(h);g=m}b.length=h;a=new xk(null);$b(a,\"XY\",b);a.ua=c;a.w();return a};n.$=function(){return\"MultiLineString\"};n.ea=function(a,b){if(a){ac(this,b,a,2);this.o||(this.o=[]);var c=dc(this.o,0,a,this.A,this.ua);this.o.length=0===c.length?0:c[c.length-1]}else c=this.ua,$b(this,\"XY\",null),this.ua=c;this.w()};function yk(a,b){Yb.call(this);this.ea(a,b)}B(yk,Yb);yk.prototype.clone=function(){var a=new yk(null);$b(a,this.c,this.o.slice());a.w();return a};yk.prototype.za=function(){return ec(this.o,0,this.o.length,this.A)};yk.prototype.$=function(){return\"MultiPoint\"};yk.prototype.ea=function(a,b){a?(ac(this,b,a,1),this.o||(this.o=[]),this.o.length=cc(this.o,0,a,this.A)):$b(this,\"XY\",null);this.w()};function zk(a,b){Yb.call(this);this.a=[];this.v=-1;this.u=null;this.B=-1;this.h=null;this.ea(a,b)}B(zk,Yb);n=zk.prototype;n.clone=function(){for(var a=new zk(null),b=this.a.length,c=Array(b),d=0;d<b;++d)c[d]=this.a[d].slice();$b(a,this.c,this.o.slice());a.a=c;a.w();return a};n.za=function(a){var b;void 0!==a?(b=Ph(this).slice(),pc(b,this.a,this.A,a)):b=this.o;a=b;b=this.a;var c=this.A,d=0,e=[],f=0,g,h;g=0;for(h=b.length;g<h;++g){var k=b[g];e[f++]=fc(a,d,k,c,e[f]);d=k[k.length-1]}e.length=f;return e};\r\nfunction Qh(a){if(a.v!=a.b){var b=a.o,c=a.a,d=a.A,e=0,f=[],g,h,k;g=0;for(h=c.length;g<h;++g){var l=c[g];k=b;var m=l[0],p=d,q=jb(void 0);k=nb(q,k,e,m,p);f.push((k[0]+k[2])/2,(k[1]+k[3])/2);e=l[l.length-1]}b=Ph(a);c=a.a;d=a.A;g=0;h=[];l=0;for(k=c.length;l<k;++l)e=c[l],h=lc(b,g,e,d,f,2*l,h),g=e[e.length-1];a.u=h;a.v=a.b}return a.u}\r\nfunction Ph(a){if(a.B!=a.b){var b=a.o,c;a:{c=a.a;var d,e;d=0;for(e=c.length;d<e;++d)if(!nc(b,c[d],a.A,void 0)){c=!1;break a}c=!0}c?a.h=b:(a.h=b.slice(),a.h.length=pc(a.h,a.a,a.A));a.B=a.b}return a.h}n.Qa=function(a){var b=[],c=[],d=this.o,e=this.a,f=this.A;a=Math.sqrt(a);var g=0,h=0,k,l;k=0;for(l=e.length;k<l;++k){var m=e[k],p=[],h=hc(d,g,m,f,a,b,h,p);c.push(p);g=m[m.length-1]}b.length=h;d=new zk(null);$b(d,\"XY\",b);d.a=c;d.w();return d};n.$=function(){return\"MultiPolygon\"};\r\nn.ea=function(a,b){if(a){ac(this,b,a,3);this.o||(this.o=[]);var c=this.o,d=this.A,e=this.a,f=0,e=e?e:[],g=0,h,k;h=0;for(k=a.length;h<k;++h)f=dc(c,f,a[h],d,e[g]),e[g++]=f,f=f[f.length-1];e.length=g;0===e.length?this.o.length=0:(c=e[e.length-1],this.o.length=0===c.length?0:c[c.length-1])}else c=this.a,$b(this,\"XY\",null),this.a=c;this.w()};function Ak(a){a=a?a:{};this.defaultDataProjection=null;this.f=a.geometryName}B(Ak,uk);function Bk(a){var b=\"XY\";!0===a.hasZ&&!0===a.hasM?b=\"XYZM\":!0===a.hasZ?b=\"XYZ\":!0===a.hasM&&(b=\"XYM\");return b}\r\nvar Ck={Point:function(a){return void 0!==a.m&&void 0!==a.z?new jc([a.x,a.y,a.z,a.m],\"XYZM\"):void 0!==a.z?new jc([a.x,a.y,a.z],\"XYZ\"):void 0!==a.m?new jc([a.x,a.y,a.m],\"XYM\"):new jc([a.x,a.y])},LineString:function(a){return new wk(a.paths[0],Bk(a))},Polygon:function(a){return new qc(a.rings,Bk(a))},MultiPoint:function(a){return new yk(a.points,Bk(a))},MultiLineString:function(a){return new xk(a.paths,Bk(a))},MultiPolygon:function(a){return new zk(a.rings,Bk(a))}};\r\nAk.prototype.b=function(a,b){var c;if(c=a.geometry){var d;if(\"number\"===typeof c.x&&\"number\"===typeof c.y)d=\"Point\";else if(c.points)d=\"MultiPoint\";else if(c.paths)d=1===c.paths.length?\"LineString\":\"MultiLineString\";else if(c.rings){var e=c.rings,f=Bk(c),g=[];d=[];var h,k;h=0;for(k=e.length;h<k;++h){var l=Oa(e[h]);mc(l,0,l.length,f.length)?g.push([e[h]]):d.push(e[h])}for(;d.length;){e=d.shift();f=!1;for(h=g.length-1;0<=h;h--)if(hb((new ic(g[h][0])).G(),(new ic(e)).G())){g[h].push(e);f=!0;break}f||\r\ng.push([e.reverse()])}c=pa({},c);1===g.length?(d=\"Polygon\",c.rings=g[0]):(d=\"MultiPolygon\",c.rings=g)}c=tk((0,Ck[d])(c),b)}else c=null;g=new kk;this.f&&mk(g,this.f);lk(g,c);b&&b.Tb&&a.attributes[b.Tb]&&(g.g=a.attributes[b.Tb],g.w());a.attributes&&g.l(a.attributes);return g};Ak.prototype.h=function(a,b){var c=b?b:{};if(a.features){var d=[],e=a.features,f,g;c.Tb=a.objectIdFieldName;f=0;for(g=e.length;f<g;++f)d.push(this.b(e[f],c));return d}return[this.b(a,c)]};\r\nAk.prototype.c=function(a){return a.spatialReference&&a.spatialReference.wkid?Hb(\"EPSG:\"+a.spatialReference.wkid):null};function Dk(a){Wb.call(this);this.a=a?a:null;Ek(this)}B(Dk,Wb);function Fk(a){var b,c;if(a.a)for(b=0,c=a.a.length;b<c;++b)ya(a.a[b],\"change\",a.w,a)}function Ek(a){var b,c;if(a.a)for(b=0,c=a.a.length;b<c;++b)R(a.a[b],\"change\",a.w,a)}n=Dk.prototype;n.clone=function(){var a=new Dk(null),b=this.a,c=[],d,e;d=0;for(e=b.length;d<e;++d)c.push(b[d].clone());Fk(a);a.a=c;Ek(a);a.w();return a};n.mb=function(a){jb(a);for(var b=this.a,c=0,d=b.length;c<d;++c)mb(a,b[c].G());return a};\r\nn.Rb=function(a){this.i!=this.b&&(qa(this.f),this.g=0,this.i=this.b);if(0>a||0!==this.g&&a<this.g)return this;var b=a.toString();if(this.f.hasOwnProperty(b))return this.f[b];var c=[],d=this.a,e=!1,f,g;f=0;for(g=d.length;f<g;++f){var h=d[f],k=h.Rb(a);c.push(k);k!==h&&(e=!0)}if(e)return a=new Dk(null),Fk(a),a.a=c,Ek(a),a.w(),this.f[b]=a;this.g=a;return this};n.$=function(){return\"GeometryCollection\"};n.rotate=function(a,b){for(var c=this.a,d=0,e=c.length;d<e;++d)c[d].rotate(a,b);this.w()};\r\nn.scale=function(a,b,c){c||(c=tb(this.G()));for(var d=this.a,e=0,f=d.length;e<f;++e)d[e].scale(a,b,c);this.w()};n.Hb=function(a){var b=this.a,c,d;c=0;for(d=b.length;c<d;++c)b[c].Hb(a);this.w()};n.translate=function(a,b){var c=this.a,d,e;d=0;for(e=c.length;d<e;++d)c[d].translate(a,b);this.w()};n.R=function(){Fk(this);Wb.prototype.R.call(this)};function Gk(a){a=a?a:{};this.defaultDataProjection=null;this.defaultDataProjection=Hb(a.defaultDataProjection?a.defaultDataProjection:\"EPSG:4326\");this.f=a.geometryName}B(Gk,uk);function Hk(a,b){return a?tk((0,Ik[a.type])(a),b):null}\r\nvar Ik={Point:function(a){return new jc(a.coordinates)},LineString:function(a){return new wk(a.coordinates)},Polygon:function(a){return new qc(a.coordinates)},MultiPoint:function(a){return new yk(a.coordinates)},MultiLineString:function(a){return new xk(a.coordinates)},MultiPolygon:function(a){return new zk(a.coordinates)},GeometryCollection:function(a,b){var c=a.geometries.map(function(a){return Hk(a,b)});return new Dk(c)}};\r\nGk.prototype.b=function(a,b){var c=Hk(a.geometry,b),d=new kk;this.f&&mk(d,this.f);lk(d,c);void 0!==a.id&&(d.g=a.id,d.w());a.properties&&d.l(a.properties);return d};Gk.prototype.h=function(a,b){var c;if(\"Feature\"==a.type)c=[this.b(a,b)];else if(\"FeatureCollection\"==a.type){c=[];var d=a.features,e,f;e=0;for(f=d.length;e<f;++e)c.push(this.b(d[e],b))}else L(!1,35);return c};\r\nGk.prototype.c=function(a){a=a.crs;var b;a?\"name\"==a.type?b=Hb(a.properties.name):\"EPSG\"==a.type?b=Hb(\"EPSG:\"+a.properties.code):L(!1,36):b=this.defaultDataProjection;return b};function Jk(a,b,c,d,e,f){Ga.call(this);this.l=null;this.b=a?a:new Image;null!==d&&(this.b.crossOrigin=d);this.f=f?document.createElement(\"CANVAS\"):null;this.h=f;this.g=null;this.c=e;this.a=c;this.s=b;this.i=!1;2==this.c&&Kk(this)}B(Jk,Ga);function Kk(a){var b=Md(1,1);try{b.drawImage(a.b,0,0),b.getImageData(0,0,1,1)}catch(c){a.i=!0}}Jk.prototype.j=function(){this.c=3;this.g.forEach(M);this.g=null;U(this,\"change\")};\r\nJk.prototype.v=function(){this.c=2;this.a&&(this.b.width=this.a[0],this.b.height=this.a[1]);this.a=[this.b.width,this.b.height];this.g.forEach(M);this.g=null;Kk(this);if(!this.i&&null!==this.h){this.f.width=this.b.width;this.f.height=this.b.height;var a=this.f.getContext(\"2d\");a.drawImage(this.b,0,0);for(var b=a.getImageData(0,0,this.b.width,this.b.height),c=b.data,d=this.h[0]/255,e=this.h[1]/255,f=this.h[2]/255,g=0,h=c.length;g<h;g+=4)c[g]*=d,c[g+1]*=e,c[g+2]*=f;a.putImageData(b,0,0)}U(this,\"change\")};\r\nJk.prototype.Z=function(){return this.f?this.f:this.b};Jk.prototype.load=function(){if(0==this.c){this.c=1;this.g=[R(this.b,\"error\",this.j,this,!0),R(this.b,\"load\",this.v,this,!0)];try{this.b.src=this.s}catch(a){this.j()}}};function Lk(a){a=a||{};this.g=void 0!==a.anchor?a.anchor:[.5,.5];this.f=null;this.a=void 0!==a.anchorOrigin?a.anchorOrigin:\"top-left\";this.l=void 0!==a.anchorXUnits?a.anchorXUnits:\"fraction\";this.i=void 0!==a.anchorYUnits?a.anchorYUnits:\"fraction\";var b=void 0!==a.crossOrigin?a.crossOrigin:null,c=void 0!==a.img?a.img:null,d=void 0!==a.imgSize?a.imgSize:null,e=a.src;L(!(void 0!==e&&c),4);L(!c||c&&d,5);void 0!==e&&0!==e.length||!c||(e=c.src||J(c).toString());L(void 0!==e&&0<e.length,6);var f=void 0!==\r\na.src?0:2,g;void 0!==a.color?(g=a.color,g=Array.isArray(g)?g:pd(g)):g=null;var h=Af.get(e,b,g);h||(h=new Jk(c,e,d,b,f,g),Af.set(e,b,g,h));this.b=h;this.u=void 0!==a.offset?a.offset:[0,0];this.c=void 0!==a.offsetOrigin?a.offsetOrigin:\"top-left\";this.h=null;this.j=void 0!==a.size?a.size:null;oh.call(this,{opacity:void 0!==a.opacity?a.opacity:1,rotation:void 0!==a.rotation?a.rotation:0,scale:void 0!==a.scale?a.scale:1,snapToPixel:void 0!==a.snapToPixel?a.snapToPixel:!0,rotateWithView:void 0!==a.rotateWithView?\r\na.rotateWithView:!1})}B(Lk,oh);n=Lk.prototype;n.eb=function(){if(this.f)return this.f;var a=this.g,b=this.Ka();if(\"fraction\"==this.l||\"fraction\"==this.i){if(!b)return null;a=this.g.slice();\"fraction\"==this.l&&(a[0]*=b[0]);\"fraction\"==this.i&&(a[1]*=b[1])}if(\"top-left\"!=this.a){if(!b)return null;a===this.g&&(a=this.g.slice());if(\"top-right\"==this.a||\"bottom-right\"==this.a)a[0]=-a[0]+b[0];if(\"bottom-left\"==this.a||\"bottom-right\"==this.a)a[1]=-a[1]+b[1]}return this.f=a};n.Z=function(a){return this.b.Z(a)};\r\nn.Ob=function(){return this.b.a};n.ib=function(){return this.b.c};n.ub=function(){var a=this.b;if(!a.l)if(a.i){var b=a.a[0],c=a.a[1],d=Md(b,c);d.fillRect(0,0,b,c);a.l=d.canvas}else a.l=a.b;return a.l};n.pa=function(){if(this.h)return this.h;var a=this.u;if(\"top-left\"!=this.c){var b=this.Ka(),c=this.b.a;if(!b||!c)return null;a=a.slice();if(\"top-right\"==this.c||\"bottom-right\"==this.c)a[0]=c[0]-b[0]-a[0];if(\"bottom-left\"==this.c||\"bottom-right\"==this.c)a[1]=c[1]-b[1]-a[1]}return this.h=a};\r\nn.Ka=function(){return this.j?this.j:this.b.a};n.Vb=function(a,b){return R(this.b,\"change\",a,b)};n.load=function(){this.b.load()};n.bc=function(a,b){ya(this.b,\"change\",a,b)};function Mk(a,b,c){Yb.call(this);Nk(this,a,b?b:0,c)}B(Mk,Yb);Mk.prototype.clone=function(){var a=new Mk(null);$b(a,this.c,this.o.slice());a.w();return a};Mk.prototype.mb=function(a){var b=this.o,c=b[this.A]-b[0];return ib(b[0]-c,b[1]-c,b[0]+c,b[1]+c,a)};Mk.prototype.$=function(){return\"Circle\"};function Nk(a,b,c,d){if(b){ac(a,d,b,0);a.o||(a.o=[]);d=a.o;b=bc(d,b);d[b++]=d[0]+c;var e;c=1;for(e=a.A;c<e;++c)d[b++]=d[c];d.length=b}else $b(a,\"XY\",null);a.w()};function Ok(a,b,c,d,e){Sf.call(this,a,b);this.g=c;this.a=new Image;null!==d&&(this.a.crossOrigin=d);this.c={};this.f=null;this.h=e}B(Ok,Sf);n=Ok.prototype;n.R=function(){1==this.state&&Pk(this);this.b&&Da(this.b);this.state=5;Tf(this);Sf.prototype.R.call(this)};n.Z=function(a){if(void 0!==a){var b=J(a);if(b in this.c)return this.c[b];a=sa(this.c)?this.a:this.a.cloneNode(!1);return this.c[b]=a}return this.a};n.getKey=function(){return this.g};n.ce=function(){this.state=3;Pk(this);Tf(this)};\r\nn.de=function(){this.state=this.a.naturalWidth&&this.a.naturalHeight?2:4;Pk(this);Tf(this)};n.load=function(){if(0==this.state||3==this.state)this.state=1,Tf(this),this.f=[R(this.a,\"error\",this.ce,this,!0),R(this.a,\"load\",this.de,this,!0)],this.h(this,this.g)};function Pk(a){a.f.forEach(M);a.f=null};function Qk(){return[[-Infinity,-Infinity,Infinity,Infinity]]};var Rk;\r\n(function(){var a={},b={Aa:a};(function(c){if(\"object\"===typeof a&&\"undefined\"!==typeof b)b.Aa=c();else{var d;\"undefined\"!==typeof window?d=window:\"undefined\"!==typeof global?d=global:\"undefined\"!==typeof self?d=self:d=this;d.Re=c()}})(function(){return function d(a,b,g){function h(l,p){if(!b[l]){if(!a[l]){var q=\"function\"==typeof require&&require;if(!p&&q)return q(l,!0);if(k)return k(l,!0);q=Error(\"Cannot find module '\"+l+\"'\");throw q.code=\"MODULE_NOT_FOUND\",q;}q=b[l]={Aa:{}};a[l][0].call(q.Aa,function(b){var d=\r\na[l][1][b];return h(d?d:b)},q,q.Aa,d,a,b,g)}return b[l].Aa}for(var k=\"function\"==typeof require&&require,l=0;l<g.length;l++)h(g[l]);return h}({1:[function(a,b){function f(a,b){if(!(this instanceof f))return new f(a,b);this.Db=Math.max(4,a||9);this.gc=Math.max(2,Math.ceil(.4*this.Db));b&&this.ad(b);this.clear()}function g(a,b){h(a,0,a.children.length,b,a)}function h(a,b,d,e,g){g||(g=r(null));g.H=Infinity;g.J=Infinity;g.I=-Infinity;g.L=-Infinity;for(var f;b<d;b++)f=a.children[b],k(g,a.ga?e(f):f);return g}\r\nfunction k(a,b){a.H=Math.min(a.H,b.H);a.J=Math.min(a.J,b.J);a.I=Math.max(a.I,b.I);a.L=Math.max(a.L,b.L)}function l(a,b){return a.H-b.H}function m(a,b){return a.J-b.J}function p(a){return(a.I-a.H)*(a.L-a.J)}function q(a){return a.I-a.H+(a.L-a.J)}function u(a,b){return a.H<=b.H&&a.J<=b.J&&b.I<=a.I&&b.L<=a.L}function w(a,b){return b.H<=a.I&&b.J<=a.L&&b.I>=a.H&&b.L>=a.J}function r(a){return{children:a,height:1,ga:!0,H:Infinity,J:Infinity,I:-Infinity,L:-Infinity}}function x(a,b,d,e,g){for(var f=[b,d],\r\nh;f.length;)d=f.pop(),b=f.pop(),d-b<=e||(h=b+Math.ceil((d-b)/e/2)*e,D(a,h,b,d,g),f.push(b,h,h,d))}b.Aa=f;var D=a(\"quickselect\");f.prototype={all:function(){return this.cc(this.data,[])},search:function(a){var b=this.data,d=[],e=this.la;if(!w(a,b))return d;for(var g=[],f,h,k,l;b;){f=0;for(h=b.children.length;f<h;f++)k=b.children[f],l=b.ga?e(k):k,w(a,l)&&(b.ga?d.push(k):u(a,l)?this.cc(k,d):g.push(k));b=g.pop()}return d},load:function(a){if(!a||!a.length)return this;if(a.length<this.gc){for(var b=0,\r\nd=a.length;b<d;b++)this.Ha(a[b]);return this}a=this.ec(a.slice(),0,a.length-1,0);this.data.children.length?this.data.height===a.height?this.hc(this.data,a):(this.data.height<a.height&&(b=this.data,this.data=a,a=b),this.fc(a,this.data.height-a.height-1,!0)):this.data=a;return this},Ha:function(a){a&&this.fc(a,this.data.height-1);return this},clear:function(){this.data=r([]);return this},remove:function(a,b){if(!a)return this;for(var d=this.data,e=this.la(a),g=[],f=[],h,k,l,m;d||g.length;){d||(d=g.pop(),\r\nk=g[g.length-1],h=f.pop(),m=!0);if(d.ga){a:{l=a;var p=d.children,q=b;if(q){for(var r=0;r<p.length;r++)if(q(l,p[r])){l=r;break a}l=-1}else l=p.indexOf(l)}if(-1!==l){d.children.splice(l,1);g.push(d);this.$c(g);break}}m||d.ga||!u(d,e)?k?(h++,d=k.children[h],m=!1):d=null:(g.push(d),f.push(h),h=0,k=d,d=d.children[0])}return this},la:function(a){return a},Kb:l,Lb:m,toJSON:function(){return this.data},cc:function(a,b){for(var d=[];a;)a.ga?b.push.apply(b,a.children):d.push.apply(d,a.children),a=d.pop();return b},\r\nec:function(a,b,d,e){var f=d-b+1,h=this.Db,k;if(f<=h)return k=r(a.slice(b,d+1)),g(k,this.la),k;e||(e=Math.ceil(Math.log(f)/Math.log(h)),h=Math.ceil(f/Math.pow(h,e-1)));k=r([]);k.ga=!1;k.height=e;var f=Math.ceil(f/h),h=f*Math.ceil(Math.sqrt(h)),l,m,p;for(x(a,b,d,h,this.Kb);b<=d;b+=h)for(m=Math.min(b+h-1,d),x(a,b,m,f,this.Lb),l=b;l<=m;l+=f)p=Math.min(l+f-1,m),k.children.push(this.ec(a,l,p,e-1));g(k,this.la);return k},Zc:function(a,b,d,e){for(var f,g,h,k,l,m,q,r;;){e.push(b);if(b.ga||e.length-1===d)break;\r\nq=r=Infinity;f=0;for(g=b.children.length;f<g;f++)h=b.children[f],l=p(h),m=(Math.max(h.I,a.I)-Math.min(h.H,a.H))*(Math.max(h.L,a.L)-Math.min(h.J,a.J))-l,m<r?(r=m,q=l<q?l:q,k=h):m===r&&l<q&&(q=l,k=h);b=k||b.children[0]}return b},fc:function(a,b,d){var e=this.la;d=d?a:e(a);var e=[],f=this.Zc(d,this.data,b,e);f.children.push(a);for(k(f,d);0<=b;)if(e[b].children.length>this.Db)this.bd(e,b),b--;else break;this.Wc(d,e,b)},bd:function(a,b){var d=a[b],e=d.children.length,f=this.gc;this.Xc(d,f,e);e=this.Yc(d,\r\nf,e);e=r(d.children.splice(e,d.children.length-e));e.height=d.height;e.ga=d.ga;g(d,this.la);g(e,this.la);b?a[b-1].children.push(e):this.hc(d,e)},hc:function(a,b){this.data=r([a,b]);this.data.height=a.height+1;this.data.ga=!1;g(this.data,this.la)},Yc:function(a,b,d){var e,f,g,k,l,m,q;l=m=Infinity;for(e=b;e<=d-b;e++)f=h(a,0,e,this.la),g=h(a,e,d,this.la),k=Math.max(0,Math.min(f.I,g.I)-Math.max(f.H,g.H))*Math.max(0,Math.min(f.L,g.L)-Math.max(f.J,g.J)),f=p(f)+p(g),k<l?(l=k,q=e,m=f<m?f:m):k===l&&f<m&&(m=\r\nf,q=e);return q},Xc:function(a,b,d){var e=a.ga?this.Kb:l,f=a.ga?this.Lb:m,g=this.dc(a,b,d,e);b=this.dc(a,b,d,f);g<b&&a.children.sort(e)},dc:function(a,b,d,e){a.children.sort(e);e=this.la;var f=h(a,0,b,e),g=h(a,d-b,d,e),l=q(f)+q(g),m,p;for(m=b;m<d-b;m++)p=a.children[m],k(f,a.ga?e(p):p),l+=q(f);for(m=d-b-1;m>=b;m--)p=a.children[m],k(g,a.ga?e(p):p),l+=q(g);return l},Wc:function(a,b,d){for(;0<=d;d--)k(b[d],a)},$c:function(a){for(var b=a.length-1,d;0<=b;b--)0===a[b].children.length?0<b?(d=a[b-1].children,\r\nd.splice(d.indexOf(a[b]),1)):this.clear():g(a[b],this.la)},ad:function(a){var b=[\"return a\",\" - b\",\";\"];this.Kb=new Function(\"a\",\"b\",b.join(a[0]));this.Lb=new Function(\"a\",\"b\",b.join(a[1]));this.la=new Function(\"a\",\"return {minX: a\"+a[0]+\", minY: a\"+a[1]+\", maxX: a\"+a[2]+\", maxY: a\"+a[3]+\"};\")}}},{quickselect:2}],2:[function(a,b){function f(a,b,d,e,q){d=d||0;e=e||a.length-1;for(q=q||h;e>d;){if(600<e-d){var u=e-d+1,w=b-d+1,r=Math.log(u),x=.5*Math.exp(2*r/3),r=.5*Math.sqrt(r*x*(u-x)/u)*(0>w-u/2?-1:\r\n1);f(a,b,Math.max(d,Math.floor(b-w*x/u+r)),Math.min(e,Math.floor(b+(u-w)*x/u+r)),q)}u=a[b];w=d;x=e;g(a,d,b);for(0<q(a[e],u)&&g(a,d,e);w<x;){g(a,w,x);w++;for(x--;0>q(a[w],u);)w++;for(;0<q(a[x],u);)x--}0===q(a[d],u)?g(a,d,x):(x++,g(a,x,e));x<=b&&(d=x+1);b<=x&&(e=x-1)}}function g(a,b,d){var e=a[b];a[b]=a[d];a[d]=e}function h(a,b){return a<b?-1:a>b?1:0}b.Aa=f},{}]},{},[1])(1)});Rk=b.Aa})();function Sk(a){this.b=Rk(a);this.a={}}n=Sk.prototype;n.Ha=function(a,b){var c={H:a[0],J:a[1],I:a[2],L:a[3],value:b};this.b.Ha(c);this.a[J(b)]=c};n.load=function(a,b){for(var c=Array(b.length),d=0,e=b.length;d<e;d++){var f=a[d],g=b[d],f={H:f[0],J:f[1],I:f[2],L:f[3],value:g};c[d]=f;this.a[J(g)]=f}this.b.load(c)};n.remove=function(a){a=J(a);var b=this.a[a];delete this.a[a];return null!==this.b.remove(b)};function Tk(a){return a.b.all().map(function(a){return a.value})}\r\nfunction Uk(a,b){return a.b.search({H:b[0],J:b[1],I:b[2],L:b[3]}).map(function(a){return a.value})}function Vk(a,b,c,d){return Wk(Uk(a,b),c,d)}function Wk(a,b,c){for(var d,e=0,f=a.length;e<f&&!(d=b.call(c,a[e]));e++);return d}n.clear=function(){this.b.clear();this.a={}};n.G=function(){var a=this.b.data;return[a.H,a.J,a.I,a.L]};function Xk(a){a=a||{};vf.call(this,{attributions:a.attributions,logo:a.logo,projection:void 0,state:\"ready\",wrapX:void 0!==a.wrapX?a.wrapX:!0});this.j=I;this.s=a.format;this.u=void 0==a.overlaps?!0:a.overlaps;this.B=a.url;void 0!==a.loader?this.j=a.loader:void 0!==this.B&&(L(this.s,7),this.j=qk(this.B,this.s));this.W=void 0!==a.strategy?a.strategy:Qk;var b=void 0!==a.useSpatialIndex?a.useSpatialIndex:!0;this.X=b?new Sk:null;this.v=new Sk;this.ka={};this.c={};this.f={};this.g={};this.a=null;var c,\r\nd;a.features instanceof cd?(c=a.features,d=c.a):Array.isArray(a.features)&&(d=a.features);b||void 0!==c||(c=new cd(d));void 0!==d&&Yk(this,d);void 0!==c&&Zk(this,c)}B(Xk,vf);n=Xk.prototype;n.Fb=function(a){var b=J(a).toString();if($k(this,b,a)){al(this,b,a);var c=a.S();c?(b=c.G(),this.X&&this.X.Ha(b,a)):this.ka[b]=a;U(this,new bl(\"addfeature\",a))}this.w()};function al(a,b,c){a.g[b]=[R(c,\"change\",a.vc,a),R(c,\"propertychange\",a.vc,a)]}\r\nfunction $k(a,b,c){var d=!0,e=c.Pa();void 0!==e?e.toString()in a.c?d=!1:a.c[e.toString()]=c:(L(!(b in a.f),30),a.f[b]=c);return d}n.Gb=function(a){Yk(this,a);this.w()};function Yk(a,b){var c,d,e,f,g=[],h=[],k=[];d=0;for(e=b.length;d<e;d++)f=b[d],c=J(f).toString(),$k(a,c,f)&&h.push(f);d=0;for(e=h.length;d<e;d++){f=h[d];c=J(f).toString();al(a,c,f);var l=f.S();l?(c=l.G(),g.push(c),k.push(f)):a.ka[c]=f}a.X&&a.X.load(g,k);d=0;for(e=h.length;d<e;d++)U(a,new bl(\"addfeature\",h[d]))}\r\nfunction Zk(a,b){var c=!1;R(a,\"addfeature\",function(a){c||(c=!0,b.push(a.feature),c=!1)});R(a,\"removefeature\",function(a){c||(c=!0,b.remove(a.feature),c=!1)});R(b,hd,function(a){c||(c=!0,this.Fb(a.element),c=!1)},a);R(b,id,function(a){if(!c){c=!0;a=a.element;var b=J(a).toString();b in this.ka?delete this.ka[b]:this.X&&this.X.remove(a);this.Zb(a);this.w();c=!1}},a);a.a=b}\r\nn.clear=function(a){if(a){for(var b in this.g)this.g[b].forEach(M);this.a||(this.g={},this.c={},this.f={})}else if(this.X){a=this.Zb;Wk(Tk(this.X),a,this);for(var c in this.ka)this.Zb(this.ka[c])}this.a&&this.a.clear();this.X&&this.X.clear();this.v.clear();this.ka={};U(this,new bl(\"clear\"));this.w()};n.nd=function(a,b){if(this.X)return Wk(Tk(this.X),a,b);if(this.a)return ed(this.a,a,b)};function Qi(a,b,c,d){a.X?Vk(a.X,b,c,d):a.a&&ed(a.a,c,d)}\r\nn.pd=function(){var a;this.a?a=this.a.a:this.X&&(a=Tk(this.X),sa(this.ka)||Pa(a,ra(this.ka)));return a};n.G=function(){return this.X.G()};\r\nn.vc=function(a){a=a.target;var b=J(a).toString(),c=a.S();if(c)if(c=c.G(),b in this.ka)delete this.ka[b],this.X&&this.X.Ha(c,a);else{if(this.X){var d=this.X,e=d.a[J(a)];lb([e.H,e.J,e.I,e.L],c)||(d.remove(a),d.Ha(c,a))}}else b in this.ka||(this.X&&this.X.remove(a),this.ka[b]=a);c=a.Pa();void 0!==c?(c=c.toString(),b in this.f?(delete this.f[b],this.c[c]=a):this.c[c]!==a&&(cl(this,a),this.c[c]=a)):b in this.f||(cl(this,a),this.f[b]=a);this.w();U(this,new bl(\"changefeature\",a))};\r\nfunction Pi(a,b,c,d){var e=a.v;b=a.W(b,c);var f,g;f=0;for(g=b.length;f<g;++f){var h=b[f];Vk(e,h,function(a){return hb(a.extent,h)})||(a.j.call(a,h,c,d),e.Ha(h,{extent:h.slice()}))}}n.Zb=function(a){var b=J(a).toString();this.g[b].forEach(M);delete this.g[b];var c=a.Pa();void 0!==c?delete this.c[c.toString()]:delete this.f[b];U(this,new bl(\"removefeature\",a))};function cl(a,b){for(var c in a.c)if(a.c[c]===b){delete a.c[c];break}}function bl(a,b){T.call(this,a);this.feature=b}B(bl,T);function dl(a,b){T.call(this,a);this.feature=b}B(dl,T);\r\nfunction el(a){ng.call(this,{handleDownEvent:fl,handleEvent:gl,handleUpEvent:hl});this.W=null;this.s=!1;this.Ga=a.source?a.source:null;this.ma=a.features?a.features:null;this.jd=a.snapTolerance?a.snapTolerance:12;this.P=a.type;this.c=il(this.P);this.wa=a.minPoints?a.minPoints:this.c===jl?3:2;this.va=a.maxPoints?a.maxPoints:Infinity;this.Ab=a.finishCondition?a.finishCondition:yb;var b=a.geometryFunction;if(!b)if(\"Circle\"===this.P)b=function(a,b){var c=b?b:new Mk([NaN,NaN]),g=a[0],h=a[1],k=g[0]-h[0],\r\ng=g[1]-h[1];Nk(c,a[0],Math.sqrt(k*k+g*g));return c};else{var c,b=this.c;b===kl?c=jc:b===ll?c=wk:b===jl&&(c=qc);b=function(a,b){var f=b;f?f.ea(a):f=new c(a);return f}}this.u=b;this.D=this.i=this.a=this.j=this.g=this.h=null;this.kd=a.clickTolerance?a.clickTolerance*a.clickTolerance:36;this.ba=new Y({source:new Xk({useSpatialIndex:!1,wrapX:a.wrapX?a.wrapX:!1}),style:a.style?a.style:ml()});this.Fa=a.geometryName;this.gd=a.condition?a.condition:jg;this.na=a.freehandCondition?a.freehandCondition:kg;R(this,\r\nLa(\"active\"),this.kb,this)}B(el,ng);function ml(){var a=Eh();return function(b){return a[b.S().$()]}}el.prototype.setMap=function(a){ng.prototype.setMap.call(this,a);this.kb()};function gl(a){this.c!==ll&&this.c!==jl||!this.na(a)||(this.s=!0);var b=!this.s;this.s&&a.type===qf?(nl(this,a),b=!1):a.type===pf?b=pl(this,a):a.type===jf&&(b=!1);return og.call(this,a)&&b}function fl(a){return this.gd(a)?(this.W=a.pixel,!0):this.s?(this.W=a.pixel,this.h||ql(this,a),!0):!1}\r\nfunction hl(a){this.s=!1;var b=this.W,c=a.pixel,d=b[0]-c[0],b=b[1]-c[1],c=!0;d*d+b*b<=this.kd&&(pl(this,a),this.h?this.c===rl?sl(this):tl(this,a)?this.Ab(a)&&sl(this):nl(this,a):(ql(this,a),this.c===kl&&sl(this)),c=!1);return c}\r\nfunction pl(a,b){if(a.h){var c=b.coordinate,d=a.g.S(),e;a.c===kl?e=a.a:a.c===jl?(e=a.a[0],e=e[e.length-1],tl(a,b)&&(c=a.h.slice())):(e=a.a,e=e[e.length-1]);e[0]=c[0];e[1]=c[1];a.u(a.a,d);a.j&&a.j.S().ea(c);d instanceof qc&&a.c!==jl?(a.i||(a.i=new kk(new wk(null))),0>=d.ja.length?d=null:(c=new ic(null),$b(c,d.c,d.o.slice(0,d.ja[0])),c.w(),d=c),c=a.i.S(),$b(c,d.c,d.o),c.w()):a.D&&(c=a.i.S(),c.ea(a.D));ul(a)}else d=b.coordinate.slice(),a.j?a.j.S().ea(d):(a.j=new kk(new jc(d)),ul(a));return!0}\r\nfunction tl(a,b){var c=!1;if(a.g){var d=!1,e=[a.h];a.c===ll?d=a.a.length>a.wa:a.c===jl&&(d=a.a[0].length>a.wa,e=[a.a[0][0],a.a[0][a.a[0].length-2]]);if(d)for(var d=b.map,f=0,g=e.length;f<g;f++){var h=e[f],k=ug(d,h),l=b.pixel,c=l[0]-k[0],k=l[1]-k[1],l=a.s&&a.na(b)?1:a.jd;if(c=Math.sqrt(c*c+k*k)<=l){a.h=h;break}}}return c}\r\nfunction ql(a,b){var c=b.coordinate;a.h=c;a.c===kl?a.a=c.slice():a.c===jl?(a.a=[[c.slice(),c.slice()]],a.D=a.a[0]):(a.a=[c.slice(),c.slice()],a.c===rl&&(a.D=a.a));a.D&&(a.i=new kk(new wk(a.D)));c=a.u(a.a);a.g=new kk;a.Fa&&mk(a.g,a.Fa);lk(a.g,c);ul(a);U(a,new dl(\"drawstart\",a.g))}\r\nfunction nl(a,b){var c=b.coordinate,d=a.g.S(),e,f;if(a.c===ll)a.h=c.slice(),f=a.a,f.push(c.slice()),e=f.length>a.va,a.u(f,d);else if(a.c===jl){f=a.a[0];f.push(c.slice());if(e=f.length>a.va)a.h=f[0];a.u(a.a,d)}ul(a);e&&sl(a)}\r\nfunction sl(a){var b=vl(a),c=a.a,d=b.S();a.c===ll?(c.pop(),a.u(c,d)):a.c===jl&&(c[0].pop(),c[0].push(c[0][0]),a.u(c,d));\"MultiPoint\"===a.P?lk(b,new yk([c])):\"MultiLineString\"===a.P?lk(b,new xk([c])):\"MultiPolygon\"===a.P&&lk(b,new zk([c]));U(a,new dl(\"drawend\",b));a.ma&&a.ma.push(b);a.Ga&&a.Ga.Fb(b)}function vl(a){a.h=null;var b=a.g;b&&(a.g=null,a.j=null,a.i=null,a.ba.da().clear(!0));return b}el.prototype.B=zb;\r\nfunction ul(a){var b=[];a.g&&b.push(a.g);a.i&&b.push(a.i);a.j&&b.push(a.j);a=a.ba.da();a.clear(!0);a.Gb(b)}el.prototype.kb=function(){var a=this.aa,b=this.get(\"active\");a&&b||vl(this);this.ba.setMap(b?a:null)};function il(a){var b;\"Point\"===a||\"MultiPoint\"===a?b=kl:\"LineString\"===a||\"MultiLineString\"===a?b=ll:\"Polygon\"===a||\"MultiPolygon\"===a?b=jl:\"Circle\"===a&&(b=rl);return b}var kl=\"Point\",ll=\"LineString\",jl=\"Polygon\",rl=\"Circle\";function wl(a,b,c,d,e,f,g,h,k,l,m){Sf.call(this,e,0);this.u=void 0!==m?m:!1;this.v=g;this.s=h;this.f=null;this.c={};this.g=b;this.l=d;this.i=f?f:e;this.a=[];this.Va=null;this.h=0;f=Qc(d,this.i);h=this.l.G();e=this.g.G();f=h?vb(f,h):f;if(0===ob(f))this.state=4;else if((h=a.G())&&(e?e=vb(e,h):e=h),h=d.O(this.i[0]),m=tb(f),d=Ub(c,a)(m,void 0,m.length),h=c.getPointResolution(h,m),m=Lb(c),void 0!==m&&(h*=m),m=Lb(a),void 0!==m&&(h/=m),d=a.getPointResolution(h,d)/h,isFinite(d)&&0<d&&(h/=d),d=h,!isFinite(d)||\r\n0>=d)this.state=4;else if(this.j=new Ji(a,c,f,e,d*(void 0!==l?l:.5)),0===this.j.f.length)this.state=4;else if(this.h=Xc(b,d),c=Li(this.j),e&&(a.b?(c[1]=ia(c[1],e[1],e[3]),c[3]=ia(c[3],e[1],e[3])):c=vb(c,e)),ob(c)){a=Rc(b,c,this.h);for(b=a.H;b<=a.I;b++)for(c=a.J;c<=a.L;c++)(l=k(this.h,b,c,g))&&this.a.push(l);0===this.a.length&&(this.state=4)}else this.state=4}B(wl,Sf);wl.prototype.R=function(){1==this.state&&(this.Va.forEach(M),this.Va=null);Sf.prototype.R.call(this)};\r\nwl.prototype.Z=function(a){if(void 0!==a){var b=J(a);if(b in this.c)return this.c[b];a=sa(this.c)?this.f:this.f.cloneNode(!1);return this.c[b]=a}return this.f};\r\nwl.prototype.Tc=function(){var a=[];this.a.forEach(function(b){b&&2==b.T()&&a.push({extent:Qc(this.g,b.V),image:b.Z()})},this);this.a.length=0;if(0===a.length)this.state=3;else{var b=this.i[0],c=Wc(this.l,b),d=\"number\"===typeof c?c:c[0],c=\"number\"===typeof c?c:c[1],b=this.l.O(b),e=this.g.O(this.h),f=Qc(this.l,this.i);this.f=Ii(d,c,this.v,e,this.g.G(),b,f,this.j,a,this.s,this.u);this.state=2}Tf(this)};\r\nwl.prototype.load=function(){if(0==this.state){this.state=1;Tf(this);var a=0;this.Va=[];this.a.forEach(function(b){var c=b.T();if(0==c||1==c){a++;var d;d=R(b,\"change\",function(){var c=b.T();if(2==c||3==c||4==c)M(d),a--,0===a&&(this.Va.forEach(M),this.Va=null,this.Tc())},this);this.Va.push(d)}},this);this.a.forEach(function(a){0==a.T()&&a.load()});0===a&&K.setTimeout(this.Tc.bind(this),0)}};function xl(a,b){var c=/\\{z\\}/g,d=/\\{x\\}/g,e=/\\{y\\}/g,f=/\\{-y\\}/g;return function(g){if(g)return a.replace(c,g[0].toString()).replace(d,g[1].toString()).replace(e,function(){return(-g[2]-1).toString()}).replace(f,function(){var a=b.a?b.a[g[0]]:null;L(a,55);return(a.L-a.J+1+g[2]).toString()})}}function yl(a,b){for(var c=a.length,d=Array(c),e=0;e<c;++e)d[e]=xl(a[e],b);return zl(d)}function zl(a){return 1===a.length?a[0]:function(b,c,d){if(b)return a[la((b[1]<<b[0])+b[2],a.length)](b,c,d)}}\r\nfunction Al(){};function Bl(a){Xj.call(this);this.g=void 0!==a?a:2048}B(Bl,Xj);function Cl(a){return a.f>a.g}Bl.prototype.Oa=function(a){for(var b,c;Cl(this);){b=this.b.Na;c=b.V[0].toString();var d;if(d=c in a)b=b.V,d=Hc(a[c],b[1],b[2]);if(d)break;else Da(this.pop())}};function Dl(a){vf.call(this,{attributions:a.attributions,extent:a.extent,logo:a.logo,projection:a.projection,state:a.state,wrapX:a.wrapX});this.u=void 0!==a.opaque?a.opaque:!1;this.aa=void 0!==a.tilePixelRatio?a.tilePixelRatio:1;this.tileGrid=void 0!==a.tileGrid?a.tileGrid:null;this.a=new Bl(a.cacheSize);this.g=[0,0];this.Ia=\"\"}B(Dl,vf);n=Dl.prototype;n.Mc=function(){return Cl(this.a)};n.Oa=function(a,b){var c=this.fb(a);c&&c.Oa(b)};\r\nfunction Sh(a,b,c,d,e){b=a.fb(b);if(!b)return!1;for(var f=!0,g,h,k=d.H;k<=d.I;++k)for(var l=d.J;l<=d.L;++l)g=a.ob(c,k,l),h=!1,Uj(b,g)&&(g=b.get(g),(h=2===g.T())&&(h=!1!==e(g))),h||(f=!1);return f}n.nb=function(){return 0};n.getKey=function(){return this.Ia};n.ob=function(a,b,c){return a+\"/\"+b+\"/\"+c};n.Qb=function(){return this.u};n.sa=function(a){return this.tileGrid?this.tileGrid:Zc(a)};n.fb=function(a){var b=this.ia();return b&&!Tb(b,a)?null:this.a};n.pb=function(){return this.aa};\r\nfunction Ni(a,b,c,d){d=a.sa(d);c=a.pb(c);b=Lc(Wc(d,b),a.g);return 1==c?b:Kc(b,c,a.g)}function El(a,b,c){var d=void 0!==c?c:a.ia();c=a.sa(d);if(a.i&&d.c){var e=b;b=e[0];a=Vc(c,e);var d=$c(d),f=a[0],g=a[1];d[0]<=f&&f<=d[2]&&d[1]<=g&&g<=d[3]?b=e:(e=qb(d),a[0]+=e*Math.ceil((d[0]-a[0])/e),b=Yc(c,a,b))}d=b[0];a=b[1];e=b[2];c=c.minZoom>d||d>c.maxZoom?!1:(c=(f=c.G())?Rc(c,f,d):c.a?c.a[d]:null)?Hc(c,a,e):!0;return c?b:null}n.Ja=function(){this.a.clear();this.w()};n.Vc=I;\r\nfunction Fl(a,b){T.call(this,a);this.tile=b}B(Fl,T);function Gl(a){Dl.call(this,{attributions:a.attributions,cacheSize:a.cacheSize,extent:a.extent,logo:a.logo,opaque:a.opaque,projection:a.projection,state:a.state,tileGrid:a.tileGrid,tilePixelRatio:a.tilePixelRatio,wrapX:a.wrapX});this.tileLoadFunction=a.tileLoadFunction;this.tileUrlFunction=this.f?this.f.bind(this):Al;this.urls=null;if(a.urls){var b=a.urls;this.urls=b;var c=b.join(\"\\n\");Hl(this,this.f?this.f.bind(this):yl(b,this.tileGrid),c)}else a.url&&this.s(a.url);a.tileUrlFunction&&Hl(this,a.tileUrlFunction)}\r\nB(Gl,Dl);Gl.prototype.v=function(a){a=a.target;switch(a.T()){case 1:U(this,new Fl(\"tileloadstart\",a));break;case 2:U(this,new Fl(\"tileloadend\",a));break;case 3:U(this,new Fl(\"tileloaderror\",a))}};function Hl(a,b,c){a.tileUrlFunction=b;\"undefined\"!==typeof c?a.Ia!==c&&(a.Ia=c,a.w()):a.w()}\r\nGl.prototype.s=function(a){var b=[],c=/\\{(\\d)-(\\d)\\}/.exec(a)||/\\{([a-z])-([a-z])\\}/.exec(a);if(c){var d=c[2].charCodeAt(0),e;for(e=c[1].charCodeAt(0);e<=d;++e)b.push(a.replace(c[0],String.fromCharCode(e)))}else b.push(a);b=this.urls=b;Hl(this,this.f?this.f.bind(this):yl(b,this.tileGrid),a)};Gl.prototype.Vc=function(a,b,c){a=this.ob(a,b,c);Uj(this.a,a)&&this.a.get(a)};function Il(a){Gl.call(this,{attributions:a.attributions,cacheSize:a.cacheSize,extent:a.extent,logo:a.logo,opaque:a.opaque,projection:a.projection,state:a.state,tileGrid:a.tileGrid,tileLoadFunction:a.tileLoadFunction?a.tileLoadFunction:Jl,tilePixelRatio:a.tilePixelRatio,tileUrlFunction:a.tileUrlFunction,url:a.url,urls:a.urls,wrapX:a.wrapX});this.crossOrigin=void 0!==a.crossOrigin?a.crossOrigin:null;this.tileClass=void 0!==a.tileClass?a.tileClass:Ok;this.c={};this.j={};this.W=a.reprojectionErrorThreshold}\r\nB(Il,Gl);n=Il.prototype;n.Mc=function(){if(Cl(this.a))return!0;for(var a in this.c)if(Cl(this.c[a]))return!0;return!1};n.Oa=function(a,b){var c=this.fb(a);this.a.Oa(this.a==c?b:{});for(var d in this.c){var e=this.c[d];e.Oa(e==c?b:{})}};n.nb=function(a){return this.ia()&&a&&Tb(this.ia(),a),0};n.Qb=function(a){return this.ia()&&a&&!Tb(this.ia(),a)?!1:Gl.prototype.Qb.call(this,a)};\r\nn.sa=function(a){var b=this.ia();return!this.tileGrid||b&&!Tb(b,a)?(b=J(a).toString(),b in this.j||(this.j[b]=Zc(a)),this.j[b]):this.tileGrid};n.fb=function(a){var b=this.ia();if(!b||Tb(b,a))return this.a;a=J(a).toString();a in this.c||(this.c[a]=new Bl);return this.c[a]};function Kl(a,b,c,d,e,f,g){b=[b,c,d];e=(c=El(a,b,f))?a.tileUrlFunction(c,e,f):void 0;e=new a.tileClass(b,void 0!==e?0:4,void 0!==e?e:\"\",a.crossOrigin,a.tileLoadFunction);e.key=g;R(e,\"change\",a.v,a);return e}\r\nfunction $h(a,b,c,d,e,f){if(a.ia()&&f&&!Tb(a.ia(),f)){var g=a.fb(f);d=[b,c,d];var h;b=a.ob.apply(a,d);Uj(g,b)&&(h=g.get(b));c=a.getKey();if(h&&h.key==c)return h;var k=a.ia(),l=a.sa(k),m=a.sa(f),p=El(a,d,f);a=new wl(k,l,f,m,d,p,a.pb(e),0,function(a,b,c,d){return Ll(this,a,b,c,d,k)}.bind(a),a.W,!1);a.key=c;h?(a.b=h,Zj(g,b,a)):g.set(b,a);return a}return Ll(a,b,c,d,e,f)}\r\nfunction Ll(a,b,c,d,e,f){var g,h=a.ob(b,c,d),k=a.getKey();if(Uj(a.a,h)){if(g=a.a.get(h),g.key!=k){var l=g;g.b&&g.b.key==k?(g=g.b,2==l.T()&&(g.b=l)):(g=Kl(a,b,c,d,e,f,k),2==l.T()?g.b=l:l.b&&2==l.b.T()&&(g.b=l.b,l.b=null));g.b&&(g.b.b=null);Zj(a.a,h,g)}}else g=Kl(a,b,c,d,e,f,k),a.a.set(h,g);return g}function Jl(a,b){a.Z().src=b};function Ml(a){a=a||{};var b=void 0!==a.projection?a.projection:\"EPSG:3857\",c;if(void 0!==a.tileGrid)c=a.tileGrid;else{c={extent:$c(b),maxZoom:a.maxZoom,minZoom:a.minZoom,tileSize:a.tileSize};var d={};pa(d,void 0!==c?c:{});void 0===d.extent&&(d.extent=Hb(\"EPSG:3857\").G());d.resolutions=ad(d.extent,d.maxZoom,d.tileSize);delete d.maxZoom;c=new Mc(d)}Il.call(this,{attributions:a.attributions,cacheSize:a.cacheSize,crossOrigin:a.crossOrigin,logo:a.logo,opaque:a.opaque,projection:b,reprojectionErrorThreshold:a.reprojectionErrorThreshold,\r\ntileGrid:c,tileLoadFunction:a.tileLoadFunction,tilePixelRatio:a.tilePixelRatio,tileUrlFunction:a.tileUrlFunction,url:a.url,urls:a.urls,wrapX:void 0!==a.wrapX?a.wrapX:!0})}B(Ml,Il);function Nl(a,b){var c=[];Object.keys(b).forEach(function(a){null!==b[a]&&void 0!==b[a]&&c.push(a+\"=\"+encodeURIComponent(b[a]))});var d=c.join(\"&\");a=a.replace(/[?&]$/,\"\");a=-1===a.indexOf(\"?\")?a+\"?\":a+\"&\";return a+d};function Ol(a){a=a||{};var b;void 0!==a.attributions?b=a.attributions:b=[Pl];Ml.call(this,{attributions:b,cacheSize:a.cacheSize,crossOrigin:void 0!==a.crossOrigin?a.crossOrigin:\"anonymous\",opaque:void 0!==a.opaque?a.opaque:!0,maxZoom:void 0!==a.maxZoom?a.maxZoom:19,reprojectionErrorThreshold:a.reprojectionErrorThreshold,tileLoadFunction:a.tileLoadFunction,url:void 0!==a.url?a.url:\"https://{a-c}.tile.openstreetmap.org/{z}/{x}/{y}.png\",wrapX:a.wrapX})}B(Ol,Ml);var Pl=new bd({html:'© <a href=\"http://www.openstreetmap.org/copyright\">OpenStreetMap</a> contributors.'});function Ql(a){a=a||{};Il.call(this,{attributions:a.attributions,cacheSize:a.cacheSize,crossOrigin:a.crossOrigin,logo:a.logo,projection:a.projection,reprojectionErrorThreshold:a.reprojectionErrorThreshold,tileGrid:a.tileGrid,tileLoadFunction:a.tileLoadFunction,url:a.url,urls:a.urls,wrapX:void 0!==a.wrapX?a.wrapX:!0});this.B=a.params||{};this.ba=db()}B(Ql,Il);Ql.prototype.pb=function(a){return a};\r\nQl.prototype.f=function(a,b,c){var d=this.tileGrid;d||(d=this.sa(c));if(!(d.b.length<=a[0])){var e=Qc(d,a,this.ba),f=Lc(Wc(d,a[0]),this.g);1!=b&&(f=Kc(f,b,this.g));d={F:\"image\",FORMAT:\"PNG32\",TRANSPARENT:!0};pa(d,this.B);var g=this.urls;g?(c=c.ya.split(\":\").pop(),d.SIZE=f[0]+\",\"+f[1],d.BBOX=e.join(\",\"),d.BBOXSR=c,d.IMAGESR=c,d.DPI=Math.round(d.DPI?d.DPI*b:90*b),a=1==g.length?g[0]:g[la((a[1]<<a[0])+a[2],g.length)],b=a.replace(/MapServer\\/?$/,\"MapServer/export\").replace(/ImageServer\\/?$/,\"ImageServer/exportImage\"),\r\nb==a&&L(!1,50),d=Nl(b,d)):d=void 0;return d}};function Rl(a){this.j=this.l=this.f=null;this.i=void 0!==a.fill?a.fill:null;this.M=[0,0];this.b=a.points;this.c=void 0!==a.radius?a.radius:a.radius1;this.g=void 0!==a.radius2?a.radius2:this.c;this.h=void 0!==a.angle?a.angle:0;this.a=void 0!==a.stroke?a.stroke:null;this.D=this.Y=this.u=null;var b=a.atlasManager,c=\"\",d=\"\",e=0,f=null,g,h=0;this.a&&(g=nd(this.a.a),h=this.a.c,void 0===h&&(h=1),f=this.a.b,pe||(f=null),d=this.a.g,void 0===d&&(d=\"round\"),c=this.a.f,void 0===c&&(c=\"round\"),e=this.a.h,void 0===\r\ne&&(e=10));var k=2*(this.c+h)+1,c={strokeStyle:g,jb:h,size:k,lineCap:c,lineDash:f,lineJoin:d,miterLimit:e};if(void 0===b){var l=Md(k,k);this.l=l.canvas;b=k=this.l.width;this.Qc(c,l,0,0);this.i?this.j=this.l:(l=Md(c.size,c.size),this.j=l.canvas,this.Pc(c,l,0,0))}else k=Math.round(k),(d=!this.i)&&(l=this.Pc.bind(this,c)),e=this.a?qh(this.a):\"-\",f=this.i?rh(this.i):\"-\",this.f&&e==this.f[1]&&f==this.f[2]&&this.c==this.f[3]&&this.g==this.f[4]&&this.h==this.f[5]&&this.b==this.f[6]||(this.f=[\"r\"+e+f+(void 0!==\r\nthis.c?this.c.toString():\"-\")+(void 0!==this.g?this.g.toString():\"-\")+(void 0!==this.h?this.h.toString():\"-\")+(void 0!==this.b?this.b.toString():\"-\"),e,f,this.c,this.g,this.h,this.b]),l=b.add(this.f[0],k,k,this.Qc.bind(this,c),l),this.l=l.image,this.M=[l.offsetX,l.offsetY],b=l.image.width,d?this.j=l.Nd:this.j=this.l;this.u=[k/2,k/2];this.Y=[k,k];this.D=[b,b];oh.call(this,{opacity:1,rotateWithView:void 0!==a.rotateWithView?a.rotateWithView:!1,rotation:void 0!==a.rotation?a.rotation:0,scale:1,snapToPixel:void 0!==\r\na.snapToPixel?a.snapToPixel:!0})}B(Rl,oh);n=Rl.prototype;n.eb=function(){return this.u};n.ub=function(){return this.j};n.Z=function(){return this.l};n.Ob=function(){return this.D};n.ib=function(){return 2};n.pa=function(){return this.M};n.Ka=function(){return this.Y};n.Vb=I;n.load=I;n.bc=I;\r\nn.Qc=function(a,b,c,d){var e;b.setTransform(1,0,0,1,0,0);b.translate(c,d);b.beginPath();this.g!==this.c&&(this.b*=2);for(c=0;c<=this.b;c++)d=2*c*Math.PI/this.b-Math.PI/2+this.h,e=0===c%2?this.c:this.g,b.lineTo(a.size/2+e*Math.cos(d),a.size/2+e*Math.sin(d));this.i&&(b.fillStyle=qd(this.i.b),b.fill());this.a&&(b.strokeStyle=a.strokeStyle,b.lineWidth=a.jb,a.lineDash&&b.setLineDash(a.lineDash),b.lineCap=a.lineCap,b.lineJoin=a.lineJoin,b.miterLimit=a.miterLimit,b.stroke());b.closePath()};\r\nn.Pc=function(a,b,c,d){b.setTransform(1,0,0,1,0,0);b.translate(c,d);b.beginPath();this.g!==this.c&&(this.b*=2);var e;for(c=0;c<=this.b;c++)e=2*c*Math.PI/this.b-Math.PI/2+this.h,d=0===c%2?this.c:this.g,b.lineTo(a.size/2+d*Math.cos(e),a.size/2+d*Math.sin(e));b.fillStyle=kh;b.fill();this.a&&(b.strokeStyle=a.strokeStyle,b.lineWidth=a.jb,a.lineDash&&b.setLineDash(a.lineDash),b.stroke());b.closePath()};y(\"ol.format.GeoJSON\",Gk);Gk.prototype.readFeatures=Gk.prototype.a;Gk.prototype.readFeature=Gk.prototype.g;y(\"ol.format.EsriJSON\",Ak);Ak.prototype.readFeatures=Ak.prototype.a;Ak.prototype.readFeature=Ak.prototype.g;y(\"ol.style.Style\",yh);y(\"ol.style.Circle\",ph);y(\"ol.style.RegularShape\",Rl);y(\"ol.style.Fill\",sh);y(\"ol.style.Stroke\",xh);y(\"ol.style.Icon\",Lk);\r\ny(\"ol.style.Text\",function(a){a=a||{};this.b=a.font;this.h=a.rotation;this.g=a.rotateWithView;this.l=a.scale;this.j=a.text;this.C=a.textAlign;this.K=a.textBaseline;this.f=void 0!==a.fill?a.fill:new sh({color:\"#333\"});this.i=void 0!==a.stroke?a.stroke:null;this.a=void 0!==a.offsetX?a.offsetX:0;this.c=void 0!==a.offsetY?a.offsetY:0});y(\"ol.View\",uc);uc.prototype.on=uc.prototype.Y;uc.prototype.getZoom=uc.prototype.rd;uc.prototype.setZoom=uc.prototype.ye;uc.prototype.getCenter=uc.prototype.qa;\r\nuc.prototype.setCenter=uc.prototype.xa;uc.prototype.calculateExtent=uc.prototype.lc;uc.prototype.getProjection=uc.prototype.ia;uc.prototype.fit=uc.prototype.md;y(\"ol.control.defaults\",ee);y(\"ol.layer.Tile\",W);W.prototype.getVisible=W.prototype.gb;W.prototype.setVisible=W.prototype.Cc;W.prototype.getZIndex=W.prototype.Yb;W.prototype.setZIndex=W.prototype.Dc;W.prototype.getOpacity=W.prototype.Xb;W.prototype.setOpacity=W.prototype.Bc;W.prototype.getSource=W.prototype.da;W.prototype.setSource=W.prototype.$b;\r\nW.prototype.on=W.prototype.Y;y(\"ol.layer.Vector\",Y);Y.prototype.getVisible=Y.prototype.gb;Y.prototype.setVisible=Y.prototype.Cc;Y.prototype.getSource=Y.prototype.da;Y.prototype.setStyle=Y.prototype.v;Y.prototype.getZIndex=Y.prototype.Yb;Y.prototype.setZIndex=Y.prototype.Dc;Y.prototype.getOpacity=Y.prototype.Xb;Y.prototype.setOpacity=Y.prototype.Bc;Y.prototype.getSource=Y.prototype.da;Y.prototype.setSource=Y.prototype.$b;Y.prototype.on=Y.prototype.Y;y(\"ol.source.OSM\",Ol);Ol.prototype.refresh=Ol.prototype.Ja;\r\ny(\"ol.source.XYZ\",Ml);Ml.prototype.refresh=Ml.prototype.Ja;Ml.prototype.setUrl=Ml.prototype.s;Ml.prototype.refresh=Ml.prototype.Ja;y(\"ol.Map\",Z);Z.prototype.on=Z.prototype.Y;Z.prototype.getTarget=Z.prototype.Wb;Z.prototype.getTargetElement=Z.prototype.Ra;Z.prototype.getView=Z.prototype.U;Z.prototype.addOverlay=Z.prototype.fd;Z.prototype.addLayer=Z.prototype.ed;Z.prototype.removeLayer=Z.prototype.te;Z.prototype.getEventPixel=Z.prototype.uc;Z.prototype.hasFeatureAtPixel=Z.prototype.Md;\r\nZ.prototype.getSize=Z.prototype.Ta;Z.prototype.updateSize=Z.prototype.yb;Z.prototype.forEachFeatureAtPixel=Z.prototype.od;Z.prototype.addInteraction=Z.prototype.dd;Z.prototype.removeInteraction=Z.prototype.se;Z.prototype.beforeRender=Z.prototype.oa;Z.prototype.addControl=Z.prototype.cd;Z.prototype.once=Z.prototype.hd;Z.prototype.renderSync=Z.prototype.we;y(\"ol.source.Vector\",Xk);Xk.prototype.getFeatures=Xk.prototype.pd;Xk.prototype.getExtent=Xk.prototype.G;Xk.prototype.refresh=Xk.prototype.Ja;\r\nXk.prototype.addFeatures=Xk.prototype.Gb;Xk.prototype.addFeature=Xk.prototype.Fb;Xk.prototype.clear=Xk.prototype.clear;Xk.prototype.forEachFeature=Xk.prototype.nd;Xk.prototype.refresh=Xk.prototype.Ja;y(\"ol.source.TileArcGISRest\",Ql);Ql.prototype.refresh=Ql.prototype.Ja;y(\"ol.Overlay\",gk);gk.prototype.setPosition=gk.prototype.Ac;y(\"ol.Feature\",kk);kk.prototype.getProperties=kk.prototype.Ea;kk.prototype.setProperties=kk.prototype.l;kk.prototype.getGeometry=kk.prototype.S;y(\"ol.geom.Point\",jc);\r\njc.prototype.transform=jc.prototype.transform;jc.prototype.getCoordinates=jc.prototype.za;jc.prototype.getExtent=jc.prototype.G;y(\"ol.geom.Polygon\",qc);qc.prototype.getCoordinates=qc.prototype.za;qc.prototype.getExtent=qc.prototype.G;qc.prototype.transform=qc.prototype.transform;y(\"ol.geom.LineString\",wk);wk.prototype.getCoordinates=wk.prototype.za;wk.prototype.getExtent=wk.prototype.G;wk.prototype.transform=wk.prototype.transform;y(\"ol.proj.Projection\",Eb);Eb.prototype.getCode=Eb.prototype.l;\r\ny(\"ol.interaction.Draw\",el);el.prototype.on=el.prototype.Y;y(\"ol.animation.pan\",Dc);y(\"ol.control.FullScreen\",Xd);\r\n return OPENLAYERS.ol;\r\n}));\r\n\r\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/custom-ol/ol/ol-build.js\n ** module id = 6\n ** module chunks = 1 2 5\n **/","/**\r\n * Created by gavorhes on 11/3/2015.\r\n */\r\n\r\nimport MapMoveCls from './mapMoveCls';\r\n\r\n/**\r\n * The single map move object catch is that it is common to multimap pages\r\n * @type {MapMoveCls}\r\n */\r\n\r\nexport const mapMove = new MapMoveCls();\r\nexport default mapMove;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/olHelpers/mapMove.ts\n **/","import LayerBaseVector from \"../layers/LayerBaseVector\";\r\nimport MapInteractionBase from './mapInteractionBase';\r\nimport * as checkDefined from '../util/checkDefined';\r\nimport provide from '../util/provide';\r\nimport makeGuid from '../util/makeGuid';\r\nimport {ol} from 'custom-ol'\r\nimport Timer = NodeJS.Timer;\r\nconst $ = require('jquery');\r\nconst nm = provide('olHelpers');\r\n\r\n\r\nexport interface extentObject{\r\n minX: number;\r\n minY: number;\r\n maxX: number;\r\n maxY: number;\r\n}\r\n\r\nexport interface mapMoveCallbackFunction{\r\n /**\r\n *\r\n * @param extent extent as predefined object minX, minX, maxX, maxY\r\n * @param zoomLevel current zoom level\r\n * @param evtType the event type 'change:center', 'change:resolution'\r\n */\r\n (extent: extentObject, zoomLevel: number, evtType?: string): any\r\n}\r\n\r\n\r\n/**\r\n * assists with map move interactions, trigger callback functions\r\n * @augments MapInteractionBase\r\n */\r\nexport class MapMoveCls extends MapInteractionBase {\r\n _mapExtent: extentObject;\r\n _zoomLevel: number;\r\n _lookupLayer: Object;\r\n _arrLayer: Array<LayerBaseVector>;\r\n _arrLyrTimeout: Array<Timer>;\r\n _mapMoveCallbackTimeout: Array<Timer>;\r\n _mapMoveCallbackDelays: Array<number>;\r\n _mapMoveCallbacksLookup: Object;\r\n _mapMoveCallbackContext: Array<Object>;\r\n _mapMoveCallbacks: Array<mapMoveCallbackFunction>;\r\n _arrLyrRequest: Array<any>;\r\n\r\n /**\r\n * constructor called implicitly\r\n */\r\n constructor() {\r\n super('map move');\r\n this._arrLyrRequest = [];\r\n this._arrLyrTimeout = [];\r\n this._arrLayer = [];\r\n this._lookupLayer = {};\r\n\r\n this._mapMoveCallbacks = [];\r\n this._mapMoveCallbacksLookup = {};\r\n this._mapMoveCallbackDelays = [];\r\n this._mapMoveCallbackContext = [];\r\n this._mapMoveCallbackTimeout = [];\r\n\r\n this._mapExtent = undefined;\r\n this._zoomLevel = undefined;\r\n\r\n }\r\n\r\n /**\r\n * initialize the map move object\r\n * @param theMap - the ol map\r\n */\r\n init(theMap: ol.Map){\r\n super.init(theMap);\r\n\r\n this.map.getView().on(['change:center', 'change:resolution'], (e) =>{\r\n\r\n this._updateMapExtent();\r\n\r\n // trigger the layer updates\r\n for (let i = 0; i < this._arrLayer.length; i++) {\r\n this.triggerLyrLoad(this._arrLayer[i], i, e.type);\r\n }\r\n\r\n // trigger the map callbacks\r\n for (let i = 0; i < this._mapMoveCallbacks.length; i++) {\r\n this.triggerMoveCallback(i, e.type);\r\n }\r\n });\r\n }\r\n\r\n _updateMapExtent() {\r\n let theView = this.map.getView();\r\n this._zoomLevel = theView.getZoom();\r\n\r\n let extentArray = theView.calculateExtent(this.map.getSize());\r\n\r\n this._mapExtent = {\r\n minX: extentArray[0],\r\n minY: extentArray[1],\r\n maxX: extentArray[2],\r\n maxY: extentArray[3]\r\n };\r\n }\r\n\r\n /**\r\n * return the map extent\r\n */\r\n get mapExtent() {\r\n if (!this._mapExtent) {\r\n this._updateMapExtent();\r\n }\r\n\r\n return this._mapExtent;\r\n }\r\n\r\n /**\r\n * Trigger the layer load\r\n * @param lyr the layer being acted on\r\n * @param index index of the layer\r\n * @param eventType the event triggering the load, as 'change:center' or 'change:resolution'\r\n */\r\n triggerLyrLoad(lyr: LayerBaseVector, index?: number, eventType?: string) {\r\n\r\n if (checkDefined.undefinedOrNull(lyr) && checkDefined.undefinedOrNull(index)) {\r\n throw 'need to define lyr or index';\r\n } else if (checkDefined.definedAndNotNull(lyr) && checkDefined.undefinedOrNull(index)) {\r\n index = this._arrLayer.indexOf(lyr);\r\n } else if (checkDefined.undefinedOrNull(lyr) && checkDefined.definedAndNotNull(index)) {\r\n lyr = this._arrLayer[index];\r\n }\r\n\r\n // clear the timeout\r\n if (this._arrLyrTimeout[index] != null) {\r\n clearTimeout(this._arrLyrTimeout[index]);\r\n this._arrLyrTimeout[index] = null;\r\n }\r\n\r\n // abort if necessary and clear the request\r\n if (this._arrLyrRequest[index] != null && this._arrLyrRequest[index] != 4) {\r\n this._arrLyrRequest[index].abort();\r\n this._arrLyrRequest[index] = null;\r\n }\r\n\r\n // dummy callback used if before load returns false\r\n let callbackFunc = function () {};\r\n\r\n if (lyr.mapMoveBefore(this._zoomLevel, eventType)) {\r\n lyr.mapMoveMakeGetParams(this._mapExtent, this._zoomLevel);\r\n\r\n let _this = this;\r\n\r\n callbackFunc = function () {\r\n function innerFunction(theLayer, theIndex) {\r\n let _innerThis = this;\r\n this._arrLyrRequest[theIndex] = $.get(\r\n theLayer.url,\r\n theLayer.mapMoveParams,\r\n function (d) {\r\n /**\r\n * @type {LayerBaseVector}\r\n */\r\n theLayer.mapMoveCallback(d);\r\n theLayer.loadCallback();\r\n }, 'json').fail(\r\n function (jqXHR) {\r\n if (jqXHR.statusText != 'abort') {\r\n console.log('failed');\r\n console.log(theLayer.url);\r\n console.log(theLayer.mapMoveParams);\r\n }\r\n }).always(\r\n function () {\r\n _innerThis._arrLyrTimeout[theIndex] = null;\r\n _innerThis._arrLyrRequest[theIndex] = null;\r\n });\r\n }\r\n innerFunction.call(_this, lyr, index);\r\n };\r\n } else {\r\n lyr.clear();\r\n }\r\n this._arrLyrTimeout[index] = setTimeout(callbackFunc, lyr.onDemandDelay);\r\n }\r\n\r\n /**\r\n * trigger the map move call back at the given index\r\n * @param ind - the index of the layer\r\n * @param eventType=undefined the event triggering the load as 'change:center' or 'change:resolution'\r\n * @param functionId=undefined the function id used to reference the added callback function\r\n */\r\n triggerMoveCallback(ind: number, eventType?: string, functionId?: string) {\r\n\r\n if (typeof ind == 'undefined' && typeof functionId == 'undefined'){\r\n throw 'either the function index or the id must be defined';\r\n }\r\n\r\n if (typeof ind !== 'number'){\r\n ind = this._mapMoveCallbacks.indexOf(this._mapMoveCallbacksLookup[functionId]);\r\n }\r\n\r\n if (ind < 0){\r\n console.log('function not found');\r\n\r\n return;\r\n }\r\n\r\n // clear the timeout\r\n if (this._mapMoveCallbackTimeout[ind] != null) {\r\n clearTimeout(this._mapMoveCallbackTimeout[ind]);\r\n this._mapMoveCallbackTimeout[ind] = null;\r\n }\r\n\r\n let ctx = this._mapMoveCallbackContext[ind];\r\n let theFunc = this._mapMoveCallbacks[ind];\r\n\r\n let _this = this;\r\n\r\n let f = function () {\r\n if (ctx !== null) {\r\n theFunc.call(ctx, _this._mapExtent, _this._zoomLevel, eventType);\r\n } else {\r\n theFunc(_this._mapExtent, _this._zoomLevel, eventType);\r\n }\r\n };\r\n\r\n this._mapMoveCallbackTimeout[ind] = setTimeout(f, this._mapMoveCallbackDelays[ind]);\r\n }\r\n\r\n /**\r\n * Add a layer to the interaction\r\n * @param lyr - layer to add\r\n * @param triggerOnAdd - if the layer should be loaded on add\r\n */\r\n addVectorLayer(lyr: LayerBaseVector, triggerOnAdd: boolean = true) {\r\n if (this._arrLayer.indexOf(lyr) > -1) {\r\n console.log('already added ' + lyr.name + ' to map move');\r\n\r\n return;\r\n }\r\n this._checkInit();\r\n\r\n this._arrLyrRequest.push(null);\r\n this._arrLyrTimeout.push(null);\r\n this._arrLayer.push(lyr);\r\n this._lookupLayer[lyr.id] = lyr;\r\n\r\n triggerOnAdd = typeof triggerOnAdd == 'boolean' ? triggerOnAdd : true;\r\n\r\n if (triggerOnAdd) {\r\n if (this._mapExtent === undefined) {\r\n this._updateMapExtent();\r\n }\r\n this.triggerLyrLoad(lyr, this._arrLayer.length - 1);\r\n }\r\n }\r\n\r\n\r\n /**\r\n * add a callback to the map move event\r\n * @param func - callback function\r\n * @param context - the context to use for this function\r\n * @param delay=50 the delay before call load\r\n * @param triggerOnAdd if the layer should be loaded on add to mapMove\r\n * @param functionId optional id to reference the function later for outside triggering\r\n */\r\n addCallback(func: mapMoveCallbackFunction, context?: any, delay?: number, triggerOnAdd? : boolean, functionId?: string) {\r\n\r\n if (this._mapMoveCallbacks.indexOf(func) > -1) {\r\n console.log('this function already added to map move');\r\n return;\r\n }\r\n this._checkInit();\r\n if (!functionId){\r\n functionId = makeGuid();\r\n }\r\n\r\n this._mapMoveCallbacks.push(func);\r\n this._mapMoveCallbacksLookup[functionId] = functionId;\r\n this._mapMoveCallbackDelays.push(typeof delay == 'number' ? delay : 50);\r\n this._mapMoveCallbackContext.push(checkDefined.definedAndNotNull(context) ? context : null);\r\n this._mapMoveCallbackTimeout.push(null);\r\n\r\n triggerOnAdd = typeof triggerOnAdd == 'boolean' ? triggerOnAdd : true;\r\n\r\n if (triggerOnAdd) {\r\n if (this._mapExtent === undefined) {\r\n this._updateMapExtent();\r\n }\r\n this.triggerMoveCallback(this._mapMoveCallbacks.length - 1);\r\n }\r\n }\r\n}\r\n\r\nnm.MapMoveCls = MapMoveCls;\r\nexport default MapMoveCls;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/olHelpers/mapMoveCls.ts\n **/","/**\r\n * Created by gavorhes on 12/8/2015.\r\n */\r\nimport provide from '../util/provide';\r\nimport {ol} from 'custom-ol';\r\nconst nm = provide('olHelpers');\r\n\r\n\r\n\r\n/**\r\n * base interaction\r\n */\r\nexport class MapInteractionBase {\r\n _map: ol.Map;\r\n _initialized: boolean;\r\n _subtype: string;\r\n\r\n /**\r\n * map interaction base\r\n * @param subtype - the interaction subtype\r\n */\r\n constructor(subtype: string) {\r\n this._map = null;\r\n this._initialized = false;\r\n this._subtype = subtype;\r\n }\r\n\r\n /**\r\n * base initializer, returns true for already initialized\r\n * @param theMap - the ol Map\r\n * @returns true for already initialized\r\n */\r\n init(theMap: ol.Map){\r\n if (!this._initialized){\r\n this._map = theMap;\r\n this._initialized = true;\r\n }\r\n }\r\n\r\n /**\r\n * get reference to the ol map object\r\n * @returns {ol.Map} the map object\r\n */\r\n get map() {\r\n return this._map;\r\n }\r\n\r\n /**\r\n * get if is initialized\r\n * @returns {boolean} is initialized\r\n */\r\n get initialized() {\r\n return this._initialized;\r\n }\r\n\r\n /**\r\n * Check the initialization status and throw exception if not valid yet\r\n * @protected\r\n */\r\n _checkInit() {\r\n if (!this.initialized) {\r\n let msg = `${this._subtype} object not initialized`;\r\n alert(msg);\r\n console.log(msg);\r\n throw msg;\r\n }\r\n }\r\n\r\n /**\r\n * Check the initialization status and throw exception if not valid yet\r\n */\r\n checkInit(){\r\n this._checkInit();\r\n }\r\n}\r\n\r\nnm.MapInteractionBase = MapInteractionBase;\r\nexport default MapInteractionBase;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/olHelpers/mapInteractionBase.ts\n **/","import provide from './provide';\r\nlet nm = provide('util.checkDefined');\r\n\r\n/**\r\n * check if the input is undefined or null\r\n * @param input - input pointer\r\n * @returns true undefined or null\r\n */\r\nexport function undefinedOrNull (input): boolean{\r\n \"use strict\";\r\n\r\n return (typeof input === 'undefined' || input === null);\r\n}\r\n\r\nnm.undefinedOrNull = undefinedOrNull;\r\n\r\n\r\n/**\r\n * check if the input is defined and not null\r\n * @param input - input pointer\r\n * @returns true defined and not null\r\n */\r\nexport function definedAndNotNull (input: any): boolean{\r\n \"use strict\";\r\n\r\n return !(undefinedOrNull(input));\r\n}\r\n\r\nnm.definedAndNotNull = definedAndNotNull;\r\n\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/util/checkDefined.ts\n **/","/**\r\n * Created by gavorhes on 11/3/2015.\r\n */\r\n\r\nimport provide from './provide';\r\nlet nm = provide('util');\r\n\r\n\r\n/**\r\n * guids are used to uniquely identify groups and features\r\n * @returns {string} a new guid\r\n */\r\nfunction makeGuid() {\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'\r\n .replace(/[xy]/g, function (c) {\r\n let r = Math.random() * 16 | 0, v = c == 'x' ? r : r & 0x3 | 0x8;\r\n\r\n return v.toString(16);\r\n });\r\n\r\n}\r\nnm.makeGuid = makeGuid;\r\nexport default makeGuid;\r\n\r\n\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/util/makeGuid.ts\n **/","/**\r\n * Created by gavorhes on 11/3/2015.\r\n */\r\n\r\nimport MapPopupCls from './mapPopupCls';\r\n\r\n/**\r\n * The single popup object catch is that it is common to multimap pages\r\n * @type {MapPopupCls}\r\n */\r\n\r\nexport const mapPopup = new MapPopupCls() as MapPopupCls;\r\nexport default mapPopup;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/olHelpers/mapPopup.ts\n **/","/**\r\n * Created by gavorhes on 11/3/2015.\r\n */\r\n\r\nimport MapInteractionBase from './mapInteractionBase';\r\nimport propertiesZoomStyle from '../olHelpers/propertiesZoomStyle';\r\nimport provide from '../util/provide';\r\nimport {ol} from 'custom-ol';\r\nimport {LayerBaseVector} from \"../layers/LayerBaseVector\";\r\nimport LayerEsriMapServer from \"../layers/LayerEsriMapServer\";\r\nimport MapEvent = ol.MapEvent;\r\nconst $ = require('jquery');\r\n\r\nconst nm = provide('olHelpers');\r\n\r\nexport interface popupChangedFunction{\r\n ($popContent: JQuery): any;\r\n}\r\n\r\n/**\r\n *\r\n */\r\nexport interface popupCallback{\r\n /**\r\n * Callback function for the popup\r\n * @param featureProperties\r\n * @param jqRef\r\n */\r\n (featureProperties: Object, jqRef?: JQuery): string | boolean;\r\n}\r\n\r\ninterface mapEvent{\r\n coordinate: ol.Coordinate;\r\n pixel: ol.Pixel;\r\n dragging: boolean|any;\r\n originalEvent: Event;\r\n}\r\n\r\n\r\nexport class FeatureLayerProperties {\r\n\r\n feature: ol.Feature;\r\n layer: LayerBaseVector|LayerEsriMapServer;\r\n layerIndex: number;\r\n selectionLayer: ol.layer.Vector;\r\n popupContent: string;\r\n esriLayerName: string;\r\n\r\n /**\r\n *\r\n * @param feature the feature\r\n * @param layer - the layer in the popup\r\n * @param layerIndex - index of the layer\r\n * @param selectionLayer - the ol selection layer\r\n * @param [esriLayerName=undefined] - esri layer name\r\n */\r\n constructor(feature: ol.Feature, layer: LayerBaseVector|LayerEsriMapServer, layerIndex: number, selectionLayer: ol.layer.Vector, esriLayerName?: string) {\r\n this.feature = feature;\r\n this.layer = layer;\r\n this.layerIndex = layerIndex;\r\n this.selectionLayer = selectionLayer;\r\n this.popupContent = '';\r\n this.esriLayerName = typeof esriLayerName == 'string' ? esriLayerName : undefined;\r\n }\r\n\r\n get layerName() {\r\n if (typeof this.esriLayerName == 'string') {\r\n return this.esriLayerName;\r\n } else {\r\n return this.layer.name;\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * map popup class\r\n * @augments MapInteractionBase\r\n */\r\nclass MapPopupCls extends MapInteractionBase {\r\n _popupOpen: boolean;\r\n _passThroughLayerFeatureArray: Array<FeatureLayerProperties>;\r\n _currentPopupIndex: number;\r\n _popupContentLength: number;\r\n _esriMapServiceLayers: Array<LayerEsriMapServer>;\r\n _$popupCloser: JQuery;\r\n _$popupContent: JQuery;\r\n _$popupContainer: JQuery;\r\n _popupOverlay: ol.Overlay;\r\n _arrPopupLayers: Array<LayerBaseVector>;\r\n _popupCoordinate: ol.Coordinate;\r\n _popupChangedFunctions: Array<popupChangedFunction>;\r\n _mapClickFunctions: Array<Function>;\r\n _selectionLayerLookup: Object;\r\n _arrPopupLayerIds: Array<string>;\r\n _arrPopupLayerNames: Array<string>;\r\n _arrPopupOlLayers: Array<ol.layer.Vector>;\r\n _arrPopupContentFunction: Array<popupCallback>;\r\n _selectionLayers: Array<ol.layer.Vector>;\r\n\r\n /**\r\n * Definition for openlayers style function\r\n * @callback olStyleFunction\r\n * ¶m feature the openlayers vector feature\r\n * $param\r\n */\r\n\r\n\r\n\r\n /**\r\n * map popup constructor\r\n */\r\n constructor() {\r\n super('map popup');\r\n this._arrPopupLayerIds = [];\r\n this._arrPopupLayerNames = [];\r\n this._arrPopupLayers = [];\r\n this._arrPopupOlLayers = [];\r\n this._arrPopupContentFunction = [];\r\n this._$popupContainer = undefined;\r\n this._$popupContent = undefined;\r\n this._$popupCloser = undefined;\r\n this._popupOverlay = undefined;\r\n this._selectionLayers = [];\r\n this._selectionLayerLookup = {};\r\n this._mapClickFunctions = [];\r\n\r\n //let a = function($jqueryContent){console.log($jqueryContent)};\r\n //this._popupChangedLookup = {'a': a};\r\n this._popupChangedFunctions = [];\r\n this._esriMapServiceLayers = [];\r\n\r\n this._popupOpen = false;\r\n this._popupCoordinate = null;\r\n\r\n this._passThroughLayerFeatureArray = [];\r\n\r\n this._currentPopupIndex = -1;\r\n this._popupContentLength = 0;\r\n\r\n }\r\n\r\n /**\r\n * map popup initialization\r\n * @param {ol.Map} theMap - the ol map\r\n */\r\n init(theMap: ol.Map) {\r\n super.init(theMap);\r\n\r\n let $map;\r\n let target = this.map.getTarget();\r\n\r\n if(typeof target == 'string'){\r\n $map = $('#' + target);\r\n }\r\n else {\r\n $map = $(target);\r\n }\r\n\r\n $map.append(\r\n '<div class=\"ol-popup\">' +\r\n '<span class=\"ol-popup-closer\">X</span>' +\r\n '<div class=\"popup-content\"></div>' +\r\n '</div>'\r\n );\r\n\r\n this._$popupContainer = $map.find('.ol-popup');\r\n this._$popupContent = $map.find('.popup-content');\r\n this._$popupCloser = $map.find('.ol-popup-closer');\r\n\r\n\r\n this._popupOverlay = new ol.Overlay({element: this._$popupContainer[0], autoPan: true,\r\n autoPanAnimation: {\r\n duration: 250,\r\n source: theMap.getView().getCenter()\r\n }});\r\n\r\n this._map.addOverlay(this._popupOverlay);\r\n\r\n this._$popupCloser.click((evt) => {\r\n this.closePopup();\r\n });\r\n\r\n // display popup on click\r\n this._map.on('singleclick', (evt) => {\r\n\r\n this.closePopup();\r\n this._popupCoordinate = evt['coordinate'];\r\n\r\n // esri map service layers\r\n if (this._esriMapServiceLayers.length > 0) {\r\n let queryParams = {\r\n geometry: evt['coordinate'].join(','),\r\n geometryType: 'esriGeometryPoint',\r\n layers: 'all',\r\n sr: this._map.getView().getProjection().getCode().split(':')[1],\r\n mapExtent: this._map.getView().calculateExtent(this._map.getSize()).join(','),\r\n imageDisplay: this._map.getSize().join(',') + ',96',\r\n returnGeometry: true,\r\n tolerance: 15,\r\n f: 'pjson'\r\n };\r\n\r\n for (let l of this._esriMapServiceLayers) {\r\n l.getPopupInfo(queryParams);\r\n }\r\n }\r\n\r\n let layerFeatureObjectArray = this._featuresAtPixel(evt['pixel']);\r\n\r\n this._passThroughLayerFeatureArray = [];\r\n this._currentPopupIndex = -1;\r\n\r\n for (let i = 0; i < layerFeatureObjectArray.length; i++) {\r\n let featObj = layerFeatureObjectArray[i];\r\n\r\n let props = featObj.feature.getProperties();\r\n\r\n let popupContentResponse = this._arrPopupContentFunction[featObj.layerIndex](props, this._$popupContent);\r\n\r\n //skip if return was false\r\n if (popupContentResponse === false) {\r\n //continue;\r\n } else if (typeof popupContentResponse == 'string') {\r\n featObj.popupContent = popupContentResponse as string;\r\n this._passThroughLayerFeatureArray.push(featObj);\r\n } else {\r\n featObj.selectionLayer.getSource().addFeature(featObj.feature);\r\n }\r\n }\r\n\r\n this._popupContentLength = this._passThroughLayerFeatureArray.length;\r\n\r\n this._currentPopupIndex = -1;\r\n\r\n let popupHtml = '<div class=\"ol-popup-nav\">';\r\n popupHtml += '<span class=\"previous-popup ol-popup-nav-arrow\">◀</span>';\r\n popupHtml += '<span class=\"next-popup ol-popup-nav-arrow\">▶</span>';\r\n popupHtml += `<span class=\"current-popup-item-number\" style=\"font-weight: bold;\"></span>`;\r\n popupHtml += `<span> of </span>`;\r\n popupHtml += `<span class=\"popup-content-length\" style=\"font-weight: bold;\">${this._popupContentLength}</span>`;\r\n popupHtml += `<span> - </span>`;\r\n popupHtml += `<span class=\"current-popup-layer-name\"></span>`;\r\n popupHtml += '</div>';\r\n popupHtml += '<div class=\"ol-popup-inner\">';\r\n\r\n popupHtml += '</div>';\r\n\r\n this._$popupContent.html(popupHtml);\r\n\r\n this._$popupContent.find('.previous-popup').click(() => {\r\n if (this._popupContentLength == 1) {\r\n return;\r\n }\r\n\r\n if (this._currentPopupIndex == 0) {\r\n this._currentPopupIndex = this._popupContentLength - 1;\r\n } else {\r\n this._currentPopupIndex--;\r\n }\r\n this._triggerFeatSelect();\r\n });\r\n\r\n let nextPopup = this._$popupContent.find('.next-popup');\r\n\r\n nextPopup.click(() => {\r\n if (this._popupContentLength == 1 && this._currentPopupIndex > -1) {\r\n return;\r\n }\r\n\r\n if (this._currentPopupIndex == this._popupContentLength - 1) {\r\n this._currentPopupIndex = 0;\r\n } else {\r\n this._currentPopupIndex++;\r\n }\r\n this._triggerFeatSelect();\r\n });\r\n\r\n\r\n if (this._popupContentLength > 0) {\r\n nextPopup.trigger('click');\r\n this._popupOverlay.setPosition(this._popupCoordinate);\r\n this._$popupContent.scrollTop(0);\r\n this._popupOpen = true;\r\n }\r\n });\r\n\r\n //change mouse cursor when over marker\r\n this._map.on('pointermove', (evt) => {\r\n if (evt['dragging']) {\r\n return;\r\n }\r\n let pixel = this.map.getEventPixel(evt['originalEvent']);\r\n let hit = this.map.hasFeatureAtPixel(pixel, (lyrCandidate) => {\r\n for (let olLayer of this._arrPopupOlLayers) {\r\n if (lyrCandidate == olLayer) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n });\r\n let mapElement = this.map.getTargetElement() as HTMLElement;\r\n mapElement.style.cursor = hit ? 'pointer' : '';\r\n });\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * helper to select features\r\n * @private\r\n */\r\n _triggerFeatSelect() {\r\n let $currentPopupItemNumber = this._$popupContent.find('.current-popup-item-number');\r\n let $innerPopup = this._$popupContent.find('.ol-popup-inner');\r\n let $layerNameSpan = this._$popupContent.find('.current-popup-layer-name');\r\n this.clearSelection();\r\n let lyrFeatObj = this._passThroughLayerFeatureArray[this._currentPopupIndex];\r\n $currentPopupItemNumber.html((this._currentPopupIndex + 1).toFixed());\r\n $layerNameSpan.html(lyrFeatObj.layerName);\r\n $innerPopup.html(lyrFeatObj.popupContent);\r\n lyrFeatObj.selectionLayer.getSource().addFeature(lyrFeatObj.feature);\r\n for (let f of this._popupChangedFunctions) {\r\n f(this._$popupContent);\r\n }\r\n }\r\n\r\n\r\n /**\r\n *\r\n * @param feature - the ol feature\r\n * @param {LayerEsriMapServer} lyr - the map server layer\r\n * @param {string} popupContent - popup content\r\n * @param {string} esriName - esri layer name\r\n */\r\n addMapServicePopupContent(feature: ol.Feature, lyr: LayerEsriMapServer, popupContent: string, esriName: string) {\r\n\r\n let featLayerObject = new FeatureLayerProperties(\r\n feature, lyr, this._popupContentLength, this._selectionLayerLookup[lyr.id], esriName\r\n );\r\n featLayerObject.popupContent = popupContent;\r\n\r\n this._passThroughLayerFeatureArray.push(featLayerObject);\r\n this._popupContentLength++;\r\n\r\n $('.popup-content-length').html(this._popupContentLength.toFixed());\r\n\r\n if (!this._popupOpen) {\r\n this._$popupContent.find('.next-popup').trigger('click');\r\n\r\n this._popupOverlay.setPosition(this._popupCoordinate);\r\n this._$popupContent.scrollTop(0);\r\n this._popupOpen = true;\r\n }\r\n }\r\n\r\n /**\r\n *\r\n * @param pixel - the ol pixel\r\n * @returns feature layer properties\r\n * @private\r\n */\r\n _featuresAtPixel(pixel: ol.Pixel): Array<FeatureLayerProperties> {\r\n let layerFeatureObjectArray = [];\r\n\r\n this.map.forEachFeatureAtPixel(pixel, (feature: ol.Feature, layer: ol.layer.Vector) =>{\r\n let lyrIndex = this._arrPopupOlLayers.indexOf(layer);\r\n\r\n if (lyrIndex > -1) {\r\n layerFeatureObjectArray.push(\r\n new FeatureLayerProperties(\r\n feature, this._arrPopupLayers[lyrIndex], lyrIndex, this._selectionLayers[lyrIndex]));\r\n }\r\n });\r\n\r\n return layerFeatureObjectArray;\r\n }\r\n\r\n closePopup() {\r\n this._checkInit();\r\n this._popupOpen = false;\r\n this._popupOverlay.setPosition(undefined);\r\n this._$popupCloser[0].blur();\r\n this.clearSelection();\r\n this._$popupContent.html('');\r\n\r\n return false;\r\n };\r\n\r\n\r\n /**\r\n *\r\n * @param chgFunction - popup change function\r\n */\r\n addPopupChangedFunction(chgFunction: popupChangedFunction) {\r\n this._popupChangedFunctions.push(chgFunction);\r\n }\r\n\r\n /**\r\n *\r\n * @param {LayerBase|*} lyr - the layer being acted on\r\n * @param {object} [selectionStyle={}] the selection style configuration\r\n * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color\r\n * @param {number} [selectionStyle.width=10] the selection width for linear features\r\n * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function\r\n * @returns the new selection layer\r\n * @private\r\n */\r\n _addPopupLayer(lyr, selectionStyle): ol.layer.Vector {\r\n this._checkInit();\r\n\r\n selectionStyle = selectionStyle || {};\r\n selectionStyle.color = selectionStyle.color || 'rgba(255,170,0,0.5)';\r\n selectionStyle.width = selectionStyle.width || 10;\r\n\r\n let theStyle;\r\n\r\n if (selectionStyle.olStyle) {\r\n theStyle = selectionStyle.olStyle;\r\n } else {\r\n theStyle = new ol.style.Style({\r\n stroke: new ol.style.Stroke({\r\n color: selectionStyle.color,\r\n width: selectionStyle.width\r\n }),\r\n image: new ol.style.Circle({\r\n radius: 7,\r\n fill: new ol.style.Fill({color: selectionStyle.color}),\r\n stroke: new ol.style.Stroke({color: selectionStyle.color, width: 1})\r\n }),\r\n fill: new ol.style.Fill({\r\n color: selectionStyle.color\r\n })\r\n });\r\n }\r\n\r\n let selectionLayer = new ol.layer.Vector(\r\n {\r\n source: new ol.source.Vector(),\r\n style: theStyle,\r\n zIndex: 100\r\n }\r\n );\r\n\r\n this._selectionLayers.push(selectionLayer);\r\n this._selectionLayerLookup[lyr.id] = selectionLayer;\r\n this.map.addLayer(selectionLayer);\r\n\r\n return selectionLayer;\r\n }\r\n\r\n\r\n\r\n /**\r\n * Add popup to the map\r\n * @param {LayerBase|*} lyr The layer that the popup with act on\r\n * @param {popupCallback} popupContentFunction - popup content function that makes popup info\r\n * @param {object} [selectionStyle={}] the selection style configuration\r\n * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color\r\n * @param {number} [selectionStyle.width=10] the selection width for linear features\r\n * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function\r\n * @returns {object} a reference to the ol selection layer\r\n */\r\n addVectorPopup(lyr: LayerBaseVector, popupContentFunction: popupCallback,\r\n selectionStyle?: ol.style.Style|Array<ol.style.Style>|ol.style.StyleFunction) {\r\n let selectionLayer = this._addPopupLayer(lyr, selectionStyle);\r\n this._arrPopupLayerIds.push(lyr.id);\r\n this._arrPopupLayerNames.push(lyr.name);\r\n this._arrPopupLayers.push(lyr);\r\n this._arrPopupOlLayers.push(lyr.olLayer);\r\n this._arrPopupContentFunction.push(popupContentFunction);\r\n\r\n return selectionLayer;\r\n };\r\n\r\n\r\n /**\r\n *\r\n * @param {LayerBase} lyr - layer\r\n */\r\n removeVectorPopup(lyr) {\r\n let idx = this._arrPopupLayerIds.indexOf(lyr.id);\r\n\r\n if (idx > -1) {\r\n this._arrPopupLayerIds.splice(idx, 1);\r\n this._arrPopupLayerNames.splice(idx, 1);\r\n this._arrPopupLayers.splice(idx, 1);\r\n this._arrPopupOlLayers.splice(idx, 1);\r\n this._arrPopupContentFunction.splice(idx, 1);\r\n this._selectionLayers.splice(idx, 1);\r\n delete this._selectionLayerLookup[lyr.id];\r\n }\r\n }\r\n\r\n /**\r\n *\r\n * @param {LayerEsriMapServer} lyr - map server layer\r\n * @param {object} [selectionStyle={}] the selection style configuration\r\n * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color\r\n * @param {number} [selectionStyle.width=10] the selection width for linear features\r\n * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function\r\n * @returns {object} a reference to the ol selection layer\r\n */\r\n addMapServicePopup(lyr, selectionStyle?: ol.style.Style|Array<ol.style.Style>|ol.style.StyleFunction) {\r\n let selectionLayer = this._addPopupLayer(lyr, selectionStyle);\r\n this._esriMapServiceLayers.push(lyr);\r\n\r\n return selectionLayer;\r\n }\r\n\r\n clearSelection() {\r\n this._checkInit();\r\n for (let i = 0; i < this._selectionLayers.length; i++) {\r\n this._selectionLayers[i].getSource().clear();\r\n }\r\n for (let f of this._mapClickFunctions) {\r\n f();\r\n }\r\n };\r\n\r\n /**\r\n * Add a function to be called when the map is clicked but before any popups are implemented\r\n * @param {function} func - the map click function\r\n */\r\n addMapClickFunction(func: Function) {\r\n this._mapClickFunctions.push(func);\r\n }\r\n}\r\nnm.MapPopupCls = MapPopupCls;\r\nexport default MapPopupCls;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/olHelpers/mapPopupCls.ts\n **/","/**\r\n * Created by gavorhes on 12/7/2015.\r\n */\r\nimport {LayerBase, LayerBaseOptions} from './LayerBase';\r\nimport * as esriToOl from '../olHelpers/esriToOlStyle';\r\nimport mapPopup from '../olHelpers/mapPopup';\r\nimport provide from '../util/provide';\r\nimport {ol} from 'custom-ol';\r\nconst nm = provide('layers');\r\n\r\nconst $ = require('jquery');\r\n\r\n\r\nexport interface LayerEsriMapServerOptions extends LayerBaseOptions{\r\n addPopup?: boolean;\r\n showLayers?: Array<number>;\r\n}\r\n\r\n/**\r\n * esri mapserver layer\r\n * @augments LayerBase\r\n */\r\nexport class LayerEsriMapServer extends LayerBase {\r\n _esriFormat: ol.format.EsriJSON;\r\n _popupRequest: JQueryXHR;\r\n\r\n /**\r\n * The base layer for all others\r\n * @param {string} url - resource url\r\n * @param {object} [options] - config\r\n * @param {string} [options.id] - layer id\r\n * @param {string} [options.name=Unnamed Layer] - layer name\r\n * @param {number} [options.opacity=1] - opacity\r\n * @param {boolean} [options.visible=true] - default visible\r\n * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28\r\n * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28\r\n * @param {object} [options.params={}] the get parameters to include to retrieve the layer\r\n * @param {number} [options.zIndex=0] the z index for the layer\r\n * @param {function} [options.loadCallback] function to call on load, context this is the layer object\r\n * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed\r\n * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility\r\n * @param {boolean} [options.legendContent] additional content to add to the legend\r\n * @param {boolean} [options.addPopup=false] if a popup should be added\r\n * @param {undefined|Array<number>} [options.showLayers=undefined] if a popup should be added\r\n */\r\n constructor(url, options: LayerEsriMapServerOptions = {}) {\r\n\r\n super(url, options);\r\n this._source = new ol.source.TileArcGISRest(\r\n {\r\n url: this.url == '' ? undefined : this.url,\r\n params: typeof options.showLayers == 'undefined' ? undefined : {layers: 'show:' + options.showLayers.join(',')}\r\n }\r\n );\r\n\r\n this._olLayer = new ol.layer.Tile({\r\n source: this._source,\r\n visible: this.visible,\r\n opacity: this.opacity,\r\n minResolution: this._minResolution,\r\n maxResolution: this._maxResolution,\r\n zIndex: this._zIndex\r\n });\r\n\r\n options.addPopup = typeof options.addPopup == 'boolean' ? options.addPopup : false;\r\n\r\n this._esriFormat = new ol.format.EsriJSON();\r\n this._popupRequest = null;\r\n\r\n this.addLegendContent();\r\n\r\n if (options.addPopup) {\r\n mapPopup.addMapServicePopup(this);\r\n }\r\n }\r\n\r\n /**\r\n * add additional content to the legend\r\n * @param {string} [additionalContent=''] additional content for legend\r\n */\r\n addLegendContent(additionalContent?: string) {\r\n let urlCopy = this.url;\r\n\r\n if (urlCopy[urlCopy.length - 1] !== '/') {\r\n urlCopy += '/';\r\n }\r\n\r\n urlCopy += 'legend?f=pjson&callback=?';\r\n\r\n $.get(urlCopy, {}, (d) => {\r\n let newHtml = esriToOl.makeMapServiceLegend(d);\r\n super.addLegendContent(newHtml);\r\n }, 'json');\r\n }\r\n\r\n\r\n getPopupInfo(queryParams) {\r\n if (!this.visible) {\r\n return;\r\n }\r\n\r\n let urlCopy = this.url;\r\n\r\n if (urlCopy[urlCopy.length - 1] != '/') {\r\n urlCopy += '/';\r\n }\r\n\r\n urlCopy += 'identify?callback=?';\r\n\r\n let _this = this;\r\n\r\n if (this._popupRequest != null) {\r\n this._popupRequest.abort();\r\n }\r\n\r\n this._popupRequest = $.get(urlCopy, queryParams, function (d) {\r\n for (let r of d['results']) {\r\n\r\n let popupHtml = '<table class=\"esri-popup-table\">';\r\n\r\n for (let a in r['attributes']) {\r\n if (r['attributes'].hasOwnProperty(a)) {\r\n let attrVal = r['attributes'][a];\r\n\r\n if (attrVal == null || attrVal.toString().toLowerCase() == 'null') {\r\n continue;\r\n }\r\n\r\n let attr = a;\r\n if (attr.length > 14) {\r\n attr = attr.slice(0, 11) + '...';\r\n }\r\n\r\n popupHtml += `<tr><td>${attr}</td><td>${attrVal}</td></tr>`;\r\n }\r\n }\r\n\r\n popupHtml += '</table>';\r\n\r\n mapPopup.addMapServicePopupContent(_this._esriFormat.readFeature(r), _this, popupHtml, r['layerName']);\r\n }\r\n }, 'json').always(function () {\r\n _this._popupRequest = null;\r\n });\r\n }\r\n\r\n /**\r\n *\r\n * @returns {ol.source.TileArcGISRest} the vector source\r\n */\r\n get source(): ol.source.TileArcGISRest {\r\n return super.getSource() as ol.source.TileArcGISRest;\r\n }\r\n\r\n /**\r\n *\r\n * @returns the ol layer\r\n */\r\n get olLayer(): ol.layer.Tile {\r\n return super.getOlLayer() as ol.layer.Tile;\r\n }\r\n}\r\nnm.LayerEsriMapServer = LayerEsriMapServer;\r\nexport default LayerEsriMapServer;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/layers/LayerEsriMapServer.ts\n **/","import * as zoomResolutionConvert from '../olHelpers/zoomResolutionConvert';\r\nimport provide from '../util/provide';\r\nimport {ol} from 'custom-ol';\r\nimport makeGuid from '../util/makeGuid';\r\nconst nm = provide('layers');\r\nconst $ = require('jquery');\r\n\r\n\r\nexport interface LayerBaseOptions{\r\n id?: string;\r\n name?: string;\r\n opacity?: number;\r\n visible?: boolean;\r\n minZoom?: number;\r\n maxZoom?: number;\r\n params?: any;\r\n zIndex?: number;\r\n loadCallback?: Function;\r\n legendCollapse?: boolean;\r\n legendCheckbox?: boolean;\r\n legendContent?: string;\r\n}\r\n\r\n\r\n/**\r\n * The base layer class\r\n * @abstract\r\n */\r\nexport abstract class LayerBase {\r\n\r\n _legendCheckbox: boolean;\r\n _url: string;\r\n _opacity: number;\r\n _minZoom: number;\r\n _maxZoom: number;\r\n _visible: boolean;\r\n _loaded: boolean;\r\n _zIndex: number;\r\n _legendContent: string;\r\n _params: any;\r\n id: string;\r\n _name: string;\r\n _source: ol.source.Source;\r\n animate: boolean;\r\n _legendCollapse: boolean;\r\n _maxResolution: number;\r\n _minResolution: number;\r\n _$legendDiv: JQuery;\r\n loadCallback: Function;\r\n _olLayer: ol.layer.Layer;\r\n _applyCollapseCalled: boolean;\r\n\r\n\r\n\r\n /**\r\n * The base layer for all others\r\n * @param {string} url - url for source\r\n * @param {object} options - config\r\n * @param {string} [options.id=makeGuid()] - layer id\r\n * @param {string} [options.name=Unnamed Layer] - layer name\r\n * @param {number} [options.opacity=1] - opacity\r\n * @param {boolean} [options.visible=true] - default visible\r\n * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28\r\n * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28\r\n * @param {object} [options.params={}] - the get parameters to include to retrieve the layer\r\n * @param {number} [options.zIndex=0] - the z index for the layer\r\n * @param {function} [options.loadCallback] - function to call on load, context this is the layer object\r\n * @param {boolean} [options.legendCollapse=false] - if the legend item should be initially collapsed\r\n * @param {boolean} [options.legendCheckbox=true] - if the legend item should have a checkbox for visibility\r\n * @param {boolean} [options.legendContent=undefined] - additional content to add to the legend\r\n */\r\n constructor(url: string, options: LayerBaseOptions = {}) {\r\n options = options || {} as LayerBaseOptions;\r\n\r\n if (typeof url !== 'string') {\r\n throw 'Invalid URL';\r\n }\r\n this._url = url;\r\n\r\n\r\n this._params = typeof options.params == 'object' ? options.params : {};\r\n this._legendCollapse = typeof options.legendCollapse == 'boolean' ? options.legendCollapse : false;\r\n this._legendCheckbox = typeof options.legendCheckbox == 'boolean' ? options.legendCheckbox : true;\r\n\r\n this.id = options.id || makeGuid();\r\n this._name = options.name || 'Unnamed Layer';\r\n this.animate = false;\r\n this._opacity = typeof options.opacity == 'number' ? options.opacity : 1;\r\n\r\n if (this._opacity > 1) {\r\n this._opacity = 1;\r\n } else if (this._opacity < 0) {\r\n this._opacity = 0;\r\n }\r\n\r\n this._visible = typeof options.visible === 'boolean' ? options.visible : true;\r\n\r\n this._source = undefined;\r\n\r\n /**\r\n *\r\n * @protected\r\n */\r\n this._olLayer = undefined;\r\n this._loaded = false;\r\n\r\n this._maxResolution = zoomResolutionConvert.zoomToResolution(options.minZoom);\r\n if (typeof this._maxResolution !== 'undefined') {\r\n this._maxResolution += 0.00001;\r\n }\r\n this._minResolution = zoomResolutionConvert.zoomToResolution(options.maxZoom);\r\n\r\n this._minZoom = typeof options.minZoom == 'number' ? options.minZoom : undefined;\r\n this._maxZoom = typeof options.maxZoom == 'number' ? options.maxZoom : undefined;\r\n this._zIndex = typeof options.zIndex == 'number' ? options.zIndex : 0;\r\n\r\n this.loadCallback = typeof options.loadCallback == 'function' ? options.loadCallback : function () {\r\n };\r\n\r\n\r\n this._legendContent = '';\r\n\r\n if (this._legendCheckbox) {\r\n this._legendContent += `<input type=\"checkbox\" ${this.visible ? 'checked' : ''} ` +\r\n `class=\"legend-check\" id=\"${this.id}-legend-layer-check\"><span></span>`;\r\n this._legendContent += `<label for=\"${this.id}-legend-layer-check\" class=\"legend-layer-name\">${this.name}</label>`;\r\n } else {\r\n this._legendContent += `<label class=\"legend-layer-name\">${this.name}</label>`;\r\n }\r\n\r\n this._$legendDiv = null;\r\n this._applyCollapseCalled = false;\r\n this._addLegendContent(typeof options.legendContent === 'string' ? options.legendContent : undefined);\r\n }\r\n\r\n /**\r\n * base load function, sets _loaded = true if it is not already\r\n * @protected\r\n * @returns {boolean} if already loaded\r\n */\r\n _load() {\r\n if (this.loaded == true) {\r\n return true;\r\n } else {\r\n this._loaded = true;\r\n\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Get the legend html, be sure to only add to the DOM once\r\n * @returns {string} html for layer wrapped in a div\r\n */\r\n getLegendDiv() {\r\n return `<div class=\"legend-layer-div\" id=\"${this.id}-legend-layer-div\">${this._legendContent}</div>`;\r\n }\r\n\r\n /**\r\n *\r\n * @param {string|undefined} additionalContent - additional content to add to legend\r\n * @private\r\n */\r\n _addLegendContent(additionalContent) {\r\n additionalContent = typeof additionalContent == 'string' ? additionalContent : '';\r\n\r\n let addCollapse = additionalContent.indexOf('<ul>') > -1;\r\n\r\n if (addCollapse) {\r\n additionalContent = '<span class=\"legend-items-expander\" title=\"Expand/Collapse\">▼</span>' + additionalContent;\r\n }\r\n\r\n this._legendContent += additionalContent;\r\n\r\n this._$legendDiv = $(`#${this.id}-legend-layer-div`);\r\n\r\n if (this._$legendDiv.length > 0) {\r\n this._$legendDiv.append(additionalContent);\r\n this.applyCollapse();\r\n }\r\n }\r\n\r\n /**\r\n * add additional content to the legend\r\n * @param {string} [additionalContent=] - additonal content to add\r\n */\r\n addLegendContent(additionalContent) {\r\n this._addLegendContent(additionalContent);\r\n }\r\n\r\n applyCollapse() {\r\n if (this._applyCollapseCalled) {\r\n console.log('collapse already applied');\r\n\r\n return undefined;\r\n }\r\n\r\n this._$legendDiv = $(`#${this.id}-legend-layer-div`);\r\n\r\n if (this._$legendDiv.length > 0) {\r\n\r\n let $expander = this._$legendDiv.find('.legend-items-expander');\r\n\r\n if ($expander.length > 0) {\r\n this._applyCollapseCalled = true;\r\n\r\n $expander.click(function () {\r\n let $this = $(this);\r\n\r\n $this.siblings('ul').slideToggle();\r\n\r\n if ($this.hasClass('legend-layer-group-collapsed')) {\r\n $this.removeClass('legend-layer-group-collapsed');\r\n $this.html('▼');\r\n } else {\r\n $this.addClass('legend-layer-group-collapsed');\r\n $this.html('▶');\r\n }\r\n });\r\n\r\n if (this._legendCollapse) {\r\n $expander.trigger('click');\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * trick to refresh the layer\r\n */\r\n refresh() {\r\n if (this.source) {\r\n this.source.refresh();\r\n }\r\n }\r\n\r\n\r\n /**\r\n * get the legend content\r\n * @type {string}\r\n */\r\n get legendContent() {\r\n return this._legendContent;\r\n }\r\n\r\n /**\r\n * set the legend content directly\r\n * @param {string} newVal - new content\r\n * @protected\r\n */\r\n set legendContent(newVal) {\r\n this._legendContent = newVal;\r\n }\r\n\r\n /**\r\n * get the map get params\r\n * @type {object}\r\n */\r\n get params() {\r\n return this._params;\r\n }\r\n\r\n /**\r\n * set the map get params\r\n * @param {object} newParams - new get params\r\n * @protected\r\n */\r\n set params(newParams) {\r\n this._params = newParams;\r\n }\r\n\r\n /**\r\n * get the minimum resolution\r\n * @type {number|*}\r\n */\r\n get minResolution() {\r\n return this._minResolution;\r\n }\r\n\r\n /**\r\n * get the maximum resolution\r\n * @type {number|*}\r\n */\r\n get maxResolution() {\r\n return this._maxResolution;\r\n }\r\n\r\n /**\r\n * get min zoom\r\n * @type {number|*}\r\n */\r\n get minZoom() {\r\n return this._minZoom;\r\n }\r\n\r\n /**\r\n * get max zoom\r\n * @type {number|*}\r\n */\r\n get maxZoom() {\r\n return this._maxZoom;\r\n }\r\n\r\n /**\r\n * get the url\r\n * @type {string}\r\n */\r\n get url() {\r\n return this._url;\r\n }\r\n\r\n /**\r\n * Get the layer visibility\r\n * @type {boolean}\r\n */\r\n get visible(): boolean {\r\n return this._visible;\r\n }\r\n\r\n /**\r\n * set the visibility\r\n * @param visibility\r\n */\r\n set visible(visibility: boolean) {\r\n this.setVisible(visibility);\r\n }\r\n\r\n protected setVisible(visibility: boolean) {\r\n this._visible = visibility;\r\n if (this.olLayer) {\r\n this.olLayer.setVisible(this._visible);\r\n if (visibility && !this._loaded) {\r\n this._load();\r\n }\r\n }\r\n }\r\n\r\n\r\n /**\r\n * Get the layer opacity\r\n * @type {number}\r\n */\r\n get opacity() {\r\n return this._opacity;\r\n }\r\n\r\n /**\r\n * Set the layer opacity\r\n * @param {number} opacity - layer opacity\r\n */\r\n set opacity(opacity) {\r\n this._opacity = opacity;\r\n if (this.olLayer) {\r\n this.olLayer.setOpacity(this._opacity);\r\n }\r\n }\r\n\r\n /**\r\n * Get the layer name\r\n * @type {string}\r\n */\r\n get name() {\r\n return this._name;\r\n }\r\n\r\n /**\r\n * set the layer name\r\n * @param {string} newName - the new name\r\n */\r\n set name(newName) {\r\n this._name = newName;\r\n }\r\n\r\n /**\r\n * Check if the layer is loaded\r\n * @type {boolean}\r\n */\r\n get loaded() {\r\n return this._loaded;\r\n }\r\n\r\n /**\r\n * get the layer source\r\n * @type {*}\r\n */\r\n get source(): ol.source.Source {\r\n return this.getSource();\r\n }\r\n\r\n\r\n protected getSource(): ol.source.Source{\r\n return this._source;\r\n }\r\n\r\n /**\r\n * get the z index\r\n */\r\n get zIndex(): number {\r\n return this._zIndex;\r\n }\r\n\r\n /**\r\n * set the z index\r\n */\r\n set zIndex(newZ: number) {\r\n this._zIndex = newZ;\r\n }\r\n\r\n protected setZIndex(newZ: number){\r\n\r\n }\r\n\r\n /**\r\n * the the ol layer\r\n */\r\n get olLayer(): ol.layer.Layer {\r\n return this.getOlLayer();\r\n }\r\n\r\n protected getOlLayer(): ol.layer.Layer{\r\n return this._olLayer;\r\n }\r\n}\r\n\r\nnm.LayerBase = LayerBase;\r\nexport default LayerBase;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/layers/LayerBase.ts\n **/","/**\r\n * Created by gavorhes on 12/14/2015.\r\n */\r\n\r\nimport provide from '../util/provide';\r\nconst nm = provide('olHelpers.zoomResolutionConvert');\r\n\r\nlet _zoomResLookup = [\r\n 156543.03392804097, //0\r\n 78271.51696402048, //1\r\n 39135.75848201024, //2\r\n 19567.87924100512, //3\r\n 9783.93962050256, //4\r\n 4891.96981025128, //5\r\n 2445.98490512564, //6\r\n 1222.99245256282, //7\r\n 611.49622628141, //8\r\n 305.748113140705, //9\r\n 152.8740565703525, //10\r\n 76.43702828517625, //11\r\n 38.21851414258813, //12\r\n 19.109257071294063, //13\r\n 9.554628535647032, //14\r\n 4.777314267823516, //15\r\n 2.388657133911758, //16\r\n 1.194328566955879, //17\r\n 0.5971642834779395, //18\r\n 0.29858214173896974, //19\r\n 0.14929107086948487, //20\r\n 0.07464553543474244, //21\r\n 0.03732276771737122, //22\r\n 0.01866138385868561, //23\r\n 0.009330691929342804, //24\r\n 0.004665345964671402, //25\r\n 0.002332672982335701, //26\r\n 0.0011663364911678506, //27\r\n 0.0005831682455839253 //28\r\n];\r\n\r\n/**\r\n * Get the resolution given the zoom level\r\n * @param {number} zoomLevel - the zoom level\r\n * @returns {number|*} the map resolution\r\n */\r\nexport function zoomToResolution(zoomLevel) {\r\n \"use strict\";\r\n\r\n if (typeof zoomLevel == 'number') {\r\n if (zoomLevel % 1 === 0 && zoomLevel >= 0 && zoomLevel <= 28) {\r\n return _zoomResLookup[zoomLevel];\r\n } else {\r\n console.log(`invalid zoom level provided: ${zoomLevel}`);\r\n\r\n return undefined;\r\n }\r\n } else {\r\n return undefined;\r\n }\r\n}\r\nnm.zoomToResolution = zoomToResolution;\r\n\r\n\r\n/**\r\n * Get resolution from the zoom level\r\n * @param {number} resolution - the resolution\r\n * @returns {number|*} the zoom level\r\n */\r\nexport function resolutionToZoom(resolution){\r\n for (let i = 0; i < _zoomResLookup.length; i++){\r\n if (resolution >= _zoomResLookup[i] ){\r\n return i;\r\n }\r\n }\r\n\r\n return 0;\r\n}\r\n\r\nnm.resolutionToZoom = resolutionToZoom;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/olHelpers/zoomResolutionConvert.ts\n **/","/**\r\n * Created by gavorhes on 1/4/2016.\r\n */\r\nimport provide from '../util/provide';\r\nimport {ol} from 'custom-ol';\r\nconst nm = provide('olHelpers.esriToOlStyle');\r\n\r\n/**\r\n * This callback is displayed as part of the Requester class.\r\n * @callback styleFunc\r\n * @param {ol.Feature} feat - openlayers feature\r\n * @param {number} resolution - map resolution\r\n */\r\n\r\n/**\r\n *\r\n * @param {Array<number>} colorArray - input color array\r\n * @param {number} opacity - the opacity 0 to 1\r\n * @returns {string} rgba string\r\n * @private\r\n */\r\nfunction _colorArrayToRgba(colorArray, opacity) {\r\n \"use strict\";\r\n\r\n return `rgba(${colorArray[0]},${colorArray[1]},${colorArray[2]},${opacity})`;\r\n}\r\n\r\n/**\r\n * escape html charcters\r\n * @param {string} str - input string\r\n * @returns {string} escaped string\r\n */\r\nfunction htmlEscape(str) {\r\n return String(str)\r\n .replace(/&/g, '&')\r\n .replace(/\"/g, '"')\r\n .replace(/'/g, ''')\r\n .replace(/</g, '<')\r\n .replace(/>/g, '>');\r\n}\r\n\r\nnm.htmlEscape = htmlEscape;\r\n\r\n\r\nexport interface EsriResponse{\r\n drawingInfo: {\r\n renderer: EsriRenderer\r\n },\r\n geometryType: string\r\n}\r\n\r\nexport interface EsriRenderer{\r\n type: string;\r\n symbol: EsriSymbol;\r\n uniqueValueInfos: Array<{label: string, value: any, symbol: EsriSymbol}>;\r\n}\r\n\r\nexport interface EsriSymbol{\r\n size: number;\r\n type: string;\r\n outline:{\r\n color: string;\r\n width: number;\r\n },\r\n color: string;\r\n width: number;\r\n}\r\n\r\n\r\nclass CommonSymbol {\r\n legendHtml: string;\r\n opacity: number;\r\n symbolObj: EsriSymbol;\r\n olStyle: ol.style.Style|Array<ol.style.Style>|ol.style.StyleFunction;\r\n\r\n /**\r\n *\r\n * @param symbolObj\r\n * @param {number} opacity\r\n */\r\n constructor(symbolObj: EsriSymbol, opacity: number) {\r\n this.symbolObj = symbolObj;\r\n this.opacity = opacity;\r\n this.olStyle = undefined;\r\n this.legendHtml = '';\r\n }\r\n}\r\n\r\ninterface ICommonSymbol{\r\n new (symbolObj: EsriSymbol, opacity: number): CommonSymbol\r\n}\r\n\r\n\r\nclass PointSymbol extends CommonSymbol {\r\n constructor(symbolObj: EsriSymbol, opacity: number) {\r\n super(symbolObj, opacity);\r\n switch (this.symbolObj.type) {\r\n case 'esriSMS':\r\n let innerColor = _colorArrayToRgba(this.symbolObj.color, this.opacity);\r\n let outerColor = _colorArrayToRgba(this.symbolObj.outline.color, this.opacity);\r\n let outlineWidth = this.symbolObj.outline.width;\r\n let radius = this.symbolObj.size;\r\n\r\n\r\n this.olStyle = new ol.style.Style({\r\n image: new ol.style.Circle({\r\n radius: radius,\r\n fill: new ol.style.Fill({\r\n color: innerColor\r\n }),\r\n stroke: new ol.style.Stroke({color: outerColor, width: outlineWidth})\r\n })\r\n });\r\n this.legendHtml = `<span class=\"legend-layer-icon\" style=\"color: ${innerColor}\">●</span>`;\r\n break;\r\n case 'esriPMS':\r\n this.olStyle = new ol.style.Style({\r\n image: new ol.style.Icon({src: `data:image/png;base64,${this.symbolObj['imageData']}`})\r\n });\r\n this.legendHtml = `<img class=\"legend-layer-icon\" height=\"17\" src=\"data:image/png;base64,${this.symbolObj['imageData']}\">`;\r\n break;\r\n default:\r\n console.log(this.symbolObj);\r\n alert('Point symbol does not handle symbol type: ' + this.symbolObj['type']);\r\n }\r\n }\r\n}\r\n\r\nclass LineSymbol extends CommonSymbol {\r\n constructor(symbolObj: EsriSymbol, opacity: number) {\r\n super(symbolObj, opacity);\r\n switch (this.symbolObj.type) {\r\n case 'esriSLS':\r\n let innerColor = _colorArrayToRgba(this.symbolObj.color, this.opacity);\r\n let lineWidth = this.symbolObj.width;\r\n\r\n this.olStyle = new ol.style.Style({\r\n stroke: new ol.style.Stroke({\r\n color: innerColor,\r\n //lineDash: [4],\r\n width: lineWidth\r\n })\r\n });\r\n\r\n this.legendHtml = `<span class=\"legend-layer-icon\" `;\r\n this.legendHtml += `style=\"`;\r\n this.legendHtml += `background-color: ${innerColor};`;\r\n this.legendHtml += `width: 40px;`;\r\n this.legendHtml += `height: 4px;`;\r\n this.legendHtml += `position: relative;`;\r\n this.legendHtml += `display: inline-block;`;\r\n this.legendHtml += `top: -1px;`;\r\n this.legendHtml += `\"></span>`;\r\n break;\r\n default:\r\n console.log(this.symbolObj);\r\n alert('Line symbol does not handle symbol type: ' + this.symbolObj['type']);\r\n }\r\n }\r\n}\r\n\r\nclass PolygonSymbol extends CommonSymbol {\r\n constructor(symbolObj: EsriSymbol, opacity: number) {\r\n super(symbolObj, opacity);\r\n switch (this.symbolObj['type']) {\r\n case 'esriSFS':\r\n let innerColor = _colorArrayToRgba(this.symbolObj.color, this.opacity);\r\n let outerColor = _colorArrayToRgba(this.symbolObj.outline.color, this.opacity);\r\n let outlineWidth = this.symbolObj.outline.width;\r\n\r\n this.olStyle = new ol.style.Style({\r\n stroke: new ol.style.Stroke({\r\n color: outerColor,\r\n //lineDash: [4],\r\n width: outlineWidth\r\n }),\r\n fill: new ol.style.Fill({\r\n color: innerColor\r\n })\r\n });\r\n\r\n this.legendHtml = `<span class=\"legend-layer-icon\" `;\r\n this.legendHtml += `style=\"`;\r\n this.legendHtml += `background-color: ${innerColor};`;\r\n this.legendHtml += `border: solid ${outerColor} 1px;`;\r\n this.legendHtml += `width: 40px;`;\r\n this.legendHtml += `height: 9px;`;\r\n this.legendHtml += `position: relative;`;\r\n this.legendHtml += `display: inline-block;`;\r\n this.legendHtml += `top: 2px;`;\r\n this.legendHtml += `\"></span>`;\r\n break;\r\n\r\n default:\r\n console.log(this.symbolObj);\r\n alert('Polygon symbol does handle symbol type: ' + this.symbolObj['type']);\r\n }\r\n }\r\n}\r\n\r\nclass SymbolGenerator {\r\n opacity: number;\r\n renderer: EsriRenderer;\r\n legendHtml: string;\r\n olStyle: ol.style.Style|Array<ol.style.Style>|ol.style.StyleFunction;\r\n\r\n constructor(esriResponse: EsriResponse) {\r\n this.opacity = (100 - (esriResponse['drawingInfo']['transparency'] || 0)) / 100;\r\n this.renderer = esriResponse.drawingInfo.renderer;\r\n this.olStyle = undefined;\r\n this.legendHtml = '';\r\n }\r\n}\r\n\r\nclass SingleSymbol extends SymbolGenerator {\r\n symbol: EsriSymbol;\r\n /**\r\n *\r\n * @param {object} esriResponse - layer info\r\n * @param {Constructor|*} SymbolClass - the symbol class to use\r\n */\r\n constructor(esriResponse, SymbolClass: ICommonSymbol) {\r\n super(esriResponse);\r\n this.symbol = this.renderer.symbol;\r\n let symbolObj = new SymbolClass(this.symbol, this.opacity);\r\n this.olStyle = symbolObj.olStyle;\r\n this.legendHtml = symbolObj.legendHtml;\r\n }\r\n}\r\n\r\nclass UniqueValueSymbol extends SymbolGenerator {\r\n\r\n propertyName: string;\r\n defaultSymbol: EsriSymbol;\r\n defaultStyle: ol.style.Style|Array<ol.style.Style>|ol.style.StyleFunction;\r\n defaultLabelHtml: string;\r\n labelArray: Array<string>;\r\n legendArray: Array<string>;\r\n propertyStyleLookup: Object;\r\n valueArray: Array<any>;\r\n uniqueValueInfos: Array<{label: string, value: any, symbol: EsriSymbol}>;\r\n\r\n /**\r\n *\r\n * @param {object} esriResponse - layer info\r\n * @param {Constructor|*} SymbolClass - the Symbol class definition\r\n */\r\n constructor(esriResponse: EsriResponse, SymbolClass) {\r\n super(esriResponse);\r\n this.uniqueValueInfos = this.renderer['uniqueValueInfos'];\r\n this.propertyName = this.renderer['field1'];\r\n this.defaultSymbol = this.renderer['defaultSymbol'];\r\n\r\n\r\n if (this.defaultSymbol) {\r\n let symbolObj = new SymbolClass(this.defaultSymbol, this.opacity);\r\n this.defaultStyle = symbolObj.olStyle;\r\n this.defaultLabelHtml = `<span class=\"legend-layer-subitem\">${htmlEscape(this.renderer['defaultLabel'])}</span>` + symbolObj.legendHtml;\r\n } else {\r\n this.defaultStyle = undefined;\r\n this.defaultLabelHtml = 'other';\r\n }\r\n\r\n this.valueArray = [];\r\n this.labelArray = [];\r\n this.legendArray = [];\r\n this.propertyStyleLookup = {};\r\n\r\n for (let uniqueVal of this.uniqueValueInfos) {\r\n this.labelArray.push(uniqueVal['label']);\r\n this.valueArray.push(uniqueVal['value']);\r\n let uniqueSym = new SymbolClass(uniqueVal.symbol, this.opacity);\r\n this.legendArray.push(`<span class=\"legend-layer-subitem\">${htmlEscape(uniqueVal['label'])}</span>` + uniqueSym.legendHtml);\r\n this.propertyStyleLookup[uniqueVal['value']] = uniqueSym.olStyle;\r\n }\r\n\r\n\r\n this.olStyle = (feature: ol.Feature) => {\r\n let checkProperties = feature.getProperties();\r\n let checkProperty = checkProperties[this.propertyName];\r\n\r\n let returnValue;\r\n if (this.propertyStyleLookup[checkProperty] !== undefined) {\r\n returnValue = [this.propertyStyleLookup[checkProperty]];\r\n } else {\r\n returnValue = [this.defaultStyle];\r\n }\r\n\r\n return returnValue;\r\n };\r\n\r\n if (this.defaultLabelHtml !== null) {\r\n this.legendArray.push(this.defaultLabelHtml);\r\n }\r\n\r\n this.legendHtml = '<ul>';\r\n for (let h of this.legendArray) {\r\n this.legendHtml += `<li>${h}</li>`;\r\n }\r\n this.legendHtml += '</ul>';\r\n }\r\n}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n/**\r\n * style and legend object\r\n * @typedef {object} styleAndLegend\r\n * @property {styleFunc} style - style function\r\n * @property {string} legend - legend content\r\n */\r\n\r\n/**\r\n *\r\n * @param {object} esriResponse - layer info\r\n * @returns {styleAndLegend} style and legend object\r\n */\r\nexport function makeFeatureServiceLegendAndSymbol(esriResponse: EsriResponse) {\r\n \"use strict\";\r\n let renderer = esriResponse.drawingInfo.renderer;\r\n let symbolLegendOut: SymbolGenerator = null;\r\n\r\n switch (renderer.type) {\r\n case 'simple':\r\n switch (esriResponse.geometryType) {\r\n case 'esriGeometryPoint':\r\n symbolLegendOut = new SingleSymbol(esriResponse, PointSymbol);\r\n break;\r\n case 'esriGeometryPolyline':\r\n symbolLegendOut = new SingleSymbol(esriResponse, LineSymbol);\r\n break;\r\n case 'esriGeometryPolygon':\r\n symbolLegendOut = new SingleSymbol(esriResponse, PolygonSymbol);\r\n break;\r\n default:\r\n console.log(esriResponse);\r\n alert(esriResponse.geometryType + ' not handled');\r\n }\r\n break;\r\n case 'uniqueValue':\r\n switch (esriResponse.geometryType) {\r\n case 'esriGeometryPoint':\r\n symbolLegendOut = new UniqueValueSymbol(esriResponse, PointSymbol);\r\n break;\r\n case 'esriGeometryPolyline':\r\n symbolLegendOut = new UniqueValueSymbol(esriResponse, LineSymbol);\r\n break;\r\n case 'esriGeometryPolygon':\r\n symbolLegendOut = new UniqueValueSymbol(esriResponse, PolygonSymbol);\r\n break;\r\n default:\r\n console.log(esriResponse);\r\n alert(esriResponse['geometryType'] + ' not handled');\r\n }\r\n break;\r\n default:\r\n alert('not handled renderer type: ' + renderer['type']);\r\n }\r\n\r\n if (symbolLegendOut == null) {\r\n return {style: undefined, legend: ''};\r\n } else {\r\n return {style: symbolLegendOut.olStyle, legend: symbolLegendOut.legendHtml};\r\n }\r\n}\r\n\r\nnm.makeFeatureServiceLegendAndSymbol = makeFeatureServiceLegendAndSymbol;\r\n\r\n\r\n/**\r\n *\r\n * @param {object} lyrObject - the layer as defined in the response\r\n * @param {boolean} [skipLayerNameAndExpander=false] use only icons\r\n * @returns {string} legend html\r\n */\r\nfunction mapServiceLegendItem(lyrObject, skipLayerNameAndExpander: boolean = false) {\r\n\r\n\r\n skipLayerNameAndExpander = typeof skipLayerNameAndExpander == 'boolean' ? skipLayerNameAndExpander : false;\r\n let layerName = lyrObject['layerName'];\r\n let legendItems = lyrObject['legend'];\r\n let legendHtml = '';\r\n\r\n if (!skipLayerNameAndExpander) {\r\n legendHtml += `<span class=\"legend-layer-subitem\">${layerName}</span>`;\r\n }\r\n\r\n if (legendItems.length == 1) {\r\n legendHtml = `<img class=\"legend-layer-icon\" height=\"17\" src=\"data:image/png;base64,${legendItems[0]['imageData']}\">`;\r\n } else {\r\n if (!skipLayerNameAndExpander) {\r\n legendHtml += '<span class=\"legend-items-expander\" title=\"Expand/Collapse\">▼</span>';\r\n }\r\n legendHtml += '<ul>';\r\n for (let i = 0; i < legendItems.length; i++) {\r\n legendHtml += `<li>`;\r\n legendHtml += `<span class=\"legend-layer-subitem\">${htmlEscape(legendItems[i]['label'])}</span>`;\r\n legendHtml += `<img class=\"legend-layer-icon\" height=\"17\" src=\"data:image/png;base64,${legendItems[i]['imageData']}\">`;\r\n legendHtml += `</li>`;\r\n }\r\n legendHtml += '</ul>';\r\n }\r\n\r\n if (!skipLayerNameAndExpander) {\r\n legendHtml = `<span class=\"legend-layer-subitem\">${layerName}</span>` + legendHtml;\r\n }\r\n\r\n return legendHtml;\r\n}\r\n\r\n/**\r\n * make map service legent\r\n * @param {object} esriResponse - layer info\r\n * @returns {string} legend content\r\n */\r\nexport function makeMapServiceLegend(esriResponse) {\r\n \"use strict\";\r\n\r\n let newLegendHtml = '';\r\n\r\n let layers = esriResponse['layers'];\r\n\r\n if (layers.length == 1) {\r\n newLegendHtml += mapServiceLegendItem(layers[0], true);\r\n } else {\r\n newLegendHtml += '<ul>';\r\n for (let i = 0; i < layers.length; i++) {\r\n newLegendHtml += '<li>' + mapServiceLegendItem(layers[i]) + '</li>';\r\n }\r\n newLegendHtml += '</ul>';\r\n }\r\n\r\n return newLegendHtml;\r\n}\r\n\r\nnm.makeMapServiceLegend = makeMapServiceLegend;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/olHelpers/esriToOlStyle.ts\n **/","/**\r\n * Created by gavorhes on 12/16/2015.\r\n */\r\n\r\nimport provide from '../util/provide';\r\nimport makeGuid from '../util/makeGuid';\r\nimport mapMove from '../olHelpers/mapMove';\r\nlet nm = provide('collections');\r\nimport {ol} from 'custom-ol';\r\nconst $ = require('jquery');\r\n\r\nclass LayerGroup {\r\n groupLayers: any;\r\n groupLayersLookup: any;\r\n groupGroupsLookup: any;\r\n groupGroups: any;\r\n itemIdArray: any;\r\n groupId: any;\r\n groupName: any;\r\n allLayerArray: any;\r\n parent: any;\r\n allGroupArray: any;\r\n allGroupLookup: any;\r\n allLayerLookup: any;\r\n collapse: any;\r\n addCheck: any;\r\n layerParentLookup: any;\r\n\r\n /**\r\n *\r\n * @param {object} [groupConfig={}] - group configuration object\r\n * @param {string} groupConfig.groupName - the group name\r\n * @param {boolean} [groupConfig.collapse=false] - if the group should be collapsed initially\r\n * @param {boolean} [groupConfig.addCheck=true] - if the group should have a checkbox controlling visibility of all layers\r\n * @param {LayerGroup} [parent=undefined] - the parent group\r\n */\r\n constructor(groupConfig?, parent?) {\r\n this.groupLayers = [];\r\n this.groupLayersLookup = {};\r\n this.groupGroups = [];\r\n this.groupGroupsLookup = {};\r\n this.itemIdArray = [];\r\n\r\n if (typeof groupConfig == 'undefined') {\r\n this.parent = null;\r\n this.groupId = 'root';\r\n this.groupName = 'root';\r\n this.allGroupLookup = {root: this};\r\n this.allGroupArray = [this];\r\n this.allLayerArray = [];\r\n this.allLayerLookup = {};\r\n this.layerParentLookup = {};\r\n this.collapse = false;\r\n this.addCheck = false;\r\n } else {\r\n this.groupId = makeGuid();\r\n this.parent = parent;\r\n this.groupName = groupConfig.groupName;\r\n this.collapse = typeof groupConfig.collapse == 'boolean' ? groupConfig.collapse : false;\r\n this.addCheck = typeof groupConfig.addCheck == 'boolean' ? groupConfig.addCheck : true;\r\n }\r\n }\r\n\r\n /**\r\n *\r\n * @param {object} groupConfig - configuration object\r\n * @param {string} groupConfig.groupName - the group name\r\n * @param {boolean} groupConfig.collapse if the group should be collapsed initially\r\n * @param {boolean} groupConfig.addCheck if the group should have a checkbox controlling visibility of all layers\r\n * @param {Array<LayerGroup>} parents parent groups\r\n * @returns {LayerGroup} the layer group just added\r\n */\r\n addGroup(groupConfig, parents) {\r\n let parent;\r\n if (parents.length > 0) {\r\n parent = parents[parents.length - 1];\r\n } else {\r\n parent = 'root';\r\n }\r\n\r\n\r\n /**\r\n * @type {LayerGroup}\r\n */\r\n let parentGroup = this.allGroupLookup[parent];\r\n let newGroup = new LayerGroup(groupConfig, parentGroup);\r\n this.allGroupLookup[newGroup.groupId] = newGroup;\r\n this.allGroupArray.push(newGroup);\r\n\r\n parentGroup.groupGroups.push(newGroup);\r\n parentGroup.groupGroupsLookup[newGroup.groupId] = newGroup;\r\n\r\n if (parentGroup.itemIdArray.indexOf(newGroup.groupId) > 0) {\r\n console.log(newGroup.groupId);\r\n throw 'layer and group ids must be unique';\r\n }\r\n parentGroup.itemIdArray.push(newGroup.groupId);\r\n\r\n return newGroup;\r\n }\r\n\r\n /**\r\n *\r\n * @param {LayerBase} newLayer the layer to be added\r\n * @param {Array} parents array\r\n */\r\n addLegendLayer(newLayer, parents) {\r\n let parent;\r\n if (parents.length > 0) {\r\n parent = parents[parents.length - 1];\r\n } else {\r\n parent = 'root';\r\n }\r\n\r\n this.allLayerLookup[newLayer.id] = newLayer;\r\n this.allLayerArray.push(newLayer);\r\n\r\n /**\r\n * @type {LayerGroup}\r\n */\r\n let parentGroup = this.allGroupLookup[parent];\r\n\r\n parentGroup.groupLayers.push(newLayer);\r\n parentGroup.groupLayersLookup[newLayer.id] = newLayer;\r\n if (parentGroup.itemIdArray.indexOf(newLayer.id) > 0) {\r\n console.log(newLayer.id);\r\n throw 'layer and group ids must be unique';\r\n }\r\n parentGroup.itemIdArray.push(newLayer.id);\r\n\r\n this.layerParentLookup[newLayer.id] = parentGroup;\r\n\r\n }\r\n\r\n getLegendHtml(legendId, options) {\r\n\r\n\r\n let legendHtml = `<ul id=\"${legendId}\" class=\"legend-container\">`;\r\n\r\n legendHtml += `<li>${options.legendTitle}<input type=\"checkbox\" checked id=\"suppress-by-extent-${legendId}\" class=\"suppress-by-extent\">` +\r\n `<label title=\"Suppress layers not visible at this zoom level\" for=\"suppress-by-extent-${legendId}\">` +\r\n `<span></span>` +\r\n `</label></li>`;\r\n\r\n legendHtml += this._buildLegend(this.itemIdArray, this, options.layerDivClasses) + '</ul>';\r\n\r\n return legendHtml;\r\n }\r\n\r\n /**\r\n * @param {Array} itemIds the items to process\r\n * @param {LayerGroup} theGroup new group\r\n * @param {Array} [layerDivClasses=[]] optional classes to apply to the layer divs\r\n * @static\r\n * @returns {string} html string\r\n */\r\n _buildLegend(itemIds, theGroup, layerDivClasses) {\r\n\r\n if (itemIds.length == 0) {\r\n return '';\r\n }\r\n\r\n let theHml = '';\r\n\r\n let itemId = itemIds[0];\r\n\r\n if (theGroup.groupLayersLookup[itemId]) {\r\n\r\n /**\r\n * @type {LayerBase}\r\n */\r\n let lyr = theGroup.groupLayersLookup[itemId];\r\n theHml += `<li id=\"${lyr.id}-layer-li\" class=\"legend-layer-li ${layerDivClasses.join(' ')}\">` + lyr.getLegendDiv() + '</li>';\r\n\r\n\r\n } else if (theGroup.groupGroupsLookup[itemId]) {\r\n /**\r\n * type {LayerGroup}\r\n */\r\n let otherGroup = theGroup.groupGroupsLookup[itemId];\r\n\r\n theHml += `<li>`;\r\n theHml += `<div id=\"${otherGroup.groupId}-legend-layer-div\" ` +\r\n `class=\"legend-layer-group ${layerDivClasses.join(' ')}\">`;\r\n\r\n if (otherGroup.addCheck) {\r\n theHml += `<input type=\"checkbox\" checked id=\"${otherGroup.groupId}-group-chck\">` +\r\n `<label for=\"${otherGroup.groupId}-group-chck\" title=\"Click arrow to expand or collapse\">${otherGroup.groupName}</label>`;\r\n } else {\r\n theHml += `<label title=\"Click arrow to expand or collapse\">${otherGroup.groupName}</label>`;\r\n }\r\n\r\n theHml += `<span title=\"Expand/Collapse\" class=\"layer-group-expander`;\r\n theHml += `${otherGroup.collapse ? ' legend-layer-group-initial-collapse' : ''}\">`;\r\n theHml += otherGroup.collapse ? '▶' : '▼';\r\n theHml += '</span>';\r\n\r\n //parents.push(groupId);\r\n theHml += '<ul>' + this._buildLegend(otherGroup.itemIdArray, otherGroup, layerDivClasses) + '</ul>';\r\n theHml += '</div>';\r\n theHml += '</li>';\r\n }\r\n\r\n return theHml + this._buildLegend(itemIds.slice(1), theGroup, layerDivClasses);\r\n }\r\n}\r\n\r\n/**\r\n * a wrapper to make a legend\r\n */\r\nclass LayerLegend {\r\n\r\n $divElement: any;\r\n _legendItems: any;\r\n layerGroup: any;\r\n legendId: any;\r\n\r\n /**\r\n *\r\n * @param {Array} legendItems array of layers or objects with {groupName: {string}, collapse: {boolean}, addCheck: {boolean}, items: {Array}}\r\n * @param {string} divId the div where the legend should be added\r\n * @param {object} options for legend\r\n * @param {Array} [options.layerDivClasses=[]] optional array of classes to be applied to the layer legend divs for custom styling\r\n * @param {string} [options.legendTitle=Legend] the legend title\r\n * @param {boolean} [options.scaleDependent=true] if legend display is scale dependent\r\n */\r\n constructor(legendItems, divId, options) {\r\n for (let i of legendItems) {\r\n if (typeof i == 'undefined') {\r\n throw 'undefined item passed in array to legend constructor';\r\n }\r\n }\r\n\r\n options = options || {};\r\n\r\n options.legendTitle = typeof options.legendTitle == 'string' ? options.legendTitle : 'Legend';\r\n options.scaleDependent = typeof options.scaleDependent == 'boolean' ? options.scaleDependent : true;\r\n options.layerDivClasses = options.layerDivClasses || [];\r\n\r\n // if legend display is scale dependent, make sure the mapMove object is initialized first\r\n if (options.scaleDependent) {\r\n mapMove.checkInit();\r\n }\r\n\r\n this.$divElement = $('#' + divId);\r\n\r\n this._legendItems = legendItems;\r\n\r\n this.layerGroup = new LayerGroup();\r\n\r\n this._buildTree(legendItems);\r\n\r\n this.legendId = makeGuid();\r\n\r\n this.$divElement.append(this.layerGroup.getLegendHtml(this.legendId, options));\r\n\r\n for (let l of this.layerGroup.allLayerArray){\r\n l.applyCollapse();\r\n }\r\n\r\n let _this = this;\r\n //// if legend display is scale dependent, make sure the mapMove object is initialized first\r\n if (options.scaleDependent) {\r\n mapMove.checkInit();\r\n\r\n mapMove.addCallback(function (ext, zoom, evt) {\r\n\r\n if (typeof evt == 'undefined' || evt == 'change:resolution') {\r\n for (let lyr of this.layerGroup.allLayerArray) {\r\n let $lyrLi = $('#' + lyr.id + '-layer-li');\r\n if (zoom > lyr.maxZoom || zoom < lyr.minZoom) {\r\n $lyrLi.addClass('layer-not-visible');\r\n } else {\r\n $lyrLi.removeClass('layer-not-visible');\r\n }\r\n }\r\n }\r\n }, this, 100, true, 'legend1');\r\n }\r\n\r\n // <editor-fold desc=\"add event listeners\">\r\n\r\n this.$divElement.find(\".suppress-by-extent\").change(function () {\r\n let legendLayerLis = $('.legend-layer-li');\r\n if (this.checked) {\r\n legendLayerLis.removeClass('layer-force-show');\r\n } else {\r\n legendLayerLis.addClass('layer-force-show');\r\n }\r\n });\r\n\r\n\r\n this.$divElement.find('.legend-check').change(function () {\r\n let lyrId = this.id.replace('-legend-layer-check', '');\r\n _this.layerGroup.allLayerLookup[lyrId].visible = this.checked;\r\n });\r\n\r\n this.$divElement.find('.legend-layer-group > input[type=checkbox]').change(function () {\r\n $(this).siblings('ul').find('input[type=checkbox]').prop('checked', this.checked).trigger('change');\r\n });\r\n\r\n this.$divElement.find('.layer-group-expander').click(function () {\r\n let $this = $(this);\r\n $this.removeClass('legend-layer-group-initial-collapse');\r\n\r\n $this.siblings('ul').slideToggle();\r\n\r\n if ($this.hasClass('legend-layer-group-collapsed')){\r\n $this.removeClass('legend-layer-group-collapsed');\r\n $this.html('▼');\r\n } else {\r\n $this.addClass('legend-layer-group-collapsed');\r\n $this.html('▶');\r\n }\r\n });\r\n\r\n this.$divElement.find('.legend-layer-group-initial-collapse').trigger('click');\r\n // </editor-fold>\r\n }\r\n\r\n\r\n /**\r\n * @param {Array} [legendItems=this._layerConfig] the legend items\r\n * @param {Array} [parents=[]] the ordered list of groups in which this item is a member\r\n * @private\r\n */\r\n _buildTree(legendItems, parents?) {\r\n\r\n if (legendItems.length == 0) {\r\n return;\r\n }\r\n\r\n let oneItem = legendItems[0];\r\n\r\n //reset the parent if the item is in the base array\r\n if (this._legendItems.indexOf(oneItem) > -1 || typeof parents == 'undefined') {\r\n parents = [];\r\n }\r\n\r\n if (typeof oneItem['groupName'] !== 'undefined') {\r\n let groupItem = legendItems[0];\r\n let newGroup = this.layerGroup.addGroup(groupItem, parents);\r\n parents.push(newGroup.groupId);\r\n this._buildTree(groupItem.items, parents);\r\n } else {\r\n /**\r\n * @type {LayerBase}\r\n */\r\n let layerItem = legendItems[0];\r\n\r\n this.layerGroup.addLegendLayer(layerItem, parents);\r\n }\r\n\r\n this._buildTree(legendItems.slice(1), parents);\r\n }\r\n\r\n}\r\n\r\nnm.LayerLegend = LayerLegend;\r\nexport default LayerLegend;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/collections/LayerLegend.ts\n **/"],"sourceRoot":""} \ No newline at end of file diff --git a/test-html/js/slider-test.js b/test-html/js/slider-test.js new file mode 100644 index 0000000000000000000000000000000000000000..1bf07c5bc66eb51dea0b500ea491d293ca1a3f01 --- /dev/null +++ b/test-html/js/slider-test.js @@ -0,0 +1,10648 @@ +/******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) +/******/ return installedModules[moduleId].exports; +/******/ +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ exports: {}, +/******/ id: moduleId, +/******/ loaded: false +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.loaded = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(0); +/******/ }) +/************************************************************************/ +/******/ ({ + +/***/ 0: +/***/ function(module, exports, __webpack_require__) { + + "use strict"; + /** + * Created by gavorhes on 6/22/2016. + */ + var Sliders_1 = __webpack_require__(27); + var $ = __webpack_require__(3); + exports.tipConfig = { + $loadingGif: $('#loading-gif'), + $presetSelector: $('#preset-selector'), + $regionSelector: $('#region-selector'), + $versionSelector: $('#version-selector'), + tipSegmentLayerMinZoom: 10, + slidersConfig: [ + { + label: 'AADT', + yearOptions: [ + { label: '1', column: 'aadtyr_1' } + ] + }, + { + label: 'AADT Future', + yearOptions: [ + { label: '5', column: 'aadtyr_5' }, + { label: '10', column: 'aadtyr_10' }, + { label: '15', column: 'aadtyr_15' }, + { label: '20', column: 'aadtyr_20' } + ] + }, + { + label: 'Growth', + yearOptions: [ + { label: '5', column: 'growth_5' }, + { label: '10', column: 'growth_10' }, + { label: '15', column: 'growth_15' }, + { label: '20', column: 'growth_20' } + ] + }, + { + label: 'Truck', + yearOptions: [ + { label: '1', column: 'trkdyr_1' }, + { label: '20', column: 'trkdyr_20' } + ] + }, + { + label: 'LOS', + yearOptions: [ + { label: '1', column: 'losyr_1' } + ] + }, + { + label: 'LOS Future', + yearOptions: [ + { label: '5', column: 'losyr_5' }, + { label: '10', column: 'losyr_10' }, + { label: '15', column: 'losyr_15' }, + { label: '20', column: 'losyr_20' } + ] + }, + { + label: 'Crash Rate', + yearOptions: [ + { label: 1, column: 'crash_rate' } + ] + }, + { + label: 'Severity', + yearOptions: [ + { label: 1, column: 'crash_severity' } + ] + }, + { + label: 'Weather', + yearOptions: [ + { label: 1, column: 'weather' } + ] + }, + { + label: 'Event', + yearOptions: [ + { label: 1, column: 'event' } + ] + } + ], + presetConfig: [ + { + label: 'Default TIP', + presets: [ + { column: 'aadtyr_1', value: 10.0 }, + { column: 'aadtyr_20', value: 7.0 }, + { column: 'growth_20', value: 7.0 }, + { column: 'trkdyr_1', value: 4.0 }, + { column: 'losyr_1', value: 12.0 }, + { column: 'losyr_20', value: 12.0 }, + { column: 'crash_rate', value: 15.0 }, + { column: 'crash_severity', value: 13.0 }, + { column: 'weather', value: 9.0 }, + { column: 'event', value: 11.0 } + ] + }, + { + label: 'Safety', + presets: [ + { column: 'aadtyr_1', value: 20.0 }, + { column: 'aadtyr_20', value: 0.0 }, + { column: 'growth_20', value: 0.0 }, + { column: 'trkdyr_1', value: 0.0 }, + { column: 'losyr_1', value: 0.0 }, + { column: 'losyr_20', value: 0.0 }, + { column: 'crash_rate', value: 40.0 }, + { column: 'crash_severity', value: 40.0 }, + { column: 'weather', value: 0.0 }, + { column: 'event', value: 0.0 } + ] + }, + { + label: 'Mobility Present', + presets: [ + { column: 'aadtyr_1', value: 25.0 }, + { column: 'aadtyr_20', value: 25.0 }, + { column: 'growth_20', value: 0.0 }, + { column: 'trkdyr_1', value: 25.0 }, + { column: 'losyr_1', value: 25.0 }, + { column: 'losyr_20', value: 0.0 }, + { column: 'crash_rate', value: 0.0 }, + { column: 'crash_severity', value: 0.0 }, + { column: 'weather', value: 0.0 }, + { column: 'event', value: 0.0 } + ] + }, + { + label: 'Mobility Future', + presets: [ + { column: 'aadtyr_1', value: 0.0 }, + { column: 'aadtyr_20', value: 25.0 }, + { column: 'growth_20', value: 25.0 }, + { column: 'trkdyr_1', value: 25.0 }, + { column: 'losyr_1', value: 0.0 }, + { column: 'losyr_20', value: 25.0 }, + { column: 'crash_rate', value: 0.0 }, + { column: 'crash_severity', value: 0.0 }, + { column: 'weather', value: 0.0 }, + { column: 'event', value: 0.0 } + ] + }, + { + label: 'Service', + presets: [ + { column: 'aadtyr_1', value: 30.0 }, + { column: 'aadtyr_20', value: 0.0 }, + { column: 'growth_20', value: 10.0 }, + { column: 'trkdyr_1', value: 0.0 }, + { column: 'losyr_1', value: 30.0 }, + { column: 'losyr_20', value: 30.0 }, + { column: 'crash_rate', value: 0.0 }, + { column: 'crash_severity', value: 0.0 }, + { column: 'weather', value: 0.0 }, + { column: 'event', value: 0.0 } + ] + }, + { + label: 'Freight Performance', + presets: [ + { column: 'aadtyr_1', value: 20.0 }, + { column: 'aadtyr_20', value: 0.0 }, + { column: 'growth_20', value: 0.0 }, + { column: 'trkdyr_1', value: 60.0 }, + { column: 'losyr_1', value: 20.0 }, + { column: 'losyr_20', value: 0.0 }, + { column: 'crash_rate', value: 0.0 }, + { column: 'crash_severity', value: 0.0 }, + { column: 'weather', value: 0.0 }, + { column: 'event', value: 0.0 } + ] + } + ] + }; + exports.tipConfig.$presetSelector.append('<option value="0" disabled=>Custom</option>'); + var sliders = new Sliders_1.TipSliders(exports.tipConfig.slidersConfig, exports.tipConfig.presetConfig, 'slider-container', exports.tipConfig.$presetSelector, exports.tipConfig.$regionSelector, exports.tipConfig.$regionSelector, function (chg) { console.log(chg); }); + // sliders.changedCallback = (chg) => {console.log(chg)}; + window['glob'] = sliders; + window['hat'] = sliders; + window['bird'] = sliders; + + +/***/ }, + +/***/ 3: +/***/ function(module, exports, __webpack_require__) { + + var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! + * jQuery JavaScript Library v2.2.3 + * http://jquery.com/ + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2016-04-05T19:26Z + */ + + (function( global, factory ) { + + if ( typeof module === "object" && typeof module.exports === "object" ) { + // For CommonJS and CommonJS-like environments where a proper `window` + // is present, execute the factory and get jQuery. + // For environments that do not have a `window` with a `document` + // (such as Node.js), expose a factory as module.exports. + // This accentuates the need for the creation of a real `window`. + // e.g. var jQuery = require("jquery")(window); + // See ticket #14549 for more info. + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + + // Pass this if window is not defined yet + }(typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + + // Support: Firefox 18+ + // Can't be in strict mode, several libs including ASP.NET trace + // the stack via arguments.caller.callee and Firefox dies if + // you try to trace through "use strict" call chains. (#13335) + //"use strict"; + var arr = []; + + var document = window.document; + + var slice = arr.slice; + + var concat = arr.concat; + + var push = arr.push; + + var indexOf = arr.indexOf; + + var class2type = {}; + + var toString = class2type.toString; + + var hasOwn = class2type.hasOwnProperty; + + var support = {}; + + + + var + version = "2.2.3", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }, + + // Support: Android<4.1 + // Make sure we trim BOM and NBSP + rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, + + // Matches dashed string for camelizing + rmsPrefix = /^-ms-/, + rdashAlpha = /-([\da-z])/gi, + + // Used by jQuery.camelCase as callback to replace() + fcamelCase = function( all, letter ) { + return letter.toUpperCase(); + }; + + jQuery.fn = jQuery.prototype = { + + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // Start with an empty selector + selector: "", + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + return num != null ? + + // Return just the one element from the set + ( num < 0 ? this[ num + this.length ] : this[ num ] ) : + + // Return all the elements in a clean array + slice.call( this ); + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + ret.context = this.context; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + each: function( callback ) { + return jQuery.each( this, callback ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map( this, function( elem, i ) { + return callback.call( elem, i, elem ); + } ) ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: arr.sort, + splice: arr.splice + }; + + jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[ 0 ] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // Skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !jQuery.isFunction( target ) ) { + target = {}; + } + + // Extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + + // Only deal with non-null/undefined values + if ( ( options = arguments[ i ] ) != null ) { + + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject( copy ) || + ( copyIsArray = jQuery.isArray( copy ) ) ) ) { + + if ( copyIsArray ) { + copyIsArray = false; + clone = src && jQuery.isArray( src ) ? src : []; + + } else { + clone = src && jQuery.isPlainObject( src ) ? src : {}; + } + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; + }; + + jQuery.extend( { + + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + isFunction: function( obj ) { + return jQuery.type( obj ) === "function"; + }, + + isArray: Array.isArray, + + isWindow: function( obj ) { + return obj != null && obj === obj.window; + }, + + isNumeric: function( obj ) { + + // parseFloat NaNs numeric-cast false positives (null|true|false|"") + // ...but misinterprets leading-number strings, particularly hex literals ("0x...") + // subtraction forces infinities to NaN + // adding 1 corrects loss of precision from parseFloat (#15100) + var realStringObj = obj && obj.toString(); + return !jQuery.isArray( obj ) && ( realStringObj - parseFloat( realStringObj ) + 1 ) >= 0; + }, + + isPlainObject: function( obj ) { + var key; + + // Not plain objects: + // - Any object or value whose internal [[Class]] property is not "[object Object]" + // - DOM nodes + // - window + if ( jQuery.type( obj ) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { + return false; + } + + // Not own constructor property must be Object + if ( obj.constructor && + !hasOwn.call( obj, "constructor" ) && + !hasOwn.call( obj.constructor.prototype || {}, "isPrototypeOf" ) ) { + return false; + } + + // Own properties are enumerated firstly, so to speed up, + // if last one is own, then all properties are own + for ( key in obj ) {} + + return key === undefined || hasOwn.call( obj, key ); + }, + + isEmptyObject: function( obj ) { + var name; + for ( name in obj ) { + return false; + } + return true; + }, + + type: function( obj ) { + if ( obj == null ) { + return obj + ""; + } + + // Support: Android<4.0, iOS<6 (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; + }, + + // Evaluates a script in a global context + globalEval: function( code ) { + var script, + indirect = eval; + + code = jQuery.trim( code ); + + if ( code ) { + + // If the code includes a valid, prologue position + // strict mode pragma, execute code by injecting a + // script tag into the document. + if ( code.indexOf( "use strict" ) === 1 ) { + script = document.createElement( "script" ); + script.text = code; + document.head.appendChild( script ).parentNode.removeChild( script ); + } else { + + // Otherwise, avoid the DOM node creation, insertion + // and removal by using an indirect global eval + + indirect( code ); + } + } + }, + + // Convert dashed to camelCase; used by the css and data modules + // Support: IE9-11+ + // Microsoft forgot to hump their vendor prefix (#9572) + camelCase: function( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); + }, + + nodeName: function( elem, name ) { + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + }, + + each: function( obj, callback ) { + var length, i = 0; + + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + // Support: Android<4.1 + trim: function( text ) { + return text == null ? + "" : + ( text + "" ).replace( rtrim, "" ); + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArrayLike( Object( arr ) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + return arr == null ? -1 : indexOf.call( arr, elem, i ); + }, + + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + for ( ; j < len; j++ ) { + first[ i++ ] = second[ j ]; + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var length, value, + i = 0, + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArrayLike( elems ) ) { + length = elems.length; + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // Bind a function to a context, optionally partially applying any + // arguments. + proxy: function( fn, context ) { + var tmp, args, proxy; + + if ( typeof context === "string" ) { + tmp = fn[ context ]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if ( !jQuery.isFunction( fn ) ) { + return undefined; + } + + // Simulated bind + args = slice.call( arguments, 2 ); + proxy = function() { + return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || jQuery.guid++; + + return proxy; + }, + + now: Date.now, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support + } ); + + // JSHint would error on this code due to the Symbol not being defined in ES5. + // Defining this global in .jshintrc would create a danger of using the global + // unguarded in another place, it seems safer to just disable JSHint for these + // three lines. + /* jshint ignore: start */ + if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; + } + /* jshint ignore: end */ + + // Populate the class2type map + jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), + function( i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); + } ); + + function isArrayLike( obj ) { + + // Support: iOS 8.2 (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, + type = jQuery.type( obj ); + + if ( type === "function" || jQuery.isWindow( obj ) ) { + return false; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; + } + var Sizzle = + /*! + * Sizzle CSS Selector Engine v2.2.1 + * http://sizzlejs.com/ + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2015-10-17 + */ + (function( window ) { + + var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + 1 * new Date(), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // General-purpose constants + MAX_NEGATIVE = 1 << 31, + + // Instance methods + hasOwn = ({}).hasOwnProperty, + arr = [], + pop = arr.pop, + push_native = arr.push, + push = arr.push, + slice = arr.slice, + // Use a stripped-down indexOf as it's faster than native + // http://jsperf.com/thor-indexof-vs-for/5 + indexOf = function( list, elem ) { + var i = 0, + len = list.length; + for ( ; i < len; i++ ) { + if ( list[i] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + + // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier + identifier = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + + "*\\]", + + pseudos = ":(" + identifier + ")(?:\\((" + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), + + rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + identifier + ")" ), + "CLASS": new RegExp( "^\\.(" + identifier + ")" ), + "TAG": new RegExp( "^(" + identifier + "|[*])" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + rescape = /'|\\/g, + + // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), + funescape = function( _, escaped, escapedWhitespace ) { + var high = "0x" + escaped - 0x10000; + // NaN means non-codepoint + // Support: Firefox<24 + // Workaround erroneous numeric interpretation of +"0x" + return high !== high || escapedWhitespace ? + escaped : + high < 0 ? + // BMP codepoint + String.fromCharCode( high + 0x10000 ) : + // Supplemental Plane codepoint (surrogate pair) + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }; + + // Optimize for push.apply( _, NodeList ) + try { + push.apply( + (arr = slice.call( preferredDoc.childNodes )), + preferredDoc.childNodes + ); + // Support: Android<4.0 + // Detect silently failing push.apply + arr[ preferredDoc.childNodes.length ].nodeType; + } catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + push_native.apply( target, slice.call(els) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + // Can't trust NodeList.length + while ( (target[j++] = els[i++]) ) {} + target.length = j - 1; + } + }; + } + + function Sizzle( selector, context, results, seed ) { + var m, i, elem, nid, nidselect, match, groups, newSelector, + newContext = context && context.ownerDocument, + + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; + + results = results || []; + + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { + + if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { + setDocument( context ); + } + context = context || document; + + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) { + + // ID selector + if ( (m = match[1]) ) { + + // Document context + if ( nodeType === 9 ) { + if ( (elem = context.getElementById( m )) ) { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + + // Element context + } else { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( newContext && (elem = newContext.getElementById( m )) && + contains( context, elem ) && + elem.id === m ) { + + results.push( elem ); + return results; + } + } + + // Type selector + } else if ( match[2] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Class selector + } else if ( (m = match[3]) && support.getElementsByClassName && + context.getElementsByClassName ) { + + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // Take advantage of querySelectorAll + if ( support.qsa && + !compilerCache[ selector + " " ] && + (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { + + if ( nodeType !== 1 ) { + newContext = context; + newSelector = selector; + + // qSA looks outside Element context, which is not what we want + // Thanks to Andrew Dupont for this workaround technique + // Support: IE <=8 + // Exclude object elements + } else if ( context.nodeName.toLowerCase() !== "object" ) { + + // Capture the context ID, setting it first if necessary + if ( (nid = context.getAttribute( "id" )) ) { + nid = nid.replace( rescape, "\\$&" ); + } else { + context.setAttribute( "id", (nid = expando) ); + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + nidselect = ridentifier.test( nid ) ? "#" + nid : "[id='" + nid + "']"; + while ( i-- ) { + groups[i] = nidselect + " " + toSelector( groups[i] ); + } + newSelector = groups.join( "," ); + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + } + + if ( newSelector ) { + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + } finally { + if ( nid === expando ) { + context.removeAttribute( "id" ); + } + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); + } + + /** + * Create key-value caches of limited size + * @returns {function(string, object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ + function createCache() { + var keys = []; + + function cache( key, value ) { + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return (cache[ key + " " ] = value); + } + return cache; + } + + /** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ + function markFunction( fn ) { + fn[ expando ] = true; + return fn; + } + + /** + * Support testing using an element + * @param {Function} fn Passed the created div and expects a boolean result + */ + function assert( fn ) { + var div = document.createElement("div"); + + try { + return !!fn( div ); + } catch (e) { + return false; + } finally { + // Remove from its parent by default + if ( div.parentNode ) { + div.parentNode.removeChild( div ); + } + // release memory in IE + div = null; + } + } + + /** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ + function addHandle( attrs, handler ) { + var arr = attrs.split("|"), + i = arr.length; + + while ( i-- ) { + Expr.attrHandle[ arr[i] ] = handler; + } + } + + /** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ + function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + ( ~b.sourceIndex || MAX_NEGATIVE ) - + ( ~a.sourceIndex || MAX_NEGATIVE ); + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( (cur = cur.nextSibling) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; + } + + /** + * Returns a function to use in pseudos for input types + * @param {String} type + */ + function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; + } + + /** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ + function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && elem.type === type; + }; + } + + /** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ + function createPositionalPseudo( fn ) { + return markFunction(function( argument ) { + argument = +argument; + return markFunction(function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ (j = matchIndexes[i]) ] ) { + seed[j] = !(matches[j] = seed[j]); + } + } + }); + }); + } + + /** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ + function testContext( context ) { + return context && typeof context.getElementsByTagName !== "undefined" && context; + } + + // Expose support vars for convenience + support = Sizzle.support = {}; + + /** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ + isXML = Sizzle.isXML = function( elem ) { + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = elem && (elem.ownerDocument || elem).documentElement; + return documentElement ? documentElement.nodeName !== "HTML" : false; + }; + + /** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ + setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, parent, + doc = node ? node.ownerDocument || node : preferredDoc; + + // Return early if doc is invalid or already selected + if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Update global variables + document = doc; + docElem = document.documentElement; + documentIsHTML = !isXML( document ); + + // Support: IE 9-11, Edge + // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) + if ( (parent = document.defaultView) && parent.top !== parent ) { + // Support: IE 11 + if ( parent.addEventListener ) { + parent.addEventListener( "unload", unloadHandler, false ); + + // Support: IE 9 - 10 only + } else if ( parent.attachEvent ) { + parent.attachEvent( "onunload", unloadHandler ); + } + } + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties + // (excepting IE8 booleans) + support.attributes = assert(function( div ) { + div.className = "i"; + return !div.getAttribute("className"); + }); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert(function( div ) { + div.appendChild( document.createComment("") ); + return !div.getElementsByTagName("*").length; + }); + + // Support: IE<9 + support.getElementsByClassName = rnative.test( document.getElementsByClassName ); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert(function( div ) { + docElem.appendChild( div ).id = expando; + return !document.getElementsByName || !document.getElementsByName( expando ).length; + }); + + // ID find and filter + if ( support.getById ) { + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var m = context.getElementById( id ); + return m ? [ m ] : []; + } + }; + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute("id") === attrId; + }; + }; + } else { + // Support: IE6/7 + // getElementById is not reliable as a find shortcut + delete Expr.find["ID"]; + + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== "undefined" && + elem.getAttributeNode("id"); + return node && node.value === attrId; + }; + }; + } + + // Tag + Expr.find["TAG"] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( tag ); + + // DocumentFragment nodes don't have gEBTN + } else if ( support.qsa ) { + return context.querySelectorAll( tag ); + } + } : + + function( tag, context ) { + var elem, + tmp = [], + i = 0, + // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( (elem = results[i++]) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See http://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( (support.qsa = rnative.test( document.querySelectorAll )) ) { + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert(function( div ) { + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // http://bugs.jquery.com/ticket/12359 + docElem.appendChild( div ).innerHTML = "<a id='" + expando + "'></a>" + + "<select id='" + expando + "-\r\\' msallowcapture=''>" + + "<option selected=''></option></select>"; + + // Support: IE8, Opera 11-12.16 + // Nothing should be selected when empty strings follow ^= or $= or *= + // The test attribute must be unknown in Opera but "safe" for WinRT + // http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( div.querySelectorAll("[msallowcapture^='']").length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !div.querySelectorAll("[selected]").length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ + if ( !div.querySelectorAll( "[id~=" + expando + "-]" ).length ) { + rbuggyQSA.push("~="); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !div.querySelectorAll(":checked").length ) { + rbuggyQSA.push(":checked"); + } + + // Support: Safari 8+, iOS 8+ + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibing-combinator selector` fails + if ( !div.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push(".#.+[+~]"); + } + }); + + assert(function( div ) { + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = document.createElement("input"); + input.setAttribute( "type", "hidden" ); + div.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( div.querySelectorAll("[name=d]").length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( !div.querySelectorAll(":enabled").length ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Opera 10-11 does not throw on post-comma invalid pseudos + div.querySelectorAll("*,:x"); + rbuggyQSA.push(",.*:"); + }); + } + + if ( (support.matchesSelector = rnative.test( (matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector) )) ) { + + assert(function( div ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( div, "div" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( div, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + }); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + // Element contains another + // Purposefully self-exclusive + // As in, an element does not contain itself + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + )); + } : + function( a, b ) { + if ( b ) { + while ( (b = b.parentNode) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = hasCompare ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + // Sort on method existence if only one input has compareDocumentPosition + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + // Calculate position if both inputs belong to the same document + compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + // Otherwise we know they are disconnected + 1; + + // Disconnected nodes + if ( compare & 1 || + (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { + + // Choose the first element that is related to our preferred document + if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { + return -1; + } + if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Parentless nodes are either documents or disconnected + if ( !aup || !bup ) { + return a === document ? -1 : + b === document ? 1 : + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( (cur = cur.parentNode) ) { + ap.unshift( cur ); + } + cur = b; + while ( (cur = cur.parentNode) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[i] === bp[i] ) { + i++; + } + + return i ? + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[i], bp[i] ) : + + // Otherwise nodes in our document sort first + ap[i] === preferredDoc ? -1 : + bp[i] === preferredDoc ? 1 : + 0; + }; + + return document; + }; + + Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); + }; + + Sizzle.matchesSelector = function( elem, expr ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + // Make sure that attribute selectors are quoted + expr = expr.replace( rattributeQuotes, "='$1']" ); + + if ( support.matchesSelector && documentIsHTML && + !compilerCache[ expr + " " ] && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch (e) {} + } + + return Sizzle( expr, document, null, [ elem ] ).length > 0; + }; + + Sizzle.contains = function( context, elem ) { + // Set document vars if needed + if ( ( context.ownerDocument || context ) !== document ) { + setDocument( context ); + } + return contains( context, elem ); + }; + + Sizzle.attr = function( elem, name ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + // Don't get fooled by Object.prototype properties (jQuery #13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + (val = elem.getAttributeNode(name)) && val.specified ? + val.value : + null; + }; + + Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); + }; + + /** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ + Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( (elem = results[i++]) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + // Clear input after sorting to release objects + // See https://github.com/jquery/sizzle/pull/225 + sortInput = null; + + return results; + }; + + /** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ + getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + // If no nodeType, this is expected to be an array + while ( (node = elem[i++]) ) { + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + // Use textContent for elements + // innerText usage removed for consistency of new lines (jQuery #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + // Do not include comment or processing instruction nodes + + return ret; + }; + + Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[1] = match[1].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape ); + + if ( match[2] === "~=" ) { + match[3] = " " + match[3] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[1] = match[1].toLowerCase(); + + if ( match[1].slice( 0, 3 ) === "nth" ) { + // nth-* requires argument + if ( !match[3] ) { + Sizzle.error( match[0] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); + match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); + + // other types prohibit arguments + } else if ( match[3] ) { + Sizzle.error( match[0] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[6] && match[2]; + + if ( matchExpr["CHILD"].test( match[0] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[3] ) { + match[2] = match[4] || match[5] || ""; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + // Get excess from tokenize (recursively) + (excess = tokenize( unquoted, true )) && + // advance to the next closing parenthesis + (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { + + // excess is a negative index + match[0] = match[0].slice( 0, excess ); + match[2] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { return true; } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && + classCache( className, function( elem ) { + return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" ); + }); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + }; + }, + + "CHILD": function( type, what, argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, context, xml ) { + var cache, uniqueCache, outerCache, node, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType, + diff = false; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( (node = node[ dir ]) ) { + if ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) { + + return false; + } + } + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + + // Seek `elem` from a previously-cached index + + // ...in a gzip-friendly way + node = parent; + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex && cache[ 2 ]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( (node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + (diff = nodeIndex = 0) || start.pop()) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else { + // Use previously-cached element index if available + if ( useCache ) { + // ...in a gzip-friendly way + node = elem; + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex; + } + + // xml :nth-child(...) + // or :nth-last-child(...) or :nth(-last)?-of-type(...) + if ( diff === false ) { + // Use the same loop as above to seek `elem` from the start + while ( (node = ++nodeIndex && node && node[ dir ] || + (diff = nodeIndex = 0) || start.pop()) ) { + + if ( ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) && + ++diff ) { + + // Cache the index of each encountered element + if ( useCache ) { + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + uniqueCache[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction(function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf( seed, matched[i] ); + seed[ idx ] = !( matches[ idx ] = matched[i] ); + } + }) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + // Potentially complex pseudos + "not": markFunction(function( selector ) { + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction(function( seed, matches, context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( (elem = unmatched[i]) ) { + seed[i] = !(matches[i] = elem); + } + } + }) : + function( elem, context, xml ) { + input[0] = elem; + matcher( input, null, xml, results ); + // Don't keep the element (issue #299) + input[0] = null; + return !results.pop(); + }; + }), + + "has": markFunction(function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + }), + + "contains": markFunction(function( text ) { + text = text.replace( runescape, funescape ); + return function( elem ) { + return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; + }; + }), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + // lang value must be a valid identifier + if ( !ridentifier.test(lang || "") ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( (elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); + return false; + }; + }), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); + }, + + // Boolean properties + "enabled": function( elem ) { + return elem.disabled === false; + }, + + "disabled": function( elem ) { + return elem.disabled === true; + }, + + "checked": function( elem ) { + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); + }, + + "selected": function( elem ) { + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), + // but not by others (comment: 8; processing instruction: 7; etc.) + // nodeType < 6 works because attributes (2) do not appear as children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos["empty"]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + // Support: IE<8 + // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" + ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); + }, + + // Position-in-collection + "first": createPositionalPseudo(function() { + return [ 0 ]; + }), + + "last": createPositionalPseudo(function( matchIndexes, length ) { + return [ length - 1 ]; + }), + + "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + }), + + "even": createPositionalPseudo(function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "odd": createPositionalPseudo(function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }) + } + }; + + Expr.pseudos["nth"] = Expr.pseudos["eq"]; + + // Add button/input type pseudos + for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); + } + for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); + } + + // Easy API for creating new setFilters + function setFilters() {} + setFilters.prototype = Expr.filters = Expr.pseudos; + Expr.setFilters = new setFilters(); + + tokenize = Sizzle.tokenize = function( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || (match = rcomma.exec( soFar )) ) { + if ( match ) { + // Don't consume trailing commas as valid + soFar = soFar.slice( match[0].length ) || soFar; + } + groups.push( (tokens = []) ); + } + + matched = false; + + // Combinators + if ( (match = rcombinators.exec( soFar )) ) { + matched = match.shift(); + tokens.push({ + value: matched, + // Cast descendant combinators to space + type: match[0].replace( rtrim, " " ) + }); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || + (match = preFilters[ type ]( match ))) ) { + matched = match.shift(); + tokens.push({ + value: matched, + type: type, + matches: match + }); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); + }; + + function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[i].value; + } + return selector; + } + + function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + checkNonElements = base && dir === "parentNode", + doneName = done++; + + return combinator.first ? + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, uniqueCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching + if ( xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || (elem[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {}); + + if ( (oldCache = uniqueCache[ dir ]) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + // Assign to newCache so results back-propagate to previous elements + return (newCache[ 2 ] = oldCache[ 2 ]); + } else { + // Reuse newcache so results back-propagate to previous elements + uniqueCache[ dir ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { + return true; + } + } + } + } + } + }; + } + + function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[i]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[0]; + } + + function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[i], results ); + } + return results; + } + + function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( (elem = unmatched[i]) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; + } + + function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction(function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( (elem = temp[i]) ) { + matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) ) { + // Restore matcherIn since elem is not yet a final match + temp.push( (matcherIn[i] = elem) ); + } + } + postFinder( null, (matcherOut = []), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) && + (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) { + + seed[temp] = !(results[temp] = elem); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + }); + } + + function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[0].type ], + implicitRelative = leadingRelative || Expr.relative[" "], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + (checkContext = context).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + // Avoid hanging onto element (issue #299) + checkContext = null; + return ret; + } ]; + + for ( ; i < len; i++ ) { + if ( (matcher = Expr.relative[ tokens[i].type ]) ) { + matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; + } else { + matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[j].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); + } + + function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + // We must always have either seed elements or outermost context + elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), + len = elems.length; + + if ( outermost ) { + outermostContext = context === document || context || outermost; + } + + // Add elements passing elementMatchers directly to results + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id + for ( ; i !== len && (elem = elems[i]) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + if ( !context && elem.ownerDocument !== document ) { + setDocument( elem ); + xml = !documentIsHTML; + } + while ( (matcher = elementMatchers[j++]) ) { + if ( matcher( elem, context || document, xml) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + // They will have gone through all possible matchers + if ( (elem = !matcher && elem) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // `i` is now the count of elements visited above, and adding it to `matchedCount` + // makes the latter nonnegative. + matchedCount += i; + + // Apply set filters to unmatched elements + // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` + // equals `i`), unless we didn't visit _any_ elements in the above loop because we have + // no element matchers and no seed. + // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that + // case, which will result in a "00" `matchedCount` that differs from `i` but is also + // numerically zero. + if ( bySet && i !== matchedCount ) { + j = 0; + while ( (matcher = setMatchers[j++]) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !(unmatched[i] || setMatched[i]) ) { + setMatched[i] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; + } + + compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + // Generate a function of recursive functions that can be used to check each element + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[i] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); + + // Save selector and tokenization + cached.selector = selector; + } + return cached; + }; + + /** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ + select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( (selector = compiled.selector || selector) ); + + results = results || []; + + // Try to minimize operations if there is only one selector in the list and no seed + // (the latter of which guarantees us context) + if ( match.length === 1 ) { + + // Reduce context if the leading compound selector is an ID + tokens = match[0] = match[0].slice( 0 ); + if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && + support.getById && context.nodeType === 9 && documentIsHTML && + Expr.relative[ tokens[1].type ] ) { + + context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; + if ( !context ) { + return results; + + // Precompiled matchers will still verify ancestry, so step up a level + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[i]; + + // Abort if we hit a combinator + if ( Expr.relative[ (type = token.type) ] ) { + break; + } + if ( (find = Expr.find[ type ]) ) { + // Search, expanding context for leading sibling combinators + if ( (seed = find( + token.matches[0].replace( runescape, funescape ), + rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context + )) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + // Compile and execute a filtering function if one is not provided + // Provide `match` to avoid retokenization if we modified the selector above + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + !context || rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; + }; + + // One-time assignments + + // Sort stability + support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; + + // Support: Chrome 14-35+ + // Always assume duplicates if they aren't passed to the comparison function + support.detectDuplicates = !!hasDuplicate; + + // Initialize against the default document + setDocument(); + + // Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) + // Detached nodes confoundingly follow *each other* + support.sortDetached = assert(function( div1 ) { + // Should return 1, but returns 4 (following) + return div1.compareDocumentPosition( document.createElement("div") ) & 1; + }); + + // Support: IE<8 + // Prevent attribute/property "interpolation" + // http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx + if ( !assert(function( div ) { + div.innerHTML = "<a href='#'></a>"; + return div.firstChild.getAttribute("href") === "#" ; + }) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + }); + } + + // Support: IE<9 + // Use defaultValue in place of getAttribute("value") + if ( !support.attributes || !assert(function( div ) { + div.innerHTML = "<input/>"; + div.firstChild.setAttribute( "value", "" ); + return div.firstChild.getAttribute( "value" ) === ""; + }) ) { + addHandle( "value", function( elem, name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + }); + } + + // Support: IE<9 + // Use getAttributeNode to fetch booleans when getAttribute lies + if ( !assert(function( div ) { + return div.getAttribute("disabled") == null; + }) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + (val = elem.getAttributeNode( name )) && val.specified ? + val.value : + null; + } + }); + } + + return Sizzle; + + })( window ); + + + + jQuery.find = Sizzle; + jQuery.expr = Sizzle.selectors; + jQuery.expr[ ":" ] = jQuery.expr.pseudos; + jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; + jQuery.text = Sizzle.getText; + jQuery.isXMLDoc = Sizzle.isXML; + jQuery.contains = Sizzle.contains; + + + + var dir = function( elem, dir, until ) { + var matched = [], + truncate = until !== undefined; + + while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { + if ( elem.nodeType === 1 ) { + if ( truncate && jQuery( elem ).is( until ) ) { + break; + } + matched.push( elem ); + } + } + return matched; + }; + + + var siblings = function( n, elem ) { + var matched = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + matched.push( n ); + } + } + + return matched; + }; + + + var rneedsContext = jQuery.expr.match.needsContext; + + var rsingleTag = ( /^<([\w-]+)\s*\/?>(?:<\/\1>|)$/ ); + + + + var risSimple = /^.[^:#\[\.,]*$/; + + // Implement the identical functionality for filter and not + function winnow( elements, qualifier, not ) { + if ( jQuery.isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + /* jshint -W018 */ + return !!qualifier.call( elem, i, elem ) !== not; + } ); + + } + + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + } ); + + } + + if ( typeof qualifier === "string" ) { + if ( risSimple.test( qualifier ) ) { + return jQuery.filter( qualifier, elements, not ); + } + + qualifier = jQuery.filter( qualifier, elements ); + } + + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not; + } ); + } + + jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + return elems.length === 1 && elem.nodeType === 1 ? + jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] : + jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + } ) ); + }; + + jQuery.fn.extend( { + find: function( selector ) { + var i, + len = this.length, + ret = [], + self = this; + + if ( typeof selector !== "string" ) { + return this.pushStack( jQuery( selector ).filter( function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + } ) ); + } + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + // Needed because $( selector, context ) becomes $( context ).find( selector ) + ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret ); + ret.selector = this.selector ? this.selector + " " + selector : selector; + return ret; + }, + filter: function( selector ) { + return this.pushStack( winnow( this, selector || [], false ) ); + }, + not: function( selector ) { + return this.pushStack( winnow( this, selector || [], true ) ); + }, + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + } + } ); + + + // Initialize a jQuery object + + + // A central reference to the root jQuery(document) + var rootjQuery, + + // A simple way to check for HTML strings + // Prioritize #id over <tag> to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/, + + init = jQuery.fn.init = function( selector, context, root ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Method init() accepts an alternate rootjQuery + // so migrate can support jQuery.sub (gh-2101) + root = root || rootjQuery; + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector[ 0 ] === "<" && + selector[ selector.length - 1 ] === ">" && + selector.length >= 3 ) { + + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && ( match[ 1 ] || !context ) ) { + + // HANDLE: $(html) -> $(array) + if ( match[ 1 ] ) { + context = context instanceof jQuery ? context[ 0 ] : context; + + // Option to run scripts is true for back-compat + // Intentionally let the error be thrown if parseHTML is not present + jQuery.merge( this, jQuery.parseHTML( + match[ 1 ], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + + // Properties of context are called as methods if possible + if ( jQuery.isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[ 2 ] ); + + // Support: Blackberry 4.6 + // gEBID returns nodes no longer in the document (#6963) + if ( elem && elem.parentNode ) { + + // Inject the element directly into the jQuery object + this.length = 1; + this[ 0 ] = elem; + } + + this.context = document; + this.selector = selector; + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || root ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this.context = this[ 0 ] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( jQuery.isFunction( selector ) ) { + return root.ready !== undefined ? + root.ready( selector ) : + + // Execute immediately if ready is not present + selector( jQuery ); + } + + if ( selector.selector !== undefined ) { + this.selector = selector.selector; + this.context = selector.context; + } + + return jQuery.makeArray( selector, this ); + }; + + // Give the init function the jQuery prototype for later instantiation + init.prototype = jQuery.fn; + + // Initialize central reference + rootjQuery = jQuery( document ); + + + var rparentsprev = /^(?:parents|prev(?:Until|All))/, + + // Methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + + jQuery.fn.extend( { + has: function( target ) { + var targets = jQuery( target, this ), + l = targets.length; + + return this.filter( function() { + var i = 0; + for ( ; i < l; i++ ) { + if ( jQuery.contains( this, targets[ i ] ) ) { + return true; + } + } + } ); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + matched = [], + pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ? + jQuery( selectors, context || this.context ) : + 0; + + for ( ; i < l; i++ ) { + for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { + + // Always skip document fragments + if ( cur.nodeType < 11 && ( pos ? + pos.index( cur ) > -1 : + + // Don't pass non-elements to Sizzle + cur.nodeType === 1 && + jQuery.find.matchesSelector( cur, selectors ) ) ) { + + matched.push( cur ); + break; + } + } + } + + return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); + }, + + // Determine the position of an element within the set + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; + } + + // Index in selector + if ( typeof elem === "string" ) { + return indexOf.call( jQuery( elem ), this[ 0 ] ); + } + + // Locate the position of the desired element + return indexOf.call( this, + + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[ 0 ] : elem + ); + }, + + add: function( selector, context ) { + return this.pushStack( + jQuery.uniqueSort( + jQuery.merge( this.get(), jQuery( selector, context ) ) + ) + ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter( selector ) + ); + } + } ); + + function sibling( cur, dir ) { + while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} + return cur; + } + + jQuery.each( { + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return siblings( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return siblings( elem.firstChild ); + }, + contents: function( elem ) { + return elem.contentDocument || jQuery.merge( [], elem.childNodes ); + } + }, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var matched = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + matched = jQuery.filter( selector, matched ); + } + + if ( this.length > 1 ) { + + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + jQuery.uniqueSort( matched ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + matched.reverse(); + } + } + + return this.pushStack( matched ); + }; + } ); + var rnotwhite = ( /\S+/g ); + + + + // Convert String-formatted options into Object-formatted ones + function createOptions( options ) { + var object = {}; + jQuery.each( options.match( rnotwhite ) || [], function( _, flag ) { + object[ flag ] = true; + } ); + return object; + } + + /* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ + jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + createOptions( options ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + + // Last fire value for non-forgettable lists + memory, + + // Flag to know if list was already fired + fired, + + // Flag to prevent firing + locked, + + // Actual callback list + list = [], + + // Queue of execution data for repeatable lists + queue = [], + + // Index of currently firing callback (modified by add/remove as needed) + firingIndex = -1, + + // Fire callbacks + fire = function() { + + // Enforce single-firing + locked = options.once; + + // Execute callbacks for all pending executions, + // respecting firingIndex overrides and runtime changes + fired = firing = true; + for ( ; queue.length; firingIndex = -1 ) { + memory = queue.shift(); + while ( ++firingIndex < list.length ) { + + // Run callback and check for early termination + if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && + options.stopOnFalse ) { + + // Jump to end and forget the data so .add doesn't re-fire + firingIndex = list.length; + memory = false; + } + } + } + + // Forget the data if we're done with it + if ( !options.memory ) { + memory = false; + } + + firing = false; + + // Clean up if we're done firing for good + if ( locked ) { + + // Keep an empty list if we have data for future add calls + if ( memory ) { + list = []; + + // Otherwise, this object is spent + } else { + list = ""; + } + } + }, + + // Actual Callbacks object + self = { + + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + + // If we have memory from a past run, we should fire after adding + if ( memory && !firing ) { + firingIndex = list.length - 1; + queue.push( memory ); + } + + ( function add( args ) { + jQuery.each( args, function( _, arg ) { + if ( jQuery.isFunction( arg ) ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && jQuery.type( arg ) !== "string" ) { + + // Inspect recursively + add( arg ); + } + } ); + } )( arguments ); + + if ( memory && !firing ) { + fire(); + } + } + return this; + }, + + // Remove a callback from the list + remove: function() { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + + // Handle firing indexes + if ( index <= firingIndex ) { + firingIndex--; + } + } + } ); + return this; + }, + + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? + jQuery.inArray( fn, list ) > -1 : + list.length > 0; + }, + + // Remove all callbacks from the list + empty: function() { + if ( list ) { + list = []; + } + return this; + }, + + // Disable .fire and .add + // Abort any current/pending executions + // Clear all callbacks and values + disable: function() { + locked = queue = []; + list = memory = ""; + return this; + }, + disabled: function() { + return !list; + }, + + // Disable .fire + // Also disable .add unless we have memory (since it would have no effect) + // Abort any pending executions + lock: function() { + locked = queue = []; + if ( !memory ) { + list = memory = ""; + } + return this; + }, + locked: function() { + return !!locked; + }, + + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( !locked ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + queue.push( args ); + if ( !firing ) { + fire(); + } + } + return this; + }, + + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; + }; + + + jQuery.extend( { + + Deferred: function( func ) { + var tuples = [ + + // action, add listener, listener list, final state + [ "resolve", "done", jQuery.Callbacks( "once memory" ), "resolved" ], + [ "reject", "fail", jQuery.Callbacks( "once memory" ), "rejected" ], + [ "notify", "progress", jQuery.Callbacks( "memory" ) ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + then: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + return jQuery.Deferred( function( newDefer ) { + jQuery.each( tuples, function( i, tuple ) { + var fn = jQuery.isFunction( fns[ i ] ) && fns[ i ]; + + // deferred[ done | fail | progress ] for forwarding actions to newDefer + deferred[ tuple[ 1 ] ]( function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && jQuery.isFunction( returned.promise ) ) { + returned.promise() + .progress( newDefer.notify ) + .done( newDefer.resolve ) + .fail( newDefer.reject ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( + this === promise ? newDefer.promise() : this, + fn ? [ returned ] : arguments + ); + } + } ); + } ); + fns = null; + } ).promise(); + }, + + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Keep pipe for back-compat + promise.pipe = promise.then; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 3 ]; + + // promise[ done | fail | progress ] = list.add + promise[ tuple[ 1 ] ] = list.add; + + // Handle state + if ( stateString ) { + list.add( function() { + + // state = [ resolved | rejected ] + state = stateString; + + // [ reject_list | resolve_list ].disable; progress_list.lock + }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock ); + } + + // deferred[ resolve | reject | notify ] + deferred[ tuple[ 0 ] ] = function() { + deferred[ tuple[ 0 ] + "With" ]( this === deferred ? promise : this, arguments ); + return this; + }; + deferred[ tuple[ 0 ] + "With" ] = list.fireWith; + } ); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( subordinate /* , ..., subordinateN */ ) { + var i = 0, + resolveValues = slice.call( arguments ), + length = resolveValues.length, + + // the count of uncompleted subordinates + remaining = length !== 1 || + ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0, + + // the master Deferred. + // If resolveValues consist of only a single Deferred, just use that. + deferred = remaining === 1 ? subordinate : jQuery.Deferred(), + + // Update function for both resolve and progress values + updateFunc = function( i, contexts, values ) { + return function( value ) { + contexts[ i ] = this; + values[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( values === progressValues ) { + deferred.notifyWith( contexts, values ); + } else if ( !( --remaining ) ) { + deferred.resolveWith( contexts, values ); + } + }; + }, + + progressValues, progressContexts, resolveContexts; + + // Add listeners to Deferred subordinates; treat others as resolved + if ( length > 1 ) { + progressValues = new Array( length ); + progressContexts = new Array( length ); + resolveContexts = new Array( length ); + for ( ; i < length; i++ ) { + if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) { + resolveValues[ i ].promise() + .progress( updateFunc( i, progressContexts, progressValues ) ) + .done( updateFunc( i, resolveContexts, resolveValues ) ) + .fail( deferred.reject ); + } else { + --remaining; + } + } + } + + // If we're not waiting on anything, resolve the master + if ( !remaining ) { + deferred.resolveWith( resolveContexts, resolveValues ); + } + + return deferred.promise(); + } + } ); + + + // The deferred used on DOM ready + var readyList; + + jQuery.fn.ready = function( fn ) { + + // Add the callback + jQuery.ready.promise().done( fn ); + + return this; + }; + + jQuery.extend( { + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Hold (or release) the ready event + holdReady: function( hold ) { + if ( hold ) { + jQuery.readyWait++; + } else { + jQuery.ready( true ); + } + }, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + + // Trigger any bound ready events + if ( jQuery.fn.triggerHandler ) { + jQuery( document ).triggerHandler( "ready" ); + jQuery( document ).off( "ready" ); + } + } + } ); + + /** + * The ready event handler and self cleanup method + */ + function completed() { + document.removeEventListener( "DOMContentLoaded", completed ); + window.removeEventListener( "load", completed ); + jQuery.ready(); + } + + jQuery.ready.promise = function( obj ) { + if ( !readyList ) { + + readyList = jQuery.Deferred(); + + // Catch cases where $(document).ready() is called + // after the browser event has already occurred. + // Support: IE9-10 only + // Older IE sometimes signals "interactive" too soon + if ( document.readyState === "complete" || + ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { + + // Handle it asynchronously to allow scripts the opportunity to delay ready + window.setTimeout( jQuery.ready ); + + } else { + + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed ); + } + } + return readyList.promise( obj ); + }; + + // Kick off the DOM ready check even if the user does not + jQuery.ready.promise(); + + + + + // Multifunctional method to get and set values of a collection + // The value/s can optionally be executed if it's a function + var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + len = elems.length, + bulk = key == null; + + // Sets many values + if ( jQuery.type( key ) === "object" ) { + chainable = true; + for ( i in key ) { + access( elems, fn, i, key[ i ], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !jQuery.isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < len; i++ ) { + fn( + elems[ i ], key, raw ? + value : + value.call( elems[ i ], i, fn( elems[ i ], key ) ) + ); + } + } + } + + return chainable ? + elems : + + // Gets + bulk ? + fn.call( elems ) : + len ? fn( elems[ 0 ], key ) : emptyGet; + }; + var acceptData = function( owner ) { + + // Accepts only: + // - Node + // - Node.ELEMENT_NODE + // - Node.DOCUMENT_NODE + // - Object + // - Any + /* jshint -W018 */ + return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); + }; + + + + + function Data() { + this.expando = jQuery.expando + Data.uid++; + } + + Data.uid = 1; + + Data.prototype = { + + register: function( owner, initial ) { + var value = initial || {}; + + // If it is a node unlikely to be stringify-ed or looped over + // use plain assignment + if ( owner.nodeType ) { + owner[ this.expando ] = value; + + // Otherwise secure it in a non-enumerable, non-writable property + // configurability must be true to allow the property to be + // deleted with the delete operator + } else { + Object.defineProperty( owner, this.expando, { + value: value, + writable: true, + configurable: true + } ); + } + return owner[ this.expando ]; + }, + cache: function( owner ) { + + // We can accept data for non-element nodes in modern browsers, + // but we should not, see #8335. + // Always return an empty object. + if ( !acceptData( owner ) ) { + return {}; + } + + // Check if the owner object already has a cache + var value = owner[ this.expando ]; + + // If not, create one + if ( !value ) { + value = {}; + + // We can accept data for non-element nodes in modern browsers, + // but we should not, see #8335. + // Always return an empty object. + if ( acceptData( owner ) ) { + + // If it is a node unlikely to be stringify-ed or looped over + // use plain assignment + if ( owner.nodeType ) { + owner[ this.expando ] = value; + + // Otherwise secure it in a non-enumerable property + // configurable must be true to allow the property to be + // deleted when data is removed + } else { + Object.defineProperty( owner, this.expando, { + value: value, + configurable: true + } ); + } + } + } + + return value; + }, + set: function( owner, data, value ) { + var prop, + cache = this.cache( owner ); + + // Handle: [ owner, key, value ] args + if ( typeof data === "string" ) { + cache[ data ] = value; + + // Handle: [ owner, { properties } ] args + } else { + + // Copy the properties one-by-one to the cache object + for ( prop in data ) { + cache[ prop ] = data[ prop ]; + } + } + return cache; + }, + get: function( owner, key ) { + return key === undefined ? + this.cache( owner ) : + owner[ this.expando ] && owner[ this.expando ][ key ]; + }, + access: function( owner, key, value ) { + var stored; + + // In cases where either: + // + // 1. No key was specified + // 2. A string key was specified, but no value provided + // + // Take the "read" path and allow the get method to determine + // which value to return, respectively either: + // + // 1. The entire cache object + // 2. The data stored at the key + // + if ( key === undefined || + ( ( key && typeof key === "string" ) && value === undefined ) ) { + + stored = this.get( owner, key ); + + return stored !== undefined ? + stored : this.get( owner, jQuery.camelCase( key ) ); + } + + // When the key is not a string, or both a key and value + // are specified, set or extend (existing objects) with either: + // + // 1. An object of properties + // 2. A key and value + // + this.set( owner, key, value ); + + // Since the "set" path can have two possible entry points + // return the expected data based on which path was taken[*] + return value !== undefined ? value : key; + }, + remove: function( owner, key ) { + var i, name, camel, + cache = owner[ this.expando ]; + + if ( cache === undefined ) { + return; + } + + if ( key === undefined ) { + this.register( owner ); + + } else { + + // Support array or space separated string of keys + if ( jQuery.isArray( key ) ) { + + // If "name" is an array of keys... + // When data is initially created, via ("key", "val") signature, + // keys will be converted to camelCase. + // Since there is no way to tell _how_ a key was added, remove + // both plain key and camelCase key. #12786 + // This will only penalize the array argument path. + name = key.concat( key.map( jQuery.camelCase ) ); + } else { + camel = jQuery.camelCase( key ); + + // Try the string as a key before any manipulation + if ( key in cache ) { + name = [ key, camel ]; + } else { + + // If a key with the spaces exists, use it. + // Otherwise, create an array by matching non-whitespace + name = camel; + name = name in cache ? + [ name ] : ( name.match( rnotwhite ) || [] ); + } + } + + i = name.length; + + while ( i-- ) { + delete cache[ name[ i ] ]; + } + } + + // Remove the expando if there's no more data + if ( key === undefined || jQuery.isEmptyObject( cache ) ) { + + // Support: Chrome <= 35-45+ + // Webkit & Blink performance suffers when deleting properties + // from DOM nodes, so set to undefined instead + // https://code.google.com/p/chromium/issues/detail?id=378607 + if ( owner.nodeType ) { + owner[ this.expando ] = undefined; + } else { + delete owner[ this.expando ]; + } + } + }, + hasData: function( owner ) { + var cache = owner[ this.expando ]; + return cache !== undefined && !jQuery.isEmptyObject( cache ); + } + }; + var dataPriv = new Data(); + + var dataUser = new Data(); + + + + // Implementation Summary + // + // 1. Enforce API surface and semantic compatibility with 1.9.x branch + // 2. Improve the module's maintainability by reducing the storage + // paths to a single mechanism. + // 3. Use the same single mechanism to support "private" and "user" data. + // 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) + // 5. Avoid exposing implementation details on user objects (eg. expando properties) + // 6. Provide a clear path for implementation upgrade to WeakMap in 2014 + + var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + rmultiDash = /[A-Z]/g; + + function dataAttr( elem, key, data ) { + var name; + + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = data === "true" ? true : + data === "false" ? false : + data === "null" ? null : + + // Only convert to a number if it doesn't change the string + +data + "" === data ? +data : + rbrace.test( data ) ? jQuery.parseJSON( data ) : + data; + } catch ( e ) {} + + // Make sure we set the data so it isn't changed later + dataUser.set( elem, key, data ); + } else { + data = undefined; + } + } + return data; + } + + jQuery.extend( { + hasData: function( elem ) { + return dataUser.hasData( elem ) || dataPriv.hasData( elem ); + }, + + data: function( elem, name, data ) { + return dataUser.access( elem, name, data ); + }, + + removeData: function( elem, name ) { + dataUser.remove( elem, name ); + }, + + // TODO: Now that all calls to _data and _removeData have been replaced + // with direct calls to dataPriv methods, these can be deprecated. + _data: function( elem, name, data ) { + return dataPriv.access( elem, name, data ); + }, + + _removeData: function( elem, name ) { + dataPriv.remove( elem, name ); + } + } ); + + jQuery.fn.extend( { + data: function( key, value ) { + var i, name, data, + elem = this[ 0 ], + attrs = elem && elem.attributes; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = dataUser.get( elem ); + + if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE11+ + // The attrs elements can be null (#14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = jQuery.camelCase( name.slice( 5 ) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + dataPriv.set( elem, "hasDataAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each( function() { + dataUser.set( this, key ); + } ); + } + + return access( this, function( value ) { + var data, camelKey; + + // The calling jQuery object (element matches) is not empty + // (and therefore has an element appears at this[ 0 ]) and the + // `value` parameter was not undefined. An empty jQuery object + // will result in `undefined` for elem = this[ 0 ] which will + // throw an exception if an attempt to read a data cache is made. + if ( elem && value === undefined ) { + + // Attempt to get data from the cache + // with the key as-is + data = dataUser.get( elem, key ) || + + // Try to find dashed key if it exists (gh-2779) + // This is for 2.2.x only + dataUser.get( elem, key.replace( rmultiDash, "-$&" ).toLowerCase() ); + + if ( data !== undefined ) { + return data; + } + + camelKey = jQuery.camelCase( key ); + + // Attempt to get data from the cache + // with the key camelized + data = dataUser.get( elem, camelKey ); + if ( data !== undefined ) { + return data; + } + + // Attempt to "discover" the data in + // HTML5 custom data-* attrs + data = dataAttr( elem, camelKey, undefined ); + if ( data !== undefined ) { + return data; + } + + // We tried really hard, but the data doesn't exist. + return; + } + + // Set the data... + camelKey = jQuery.camelCase( key ); + this.each( function() { + + // First, attempt to store a copy or reference of any + // data that might've been store with a camelCased key. + var data = dataUser.get( this, camelKey ); + + // For HTML5 data-* attribute interop, we have to + // store property names with dashes in a camelCase form. + // This might not apply to all properties...* + dataUser.set( this, camelKey, value ); + + // *... In the case of properties that might _actually_ + // have dashes, we need to also store a copy of that + // unchanged property. + if ( key.indexOf( "-" ) > -1 && data !== undefined ) { + dataUser.set( this, key, value ); + } + } ); + }, null, value, arguments.length > 1, null, true ); + }, + + removeData: function( key ) { + return this.each( function() { + dataUser.remove( this, key ); + } ); + } + } ); + + + jQuery.extend( { + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = dataPriv.get( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || jQuery.isArray( data ) ) { + queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // Clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // Not public - generate a queueHooks object, or return the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { + empty: jQuery.Callbacks( "once memory" ).add( function() { + dataPriv.remove( elem, [ type + "queue", key ] ); + } ) + } ); + } + } ); + + jQuery.fn.extend( { + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[ 0 ], type ); + } + + return data === undefined ? + this : + this.each( function() { + var queue = jQuery.queue( this, type, data ); + + // Ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + } ); + }, + dequeue: function( type ) { + return this.each( function() { + jQuery.dequeue( this, type ); + } ); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while ( i-- ) { + tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } + } ); + var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; + + var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); + + + var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + + var isHidden = function( elem, el ) { + + // isHidden might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + return jQuery.css( elem, "display" ) === "none" || + !jQuery.contains( elem.ownerDocument, elem ); + }; + + + + function adjustCSS( elem, prop, valueParts, tween ) { + var adjusted, + scale = 1, + maxIterations = 20, + currentValue = tween ? + function() { return tween.cur(); } : + function() { return jQuery.css( elem, prop, "" ); }, + initial = currentValue(), + unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), + + // Starting value computation is required for potential unit mismatches + initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && + rcssNum.exec( jQuery.css( elem, prop ) ); + + if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { + + // Trust units reported by jQuery.css + unit = unit || initialInUnit[ 3 ]; + + // Make sure we update the tween properties later on + valueParts = valueParts || []; + + // Iteratively approximate from a nonzero starting point + initialInUnit = +initial || 1; + + do { + + // If previous iteration zeroed out, double until we get *something*. + // Use string for doubling so we don't accidentally see scale as unchanged below + scale = scale || ".5"; + + // Adjust and apply + initialInUnit = initialInUnit / scale; + jQuery.style( elem, prop, initialInUnit + unit ); + + // Update scale, tolerating zero or NaN from tween.cur() + // Break the loop if scale is unchanged or perfect, or if we've just had enough. + } while ( + scale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations + ); + } + + if ( valueParts ) { + initialInUnit = +initialInUnit || +initial || 0; + + // Apply relative offset (+=/-=) if specified + adjusted = valueParts[ 1 ] ? + initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : + +valueParts[ 2 ]; + if ( tween ) { + tween.unit = unit; + tween.start = initialInUnit; + tween.end = adjusted; + } + } + return adjusted; + } + var rcheckableType = ( /^(?:checkbox|radio)$/i ); + + var rtagName = ( /<([\w:-]+)/ ); + + var rscriptType = ( /^$|\/(?:java|ecma)script/i ); + + + + // We have to close these tags to support XHTML (#13200) + var wrapMap = { + + // Support: IE9 + option: [ 1, "<select multiple='multiple'>", "</select>" ], + + // XHTML parsers do not magically insert elements in the + // same way that tag soup parsers do. So we cannot shorten + // this by omitting <tbody> or other required elements. + thead: [ 1, "<table>", "</table>" ], + col: [ 2, "<table><colgroup>", "</colgroup></table>" ], + tr: [ 2, "<table><tbody>", "</tbody></table>" ], + td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ], + + _default: [ 0, "", "" ] + }; + + // Support: IE9 + wrapMap.optgroup = wrapMap.option; + + wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; + wrapMap.th = wrapMap.td; + + + function getAll( context, tag ) { + + // Support: IE9-11+ + // Use typeof to avoid zero-argument method invocation on host objects (#15151) + var ret = typeof context.getElementsByTagName !== "undefined" ? + context.getElementsByTagName( tag || "*" ) : + typeof context.querySelectorAll !== "undefined" ? + context.querySelectorAll( tag || "*" ) : + []; + + return tag === undefined || tag && jQuery.nodeName( context, tag ) ? + jQuery.merge( [ context ], ret ) : + ret; + } + + + // Mark scripts as having already been evaluated + function setGlobalEval( elems, refElements ) { + var i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + dataPriv.set( + elems[ i ], + "globalEval", + !refElements || dataPriv.get( refElements[ i ], "globalEval" ) + ); + } + } + + + var rhtml = /<|&#?\w+;/; + + function buildFragment( elems, context, scripts, selection, ignored ) { + var elem, tmp, tag, wrap, contains, j, + fragment = context.createDocumentFragment(), + nodes = [], + i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( jQuery.type( elem ) === "object" ) { + + // Support: Android<4.1, PhantomJS<2 + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); + + // Deserialize a standard representation + tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; + + // Descend through wrappers to the right content + j = wrap[ 0 ]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Support: Android<4.1, PhantomJS<2 + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, tmp.childNodes ); + + // Remember the top-level container + tmp = fragment.firstChild; + + // Ensure the created nodes are orphaned (#12392) + tmp.textContent = ""; + } + } + } + + // Remove wrapper from fragment + fragment.textContent = ""; + + i = 0; + while ( ( elem = nodes[ i++ ] ) ) { + + // Skip elements already in the context collection (trac-4087) + if ( selection && jQuery.inArray( elem, selection ) > -1 ) { + if ( ignored ) { + ignored.push( elem ); + } + continue; + } + + contains = jQuery.contains( elem.ownerDocument, elem ); + + // Append to fragment + tmp = getAll( fragment.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( contains ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( ( elem = tmp[ j++ ] ) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + return fragment; + } + + + ( function() { + var fragment = document.createDocumentFragment(), + div = fragment.appendChild( document.createElement( "div" ) ), + input = document.createElement( "input" ); + + // Support: Android 4.0-4.3, Safari<=5.1 + // Check state lost if the name is set (#11217) + // Support: Windows Web Apps (WWA) + // `name` and `type` must use .setAttribute for WWA (#14901) + input.setAttribute( "type", "radio" ); + input.setAttribute( "checked", "checked" ); + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + + // Support: Safari<=5.1, Android<4.2 + // Older WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE<=11+ + // Make sure textarea (and checkbox) defaultValue is properly cloned + div.innerHTML = "<textarea>x</textarea>"; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; + } )(); + + + var + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, + rtypenamespace = /^([^.]*)(?:\.(.+)|)/; + + function returnTrue() { + return true; + } + + function returnFalse() { + return false; + } + + // Support: IE9 + // See #13393 for more info + function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } + } + + function on( elem, types, selector, data, fn, one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + on( elem, type, selector, data, types[ type ], one ); + } + return elem; + } + + if ( data == null && fn == null ) { + + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return elem; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return elem.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + } ); + } + + /* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ + jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + + var handleObjIn, eventHandle, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.get( elem ); + + // Don't attach events to noData or text/comment nodes (but allow plain objects) + if ( !elemData ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !( events = elemData.events ) ) { + events = elemData.events = {}; + } + if ( !( eventHandle = elemData.handle ) ) { + eventHandle = elemData.handle = function( e ) { + + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? + jQuery.event.dispatch.apply( elem, arguments ) : undefined; + }; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnotwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend( { + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join( "." ) + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !( handlers = events[ type ] ) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener if the special events handler returns false + if ( !special.setup || + special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var j, origCount, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); + + if ( !elemData || !( events = elemData.events ) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnotwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[ 2 ] && + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || + selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || + special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove data and the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + dataPriv.remove( elem, "handle events" ); + } + }, + + dispatch: function( event ) { + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( event ); + + var i, j, ret, matched, handleObj, + handlerQueue = [], + args = slice.call( arguments ), + handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[ 0 ] = event; + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( ( handleObj = matched.handlers[ j++ ] ) && + !event.isImmediatePropagationStopped() ) { + + // Triggered event must either 1) have no namespace, or 2) have namespace(s) + // a subset or equal to those in the bound event (both can have no namespace). + if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || + handleObj.handler ).apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( ( event.result = ret ) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var i, matches, sel, handleObj, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Support (at least): Chrome, IE9 + // Find delegate handlers + // Black-hole SVG <use> instance trees (#13180) + // + // Support: Firefox<=42+ + // Avoid non-left-click in FF but don't block IE radio events (#3861, gh-2343) + if ( delegateCount && cur.nodeType && + ( event.type !== "click" || isNaN( event.button ) || event.button < 1 ) ) { + + for ( ; cur !== this; cur = cur.parentNode || this ) { + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && ( cur.disabled !== true || event.type !== "click" ) ) { + matches = []; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matches[ sel ] === undefined ) { + matches[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) > -1 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matches[ sel ] ) { + matches.push( handleObj ); + } + } + if ( matches.length ) { + handlerQueue.push( { elem: cur, handlers: matches } ); + } + } + } + } + + // Add the remaining (directly-bound) handlers + if ( delegateCount < handlers.length ) { + handlerQueue.push( { elem: this, handlers: handlers.slice( delegateCount ) } ); + } + + return handlerQueue; + }, + + // Includes some event props shared by KeyEvent and MouseEvent + props: ( "altKey bubbles cancelable ctrlKey currentTarget detail eventPhase " + + "metaKey relatedTarget shiftKey target timeStamp view which" ).split( " " ), + + fixHooks: {}, + + keyHooks: { + props: "char charCode key keyCode".split( " " ), + filter: function( event, original ) { + + // Add which for key events + if ( event.which == null ) { + event.which = original.charCode != null ? original.charCode : original.keyCode; + } + + return event; + } + }, + + mouseHooks: { + props: ( "button buttons clientX clientY offsetX offsetY pageX pageY " + + "screenX screenY toElement" ).split( " " ), + filter: function( event, original ) { + var eventDoc, doc, body, + button = original.button; + + // Calculate pageX/Y if missing and clientX/Y available + if ( event.pageX == null && original.clientX != null ) { + eventDoc = event.target.ownerDocument || document; + doc = eventDoc.documentElement; + body = eventDoc.body; + + event.pageX = original.clientX + + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - + ( doc && doc.clientLeft || body && body.clientLeft || 0 ); + event.pageY = original.clientY + + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - + ( doc && doc.clientTop || body && body.clientTop || 0 ); + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + // Note: button is not normalized, so don't use it + if ( !event.which && button !== undefined ) { + event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); + } + + return event; + } + }, + + fix: function( event ) { + if ( event[ jQuery.expando ] ) { + return event; + } + + // Create a writable copy of the event object and normalize some properties + var i, prop, copy, + type = event.type, + originalEvent = event, + fixHook = this.fixHooks[ type ]; + + if ( !fixHook ) { + this.fixHooks[ type ] = fixHook = + rmouseEvent.test( type ) ? this.mouseHooks : + rkeyEvent.test( type ) ? this.keyHooks : + {}; + } + copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; + + event = new jQuery.Event( originalEvent ); + + i = copy.length; + while ( i-- ) { + prop = copy[ i ]; + event[ prop ] = originalEvent[ prop ]; + } + + // Support: Cordova 2.5 (WebKit) (#13255) + // All events should have a target; Cordova deviceready doesn't + if ( !event.target ) { + event.target = document; + } + + // Support: Safari 6.0+, Chrome<28 + // Target should not be a text node (#504, #13143) + if ( event.target.nodeType === 3 ) { + event.target = event.target.parentNode; + } + + return fixHook.filter ? fixHook.filter( event, originalEvent ) : event; + }, + + special: { + load: { + + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + focus: { + + // Fire native event if possible so blur/focus sequence is correct + trigger: function() { + if ( this !== safeActiveElement() && this.focus ) { + this.focus(); + return false; + } + }, + delegateType: "focusin" + }, + blur: { + trigger: function() { + if ( this === safeActiveElement() && this.blur ) { + this.blur(); + return false; + } + }, + delegateType: "focusout" + }, + click: { + + // For checkbox, fire native event so checked state will be right + trigger: function() { + if ( this.type === "checkbox" && this.click && jQuery.nodeName( this, "input" ) ) { + this.click(); + return false; + } + }, + + // For cross-browser consistency, don't fire native .click() on links + _default: function( event ) { + return jQuery.nodeName( event.target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Support: Firefox 20+ + // Firefox doesn't alert if the returnValue field is not set. + if ( event.result !== undefined && event.originalEvent ) { + event.originalEvent.returnValue = event.result; + } + } + } + } + }; + + jQuery.removeEvent = function( elem, type, handle ) { + + // This "if" is needed for plain objects + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle ); + } + }; + + jQuery.Event = function( src, props ) { + + // Allow instantiation without the 'new' keyword + if ( !( this instanceof jQuery.Event ) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = src.defaultPrevented || + src.defaultPrevented === undefined && + + // Support: Android<4.0 + src.returnValue === false ? + returnTrue : + returnFalse; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || jQuery.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; + }; + + // jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding + // http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html + jQuery.Event.prototype = { + constructor: jQuery.Event, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + + if ( e ) { + e.preventDefault(); + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + + if ( e ) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } + }; + + // Create mouseenter/leave events using mouseover/out and event-time checks + // so that event delegation works in jQuery. + // Do the same for pointerenter/pointerleave and pointerover/pointerout + // + // Support: Safari 7 only + // Safari sends mouseenter too often; see: + // https://code.google.com/p/chromium/issues/detail?id=470258 + // for the description of the bug (it existed in older Chrome versions as well). + jQuery.each( { + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" + }, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mouseenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; + } ); + + jQuery.fn.extend( { + on: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn ); + }, + one: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? + handleObj.origType + "." + handleObj.namespace : + handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each( function() { + jQuery.event.remove( this, types, fn, selector ); + } ); + } + } ); + + + var + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi, + + // Support: IE 10-11, Edge 10240+ + // In IE/Edge using regex groups here causes severe slowdowns. + // See https://connect.microsoft.com/IE/feedback/details/1736512/ + rnoInnerhtml = /<script|<style|<link/i, + + // checked="checked" or checked + rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, + rscriptTypeMasked = /^true\/(.*)/, + rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g; + + // Manipulating tables requires a tbody + function manipulationTarget( elem, content ) { + return jQuery.nodeName( elem, "table" ) && + jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ? + + elem.getElementsByTagName( "tbody" )[ 0 ] || + elem.appendChild( elem.ownerDocument.createElement( "tbody" ) ) : + elem; + } + + // Replace/restore the type attribute of script elements for safe DOM manipulation + function disableScript( elem ) { + elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; + return elem; + } + function restoreScript( elem ) { + var match = rscriptTypeMasked.exec( elem.type ); + + if ( match ) { + elem.type = match[ 1 ]; + } else { + elem.removeAttribute( "type" ); + } + + return elem; + } + + function cloneCopyEvent( src, dest ) { + var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events; + + if ( dest.nodeType !== 1 ) { + return; + } + + // 1. Copy private data: events, handlers, etc. + if ( dataPriv.hasData( src ) ) { + pdataOld = dataPriv.access( src ); + pdataCur = dataPriv.set( dest, pdataOld ); + events = pdataOld.events; + + if ( events ) { + delete pdataCur.handle; + pdataCur.events = {}; + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + } + + // 2. Copy user data + if ( dataUser.hasData( src ) ) { + udataOld = dataUser.access( src ); + udataCur = jQuery.extend( {}, udataOld ); + + dataUser.set( dest, udataCur ); + } + } + + // Fix IE bugs, see support tests + function fixInput( src, dest ) { + var nodeName = dest.nodeName.toLowerCase(); + + // Fails to persist the checked state of a cloned checkbox or radio button. + if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + dest.checked = src.checked; + + // Fails to return the selected option to the default selected state when cloning options + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } + } + + function domManip( collection, args, callback, ignored ) { + + // Flatten any nested arrays + args = concat.apply( [], args ); + + var fragment, first, scripts, hasScripts, node, doc, + i = 0, + l = collection.length, + iNoClone = l - 1, + value = args[ 0 ], + isFunction = jQuery.isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( isFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return collection.each( function( index ) { + var self = collection.eq( index ); + if ( isFunction ) { + args[ 0 ] = value.call( this, index, self.html() ); + } + domManip( self, args, callback, ignored ); + } ); + } + + if ( l ) { + fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + // Require either new content or an interest in ignored elements to invoke the callback + if ( first || ignored ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item + // instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + + // Support: Android<4.1, PhantomJS<2 + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( collection[ i ], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !dataPriv.access( node, "globalEval" ) && + jQuery.contains( doc, node ) ) { + + if ( node.src ) { + + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl ) { + jQuery._evalUrl( node.src ); + } + } else { + jQuery.globalEval( node.textContent.replace( rcleanScript, "" ) ); + } + } + } + } + } + } + + return collection; + } + + function remove( elem, selector, keepData ) { + var node, + nodes = selector ? jQuery.filter( selector, elem ) : elem, + i = 0; + + for ( ; ( node = nodes[ i ] ) != null; i++ ) { + if ( !keepData && node.nodeType === 1 ) { + jQuery.cleanData( getAll( node ) ); + } + + if ( node.parentNode ) { + if ( keepData && jQuery.contains( node.ownerDocument, node ) ) { + setGlobalEval( getAll( node, "script" ) ); + } + node.parentNode.removeChild( node ); + } + } + + return elem; + } + + jQuery.extend( { + htmlPrefilter: function( html ) { + return html.replace( rxhtmlTag, "<$1></$2>" ); + }, + + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var i, l, srcElements, destElements, + clone = elem.cloneNode( true ), + inPage = jQuery.contains( elem.ownerDocument, elem ); + + // Fix IE cloning issues + if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && + !jQuery.isXMLDoc( elem ) ) { + + // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + fixInput( srcElements[ i ], destElements[ i ] ); + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + cloneCopyEvent( srcElements[ i ], destElements[ i ] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + // Return the cloned set + return clone; + }, + + cleanData: function( elems ) { + var data, elem, type, + special = jQuery.event.special, + i = 0; + + for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { + if ( acceptData( elem ) ) { + if ( ( data = elem[ dataPriv.expando ] ) ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Support: Chrome <= 35-45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataPriv.expando ] = undefined; + } + if ( elem[ dataUser.expando ] ) { + + // Support: Chrome <= 35-45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataUser.expando ] = undefined; + } + } + } + } + } ); + + jQuery.fn.extend( { + + // Keep domManip exposed until 3.0 (gh-2225) + domManip: domManip, + + detach: function( selector ) { + return remove( this, selector, true ); + }, + + remove: function( selector ) { + return remove( this, selector ); + }, + + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().each( function() { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.textContent = value; + } + } ); + }, null, value, arguments.length ); + }, + + append: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + } ); + }, + + prepend: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + } ); + }, + + before: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + } ); + }, + + after: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + } ); + }, + + empty: function() { + var elem, + i = 0; + + for ( ; ( elem = this[ i ] ) != null; i++ ) { + if ( elem.nodeType === 1 ) { + + // Prevent memory leaks + jQuery.cleanData( getAll( elem, false ) ); + + // Remove any remaining nodes + elem.textContent = ""; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function() { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + } ); + }, + + html: function( value ) { + return access( this, function( value ) { + var elem = this[ 0 ] || {}, + i = 0, + l = this.length; + + if ( value === undefined && elem.nodeType === 1 ) { + return elem.innerHTML; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { + + value = jQuery.htmlPrefilter( value ); + + try { + for ( ; i < l; i++ ) { + elem = this[ i ] || {}; + + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch ( e ) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var ignored = []; + + // Make the changes, replacing each non-ignored context element with the new content + return domManip( this, arguments, function( elem ) { + var parent = this.parentNode; + + if ( jQuery.inArray( this, ignored ) < 0 ) { + jQuery.cleanData( getAll( this ) ); + if ( parent ) { + parent.replaceChild( elem, this ); + } + } + + // Force callback invocation + }, ignored ); + } + } ); + + jQuery.each( { + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" + }, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1, + i = 0; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone( true ); + jQuery( insert[ i ] )[ original ]( elems ); + + // Support: QtWebKit + // .get() because push.apply(_, arraylike) throws + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; + } ); + + + var iframe, + elemdisplay = { + + // Support: Firefox + // We have to pre-define these values for FF (#10227) + HTML: "block", + BODY: "block" + }; + + /** + * Retrieve the actual display of a element + * @param {String} name nodeName of the element + * @param {Object} doc Document object + */ + + // Called only from within defaultDisplay + function actualDisplay( name, doc ) { + var elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ), + + display = jQuery.css( elem[ 0 ], "display" ); + + // We don't have any data stored on the element, + // so use "detach" method as fast way to get rid of the element + elem.detach(); + + return display; + } + + /** + * Try to determine the default display value of an element + * @param {String} nodeName + */ + function defaultDisplay( nodeName ) { + var doc = document, + display = elemdisplay[ nodeName ]; + + if ( !display ) { + display = actualDisplay( nodeName, doc ); + + // If the simple way fails, read from inside an iframe + if ( display === "none" || !display ) { + + // Use the already-created iframe if possible + iframe = ( iframe || jQuery( "<iframe frameborder='0' width='0' height='0'/>" ) ) + .appendTo( doc.documentElement ); + + // Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse + doc = iframe[ 0 ].contentDocument; + + // Support: IE + doc.write(); + doc.close(); + + display = actualDisplay( nodeName, doc ); + iframe.detach(); + } + + // Store the correct default display + elemdisplay[ nodeName ] = display; + } + + return display; + } + var rmargin = ( /^margin/ ); + + var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); + + var getStyles = function( elem ) { + + // Support: IE<=11+, Firefox<=30+ (#15098, #14150) + // IE throws on elements created in popups + // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" + var view = elem.ownerDocument.defaultView; + + if ( !view || !view.opener ) { + view = window; + } + + return view.getComputedStyle( elem ); + }; + + var swap = function( elem, options, callback, args ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.apply( elem, args || [] ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; + }; + + + var documentElement = document.documentElement; + + + + ( function() { + var pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, reliableMarginLeftVal, + container = document.createElement( "div" ), + div = document.createElement( "div" ); + + // Finish early in limited (non-browser) environments + if ( !div.style ) { + return; + } + + // Support: IE9-11+ + // Style of cloned element affects source element cloned (#8908) + div.style.backgroundClip = "content-box"; + div.cloneNode( true ).style.backgroundClip = ""; + support.clearCloneStyle = div.style.backgroundClip === "content-box"; + + container.style.cssText = "border:0;width:8px;height:0;top:0;left:-9999px;" + + "padding:0;margin-top:1px;position:absolute"; + container.appendChild( div ); + + // Executing both pixelPosition & boxSizingReliable tests require only one layout + // so they're executed at the same time to save the second computation. + function computeStyleTests() { + div.style.cssText = + + // Support: Firefox<29, Android 2.3 + // Vendor-prefix box-sizing + "-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;" + + "position:relative;display:block;" + + "margin:auto;border:1px;padding:1px;" + + "top:1%;width:50%"; + div.innerHTML = ""; + documentElement.appendChild( container ); + + var divStyle = window.getComputedStyle( div ); + pixelPositionVal = divStyle.top !== "1%"; + reliableMarginLeftVal = divStyle.marginLeft === "2px"; + boxSizingReliableVal = divStyle.width === "4px"; + + // Support: Android 4.0 - 4.3 only + // Some styles come back with percentage values, even though they shouldn't + div.style.marginRight = "50%"; + pixelMarginRightVal = divStyle.marginRight === "4px"; + + documentElement.removeChild( container ); + } + + jQuery.extend( support, { + pixelPosition: function() { + + // This test is executed only once but we still do memoizing + // since we can use the boxSizingReliable pre-computing. + // No need to check if the test was already performed, though. + computeStyleTests(); + return pixelPositionVal; + }, + boxSizingReliable: function() { + if ( boxSizingReliableVal == null ) { + computeStyleTests(); + } + return boxSizingReliableVal; + }, + pixelMarginRight: function() { + + // Support: Android 4.0-4.3 + // We're checking for boxSizingReliableVal here instead of pixelMarginRightVal + // since that compresses better and they're computed together anyway. + if ( boxSizingReliableVal == null ) { + computeStyleTests(); + } + return pixelMarginRightVal; + }, + reliableMarginLeft: function() { + + // Support: IE <=8 only, Android 4.0 - 4.3 only, Firefox <=3 - 37 + if ( boxSizingReliableVal == null ) { + computeStyleTests(); + } + return reliableMarginLeftVal; + }, + reliableMarginRight: function() { + + // Support: Android 2.3 + // Check if div with explicit width and no margin-right incorrectly + // gets computed margin-right based on width of container. (#3333) + // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right + // This support function is only executed once so no memoizing is needed. + var ret, + marginDiv = div.appendChild( document.createElement( "div" ) ); + + // Reset CSS: box-sizing; display; margin; border; padding + marginDiv.style.cssText = div.style.cssText = + + // Support: Android 2.3 + // Vendor-prefix box-sizing + "-webkit-box-sizing:content-box;box-sizing:content-box;" + + "display:block;margin:0;border:0;padding:0"; + marginDiv.style.marginRight = marginDiv.style.width = "0"; + div.style.width = "1px"; + documentElement.appendChild( container ); + + ret = !parseFloat( window.getComputedStyle( marginDiv ).marginRight ); + + documentElement.removeChild( container ); + div.removeChild( marginDiv ); + + return ret; + } + } ); + } )(); + + + function curCSS( elem, name, computed ) { + var width, minWidth, maxWidth, ret, + style = elem.style; + + computed = computed || getStyles( elem ); + ret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined; + + // Support: Opera 12.1x only + // Fall back to style even without computed + // computed is undefined for elems on document fragments + if ( ( ret === "" || ret === undefined ) && !jQuery.contains( elem.ownerDocument, elem ) ) { + ret = jQuery.style( elem, name ); + } + + // Support: IE9 + // getPropertyValue is only needed for .css('filter') (#12537) + if ( computed ) { + + // A tribute to the "awesome hack by Dean Edwards" + // Android Browser returns percentage for some values, + // but width seems to be reliably pixels. + // This is against the CSSOM draft spec: + // http://dev.w3.org/csswg/cssom/#resolved-values + if ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) { + + // Remember the original values + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + // Put in the new values to get a computed value out + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + // Revert the changed values + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret !== undefined ? + + // Support: IE9-11+ + // IE returns zIndex value as an integer. + ret + "" : + ret; + } + + + function addGetHookIf( conditionFn, hookFn ) { + + // Define the hook, we'll check on the first run if it's really needed. + return { + get: function() { + if ( conditionFn() ) { + + // Hook not needed (or it's not possible to use it due + // to missing dependency), remove it. + delete this.get; + return; + } + + // Hook needed; redefine it so that the support test is not executed again. + return ( this.get = hookFn ).apply( this, arguments ); + } + }; + } + + + var + + // Swappable if display is none or starts with table + // except "table", "table-cell", or "table-caption" + // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: "0", + fontWeight: "400" + }, + + cssPrefixes = [ "Webkit", "O", "Moz", "ms" ], + emptyStyle = document.createElement( "div" ).style; + + // Return a css property mapped to a potentially vendor prefixed property + function vendorPropName( name ) { + + // Shortcut for names that are not vendor prefixed + if ( name in emptyStyle ) { + return name; + } + + // Check for vendor prefixed names + var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in emptyStyle ) { + return name; + } + } + } + + function setPositiveNumber( elem, value, subtract ) { + + // Any relative (+/-) values have already been + // normalized at this point + var matches = rcssNum.exec( value ); + return matches ? + + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : + value; + } + + function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) { + var i = extra === ( isBorderBox ? "border" : "content" ) ? + + // If we already have the right measurement, avoid augmentation + 4 : + + // Otherwise initialize for horizontal or vertical properties + name === "width" ? 1 : 0, + + val = 0; + + for ( ; i < 4; i += 2 ) { + + // Both box models exclude margin, so add it if we want it + if ( extra === "margin" ) { + val += jQuery.css( elem, extra + cssExpand[ i ], true, styles ); + } + + if ( isBorderBox ) { + + // border-box includes padding, so remove it if we want content + if ( extra === "content" ) { + val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // At this point, extra isn't border nor margin, so remove border + if ( extra !== "margin" ) { + val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } else { + + // At this point, extra isn't content, so add padding + val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // At this point, extra isn't content nor padding, so add border + if ( extra !== "padding" ) { + val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + return val; + } + + function getWidthOrHeight( elem, name, extra ) { + + // Start with offset property, which is equivalent to the border-box value + var valueIsBorderBox = true, + val = name === "width" ? elem.offsetWidth : elem.offsetHeight, + styles = getStyles( elem ), + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; + + // Support: IE11 only + // In IE 11 fullscreen elements inside of an iframe have + // 100x too small dimensions (gh-1764). + if ( document.msFullscreenElement && window.top !== window ) { + + // Support: IE11 only + // Running getBoundingClientRect on a disconnected node + // in IE throws an error. + if ( elem.getClientRects().length ) { + val = Math.round( elem.getBoundingClientRect()[ name ] * 100 ); + } + } + + // Some non-html elements return undefined for offsetWidth, so check for null/undefined + // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285 + // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668 + if ( val <= 0 || val == null ) { + + // Fall back to computed then uncomputed css if necessary + val = curCSS( elem, name, styles ); + if ( val < 0 || val == null ) { + val = elem.style[ name ]; + } + + // Computed unit is not pixels. Stop here and return. + if ( rnumnonpx.test( val ) ) { + return val; + } + + // Check for style in case a browser which returns unreliable values + // for getComputedStyle silently falls back to the reliable elem.style + valueIsBorderBox = isBorderBox && + ( support.boxSizingReliable() || val === elem.style[ name ] ); + + // Normalize "", auto, and prepare for extra + val = parseFloat( val ) || 0; + } + + // Use the active box-sizing model to add/subtract irrelevant styles + return ( val + + augmentWidthOrHeight( + elem, + name, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles + ) + ) + "px"; + } + + function showHide( elements, show ) { + var display, elem, hidden, + values = [], + index = 0, + length = elements.length; + + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + + values[ index ] = dataPriv.get( elem, "olddisplay" ); + display = elem.style.display; + if ( show ) { + + // Reset the inline display of this element to learn if it is + // being hidden by cascaded rules or not + if ( !values[ index ] && display === "none" ) { + elem.style.display = ""; + } + + // Set elements which have been overridden with display: none + // in a stylesheet to whatever the default browser style is + // for such an element + if ( elem.style.display === "" && isHidden( elem ) ) { + values[ index ] = dataPriv.access( + elem, + "olddisplay", + defaultDisplay( elem.nodeName ) + ); + } + } else { + hidden = isHidden( elem ); + + if ( display !== "none" || !hidden ) { + dataPriv.set( + elem, + "olddisplay", + hidden ? display : jQuery.css( elem, "display" ) + ); + } + } + } + + // Set the display of most of the elements in a second loop + // to avoid the constant reflow + for ( index = 0; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + if ( !show || elem.style.display === "none" || elem.style.display === "" ) { + elem.style.display = show ? values[ index ] || "" : "none"; + } + } + + return elements; + } + + jQuery.extend( { + + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + } + } + } + }, + + // Don't automatically add "px" to these possibly-unitless properties + cssNumber: { + "animationIterationCount": true, + "columnCount": true, + "fillOpacity": true, + "flexGrow": true, + "flexShrink": true, + "fontWeight": true, + "lineHeight": true, + "opacity": true, + "order": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: { + "float": "cssFloat" + }, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = jQuery.camelCase( name ), + style = elem.style; + + name = jQuery.cssProps[ origName ] || + ( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName ); + + // Gets hook for the prefixed version, then unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // Convert "+=" or "-=" to relative numbers (#7345) + if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { + value = adjustCSS( elem, name, ret ); + + // Fixes bug #9237 + type = "number"; + } + + // Make sure that null and NaN values aren't set (#7116) + if ( value == null || value !== value ) { + return; + } + + // If a number was passed in, add the unit (except for certain CSS properties) + if ( type === "number" ) { + value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); + } + + // Support: IE9-11+ + // background-* props affect original clone's values + if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { + style[ name ] = "inherit"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !( "set" in hooks ) || + ( value = hooks.set( elem, value, extra ) ) !== undefined ) { + + style[ name ] = value; + } + + } else { + + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && + ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { + + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, extra, styles ) { + var val, num, hooks, + origName = jQuery.camelCase( name ); + + // Make sure that we're working with the right name + name = jQuery.cssProps[ origName ] || + ( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName ); + + // Try prefixed name followed by the unprefixed name + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name, styles ); + } + + // Convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Make numeric if forced or a qualifier was provided and val looks numeric + if ( extra === "" || extra ) { + num = parseFloat( val ); + return extra === true || isFinite( num ) ? num || 0 : val; + } + return val; + } + } ); + + jQuery.each( [ "height", "width" ], function( i, name ) { + jQuery.cssHooks[ name ] = { + get: function( elem, computed, extra ) { + if ( computed ) { + + // Certain elements can have dimension info if we invisibly show them + // but it must have a current display style that would benefit + return rdisplayswap.test( jQuery.css( elem, "display" ) ) && + elem.offsetWidth === 0 ? + swap( elem, cssShow, function() { + return getWidthOrHeight( elem, name, extra ); + } ) : + getWidthOrHeight( elem, name, extra ); + } + }, + + set: function( elem, value, extra ) { + var matches, + styles = extra && getStyles( elem ), + subtract = extra && augmentWidthOrHeight( + elem, + name, + extra, + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + styles + ); + + // Convert to pixels if value adjustment is needed + if ( subtract && ( matches = rcssNum.exec( value ) ) && + ( matches[ 3 ] || "px" ) !== "px" ) { + + elem.style[ name ] = value; + value = jQuery.css( elem, name ); + } + + return setPositiveNumber( elem, value, subtract ); + } + }; + } ); + + jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, + function( elem, computed ) { + if ( computed ) { + return ( parseFloat( curCSS( elem, "marginLeft" ) ) || + elem.getBoundingClientRect().left - + swap( elem, { marginLeft: 0 }, function() { + return elem.getBoundingClientRect().left; + } ) + ) + "px"; + } + } + ); + + // Support: Android 2.3 + jQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight, + function( elem, computed ) { + if ( computed ) { + return swap( elem, { "display": "inline-block" }, + curCSS, [ elem, "marginRight" ] ); + } + } + ); + + // These hooks are used by animate to expand properties + jQuery.each( { + margin: "", + padding: "", + border: "Width" + }, function( prefix, suffix ) { + jQuery.cssHooks[ prefix + suffix ] = { + expand: function( value ) { + var i = 0, + expanded = {}, + + // Assumes a single number if not a string + parts = typeof value === "string" ? value.split( " " ) : [ value ]; + + for ( ; i < 4; i++ ) { + expanded[ prefix + cssExpand[ i ] + suffix ] = + parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; + } + + return expanded; + } + }; + + if ( !rmargin.test( prefix ) ) { + jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; + } + } ); + + jQuery.fn.extend( { + css: function( name, value ) { + return access( this, function( elem, name, value ) { + var styles, len, + map = {}, + i = 0; + + if ( jQuery.isArray( name ) ) { + styles = getStyles( elem ); + len = name.length; + + for ( ; i < len; i++ ) { + map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); + } + + return map; + } + + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + }, + show: function() { + return showHide( this, true ); + }, + hide: function() { + return showHide( this ); + }, + toggle: function( state ) { + if ( typeof state === "boolean" ) { + return state ? this.show() : this.hide(); + } + + return this.each( function() { + if ( isHidden( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + } ); + } + } ); + + + function Tween( elem, options, prop, end, easing ) { + return new Tween.prototype.init( elem, options, prop, end, easing ); + } + jQuery.Tween = Tween; + + Tween.prototype = { + constructor: Tween, + init: function( elem, options, prop, end, easing, unit ) { + this.elem = elem; + this.prop = prop; + this.easing = easing || jQuery.easing._default; + this.options = options; + this.start = this.now = this.cur(); + this.end = end; + this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + }, + cur: function() { + var hooks = Tween.propHooks[ this.prop ]; + + return hooks && hooks.get ? + hooks.get( this ) : + Tween.propHooks._default.get( this ); + }, + run: function( percent ) { + var eased, + hooks = Tween.propHooks[ this.prop ]; + + if ( this.options.duration ) { + this.pos = eased = jQuery.easing[ this.easing ]( + percent, this.options.duration * percent, 0, 1, this.options.duration + ); + } else { + this.pos = eased = percent; + } + this.now = ( this.end - this.start ) * eased + this.start; + + if ( this.options.step ) { + this.options.step.call( this.elem, this.now, this ); + } + + if ( hooks && hooks.set ) { + hooks.set( this ); + } else { + Tween.propHooks._default.set( this ); + } + return this; + } + }; + + Tween.prototype.init.prototype = Tween.prototype; + + Tween.propHooks = { + _default: { + get: function( tween ) { + var result; + + // Use a property on the element directly when it is not a DOM element, + // or when there is no matching style property that exists. + if ( tween.elem.nodeType !== 1 || + tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { + return tween.elem[ tween.prop ]; + } + + // Passing an empty string as a 3rd parameter to .css will automatically + // attempt a parseFloat and fallback to a string if the parse fails. + // Simple values such as "10px" are parsed to Float; + // complex values such as "rotate(1rad)" are returned as-is. + result = jQuery.css( tween.elem, tween.prop, "" ); + + // Empty strings, null, undefined and "auto" are converted to 0. + return !result || result === "auto" ? 0 : result; + }, + set: function( tween ) { + + // Use step hook for back compat. + // Use cssHook if its there. + // Use .style if available and use plain properties where available. + if ( jQuery.fx.step[ tween.prop ] ) { + jQuery.fx.step[ tween.prop ]( tween ); + } else if ( tween.elem.nodeType === 1 && + ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || + jQuery.cssHooks[ tween.prop ] ) ) { + jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); + } else { + tween.elem[ tween.prop ] = tween.now; + } + } + } + }; + + // Support: IE9 + // Panic based approach to setting things on disconnected nodes + Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { + set: function( tween ) { + if ( tween.elem.nodeType && tween.elem.parentNode ) { + tween.elem[ tween.prop ] = tween.now; + } + } + }; + + jQuery.easing = { + linear: function( p ) { + return p; + }, + swing: function( p ) { + return 0.5 - Math.cos( p * Math.PI ) / 2; + }, + _default: "swing" + }; + + jQuery.fx = Tween.prototype.init; + + // Back Compat <1.8 extension point + jQuery.fx.step = {}; + + + + + var + fxNow, timerId, + rfxtypes = /^(?:toggle|show|hide)$/, + rrun = /queueHooks$/; + + // Animations created synchronously will run synchronously + function createFxNow() { + window.setTimeout( function() { + fxNow = undefined; + } ); + return ( fxNow = jQuery.now() ); + } + + // Generate parameters to create a standard animation + function genFx( type, includeWidth ) { + var which, + i = 0, + attrs = { height: type }; + + // If we include width, step value is 1 to do all cssExpand values, + // otherwise step value is 2 to skip over Left and Right + includeWidth = includeWidth ? 1 : 0; + for ( ; i < 4 ; i += 2 - includeWidth ) { + which = cssExpand[ i ]; + attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; + } + + if ( includeWidth ) { + attrs.opacity = attrs.width = type; + } + + return attrs; + } + + function createTween( value, prop, animation ) { + var tween, + collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), + index = 0, + length = collection.length; + for ( ; index < length; index++ ) { + if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { + + // We're done with this property + return tween; + } + } + } + + function defaultPrefilter( elem, props, opts ) { + /* jshint validthis: true */ + var prop, value, toggle, tween, hooks, oldfire, display, checkDisplay, + anim = this, + orig = {}, + style = elem.style, + hidden = elem.nodeType && isHidden( elem ), + dataShow = dataPriv.get( elem, "fxshow" ); + + // Handle queue: false promises + if ( !opts.queue ) { + hooks = jQuery._queueHooks( elem, "fx" ); + if ( hooks.unqueued == null ) { + hooks.unqueued = 0; + oldfire = hooks.empty.fire; + hooks.empty.fire = function() { + if ( !hooks.unqueued ) { + oldfire(); + } + }; + } + hooks.unqueued++; + + anim.always( function() { + + // Ensure the complete handler is called before this completes + anim.always( function() { + hooks.unqueued--; + if ( !jQuery.queue( elem, "fx" ).length ) { + hooks.empty.fire(); + } + } ); + } ); + } + + // Height/width overflow pass + if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) { + + // Make sure that nothing sneaks out + // Record all 3 overflow attributes because IE9-10 do not + // change the overflow attribute when overflowX and + // overflowY are set to the same value + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + + // Set display property to inline-block for height/width + // animations on inline elements that are having width/height animated + display = jQuery.css( elem, "display" ); + + // Test default display if display is currently "none" + checkDisplay = display === "none" ? + dataPriv.get( elem, "olddisplay" ) || defaultDisplay( elem.nodeName ) : display; + + if ( checkDisplay === "inline" && jQuery.css( elem, "float" ) === "none" ) { + style.display = "inline-block"; + } + } + + if ( opts.overflow ) { + style.overflow = "hidden"; + anim.always( function() { + style.overflow = opts.overflow[ 0 ]; + style.overflowX = opts.overflow[ 1 ]; + style.overflowY = opts.overflow[ 2 ]; + } ); + } + + // show/hide pass + for ( prop in props ) { + value = props[ prop ]; + if ( rfxtypes.exec( value ) ) { + delete props[ prop ]; + toggle = toggle || value === "toggle"; + if ( value === ( hidden ? "hide" : "show" ) ) { + + // If there is dataShow left over from a stopped hide or show + // and we are going to proceed with show, we should pretend to be hidden + if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { + hidden = true; + } else { + continue; + } + } + orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); + + // Any non-fx value stops us from restoring the original display value + } else { + display = undefined; + } + } + + if ( !jQuery.isEmptyObject( orig ) ) { + if ( dataShow ) { + if ( "hidden" in dataShow ) { + hidden = dataShow.hidden; + } + } else { + dataShow = dataPriv.access( elem, "fxshow", {} ); + } + + // Store state if its toggle - enables .stop().toggle() to "reverse" + if ( toggle ) { + dataShow.hidden = !hidden; + } + if ( hidden ) { + jQuery( elem ).show(); + } else { + anim.done( function() { + jQuery( elem ).hide(); + } ); + } + anim.done( function() { + var prop; + + dataPriv.remove( elem, "fxshow" ); + for ( prop in orig ) { + jQuery.style( elem, prop, orig[ prop ] ); + } + } ); + for ( prop in orig ) { + tween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); + + if ( !( prop in dataShow ) ) { + dataShow[ prop ] = tween.start; + if ( hidden ) { + tween.end = tween.start; + tween.start = prop === "width" || prop === "height" ? 1 : 0; + } + } + } + + // If this is a noop like .hide().hide(), restore an overwritten display value + } else if ( ( display === "none" ? defaultDisplay( elem.nodeName ) : display ) === "inline" ) { + style.display = display; + } + } + + function propFilter( props, specialEasing ) { + var index, name, easing, value, hooks; + + // camelCase, specialEasing and expand cssHook pass + for ( index in props ) { + name = jQuery.camelCase( index ); + easing = specialEasing[ name ]; + value = props[ index ]; + if ( jQuery.isArray( value ) ) { + easing = value[ 1 ]; + value = props[ index ] = value[ 0 ]; + } + + if ( index !== name ) { + props[ name ] = value; + delete props[ index ]; + } + + hooks = jQuery.cssHooks[ name ]; + if ( hooks && "expand" in hooks ) { + value = hooks.expand( value ); + delete props[ name ]; + + // Not quite $.extend, this won't overwrite existing keys. + // Reusing 'index' because we have the correct "name" + for ( index in value ) { + if ( !( index in props ) ) { + props[ index ] = value[ index ]; + specialEasing[ index ] = easing; + } + } + } else { + specialEasing[ name ] = easing; + } + } + } + + function Animation( elem, properties, options ) { + var result, + stopped, + index = 0, + length = Animation.prefilters.length, + deferred = jQuery.Deferred().always( function() { + + // Don't match elem in the :animated selector + delete tick.elem; + } ), + tick = function() { + if ( stopped ) { + return false; + } + var currentTime = fxNow || createFxNow(), + remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), + + // Support: Android 2.3 + // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) + temp = remaining / animation.duration || 0, + percent = 1 - temp, + index = 0, + length = animation.tweens.length; + + for ( ; index < length ; index++ ) { + animation.tweens[ index ].run( percent ); + } + + deferred.notifyWith( elem, [ animation, percent, remaining ] ); + + if ( percent < 1 && length ) { + return remaining; + } else { + deferred.resolveWith( elem, [ animation ] ); + return false; + } + }, + animation = deferred.promise( { + elem: elem, + props: jQuery.extend( {}, properties ), + opts: jQuery.extend( true, { + specialEasing: {}, + easing: jQuery.easing._default + }, options ), + originalProperties: properties, + originalOptions: options, + startTime: fxNow || createFxNow(), + duration: options.duration, + tweens: [], + createTween: function( prop, end ) { + var tween = jQuery.Tween( elem, animation.opts, prop, end, + animation.opts.specialEasing[ prop ] || animation.opts.easing ); + animation.tweens.push( tween ); + return tween; + }, + stop: function( gotoEnd ) { + var index = 0, + + // If we are going to the end, we want to run all the tweens + // otherwise we skip this part + length = gotoEnd ? animation.tweens.length : 0; + if ( stopped ) { + return this; + } + stopped = true; + for ( ; index < length ; index++ ) { + animation.tweens[ index ].run( 1 ); + } + + // Resolve when we played the last frame; otherwise, reject + if ( gotoEnd ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + deferred.resolveWith( elem, [ animation, gotoEnd ] ); + } else { + deferred.rejectWith( elem, [ animation, gotoEnd ] ); + } + return this; + } + } ), + props = animation.props; + + propFilter( props, animation.opts.specialEasing ); + + for ( ; index < length ; index++ ) { + result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); + if ( result ) { + if ( jQuery.isFunction( result.stop ) ) { + jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = + jQuery.proxy( result.stop, result ); + } + return result; + } + } + + jQuery.map( props, createTween, animation ); + + if ( jQuery.isFunction( animation.opts.start ) ) { + animation.opts.start.call( elem, animation ); + } + + jQuery.fx.timer( + jQuery.extend( tick, { + elem: elem, + anim: animation, + queue: animation.opts.queue + } ) + ); + + // attach callbacks from options + return animation.progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); + } + + jQuery.Animation = jQuery.extend( Animation, { + tweeners: { + "*": [ function( prop, value ) { + var tween = this.createTween( prop, value ); + adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); + return tween; + } ] + }, + + tweener: function( props, callback ) { + if ( jQuery.isFunction( props ) ) { + callback = props; + props = [ "*" ]; + } else { + props = props.match( rnotwhite ); + } + + var prop, + index = 0, + length = props.length; + + for ( ; index < length ; index++ ) { + prop = props[ index ]; + Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; + Animation.tweeners[ prop ].unshift( callback ); + } + }, + + prefilters: [ defaultPrefilter ], + + prefilter: function( callback, prepend ) { + if ( prepend ) { + Animation.prefilters.unshift( callback ); + } else { + Animation.prefilters.push( callback ); + } + } + } ); + + jQuery.speed = function( speed, easing, fn ) { + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { + complete: fn || !fn && easing || + jQuery.isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing + }; + + opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? + opt.duration : opt.duration in jQuery.fx.speeds ? + jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default; + + // Normalize opt.queue - true/undefined/null -> "fx" + if ( opt.queue == null || opt.queue === true ) { + opt.queue = "fx"; + } + + // Queueing + opt.old = opt.complete; + + opt.complete = function() { + if ( jQuery.isFunction( opt.old ) ) { + opt.old.call( this ); + } + + if ( opt.queue ) { + jQuery.dequeue( this, opt.queue ); + } + }; + + return opt; + }; + + jQuery.fn.extend( { + fadeTo: function( speed, to, easing, callback ) { + + // Show any hidden elements after setting opacity to 0 + return this.filter( isHidden ).css( "opacity", 0 ).show() + + // Animate to the value specified + .end().animate( { opacity: to }, speed, easing, callback ); + }, + animate: function( prop, speed, easing, callback ) { + var empty = jQuery.isEmptyObject( prop ), + optall = jQuery.speed( speed, easing, callback ), + doAnimation = function() { + + // Operate on a copy of prop so per-property easing won't be lost + var anim = Animation( this, jQuery.extend( {}, prop ), optall ); + + // Empty animations, or finishing resolves immediately + if ( empty || dataPriv.get( this, "finish" ) ) { + anim.stop( true ); + } + }; + doAnimation.finish = doAnimation; + + return empty || optall.queue === false ? + this.each( doAnimation ) : + this.queue( optall.queue, doAnimation ); + }, + stop: function( type, clearQueue, gotoEnd ) { + var stopQueue = function( hooks ) { + var stop = hooks.stop; + delete hooks.stop; + stop( gotoEnd ); + }; + + if ( typeof type !== "string" ) { + gotoEnd = clearQueue; + clearQueue = type; + type = undefined; + } + if ( clearQueue && type !== false ) { + this.queue( type || "fx", [] ); + } + + return this.each( function() { + var dequeue = true, + index = type != null && type + "queueHooks", + timers = jQuery.timers, + data = dataPriv.get( this ); + + if ( index ) { + if ( data[ index ] && data[ index ].stop ) { + stopQueue( data[ index ] ); + } + } else { + for ( index in data ) { + if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { + stopQueue( data[ index ] ); + } + } + } + + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && + ( type == null || timers[ index ].queue === type ) ) { + + timers[ index ].anim.stop( gotoEnd ); + dequeue = false; + timers.splice( index, 1 ); + } + } + + // Start the next in the queue if the last step wasn't forced. + // Timers currently will call their complete callbacks, which + // will dequeue but only if they were gotoEnd. + if ( dequeue || !gotoEnd ) { + jQuery.dequeue( this, type ); + } + } ); + }, + finish: function( type ) { + if ( type !== false ) { + type = type || "fx"; + } + return this.each( function() { + var index, + data = dataPriv.get( this ), + queue = data[ type + "queue" ], + hooks = data[ type + "queueHooks" ], + timers = jQuery.timers, + length = queue ? queue.length : 0; + + // Enable finishing flag on private data + data.finish = true; + + // Empty the queue first + jQuery.queue( this, type, [] ); + + if ( hooks && hooks.stop ) { + hooks.stop.call( this, true ); + } + + // Look for any active animations, and finish them + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && timers[ index ].queue === type ) { + timers[ index ].anim.stop( true ); + timers.splice( index, 1 ); + } + } + + // Look for any animations in the old queue and finish them + for ( index = 0; index < length; index++ ) { + if ( queue[ index ] && queue[ index ].finish ) { + queue[ index ].finish.call( this ); + } + } + + // Turn off finishing flag + delete data.finish; + } ); + } + } ); + + jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) { + var cssFn = jQuery.fn[ name ]; + jQuery.fn[ name ] = function( speed, easing, callback ) { + return speed == null || typeof speed === "boolean" ? + cssFn.apply( this, arguments ) : + this.animate( genFx( name, true ), speed, easing, callback ); + }; + } ); + + // Generate shortcuts for custom animations + jQuery.each( { + slideDown: genFx( "show" ), + slideUp: genFx( "hide" ), + slideToggle: genFx( "toggle" ), + fadeIn: { opacity: "show" }, + fadeOut: { opacity: "hide" }, + fadeToggle: { opacity: "toggle" } + }, function( name, props ) { + jQuery.fn[ name ] = function( speed, easing, callback ) { + return this.animate( props, speed, easing, callback ); + }; + } ); + + jQuery.timers = []; + jQuery.fx.tick = function() { + var timer, + i = 0, + timers = jQuery.timers; + + fxNow = jQuery.now(); + + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + + // Checks the timer has not already been removed + if ( !timer() && timers[ i ] === timer ) { + timers.splice( i--, 1 ); + } + } + + if ( !timers.length ) { + jQuery.fx.stop(); + } + fxNow = undefined; + }; + + jQuery.fx.timer = function( timer ) { + jQuery.timers.push( timer ); + if ( timer() ) { + jQuery.fx.start(); + } else { + jQuery.timers.pop(); + } + }; + + jQuery.fx.interval = 13; + jQuery.fx.start = function() { + if ( !timerId ) { + timerId = window.setInterval( jQuery.fx.tick, jQuery.fx.interval ); + } + }; + + jQuery.fx.stop = function() { + window.clearInterval( timerId ); + + timerId = null; + }; + + jQuery.fx.speeds = { + slow: 600, + fast: 200, + + // Default speed + _default: 400 + }; + + + // Based off of the plugin by Clint Helfers, with permission. + // http://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ + jQuery.fn.delay = function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = window.setTimeout( next, time ); + hooks.stop = function() { + window.clearTimeout( timeout ); + }; + } ); + }; + + + ( function() { + var input = document.createElement( "input" ), + select = document.createElement( "select" ), + opt = select.appendChild( document.createElement( "option" ) ); + + input.type = "checkbox"; + + // Support: iOS<=5.1, Android<=4.2+ + // Default value for a checkbox should be "on" + support.checkOn = input.value !== ""; + + // Support: IE<=11+ + // Must access selectedIndex to make default options select + support.optSelected = opt.selected; + + // Support: Android<=2.3 + // Options inside disabled selects are incorrectly marked as disabled + select.disabled = true; + support.optDisabled = !opt.disabled; + + // Support: IE<=11+ + // An input loses its value after becoming a radio + input = document.createElement( "input" ); + input.value = "t"; + input.type = "radio"; + support.radioValue = input.value === "t"; + } )(); + + + var boolHook, + attrHandle = jQuery.expr.attrHandle; + + jQuery.fn.extend( { + attr: function( name, value ) { + return access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each( function() { + jQuery.removeAttr( this, name ); + } ); + } + } ); + + jQuery.extend( { + attr: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set attributes on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + // All attributes are lowercase + // Grab necessary hook if one is defined + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + name = name.toLowerCase(); + hooks = jQuery.attrHooks[ name ] || + ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); + } + + if ( value !== undefined ) { + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + } + + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + elem.setAttribute( name, value + "" ); + return value; + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + ret = jQuery.find.attr( elem, name ); + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? undefined : ret; + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !support.radioValue && value === "radio" && + jQuery.nodeName( elem, "input" ) ) { + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + }, + + removeAttr: function( elem, value ) { + var name, propName, + i = 0, + attrNames = value && value.match( rnotwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( ( name = attrNames[ i++ ] ) ) { + propName = jQuery.propFix[ name ] || name; + + // Boolean attributes get special treatment (#10870) + if ( jQuery.expr.match.bool.test( name ) ) { + + // Set corresponding property to false + elem[ propName ] = false; + } + + elem.removeAttribute( name ); + } + } + } + } ); + + // Hooks for boolean attributes + boolHook = { + set: function( elem, value, name ) { + if ( value === false ) { + + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + elem.setAttribute( name, name ); + } + return name; + } + }; + jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) { + var getter = attrHandle[ name ] || jQuery.find.attr; + + attrHandle[ name ] = function( elem, name, isXML ) { + var ret, handle; + if ( !isXML ) { + + // Avoid an infinite loop by temporarily removing this function from the getter + handle = attrHandle[ name ]; + attrHandle[ name ] = ret; + ret = getter( elem, name, isXML ) != null ? + name.toLowerCase() : + null; + attrHandle[ name ] = handle; + } + return ret; + }; + } ); + + + + + var rfocusable = /^(?:input|select|textarea|button)$/i, + rclickable = /^(?:a|area)$/i; + + jQuery.fn.extend( { + prop: function( name, value ) { + return access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + return this.each( function() { + delete this[ jQuery.propFix[ name ] || name ]; + } ); + } + } ); + + jQuery.extend( { + prop: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set properties on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + return ( elem[ name ] = value ); + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + return elem[ name ]; + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + + // elem.tabIndex doesn't always return the + // correct value when it hasn't been explicitly set + // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + // Use proper attribute retrieval(#12072) + var tabindex = jQuery.find.attr( elem, "tabindex" ); + + return tabindex ? + parseInt( tabindex, 10 ) : + rfocusable.test( elem.nodeName ) || + rclickable.test( elem.nodeName ) && elem.href ? + 0 : + -1; + } + } + }, + + propFix: { + "for": "htmlFor", + "class": "className" + } + } ); + + // Support: IE <=11 only + // Accessing the selectedIndex property + // forces the browser to respect setting selected + // on the option + // The getter ensures a default option is selected + // when in an optgroup + if ( !support.optSelected ) { + jQuery.propHooks.selected = { + get: function( elem ) { + var parent = elem.parentNode; + if ( parent && parent.parentNode ) { + parent.parentNode.selectedIndex; + } + return null; + }, + set: function( elem ) { + var parent = elem.parentNode; + if ( parent ) { + parent.selectedIndex; + + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + } + }; + } + + jQuery.each( [ + "tabIndex", + "readOnly", + "maxLength", + "cellSpacing", + "cellPadding", + "rowSpan", + "colSpan", + "useMap", + "frameBorder", + "contentEditable" + ], function() { + jQuery.propFix[ this.toLowerCase() ] = this; + } ); + + + + + var rclass = /[\t\r\n\f]/g; + + function getClass( elem ) { + return elem.getAttribute && elem.getAttribute( "class" ) || ""; + } + + jQuery.fn.extend( { + addClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( jQuery.isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( typeof value === "string" && value ) { + classes = value.match( rnotwhite ) || []; + + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + cur = elem.nodeType === 1 && + ( " " + curValue + " " ).replace( rclass, " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + if ( cur.indexOf( " " + clazz + " " ) < 0 ) { + cur += clazz + " "; + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = jQuery.trim( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( jQuery.isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( !arguments.length ) { + return this.attr( "class", "" ); + } + + if ( typeof value === "string" && value ) { + classes = value.match( rnotwhite ) || []; + + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + + // This expression is here for better compressibility (see addClass) + cur = elem.nodeType === 1 && + ( " " + curValue + " " ).replace( rclass, " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + + // Remove *all* instances + while ( cur.indexOf( " " + clazz + " " ) > -1 ) { + cur = cur.replace( " " + clazz + " ", " " ); + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = jQuery.trim( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value; + + if ( typeof stateVal === "boolean" && type === "string" ) { + return stateVal ? this.addClass( value ) : this.removeClass( value ); + } + + if ( jQuery.isFunction( value ) ) { + return this.each( function( i ) { + jQuery( this ).toggleClass( + value.call( this, i, getClass( this ), stateVal ), + stateVal + ); + } ); + } + + return this.each( function() { + var className, i, self, classNames; + + if ( type === "string" ) { + + // Toggle individual class names + i = 0; + self = jQuery( this ); + classNames = value.match( rnotwhite ) || []; + + while ( ( className = classNames[ i++ ] ) ) { + + // Check each className given, space separated list + if ( self.hasClass( className ) ) { + self.removeClass( className ); + } else { + self.addClass( className ); + } + } + + // Toggle whole class name + } else if ( value === undefined || type === "boolean" ) { + className = getClass( this ); + if ( className ) { + + // Store className if set + dataPriv.set( this, "__className__", className ); + } + + // If the element has a class name or if we're passed `false`, + // then remove the whole classname (if there was one, the above saved it). + // Otherwise bring back whatever was previously saved (if anything), + // falling back to the empty string if nothing was stored. + if ( this.setAttribute ) { + this.setAttribute( "class", + className || value === false ? + "" : + dataPriv.get( this, "__className__" ) || "" + ); + } + } + } ); + }, + + hasClass: function( selector ) { + var className, elem, + i = 0; + + className = " " + selector + " "; + while ( ( elem = this[ i++ ] ) ) { + if ( elem.nodeType === 1 && + ( " " + getClass( elem ) + " " ).replace( rclass, " " ) + .indexOf( className ) > -1 + ) { + return true; + } + } + + return false; + } + } ); + + + + + var rreturn = /\r/g, + rspaces = /[\x20\t\r\n\f]+/g; + + jQuery.fn.extend( { + val: function( value ) { + var hooks, ret, isFunction, + elem = this[ 0 ]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || + jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && + "get" in hooks && + ( ret = hooks.get( elem, "value" ) ) !== undefined + ) { + return ret; + } + + ret = elem.value; + + return typeof ret === "string" ? + + // Handle most common string cases + ret.replace( rreturn, "" ) : + + // Handle cases where value is null/undef or number + ret == null ? "" : ret; + } + + return; + } + + isFunction = jQuery.isFunction( value ); + + return this.each( function( i ) { + var val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( isFunction ) { + val = value.call( this, i, jQuery( this ).val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + + } else if ( typeof val === "number" ) { + val += ""; + + } else if ( jQuery.isArray( val ) ) { + val = jQuery.map( val, function( value ) { + return value == null ? "" : value + ""; + } ); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + } ); + } + } ); + + jQuery.extend( { + valHooks: { + option: { + get: function( elem ) { + + var val = jQuery.find.attr( elem, "value" ); + return val != null ? + val : + + // Support: IE10-11+ + // option.text throws exceptions (#14686, #14858) + // Strip and collapse whitespace + // https://html.spec.whatwg.org/#strip-and-collapse-whitespace + jQuery.trim( jQuery.text( elem ) ).replace( rspaces, " " ); + } + }, + select: { + get: function( elem ) { + var value, option, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one" || index < 0, + values = one ? null : [], + max = one ? index + 1 : options.length, + i = index < 0 ? + max : + one ? index : 0; + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // IE8-9 doesn't update selected after form reset (#2551) + if ( ( option.selected || i === index ) && + + // Don't return options that are disabled or in a disabled optgroup + ( support.optDisabled ? + !option.disabled : option.getAttribute( "disabled" ) === null ) && + ( !option.parentNode.disabled || + !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + }, + + set: function( elem, value ) { + var optionSet, option, + options = elem.options, + values = jQuery.makeArray( value ), + i = options.length; + + while ( i-- ) { + option = options[ i ]; + if ( option.selected = + jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 + ) { + optionSet = true; + } + } + + // Force browsers to behave consistently when non-matching value is set + if ( !optionSet ) { + elem.selectedIndex = -1; + } + return values; + } + } + } + } ); + + // Radios and checkboxes getter/setter + jQuery.each( [ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + set: function( elem, value ) { + if ( jQuery.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); + } + } + }; + if ( !support.checkOn ) { + jQuery.valHooks[ this ].get = function( elem ) { + return elem.getAttribute( "value" ) === null ? "on" : elem.value; + }; + } + } ); + + + + + // Return jQuery for attributes-only inclusion + + + var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/; + + jQuery.extend( jQuery.event, { + + trigger: function( event, data, elem, onlyHandlers ) { + + var i, cur, tmp, bubbleType, ontype, handle, special, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; + + cur = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "." ) > -1 ) { + + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split( "." ); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf( ":" ) < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join( "." ); + event.rnamespace = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === ( elem.ownerDocument || document ) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { + + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] && + dataPriv.get( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && acceptData( cur ) ) { + event.result = handle.apply( cur, data ); + if ( event.result === false ) { + event.preventDefault(); + } + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( ( !special._default || + special._default.apply( eventPath.pop(), data ) === false ) && + acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name name as the event. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + elem[ type ](); + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + // Piggyback on a donor event to simulate a different one + simulate: function( type, elem, event ) { + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true + + // Previously, `originalEvent: {}` was set here, so stopPropagation call + // would not be triggered on donor event, since in our own + // jQuery.event.stopPropagation function we had a check for existence of + // originalEvent.stopPropagation method, so, consequently it would be a noop. + // + // But now, this "simulate" function is used only for events + // for which stopPropagation() is noop, so there is no need for that anymore. + // + // For the 1.x branch though, guard for "click" and "submit" + // events is still used, but was moved to jQuery.event.stopPropagation function + // because `originalEvent` should point to the original event for the constancy + // with other events and for more focused logic + } + ); + + jQuery.event.trigger( e, null, elem ); + + if ( e.isDefaultPrevented() ) { + event.preventDefault(); + } + } + + } ); + + jQuery.fn.extend( { + + trigger: function( type, data ) { + return this.each( function() { + jQuery.event.trigger( type, data, this ); + } ); + }, + triggerHandler: function( type, data ) { + var elem = this[ 0 ]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } + } ); + + + jQuery.each( ( "blur focus focusin focusout load resize scroll unload click dblclick " + + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + + "change select submit keydown keypress keyup error contextmenu" ).split( " " ), + function( i, name ) { + + // Handle event binding + jQuery.fn[ name ] = function( data, fn ) { + return arguments.length > 0 ? + this.on( name, null, data, fn ) : + this.trigger( name ); + }; + } ); + + jQuery.fn.extend( { + hover: function( fnOver, fnOut ) { + return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); + } + } ); + + + + + support.focusin = "onfocusin" in window; + + + // Support: Firefox + // Firefox doesn't have focus(in | out) events + // Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 + // + // Support: Chrome, Safari + // focus(in | out) events fire after focus & blur events, + // which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order + // Related ticket - https://code.google.com/p/chromium/issues/detail?id=449857 + if ( !support.focusin ) { + jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler on the document while someone wants focusin/focusout + var handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + var doc = this.ownerDocument || this, + attaches = dataPriv.access( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this, + attaches = dataPriv.access( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + dataPriv.remove( doc, fix ); + + } else { + dataPriv.access( doc, fix, attaches ); + } + } + }; + } ); + } + var location = window.location; + + var nonce = jQuery.now(); + + var rquery = ( /\?/ ); + + + + // Support: Android 2.3 + // Workaround failure to string-cast null input + jQuery.parseJSON = function( data ) { + return JSON.parse( data + "" ); + }; + + + // Cross-browser xml parsing + jQuery.parseXML = function( data ) { + var xml; + if ( !data || typeof data !== "string" ) { + return null; + } + + // Support: IE9 + try { + xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); + } catch ( e ) { + xml = undefined; + } + + if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; + }; + + + var + rhash = /#.*$/, + rts = /([?&])_=[^&]*/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, + + // #7653, #8125, #8152: local protocol detection + rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + + /* Prefilters + * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) + * 2) These are called: + * - BEFORE asking for a transport + * - AFTER param serialization (s.data is a string if s.processData is true) + * 3) key is the dataType + * 4) the catchall symbol "*" can be used + * 5) execution will start with transport dataType and THEN continue down to "*" if needed + */ + prefilters = {}, + + /* Transports bindings + * 1) key is the dataType + * 2) the catchall symbol "*" can be used + * 3) selection will start with transport dataType and THEN go to "*" if needed + */ + transports = {}, + + // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression + allTypes = "*/".concat( "*" ), + + // Anchor tag for parsing the document origin + originAnchor = document.createElement( "a" ); + originAnchor.href = location.href; + + // Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport + function addToPrefiltersOrTransports( structure ) { + + // dataTypeExpression is optional and defaults to "*" + return function( dataTypeExpression, func ) { + + if ( typeof dataTypeExpression !== "string" ) { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + var dataType, + i = 0, + dataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || []; + + if ( jQuery.isFunction( func ) ) { + + // For each dataType in the dataTypeExpression + while ( ( dataType = dataTypes[ i++ ] ) ) { + + // Prepend if requested + if ( dataType[ 0 ] === "+" ) { + dataType = dataType.slice( 1 ) || "*"; + ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); + + // Otherwise append + } else { + ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); + } + } + } + }; + } + + // Base inspection function for prefilters and transports + function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { + + var inspected = {}, + seekingTransport = ( structure === transports ); + + function inspect( dataType ) { + var selected; + inspected[ dataType ] = true; + jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { + var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); + if ( typeof dataTypeOrTransport === "string" && + !seekingTransport && !inspected[ dataTypeOrTransport ] ) { + + options.dataTypes.unshift( dataTypeOrTransport ); + inspect( dataTypeOrTransport ); + return false; + } else if ( seekingTransport ) { + return !( selected = dataTypeOrTransport ); + } + } ); + return selected; + } + + return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); + } + + // A special extend for ajax options + // that takes "flat" options (not to be deep extended) + // Fixes #9887 + function ajaxExtend( target, src ) { + var key, deep, + flatOptions = jQuery.ajaxSettings.flatOptions || {}; + + for ( key in src ) { + if ( src[ key ] !== undefined ) { + ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; + } + } + if ( deep ) { + jQuery.extend( true, target, deep ); + } + + return target; + } + + /* Handles responses to an ajax request: + * - finds the right dataType (mediates between content-type and expected dataType) + * - returns the corresponding response + */ + function ajaxHandleResponses( s, jqXHR, responses ) { + + var ct, type, finalDataType, firstDataType, + contents = s.contents, + dataTypes = s.dataTypes; + + // Remove auto dataType and get content-type in the process + while ( dataTypes[ 0 ] === "*" ) { + dataTypes.shift(); + if ( ct === undefined ) { + ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); + } + } + + // Check if we're dealing with a known content-type + if ( ct ) { + for ( type in contents ) { + if ( contents[ type ] && contents[ type ].test( ct ) ) { + dataTypes.unshift( type ); + break; + } + } + } + + // Check to see if we have a response for the expected dataType + if ( dataTypes[ 0 ] in responses ) { + finalDataType = dataTypes[ 0 ]; + } else { + + // Try convertible dataTypes + for ( type in responses ) { + if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { + finalDataType = type; + break; + } + if ( !firstDataType ) { + firstDataType = type; + } + } + + // Or just use first one + finalDataType = finalDataType || firstDataType; + } + + // If we found a dataType + // We add the dataType to the list if needed + // and return the corresponding response + if ( finalDataType ) { + if ( finalDataType !== dataTypes[ 0 ] ) { + dataTypes.unshift( finalDataType ); + } + return responses[ finalDataType ]; + } + } + + /* Chain conversions given the request and the original response + * Also sets the responseXXX fields on the jqXHR instance + */ + function ajaxConvert( s, response, jqXHR, isSuccess ) { + var conv2, current, conv, tmp, prev, + converters = {}, + + // Work with a copy of dataTypes in case we need to modify it for conversion + dataTypes = s.dataTypes.slice(); + + // Create converters map with lowercased keys + if ( dataTypes[ 1 ] ) { + for ( conv in s.converters ) { + converters[ conv.toLowerCase() ] = s.converters[ conv ]; + } + } + + current = dataTypes.shift(); + + // Convert to each sequential dataType + while ( current ) { + + if ( s.responseFields[ current ] ) { + jqXHR[ s.responseFields[ current ] ] = response; + } + + // Apply the dataFilter if provided + if ( !prev && isSuccess && s.dataFilter ) { + response = s.dataFilter( response, s.dataType ); + } + + prev = current; + current = dataTypes.shift(); + + if ( current ) { + + // There's only work to do if current dataType is non-auto + if ( current === "*" ) { + + current = prev; + + // Convert response if prev dataType is non-auto and differs from current + } else if ( prev !== "*" && prev !== current ) { + + // Seek a direct converter + conv = converters[ prev + " " + current ] || converters[ "* " + current ]; + + // If none found, seek a pair + if ( !conv ) { + for ( conv2 in converters ) { + + // If conv2 outputs current + tmp = conv2.split( " " ); + if ( tmp[ 1 ] === current ) { + + // If prev can be converted to accepted input + conv = converters[ prev + " " + tmp[ 0 ] ] || + converters[ "* " + tmp[ 0 ] ]; + if ( conv ) { + + // Condense equivalence converters + if ( conv === true ) { + conv = converters[ conv2 ]; + + // Otherwise, insert the intermediate dataType + } else if ( converters[ conv2 ] !== true ) { + current = tmp[ 0 ]; + dataTypes.unshift( tmp[ 1 ] ); + } + break; + } + } + } + } + + // Apply converter (if not an equivalence) + if ( conv !== true ) { + + // Unless errors are allowed to bubble, catch and return them + if ( conv && s.throws ) { + response = conv( response ); + } else { + try { + response = conv( response ); + } catch ( e ) { + return { + state: "parsererror", + error: conv ? e : "No conversion from " + prev + " to " + current + }; + } + } + } + } + } + } + + return { state: "success", data: response }; + } + + jQuery.extend( { + + // Counter for holding the number of active queries + active: 0, + + // Last-Modified header cache for next request + lastModified: {}, + etag: {}, + + ajaxSettings: { + url: location.href, + type: "GET", + isLocal: rlocalProtocol.test( location.protocol ), + global: true, + processData: true, + async: true, + contentType: "application/x-www-form-urlencoded; charset=UTF-8", + /* + timeout: 0, + data: null, + dataType: null, + username: null, + password: null, + cache: null, + throws: false, + traditional: false, + headers: {}, + */ + + accepts: { + "*": allTypes, + text: "text/plain", + html: "text/html", + xml: "application/xml, text/xml", + json: "application/json, text/javascript" + }, + + contents: { + xml: /\bxml\b/, + html: /\bhtml/, + json: /\bjson\b/ + }, + + responseFields: { + xml: "responseXML", + text: "responseText", + json: "responseJSON" + }, + + // Data converters + // Keys separate source (or catchall "*") and destination types with a single space + converters: { + + // Convert anything to text + "* text": String, + + // Text to html (true = no transformation) + "text html": true, + + // Evaluate text as a json expression + "text json": jQuery.parseJSON, + + // Parse text as xml + "text xml": jQuery.parseXML + }, + + // For options that shouldn't be deep extended: + // you can add your own custom options here if + // and when you create one that shouldn't be + // deep extended (see ajaxExtend) + flatOptions: { + url: true, + context: true + } + }, + + // Creates a full fledged settings object into target + // with both ajaxSettings and settings fields. + // If target is omitted, writes into ajaxSettings. + ajaxSetup: function( target, settings ) { + return settings ? + + // Building a settings object + ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : + + // Extending ajaxSettings + ajaxExtend( jQuery.ajaxSettings, target ); + }, + + ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), + ajaxTransport: addToPrefiltersOrTransports( transports ), + + // Main method + ajax: function( url, options ) { + + // If url is an object, simulate pre-1.5 signature + if ( typeof url === "object" ) { + options = url; + url = undefined; + } + + // Force options to be an object + options = options || {}; + + var transport, + + // URL without anti-cache param + cacheURL, + + // Response headers + responseHeadersString, + responseHeaders, + + // timeout handle + timeoutTimer, + + // Url cleanup var + urlAnchor, + + // To know if global events are to be dispatched + fireGlobals, + + // Loop variable + i, + + // Create the final options object + s = jQuery.ajaxSetup( {}, options ), + + // Callbacks context + callbackContext = s.context || s, + + // Context for global events is callbackContext if it is a DOM node or jQuery collection + globalEventContext = s.context && + ( callbackContext.nodeType || callbackContext.jquery ) ? + jQuery( callbackContext ) : + jQuery.event, + + // Deferreds + deferred = jQuery.Deferred(), + completeDeferred = jQuery.Callbacks( "once memory" ), + + // Status-dependent callbacks + statusCode = s.statusCode || {}, + + // Headers (they are sent all at once) + requestHeaders = {}, + requestHeadersNames = {}, + + // The jqXHR state + state = 0, + + // Default abort message + strAbort = "canceled", + + // Fake xhr + jqXHR = { + readyState: 0, + + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( state === 2 ) { + if ( !responseHeaders ) { + responseHeaders = {}; + while ( ( match = rheaders.exec( responseHeadersString ) ) ) { + responseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ]; + } + } + match = responseHeaders[ key.toLowerCase() ]; + } + return match == null ? null : match; + }, + + // Raw string + getAllResponseHeaders: function() { + return state === 2 ? responseHeadersString : null; + }, + + // Caches the header + setRequestHeader: function( name, value ) { + var lname = name.toLowerCase(); + if ( !state ) { + name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( !state ) { + s.mimeType = type; + } + return this; + }, + + // Status-dependent callbacks + statusCode: function( map ) { + var code; + if ( map ) { + if ( state < 2 ) { + for ( code in map ) { + + // Lazy-add the new callback in a way that preserves old ones + statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; + } + } else { + + // Execute the appropriate callbacks + jqXHR.always( map[ jqXHR.status ] ); + } + } + return this; + }, + + // Cancel the request + abort: function( statusText ) { + var finalText = statusText || strAbort; + if ( transport ) { + transport.abort( finalText ); + } + done( 0, finalText ); + return this; + } + }; + + // Attach deferreds + deferred.promise( jqXHR ).complete = completeDeferred.add; + jqXHR.success = jqXHR.done; + jqXHR.error = jqXHR.fail; + + // Remove hash character (#7531: and string promotion) + // Add protocol if not provided (prefilters might expect it) + // Handle falsy url in the settings object (#10093: consistency with old signature) + // We also use the url parameter if available + s.url = ( ( url || s.url || location.href ) + "" ).replace( rhash, "" ) + .replace( rprotocol, location.protocol + "//" ); + + // Alias method option to type as per ticket #12004 + s.type = options.method || options.type || s.method || s.type; + + // Extract dataTypes list + s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().match( rnotwhite ) || [ "" ]; + + // A cross-domain request is in order when the origin doesn't match the current origin. + if ( s.crossDomain == null ) { + urlAnchor = document.createElement( "a" ); + + // Support: IE8-11+ + // IE throws exception if url is malformed, e.g. http://example.com:80x/ + try { + urlAnchor.href = s.url; + + // Support: IE8-11+ + // Anchor's host property isn't correctly set when s.url is relative + urlAnchor.href = urlAnchor.href; + s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== + urlAnchor.protocol + "//" + urlAnchor.host; + } catch ( e ) { + + // If there is an error parsing the URL, assume it is crossDomain, + // it can be rejected by the transport if it is invalid + s.crossDomain = true; + } + } + + // Convert data if not already a string + if ( s.data && s.processData && typeof s.data !== "string" ) { + s.data = jQuery.param( s.data, s.traditional ); + } + + // Apply prefilters + inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); + + // If request was aborted inside a prefilter, stop there + if ( state === 2 ) { + return jqXHR; + } + + // We can fire global events as of now if asked to + // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) + fireGlobals = jQuery.event && s.global; + + // Watch for a new set of requests + if ( fireGlobals && jQuery.active++ === 0 ) { + jQuery.event.trigger( "ajaxStart" ); + } + + // Uppercase the type + s.type = s.type.toUpperCase(); + + // Determine if request has content + s.hasContent = !rnoContent.test( s.type ); + + // Save the URL in case we're toying with the If-Modified-Since + // and/or If-None-Match header later on + cacheURL = s.url; + + // More options handling for requests with no content + if ( !s.hasContent ) { + + // If data is available, append data to url + if ( s.data ) { + cacheURL = ( s.url += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data ); + + // #9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Add anti-cache in url if needed + if ( s.cache === false ) { + s.url = rts.test( cacheURL ) ? + + // If there is already a '_' parameter, set its value + cacheURL.replace( rts, "$1_=" + nonce++ ) : + + // Otherwise add one to the end + cacheURL + ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + nonce++; + } + } + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + if ( jQuery.lastModified[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); + } + if ( jQuery.etag[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); + } + } + + // Set the correct header, if data is being sent + if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { + jqXHR.setRequestHeader( "Content-Type", s.contentType ); + } + + // Set the Accepts header for the server, depending on the dataType + jqXHR.setRequestHeader( + "Accept", + s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? + s.accepts[ s.dataTypes[ 0 ] ] + + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : + s.accepts[ "*" ] + ); + + // Check for headers option + for ( i in s.headers ) { + jqXHR.setRequestHeader( i, s.headers[ i ] ); + } + + // Allow custom headers/mimetypes and early abort + if ( s.beforeSend && + ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) { + + // Abort if not done already and return + return jqXHR.abort(); + } + + // Aborting is no longer a cancellation + strAbort = "abort"; + + // Install callbacks on deferreds + for ( i in { success: 1, error: 1, complete: 1 } ) { + jqXHR[ i ]( s[ i ] ); + } + + // Get transport + transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); + + // If no transport, we auto-abort + if ( !transport ) { + done( -1, "No Transport" ); + } else { + jqXHR.readyState = 1; + + // Send global event + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); + } + + // If request was aborted inside ajaxSend, stop there + if ( state === 2 ) { + return jqXHR; + } + + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = window.setTimeout( function() { + jqXHR.abort( "timeout" ); + }, s.timeout ); + } + + try { + state = 1; + transport.send( requestHeaders, done ); + } catch ( e ) { + + // Propagate exception as error if not done + if ( state < 2 ) { + done( -1, e ); + + // Simply rethrow otherwise + } else { + throw e; + } + } + } + + // Callback for when everything is done + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; + + // Called once + if ( state === 2 ) { + return; + } + + // State is "done" now + state = 2; + + // Clear timeout if it exists + if ( timeoutTimer ) { + window.clearTimeout( timeoutTimer ); + } + + // Dereference transport for early garbage collection + // (no matter how long the jqXHR object will be used) + transport = undefined; + + // Cache response headers + responseHeadersString = headers || ""; + + // Set readyState + jqXHR.readyState = status > 0 ? 4 : 0; + + // Determine if successful + isSuccess = status >= 200 && status < 300 || status === 304; + + // Get response data + if ( responses ) { + response = ajaxHandleResponses( s, jqXHR, responses ); + } + + // Convert no matter what (that way responseXXX fields are always set) + response = ajaxConvert( s, response, jqXHR, isSuccess ); + + // If successful, handle type chaining + if ( isSuccess ) { + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + modified = jqXHR.getResponseHeader( "Last-Modified" ); + if ( modified ) { + jQuery.lastModified[ cacheURL ] = modified; + } + modified = jqXHR.getResponseHeader( "etag" ); + if ( modified ) { + jQuery.etag[ cacheURL ] = modified; + } + } + + // if no content + if ( status === 204 || s.type === "HEAD" ) { + statusText = "nocontent"; + + // if not modified + } else if ( status === 304 ) { + statusText = "notmodified"; + + // If we have data, let's convert it + } else { + statusText = response.state; + success = response.data; + error = response.error; + isSuccess = !error; + } + } else { + + // Extract error from statusText and normalize for non-aborts + error = statusText; + if ( status || !statusText ) { + statusText = "error"; + if ( status < 0 ) { + status = 0; + } + } + } + + // Set data for the fake xhr object + jqXHR.status = status; + jqXHR.statusText = ( nativeStatusText || statusText ) + ""; + + // Success/Error + if ( isSuccess ) { + deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); + } else { + deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); + } + + // Status-dependent callbacks + jqXHR.statusCode( statusCode ); + statusCode = undefined; + + if ( fireGlobals ) { + globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", + [ jqXHR, s, isSuccess ? success : error ] ); + } + + // Complete + completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); + + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); + + // Handle the global AJAX counter + if ( !( --jQuery.active ) ) { + jQuery.event.trigger( "ajaxStop" ); + } + } + } + + return jqXHR; + }, + + getJSON: function( url, data, callback ) { + return jQuery.get( url, data, callback, "json" ); + }, + + getScript: function( url, callback ) { + return jQuery.get( url, undefined, callback, "script" ); + } + } ); + + jQuery.each( [ "get", "post" ], function( i, method ) { + jQuery[ method ] = function( url, data, callback, type ) { + + // Shift arguments if data argument was omitted + if ( jQuery.isFunction( data ) ) { + type = type || callback; + callback = data; + data = undefined; + } + + // The url can be an options object (which then must have .url) + return jQuery.ajax( jQuery.extend( { + url: url, + type: method, + dataType: type, + data: data, + success: callback + }, jQuery.isPlainObject( url ) && url ) ); + }; + } ); + + + jQuery._evalUrl = function( url ) { + return jQuery.ajax( { + url: url, + + // Make this explicit, since user can override this through ajaxSetup (#11264) + type: "GET", + dataType: "script", + async: false, + global: false, + "throws": true + } ); + }; + + + jQuery.fn.extend( { + wrapAll: function( html ) { + var wrap; + + if ( jQuery.isFunction( html ) ) { + return this.each( function( i ) { + jQuery( this ).wrapAll( html.call( this, i ) ); + } ); + } + + if ( this[ 0 ] ) { + + // The elements to wrap the target around + wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); + + if ( this[ 0 ].parentNode ) { + wrap.insertBefore( this[ 0 ] ); + } + + wrap.map( function() { + var elem = this; + + while ( elem.firstElementChild ) { + elem = elem.firstElementChild; + } + + return elem; + } ).append( this ); + } + + return this; + }, + + wrapInner: function( html ) { + if ( jQuery.isFunction( html ) ) { + return this.each( function( i ) { + jQuery( this ).wrapInner( html.call( this, i ) ); + } ); + } + + return this.each( function() { + var self = jQuery( this ), + contents = self.contents(); + + if ( contents.length ) { + contents.wrapAll( html ); + + } else { + self.append( html ); + } + } ); + }, + + wrap: function( html ) { + var isFunction = jQuery.isFunction( html ); + + return this.each( function( i ) { + jQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html ); + } ); + }, + + unwrap: function() { + return this.parent().each( function() { + if ( !jQuery.nodeName( this, "body" ) ) { + jQuery( this ).replaceWith( this.childNodes ); + } + } ).end(); + } + } ); + + + jQuery.expr.filters.hidden = function( elem ) { + return !jQuery.expr.filters.visible( elem ); + }; + jQuery.expr.filters.visible = function( elem ) { + + // Support: Opera <= 12.12 + // Opera reports offsetWidths and offsetHeights less than zero on some elements + // Use OR instead of AND as the element is not visible if either is true + // See tickets #10406 and #13132 + return elem.offsetWidth > 0 || elem.offsetHeight > 0 || elem.getClientRects().length > 0; + }; + + + + + var r20 = /%20/g, + rbracket = /\[\]$/, + rCRLF = /\r?\n/g, + rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, + rsubmittable = /^(?:input|select|textarea|keygen)/i; + + function buildParams( prefix, obj, traditional, add ) { + var name; + + if ( jQuery.isArray( obj ) ) { + + // Serialize array item. + jQuery.each( obj, function( i, v ) { + if ( traditional || rbracket.test( prefix ) ) { + + // Treat each array item as a scalar. + add( prefix, v ); + + } else { + + // Item is non-scalar (array or object), encode its numeric index. + buildParams( + prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", + v, + traditional, + add + ); + } + } ); + + } else if ( !traditional && jQuery.type( obj ) === "object" ) { + + // Serialize object item. + for ( name in obj ) { + buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); + } + + } else { + + // Serialize scalar item. + add( prefix, obj ); + } + } + + // Serialize an array of form elements or a set of + // key/values into a query string + jQuery.param = function( a, traditional ) { + var prefix, + s = [], + add = function( key, value ) { + + // If value is a function, invoke it and return its value + value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value ); + s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value ); + }; + + // Set traditional to true for jQuery <= 1.3.2 behavior. + if ( traditional === undefined ) { + traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional; + } + + // If an array was passed in, assume that it is an array of form elements. + if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { + + // Serialize the form elements + jQuery.each( a, function() { + add( this.name, this.value ); + } ); + + } else { + + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for ( prefix in a ) { + buildParams( prefix, a[ prefix ], traditional, add ); + } + } + + // Return the resulting serialization + return s.join( "&" ).replace( r20, "+" ); + }; + + jQuery.fn.extend( { + serialize: function() { + return jQuery.param( this.serializeArray() ); + }, + serializeArray: function() { + return this.map( function() { + + // Can add propHook for "elements" to filter or add form elements + var elements = jQuery.prop( this, "elements" ); + return elements ? jQuery.makeArray( elements ) : this; + } ) + .filter( function() { + var type = this.type; + + // Use .is( ":disabled" ) so that fieldset[disabled] works + return this.name && !jQuery( this ).is( ":disabled" ) && + rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && + ( this.checked || !rcheckableType.test( type ) ); + } ) + .map( function( i, elem ) { + var val = jQuery( this ).val(); + + return val == null ? + null : + jQuery.isArray( val ) ? + jQuery.map( val, function( val ) { + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ) : + { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ).get(); + } + } ); + + + jQuery.ajaxSettings.xhr = function() { + try { + return new window.XMLHttpRequest(); + } catch ( e ) {} + }; + + var xhrSuccessStatus = { + + // File protocol always yields status code 0, assume 200 + 0: 200, + + // Support: IE9 + // #1450: sometimes IE returns 1223 when it should be 204 + 1223: 204 + }, + xhrSupported = jQuery.ajaxSettings.xhr(); + + support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); + support.ajax = xhrSupported = !!xhrSupported; + + jQuery.ajaxTransport( function( options ) { + var callback, errorCallback; + + // Cross domain only allowed if supported through XMLHttpRequest + if ( support.cors || xhrSupported && !options.crossDomain ) { + return { + send: function( headers, complete ) { + var i, + xhr = options.xhr(); + + xhr.open( + options.type, + options.url, + options.async, + options.username, + options.password + ); + + // Apply custom fields if provided + if ( options.xhrFields ) { + for ( i in options.xhrFields ) { + xhr[ i ] = options.xhrFields[ i ]; + } + } + + // Override mime type if needed + if ( options.mimeType && xhr.overrideMimeType ) { + xhr.overrideMimeType( options.mimeType ); + } + + // X-Requested-With header + // For cross-domain requests, seeing as conditions for a preflight are + // akin to a jigsaw puzzle, we simply never set it to be sure. + // (it can always be set on a per-request basis or even using ajaxSetup) + // For same-domain requests, won't change header if already provided. + if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { + headers[ "X-Requested-With" ] = "XMLHttpRequest"; + } + + // Set headers + for ( i in headers ) { + xhr.setRequestHeader( i, headers[ i ] ); + } + + // Callback + callback = function( type ) { + return function() { + if ( callback ) { + callback = errorCallback = xhr.onload = + xhr.onerror = xhr.onabort = xhr.onreadystatechange = null; + + if ( type === "abort" ) { + xhr.abort(); + } else if ( type === "error" ) { + + // Support: IE9 + // On a manual native abort, IE9 throws + // errors on any property access that is not readyState + if ( typeof xhr.status !== "number" ) { + complete( 0, "error" ); + } else { + complete( + + // File: protocol always yields status 0; see #8605, #14207 + xhr.status, + xhr.statusText + ); + } + } else { + complete( + xhrSuccessStatus[ xhr.status ] || xhr.status, + xhr.statusText, + + // Support: IE9 only + // IE9 has no XHR2 but throws on binary (trac-11426) + // For XHR2 non-text, let the caller handle it (gh-2498) + ( xhr.responseType || "text" ) !== "text" || + typeof xhr.responseText !== "string" ? + { binary: xhr.response } : + { text: xhr.responseText }, + xhr.getAllResponseHeaders() + ); + } + } + }; + }; + + // Listen to events + xhr.onload = callback(); + errorCallback = xhr.onerror = callback( "error" ); + + // Support: IE9 + // Use onreadystatechange to replace onabort + // to handle uncaught aborts + if ( xhr.onabort !== undefined ) { + xhr.onabort = errorCallback; + } else { + xhr.onreadystatechange = function() { + + // Check readyState before timeout as it changes + if ( xhr.readyState === 4 ) { + + // Allow onerror to be called first, + // but that will not handle a native abort + // Also, save errorCallback to a variable + // as xhr.onerror cannot be accessed + window.setTimeout( function() { + if ( callback ) { + errorCallback(); + } + } ); + } + }; + } + + // Create the abort callback + callback = callback( "abort" ); + + try { + + // Do send the request (this may raise an exception) + xhr.send( options.hasContent && options.data || null ); + } catch ( e ) { + + // #14683: Only rethrow if this hasn't been notified as an error yet + if ( callback ) { + throw e; + } + } + }, + + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } + } ); + + + + + // Install script dataType + jQuery.ajaxSetup( { + accepts: { + script: "text/javascript, application/javascript, " + + "application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /\b(?:java|ecma)script\b/ + }, + converters: { + "text script": function( text ) { + jQuery.globalEval( text ); + return text; + } + } + } ); + + // Handle cache's special case and crossDomain + jQuery.ajaxPrefilter( "script", function( s ) { + if ( s.cache === undefined ) { + s.cache = false; + } + if ( s.crossDomain ) { + s.type = "GET"; + } + } ); + + // Bind script tag hack transport + jQuery.ajaxTransport( "script", function( s ) { + + // This transport only deals with cross domain requests + if ( s.crossDomain ) { + var script, callback; + return { + send: function( _, complete ) { + script = jQuery( "<script>" ).prop( { + charset: s.scriptCharset, + src: s.url + } ).on( + "load error", + callback = function( evt ) { + script.remove(); + callback = null; + if ( evt ) { + complete( evt.type === "error" ? 404 : 200, evt.type ); + } + } + ); + + // Use native DOM manipulation to avoid our domManip AJAX trickery + document.head.appendChild( script[ 0 ] ); + }, + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } + } ); + + + + + var oldCallbacks = [], + rjsonp = /(=)\?(?=&|$)|\?\?/; + + // Default jsonp settings + jQuery.ajaxSetup( { + jsonp: "callback", + jsonpCallback: function() { + var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) ); + this[ callback ] = true; + return callback; + } + } ); + + // Detect, normalize options and install callbacks for jsonp requests + jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) { + + var callbackName, overwritten, responseContainer, + jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ? + "url" : + typeof s.data === "string" && + ( s.contentType || "" ) + .indexOf( "application/x-www-form-urlencoded" ) === 0 && + rjsonp.test( s.data ) && "data" + ); + + // Handle iff the expected data type is "jsonp" or we have a parameter to set + if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) { + + // Get callback name, remembering preexisting value associated with it + callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ? + s.jsonpCallback() : + s.jsonpCallback; + + // Insert callback into url or form data + if ( jsonProp ) { + s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName ); + } else if ( s.jsonp !== false ) { + s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName; + } + + // Use data converter to retrieve json after script execution + s.converters[ "script json" ] = function() { + if ( !responseContainer ) { + jQuery.error( callbackName + " was not called" ); + } + return responseContainer[ 0 ]; + }; + + // Force json dataType + s.dataTypes[ 0 ] = "json"; + + // Install callback + overwritten = window[ callbackName ]; + window[ callbackName ] = function() { + responseContainer = arguments; + }; + + // Clean-up function (fires after converters) + jqXHR.always( function() { + + // If previous value didn't exist - remove it + if ( overwritten === undefined ) { + jQuery( window ).removeProp( callbackName ); + + // Otherwise restore preexisting value + } else { + window[ callbackName ] = overwritten; + } + + // Save back as free + if ( s[ callbackName ] ) { + + // Make sure that re-using the options doesn't screw things around + s.jsonpCallback = originalSettings.jsonpCallback; + + // Save the callback name for future use + oldCallbacks.push( callbackName ); + } + + // Call if it was a function and we have a response + if ( responseContainer && jQuery.isFunction( overwritten ) ) { + overwritten( responseContainer[ 0 ] ); + } + + responseContainer = overwritten = undefined; + } ); + + // Delegate to script + return "script"; + } + } ); + + + + + // Argument "data" should be string of html + // context (optional): If specified, the fragment will be created in this context, + // defaults to document + // keepScripts (optional): If true, will include scripts passed in the html string + jQuery.parseHTML = function( data, context, keepScripts ) { + if ( !data || typeof data !== "string" ) { + return null; + } + if ( typeof context === "boolean" ) { + keepScripts = context; + context = false; + } + context = context || document; + + var parsed = rsingleTag.exec( data ), + scripts = !keepScripts && []; + + // Single tag + if ( parsed ) { + return [ context.createElement( parsed[ 1 ] ) ]; + } + + parsed = buildFragment( [ data ], context, scripts ); + + if ( scripts && scripts.length ) { + jQuery( scripts ).remove(); + } + + return jQuery.merge( [], parsed.childNodes ); + }; + + + // Keep a copy of the old load method + var _load = jQuery.fn.load; + + /** + * Load a url into a page + */ + jQuery.fn.load = function( url, params, callback ) { + if ( typeof url !== "string" && _load ) { + return _load.apply( this, arguments ); + } + + var selector, type, response, + self = this, + off = url.indexOf( " " ); + + if ( off > -1 ) { + selector = jQuery.trim( url.slice( off ) ); + url = url.slice( 0, off ); + } + + // If it's a function + if ( jQuery.isFunction( params ) ) { + + // We assume that it's the callback + callback = params; + params = undefined; + + // Otherwise, build a param string + } else if ( params && typeof params === "object" ) { + type = "POST"; + } + + // If we have elements to modify, make the request + if ( self.length > 0 ) { + jQuery.ajax( { + url: url, + + // If "type" variable is undefined, then "GET" method will be used. + // Make value of this field explicit since + // user can override it through ajaxSetup method + type: type || "GET", + dataType: "html", + data: params + } ).done( function( responseText ) { + + // Save response for use in complete callback + response = arguments; + + self.html( selector ? + + // If a selector was specified, locate the right elements in a dummy div + // Exclude scripts to avoid IE 'Permission Denied' errors + jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) : + + // Otherwise use the full result + responseText ); + + // If the request succeeds, this function gets "data", "status", "jqXHR" + // but they are ignored because response was set above. + // If it fails, this function gets "jqXHR", "status", "error" + } ).always( callback && function( jqXHR, status ) { + self.each( function() { + callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] ); + } ); + } ); + } + + return this; + }; + + + + + // Attach a bunch of functions for handling common AJAX events + jQuery.each( [ + "ajaxStart", + "ajaxStop", + "ajaxComplete", + "ajaxError", + "ajaxSuccess", + "ajaxSend" + ], function( i, type ) { + jQuery.fn[ type ] = function( fn ) { + return this.on( type, fn ); + }; + } ); + + + + + jQuery.expr.filters.animated = function( elem ) { + return jQuery.grep( jQuery.timers, function( fn ) { + return elem === fn.elem; + } ).length; + }; + + + + + /** + * Gets a window from an element + */ + function getWindow( elem ) { + return jQuery.isWindow( elem ) ? elem : elem.nodeType === 9 && elem.defaultView; + } + + jQuery.offset = { + setOffset: function( elem, options, i ) { + var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition, + position = jQuery.css( elem, "position" ), + curElem = jQuery( elem ), + props = {}; + + // Set position first, in-case top/left are set even on static elem + if ( position === "static" ) { + elem.style.position = "relative"; + } + + curOffset = curElem.offset(); + curCSSTop = jQuery.css( elem, "top" ); + curCSSLeft = jQuery.css( elem, "left" ); + calculatePosition = ( position === "absolute" || position === "fixed" ) && + ( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1; + + // Need to be able to calculate position if either + // top or left is auto and position is either absolute or fixed + if ( calculatePosition ) { + curPosition = curElem.position(); + curTop = curPosition.top; + curLeft = curPosition.left; + + } else { + curTop = parseFloat( curCSSTop ) || 0; + curLeft = parseFloat( curCSSLeft ) || 0; + } + + if ( jQuery.isFunction( options ) ) { + + // Use jQuery.extend here to allow modification of coordinates argument (gh-1848) + options = options.call( elem, i, jQuery.extend( {}, curOffset ) ); + } + + if ( options.top != null ) { + props.top = ( options.top - curOffset.top ) + curTop; + } + if ( options.left != null ) { + props.left = ( options.left - curOffset.left ) + curLeft; + } + + if ( "using" in options ) { + options.using.call( elem, props ); + + } else { + curElem.css( props ); + } + } + }; + + jQuery.fn.extend( { + offset: function( options ) { + if ( arguments.length ) { + return options === undefined ? + this : + this.each( function( i ) { + jQuery.offset.setOffset( this, options, i ); + } ); + } + + var docElem, win, + elem = this[ 0 ], + box = { top: 0, left: 0 }, + doc = elem && elem.ownerDocument; + + if ( !doc ) { + return; + } + + docElem = doc.documentElement; + + // Make sure it's not a disconnected DOM node + if ( !jQuery.contains( docElem, elem ) ) { + return box; + } + + box = elem.getBoundingClientRect(); + win = getWindow( doc ); + return { + top: box.top + win.pageYOffset - docElem.clientTop, + left: box.left + win.pageXOffset - docElem.clientLeft + }; + }, + + position: function() { + if ( !this[ 0 ] ) { + return; + } + + var offsetParent, offset, + elem = this[ 0 ], + parentOffset = { top: 0, left: 0 }; + + // Fixed elements are offset from window (parentOffset = {top:0, left: 0}, + // because it is its only offset parent + if ( jQuery.css( elem, "position" ) === "fixed" ) { + + // Assume getBoundingClientRect is there when computed position is fixed + offset = elem.getBoundingClientRect(); + + } else { + + // Get *real* offsetParent + offsetParent = this.offsetParent(); + + // Get correct offsets + offset = this.offset(); + if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) { + parentOffset = offsetParent.offset(); + } + + // Add offsetParent borders + parentOffset.top += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true ); + parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true ); + } + + // Subtract parent offsets and element margins + return { + top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ), + left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true ) + }; + }, + + // This method will return documentElement in the following cases: + // 1) For the element inside the iframe without offsetParent, this method will return + // documentElement of the parent window + // 2) For the hidden or detached element + // 3) For body or html element, i.e. in case of the html node - it will return itself + // + // but those exceptions were never presented as a real life use-cases + // and might be considered as more preferable results. + // + // This logic, however, is not guaranteed and can change at any point in the future + offsetParent: function() { + return this.map( function() { + var offsetParent = this.offsetParent; + + while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) { + offsetParent = offsetParent.offsetParent; + } + + return offsetParent || documentElement; + } ); + } + } ); + + // Create scrollLeft and scrollTop methods + jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) { + var top = "pageYOffset" === prop; + + jQuery.fn[ method ] = function( val ) { + return access( this, function( elem, method, val ) { + var win = getWindow( elem ); + + if ( val === undefined ) { + return win ? win[ prop ] : elem[ method ]; + } + + if ( win ) { + win.scrollTo( + !top ? val : win.pageXOffset, + top ? val : win.pageYOffset + ); + + } else { + elem[ method ] = val; + } + }, method, val, arguments.length ); + }; + } ); + + // Support: Safari<7-8+, Chrome<37-44+ + // Add the top/left cssHooks using jQuery.fn.position + // Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084 + // Blink bug: https://code.google.com/p/chromium/issues/detail?id=229280 + // getComputedStyle returns percent when specified for top/left/bottom/right; + // rather than make the css module depend on the offset module, just check for it here + jQuery.each( [ "top", "left" ], function( i, prop ) { + jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition, + function( elem, computed ) { + if ( computed ) { + computed = curCSS( elem, prop ); + + // If curCSS returns percentage, fallback to offset + return rnumnonpx.test( computed ) ? + jQuery( elem ).position()[ prop ] + "px" : + computed; + } + } + ); + } ); + + + // Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods + jQuery.each( { Height: "height", Width: "width" }, function( name, type ) { + jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, + function( defaultExtra, funcName ) { + + // Margin is only for outerHeight, outerWidth + jQuery.fn[ funcName ] = function( margin, value ) { + var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ), + extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" ); + + return access( this, function( elem, type, value ) { + var doc; + + if ( jQuery.isWindow( elem ) ) { + + // As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there + // isn't a whole lot we can do. See pull request at this URL for discussion: + // https://github.com/jquery/jquery/pull/764 + return elem.document.documentElement[ "client" + name ]; + } + + // Get document width or height + if ( elem.nodeType === 9 ) { + doc = elem.documentElement; + + // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], + // whichever is greatest + return Math.max( + elem.body[ "scroll" + name ], doc[ "scroll" + name ], + elem.body[ "offset" + name ], doc[ "offset" + name ], + doc[ "client" + name ] + ); + } + + return value === undefined ? + + // Get width or height on the element, requesting but not forcing parseFloat + jQuery.css( elem, type, extra ) : + + // Set width or height on the element + jQuery.style( elem, type, value, extra ); + }, type, chainable ? margin : undefined, chainable, null ); + }; + } ); + } ); + + + jQuery.fn.extend( { + + bind: function( types, data, fn ) { + return this.on( types, null, data, fn ); + }, + unbind: function( types, fn ) { + return this.off( types, null, fn ); + }, + + delegate: function( selector, types, data, fn ) { + return this.on( types, selector, data, fn ); + }, + undelegate: function( selector, types, fn ) { + + // ( namespace ) or ( selector, types [, fn] ) + return arguments.length === 1 ? + this.off( selector, "**" ) : + this.off( types, selector || "**", fn ); + }, + size: function() { + return this.length; + } + } ); + + jQuery.fn.andSelf = jQuery.fn.addBack; + + + + + // Register as a named AMD module, since jQuery can be concatenated with other + // files that may use define, but not via a proper concatenation script that + // understands anonymous AMD modules. A named AMD is safest and most robust + // way to register. Lowercase jquery is used because AMD module names are + // derived from file names, and jQuery is normally delivered in a lowercase + // file name. Do this after creating the global so that if an AMD module wants + // to call noConflict to hide this version of jQuery, it will work. + + // Note that for maximum portability, libraries that are not jQuery should + // declare themselves as anonymous modules, and avoid setting a global if an + // AMD loader is present. jQuery is a special case. For more information, see + // https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon + + if ( true ) { + !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function() { + return jQuery; + }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); + } + + + + var + + // Map over jQuery in case of overwrite + _jQuery = window.jQuery, + + // Map over the $ in case of overwrite + _$ = window.$; + + jQuery.noConflict = function( deep ) { + if ( window.$ === jQuery ) { + window.$ = _$; + } + + if ( deep && window.jQuery === jQuery ) { + window.jQuery = _jQuery; + } + + return jQuery; + }; + + // Expose jQuery and $ identifiers, even in AMD + // (#7102#comment:10, https://github.com/jquery/jquery/pull/557) + // and CommonJS for browser emulators (#13566) + if ( !noGlobal ) { + window.jQuery = window.$ = jQuery; + } + + return jQuery; + })); + + +/***/ }, + +/***/ 4: +/***/ function(module, exports) { + + /** + * Created by gavorhes on 12/10/2015. + */ + "use strict"; + /** + * create a namespace on the gv object + * @param {string} namespace to create + * @returns {object} object representing the namespace + */ + function provide(namespace) { + "use strict"; + if (typeof window['gv'] == 'undefined') { + window['gv'] = {}; + } + var parts = namespace.split('.'); + var nameSpace = window['gv']; + for (var i = 0; i < parts.length; i++) { + var newObject = nameSpace[parts[i]]; + if (typeof newObject == 'undefined') { + nameSpace[parts[i]] = {}; + } + nameSpace = nameSpace[parts[i]]; + } + return nameSpace; + } + provide('util'); + window['gv'].util.provide = provide; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.default = provide; + + +/***/ }, + +/***/ 27: +/***/ function(module, exports, __webpack_require__) { + + /** + * Created by gavorhes on 12/10/2015. + */ + "use strict"; + var provide_1 = __webpack_require__(4); + var nm = provide_1.default('collections'); + var $ = __webpack_require__(3); + var TipPresets = (function () { + function TipPresets(conf) { + this.label = conf.label; + this.presets = conf.presets; + this.domId = this.label.replace(/ /g, '').toLowerCase(); + var theSum = 0; + for (var _i = 0, _a = this.presets; _i < _a.length; _i++) { + var pr = _a[_i]; + theSum += pr.value; + } + if (theSum != 100) { + throw 'preset sum does note equal 100'; + } + } + return TipPresets; + }()); + var _Slider = (function () { + /** + * Slider constructor + * @param sliderConfig - the configuration + + */ + function _Slider(sliderConfig) { + this._dropdownSelection = null; + this._weight = null; + this.name = sliderConfig.label; + this.domId = this.name.toLowerCase().replace(/ /g, '-'); + this._locked = false; + this._min = 0.0; + this._max = 100; + this.labelLow = null; + this.labelHigh = null; + this.labelVal = null; + this.slider = null; + this.chk = null; + this.atMin = false; + this.atMax = false; + var sel = "<select class=\"" + (sliderConfig.yearOptions.length == 1 ? 'hidden-select' : 'show-select') + "\" id=\"" + this.domId + "_chg\">"; + for (var i = 0; i < sliderConfig.yearOptions.length; i++) { + var itm = sliderConfig.yearOptions[i]; + sel += "<option value=\"" + itm.column + "\">" + itm.label + "</option>"; + } + sel += '</select>'; + this.selectedParamDefault = this.selectedParam; + this.html = '<div class="slider-div">' + + ("<label for=\"" + this.domId + "_chk\" class=\"slider-label\">" + this.name + "</label>") + + sel + "<br>" + + ("<input id=\"" + this.domId + "_chk\" type=\"checkbox\" title=\"Lock/Unlock Slider\">") + + ("<label id=\"" + this.domId + "_low\" class=\"low-high\"></label>") + + ("<input id=\"" + this.domId + "\" type=\"range\" value=\"50\" min=\"0\" max=\"100\" step=\"0.1\">") + + ("<label id=\"" + this.domId + "_high\" class=\"low-high\"></label>") + + ("<label id=\"" + this.domId + "_lbl\" for=\"" + this.domId + "\" class=\"percent-label\"></label></div>"); + } + /** + * add html to dom + * @param {jQuery} $container - container element + */ + _Slider.prototype.addToDom = function ($container) { + $container.append(this.html); + this.labelLow = $("#" + this.domId + "_low"); + this.labelHigh = $("#" + this.domId + "_high"); + this.labelVal = $("#" + this.domId + "_lbl"); + this.slider = $("#" + this.domId); + this.selectionBox = $("#" + this.domId + "_chg"); + this.chk = $("#" + this.domId + "_chk"); + }; + /** + * increment the slider + * @param {number} delta change delta + * @returns {number} the remainder not able to be allocated to this slider + */ + _Slider.prototype.increment = function (delta) { + var remainder = 0; + delta = Number(delta.toFixed(1)); + this._weight += delta; + if (this._weight < this._min) { + remainder = this._min - this._weight; + this._weight = this._min; + this.atMin = true; + } + else if (this._weight > this._max) { + remainder = this._max - this._weight; + this._weight = this._max; + this.atMax = true; + } + else { + this.atMin = false; + this.atMax = false; + } + this.slider.val(this._weight.toFixed(1)); + this.labelVal.html(this._weight.toFixed(1) + '%'); + return remainder; + }; + /** + * set the value and drop down + * @param {number} newVal the new value + * @param {string} selectedParam the selected parameter + */ + _Slider.prototype.setValAndDropDown = function (newVal, selectedParam) { + this.min = 0; + this.max = 100; + this.weight = newVal; + this.slider.val(newVal.toFixed(1)); + this.selectionBox.val(selectedParam); + this.selectedParam = selectedParam; + this.locked = true; + }; + Object.defineProperty(_Slider.prototype, "locked", { + /** + * + * @returns {boolean} if locked + */ + get: function () { + return this._locked; + }, + /** + * + * @param {boolean} val if locked + */ + set: function (val) { + this._locked = val; + this.slider.prop('disabled', this._locked); + this.selectionBox.prop('disabled', this._locked); + this.chk.prop('checked', !this._locked); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(_Slider.prototype, "min", { + /** + * + * @returns {number} the minimum + */ + get: function () { + return this._min; + }, + /** + * + * @param {number} newVal new minimum + */ + set: function (newVal) { + this._min = Number(newVal.toFixed(1)); + if (this._min < 0) { + this._min = 0; + } + this.labelLow.html(this._min.toFixed(1)); + this.slider.attr('min', this._min.toFixed(1)); + this.atMin = this._weight == this._min; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(_Slider.prototype, "max", { + /** + * + * @returns {number} the maximum + */ + get: function () { + return this._max; + }, + /** + * + * @param {number} newVal the maximum + */ + set: function (newVal) { + this._max = Number(newVal.toFixed(1)); + if (this._max > 100) { + this._max = 100.0; + } + this.labelHigh.html(this._max.toFixed(1)); + this.slider.attr('max', this._max.toFixed(1)); + this.atMax = this._weight == this._max; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(_Slider.prototype, "weight", { + /** + * + * @returns {number} the weight + */ + get: function () { + return this._weight; + }, + /** + * + * @param {number} newVal the weight + */ + set: function (newVal) { + this._weight = Number(newVal.toFixed(1)); + this.labelVal.html(this._weight.toFixed(1) + '%'); + if (this._weight <= this._min) { + this.atMin = true; + this.atMax = false; + } + else if (this._weight >= this._max) { + this.atMin = false; + this.atMax = true; + } + else { + this.atMin = false; + this.atMax = false; + } + }, + enumerable: true, + configurable: true + }); + return _Slider; + }()); + nm._Slider = _Slider; + /** + * class to keep track of the sliders + */ + var TipSliders = (function () { + /** + * + * @param sliderConfigs + * @param presetConfig + * @param divId + * @param presetSelector + * @param regionSelector + * @param versionSelector + * @param chgCallback + */ + function TipSliders(sliderConfigs, presetConfig, divId, presetSelector, regionSelector, versionSelector, chgCallback) { + var _this = this; + this.resetting = false; + this.reservedPercent = 0.0; + this.$container = $('#' + divId); + this.$container.addClass('slider-container'); + this._changedCallback = typeof chgCallback == 'function' ? chgCallback : function () { }; + this._$presetSelector = presetSelector; + this._$regionSelector = regionSelector; + this._$versionSelector = versionSelector; + this._sliderList = []; + this._sliderLookup = {}; + for (var i = 0; i < sliderConfigs.length; i++) { + var sld = new _Slider(sliderConfigs[i]); + this._sliderList.push(sld); + this._sliderLookup[sld.domId] = sld; + sld.addToDom(this.$container); + } + this._presetArray = []; + this._presetLookup = {}; + for (var i = 0; i < presetConfig.length; i++) { + var preset = new TipPresets(presetConfig[i]); + var idx = (i + 1).toFixed(); + this._presetLookup[idx] = preset; + this._presetArray.push(preset); + this._$presetSelector.append("<option value=\"" + idx + "\">" + preset.label + "</option>"); + } + this._lockedList = []; + this._inRangeList = []; + this._atMinList = []; + this._atMaxList = []; + this.lockedCount = 10; + this.notLockedCount = 0; + this._splitSliderArray(); + this._$presetSelector.change(function () { + _this.setPresetValues(); + _this._runChangedCallback(); + }); + this._$regionSelector.change(function () { + _this._runChangedCallback(); + }); + this._$versionSelector.change(function () { + _this._runChangedCallback(); + }); + this._$presetSelector.trigger('change'); + this._addEventListeners(); + } + TipSliders.prototype._runChangedCallback = function () { + this._changedCallback(this.paramWeightsRegionVersion); + }; + Object.defineProperty(TipSliders.prototype, "changedCallback", { + get: function () { + return this._changedCallback; + }, + set: function (chg) { + this._changedCallback = chg; + this._runChangedCallback(); + }, + enumerable: true, + configurable: true + }); + TipSliders.prototype.setPresetValues = function () { + var thePreset = this._presetLookup[this._$presetSelector.val()]; + for (var i = 0; i < thePreset.presets.length; i++) { + var presetValues = thePreset.presets[i]; + var theSlider = this._sliderList[i]; + theSlider.locked = true; + theSlider.setValAndDropDown(presetValues.value, presetValues.column); + } + }; + /** + * split array into subarrays holding the sliders + * @private + */ + TipSliders.prototype._splitSliderArray = function () { + this._lockedList = []; + this._inRangeList = []; + this._atMinList = []; + this._atMaxList = []; + for (var i = 0; i < this._sliderList.length; i++) { + var sld = this._sliderList[i]; + if (sld.locked) { + this._lockedList.push(sld); + } + else if (sld.atMin) { + this._atMinList.push(sld); + } + else if (sld.atMax) { + this._atMaxList.push(sld); + } + else { + this._inRangeList.push(sld); + } + } + this.lockedCount = this._lockedList.length; + this.notLockedCount = this._sliderList.length - this.lockedCount; + }; + /** + * handle remainder, recursive to take care of min max overshoots + * @param {number} remain the remainder + * @param {string} skipDomId - this dom id + * @private + */ + TipSliders.prototype._handleRemainder = function (remain, skipDomId) { + remain = Number(remain.toFixed(1)); + if (remain == 0) { + return; + } + this._splitSliderArray(); + var canChangeArray = []; + for (var i = 0; i < this._inRangeList.length; i++) { + var sld = this._inRangeList[i]; + if (sld.domId == skipDomId) { + continue; + } + canChangeArray.push(sld); + } + if (remain > 0) { + for (var i = 0; i < this._atMaxList.length; i++) { + var sld = this._atMaxList[i]; + if (sld.domId == skipDomId) { + continue; + } + canChangeArray.push(sld); + } + } + else { + for (var i = 0; i < this._atMinList.length; i++) { + var sld = this._atMinList[i]; + if (sld.domId == skipDomId) { + continue; + } + canChangeArray.push(sld); + } + } + if (canChangeArray.length == 0) { + return; + } + var inc = -1 * Number((remain / canChangeArray.length).toFixed(1)); + var newRemainder = 0; + for (var i = 0; i < canChangeArray.length; i++) { + newRemainder += canChangeArray[i].increment(inc); + } + this._handleRemainder(newRemainder, skipDomId); + }; + /** + * + * @param {object} keyValList key and value list + */ + TipSliders.prototype.setValues = function (keyValList) { + this.resetting = true; + for (var k in keyValList) { + if (keyValList.hasOwnProperty(k)) { + this._sliderLookup[k].setValAndDropDown(keyValList[k][0], keyValList[k][1]); + } + } + this.resetting = false; + }; + /** + * get the weight sum + * @returns {number} the weight sum + */ + TipSliders.prototype.getSum = function () { + var total = 0; + for (var i = 0; i < this._sliderList.length; i++) { + var sld = this._sliderList[i]; + total += Number(sld.weight.toFixed(1)); + } + return total; + }; + /** + * get the parameter weights + * @returns {object} lookup with parameter weights + */ + TipSliders.prototype.getParams = function () { + var paramWeights = {}; + for (var i = 0; i < this._sliderList.length; i++) { + var sld = this._sliderList[i]; + paramWeights[sld.selectedParam] = Number(sld.weight.toFixed(1)); + } + return paramWeights; + }; + TipSliders.prototype._addEventListeners = function () { + var ___this = this; + //change function + this.$container.find('input[type="range"]').change(function () { + if (___this.resetting) { + return; + } + var $this = $(this); + var domId = this['id']; + var sldr = ___this._sliderLookup[domId]; + var newValue = parseFloat($this.val()); + var oldValue = sldr.weight; + var diff = newValue - oldValue; + diff = Number(diff.toFixed(1)); + sldr.weight = Number(newValue.toFixed(1)); + ___this._handleRemainder(diff, domId); + //cleanup, make sure the sum is still 100 + var sum = Number(___this.getSum().toFixed(1)); + if (sum > 100) { + loop1: while (true) { + for (var i = 0; i < ___this._sliderList.length; i++) { + var sld = ___this._sliderList[i]; + if (sld.domId == domId || sld.locked || sld.atMin) { + continue; + } + sld.increment(-0.1); + sum -= 0.1; + if (sum.toFixed(1) == '100.0') { + break loop1; + } + } + } + } + else if (sum < 100) { + loop1: while (true) { + for (var i = 0; i < ___this._sliderList.length; i++) { + var sld = ___this._sliderList[i]; + if (sld.domId == domId || sld.locked || sld.atMax) { + continue; + } + sld.increment(0.1); + sum += 0.1; + if (sum.toFixed(1) == '100.0') { + break loop1; + } + } + } + } + ___this._$presetSelector.val('0'); + ___this._runChangedCallback(); + }); + //update the selected parameter when the selection is changed + $('.show-select').change(function () { + if (___this.resetting) { + return; + } + ___this._sliderLookup[this['id'].replace('_chg', '')].selectedParam = $(this).val(); + ___this._$presetSelector.val('0'); + ___this._runChangedCallback(); + }); + //lock the slider and update the reserved percent + this.$container.find('input[type="checkbox"]').change(function () { + var domEl = this; + ___this._sliderLookup[domEl.id.replace('_chk', '')].locked = !domEl.checked; + ___this.reservedPercent = 0.0; + ___this.notLockedCount = 0; + var notLockedSliders = []; + for (var i = 0; i < ___this._sliderList.length; i++) { + var sld = ___this._sliderList[i]; + if (sld.locked) { + ___this.reservedPercent += sld.weight; + continue; + } + notLockedSliders.push(sld); + ___this.notLockedCount++; + } + for (var i = 0; i < ___this._sliderList.length; i++) { + var sld = ___this._sliderList[i]; + if (sld.locked) { + continue; + } + sld.max = 100 - ___this.reservedPercent; + } + if (notLockedSliders.length == 1) { + notLockedSliders[0].min = notLockedSliders[0].weight; + } + else { + for (var i = 0; i < notLockedSliders.length; i++) { + notLockedSliders[i].min = 0; + } + } + }); + }; + Object.defineProperty(TipSliders.prototype, "paramWeightsRegionVersion", { + get: function () { + return { paramWeights: this.getParams(), + region: this._$regionSelector.val(), mmVersion: this._$versionSelector.val() }; + }, + enumerable: true, + configurable: true + }); + return TipSliders; + }()); + exports.TipSliders = TipSliders; + nm.Sliders = TipSliders; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.default = TipSliders; + + +/***/ } + +/******/ }); +//# sourceMappingURL=slider-test.js.map \ No newline at end of file diff --git a/test-html/js/slider-test.js.map b/test-html/js/slider-test.js.map new file mode 100644 index 0000000000000000000000000000000000000000..b6f45606ec4204382b66ab58393b9f14e17861b8 --- /dev/null +++ b/test-html/js/slider-test.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///webpack/bootstrap ef760a4c28bc3d5b9fb4?77b8*****","webpack:///./src-ts/_test/slider-test.ts","webpack:///./~/jquery/dist/jquery.js?89fd***","webpack:///./src-ts/util/provide.ts?c446***","webpack:///./src-ts/collections/Sliders.ts"],"names":[],"mappings":"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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;;;AAIA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gCAA+B;AAC/B;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,SAAQ,YAAY;;AAEpB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,OAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF,qBAAoB;;AAEpB;AACA;AACA,GAAE;;AAEF;;AAEA;AACA;AACA,GAAE;;AAEF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kDAAiD;AACjD;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF,iCAAgC;AAChC;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA,WAAU,YAAY;AACtB;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA,UAAS,SAAS;AAClB;AACA;;AAEA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAS,YAAY;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAU,YAAY;AACtB;;AAEA;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,GAAE;;AAEF;;AAEA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAC;;AAED;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS,SAAS;AAClB;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,2BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA,iBAAgB,IAAI;;AAEpB;AACA;;AAEA;AACA;;AAEA;AACA,yCAAwC,IAAI;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD,UAAS;;AAET;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA,OAAM;;AAEN;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,MAAK;AACL;AACA;;AAEA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA,OAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAM;AACN,OAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,cAAa,yBAAyB;AACtC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;;AAEA;AACA;AACA,GAAE;AACF;AACA,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,QAAQ;AACnB,YAAW,QAAQ;AACnB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;AACF;;AAEA;AACA;AACA,YAAW,gBAAgB;AAC3B,cAAa,uBAAuB;AACpC;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,YAAW,eAAe;AAC1B,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,eAAe;AAC1B,cAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,YAAW,UAAU;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,YAAW,cAAc;AACzB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;AACA,IAAG;AACH;AACA,iCAAgC,MAAM;AACtC;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;;AAEA,gBAAe;;AAEf,UAAS;;AAET;AACA,SAAQ,iCAAiC;AACzC,SAAQ,oBAAoB;AAC5B,SAAQ,sCAAsC;AAC9C,SAAQ;AACR,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;;AAEA;AACA;AACA;AACA,iBAAgB,aAAa,EAAE;AAC/B;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,6DAA4D;;AAE5D;AACA;AACA;AACA,0CAAyC;;AAEzC;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,QAAO;AACP;AACA;AACA;AACA;AACA,8DAA6D;;AAE7D;AACA;AACA;AACA,2CAA0C;;AAE1C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,iEAAgE;;AAEhE;AACA;AACA;AACA,8CAA6C;;AAE7C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA,kEAAiE,UAAU;AAC3E,uCAAsC,2BAA2B;AACjE;AACA,iCAAgC,MAAM;AACtC;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA,WAAU,YAAY;AACtB;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,WAAU,YAAY;AACtB;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,WAAU,UAAU;AACpB;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,WAAU,cAAc;AACxB;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;;AAEA;AACA,aAAY,uEAAuE;AACnF;AACA;AACA,aAAY,4BAA4B;AACxC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAQ,SAAS;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA,4DAA2D;;AAE3D;AACA;AACA,qFAAoF;;AAEpF;AACA;;AAEA;AACA;AACA,QAAO;AACP;AACA;;AAEA,oCAAmC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA,SAAQ,SAAS;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAAQ,SAAS;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA,GAAE;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH,SAAQ,SAAS;AACjB;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAuC,iDAAiD;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kDAAiD;AACjD,WAAU,wCAAwC;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,gBAAgB;AAC3B;AACA,YAAW,QAAQ;AACnB,YAAW,MAAM;AACjB,YAAW,MAAM;AACjB;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;AACA,GAAE;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;AACA,GAAE;AACF;;AAEA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;;AAEA;;AAEA,EAAC;;;;AAID;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA,SAAQ,GAAG;AACX;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;;AAEA;;;;AAIA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAE;AACF;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA,KAAI;AACJ;;AAEA,eAAc,SAAS;AACvB;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;AAGD;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,KAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,SAAQ;AACR;AACA;AACA;AACA;;AAEA;;AAEA;AACA,MAAK;AACL;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;;AAEA;AACA;AACA,KAAI;AACJ;AACA;;AAEA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAU,OAAO;AACjB;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,UAAS,OAAO;AAChB,0BAAyB,wBAAwB;;AAEjD;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA,2CAA0C;AAC1C,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA;AACA,EAAC;AACD;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAC;AACD;;;;AAIA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAmB;;AAEnB;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAU,cAAc;AACxB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,MAAK;AACL;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAQ;;AAER;AACA;AACA;AACA,QAAO;AACP,OAAM;;AAEN;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAQ;AACR,QAAO;AACP;AACA,OAAM;AACN,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,+CAA8C;AAC9C,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAM;AACN;AACA;AACA;AACA,KAAI;;AAEJ;;AAEA,6CAA4C;AAC5C;AACA;AACA;AACA;AACA,WAAU,YAAY;AACtB;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAC;;;AAGD;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;AACF;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,WAAU,SAAS;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;AAKA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA,GAAE;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,OAAM;AACN;AACA;AACA;;AAEA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;;AAEA,wBAAuB,aAAa;AACpC,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,qBAAoB,SAAS;AAC7B;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA,IAAG;AACH;AACA,EAAC;;;AAGD;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ,IAAG;AACH;AACA,EAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ,GAAE;AACF;AACA;AACA;AACA,IAAG;AACH,GAAE;AACF;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;;AAEA;;;AAGA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA,gBAAe,oBAAoB,EAAE;AACrC,gBAAe,qCAAqC,EAAE;AACtD;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;;;AAIA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA,SAAQ,OAAO;AACf;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,uBAAsB;;AAEtB;AACA;AACA;AACA;AACA;AACA;;AAEA,SAAQ,OAAO;AACf;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;;AAEA;AACA,KAAI;AACJ;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAC;;;AAGD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAE,gBAAgB;AAClB;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAE;AACF;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;;AAEA;AACA;AACA;AACA;AACA;;AAEA,YAAW;;AAEX;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;AACA;;AAEA;AACA;AACA;;AAEA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,4CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;;AAEF;;AAEA;AACA;;AAEA;AACA;AACA;AACA,qDAAoD;AACpD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,0BAAyB;AACzB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,gEAA+D;AAC/D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,WAAU,cAAc;;AAExB;AACA;AACA;AACA;AACA,kBAAiB,mBAAmB;AACpC;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA0B,+BAA+B;AACzD;AACA;AACA;AACA;;AAEA;AACA;AACA,wBAAuB,wDAAwD;AAC/E;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA,cAAa;;AAEb;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,uCAAsC,cAAc;AACpD;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,sCAAqC;AACrC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,uCAAsC;AACtC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,sCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA,EAAC;;;AAGD;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,4CAA2C,OAAO;AAClD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,+BAA8B;;AAE9B;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAE;AACF;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAU,OAAO;AACjB;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,iBAAgB,gBAAgB;AAChC;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,SAAQ,+BAA+B;AACvC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,wCAAuC,OAAO;AAC9C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,yCAAwC,OAAO;AAC/C;AACA;AACA,KAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA,UAAS,qCAAqC;AAC9C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,SAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;;AAEA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;;AAEA,UAAS,8BAA8B;AACvC;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA,8BAA6B;AAC7B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,aAAY,OAAO;AACnB;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;;AAEA,UAAS,WAAW;AACpB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAC;;;AAGD;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,YAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;;;;AAIA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,sCAAqC,UAAU,SAAS,MAAM,aAAa;AAC3E,cAAa,eAAe;AAC5B;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,mCAAkC,2BAA2B,sBAAsB;AACnF,uBAAsB,cAAc;AACpC,iBAAgB,WAAW,YAAY;AACvC,YAAW;AACX;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAA4B,SAAS,QAAQ,QAAQ;AACrD;;AAEA;AACA;AACA,qCAAoC,uBAAuB;AAC3D,oBAAmB,SAAS,SAAS;AACrC;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,GAAE;AACF,EAAC;;;AAGD;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,mBAAkB;AAClB;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;;AAEA,aAAY,+DAA+D;AAC3E;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA,SAAQ,OAAO;;AAEf;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,SAAQ,gBAAgB;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAiB,gBAAgB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,IAAG;;AAEH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA,mBAAkB,gBAAgB;AAClC;AACA,OAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,wBAAuB,4BAA4B;AACnD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA,kBAAiB;;AAEjB;AACA;;AAEA,WAAU,OAAO;AACjB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA,aAAY;AACZ;;AAEA;AACA;AACA;;AAEA,YAAW,SAAS;AACpB;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA,IAAG;AACH;AACA,EAAC;;;AAGD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;;AAEA;;AAEA;AACA;;;;;AAKA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW;;AAEX;AACA;AACA;AACA,SAAQ,QAAQ;AAChB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAQ,gBAAgB;AACxB;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ,IAAG;AACH;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,kDAAiD;AACjD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,KAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,WAAU,iBAAiB;AAC3B;AACA;;AAEA;;AAEA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,4BAA2B;AAC3B;AACA,sBAAqB;AACrB;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,iBAAiB;AAC5B;AACA;;AAEA,8CAA6C;AAC7C;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;;AAEA,SAAQ,iBAAiB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA,UAAS,iBAAiB;AAC1B;AACA;AACA;AACA;AACA,GAAE;;AAEF;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,EAAC;;AAED;AACA,kEAAiE;AACjE;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,qBAAoB,cAAc;AAClC,GAAE;AACF;AACA;AACA;AACA;;AAEA;AACA,kDAAiD;;AAEjD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA;;AAEA,gCAA+B,SAAS;AACxC;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,gCAA+B,SAAS;AACxC;AACA;AACA;AACA;AACA;;AAEA;AACA,oBAAmB,gBAAgB;AACnC;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA,WAAU,kBAAkB;AAC5B,YAAW,kBAAkB;AAC7B,eAAc;AACd,EAAC;AACD;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;;AAEA,SAAQ,mBAAmB;AAC3B;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;;;AAGA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;AAGD;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA,IAAG;AACH;AACA,EAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;AAKD;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA,IAAG;AACH;AACA,EAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;AAKD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,OAAM;AACN;AACA;AACA;;AAEA;AACA,KAAI;AACJ;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAC;;;;;AAKD;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,KAAI;AACJ;AACA;;AAEA,kCAAiC;AACjC;AACA;;AAEA,KAAI;AACJ;;AAEA,KAAI;AACJ;AACA;AACA,MAAK;AACL;;AAEA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA,EAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,SAAS;AACpB;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;AAKD;;;AAGA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA,uCAAsC;AACtC;AACA;AACA;;AAEA;;AAEA,0BAAyB;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,+CAA8C;AAC9C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,4CAA2C;AAC3C;;AAEA;AACA;AACA;AACA;AACA,WAAU,KAAK;AACf;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kDAAiD;AACjD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,sCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA,EAAC;;AAED;;AAEA;AACA;AACA;AACA,IAAG;AACH,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;AAGD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA,EAAC;;;;;AAKD;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,qCAAqC;;AAEpD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;;AAEA,MAAK;AACL;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;;AAEA;;;;AAIA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;;AAEhB;AACA;AACA;AACA;AACA;AACA,iBAAgB;;AAEhB,iDAAgD;AAChD;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,oBAAmB;AACnB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,yDAAwD;AACxD;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAiB;;AAEjB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA,KAAI;;AAEJ;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,OAAM;AACN;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,UAAS;AACT;;AAEA;;AAEA;AACA;;AAEA;AACA,kBAAiB;AACjB,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAkD;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,4BAA2B;;AAE3B;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,mCAAkC;;AAElC;AACA,uBAAsB;AACtB,4BAA2B;;AAE3B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAO;;AAEP;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,uDAAsD;AACtD;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,eAAc,oCAAoC;AAClD;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;;AAEA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,MAAK;AACL;;AAEA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA,EAAC;;AAED;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA,EAAC;;;AAGD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,KAAI;AACJ;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;;AAEA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA,EAAC;;;AAGD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH,GAAE;;AAEF;AACA;AACA;AACA;;AAEA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAc;AACd,OAAM;AACN,OAAM;AACN,IAAG;AACH;AACA,EAAC;;;AAGD;AACA;AACA;AACA,GAAE;AACF;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAE;AACF;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAQ;;AAER;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;;AAEA,oDAAmD;AACnD;AACA;AACA;AACA;AACA,SAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,uBAAuB;AAClC,YAAW,yBAAyB;AACpC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;AAKD;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;AAKD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA,EAAC;;;;;AAKD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,KAAI;AACJ,IAAG;AACH;;AAEA;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;AAKD;AACA;AACA;AACA,GAAE;AACF;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,IAAG;AACH;AACA;AACA;;AAEA;;AAEA;AACA,sDAAqD;AACrD;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA,WAAU,kBAAkB;AAC5B;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAmB;;AAEnB,6DAA4D,eAAe;AAC3E;AACA;;AAEA;AACA;;AAEA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA,EAAC;;AAED;AACA,eAAc,sDAAsD;AACpE;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,KAAI;AACJ;AACA;AACA,IAAG;AACH;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;AAGD;AACA,eAAc,mCAAmC;AACjD,gBAAe,6DAA6D;AAC5E;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,KAAI;AACJ;AACA,GAAE;AACF,EAAC;;;AAGD;;AAEA;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;AACF;;AAEA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;AACA,EAAC;;AAED;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;AACF;;;;AAIA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,EAAC;;;;;;;;ACjnTD;;IAEG;;AAGH;;;;IAIG;AACH,kBAAiB,SAAS;KACtB,YAAY,CAAC;KACb,EAAE,CAAC,CAAC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","file":"slider-test.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap ef760a4c28bc3d5b9fb4\n **/","/**\r\n * Created by gavorhes on 6/22/2016.\r\n */\r\nimport {TipSliders, TipPresetConfig, TipSliderConfig} from '../collections/Sliders';\r\nconst $ = require('jquery');\r\nimport {ol} from 'custom-ol';\r\n\r\n\r\n\r\nexport interface ITipConfig{\r\n slidersConfig: Array<TipSliderConfig>;\r\n presetConfig: Array<TipPresetConfig>;\r\n tipSegmentLayerMinZoom: number;\r\n sliders: TipSliders;\r\n _map: ol.Map;\r\n $loadingGif: JQuery;\r\n $presetSelector: JQuery;\r\n $regionSelector: JQuery;\r\n $versionSelector: JQuery;\r\n itsLayerCollection: any;\r\n tipSegmentLayer: any;\r\n metamanagerSegments: any;\r\n}\r\n\r\nexport const tipConfig = {\r\n $loadingGif: $('#loading-gif'),\r\n $presetSelector: $('#preset-selector'),\r\n $regionSelector: $('#region-selector'),\r\n $versionSelector: $('#version-selector'),\r\n tipSegmentLayerMinZoom: 10,\r\n slidersConfig: [\r\n {\r\n label: 'AADT',\r\n yearOptions: [\r\n {label: '1', column: 'aadtyr_1'}\r\n ]\r\n },\r\n {\r\n label: 'AADT Future',\r\n yearOptions: [\r\n {label: '5', column: 'aadtyr_5'},\r\n {label: '10', column: 'aadtyr_10'},\r\n {label: '15', column: 'aadtyr_15'},\r\n {label: '20', column: 'aadtyr_20'}\r\n ]\r\n },\r\n {\r\n label: 'Growth',\r\n yearOptions: [\r\n {label: '5', column: 'growth_5'},\r\n {label: '10', column: 'growth_10'},\r\n {label: '15', column: 'growth_15'},\r\n {label: '20', column: 'growth_20'}\r\n ]\r\n },\r\n {\r\n label: 'Truck',\r\n yearOptions: [\r\n {label: '1', column: 'trkdyr_1'},\r\n {label: '20', column: 'trkdyr_20'}\r\n ]\r\n },\r\n {\r\n label: 'LOS',\r\n yearOptions: [\r\n {label: '1', column: 'losyr_1'}\r\n ]\r\n },\r\n {\r\n label: 'LOS Future',\r\n yearOptions: [\r\n {label: '5', column: 'losyr_5'},\r\n {label: '10', column: 'losyr_10'},\r\n {label: '15', column: 'losyr_15'},\r\n {label: '20', column: 'losyr_20'}\r\n ]\r\n },\r\n {\r\n label: 'Crash Rate',\r\n yearOptions: [\r\n {label: 1, column: 'crash_rate'}\r\n ]\r\n },\r\n {\r\n label: 'Severity',\r\n yearOptions: [\r\n {label: 1, column: 'crash_severity'}\r\n ]\r\n },\r\n {\r\n label: 'Weather',\r\n yearOptions: [\r\n {label: 1, column: 'weather'}\r\n ]\r\n },\r\n {\r\n label: 'Event',\r\n yearOptions: [\r\n {label: 1, column: 'event'}\r\n ]\r\n }\r\n ] as Array<TipSliderConfig>,\r\n presetConfig: [\r\n {\r\n label: 'Default TIP',\r\n presets: [\r\n {column: 'aadtyr_1', value: 10.0},\r\n {column: 'aadtyr_20', value: 7.0},\r\n {column: 'growth_20', value: 7.0},\r\n {column: 'trkdyr_1', value: 4.0},\r\n {column: 'losyr_1', value: 12.0},\r\n {column: 'losyr_20', value: 12.0},\r\n {column: 'crash_rate', value: 15.0},\r\n {column: 'crash_severity', value: 13.0},\r\n {column: 'weather', value: 9.0},\r\n {column: 'event', value: 11.0}\r\n ]\r\n },\r\n {\r\n label: 'Safety',\r\n presets: [\r\n {column: 'aadtyr_1', value: 20.0},\r\n {column: 'aadtyr_20', value: 0.0},\r\n {column: 'growth_20', value: 0.0},\r\n {column: 'trkdyr_1', value: 0.0},\r\n {column: 'losyr_1', value: 0.0},\r\n {column: 'losyr_20', value: 0.0},\r\n {column: 'crash_rate', value: 40.0},\r\n {column: 'crash_severity', value: 40.0},\r\n {column: 'weather', value: 0.0},\r\n {column: 'event', value: 0.0}\r\n ]\r\n },\r\n {\r\n label: 'Mobility Present',\r\n presets: [\r\n {column: 'aadtyr_1', value: 25.0},\r\n {column: 'aadtyr_20', value: 25.0},\r\n {column: 'growth_20', value: 0.0},\r\n {column: 'trkdyr_1', value: 25.0},\r\n {column: 'losyr_1', value: 25.0},\r\n {column: 'losyr_20', value: 0.0},\r\n {column: 'crash_rate', value: 0.0},\r\n {column: 'crash_severity', value: 0.0},\r\n {column: 'weather', value: 0.0},\r\n {column: 'event', value: 0.0}\r\n ]\r\n },\r\n {\r\n label: 'Mobility Future',\r\n presets: [\r\n {column: 'aadtyr_1', value: 0.0},\r\n {column: 'aadtyr_20', value: 25.0},\r\n {column: 'growth_20', value: 25.0},\r\n {column: 'trkdyr_1', value: 25.0},\r\n {column: 'losyr_1', value: 0.0},\r\n {column: 'losyr_20', value: 25.0},\r\n {column: 'crash_rate', value: 0.0},\r\n {column: 'crash_severity', value: 0.0},\r\n {column: 'weather', value: 0.0},\r\n {column: 'event', value: 0.0}\r\n ]\r\n },\r\n {\r\n label: 'Service',\r\n presets: [\r\n {column: 'aadtyr_1', value: 30.0},\r\n {column: 'aadtyr_20', value: 0.0},\r\n {column: 'growth_20', value: 10.0},\r\n {column: 'trkdyr_1', value: 0.0},\r\n {column: 'losyr_1', value: 30.0},\r\n {column: 'losyr_20', value: 30.0},\r\n {column: 'crash_rate', value: 0.0},\r\n {column: 'crash_severity', value: 0.0},\r\n {column: 'weather', value: 0.0},\r\n {column: 'event', value: 0.0}\r\n ]\r\n },\r\n {\r\n label: 'Freight Performance',\r\n presets: [\r\n {column: 'aadtyr_1', value: 20.0},\r\n {column: 'aadtyr_20', value: 0.0},\r\n {column: 'growth_20', value: 0.0},\r\n {column: 'trkdyr_1', value: 60.0},\r\n {column: 'losyr_1', value: 20.0},\r\n {column: 'losyr_20', value: 0.0},\r\n {column: 'crash_rate', value: 0.0},\r\n {column: 'crash_severity', value: 0.0},\r\n {column: 'weather', value: 0.0},\r\n {column: 'event', value: 0.0}\r\n ]\r\n }\r\n ] as Array<TipPresetConfig>\r\n\r\n} as ITipConfig;\r\n\r\ntipConfig.$presetSelector.append('<option value=\"0\" disabled=>Custom</option>');\r\n\r\nlet sliders = new TipSliders(tipConfig.slidersConfig, tipConfig.presetConfig, 'slider-container',\r\n tipConfig.$presetSelector, tipConfig.$regionSelector, tipConfig.$regionSelector, (chg) => {console.log(chg)});\r\n\r\n// sliders.changedCallback = (chg) => {console.log(chg)};\r\n\r\nwindow['glob'] = sliders;\r\nwindow['hat'] = sliders;\r\nwindow['bird'] = sliders;\r\n\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/_test/slider-test.ts\n **/","/*!\n * jQuery JavaScript Library v2.2.3\n * http://jquery.com/\n *\n * Includes Sizzle.js\n * http://sizzlejs.com/\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2016-04-05T19:26Z\n */\n\n(function( global, factory ) {\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket #14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n}(typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Support: Firefox 18+\n// Can't be in strict mode, several libs including ASP.NET trace\n// the stack via arguments.caller.callee and Firefox dies if\n// you try to trace through \"use strict\" call chains. (#13335)\n//\"use strict\";\nvar arr = [];\n\nvar document = window.document;\n\nvar slice = arr.slice;\n\nvar concat = arr.concat;\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar support = {};\n\n\n\nvar\n\tversion = \"2.2.3\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t},\n\n\t// Support: Android<4.1\n\t// Make sure we trim BOM and NBSP\n\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,\n\n\t// Matches dashed string for camelizing\n\trmsPrefix = /^-ms-/,\n\trdashAlpha = /-([\\da-z])/gi,\n\n\t// Used by jQuery.camelCase as callback to replace()\n\tfcamelCase = function( all, letter ) {\n\t\treturn letter.toUpperCase();\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// Start with an empty selector\n\tselector: \"\",\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\t\treturn num != null ?\n\n\t\t\t// Return just the one element from the set\n\t\t\t( num < 0 ? this[ num + this.length ] : this[ num ] ) :\n\n\t\t\t// Return all the elements in a clean array\n\t\t\tslice.call( this );\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\t\tret.context = this.context;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !jQuery.isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tsrc = target[ name ];\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = jQuery.isArray( copy ) ) ) ) {\n\n\t\t\t\t\tif ( copyIsArray ) {\n\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\tclone = src && jQuery.isArray( src ) ? src : [];\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src && jQuery.isPlainObject( src ) ? src : {};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisFunction: function( obj ) {\n\t\treturn jQuery.type( obj ) === \"function\";\n\t},\n\n\tisArray: Array.isArray,\n\n\tisWindow: function( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t},\n\n\tisNumeric: function( obj ) {\n\n\t\t// parseFloat NaNs numeric-cast false positives (null|true|false|\"\")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t// subtraction forces infinities to NaN\n\t\t// adding 1 corrects loss of precision from parseFloat (#15100)\n\t\tvar realStringObj = obj && obj.toString();\n\t\treturn !jQuery.isArray( obj ) && ( realStringObj - parseFloat( realStringObj ) + 1 ) >= 0;\n\t},\n\n\tisPlainObject: function( obj ) {\n\t\tvar key;\n\n\t\t// Not plain objects:\n\t\t// - Any object or value whose internal [[Class]] property is not \"[object Object]\"\n\t\t// - DOM nodes\n\t\t// - window\n\t\tif ( jQuery.type( obj ) !== \"object\" || obj.nodeType || jQuery.isWindow( obj ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Not own constructor property must be Object\n\t\tif ( obj.constructor &&\n\t\t\t\t!hasOwn.call( obj, \"constructor\" ) &&\n\t\t\t\t!hasOwn.call( obj.constructor.prototype || {}, \"isPrototypeOf\" ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Own properties are enumerated firstly, so to speed up,\n\t\t// if last one is own, then all properties are own\n\t\tfor ( key in obj ) {}\n\n\t\treturn key === undefined || hasOwn.call( obj, key );\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\ttype: function( obj ) {\n\t\tif ( obj == null ) {\n\t\t\treturn obj + \"\";\n\t\t}\n\n\t\t// Support: Android<4.0, iOS<6 (functionish RegExp)\n\t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\t\ttypeof obj;\n\t},\n\n\t// Evaluates a script in a global context\n\tglobalEval: function( code ) {\n\t\tvar script,\n\t\t\tindirect = eval;\n\n\t\tcode = jQuery.trim( code );\n\n\t\tif ( code ) {\n\n\t\t\t// If the code includes a valid, prologue position\n\t\t\t// strict mode pragma, execute code by injecting a\n\t\t\t// script tag into the document.\n\t\t\tif ( code.indexOf( \"use strict\" ) === 1 ) {\n\t\t\t\tscript = document.createElement( \"script\" );\n\t\t\t\tscript.text = code;\n\t\t\t\tdocument.head.appendChild( script ).parentNode.removeChild( script );\n\t\t\t} else {\n\n\t\t\t\t// Otherwise, avoid the DOM node creation, insertion\n\t\t\t\t// and removal by using an indirect global eval\n\n\t\t\t\tindirect( code );\n\t\t\t}\n\t\t}\n\t},\n\n\t// Convert dashed to camelCase; used by the css and data modules\n\t// Support: IE9-11+\n\t// Microsoft forgot to hump their vendor prefix (#9572)\n\tcamelCase: function( string ) {\n\t\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n\t},\n\n\tnodeName: function( elem, name ) {\n\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// Support: Android<4.1\n\ttrim: function( text ) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t( text + \"\" ).replace( rtrim, \"\" );\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn concat.apply( [], ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// Bind a function to a context, optionally partially applying any\n\t// arguments.\n\tproxy: function( fn, context ) {\n\t\tvar tmp, args, proxy;\n\n\t\tif ( typeof context === \"string\" ) {\n\t\t\ttmp = fn[ context ];\n\t\t\tcontext = fn;\n\t\t\tfn = tmp;\n\t\t}\n\n\t\t// Quick check to determine if target is callable, in the spec\n\t\t// this throws a TypeError, but we will just return undefined.\n\t\tif ( !jQuery.isFunction( fn ) ) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Simulated bind\n\t\targs = slice.call( arguments, 2 );\n\t\tproxy = function() {\n\t\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t\t};\n\n\t\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\t\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\t\treturn proxy;\n\t},\n\n\tnow: Date.now,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\n// JSHint would error on this code due to the Symbol not being defined in ES5.\n// Defining this global in .jshintrc would create a danger of using the global\n// unguarded in another place, it seems safer to just disable JSHint for these\n// three lines.\n/* jshint ignore: start */\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n/* jshint ignore: end */\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\nfunction( i, name ) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: iOS 8.2 (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = jQuery.type( obj );\n\n\tif ( type === \"function\" || jQuery.isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v2.2.1\n * http://sizzlejs.com/\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2015-10-17\n */\n(function( window ) {\n\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// General-purpose constants\n\tMAX_NEGATIVE = 1 << 31,\n\n\t// Instance methods\n\thasOwn = ({}).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpush_native = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\t// Use a stripped-down indexOf as it's faster than native\n\t// http://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[i] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\n\t// http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n\tidentifier = \"(?:\\\\\\\\.|[\\\\w-]|[^\\\\x00-\\\\xa0])+\",\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace +\n\t\t\"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\" ),\n\n\trattributeQuotes = new RegExp( \"=\" + whitespace + \"*([^\\\\]'\\\"]*?)\" + whitespace + \"*\\\\]\", \"g\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace +\n\t\t\t\"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace +\n\t\t\t\"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" +\n\t\t\twhitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\trescape = /'|\\\\/g,\n\n\t// CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\([\\\\da-f]{1,6}\" + whitespace + \"?|(\" + whitespace + \")|.)\", \"ig\" ),\n\tfunescape = function( _, escaped, escapedWhitespace ) {\n\t\tvar high = \"0x\" + escaped - 0x10000;\n\t\t// NaN means non-codepoint\n\t\t// Support: Firefox<24\n\t\t// Workaround erroneous numeric interpretation of +\"0x\"\n\t\treturn high !== high || escapedWhitespace ?\n\t\t\tescaped :\n\t\t\thigh < 0 ?\n\t\t\t\t// BMP codepoint\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\t// Supplemental Plane codepoint (surrogate pair)\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t};\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t(arr = slice.call( preferredDoc.childNodes )),\n\t\tpreferredDoc.childNodes\n\t);\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpush_native.apply( target, slice.call(els) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( (target[j++] = els[i++]) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar m, i, elem, nid, nidselect, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\n\t\tif ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {\n\t\t\tsetDocument( context );\n\t\t}\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( (m = match[1]) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( (elem = context.getElementById( m )) ) {\n\n\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && (elem = newContext.getElementById( m )) &&\n\t\t\t\t\t\t\tcontains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[2] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( (m = match[3]) && support.getElementsByClassName &&\n\t\t\t\t\tcontext.getElementsByClassName ) {\n\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( support.qsa &&\n\t\t\t\t!compilerCache[ selector + \" \" ] &&\n\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test( selector )) ) {\n\n\t\t\t\tif ( nodeType !== 1 ) {\n\t\t\t\t\tnewContext = context;\n\t\t\t\t\tnewSelector = selector;\n\n\t\t\t\t// qSA looks outside Element context, which is not what we want\n\t\t\t\t// Thanks to Andrew Dupont for this workaround technique\n\t\t\t\t// Support: IE <=8\n\t\t\t\t// Exclude object elements\n\t\t\t\t} else if ( context.nodeName.toLowerCase() !== \"object\" ) {\n\n\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\tif ( (nid = context.getAttribute( \"id\" )) ) {\n\t\t\t\t\t\tnid = nid.replace( rescape, \"\\\\$&\" );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontext.setAttribute( \"id\", (nid = expando) );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\tnidselect = ridentifier.test( nid ) ? \"#\" + nid : \"[id='\" + nid + \"']\";\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[i] = nidselect + \" \" + toSelector( groups[i] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\t\t\t\t}\n\n\t\t\t\tif ( newSelector ) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn (cache[ key + \" \" ] = value);\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created div and expects a boolean result\n */\nfunction assert( fn ) {\n\tvar div = document.createElement(\"div\");\n\n\ttry {\n\t\treturn !!fn( div );\n\t} catch (e) {\n\t\treturn false;\n\t} finally {\n\t\t// Remove from its parent by default\n\t\tif ( div.parentNode ) {\n\t\t\tdiv.parentNode.removeChild( div );\n\t\t}\n\t\t// release memory in IE\n\t\tdiv = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split(\"|\"),\n\t\ti = arr.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[i] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\t( ~b.sourceIndex || MAX_NEGATIVE ) -\n\t\t\t( ~a.sourceIndex || MAX_NEGATIVE );\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( (cur = cur.nextSibling) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn (name === \"input\" || name === \"button\") && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction(function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction(function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ (j = matchIndexes[i]) ] ) {\n\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\t// documentElement is verified for cases where it doesn't yet exist\n\t// (such as loading iframes in IE - #4833)\n\tvar documentElement = elem && (elem.ownerDocument || elem).documentElement;\n\treturn documentElement ? documentElement.nodeName !== \"HTML\" : false;\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, parent,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\tif ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocElem = document.documentElement;\n\tdocumentIsHTML = !isXML( document );\n\n\t// Support: IE 9-11, Edge\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\tif ( (parent = document.defaultView) && parent.top !== parent ) {\n\t\t// Support: IE 11\n\t\tif ( parent.addEventListener ) {\n\t\t\tparent.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( parent.attachEvent ) {\n\t\t\tparent.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert(function( div ) {\n\t\tdiv.className = \"i\";\n\t\treturn !div.getAttribute(\"className\");\n\t});\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert(function( div ) {\n\t\tdiv.appendChild( document.createComment(\"\") );\n\t\treturn !div.getElementsByTagName(\"*\").length;\n\t});\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert(function( div ) {\n\t\tdocElem.appendChild( div ).id = expando;\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\n\t});\n\n\t// ID find and filter\n\tif ( support.getById ) {\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar m = context.getElementById( id );\n\t\t\t\treturn m ? [ m ] : [];\n\t\t\t}\n\t\t};\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t};\n\t\t};\n\t} else {\n\t\t// Support: IE6/7\n\t\t// getElementById is not reliable as a find shortcut\n\t\tdelete Expr.find[\"ID\"];\n\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode(\"id\");\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[\"TAG\"] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( (elem = results[i++]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[\"CLASS\"] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See http://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( (support.qsa = rnative.test( document.querySelectorAll )) ) {\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert(function( div ) {\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// http://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( div ).innerHTML = \"<a id='\" + expando + \"'></a>\" +\n\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' msallowcapture=''>\" +\n\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( div.querySelectorAll(\"[msallowcapture^='']\").length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !div.querySelectorAll(\"[selected]\").length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\t\t\tif ( !div.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push(\"~=\");\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !div.querySelectorAll(\":checked\").length ) {\n\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibing-combinator selector` fails\n\t\t\tif ( !div.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\n\t\t\t}\n\t\t});\n\n\t\tassert(function( div ) {\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = document.createElement(\"input\");\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tdiv.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( div.querySelectorAll(\"[name=d]\").length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !div.querySelectorAll(\":enabled\").length ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tdiv.querySelectorAll(\"*,:x\");\n\t\t\trbuggyQSA.push(\",.*:\");\n\t\t});\n\t}\n\n\tif ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector) )) ) {\n\n\t\tassert(function( div ) {\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( div, \"div\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( div, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t});\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join(\"|\") );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join(\"|\") );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully self-exclusive\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t));\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( (b = b.parentNode) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\tcompare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\tif ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\n\t\t\treturn a === document ? -1 :\n\t\t\t\tb === document ? 1 :\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[i] === bp[i] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[i], bp[i] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\tap[i] === preferredDoc ? -1 :\n\t\t\tbp[i] === preferredDoc ? 1 :\n\t\t\t0;\n\t};\n\n\treturn document;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\t// Make sure that attribute selectors are quoted\n\texpr = expr.replace( rattributeQuotes, \"='$1']\" );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!compilerCache[ expr + \" \" ] &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch (e) {}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\t// Set document vars if needed\n\tif ( ( context.ownerDocument || context ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t(val = elem.getAttributeNode(name)) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( (elem = results[i++]) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( (node = elem[i++]) ) {\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[1] = match[1].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[3] = ( match[3] || match[4] || match[5] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[2] === \"~=\" ) {\n\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\tif ( match[1].slice( 0, 3 ) === \"nth\" ) {\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[3] ) {\n\t\t\t\t\tSizzle.error( match[0] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === \"even\" || match[3] === \"odd\" ) );\n\t\t\t\tmatch[5] = +( ( match[7] + match[8] ) || match[3] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[3] ) {\n\t\t\t\tSizzle.error( match[0] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\tif ( matchExpr[\"CHILD\"].test( match[0] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[3] ) {\n\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t(excess = tokenize( unquoted, true )) &&\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t(excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[0] = match[0].slice( 0, excess );\n\t\t\t\tmatch[2] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() { return true; } :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t(pattern = new RegExp( \"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\" )) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test( typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== \"undefined\" && elem.getAttribute(\"class\") || \"\" );\n\t\t\t\t});\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tvar cache, uniqueCache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( (node = node[ dir ]) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction(function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf( seed, matched[i] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[i] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction(function( selector ) {\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction(function( seed, matches, context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = unmatched[i]) ) {\n\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}) :\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\t\t\t\t\t// Don't keep the element (issue #299)\n\t\t\t\t\tinput[0] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t}),\n\n\t\t\"has\": markFunction(function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t}),\n\n\t\t\"contains\": markFunction(function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t}),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test(lang || \"\") ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( (elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( (elem = elem.parentNode) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": function( elem ) {\n\t\t\treturn elem.disabled === false;\n\t\t},\n\n\t\t\"disabled\": function( elem ) {\n\t\t\treturn elem.disabled === true;\n\t\t},\n\n\t\t\"checked\": function( elem ) {\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn (nodeName === \"input\" && !!elem.checked) || (nodeName === \"option\" && !!elem.selected);\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t// but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[\"empty\"]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo(function() {\n\t\t\treturn [ 0 ];\n\t\t}),\n\n\t\t\"last\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t}),\n\n\t\t\"eq\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t}),\n\n\t\t\"even\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"odd\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"lt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"gt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t})\n\t}\n};\n\nExpr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || (match = rcomma.exec( soFar )) ) {\n\t\t\tif ( match ) {\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[0].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( (tokens = []) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( (match = rcombinators.exec( soFar )) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push({\n\t\t\t\tvalue: matched,\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[0].replace( rtrim, \" \" )\n\t\t\t});\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\n\t\t\t\t(match = preFilters[ type ]( match ))) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push({\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t});\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[i].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tcheckNonElements = base && dir === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, uniqueCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || (elem[ expando ] = {});\n\n\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});\n\n\t\t\t\t\t\tif ( (oldCache = uniqueCache[ dir ]) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn (newCache[ 2 ] = oldCache[ 2 ]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\tuniqueCache[ dir ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[i]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[0];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[i], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (elem = unmatched[i]) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction(function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts( selector || \"*\", context.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( (elem = temp[i]) ) {\n\t\t\t\t\tmatcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = matcherOut[i]) ) {\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( (matcherIn[i] = elem) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, (matcherOut = []), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( (elem = matcherOut[i]) &&\n\t\t\t\t\t\t(temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {\n\n\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[0].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\t\t\t// Avoid hanging onto element (issue #299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (matcher = Expr.relative[ tokens[i].type ]) ) {\n\t\t\tmatchers = [ addCombinator(elementMatcher( matchers ), matcher) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[j].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( (tokens = tokens.slice( j )) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[\"TAG\"]( \"*\", outermost ),\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\t\t\t\toutermostContext = context === document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching elements by id\n\t\t\tfor ( ; i !== len && (elem = elems[i]) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\tif ( !context && elem.ownerDocument !== document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( (matcher = elementMatchers[j++]) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( (elem = !matcher && elem) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (matcher = setMatchers[j++]) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !(unmatched[i] || setMatched[i]) ) {\n\t\t\t\t\t\t\t\tsetMatched[i] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[i] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\n\n/**\n * A low-level selection function that works with Sizzle's compiled\n * selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n * selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( (selector = compiled.selector || selector) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[0] = match[0].slice( 0 );\n\t\tif ( tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\tsupport.getById && context.nodeType === 9 && documentIsHTML &&\n\t\t\t\tExpr.relative[ tokens[1].type ] ) {\n\n\t\t\tcontext = ( Expr.find[\"ID\"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[\"needsContext\"].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[i];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ (type = token.type) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( (find = Expr.find[ type ]) ) {\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( (seed = find(\n\t\t\t\t\ttoken.matches[0].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context\n\t\t\t\t)) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n};\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split(\"\").sort( sortOrder ).join(\"\") === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert(function( div1 ) {\n\t// Should return 1, but returns 4 (following)\n\treturn div1.compareDocumentPosition( document.createElement(\"div\") ) & 1;\n});\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert(function( div ) {\n\tdiv.innerHTML = \"<a href='#'></a>\";\n\treturn div.firstChild.getAttribute(\"href\") === \"#\" ;\n}) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert(function( div ) {\n\tdiv.innerHTML = \"<input/>\";\n\tdiv.firstChild.setAttribute( \"value\", \"\" );\n\treturn div.firstChild.getAttribute( \"value\" ) === \"\";\n}) ) {\n\taddHandle( \"value\", function( elem, name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert(function( div ) {\n\treturn div.getAttribute(\"disabled\") == null;\n}) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t\t(val = elem.getAttributeNode( name )) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\tnull;\n\t\t}\n\t});\n}\n\nreturn Sizzle;\n\n})( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\n\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\nvar rsingleTag = ( /^<([\\w-]+)\\s*\\/?>(?:<\\/\\1>|)$/ );\n\n\n\nvar risSimple = /^.[^:#\\[\\.,]*$/;\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( jQuery.isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\t/* jshint -W018 */\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\n\t}\n\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\n\t}\n\n\tif ( typeof qualifier === \"string\" ) {\n\t\tif ( risSimple.test( qualifier ) ) {\n\t\t\treturn jQuery.filter( qualifier, elements, not );\n\t\t}\n\n\t\tqualifier = jQuery.filter( qualifier, elements );\n\t}\n\n\treturn jQuery.grep( elements, function( elem ) {\n\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t} );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\treturn elems.length === 1 && elem.nodeType === 1 ?\n\t\tjQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :\n\t\tjQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\t\treturn elem.nodeType === 1;\n\t\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i,\n\t\t\tlen = this.length,\n\t\t\tret = [],\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\t// Needed because $( selector, context ) becomes $( context ).find( selector )\n\t\tret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );\n\t\tret.selector = this.selector ? this.selector + \" \" + selector : selector;\n\t\treturn ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]*))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( jQuery.isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\t// Support: Blackberry 4.6\n\t\t\t\t\t// gEBID returns nodes no longer in the document (#6963)\n\t\t\t\t\tif ( elem && elem.parentNode ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.context = document;\n\t\t\t\t\tthis.selector = selector;\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis.context = this[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( jQuery.isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\tif ( selector.selector !== undefined ) {\n\t\t\tthis.selector = selector.selector;\n\t\t\tthis.context = selector.context;\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\tpos = rneedsContext.test( selectors ) || typeof selectors !== \"string\" ?\n\t\t\t\tjQuery( selectors, context || this.context ) :\n\t\t\t\t0;\n\n\t\tfor ( ; i < l; i++ ) {\n\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t// Always skip document fragments\n\t\t\t\tif ( cur.nodeType < 11 && ( pos ?\n\t\t\t\t\tpos.index( cur ) > -1 :\n\n\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\treturn elem.contentDocument || jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnotwhite = ( /\\S+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnotwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( jQuery.isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && jQuery.type( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, listener list, final state\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ), \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ), \"rejected\" ],\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ) ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tthen: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\t\t\t\t\tvar fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];\n\n\t\t\t\t\t\t\t// deferred[ done | fail | progress ] for forwarding actions to newDefer\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && jQuery.isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis === promise ? newDefer.promise() : this,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Keep pipe for back-compat\n\t\tpromise.pipe = promise.then;\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 3 ];\n\n\t\t\t// promise[ done | fail | progress ] = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add( function() {\n\n\t\t\t\t\t// state = [ resolved | rejected ]\n\t\t\t\t\tstate = stateString;\n\n\t\t\t\t// [ reject_list | resolve_list ].disable; progress_list.lock\n\t\t\t\t}, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );\n\t\t\t}\n\n\t\t\t// deferred[ resolve | reject | notify ]\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? promise : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( subordinate /* , ..., subordinateN */ ) {\n\t\tvar i = 0,\n\t\t\tresolveValues = slice.call( arguments ),\n\t\t\tlength = resolveValues.length,\n\n\t\t\t// the count of uncompleted subordinates\n\t\t\tremaining = length !== 1 ||\n\t\t\t\t( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,\n\n\t\t\t// the master Deferred.\n\t\t\t// If resolveValues consist of only a single Deferred, just use that.\n\t\t\tdeferred = remaining === 1 ? subordinate : jQuery.Deferred(),\n\n\t\t\t// Update function for both resolve and progress values\n\t\t\tupdateFunc = function( i, contexts, values ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tcontexts[ i ] = this;\n\t\t\t\t\tvalues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( values === progressValues ) {\n\t\t\t\t\t\tdeferred.notifyWith( contexts, values );\n\t\t\t\t\t} else if ( !( --remaining ) ) {\n\t\t\t\t\t\tdeferred.resolveWith( contexts, values );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t},\n\n\t\t\tprogressValues, progressContexts, resolveContexts;\n\n\t\t// Add listeners to Deferred subordinates; treat others as resolved\n\t\tif ( length > 1 ) {\n\t\t\tprogressValues = new Array( length );\n\t\t\tprogressContexts = new Array( length );\n\t\t\tresolveContexts = new Array( length );\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {\n\t\t\t\t\tresolveValues[ i ].promise()\n\t\t\t\t\t\t.progress( updateFunc( i, progressContexts, progressValues ) )\n\t\t\t\t\t\t.done( updateFunc( i, resolveContexts, resolveValues ) )\n\t\t\t\t\t\t.fail( deferred.reject );\n\t\t\t\t} else {\n\t\t\t\t\t--remaining;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// If we're not waiting on anything, resolve the master\n\t\tif ( !remaining ) {\n\t\t\tdeferred.resolveWith( resolveContexts, resolveValues );\n\t\t}\n\n\t\treturn deferred.promise();\n\t}\n} );\n\n\n// The deferred used on DOM ready\nvar readyList;\n\njQuery.fn.ready = function( fn ) {\n\n\t// Add the callback\n\tjQuery.ready.promise().done( fn );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Hold (or release) the ready event\n\tholdReady: function( hold ) {\n\t\tif ( hold ) {\n\t\t\tjQuery.readyWait++;\n\t\t} else {\n\t\t\tjQuery.ready( true );\n\t\t}\n\t},\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\n\t\t// Trigger any bound ready events\n\t\tif ( jQuery.fn.triggerHandler ) {\n\t\t\tjQuery( document ).triggerHandler( \"ready\" );\n\t\t\tjQuery( document ).off( \"ready\" );\n\t\t}\n\t}\n} );\n\n/**\n * The ready event handler and self cleanup method\n */\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\njQuery.ready.promise = function( obj ) {\n\tif ( !readyList ) {\n\n\t\treadyList = jQuery.Deferred();\n\n\t\t// Catch cases where $(document).ready() is called\n\t\t// after the browser event has already occurred.\n\t\t// Support: IE9-10 only\n\t\t// Older IE sometimes signals \"interactive\" too soon\n\t\tif ( document.readyState === \"complete\" ||\n\t\t\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t\t\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\t\t\twindow.setTimeout( jQuery.ready );\n\n\t\t} else {\n\n\t\t\t// Use the handy event callback\n\t\t\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t\t\t// A fallback to window.onload, that will always work\n\t\t\twindow.addEventListener( \"load\", completed );\n\t\t}\n\t}\n\treturn readyList.promise( obj );\n};\n\n// Kick off the DOM ready check even if the user does not\njQuery.ready.promise();\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( jQuery.type( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !jQuery.isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\tvalue :\n\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn chainable ?\n\t\telems :\n\n\t\t// Gets\n\t\tbulk ?\n\t\t\tfn.call( elems ) :\n\t\t\tlen ? fn( elems[ 0 ], key ) : emptyGet;\n};\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t// - Node\n\t// - Node.ELEMENT_NODE\n\t// - Node.DOCUMENT_NODE\n\t// - Object\n\t// - Any\n\t/* jshint -W018 */\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tregister: function( owner, initial ) {\n\t\tvar value = initial || {};\n\n\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t// use plain assignment\n\t\tif ( owner.nodeType ) {\n\t\t\towner[ this.expando ] = value;\n\n\t\t// Otherwise secure it in a non-enumerable, non-writable property\n\t\t// configurability must be true to allow the property to be\n\t\t// deleted with the delete operator\n\t\t} else {\n\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\tvalue: value,\n\t\t\t\twritable: true,\n\t\t\t\tconfigurable: true\n\t\t\t} );\n\t\t}\n\t\treturn owner[ this.expando ];\n\t},\n\tcache: function( owner ) {\n\n\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t// but we should not, see #8335.\n\t\t// Always return an empty object.\n\t\tif ( !acceptData( owner ) ) {\n\t\t\treturn {};\n\t\t}\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see #8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ data ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ prop ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\t\t\towner[ this.expando ] && owner[ this.expando ][ key ];\n\t},\n\taccess: function( owner, key, value ) {\n\t\tvar stored;\n\n\t\t// In cases where either:\n\t\t//\n\t\t// 1. No key was specified\n\t\t// 2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t// 1. The entire cache object\n\t\t// 2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\tstored = this.get( owner, key );\n\n\t\t\treturn stored !== undefined ?\n\t\t\t\tstored : this.get( owner, jQuery.camelCase( key ) );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t// 1. An object of properties\n\t\t// 2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i, name, camel,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key === undefined ) {\n\t\t\tthis.register( owner );\n\n\t\t} else {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( jQuery.isArray( key ) ) {\n\n\t\t\t\t// If \"name\" is an array of keys...\n\t\t\t\t// When data is initially created, via (\"key\", \"val\") signature,\n\t\t\t\t// keys will be converted to camelCase.\n\t\t\t\t// Since there is no way to tell _how_ a key was added, remove\n\t\t\t\t// both plain key and camelCase key. #12786\n\t\t\t\t// This will only penalize the array argument path.\n\t\t\t\tname = key.concat( key.map( jQuery.camelCase ) );\n\t\t\t} else {\n\t\t\t\tcamel = jQuery.camelCase( key );\n\n\t\t\t\t// Try the string as a key before any manipulation\n\t\t\t\tif ( key in cache ) {\n\t\t\t\t\tname = [ key, camel ];\n\t\t\t\t} else {\n\n\t\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\t\tname = camel;\n\t\t\t\t\tname = name in cache ?\n\t\t\t\t\t\t[ name ] : ( name.match( rnotwhite ) || [] );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\ti = name.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ name[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <= 35-45+\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://code.google.com/p/chromium/issues/detail?id=378607\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = data === \"true\" ? true :\n\t\t\t\t\tdata === \"false\" ? false :\n\t\t\t\t\tdata === \"null\" ? null :\n\n\t\t\t\t\t// Only convert to a number if it doesn't change the string\n\t\t\t\t\t+data + \"\" === data ? +data :\n\t\t\t\t\trbrace.test( data ) ? jQuery.parseJSON( data ) :\n\t\t\t\t\tdata;\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE11+\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = jQuery.camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data, camelKey;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// with the key as-is\n\t\t\t\tdata = dataUser.get( elem, key ) ||\n\n\t\t\t\t\t// Try to find dashed key if it exists (gh-2779)\n\t\t\t\t\t// This is for 2.2.x only\n\t\t\t\t\tdataUser.get( elem, key.replace( rmultiDash, \"-$&\" ).toLowerCase() );\n\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\tcamelKey = jQuery.camelCase( key );\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// with the key camelized\n\t\t\t\tdata = dataUser.get( elem, camelKey );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, camelKey, undefined );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tcamelKey = jQuery.camelCase( key );\n\t\t\tthis.each( function() {\n\n\t\t\t\t// First, attempt to store a copy or reference of any\n\t\t\t\t// data that might've been store with a camelCased key.\n\t\t\t\tvar data = dataUser.get( this, camelKey );\n\n\t\t\t\t// For HTML5 data-* attribute interop, we have to\n\t\t\t\t// store property names with dashes in a camelCase form.\n\t\t\t\t// This might not apply to all properties...*\n\t\t\t\tdataUser.set( this, camelKey, value );\n\n\t\t\t\t// *... In the case of properties that might _actually_\n\t\t\t\t// have dashes, we need to also store a copy of that\n\t\t\t\t// unchanged property.\n\t\t\t\tif ( key.indexOf( \"-\" ) > -1 && data !== undefined ) {\n\t\t\t\t\tdataUser.set( this, key, value );\n\t\t\t\t}\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || jQuery.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar isHidden = function( elem, el ) {\n\n\t\t// isHidden might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\t\treturn jQuery.css( elem, \"display\" ) === \"none\" ||\n\t\t\t!jQuery.contains( elem.ownerDocument, elem );\n\t};\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted,\n\t\tscale = 1,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() { return tween.cur(); } :\n\t\t\tfunction() { return jQuery.css( elem, prop, \"\" ); },\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = ( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\tdo {\n\n\t\t\t// If previous iteration zeroed out, double until we get *something*.\n\t\t\t// Use string for doubling so we don't accidentally see scale as unchanged below\n\t\t\tscale = scale || \".5\";\n\n\t\t\t// Adjust and apply\n\t\t\tinitialInUnit = initialInUnit / scale;\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Update scale, tolerating zero or NaN from tween.cur()\n\t\t// Break the loop if scale is unchanged or perfect, or if we've just had enough.\n\t\t} while (\n\t\t\tscale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations\n\t\t);\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([\\w:-]+)/ );\n\nvar rscriptType = ( /^$|\\/(?:java|ecma)script/i );\n\n\n\n// We have to close these tags to support XHTML (#13200)\nvar wrapMap = {\n\n\t// Support: IE9\n\toption: [ 1, \"<select multiple='multiple'>\", \"</select>\" ],\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting <tbody> or other required elements.\n\tthead: [ 1, \"<table>\", \"</table>\" ],\n\tcol: [ 2, \"<table><colgroup>\", \"</colgroup></table>\" ],\n\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\n// Support: IE9\nwrapMap.optgroup = wrapMap.option;\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE9-11+\n\t// Use typeof to avoid zero-argument method invocation on host objects (#15151)\n\tvar ret = typeof context.getElementsByTagName !== \"undefined\" ?\n\t\t\tcontext.getElementsByTagName( tag || \"*\" ) :\n\t\t\ttypeof context.querySelectorAll !== \"undefined\" ?\n\t\t\t\tcontext.querySelectorAll( tag || \"*\" ) :\n\t\t\t[];\n\n\treturn tag === undefined || tag && jQuery.nodeName( context, tag ) ?\n\t\tjQuery.merge( [ context ], ret ) :\n\t\tret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, contains, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( jQuery.type( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android<4.1, PhantomJS<2\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android<4.1, PhantomJS<2\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (#12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tcontains = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( contains ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0-4.3, Safari<=5.1\n\t// Check state lost if the name is set (#11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (#14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Safari<=5.1, Android<4.2\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE<=11+\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n} )();\n\n\nvar\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\n// Support: IE9\n// See #13393 for more info\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Don't attach events to noData or text/comment nodes (but allow plain objects)\n\t\tif ( !elemData ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = {};\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnotwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnotwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( event ) {\n\n\t\t// Make a writable jQuery.Event from the native event object\n\t\tevent = jQuery.event.fix( event );\n\n\t\tvar i, j, ret, matched, handleObj,\n\t\t\thandlerQueue = [],\n\t\t\targs = slice.call( arguments ),\n\t\t\thandlers = ( dataPriv.get( this, \"events\" ) || {} )[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// Triggered event must either 1) have no namespace, or 2) have namespace(s)\n\t\t\t\t// a subset or equal to those in the bound event (both can have no namespace).\n\t\t\t\tif ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, matches, sel, handleObj,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Support (at least): Chrome, IE9\n\t\t// Find delegate handlers\n\t\t// Black-hole SVG <use> instance trees (#13180)\n\t\t//\n\t\t// Support: Firefox<=42+\n\t\t// Avoid non-left-click in FF but don't block IE radio events (#3861, gh-2343)\n\t\tif ( delegateCount && cur.nodeType &&\n\t\t\t( event.type !== \"click\" || isNaN( event.button ) || event.button < 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && ( cur.disabled !== true || event.type !== \"click\" ) ) {\n\t\t\t\t\tmatches = [];\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matches[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatches[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matches[ sel ] ) {\n\t\t\t\t\t\t\tmatches.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matches.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matches } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: this, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\t// Includes some event props shared by KeyEvent and MouseEvent\n\tprops: ( \"altKey bubbles cancelable ctrlKey currentTarget detail eventPhase \" +\n\t\t\"metaKey relatedTarget shiftKey target timeStamp view which\" ).split( \" \" ),\n\n\tfixHooks: {},\n\n\tkeyHooks: {\n\t\tprops: \"char charCode key keyCode\".split( \" \" ),\n\t\tfilter: function( event, original ) {\n\n\t\t\t// Add which for key events\n\t\t\tif ( event.which == null ) {\n\t\t\t\tevent.which = original.charCode != null ? original.charCode : original.keyCode;\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tmouseHooks: {\n\t\tprops: ( \"button buttons clientX clientY offsetX offsetY pageX pageY \" +\n\t\t\t\"screenX screenY toElement\" ).split( \" \" ),\n\t\tfilter: function( event, original ) {\n\t\t\tvar eventDoc, doc, body,\n\t\t\t\tbutton = original.button;\n\n\t\t\t// Calculate pageX/Y if missing and clientX/Y available\n\t\t\tif ( event.pageX == null && original.clientX != null ) {\n\t\t\t\teventDoc = event.target.ownerDocument || document;\n\t\t\t\tdoc = eventDoc.documentElement;\n\t\t\t\tbody = eventDoc.body;\n\n\t\t\t\tevent.pageX = original.clientX +\n\t\t\t\t\t( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) -\n\t\t\t\t\t( doc && doc.clientLeft || body && body.clientLeft || 0 );\n\t\t\t\tevent.pageY = original.clientY +\n\t\t\t\t\t( doc && doc.scrollTop || body && body.scrollTop || 0 ) -\n\t\t\t\t\t( doc && doc.clientTop || body && body.clientTop || 0 );\n\t\t\t}\n\n\t\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\t\t// Note: button is not normalized, so don't use it\n\t\t\tif ( !event.which && button !== undefined ) {\n\t\t\t\tevent.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tfix: function( event ) {\n\t\tif ( event[ jQuery.expando ] ) {\n\t\t\treturn event;\n\t\t}\n\n\t\t// Create a writable copy of the event object and normalize some properties\n\t\tvar i, prop, copy,\n\t\t\ttype = event.type,\n\t\t\toriginalEvent = event,\n\t\t\tfixHook = this.fixHooks[ type ];\n\n\t\tif ( !fixHook ) {\n\t\t\tthis.fixHooks[ type ] = fixHook =\n\t\t\t\trmouseEvent.test( type ) ? this.mouseHooks :\n\t\t\t\trkeyEvent.test( type ) ? this.keyHooks :\n\t\t\t\t{};\n\t\t}\n\t\tcopy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;\n\n\t\tevent = new jQuery.Event( originalEvent );\n\n\t\ti = copy.length;\n\t\twhile ( i-- ) {\n\t\t\tprop = copy[ i ];\n\t\t\tevent[ prop ] = originalEvent[ prop ];\n\t\t}\n\n\t\t// Support: Cordova 2.5 (WebKit) (#13255)\n\t\t// All events should have a target; Cordova deviceready doesn't\n\t\tif ( !event.target ) {\n\t\t\tevent.target = document;\n\t\t}\n\n\t\t// Support: Safari 6.0+, Chrome<28\n\t\t// Target should not be a text node (#504, #13143)\n\t\tif ( event.target.nodeType === 3 ) {\n\t\t\tevent.target = event.target.parentNode;\n\t\t}\n\n\t\treturn fixHook.filter ? fixHook.filter( event, originalEvent ) : event;\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tfocus: {\n\n\t\t\t// Fire native event if possible so blur/focus sequence is correct\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this !== safeActiveElement() && this.focus ) {\n\t\t\t\t\tthis.focus();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusin\"\n\t\t},\n\t\tblur: {\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this === safeActiveElement() && this.blur ) {\n\t\t\t\t\tthis.blur();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusout\"\n\t\t},\n\t\tclick: {\n\n\t\t\t// For checkbox, fire native event so checked state will be right\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this.type === \"checkbox\" && this.click && jQuery.nodeName( this, \"input\" ) ) {\n\t\t\t\t\tthis.click();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, don't fire native .click() on links\n\t\t\t_default: function( event ) {\n\t\t\t\treturn jQuery.nodeName( event.target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android<4.0\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || jQuery.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://code.google.com/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event ) dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:-]+)[^>]*)\\/>/gi,\n\n\t// Support: IE 10-11, Edge 10240+\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /<script|<style|<link/i,\n\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\trscriptTypeMasked = /^true\\/(.*)/,\n\trcleanScript = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;\n\n// Manipulating tables requires a tbody\nfunction manipulationTarget( elem, content ) {\n\treturn jQuery.nodeName( elem, \"table\" ) &&\n\t\tjQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ?\n\n\t\telem.getElementsByTagName( \"tbody\" )[ 0 ] ||\n\t\t\telem.appendChild( elem.ownerDocument.createElement( \"tbody\" ) ) :\n\t\telem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tvar match = rscriptTypeMasked.exec( elem.type );\n\n\tif ( match ) {\n\t\telem.type = match[ 1 ];\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.access( src );\n\t\tpdataCur = dataPriv.set( dest, pdataOld );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdelete pdataCur.handle;\n\t\t\tpdataCur.events = {};\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = concat.apply( [], args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tisFunction = jQuery.isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( isFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( isFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android<4.1, PhantomJS<2\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Reenable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tjQuery.globalEval( node.textContent.replace( rcleanScript, \"\" ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && jQuery.contains( node.ownerDocument, node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html.replace( rxhtmlTag, \"<$1></$2>\" );\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <= 35-45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <= 35-45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\n\t// Keep domManip exposed until 3.0 (gh-2225)\n\tdomManip: domManip,\n\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: QtWebKit\n\t\t\t// .get() because push.apply(_, arraylike) throws\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\n\n\nvar iframe,\n\telemdisplay = {\n\n\t\t// Support: Firefox\n\t\t// We have to pre-define these values for FF (#10227)\n\t\tHTML: \"block\",\n\t\tBODY: \"block\"\n\t};\n\n/**\n * Retrieve the actual display of a element\n * @param {String} name nodeName of the element\n * @param {Object} doc Document object\n */\n\n// Called only from within defaultDisplay\nfunction actualDisplay( name, doc ) {\n\tvar elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),\n\n\t\tdisplay = jQuery.css( elem[ 0 ], \"display\" );\n\n\t// We don't have any data stored on the element,\n\t// so use \"detach\" method as fast way to get rid of the element\n\telem.detach();\n\n\treturn display;\n}\n\n/**\n * Try to determine the default display value of an element\n * @param {String} nodeName\n */\nfunction defaultDisplay( nodeName ) {\n\tvar doc = document,\n\t\tdisplay = elemdisplay[ nodeName ];\n\n\tif ( !display ) {\n\t\tdisplay = actualDisplay( nodeName, doc );\n\n\t\t// If the simple way fails, read from inside an iframe\n\t\tif ( display === \"none\" || !display ) {\n\n\t\t\t// Use the already-created iframe if possible\n\t\t\tiframe = ( iframe || jQuery( \"<iframe frameborder='0' width='0' height='0'/>\" ) )\n\t\t\t\t.appendTo( doc.documentElement );\n\n\t\t\t// Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse\n\t\t\tdoc = iframe[ 0 ].contentDocument;\n\n\t\t\t// Support: IE\n\t\t\tdoc.write();\n\t\t\tdoc.close();\n\n\t\t\tdisplay = actualDisplay( nodeName, doc );\n\t\t\tiframe.detach();\n\t\t}\n\n\t\t// Store the correct default display\n\t\telemdisplay[ nodeName ] = display;\n\t}\n\n\treturn display;\n}\nvar rmargin = ( /^margin/ );\n\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE<=11+, Firefox<=30+ (#15098, #14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\nvar swap = function( elem, options, callback, args ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.apply( elem, args || [] );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\nvar documentElement = document.documentElement;\n\n\n\n( function() {\n\tvar pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, reliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE9-11+\n\t// Style of cloned element affects source element cloned (#8908)\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tcontainer.style.cssText = \"border:0;width:8px;height:0;top:0;left:-9999px;\" +\n\t\t\"padding:0;margin-top:1px;position:absolute\";\n\tcontainer.appendChild( div );\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computeStyleTests() {\n\t\tdiv.style.cssText =\n\n\t\t\t// Support: Firefox<29, Android 2.3\n\t\t\t// Vendor-prefix box-sizing\n\t\t\t\"-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;\" +\n\t\t\t\"position:relative;display:block;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"top:1%;width:50%\";\n\t\tdiv.innerHTML = \"\";\n\t\tdocumentElement.appendChild( container );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\t\treliableMarginLeftVal = divStyle.marginLeft === \"2px\";\n\t\tboxSizingReliableVal = divStyle.width === \"4px\";\n\n\t\t// Support: Android 4.0 - 4.3 only\n\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\tdiv.style.marginRight = \"50%\";\n\t\tpixelMarginRightVal = divStyle.marginRight === \"4px\";\n\n\t\tdocumentElement.removeChild( container );\n\t}\n\n\tjQuery.extend( support, {\n\t\tpixelPosition: function() {\n\n\t\t\t// This test is executed only once but we still do memoizing\n\t\t\t// since we can use the boxSizingReliable pre-computing.\n\t\t\t// No need to check if the test was already performed, though.\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\tboxSizingReliable: function() {\n\t\t\tif ( boxSizingReliableVal == null ) {\n\t\t\t\tcomputeStyleTests();\n\t\t\t}\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelMarginRight: function() {\n\n\t\t\t// Support: Android 4.0-4.3\n\t\t\t// We're checking for boxSizingReliableVal here instead of pixelMarginRightVal\n\t\t\t// since that compresses better and they're computed together anyway.\n\t\t\tif ( boxSizingReliableVal == null ) {\n\t\t\t\tcomputeStyleTests();\n\t\t\t}\n\t\t\treturn pixelMarginRightVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\n\t\t\t// Support: IE <=8 only, Android 4.0 - 4.3 only, Firefox <=3 - 37\n\t\t\tif ( boxSizingReliableVal == null ) {\n\t\t\t\tcomputeStyleTests();\n\t\t\t}\n\t\t\treturn reliableMarginLeftVal;\n\t\t},\n\t\treliableMarginRight: function() {\n\n\t\t\t// Support: Android 2.3\n\t\t\t// Check if div with explicit width and no margin-right incorrectly\n\t\t\t// gets computed margin-right based on width of container. (#3333)\n\t\t\t// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right\n\t\t\t// This support function is only executed once so no memoizing is needed.\n\t\t\tvar ret,\n\t\t\t\tmarginDiv = div.appendChild( document.createElement( \"div\" ) );\n\n\t\t\t// Reset CSS: box-sizing; display; margin; border; padding\n\t\t\tmarginDiv.style.cssText = div.style.cssText =\n\n\t\t\t\t// Support: Android 2.3\n\t\t\t\t// Vendor-prefix box-sizing\n\t\t\t\t\"-webkit-box-sizing:content-box;box-sizing:content-box;\" +\n\t\t\t\t\"display:block;margin:0;border:0;padding:0\";\n\t\t\tmarginDiv.style.marginRight = marginDiv.style.width = \"0\";\n\t\t\tdiv.style.width = \"1px\";\n\t\t\tdocumentElement.appendChild( container );\n\n\t\t\tret = !parseFloat( window.getComputedStyle( marginDiv ).marginRight );\n\n\t\t\tdocumentElement.removeChild( container );\n\t\t\tdiv.removeChild( marginDiv );\n\n\t\t\treturn ret;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\tret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined;\n\n\t// Support: Opera 12.1x only\n\t// Fall back to style even without computed\n\t// computed is undefined for elems on document fragments\n\tif ( ( ret === \"\" || ret === undefined ) && !jQuery.contains( elem.ownerDocument, elem ) ) {\n\t\tret = jQuery.style( elem, name );\n\t}\n\n\t// Support: IE9\n\t// getPropertyValue is only needed for .css('filter') (#12537)\n\tif ( computed ) {\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// http://dev.w3.org/csswg/cssom/#resolved-values\n\t\tif ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE9-11+\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t},\n\n\tcssPrefixes = [ \"Webkit\", \"O\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style;\n\n// Return a css property mapped to a potentially vendor prefixed property\nfunction vendorPropName( name ) {\n\n\t// Shortcut for names that are not vendor prefixed\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\nfunction setPositiveNumber( elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {\n\tvar i = extra === ( isBorderBox ? \"border\" : \"content\" ) ?\n\n\t\t// If we already have the right measurement, avoid augmentation\n\t\t4 :\n\n\t\t// Otherwise initialize for horizontal or vertical properties\n\t\tname === \"width\" ? 1 : 0,\n\n\t\tval = 0;\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin, so add it if we want it\n\t\tif ( extra === \"margin\" ) {\n\t\t\tval += jQuery.css( elem, extra + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\tif ( isBorderBox ) {\n\n\t\t\t// border-box includes padding, so remove it if we want content\n\t\t\tif ( extra === \"content\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// At this point, extra isn't border nor margin, so remove border\n\t\t\tif ( extra !== \"margin\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t} else {\n\n\t\t\t// At this point, extra isn't content, so add padding\n\t\t\tval += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// At this point, extra isn't content nor padding, so add border\n\t\t\tif ( extra !== \"padding\" ) {\n\t\t\t\tval += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn val;\n}\n\nfunction getWidthOrHeight( elem, name, extra ) {\n\n\t// Start with offset property, which is equivalent to the border-box value\n\tvar valueIsBorderBox = true,\n\t\tval = name === \"width\" ? elem.offsetWidth : elem.offsetHeight,\n\t\tstyles = getStyles( elem ),\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t// Support: IE11 only\n\t// In IE 11 fullscreen elements inside of an iframe have\n\t// 100x too small dimensions (gh-1764).\n\tif ( document.msFullscreenElement && window.top !== window ) {\n\n\t\t// Support: IE11 only\n\t\t// Running getBoundingClientRect on a disconnected node\n\t\t// in IE throws an error.\n\t\tif ( elem.getClientRects().length ) {\n\t\t\tval = Math.round( elem.getBoundingClientRect()[ name ] * 100 );\n\t\t}\n\t}\n\n\t// Some non-html elements return undefined for offsetWidth, so check for null/undefined\n\t// svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285\n\t// MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668\n\tif ( val <= 0 || val == null ) {\n\n\t\t// Fall back to computed then uncomputed css if necessary\n\t\tval = curCSS( elem, name, styles );\n\t\tif ( val < 0 || val == null ) {\n\t\t\tval = elem.style[ name ];\n\t\t}\n\n\t\t// Computed unit is not pixels. Stop here and return.\n\t\tif ( rnumnonpx.test( val ) ) {\n\t\t\treturn val;\n\t\t}\n\n\t\t// Check for style in case a browser which returns unreliable values\n\t\t// for getComputedStyle silently falls back to the reliable elem.style\n\t\tvalueIsBorderBox = isBorderBox &&\n\t\t\t( support.boxSizingReliable() || val === elem.style[ name ] );\n\n\t\t// Normalize \"\", auto, and prepare for extra\n\t\tval = parseFloat( val ) || 0;\n\t}\n\n\t// Use the active box-sizing model to add/subtract irrelevant styles\n\treturn ( val +\n\t\taugmentWidthOrHeight(\n\t\t\telem,\n\t\t\tname,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles\n\t\t)\n\t) + \"px\";\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem, hidden,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tvalues[ index ] = dataPriv.get( elem, \"olddisplay\" );\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Reset the inline display of this element to learn if it is\n\t\t\t// being hidden by cascaded rules or not\n\t\t\tif ( !values[ index ] && display === \"none\" ) {\n\t\t\t\telem.style.display = \"\";\n\t\t\t}\n\n\t\t\t// Set elements which have been overridden with display: none\n\t\t\t// in a stylesheet to whatever the default browser style is\n\t\t\t// for such an element\n\t\t\tif ( elem.style.display === \"\" && isHidden( elem ) ) {\n\t\t\t\tvalues[ index ] = dataPriv.access(\n\t\t\t\t\telem,\n\t\t\t\t\t\"olddisplay\",\n\t\t\t\t\tdefaultDisplay( elem.nodeName )\n\t\t\t\t);\n\t\t\t}\n\t\t} else {\n\t\t\thidden = isHidden( elem );\n\n\t\t\tif ( display !== \"none\" || !hidden ) {\n\t\t\t\tdataPriv.set(\n\t\t\t\t\telem,\n\t\t\t\t\t\"olddisplay\",\n\t\t\t\t\thidden ? display : jQuery.css( elem, \"display\" )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of most of the elements in a second loop\n\t// to avoid the constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\t\tif ( !show || elem.style.display === \"none\" || elem.style.display === \"\" ) {\n\t\t\telem.style.display = show ? values[ index ] || \"\" : \"none\";\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"animationIterationCount\": true,\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"flexGrow\": true,\n\t\t\"flexShrink\": true,\n\t\t\"fontWeight\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {\n\t\t\"float\": \"cssFloat\"\n\t},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = jQuery.camelCase( name ),\n\t\t\tstyle = elem.style;\n\n\t\tname = jQuery.cssProps[ origName ] ||\n\t\t\t( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName );\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (#7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (#7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\tif ( type === \"number\" ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// Support: IE9-11+\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tstyle[ name ] = value;\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = jQuery.camelCase( name );\n\n\t\t// Make sure that we're working with the right name\n\t\tname = jQuery.cssProps[ origName ] ||\n\t\t\t( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName );\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( i, name ) {\n\tjQuery.cssHooks[ name ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\t\t\t\t\telem.offsetWidth === 0 ?\n\t\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\t\treturn getWidthOrHeight( elem, name, extra );\n\t\t\t\t\t\t} ) :\n\t\t\t\t\t\tgetWidthOrHeight( elem, name, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = extra && getStyles( elem ),\n\t\t\t\tsubtract = extra && augmentWidthOrHeight(\n\t\t\t\t\telem,\n\t\t\t\t\tname,\n\t\t\t\t\textra,\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\t\tstyles\n\t\t\t\t);\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ name ] = value;\n\t\t\t\tvalue = jQuery.css( elem, name );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// Support: Android 2.3\njQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn swap( elem, { \"display\": \"inline-block\" },\n\t\t\t\tcurCSS, [ elem, \"marginRight\" ] );\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( !rmargin.test( prefix ) ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( jQuery.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t},\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHidden( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 &&\n\t\t\t\t( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null ||\n\t\t\t\t\tjQuery.cssHooks[ tween.prop ] ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE9\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back Compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, timerId,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = jQuery.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4 ; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\t/* jshint validthis: true */\n\tvar prop, value, toggle, tween, hooks, oldfire, display, checkDisplay,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHidden( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Handle queue: false promises\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Height/width overflow pass\n\tif ( elem.nodeType === 1 && ( \"height\" in props || \"width\" in props ) ) {\n\n\t\t// Make sure that nothing sneaks out\n\t\t// Record all 3 overflow attributes because IE9-10 do not\n\t\t// change the overflow attribute when overflowX and\n\t\t// overflowY are set to the same value\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Set display property to inline-block for height/width\n\t\t// animations on inline elements that are having width/height animated\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\n\t\t// Test default display if display is currently \"none\"\n\t\tcheckDisplay = display === \"none\" ?\n\t\t\tdataPriv.get( elem, \"olddisplay\" ) || defaultDisplay( elem.nodeName ) : display;\n\n\t\tif ( checkDisplay === \"inline\" && jQuery.css( elem, \"float\" ) === \"none\" ) {\n\t\t\tstyle.display = \"inline-block\";\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// show/hide pass\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.exec( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// If there is dataShow left over from a stopped hide or show\n\t\t\t\t// and we are going to proceed with show, we should pretend to be hidden\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\n\t\t// Any non-fx value stops us from restoring the original display value\n\t\t} else {\n\t\t\tdisplay = undefined;\n\t\t}\n\t}\n\n\tif ( !jQuery.isEmptyObject( orig ) ) {\n\t\tif ( dataShow ) {\n\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\thidden = dataShow.hidden;\n\t\t\t}\n\t\t} else {\n\t\t\tdataShow = dataPriv.access( elem, \"fxshow\", {} );\n\t\t}\n\n\t\t// Store state if its toggle - enables .stop().toggle() to \"reverse\"\n\t\tif ( toggle ) {\n\t\t\tdataShow.hidden = !hidden;\n\t\t}\n\t\tif ( hidden ) {\n\t\t\tjQuery( elem ).show();\n\t\t} else {\n\t\t\tanim.done( function() {\n\t\t\t\tjQuery( elem ).hide();\n\t\t\t} );\n\t\t}\n\t\tanim.done( function() {\n\t\t\tvar prop;\n\n\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\tfor ( prop in orig ) {\n\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t}\n\t\t} );\n\t\tfor ( prop in orig ) {\n\t\t\ttween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\n\t\t\tif ( !( prop in dataShow ) ) {\n\t\t\t\tdataShow[ prop ] = tween.start;\n\t\t\t\tif ( hidden ) {\n\t\t\t\t\ttween.end = tween.start;\n\t\t\t\t\ttween.start = prop === \"width\" || prop === \"height\" ? 1 : 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t// If this is a noop like .hide().hide(), restore an overwritten display value\n\t} else if ( ( display === \"none\" ? defaultDisplay( elem.nodeName ) : display ) === \"inline\" ) {\n\t\tstyle.display = display;\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = jQuery.camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( jQuery.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length ; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t} else {\n\t\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length ; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length ; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( jQuery.isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tjQuery.proxy( result.stop, result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( jQuery.isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\t// attach callbacks from options\n\treturn animation.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( jQuery.isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnotwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length ; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tjQuery.isFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !jQuery.isFunction( easing ) && easing\n\t};\n\n\topt.duration = jQuery.fx.off ? 0 : typeof opt.duration === \"number\" ?\n\t\topt.duration : opt.duration in jQuery.fx.speeds ?\n\t\t\tjQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( jQuery.isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHidden ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue && type !== false ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = jQuery.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Checks the timer has not already been removed\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tif ( timer() ) {\n\t\tjQuery.fx.start();\n\t} else {\n\t\tjQuery.timers.pop();\n\t}\n};\n\njQuery.fx.interval = 13;\njQuery.fx.start = function() {\n\tif ( !timerId ) {\n\t\ttimerId = window.setInterval( jQuery.fx.tick, jQuery.fx.interval );\n\t}\n};\n\njQuery.fx.stop = function() {\n\twindow.clearInterval( timerId );\n\n\ttimerId = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\n// http://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: iOS<=5.1, Android<=4.2+\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE<=11+\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: Android<=2.3\n\t// Options inside disabled selects are incorrectly marked as disabled\n\tselect.disabled = true;\n\tsupport.optDisabled = !opt.disabled;\n\n\t// Support: IE<=11+\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// All attributes are lowercase\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\tname = name.toLowerCase();\n\t\t\thooks = jQuery.attrHooks[ name ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tjQuery.nodeName( elem, \"input\" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name, propName,\n\t\t\ti = 0,\n\t\t\tattrNames = value && value.match( rnotwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\tpropName = jQuery.propFix[ name ] || name;\n\n\t\t\t\t// Boolean attributes get special treatment (#10870)\n\t\t\t\tif ( jQuery.expr.match.bool.test( name ) ) {\n\n\t\t\t\t\t// Set corresponding property to false\n\t\t\t\t\telem[ propName ] = false;\n\t\t\t\t}\n\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle;\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ name ];\n\t\t\tattrHandle[ name ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tname.toLowerCase() :\n\t\t\t\tnull;\n\t\t\tattrHandle[ name ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\t// Use proper attribute retrieval(#12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\treturn tabindex ?\n\t\t\t\t\tparseInt( tabindex, 10 ) :\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\t\trclickable.test( elem.nodeName ) && elem.href ?\n\t\t\t\t\t\t\t0 :\n\t\t\t\t\t\t\t-1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11 only\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n\n\n\nvar rclass = /[\\t\\r\\n\\f]/g;\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( typeof value === \"string\" && value ) {\n\t\t\tclasses = value.match( rnotwhite ) || [];\n\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\t\t\t\tcur = elem.nodeType === 1 &&\n\t\t\t\t\t( \" \" + curValue + \" \" ).replace( rclass, \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = jQuery.trim( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tif ( typeof value === \"string\" && value ) {\n\t\t\tclasses = value.match( rnotwhite ) || [];\n\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 &&\n\t\t\t\t\t( \" \" + curValue + \" \" ).replace( rclass, \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = jQuery.trim( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value;\n\n\t\tif ( typeof stateVal === \"boolean\" && type === \"string\" ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar className, i, self, classNames;\n\n\t\t\tif ( type === \"string\" ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\ti = 0;\n\t\t\t\tself = jQuery( this );\n\t\t\t\tclassNames = value.match( rnotwhite ) || [];\n\n\t\t\t\twhile ( ( className = classNames[ i++ ] ) ) {\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, \"__className__\", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( \"class\",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\tdataPriv.get( this, \"__className__\" ) || \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + getClass( elem ) + \" \" ).replace( rclass, \" \" )\n\t\t\t\t\t.indexOf( className ) > -1\n\t\t\t) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\nvar rreturn = /\\r/g,\n\trspaces = /[\\x20\\t\\r\\n\\f]+/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, isFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\treturn typeof ret === \"string\" ?\n\n\t\t\t\t\t// Handle most common string cases\n\t\t\t\t\tret.replace( rreturn, \"\" ) :\n\n\t\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\t\tret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tisFunction = jQuery.isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( isFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( jQuery.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE10-11+\n\t\t\t\t\t// option.text throws exceptions (#14686, #14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tjQuery.trim( jQuery.text( elem ) ).replace( rspaces, \" \" );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\" || index < 0,\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length,\n\t\t\t\t\ti = index < 0 ?\n\t\t\t\t\t\tmax :\n\t\t\t\t\t\tone ? index : 0;\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// IE8-9 doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t( support.optDisabled ?\n\t\t\t\t\t\t\t\t!option.disabled : option.getAttribute( \"disabled\" ) === null ) &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!jQuery.nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( jQuery.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/;\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || {} )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\t\t\t\t\telem[ type ]();\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\n\t\t\t\t// Previously, `originalEvent: {}` was set here, so stopPropagation call\n\t\t\t\t// would not be triggered on donor event, since in our own\n\t\t\t\t// jQuery.event.stopPropagation function we had a check for existence of\n\t\t\t\t// originalEvent.stopPropagation method, so, consequently it would be a noop.\n\t\t\t\t//\n\t\t\t\t// But now, this \"simulate\" function is used only for events\n\t\t\t\t// for which stopPropagation() is noop, so there is no need for that anymore.\n\t\t\t\t//\n\t\t\t\t// For the 1.x branch though, guard for \"click\" and \"submit\"\n\t\t\t\t// events is still used, but was moved to jQuery.event.stopPropagation function\n\t\t\t\t// because `originalEvent` should point to the original event for the constancy\n\t\t\t\t// with other events and for more focused logic\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\n\t\tif ( e.isDefaultPrevented() ) {\n\t\t\tevent.preventDefault();\n\t\t}\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\njQuery.each( ( \"blur focus focusin focusout load resize scroll unload click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup error contextmenu\" ).split( \" \" ),\n\tfunction( i, name ) {\n\n\t// Handle event binding\n\tjQuery.fn[ name ] = function( data, fn ) {\n\t\treturn arguments.length > 0 ?\n\t\t\tthis.on( name, null, data, fn ) :\n\t\t\tthis.trigger( name );\n\t};\n} );\n\njQuery.fn.extend( {\n\thover: function( fnOver, fnOut ) {\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t}\n} );\n\n\n\n\nsupport.focusin = \"onfocusin\" in window;\n\n\n// Support: Firefox\n// Firefox doesn't have focus(in | out) events\n// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n//\n// Support: Chrome, Safari\n// focus(in | out) events fire after focus & blur events,\n// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n// Related ticket - https://code.google.com/p/chromium/issues/detail?id=449857\nif ( !support.focusin ) {\n\tjQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );\n\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.access( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tdataPriv.remove( doc, fix );\n\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.access( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t} );\n}\nvar location = window.location;\n\nvar nonce = jQuery.now();\n\nvar rquery = ( /\\?/ );\n\n\n\n// Support: Android 2.3\n// Workaround failure to string-cast null input\njQuery.parseJSON = function( data ) {\n\treturn JSON.parse( data + \"\" );\n};\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE9\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {\n\t\txml = undefined;\n\t}\n\n\tif ( !xml || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\tjQuery.error( \"Invalid XML: \" + data );\n\t}\n\treturn xml;\n};\n\n\nvar\n\trhash = /#.*$/,\n\trts = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t * - BEFORE asking for a transport\n\t * - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document.createElement( \"a\" );\n\toriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || [];\n\n\t\tif ( jQuery.isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": jQuery.parseJSON,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// The jqXHR state\n\t\t\tstate = 0,\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( state === 2 ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match;\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn state === 2 ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tvar lname = name.toLowerCase();\n\t\t\t\t\tif ( !state ) {\n\t\t\t\t\t\tname = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( !state ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( state < 2 ) {\n\t\t\t\t\t\t\tfor ( code in map ) {\n\n\t\t\t\t\t\t\t\t// Lazy-add the new callback in a way that preserves old ones\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR ).complete = completeDeferred.add;\n\t\tjqXHR.success = jqXHR.done;\n\t\tjqXHR.error = jqXHR.fail;\n\n\t\t// Remove hash character (#7531: and string promotion)\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (#10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" ).replace( rhash, \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket #12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = jQuery.trim( s.dataType || \"*\" ).toLowerCase().match( rnotwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document.createElement( \"a\" );\n\n\t\t\t// Support: IE8-11+\n\t\t\t// IE throws exception if url is malformed, e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE8-11+\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( state === 2 ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\tcacheURL = s.url;\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// If data is available, append data to url\n\t\t\tif ( s.data ) {\n\t\t\t\tcacheURL = ( s.url += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data );\n\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add anti-cache in url if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\ts.url = rts.test( cacheURL ) ?\n\n\t\t\t\t\t// If there is already a '_' parameter, set its value\n\t\t\t\t\tcacheURL.replace( rts, \"$1_=\" + nonce++ ) :\n\n\t\t\t\t\t// Otherwise add one to the end\n\t\t\t\t\tcacheURL + ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + nonce++;\n\t\t\t}\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tfor ( i in { success: 1, error: 1, complete: 1 } ) {\n\t\t\tjqXHR[ i ]( s[ i ] );\n\t\t}\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( state === 2 ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tstate = 1;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Propagate exception as error if not done\n\t\t\t\tif ( state < 2 ) {\n\t\t\t\t\tdone( -1, e );\n\n\t\t\t\t// Simply rethrow otherwise\n\t\t\t\t} else {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Called once\n\t\t\tif ( state === 2 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// State is \"done\" now\n\t\t\tstate = 2;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( jQuery.isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\n\njQuery._evalUrl = function( url ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (#11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tasync: false,\n\t\tglobal: false,\n\t\t\"throws\": true\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapAll( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( this[ 0 ] ) {\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar isFunction = jQuery.isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function() {\n\t\treturn this.parent().each( function() {\n\t\t\tif ( !jQuery.nodeName( this, \"body\" ) ) {\n\t\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t\t}\n\t\t} ).end();\n\t}\n} );\n\n\njQuery.expr.filters.hidden = function( elem ) {\n\treturn !jQuery.expr.filters.visible( elem );\n};\njQuery.expr.filters.visible = function( elem ) {\n\n\t// Support: Opera <= 12.12\n\t// Opera reports offsetWidths and offsetHeights less than zero on some elements\n\t// Use OR instead of AND as the element is not visible if either is true\n\t// See tickets #10406 and #13132\n\treturn elem.offsetWidth > 0 || elem.offsetHeight > 0 || elem.getClientRects().length > 0;\n};\n\n\n\n\nvar r20 = /%20/g,\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( jQuery.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && jQuery.type( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, value ) {\n\n\t\t\t// If value is a function, invoke it and return its value\n\t\t\tvalue = jQuery.isFunction( value ) ? value() : ( value == null ? \"\" : value );\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" + encodeURIComponent( value );\n\t\t};\n\n\t// Set traditional to true for jQuery <= 1.3.2 behavior.\n\tif ( traditional === undefined ) {\n\t\ttraditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" ).replace( r20, \"+\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} )\n\t\t.filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} )\n\t\t.map( function( i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\treturn val == null ?\n\t\t\t\tnull :\n\t\t\t\tjQuery.isArray( val ) ?\n\t\t\t\t\tjQuery.map( val, function( val ) {\n\t\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t\t} ) :\n\t\t\t\t\t{ name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE9\n\t\t// #1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback, errorCallback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\txhr.open(\n\t\t\t\t\toptions.type,\n\t\t\t\t\toptions.url,\n\t\t\t\t\toptions.async,\n\t\t\t\t\toptions.username,\n\t\t\t\t\toptions.password\n\t\t\t\t);\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\n\t\t\t\t\t\t\t\t// Support: IE9\n\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\tif ( typeof xhr.status !== \"number\" ) {\n\t\t\t\t\t\t\t\t\tcomplete( 0, \"error\" );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see #8605, #14207\n\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t// Support: IE9 only\n\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) !== \"text\" ||\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\terrorCallback = xhr.onerror = callback( \"error\" );\n\n\t\t\t\t// Support: IE9\n\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t// to handle uncaught aborts\n\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t} else {\n\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = callback( \"abort\" );\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// #14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\n\t// This transport only deals with cross domain requests\n\tif ( s.crossDomain ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"<script>\" ).prop( {\n\t\t\t\t\tcharset: s.scriptCharset,\n\t\t\t\t\tsrc: s.url\n\t\t\t\t} ).on(\n\t\t\t\t\t\"load error\",\n\t\t\t\t\tcallback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === \"error\" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\tdocument.head.appendChild( script[ 0 ] );\n\t\t\t},\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup( {\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n} );\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t( s.contentType || \"\" )\n\t\t\t\t\t.indexOf( \"application/x-www-form-urlencoded\" ) === 0 &&\n\t\t\t\trjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[ \"script json\" ] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// Force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always( function() {\n\n\t\t\t// If previous value didn't exist - remove it\n\t\t\tif ( overwritten === undefined ) {\n\t\t\t\tjQuery( window ).removeProp( callbackName );\n\n\t\t\t// Otherwise restore preexisting value\n\t\t\t} else {\n\t\t\t\twindow[ callbackName ] = overwritten;\n\t\t\t}\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\n\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// Save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && jQuery.isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t} );\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n} );\n\n\n\n\n// Argument \"data\" should be string of html\n// context (optional): If specified, the fragment will be created in this context,\n// defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\tcontext = context || document;\n\n\tvar parsed = rsingleTag.exec( data ),\n\t\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[ 1 ] ) ];\n\t}\n\n\tparsed = buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\n// Keep a copy of the old load method\nvar _load = jQuery.fn.load;\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tif ( typeof url !== \"string\" && _load ) {\n\t\treturn _load.apply( this, arguments );\n\t}\n\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf( \" \" );\n\n\tif ( off > -1 ) {\n\t\tselector = jQuery.trim( url.slice( off ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( jQuery.isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax( {\n\t\t\turl: url,\n\n\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t// Make value of this field explicit since\n\t\t\t// user can override it through ajaxSetup method\n\t\t\ttype: type || \"GET\",\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t} ).done( function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery( \"<div>\" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t// but they are ignored because response was set above.\n\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t} ).always( callback && function( jqXHR, status ) {\n\t\t\tself.each( function() {\n\t\t\t\tcallback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t} );\n\t\t} );\n\t}\n\n\treturn this;\n};\n\n\n\n\n// Attach a bunch of functions for handling common AJAX events\njQuery.each( [\n\t\"ajaxStart\",\n\t\"ajaxStop\",\n\t\"ajaxComplete\",\n\t\"ajaxError\",\n\t\"ajaxSuccess\",\n\t\"ajaxSend\"\n], function( i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n} );\n\n\n\n\njQuery.expr.filters.animated = function( elem ) {\n\treturn jQuery.grep( jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t} ).length;\n};\n\n\n\n\n/**\n * Gets a window from an element\n */\nfunction getWindow( elem ) {\n\treturn jQuery.isWindow( elem ) ? elem : elem.nodeType === 9 && elem.defaultView;\n}\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// Set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf( \"auto\" ) > -1;\n\n\t\t// Need to be able to calculate position if either\n\t\t// top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( jQuery.isFunction( options ) ) {\n\n\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\toptions = options.call( elem, i, jQuery.extend( {}, curOffset ) );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend( {\n\toffset: function( options ) {\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each( function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t} );\n\t\t}\n\n\t\tvar docElem, win,\n\t\t\telem = this[ 0 ],\n\t\t\tbox = { top: 0, left: 0 },\n\t\t\tdoc = elem && elem.ownerDocument;\n\n\t\tif ( !doc ) {\n\t\t\treturn;\n\t\t}\n\n\t\tdocElem = doc.documentElement;\n\n\t\t// Make sure it's not a disconnected DOM node\n\t\tif ( !jQuery.contains( docElem, elem ) ) {\n\t\t\treturn box;\n\t\t}\n\n\t\tbox = elem.getBoundingClientRect();\n\t\twin = getWindow( doc );\n\t\treturn {\n\t\t\ttop: box.top + win.pageYOffset - docElem.clientTop,\n\t\t\tleft: box.left + win.pageXOffset - docElem.clientLeft\n\t\t};\n\t},\n\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// Fixed elements are offset from window (parentOffset = {top:0, left: 0},\n\t\t// because it is its only offset parent\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\n\t\t\t// Assume getBoundingClientRect is there when computed position is fixed\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\n\t\t\t// Get *real* offsetParent\n\t\t\toffsetParent = this.offsetParent();\n\n\t\t\t// Get correct offsets\n\t\t\toffset = this.offset();\n\t\t\tif ( !jQuery.nodeName( offsetParent[ 0 ], \"html\" ) ) {\n\t\t\t\tparentOffset = offsetParent.offset();\n\t\t\t}\n\n\t\t\t// Add offsetParent borders\n\t\t\tparentOffset.top += jQuery.css( offsetParent[ 0 ], \"borderTopWidth\", true );\n\t\t\tparentOffset.left += jQuery.css( offsetParent[ 0 ], \"borderLeftWidth\", true );\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\t// This method will return documentElement in the following cases:\n\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t// documentElement of the parent window\n\t// 2) For the hidden or detached element\n\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t//\n\t// but those exceptions were never presented as a real life use-cases\n\t// and might be considered as more preferable results.\n\t//\n\t// This logic, however, is not guaranteed and can change at any point in the future\n\toffsetParent: function() {\n\t\treturn this.map( function() {\n\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\twhile ( offsetParent && jQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || documentElement;\n\t\t} );\n\t}\n} );\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = \"pageYOffset\" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\t\t\tvar win = getWindow( elem );\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length );\n\t};\n} );\n\n// Support: Safari<7-8+, Chrome<37-44+\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// Blink bug: https://code.google.com/p/chromium/issues/detail?id=229280\n// getComputedStyle returns percent when specified for top/left/bottom/right;\n// rather than make the css module depend on the offset module, just check for it here\njQuery.each( [ \"top\", \"left\" ], function( i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\n\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n} );\n\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( { padding: \"inner\" + name, content: type, \"\": \"outer\" + name },\n\t\tfunction( defaultExtra, funcName ) {\n\n\t\t// Margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( jQuery.isWindow( elem ) ) {\n\n\t\t\t\t\t// As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there\n\t\t\t\t\t// isn't a whole lot we can do. See pull request at this URL for discussion:\n\t\t\t\t\t// https://github.com/jquery/jquery/pull/764\n\t\t\t\t\treturn elem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable, null );\n\t\t};\n\t} );\n} );\n\n\njQuery.fn.extend( {\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ?\n\t\t\tthis.off( selector, \"**\" ) :\n\t\t\tthis.off( types, selector || \"**\", fn );\n\t},\n\tsize: function() {\n\t\treturn this.length;\n\t}\n} );\n\njQuery.fn.andSelf = jQuery.fn.addBack;\n\n\n\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t} );\n}\n\n\n\nvar\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in AMD\n// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (#13566)\nif ( !noGlobal ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\nreturn jQuery;\n}));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/jquery/dist/jquery.js\n ** module id = 3\n ** module chunks = 1 2 3 5 6\n **/","/**\r\n * Created by gavorhes on 12/10/2015.\r\n */\r\n\r\n\r\n/**\r\n * create a namespace on the gv object\r\n * @param {string} namespace to create\r\n * @returns {object} object representing the namespace\r\n */\r\nfunction provide(namespace){\r\n \"use strict\";\r\n if (typeof window['gv'] == 'undefined'){\r\n window['gv'] = {};\r\n }\r\n\r\n let parts = namespace.split('.');\r\n let nameSpace = window['gv'];\r\n\r\n for (let i=0; i< parts.length; i++){\r\n let newObject = nameSpace[parts[i]];\r\n\r\n if (typeof newObject == 'undefined'){\r\n nameSpace[parts[i]] = {};\r\n }\r\n\r\n nameSpace = nameSpace[parts[i]];\r\n }\r\n\r\n return nameSpace;\r\n}\r\n\r\nprovide('util');\r\nwindow['gv'].util.provide = provide;\r\n\r\nexport default provide;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/util/provide.ts\n **/","/**\r\n * Created by gavorhes on 12/10/2015.\r\n */\r\n\r\n\r\nimport provide from '../util/provide';\r\nlet nm = provide('collections');\r\nconst $ = require('jquery');\r\n\r\nexport interface TipSliderConfig {\r\n label: string;\r\n yearOptions: Array<{column: string, label: string}>\r\n}\r\n\r\nexport interface TipPresetConfig {\r\n label: string;\r\n presets: Array<{column: string, value: number}>\r\n}\r\n\r\nexport interface ChangeResponse{\r\n paramWeights: Object;\r\n region: string;\r\n mmVersion: string;\r\n}\r\n\r\nexport interface ChangeCallback{\r\n (chg: ChangeResponse): any\r\n}\r\n\r\n\r\nclass TipPresets implements TipPresetConfig {\r\n label: string;\r\n presets: Array<{column: string, value: number}>;\r\n domId: string;\r\n\r\n constructor(conf: TipPresetConfig) {\r\n this.label = conf.label;\r\n this.presets = conf.presets;\r\n this.domId = this.label.replace(/ /g, '').toLowerCase();\r\n\r\n let theSum = 0;\r\n\r\n for (let pr of this.presets){\r\n theSum += pr.value;\r\n }\r\n\r\n if (theSum != 100){\r\n throw 'preset sum does note equal 100';\r\n }\r\n }\r\n}\r\n\r\n\r\nclass _Slider {\r\n _min: number;\r\n _max: number;\r\n _locked: boolean;\r\n atMin: boolean;\r\n atMax: boolean;\r\n _weightDefault: number;\r\n _weight: number;\r\n html: string;\r\n domId: string;\r\n name: string;\r\n\r\n labelLow: JQuery;\r\n labelHigh: JQuery;\r\n labelVal: JQuery;\r\n slider: JQuery;\r\n selectionBox: JQuery;\r\n chk: JQuery;\r\n\r\n selectedParam: any;\r\n selectedParamDefault: any;\r\n _dropdownSelection: string;\r\n\r\n /**\r\n * Slider constructor\r\n * @param sliderConfig - the configuration\r\n\r\n */\r\n constructor(sliderConfig: TipSliderConfig) {\r\n this._dropdownSelection = null;\r\n this._weight = null;\r\n this.name = sliderConfig.label;\r\n this.domId = this.name.toLowerCase().replace(/ /g, '-');\r\n\r\n this._locked = false;\r\n\r\n this._min = 0.0;\r\n this._max = 100;\r\n\r\n this.labelLow = null;\r\n this.labelHigh = null;\r\n this.labelVal = null;\r\n this.slider = null;\r\n this.chk = null;\r\n\r\n this.atMin = false;\r\n this.atMax = false;\r\n\r\n\r\n let sel = `<select class=\"${sliderConfig.yearOptions.length == 1 ? 'hidden-select' : 'show-select'}\" id=\"${this.domId}_chg\">`;\r\n\r\n for (let i = 0; i < sliderConfig.yearOptions.length; i++) {\r\n let itm = sliderConfig.yearOptions[i];\r\n sel += `<option value=\"${itm.column}\">${itm.label}</option>`;\r\n }\r\n sel += '</select>';\r\n\r\n this.selectedParamDefault = this.selectedParam;\r\n\r\n this.html = '<div class=\"slider-div\">' +\r\n `<label for=\"${this.domId}_chk\" class=\"slider-label\">${this.name}</label>` +\r\n sel + `<br>` +\r\n `<input id=\"${this.domId}_chk\" type=\"checkbox\" title=\"Lock/Unlock Slider\">` +\r\n `<label id=\"${this.domId}_low\" class=\"low-high\"></label>` +\r\n `<input id=\"${this.domId}\" type=\"range\" value=\"50\" min=\"0\" max=\"100\" step=\"0.1\">` +\r\n `<label id=\"${this.domId}_high\" class=\"low-high\"></label>` +\r\n `<label id=\"${this.domId}_lbl\" for=\"${this.domId}\" class=\"percent-label\"></label></div>`;\r\n }\r\n\r\n /**\r\n * add html to dom\r\n * @param {jQuery} $container - container element\r\n */\r\n addToDom($container) {\r\n $container.append(this.html);\r\n this.labelLow = $(`#${this.domId}_low`);\r\n this.labelHigh = $(`#${this.domId}_high`);\r\n this.labelVal = $(`#${this.domId}_lbl`);\r\n this.slider = $(`#${this.domId}`);\r\n this.selectionBox = $(`#${this.domId}_chg`);\r\n this.chk = $(`#${this.domId}_chk`);\r\n }\r\n\r\n /**\r\n * increment the slider\r\n * @param {number} delta change delta\r\n * @returns {number} the remainder not able to be allocated to this slider\r\n */\r\n increment(delta) {\r\n let remainder = 0;\r\n delta = Number(delta.toFixed(1));\r\n\r\n this._weight += delta;\r\n if (this._weight < this._min) {\r\n remainder = this._min - this._weight;\r\n this._weight = this._min;\r\n this.atMin = true;\r\n } else if (this._weight > this._max) {\r\n remainder = this._max - this._weight;\r\n this._weight = this._max;\r\n this.atMax = true;\r\n } else {\r\n this.atMin = false;\r\n this.atMax = false;\r\n }\r\n\r\n this.slider.val(this._weight.toFixed(1));\r\n this.labelVal.html(this._weight.toFixed(1) + '%');\r\n\r\n return remainder;\r\n }\r\n\r\n /**\r\n * set the value and drop down\r\n * @param {number} newVal the new value\r\n * @param {string} selectedParam the selected parameter\r\n */\r\n setValAndDropDown(newVal: number, selectedParam: string) {\r\n this.min = 0;\r\n this.max = 100;\r\n this.weight = newVal;\r\n this.slider.val(newVal.toFixed(1));\r\n this.selectionBox.val(selectedParam);\r\n this.selectedParam = selectedParam;\r\n this.locked = true;\r\n }\r\n\r\n /**\r\n *\r\n * @returns {boolean} if locked\r\n */\r\n get locked() {\r\n return this._locked;\r\n }\r\n\r\n /**\r\n *\r\n * @param {boolean} val if locked\r\n */\r\n set locked(val) {\r\n this._locked = val;\r\n this.slider.prop('disabled', this._locked);\r\n this.selectionBox.prop('disabled', this._locked);\r\n this.chk.prop('checked', !this._locked);\r\n }\r\n\r\n /**\r\n *\r\n * @returns {number} the minimum\r\n */\r\n get min() {\r\n return this._min;\r\n }\r\n\r\n /**\r\n *\r\n * @param {number} newVal new minimum\r\n */\r\n set min(newVal) {\r\n this._min = Number(newVal.toFixed(1));\r\n if (this._min < 0) {\r\n this._min = 0;\r\n }\r\n this.labelLow.html(this._min.toFixed(1));\r\n this.slider.attr('min', this._min.toFixed(1));\r\n this.atMin = this._weight == this._min;\r\n }\r\n\r\n /**\r\n *\r\n * @returns {number} the maximum\r\n */\r\n get max() {\r\n return this._max;\r\n }\r\n\r\n /**\r\n *\r\n * @param {number} newVal the maximum\r\n */\r\n set max(newVal) {\r\n this._max = Number(newVal.toFixed(1));\r\n if (this._max > 100) {\r\n this._max = 100.0;\r\n }\r\n this.labelHigh.html(this._max.toFixed(1));\r\n this.slider.attr('max', this._max.toFixed(1));\r\n this.atMax = this._weight == this._max;\r\n }\r\n\r\n /**\r\n *\r\n * @returns {number} the weight\r\n */\r\n get weight() {\r\n return this._weight;\r\n }\r\n\r\n /**\r\n *\r\n * @param {number} newVal the weight\r\n */\r\n set weight(newVal) {\r\n this._weight = Number(newVal.toFixed(1));\r\n this.labelVal.html(this._weight.toFixed(1) + '%');\r\n if (this._weight <= this._min) {\r\n this.atMin = true;\r\n this.atMax = false;\r\n } else if (this._weight >= this._max) {\r\n this.atMin = false;\r\n this.atMax = true;\r\n } else {\r\n this.atMin = false;\r\n this.atMax = false;\r\n }\r\n }\r\n}\r\n\r\nnm._Slider = _Slider;\r\n\r\n\r\n/**\r\n * class to keep track of the sliders\r\n */\r\nexport class TipSliders {\r\n $container: JQuery;\r\n reservedPercent: number;\r\n total: number;\r\n lockedCount: number;\r\n notLockedCount: number;\r\n private _sliderList: Array<_Slider>;\r\n private _sliderLookup: {[s: string]: _Slider};\r\n private resetting: boolean;\r\n private _changedCallback: ChangeCallback;\r\n\r\n private _lockedList: Array<_Slider>;\r\n private _inRangeList: Array<_Slider>;\r\n private _atMinList: Array<_Slider>;\r\n private _atMaxList: Array<_Slider>;\r\n\r\n private _presetArray: Array<TipPresets>;\r\n private _presetLookup: {[s: string]: TipPresets};\r\n\r\n private _$presetSelector: JQuery;\r\n private _$regionSelector: JQuery;\r\n private _$versionSelector: JQuery;\r\n\r\n /**\r\n *\r\n * @param sliderConfigs\r\n * @param presetConfig\r\n * @param divId\r\n * @param presetSelector\r\n * @param regionSelector\r\n * @param versionSelector\r\n * @param chgCallback\r\n */\r\n constructor(sliderConfigs: Array<TipSliderConfig>, presetConfig: Array<TipPresetConfig>,\r\n divId: string, presetSelector: JQuery, regionSelector: JQuery, versionSelector: JQuery,\r\n chgCallback?: ChangeCallback) {\r\n\r\n this.resetting = false;\r\n this.reservedPercent = 0.0;\r\n this.$container = $('#' + divId);\r\n this.$container.addClass('slider-container');\r\n\r\n this._changedCallback = typeof chgCallback == 'function' ? chgCallback : () => {};\r\n\r\n this._$presetSelector = presetSelector;\r\n this._$regionSelector = regionSelector;\r\n this._$versionSelector = versionSelector;\r\n\r\n this._sliderList = [];\r\n this._sliderLookup = {};\r\n\r\n for (let i = 0; i < sliderConfigs.length; i++) {\r\n let sld = new _Slider(sliderConfigs[i]);\r\n this._sliderList.push(sld);\r\n this._sliderLookup[sld.domId] = sld;\r\n sld.addToDom(this.$container);\r\n }\r\n\r\n this._presetArray = [];\r\n this._presetLookup = {};\r\n\r\n for (let i = 0; i < presetConfig.length; i++) {\r\n let preset = new TipPresets(presetConfig[i]);\r\n\r\n let idx = (i + 1).toFixed();\r\n\r\n this._presetLookup[idx] = preset;\r\n this._presetArray.push(preset);\r\n this._$presetSelector.append(`<option value=\"${idx}\">${preset.label}</option>`);\r\n }\r\n\r\n\r\n this._lockedList = [];\r\n this._inRangeList = [];\r\n this._atMinList = [];\r\n this._atMaxList = [];\r\n\r\n this.lockedCount = 10;\r\n this.notLockedCount = 0;\r\n\r\n this._splitSliderArray();\r\n\r\n\r\n this._$presetSelector.change(() => {\r\n this.setPresetValues();\r\n this._runChangedCallback();\r\n });\r\n\r\n this._$regionSelector.change(() => {\r\n this._runChangedCallback();\r\n });\r\n\r\n this._$versionSelector.change(() => {\r\n this._runChangedCallback();\r\n });\r\n\r\n this._$presetSelector.trigger('change');\r\n\r\n this._addEventListeners();\r\n }\r\n\r\n _runChangedCallback(){\r\n this._changedCallback(this.paramWeightsRegionVersion);\r\n }\r\n\r\n get changedCallback(): ChangeCallback{\r\n return this._changedCallback\r\n }\r\n\r\n set changedCallback(chg: ChangeCallback){\r\n this._changedCallback = chg;\r\n this._runChangedCallback();\r\n }\r\n\r\n setPresetValues() {\r\n let thePreset = this._presetLookup[this._$presetSelector.val()];\r\n\r\n for (let i = 0; i < thePreset.presets.length; i++) {\r\n let presetValues = thePreset.presets[i];\r\n let theSlider = this._sliderList[i];\r\n\r\n theSlider.locked = true;\r\n theSlider.setValAndDropDown(presetValues.value, presetValues.column);\r\n }\r\n }\r\n\r\n /**\r\n * split array into subarrays holding the sliders\r\n * @private\r\n */\r\n _splitSliderArray() {\r\n this._lockedList = [];\r\n this._inRangeList = [];\r\n this._atMinList = [];\r\n this._atMaxList = [];\r\n\r\n for (let i = 0; i < this._sliderList.length; i++) {\r\n let sld = this._sliderList[i];\r\n\r\n if (sld.locked) {\r\n this._lockedList.push(sld);\r\n } else if (sld.atMin) {\r\n this._atMinList.push(sld);\r\n } else if (sld.atMax) {\r\n this._atMaxList.push(sld);\r\n } else {\r\n this._inRangeList.push(sld);\r\n }\r\n }\r\n this.lockedCount = this._lockedList.length;\r\n this.notLockedCount = this._sliderList.length - this.lockedCount;\r\n }\r\n\r\n /**\r\n * handle remainder, recursive to take care of min max overshoots\r\n * @param {number} remain the remainder\r\n * @param {string} skipDomId - this dom id\r\n * @private\r\n */\r\n _handleRemainder(remain, skipDomId) {\r\n\r\n remain = Number(remain.toFixed(1));\r\n if (remain == 0) {\r\n return;\r\n }\r\n\r\n this._splitSliderArray();\r\n\r\n let canChangeArray = [];\r\n for (let i = 0; i < this._inRangeList.length; i++) {\r\n let sld = this._inRangeList[i];\r\n if (sld.domId == skipDomId) {\r\n continue;\r\n }\r\n canChangeArray.push(sld);\r\n }\r\n\r\n if (remain > 0) {\r\n for (let i = 0; i < this._atMaxList.length; i++) {\r\n let sld = this._atMaxList[i];\r\n if (sld.domId == skipDomId) {\r\n continue;\r\n }\r\n canChangeArray.push(sld);\r\n }\r\n } else {\r\n for (let i = 0; i < this._atMinList.length; i++) {\r\n let sld = this._atMinList[i];\r\n if (sld.domId == skipDomId) {\r\n continue;\r\n }\r\n canChangeArray.push(sld);\r\n }\r\n }\r\n\r\n if (canChangeArray.length == 0) {\r\n return;\r\n }\r\n\r\n let inc = -1 * Number((remain / canChangeArray.length).toFixed(1));\r\n\r\n let newRemainder = 0;\r\n for (let i = 0; i < canChangeArray.length; i++) {\r\n newRemainder += canChangeArray[i].increment(inc);\r\n }\r\n\r\n this._handleRemainder(newRemainder, skipDomId);\r\n }\r\n\r\n /**\r\n *\r\n * @param {object} keyValList key and value list\r\n */\r\n setValues(keyValList) {\r\n this.resetting = true;\r\n for (let k in keyValList) {\r\n if (keyValList.hasOwnProperty(k)) {\r\n this._sliderLookup[k].setValAndDropDown(keyValList[k][0], keyValList[k][1]);\r\n }\r\n }\r\n this.resetting = false;\r\n }\r\n\r\n /**\r\n * get the weight sum\r\n * @returns {number} the weight sum\r\n */\r\n getSum() {\r\n let total = 0;\r\n for (let i = 0; i < this._sliderList.length; i++) {\r\n let sld = this._sliderList[i];\r\n total += Number(sld.weight.toFixed(1));\r\n }\r\n\r\n return total;\r\n }\r\n\r\n /**\r\n * get the parameter weights\r\n * @returns {object} lookup with parameter weights\r\n */\r\n getParams() {\r\n let paramWeights = {};\r\n for (let i = 0; i < this._sliderList.length; i++) {\r\n let sld = this._sliderList[i];\r\n paramWeights[sld.selectedParam] = Number(sld.weight.toFixed(1));\r\n }\r\n\r\n return paramWeights;\r\n }\r\n\r\n _addEventListeners() {\r\n let ___this = this;\r\n\r\n\r\n //change function\r\n this.$container.find('input[type=\"range\"]').change(function () {\r\n if (___this.resetting) {\r\n return;\r\n }\r\n\r\n let $this = $(this);\r\n let domId = this['id'];\r\n let sldr = ___this._sliderLookup[domId];\r\n\r\n let newValue = parseFloat($this.val());\r\n\r\n let oldValue = sldr.weight;\r\n let diff = newValue - oldValue;\r\n diff = Number(diff.toFixed(1));\r\n\r\n sldr.weight = Number(newValue.toFixed(1));\r\n\r\n ___this._handleRemainder(diff, domId);\r\n\r\n //cleanup, make sure the sum is still 100\r\n let sum = Number(___this.getSum().toFixed(1));\r\n\r\n if (sum > 100) {\r\n loop1:\r\n while (true) {\r\n for (let i = 0; i < ___this._sliderList.length; i++) {\r\n let sld = ___this._sliderList[i];\r\n if (sld.domId == domId || sld.locked || sld.atMin) {\r\n continue;\r\n }\r\n sld.increment(-0.1);\r\n sum -= 0.1;\r\n if (sum.toFixed(1) == '100.0') {\r\n break loop1;\r\n }\r\n }\r\n }\r\n } else if (sum < 100) {\r\n loop1:\r\n while (true) {\r\n for (let i = 0; i < ___this._sliderList.length; i++) {\r\n let sld = ___this._sliderList[i];\r\n if (sld.domId == domId || sld.locked || sld.atMax) {\r\n continue;\r\n }\r\n sld.increment(0.1);\r\n sum += 0.1;\r\n if (sum.toFixed(1) == '100.0') {\r\n break loop1;\r\n }\r\n }\r\n }\r\n }\r\n\r\n ___this._$presetSelector.val('0');\r\n ___this._runChangedCallback();\r\n }\r\n );\r\n\r\n //update the selected parameter when the selection is changed\r\n $('.show-select').change(function () {\r\n if (___this.resetting) {\r\n return;\r\n }\r\n ___this._sliderLookup[this['id'].replace('_chg', '')].selectedParam = $(this).val();\r\n\r\n ___this._$presetSelector.val('0');\r\n\r\n ___this._runChangedCallback();\r\n\r\n });\r\n\r\n //lock the slider and update the reserved percent\r\n this.$container.find('input[type=\"checkbox\"]').change(function () {\r\n let domEl = this;\r\n\r\n ___this._sliderLookup[domEl.id.replace('_chk', '')].locked = !domEl.checked;\r\n ___this.reservedPercent = 0.0;\r\n ___this.notLockedCount = 0;\r\n\r\n let notLockedSliders = [];\r\n\r\n for (let i = 0; i < ___this._sliderList.length; i++) {\r\n let sld = ___this._sliderList[i];\r\n if (sld.locked) {\r\n ___this.reservedPercent += sld.weight;\r\n continue;\r\n }\r\n notLockedSliders.push(sld);\r\n ___this.notLockedCount++;\r\n }\r\n\r\n for (let i = 0; i < ___this._sliderList.length; i++) {\r\n let sld = ___this._sliderList[i];\r\n if (sld.locked) {\r\n continue;\r\n }\r\n sld.max = 100 - ___this.reservedPercent;\r\n }\r\n\r\n if (notLockedSliders.length == 1) {\r\n notLockedSliders[0].min = notLockedSliders[0].weight;\r\n } else {\r\n for (let i = 0; i < notLockedSliders.length; i++) {\r\n notLockedSliders[i].min = 0;\r\n }\r\n }\r\n });\r\n\r\n }\r\n\r\n get paramWeightsRegionVersion(): ChangeResponse{\r\n return {paramWeights: this.getParams(),\r\n region: this._$regionSelector.val() as string, mmVersion: this._$versionSelector.val() as string}\r\n }\r\n}\r\n\r\nnm.Sliders = TipSliders;\r\nexport default TipSliders;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/collections/Sliders.ts\n **/"],"sourceRoot":""} \ No newline at end of file